cpdf-2.8.1/0000775000175000017500000000000014771516640011131 5ustar johnjohncpdf-2.8.1/cpdfpad.mli0000664000175000017500000000050014771516640013230 0ustar johnjohn(** Padding *) (** Put blank pages before the given page numbers *) val padbefore : ?padwith:Pdf.t -> int list -> Pdf.t -> Pdf.t (** Put blank pages after the given page numbers *) val padafter : ?padwith:Pdf.t -> int list -> Pdf.t -> Pdf.t (** Pad to a multiple of n pages *) val padmultiple : int -> Pdf.t -> Pdf.t cpdf-2.8.1/Changes0000664000175000017500000002714614771516640012436 0ustar johnjohn2.8.1 (April 2025) New features: * -remove-struct-tree removes whole structure tree * -mark-as-artifact marks a whole file as an artifact Extended features: o -obj JSON output * -obj/-obj-json can follow a chain from an object number * -obj/-obj-json can explore through arrays and name/number trees * -print-dict-entry, -remove-dict-entry and -replace-dict-entry can follow a chain from each found dictionary entry * Much more of the PDF/UA Matterhorn verification suite implemented * PDF/UA verifier now returns extra information with most failures * Font lister now returns the font itself o Allow %objnum in output name for -extract-images * -show-boxes, -trim-marks, -table-of-contents, -add-text -add-rectangle, -impose, -twoup, -twoup-stack now preserve PDF/UA and PDF/UA-2 compatibility * Preserve PDF/UA and PDF/UA-2 when drawing on existing PDF * Preserve PDF/UA and PDF/UA-2 with -stamp-on and -combine-pages o Allow -scale-stamp-to-fit for -combine-pages * Allow -underneath for -combine-pages * Preserve roundtripping of names destinations / actions * -preserve-actions allows PDF/UA-2 style roundtripping of outlines Fixes: o Harden auto-compression against malformed streams o Add backup JPEG dimensions method in Cpdfimage o Correct object stream behaviour when splitting o Fix margin calculation for -table-of-contents * = Supported by a grant from NLnet 2.8 (December 2024) New features: o New -center-to-fit centres pages on a given paper size o New -jpeg-to-jpeg-scale and -jpeg-to-jpeg-dpi o Rasterize PDFs by calling out to GhostScript o Extract pages as PNG/JPEG by calling out to GhostScript o Replace stream content with -replace-stream Extended features: o Expand page characteristics to cover Art, Trim, Bleed o Add Piece Info to -composition[-json] o Add @b@ for trimming bookmark text to given length o Allow bold, italic, colours for JSON bookmarks o Show OpenAction in -info o Show more form information in -info o Allow JSON / PDF syntax in dict processing and object exploration o Show %Bookmark text when stamping text o Change units for -info[-json] and -page-info[-json] o Optionally add dot leaders to tables of content o Add -collate-n to extend -collate to multiple pages at once Fixes: o Clean up @B implementation for -split-on-bookmarks o -merge-add-bookmarks now has proper titles for images o Font operations now include fonts within xobjects o Image extraction now includes images within xobjects within xobjects * HTML manual now ranks equally with PDF manual * = Supported by a grant from NLnet 2.7.2 (October 2024) New features: * New -args-json for better control files * New -replace-obj to edit dictionary entries via chain * Create PDF/UA files from scratch with -create-pdf-ua-[1|2] * Create structure information for files with -draw * Draw can now make paragraphs with -para, -paras * Add structure information to -typeset * -typeset can make PDF/UA documents * -jpeg, -png and friends can make PDF/UA documents * Merge PDF/UA-1 and PDF/UA-2 files, preserving standards compliance o -stretch scales without preserving aspect ratio o -redact removes whole pages Extended features: o Rectangles may be specified as x y x' y' rather than x y w h Fixes: o Removed setting of Producer field in AGPL version * Removed long-deprecated -control * More compact -print-struct-tree o -image-resolution-json was listing all images * = Supported by a grant from NLnet 2.7.1 (July 2024) New features: o Build PDF files from JPEG2000 (.jp2, .jpf/.jpx) files * Mark a file as PDF/UA compliant, or remove such marking * Partial verification to PDF/UA via the Matterhorn protocol * Extract, edit and reapply document structure tree * Print structure tree summary * Split structure tree when splitting PDF to save size * Combine structure trees when merging or stamping PDFs * Set the natural language of a file Extended features: o Allow -obj to look up nested PDF information * Merge structure trees better when merging files * Report top-level natural language on -info * Report mark information dictionary contents on -info Backward-incompatible change: * -process-struct-tree replaces -no-process-struct-tree newly introduced in previous version * = Supported by a grant from NLnet 2.7 (February 2024) New features: o Split files to max size with -split-max o Spray splits a file to multiple outputs by alternating pages o List document and page info in JSON format o List page labels in JSON format o List fonts in JSON format o Identify PDF/A, PDF/X, PDF/E, PDF/VT, PDF/UA in -info o Identify AcroForm in -info o Extract font files from a document o List images on a page with -list-images[-json] o Chop pages up into sections with -chop o Build PDF files from JBIG2 streams, including globals o Reprocess images within PDFs to further compress them o Extract streams to disk o Explore PDFs by printing objects o Shift page boxes with -shift-boxes Extended features: o -list-images-used[-json] extends -image-resolution o Use -raw with -extract-images to get PNMs o -extract-images can extract JBIG2 images and their globals o More PNGs - greyscale 1, 2, 4, 8, 16bpp and RGB 16bpp o Report number of annotations in -page-info o Specify image based only on file extension o -squeeze updates old compression methods o Show page size summary in -info o Add -no-process-struct-trees to prevent merging of structure trees Fixes: o Added opam file in-source o Fixed -set-annotations with page links o Allow Exif JPEGs as well as JFIF ones in -jpeg and -draw-jpeg o Only compress a stream if it actually makes it smaller 2.6.1 (September 2023) o Fixed regression in UTF8 text with -add-text 2.6 (July 2023) New features: o Create new PDF documents or draw on existing ones with -draw o Embed TrueType fonts with -load-ttf o Embed the 14 standard fonts if requested o Add links to parts of text with -add-text as %URL[|] o Convert JPEGs and PNGs to PDFs with -jpeg and -png o Export, import, and thereby round-trip annotations via JSON o Show composition of PDF with -composition[-json] o Use page labels like and in page specifications Extended features: o Allow -utf8 with -split-bookmarks -o @B.pdf to produce UTF8 filenames o -merge-add-bookmarks now works with unicode filenames o Better transformation of some annotation types o -list-annotations[-json] now respects page range o Merge now merges structure trees (tagged PDF) o Merge now rewrites clashing name tree entries o Preserve /GoTo actions in bookmarks when merging o UTF8 option for JSON output o -info now shows object stream, /ID data, page mode and layout o More options for viewer preference control o More default colours, by using the CSS colour list Fixes: o Updated Yojson to remove dependency on Stream, ready for OCaml 5 o -typeset was opening files in text mode, instead of binary o Fixed behaviour of -squeeze-no-pagedata / -squeeze-no-recompress o Significant improvements to malformed file reading o Allow DUP page specifications to use larger numbers o Reworked functions transforming pages to better preserve patterns 2.5.1 (January 2022) o Fix a regression where standard fonts could not be chosen 2.5 (January 2022) New features: o Can read as well as write PDFs in JSON format with -j o New operation -typeset typesets a text file as a PDF o New operation -table-of-contents makes table of contents from bookmarks o New operations -impose and -impose-xy for document imposition o New operation -print-font-table gives (charcode, unicode, glyph name) triples o New -print-dict-entry operation prints values for a given key o New -replace-dict-entry function to search & replace e.g URLs o Prepend e.g 2DUP to a page range to make 1,2,3 --> 1,1,2,2,3,3 etc. o Prepend NOT to a page range to invert it o Output annotations in JSON form with -list-annotations-json o Output bookmarks in JSON format with -list-bookmarks-json o Load bookmarks in JSON format with -add-bookmarks-json o New option -collate to collate pages when merging o Text added in existing fonts is now encoding-aware (plus new raw mode) Extended features: o Extend -remove-dict-entry to allow search o Annotation /QuadPoints processed in addition to /Rect when transforming pages o When adding text or graphics, may choose CYMK or Grey instead of RGB o The -list-fonts operation now obeys the range o Can now search for a font by real name with -font o Basic merging of AcroForms when merging documents o Add -idir-only-pdfs to restrict -idir to just files ending in .pdf o Option -debug-force now properly documented as -decrypt-force Internal changes: o Switch to Yojson for faster/better JSON input/output o Environment variable CPDF_REPRODUCIBLE_DATES for testing o Environment variable CPDF_DEBUG for -debug o Effectively make stderr unbuffered o Split cpdf.ml into separate modules 2.4 (June 2021) o New operation -extract-images o New operation -output-json et al. to export PDF files in JSON format o New operations to manipulate Optional Content Groups o New operation -stamp-as-xobject to add one PDF as an xobject in another o Optional Content Groups now preserved when merging / stamping pages o Listing, coalescing and modfiying Optional Content Groups. o New -labels-progress option to improve page labels interface o Appearance streams transformed when transforming annotations o Bookmark destination positions transformed when transforming pages o No longer depends on Bigarray or Unix modules 2.3 (patchlevel 1, December 2019) o Fixed bug which prevented -info working on encrypted files o Allow -shift with -add-text for additional adjustment o Prepend and postpend directly to page content streams 2.3 (October 2019) o Directly set and remove Trim, Art, and Bleed boxes o Dump attachments to file o Extended bookmark format, preserving all bookmark information o New -pad-with, -pad-mutiple-before options o Set or create XMP metadata o Remove graphics clipping o Extended support for reading malformed files o Embed missing fonts by calling out to gs o Set bookmarks open to a given level o Create PDF files from scatch o Remove single images by name o Add trim marks 2.2 (patchlevel 1) o Fix for inability to read null objects in streams o Workaround for Adobe "Error 21" on re-saving encrypted files o More efficient bookmark operations on files with many pages o New operation -hard-box to clip contents to a given box 2.2 (March 2017) o Perform arithmetic on dimensions when specifying size or position o Add simple rectangles to PDF to blank things out o Stamping operations now preserve annotations o Decryption fully on-demand for speed. o -keep-l keeps existing linearization status o -remove-dict-entry to remove the contents of a dictionary entry o -topline in addition to -midline o -producer and -creator may be used to alter producer and creator in conjunction with any other operation o -topline and -midline now apply to stamps o -list-spot-colours o -bates-at-range and -bates-pad-to o -print-page-labels o -squeeze replaces smpdf o Preserve more sharing of data when doing merges and page alterations 2.1 (December 2014) o Encryption now much, much faster o Faster parsing of delayed object streams on large files o -decompress now leaves object streams decompressed o Select pages by landscape-ness or portrait-ness in a page range o New -open-at-page and -open-at-page-fit option to set the open action o New -recrypt option to re-encrypt output o Reads XMP metadata and outputs it on -info o New -center position for text o -stamp can now use positions, just like stamping text o Better handling of permissions for files with user passwords o Linearization excised o Can encrypt or recrypt output of -split and -split-bookmarks now o -args replaces -control with better behaviour o Can scale a stamp to fit before stamping with -scale-stamp-to-fit cpdf-2.8.1/cpdfdrawcontrol.mli0000664000175000017500000000547614771516640015043 0ustar johnjohn(** Cpdfcommand draw control *) val embed_font : (unit -> Cpdfembed.cpdffont) ref val getfontname : (unit -> string) ref val getfontsize : (unit -> float) ref val getindent : (unit -> float option) ref val setfontname : (string -> unit) ref val setfontsize : (float -> unit) ref val setdrawing : (unit -> unit) ref val setembedstd14 : (bool -> string -> unit) ref val ttfs : (string, (string * Cpdfembed.cpdffont)) Hashtbl.t val loadttf : (string -> unit) ref val loadttfseparate : string -> string -> unit val fontpack_initialised : bool ref val drawops : (string * Cpdfdraw.drawops list) list ref val addop : Cpdfdraw.drawops -> unit val parse_colour : string -> Cpdfaddtext.colour val addtag : string -> unit val addstag : string -> unit val endtag : unit -> unit val endstag : unit -> unit val autotags : bool -> unit val eltinfo : string -> Pdf.pdfobject -> unit val endeltinfo : string -> unit val addnamespace : string -> unit val setrolemap : string -> unit val artifact : unit -> unit val endartifact : unit -> unit val autoartifacts : bool -> unit val addrect : string -> unit val addto : string -> unit val addline : string -> unit val addbezier : string -> unit val addbezier23 : string -> unit val addbezier13 : string -> unit val addcircle : string -> unit val setstroke : string -> unit val setfill : string -> unit val stroke : unit -> unit val fill : unit -> unit val fillevenodd : unit -> unit val strokefill : unit -> unit val strokefillevenodd : unit -> unit val clip : unit -> unit val clipevenodd : unit -> unit val closepath : unit -> unit val setthickness : string -> unit val setcap : string -> unit val setjoin : string -> unit val setmiter : string -> unit val setdash : string -> unit val push : unit -> unit val pop : unit -> unit val setmatrix : string -> unit val setmtranslate : string -> unit val setmrotate : string -> unit val setmscale : string -> unit val setmshearx : string -> unit val setmsheary : string -> unit val xobjbbox : string -> unit val startxobj : string -> unit val endxobj : unit -> unit val usexobj : string -> unit val addjpeg : ?data:Pdfio.rawbytes -> string -> unit val addpng : ?data:Pdfio.rawbytes -> string -> unit val addimage : string -> unit val addopacity : float -> unit val addsopacity : float -> unit val addbt : unit -> unit val addet : unit -> unit val addnewpage : unit -> unit val addleading : float -> unit val addcharspace : float -> unit val addwordspace : float -> unit val addtextscale : float -> unit val addrendermode : int -> unit val addrise : float -> unit val addnewline : unit -> unit val add_default_fontpack : string -> unit val addtext : string -> unit val addspecialtext : string -> unit val addpara : string -> unit val addparas : string -> unit (** This the beginnings of separation between cpdfcommand and cpdfdraw when drawing, for use in cpdflib. It is presently undocumented. *) cpdf-2.8.1/cpdfembed.mli0000664000175000017500000000227314771516640013551 0ustar johnjohn(** Embed a TrueType font in a PDF *) (* Embed a TrueType font for the given set of unicode codepoints in the given encoding, adding the fontfiles to the PDF and returning a list of font objects, together with a unicode codepoint --> (font number in list, charcode) table *) type t = Pdftext.font list * (int, int * int) Hashtbl.t type cpdffont = PreMadeFontPack of t | EmbedInfo of {fontfile : Pdfio.bytes; fontname : string; encoding : Pdftext.encoding} | ExistingNamedFont (** Build a fontpack for a Standard 14 font *) val fontpack_of_standardfont : Pdftext.font -> t (** Look up a unicode codepoint in a font page. Returns (charcode, fontnumber, font) *) val get_char : t -> int -> (int * int * Pdftext.font) option (** Build a fontpack from a TrueType font and list of codepoints, embedding its fonts in the document *) val embed_truetype : Pdf.t -> fontfile:Pdfio.bytes -> fontname:string -> codepoints:int list -> encoding:Pdftext.encoding -> t (** Collate outputs of [get_char] with like font *) val collate_runs : ('a * 'b * 'c) list -> ('a * 'b * 'c) list list (** Load substitute Standard 14 font *) val load_substitute : string -> Pdftext.standard_font -> Pdfio.bytes * string cpdf-2.8.1/cpdfdraw.ml0000664000175000017500000007672614771516640013277 0ustar johnjohnopen Pdfutil open Cpdferror let do_add_artifacts = ref true let do_auto_tag = ref true let rolemap = ref "" type colspec = NoCol | RGB of float * float * float | Grey of float | CYMK of float * float * float * float type justification = Left | Right | Centre type drawops = | Rect of float * float * float * float | Bezier of float * float * float * float * float * float | Bezier23 of float * float * float * float | Bezier13 of float * float * float * float | To of float * float | Line of float * float | ClosePath | SetFill of colspec | SetStroke of colspec | SetLineThickness of float | SetLineCap of int | SetLineJoin of int | SetMiterLimit of float | SetDashPattern of float list * float | Matrix of Pdftransform.transform_matrix | Qq of drawops list | Fill | FillEvenOdd | Stroke | FillStroke | FillStrokeEvenOdd | Clip | ClipEvenOdd | FormXObject of float * float * float * float * string * drawops list | Use of string | ImageXObject of string * Pdf.pdfobject | Image of string | NewPage | Opacity of float | SOpacity of float | FontPack of string * Cpdfembed.cpdffont * (int, unit) Hashtbl.t | Font of string * float | TextSection of drawops list | Text of string | SpecialText of string | Para of float option * justification * float * string list | Newline | Leading of float | CharSpace of float | WordSpace of float | TextScale of float | RenderMode of int | Rise of float | Tag of string | EndTag | STag of string | EndSTag | BeginArtifact | EndArtifact | Namespace of string | EltInfo of string * Pdf.pdfobject | EndEltInfo of string | AutoTag of bool let rec string_of_drawop = function | Qq o -> "Qq (" ^ string_of_drawops o ^ ")" | FormXObject (_, _, _, _, _, o) -> "FormXObject (" ^ string_of_drawops o ^ ")" | TextSection o -> "TextSection (" ^ string_of_drawops o ^ ")" | Rect _ -> "Rect" | Bezier _ -> "Bezier" | Bezier23 _ -> "Bezier23" | Bezier13 _ -> "Bezier13" | To _ -> "To" | Line _ -> "Line" | ClosePath -> "ClosePath" | SetFill _ -> "SetFill" | SetStroke _ -> "SetStroke" | SetLineThickness _ -> "SetLineThickness" | SetLineCap _ -> "SetLineCap" | SetLineJoin _ -> "SetLineJoin" | SetMiterLimit _ -> "SetMiterLimit" | SetDashPattern _ -> "SetDashPattern" | Matrix _ -> "SetMatrix" | Fill -> "Fill" | FillEvenOdd -> "FillEvenOdd" | Stroke -> "Stroke" | FillStroke -> "FillStroke" | FillStrokeEvenOdd -> "FillStrokeEvenOdd" | Clip -> "Clip" | ClipEvenOdd -> "ClipEvenOdd" | Use _ -> "Use" | ImageXObject _ -> "ImageXObject" | Image _ -> "Image" | NewPage -> "NewPage" | Opacity _ -> "Opacity" | SOpacity _ -> "SOpacity" | FontPack (n, _, _) -> "FontPack " ^ n ^ " " | Font (f, _) -> "Font " ^ f ^ " " | Text _ -> "Text" | SpecialText _ -> "SpecialText" | Newline -> "Newline" | Leading _ -> "Leading" | CharSpace _ -> "CharSpace" | WordSpace _ -> "WordSpace" | TextScale _ -> "TextScale" | RenderMode _ -> "RenderMode" | Rise _ -> "Rise" | EndTag -> "EndTag" | Tag s -> "Tag " ^ s | EndSTag -> "EndSTag" | STag s -> "Tag " ^ s | BeginArtifact -> "BeginArtifact" | EndArtifact -> "EndArtifact" | Para (_, _, _, _) -> "Para" | Namespace s -> "Namespace " ^ s | EltInfo (_, _) -> "EltInfo" | EndEltInfo _ -> "EndEltInfo" | AutoTag _ -> "AutoTag" and string_of_drawops l = fold_left (fun x y -> x ^ " " ^ y) "" (map string_of_drawop l) (* Per page / xobject resources *) type res = {images : (string, (string * int)) Hashtbl.t; (* (name, (pdf name, objnum)) *) extgstates : ((string * float), string) Hashtbl.t; (* (kind, value), name *) fonts : (string * int, (string * int)) Hashtbl.t; (* (font, (objnum, pdf name)) *) form_xobjects : (string, (string * int)) Hashtbl.t; (* (name, (pdf name, objnum)) *) mutable page_names : string list; mutable time : Cpdfstrftime.t; mutable current_fontpack : string * Cpdfembed.t; mutable current_fontpack_codepoints : (int, unit) Hashtbl.t; mutable font_size : float; mutable num : int} let default_fontpack = Cpdfembed.fontpack_of_standardfont (Pdftext.StandardFont (Pdftext.TimesRoman, Pdftext.WinAnsiEncoding)) let fontpacks = ref (null_hash ()) let empty_res () = {images = null_hash (); extgstates = null_hash (); fonts = null_hash (); form_xobjects = null_hash (); page_names = []; time = Cpdfstrftime.dummy; current_fontpack = ("Times-Roman", default_fontpack); current_fontpack_codepoints = null_hash (); font_size = 12.; num = 0} let resstack = ref [empty_res ()] let rescopy r = {r with images = Hashtbl.copy r.images; fonts = Hashtbl.copy r.fonts; extgstates = Hashtbl.copy r.extgstates; form_xobjects = Hashtbl.copy r.form_xobjects} let res () = try hd !resstack with _ -> error "graphics stack empty" let respush () = resstack := (rescopy (res ()))::!resstack let respop () = let n = (res ()).num in resstack := tl !resstack; (* not necessary, since names are isolated in the xobject, but it makes manual debugging of PDF files easier if we don't re-use numbers *) (res ()).num <- max n (res ()).num let fresh_name s = (res ()).num <- (res ()).num + 1; s ^ string_of_int (res ()).num (* At end of page, we keep things for which we have indirects - but ExtGStates aren't indirect, so they go. *) let reset_state () = Hashtbl.clear (res ()).extgstates(*; (res ()).page_names <- []*) let process_specials pdf endpage filename bates batespad num page s = let refnums = Pdf.page_reference_numbers pdf in let fastrefnums = hashtable_of_dictionary (combine refnums (indx refnums)) in let marks = Pdfmarks.read_bookmarks ~preserve_actions:false pdf in let pairs = Cpdfaddtext.replace_pairs marks fastrefnums pdf endpage None filename bates batespad num page in Cpdfaddtext.process_text (res ()).time s pairs let font_widths f fontsize = match f with | Pdftext.StandardFont (sf, encoding) -> Array.init 256 (fun x -> fontsize *. float_of_int (Pdfstandard14.textwidth false encoding sf (string_of_char (char_of_int x))) /. 1000.) | Pdftext.SimpleFont {fontmetrics = Some m} -> Array.map (fun x -> fontsize *. x /. 1000. ) m | _ -> raise (Pdf.PDFError "Cpdfdraw: Unsupported font") let runs_of_utf8 ?(widthcache = null_hash ()) s = let identifier, fontpack = (res ()).current_fontpack in let codepoints = Pdftext.codepoints_of_utf8 s in let triples = option_map (Cpdfembed.get_char fontpack) codepoints in let collated = Cpdfembed.collate_runs triples in let font_widths fontnum font font_size = match Hashtbl.find_opt widthcache (fontnum, font_size) with | Some table -> table | None -> let widths = font_widths font font_size in Hashtbl.add widthcache (fontnum, font_size) widths; widths in let w = fold_left ( +. ) 0. (map (fun (charcode, fontnum, font) -> let widths = font_widths fontnum font (res ()).font_size in widths.(charcode)) triples) in let output = flatten (map (fun l -> if l = [] then [] else let f, n = match l with (_, n, f)::_ -> f, n | _ -> assert false in let fontname = fst (Hashtbl.find (res ()).fonts (identifier, n)) in let charcodes = map (fun (c, _, _) -> char_of_int c) l in [Pdfops.Op_Tf (fontname, (res ()).font_size); Pdfops.Op_Tj (implode charcodes)]) collated) in (output, w) let extgstate kind v = try Hashtbl.find (res ()).extgstates (kind, v) with Not_found -> let n = fresh_name "/G" in Hashtbl.replace (res ()).extgstates (kind, v) n; n let read_resource pdf n res = match Pdf.lookup_direct pdf n res with | Some (Pdf.Dictionary d) -> d | _ -> [] let update_resources pdf old_resources = let gss_resources = map (fun ((kind, v), n) -> (n, Pdf.Dictionary [(kind, Pdf.Real v)])) (list_of_hashtbl (res ()).extgstates) in let select_resources t = option_map (fun (_, (n, o)) -> if mem n (res ()).page_names then Some (n, Pdf.Indirect o) else None) (list_of_hashtbl t) in let update = fold_right (fun (k, v) d -> add k v d) in let new_gss = update gss_resources (read_resource pdf "/ExtGState" old_resources) in let new_xobjects = update (select_resources (res ()).form_xobjects @ select_resources (res ()).images) (read_resource pdf "/XObject" old_resources) in let new_fonts = update (select_resources (res ()).fonts) (read_resource pdf "/Font" old_resources) in let add_if_non_empty dict name newdict = if newdict = Pdf.Dictionary [] then dict else Pdf.add_dict_entry dict name newdict in add_if_non_empty (add_if_non_empty (add_if_non_empty old_resources "/XObject" (Pdf.Dictionary new_xobjects)) "/ExtGState" (Pdf.Dictionary new_gss)) "/Font" (Pdf.Dictionary new_fonts) let mcidr = ref ~-1 let mcid () = (incr mcidr; !mcidr) let mcpage = ref ~-1 let standard_namespace = "http://iso.org/pdf/ssn" let pdf2_namespace = "http://iso.org/pdf2/ssn" (* namespace, object number pair. *) let namespaces = null_hash () (* Add the object, add its number and this namespace to the hash. *) let add_namespace pdf s = if s = standard_namespace then () else match Hashtbl.find_opt namespaces s with | Some _ -> () | None -> let objnum = Pdf.addobj pdf (Pdf.Dictionary [("/NS", Pdf.String s)]) in Hashtbl.add namespaces s objnum (* The structure data, as it is created, in flat form. Later on, this will be reconstructed into a structure tree. *) type structdata = | StDataBeginTree of string | StDataEndTree | StDataMCID of string * int | StDataPage of int | StDataNamespace of string | StEltInfo of string * Pdf.pdfobject | StEndEltInfo of string let structdata = ref [] (* TODO: Tagging in XObjects, move tag state into res () etc. *) let rec remove_tfs prev = function | [] -> [] | Pdfops.Op_Tf (f, _)::t when f = prev -> remove_tfs prev t | Pdfops.Op_Tf (f, s) as h::t -> h::remove_tfs f t | h::t -> h::remove_tfs prev t let rec merge_adjacent_tjs ops = let merge_tjs l = Pdfops.Op_Tj (String.concat "" (map (function Pdfops.Op_Tj s -> s | _ -> assert false) l)) in match cleavewhile (function Pdfops.Op_Tj _ -> true | _ -> false) ops with | [], h::t -> h::merge_adjacent_tjs t | [], [] -> [] | l, t -> merge_tjs l::merge_adjacent_tjs t let clean_up ops = merge_adjacent_tjs (remove_tfs "" ops) (* TODO: Use Uuseg for proper unicode segmentation. *) let format_paragraph indent j w s = let ss = String.split_on_char ' ' s in let widthcache = null_hash () in let rs_and_widths = ref (map (runs_of_utf8 ~widthcache) ss) in let space_runs, space_width = runs_of_utf8 ~widthcache " " in let remaining = ref w in let allops = ref [] in let ops = ref [] (*[Pdfops.Op_Comment "Format paragraph"]*) in let first = ref true in let firstloop = ref true in let justify ops = match j with | Left -> (if !first then [Pdfops.Op_Td (~-.indent, 0.)] else []) @ ops @ (if !first then [Pdfops.Op_Td (indent, 0.)] else []) | Right -> [Pdfops.Op_Td (~-.(!remaining), 0.)] @ ops @ [Pdfops.Op_Td (!remaining, 0.)] | Centre -> [Pdfops.Op_Td (~-.(!remaining) /. 2., 0.)] @ ops @ [Pdfops.Op_Td (!remaining /. 2., 0.)] in while !rs_and_widths <> [] do if !firstloop then (remaining -.= indent; clear firstloop); let word, word_width = hd !rs_and_widths in if !remaining = w then (* If current line empty, output word. *) begin ops := rev word @ !ops; remaining := !remaining -. word_width; rs_and_widths := tl !rs_and_widths end else if word_width +. space_width <= !remaining then (* If current line not empty, and space for space char and word, emit them. *) begin ops := rev space_runs @ !ops; ops := rev word @ !ops; remaining := !remaining -. word_width -. space_width; rs_and_widths := tl !rs_and_widths end else (* If current line not empty, and not enough space, emit newline. *) begin allops =| rev (Pdfops.Op_T'::justify !ops); clear first; ops := []; remaining := w; end; done; allops =| rev (Pdfops.Op_T'::justify !ops); clean_up (flatten (rev !allops)) let current_eltinfo = null_hash () let rec ops_of_drawop struct_tree dryrun pdf endpage filename bates batespad num page = function | Qq ops -> [Pdfops.Op_q] @ ops_of_drawops struct_tree dryrun pdf endpage filename bates batespad num page ops @ [Pdfops.Op_Q] | Matrix m -> [Pdfops.Op_cm m] | Rect (x, y, w, h) -> [Pdfops.Op_re (x, y, w, h)] | Bezier (a, b, c, d, e, f) -> [Pdfops.Op_c (a, b, c, d, e, f)] | Bezier23 (a, b, c, d) -> [Pdfops.Op_v (a, b, c, d)] | Bezier13 (a, b, c, d) -> [Pdfops.Op_y (a, b, c, d)] | To (x, y) -> [Pdfops.Op_m (x, y)] | Line (x, y) -> [Pdfops.Op_l (x, y)] | SetFill x -> begin match x with | RGB (r, g, b) -> [Op_rg (r, g, b)] | Grey g -> [Op_g g] | CYMK (c, y, m, k) -> [Op_k (c, y, m, k)] | NoCol -> [] end | SetStroke x -> begin match x with | RGB (r, g, b) -> [Op_RG (r, g, b)] | Grey g -> [Op_G g] | CYMK (c, y, m, k) -> [Op_K (c, y, m, k)] | NoCol -> [] end | ClosePath -> [Pdfops.Op_h] | Fill -> [Pdfops.Op_f] | FillEvenOdd -> [Pdfops.Op_f'] | Stroke -> [Pdfops.Op_S] | FillStroke -> [Pdfops.Op_B] | FillStrokeEvenOdd -> [Pdfops.Op_B'] | Clip -> [Pdfops.Op_W; Pdfops.Op_n] | ClipEvenOdd -> [Pdfops.Op_W'; Pdfops.Op_n] | SetLineThickness t -> [Pdfops.Op_w t] | SetLineCap c -> [Pdfops.Op_J c] | SetLineJoin j -> [Pdfops.Op_j j] | SetMiterLimit m -> [Pdfops.Op_M m] | SetDashPattern (x, y) -> [Pdfops.Op_d (x, y)] | FormXObject (a, b, c, d, n, ops) -> create_form_xobject struct_tree dryrun a b c d pdf endpage filename bates batespad num page n ops; [] | Use n -> let pdfname = try fst (Hashtbl.find (res ()).form_xobjects n) with _ -> error ("Form XObject not found: " ^ n) in (res ()).page_names <- pdfname::(res ()).page_names; [Pdfops.Op_Do pdfname] | Image s -> let m = if !do_auto_tag then mcid () else 0 in if not dryrun then structdata := StDataMCID ("/Figure", m)::!structdata; let pdfname = try fst (Hashtbl.find (res ()).images s) with _ -> error ("Image not found: " ^ s) in (res ()).page_names <- pdfname::(res ()).page_names; (if struct_tree && !do_auto_tag then [Pdfops.Op_BDC ("/Figure", Pdf.Dictionary ["/MCID", Pdf.Integer m])] else []) @ [Pdfops.Op_Do pdfname] @ (if struct_tree && !do_auto_tag then [Pdfops.Op_EMC] else []) | ImageXObject (s, obj) -> Hashtbl.replace (res ()).images s (fresh_name "/I", Pdf.addobj pdf obj); [] | NewPage -> Pdfe.log ("NewPage remaining in graphic stream"); assert false | Opacity v -> [Pdfops.Op_gs (extgstate "/ca" v)] | SOpacity v -> [Pdfops.Op_gs (extgstate "/CA" v)] | FontPack (identifier, cpdffont, codepoints) -> (*Printf.printf "FontPack op: |%s|\n%!" identifier;*) let fontpack = match Hashtbl.find !fontpacks identifier with | (fontpack, _) -> (*Printf.printf "Cpdfdraw FontPack op: using existing fontpack |%s|\n%!" identifier;*) fontpack | exception Not_found -> (*Printf.printf "Cpdfdraw FontPack op: storing new fontpack |%s|\n%!" identifier;*) let fontpack = match cpdffont with | PreMadeFontPack fp -> (*Printf.printf "it's a pre-made font pack\n%!";*) fp | EmbedInfo {fontfile; fontname; encoding} -> let codepoints = map fst (list_of_hashtbl codepoints) in (*Printf.printf "%i codepoints to embed\n%!" (length codepoints);*) if codepoints = [] then default_fontpack else Cpdfembed.embed_truetype pdf ~fontfile ~fontname ~codepoints ~encoding | ExistingNamedFont -> error "-draw does not support using an existing named font" in Hashtbl.replace !fontpacks identifier (fontpack, codepoints); fontpack in let ns = map2 (fun font n -> try fst (Hashtbl.find (res ()).fonts (identifier, n)) with Not_found -> let o = if dryrun then 0 else Pdftext.write_font pdf font in let name = fresh_name "/F" in (*Printf.printf "Adding font %s as %s\n%!" identifier name;*) Hashtbl.replace (res ()).fonts (identifier, n) (name, o); name) (fst fontpack) (indx0 (fst fontpack)) in (res ()).page_names <- ns @ (res ()).page_names; [] | Font (identifier, size) -> (*Printf.printf "Cpdfdraw Font op: Changing to stored font %s\n%!" identifier;*) let fontpack, codepoints = Hashtbl.find !fontpacks identifier in (res ()).current_fontpack <- (identifier, fontpack); if dryrun then (res ()).current_fontpack_codepoints <- codepoints; (res ()).font_size <- size; [] | TextSection ops -> [Pdfops.Op_BT] @ ops_of_drawops struct_tree dryrun pdf endpage filename bates batespad num page ops @ [Pdfops.Op_ET] | Text s -> if dryrun then iter (fun c -> Hashtbl.replace (res ()).current_fontpack_codepoints c ()) (Pdftext.codepoints_of_utf8 s); let m = if !do_auto_tag then mcid () else 0 in if not dryrun && !do_auto_tag then structdata := StDataMCID ("/P", m)::!structdata; (if struct_tree && !do_auto_tag then [Pdfops.Op_BDC ("/P", Pdf.Dictionary ["/MCID", Pdf.Integer m])] else []) @ fst (runs_of_utf8 s) @ (if struct_tree && !do_auto_tag then [Pdfops.Op_EMC] else []) | SpecialText s -> let s = process_specials pdf endpage filename bates batespad num page s in if dryrun then iter (fun c -> Hashtbl.replace (res ()).current_fontpack_codepoints c ()) (Pdftext.codepoints_of_utf8 s); let m = if !do_auto_tag then mcid () else 0 in if not dryrun && !do_auto_tag then structdata := StDataMCID ("/P", m)::!structdata; (if struct_tree && !do_auto_tag then [Pdfops.Op_BDC ("/P", Pdf.Dictionary ["/MCID", Pdf.Integer m])] else []) @ fst (runs_of_utf8 s) @ (if struct_tree && !do_auto_tag then [Pdfops.Op_EMC] else []) | Para (indent, j, w, s) -> if dryrun then iter (iter (fun c -> Hashtbl.replace (res ()).current_fontpack_codepoints c ())) (map Pdftext.codepoints_of_utf8 s); let first = ref true in flatten (map (function para -> let begintag = let m = if !do_auto_tag then mcid () else 0 in if not dryrun && !do_auto_tag then structdata := StDataMCID ("/P", m)::!structdata; if struct_tree && !do_auto_tag then [Pdfops.Op_BDC ("/P", Pdf.Dictionary ["/MCID", Pdf.Integer m])] else [] in let endtag = if struct_tree && !do_auto_tag then [Pdfops.Op_EMC] else [] in begintag @ (if not !first && indent = None then [Pdfops.Op_T'] else (clear first; [])) @ format_paragraph (if indent <> None && not !first then unopt indent else 0.) j w para @ endtag) s) | Leading f -> [Pdfops.Op_TL f] | CharSpace f -> [Pdfops.Op_Tc f] | WordSpace f -> [Pdfops.Op_Tw f] | TextScale f -> [Pdfops.Op_Tz f] | RenderMode i -> [Pdfops.Op_Tr i] | Rise f -> [Pdfops.Op_Ts f] | Newline -> [Pdfops.Op_T'] | Tag s -> let m = mcid () in if not dryrun then structdata := StDataMCID ("/" ^ s, m)::!structdata; [Pdfops.Op_BDC ("/" ^ s, Pdf.Dictionary ["/MCID", Pdf.Integer m])] | EndTag -> [Pdfops.Op_EMC] | STag s -> if not dryrun then structdata =| StDataBeginTree ("/" ^ s); [] | EndSTag -> if not dryrun then structdata =| StDataEndTree; [] | BeginArtifact -> [Pdfops.Op_BMC "/BeginArtifact"] | EndArtifact -> [Pdfops.Op_BMC "/EndArtifact"] | Namespace s -> if not dryrun then begin add_namespace pdf s; structdata =| StDataNamespace s end; [] | EltInfo (k, v) -> if not dryrun then structdata =| StEltInfo (k, v); [] | EndEltInfo s -> if not dryrun then structdata =| StEndEltInfo s; [] | AutoTag b -> do_auto_tag := b; [] and ops_of_drawops struct_tree dryrun pdf endpage filename bates batespad num page drawops = flatten (map (ops_of_drawop struct_tree dryrun pdf endpage filename bates batespad num page) drawops) and create_form_xobject struct_tree dryrun a b c d pdf endpage filename bates batespad num page n ops = respush (); reset_state (); let data = Pdfio.bytes_of_string (Pdfops.string_of_ops (ops_of_drawops struct_tree dryrun pdf endpage filename bates batespad num page ops)) in let obj = Pdf.Stream {contents = (Pdf.Dictionary [("/Length", Pdf.Integer (Pdfio.bytes_size data)); ("/Subtype", Pdf.Name "/Form"); ("/Resources", update_resources pdf (Pdf.Dictionary [])); ("/BBox", Pdf.Array [Pdf.Real a; Pdf.Real b; Pdf.Real c; Pdf.Real d]) ], Pdf.Got data)} in respop (); Hashtbl.replace (res ()).form_xobjects n (fresh_name "/X", (if dryrun then 0 else Pdf.addobj pdf obj)) let minimum_resource_number pdf range = let pages = Pdfpage.pages_of_pagetree pdf in let pages_in_range = option_map2 (fun p n -> if mem n range then Some p else None) pages (indx pages) in let number_of_name s = match implode (rev (takewhile (function '0'..'9' -> true | _ -> false) (rev (explode s)))) with | "" -> None | s -> Some (int_of_string s) in let resource_names_page p = let names n = match Pdf.lookup_direct pdf n p.Pdfpage.resources with | Some (Pdf.Dictionary d) -> map fst d | _ -> [] in names "/XObject" @ names "/ExtGState" @ names "/Font" in match sort (fun a b -> compare b a) (option_map number_of_name (flatten (map resource_names_page pages_in_range))) with | [] -> 0 | n::_ -> n + 1 let rec contains_specials_drawop = function | SpecialText _ -> true | Qq l | TextSection l | FormXObject (_, _, _, _, _, l) -> contains_specials l | _ -> false and contains_specials l = List.exists contains_specials_drawop l let save_whole_stack () = map (fun r -> rescopy r) !resstack let restore_whole_stack r = resstack := r (* When no automatic artifacting, we still need to fix our backchannel manual artifacts. *) let fixup_manual_artifacts = map (function Pdfops.Op_BMC "/BeginArtifact" -> Pdfops.Op_BMC "/Artifact" | Pdfops.Op_BMC "/EndArtifact" -> Pdfops.Op_EMC | x -> x) let draw_single ~struct_tree ~fast ~underneath ~filename ~bates ~batespad range pdf drawops = (res ()).num <- max (res ()).num (minimum_resource_number pdf range); let endpage = Pdfpage.endpage pdf in let pages = Pdfpage.pages_of_pagetree pdf in let ops = if contains_specials drawops then None else Some (ops_of_drawops struct_tree false pdf endpage filename bates batespad 0 (hd pages) drawops) in let ss = map2 (fun n p -> if mem n range then (match ops with | Some x -> x | None -> ops_of_drawops struct_tree false pdf endpage filename bates batespad n p drawops) else []) (ilist 1 endpage) pages in let pages = map3 (fun n p ops -> if not (mem n range) then p else let ops = if !do_add_artifacts then Cpdftype.add_artifacts ops else fixup_manual_artifacts ops in let page = {p with Pdfpage.resources = update_resources pdf p.Pdfpage.resources} in (if underneath then Pdfpage.prepend_operators else Pdfpage.postpend_operators) pdf ops ~fast page) (ilist 1 endpage) (Pdfpage.pages_of_pagetree pdf) ss in Pdfpage.change_pages true pdf pages (* Do a dry run of all the drawing to collect subset information. *) let dryrun ~struct_tree ~filename ~bates ~batespad range pdf chunks = let endpage = Pdfpage.endpage pdf in let pages = Pdfpage.pages_of_pagetree pdf in let r = save_whole_stack () in let saved_fontpacks = Hashtbl.copy !fontpacks in let pagenum = ref (hd range) in iter (fun chunk -> ignore (ops_of_drawops struct_tree true pdf endpage filename bates batespad !pagenum (hd pages) chunk); match range with | [x] when endpage > x -> pagenum := x + 1 | _ -> pagenum := endpage + 1) chunks; restore_whole_stack r; fontpacks := saved_fontpacks type st = StMCID of int | StItem of {kind : string; namespace : string; pageobjnum : int option; alt : (string * Pdf.pdfobject) list; children : st list} (* Build a tree from the MCIDs and structure tree instructions gathered *) let rec find_tree_contents a level = function | [] -> error "not enough -end-stag" | StDataBeginTree _ as h::t -> find_tree_contents (h::a) (level + 1) t | StDataEndTree::t -> if level = 1 then (rev a, t) else find_tree_contents (StDataEndTree::a) (level - 1) t | h::t -> find_tree_contents (h::a) level t let mstdebug = ref false let rec make_structure_tree pageobjnums (pn, ns, ei) pdf = function | [] -> [] | StDataMCID (n, mcid)::t -> if !mstdebug then Printf.printf "StDataMCID, type = %s pagenum = %i, pageobjnum = %i\n" n !pn (unopt (lookup !pn pageobjnums)); let item = StItem {kind = n; namespace = !ns; alt = list_of_hashtbl ei; pageobjnum = lookup !pn pageobjnums; children = [StMCID mcid]} in item::make_structure_tree pageobjnums (pn, ns, ei) pdf t | StDataPage n::t -> if !mstdebug then Printf.printf "StDataPage %i\n" n; pn := n; make_structure_tree pageobjnums (pn, ns, ei) pdf t | StDataNamespace s::t -> if !mstdebug then Printf.printf "StDataNamespace %s\n" s; ns := s; make_structure_tree pageobjnums (pn, ns, ei) pdf t | StEltInfo (k, v)::t -> if !mstdebug then Printf.printf "StEltInfo %s, %s\n" k (Pdfwrite.string_of_pdf v); Hashtbl.replace ei k v; make_structure_tree pageobjnums (pn, ns, ei) pdf t | StEndEltInfo s::t -> if !mstdebug then Printf.printf "StEndEltInfo %s\n" s; Hashtbl.remove ei s; make_structure_tree pageobjnums (pn, ns, ei) pdf t | StDataBeginTree s::t -> if !mstdebug then Printf.printf "StBeginTree %s, namespace = %s\n" s !ns; let tree_contents, rest = find_tree_contents [] 1 t in let item = let namespace = !ns in let alt = list_of_hashtbl ei in let children = make_structure_tree pageobjnums (pn, ns, ei) pdf tree_contents in StItem {kind = s; namespace; alt; pageobjnum = None; children;} in item::make_structure_tree pageobjnums (pn, ns, ei) pdf rest | StDataEndTree::t -> error "Too many -end-tags" let make_structure_tree pdf items = let pageobjnums = let objnums = Pdf.page_reference_numbers pdf in combine (indx objnums) objnums in make_structure_tree pageobjnums (ref 0, ref standard_namespace, null_hash ()) pdf items (* TODO When we allow drawing on PDFs preserving the structure tree, we must remove /ParentTreeNextKey. *) (* Write such a structure tree to a PDF. *) let write_structure_tree pdf st = let parentmap = ref [] in let add_parentmap pon this_objnum = match lookup pon !parentmap with | None -> parentmap =| (pon, [this_objnum]) | Some objnums -> parentmap := add pon (this_objnum::objnums) !parentmap in let struct_tree_root = Pdf.addobj pdf Pdf.Null in let rec mktree struct_tree_parent = function | StItem {kind; namespace; pageobjnum; alt; children} -> let this_objnum = Pdf.addobj pdf Pdf.Null in begin match pageobjnum with | Some p -> add_parentmap p this_objnum | _ -> () end; let alt = map (fun (k, v) -> ("/" ^ k, v)) alt in let page = match pageobjnum with | Some i -> [("/Pg", Pdf.Indirect i)] | None -> [] in let namespace = if namespace = standard_namespace then [] else [("/NS", Pdf.Indirect (Hashtbl.find namespaces namespace))] in let this_obj = Pdf.Dictionary (alt @ page @ namespace @ [("/S", Pdf.Name kind); ("/P", Pdf.Indirect struct_tree_parent); ("/K", Pdf.Array (map (mktree this_objnum) children))]) in Pdf.addobj_given_num pdf (this_objnum, this_obj); Pdf.Indirect this_objnum | StMCID x -> Pdf.Integer x in let items = map (mktree struct_tree_root) st in iter (fun (pon, _) -> Pdf.addobj_given_num pdf (pon, Pdf.add_dict_entry (Pdf.lookup_obj pdf pon) "/StructParents" (Pdf.Integer pon))) !parentmap; let parentmap = map (fun (pon, items) -> (string_of_int pon, Pdf.Array (map (fun x -> Pdf.Indirect x) (rev items)))) !parentmap in let st = let namespaces = match list_of_hashtbl namespaces with | [] -> [] | ns -> [("/Namespaces", Pdf.Array (map (function (_, objnum) -> Pdf.Indirect objnum) ns))] in let rolemap = match !rolemap with | "" -> [] | s -> [("/RoleMap", Pdfread.parse_single_object ("<<" ^ s ^ ">>"))] in Pdf.Dictionary (rolemap @ namespaces @ [("/Type", Pdf.Name "/StructTreeRoot"); ("/ParentTree", Pdf.Indirect (Pdf.addobj pdf (Pdftree.build_name_tree true pdf parentmap))); ("/K", Pdf.Array items)]) in Pdf.addobj_given_num pdf (struct_tree_root, st); Pdf.replace_chain pdf ["/Root"; "/StructTreeRoot"] (Pdf.Indirect struct_tree_root) let draw ~struct_tree ~fast ~underneath ~filename ~bates ~batespad range pdf drawops = let is_fresh = match Pdf.lookup_chain pdf (Pdf.lookup_obj pdf pdf.Pdf.root) ["/StructTreeRoot"] with | Some (Pdf.Dictionary [("/Type", Pdf.Name "/StructTreeRoot")]) -> true | _ -> false in let auto_auto_artifact = not is_fresh && struct_tree in let struct_tree = is_fresh && struct_tree in if not struct_tree && not auto_auto_artifact then clear do_add_artifacts; resstack := [empty_res ()]; Hashtbl.clear !fontpacks; (res ()).time <- Cpdfstrftime.current_time (); let pdf = ref pdf in let range = ref range in (* Double up a trailing NewPage so it actually does something... *) let drawops = match rev drawops with NewPage::t -> rev (NewPage::NewPage::t) | _ -> drawops in let chunks = ref (split_around (eq NewPage) drawops) in dryrun ~struct_tree ~filename ~bates ~batespad !range !pdf !chunks; mcpage := 0; while !chunks <> [] do mcidr := -1; mcpage += 1; structdata =| StDataPage !mcpage; reset_state (); if hd !chunks <> [] then pdf := draw_single ~struct_tree ~fast ~underneath ~filename ~bates ~batespad !range !pdf (hd !chunks); chunks := tl !chunks; if !chunks <> [] then begin (* If the range is just a single page, and there is a next page, move to it. Otherwise, add a blank page at the end of the document. *) let endpage = Pdfpage.endpage !pdf in match !range with | [x] when endpage > x -> range := [x + 1] | _ -> pdf := Cpdfpad.padafter [endpage] !pdf; range := [endpage + 1] end done; if struct_tree then write_structure_tree !pdf (make_structure_tree !pdf (rev !structdata)); !pdf cpdf-2.8.1/cpdfannot.ml0000664000175000017500000002156214771516640013445 0ustar johnjohn(** A loose JSON equivalent of XFDF for annotations. *) open Pdfutil open Cpdferror (* List annotations, simple old style. *) let get_annotation_string encoding pdf annot = match Pdf.lookup_direct pdf "/Contents" annot with | Some (Pdf.String s) -> Cpdfmetadata.encode_output encoding s | _ -> "" let print_annotation encoding pdf num s = let s = get_annotation_string encoding pdf s in match s with | "" -> () | s -> flprint (Printf.sprintf "Page %d: " num); flprint s; flprint "\n" let list_page_annotations encoding pdf num page = match Pdf.lookup_direct pdf "/Annots" page.Pdfpage.rest with | Some (Pdf.Array annots) -> iter (print_annotation encoding pdf num) (map (Pdf.direct pdf) annots) | _ -> () let list_annotations range encoding pdf = Cpdfpage.iter_pages (list_page_annotations encoding pdf) pdf range (* New, JSON style *) let rewrite_destination f d = match d with | Pdf.Array (Pdf.Indirect i::r) -> (* out *) Pdf.Array (Pdf.Integer (f i)::r) | Pdf.Array (Pdf.Integer i::r) -> (* in *) Pdf.Array (Pdf.Indirect (f i)::r) | x -> x let rewrite_destinations f pdf annot = (* Deal with /P in annotation *) let annot = match Pdf.indirect_number pdf "/P" annot with | Some i -> Pdf.add_dict_entry annot "/P" (Pdf.Integer (f i)) | None -> annot in (* Deal with /Dest in annotation *) match Pdf.lookup_direct pdf "/Dest" annot with | Some d -> Pdf.add_dict_entry annot "/Dest" (rewrite_destination f d) | None -> (* Deal with /A --> /D dest when /A --> /S = /GoTo *) match Pdf.lookup_direct pdf "/A" annot with | Some action -> begin match Pdf.lookup_direct pdf "/D" action with | Some d -> Pdf.add_dict_entry annot "/A" (Pdf.add_dict_entry action "/D" (rewrite_destination f d)) | None -> annot end | None -> annot (* We exclude the same annotations as the XFDF spec does. *) let excluded pdf annot = match Pdf.lookup_direct pdf "/Subtype" annot with | Some (Pdf.Name ("/Movie" | "/Widget" | "/Screen" | "/PrinterMark" | "/TrapNet")) -> true | _ -> false let extra = ref [] let annotations_json_page calculate_pagenumber pdf page pagenum = match Pdf.lookup_direct pdf "/Annots" page.Pdfpage.rest with | Some (Pdf.Array annots) -> option_map (fun annot -> begin match annot with | Pdf.Indirect objnum -> let annot = Pdf.direct pdf annot in if excluded pdf annot then None else let annot = rewrite_destinations (fun i -> calculate_pagenumber (Pdfdest.Fit (Pdfdest.PageObject i))) pdf annot in extra := annot::!extra; Some (`List [`Int pagenum; `Int objnum; Cpdfjson.json_of_object ~utf8:true ~clean_strings:true pdf (fun _ -> ()) ~no_stream_data:false ~parse_content:false annot]) | _ -> Pdfe.log "Warning: annotations must be indirect\n"; None end) annots | _ -> [] let get_annotations_json pdf range = let refnums = Pdf.page_reference_numbers pdf in let fastrefnums = hashtable_of_dictionary (combine refnums (indx refnums)) in let calculate_pagenumber = Pdfpage.pagenumber_of_target ~fastrefnums pdf in extra := []; let pages = Pdfpage.pages_of_pagetree pdf in let pagenums = indx pages in let pairs = combine pages pagenums in let pairs = option_map (fun (p, n) -> if mem n range then Some (p, n) else None) pairs in let pages, pagenums = split pairs in let json = flatten (map2 (annotations_json_page calculate_pagenumber pdf) pages pagenums) in let jsonobjnums : int list = map (function `List [_; `Int n; _] -> n | _ -> assert false) json in (*Printf.eprintf "%i extra roots to explore\n" (length !extra); iter (fun x -> Pdfe.log (Printf.sprintf "%s\n\n" (Pdfwrite.string_of_pdf x))) !extra;*) let extra = map (fun n -> `List [`Int n; Cpdfjson.json_of_object ~utf8:true ~clean_strings:true pdf (fun _ -> ()) ~no_stream_data:false ~parse_content:false (Pdf.lookup_obj pdf n)]) (setify (flatten (map (fun x -> let x = Pdf.remove_dict_entry x "/Popup" in let x = Pdf.remove_dict_entry x "/Parent" in let r = Pdf.objects_referenced [] [] pdf x in (*Printf.eprintf "%i extra for annot %s\n" (length r) (Pdfwrite.string_of_pdf x);*) r) !extra))) in let extra = option_map (function `List [`Int n; _] as json -> if mem n jsonobjnums then None else Some json | _ -> assert false) extra in let header = `List [`Int ~-1; Cpdfjson.json_of_object ~utf8:true ~clean_strings:true pdf (fun _ -> ()) ~no_stream_data:false ~parse_content:false (Pdf.Dictionary ["/CPDFJSONannotformatversion", Pdf.Integer 1])] in let json = `List ([header] @ json @ extra) in Pdfio.bytes_of_string (Cpdfyojson.Safe.pretty_to_string json) (* Return annotations *) let get_annotations encoding pdf = let pages = Pdfpage.pages_of_pagetree pdf in flatten (map2 (fun page pagenumber -> match Pdf.lookup_direct pdf "/Annots" page.Pdfpage.rest with | Some (Pdf.Array annots) -> let strings = map (get_annotation_string encoding pdf) (map (Pdf.direct pdf) annots) in combine (many pagenumber (length strings)) strings | _ -> []) pages (ilist 1 (length pages))) (** Set annotations from JSON, keeping any existing ones. *) let set_annotations_json pdf i = match Cpdfyojson.Safe.from_string (Pdfio.string_of_input i) with | `List entries -> (* Renumber the PDF so everything has bigger object numbers than that. *) let maxobjnum = fold_left max min_int (map (function | `List [_; `Int i; _] | `List [`Int i; _] -> i | _ -> error "Bad annots entry") entries) in let pdf_objnums = map fst (list_of_hashtbl pdf.Pdf.objects.Pdf.pdfobjects) in let change_table = hashtable_of_dictionary (map2 (fun f t -> (f, t)) pdf_objnums (ilist (maxobjnum + 1) (maxobjnum + length pdf_objnums))) in let pdf' = Pdf.renumber change_table pdf in pdf.root <- pdf'.root; pdf.objects <- pdf'.objects; pdf.trailerdict <- pdf'.trailerdict; (* Add the extra objects back in and build the annotations. *) let extras = option_map (function `List [`Int i; o] -> Some (i, o) | _ -> None) entries in let annots = option_map (function `List [`Int pagenum; `Int i; o] -> Some (pagenum, i, o) | _ -> None) entries in iter (fun (i, o) -> Pdf.addobj_given_num pdf (i, Cpdfjson.object_of_json o)) extras; let pageobjnummap = let refnums = Pdf.page_reference_numbers pdf in combine (indx refnums) refnums in let pages = Pdfpage.pages_of_pagetree pdf in let annotsforeachpage = collate compare (sort compare annots) in let newpages = map2 (fun pagenum page -> let forthispage = flatten (keep (function (p, _, _)::t when p = pagenum -> true | _ -> false) annotsforeachpage) in iter (fun (_, i, o) -> let f = fun pnum -> match lookup pnum pageobjnummap with Some x -> x | None -> pnum in Pdf.addobj_given_num pdf (i, rewrite_destinations f pdf (Cpdfjson.object_of_json o))) forthispage; if forthispage = [] then page else let annots = match Pdf.lookup_direct pdf "/Annots" page.Pdfpage.rest with | Some (Pdf.Array annots) -> annots | _ -> [] in let newannots = map (fun (_, i, _) -> Pdf.Indirect i) forthispage in {page with Pdfpage.rest = Pdf.add_dict_entry page.Pdfpage.rest "/Annots" (Pdf.Array (annots @ newannots))}) (indx pages) pages in let pdf' = Pdfpage.change_pages true pdf newpages in pdf.root <- pdf'.root; pdf.objects <- pdf'.objects; pdf.trailerdict <- pdf'.trailerdict | _ -> error "Bad Annotations JSON file" let copy_annotations range frompdf topdf = set_annotations_json topdf (Pdfio.input_of_bytes (get_annotations_json frompdf range)) (* Remove annotations *) let remove_annotations range pdf = let remove_annotations_page pagenum page = if mem pagenum range then let rest' = Pdf.remove_dict_entry page.Pdfpage.rest "/Annots" in {page with Pdfpage.rest = rest'} else page in Cpdfpage.process_pages (Pdfpage.ppstub remove_annotations_page) pdf range cpdf-2.8.1/cpdfyojson.ml0000664000175000017500000204624414771516640013655 0ustar johnjohn(* Copyright (c) 2010-2012, Martin Jambon All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. Neither the name of nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *) # 1 "common.ml" let version = "%%VERSION%%" exception Json_error of string let json_error s = raise (Json_error s) exception End_of_array exception End_of_object exception End_of_tuple exception End_of_input type in_param = { string_buf : Buffer.t } let create_in_param ?(len = 256) () = { string_buf = Buffer.create len } let utf8_of_code buf x = let add = Buffer.add_char in (* Straight <= doesn't work with signed 31-bit ints *) let maxbits n x = x lsr n = 0 in if maxbits 7 x then (* 7 *) add buf (Char.chr x) else if maxbits 11 x then ( (* 5 + 6 *) add buf (Char.chr (0b11000000 lor ((x lsr 6) land 0b00011111))); add buf (Char.chr (0b10000000 lor (x land 0b00111111))) ) else if maxbits 16 x then ( (* 4 + 6 + 6 *) add buf (Char.chr (0b11100000 lor ((x lsr 12) land 0b00001111))); add buf (Char.chr (0b10000000 lor ((x lsr 6) land 0b00111111))); add buf (Char.chr (0b10000000 lor (x land 0b00111111))) ) else if maxbits 21 x then ( (* 3 + 6 + 6 + 6 *) add buf (Char.chr (0b11110000 lor ((x lsr 18) land 0b00000111))); add buf (Char.chr (0b10000000 lor ((x lsr 12) land 0b00111111))); add buf (Char.chr (0b10000000 lor ((x lsr 6) land 0b00111111))); add buf (Char.chr (0b10000000 lor (x land 0b00111111))); ) else if maxbits 26 x then ( (* 2 + 6 + 6 + 6 + 6 *) add buf (Char.chr (0b11111000 lor ((x lsr 24) land 0b00000011))); add buf (Char.chr (0b10000000 lor ((x lsr 18) land 0b00111111))); add buf (Char.chr (0b10000000 lor ((x lsr 12) land 0b00111111))); add buf (Char.chr (0b10000000 lor ((x lsr 6) land 0b00111111))); add buf (Char.chr (0b10000000 lor (x land 0b00111111))); ) else ( assert (maxbits 31 x); (* 1 + 6 + 6 + 6 + 6 + 6 *) add buf (Char.chr (0b11111100 lor ((x lsr 30) land 0b00000001))); add buf (Char.chr (0b10000000 lor ((x lsr 24) land 0b00111111))); add buf (Char.chr (0b10000000 lor ((x lsr 18) land 0b00111111))); add buf (Char.chr (0b10000000 lor ((x lsr 12) land 0b00111111))); add buf (Char.chr (0b10000000 lor ((x lsr 6) land 0b00111111))); add buf (Char.chr (0b10000000 lor (x land 0b00111111))); ) let code_of_surrogate_pair i j = let high10 = i - 0xD800 in let low10 = j - 0xDC00 in 0x10000 + ((high10 lsl 10) lor low10) let utf8_of_surrogate_pair buf i j = utf8_of_code buf (code_of_surrogate_pair i j) type lexer_state = { buf : Buffer.t; (* Buffer used to accumulate substrings *) mutable lnum : int; (* Current line number (starting from 1) *) mutable bol : int; (* Absolute position of the first character of the current line (starting from 0) *) mutable fname : string option; (* Name describing the input file *) } module Lexer_state = struct type t = lexer_state = { buf : Buffer.t; mutable lnum : int; mutable bol : int; mutable fname : string option; } end let init_lexer ?buf ?fname ?(lnum = 1) () = let buf = match buf with None -> Buffer.create 256 | Some buf -> buf in { buf = buf; lnum = lnum; bol = 0; fname = fname } # 1 "type.ml" (** {3 Type of the JSON tree} *) type t = [ | `Null | `Bool of bool # 8 "type.ml" | `Int of int # 11 "type.ml" | `Intlit of string # 14 "type.ml" | `Float of float # 17 "type.ml" | `Floatlit of string # 20 "type.ml" | `String of string # 23 "type.ml" | `Stringlit of string # 25 "type.ml" | `Assoc of (string * t) list | `List of t list # 28 "type.ml" | `Tuple of t list # 31 "type.ml" | `Variant of (string * t option) # 33 "type.ml" ] (** All possible cases defined in Yojson: - `Null: JSON null - `Bool of bool: JSON boolean - `Int of int: JSON number without decimal point or exponent. - `Intlit of string: JSON number without decimal point or exponent, preserved as a string. - `Float of float: JSON number, Infinity, -Infinity or NaN. - `Floatlit of string: JSON number, Infinity, -Infinity or NaN, preserved as a string. - `String of string: JSON string. Bytes in the range 128-255 are preserved as-is without encoding validation for both reading and writing. - `Stringlit of string: JSON string literal including the double quotes. - `Assoc of (string * json) list: JSON object. - `List of json list: JSON array. - `Tuple of json list: Tuple (non-standard extension of JSON). Syntax: [("abc", 123)]. - `Variant of (string * json option): Variant (non-standard extension of JSON). Syntax: [<"Foo">] or [<"Bar":123>]. *) (* Note to adventurers: ocamldoc does not support inline comments on each polymorphic variant, and cppo doesn't allow to concatenate comments, so it would be complicated to document only the cases that are preserved by cppo in the type definition. *) # 1 "write.ml" (* included: type.ml *) let hex n = Char.chr ( if n < 10 then n + 48 else n + 87 ) let write_special src start stop ob str = Buffer.add_substring ob src !start (stop - !start); Buffer.add_string ob str; start := stop + 1 let write_control_char src start stop ob c = Buffer.add_substring ob src !start (stop - !start); Buffer.add_string ob "\\u00"; Buffer.add_char ob (hex (Char.code c lsr 4)); Buffer.add_char ob (hex (Char.code c land 0xf)); start := stop + 1 let finish_string src start ob = try Buffer.add_substring ob src !start (String.length src - !start) with exc -> Printf.eprintf "src=%S start=%i len=%i\n%!" src !start (String.length src - !start); raise exc let write_string_body ob s = let start = ref 0 in for i = 0 to String.length s - 1 do match s.[i] with '"' -> write_special s start i ob "\\\"" | '\\' -> write_special s start i ob "\\\\" | '\b' -> write_special s start i ob "\\b" | '\012' -> write_special s start i ob "\\f" | '\n' -> write_special s start i ob "\\n" | '\r' -> write_special s start i ob "\\r" | '\t' -> write_special s start i ob "\\t" | '\x00'..'\x1F' | '\x7F' as c -> write_control_char s start i ob c | _ -> () done; finish_string s start ob let write_string ob s = Buffer.add_char ob '"'; write_string_body ob s; Buffer.add_char ob '"' let json_string_of_string s = let ob = Buffer.create 10 in write_string ob s; Buffer.contents ob let test_string () = let s = Bytes.create 256 in for i = 0 to 255 do Bytes.set s i (Char.chr i) done; json_string_of_string (Bytes.to_string s) let write_null ob () = Buffer.add_string ob "null" let write_bool ob x = Buffer.add_string ob (if x then "true" else "false") let max_digits = max (String.length (string_of_int max_int)) (String.length (string_of_int min_int)) let dec n = Char.chr (n + 48) let rec write_digits s x = if x = 0 then () else let d = x mod 10 in write_digits s (x / 10); Buffer.add_char s (dec (abs d)) let write_int ob x = if x > 0 then write_digits ob x else if x < 0 then ( Buffer.add_char ob '-'; write_digits ob x ) else Buffer.add_char ob '0' let json_string_of_int i = string_of_int i (* Ensure that the float is not printed as an int. This is not required by JSON, but useful in order to guarantee reversibility. *) let float_needs_period s = try for i = 0 to String.length s - 1 do match s.[i] with '0'..'9' | '-' -> () | _ -> raise Exit done; true with Exit -> false (* Guarantees that a sufficient number of digits are printed in order to allow reversibility. *) let write_float ob x = match classify_float x with FP_nan -> Buffer.add_string ob "NaN" | FP_infinite -> Buffer.add_string ob (if x > 0. then "Infinity" else "-Infinity") | _ -> let s1 = Printf.sprintf "%.16g" x in let s = if float_of_string s1 = x then s1 else Printf.sprintf "%.17g" x in Buffer.add_string ob s; if float_needs_period s then Buffer.add_string ob ".0" let write_normal_float_prec significant_figures ob x = let open Printf in let s = match significant_figures with 1 -> sprintf "%.1g" x | 2 -> sprintf "%.2g" x | 3 -> sprintf "%.3g" x | 4 -> sprintf "%.4g" x | 5 -> sprintf "%.5g" x | 6 -> sprintf "%.6g" x | 7 -> sprintf "%.7g" x | 8 -> sprintf "%.8g" x | 9 -> sprintf "%.9g" x | 10 -> sprintf "%.10g" x | 11 -> sprintf "%.11g" x | 12 -> sprintf "%.12g" x | 13 -> sprintf "%.13g" x | 14 -> sprintf "%.14g" x | 15 -> sprintf "%.15g" x | 16 -> sprintf "%.16g" x | _ -> sprintf "%.17g" x in Buffer.add_string ob s; if float_needs_period s then Buffer.add_string ob ".0" (* used by atdgen *) let write_float_prec significant_figures ob x = match classify_float x with FP_nan -> Buffer.add_string ob "NaN" | FP_infinite -> Buffer.add_string ob (if x > 0. then "Infinity" else "-Infinity") | _ -> write_normal_float_prec significant_figures ob x let json_string_of_float x = let ob = Buffer.create 20 in write_float ob x; Buffer.contents ob let write_std_float ob x = match classify_float x with FP_nan -> json_error "NaN value not allowed in standard JSON" | FP_infinite -> json_error (if x > 0. then "Infinity value not allowed in standard JSON" else "-Infinity value not allowed in standard JSON") | _ -> let s1 = Printf.sprintf "%.16g" x in let s = if float_of_string s1 = x then s1 else Printf.sprintf "%.17g" x in Buffer.add_string ob s; if float_needs_period s then Buffer.add_string ob ".0" (* used by atdgen *) let write_std_float_prec significant_figures ob x = match classify_float x with FP_nan -> json_error "NaN value not allowed in standard JSON" | FP_infinite -> json_error (if x > 0. then "Infinity value not allowed in standard JSON" else "-Infinity value not allowed in standard JSON") | _ -> write_normal_float_prec significant_figures ob x let std_json_string_of_float x = let ob = Buffer.create 20 in write_std_float ob x; Buffer.contents ob let test_float () = let l = [ 0.; 1.; -1. ] in let l = l @ List.map (fun x -> 2. *. x +. 1.) l in let l = l @ List.map (fun x -> x /. sqrt 2.) l in let l = l @ List.map (fun x -> x *. sqrt 3.) l in let l = l @ List.map cos l in let l = l @ List.map (fun x -> x *. 1.23e50) l in let l = l @ [ infinity; neg_infinity ] in List.iter ( fun x -> let s = Printf.sprintf "%.17g" x in let y = float_of_string s in Printf.printf "%g %g %S %B\n" x y s (x = y) ) l (* let () = test_float () *) let write_intlit = Buffer.add_string let write_floatlit = Buffer.add_string let write_stringlit = Buffer.add_string let rec iter2_aux f_elt f_sep x = function [] -> () | y :: l -> f_sep x; f_elt x y; iter2_aux f_elt f_sep x l let iter2 f_elt f_sep x = function [] -> () | y :: l -> f_elt x y; iter2_aux f_elt f_sep x l let f_sep ob = Buffer.add_char ob ',' let rec write_json ob (x : t) = match x with `Null -> write_null ob () | `Bool b -> write_bool ob b # 264 "write.ml" | `Int i -> write_int ob i # 267 "write.ml" | `Intlit s -> Buffer.add_string ob s # 270 "write.ml" | `Float f -> write_float ob f # 273 "write.ml" | `Floatlit s -> Buffer.add_string ob s # 276 "write.ml" | `String s -> write_string ob s # 279 "write.ml" | `Stringlit s -> Buffer.add_string ob s # 281 "write.ml" | `Assoc l -> write_assoc ob l | `List l -> write_list ob l # 284 "write.ml" | `Tuple l -> write_tuple ob l # 287 "write.ml" | `Variant (s, o) -> write_variant ob s o # 290 "write.ml" and write_assoc ob l = let f_elt ob (s, x) = write_string ob s; Buffer.add_char ob ':'; write_json ob x in Buffer.add_char ob '{'; iter2 f_elt f_sep ob l; Buffer.add_char ob '}'; and write_list ob l = Buffer.add_char ob '['; iter2 write_json f_sep ob l; Buffer.add_char ob ']' # 306 "write.ml" and write_tuple ob l = Buffer.add_char ob '('; iter2 write_json f_sep ob l; Buffer.add_char ob ')' # 313 "write.ml" and write_variant ob s o = Buffer.add_char ob '<'; write_string ob s; (match o with None -> () | Some x -> Buffer.add_char ob ':'; write_json ob x ); Buffer.add_char ob '>' # 325 "write.ml" let write_t = write_json let rec write_std_json ob (x : t) = match x with `Null -> write_null ob () | `Bool b -> write_bool ob b # 332 "write.ml" | `Int i -> write_int ob i # 335 "write.ml" | `Intlit s -> Buffer.add_string ob s # 338 "write.ml" | `Float f -> write_std_float ob f # 341 "write.ml" | `Floatlit s -> Buffer.add_string ob s # 344 "write.ml" | `String s -> write_string ob s # 347 "write.ml" | `Stringlit s -> Buffer.add_string ob s # 349 "write.ml" | `Assoc l -> write_std_assoc ob l | `List l -> write_std_list ob l # 352 "write.ml" | `Tuple l -> write_std_tuple ob l # 355 "write.ml" | `Variant (s, o) -> write_std_variant ob s o # 358 "write.ml" and write_std_assoc ob l = let f_elt ob (s, x) = write_string ob s; Buffer.add_char ob ':'; write_std_json ob x in Buffer.add_char ob '{'; iter2 f_elt f_sep ob l; Buffer.add_char ob '}'; and write_std_list ob l = Buffer.add_char ob '['; iter2 write_std_json f_sep ob l; Buffer.add_char ob ']' and write_std_tuple ob l = Buffer.add_char ob '['; iter2 write_std_json f_sep ob l; Buffer.add_char ob ']' # 379 "write.ml" and write_std_variant ob s o = match o with None -> write_string ob s | Some x -> Buffer.add_char ob '['; write_string ob s; Buffer.add_char ob ','; write_std_json ob x; Buffer.add_char ob ']' # 391 "write.ml" let to_buffer ?(suf = "") ?(std = false) ob x = if std then write_std_json ob x else write_json ob x; Buffer.add_string ob suf let to_string ?buf ?(len = 256) ?(suf = "") ?std x = let ob = match buf with None -> Buffer.create len | Some ob -> Buffer.clear ob; ob in to_buffer ~suf ?std ob x; let s = Buffer.contents ob in Buffer.clear ob; s let to_channel ?buf ?(len=4096) ?(suf = "") ?std oc x = let ob = match buf with None -> Buffer.create len | Some ob -> Buffer.clear ob; ob in to_buffer ~suf ?std ob x; Buffer.output_buffer oc ob; Buffer.clear ob let to_output ?buf ?(len=4096) ?(suf = "") ?std out x = let ob = match buf with None -> Buffer.create len | Some ob -> Buffer.clear ob; ob in to_buffer ~suf ?std ob x; out#output (Buffer.contents ob) 0 (Buffer.length ob); Buffer.clear ob let to_file ?len ?std ?(suf = "\n") file x = let oc = open_out file in try to_channel ?len ~suf ?std oc x; close_out oc with e -> close_out_noerr oc; raise e let seq_to_buffer ?(suf = "\n") ?std ob st = Seq.iter (to_buffer ~suf ?std ob) st let seq_to_string ?buf ?(len = 256) ?(suf = "\n") ?std st = let ob = match buf with None -> Buffer.create len | Some ob -> Buffer.clear ob; ob in seq_to_buffer ~suf ?std ob st; let s = Buffer.contents ob in Buffer.clear ob; s let seq_to_channel ?buf ?(len=2096) ?(suf = "\n") ?std oc seq = let ob = match buf with None -> Buffer.create len | Some ob -> Buffer.clear ob; ob in Seq.iter (fun json -> to_buffer ~suf ?std ob json; Buffer.output_buffer oc ob; Buffer.clear ob; ) seq let seq_to_file ?len ?(suf = "\n") ?std file st = let oc = open_out file in try seq_to_channel ?len ~suf ?std oc st; close_out oc with e -> close_out_noerr oc; raise e let rec sort = function | `Assoc l -> let l = List.rev (List.rev_map (fun (k, v) -> (k, sort v)) l) in `Assoc (List.stable_sort (fun (a, _) (b, _) -> String.compare a b) l) | `List l -> `List (List.rev (List.rev_map sort l)) # 485 "write.ml" | `Tuple l -> `Tuple (List.rev (List.rev_map sort l)) # 489 "write.ml" | `Variant (k, Some v) as x -> let v' = sort v in if v == v' then x else `Variant (k, Some v') # 495 "write.ml" | x -> x # 1 "monomorphic.ml" let rec pp fmt = function | `Null -> Format.pp_print_string fmt "`Null" | `Bool x -> Format.fprintf fmt "`Bool (@["; Format.fprintf fmt "%B" x; Format.fprintf fmt "@])" # 9 "monomorphic.ml" | `Int x -> Format.fprintf fmt "`Int (@["; Format.fprintf fmt "%d" x; Format.fprintf fmt "@])" # 15 "monomorphic.ml" | `Intlit x -> Format.fprintf fmt "`Intlit (@["; Format.fprintf fmt "%S" x; Format.fprintf fmt "@])" # 21 "monomorphic.ml" | `Float x -> Format.fprintf fmt "`Float (@["; Format.fprintf fmt "%F" x; Format.fprintf fmt "@])" # 27 "monomorphic.ml" | `Floatlit x -> Format.fprintf fmt "`Floatlit (@["; Format.fprintf fmt "%S" x; Format.fprintf fmt "@])" # 33 "monomorphic.ml" | `String x -> Format.fprintf fmt "`String (@["; Format.fprintf fmt "%S" x; Format.fprintf fmt "@])" # 39 "monomorphic.ml" | `Stringlit x -> Format.fprintf fmt "`Stringlit (@["; Format.fprintf fmt "%S" x; Format.fprintf fmt "@])" # 44 "monomorphic.ml" | `Assoc xs -> Format.fprintf fmt "`Assoc (@["; Format.fprintf fmt "@[<2>["; ignore (List.fold_left (fun sep (key, value) -> if sep then Format.fprintf fmt ";@ "; Format.fprintf fmt "(@["; Format.fprintf fmt "%S" key; Format.fprintf fmt ",@ "; pp fmt value; Format.fprintf fmt "@])"; true) false xs); Format.fprintf fmt "@,]@]"; Format.fprintf fmt "@])" | `List xs -> Format.fprintf fmt "`List (@["; Format.fprintf fmt "@[<2>["; ignore (List.fold_left (fun sep x -> if sep then Format.fprintf fmt ";@ "; pp fmt x; true) false xs); Format.fprintf fmt "@,]@]"; Format.fprintf fmt "@])" # 71 "monomorphic.ml" | `Tuple tup -> Format.fprintf fmt "`Tuple (@["; Format.fprintf fmt "@[<2>["; ignore (List.fold_left (fun sep e -> if sep then Format.fprintf fmt ";@ "; pp fmt e; true) false tup); Format.fprintf fmt "@,]@]"; Format.fprintf fmt "@])" # 84 "monomorphic.ml" | `Variant (name, value) -> Format.fprintf fmt "`Variant (@["; Format.fprintf fmt "(@["; Format.fprintf fmt "%S" name; Format.fprintf fmt ",@ "; (match value with | None -> Format.pp_print_string fmt "None" | Some x -> Format.pp_print_string fmt "(Some "; pp fmt x; Format.pp_print_string fmt ")"); Format.fprintf fmt "@])"; Format.fprintf fmt "@])" # 99 "monomorphic.ml" let show x = Format.asprintf "%a" pp x let rec equal a b = match a, b with | `Null, `Null -> true | `Bool a, `Bool b -> a = b # 107 "monomorphic.ml" | `Int a, `Int b -> a = b # 110 "monomorphic.ml" | `Intlit a, `Intlit b -> a = b # 113 "monomorphic.ml" | `Float a, `Float b -> a = b # 116 "monomorphic.ml" | `Floatlit a, `Floatlit b -> a = b # 119 "monomorphic.ml" | `String a, `String b -> a = b # 122 "monomorphic.ml" | `Stringlit a, `Stringlit b -> a = b # 124 "monomorphic.ml" | `Assoc xs, `Assoc ys -> let compare_keys = fun (key, _) (key', _) -> String.compare key key' in let xs = List.stable_sort compare_keys xs in let ys = List.stable_sort compare_keys ys in (match List.for_all2 (fun (key, value) (key', value') -> match key = key' with | false -> false | true -> equal value value') xs ys with | result -> result | exception Invalid_argument _ -> (* the lists were of different lengths, thus unequal *) false) # 137 "monomorphic.ml" | `Tuple xs, `Tuple ys # 139 "monomorphic.ml" | `List xs, `List ys -> (match List.for_all2 equal xs ys with | result -> result | exception Invalid_argument _ -> (* the lists were of different lengths, thus unequal *) false) # 146 "monomorphic.ml" | `Variant (name, value), `Variant (name', value') -> (match name = name' with | false -> false | true -> match value, value' with | None, None -> true | Some x, Some y -> equal x y | _ -> false) # 155 "monomorphic.ml" | _ -> false # 14 "yojson.cppo.ml" module Pretty = struct # 1 "pretty.ml" (* Pretty-print JSON data in an attempt to maximize readability. 1. What fits on one line stays on one line. 2. What doesn't fit on one line gets printed more vertically so as to not exceed a reasonable page width, if possible. Arrays containing only simple elements ("atoms") are pretty-printed with end-of-line wrapping like ordinary text: [ "hello", "hello", "hello", "hello", "hello", "hello", "hello", "hello", "hello", "hello", "hello", "hello", "hello", "hello", "hello", "hello" ] Other arrays are printed either horizontally or vertically depending on whether they fit on a single line: [ { "hello": "world" }, { "hello": "world" }, { "hello": "world" } ] or [ { "hello": "world" }, { "hello": "world" }, { "hello": "world" }, { "hello": "world" } ] *) let pp_list sep ppx out l = let pp_sep out () = Format.fprintf out "%s@ " sep in Format.pp_print_list ~pp_sep ppx out l let is_atom (x: [> t]) = match x with | `Null | `Bool _ | `Int _ | `Float _ | `String _ | `Intlit _ | `Floatlit _ | `Stringlit _ | `List [] | `Assoc [] | `Tuple [] | `Variant (_, None) -> true | `List _ | `Assoc _ | `Tuple _ | `Variant (_, Some _) -> false let is_atom_list l = List.for_all is_atom l (* inside_box: indicates that we're already within a box that imposes a certain style and we shouldn't create a new one. This is used for printing field values like this: foo: [ bar ] rather than something else like foo: [ bar ] *) let rec format ~inside_box std (out:Format.formatter) (x:t) : unit = match x with | `Null -> Format.pp_print_string out "null" | `Bool x -> Format.pp_print_bool out x # 78 "pretty.ml" | `Int x -> Format.pp_print_string out (json_string_of_int x) # 81 "pretty.ml" | `Float x -> let s = if std then std_json_string_of_float x else json_string_of_float x in Format.pp_print_string out s # 89 "pretty.ml" | `String s -> Format.pp_print_string out (json_string_of_string s) # 92 "pretty.ml" | `Intlit s -> Format.pp_print_string out s # 95 "pretty.ml" | `Floatlit s -> Format.pp_print_string out s # 98 "pretty.ml" | `Stringlit s -> Format.pp_print_string out s # 100 "pretty.ml" | `List [] -> Format.pp_print_string out "[]" | `List l -> if not inside_box then Format.fprintf out "@["; if is_atom_list l then (* use line wrapping like we would do for a paragraph of text *) Format.fprintf out "[@;<1 0>@[%a@]@;<1 -2>]" (pp_list "," (format ~inside_box:false std)) l else (* print the elements horizontally if they fit on the line, otherwise print them in a column *) Format.fprintf out "[@;<1 0>@[%a@]@;<1 -2>]" (pp_list "," (format ~inside_box:false std)) l; if not inside_box then Format.fprintf out "@]"; | `Assoc [] -> Format.pp_print_string out "{}" | `Assoc l -> if not inside_box then Format.fprintf out "@["; Format.fprintf out "{@;<1 0>%a@;<1 -2>}" (pp_list "," (format_field std)) l; if not inside_box then Format.fprintf out "@]"; # 119 "pretty.ml" | `Tuple l -> if std then format ~inside_box std out (`List l) else if l = [] then Format.pp_print_string out "()" else ( if not inside_box then Format.fprintf out "@["; Format.fprintf out "(@,%a@;<0 -2>)" (pp_list "," (format ~inside_box:false std)) l; if not inside_box then Format.fprintf out "@]"; ) # 132 "pretty.ml" | `Variant (s, None) -> if std then # 135 "pretty.ml" let representation = `String s in # 139 "pretty.ml" format ~inside_box std out representation else Format.fprintf out "<%s>" (json_string_of_string s) | `Variant (s, Some x) -> if std then # 146 "pretty.ml" let representation = `String s in # 150 "pretty.ml" format ~inside_box std out (`List [ representation; x ]) else let op = json_string_of_string s in Format.fprintf out "<@[%s: %a@]>" op (format ~inside_box:true std) x # 156 "pretty.ml" and format_field std out (name, x) = Format.fprintf out "@[%s: %a@]" (json_string_of_string name) (format ~inside_box:true std) x let pp ?(std = false) out x = Format.fprintf out "@[%a@]" (format ~inside_box:true std) (x :> t) let to_string ?std x = Format.asprintf "%a" (pp ?std) x let to_channel ?std oc x = let fmt = Format.formatter_of_out_channel oc in Format.fprintf fmt "%a@?" (pp ?std) x # 17 "yojson.cppo.ml" end # 2 "write2.ml" let pretty_print ?std out x = Pretty.pp ?std out x let pretty_to_string ?std x = Pretty.to_string ?std x let pretty_to_channel ?std oc x = Pretty.to_channel ?std oc x # 28 "yojson.cppo.ml" module Basic = struct # 1 "type.ml" (** {3 Type of the JSON tree} *) type t = [ | `Null | `Bool of bool # 8 "type.ml" | `Int of int # 14 "type.ml" | `Float of float # 20 "type.ml" | `String of string # 25 "type.ml" | `Assoc of (string * t) list | `List of t list # 33 "type.ml" ] (** All possible cases defined in Yojson: - `Null: JSON null - `Bool of bool: JSON boolean - `Int of int: JSON number without decimal point or exponent. - `Intlit of string: JSON number without decimal point or exponent, preserved as a string. - `Float of float: JSON number, Infinity, -Infinity or NaN. - `Floatlit of string: JSON number, Infinity, -Infinity or NaN, preserved as a string. - `String of string: JSON string. Bytes in the range 128-255 are preserved as-is without encoding validation for both reading and writing. - `Stringlit of string: JSON string literal including the double quotes. - `Assoc of (string * json) list: JSON object. - `List of json list: JSON array. - `Tuple of json list: Tuple (non-standard extension of JSON). Syntax: [("abc", 123)]. - `Variant of (string * json option): Variant (non-standard extension of JSON). Syntax: [<"Foo">] or [<"Bar":123>]. *) (* Note to adventurers: ocamldoc does not support inline comments on each polymorphic variant, and cppo doesn't allow to concatenate comments, so it would be complicated to document only the cases that are preserved by cppo in the type definition. *) # 1 "write.ml" (* included: type.ml *) let hex n = Char.chr ( if n < 10 then n + 48 else n + 87 ) let write_special src start stop ob str = Buffer.add_substring ob src !start (stop - !start); Buffer.add_string ob str; start := stop + 1 let write_control_char src start stop ob c = Buffer.add_substring ob src !start (stop - !start); Buffer.add_string ob "\\u00"; Buffer.add_char ob (hex (Char.code c lsr 4)); Buffer.add_char ob (hex (Char.code c land 0xf)); start := stop + 1 let finish_string src start ob = try Buffer.add_substring ob src !start (String.length src - !start) with exc -> Printf.eprintf "src=%S start=%i len=%i\n%!" src !start (String.length src - !start); raise exc let write_string_body ob s = let start = ref 0 in for i = 0 to String.length s - 1 do match s.[i] with '"' -> write_special s start i ob "\\\"" | '\\' -> write_special s start i ob "\\\\" | '\b' -> write_special s start i ob "\\b" | '\012' -> write_special s start i ob "\\f" | '\n' -> write_special s start i ob "\\n" | '\r' -> write_special s start i ob "\\r" | '\t' -> write_special s start i ob "\\t" | '\x00'..'\x1F' | '\x7F' as c -> write_control_char s start i ob c | _ -> () done; finish_string s start ob let write_string ob s = Buffer.add_char ob '"'; write_string_body ob s; Buffer.add_char ob '"' let json_string_of_string s = let ob = Buffer.create 10 in write_string ob s; Buffer.contents ob let test_string () = let s = Bytes.create 256 in for i = 0 to 255 do Bytes.set s i (Char.chr i) done; json_string_of_string (Bytes.to_string s) let write_null ob () = Buffer.add_string ob "null" let write_bool ob x = Buffer.add_string ob (if x then "true" else "false") let max_digits = max (String.length (string_of_int max_int)) (String.length (string_of_int min_int)) let dec n = Char.chr (n + 48) let rec write_digits s x = if x = 0 then () else let d = x mod 10 in write_digits s (x / 10); Buffer.add_char s (dec (abs d)) let write_int ob x = if x > 0 then write_digits ob x else if x < 0 then ( Buffer.add_char ob '-'; write_digits ob x ) else Buffer.add_char ob '0' let json_string_of_int i = string_of_int i (* Ensure that the float is not printed as an int. This is not required by JSON, but useful in order to guarantee reversibility. *) let float_needs_period s = try for i = 0 to String.length s - 1 do match s.[i] with '0'..'9' | '-' -> () | _ -> raise Exit done; true with Exit -> false (* Guarantees that a sufficient number of digits are printed in order to allow reversibility. *) let write_float ob x = match classify_float x with FP_nan -> Buffer.add_string ob "NaN" | FP_infinite -> Buffer.add_string ob (if x > 0. then "Infinity" else "-Infinity") | _ -> let s1 = Printf.sprintf "%.16g" x in let s = if float_of_string s1 = x then s1 else Printf.sprintf "%.17g" x in Buffer.add_string ob s; if float_needs_period s then Buffer.add_string ob ".0" let write_normal_float_prec significant_figures ob x = let open Printf in let s = match significant_figures with 1 -> sprintf "%.1g" x | 2 -> sprintf "%.2g" x | 3 -> sprintf "%.3g" x | 4 -> sprintf "%.4g" x | 5 -> sprintf "%.5g" x | 6 -> sprintf "%.6g" x | 7 -> sprintf "%.7g" x | 8 -> sprintf "%.8g" x | 9 -> sprintf "%.9g" x | 10 -> sprintf "%.10g" x | 11 -> sprintf "%.11g" x | 12 -> sprintf "%.12g" x | 13 -> sprintf "%.13g" x | 14 -> sprintf "%.14g" x | 15 -> sprintf "%.15g" x | 16 -> sprintf "%.16g" x | _ -> sprintf "%.17g" x in Buffer.add_string ob s; if float_needs_period s then Buffer.add_string ob ".0" (* used by atdgen *) let write_float_prec significant_figures ob x = match classify_float x with FP_nan -> Buffer.add_string ob "NaN" | FP_infinite -> Buffer.add_string ob (if x > 0. then "Infinity" else "-Infinity") | _ -> write_normal_float_prec significant_figures ob x let json_string_of_float x = let ob = Buffer.create 20 in write_float ob x; Buffer.contents ob let write_std_float ob x = match classify_float x with FP_nan -> json_error "NaN value not allowed in standard JSON" | FP_infinite -> json_error (if x > 0. then "Infinity value not allowed in standard JSON" else "-Infinity value not allowed in standard JSON") | _ -> let s1 = Printf.sprintf "%.16g" x in let s = if float_of_string s1 = x then s1 else Printf.sprintf "%.17g" x in Buffer.add_string ob s; if float_needs_period s then Buffer.add_string ob ".0" (* used by atdgen *) let write_std_float_prec significant_figures ob x = match classify_float x with FP_nan -> json_error "NaN value not allowed in standard JSON" | FP_infinite -> json_error (if x > 0. then "Infinity value not allowed in standard JSON" else "-Infinity value not allowed in standard JSON") | _ -> write_normal_float_prec significant_figures ob x let std_json_string_of_float x = let ob = Buffer.create 20 in write_std_float ob x; Buffer.contents ob let test_float () = let l = [ 0.; 1.; -1. ] in let l = l @ List.map (fun x -> 2. *. x +. 1.) l in let l = l @ List.map (fun x -> x /. sqrt 2.) l in let l = l @ List.map (fun x -> x *. sqrt 3.) l in let l = l @ List.map cos l in let l = l @ List.map (fun x -> x *. 1.23e50) l in let l = l @ [ infinity; neg_infinity ] in List.iter ( fun x -> let s = Printf.sprintf "%.17g" x in let y = float_of_string s in Printf.printf "%g %g %S %B\n" x y s (x = y) ) l (* let () = test_float () *) let write_intlit = Buffer.add_string let write_floatlit = Buffer.add_string let write_stringlit = Buffer.add_string let rec iter2_aux f_elt f_sep x = function [] -> () | y :: l -> f_sep x; f_elt x y; iter2_aux f_elt f_sep x l let iter2 f_elt f_sep x = function [] -> () | y :: l -> f_elt x y; iter2_aux f_elt f_sep x l let f_sep ob = Buffer.add_char ob ',' let rec write_json ob (x : t) = match x with `Null -> write_null ob () | `Bool b -> write_bool ob b # 264 "write.ml" | `Int i -> write_int ob i # 270 "write.ml" | `Float f -> write_float ob f # 276 "write.ml" | `String s -> write_string ob s # 281 "write.ml" | `Assoc l -> write_assoc ob l | `List l -> write_list ob l # 290 "write.ml" and write_assoc ob l = let f_elt ob (s, x) = write_string ob s; Buffer.add_char ob ':'; write_json ob x in Buffer.add_char ob '{'; iter2 f_elt f_sep ob l; Buffer.add_char ob '}'; and write_list ob l = Buffer.add_char ob '['; iter2 write_json f_sep ob l; Buffer.add_char ob ']' # 325 "write.ml" let write_t = write_json let rec write_std_json ob (x : t) = match x with `Null -> write_null ob () | `Bool b -> write_bool ob b # 332 "write.ml" | `Int i -> write_int ob i # 338 "write.ml" | `Float f -> write_std_float ob f # 344 "write.ml" | `String s -> write_string ob s # 349 "write.ml" | `Assoc l -> write_std_assoc ob l | `List l -> write_std_list ob l # 358 "write.ml" and write_std_assoc ob l = let f_elt ob (s, x) = write_string ob s; Buffer.add_char ob ':'; write_std_json ob x in Buffer.add_char ob '{'; iter2 f_elt f_sep ob l; Buffer.add_char ob '}'; and write_std_list ob l = Buffer.add_char ob '['; iter2 write_std_json f_sep ob l; Buffer.add_char ob ']' and write_std_tuple ob l = Buffer.add_char ob '['; iter2 write_std_json f_sep ob l; Buffer.add_char ob ']' # 391 "write.ml" let to_buffer ?(suf = "") ?(std = false) ob x = if std then write_std_json ob x else write_json ob x; Buffer.add_string ob suf let to_string ?buf ?(len = 256) ?(suf = "") ?std x = let ob = match buf with None -> Buffer.create len | Some ob -> Buffer.clear ob; ob in to_buffer ~suf ?std ob x; let s = Buffer.contents ob in Buffer.clear ob; s let to_channel ?buf ?(len=4096) ?(suf = "") ?std oc x = let ob = match buf with None -> Buffer.create len | Some ob -> Buffer.clear ob; ob in to_buffer ~suf ?std ob x; Buffer.output_buffer oc ob; Buffer.clear ob let to_output ?buf ?(len=4096) ?(suf = "") ?std out x = let ob = match buf with None -> Buffer.create len | Some ob -> Buffer.clear ob; ob in to_buffer ~suf ?std ob x; out#output (Buffer.contents ob) 0 (Buffer.length ob); Buffer.clear ob let to_file ?len ?std ?(suf = "\n") file x = let oc = open_out file in try to_channel ?len ~suf ?std oc x; close_out oc with e -> close_out_noerr oc; raise e let seq_to_buffer ?(suf = "\n") ?std ob st = Seq.iter (to_buffer ~suf ?std ob) st let seq_to_string ?buf ?(len = 256) ?(suf = "\n") ?std st = let ob = match buf with None -> Buffer.create len | Some ob -> Buffer.clear ob; ob in seq_to_buffer ~suf ?std ob st; let s = Buffer.contents ob in Buffer.clear ob; s let seq_to_channel ?buf ?(len=2096) ?(suf = "\n") ?std oc seq = let ob = match buf with None -> Buffer.create len | Some ob -> Buffer.clear ob; ob in Seq.iter (fun json -> to_buffer ~suf ?std ob json; Buffer.output_buffer oc ob; Buffer.clear ob; ) seq let seq_to_file ?len ?(suf = "\n") ?std file st = let oc = open_out file in try seq_to_channel ?len ~suf ?std oc st; close_out oc with e -> close_out_noerr oc; raise e let rec sort = function | `Assoc l -> let l = List.rev (List.rev_map (fun (k, v) -> (k, sort v)) l) in `Assoc (List.stable_sort (fun (a, _) (b, _) -> String.compare a b) l) | `List l -> `List (List.rev (List.rev_map sort l)) # 495 "write.ml" | x -> x # 35 "yojson.cppo.ml" module Pretty = struct # 1 "pretty.ml" (* Pretty-print JSON data in an attempt to maximize readability. 1. What fits on one line stays on one line. 2. What doesn't fit on one line gets printed more vertically so as to not exceed a reasonable page width, if possible. Arrays containing only simple elements ("atoms") are pretty-printed with end-of-line wrapping like ordinary text: [ "hello", "hello", "hello", "hello", "hello", "hello", "hello", "hello", "hello", "hello", "hello", "hello", "hello", "hello", "hello", "hello" ] Other arrays are printed either horizontally or vertically depending on whether they fit on a single line: [ { "hello": "world" }, { "hello": "world" }, { "hello": "world" } ] or [ { "hello": "world" }, { "hello": "world" }, { "hello": "world" }, { "hello": "world" } ] *) let pp_list sep ppx out l = let pp_sep out () = Format.fprintf out "%s@ " sep in Format.pp_print_list ~pp_sep ppx out l let is_atom (x: [> t]) = match x with | `Null | `Bool _ | `Int _ | `Float _ | `String _ | `Intlit _ | `Floatlit _ | `Stringlit _ | `List [] | `Assoc [] | `Tuple [] | `Variant (_, None) -> true | `List _ | `Assoc _ | `Tuple _ | `Variant (_, Some _) -> false let is_atom_list l = List.for_all is_atom l (* inside_box: indicates that we're already within a box that imposes a certain style and we shouldn't create a new one. This is used for printing field values like this: foo: [ bar ] rather than something else like foo: [ bar ] *) let rec format ~inside_box std (out:Format.formatter) (x:t) : unit = match x with | `Null -> Format.pp_print_string out "null" | `Bool x -> Format.pp_print_bool out x # 78 "pretty.ml" | `Int x -> Format.pp_print_string out (json_string_of_int x) # 81 "pretty.ml" | `Float x -> let s = if std then std_json_string_of_float x else json_string_of_float x in Format.pp_print_string out s # 89 "pretty.ml" | `String s -> Format.pp_print_string out (json_string_of_string s) # 100 "pretty.ml" | `List [] -> Format.pp_print_string out "[]" | `List l -> if not inside_box then Format.fprintf out "@["; if is_atom_list l then (* use line wrapping like we would do for a paragraph of text *) Format.fprintf out "[@;<1 0>@[%a@]@;<1 -2>]" (pp_list "," (format ~inside_box:false std)) l else (* print the elements horizontally if they fit on the line, otherwise print them in a column *) Format.fprintf out "[@;<1 0>@[%a@]@;<1 -2>]" (pp_list "," (format ~inside_box:false std)) l; if not inside_box then Format.fprintf out "@]"; | `Assoc [] -> Format.pp_print_string out "{}" | `Assoc l -> if not inside_box then Format.fprintf out "@["; Format.fprintf out "{@;<1 0>%a@;<1 -2>}" (pp_list "," (format_field std)) l; if not inside_box then Format.fprintf out "@]"; # 156 "pretty.ml" and format_field std out (name, x) = Format.fprintf out "@[%s: %a@]" (json_string_of_string name) (format ~inside_box:true std) x let pp ?(std = false) out x = Format.fprintf out "@[%a@]" (format ~inside_box:true std) (x :> t) let to_string ?std x = Format.asprintf "%a" (pp ?std) x let to_channel ?std oc x = let fmt = Format.formatter_of_out_channel oc in Format.fprintf fmt "%a@?" (pp ?std) x # 38 "yojson.cppo.ml" end # 1 "monomorphic.ml" let rec pp fmt = function | `Null -> Format.pp_print_string fmt "`Null" | `Bool x -> Format.fprintf fmt "`Bool (@["; Format.fprintf fmt "%B" x; Format.fprintf fmt "@])" # 9 "monomorphic.ml" | `Int x -> Format.fprintf fmt "`Int (@["; Format.fprintf fmt "%d" x; Format.fprintf fmt "@])" # 21 "monomorphic.ml" | `Float x -> Format.fprintf fmt "`Float (@["; Format.fprintf fmt "%F" x; Format.fprintf fmt "@])" # 33 "monomorphic.ml" | `String x -> Format.fprintf fmt "`String (@["; Format.fprintf fmt "%S" x; Format.fprintf fmt "@])" # 44 "monomorphic.ml" | `Assoc xs -> Format.fprintf fmt "`Assoc (@["; Format.fprintf fmt "@[<2>["; ignore (List.fold_left (fun sep (key, value) -> if sep then Format.fprintf fmt ";@ "; Format.fprintf fmt "(@["; Format.fprintf fmt "%S" key; Format.fprintf fmt ",@ "; pp fmt value; Format.fprintf fmt "@])"; true) false xs); Format.fprintf fmt "@,]@]"; Format.fprintf fmt "@])" | `List xs -> Format.fprintf fmt "`List (@["; Format.fprintf fmt "@[<2>["; ignore (List.fold_left (fun sep x -> if sep then Format.fprintf fmt ";@ "; pp fmt x; true) false xs); Format.fprintf fmt "@,]@]"; Format.fprintf fmt "@])" # 99 "monomorphic.ml" let show x = Format.asprintf "%a" pp x let rec equal a b = match a, b with | `Null, `Null -> true | `Bool a, `Bool b -> a = b # 107 "monomorphic.ml" | `Int a, `Int b -> a = b # 113 "monomorphic.ml" | `Float a, `Float b -> a = b # 119 "monomorphic.ml" | `String a, `String b -> a = b # 124 "monomorphic.ml" | `Assoc xs, `Assoc ys -> let compare_keys = fun (key, _) (key', _) -> String.compare key key' in let xs = List.stable_sort compare_keys xs in let ys = List.stable_sort compare_keys ys in (match List.for_all2 (fun (key, value) (key', value') -> match key = key' with | false -> false | true -> equal value value') xs ys with | result -> result | exception Invalid_argument _ -> (* the lists were of different lengths, thus unequal *) false) # 139 "monomorphic.ml" | `List xs, `List ys -> (match List.for_all2 equal xs ys with | result -> result | exception Invalid_argument _ -> (* the lists were of different lengths, thus unequal *) false) # 155 "monomorphic.ml" | _ -> false # 2 "write2.ml" let pretty_print ?std out x = Pretty.pp ?std out x let pretty_to_string ?std x = Pretty.to_string ?std x let pretty_to_channel ?std oc x = Pretty.to_channel ?std oc x # 1 "lib/read.mll" # 2 "lib/read.mll" module Lexing = (* We override Lexing.engine in order to avoid creating a new position record each time a rule is matched. This reduces total parsing time by about 31%. *) struct include Lexing external c_engine : lex_tables -> int -> lexbuf -> int = "caml_lex_engine" let engine tbl state buf = let result = c_engine tbl state buf in (* if result >= 0 then begin buf.lex_start_p <- buf.lex_curr_p; buf.lex_curr_p <- {buf.lex_curr_p with pos_cnum = buf.lex_abs_pos + buf.lex_curr_pos}; end; *) result end open Printf open Lexing (* see description in common.mli *) type lexer_state = Lexer_state.t = { buf : Buffer.t; mutable lnum : int; mutable bol : int; mutable fname : string option; } let dec c = Char.code c - 48 let hex c = match c with '0'..'9' -> int_of_char c - int_of_char '0' | 'a'..'f' -> int_of_char c - int_of_char 'a' + 10 | 'A'..'F' -> int_of_char c - int_of_char 'A' + 10 | _ -> assert false let custom_error descr v lexbuf = let offs = lexbuf.lex_abs_pos - 1 in let bol = v.bol in let pos1 = offs + lexbuf.lex_start_pos - bol - 1 in let pos2 = max pos1 (offs + lexbuf.lex_curr_pos - bol) in let file_line = match v.fname with None -> "Line" | Some s -> sprintf "File %s, line" s in let bytes = if pos1 = pos2 then sprintf "byte %i" (pos1+1) else sprintf "bytes %i-%i" (pos1+1) (pos2+1) in let msg = sprintf "%s %i, %s:\n%s" file_line v.lnum bytes descr in json_error msg let lexer_error descr v lexbuf = custom_error (sprintf "%s '%s'" descr (Lexing.lexeme lexbuf)) v lexbuf let read_junk = ref (fun _ -> assert false) let long_error descr v lexbuf = let junk = Lexing.lexeme lexbuf in let extra_junk = !read_junk lexbuf in custom_error (sprintf "%s '%s%s'" descr junk extra_junk) v lexbuf let min10 = min_int / 10 - (if min_int mod 10 = 0 then 0 else 1) let max10 = max_int / 10 + (if max_int mod 10 = 0 then 0 else 1) exception Int_overflow let extract_positive_int lexbuf = let start = lexbuf.lex_start_pos in let stop = lexbuf.lex_curr_pos in let s = lexbuf.lex_buffer in let n = ref 0 in for i = start to stop - 1 do if !n >= max10 then raise Int_overflow else n := 10 * !n + dec (Bytes.get s i) done; if !n < 0 then raise Int_overflow else !n let make_positive_int v lexbuf = # 104 "lib/read.mll" try `Int (extract_positive_int lexbuf) with Int_overflow -> # 110 "lib/read.mll" lexer_error "Int overflow" v lexbuf # 113 "lib/read.mll" let extract_negative_int lexbuf = let start = lexbuf.lex_start_pos + 1 in let stop = lexbuf.lex_curr_pos in let s = lexbuf.lex_buffer in let n = ref 0 in for i = start to stop - 1 do if !n <= min10 then raise Int_overflow else n := 10 * !n - dec (Bytes.get s i) done; if !n > 0 then raise Int_overflow else !n let make_negative_int v lexbuf = # 131 "lib/read.mll" try `Int (extract_negative_int lexbuf) with Int_overflow -> # 137 "lib/read.mll" lexer_error "Int overflow" v lexbuf # 141 "lib/read.mll" let set_file_name v fname = v.fname <- fname let newline v lexbuf = v.lnum <- v.lnum + 1; v.bol <- lexbuf.lex_abs_pos + lexbuf.lex_curr_pos let add_lexeme buf lexbuf = let len = lexbuf.lex_curr_pos - lexbuf.lex_start_pos in Buffer.add_subbytes buf lexbuf.lex_buffer lexbuf.lex_start_pos len let map_lexeme f lexbuf = let len = lexbuf.lex_curr_pos - lexbuf.lex_start_pos in f (Bytes.sub_string lexbuf.lex_buffer lexbuf.lex_start_pos len) 0 len type variant_kind = [ `Edgy_bracket | `Square_bracket | `Double_quote ] type tuple_kind = [ `Parenthesis | `Square_bracket ] # 161 "lib/read.ml" # 161 "lib/read.ml" let __ocaml_lex_tables = { Lexing.lex_base = "\000\000\236\255\237\255\003\000\239\255\016\000\242\255\243\255\ \244\255\245\255\000\000\031\000\249\255\085\000\001\000\000\000\ \000\000\001\000\000\000\001\000\002\000\255\255\000\000\000\000\ \003\000\254\255\001\000\004\000\253\255\011\000\252\255\003\000\ \001\000\003\000\002\000\003\000\000\000\251\255\021\000\097\000\ \010\000\022\000\020\000\016\000\022\000\012\000\008\000\250\255\ \119\000\129\000\139\000\161\000\171\000\181\000\193\000\209\000\ \240\255\011\000\038\000\252\255\065\000\254\255\255\255\110\000\ \252\255\163\000\254\255\255\255\234\000\247\255\248\255\048\001\ \250\255\251\255\252\255\253\255\254\255\255\255\071\001\126\001\ \149\001\249\255\039\000\253\255\254\255\038\000\187\001\210\001\ \248\001\015\002\255\255\220\000\253\255\255\255\245\000\039\002\ \109\002\014\001\088\002\164\002\187\002\225\002\013\000\252\255\ \253\255\254\255\255\255\014\000\253\255\254\255\255\255\030\000\ \253\255\254\255\255\255\015\000\253\255\254\255\255\255\017\001\ \251\255\252\255\253\255\254\255\255\255\019\000\252\255\253\255\ \254\255\015\000\255\255\016\000\255\255\008\001\005\000\253\255\ \023\000\254\255\020\000\255\255\046\000\253\255\254\255\042\000\ \052\000\053\000\255\255\053\000\048\000\091\000\092\000\255\255\ \027\001\250\255\251\255\137\000\104\000\089\000\088\000\106\000\ \255\255\143\000\137\000\177\000\254\255\183\000\168\000\166\000\ \183\000\002\000\253\255\177\000\172\000\187\000\004\000\252\255\ \053\002\251\255\252\255\253\255\103\001\255\255\248\002\254\255\ \006\003\030\003\252\255\253\255\254\255\255\255\040\003\050\003\ \074\003\252\255\253\255\254\255\255\255\061\003\084\003\108\003\ \249\255\250\255\251\255\244\000\120\003\142\003\179\000\194\000\ \015\000\255\255\190\000\188\000\187\000\193\000\183\000\179\000\ \254\255\191\000\201\000\200\000\196\000\203\000\193\000\189\000\ \253\255\157\003\095\003\174\003\196\003\206\003\216\003\228\003\ \239\003\060\000\253\255\254\255\255\255\012\004\252\255\253\255\ \087\004\255\255\145\004\252\255\253\255\221\004\255\255\229\000\ \253\255\254\255\255\255\231\000\253\255\254\255\255\255\002\000\ \255\255\018\001\252\255\253\255\254\255\255\255\034\001\253\255\ \254\255\255\255\000\000\255\255\003\000\254\255\255\255\038\001\ \252\255\253\255\254\255\255\255\120\001\251\255\252\255\253\255\ \254\255\255\255\208\000\253\255\254\255\255\255\211\000\253\255\ \254\255\255\255\189\000\255\255\143\001\252\255\253\255\254\255\ \255\255\013\001\253\255\254\255\255\255\095\001\252\255\253\255\ \254\255\255\255\050\001\253\255\254\255\255\255\026\001\253\255\ \254\255\255\255\233\000\253\255\254\255\255\255\222\000\253\255\ \254\255\255\255\079\005\237\255\238\255\010\000\240\255\044\001\ \243\255\244\255\245\255\246\255\061\001\002\004\249\255\045\005\ \209\000\228\000\211\000\232\000\225\000\223\000\240\000\255\255\ \235\000\234\000\008\001\254\255\004\001\023\001\253\255\054\001\ \252\255\031\001\029\001\032\001\039\001\049\001\045\001\251\255\ \057\001\082\001\080\001\078\001\084\001\074\001\086\001\250\255\ \110\005\012\004\123\005\155\005\165\005\177\005\187\005\197\005\ \241\255\199\001\077\002\253\255\255\255\154\002\222\005\209\005\ \155\002\239\005\053\006\076\006\114\006\016\002\252\255\253\255\ \254\255\255\255\152\006\252\255\253\255\227\006\255\255\085\007\ \244\255\245\255\011\000\247\255\076\002\250\255\251\255\252\255\ \253\255\254\255\031\002\243\005\051\007\100\001\115\001\104\001\ \133\001\118\001\154\001\171\001\255\255\173\001\176\001\191\001\ \185\001\187\001\253\001\230\001\230\001\234\001\247\001\237\001\ \234\001\009\002\019\002\019\002\015\002\021\002\011\002\007\002\ \142\006\152\006\116\007\170\007\180\007\190\007\200\007\210\007\ \248\255\120\002\167\002\253\255\255\255\216\002\082\007\220\007\ \236\002\244\007\058\008\081\008\119\008\076\002\252\255\253\255\ \254\255\255\255\157\008\252\255\253\255\232\008\255\255\135\002\ \120\002\253\255\100\002\254\255\182\002\255\255\011\002\255\255\ \204\002\252\255\253\255\254\255\255\255\046\002\255\255\178\002\ \252\255\253\255\254\255\255\255\023\000\255\255\183\002\252\255\ \253\255\254\255\255\255\187\002\253\255\254\255\255\255\121\002\ \253\255\254\255\255\255\184\002\252\255\253\255\254\255\019\000\ \255\255\140\001\146\001\255\255\150\001\151\001\154\001\168\001\ \170\001\171\001\172\001\173\001\181\001\184\001\185\001\187\001\ \191\001\193\001\195\001\196\001\197\001\200\001\203\001\223\001\ \225\001\228\001\249\001\251\001\002\002\004\002\011\002\012\002\ \013\002\000\000"; Lexing.lex_backtrk = "\255\255\255\255\255\255\017\000\255\255\019\000\255\255\255\255\ \255\255\255\255\007\000\007\000\255\255\019\000\019\000\019\000\ \019\000\019\000\019\000\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\008\000\008\000\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\009\000\255\255\009\000\255\255\009\000\255\255\ \255\255\014\000\255\255\255\255\002\000\255\255\255\255\255\255\ \255\255\002\000\255\255\255\255\255\255\255\255\255\255\007\000\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\001\000\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\001\000\001\000\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\003\000\255\255\001\000\255\255\004\000\003\000\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\001\000\ \255\255\255\255\255\255\001\000\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\004\000\004\000\004\000\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\003\000\255\255\000\000\255\255\ \001\000\255\255\255\255\255\255\255\255\255\255\000\000\002\000\ \255\255\255\255\255\255\255\255\255\255\000\000\002\000\255\255\ \255\255\255\255\255\255\003\000\003\000\005\000\005\000\005\000\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\003\000\255\255\003\000\255\255\003\000\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \001\000\255\255\255\255\255\255\255\255\001\000\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\001\000\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\001\000\255\255\002\000\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\001\000\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\016\000\255\255\018\000\ \255\255\255\255\255\255\255\255\007\000\007\000\255\255\018\000\ \018\000\018\000\018\000\018\000\018\000\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\008\000\255\255\008\000\255\255\008\000\255\255\ \255\255\013\000\255\255\255\255\255\255\001\000\001\000\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\001\000\255\255\255\255\ \255\255\255\255\009\000\255\255\011\000\255\255\255\255\255\255\ \255\255\255\255\000\000\000\000\011\000\011\000\011\000\011\000\ \011\000\011\000\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\000\000\255\255\000\000\255\255\000\000\255\255\ \255\255\006\000\255\255\255\255\255\255\001\000\001\000\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\001\000\255\255\004\000\ \003\000\255\255\255\255\255\255\255\255\255\255\001\000\255\255\ \255\255\255\255\255\255\255\255\255\255\001\000\255\255\255\255\ \255\255\255\255\255\255\255\255\001\000\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\003\000\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255"; Lexing.lex_default = "\001\000\000\000\000\000\255\255\000\000\255\255\000\000\000\000\ \000\000\000\000\255\255\255\255\000\000\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\000\000\255\255\255\255\ \255\255\000\000\255\255\255\255\000\000\255\255\000\000\255\255\ \255\255\255\255\255\255\255\255\255\255\000\000\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\000\000\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \000\000\057\000\060\000\000\000\060\000\000\000\000\000\065\000\ \000\000\065\000\000\000\000\000\070\000\000\000\000\000\255\255\ \000\000\000\000\000\000\000\000\000\000\000\000\255\255\255\255\ \255\255\000\000\084\000\000\000\000\000\255\255\255\255\255\255\ \255\255\255\255\000\000\094\000\000\000\000\000\097\000\255\255\ \255\255\097\000\255\255\255\255\255\255\255\255\104\000\000\000\ \000\000\000\000\000\000\109\000\000\000\000\000\000\000\113\000\ \000\000\000\000\000\000\117\000\000\000\000\000\000\000\121\000\ \000\000\000\000\000\000\000\000\000\000\126\000\000\000\000\000\ \000\000\255\255\000\000\255\255\000\000\255\255\255\255\000\000\ \255\255\000\000\138\000\000\000\142\000\000\000\000\000\255\255\ \255\255\255\255\000\000\255\255\255\255\255\255\255\255\000\000\ \154\000\000\000\000\000\255\255\255\255\255\255\255\255\255\255\ \000\000\255\255\255\255\255\255\000\000\255\255\255\255\255\255\ \255\255\255\255\000\000\255\255\255\255\255\255\255\255\000\000\ \178\000\000\000\000\000\000\000\255\255\000\000\255\255\000\000\ \255\255\187\000\000\000\000\000\000\000\000\000\255\255\255\255\ \194\000\000\000\000\000\000\000\000\000\255\255\255\255\201\000\ \000\000\000\000\000\000\255\255\255\255\255\255\255\255\255\255\ \255\255\000\000\255\255\255\255\255\255\255\255\255\255\255\255\ \000\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \000\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\235\000\000\000\000\000\000\000\239\000\000\000\000\000\ \255\255\000\000\244\000\000\000\000\000\255\255\000\000\249\000\ \000\000\000\000\000\000\253\000\000\000\000\000\000\000\255\255\ \000\000\003\001\000\000\000\000\000\000\000\000\008\001\000\000\ \000\000\000\000\255\255\000\000\255\255\000\000\000\000\017\001\ \000\000\000\000\000\000\000\000\022\001\000\000\000\000\000\000\ \000\000\000\000\028\001\000\000\000\000\000\000\032\001\000\000\ \000\000\000\000\255\255\000\000\038\001\000\000\000\000\000\000\ \000\000\043\001\000\000\000\000\000\000\047\001\000\000\000\000\ \000\000\000\000\052\001\000\000\000\000\000\000\056\001\000\000\ \000\000\000\000\060\001\000\000\000\000\000\000\064\001\000\000\ \000\000\000\000\067\001\000\000\000\000\255\255\000\000\255\255\ \000\000\000\000\000\000\000\000\255\255\255\255\000\000\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\000\000\ \255\255\255\255\255\255\000\000\255\255\255\255\000\000\255\255\ \000\000\255\255\255\255\255\255\255\255\255\255\255\255\000\000\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\000\000\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \000\000\121\001\125\001\000\000\000\000\128\001\255\255\255\255\ \128\001\255\255\255\255\255\255\255\255\135\001\000\000\000\000\ \000\000\000\000\140\001\000\000\000\000\255\255\000\000\144\001\ \000\000\000\000\255\255\000\000\255\255\000\000\000\000\000\000\ \000\000\000\000\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\000\000\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \000\000\193\001\197\001\000\000\000\000\200\001\255\255\255\255\ \200\001\255\255\255\255\255\255\255\255\207\001\000\000\000\000\ \000\000\000\000\212\001\000\000\000\000\255\255\000\000\255\255\ \255\255\000\000\255\255\000\000\220\001\000\000\255\255\000\000\ \226\001\000\000\000\000\000\000\000\000\255\255\000\000\233\001\ \000\000\000\000\000\000\000\000\255\255\000\000\240\001\000\000\ \000\000\000\000\000\000\245\001\000\000\000\000\000\000\249\001\ \000\000\000\000\000\000\252\001\000\000\000\000\000\000\255\255\ \000\000\002\002\004\002\000\000\005\002\006\002\007\002\008\002\ \009\002\010\002\011\002\012\002\013\002\014\002\015\002\016\002\ \017\002\018\002\019\002\020\002\021\002\022\002\023\002\024\002\ \025\002\026\002\027\002\028\002\029\002\030\002\031\002\032\002\ \033\002\003\002"; Lexing.lex_trans = "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\003\000\004\000\000\000\003\000\003\000\134\000\000\000\ \003\000\000\000\134\000\069\001\146\001\255\255\000\000\069\001\ \146\001\000\000\000\000\000\000\000\000\127\000\139\000\000\000\ \003\000\000\000\012\000\003\000\170\000\134\000\175\000\000\000\ \007\000\011\001\069\001\146\001\014\001\013\000\049\000\005\000\ \010\000\011\000\011\000\011\000\011\000\011\000\011\000\011\000\ \011\000\011\000\056\000\118\000\006\000\129\000\130\000\057\000\ \237\001\137\000\000\002\049\000\000\000\048\000\138\000\106\000\ \062\000\014\000\110\000\105\000\000\000\049\000\015\000\011\000\ \011\000\011\000\011\000\011\000\011\000\011\000\011\000\011\000\ \011\000\030\000\048\000\008\000\114\000\209\000\236\000\000\001\ \013\001\029\000\022\000\255\255\048\000\048\000\017\000\021\000\ \025\000\032\000\033\000\035\000\023\000\027\000\016\000\031\000\ \028\000\034\000\019\000\024\000\018\000\026\000\020\000\036\000\ \041\000\037\000\048\000\009\000\042\000\043\000\044\000\045\000\ \046\000\047\000\061\000\085\000\048\000\038\000\039\000\039\000\ \039\000\039\000\039\000\039\000\039\000\039\000\039\000\049\000\ \067\000\039\000\039\000\039\000\039\000\039\000\039\000\039\000\ \039\000\039\000\039\000\086\000\143\000\255\255\040\000\144\000\ \145\000\146\000\055\000\148\000\055\000\149\000\048\000\054\000\ \054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\ \054\000\050\000\050\000\050\000\050\000\050\000\050\000\050\000\ \050\000\050\000\050\000\050\000\050\000\050\000\050\000\050\000\ \050\000\050\000\050\000\050\000\050\000\255\255\048\000\150\000\ \151\000\161\000\066\000\158\000\053\000\159\000\053\000\160\000\ \051\000\052\000\052\000\052\000\052\000\052\000\052\000\052\000\ \052\000\052\000\052\000\052\000\052\000\052\000\052\000\052\000\ \052\000\052\000\052\000\052\000\052\000\052\000\052\000\052\000\ \052\000\052\000\052\000\052\000\052\000\052\000\052\000\165\000\ \051\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\ \054\000\054\000\054\000\162\000\163\000\166\000\093\000\255\255\ \002\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\ \054\000\054\000\054\000\255\255\077\000\103\000\108\000\116\000\ \132\000\134\000\135\000\128\000\139\000\134\000\164\000\093\000\ \171\000\077\000\167\000\168\000\169\000\172\000\112\000\173\000\ \174\000\210\000\226\000\208\000\211\000\212\000\059\000\083\000\ \134\000\213\000\214\000\215\000\216\000\218\000\141\000\219\000\ \093\000\220\000\221\000\123\000\222\000\223\000\224\000\136\000\ \095\000\225\000\035\001\065\001\234\000\155\000\005\001\097\001\ \250\000\255\255\254\000\057\001\061\001\095\001\077\000\044\001\ \092\001\088\001\009\001\029\001\076\000\124\000\033\001\018\001\ \075\000\098\000\019\001\085\001\086\001\087\001\120\001\089\001\ \074\000\225\000\053\001\121\001\073\000\090\001\072\000\071\000\ \078\000\078\000\078\000\078\000\078\000\078\000\078\000\078\000\ \078\000\078\000\098\000\113\001\122\000\091\001\064\000\004\001\ \093\001\078\000\078\000\078\000\078\000\078\000\078\000\079\000\ \079\000\079\000\079\000\079\000\079\000\079\000\079\000\079\000\ \079\000\156\000\112\001\094\001\096\001\098\001\099\001\049\001\ \079\000\079\000\079\000\079\000\079\000\079\000\100\001\157\000\ \101\001\078\000\078\000\078\000\078\000\078\000\078\000\183\000\ \184\000\184\000\184\000\184\000\184\000\184\000\184\000\184\000\ \184\000\024\001\112\001\255\255\025\001\102\001\103\001\105\001\ \079\000\079\000\079\000\079\000\079\000\079\000\080\000\080\000\ \080\000\080\000\080\000\080\000\080\000\080\000\080\000\080\000\ \106\001\107\001\048\001\040\001\108\001\109\001\110\001\080\000\ \080\000\080\000\080\000\080\000\080\000\081\000\081\000\081\000\ \081\000\081\000\081\000\081\000\081\000\081\000\081\000\111\001\ \027\001\255\255\171\001\031\001\170\001\023\001\081\000\081\000\ \081\000\081\000\081\000\081\000\092\000\168\001\063\001\080\000\ \080\000\080\000\080\000\080\000\080\000\248\000\165\001\252\000\ \162\001\059\001\069\000\087\000\087\000\087\000\087\000\087\000\ \087\000\087\000\087\000\087\000\087\000\255\255\081\000\081\000\ \081\000\081\000\081\000\081\000\087\000\087\000\087\000\087\000\ \087\000\087\000\088\000\088\000\088\000\088\000\088\000\088\000\ \088\000\088\000\088\000\088\000\039\001\042\001\255\255\163\001\ \164\001\120\000\002\001\088\000\088\000\088\000\088\000\088\000\ \088\000\166\001\055\001\153\000\087\000\087\000\087\000\087\000\ \087\000\087\000\007\001\167\001\164\001\169\001\016\001\164\001\ \089\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\ \089\000\089\000\051\001\088\000\088\000\088\000\088\000\088\000\ \088\000\089\000\089\000\089\000\089\000\089\000\089\000\090\000\ \090\000\090\000\090\000\090\000\090\000\090\000\090\000\090\000\ \090\000\097\000\137\001\164\001\172\001\185\001\136\001\173\001\ \090\000\090\000\090\000\090\000\090\000\090\000\097\000\179\000\ \174\001\089\000\089\000\089\000\089\000\089\000\089\000\046\001\ \175\001\176\001\180\000\164\001\184\001\181\000\182\000\182\000\ \182\000\182\000\182\000\182\000\182\000\182\000\182\000\124\001\ \090\000\090\000\090\000\090\000\090\000\090\000\192\001\178\001\ \021\001\179\001\097\000\193\001\180\001\181\001\182\001\183\001\ \164\001\216\001\255\255\097\000\184\001\216\001\209\001\097\000\ \223\001\097\000\208\001\230\001\003\002\097\000\219\001\037\001\ \216\001\217\001\003\002\220\001\216\001\097\000\003\002\003\002\ \216\001\097\000\003\002\097\000\096\000\099\000\099\000\099\000\ \099\000\099\000\099\000\099\000\099\000\099\000\099\000\216\001\ \003\002\126\001\003\002\003\002\003\002\003\002\099\000\099\000\ \099\000\099\000\099\000\099\000\097\000\003\002\218\001\250\001\ \003\002\003\002\097\000\003\002\124\001\124\001\097\000\003\002\ \221\001\003\002\253\001\003\002\003\002\003\002\097\000\255\255\ \003\002\196\001\097\000\003\002\097\000\096\000\099\000\099\000\ \099\000\099\000\099\000\099\000\100\000\100\000\100\000\100\000\ \100\000\100\000\100\000\100\000\100\000\100\000\235\001\003\002\ \241\001\003\002\255\001\242\001\003\002\100\000\100\000\100\000\ \100\000\100\000\100\000\101\000\101\000\101\000\101\000\101\000\ \101\000\101\000\101\000\101\000\101\000\246\001\129\001\129\001\ \228\001\003\002\196\001\003\002\101\000\101\000\101\000\101\000\ \101\000\101\000\003\002\198\001\003\002\100\000\100\000\100\000\ \100\000\100\000\100\000\003\002\003\002\003\002\196\001\234\001\ \134\001\097\000\097\000\097\000\097\000\097\000\097\000\097\000\ \097\000\097\000\097\000\000\000\101\000\101\000\101\000\101\000\ \101\000\101\000\097\000\097\000\097\000\097\000\097\000\097\000\ \182\000\182\000\182\000\182\000\182\000\182\000\182\000\182\000\ \182\000\182\000\000\000\000\000\201\001\177\000\184\000\184\000\ \184\000\184\000\184\000\184\000\184\000\184\000\184\000\184\000\ \188\000\000\000\097\000\097\000\097\000\097\000\097\000\097\000\ \201\001\227\001\000\000\191\000\206\001\123\001\189\000\190\000\ \190\000\190\000\190\000\190\000\190\000\190\000\190\000\190\000\ \190\000\190\000\190\000\190\000\190\000\190\000\190\000\190\000\ \190\000\190\000\189\000\190\000\190\000\190\000\190\000\190\000\ \190\000\190\000\190\000\190\000\195\000\197\000\197\000\197\000\ \197\000\197\000\197\000\197\000\197\000\197\000\197\000\198\000\ \255\255\248\001\196\000\197\000\197\000\197\000\197\000\197\000\ \197\000\197\000\197\000\197\000\196\000\197\000\197\000\197\000\ \197\000\197\000\197\000\197\000\197\000\197\000\202\000\227\000\ \227\000\227\000\227\000\227\000\227\000\227\000\227\000\227\000\ \227\000\205\000\255\255\255\255\203\000\204\000\204\000\204\000\ \204\000\204\000\204\000\204\000\204\000\204\000\226\000\195\001\ \204\000\204\000\204\000\204\000\204\000\204\000\204\000\204\000\ \204\000\204\000\232\001\000\000\000\000\206\000\221\001\239\001\ \254\001\000\000\207\000\244\001\000\000\225\000\203\000\204\000\ \204\000\204\000\204\000\204\000\204\000\204\000\204\000\204\000\ \232\000\000\000\232\000\000\000\225\001\231\000\231\000\231\000\ \231\000\231\000\231\000\231\000\231\000\231\000\231\000\217\000\ \255\255\000\000\000\000\000\000\000\000\225\000\227\000\227\000\ \227\000\227\000\227\000\227\000\227\000\227\000\227\000\227\000\ \000\000\000\000\000\000\000\000\255\255\000\000\000\000\230\000\ \000\000\230\000\000\000\228\000\229\000\229\000\229\000\229\000\ \229\000\229\000\229\000\229\000\229\000\229\000\229\000\229\000\ \229\000\229\000\229\000\229\000\229\000\229\000\229\000\229\000\ \229\000\229\000\229\000\229\000\229\000\229\000\229\000\229\000\ \229\000\229\000\000\000\228\000\231\000\231\000\231\000\231\000\ \231\000\231\000\231\000\231\000\231\000\231\000\186\000\231\000\ \231\000\231\000\231\000\231\000\231\000\231\000\231\000\231\000\ \231\000\000\000\000\000\000\000\000\000\000\000\241\000\000\000\ \113\001\000\000\077\001\077\001\077\001\077\001\077\001\077\001\ \077\001\077\001\077\001\077\001\114\001\114\001\114\001\114\001\ \114\001\114\001\114\001\114\001\114\001\114\001\000\000\112\001\ \000\000\000\000\193\000\000\000\000\000\240\000\240\000\240\000\ \240\000\240\000\240\000\240\000\240\000\240\000\240\000\240\000\ \240\000\240\000\240\000\240\000\240\000\240\000\240\000\240\000\ \240\000\240\000\240\000\240\000\240\000\240\000\240\000\112\001\ \000\000\000\000\000\000\240\000\200\000\240\000\240\000\240\000\ \240\000\240\000\240\000\240\000\240\000\240\000\240\000\240\000\ \240\000\240\000\240\000\240\000\240\000\240\000\240\000\240\000\ \240\000\240\000\240\000\240\000\240\000\240\000\240\000\240\000\ \240\000\240\000\240\000\240\000\240\000\240\000\240\000\240\000\ \240\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \240\000\240\000\240\000\240\000\240\000\240\000\240\000\240\000\ \240\000\240\000\240\000\240\000\240\000\240\000\240\000\240\000\ \240\000\240\000\240\000\240\000\240\000\240\000\240\000\240\000\ \240\000\240\000\000\000\246\000\000\000\000\000\240\000\000\000\ \240\000\240\000\240\000\240\000\240\000\240\000\240\000\240\000\ \240\000\240\000\240\000\240\000\240\000\240\000\240\000\240\000\ \240\000\240\000\240\000\240\000\240\000\240\000\240\000\240\000\ \240\000\240\000\245\000\245\000\245\000\245\000\245\000\245\000\ \245\000\245\000\245\000\245\000\245\000\245\000\245\000\245\000\ \245\000\245\000\245\000\245\000\245\000\245\000\245\000\245\000\ \245\000\245\000\245\000\245\000\000\000\000\000\000\000\000\000\ \245\000\000\000\245\000\245\000\245\000\245\000\245\000\245\000\ \245\000\245\000\245\000\245\000\245\000\245\000\245\000\245\000\ \245\000\245\000\245\000\245\000\245\000\245\000\245\000\245\000\ \245\000\245\000\245\000\245\000\238\000\245\000\245\000\245\000\ \245\000\245\000\245\000\245\000\245\000\245\000\245\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\245\000\245\000\ \245\000\245\000\245\000\245\000\245\000\245\000\245\000\245\000\ \245\000\245\000\245\000\245\000\245\000\245\000\245\000\245\000\ \245\000\245\000\245\000\245\000\245\000\245\000\245\000\245\000\ \000\000\000\000\000\000\000\000\245\000\000\000\245\000\245\000\ \245\000\245\000\245\000\245\000\245\000\245\000\245\000\245\000\ \245\000\245\000\245\000\245\000\245\000\245\000\245\000\245\000\ \245\000\245\000\245\000\245\000\245\000\245\000\245\000\245\000\ \069\001\070\001\000\000\000\000\069\001\076\001\077\001\077\001\ \077\001\077\001\077\001\077\001\077\001\077\001\077\001\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\069\001\ \000\000\078\001\000\000\000\000\000\000\000\000\104\001\073\001\ \000\000\000\000\000\000\000\000\079\001\000\000\071\001\076\001\ \077\001\077\001\077\001\077\001\077\001\077\001\077\001\077\001\ \077\001\000\000\000\000\072\001\000\000\000\000\000\000\000\000\ \000\000\243\000\000\000\000\000\000\000\000\000\000\000\000\000\ \080\001\119\001\000\000\119\001\000\000\081\001\118\001\118\001\ \118\001\118\001\118\001\118\001\118\001\118\001\118\001\118\001\ \000\000\000\000\074\001\114\001\114\001\114\001\114\001\114\001\ \114\001\114\001\114\001\114\001\114\001\083\001\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\082\001\000\000\000\000\ \115\001\000\000\000\000\084\001\000\000\000\000\117\001\000\000\ \117\001\000\000\075\001\116\001\116\001\116\001\116\001\116\001\ \116\001\116\001\116\001\116\001\116\001\116\001\116\001\116\001\ \116\001\116\001\116\001\116\001\116\001\116\001\116\001\000\000\ \115\001\116\001\116\001\116\001\116\001\116\001\116\001\116\001\ \116\001\116\001\116\001\118\001\118\001\118\001\118\001\118\001\ \118\001\118\001\118\001\118\001\118\001\118\001\118\001\118\001\ \118\001\118\001\118\001\118\001\118\001\118\001\118\001\000\000\ \128\001\130\001\130\001\130\001\130\001\130\001\130\001\130\001\ \130\001\130\001\130\001\000\000\000\000\128\001\000\000\000\000\ \000\000\128\001\130\001\130\001\130\001\130\001\130\001\130\001\ \000\000\000\000\000\000\000\000\000\000\000\000\128\001\000\000\ \000\000\185\001\000\000\155\001\155\001\155\001\155\001\155\001\ \155\001\155\001\155\001\155\001\155\001\000\000\000\000\000\000\ \000\000\000\000\130\001\130\001\130\001\130\001\130\001\130\001\ \184\001\000\000\128\001\000\000\000\000\000\000\000\000\000\000\ \128\001\000\000\000\000\000\000\128\001\000\000\000\000\000\000\ \000\000\000\000\000\000\128\001\128\001\000\000\000\000\068\001\ \128\001\128\001\128\001\127\001\000\000\128\001\000\000\000\000\ \184\001\000\000\000\000\000\000\000\000\128\001\000\000\000\000\ \000\000\128\001\000\000\128\001\127\001\131\001\131\001\131\001\ \131\001\131\001\131\001\131\001\131\001\131\001\131\001\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\131\001\131\001\ \131\001\131\001\131\001\131\001\132\001\132\001\132\001\132\001\ \132\001\132\001\132\001\132\001\132\001\132\001\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\132\001\132\001\132\001\ \132\001\132\001\132\001\000\000\000\000\000\000\131\001\131\001\ \131\001\131\001\131\001\131\001\000\000\000\000\000\000\000\000\ \000\000\000\000\128\001\128\001\128\001\128\001\128\001\128\001\ \128\001\128\001\128\001\128\001\000\000\132\001\132\001\132\001\ \132\001\132\001\132\001\128\001\128\001\128\001\128\001\128\001\ \128\001\191\001\142\001\191\001\000\000\000\000\190\001\190\001\ \190\001\190\001\190\001\190\001\190\001\190\001\190\001\190\001\ \186\001\186\001\186\001\186\001\186\001\186\001\186\001\186\001\ \186\001\186\001\000\000\128\001\128\001\128\001\128\001\128\001\ \128\001\141\001\141\001\141\001\141\001\141\001\141\001\141\001\ \141\001\141\001\141\001\141\001\141\001\141\001\141\001\141\001\ \141\001\141\001\141\001\141\001\141\001\141\001\141\001\141\001\ \141\001\141\001\141\001\000\000\000\000\000\000\000\000\141\001\ \000\000\141\001\141\001\141\001\141\001\141\001\141\001\141\001\ \141\001\141\001\141\001\141\001\141\001\141\001\141\001\141\001\ \141\001\141\001\141\001\141\001\141\001\141\001\141\001\141\001\ \141\001\141\001\141\001\141\001\141\001\141\001\141\001\141\001\ \141\001\141\001\141\001\141\001\141\001\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\141\001\141\001\141\001\141\001\ \141\001\141\001\141\001\141\001\141\001\141\001\141\001\141\001\ \141\001\141\001\141\001\141\001\141\001\141\001\141\001\141\001\ \141\001\141\001\141\001\141\001\141\001\141\001\000\000\000\000\ \000\000\000\000\141\001\000\000\141\001\141\001\141\001\141\001\ \141\001\141\001\141\001\141\001\141\001\141\001\141\001\141\001\ \141\001\141\001\141\001\141\001\141\001\141\001\141\001\141\001\ \141\001\141\001\141\001\141\001\141\001\141\001\146\001\147\001\ \000\000\000\000\146\001\154\001\155\001\155\001\155\001\155\001\ \155\001\155\001\155\001\155\001\155\001\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\200\001\146\001\000\000\153\001\ \000\000\000\000\000\000\000\000\177\001\150\001\000\000\000\000\ \000\000\200\001\156\001\000\000\148\001\154\001\155\001\155\001\ \155\001\155\001\155\001\155\001\155\001\155\001\155\001\000\000\ \000\000\149\001\000\000\000\000\000\000\000\000\000\000\000\000\ \139\001\000\000\000\000\000\000\000\000\000\000\157\001\000\000\ \000\000\000\000\000\000\158\001\186\001\186\001\186\001\186\001\ \186\001\186\001\186\001\186\001\186\001\186\001\200\001\000\000\ \151\001\000\000\000\000\000\000\200\001\000\000\000\000\000\000\ \200\001\187\001\000\000\160\001\000\000\000\000\000\000\000\000\ \200\001\000\000\000\000\159\001\200\001\000\000\200\001\199\001\ \000\000\161\001\000\000\000\000\000\000\000\000\000\000\000\000\ \152\001\000\000\000\000\000\000\000\000\189\001\000\000\189\001\ \000\000\187\001\188\001\188\001\188\001\188\001\188\001\188\001\ \188\001\188\001\188\001\188\001\188\001\188\001\188\001\188\001\ \188\001\188\001\188\001\188\001\188\001\188\001\188\001\188\001\ \188\001\188\001\188\001\188\001\188\001\188\001\188\001\188\001\ \190\001\190\001\190\001\190\001\190\001\190\001\190\001\190\001\ \190\001\190\001\190\001\190\001\190\001\190\001\190\001\190\001\ \190\001\190\001\190\001\190\001\202\001\202\001\202\001\202\001\ \202\001\202\001\202\001\202\001\202\001\202\001\200\001\000\000\ \000\000\000\000\000\000\000\000\000\000\202\001\202\001\202\001\ \202\001\202\001\202\001\200\001\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\202\001\202\001\202\001\ \202\001\202\001\202\001\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \200\001\000\000\000\000\000\000\000\000\145\001\200\001\000\000\ \000\000\000\000\200\001\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\200\001\000\000\000\000\000\000\200\001\000\000\ \200\001\199\001\203\001\203\001\203\001\203\001\203\001\203\001\ \203\001\203\001\203\001\203\001\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\203\001\203\001\203\001\203\001\203\001\ \203\001\204\001\204\001\204\001\204\001\204\001\204\001\204\001\ \204\001\204\001\204\001\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\204\001\204\001\204\001\204\001\204\001\204\001\ \000\000\000\000\000\000\203\001\203\001\203\001\203\001\203\001\ \203\001\000\000\000\000\000\000\000\000\000\000\000\000\200\001\ \200\001\200\001\200\001\200\001\200\001\200\001\200\001\200\001\ \200\001\000\000\204\001\204\001\204\001\204\001\204\001\204\001\ \200\001\200\001\200\001\200\001\200\001\200\001\000\000\214\001\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \200\001\200\001\200\001\200\001\200\001\200\001\213\001\213\001\ \213\001\213\001\213\001\213\001\213\001\213\001\213\001\213\001\ \213\001\213\001\213\001\213\001\213\001\213\001\213\001\213\001\ \213\001\213\001\213\001\213\001\213\001\213\001\213\001\213\001\ \000\000\000\000\000\000\000\000\213\001\000\000\213\001\213\001\ \213\001\213\001\213\001\213\001\213\001\213\001\213\001\213\001\ \213\001\213\001\213\001\213\001\213\001\213\001\213\001\213\001\ \213\001\213\001\213\001\213\001\213\001\213\001\213\001\213\001\ \213\001\213\001\213\001\213\001\213\001\213\001\213\001\213\001\ \213\001\213\001\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\213\001\213\001\213\001\213\001\213\001\213\001\213\001\ \213\001\213\001\213\001\213\001\213\001\213\001\213\001\213\001\ \213\001\213\001\213\001\213\001\213\001\213\001\213\001\213\001\ \213\001\213\001\213\001\000\000\000\000\000\000\000\000\213\001\ \000\000\213\001\213\001\213\001\213\001\213\001\213\001\213\001\ \213\001\213\001\213\001\213\001\213\001\213\001\213\001\213\001\ \213\001\213\001\213\001\213\001\213\001\213\001\213\001\213\001\ \213\001\213\001\213\001\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\211\001\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000"; Lexing.lex_check = "\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\000\000\000\000\255\255\003\000\000\000\134\000\255\255\ \003\000\255\255\134\000\069\001\146\001\057\000\255\255\069\001\ \146\001\255\255\255\255\255\255\255\255\125\000\138\000\255\255\ \000\000\255\255\000\000\003\000\169\000\134\000\174\000\255\255\ \000\000\010\001\069\001\146\001\012\001\000\000\010\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\005\000\115\000\000\000\125\000\129\000\005\000\ \236\001\136\000\255\001\038\000\255\255\010\000\136\000\102\000\ \058\000\000\000\107\000\102\000\255\255\011\000\000\000\011\000\ \011\000\011\000\011\000\011\000\011\000\011\000\011\000\011\000\ \011\000\029\000\038\000\000\000\111\000\208\000\233\000\255\000\ \012\001\015\000\017\000\060\000\011\000\010\000\000\000\020\000\ \024\000\031\000\032\000\034\000\022\000\026\000\000\000\014\000\ \027\000\033\000\018\000\023\000\000\000\016\000\019\000\035\000\ \040\000\036\000\038\000\000\000\041\000\042\000\043\000\044\000\ \045\000\046\000\058\000\082\000\011\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\039\000\ \063\000\039\000\039\000\039\000\039\000\039\000\039\000\039\000\ \039\000\039\000\039\000\085\000\140\000\060\000\013\000\143\000\ \144\000\145\000\048\000\147\000\048\000\148\000\039\000\048\000\ \048\000\048\000\048\000\048\000\048\000\048\000\048\000\048\000\ \048\000\049\000\049\000\049\000\049\000\049\000\049\000\049\000\ \049\000\049\000\049\000\050\000\050\000\050\000\050\000\050\000\ \050\000\050\000\050\000\050\000\050\000\065\000\039\000\149\000\ \150\000\156\000\063\000\157\000\051\000\158\000\051\000\159\000\ \050\000\051\000\051\000\051\000\051\000\051\000\051\000\051\000\ \051\000\051\000\051\000\052\000\052\000\052\000\052\000\052\000\ \052\000\052\000\052\000\052\000\052\000\053\000\053\000\053\000\ \053\000\053\000\053\000\053\000\053\000\053\000\053\000\155\000\ \050\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\ \054\000\054\000\054\000\161\000\162\000\155\000\091\000\065\000\ \000\000\055\000\055\000\055\000\055\000\055\000\055\000\055\000\ \055\000\055\000\055\000\057\000\068\000\102\000\107\000\115\000\ \131\000\133\000\133\000\125\000\138\000\133\000\163\000\094\000\ \165\000\068\000\166\000\167\000\168\000\171\000\111\000\172\000\ \173\000\206\000\203\000\207\000\210\000\211\000\058\000\082\000\ \133\000\212\000\213\000\214\000\215\000\217\000\140\000\218\000\ \097\000\219\000\220\000\119\000\221\000\222\000\223\000\133\000\ \091\000\203\000\034\001\062\001\233\000\152\000\001\001\080\001\ \247\000\060\000\251\000\054\001\058\001\081\001\068\000\041\001\ \082\001\083\001\006\001\026\001\068\000\119\000\030\001\015\001\ \068\000\094\000\015\001\084\001\085\001\086\001\071\001\088\001\ \068\000\203\000\050\001\071\001\068\000\089\001\068\000\068\000\ \071\000\071\000\071\000\071\000\071\000\071\000\071\000\071\000\ \071\000\071\000\097\000\076\001\119\000\090\001\063\000\001\001\ \092\001\071\000\071\000\071\000\071\000\071\000\071\000\078\000\ \078\000\078\000\078\000\078\000\078\000\078\000\078\000\078\000\ \078\000\152\000\076\001\093\001\095\001\097\001\098\001\045\001\ \078\000\078\000\078\000\078\000\078\000\078\000\099\001\152\000\ \100\001\071\000\071\000\071\000\071\000\071\000\071\000\180\000\ \180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\ \180\000\020\001\076\001\065\000\020\001\101\001\102\001\104\001\ \078\000\078\000\078\000\078\000\078\000\078\000\079\000\079\000\ \079\000\079\000\079\000\079\000\079\000\079\000\079\000\079\000\ \105\001\106\001\045\001\036\001\107\001\108\001\109\001\079\000\ \079\000\079\000\079\000\079\000\079\000\080\000\080\000\080\000\ \080\000\080\000\080\000\080\000\080\000\080\000\080\000\110\001\ \026\001\121\001\157\001\030\001\158\001\020\001\080\000\080\000\ \080\000\080\000\080\000\080\000\091\000\159\001\062\001\079\000\ \079\000\079\000\079\000\079\000\079\000\247\000\160\001\251\000\ \161\001\058\001\068\000\086\000\086\000\086\000\086\000\086\000\ \086\000\086\000\086\000\086\000\086\000\094\000\080\000\080\000\ \080\000\080\000\080\000\080\000\086\000\086\000\086\000\086\000\ \086\000\086\000\087\000\087\000\087\000\087\000\087\000\087\000\ \087\000\087\000\087\000\087\000\036\001\041\001\097\000\162\001\ \163\001\119\000\001\001\087\000\087\000\087\000\087\000\087\000\ \087\000\165\001\054\001\152\000\086\000\086\000\086\000\086\000\ \086\000\086\000\006\001\166\001\167\001\168\001\015\001\169\001\ \088\000\088\000\088\000\088\000\088\000\088\000\088\000\088\000\ \088\000\088\000\050\001\087\000\087\000\087\000\087\000\087\000\ \087\000\088\000\088\000\088\000\088\000\088\000\088\000\089\000\ \089\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\ \089\000\095\000\133\001\170\001\171\001\154\001\133\001\172\001\ \089\000\089\000\089\000\089\000\089\000\089\000\095\000\176\000\ \173\001\088\000\088\000\088\000\088\000\088\000\088\000\045\001\ \174\001\175\001\176\000\176\001\154\001\176\000\176\000\176\000\ \176\000\176\000\176\000\176\000\176\000\176\000\176\000\122\001\ \089\000\089\000\089\000\089\000\089\000\089\000\148\001\177\001\ \020\001\178\001\098\000\148\001\179\001\180\001\181\001\182\001\ \183\001\216\001\193\001\095\000\154\001\216\001\205\001\098\000\ \222\001\095\000\205\001\229\001\001\002\095\000\218\001\036\001\ \215\001\215\001\002\002\218\001\215\001\095\000\004\002\005\002\ \216\001\095\000\006\002\095\000\095\000\096\000\096\000\096\000\ \096\000\096\000\096\000\096\000\096\000\096\000\096\000\215\001\ \007\002\122\001\008\002\009\002\010\002\011\002\096\000\096\000\ \096\000\096\000\096\000\096\000\098\000\012\002\215\001\247\001\ \013\002\014\002\098\000\015\002\125\001\128\001\098\000\016\002\ \220\001\017\002\251\001\018\002\019\002\020\002\098\000\121\001\ \021\002\194\001\098\000\022\002\098\000\098\000\096\000\096\000\ \096\000\096\000\096\000\096\000\099\000\099\000\099\000\099\000\ \099\000\099\000\099\000\099\000\099\000\099\000\231\001\023\002\ \238\001\024\002\251\001\238\001\025\002\099\000\099\000\099\000\ \099\000\099\000\099\000\100\000\100\000\100\000\100\000\100\000\ \100\000\100\000\100\000\100\000\100\000\243\001\125\001\128\001\ \224\001\026\002\197\001\027\002\100\000\100\000\100\000\100\000\ \100\000\100\000\028\002\194\001\029\002\099\000\099\000\099\000\ \099\000\099\000\099\000\030\002\031\002\032\002\200\001\231\001\ \133\001\101\000\101\000\101\000\101\000\101\000\101\000\101\000\ \101\000\101\000\101\000\255\255\100\000\100\000\100\000\100\000\ \100\000\100\000\101\000\101\000\101\000\101\000\101\000\101\000\ \182\000\182\000\182\000\182\000\182\000\182\000\182\000\182\000\ \182\000\182\000\255\255\255\255\197\001\176\000\184\000\184\000\ \184\000\184\000\184\000\184\000\184\000\184\000\184\000\184\000\ \185\000\255\255\101\000\101\000\101\000\101\000\101\000\101\000\ \200\001\224\001\255\255\185\000\205\001\122\001\185\000\185\000\ \185\000\185\000\185\000\185\000\185\000\185\000\185\000\185\000\ \190\000\190\000\190\000\190\000\190\000\190\000\190\000\190\000\ \190\000\190\000\191\000\191\000\191\000\191\000\191\000\191\000\ \191\000\191\000\191\000\191\000\192\000\197\000\197\000\197\000\ \197\000\197\000\197\000\197\000\197\000\197\000\197\000\192\000\ \193\001\247\001\192\000\192\000\192\000\192\000\192\000\192\000\ \192\000\192\000\192\000\192\000\198\000\198\000\198\000\198\000\ \198\000\198\000\198\000\198\000\198\000\198\000\199\000\226\000\ \226\000\226\000\226\000\226\000\226\000\226\000\226\000\226\000\ \226\000\199\000\125\001\128\001\199\000\199\000\199\000\199\000\ \199\000\199\000\199\000\199\000\199\000\199\000\204\000\194\001\ \204\000\204\000\204\000\204\000\204\000\204\000\204\000\204\000\ \204\000\204\000\231\001\255\255\255\255\199\000\220\001\238\001\ \251\001\255\255\199\000\243\001\255\255\204\000\205\000\205\000\ \205\000\205\000\205\000\205\000\205\000\205\000\205\000\205\000\ \225\000\255\255\225\000\255\255\224\001\225\000\225\000\225\000\ \225\000\225\000\225\000\225\000\225\000\225\000\225\000\205\000\ \197\001\255\255\255\255\255\255\255\255\204\000\227\000\227\000\ \227\000\227\000\227\000\227\000\227\000\227\000\227\000\227\000\ \255\255\255\255\255\255\255\255\200\001\255\255\255\255\228\000\ \255\255\228\000\255\255\227\000\228\000\228\000\228\000\228\000\ \228\000\228\000\228\000\228\000\228\000\228\000\229\000\229\000\ \229\000\229\000\229\000\229\000\229\000\229\000\229\000\229\000\ \230\000\230\000\230\000\230\000\230\000\230\000\230\000\230\000\ \230\000\230\000\255\255\227\000\231\000\231\000\231\000\231\000\ \231\000\231\000\231\000\231\000\231\000\231\000\185\000\232\000\ \232\000\232\000\232\000\232\000\232\000\232\000\232\000\232\000\ \232\000\255\255\255\255\255\255\255\255\255\255\237\000\255\255\ \077\001\255\255\077\001\077\001\077\001\077\001\077\001\077\001\ \077\001\077\001\077\001\077\001\113\001\113\001\113\001\113\001\ \113\001\113\001\113\001\113\001\113\001\113\001\255\255\077\001\ \255\255\255\255\192\000\255\255\255\255\237\000\237\000\237\000\ \237\000\237\000\237\000\237\000\237\000\237\000\237\000\237\000\ \237\000\237\000\237\000\237\000\237\000\237\000\237\000\237\000\ \237\000\237\000\237\000\237\000\237\000\237\000\237\000\077\001\ \255\255\255\255\255\255\237\000\199\000\237\000\237\000\237\000\ \237\000\237\000\237\000\237\000\237\000\237\000\237\000\237\000\ \237\000\237\000\237\000\237\000\237\000\237\000\237\000\237\000\ \237\000\237\000\237\000\237\000\237\000\237\000\237\000\240\000\ \240\000\240\000\240\000\240\000\240\000\240\000\240\000\240\000\ \240\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \240\000\240\000\240\000\240\000\240\000\240\000\240\000\240\000\ \240\000\240\000\240\000\240\000\240\000\240\000\240\000\240\000\ \240\000\240\000\240\000\240\000\240\000\240\000\240\000\240\000\ \240\000\240\000\255\255\242\000\255\255\255\255\240\000\255\255\ \240\000\240\000\240\000\240\000\240\000\240\000\240\000\240\000\ \240\000\240\000\240\000\240\000\240\000\240\000\240\000\240\000\ \240\000\240\000\240\000\240\000\240\000\240\000\240\000\240\000\ \240\000\240\000\242\000\242\000\242\000\242\000\242\000\242\000\ \242\000\242\000\242\000\242\000\242\000\242\000\242\000\242\000\ \242\000\242\000\242\000\242\000\242\000\242\000\242\000\242\000\ \242\000\242\000\242\000\242\000\255\255\255\255\255\255\255\255\ \242\000\255\255\242\000\242\000\242\000\242\000\242\000\242\000\ \242\000\242\000\242\000\242\000\242\000\242\000\242\000\242\000\ \242\000\242\000\242\000\242\000\242\000\242\000\242\000\242\000\ \242\000\242\000\242\000\242\000\237\000\245\000\245\000\245\000\ \245\000\245\000\245\000\245\000\245\000\245\000\245\000\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\245\000\245\000\ \245\000\245\000\245\000\245\000\245\000\245\000\245\000\245\000\ \245\000\245\000\245\000\245\000\245\000\245\000\245\000\245\000\ \245\000\245\000\245\000\245\000\245\000\245\000\245\000\245\000\ \255\255\255\255\255\255\255\255\245\000\255\255\245\000\245\000\ \245\000\245\000\245\000\245\000\245\000\245\000\245\000\245\000\ \245\000\245\000\245\000\245\000\245\000\245\000\245\000\245\000\ \245\000\245\000\245\000\245\000\245\000\245\000\245\000\245\000\ \066\001\066\001\255\255\255\255\066\001\079\001\079\001\079\001\ \079\001\079\001\079\001\079\001\079\001\079\001\079\001\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\066\001\ \255\255\066\001\255\255\255\255\255\255\255\255\079\001\066\001\ \255\255\255\255\255\255\255\255\066\001\255\255\066\001\066\001\ \066\001\066\001\066\001\066\001\066\001\066\001\066\001\066\001\ \066\001\255\255\255\255\066\001\255\255\255\255\255\255\255\255\ \255\255\242\000\255\255\255\255\255\255\255\255\255\255\255\255\ \066\001\112\001\255\255\112\001\255\255\066\001\112\001\112\001\ \112\001\112\001\112\001\112\001\112\001\112\001\112\001\112\001\ \255\255\255\255\066\001\114\001\114\001\114\001\114\001\114\001\ \114\001\114\001\114\001\114\001\114\001\066\001\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\066\001\255\255\255\255\ \114\001\255\255\255\255\066\001\255\255\255\255\115\001\255\255\ \115\001\255\255\066\001\115\001\115\001\115\001\115\001\115\001\ \115\001\115\001\115\001\115\001\115\001\116\001\116\001\116\001\ \116\001\116\001\116\001\116\001\116\001\116\001\116\001\255\255\ \114\001\117\001\117\001\117\001\117\001\117\001\117\001\117\001\ \117\001\117\001\117\001\118\001\118\001\118\001\118\001\118\001\ \118\001\118\001\118\001\118\001\118\001\119\001\119\001\119\001\ \119\001\119\001\119\001\119\001\119\001\119\001\119\001\255\255\ \126\001\127\001\127\001\127\001\127\001\127\001\127\001\127\001\ \127\001\127\001\127\001\255\255\255\255\126\001\255\255\255\255\ \255\255\129\001\127\001\127\001\127\001\127\001\127\001\127\001\ \255\255\255\255\255\255\255\255\255\255\255\255\129\001\255\255\ \255\255\155\001\255\255\155\001\155\001\155\001\155\001\155\001\ \155\001\155\001\155\001\155\001\155\001\255\255\255\255\255\255\ \255\255\255\255\127\001\127\001\127\001\127\001\127\001\127\001\ \155\001\255\255\126\001\255\255\255\255\255\255\255\255\255\255\ \126\001\255\255\255\255\255\255\126\001\255\255\255\255\255\255\ \255\255\255\255\255\255\129\001\126\001\255\255\255\255\066\001\ \126\001\129\001\126\001\126\001\255\255\129\001\255\255\255\255\ \155\001\255\255\255\255\255\255\255\255\129\001\255\255\255\255\ \255\255\129\001\255\255\129\001\129\001\130\001\130\001\130\001\ \130\001\130\001\130\001\130\001\130\001\130\001\130\001\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\130\001\130\001\ \130\001\130\001\130\001\130\001\131\001\131\001\131\001\131\001\ \131\001\131\001\131\001\131\001\131\001\131\001\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\131\001\131\001\131\001\ \131\001\131\001\131\001\255\255\255\255\255\255\130\001\130\001\ \130\001\130\001\130\001\130\001\255\255\255\255\255\255\255\255\ \255\255\255\255\132\001\132\001\132\001\132\001\132\001\132\001\ \132\001\132\001\132\001\132\001\255\255\131\001\131\001\131\001\ \131\001\131\001\131\001\132\001\132\001\132\001\132\001\132\001\ \132\001\184\001\138\001\184\001\255\255\255\255\184\001\184\001\ \184\001\184\001\184\001\184\001\184\001\184\001\184\001\184\001\ \185\001\185\001\185\001\185\001\185\001\185\001\185\001\185\001\ \185\001\185\001\255\255\132\001\132\001\132\001\132\001\132\001\ \132\001\138\001\138\001\138\001\138\001\138\001\138\001\138\001\ \138\001\138\001\138\001\138\001\138\001\138\001\138\001\138\001\ \138\001\138\001\138\001\138\001\138\001\138\001\138\001\138\001\ \138\001\138\001\138\001\255\255\255\255\255\255\255\255\138\001\ \255\255\138\001\138\001\138\001\138\001\138\001\138\001\138\001\ \138\001\138\001\138\001\138\001\138\001\138\001\138\001\138\001\ \138\001\138\001\138\001\138\001\138\001\138\001\138\001\138\001\ \138\001\138\001\138\001\141\001\141\001\141\001\141\001\141\001\ \141\001\141\001\141\001\141\001\141\001\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\141\001\141\001\141\001\141\001\ \141\001\141\001\141\001\141\001\141\001\141\001\141\001\141\001\ \141\001\141\001\141\001\141\001\141\001\141\001\141\001\141\001\ \141\001\141\001\141\001\141\001\141\001\141\001\255\255\255\255\ \255\255\255\255\141\001\255\255\141\001\141\001\141\001\141\001\ \141\001\141\001\141\001\141\001\141\001\141\001\141\001\141\001\ \141\001\141\001\141\001\141\001\141\001\141\001\141\001\141\001\ \141\001\141\001\141\001\141\001\141\001\141\001\143\001\143\001\ \255\255\255\255\143\001\156\001\156\001\156\001\156\001\156\001\ \156\001\156\001\156\001\156\001\156\001\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\198\001\143\001\255\255\143\001\ \255\255\255\255\255\255\255\255\156\001\143\001\255\255\255\255\ \255\255\198\001\143\001\255\255\143\001\143\001\143\001\143\001\ \143\001\143\001\143\001\143\001\143\001\143\001\143\001\255\255\ \255\255\143\001\255\255\255\255\255\255\255\255\255\255\255\255\ \138\001\255\255\255\255\255\255\255\255\255\255\143\001\255\255\ \255\255\255\255\255\255\143\001\186\001\186\001\186\001\186\001\ \186\001\186\001\186\001\186\001\186\001\186\001\198\001\255\255\ \143\001\255\255\255\255\255\255\198\001\255\255\255\255\255\255\ \198\001\186\001\255\255\143\001\255\255\255\255\255\255\255\255\ \198\001\255\255\255\255\143\001\198\001\255\255\198\001\198\001\ \255\255\143\001\255\255\255\255\255\255\255\255\255\255\255\255\ \143\001\255\255\255\255\255\255\255\255\187\001\255\255\187\001\ \255\255\186\001\187\001\187\001\187\001\187\001\187\001\187\001\ \187\001\187\001\187\001\187\001\188\001\188\001\188\001\188\001\ \188\001\188\001\188\001\188\001\188\001\188\001\189\001\189\001\ \189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\ \190\001\190\001\190\001\190\001\190\001\190\001\190\001\190\001\ \190\001\190\001\191\001\191\001\191\001\191\001\191\001\191\001\ \191\001\191\001\191\001\191\001\199\001\199\001\199\001\199\001\ \199\001\199\001\199\001\199\001\199\001\199\001\201\001\255\255\ \255\255\255\255\255\255\255\255\255\255\199\001\199\001\199\001\ \199\001\199\001\199\001\201\001\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\199\001\199\001\199\001\ \199\001\199\001\199\001\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \201\001\255\255\255\255\255\255\255\255\143\001\201\001\255\255\ \255\255\255\255\201\001\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\201\001\255\255\255\255\255\255\201\001\255\255\ \201\001\201\001\202\001\202\001\202\001\202\001\202\001\202\001\ \202\001\202\001\202\001\202\001\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\202\001\202\001\202\001\202\001\202\001\ \202\001\203\001\203\001\203\001\203\001\203\001\203\001\203\001\ \203\001\203\001\203\001\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\203\001\203\001\203\001\203\001\203\001\203\001\ \255\255\255\255\255\255\202\001\202\001\202\001\202\001\202\001\ \202\001\255\255\255\255\255\255\255\255\255\255\255\255\204\001\ \204\001\204\001\204\001\204\001\204\001\204\001\204\001\204\001\ \204\001\255\255\203\001\203\001\203\001\203\001\203\001\203\001\ \204\001\204\001\204\001\204\001\204\001\204\001\255\255\210\001\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \204\001\204\001\204\001\204\001\204\001\204\001\210\001\210\001\ \210\001\210\001\210\001\210\001\210\001\210\001\210\001\210\001\ \210\001\210\001\210\001\210\001\210\001\210\001\210\001\210\001\ \210\001\210\001\210\001\210\001\210\001\210\001\210\001\210\001\ \255\255\255\255\255\255\255\255\210\001\255\255\210\001\210\001\ \210\001\210\001\210\001\210\001\210\001\210\001\210\001\210\001\ \210\001\210\001\210\001\210\001\210\001\210\001\210\001\210\001\ \210\001\210\001\210\001\210\001\210\001\210\001\210\001\210\001\ \213\001\213\001\213\001\213\001\213\001\213\001\213\001\213\001\ \213\001\213\001\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\213\001\213\001\213\001\213\001\213\001\213\001\213\001\ \213\001\213\001\213\001\213\001\213\001\213\001\213\001\213\001\ \213\001\213\001\213\001\213\001\213\001\213\001\213\001\213\001\ \213\001\213\001\213\001\255\255\255\255\255\255\255\255\213\001\ \255\255\213\001\213\001\213\001\213\001\213\001\213\001\213\001\ \213\001\213\001\213\001\213\001\213\001\213\001\213\001\213\001\ \213\001\213\001\213\001\213\001\213\001\213\001\213\001\213\001\ \213\001\213\001\213\001\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\210\001\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255"; Lexing.lex_base_code = ""; Lexing.lex_backtrk_code = ""; Lexing.lex_default_code = ""; Lexing.lex_trans_code = ""; Lexing.lex_check_code = ""; Lexing.lex_code = ""; } let rec read_json v lexbuf = __ocaml_lex_read_json_rec v lexbuf 0 and __ocaml_lex_read_json_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 188 "lib/read.mll" # 188 "lib/read.mll" ( `Bool true ) # 1032 "lib/read.ml" # 1033 "lib/read.ml" | 1 -> # 189 "lib/read.mll" # 189 "lib/read.mll" ( `Bool false ) # 1037 "lib/read.ml" # 1038 "lib/read.ml" | 2 -> # 190 "lib/read.mll" # 190 "lib/read.mll" ( `Null ) # 1042 "lib/read.ml" # 1043 "lib/read.ml" | 3 -> # 191 "lib/read.mll" # 191 "lib/read.mll" ( # 193 "lib/read.mll" `Float nan # 197 "lib/read.mll" ) # 1053 "lib/read.ml" # 1054 "lib/read.ml" | 4 -> # 198 "lib/read.mll" # 198 "lib/read.mll" ( # 200 "lib/read.mll" `Float infinity # 204 "lib/read.mll" ) # 1064 "lib/read.ml" # 1065 "lib/read.ml" | 5 -> # 205 "lib/read.mll" # 205 "lib/read.mll" ( # 207 "lib/read.mll" `Float neg_infinity # 211 "lib/read.mll" ) # 1075 "lib/read.ml" # 1076 "lib/read.ml" | 6 -> # 212 "lib/read.mll" # 212 "lib/read.mll" ( # 214 "lib/read.mll" Buffer.clear v.buf; `String (finish_string v lexbuf) # 219 "lib/read.mll" ) # 1087 "lib/read.ml" # 1088 "lib/read.ml" | 7 -> # 220 "lib/read.mll" # 220 "lib/read.mll" ( make_positive_int v lexbuf ) # 1092 "lib/read.ml" # 1093 "lib/read.ml" | 8 -> # 221 "lib/read.mll" # 221 "lib/read.mll" ( make_negative_int v lexbuf ) # 1097 "lib/read.ml" # 1098 "lib/read.ml" | 9 -> # 222 "lib/read.mll" # 222 "lib/read.mll" ( # 224 "lib/read.mll" `Float (float_of_string (lexeme lexbuf)) # 228 "lib/read.mll" ) # 1108 "lib/read.ml" # 1109 "lib/read.ml" | 10 -> # 230 "lib/read.mll" # 230 "lib/read.mll" ( let acc = ref [] in try read_space v lexbuf; read_object_end lexbuf; let field_name = read_ident v lexbuf in read_space v lexbuf; read_colon v lexbuf; read_space v lexbuf; acc := (field_name, read_json v lexbuf) :: !acc; while true do read_space v lexbuf; read_object_sep v lexbuf; read_space v lexbuf; let field_name = read_ident v lexbuf in read_space v lexbuf; read_colon v lexbuf; read_space v lexbuf; acc := (field_name, read_json v lexbuf) :: !acc; done; assert false with End_of_object -> `Assoc (List.rev !acc) ) # 1135 "lib/read.ml" # 1136 "lib/read.ml" | 11 -> # 254 "lib/read.mll" # 254 "lib/read.mll" ( let acc = ref [] in try read_space v lexbuf; read_array_end lexbuf; acc := read_json v lexbuf :: !acc; while true do read_space v lexbuf; read_array_sep v lexbuf; read_space v lexbuf; acc := read_json v lexbuf :: !acc; done; assert false with End_of_array -> `List (List.rev !acc) ) # 1154 "lib/read.ml" # 1155 "lib/read.ml" | 12 -> # 270 "lib/read.mll" # 270 "lib/read.mll" ( # 287 "lib/read.mll" long_error "Invalid token" v lexbuf # 289 "lib/read.mll" ) # 1178 "lib/read.ml" # 1179 "lib/read.ml" | 13 -> # 291 "lib/read.mll" # 291 "lib/read.mll" ( # 298 "lib/read.mll" long_error "Invalid token" v lexbuf # 300 "lib/read.mll" ) # 1192 "lib/read.ml" # 1193 "lib/read.ml" | 14 -> # 302 "lib/read.mll" # 302 "lib/read.mll" ( read_json v lexbuf ) # 1197 "lib/read.ml" # 1198 "lib/read.ml" | 15 -> # 303 "lib/read.mll" # 303 "lib/read.mll" ( finish_comment v lexbuf; read_json v lexbuf ) # 1202 "lib/read.ml" # 1203 "lib/read.ml" | 16 -> # 304 "lib/read.mll" # 304 "lib/read.mll" ( newline v lexbuf; read_json v lexbuf ) # 1207 "lib/read.ml" # 1208 "lib/read.ml" | 17 -> # 305 "lib/read.mll" # 305 "lib/read.mll" ( read_json v lexbuf ) # 1212 "lib/read.ml" # 1213 "lib/read.ml" | 18 -> # 306 "lib/read.mll" # 306 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 1217 "lib/read.ml" # 1218 "lib/read.ml" | 19 -> # 307 "lib/read.mll" # 307 "lib/read.mll" ( long_error "Invalid token" v lexbuf ) # 1222 "lib/read.ml" # 1223 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_json_rec v lexbuf __ocaml_lex_state and finish_string v lexbuf = __ocaml_lex_finish_string_rec v lexbuf 58 and __ocaml_lex_finish_string_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 311 "lib/read.mll" # 311 "lib/read.mll" ( Buffer.contents v.buf ) # 1234 "lib/read.ml" # 1235 "lib/read.ml" | 1 -> # 312 "lib/read.mll" # 312 "lib/read.mll" ( finish_escaped_char v lexbuf; finish_string v lexbuf ) # 1240 "lib/read.ml" # 1241 "lib/read.ml" | 2 -> # 314 "lib/read.mll" # 314 "lib/read.mll" ( add_lexeme v.buf lexbuf; finish_string v lexbuf ) # 1246 "lib/read.ml" # 1247 "lib/read.ml" | 3 -> # 316 "lib/read.mll" # 316 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 1251 "lib/read.ml" # 1252 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_finish_string_rec v lexbuf __ocaml_lex_state and map_string v f lexbuf = __ocaml_lex_map_string_rec v f lexbuf 63 and __ocaml_lex_map_string_rec v f lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 319 "lib/read.mll" # 319 "lib/read.mll" ( let b = v.buf in f (Buffer.contents b) 0 (Buffer.length b) ) # 1264 "lib/read.ml" # 1265 "lib/read.ml" | 1 -> # 321 "lib/read.mll" # 321 "lib/read.mll" ( finish_escaped_char v lexbuf; map_string v f lexbuf ) # 1270 "lib/read.ml" # 1271 "lib/read.ml" | 2 -> # 323 "lib/read.mll" # 323 "lib/read.mll" ( add_lexeme v.buf lexbuf; map_string v f lexbuf ) # 1276 "lib/read.ml" # 1277 "lib/read.ml" | 3 -> # 325 "lib/read.mll" # 325 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 1281 "lib/read.ml" # 1282 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_map_string_rec v f lexbuf __ocaml_lex_state and finish_escaped_char v lexbuf = __ocaml_lex_finish_escaped_char_rec v lexbuf 68 and __ocaml_lex_finish_escaped_char_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> let # 330 "lib/read.mll" # 330 "lib/read.mll" c # 1294 "lib/read.ml" # 1294 "lib/read.ml" = Lexing.sub_lexeme_char lexbuf lexbuf.Lexing.lex_start_pos in # 330 "lib/read.mll" # 330 "lib/read.mll" ( Buffer.add_char v.buf c ) # 1298 "lib/read.ml" # 1299 "lib/read.ml" | 1 -> # 331 "lib/read.mll" # 331 "lib/read.mll" ( Buffer.add_char v.buf '\b' ) # 1303 "lib/read.ml" # 1304 "lib/read.ml" | 2 -> # 332 "lib/read.mll" # 332 "lib/read.mll" ( Buffer.add_char v.buf '\012' ) # 1308 "lib/read.ml" # 1309 "lib/read.ml" | 3 -> # 333 "lib/read.mll" # 333 "lib/read.mll" ( Buffer.add_char v.buf '\n' ) # 1313 "lib/read.ml" # 1314 "lib/read.ml" | 4 -> # 334 "lib/read.mll" # 334 "lib/read.mll" ( Buffer.add_char v.buf '\r' ) # 1318 "lib/read.ml" # 1319 "lib/read.ml" | 5 -> # 335 "lib/read.mll" # 335 "lib/read.mll" ( Buffer.add_char v.buf '\t' ) # 1323 "lib/read.ml" # 1324 "lib/read.ml" | 6 -> let # 336 "lib/read.mll" # 336 "lib/read.mll" a # 1329 "lib/read.ml" # 1329 "lib/read.ml" = Lexing.sub_lexeme_char lexbuf (lexbuf.Lexing.lex_start_pos + 1) and # 336 "lib/read.mll" # 336 "lib/read.mll" b # 1334 "lib/read.ml" # 1334 "lib/read.ml" = Lexing.sub_lexeme_char lexbuf (lexbuf.Lexing.lex_start_pos + 2) and # 336 "lib/read.mll" # 336 "lib/read.mll" c # 1339 "lib/read.ml" # 1339 "lib/read.ml" = Lexing.sub_lexeme_char lexbuf (lexbuf.Lexing.lex_start_pos + 3) and # 336 "lib/read.mll" # 336 "lib/read.mll" d # 1344 "lib/read.ml" # 1344 "lib/read.ml" = Lexing.sub_lexeme_char lexbuf (lexbuf.Lexing.lex_start_pos + 4) in # 337 "lib/read.mll" # 337 "lib/read.mll" ( let x = (hex a lsl 12) lor (hex b lsl 8) lor (hex c lsl 4) lor hex d in if x >= 0xD800 && x <= 0xDBFF then finish_surrogate_pair v x lexbuf else utf8_of_code v.buf x ) # 1355 "lib/read.ml" # 1356 "lib/read.ml" | 7 -> # 345 "lib/read.mll" # 345 "lib/read.mll" ( long_error "Invalid escape sequence" v lexbuf ) # 1360 "lib/read.ml" # 1361 "lib/read.ml" | 8 -> # 346 "lib/read.mll" # 346 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 1365 "lib/read.ml" # 1366 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_finish_escaped_char_rec v lexbuf __ocaml_lex_state and finish_surrogate_pair v x lexbuf = __ocaml_lex_finish_surrogate_pair_rec v x lexbuf 82 and __ocaml_lex_finish_surrogate_pair_rec v x lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> let # 349 "lib/read.mll" # 349 "lib/read.mll" a # 1378 "lib/read.ml" # 1378 "lib/read.ml" = Lexing.sub_lexeme_char lexbuf (lexbuf.Lexing.lex_start_pos + 2) and # 349 "lib/read.mll" # 349 "lib/read.mll" b # 1383 "lib/read.ml" # 1383 "lib/read.ml" = Lexing.sub_lexeme_char lexbuf (lexbuf.Lexing.lex_start_pos + 3) and # 349 "lib/read.mll" # 349 "lib/read.mll" c # 1388 "lib/read.ml" # 1388 "lib/read.ml" = Lexing.sub_lexeme_char lexbuf (lexbuf.Lexing.lex_start_pos + 4) and # 349 "lib/read.mll" # 349 "lib/read.mll" d # 1393 "lib/read.ml" # 1393 "lib/read.ml" = Lexing.sub_lexeme_char lexbuf (lexbuf.Lexing.lex_start_pos + 5) in # 350 "lib/read.mll" # 350 "lib/read.mll" ( let y = (hex a lsl 12) lor (hex b lsl 8) lor (hex c lsl 4) lor hex d in if y >= 0xDC00 && y <= 0xDFFF then utf8_of_surrogate_pair v.buf x y else long_error "Invalid low surrogate for code point beyond U+FFFF" v lexbuf ) # 1405 "lib/read.ml" # 1406 "lib/read.ml" | 1 -> # 359 "lib/read.mll" # 359 "lib/read.mll" ( long_error "Missing escape sequence representing low surrogate \ for code point beyond U+FFFF" v lexbuf ) # 1411 "lib/read.ml" # 1412 "lib/read.ml" | 2 -> # 361 "lib/read.mll" # 361 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 1416 "lib/read.ml" # 1417 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_finish_surrogate_pair_rec v x lexbuf __ocaml_lex_state and finish_stringlit v lexbuf = __ocaml_lex_finish_stringlit_rec v lexbuf 91 and __ocaml_lex_finish_stringlit_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 366 "lib/read.mll" # 366 "lib/read.mll" ( let len = lexbuf.lex_curr_pos - lexbuf.lex_start_pos in let s = Bytes.create (len+1) in Bytes.set s 0 '"'; Bytes.blit lexbuf.lex_buffer lexbuf.lex_start_pos s 1 len; Bytes.to_string s ) # 1433 "lib/read.ml" # 1434 "lib/read.ml" | 1 -> # 372 "lib/read.mll" # 372 "lib/read.mll" ( long_error "Invalid string literal" v lexbuf ) # 1438 "lib/read.ml" # 1439 "lib/read.ml" | 2 -> # 373 "lib/read.mll" # 373 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 1443 "lib/read.ml" # 1444 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_finish_stringlit_rec v lexbuf __ocaml_lex_state and finish_variant v lexbuf = __ocaml_lex_finish_variant_rec v lexbuf 102 and __ocaml_lex_finish_variant_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 376 "lib/read.mll" # 376 "lib/read.mll" ( let x = read_json v lexbuf in read_space v lexbuf; read_gt v lexbuf; Some x ) # 1458 "lib/read.ml" # 1459 "lib/read.ml" | 1 -> # 380 "lib/read.mll" # 380 "lib/read.mll" ( None ) # 1463 "lib/read.ml" # 1464 "lib/read.ml" | 2 -> # 381 "lib/read.mll" # 381 "lib/read.mll" ( long_error "Expected ':' or '>' but found" v lexbuf ) # 1468 "lib/read.ml" # 1469 "lib/read.ml" | 3 -> # 382 "lib/read.mll" # 382 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 1473 "lib/read.ml" # 1474 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_finish_variant_rec v lexbuf __ocaml_lex_state and read_lt v lexbuf = __ocaml_lex_read_lt_rec v lexbuf 107 and __ocaml_lex_read_lt_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 385 "lib/read.mll" # 385 "lib/read.mll" ( () ) # 1485 "lib/read.ml" # 1486 "lib/read.ml" | 1 -> # 386 "lib/read.mll" # 386 "lib/read.mll" ( long_error "Expected '<' but found" v lexbuf ) # 1490 "lib/read.ml" # 1491 "lib/read.ml" | 2 -> # 387 "lib/read.mll" # 387 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 1495 "lib/read.ml" # 1496 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_lt_rec v lexbuf __ocaml_lex_state and read_gt v lexbuf = __ocaml_lex_read_gt_rec v lexbuf 111 and __ocaml_lex_read_gt_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 390 "lib/read.mll" # 390 "lib/read.mll" ( () ) # 1507 "lib/read.ml" # 1508 "lib/read.ml" | 1 -> # 391 "lib/read.mll" # 391 "lib/read.mll" ( long_error "Expected '>' but found" v lexbuf ) # 1512 "lib/read.ml" # 1513 "lib/read.ml" | 2 -> # 392 "lib/read.mll" # 392 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 1517 "lib/read.ml" # 1518 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_gt_rec v lexbuf __ocaml_lex_state and read_comma v lexbuf = __ocaml_lex_read_comma_rec v lexbuf 115 and __ocaml_lex_read_comma_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 395 "lib/read.mll" # 395 "lib/read.mll" ( () ) # 1529 "lib/read.ml" # 1530 "lib/read.ml" | 1 -> # 396 "lib/read.mll" # 396 "lib/read.mll" ( long_error "Expected ',' but found" v lexbuf ) # 1534 "lib/read.ml" # 1535 "lib/read.ml" | 2 -> # 397 "lib/read.mll" # 397 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 1539 "lib/read.ml" # 1540 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_comma_rec v lexbuf __ocaml_lex_state and start_any_variant v lexbuf = __ocaml_lex_start_any_variant_rec v lexbuf 119 and __ocaml_lex_start_any_variant_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 400 "lib/read.mll" # 400 "lib/read.mll" ( `Edgy_bracket ) # 1551 "lib/read.ml" # 1552 "lib/read.ml" | 1 -> # 401 "lib/read.mll" # 401 "lib/read.mll" ( Buffer.clear v.buf; `Double_quote ) # 1557 "lib/read.ml" # 1558 "lib/read.ml" | 2 -> # 403 "lib/read.mll" # 403 "lib/read.mll" ( `Square_bracket ) # 1562 "lib/read.ml" # 1563 "lib/read.ml" | 3 -> # 404 "lib/read.mll" # 404 "lib/read.mll" ( long_error "Expected '<', '\"' or '[' but found" v lexbuf ) # 1567 "lib/read.ml" # 1568 "lib/read.ml" | 4 -> # 405 "lib/read.mll" # 405 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 1572 "lib/read.ml" # 1573 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_start_any_variant_rec v lexbuf __ocaml_lex_state and finish_comment v lexbuf = __ocaml_lex_finish_comment_rec v lexbuf 125 and __ocaml_lex_finish_comment_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 408 "lib/read.mll" # 408 "lib/read.mll" ( () ) # 1584 "lib/read.ml" # 1585 "lib/read.ml" | 1 -> # 409 "lib/read.mll" # 409 "lib/read.mll" ( long_error "Unterminated comment" v lexbuf ) # 1589 "lib/read.ml" # 1590 "lib/read.ml" | 2 -> # 410 "lib/read.mll" # 410 "lib/read.mll" ( newline v lexbuf; finish_comment v lexbuf ) # 1594 "lib/read.ml" # 1595 "lib/read.ml" | 3 -> # 411 "lib/read.mll" # 411 "lib/read.mll" ( finish_comment v lexbuf ) # 1599 "lib/read.ml" # 1600 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_finish_comment_rec v lexbuf __ocaml_lex_state and read_eof lexbuf = __ocaml_lex_read_eof_rec lexbuf 131 and __ocaml_lex_read_eof_rec lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 419 "lib/read.mll" # 419 "lib/read.mll" ( true ) # 1611 "lib/read.ml" # 1612 "lib/read.ml" | 1 -> # 420 "lib/read.mll" # 420 "lib/read.mll" ( false ) # 1616 "lib/read.ml" # 1617 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_eof_rec lexbuf __ocaml_lex_state and read_space v lexbuf = __ocaml_lex_read_space_rec v lexbuf 133 and __ocaml_lex_read_space_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 423 "lib/read.mll" # 423 "lib/read.mll" ( newline v lexbuf; read_space v lexbuf ) # 1628 "lib/read.ml" # 1629 "lib/read.ml" | 1 -> # 424 "lib/read.mll" # 424 "lib/read.mll" ( finish_comment v lexbuf; read_space v lexbuf ) # 1633 "lib/read.ml" # 1634 "lib/read.ml" | 2 -> # 425 "lib/read.mll" # 425 "lib/read.mll" ( newline v lexbuf; read_space v lexbuf ) # 1638 "lib/read.ml" # 1639 "lib/read.ml" | 3 -> # 426 "lib/read.mll" # 426 "lib/read.mll" ( read_space v lexbuf ) # 1643 "lib/read.ml" # 1644 "lib/read.ml" | 4 -> # 427 "lib/read.mll" # 427 "lib/read.mll" ( () ) # 1648 "lib/read.ml" # 1649 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_space_rec v lexbuf __ocaml_lex_state and read_null v lexbuf = __ocaml_lex_read_null_rec v lexbuf 140 and __ocaml_lex_read_null_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 430 "lib/read.mll" # 430 "lib/read.mll" ( () ) # 1660 "lib/read.ml" # 1661 "lib/read.ml" | 1 -> # 431 "lib/read.mll" # 431 "lib/read.mll" ( long_error "Expected 'null' but found" v lexbuf ) # 1665 "lib/read.ml" # 1666 "lib/read.ml" | 2 -> # 432 "lib/read.mll" # 432 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 1670 "lib/read.ml" # 1671 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_null_rec v lexbuf __ocaml_lex_state and read_null_if_possible v lexbuf = __ocaml_lex_read_null_if_possible_rec v lexbuf 147 and __ocaml_lex_read_null_if_possible_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 435 "lib/read.mll" # 435 "lib/read.mll" ( true ) # 1682 "lib/read.ml" # 1683 "lib/read.ml" | 1 -> # 436 "lib/read.mll" # 436 "lib/read.mll" ( false ) # 1687 "lib/read.ml" # 1688 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_null_if_possible_rec v lexbuf __ocaml_lex_state and read_bool v lexbuf = __ocaml_lex_read_bool_rec v lexbuf 152 and __ocaml_lex_read_bool_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 439 "lib/read.mll" # 439 "lib/read.mll" ( true ) # 1699 "lib/read.ml" # 1700 "lib/read.ml" | 1 -> # 440 "lib/read.mll" # 440 "lib/read.mll" ( false ) # 1704 "lib/read.ml" # 1705 "lib/read.ml" | 2 -> # 443 "lib/read.mll" # 443 "lib/read.mll" ( true ) # 1709 "lib/read.ml" # 1710 "lib/read.ml" | 3 -> # 444 "lib/read.mll" # 444 "lib/read.mll" ( false ) # 1714 "lib/read.ml" # 1715 "lib/read.ml" | 4 -> # 446 "lib/read.mll" # 446 "lib/read.mll" ( long_error "Expected 'true' or 'false' but found" v lexbuf ) # 1719 "lib/read.ml" # 1720 "lib/read.ml" | 5 -> # 447 "lib/read.mll" # 447 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 1724 "lib/read.ml" # 1725 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_bool_rec v lexbuf __ocaml_lex_state and read_int v lexbuf = __ocaml_lex_read_int_rec v lexbuf 176 and __ocaml_lex_read_int_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 450 "lib/read.mll" # 450 "lib/read.mll" ( try extract_positive_int lexbuf with Int_overflow -> lexer_error "Int overflow" v lexbuf ) # 1738 "lib/read.ml" # 1739 "lib/read.ml" | 1 -> # 453 "lib/read.mll" # 453 "lib/read.mll" ( try extract_negative_int lexbuf with Int_overflow -> lexer_error "Int overflow" v lexbuf ) # 1745 "lib/read.ml" # 1746 "lib/read.ml" | 2 -> # 456 "lib/read.mll" # 456 "lib/read.mll" ( (* Support for double-quoted "ints" *) Buffer.clear v.buf; let s = finish_string v lexbuf in try (* Any OCaml-compliant int will pass, including hexadecimal and octal notations, and embedded underscores *) int_of_string s with _ -> custom_error "Expected an integer but found a string that \ doesn't even represent an integer" v lexbuf ) # 1763 "lib/read.ml" # 1764 "lib/read.ml" | 3 -> # 470 "lib/read.mll" # 470 "lib/read.mll" ( long_error "Expected integer but found" v lexbuf ) # 1768 "lib/read.ml" # 1769 "lib/read.ml" | 4 -> # 471 "lib/read.mll" # 471 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 1773 "lib/read.ml" # 1774 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_int_rec v lexbuf __ocaml_lex_state and read_int32 v lexbuf = __ocaml_lex_read_int32_rec v lexbuf 185 and __ocaml_lex_read_int32_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 474 "lib/read.mll" # 474 "lib/read.mll" ( try Int32.of_string (Lexing.lexeme lexbuf) with _ -> lexer_error "Int32 overflow" v lexbuf ) # 1787 "lib/read.ml" # 1788 "lib/read.ml" | 1 -> # 477 "lib/read.mll" # 477 "lib/read.mll" ( (* Support for double-quoted "ints" *) Buffer.clear v.buf; let s = finish_string v lexbuf in try (* Any OCaml-compliant int will pass, including hexadecimal and octal notations, and embedded underscores *) Int32.of_string s with _ -> custom_error "Expected an int32 but found a string that \ doesn't even represent an integer" v lexbuf ) # 1805 "lib/read.ml" # 1806 "lib/read.ml" | 2 -> # 491 "lib/read.mll" # 491 "lib/read.mll" ( long_error "Expected int32 but found" v lexbuf ) # 1810 "lib/read.ml" # 1811 "lib/read.ml" | 3 -> # 492 "lib/read.mll" # 492 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 1815 "lib/read.ml" # 1816 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_int32_rec v lexbuf __ocaml_lex_state and read_int64 v lexbuf = __ocaml_lex_read_int64_rec v lexbuf 192 and __ocaml_lex_read_int64_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 495 "lib/read.mll" # 495 "lib/read.mll" ( try Int64.of_string (Lexing.lexeme lexbuf) with _ -> lexer_error "Int32 overflow" v lexbuf ) # 1829 "lib/read.ml" # 1830 "lib/read.ml" | 1 -> # 498 "lib/read.mll" # 498 "lib/read.mll" ( (* Support for double-quoted "ints" *) Buffer.clear v.buf; let s = finish_string v lexbuf in try (* Any OCaml-compliant int will pass, including hexadecimal and octal notations, and embedded underscores *) Int64.of_string s with _ -> custom_error "Expected an int64 but found a string that \ doesn't even represent an integer" v lexbuf ) # 1847 "lib/read.ml" # 1848 "lib/read.ml" | 2 -> # 512 "lib/read.mll" # 512 "lib/read.mll" ( long_error "Expected int64 but found" v lexbuf ) # 1852 "lib/read.ml" # 1853 "lib/read.ml" | 3 -> # 513 "lib/read.mll" # 513 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 1857 "lib/read.ml" # 1858 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_int64_rec v lexbuf __ocaml_lex_state and read_number v lexbuf = __ocaml_lex_read_number_rec v lexbuf 199 and __ocaml_lex_read_number_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 516 "lib/read.mll" # 516 "lib/read.mll" ( nan ) # 1869 "lib/read.ml" # 1870 "lib/read.ml" | 1 -> # 517 "lib/read.mll" # 517 "lib/read.mll" ( infinity ) # 1874 "lib/read.ml" # 1875 "lib/read.ml" | 2 -> # 518 "lib/read.mll" # 518 "lib/read.mll" ( neg_infinity ) # 1879 "lib/read.ml" # 1880 "lib/read.ml" | 3 -> # 519 "lib/read.mll" # 519 "lib/read.mll" ( float_of_string (lexeme lexbuf) ) # 1884 "lib/read.ml" # 1885 "lib/read.ml" | 4 -> # 520 "lib/read.mll" # 520 "lib/read.mll" ( Buffer.clear v.buf; let s = finish_string v lexbuf in try (* Any OCaml-compliant float will pass, including hexadecimal and octal notations, and embedded underscores. *) float_of_string s with _ -> match s with "NaN" -> nan | "Infinity" -> infinity | "-Infinity" -> neg_infinity | _ -> custom_error "Expected a number but found a string that \ doesn't even represent a number" v lexbuf ) # 1906 "lib/read.ml" # 1907 "lib/read.ml" | 5 -> # 538 "lib/read.mll" # 538 "lib/read.mll" ( long_error "Expected number but found" v lexbuf ) # 1911 "lib/read.ml" # 1912 "lib/read.ml" | 6 -> # 539 "lib/read.mll" # 539 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 1916 "lib/read.ml" # 1917 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_number_rec v lexbuf __ocaml_lex_state and read_string v lexbuf = __ocaml_lex_read_string_rec v lexbuf 233 and __ocaml_lex_read_string_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 542 "lib/read.mll" # 542 "lib/read.mll" ( Buffer.clear v.buf; finish_string v lexbuf ) # 1929 "lib/read.ml" # 1930 "lib/read.ml" | 1 -> # 544 "lib/read.mll" # 544 "lib/read.mll" ( long_error "Expected '\"' but found" v lexbuf ) # 1934 "lib/read.ml" # 1935 "lib/read.ml" | 2 -> # 545 "lib/read.mll" # 545 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 1939 "lib/read.ml" # 1940 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_string_rec v lexbuf __ocaml_lex_state and read_ident v lexbuf = __ocaml_lex_read_ident_rec v lexbuf 237 and __ocaml_lex_read_ident_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 548 "lib/read.mll" # 548 "lib/read.mll" ( Buffer.clear v.buf; finish_string v lexbuf ) # 1952 "lib/read.ml" # 1953 "lib/read.ml" | 1 -> let # 550 "lib/read.mll" # 550 "lib/read.mll" s # 1958 "lib/read.ml" # 1958 "lib/read.ml" = Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos lexbuf.Lexing.lex_curr_pos in # 551 "lib/read.mll" # 551 "lib/read.mll" ( s ) # 1962 "lib/read.ml" # 1963 "lib/read.ml" | 2 -> # 552 "lib/read.mll" # 552 "lib/read.mll" ( long_error "Expected string or identifier but found" v lexbuf ) # 1967 "lib/read.ml" # 1968 "lib/read.ml" | 3 -> # 553 "lib/read.mll" # 553 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 1972 "lib/read.ml" # 1973 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_ident_rec v lexbuf __ocaml_lex_state and map_ident v f lexbuf = __ocaml_lex_map_ident_rec v f lexbuf 242 and __ocaml_lex_map_ident_rec v f lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 556 "lib/read.mll" # 556 "lib/read.mll" ( Buffer.clear v.buf; map_string v f lexbuf ) # 1985 "lib/read.ml" # 1986 "lib/read.ml" | 1 -> # 559 "lib/read.mll" # 559 "lib/read.mll" ( map_lexeme f lexbuf ) # 1990 "lib/read.ml" # 1991 "lib/read.ml" | 2 -> # 560 "lib/read.mll" # 560 "lib/read.mll" ( long_error "Expected string or identifier but found" v lexbuf ) # 1995 "lib/read.ml" # 1996 "lib/read.ml" | 3 -> # 561 "lib/read.mll" # 561 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2000 "lib/read.ml" # 2001 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_map_ident_rec v f lexbuf __ocaml_lex_state and read_sequence read_cell init_acc v lexbuf = __ocaml_lex_read_sequence_rec read_cell init_acc v lexbuf 247 and __ocaml_lex_read_sequence_rec read_cell init_acc v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 564 "lib/read.mll" # 564 "lib/read.mll" ( let acc = ref init_acc in try read_space v lexbuf; read_array_end lexbuf; acc := read_cell !acc v lexbuf; while true do read_space v lexbuf; read_array_sep v lexbuf; read_space v lexbuf; acc := read_cell !acc v lexbuf; done; assert false with End_of_array -> !acc ) # 2026 "lib/read.ml" # 2027 "lib/read.ml" | 1 -> # 579 "lib/read.mll" # 579 "lib/read.mll" ( long_error "Expected '[' but found" v lexbuf ) # 2031 "lib/read.ml" # 2032 "lib/read.ml" | 2 -> # 580 "lib/read.mll" # 580 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2036 "lib/read.ml" # 2037 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_sequence_rec read_cell init_acc v lexbuf __ocaml_lex_state and read_list_rev read_cell v lexbuf = __ocaml_lex_read_list_rev_rec read_cell v lexbuf 251 and __ocaml_lex_read_list_rev_rec read_cell v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 583 "lib/read.mll" # 583 "lib/read.mll" ( let acc = ref [] in try read_space v lexbuf; read_array_end lexbuf; acc := read_cell v lexbuf :: !acc; while true do read_space v lexbuf; read_array_sep v lexbuf; read_space v lexbuf; acc := read_cell v lexbuf :: !acc; done; assert false with End_of_array -> !acc ) # 2062 "lib/read.ml" # 2063 "lib/read.ml" | 1 -> # 598 "lib/read.mll" # 598 "lib/read.mll" ( long_error "Expected '[' but found" v lexbuf ) # 2067 "lib/read.ml" # 2068 "lib/read.ml" | 2 -> # 599 "lib/read.mll" # 599 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2072 "lib/read.ml" # 2073 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_list_rev_rec read_cell v lexbuf __ocaml_lex_state and read_array_end lexbuf = __ocaml_lex_read_array_end_rec lexbuf 255 and __ocaml_lex_read_array_end_rec lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 602 "lib/read.mll" # 602 "lib/read.mll" ( raise End_of_array ) # 2084 "lib/read.ml" # 2085 "lib/read.ml" | 1 -> # 603 "lib/read.mll" # 603 "lib/read.mll" ( () ) # 2089 "lib/read.ml" # 2090 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_array_end_rec lexbuf __ocaml_lex_state and read_array_sep v lexbuf = __ocaml_lex_read_array_sep_rec v lexbuf 257 and __ocaml_lex_read_array_sep_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 606 "lib/read.mll" # 606 "lib/read.mll" ( () ) # 2101 "lib/read.ml" # 2102 "lib/read.ml" | 1 -> # 607 "lib/read.mll" # 607 "lib/read.mll" ( raise End_of_array ) # 2106 "lib/read.ml" # 2107 "lib/read.ml" | 2 -> # 608 "lib/read.mll" # 608 "lib/read.mll" ( long_error "Expected ',' or ']' but found" v lexbuf ) # 2111 "lib/read.ml" # 2112 "lib/read.ml" | 3 -> # 609 "lib/read.mll" # 609 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2116 "lib/read.ml" # 2117 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_array_sep_rec v lexbuf __ocaml_lex_state and read_tuple read_cell init_acc v lexbuf = __ocaml_lex_read_tuple_rec read_cell init_acc v lexbuf 262 and __ocaml_lex_read_tuple_rec read_cell init_acc v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 613 "lib/read.mll" # 613 "lib/read.mll" ( # 633 "lib/read.mll" long_error "Invalid token" v lexbuf # 635 "lib/read.mll" ) # 2150 "lib/read.ml" # 2151 "lib/read.ml" | 1 -> # 636 "lib/read.mll" # 636 "lib/read.mll" ( long_error "Expected ')' but found" v lexbuf ) # 2155 "lib/read.ml" # 2156 "lib/read.ml" | 2 -> # 637 "lib/read.mll" # 637 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2160 "lib/read.ml" # 2161 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_tuple_rec read_cell init_acc v lexbuf __ocaml_lex_state and read_tuple_end lexbuf = __ocaml_lex_read_tuple_end_rec lexbuf 266 and __ocaml_lex_read_tuple_end_rec lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 640 "lib/read.mll" # 640 "lib/read.mll" ( raise End_of_tuple ) # 2172 "lib/read.ml" # 2173 "lib/read.ml" | 1 -> # 641 "lib/read.mll" # 641 "lib/read.mll" ( () ) # 2177 "lib/read.ml" # 2178 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_tuple_end_rec lexbuf __ocaml_lex_state and read_tuple_end2 v std lexbuf = __ocaml_lex_read_tuple_end2_rec v std lexbuf 268 and __ocaml_lex_read_tuple_end2_rec v std lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 644 "lib/read.mll" # 644 "lib/read.mll" ( if std then long_error "Expected ')' or '' but found" v lexbuf else raise End_of_tuple ) # 2192 "lib/read.ml" # 2193 "lib/read.ml" | 1 -> # 648 "lib/read.mll" # 648 "lib/read.mll" ( if std then raise End_of_tuple else long_error "Expected ']' or '' but found" v lexbuf ) # 2200 "lib/read.ml" # 2201 "lib/read.ml" | 2 -> # 652 "lib/read.mll" # 652 "lib/read.mll" ( () ) # 2205 "lib/read.ml" # 2206 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_tuple_end2_rec v std lexbuf __ocaml_lex_state and read_tuple_sep v lexbuf = __ocaml_lex_read_tuple_sep_rec v lexbuf 271 and __ocaml_lex_read_tuple_sep_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 655 "lib/read.mll" # 655 "lib/read.mll" ( () ) # 2217 "lib/read.ml" # 2218 "lib/read.ml" | 1 -> # 656 "lib/read.mll" # 656 "lib/read.mll" ( raise End_of_tuple ) # 2222 "lib/read.ml" # 2223 "lib/read.ml" | 2 -> # 657 "lib/read.mll" # 657 "lib/read.mll" ( long_error "Expected ',' or ')' but found" v lexbuf ) # 2227 "lib/read.ml" # 2228 "lib/read.ml" | 3 -> # 658 "lib/read.mll" # 658 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2232 "lib/read.ml" # 2233 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_tuple_sep_rec v lexbuf __ocaml_lex_state and read_tuple_sep2 v std lexbuf = __ocaml_lex_read_tuple_sep2_rec v std lexbuf 276 and __ocaml_lex_read_tuple_sep2_rec v std lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 661 "lib/read.mll" # 661 "lib/read.mll" ( () ) # 2244 "lib/read.ml" # 2245 "lib/read.ml" | 1 -> # 662 "lib/read.mll" # 662 "lib/read.mll" ( if std then long_error "Expected ',' or ']' but found" v lexbuf else raise End_of_tuple ) # 2252 "lib/read.ml" # 2253 "lib/read.ml" | 2 -> # 666 "lib/read.mll" # 666 "lib/read.mll" ( if std then raise End_of_tuple else long_error "Expected ',' or ')' but found" v lexbuf ) # 2260 "lib/read.ml" # 2261 "lib/read.ml" | 3 -> # 670 "lib/read.mll" # 670 "lib/read.mll" ( long_error "Expected ',' or ')' but found" v lexbuf ) # 2265 "lib/read.ml" # 2266 "lib/read.ml" | 4 -> # 671 "lib/read.mll" # 671 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2270 "lib/read.ml" # 2271 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_tuple_sep2_rec v std lexbuf __ocaml_lex_state and read_abstract_fields read_key read_field init_acc v lexbuf = __ocaml_lex_read_abstract_fields_rec read_key read_field init_acc v lexbuf 282 and __ocaml_lex_read_abstract_fields_rec read_key read_field init_acc v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 675 "lib/read.mll" # 675 "lib/read.mll" ( let acc = ref init_acc in try read_space v lexbuf; read_object_end lexbuf; let field_name = read_key v lexbuf in read_space v lexbuf; read_colon v lexbuf; read_space v lexbuf; acc := read_field !acc field_name v lexbuf; while true do read_space v lexbuf; read_object_sep v lexbuf; read_space v lexbuf; let field_name = read_key v lexbuf in read_space v lexbuf; read_colon v lexbuf; read_space v lexbuf; acc := read_field !acc field_name v lexbuf; done; assert false with End_of_object -> !acc ) # 2304 "lib/read.ml" # 2305 "lib/read.ml" | 1 -> # 698 "lib/read.mll" # 698 "lib/read.mll" ( long_error "Expected '{' but found" v lexbuf ) # 2309 "lib/read.ml" # 2310 "lib/read.ml" | 2 -> # 699 "lib/read.mll" # 699 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2314 "lib/read.ml" # 2315 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_abstract_fields_rec read_key read_field init_acc v lexbuf __ocaml_lex_state and read_lcurl v lexbuf = __ocaml_lex_read_lcurl_rec v lexbuf 286 and __ocaml_lex_read_lcurl_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 702 "lib/read.mll" # 702 "lib/read.mll" ( () ) # 2326 "lib/read.ml" # 2327 "lib/read.ml" | 1 -> # 703 "lib/read.mll" # 703 "lib/read.mll" ( long_error "Expected '{' but found" v lexbuf ) # 2331 "lib/read.ml" # 2332 "lib/read.ml" | 2 -> # 704 "lib/read.mll" # 704 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2336 "lib/read.ml" # 2337 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_lcurl_rec v lexbuf __ocaml_lex_state and read_object_end lexbuf = __ocaml_lex_read_object_end_rec lexbuf 290 and __ocaml_lex_read_object_end_rec lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 707 "lib/read.mll" # 707 "lib/read.mll" ( raise End_of_object ) # 2348 "lib/read.ml" # 2349 "lib/read.ml" | 1 -> # 708 "lib/read.mll" # 708 "lib/read.mll" ( () ) # 2353 "lib/read.ml" # 2354 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_object_end_rec lexbuf __ocaml_lex_state and read_object_sep v lexbuf = __ocaml_lex_read_object_sep_rec v lexbuf 292 and __ocaml_lex_read_object_sep_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 711 "lib/read.mll" # 711 "lib/read.mll" ( () ) # 2365 "lib/read.ml" # 2366 "lib/read.ml" | 1 -> # 712 "lib/read.mll" # 712 "lib/read.mll" ( raise End_of_object ) # 2370 "lib/read.ml" # 2371 "lib/read.ml" | 2 -> # 713 "lib/read.mll" # 713 "lib/read.mll" ( long_error "Expected ',' or '}' but found" v lexbuf ) # 2375 "lib/read.ml" # 2376 "lib/read.ml" | 3 -> # 714 "lib/read.mll" # 714 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2380 "lib/read.ml" # 2381 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_object_sep_rec v lexbuf __ocaml_lex_state and read_colon v lexbuf = __ocaml_lex_read_colon_rec v lexbuf 297 and __ocaml_lex_read_colon_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 717 "lib/read.mll" # 717 "lib/read.mll" ( () ) # 2392 "lib/read.ml" # 2393 "lib/read.ml" | 1 -> # 718 "lib/read.mll" # 718 "lib/read.mll" ( long_error "Expected ':' but found" v lexbuf ) # 2397 "lib/read.ml" # 2398 "lib/read.ml" | 2 -> # 719 "lib/read.mll" # 719 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2402 "lib/read.ml" # 2403 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_colon_rec v lexbuf __ocaml_lex_state and start_any_tuple v lexbuf = __ocaml_lex_start_any_tuple_rec v lexbuf 301 and __ocaml_lex_start_any_tuple_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 722 "lib/read.mll" # 722 "lib/read.mll" ( false ) # 2414 "lib/read.ml" # 2415 "lib/read.ml" | 1 -> # 723 "lib/read.mll" # 723 "lib/read.mll" ( true ) # 2419 "lib/read.ml" # 2420 "lib/read.ml" | 2 -> # 724 "lib/read.mll" # 724 "lib/read.mll" ( long_error "Expected '(' or '[' but found" v lexbuf ) # 2424 "lib/read.ml" # 2425 "lib/read.ml" | 3 -> # 725 "lib/read.mll" # 725 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2429 "lib/read.ml" # 2430 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_start_any_tuple_rec v lexbuf __ocaml_lex_state and read_lpar v lexbuf = __ocaml_lex_read_lpar_rec v lexbuf 306 and __ocaml_lex_read_lpar_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 728 "lib/read.mll" # 728 "lib/read.mll" ( () ) # 2441 "lib/read.ml" # 2442 "lib/read.ml" | 1 -> # 729 "lib/read.mll" # 729 "lib/read.mll" ( long_error "Expected '(' but found" v lexbuf ) # 2446 "lib/read.ml" # 2447 "lib/read.ml" | 2 -> # 730 "lib/read.mll" # 730 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2451 "lib/read.ml" # 2452 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_lpar_rec v lexbuf __ocaml_lex_state and read_rpar v lexbuf = __ocaml_lex_read_rpar_rec v lexbuf 310 and __ocaml_lex_read_rpar_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 733 "lib/read.mll" # 733 "lib/read.mll" ( () ) # 2463 "lib/read.ml" # 2464 "lib/read.ml" | 1 -> # 734 "lib/read.mll" # 734 "lib/read.mll" ( long_error "Expected ')' but found" v lexbuf ) # 2468 "lib/read.ml" # 2469 "lib/read.ml" | 2 -> # 735 "lib/read.mll" # 735 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2473 "lib/read.ml" # 2474 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_rpar_rec v lexbuf __ocaml_lex_state and read_lbr v lexbuf = __ocaml_lex_read_lbr_rec v lexbuf 314 and __ocaml_lex_read_lbr_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 738 "lib/read.mll" # 738 "lib/read.mll" ( () ) # 2485 "lib/read.ml" # 2486 "lib/read.ml" | 1 -> # 739 "lib/read.mll" # 739 "lib/read.mll" ( long_error "Expected '[' but found" v lexbuf ) # 2490 "lib/read.ml" # 2491 "lib/read.ml" | 2 -> # 740 "lib/read.mll" # 740 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2495 "lib/read.ml" # 2496 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_lbr_rec v lexbuf __ocaml_lex_state and read_rbr v lexbuf = __ocaml_lex_read_rbr_rec v lexbuf 318 and __ocaml_lex_read_rbr_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 743 "lib/read.mll" # 743 "lib/read.mll" ( () ) # 2507 "lib/read.ml" # 2508 "lib/read.ml" | 1 -> # 744 "lib/read.mll" # 744 "lib/read.mll" ( long_error "Expected ']' but found" v lexbuf ) # 2512 "lib/read.ml" # 2513 "lib/read.ml" | 2 -> # 745 "lib/read.mll" # 745 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2517 "lib/read.ml" # 2518 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_rbr_rec v lexbuf __ocaml_lex_state and skip_json v lexbuf = __ocaml_lex_skip_json_rec v lexbuf 322 and __ocaml_lex_skip_json_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 751 "lib/read.mll" # 751 "lib/read.mll" ( () ) # 2529 "lib/read.ml" # 2530 "lib/read.ml" | 1 -> # 752 "lib/read.mll" # 752 "lib/read.mll" ( () ) # 2534 "lib/read.ml" # 2535 "lib/read.ml" | 2 -> # 753 "lib/read.mll" # 753 "lib/read.mll" ( () ) # 2539 "lib/read.ml" # 2540 "lib/read.ml" | 3 -> # 754 "lib/read.mll" # 754 "lib/read.mll" ( () ) # 2544 "lib/read.ml" # 2545 "lib/read.ml" | 4 -> # 755 "lib/read.mll" # 755 "lib/read.mll" ( () ) # 2549 "lib/read.ml" # 2550 "lib/read.ml" | 5 -> # 756 "lib/read.mll" # 756 "lib/read.mll" ( () ) # 2554 "lib/read.ml" # 2555 "lib/read.ml" | 6 -> # 757 "lib/read.mll" # 757 "lib/read.mll" ( finish_skip_stringlit v lexbuf ) # 2559 "lib/read.ml" # 2560 "lib/read.ml" | 7 -> # 758 "lib/read.mll" # 758 "lib/read.mll" ( () ) # 2564 "lib/read.ml" # 2565 "lib/read.ml" | 8 -> # 759 "lib/read.mll" # 759 "lib/read.mll" ( () ) # 2569 "lib/read.ml" # 2570 "lib/read.ml" | 9 -> # 761 "lib/read.mll" # 761 "lib/read.mll" ( try read_space v lexbuf; read_object_end lexbuf; skip_ident v lexbuf; read_space v lexbuf; read_colon v lexbuf; read_space v lexbuf; skip_json v lexbuf; while true do read_space v lexbuf; read_object_sep v lexbuf; read_space v lexbuf; skip_ident v lexbuf; read_space v lexbuf; read_colon v lexbuf; read_space v lexbuf; skip_json v lexbuf; done; assert false with End_of_object -> () ) # 2595 "lib/read.ml" # 2596 "lib/read.ml" | 10 -> # 784 "lib/read.mll" # 784 "lib/read.mll" ( try read_space v lexbuf; read_array_end lexbuf; skip_json v lexbuf; while true do read_space v lexbuf; read_array_sep v lexbuf; read_space v lexbuf; skip_json v lexbuf; done; assert false with End_of_array -> () ) # 2613 "lib/read.ml" # 2614 "lib/read.ml" | 11 -> # 799 "lib/read.mll" # 799 "lib/read.mll" ( # 815 "lib/read.mll" long_error "Invalid token" v lexbuf # 817 "lib/read.mll" ) # 2636 "lib/read.ml" # 2637 "lib/read.ml" | 12 -> # 819 "lib/read.mll" # 819 "lib/read.mll" ( # 826 "lib/read.mll" long_error "Invalid token" v lexbuf # 828 "lib/read.mll" ) # 2650 "lib/read.ml" # 2651 "lib/read.ml" | 13 -> # 830 "lib/read.mll" # 830 "lib/read.mll" ( skip_json v lexbuf ) # 2655 "lib/read.ml" # 2656 "lib/read.ml" | 14 -> # 831 "lib/read.mll" # 831 "lib/read.mll" ( finish_comment v lexbuf; skip_json v lexbuf ) # 2660 "lib/read.ml" # 2661 "lib/read.ml" | 15 -> # 832 "lib/read.mll" # 832 "lib/read.mll" ( newline v lexbuf; skip_json v lexbuf ) # 2665 "lib/read.ml" # 2666 "lib/read.ml" | 16 -> # 833 "lib/read.mll" # 833 "lib/read.mll" ( skip_json v lexbuf ) # 2670 "lib/read.ml" # 2671 "lib/read.ml" | 17 -> # 834 "lib/read.mll" # 834 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2675 "lib/read.ml" # 2676 "lib/read.ml" | 18 -> # 835 "lib/read.mll" # 835 "lib/read.mll" ( long_error "Invalid token" v lexbuf ) # 2680 "lib/read.ml" # 2681 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_skip_json_rec v lexbuf __ocaml_lex_state and finish_skip_stringlit v lexbuf = __ocaml_lex_finish_skip_stringlit_rec v lexbuf 378 and __ocaml_lex_finish_skip_stringlit_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 841 "lib/read.mll" # 841 "lib/read.mll" ( () ) # 2692 "lib/read.ml" # 2693 "lib/read.ml" | 1 -> # 842 "lib/read.mll" # 842 "lib/read.mll" ( long_error "Invalid string literal" v lexbuf ) # 2697 "lib/read.ml" # 2698 "lib/read.ml" | 2 -> # 843 "lib/read.mll" # 843 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2702 "lib/read.ml" # 2703 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_finish_skip_stringlit_rec v lexbuf __ocaml_lex_state and finish_skip_variant v lexbuf = __ocaml_lex_finish_skip_variant_rec v lexbuf 389 and __ocaml_lex_finish_skip_variant_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 846 "lib/read.mll" # 846 "lib/read.mll" ( skip_json v lexbuf; read_space v lexbuf; read_gt v lexbuf ) # 2716 "lib/read.ml" # 2717 "lib/read.ml" | 1 -> # 849 "lib/read.mll" # 849 "lib/read.mll" ( () ) # 2721 "lib/read.ml" # 2722 "lib/read.ml" | 2 -> # 850 "lib/read.mll" # 850 "lib/read.mll" ( long_error "Expected ':' or '>' but found" v lexbuf ) # 2726 "lib/read.ml" # 2727 "lib/read.ml" | 3 -> # 851 "lib/read.mll" # 851 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2731 "lib/read.ml" # 2732 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_finish_skip_variant_rec v lexbuf __ocaml_lex_state and skip_ident v lexbuf = __ocaml_lex_skip_ident_rec v lexbuf 394 and __ocaml_lex_skip_ident_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 854 "lib/read.mll" # 854 "lib/read.mll" ( finish_skip_stringlit v lexbuf ) # 2743 "lib/read.ml" # 2744 "lib/read.ml" | 1 -> # 855 "lib/read.mll" # 855 "lib/read.mll" ( () ) # 2748 "lib/read.ml" # 2749 "lib/read.ml" | 2 -> # 856 "lib/read.mll" # 856 "lib/read.mll" ( long_error "Expected string or identifier but found" v lexbuf ) # 2753 "lib/read.ml" # 2754 "lib/read.ml" | 3 -> # 857 "lib/read.mll" # 857 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2758 "lib/read.ml" # 2759 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_skip_ident_rec v lexbuf __ocaml_lex_state and buffer_json v lexbuf = __ocaml_lex_buffer_json_rec v lexbuf 399 and __ocaml_lex_buffer_json_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 870 "lib/read.mll" # 870 "lib/read.mll" ( add_lexeme v.buf lexbuf ) # 2770 "lib/read.ml" # 2771 "lib/read.ml" | 1 -> # 872 "lib/read.mll" # 872 "lib/read.mll" ( finish_buffer_stringlit v lexbuf ) # 2775 "lib/read.ml" # 2776 "lib/read.ml" | 2 -> # 873 "lib/read.mll" # 873 "lib/read.mll" ( try Buffer.add_char v.buf '{'; buffer_space v lexbuf; buffer_object_end v lexbuf; buffer_ident v lexbuf; buffer_space v lexbuf; buffer_colon v lexbuf; buffer_space v lexbuf; buffer_json v lexbuf; while true do buffer_space v lexbuf; buffer_object_sep v lexbuf; buffer_space v lexbuf; buffer_ident v lexbuf; buffer_space v lexbuf; buffer_colon v lexbuf; buffer_space v lexbuf; buffer_json v lexbuf; done; assert false with End_of_object -> () ) # 2802 "lib/read.ml" # 2803 "lib/read.ml" | 3 -> # 897 "lib/read.mll" # 897 "lib/read.mll" ( try Buffer.add_char v.buf '['; buffer_space v lexbuf; buffer_array_end v lexbuf; buffer_json v lexbuf; while true do buffer_space v lexbuf; buffer_array_sep v lexbuf; buffer_space v lexbuf; buffer_json v lexbuf; done; assert false with End_of_array -> () ) # 2821 "lib/read.ml" # 2822 "lib/read.ml" | 4 -> # 913 "lib/read.mll" # 913 "lib/read.mll" ( # 930 "lib/read.mll" long_error "Invalid token" v lexbuf # 932 "lib/read.mll" ) # 2845 "lib/read.ml" # 2846 "lib/read.ml" | 5 -> # 934 "lib/read.mll" # 934 "lib/read.mll" ( # 942 "lib/read.mll" long_error "Invalid token" v lexbuf # 944 "lib/read.mll" ) # 2860 "lib/read.ml" # 2861 "lib/read.ml" | 6 -> # 946 "lib/read.mll" # 946 "lib/read.mll" ( add_lexeme v.buf lexbuf; buffer_json v lexbuf ) # 2865 "lib/read.ml" # 2866 "lib/read.ml" | 7 -> # 947 "lib/read.mll" # 947 "lib/read.mll" ( Buffer.add_string v.buf "/*"; finish_buffer_comment v lexbuf; buffer_json v lexbuf ) # 2872 "lib/read.ml" # 2873 "lib/read.ml" | 8 -> # 950 "lib/read.mll" # 950 "lib/read.mll" ( Buffer.add_char v.buf '\n'; newline v lexbuf; buffer_json v lexbuf ) # 2879 "lib/read.ml" # 2880 "lib/read.ml" | 9 -> # 953 "lib/read.mll" # 953 "lib/read.mll" ( add_lexeme v.buf lexbuf; buffer_json v lexbuf ) # 2884 "lib/read.ml" # 2885 "lib/read.ml" | 10 -> # 954 "lib/read.mll" # 954 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2889 "lib/read.ml" # 2890 "lib/read.ml" | 11 -> # 955 "lib/read.mll" # 955 "lib/read.mll" ( long_error "Invalid token" v lexbuf ) # 2894 "lib/read.ml" # 2895 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_buffer_json_rec v lexbuf __ocaml_lex_state and finish_buffer_stringlit v lexbuf = __ocaml_lex_finish_buffer_stringlit_rec v lexbuf 450 and __ocaml_lex_finish_buffer_stringlit_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 961 "lib/read.mll" # 961 "lib/read.mll" ( Buffer.add_char v.buf '"'; add_lexeme v.buf lexbuf ) # 2908 "lib/read.ml" # 2909 "lib/read.ml" | 1 -> # 964 "lib/read.mll" # 964 "lib/read.mll" ( long_error "Invalid string literal" v lexbuf ) # 2913 "lib/read.ml" # 2914 "lib/read.ml" | 2 -> # 965 "lib/read.mll" # 965 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2918 "lib/read.ml" # 2919 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_finish_buffer_stringlit_rec v lexbuf __ocaml_lex_state and finish_buffer_variant v lexbuf = __ocaml_lex_finish_buffer_variant_rec v lexbuf 461 and __ocaml_lex_finish_buffer_variant_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 968 "lib/read.mll" # 968 "lib/read.mll" ( Buffer.add_char v.buf ':'; buffer_json v lexbuf; buffer_space v lexbuf; buffer_gt v lexbuf ) # 2933 "lib/read.ml" # 2934 "lib/read.ml" | 1 -> # 972 "lib/read.mll" # 972 "lib/read.mll" ( Buffer.add_char v.buf '>' ) # 2938 "lib/read.ml" # 2939 "lib/read.ml" | 2 -> # 973 "lib/read.mll" # 973 "lib/read.mll" ( long_error "Expected ':' or '>' but found" v lexbuf ) # 2943 "lib/read.ml" # 2944 "lib/read.ml" | 3 -> # 974 "lib/read.mll" # 974 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2948 "lib/read.ml" # 2949 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_finish_buffer_variant_rec v lexbuf __ocaml_lex_state and buffer_ident v lexbuf = __ocaml_lex_buffer_ident_rec v lexbuf 466 and __ocaml_lex_buffer_ident_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 977 "lib/read.mll" # 977 "lib/read.mll" ( finish_buffer_stringlit v lexbuf ) # 2960 "lib/read.ml" # 2961 "lib/read.ml" | 1 -> # 978 "lib/read.mll" # 978 "lib/read.mll" ( add_lexeme v.buf lexbuf ) # 2965 "lib/read.ml" # 2966 "lib/read.ml" | 2 -> # 979 "lib/read.mll" # 979 "lib/read.mll" ( long_error "Expected string or identifier but found" v lexbuf ) # 2970 "lib/read.ml" # 2971 "lib/read.ml" | 3 -> # 980 "lib/read.mll" # 980 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2975 "lib/read.ml" # 2976 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_buffer_ident_rec v lexbuf __ocaml_lex_state and buffer_space v lexbuf = __ocaml_lex_buffer_space_rec v lexbuf 471 and __ocaml_lex_buffer_space_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 983 "lib/read.mll" # 983 "lib/read.mll" ( add_lexeme v.buf lexbuf; newline v lexbuf; buffer_space v lexbuf ) # 2990 "lib/read.ml" # 2991 "lib/read.ml" | 1 -> # 987 "lib/read.mll" # 987 "lib/read.mll" ( Buffer.add_string v.buf "/*"; finish_buffer_comment v lexbuf; buffer_space v lexbuf ) # 2998 "lib/read.ml" # 2999 "lib/read.ml" | 2 -> # 991 "lib/read.mll" # 991 "lib/read.mll" ( Buffer.add_char v.buf '\n'; newline v lexbuf; buffer_space v lexbuf ) # 3006 "lib/read.ml" # 3007 "lib/read.ml" | 3 -> # 995 "lib/read.mll" # 995 "lib/read.mll" ( add_lexeme v.buf lexbuf; buffer_space v lexbuf ) # 3013 "lib/read.ml" # 3014 "lib/read.ml" | 4 -> # 998 "lib/read.mll" # 998 "lib/read.mll" ( () ) # 3018 "lib/read.ml" # 3019 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_buffer_space_rec v lexbuf __ocaml_lex_state and buffer_object_end v lexbuf = __ocaml_lex_buffer_object_end_rec v lexbuf 478 and __ocaml_lex_buffer_object_end_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 1001 "lib/read.mll" # 1001 "lib/read.mll" ( Buffer.add_char v.buf '}'; raise End_of_object ) # 3032 "lib/read.ml" # 3033 "lib/read.ml" | 1 -> # 1004 "lib/read.mll" # 1004 "lib/read.mll" ( () ) # 3037 "lib/read.ml" # 3038 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_buffer_object_end_rec v lexbuf __ocaml_lex_state and buffer_object_sep v lexbuf = __ocaml_lex_buffer_object_sep_rec v lexbuf 480 and __ocaml_lex_buffer_object_sep_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 1007 "lib/read.mll" # 1007 "lib/read.mll" ( Buffer.add_char v.buf ',' ) # 3049 "lib/read.ml" # 3050 "lib/read.ml" | 1 -> # 1008 "lib/read.mll" # 1008 "lib/read.mll" ( Buffer.add_char v.buf '}'; raise End_of_object ) # 3054 "lib/read.ml" # 3055 "lib/read.ml" | 2 -> # 1009 "lib/read.mll" # 1009 "lib/read.mll" ( long_error "Expected ',' or '}' but found" v lexbuf ) # 3059 "lib/read.ml" # 3060 "lib/read.ml" | 3 -> # 1010 "lib/read.mll" # 1010 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 3064 "lib/read.ml" # 3065 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_buffer_object_sep_rec v lexbuf __ocaml_lex_state and buffer_array_end v lexbuf = __ocaml_lex_buffer_array_end_rec v lexbuf 485 and __ocaml_lex_buffer_array_end_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 1013 "lib/read.mll" # 1013 "lib/read.mll" ( Buffer.add_char v.buf ']'; raise End_of_array ) # 3076 "lib/read.ml" # 3077 "lib/read.ml" | 1 -> # 1014 "lib/read.mll" # 1014 "lib/read.mll" ( () ) # 3081 "lib/read.ml" # 3082 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_buffer_array_end_rec v lexbuf __ocaml_lex_state and buffer_array_sep v lexbuf = __ocaml_lex_buffer_array_sep_rec v lexbuf 487 and __ocaml_lex_buffer_array_sep_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 1017 "lib/read.mll" # 1017 "lib/read.mll" ( Buffer.add_char v.buf ',' ) # 3093 "lib/read.ml" # 3094 "lib/read.ml" | 1 -> # 1018 "lib/read.mll" # 1018 "lib/read.mll" ( Buffer.add_char v.buf ']'; raise End_of_array ) # 3098 "lib/read.ml" # 3099 "lib/read.ml" | 2 -> # 1019 "lib/read.mll" # 1019 "lib/read.mll" ( long_error "Expected ',' or ']' but found" v lexbuf ) # 3103 "lib/read.ml" # 3104 "lib/read.ml" | 3 -> # 1020 "lib/read.mll" # 1020 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 3108 "lib/read.ml" # 3109 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_buffer_array_sep_rec v lexbuf __ocaml_lex_state and buffer_tuple_end v lexbuf = __ocaml_lex_buffer_tuple_end_rec v lexbuf 492 and __ocaml_lex_buffer_tuple_end_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 1023 "lib/read.mll" # 1023 "lib/read.mll" ( Buffer.add_char v.buf ')'; raise End_of_tuple ) # 3122 "lib/read.ml" # 3123 "lib/read.ml" | 1 -> # 1026 "lib/read.mll" # 1026 "lib/read.mll" ( () ) # 3127 "lib/read.ml" # 3128 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_buffer_tuple_end_rec v lexbuf __ocaml_lex_state and buffer_tuple_sep v lexbuf = __ocaml_lex_buffer_tuple_sep_rec v lexbuf 494 and __ocaml_lex_buffer_tuple_sep_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 1029 "lib/read.mll" # 1029 "lib/read.mll" ( Buffer.add_char v.buf ',' ) # 3139 "lib/read.ml" # 3140 "lib/read.ml" | 1 -> # 1030 "lib/read.mll" # 1030 "lib/read.mll" ( Buffer.add_char v.buf ')'; raise End_of_tuple ) # 3144 "lib/read.ml" # 3145 "lib/read.ml" | 2 -> # 1031 "lib/read.mll" # 1031 "lib/read.mll" ( long_error "Expected ',' or ')' but found" v lexbuf ) # 3149 "lib/read.ml" # 3150 "lib/read.ml" | 3 -> # 1032 "lib/read.mll" # 1032 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 3154 "lib/read.ml" # 3155 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_buffer_tuple_sep_rec v lexbuf __ocaml_lex_state and buffer_colon v lexbuf = __ocaml_lex_buffer_colon_rec v lexbuf 499 and __ocaml_lex_buffer_colon_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 1035 "lib/read.mll" # 1035 "lib/read.mll" ( Buffer.add_char v.buf ':' ) # 3166 "lib/read.ml" # 3167 "lib/read.ml" | 1 -> # 1036 "lib/read.mll" # 1036 "lib/read.mll" ( long_error "Expected ':' but found" v lexbuf ) # 3171 "lib/read.ml" # 3172 "lib/read.ml" | 2 -> # 1037 "lib/read.mll" # 1037 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 3176 "lib/read.ml" # 3177 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_buffer_colon_rec v lexbuf __ocaml_lex_state and buffer_gt v lexbuf = __ocaml_lex_buffer_gt_rec v lexbuf 503 and __ocaml_lex_buffer_gt_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 1040 "lib/read.mll" # 1040 "lib/read.mll" ( Buffer.add_char v.buf '>' ) # 3188 "lib/read.ml" # 3189 "lib/read.ml" | 1 -> # 1041 "lib/read.mll" # 1041 "lib/read.mll" ( long_error "Expected '>' but found" v lexbuf ) # 3193 "lib/read.ml" # 3194 "lib/read.ml" | 2 -> # 1042 "lib/read.mll" # 1042 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 3198 "lib/read.ml" # 3199 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_buffer_gt_rec v lexbuf __ocaml_lex_state and finish_buffer_comment v lexbuf = __ocaml_lex_finish_buffer_comment_rec v lexbuf 507 and __ocaml_lex_finish_buffer_comment_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 1045 "lib/read.mll" # 1045 "lib/read.mll" ( Buffer.add_string v.buf "*/" ) # 3210 "lib/read.ml" # 3211 "lib/read.ml" | 1 -> # 1046 "lib/read.mll" # 1046 "lib/read.mll" ( long_error "Unterminated comment" v lexbuf ) # 3215 "lib/read.ml" # 3216 "lib/read.ml" | 2 -> # 1047 "lib/read.mll" # 1047 "lib/read.mll" ( Buffer.add_char v.buf '\n'; newline v lexbuf; finish_buffer_comment v lexbuf ) # 3222 "lib/read.ml" # 3223 "lib/read.ml" | 3 -> # 1050 "lib/read.mll" # 1050 "lib/read.mll" ( add_lexeme v.buf lexbuf; finish_buffer_comment v lexbuf ) # 3227 "lib/read.ml" # 3228 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_finish_buffer_comment_rec v lexbuf __ocaml_lex_state and junk lexbuf = __ocaml_lex_junk_rec lexbuf 513 and __ocaml_lex_junk_rec lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 1053 "lib/read.mll" # 1053 "lib/read.mll" ( Lexing.lexeme lexbuf ) # 3239 "lib/read.ml" # 3240 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_junk_rec lexbuf __ocaml_lex_state ;; # 1055 "lib/read.mll" # 1056 "lib/read.mll" let _ = (read_json : lexer_state -> Lexing.lexbuf -> t) let read_t = read_json let () = read_junk := junk let read_int8 v lexbuf = let n = read_int v lexbuf in if n < 0 || n > 255 then lexer_error "Int8 overflow" v lexbuf else char_of_int n let read_list read_cell v lexbuf = List.rev (read_list_rev read_cell v lexbuf) let array_of_rev_list l = match l with [] -> [| |] | x :: tl -> let len = List.length l in let a = Array.make len x in let r = ref tl in for i = len - 2 downto 0 do a.(i) <- List.hd !r; r := List.tl !r done; a let read_array read_cell v lexbuf = let l = read_list_rev read_cell v lexbuf in array_of_rev_list l (* Read a JSON object, reading the keys into OCaml strings (provided for backward compatibility) *) let read_fields read_field init_acc v = read_abstract_fields read_ident read_field init_acc v let finish v lexbuf = read_space v lexbuf; if not (read_eof lexbuf) then long_error "Junk after end of JSON value:" v lexbuf let init_lexer = init_lexer let from_lexbuf v ?(stream = false) lexbuf = read_space v lexbuf; let x = if read_eof lexbuf then raise End_of_input else read_json v lexbuf in if not stream then finish v lexbuf; x let from_string ?buf ?fname ?lnum s = try let lexbuf = Lexing.from_string s in let v = init_lexer ?buf ?fname ?lnum () in from_lexbuf v lexbuf with End_of_input -> json_error "Blank input data" let from_channel ?buf ?fname ?lnum ic = try let lexbuf = Lexing.from_channel ic in let v = init_lexer ?buf ?fname ?lnum () in from_lexbuf v lexbuf with End_of_input -> json_error "Blank input data" let from_file ?buf ?fname ?lnum file = let ic = open_in file in try let x = from_channel ?buf ?fname ?lnum ic in close_in ic; x with e -> close_in_noerr ic; raise e exception Finally of exn * exn let seq_from_lexbuf v ?(fin = fun () -> ()) lexbuf = let stream = Some true in let rec f () = try Seq.Cons (from_lexbuf v ?stream lexbuf, f) with End_of_input -> fin (); Seq.Nil | e -> (try fin () with fin_e -> raise (Finally (e, fin_e))); raise e in f let seq_from_string ?buf ?fname ?lnum s = let v = init_lexer ?buf ?fname ?lnum () in seq_from_lexbuf v (Lexing.from_string s) let seq_from_channel ?buf ?fin ?fname ?lnum ic = let lexbuf = Lexing.from_channel ic in let v = init_lexer ?buf ?fname ?lnum () in seq_from_lexbuf v ?fin lexbuf let seq_from_file ?buf ?fname ?lnum file = let ic = open_in file in let fin () = close_in ic in let fname = match fname with None -> Some file | x -> x in let lexbuf = Lexing.from_channel ic in let v = init_lexer ?buf ?fname ?lnum () in seq_from_lexbuf v ~fin lexbuf type json_line = [ `Json of t | `Exn of exn ] let lineseq_from_channel ?buf ?(fin = fun () -> ()) ?fname ?lnum:(lnum0 = 1) ic = let buf = match buf with None -> Some (Buffer.create 256) | Some _ -> buf in let rec f lnum = fun () -> try let line = input_line ic in Seq.Cons (`Json (from_string ?buf ?fname ~lnum line), f (lnum + 1)) with End_of_file -> fin (); Seq.Nil | e -> Seq.Cons (`Exn e, f (lnum + 1)) in f lnum0 let lineseq_from_file ?buf ?fname ?lnum file = let ic = open_in file in let fin () = close_in ic in let fname = match fname with None -> Some file | x -> x in lineseq_from_channel ?buf ~fin ?fname ?lnum ic let prettify ?std s = pretty_to_string ?std (from_string s) let compact ?std s = to_string (from_string s) # 3408 "lib/read.ml" # 42 "yojson.cppo.ml" module Util = struct # 1 "util.ml" exception Type_error of string * t let typeof = function | `Assoc _ -> "object" | `Bool _ -> "bool" | `Float _ -> "float" | `Int _ -> "int" | `List _ -> "array" | `Null -> "null" | `String _ -> "string" | `Intlit _ -> "intlit" | `Tuple _ -> "tuple" | `Variant _ -> "variant" let typerr msg js = raise (Type_error (msg ^ typeof js, js)) exception Undefined of string * t let assoc name obj = try List.assoc name obj with Not_found -> `Null let member name = function | `Assoc obj -> assoc name obj | js -> typerr ("Can't get member '" ^ name ^ "' of non-object type ") js let index i = function | `List l as js -> let len = List.length l in let wrapped_index = if i < 0 then len + i else i in if wrapped_index < 0 || wrapped_index >= len then raise (Undefined ("Index " ^ string_of_int i ^ " out of bounds", js)) else List.nth l wrapped_index | js -> typerr ("Can't get index " ^ string_of_int i ^ " of non-array type ") js let map f = function | `List l -> `List (List.map f l) | js -> typerr "Can't map function over non-array type " js let to_assoc = function | `Assoc obj -> obj | js -> typerr "Expected object, got " js let to_option f = function | `Null -> None | x -> Some (f x) let to_bool = function | `Bool b -> b | js -> typerr "Expected bool, got " js let to_bool_option = function | `Bool b -> Some b | `Null -> None | js -> typerr "Expected bool or null, got " js let to_number = function | `Int i -> float i | `Float f -> f | js -> typerr "Expected number, got " js let to_number_option = function | `Int i -> Some (float i) | `Float f -> Some f | `Null -> None | js -> typerr "Expected number or null, got " js let to_float = function | `Float f -> f | js -> typerr "Expected float, got " js let to_float_option = function | `Float f -> Some f | `Null -> None | js -> typerr "Expected float or null, got " js let to_int = function | `Int i -> i | js -> typerr "Expected int, got " js let to_int_option = function | `Int i -> Some i | `Null -> None | js -> typerr "Expected int or null, got " js let to_list = function | `List l -> l | js -> typerr "Expected array, got " js let to_string = function | `String s -> s | js -> typerr "Expected string, got " js let to_string_option = function | `String s -> Some s | `Null -> None | js -> typerr "Expected string or null, got " js let convert_each f = function | `List l -> List.map f l | js -> typerr "Can't convert each element of non-array type " js let rec rev_filter_map f acc l = match l with [] -> acc | x :: tl -> match f x with None -> rev_filter_map f acc tl | Some y -> rev_filter_map f (y :: acc) tl let filter_map f l = List.rev (rev_filter_map f [] l) let rec rev_flatten acc l = match l with [] -> acc | x :: tl -> match x with `List l2 -> rev_flatten (List.rev_append l2 acc) tl | _ -> rev_flatten acc tl let flatten l = List.rev (rev_flatten [] l) let filter_index i l = filter_map ( function `List l -> (try Some (List.nth l i) with _ -> None) | _ -> None ) l let filter_list l = filter_map ( function `List l -> Some l | _ -> None ) l let filter_member k l = filter_map ( function `Assoc l -> (try Some (List.assoc k l) with _ -> None) | _ -> None ) l let filter_assoc l = filter_map ( function `Assoc l -> Some l | _ -> None ) l let filter_bool l = filter_map ( function `Bool x -> Some x | _ -> None ) l let filter_int l = filter_map ( function `Int x -> Some x | _ -> None ) l let filter_float l = filter_map ( function `Float x -> Some x | _ -> None ) l let filter_number l = filter_map ( function `Int x -> Some (float x) | `Float x -> Some x | _ -> None ) l let filter_string l = filter_map ( function `String x -> Some x | _ -> None ) l let keys o = to_assoc o |> List.map (fun (key, _) -> key) let values o = to_assoc o |> List.map (fun (_, value) -> value) let combine (first : t) (second : t) = match (first, second) with | (`Assoc a, `Assoc b) -> (`Assoc (a @ b) : t) | (a, b) -> raise (Invalid_argument "Expected two objects, check inputs") # 45 "yojson.cppo.ml" end # 49 "yojson.cppo.ml" end module Safe = struct # 1 "type.ml" (** {3 Type of the JSON tree} *) type t = [ | `Null | `Bool of bool # 8 "type.ml" | `Int of int # 11 "type.ml" | `Intlit of string # 14 "type.ml" | `Float of float # 20 "type.ml" | `String of string # 25 "type.ml" | `Assoc of (string * t) list | `List of t list # 28 "type.ml" | `Tuple of t list # 31 "type.ml" | `Variant of (string * t option) # 33 "type.ml" ] (** All possible cases defined in Yojson: - `Null: JSON null - `Bool of bool: JSON boolean - `Int of int: JSON number without decimal point or exponent. - `Intlit of string: JSON number without decimal point or exponent, preserved as a string. - `Float of float: JSON number, Infinity, -Infinity or NaN. - `Floatlit of string: JSON number, Infinity, -Infinity or NaN, preserved as a string. - `String of string: JSON string. Bytes in the range 128-255 are preserved as-is without encoding validation for both reading and writing. - `Stringlit of string: JSON string literal including the double quotes. - `Assoc of (string * json) list: JSON object. - `List of json list: JSON array. - `Tuple of json list: Tuple (non-standard extension of JSON). Syntax: [("abc", 123)]. - `Variant of (string * json option): Variant (non-standard extension of JSON). Syntax: [<"Foo">] or [<"Bar":123>]. *) (* Note to adventurers: ocamldoc does not support inline comments on each polymorphic variant, and cppo doesn't allow to concatenate comments, so it would be complicated to document only the cases that are preserved by cppo in the type definition. *) # 1 "safe.ml" let rec to_basic : t -> Basic.t = function `Null | `Bool _ | `Int _ | `Float _ | `String _ as x -> x | `Intlit s -> `String s | `List l | `Tuple l -> `List (List.rev (List.rev_map to_basic l)) | `Assoc l -> `Assoc (List.rev (List.rev_map (fun (k, v) -> (k, to_basic v)) l)) | `Variant (k, None) -> `String k | `Variant (k, Some v) -> `List [ `String k; to_basic v ] # 1 "write.ml" (* included: type.ml *) let hex n = Char.chr ( if n < 10 then n + 48 else n + 87 ) let write_special src start stop ob str = Buffer.add_substring ob src !start (stop - !start); Buffer.add_string ob str; start := stop + 1 let write_control_char src start stop ob c = Buffer.add_substring ob src !start (stop - !start); Buffer.add_string ob "\\u00"; Buffer.add_char ob (hex (Char.code c lsr 4)); Buffer.add_char ob (hex (Char.code c land 0xf)); start := stop + 1 let finish_string src start ob = try Buffer.add_substring ob src !start (String.length src - !start) with exc -> Printf.eprintf "src=%S start=%i len=%i\n%!" src !start (String.length src - !start); raise exc let write_string_body ob s = let start = ref 0 in for i = 0 to String.length s - 1 do match s.[i] with '"' -> write_special s start i ob "\\\"" | '\\' -> write_special s start i ob "\\\\" | '\b' -> write_special s start i ob "\\b" | '\012' -> write_special s start i ob "\\f" | '\n' -> write_special s start i ob "\\n" | '\r' -> write_special s start i ob "\\r" | '\t' -> write_special s start i ob "\\t" | '\x00'..'\x1F' | '\x7F' as c -> write_control_char s start i ob c | _ -> () done; finish_string s start ob let write_string ob s = Buffer.add_char ob '"'; write_string_body ob s; Buffer.add_char ob '"' let json_string_of_string s = let ob = Buffer.create 10 in write_string ob s; Buffer.contents ob let test_string () = let s = Bytes.create 256 in for i = 0 to 255 do Bytes.set s i (Char.chr i) done; json_string_of_string (Bytes.to_string s) let write_null ob () = Buffer.add_string ob "null" let write_bool ob x = Buffer.add_string ob (if x then "true" else "false") let max_digits = max (String.length (string_of_int max_int)) (String.length (string_of_int min_int)) let dec n = Char.chr (n + 48) let rec write_digits s x = if x = 0 then () else let d = x mod 10 in write_digits s (x / 10); Buffer.add_char s (dec (abs d)) let write_int ob x = if x > 0 then write_digits ob x else if x < 0 then ( Buffer.add_char ob '-'; write_digits ob x ) else Buffer.add_char ob '0' let json_string_of_int i = string_of_int i (* Ensure that the float is not printed as an int. This is not required by JSON, but useful in order to guarantee reversibility. *) let float_needs_period s = try for i = 0 to String.length s - 1 do match s.[i] with '0'..'9' | '-' -> () | _ -> raise Exit done; true with Exit -> false (* Guarantees that a sufficient number of digits are printed in order to allow reversibility. *) let write_float ob x = match classify_float x with FP_nan -> Buffer.add_string ob "NaN" | FP_infinite -> Buffer.add_string ob (if x > 0. then "Infinity" else "-Infinity") | _ -> let s1 = Printf.sprintf "%.16g" x in let s = if float_of_string s1 = x then s1 else Printf.sprintf "%.17g" x in Buffer.add_string ob s; if float_needs_period s then Buffer.add_string ob ".0" let write_normal_float_prec significant_figures ob x = let open Printf in let s = match significant_figures with 1 -> sprintf "%.1g" x | 2 -> sprintf "%.2g" x | 3 -> sprintf "%.3g" x | 4 -> sprintf "%.4g" x | 5 -> sprintf "%.5g" x | 6 -> sprintf "%.6g" x | 7 -> sprintf "%.7g" x | 8 -> sprintf "%.8g" x | 9 -> sprintf "%.9g" x | 10 -> sprintf "%.10g" x | 11 -> sprintf "%.11g" x | 12 -> sprintf "%.12g" x | 13 -> sprintf "%.13g" x | 14 -> sprintf "%.14g" x | 15 -> sprintf "%.15g" x | 16 -> sprintf "%.16g" x | _ -> sprintf "%.17g" x in Buffer.add_string ob s; if float_needs_period s then Buffer.add_string ob ".0" (* used by atdgen *) let write_float_prec significant_figures ob x = match classify_float x with FP_nan -> Buffer.add_string ob "NaN" | FP_infinite -> Buffer.add_string ob (if x > 0. then "Infinity" else "-Infinity") | _ -> write_normal_float_prec significant_figures ob x let json_string_of_float x = let ob = Buffer.create 20 in write_float ob x; Buffer.contents ob let write_std_float ob x = match classify_float x with FP_nan -> json_error "NaN value not allowed in standard JSON" | FP_infinite -> json_error (if x > 0. then "Infinity value not allowed in standard JSON" else "-Infinity value not allowed in standard JSON") | _ -> let s1 = Printf.sprintf "%.16g" x in let s = if float_of_string s1 = x then s1 else Printf.sprintf "%.17g" x in Buffer.add_string ob s; if float_needs_period s then Buffer.add_string ob ".0" (* used by atdgen *) let write_std_float_prec significant_figures ob x = match classify_float x with FP_nan -> json_error "NaN value not allowed in standard JSON" | FP_infinite -> json_error (if x > 0. then "Infinity value not allowed in standard JSON" else "-Infinity value not allowed in standard JSON") | _ -> write_normal_float_prec significant_figures ob x let std_json_string_of_float x = let ob = Buffer.create 20 in write_std_float ob x; Buffer.contents ob let test_float () = let l = [ 0.; 1.; -1. ] in let l = l @ List.map (fun x -> 2. *. x +. 1.) l in let l = l @ List.map (fun x -> x /. sqrt 2.) l in let l = l @ List.map (fun x -> x *. sqrt 3.) l in let l = l @ List.map cos l in let l = l @ List.map (fun x -> x *. 1.23e50) l in let l = l @ [ infinity; neg_infinity ] in List.iter ( fun x -> let s = Printf.sprintf "%.17g" x in let y = float_of_string s in Printf.printf "%g %g %S %B\n" x y s (x = y) ) l (* let () = test_float () *) let write_intlit = Buffer.add_string let write_floatlit = Buffer.add_string let write_stringlit = Buffer.add_string let rec iter2_aux f_elt f_sep x = function [] -> () | y :: l -> f_sep x; f_elt x y; iter2_aux f_elt f_sep x l let iter2 f_elt f_sep x = function [] -> () | y :: l -> f_elt x y; iter2_aux f_elt f_sep x l let f_sep ob = Buffer.add_char ob ',' let rec write_json ob (x : t) = match x with `Null -> write_null ob () | `Bool b -> write_bool ob b # 264 "write.ml" | `Int i -> write_int ob i # 267 "write.ml" | `Intlit s -> Buffer.add_string ob s # 270 "write.ml" | `Float f -> write_float ob f # 276 "write.ml" | `String s -> write_string ob s # 281 "write.ml" | `Assoc l -> write_assoc ob l | `List l -> write_list ob l # 284 "write.ml" | `Tuple l -> write_tuple ob l # 287 "write.ml" | `Variant (s, o) -> write_variant ob s o # 290 "write.ml" and write_assoc ob l = let f_elt ob (s, x) = write_string ob s; Buffer.add_char ob ':'; write_json ob x in Buffer.add_char ob '{'; iter2 f_elt f_sep ob l; Buffer.add_char ob '}'; and write_list ob l = Buffer.add_char ob '['; iter2 write_json f_sep ob l; Buffer.add_char ob ']' # 306 "write.ml" and write_tuple ob l = Buffer.add_char ob '('; iter2 write_json f_sep ob l; Buffer.add_char ob ')' # 313 "write.ml" and write_variant ob s o = Buffer.add_char ob '<'; write_string ob s; (match o with None -> () | Some x -> Buffer.add_char ob ':'; write_json ob x ); Buffer.add_char ob '>' # 325 "write.ml" let write_t = write_json let rec write_std_json ob (x : t) = match x with `Null -> write_null ob () | `Bool b -> write_bool ob b # 332 "write.ml" | `Int i -> write_int ob i # 335 "write.ml" | `Intlit s -> Buffer.add_string ob s # 338 "write.ml" | `Float f -> write_std_float ob f # 344 "write.ml" | `String s -> write_string ob s # 349 "write.ml" | `Assoc l -> write_std_assoc ob l | `List l -> write_std_list ob l # 352 "write.ml" | `Tuple l -> write_std_tuple ob l # 355 "write.ml" | `Variant (s, o) -> write_std_variant ob s o # 358 "write.ml" and write_std_assoc ob l = let f_elt ob (s, x) = write_string ob s; Buffer.add_char ob ':'; write_std_json ob x in Buffer.add_char ob '{'; iter2 f_elt f_sep ob l; Buffer.add_char ob '}'; and write_std_list ob l = Buffer.add_char ob '['; iter2 write_std_json f_sep ob l; Buffer.add_char ob ']' and write_std_tuple ob l = Buffer.add_char ob '['; iter2 write_std_json f_sep ob l; Buffer.add_char ob ']' # 379 "write.ml" and write_std_variant ob s o = match o with None -> write_string ob s | Some x -> Buffer.add_char ob '['; write_string ob s; Buffer.add_char ob ','; write_std_json ob x; Buffer.add_char ob ']' # 391 "write.ml" let to_buffer ?(suf = "") ?(std = false) ob x = if std then write_std_json ob x else write_json ob x; Buffer.add_string ob suf let to_string ?buf ?(len = 256) ?(suf = "") ?std x = let ob = match buf with None -> Buffer.create len | Some ob -> Buffer.clear ob; ob in to_buffer ~suf ?std ob x; let s = Buffer.contents ob in Buffer.clear ob; s let to_channel ?buf ?(len=4096) ?(suf = "") ?std oc x = let ob = match buf with None -> Buffer.create len | Some ob -> Buffer.clear ob; ob in to_buffer ~suf ?std ob x; Buffer.output_buffer oc ob; Buffer.clear ob let to_output ?buf ?(len=4096) ?(suf = "") ?std out x = let ob = match buf with None -> Buffer.create len | Some ob -> Buffer.clear ob; ob in to_buffer ~suf ?std ob x; out#output (Buffer.contents ob) 0 (Buffer.length ob); Buffer.clear ob let to_file ?len ?std ?(suf = "\n") file x = let oc = open_out file in try to_channel ?len ~suf ?std oc x; close_out oc with e -> close_out_noerr oc; raise e let seq_to_buffer ?(suf = "\n") ?std ob st = Seq.iter (to_buffer ~suf ?std ob) st let seq_to_string ?buf ?(len = 256) ?(suf = "\n") ?std st = let ob = match buf with None -> Buffer.create len | Some ob -> Buffer.clear ob; ob in seq_to_buffer ~suf ?std ob st; let s = Buffer.contents ob in Buffer.clear ob; s let seq_to_channel ?buf ?(len=2096) ?(suf = "\n") ?std oc seq = let ob = match buf with None -> Buffer.create len | Some ob -> Buffer.clear ob; ob in Seq.iter (fun json -> to_buffer ~suf ?std ob json; Buffer.output_buffer oc ob; Buffer.clear ob; ) seq let seq_to_file ?len ?(suf = "\n") ?std file st = let oc = open_out file in try seq_to_channel ?len ~suf ?std oc st; close_out oc with e -> close_out_noerr oc; raise e let rec sort = function | `Assoc l -> let l = List.rev (List.rev_map (fun (k, v) -> (k, sort v)) l) in `Assoc (List.stable_sort (fun (a, _) (b, _) -> String.compare a b) l) | `List l -> `List (List.rev (List.rev_map sort l)) # 485 "write.ml" | `Tuple l -> `Tuple (List.rev (List.rev_map sort l)) # 489 "write.ml" | `Variant (k, Some v) as x -> let v' = sort v in if v == v' then x else `Variant (k, Some v') # 495 "write.ml" | x -> x # 62 "yojson.cppo.ml" module Pretty = struct # 1 "pretty.ml" (* Pretty-print JSON data in an attempt to maximize readability. 1. What fits on one line stays on one line. 2. What doesn't fit on one line gets printed more vertically so as to not exceed a reasonable page width, if possible. Arrays containing only simple elements ("atoms") are pretty-printed with end-of-line wrapping like ordinary text: [ "hello", "hello", "hello", "hello", "hello", "hello", "hello", "hello", "hello", "hello", "hello", "hello", "hello", "hello", "hello", "hello" ] Other arrays are printed either horizontally or vertically depending on whether they fit on a single line: [ { "hello": "world" }, { "hello": "world" }, { "hello": "world" } ] or [ { "hello": "world" }, { "hello": "world" }, { "hello": "world" }, { "hello": "world" } ] *) let pp_list sep ppx out l = let pp_sep out () = Format.fprintf out "%s@ " sep in Format.pp_print_list ~pp_sep ppx out l let is_atom (x: [> t]) = match x with | `Null | `Bool _ | `Int _ | `Float _ | `String _ | `Intlit _ | `Floatlit _ | `Stringlit _ | `List [] | `Assoc [] | `Tuple [] | `Variant (_, None) -> true | `List _ | `Assoc _ | `Tuple _ | `Variant (_, Some _) -> false let is_atom_list l = List.for_all is_atom l (* inside_box: indicates that we're already within a box that imposes a certain style and we shouldn't create a new one. This is used for printing field values like this: foo: [ bar ] rather than something else like foo: [ bar ] *) let rec format ~inside_box std (out:Format.formatter) (x:t) : unit = match x with | `Null -> Format.pp_print_string out "null" | `Bool x -> Format.pp_print_bool out x # 78 "pretty.ml" | `Int x -> Format.pp_print_string out (json_string_of_int x) # 81 "pretty.ml" | `Float x -> let s = if std then std_json_string_of_float x else json_string_of_float x in Format.pp_print_string out s # 89 "pretty.ml" | `String s -> Format.pp_print_string out (json_string_of_string s) # 92 "pretty.ml" | `Intlit s -> Format.pp_print_string out s # 100 "pretty.ml" | `List [] -> Format.pp_print_string out "[]" | `List l -> if not inside_box then Format.fprintf out "@["; if is_atom_list l then (* use line wrapping like we would do for a paragraph of text *) Format.fprintf out "[@;<1 0>@[%a@]@;<1 -2>]" (pp_list "," (format ~inside_box:false std)) l else (* print the elements horizontally if they fit on the line, otherwise print them in a column *) Format.fprintf out "[@;<1 0>@[%a@]@;<1 -2>]" (pp_list "," (format ~inside_box:false std)) l; if not inside_box then Format.fprintf out "@]"; | `Assoc [] -> Format.pp_print_string out "{}" | `Assoc l -> if not inside_box then Format.fprintf out "@["; Format.fprintf out "{@;<1 0>%a@;<1 -2>}" (pp_list "," (format_field std)) l; if not inside_box then Format.fprintf out "@]"; # 119 "pretty.ml" | `Tuple l -> if std then format ~inside_box std out (`List l) else if l = [] then Format.pp_print_string out "()" else ( if not inside_box then Format.fprintf out "@["; Format.fprintf out "(@,%a@;<0 -2>)" (pp_list "," (format ~inside_box:false std)) l; if not inside_box then Format.fprintf out "@]"; ) # 132 "pretty.ml" | `Variant (s, None) -> if std then # 135 "pretty.ml" let representation = `String s in # 139 "pretty.ml" format ~inside_box std out representation else Format.fprintf out "<%s>" (json_string_of_string s) | `Variant (s, Some x) -> if std then # 146 "pretty.ml" let representation = `String s in # 150 "pretty.ml" format ~inside_box std out (`List [ representation; x ]) else let op = json_string_of_string s in Format.fprintf out "<@[%s: %a@]>" op (format ~inside_box:true std) x # 156 "pretty.ml" and format_field std out (name, x) = Format.fprintf out "@[%s: %a@]" (json_string_of_string name) (format ~inside_box:true std) x let pp ?(std = false) out x = Format.fprintf out "@[%a@]" (format ~inside_box:true std) (x :> t) let to_string ?std x = Format.asprintf "%a" (pp ?std) x let to_channel ?std oc x = let fmt = Format.formatter_of_out_channel oc in Format.fprintf fmt "%a@?" (pp ?std) x # 65 "yojson.cppo.ml" end # 1 "monomorphic.ml" let rec pp fmt = function | `Null -> Format.pp_print_string fmt "`Null" | `Bool x -> Format.fprintf fmt "`Bool (@["; Format.fprintf fmt "%B" x; Format.fprintf fmt "@])" # 9 "monomorphic.ml" | `Int x -> Format.fprintf fmt "`Int (@["; Format.fprintf fmt "%d" x; Format.fprintf fmt "@])" # 15 "monomorphic.ml" | `Intlit x -> Format.fprintf fmt "`Intlit (@["; Format.fprintf fmt "%S" x; Format.fprintf fmt "@])" # 21 "monomorphic.ml" | `Float x -> Format.fprintf fmt "`Float (@["; Format.fprintf fmt "%F" x; Format.fprintf fmt "@])" # 33 "monomorphic.ml" | `String x -> Format.fprintf fmt "`String (@["; Format.fprintf fmt "%S" x; Format.fprintf fmt "@])" # 44 "monomorphic.ml" | `Assoc xs -> Format.fprintf fmt "`Assoc (@["; Format.fprintf fmt "@[<2>["; ignore (List.fold_left (fun sep (key, value) -> if sep then Format.fprintf fmt ";@ "; Format.fprintf fmt "(@["; Format.fprintf fmt "%S" key; Format.fprintf fmt ",@ "; pp fmt value; Format.fprintf fmt "@])"; true) false xs); Format.fprintf fmt "@,]@]"; Format.fprintf fmt "@])" | `List xs -> Format.fprintf fmt "`List (@["; Format.fprintf fmt "@[<2>["; ignore (List.fold_left (fun sep x -> if sep then Format.fprintf fmt ";@ "; pp fmt x; true) false xs); Format.fprintf fmt "@,]@]"; Format.fprintf fmt "@])" # 71 "monomorphic.ml" | `Tuple tup -> Format.fprintf fmt "`Tuple (@["; Format.fprintf fmt "@[<2>["; ignore (List.fold_left (fun sep e -> if sep then Format.fprintf fmt ";@ "; pp fmt e; true) false tup); Format.fprintf fmt "@,]@]"; Format.fprintf fmt "@])" # 84 "monomorphic.ml" | `Variant (name, value) -> Format.fprintf fmt "`Variant (@["; Format.fprintf fmt "(@["; Format.fprintf fmt "%S" name; Format.fprintf fmt ",@ "; (match value with | None -> Format.pp_print_string fmt "None" | Some x -> Format.pp_print_string fmt "(Some "; pp fmt x; Format.pp_print_string fmt ")"); Format.fprintf fmt "@])"; Format.fprintf fmt "@])" # 99 "monomorphic.ml" let show x = Format.asprintf "%a" pp x let rec equal a b = match a, b with | `Null, `Null -> true | `Bool a, `Bool b -> a = b # 107 "monomorphic.ml" | `Int a, `Int b -> a = b # 110 "monomorphic.ml" | `Intlit a, `Intlit b -> a = b # 113 "monomorphic.ml" | `Float a, `Float b -> a = b # 119 "monomorphic.ml" | `String a, `String b -> a = b # 124 "monomorphic.ml" | `Assoc xs, `Assoc ys -> let compare_keys = fun (key, _) (key', _) -> String.compare key key' in let xs = List.stable_sort compare_keys xs in let ys = List.stable_sort compare_keys ys in (match List.for_all2 (fun (key, value) (key', value') -> match key = key' with | false -> false | true -> equal value value') xs ys with | result -> result | exception Invalid_argument _ -> (* the lists were of different lengths, thus unequal *) false) # 137 "monomorphic.ml" | `Tuple xs, `Tuple ys # 139 "monomorphic.ml" | `List xs, `List ys -> (match List.for_all2 equal xs ys with | result -> result | exception Invalid_argument _ -> (* the lists were of different lengths, thus unequal *) false) # 146 "monomorphic.ml" | `Variant (name, value), `Variant (name', value') -> (match name = name' with | false -> false | true -> match value, value' with | None, None -> true | Some x, Some y -> equal x y | _ -> false) # 155 "monomorphic.ml" | _ -> false # 2 "write2.ml" let pretty_print ?std out x = Pretty.pp ?std out x let pretty_to_string ?std x = Pretty.to_string ?std x let pretty_to_channel ?std oc x = Pretty.to_channel ?std oc x # 1 "lib/read.mll" # 2 "lib/read.mll" module Lexing = (* We override Lexing.engine in order to avoid creating a new position record each time a rule is matched. This reduces total parsing time by about 31%. *) struct include Lexing external c_engine : lex_tables -> int -> lexbuf -> int = "caml_lex_engine" let engine tbl state buf = let result = c_engine tbl state buf in (* if result >= 0 then begin buf.lex_start_p <- buf.lex_curr_p; buf.lex_curr_p <- {buf.lex_curr_p with pos_cnum = buf.lex_abs_pos + buf.lex_curr_pos}; end; *) result end open Printf open Lexing (* see description in common.mli *) type lexer_state = Lexer_state.t = { buf : Buffer.t; mutable lnum : int; mutable bol : int; mutable fname : string option; } let dec c = Char.code c - 48 let hex c = match c with '0'..'9' -> int_of_char c - int_of_char '0' | 'a'..'f' -> int_of_char c - int_of_char 'a' + 10 | 'A'..'F' -> int_of_char c - int_of_char 'A' + 10 | _ -> assert false let custom_error descr v lexbuf = let offs = lexbuf.lex_abs_pos - 1 in let bol = v.bol in let pos1 = offs + lexbuf.lex_start_pos - bol - 1 in let pos2 = max pos1 (offs + lexbuf.lex_curr_pos - bol) in let file_line = match v.fname with None -> "Line" | Some s -> sprintf "File %s, line" s in let bytes = if pos1 = pos2 then sprintf "byte %i" (pos1+1) else sprintf "bytes %i-%i" (pos1+1) (pos2+1) in let msg = sprintf "%s %i, %s:\n%s" file_line v.lnum bytes descr in json_error msg let lexer_error descr v lexbuf = custom_error (sprintf "%s '%s'" descr (Lexing.lexeme lexbuf)) v lexbuf let read_junk = ref (fun _ -> assert false) let long_error descr v lexbuf = let junk = Lexing.lexeme lexbuf in let extra_junk = !read_junk lexbuf in custom_error (sprintf "%s '%s%s'" descr junk extra_junk) v lexbuf let min10 = min_int / 10 - (if min_int mod 10 = 0 then 0 else 1) let max10 = max_int / 10 + (if max_int mod 10 = 0 then 0 else 1) exception Int_overflow let extract_positive_int lexbuf = let start = lexbuf.lex_start_pos in let stop = lexbuf.lex_curr_pos in let s = lexbuf.lex_buffer in let n = ref 0 in for i = start to stop - 1 do if !n >= max10 then raise Int_overflow else n := 10 * !n + dec (Bytes.get s i) done; if !n < 0 then raise Int_overflow else !n let make_positive_int v lexbuf = # 104 "lib/read.mll" try `Int (extract_positive_int lexbuf) with Int_overflow -> # 108 "lib/read.mll" `Intlit (lexeme lexbuf) # 113 "lib/read.mll" let extract_negative_int lexbuf = let start = lexbuf.lex_start_pos + 1 in let stop = lexbuf.lex_curr_pos in let s = lexbuf.lex_buffer in let n = ref 0 in for i = start to stop - 1 do if !n <= min10 then raise Int_overflow else n := 10 * !n - dec (Bytes.get s i) done; if !n > 0 then raise Int_overflow else !n let make_negative_int v lexbuf = # 131 "lib/read.mll" try `Int (extract_negative_int lexbuf) with Int_overflow -> # 135 "lib/read.mll" `Intlit (lexeme lexbuf) # 141 "lib/read.mll" let set_file_name v fname = v.fname <- fname let newline v lexbuf = v.lnum <- v.lnum + 1; v.bol <- lexbuf.lex_abs_pos + lexbuf.lex_curr_pos let add_lexeme buf lexbuf = let len = lexbuf.lex_curr_pos - lexbuf.lex_start_pos in Buffer.add_subbytes buf lexbuf.lex_buffer lexbuf.lex_start_pos len let map_lexeme f lexbuf = let len = lexbuf.lex_curr_pos - lexbuf.lex_start_pos in f (Bytes.sub_string lexbuf.lex_buffer lexbuf.lex_start_pos len) 0 len type variant_kind = [ `Edgy_bracket | `Square_bracket | `Double_quote ] type tuple_kind = [ `Parenthesis | `Square_bracket ] # 161 "lib/read.ml" # 161 "lib/read.ml" let __ocaml_lex_tables = { Lexing.lex_base = "\000\000\236\255\237\255\003\000\239\255\016\000\242\255\243\255\ \244\255\245\255\000\000\031\000\249\255\085\000\001\000\000\000\ \000\000\001\000\000\000\001\000\002\000\255\255\000\000\000\000\ \003\000\254\255\001\000\004\000\253\255\011\000\252\255\003\000\ \001\000\003\000\002\000\003\000\000\000\251\255\021\000\097\000\ \010\000\022\000\020\000\016\000\022\000\012\000\008\000\250\255\ \119\000\129\000\139\000\161\000\171\000\181\000\193\000\209\000\ \240\255\011\000\038\000\252\255\065\000\254\255\255\255\110\000\ \252\255\163\000\254\255\255\255\234\000\247\255\248\255\048\001\ \250\255\251\255\252\255\253\255\254\255\255\255\071\001\126\001\ \149\001\249\255\039\000\253\255\254\255\038\000\187\001\210\001\ \248\001\015\002\255\255\220\000\253\255\255\255\245\000\039\002\ \109\002\014\001\088\002\164\002\187\002\225\002\013\000\252\255\ \253\255\254\255\255\255\014\000\253\255\254\255\255\255\030\000\ \253\255\254\255\255\255\015\000\253\255\254\255\255\255\017\001\ \251\255\252\255\253\255\254\255\255\255\019\000\252\255\253\255\ \254\255\015\000\255\255\016\000\255\255\008\001\005\000\253\255\ \023\000\254\255\020\000\255\255\046\000\253\255\254\255\042\000\ \052\000\053\000\255\255\053\000\048\000\091\000\092\000\255\255\ \027\001\250\255\251\255\137\000\104\000\089\000\088\000\106\000\ \255\255\143\000\137\000\177\000\254\255\183\000\168\000\166\000\ \183\000\002\000\253\255\177\000\172\000\187\000\004\000\252\255\ \053\002\251\255\252\255\253\255\103\001\255\255\248\002\254\255\ \006\003\030\003\252\255\253\255\254\255\255\255\040\003\050\003\ \074\003\252\255\253\255\254\255\255\255\061\003\084\003\108\003\ \249\255\250\255\251\255\244\000\120\003\142\003\179\000\194\000\ \015\000\255\255\190\000\188\000\187\000\193\000\183\000\179\000\ \254\255\191\000\201\000\200\000\196\000\203\000\193\000\189\000\ \253\255\157\003\095\003\174\003\196\003\206\003\216\003\228\003\ \239\003\060\000\253\255\254\255\255\255\012\004\252\255\253\255\ \087\004\255\255\145\004\252\255\253\255\221\004\255\255\229\000\ \253\255\254\255\255\255\231\000\253\255\254\255\255\255\002\000\ \255\255\018\001\252\255\253\255\254\255\255\255\034\001\253\255\ \254\255\255\255\000\000\255\255\003\000\254\255\255\255\038\001\ \252\255\253\255\254\255\255\255\120\001\251\255\252\255\253\255\ \254\255\255\255\208\000\253\255\254\255\255\255\211\000\253\255\ \254\255\255\255\189\000\255\255\143\001\252\255\253\255\254\255\ \255\255\013\001\253\255\254\255\255\255\095\001\252\255\253\255\ \254\255\255\255\050\001\253\255\254\255\255\255\026\001\253\255\ \254\255\255\255\233\000\253\255\254\255\255\255\222\000\253\255\ \254\255\255\255\079\005\237\255\238\255\010\000\240\255\044\001\ \243\255\244\255\245\255\246\255\061\001\002\004\249\255\045\005\ \209\000\228\000\211\000\232\000\225\000\223\000\240\000\255\255\ \235\000\234\000\008\001\254\255\004\001\023\001\253\255\054\001\ \252\255\031\001\029\001\032\001\039\001\049\001\045\001\251\255\ \057\001\082\001\080\001\078\001\084\001\074\001\086\001\250\255\ \110\005\012\004\123\005\155\005\165\005\177\005\187\005\197\005\ \241\255\199\001\077\002\253\255\255\255\154\002\222\005\209\005\ \155\002\239\005\053\006\076\006\114\006\016\002\252\255\253\255\ \254\255\255\255\152\006\252\255\253\255\227\006\255\255\085\007\ \244\255\245\255\011\000\247\255\076\002\250\255\251\255\252\255\ \253\255\254\255\031\002\243\005\051\007\100\001\115\001\104\001\ \133\001\118\001\154\001\171\001\255\255\173\001\176\001\191\001\ \185\001\187\001\253\001\230\001\230\001\234\001\247\001\237\001\ \234\001\009\002\019\002\019\002\015\002\021\002\011\002\007\002\ \142\006\152\006\116\007\170\007\180\007\190\007\200\007\210\007\ \248\255\120\002\167\002\253\255\255\255\216\002\082\007\220\007\ \236\002\244\007\058\008\081\008\119\008\076\002\252\255\253\255\ \254\255\255\255\157\008\252\255\253\255\232\008\255\255\135\002\ \120\002\253\255\100\002\254\255\182\002\255\255\011\002\255\255\ \204\002\252\255\253\255\254\255\255\255\046\002\255\255\178\002\ \252\255\253\255\254\255\255\255\023\000\255\255\183\002\252\255\ \253\255\254\255\255\255\187\002\253\255\254\255\255\255\121\002\ \253\255\254\255\255\255\184\002\252\255\253\255\254\255\019\000\ \255\255\140\001\146\001\255\255\150\001\151\001\154\001\168\001\ \170\001\171\001\172\001\173\001\181\001\184\001\185\001\187\001\ \191\001\193\001\195\001\196\001\197\001\200\001\203\001\223\001\ \225\001\228\001\249\001\251\001\002\002\004\002\011\002\012\002\ \013\002\000\000"; Lexing.lex_backtrk = "\255\255\255\255\255\255\017\000\255\255\019\000\255\255\255\255\ \255\255\255\255\007\000\007\000\255\255\019\000\019\000\019\000\ \019\000\019\000\019\000\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\008\000\008\000\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\009\000\255\255\009\000\255\255\009\000\255\255\ \255\255\014\000\255\255\255\255\002\000\255\255\255\255\255\255\ \255\255\002\000\255\255\255\255\255\255\255\255\255\255\007\000\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\001\000\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\001\000\001\000\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\003\000\255\255\001\000\255\255\004\000\003\000\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\001\000\ \255\255\255\255\255\255\001\000\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\004\000\004\000\004\000\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\003\000\255\255\000\000\255\255\ \001\000\255\255\255\255\255\255\255\255\255\255\000\000\002\000\ \255\255\255\255\255\255\255\255\255\255\000\000\002\000\255\255\ \255\255\255\255\255\255\003\000\003\000\005\000\005\000\005\000\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\003\000\255\255\003\000\255\255\003\000\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \001\000\255\255\255\255\255\255\255\255\001\000\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\001\000\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\001\000\255\255\002\000\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\001\000\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\016\000\255\255\018\000\ \255\255\255\255\255\255\255\255\007\000\007\000\255\255\018\000\ \018\000\018\000\018\000\018\000\018\000\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\008\000\255\255\008\000\255\255\008\000\255\255\ \255\255\013\000\255\255\255\255\255\255\001\000\001\000\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\001\000\255\255\255\255\ \255\255\255\255\009\000\255\255\011\000\255\255\255\255\255\255\ \255\255\255\255\000\000\000\000\011\000\011\000\011\000\011\000\ \011\000\011\000\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\000\000\255\255\000\000\255\255\000\000\255\255\ \255\255\006\000\255\255\255\255\255\255\001\000\001\000\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\001\000\255\255\004\000\ \003\000\255\255\255\255\255\255\255\255\255\255\001\000\255\255\ \255\255\255\255\255\255\255\255\255\255\001\000\255\255\255\255\ \255\255\255\255\255\255\255\255\001\000\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\003\000\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255"; Lexing.lex_default = "\001\000\000\000\000\000\255\255\000\000\255\255\000\000\000\000\ \000\000\000\000\255\255\255\255\000\000\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\000\000\255\255\255\255\ \255\255\000\000\255\255\255\255\000\000\255\255\000\000\255\255\ \255\255\255\255\255\255\255\255\255\255\000\000\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\000\000\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \000\000\057\000\060\000\000\000\060\000\000\000\000\000\065\000\ \000\000\065\000\000\000\000\000\070\000\000\000\000\000\255\255\ \000\000\000\000\000\000\000\000\000\000\000\000\255\255\255\255\ \255\255\000\000\084\000\000\000\000\000\255\255\255\255\255\255\ \255\255\255\255\000\000\094\000\000\000\000\000\097\000\255\255\ \255\255\097\000\255\255\255\255\255\255\255\255\104\000\000\000\ \000\000\000\000\000\000\109\000\000\000\000\000\000\000\113\000\ \000\000\000\000\000\000\117\000\000\000\000\000\000\000\121\000\ \000\000\000\000\000\000\000\000\000\000\126\000\000\000\000\000\ \000\000\255\255\000\000\255\255\000\000\255\255\255\255\000\000\ \255\255\000\000\138\000\000\000\142\000\000\000\000\000\255\255\ \255\255\255\255\000\000\255\255\255\255\255\255\255\255\000\000\ \154\000\000\000\000\000\255\255\255\255\255\255\255\255\255\255\ \000\000\255\255\255\255\255\255\000\000\255\255\255\255\255\255\ \255\255\255\255\000\000\255\255\255\255\255\255\255\255\000\000\ \178\000\000\000\000\000\000\000\255\255\000\000\255\255\000\000\ \255\255\187\000\000\000\000\000\000\000\000\000\255\255\255\255\ \194\000\000\000\000\000\000\000\000\000\255\255\255\255\201\000\ \000\000\000\000\000\000\255\255\255\255\255\255\255\255\255\255\ \255\255\000\000\255\255\255\255\255\255\255\255\255\255\255\255\ \000\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \000\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\235\000\000\000\000\000\000\000\239\000\000\000\000\000\ \255\255\000\000\244\000\000\000\000\000\255\255\000\000\249\000\ \000\000\000\000\000\000\253\000\000\000\000\000\000\000\255\255\ \000\000\003\001\000\000\000\000\000\000\000\000\008\001\000\000\ \000\000\000\000\255\255\000\000\255\255\000\000\000\000\017\001\ \000\000\000\000\000\000\000\000\022\001\000\000\000\000\000\000\ \000\000\000\000\028\001\000\000\000\000\000\000\032\001\000\000\ \000\000\000\000\255\255\000\000\038\001\000\000\000\000\000\000\ \000\000\043\001\000\000\000\000\000\000\047\001\000\000\000\000\ \000\000\000\000\052\001\000\000\000\000\000\000\056\001\000\000\ \000\000\000\000\060\001\000\000\000\000\000\000\064\001\000\000\ \000\000\000\000\067\001\000\000\000\000\255\255\000\000\255\255\ \000\000\000\000\000\000\000\000\255\255\255\255\000\000\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\000\000\ \255\255\255\255\255\255\000\000\255\255\255\255\000\000\255\255\ \000\000\255\255\255\255\255\255\255\255\255\255\255\255\000\000\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\000\000\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \000\000\121\001\125\001\000\000\000\000\128\001\255\255\255\255\ \128\001\255\255\255\255\255\255\255\255\135\001\000\000\000\000\ \000\000\000\000\140\001\000\000\000\000\255\255\000\000\144\001\ \000\000\000\000\255\255\000\000\255\255\000\000\000\000\000\000\ \000\000\000\000\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\000\000\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \000\000\193\001\197\001\000\000\000\000\200\001\255\255\255\255\ \200\001\255\255\255\255\255\255\255\255\207\001\000\000\000\000\ \000\000\000\000\212\001\000\000\000\000\255\255\000\000\255\255\ \255\255\000\000\255\255\000\000\220\001\000\000\255\255\000\000\ \226\001\000\000\000\000\000\000\000\000\255\255\000\000\233\001\ \000\000\000\000\000\000\000\000\255\255\000\000\240\001\000\000\ \000\000\000\000\000\000\245\001\000\000\000\000\000\000\249\001\ \000\000\000\000\000\000\252\001\000\000\000\000\000\000\255\255\ \000\000\002\002\004\002\000\000\005\002\006\002\007\002\008\002\ \009\002\010\002\011\002\012\002\013\002\014\002\015\002\016\002\ \017\002\018\002\019\002\020\002\021\002\022\002\023\002\024\002\ \025\002\026\002\027\002\028\002\029\002\030\002\031\002\032\002\ \033\002\003\002"; Lexing.lex_trans = "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\003\000\004\000\000\000\003\000\003\000\134\000\000\000\ \003\000\000\000\134\000\069\001\146\001\255\255\000\000\069\001\ \146\001\000\000\000\000\000\000\000\000\127\000\139\000\000\000\ \003\000\000\000\012\000\003\000\170\000\134\000\175\000\000\000\ \007\000\011\001\069\001\146\001\014\001\013\000\049\000\005\000\ \010\000\011\000\011\000\011\000\011\000\011\000\011\000\011\000\ \011\000\011\000\056\000\118\000\006\000\129\000\130\000\057\000\ \237\001\137\000\000\002\049\000\000\000\048\000\138\000\106\000\ \062\000\014\000\110\000\105\000\000\000\049\000\015\000\011\000\ \011\000\011\000\011\000\011\000\011\000\011\000\011\000\011\000\ \011\000\030\000\048\000\008\000\114\000\209\000\236\000\000\001\ \013\001\029\000\022\000\255\255\048\000\048\000\017\000\021\000\ \025\000\032\000\033\000\035\000\023\000\027\000\016\000\031\000\ \028\000\034\000\019\000\024\000\018\000\026\000\020\000\036\000\ \041\000\037\000\048\000\009\000\042\000\043\000\044\000\045\000\ \046\000\047\000\061\000\085\000\048\000\038\000\039\000\039\000\ \039\000\039\000\039\000\039\000\039\000\039\000\039\000\049\000\ \067\000\039\000\039\000\039\000\039\000\039\000\039\000\039\000\ \039\000\039\000\039\000\086\000\143\000\255\255\040\000\144\000\ \145\000\146\000\055\000\148\000\055\000\149\000\048\000\054\000\ \054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\ \054\000\050\000\050\000\050\000\050\000\050\000\050\000\050\000\ \050\000\050\000\050\000\050\000\050\000\050\000\050\000\050\000\ \050\000\050\000\050\000\050\000\050\000\255\255\048\000\150\000\ \151\000\161\000\066\000\158\000\053\000\159\000\053\000\160\000\ \051\000\052\000\052\000\052\000\052\000\052\000\052\000\052\000\ \052\000\052\000\052\000\052\000\052\000\052\000\052\000\052\000\ \052\000\052\000\052\000\052\000\052\000\052\000\052\000\052\000\ \052\000\052\000\052\000\052\000\052\000\052\000\052\000\165\000\ \051\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\ \054\000\054\000\054\000\162\000\163\000\166\000\093\000\255\255\ \002\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\ \054\000\054\000\054\000\255\255\077\000\103\000\108\000\116\000\ \132\000\134\000\135\000\128\000\139\000\134\000\164\000\093\000\ \171\000\077\000\167\000\168\000\169\000\172\000\112\000\173\000\ \174\000\210\000\226\000\208\000\211\000\212\000\059\000\083\000\ \134\000\213\000\214\000\215\000\216\000\218\000\141\000\219\000\ \093\000\220\000\221\000\123\000\222\000\223\000\224\000\136\000\ \095\000\225\000\035\001\065\001\234\000\155\000\005\001\097\001\ \250\000\255\255\254\000\057\001\061\001\095\001\077\000\044\001\ \092\001\088\001\009\001\029\001\076\000\124\000\033\001\018\001\ \075\000\098\000\019\001\085\001\086\001\087\001\120\001\089\001\ \074\000\225\000\053\001\121\001\073\000\090\001\072\000\071\000\ \078\000\078\000\078\000\078\000\078\000\078\000\078\000\078\000\ \078\000\078\000\098\000\113\001\122\000\091\001\064\000\004\001\ \093\001\078\000\078\000\078\000\078\000\078\000\078\000\079\000\ \079\000\079\000\079\000\079\000\079\000\079\000\079\000\079\000\ \079\000\156\000\112\001\094\001\096\001\098\001\099\001\049\001\ \079\000\079\000\079\000\079\000\079\000\079\000\100\001\157\000\ \101\001\078\000\078\000\078\000\078\000\078\000\078\000\183\000\ \184\000\184\000\184\000\184\000\184\000\184\000\184\000\184\000\ \184\000\024\001\112\001\255\255\025\001\102\001\103\001\105\001\ \079\000\079\000\079\000\079\000\079\000\079\000\080\000\080\000\ \080\000\080\000\080\000\080\000\080\000\080\000\080\000\080\000\ \106\001\107\001\048\001\040\001\108\001\109\001\110\001\080\000\ \080\000\080\000\080\000\080\000\080\000\081\000\081\000\081\000\ \081\000\081\000\081\000\081\000\081\000\081\000\081\000\111\001\ \027\001\255\255\171\001\031\001\170\001\023\001\081\000\081\000\ \081\000\081\000\081\000\081\000\092\000\168\001\063\001\080\000\ \080\000\080\000\080\000\080\000\080\000\248\000\165\001\252\000\ \162\001\059\001\069\000\087\000\087\000\087\000\087\000\087\000\ \087\000\087\000\087\000\087\000\087\000\255\255\081\000\081\000\ \081\000\081\000\081\000\081\000\087\000\087\000\087\000\087\000\ \087\000\087\000\088\000\088\000\088\000\088\000\088\000\088\000\ \088\000\088\000\088\000\088\000\039\001\042\001\255\255\163\001\ \164\001\120\000\002\001\088\000\088\000\088\000\088\000\088\000\ \088\000\166\001\055\001\153\000\087\000\087\000\087\000\087\000\ \087\000\087\000\007\001\167\001\164\001\169\001\016\001\164\001\ \089\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\ \089\000\089\000\051\001\088\000\088\000\088\000\088\000\088\000\ \088\000\089\000\089\000\089\000\089\000\089\000\089\000\090\000\ \090\000\090\000\090\000\090\000\090\000\090\000\090\000\090\000\ \090\000\097\000\137\001\164\001\172\001\185\001\136\001\173\001\ \090\000\090\000\090\000\090\000\090\000\090\000\097\000\179\000\ \174\001\089\000\089\000\089\000\089\000\089\000\089\000\046\001\ \175\001\176\001\180\000\164\001\184\001\181\000\182\000\182\000\ \182\000\182\000\182\000\182\000\182\000\182\000\182\000\124\001\ \090\000\090\000\090\000\090\000\090\000\090\000\192\001\178\001\ \021\001\179\001\097\000\193\001\180\001\181\001\182\001\183\001\ \164\001\216\001\255\255\097\000\184\001\216\001\209\001\097\000\ \223\001\097\000\208\001\230\001\003\002\097\000\219\001\037\001\ \216\001\217\001\003\002\220\001\216\001\097\000\003\002\003\002\ \216\001\097\000\003\002\097\000\096\000\099\000\099\000\099\000\ \099\000\099\000\099\000\099\000\099\000\099\000\099\000\216\001\ \003\002\126\001\003\002\003\002\003\002\003\002\099\000\099\000\ \099\000\099\000\099\000\099\000\097\000\003\002\218\001\250\001\ \003\002\003\002\097\000\003\002\124\001\124\001\097\000\003\002\ \221\001\003\002\253\001\003\002\003\002\003\002\097\000\255\255\ \003\002\196\001\097\000\003\002\097\000\096\000\099\000\099\000\ \099\000\099\000\099\000\099\000\100\000\100\000\100\000\100\000\ \100\000\100\000\100\000\100\000\100\000\100\000\235\001\003\002\ \241\001\003\002\255\001\242\001\003\002\100\000\100\000\100\000\ \100\000\100\000\100\000\101\000\101\000\101\000\101\000\101\000\ \101\000\101\000\101\000\101\000\101\000\246\001\129\001\129\001\ \228\001\003\002\196\001\003\002\101\000\101\000\101\000\101\000\ \101\000\101\000\003\002\198\001\003\002\100\000\100\000\100\000\ \100\000\100\000\100\000\003\002\003\002\003\002\196\001\234\001\ \134\001\097\000\097\000\097\000\097\000\097\000\097\000\097\000\ \097\000\097\000\097\000\000\000\101\000\101\000\101\000\101\000\ \101\000\101\000\097\000\097\000\097\000\097\000\097\000\097\000\ \182\000\182\000\182\000\182\000\182\000\182\000\182\000\182\000\ \182\000\182\000\000\000\000\000\201\001\177\000\184\000\184\000\ \184\000\184\000\184\000\184\000\184\000\184\000\184\000\184\000\ \188\000\000\000\097\000\097\000\097\000\097\000\097\000\097\000\ \201\001\227\001\000\000\191\000\206\001\123\001\189\000\190\000\ \190\000\190\000\190\000\190\000\190\000\190\000\190\000\190\000\ \190\000\190\000\190\000\190\000\190\000\190\000\190\000\190\000\ \190\000\190\000\189\000\190\000\190\000\190\000\190\000\190\000\ \190\000\190\000\190\000\190\000\195\000\197\000\197\000\197\000\ \197\000\197\000\197\000\197\000\197\000\197\000\197\000\198\000\ \255\255\248\001\196\000\197\000\197\000\197\000\197\000\197\000\ \197\000\197\000\197\000\197\000\196\000\197\000\197\000\197\000\ \197\000\197\000\197\000\197\000\197\000\197\000\202\000\227\000\ \227\000\227\000\227\000\227\000\227\000\227\000\227\000\227\000\ \227\000\205\000\255\255\255\255\203\000\204\000\204\000\204\000\ \204\000\204\000\204\000\204\000\204\000\204\000\226\000\195\001\ \204\000\204\000\204\000\204\000\204\000\204\000\204\000\204\000\ \204\000\204\000\232\001\000\000\000\000\206\000\221\001\239\001\ \254\001\000\000\207\000\244\001\000\000\225\000\203\000\204\000\ \204\000\204\000\204\000\204\000\204\000\204\000\204\000\204\000\ \232\000\000\000\232\000\000\000\225\001\231\000\231\000\231\000\ \231\000\231\000\231\000\231\000\231\000\231\000\231\000\217\000\ \255\255\000\000\000\000\000\000\000\000\225\000\227\000\227\000\ \227\000\227\000\227\000\227\000\227\000\227\000\227\000\227\000\ \000\000\000\000\000\000\000\000\255\255\000\000\000\000\230\000\ \000\000\230\000\000\000\228\000\229\000\229\000\229\000\229\000\ \229\000\229\000\229\000\229\000\229\000\229\000\229\000\229\000\ \229\000\229\000\229\000\229\000\229\000\229\000\229\000\229\000\ \229\000\229\000\229\000\229\000\229\000\229\000\229\000\229\000\ \229\000\229\000\000\000\228\000\231\000\231\000\231\000\231\000\ \231\000\231\000\231\000\231\000\231\000\231\000\186\000\231\000\ \231\000\231\000\231\000\231\000\231\000\231\000\231\000\231\000\ \231\000\000\000\000\000\000\000\000\000\000\000\241\000\000\000\ \113\001\000\000\077\001\077\001\077\001\077\001\077\001\077\001\ \077\001\077\001\077\001\077\001\114\001\114\001\114\001\114\001\ \114\001\114\001\114\001\114\001\114\001\114\001\000\000\112\001\ \000\000\000\000\193\000\000\000\000\000\240\000\240\000\240\000\ \240\000\240\000\240\000\240\000\240\000\240\000\240\000\240\000\ \240\000\240\000\240\000\240\000\240\000\240\000\240\000\240\000\ \240\000\240\000\240\000\240\000\240\000\240\000\240\000\112\001\ \000\000\000\000\000\000\240\000\200\000\240\000\240\000\240\000\ \240\000\240\000\240\000\240\000\240\000\240\000\240\000\240\000\ \240\000\240\000\240\000\240\000\240\000\240\000\240\000\240\000\ \240\000\240\000\240\000\240\000\240\000\240\000\240\000\240\000\ \240\000\240\000\240\000\240\000\240\000\240\000\240\000\240\000\ \240\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \240\000\240\000\240\000\240\000\240\000\240\000\240\000\240\000\ \240\000\240\000\240\000\240\000\240\000\240\000\240\000\240\000\ \240\000\240\000\240\000\240\000\240\000\240\000\240\000\240\000\ \240\000\240\000\000\000\246\000\000\000\000\000\240\000\000\000\ \240\000\240\000\240\000\240\000\240\000\240\000\240\000\240\000\ \240\000\240\000\240\000\240\000\240\000\240\000\240\000\240\000\ \240\000\240\000\240\000\240\000\240\000\240\000\240\000\240\000\ \240\000\240\000\245\000\245\000\245\000\245\000\245\000\245\000\ \245\000\245\000\245\000\245\000\245\000\245\000\245\000\245\000\ \245\000\245\000\245\000\245\000\245\000\245\000\245\000\245\000\ \245\000\245\000\245\000\245\000\000\000\000\000\000\000\000\000\ \245\000\000\000\245\000\245\000\245\000\245\000\245\000\245\000\ \245\000\245\000\245\000\245\000\245\000\245\000\245\000\245\000\ \245\000\245\000\245\000\245\000\245\000\245\000\245\000\245\000\ \245\000\245\000\245\000\245\000\238\000\245\000\245\000\245\000\ \245\000\245\000\245\000\245\000\245\000\245\000\245\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\245\000\245\000\ \245\000\245\000\245\000\245\000\245\000\245\000\245\000\245\000\ \245\000\245\000\245\000\245\000\245\000\245\000\245\000\245\000\ \245\000\245\000\245\000\245\000\245\000\245\000\245\000\245\000\ \000\000\000\000\000\000\000\000\245\000\000\000\245\000\245\000\ \245\000\245\000\245\000\245\000\245\000\245\000\245\000\245\000\ \245\000\245\000\245\000\245\000\245\000\245\000\245\000\245\000\ \245\000\245\000\245\000\245\000\245\000\245\000\245\000\245\000\ \069\001\070\001\000\000\000\000\069\001\076\001\077\001\077\001\ \077\001\077\001\077\001\077\001\077\001\077\001\077\001\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\069\001\ \000\000\078\001\000\000\000\000\000\000\000\000\104\001\073\001\ \000\000\000\000\000\000\000\000\079\001\000\000\071\001\076\001\ \077\001\077\001\077\001\077\001\077\001\077\001\077\001\077\001\ \077\001\000\000\000\000\072\001\000\000\000\000\000\000\000\000\ \000\000\243\000\000\000\000\000\000\000\000\000\000\000\000\000\ \080\001\119\001\000\000\119\001\000\000\081\001\118\001\118\001\ \118\001\118\001\118\001\118\001\118\001\118\001\118\001\118\001\ \000\000\000\000\074\001\114\001\114\001\114\001\114\001\114\001\ \114\001\114\001\114\001\114\001\114\001\083\001\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\082\001\000\000\000\000\ \115\001\000\000\000\000\084\001\000\000\000\000\117\001\000\000\ \117\001\000\000\075\001\116\001\116\001\116\001\116\001\116\001\ \116\001\116\001\116\001\116\001\116\001\116\001\116\001\116\001\ \116\001\116\001\116\001\116\001\116\001\116\001\116\001\000\000\ \115\001\116\001\116\001\116\001\116\001\116\001\116\001\116\001\ \116\001\116\001\116\001\118\001\118\001\118\001\118\001\118\001\ \118\001\118\001\118\001\118\001\118\001\118\001\118\001\118\001\ \118\001\118\001\118\001\118\001\118\001\118\001\118\001\000\000\ \128\001\130\001\130\001\130\001\130\001\130\001\130\001\130\001\ \130\001\130\001\130\001\000\000\000\000\128\001\000\000\000\000\ \000\000\128\001\130\001\130\001\130\001\130\001\130\001\130\001\ \000\000\000\000\000\000\000\000\000\000\000\000\128\001\000\000\ \000\000\185\001\000\000\155\001\155\001\155\001\155\001\155\001\ \155\001\155\001\155\001\155\001\155\001\000\000\000\000\000\000\ \000\000\000\000\130\001\130\001\130\001\130\001\130\001\130\001\ \184\001\000\000\128\001\000\000\000\000\000\000\000\000\000\000\ \128\001\000\000\000\000\000\000\128\001\000\000\000\000\000\000\ \000\000\000\000\000\000\128\001\128\001\000\000\000\000\068\001\ \128\001\128\001\128\001\127\001\000\000\128\001\000\000\000\000\ \184\001\000\000\000\000\000\000\000\000\128\001\000\000\000\000\ \000\000\128\001\000\000\128\001\127\001\131\001\131\001\131\001\ \131\001\131\001\131\001\131\001\131\001\131\001\131\001\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\131\001\131\001\ \131\001\131\001\131\001\131\001\132\001\132\001\132\001\132\001\ \132\001\132\001\132\001\132\001\132\001\132\001\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\132\001\132\001\132\001\ \132\001\132\001\132\001\000\000\000\000\000\000\131\001\131\001\ \131\001\131\001\131\001\131\001\000\000\000\000\000\000\000\000\ \000\000\000\000\128\001\128\001\128\001\128\001\128\001\128\001\ \128\001\128\001\128\001\128\001\000\000\132\001\132\001\132\001\ \132\001\132\001\132\001\128\001\128\001\128\001\128\001\128\001\ \128\001\191\001\142\001\191\001\000\000\000\000\190\001\190\001\ \190\001\190\001\190\001\190\001\190\001\190\001\190\001\190\001\ \186\001\186\001\186\001\186\001\186\001\186\001\186\001\186\001\ \186\001\186\001\000\000\128\001\128\001\128\001\128\001\128\001\ \128\001\141\001\141\001\141\001\141\001\141\001\141\001\141\001\ \141\001\141\001\141\001\141\001\141\001\141\001\141\001\141\001\ \141\001\141\001\141\001\141\001\141\001\141\001\141\001\141\001\ \141\001\141\001\141\001\000\000\000\000\000\000\000\000\141\001\ \000\000\141\001\141\001\141\001\141\001\141\001\141\001\141\001\ \141\001\141\001\141\001\141\001\141\001\141\001\141\001\141\001\ \141\001\141\001\141\001\141\001\141\001\141\001\141\001\141\001\ \141\001\141\001\141\001\141\001\141\001\141\001\141\001\141\001\ \141\001\141\001\141\001\141\001\141\001\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\141\001\141\001\141\001\141\001\ \141\001\141\001\141\001\141\001\141\001\141\001\141\001\141\001\ \141\001\141\001\141\001\141\001\141\001\141\001\141\001\141\001\ \141\001\141\001\141\001\141\001\141\001\141\001\000\000\000\000\ \000\000\000\000\141\001\000\000\141\001\141\001\141\001\141\001\ \141\001\141\001\141\001\141\001\141\001\141\001\141\001\141\001\ \141\001\141\001\141\001\141\001\141\001\141\001\141\001\141\001\ \141\001\141\001\141\001\141\001\141\001\141\001\146\001\147\001\ \000\000\000\000\146\001\154\001\155\001\155\001\155\001\155\001\ \155\001\155\001\155\001\155\001\155\001\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\200\001\146\001\000\000\153\001\ \000\000\000\000\000\000\000\000\177\001\150\001\000\000\000\000\ \000\000\200\001\156\001\000\000\148\001\154\001\155\001\155\001\ \155\001\155\001\155\001\155\001\155\001\155\001\155\001\000\000\ \000\000\149\001\000\000\000\000\000\000\000\000\000\000\000\000\ \139\001\000\000\000\000\000\000\000\000\000\000\157\001\000\000\ \000\000\000\000\000\000\158\001\186\001\186\001\186\001\186\001\ \186\001\186\001\186\001\186\001\186\001\186\001\200\001\000\000\ \151\001\000\000\000\000\000\000\200\001\000\000\000\000\000\000\ \200\001\187\001\000\000\160\001\000\000\000\000\000\000\000\000\ \200\001\000\000\000\000\159\001\200\001\000\000\200\001\199\001\ \000\000\161\001\000\000\000\000\000\000\000\000\000\000\000\000\ \152\001\000\000\000\000\000\000\000\000\189\001\000\000\189\001\ \000\000\187\001\188\001\188\001\188\001\188\001\188\001\188\001\ \188\001\188\001\188\001\188\001\188\001\188\001\188\001\188\001\ \188\001\188\001\188\001\188\001\188\001\188\001\188\001\188\001\ \188\001\188\001\188\001\188\001\188\001\188\001\188\001\188\001\ \190\001\190\001\190\001\190\001\190\001\190\001\190\001\190\001\ \190\001\190\001\190\001\190\001\190\001\190\001\190\001\190\001\ \190\001\190\001\190\001\190\001\202\001\202\001\202\001\202\001\ \202\001\202\001\202\001\202\001\202\001\202\001\200\001\000\000\ \000\000\000\000\000\000\000\000\000\000\202\001\202\001\202\001\ \202\001\202\001\202\001\200\001\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\202\001\202\001\202\001\ \202\001\202\001\202\001\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \200\001\000\000\000\000\000\000\000\000\145\001\200\001\000\000\ \000\000\000\000\200\001\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\200\001\000\000\000\000\000\000\200\001\000\000\ \200\001\199\001\203\001\203\001\203\001\203\001\203\001\203\001\ \203\001\203\001\203\001\203\001\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\203\001\203\001\203\001\203\001\203\001\ \203\001\204\001\204\001\204\001\204\001\204\001\204\001\204\001\ \204\001\204\001\204\001\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\204\001\204\001\204\001\204\001\204\001\204\001\ \000\000\000\000\000\000\203\001\203\001\203\001\203\001\203\001\ \203\001\000\000\000\000\000\000\000\000\000\000\000\000\200\001\ \200\001\200\001\200\001\200\001\200\001\200\001\200\001\200\001\ \200\001\000\000\204\001\204\001\204\001\204\001\204\001\204\001\ \200\001\200\001\200\001\200\001\200\001\200\001\000\000\214\001\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \200\001\200\001\200\001\200\001\200\001\200\001\213\001\213\001\ \213\001\213\001\213\001\213\001\213\001\213\001\213\001\213\001\ \213\001\213\001\213\001\213\001\213\001\213\001\213\001\213\001\ \213\001\213\001\213\001\213\001\213\001\213\001\213\001\213\001\ \000\000\000\000\000\000\000\000\213\001\000\000\213\001\213\001\ \213\001\213\001\213\001\213\001\213\001\213\001\213\001\213\001\ \213\001\213\001\213\001\213\001\213\001\213\001\213\001\213\001\ \213\001\213\001\213\001\213\001\213\001\213\001\213\001\213\001\ \213\001\213\001\213\001\213\001\213\001\213\001\213\001\213\001\ \213\001\213\001\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\213\001\213\001\213\001\213\001\213\001\213\001\213\001\ \213\001\213\001\213\001\213\001\213\001\213\001\213\001\213\001\ \213\001\213\001\213\001\213\001\213\001\213\001\213\001\213\001\ \213\001\213\001\213\001\000\000\000\000\000\000\000\000\213\001\ \000\000\213\001\213\001\213\001\213\001\213\001\213\001\213\001\ \213\001\213\001\213\001\213\001\213\001\213\001\213\001\213\001\ \213\001\213\001\213\001\213\001\213\001\213\001\213\001\213\001\ \213\001\213\001\213\001\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\211\001\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000"; Lexing.lex_check = "\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\000\000\000\000\255\255\003\000\000\000\134\000\255\255\ \003\000\255\255\134\000\069\001\146\001\057\000\255\255\069\001\ \146\001\255\255\255\255\255\255\255\255\125\000\138\000\255\255\ \000\000\255\255\000\000\003\000\169\000\134\000\174\000\255\255\ \000\000\010\001\069\001\146\001\012\001\000\000\010\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\005\000\115\000\000\000\125\000\129\000\005\000\ \236\001\136\000\255\001\038\000\255\255\010\000\136\000\102\000\ \058\000\000\000\107\000\102\000\255\255\011\000\000\000\011\000\ \011\000\011\000\011\000\011\000\011\000\011\000\011\000\011\000\ \011\000\029\000\038\000\000\000\111\000\208\000\233\000\255\000\ \012\001\015\000\017\000\060\000\011\000\010\000\000\000\020\000\ \024\000\031\000\032\000\034\000\022\000\026\000\000\000\014\000\ \027\000\033\000\018\000\023\000\000\000\016\000\019\000\035\000\ \040\000\036\000\038\000\000\000\041\000\042\000\043\000\044\000\ \045\000\046\000\058\000\082\000\011\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\039\000\ \063\000\039\000\039\000\039\000\039\000\039\000\039\000\039\000\ \039\000\039\000\039\000\085\000\140\000\060\000\013\000\143\000\ \144\000\145\000\048\000\147\000\048\000\148\000\039\000\048\000\ \048\000\048\000\048\000\048\000\048\000\048\000\048\000\048\000\ \048\000\049\000\049\000\049\000\049\000\049\000\049\000\049\000\ \049\000\049\000\049\000\050\000\050\000\050\000\050\000\050\000\ \050\000\050\000\050\000\050\000\050\000\065\000\039\000\149\000\ \150\000\156\000\063\000\157\000\051\000\158\000\051\000\159\000\ \050\000\051\000\051\000\051\000\051\000\051\000\051\000\051\000\ \051\000\051\000\051\000\052\000\052\000\052\000\052\000\052\000\ \052\000\052\000\052\000\052\000\052\000\053\000\053\000\053\000\ \053\000\053\000\053\000\053\000\053\000\053\000\053\000\155\000\ \050\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\ \054\000\054\000\054\000\161\000\162\000\155\000\091\000\065\000\ \000\000\055\000\055\000\055\000\055\000\055\000\055\000\055\000\ \055\000\055\000\055\000\057\000\068\000\102\000\107\000\115\000\ \131\000\133\000\133\000\125\000\138\000\133\000\163\000\094\000\ \165\000\068\000\166\000\167\000\168\000\171\000\111\000\172\000\ \173\000\206\000\203\000\207\000\210\000\211\000\058\000\082\000\ \133\000\212\000\213\000\214\000\215\000\217\000\140\000\218\000\ \097\000\219\000\220\000\119\000\221\000\222\000\223\000\133\000\ \091\000\203\000\034\001\062\001\233\000\152\000\001\001\080\001\ \247\000\060\000\251\000\054\001\058\001\081\001\068\000\041\001\ \082\001\083\001\006\001\026\001\068\000\119\000\030\001\015\001\ \068\000\094\000\015\001\084\001\085\001\086\001\071\001\088\001\ \068\000\203\000\050\001\071\001\068\000\089\001\068\000\068\000\ \071\000\071\000\071\000\071\000\071\000\071\000\071\000\071\000\ \071\000\071\000\097\000\076\001\119\000\090\001\063\000\001\001\ \092\001\071\000\071\000\071\000\071\000\071\000\071\000\078\000\ \078\000\078\000\078\000\078\000\078\000\078\000\078\000\078\000\ \078\000\152\000\076\001\093\001\095\001\097\001\098\001\045\001\ \078\000\078\000\078\000\078\000\078\000\078\000\099\001\152\000\ \100\001\071\000\071\000\071\000\071\000\071\000\071\000\180\000\ \180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\ \180\000\020\001\076\001\065\000\020\001\101\001\102\001\104\001\ \078\000\078\000\078\000\078\000\078\000\078\000\079\000\079\000\ \079\000\079\000\079\000\079\000\079\000\079\000\079\000\079\000\ \105\001\106\001\045\001\036\001\107\001\108\001\109\001\079\000\ \079\000\079\000\079\000\079\000\079\000\080\000\080\000\080\000\ \080\000\080\000\080\000\080\000\080\000\080\000\080\000\110\001\ \026\001\121\001\157\001\030\001\158\001\020\001\080\000\080\000\ \080\000\080\000\080\000\080\000\091\000\159\001\062\001\079\000\ \079\000\079\000\079\000\079\000\079\000\247\000\160\001\251\000\ \161\001\058\001\068\000\086\000\086\000\086\000\086\000\086\000\ \086\000\086\000\086\000\086\000\086\000\094\000\080\000\080\000\ \080\000\080\000\080\000\080\000\086\000\086\000\086\000\086\000\ \086\000\086\000\087\000\087\000\087\000\087\000\087\000\087\000\ \087\000\087\000\087\000\087\000\036\001\041\001\097\000\162\001\ \163\001\119\000\001\001\087\000\087\000\087\000\087\000\087\000\ \087\000\165\001\054\001\152\000\086\000\086\000\086\000\086\000\ \086\000\086\000\006\001\166\001\167\001\168\001\015\001\169\001\ \088\000\088\000\088\000\088\000\088\000\088\000\088\000\088\000\ \088\000\088\000\050\001\087\000\087\000\087\000\087\000\087\000\ \087\000\088\000\088\000\088\000\088\000\088\000\088\000\089\000\ \089\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\ \089\000\095\000\133\001\170\001\171\001\154\001\133\001\172\001\ \089\000\089\000\089\000\089\000\089\000\089\000\095\000\176\000\ \173\001\088\000\088\000\088\000\088\000\088\000\088\000\045\001\ \174\001\175\001\176\000\176\001\154\001\176\000\176\000\176\000\ \176\000\176\000\176\000\176\000\176\000\176\000\176\000\122\001\ \089\000\089\000\089\000\089\000\089\000\089\000\148\001\177\001\ \020\001\178\001\098\000\148\001\179\001\180\001\181\001\182\001\ \183\001\216\001\193\001\095\000\154\001\216\001\205\001\098\000\ \222\001\095\000\205\001\229\001\001\002\095\000\218\001\036\001\ \215\001\215\001\002\002\218\001\215\001\095\000\004\002\005\002\ \216\001\095\000\006\002\095\000\095\000\096\000\096\000\096\000\ \096\000\096\000\096\000\096\000\096\000\096\000\096\000\215\001\ \007\002\122\001\008\002\009\002\010\002\011\002\096\000\096\000\ \096\000\096\000\096\000\096\000\098\000\012\002\215\001\247\001\ \013\002\014\002\098\000\015\002\125\001\128\001\098\000\016\002\ \220\001\017\002\251\001\018\002\019\002\020\002\098\000\121\001\ \021\002\194\001\098\000\022\002\098\000\098\000\096\000\096\000\ \096\000\096\000\096\000\096\000\099\000\099\000\099\000\099\000\ \099\000\099\000\099\000\099\000\099\000\099\000\231\001\023\002\ \238\001\024\002\251\001\238\001\025\002\099\000\099\000\099\000\ \099\000\099\000\099\000\100\000\100\000\100\000\100\000\100\000\ \100\000\100\000\100\000\100\000\100\000\243\001\125\001\128\001\ \224\001\026\002\197\001\027\002\100\000\100\000\100\000\100\000\ \100\000\100\000\028\002\194\001\029\002\099\000\099\000\099\000\ \099\000\099\000\099\000\030\002\031\002\032\002\200\001\231\001\ \133\001\101\000\101\000\101\000\101\000\101\000\101\000\101\000\ \101\000\101\000\101\000\255\255\100\000\100\000\100\000\100\000\ \100\000\100\000\101\000\101\000\101\000\101\000\101\000\101\000\ \182\000\182\000\182\000\182\000\182\000\182\000\182\000\182\000\ \182\000\182\000\255\255\255\255\197\001\176\000\184\000\184\000\ \184\000\184\000\184\000\184\000\184\000\184\000\184\000\184\000\ \185\000\255\255\101\000\101\000\101\000\101\000\101\000\101\000\ \200\001\224\001\255\255\185\000\205\001\122\001\185\000\185\000\ \185\000\185\000\185\000\185\000\185\000\185\000\185\000\185\000\ \190\000\190\000\190\000\190\000\190\000\190\000\190\000\190\000\ \190\000\190\000\191\000\191\000\191\000\191\000\191\000\191\000\ \191\000\191\000\191\000\191\000\192\000\197\000\197\000\197\000\ \197\000\197\000\197\000\197\000\197\000\197\000\197\000\192\000\ \193\001\247\001\192\000\192\000\192\000\192\000\192\000\192\000\ \192\000\192\000\192\000\192\000\198\000\198\000\198\000\198\000\ \198\000\198\000\198\000\198\000\198\000\198\000\199\000\226\000\ \226\000\226\000\226\000\226\000\226\000\226\000\226\000\226\000\ \226\000\199\000\125\001\128\001\199\000\199\000\199\000\199\000\ \199\000\199\000\199\000\199\000\199\000\199\000\204\000\194\001\ \204\000\204\000\204\000\204\000\204\000\204\000\204\000\204\000\ \204\000\204\000\231\001\255\255\255\255\199\000\220\001\238\001\ \251\001\255\255\199\000\243\001\255\255\204\000\205\000\205\000\ \205\000\205\000\205\000\205\000\205\000\205\000\205\000\205\000\ \225\000\255\255\225\000\255\255\224\001\225\000\225\000\225\000\ \225\000\225\000\225\000\225\000\225\000\225\000\225\000\205\000\ \197\001\255\255\255\255\255\255\255\255\204\000\227\000\227\000\ \227\000\227\000\227\000\227\000\227\000\227\000\227\000\227\000\ \255\255\255\255\255\255\255\255\200\001\255\255\255\255\228\000\ \255\255\228\000\255\255\227\000\228\000\228\000\228\000\228\000\ \228\000\228\000\228\000\228\000\228\000\228\000\229\000\229\000\ \229\000\229\000\229\000\229\000\229\000\229\000\229\000\229\000\ \230\000\230\000\230\000\230\000\230\000\230\000\230\000\230\000\ \230\000\230\000\255\255\227\000\231\000\231\000\231\000\231\000\ \231\000\231\000\231\000\231\000\231\000\231\000\185\000\232\000\ \232\000\232\000\232\000\232\000\232\000\232\000\232\000\232\000\ \232\000\255\255\255\255\255\255\255\255\255\255\237\000\255\255\ \077\001\255\255\077\001\077\001\077\001\077\001\077\001\077\001\ \077\001\077\001\077\001\077\001\113\001\113\001\113\001\113\001\ \113\001\113\001\113\001\113\001\113\001\113\001\255\255\077\001\ \255\255\255\255\192\000\255\255\255\255\237\000\237\000\237\000\ \237\000\237\000\237\000\237\000\237\000\237\000\237\000\237\000\ \237\000\237\000\237\000\237\000\237\000\237\000\237\000\237\000\ \237\000\237\000\237\000\237\000\237\000\237\000\237\000\077\001\ \255\255\255\255\255\255\237\000\199\000\237\000\237\000\237\000\ \237\000\237\000\237\000\237\000\237\000\237\000\237\000\237\000\ \237\000\237\000\237\000\237\000\237\000\237\000\237\000\237\000\ \237\000\237\000\237\000\237\000\237\000\237\000\237\000\240\000\ \240\000\240\000\240\000\240\000\240\000\240\000\240\000\240\000\ \240\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \240\000\240\000\240\000\240\000\240\000\240\000\240\000\240\000\ \240\000\240\000\240\000\240\000\240\000\240\000\240\000\240\000\ \240\000\240\000\240\000\240\000\240\000\240\000\240\000\240\000\ \240\000\240\000\255\255\242\000\255\255\255\255\240\000\255\255\ \240\000\240\000\240\000\240\000\240\000\240\000\240\000\240\000\ \240\000\240\000\240\000\240\000\240\000\240\000\240\000\240\000\ \240\000\240\000\240\000\240\000\240\000\240\000\240\000\240\000\ \240\000\240\000\242\000\242\000\242\000\242\000\242\000\242\000\ \242\000\242\000\242\000\242\000\242\000\242\000\242\000\242\000\ \242\000\242\000\242\000\242\000\242\000\242\000\242\000\242\000\ \242\000\242\000\242\000\242\000\255\255\255\255\255\255\255\255\ \242\000\255\255\242\000\242\000\242\000\242\000\242\000\242\000\ \242\000\242\000\242\000\242\000\242\000\242\000\242\000\242\000\ \242\000\242\000\242\000\242\000\242\000\242\000\242\000\242\000\ \242\000\242\000\242\000\242\000\237\000\245\000\245\000\245\000\ \245\000\245\000\245\000\245\000\245\000\245\000\245\000\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\245\000\245\000\ \245\000\245\000\245\000\245\000\245\000\245\000\245\000\245\000\ \245\000\245\000\245\000\245\000\245\000\245\000\245\000\245\000\ \245\000\245\000\245\000\245\000\245\000\245\000\245\000\245\000\ \255\255\255\255\255\255\255\255\245\000\255\255\245\000\245\000\ \245\000\245\000\245\000\245\000\245\000\245\000\245\000\245\000\ \245\000\245\000\245\000\245\000\245\000\245\000\245\000\245\000\ \245\000\245\000\245\000\245\000\245\000\245\000\245\000\245\000\ \066\001\066\001\255\255\255\255\066\001\079\001\079\001\079\001\ \079\001\079\001\079\001\079\001\079\001\079\001\079\001\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\066\001\ \255\255\066\001\255\255\255\255\255\255\255\255\079\001\066\001\ \255\255\255\255\255\255\255\255\066\001\255\255\066\001\066\001\ \066\001\066\001\066\001\066\001\066\001\066\001\066\001\066\001\ \066\001\255\255\255\255\066\001\255\255\255\255\255\255\255\255\ \255\255\242\000\255\255\255\255\255\255\255\255\255\255\255\255\ \066\001\112\001\255\255\112\001\255\255\066\001\112\001\112\001\ \112\001\112\001\112\001\112\001\112\001\112\001\112\001\112\001\ \255\255\255\255\066\001\114\001\114\001\114\001\114\001\114\001\ \114\001\114\001\114\001\114\001\114\001\066\001\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\066\001\255\255\255\255\ \114\001\255\255\255\255\066\001\255\255\255\255\115\001\255\255\ \115\001\255\255\066\001\115\001\115\001\115\001\115\001\115\001\ \115\001\115\001\115\001\115\001\115\001\116\001\116\001\116\001\ \116\001\116\001\116\001\116\001\116\001\116\001\116\001\255\255\ \114\001\117\001\117\001\117\001\117\001\117\001\117\001\117\001\ \117\001\117\001\117\001\118\001\118\001\118\001\118\001\118\001\ \118\001\118\001\118\001\118\001\118\001\119\001\119\001\119\001\ \119\001\119\001\119\001\119\001\119\001\119\001\119\001\255\255\ \126\001\127\001\127\001\127\001\127\001\127\001\127\001\127\001\ \127\001\127\001\127\001\255\255\255\255\126\001\255\255\255\255\ \255\255\129\001\127\001\127\001\127\001\127\001\127\001\127\001\ \255\255\255\255\255\255\255\255\255\255\255\255\129\001\255\255\ \255\255\155\001\255\255\155\001\155\001\155\001\155\001\155\001\ \155\001\155\001\155\001\155\001\155\001\255\255\255\255\255\255\ \255\255\255\255\127\001\127\001\127\001\127\001\127\001\127\001\ \155\001\255\255\126\001\255\255\255\255\255\255\255\255\255\255\ \126\001\255\255\255\255\255\255\126\001\255\255\255\255\255\255\ \255\255\255\255\255\255\129\001\126\001\255\255\255\255\066\001\ \126\001\129\001\126\001\126\001\255\255\129\001\255\255\255\255\ \155\001\255\255\255\255\255\255\255\255\129\001\255\255\255\255\ \255\255\129\001\255\255\129\001\129\001\130\001\130\001\130\001\ \130\001\130\001\130\001\130\001\130\001\130\001\130\001\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\130\001\130\001\ \130\001\130\001\130\001\130\001\131\001\131\001\131\001\131\001\ \131\001\131\001\131\001\131\001\131\001\131\001\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\131\001\131\001\131\001\ \131\001\131\001\131\001\255\255\255\255\255\255\130\001\130\001\ \130\001\130\001\130\001\130\001\255\255\255\255\255\255\255\255\ \255\255\255\255\132\001\132\001\132\001\132\001\132\001\132\001\ \132\001\132\001\132\001\132\001\255\255\131\001\131\001\131\001\ \131\001\131\001\131\001\132\001\132\001\132\001\132\001\132\001\ \132\001\184\001\138\001\184\001\255\255\255\255\184\001\184\001\ \184\001\184\001\184\001\184\001\184\001\184\001\184\001\184\001\ \185\001\185\001\185\001\185\001\185\001\185\001\185\001\185\001\ \185\001\185\001\255\255\132\001\132\001\132\001\132\001\132\001\ \132\001\138\001\138\001\138\001\138\001\138\001\138\001\138\001\ \138\001\138\001\138\001\138\001\138\001\138\001\138\001\138\001\ \138\001\138\001\138\001\138\001\138\001\138\001\138\001\138\001\ \138\001\138\001\138\001\255\255\255\255\255\255\255\255\138\001\ \255\255\138\001\138\001\138\001\138\001\138\001\138\001\138\001\ \138\001\138\001\138\001\138\001\138\001\138\001\138\001\138\001\ \138\001\138\001\138\001\138\001\138\001\138\001\138\001\138\001\ \138\001\138\001\138\001\141\001\141\001\141\001\141\001\141\001\ \141\001\141\001\141\001\141\001\141\001\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\141\001\141\001\141\001\141\001\ \141\001\141\001\141\001\141\001\141\001\141\001\141\001\141\001\ \141\001\141\001\141\001\141\001\141\001\141\001\141\001\141\001\ \141\001\141\001\141\001\141\001\141\001\141\001\255\255\255\255\ \255\255\255\255\141\001\255\255\141\001\141\001\141\001\141\001\ \141\001\141\001\141\001\141\001\141\001\141\001\141\001\141\001\ \141\001\141\001\141\001\141\001\141\001\141\001\141\001\141\001\ \141\001\141\001\141\001\141\001\141\001\141\001\143\001\143\001\ \255\255\255\255\143\001\156\001\156\001\156\001\156\001\156\001\ \156\001\156\001\156\001\156\001\156\001\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\198\001\143\001\255\255\143\001\ \255\255\255\255\255\255\255\255\156\001\143\001\255\255\255\255\ \255\255\198\001\143\001\255\255\143\001\143\001\143\001\143\001\ \143\001\143\001\143\001\143\001\143\001\143\001\143\001\255\255\ \255\255\143\001\255\255\255\255\255\255\255\255\255\255\255\255\ \138\001\255\255\255\255\255\255\255\255\255\255\143\001\255\255\ \255\255\255\255\255\255\143\001\186\001\186\001\186\001\186\001\ \186\001\186\001\186\001\186\001\186\001\186\001\198\001\255\255\ \143\001\255\255\255\255\255\255\198\001\255\255\255\255\255\255\ \198\001\186\001\255\255\143\001\255\255\255\255\255\255\255\255\ \198\001\255\255\255\255\143\001\198\001\255\255\198\001\198\001\ \255\255\143\001\255\255\255\255\255\255\255\255\255\255\255\255\ \143\001\255\255\255\255\255\255\255\255\187\001\255\255\187\001\ \255\255\186\001\187\001\187\001\187\001\187\001\187\001\187\001\ \187\001\187\001\187\001\187\001\188\001\188\001\188\001\188\001\ \188\001\188\001\188\001\188\001\188\001\188\001\189\001\189\001\ \189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\ \190\001\190\001\190\001\190\001\190\001\190\001\190\001\190\001\ \190\001\190\001\191\001\191\001\191\001\191\001\191\001\191\001\ \191\001\191\001\191\001\191\001\199\001\199\001\199\001\199\001\ \199\001\199\001\199\001\199\001\199\001\199\001\201\001\255\255\ \255\255\255\255\255\255\255\255\255\255\199\001\199\001\199\001\ \199\001\199\001\199\001\201\001\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\199\001\199\001\199\001\ \199\001\199\001\199\001\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \201\001\255\255\255\255\255\255\255\255\143\001\201\001\255\255\ \255\255\255\255\201\001\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\201\001\255\255\255\255\255\255\201\001\255\255\ \201\001\201\001\202\001\202\001\202\001\202\001\202\001\202\001\ \202\001\202\001\202\001\202\001\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\202\001\202\001\202\001\202\001\202\001\ \202\001\203\001\203\001\203\001\203\001\203\001\203\001\203\001\ \203\001\203\001\203\001\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\203\001\203\001\203\001\203\001\203\001\203\001\ \255\255\255\255\255\255\202\001\202\001\202\001\202\001\202\001\ \202\001\255\255\255\255\255\255\255\255\255\255\255\255\204\001\ \204\001\204\001\204\001\204\001\204\001\204\001\204\001\204\001\ \204\001\255\255\203\001\203\001\203\001\203\001\203\001\203\001\ \204\001\204\001\204\001\204\001\204\001\204\001\255\255\210\001\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \204\001\204\001\204\001\204\001\204\001\204\001\210\001\210\001\ \210\001\210\001\210\001\210\001\210\001\210\001\210\001\210\001\ \210\001\210\001\210\001\210\001\210\001\210\001\210\001\210\001\ \210\001\210\001\210\001\210\001\210\001\210\001\210\001\210\001\ \255\255\255\255\255\255\255\255\210\001\255\255\210\001\210\001\ \210\001\210\001\210\001\210\001\210\001\210\001\210\001\210\001\ \210\001\210\001\210\001\210\001\210\001\210\001\210\001\210\001\ \210\001\210\001\210\001\210\001\210\001\210\001\210\001\210\001\ \213\001\213\001\213\001\213\001\213\001\213\001\213\001\213\001\ \213\001\213\001\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\213\001\213\001\213\001\213\001\213\001\213\001\213\001\ \213\001\213\001\213\001\213\001\213\001\213\001\213\001\213\001\ \213\001\213\001\213\001\213\001\213\001\213\001\213\001\213\001\ \213\001\213\001\213\001\255\255\255\255\255\255\255\255\213\001\ \255\255\213\001\213\001\213\001\213\001\213\001\213\001\213\001\ \213\001\213\001\213\001\213\001\213\001\213\001\213\001\213\001\ \213\001\213\001\213\001\213\001\213\001\213\001\213\001\213\001\ \213\001\213\001\213\001\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\210\001\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255"; Lexing.lex_base_code = ""; Lexing.lex_backtrk_code = ""; Lexing.lex_default_code = ""; Lexing.lex_trans_code = ""; Lexing.lex_check_code = ""; Lexing.lex_code = ""; } let rec read_json v lexbuf = __ocaml_lex_read_json_rec v lexbuf 0 and __ocaml_lex_read_json_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 188 "lib/read.mll" # 188 "lib/read.mll" ( `Bool true ) # 1032 "lib/read.ml" # 1033 "lib/read.ml" | 1 -> # 189 "lib/read.mll" # 189 "lib/read.mll" ( `Bool false ) # 1037 "lib/read.ml" # 1038 "lib/read.ml" | 2 -> # 190 "lib/read.mll" # 190 "lib/read.mll" ( `Null ) # 1042 "lib/read.ml" # 1043 "lib/read.ml" | 3 -> # 191 "lib/read.mll" # 191 "lib/read.mll" ( # 193 "lib/read.mll" `Float nan # 197 "lib/read.mll" ) # 1053 "lib/read.ml" # 1054 "lib/read.ml" | 4 -> # 198 "lib/read.mll" # 198 "lib/read.mll" ( # 200 "lib/read.mll" `Float infinity # 204 "lib/read.mll" ) # 1064 "lib/read.ml" # 1065 "lib/read.ml" | 5 -> # 205 "lib/read.mll" # 205 "lib/read.mll" ( # 207 "lib/read.mll" `Float neg_infinity # 211 "lib/read.mll" ) # 1075 "lib/read.ml" # 1076 "lib/read.ml" | 6 -> # 212 "lib/read.mll" # 212 "lib/read.mll" ( # 214 "lib/read.mll" Buffer.clear v.buf; `String (finish_string v lexbuf) # 219 "lib/read.mll" ) # 1087 "lib/read.ml" # 1088 "lib/read.ml" | 7 -> # 220 "lib/read.mll" # 220 "lib/read.mll" ( make_positive_int v lexbuf ) # 1092 "lib/read.ml" # 1093 "lib/read.ml" | 8 -> # 221 "lib/read.mll" # 221 "lib/read.mll" ( make_negative_int v lexbuf ) # 1097 "lib/read.ml" # 1098 "lib/read.ml" | 9 -> # 222 "lib/read.mll" # 222 "lib/read.mll" ( # 224 "lib/read.mll" `Float (float_of_string (lexeme lexbuf)) # 228 "lib/read.mll" ) # 1108 "lib/read.ml" # 1109 "lib/read.ml" | 10 -> # 230 "lib/read.mll" # 230 "lib/read.mll" ( let acc = ref [] in try read_space v lexbuf; read_object_end lexbuf; let field_name = read_ident v lexbuf in read_space v lexbuf; read_colon v lexbuf; read_space v lexbuf; acc := (field_name, read_json v lexbuf) :: !acc; while true do read_space v lexbuf; read_object_sep v lexbuf; read_space v lexbuf; let field_name = read_ident v lexbuf in read_space v lexbuf; read_colon v lexbuf; read_space v lexbuf; acc := (field_name, read_json v lexbuf) :: !acc; done; assert false with End_of_object -> `Assoc (List.rev !acc) ) # 1135 "lib/read.ml" # 1136 "lib/read.ml" | 11 -> # 254 "lib/read.mll" # 254 "lib/read.mll" ( let acc = ref [] in try read_space v lexbuf; read_array_end lexbuf; acc := read_json v lexbuf :: !acc; while true do read_space v lexbuf; read_array_sep v lexbuf; read_space v lexbuf; acc := read_json v lexbuf :: !acc; done; assert false with End_of_array -> `List (List.rev !acc) ) # 1154 "lib/read.ml" # 1155 "lib/read.ml" | 12 -> # 270 "lib/read.mll" # 270 "lib/read.mll" ( # 272 "lib/read.mll" let acc = ref [] in try read_space v lexbuf; read_tuple_end lexbuf; acc := read_json v lexbuf :: !acc; while true do read_space v lexbuf; read_tuple_sep v lexbuf; read_space v lexbuf; acc := read_json v lexbuf :: !acc; done; assert false with End_of_tuple -> `Tuple (List.rev !acc) # 289 "lib/read.mll" ) # 1178 "lib/read.ml" # 1179 "lib/read.ml" | 13 -> # 291 "lib/read.mll" # 291 "lib/read.mll" ( # 293 "lib/read.mll" read_space v lexbuf; let cons = read_ident v lexbuf in read_space v lexbuf; `Variant (cons, finish_variant v lexbuf) # 300 "lib/read.mll" ) # 1192 "lib/read.ml" # 1193 "lib/read.ml" | 14 -> # 302 "lib/read.mll" # 302 "lib/read.mll" ( read_json v lexbuf ) # 1197 "lib/read.ml" # 1198 "lib/read.ml" | 15 -> # 303 "lib/read.mll" # 303 "lib/read.mll" ( finish_comment v lexbuf; read_json v lexbuf ) # 1202 "lib/read.ml" # 1203 "lib/read.ml" | 16 -> # 304 "lib/read.mll" # 304 "lib/read.mll" ( newline v lexbuf; read_json v lexbuf ) # 1207 "lib/read.ml" # 1208 "lib/read.ml" | 17 -> # 305 "lib/read.mll" # 305 "lib/read.mll" ( read_json v lexbuf ) # 1212 "lib/read.ml" # 1213 "lib/read.ml" | 18 -> # 306 "lib/read.mll" # 306 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 1217 "lib/read.ml" # 1218 "lib/read.ml" | 19 -> # 307 "lib/read.mll" # 307 "lib/read.mll" ( long_error "Invalid token" v lexbuf ) # 1222 "lib/read.ml" # 1223 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_json_rec v lexbuf __ocaml_lex_state and finish_string v lexbuf = __ocaml_lex_finish_string_rec v lexbuf 58 and __ocaml_lex_finish_string_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 311 "lib/read.mll" # 311 "lib/read.mll" ( Buffer.contents v.buf ) # 1234 "lib/read.ml" # 1235 "lib/read.ml" | 1 -> # 312 "lib/read.mll" # 312 "lib/read.mll" ( finish_escaped_char v lexbuf; finish_string v lexbuf ) # 1240 "lib/read.ml" # 1241 "lib/read.ml" | 2 -> # 314 "lib/read.mll" # 314 "lib/read.mll" ( add_lexeme v.buf lexbuf; finish_string v lexbuf ) # 1246 "lib/read.ml" # 1247 "lib/read.ml" | 3 -> # 316 "lib/read.mll" # 316 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 1251 "lib/read.ml" # 1252 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_finish_string_rec v lexbuf __ocaml_lex_state and map_string v f lexbuf = __ocaml_lex_map_string_rec v f lexbuf 63 and __ocaml_lex_map_string_rec v f lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 319 "lib/read.mll" # 319 "lib/read.mll" ( let b = v.buf in f (Buffer.contents b) 0 (Buffer.length b) ) # 1264 "lib/read.ml" # 1265 "lib/read.ml" | 1 -> # 321 "lib/read.mll" # 321 "lib/read.mll" ( finish_escaped_char v lexbuf; map_string v f lexbuf ) # 1270 "lib/read.ml" # 1271 "lib/read.ml" | 2 -> # 323 "lib/read.mll" # 323 "lib/read.mll" ( add_lexeme v.buf lexbuf; map_string v f lexbuf ) # 1276 "lib/read.ml" # 1277 "lib/read.ml" | 3 -> # 325 "lib/read.mll" # 325 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 1281 "lib/read.ml" # 1282 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_map_string_rec v f lexbuf __ocaml_lex_state and finish_escaped_char v lexbuf = __ocaml_lex_finish_escaped_char_rec v lexbuf 68 and __ocaml_lex_finish_escaped_char_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> let # 330 "lib/read.mll" # 330 "lib/read.mll" c # 1294 "lib/read.ml" # 1294 "lib/read.ml" = Lexing.sub_lexeme_char lexbuf lexbuf.Lexing.lex_start_pos in # 330 "lib/read.mll" # 330 "lib/read.mll" ( Buffer.add_char v.buf c ) # 1298 "lib/read.ml" # 1299 "lib/read.ml" | 1 -> # 331 "lib/read.mll" # 331 "lib/read.mll" ( Buffer.add_char v.buf '\b' ) # 1303 "lib/read.ml" # 1304 "lib/read.ml" | 2 -> # 332 "lib/read.mll" # 332 "lib/read.mll" ( Buffer.add_char v.buf '\012' ) # 1308 "lib/read.ml" # 1309 "lib/read.ml" | 3 -> # 333 "lib/read.mll" # 333 "lib/read.mll" ( Buffer.add_char v.buf '\n' ) # 1313 "lib/read.ml" # 1314 "lib/read.ml" | 4 -> # 334 "lib/read.mll" # 334 "lib/read.mll" ( Buffer.add_char v.buf '\r' ) # 1318 "lib/read.ml" # 1319 "lib/read.ml" | 5 -> # 335 "lib/read.mll" # 335 "lib/read.mll" ( Buffer.add_char v.buf '\t' ) # 1323 "lib/read.ml" # 1324 "lib/read.ml" | 6 -> let # 336 "lib/read.mll" # 336 "lib/read.mll" a # 1329 "lib/read.ml" # 1329 "lib/read.ml" = Lexing.sub_lexeme_char lexbuf (lexbuf.Lexing.lex_start_pos + 1) and # 336 "lib/read.mll" # 336 "lib/read.mll" b # 1334 "lib/read.ml" # 1334 "lib/read.ml" = Lexing.sub_lexeme_char lexbuf (lexbuf.Lexing.lex_start_pos + 2) and # 336 "lib/read.mll" # 336 "lib/read.mll" c # 1339 "lib/read.ml" # 1339 "lib/read.ml" = Lexing.sub_lexeme_char lexbuf (lexbuf.Lexing.lex_start_pos + 3) and # 336 "lib/read.mll" # 336 "lib/read.mll" d # 1344 "lib/read.ml" # 1344 "lib/read.ml" = Lexing.sub_lexeme_char lexbuf (lexbuf.Lexing.lex_start_pos + 4) in # 337 "lib/read.mll" # 337 "lib/read.mll" ( let x = (hex a lsl 12) lor (hex b lsl 8) lor (hex c lsl 4) lor hex d in if x >= 0xD800 && x <= 0xDBFF then finish_surrogate_pair v x lexbuf else utf8_of_code v.buf x ) # 1355 "lib/read.ml" # 1356 "lib/read.ml" | 7 -> # 345 "lib/read.mll" # 345 "lib/read.mll" ( long_error "Invalid escape sequence" v lexbuf ) # 1360 "lib/read.ml" # 1361 "lib/read.ml" | 8 -> # 346 "lib/read.mll" # 346 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 1365 "lib/read.ml" # 1366 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_finish_escaped_char_rec v lexbuf __ocaml_lex_state and finish_surrogate_pair v x lexbuf = __ocaml_lex_finish_surrogate_pair_rec v x lexbuf 82 and __ocaml_lex_finish_surrogate_pair_rec v x lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> let # 349 "lib/read.mll" # 349 "lib/read.mll" a # 1378 "lib/read.ml" # 1378 "lib/read.ml" = Lexing.sub_lexeme_char lexbuf (lexbuf.Lexing.lex_start_pos + 2) and # 349 "lib/read.mll" # 349 "lib/read.mll" b # 1383 "lib/read.ml" # 1383 "lib/read.ml" = Lexing.sub_lexeme_char lexbuf (lexbuf.Lexing.lex_start_pos + 3) and # 349 "lib/read.mll" # 349 "lib/read.mll" c # 1388 "lib/read.ml" # 1388 "lib/read.ml" = Lexing.sub_lexeme_char lexbuf (lexbuf.Lexing.lex_start_pos + 4) and # 349 "lib/read.mll" # 349 "lib/read.mll" d # 1393 "lib/read.ml" # 1393 "lib/read.ml" = Lexing.sub_lexeme_char lexbuf (lexbuf.Lexing.lex_start_pos + 5) in # 350 "lib/read.mll" # 350 "lib/read.mll" ( let y = (hex a lsl 12) lor (hex b lsl 8) lor (hex c lsl 4) lor hex d in if y >= 0xDC00 && y <= 0xDFFF then utf8_of_surrogate_pair v.buf x y else long_error "Invalid low surrogate for code point beyond U+FFFF" v lexbuf ) # 1405 "lib/read.ml" # 1406 "lib/read.ml" | 1 -> # 359 "lib/read.mll" # 359 "lib/read.mll" ( long_error "Missing escape sequence representing low surrogate \ for code point beyond U+FFFF" v lexbuf ) # 1411 "lib/read.ml" # 1412 "lib/read.ml" | 2 -> # 361 "lib/read.mll" # 361 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 1416 "lib/read.ml" # 1417 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_finish_surrogate_pair_rec v x lexbuf __ocaml_lex_state and finish_stringlit v lexbuf = __ocaml_lex_finish_stringlit_rec v lexbuf 91 and __ocaml_lex_finish_stringlit_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 366 "lib/read.mll" # 366 "lib/read.mll" ( let len = lexbuf.lex_curr_pos - lexbuf.lex_start_pos in let s = Bytes.create (len+1) in Bytes.set s 0 '"'; Bytes.blit lexbuf.lex_buffer lexbuf.lex_start_pos s 1 len; Bytes.to_string s ) # 1433 "lib/read.ml" # 1434 "lib/read.ml" | 1 -> # 372 "lib/read.mll" # 372 "lib/read.mll" ( long_error "Invalid string literal" v lexbuf ) # 1438 "lib/read.ml" # 1439 "lib/read.ml" | 2 -> # 373 "lib/read.mll" # 373 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 1443 "lib/read.ml" # 1444 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_finish_stringlit_rec v lexbuf __ocaml_lex_state and finish_variant v lexbuf = __ocaml_lex_finish_variant_rec v lexbuf 102 and __ocaml_lex_finish_variant_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 376 "lib/read.mll" # 376 "lib/read.mll" ( let x = read_json v lexbuf in read_space v lexbuf; read_gt v lexbuf; Some x ) # 1458 "lib/read.ml" # 1459 "lib/read.ml" | 1 -> # 380 "lib/read.mll" # 380 "lib/read.mll" ( None ) # 1463 "lib/read.ml" # 1464 "lib/read.ml" | 2 -> # 381 "lib/read.mll" # 381 "lib/read.mll" ( long_error "Expected ':' or '>' but found" v lexbuf ) # 1468 "lib/read.ml" # 1469 "lib/read.ml" | 3 -> # 382 "lib/read.mll" # 382 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 1473 "lib/read.ml" # 1474 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_finish_variant_rec v lexbuf __ocaml_lex_state and read_lt v lexbuf = __ocaml_lex_read_lt_rec v lexbuf 107 and __ocaml_lex_read_lt_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 385 "lib/read.mll" # 385 "lib/read.mll" ( () ) # 1485 "lib/read.ml" # 1486 "lib/read.ml" | 1 -> # 386 "lib/read.mll" # 386 "lib/read.mll" ( long_error "Expected '<' but found" v lexbuf ) # 1490 "lib/read.ml" # 1491 "lib/read.ml" | 2 -> # 387 "lib/read.mll" # 387 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 1495 "lib/read.ml" # 1496 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_lt_rec v lexbuf __ocaml_lex_state and read_gt v lexbuf = __ocaml_lex_read_gt_rec v lexbuf 111 and __ocaml_lex_read_gt_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 390 "lib/read.mll" # 390 "lib/read.mll" ( () ) # 1507 "lib/read.ml" # 1508 "lib/read.ml" | 1 -> # 391 "lib/read.mll" # 391 "lib/read.mll" ( long_error "Expected '>' but found" v lexbuf ) # 1512 "lib/read.ml" # 1513 "lib/read.ml" | 2 -> # 392 "lib/read.mll" # 392 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 1517 "lib/read.ml" # 1518 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_gt_rec v lexbuf __ocaml_lex_state and read_comma v lexbuf = __ocaml_lex_read_comma_rec v lexbuf 115 and __ocaml_lex_read_comma_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 395 "lib/read.mll" # 395 "lib/read.mll" ( () ) # 1529 "lib/read.ml" # 1530 "lib/read.ml" | 1 -> # 396 "lib/read.mll" # 396 "lib/read.mll" ( long_error "Expected ',' but found" v lexbuf ) # 1534 "lib/read.ml" # 1535 "lib/read.ml" | 2 -> # 397 "lib/read.mll" # 397 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 1539 "lib/read.ml" # 1540 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_comma_rec v lexbuf __ocaml_lex_state and start_any_variant v lexbuf = __ocaml_lex_start_any_variant_rec v lexbuf 119 and __ocaml_lex_start_any_variant_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 400 "lib/read.mll" # 400 "lib/read.mll" ( `Edgy_bracket ) # 1551 "lib/read.ml" # 1552 "lib/read.ml" | 1 -> # 401 "lib/read.mll" # 401 "lib/read.mll" ( Buffer.clear v.buf; `Double_quote ) # 1557 "lib/read.ml" # 1558 "lib/read.ml" | 2 -> # 403 "lib/read.mll" # 403 "lib/read.mll" ( `Square_bracket ) # 1562 "lib/read.ml" # 1563 "lib/read.ml" | 3 -> # 404 "lib/read.mll" # 404 "lib/read.mll" ( long_error "Expected '<', '\"' or '[' but found" v lexbuf ) # 1567 "lib/read.ml" # 1568 "lib/read.ml" | 4 -> # 405 "lib/read.mll" # 405 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 1572 "lib/read.ml" # 1573 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_start_any_variant_rec v lexbuf __ocaml_lex_state and finish_comment v lexbuf = __ocaml_lex_finish_comment_rec v lexbuf 125 and __ocaml_lex_finish_comment_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 408 "lib/read.mll" # 408 "lib/read.mll" ( () ) # 1584 "lib/read.ml" # 1585 "lib/read.ml" | 1 -> # 409 "lib/read.mll" # 409 "lib/read.mll" ( long_error "Unterminated comment" v lexbuf ) # 1589 "lib/read.ml" # 1590 "lib/read.ml" | 2 -> # 410 "lib/read.mll" # 410 "lib/read.mll" ( newline v lexbuf; finish_comment v lexbuf ) # 1594 "lib/read.ml" # 1595 "lib/read.ml" | 3 -> # 411 "lib/read.mll" # 411 "lib/read.mll" ( finish_comment v lexbuf ) # 1599 "lib/read.ml" # 1600 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_finish_comment_rec v lexbuf __ocaml_lex_state and read_eof lexbuf = __ocaml_lex_read_eof_rec lexbuf 131 and __ocaml_lex_read_eof_rec lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 419 "lib/read.mll" # 419 "lib/read.mll" ( true ) # 1611 "lib/read.ml" # 1612 "lib/read.ml" | 1 -> # 420 "lib/read.mll" # 420 "lib/read.mll" ( false ) # 1616 "lib/read.ml" # 1617 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_eof_rec lexbuf __ocaml_lex_state and read_space v lexbuf = __ocaml_lex_read_space_rec v lexbuf 133 and __ocaml_lex_read_space_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 423 "lib/read.mll" # 423 "lib/read.mll" ( newline v lexbuf; read_space v lexbuf ) # 1628 "lib/read.ml" # 1629 "lib/read.ml" | 1 -> # 424 "lib/read.mll" # 424 "lib/read.mll" ( finish_comment v lexbuf; read_space v lexbuf ) # 1633 "lib/read.ml" # 1634 "lib/read.ml" | 2 -> # 425 "lib/read.mll" # 425 "lib/read.mll" ( newline v lexbuf; read_space v lexbuf ) # 1638 "lib/read.ml" # 1639 "lib/read.ml" | 3 -> # 426 "lib/read.mll" # 426 "lib/read.mll" ( read_space v lexbuf ) # 1643 "lib/read.ml" # 1644 "lib/read.ml" | 4 -> # 427 "lib/read.mll" # 427 "lib/read.mll" ( () ) # 1648 "lib/read.ml" # 1649 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_space_rec v lexbuf __ocaml_lex_state and read_null v lexbuf = __ocaml_lex_read_null_rec v lexbuf 140 and __ocaml_lex_read_null_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 430 "lib/read.mll" # 430 "lib/read.mll" ( () ) # 1660 "lib/read.ml" # 1661 "lib/read.ml" | 1 -> # 431 "lib/read.mll" # 431 "lib/read.mll" ( long_error "Expected 'null' but found" v lexbuf ) # 1665 "lib/read.ml" # 1666 "lib/read.ml" | 2 -> # 432 "lib/read.mll" # 432 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 1670 "lib/read.ml" # 1671 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_null_rec v lexbuf __ocaml_lex_state and read_null_if_possible v lexbuf = __ocaml_lex_read_null_if_possible_rec v lexbuf 147 and __ocaml_lex_read_null_if_possible_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 435 "lib/read.mll" # 435 "lib/read.mll" ( true ) # 1682 "lib/read.ml" # 1683 "lib/read.ml" | 1 -> # 436 "lib/read.mll" # 436 "lib/read.mll" ( false ) # 1687 "lib/read.ml" # 1688 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_null_if_possible_rec v lexbuf __ocaml_lex_state and read_bool v lexbuf = __ocaml_lex_read_bool_rec v lexbuf 152 and __ocaml_lex_read_bool_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 439 "lib/read.mll" # 439 "lib/read.mll" ( true ) # 1699 "lib/read.ml" # 1700 "lib/read.ml" | 1 -> # 440 "lib/read.mll" # 440 "lib/read.mll" ( false ) # 1704 "lib/read.ml" # 1705 "lib/read.ml" | 2 -> # 443 "lib/read.mll" # 443 "lib/read.mll" ( true ) # 1709 "lib/read.ml" # 1710 "lib/read.ml" | 3 -> # 444 "lib/read.mll" # 444 "lib/read.mll" ( false ) # 1714 "lib/read.ml" # 1715 "lib/read.ml" | 4 -> # 446 "lib/read.mll" # 446 "lib/read.mll" ( long_error "Expected 'true' or 'false' but found" v lexbuf ) # 1719 "lib/read.ml" # 1720 "lib/read.ml" | 5 -> # 447 "lib/read.mll" # 447 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 1724 "lib/read.ml" # 1725 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_bool_rec v lexbuf __ocaml_lex_state and read_int v lexbuf = __ocaml_lex_read_int_rec v lexbuf 176 and __ocaml_lex_read_int_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 450 "lib/read.mll" # 450 "lib/read.mll" ( try extract_positive_int lexbuf with Int_overflow -> lexer_error "Int overflow" v lexbuf ) # 1738 "lib/read.ml" # 1739 "lib/read.ml" | 1 -> # 453 "lib/read.mll" # 453 "lib/read.mll" ( try extract_negative_int lexbuf with Int_overflow -> lexer_error "Int overflow" v lexbuf ) # 1745 "lib/read.ml" # 1746 "lib/read.ml" | 2 -> # 456 "lib/read.mll" # 456 "lib/read.mll" ( (* Support for double-quoted "ints" *) Buffer.clear v.buf; let s = finish_string v lexbuf in try (* Any OCaml-compliant int will pass, including hexadecimal and octal notations, and embedded underscores *) int_of_string s with _ -> custom_error "Expected an integer but found a string that \ doesn't even represent an integer" v lexbuf ) # 1763 "lib/read.ml" # 1764 "lib/read.ml" | 3 -> # 470 "lib/read.mll" # 470 "lib/read.mll" ( long_error "Expected integer but found" v lexbuf ) # 1768 "lib/read.ml" # 1769 "lib/read.ml" | 4 -> # 471 "lib/read.mll" # 471 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 1773 "lib/read.ml" # 1774 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_int_rec v lexbuf __ocaml_lex_state and read_int32 v lexbuf = __ocaml_lex_read_int32_rec v lexbuf 185 and __ocaml_lex_read_int32_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 474 "lib/read.mll" # 474 "lib/read.mll" ( try Int32.of_string (Lexing.lexeme lexbuf) with _ -> lexer_error "Int32 overflow" v lexbuf ) # 1787 "lib/read.ml" # 1788 "lib/read.ml" | 1 -> # 477 "lib/read.mll" # 477 "lib/read.mll" ( (* Support for double-quoted "ints" *) Buffer.clear v.buf; let s = finish_string v lexbuf in try (* Any OCaml-compliant int will pass, including hexadecimal and octal notations, and embedded underscores *) Int32.of_string s with _ -> custom_error "Expected an int32 but found a string that \ doesn't even represent an integer" v lexbuf ) # 1805 "lib/read.ml" # 1806 "lib/read.ml" | 2 -> # 491 "lib/read.mll" # 491 "lib/read.mll" ( long_error "Expected int32 but found" v lexbuf ) # 1810 "lib/read.ml" # 1811 "lib/read.ml" | 3 -> # 492 "lib/read.mll" # 492 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 1815 "lib/read.ml" # 1816 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_int32_rec v lexbuf __ocaml_lex_state and read_int64 v lexbuf = __ocaml_lex_read_int64_rec v lexbuf 192 and __ocaml_lex_read_int64_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 495 "lib/read.mll" # 495 "lib/read.mll" ( try Int64.of_string (Lexing.lexeme lexbuf) with _ -> lexer_error "Int32 overflow" v lexbuf ) # 1829 "lib/read.ml" # 1830 "lib/read.ml" | 1 -> # 498 "lib/read.mll" # 498 "lib/read.mll" ( (* Support for double-quoted "ints" *) Buffer.clear v.buf; let s = finish_string v lexbuf in try (* Any OCaml-compliant int will pass, including hexadecimal and octal notations, and embedded underscores *) Int64.of_string s with _ -> custom_error "Expected an int64 but found a string that \ doesn't even represent an integer" v lexbuf ) # 1847 "lib/read.ml" # 1848 "lib/read.ml" | 2 -> # 512 "lib/read.mll" # 512 "lib/read.mll" ( long_error "Expected int64 but found" v lexbuf ) # 1852 "lib/read.ml" # 1853 "lib/read.ml" | 3 -> # 513 "lib/read.mll" # 513 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 1857 "lib/read.ml" # 1858 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_int64_rec v lexbuf __ocaml_lex_state and read_number v lexbuf = __ocaml_lex_read_number_rec v lexbuf 199 and __ocaml_lex_read_number_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 516 "lib/read.mll" # 516 "lib/read.mll" ( nan ) # 1869 "lib/read.ml" # 1870 "lib/read.ml" | 1 -> # 517 "lib/read.mll" # 517 "lib/read.mll" ( infinity ) # 1874 "lib/read.ml" # 1875 "lib/read.ml" | 2 -> # 518 "lib/read.mll" # 518 "lib/read.mll" ( neg_infinity ) # 1879 "lib/read.ml" # 1880 "lib/read.ml" | 3 -> # 519 "lib/read.mll" # 519 "lib/read.mll" ( float_of_string (lexeme lexbuf) ) # 1884 "lib/read.ml" # 1885 "lib/read.ml" | 4 -> # 520 "lib/read.mll" # 520 "lib/read.mll" ( Buffer.clear v.buf; let s = finish_string v lexbuf in try (* Any OCaml-compliant float will pass, including hexadecimal and octal notations, and embedded underscores. *) float_of_string s with _ -> match s with "NaN" -> nan | "Infinity" -> infinity | "-Infinity" -> neg_infinity | _ -> custom_error "Expected a number but found a string that \ doesn't even represent a number" v lexbuf ) # 1906 "lib/read.ml" # 1907 "lib/read.ml" | 5 -> # 538 "lib/read.mll" # 538 "lib/read.mll" ( long_error "Expected number but found" v lexbuf ) # 1911 "lib/read.ml" # 1912 "lib/read.ml" | 6 -> # 539 "lib/read.mll" # 539 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 1916 "lib/read.ml" # 1917 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_number_rec v lexbuf __ocaml_lex_state and read_string v lexbuf = __ocaml_lex_read_string_rec v lexbuf 233 and __ocaml_lex_read_string_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 542 "lib/read.mll" # 542 "lib/read.mll" ( Buffer.clear v.buf; finish_string v lexbuf ) # 1929 "lib/read.ml" # 1930 "lib/read.ml" | 1 -> # 544 "lib/read.mll" # 544 "lib/read.mll" ( long_error "Expected '\"' but found" v lexbuf ) # 1934 "lib/read.ml" # 1935 "lib/read.ml" | 2 -> # 545 "lib/read.mll" # 545 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 1939 "lib/read.ml" # 1940 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_string_rec v lexbuf __ocaml_lex_state and read_ident v lexbuf = __ocaml_lex_read_ident_rec v lexbuf 237 and __ocaml_lex_read_ident_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 548 "lib/read.mll" # 548 "lib/read.mll" ( Buffer.clear v.buf; finish_string v lexbuf ) # 1952 "lib/read.ml" # 1953 "lib/read.ml" | 1 -> let # 550 "lib/read.mll" # 550 "lib/read.mll" s # 1958 "lib/read.ml" # 1958 "lib/read.ml" = Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos lexbuf.Lexing.lex_curr_pos in # 551 "lib/read.mll" # 551 "lib/read.mll" ( s ) # 1962 "lib/read.ml" # 1963 "lib/read.ml" | 2 -> # 552 "lib/read.mll" # 552 "lib/read.mll" ( long_error "Expected string or identifier but found" v lexbuf ) # 1967 "lib/read.ml" # 1968 "lib/read.ml" | 3 -> # 553 "lib/read.mll" # 553 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 1972 "lib/read.ml" # 1973 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_ident_rec v lexbuf __ocaml_lex_state and map_ident v f lexbuf = __ocaml_lex_map_ident_rec v f lexbuf 242 and __ocaml_lex_map_ident_rec v f lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 556 "lib/read.mll" # 556 "lib/read.mll" ( Buffer.clear v.buf; map_string v f lexbuf ) # 1985 "lib/read.ml" # 1986 "lib/read.ml" | 1 -> # 559 "lib/read.mll" # 559 "lib/read.mll" ( map_lexeme f lexbuf ) # 1990 "lib/read.ml" # 1991 "lib/read.ml" | 2 -> # 560 "lib/read.mll" # 560 "lib/read.mll" ( long_error "Expected string or identifier but found" v lexbuf ) # 1995 "lib/read.ml" # 1996 "lib/read.ml" | 3 -> # 561 "lib/read.mll" # 561 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2000 "lib/read.ml" # 2001 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_map_ident_rec v f lexbuf __ocaml_lex_state and read_sequence read_cell init_acc v lexbuf = __ocaml_lex_read_sequence_rec read_cell init_acc v lexbuf 247 and __ocaml_lex_read_sequence_rec read_cell init_acc v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 564 "lib/read.mll" # 564 "lib/read.mll" ( let acc = ref init_acc in try read_space v lexbuf; read_array_end lexbuf; acc := read_cell !acc v lexbuf; while true do read_space v lexbuf; read_array_sep v lexbuf; read_space v lexbuf; acc := read_cell !acc v lexbuf; done; assert false with End_of_array -> !acc ) # 2026 "lib/read.ml" # 2027 "lib/read.ml" | 1 -> # 579 "lib/read.mll" # 579 "lib/read.mll" ( long_error "Expected '[' but found" v lexbuf ) # 2031 "lib/read.ml" # 2032 "lib/read.ml" | 2 -> # 580 "lib/read.mll" # 580 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2036 "lib/read.ml" # 2037 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_sequence_rec read_cell init_acc v lexbuf __ocaml_lex_state and read_list_rev read_cell v lexbuf = __ocaml_lex_read_list_rev_rec read_cell v lexbuf 251 and __ocaml_lex_read_list_rev_rec read_cell v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 583 "lib/read.mll" # 583 "lib/read.mll" ( let acc = ref [] in try read_space v lexbuf; read_array_end lexbuf; acc := read_cell v lexbuf :: !acc; while true do read_space v lexbuf; read_array_sep v lexbuf; read_space v lexbuf; acc := read_cell v lexbuf :: !acc; done; assert false with End_of_array -> !acc ) # 2062 "lib/read.ml" # 2063 "lib/read.ml" | 1 -> # 598 "lib/read.mll" # 598 "lib/read.mll" ( long_error "Expected '[' but found" v lexbuf ) # 2067 "lib/read.ml" # 2068 "lib/read.ml" | 2 -> # 599 "lib/read.mll" # 599 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2072 "lib/read.ml" # 2073 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_list_rev_rec read_cell v lexbuf __ocaml_lex_state and read_array_end lexbuf = __ocaml_lex_read_array_end_rec lexbuf 255 and __ocaml_lex_read_array_end_rec lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 602 "lib/read.mll" # 602 "lib/read.mll" ( raise End_of_array ) # 2084 "lib/read.ml" # 2085 "lib/read.ml" | 1 -> # 603 "lib/read.mll" # 603 "lib/read.mll" ( () ) # 2089 "lib/read.ml" # 2090 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_array_end_rec lexbuf __ocaml_lex_state and read_array_sep v lexbuf = __ocaml_lex_read_array_sep_rec v lexbuf 257 and __ocaml_lex_read_array_sep_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 606 "lib/read.mll" # 606 "lib/read.mll" ( () ) # 2101 "lib/read.ml" # 2102 "lib/read.ml" | 1 -> # 607 "lib/read.mll" # 607 "lib/read.mll" ( raise End_of_array ) # 2106 "lib/read.ml" # 2107 "lib/read.ml" | 2 -> # 608 "lib/read.mll" # 608 "lib/read.mll" ( long_error "Expected ',' or ']' but found" v lexbuf ) # 2111 "lib/read.ml" # 2112 "lib/read.ml" | 3 -> # 609 "lib/read.mll" # 609 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2116 "lib/read.ml" # 2117 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_array_sep_rec v lexbuf __ocaml_lex_state and read_tuple read_cell init_acc v lexbuf = __ocaml_lex_read_tuple_rec read_cell init_acc v lexbuf 262 and __ocaml_lex_read_tuple_rec read_cell init_acc v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 613 "lib/read.mll" # 613 "lib/read.mll" ( # 615 "lib/read.mll" let pos = ref 0 in let acc = ref init_acc in try read_space v lexbuf; read_tuple_end lexbuf; acc := read_cell !pos !acc v lexbuf; incr pos; while true do read_space v lexbuf; read_tuple_sep v lexbuf; read_space v lexbuf; acc := read_cell !pos !acc v lexbuf; incr pos; done; assert false with End_of_tuple -> !acc # 635 "lib/read.mll" ) # 2150 "lib/read.ml" # 2151 "lib/read.ml" | 1 -> # 636 "lib/read.mll" # 636 "lib/read.mll" ( long_error "Expected ')' but found" v lexbuf ) # 2155 "lib/read.ml" # 2156 "lib/read.ml" | 2 -> # 637 "lib/read.mll" # 637 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2160 "lib/read.ml" # 2161 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_tuple_rec read_cell init_acc v lexbuf __ocaml_lex_state and read_tuple_end lexbuf = __ocaml_lex_read_tuple_end_rec lexbuf 266 and __ocaml_lex_read_tuple_end_rec lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 640 "lib/read.mll" # 640 "lib/read.mll" ( raise End_of_tuple ) # 2172 "lib/read.ml" # 2173 "lib/read.ml" | 1 -> # 641 "lib/read.mll" # 641 "lib/read.mll" ( () ) # 2177 "lib/read.ml" # 2178 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_tuple_end_rec lexbuf __ocaml_lex_state and read_tuple_end2 v std lexbuf = __ocaml_lex_read_tuple_end2_rec v std lexbuf 268 and __ocaml_lex_read_tuple_end2_rec v std lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 644 "lib/read.mll" # 644 "lib/read.mll" ( if std then long_error "Expected ')' or '' but found" v lexbuf else raise End_of_tuple ) # 2192 "lib/read.ml" # 2193 "lib/read.ml" | 1 -> # 648 "lib/read.mll" # 648 "lib/read.mll" ( if std then raise End_of_tuple else long_error "Expected ']' or '' but found" v lexbuf ) # 2200 "lib/read.ml" # 2201 "lib/read.ml" | 2 -> # 652 "lib/read.mll" # 652 "lib/read.mll" ( () ) # 2205 "lib/read.ml" # 2206 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_tuple_end2_rec v std lexbuf __ocaml_lex_state and read_tuple_sep v lexbuf = __ocaml_lex_read_tuple_sep_rec v lexbuf 271 and __ocaml_lex_read_tuple_sep_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 655 "lib/read.mll" # 655 "lib/read.mll" ( () ) # 2217 "lib/read.ml" # 2218 "lib/read.ml" | 1 -> # 656 "lib/read.mll" # 656 "lib/read.mll" ( raise End_of_tuple ) # 2222 "lib/read.ml" # 2223 "lib/read.ml" | 2 -> # 657 "lib/read.mll" # 657 "lib/read.mll" ( long_error "Expected ',' or ')' but found" v lexbuf ) # 2227 "lib/read.ml" # 2228 "lib/read.ml" | 3 -> # 658 "lib/read.mll" # 658 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2232 "lib/read.ml" # 2233 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_tuple_sep_rec v lexbuf __ocaml_lex_state and read_tuple_sep2 v std lexbuf = __ocaml_lex_read_tuple_sep2_rec v std lexbuf 276 and __ocaml_lex_read_tuple_sep2_rec v std lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 661 "lib/read.mll" # 661 "lib/read.mll" ( () ) # 2244 "lib/read.ml" # 2245 "lib/read.ml" | 1 -> # 662 "lib/read.mll" # 662 "lib/read.mll" ( if std then long_error "Expected ',' or ']' but found" v lexbuf else raise End_of_tuple ) # 2252 "lib/read.ml" # 2253 "lib/read.ml" | 2 -> # 666 "lib/read.mll" # 666 "lib/read.mll" ( if std then raise End_of_tuple else long_error "Expected ',' or ')' but found" v lexbuf ) # 2260 "lib/read.ml" # 2261 "lib/read.ml" | 3 -> # 670 "lib/read.mll" # 670 "lib/read.mll" ( long_error "Expected ',' or ')' but found" v lexbuf ) # 2265 "lib/read.ml" # 2266 "lib/read.ml" | 4 -> # 671 "lib/read.mll" # 671 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2270 "lib/read.ml" # 2271 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_tuple_sep2_rec v std lexbuf __ocaml_lex_state and read_abstract_fields read_key read_field init_acc v lexbuf = __ocaml_lex_read_abstract_fields_rec read_key read_field init_acc v lexbuf 282 and __ocaml_lex_read_abstract_fields_rec read_key read_field init_acc v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 675 "lib/read.mll" # 675 "lib/read.mll" ( let acc = ref init_acc in try read_space v lexbuf; read_object_end lexbuf; let field_name = read_key v lexbuf in read_space v lexbuf; read_colon v lexbuf; read_space v lexbuf; acc := read_field !acc field_name v lexbuf; while true do read_space v lexbuf; read_object_sep v lexbuf; read_space v lexbuf; let field_name = read_key v lexbuf in read_space v lexbuf; read_colon v lexbuf; read_space v lexbuf; acc := read_field !acc field_name v lexbuf; done; assert false with End_of_object -> !acc ) # 2304 "lib/read.ml" # 2305 "lib/read.ml" | 1 -> # 698 "lib/read.mll" # 698 "lib/read.mll" ( long_error "Expected '{' but found" v lexbuf ) # 2309 "lib/read.ml" # 2310 "lib/read.ml" | 2 -> # 699 "lib/read.mll" # 699 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2314 "lib/read.ml" # 2315 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_abstract_fields_rec read_key read_field init_acc v lexbuf __ocaml_lex_state and read_lcurl v lexbuf = __ocaml_lex_read_lcurl_rec v lexbuf 286 and __ocaml_lex_read_lcurl_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 702 "lib/read.mll" # 702 "lib/read.mll" ( () ) # 2326 "lib/read.ml" # 2327 "lib/read.ml" | 1 -> # 703 "lib/read.mll" # 703 "lib/read.mll" ( long_error "Expected '{' but found" v lexbuf ) # 2331 "lib/read.ml" # 2332 "lib/read.ml" | 2 -> # 704 "lib/read.mll" # 704 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2336 "lib/read.ml" # 2337 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_lcurl_rec v lexbuf __ocaml_lex_state and read_object_end lexbuf = __ocaml_lex_read_object_end_rec lexbuf 290 and __ocaml_lex_read_object_end_rec lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 707 "lib/read.mll" # 707 "lib/read.mll" ( raise End_of_object ) # 2348 "lib/read.ml" # 2349 "lib/read.ml" | 1 -> # 708 "lib/read.mll" # 708 "lib/read.mll" ( () ) # 2353 "lib/read.ml" # 2354 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_object_end_rec lexbuf __ocaml_lex_state and read_object_sep v lexbuf = __ocaml_lex_read_object_sep_rec v lexbuf 292 and __ocaml_lex_read_object_sep_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 711 "lib/read.mll" # 711 "lib/read.mll" ( () ) # 2365 "lib/read.ml" # 2366 "lib/read.ml" | 1 -> # 712 "lib/read.mll" # 712 "lib/read.mll" ( raise End_of_object ) # 2370 "lib/read.ml" # 2371 "lib/read.ml" | 2 -> # 713 "lib/read.mll" # 713 "lib/read.mll" ( long_error "Expected ',' or '}' but found" v lexbuf ) # 2375 "lib/read.ml" # 2376 "lib/read.ml" | 3 -> # 714 "lib/read.mll" # 714 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2380 "lib/read.ml" # 2381 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_object_sep_rec v lexbuf __ocaml_lex_state and read_colon v lexbuf = __ocaml_lex_read_colon_rec v lexbuf 297 and __ocaml_lex_read_colon_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 717 "lib/read.mll" # 717 "lib/read.mll" ( () ) # 2392 "lib/read.ml" # 2393 "lib/read.ml" | 1 -> # 718 "lib/read.mll" # 718 "lib/read.mll" ( long_error "Expected ':' but found" v lexbuf ) # 2397 "lib/read.ml" # 2398 "lib/read.ml" | 2 -> # 719 "lib/read.mll" # 719 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2402 "lib/read.ml" # 2403 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_colon_rec v lexbuf __ocaml_lex_state and start_any_tuple v lexbuf = __ocaml_lex_start_any_tuple_rec v lexbuf 301 and __ocaml_lex_start_any_tuple_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 722 "lib/read.mll" # 722 "lib/read.mll" ( false ) # 2414 "lib/read.ml" # 2415 "lib/read.ml" | 1 -> # 723 "lib/read.mll" # 723 "lib/read.mll" ( true ) # 2419 "lib/read.ml" # 2420 "lib/read.ml" | 2 -> # 724 "lib/read.mll" # 724 "lib/read.mll" ( long_error "Expected '(' or '[' but found" v lexbuf ) # 2424 "lib/read.ml" # 2425 "lib/read.ml" | 3 -> # 725 "lib/read.mll" # 725 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2429 "lib/read.ml" # 2430 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_start_any_tuple_rec v lexbuf __ocaml_lex_state and read_lpar v lexbuf = __ocaml_lex_read_lpar_rec v lexbuf 306 and __ocaml_lex_read_lpar_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 728 "lib/read.mll" # 728 "lib/read.mll" ( () ) # 2441 "lib/read.ml" # 2442 "lib/read.ml" | 1 -> # 729 "lib/read.mll" # 729 "lib/read.mll" ( long_error "Expected '(' but found" v lexbuf ) # 2446 "lib/read.ml" # 2447 "lib/read.ml" | 2 -> # 730 "lib/read.mll" # 730 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2451 "lib/read.ml" # 2452 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_lpar_rec v lexbuf __ocaml_lex_state and read_rpar v lexbuf = __ocaml_lex_read_rpar_rec v lexbuf 310 and __ocaml_lex_read_rpar_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 733 "lib/read.mll" # 733 "lib/read.mll" ( () ) # 2463 "lib/read.ml" # 2464 "lib/read.ml" | 1 -> # 734 "lib/read.mll" # 734 "lib/read.mll" ( long_error "Expected ')' but found" v lexbuf ) # 2468 "lib/read.ml" # 2469 "lib/read.ml" | 2 -> # 735 "lib/read.mll" # 735 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2473 "lib/read.ml" # 2474 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_rpar_rec v lexbuf __ocaml_lex_state and read_lbr v lexbuf = __ocaml_lex_read_lbr_rec v lexbuf 314 and __ocaml_lex_read_lbr_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 738 "lib/read.mll" # 738 "lib/read.mll" ( () ) # 2485 "lib/read.ml" # 2486 "lib/read.ml" | 1 -> # 739 "lib/read.mll" # 739 "lib/read.mll" ( long_error "Expected '[' but found" v lexbuf ) # 2490 "lib/read.ml" # 2491 "lib/read.ml" | 2 -> # 740 "lib/read.mll" # 740 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2495 "lib/read.ml" # 2496 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_lbr_rec v lexbuf __ocaml_lex_state and read_rbr v lexbuf = __ocaml_lex_read_rbr_rec v lexbuf 318 and __ocaml_lex_read_rbr_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 743 "lib/read.mll" # 743 "lib/read.mll" ( () ) # 2507 "lib/read.ml" # 2508 "lib/read.ml" | 1 -> # 744 "lib/read.mll" # 744 "lib/read.mll" ( long_error "Expected ']' but found" v lexbuf ) # 2512 "lib/read.ml" # 2513 "lib/read.ml" | 2 -> # 745 "lib/read.mll" # 745 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2517 "lib/read.ml" # 2518 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_rbr_rec v lexbuf __ocaml_lex_state and skip_json v lexbuf = __ocaml_lex_skip_json_rec v lexbuf 322 and __ocaml_lex_skip_json_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 751 "lib/read.mll" # 751 "lib/read.mll" ( () ) # 2529 "lib/read.ml" # 2530 "lib/read.ml" | 1 -> # 752 "lib/read.mll" # 752 "lib/read.mll" ( () ) # 2534 "lib/read.ml" # 2535 "lib/read.ml" | 2 -> # 753 "lib/read.mll" # 753 "lib/read.mll" ( () ) # 2539 "lib/read.ml" # 2540 "lib/read.ml" | 3 -> # 754 "lib/read.mll" # 754 "lib/read.mll" ( () ) # 2544 "lib/read.ml" # 2545 "lib/read.ml" | 4 -> # 755 "lib/read.mll" # 755 "lib/read.mll" ( () ) # 2549 "lib/read.ml" # 2550 "lib/read.ml" | 5 -> # 756 "lib/read.mll" # 756 "lib/read.mll" ( () ) # 2554 "lib/read.ml" # 2555 "lib/read.ml" | 6 -> # 757 "lib/read.mll" # 757 "lib/read.mll" ( finish_skip_stringlit v lexbuf ) # 2559 "lib/read.ml" # 2560 "lib/read.ml" | 7 -> # 758 "lib/read.mll" # 758 "lib/read.mll" ( () ) # 2564 "lib/read.ml" # 2565 "lib/read.ml" | 8 -> # 759 "lib/read.mll" # 759 "lib/read.mll" ( () ) # 2569 "lib/read.ml" # 2570 "lib/read.ml" | 9 -> # 761 "lib/read.mll" # 761 "lib/read.mll" ( try read_space v lexbuf; read_object_end lexbuf; skip_ident v lexbuf; read_space v lexbuf; read_colon v lexbuf; read_space v lexbuf; skip_json v lexbuf; while true do read_space v lexbuf; read_object_sep v lexbuf; read_space v lexbuf; skip_ident v lexbuf; read_space v lexbuf; read_colon v lexbuf; read_space v lexbuf; skip_json v lexbuf; done; assert false with End_of_object -> () ) # 2595 "lib/read.ml" # 2596 "lib/read.ml" | 10 -> # 784 "lib/read.mll" # 784 "lib/read.mll" ( try read_space v lexbuf; read_array_end lexbuf; skip_json v lexbuf; while true do read_space v lexbuf; read_array_sep v lexbuf; read_space v lexbuf; skip_json v lexbuf; done; assert false with End_of_array -> () ) # 2613 "lib/read.ml" # 2614 "lib/read.ml" | 11 -> # 799 "lib/read.mll" # 799 "lib/read.mll" ( # 801 "lib/read.mll" try read_space v lexbuf; read_tuple_end lexbuf; skip_json v lexbuf; while true do read_space v lexbuf; read_tuple_sep v lexbuf; read_space v lexbuf; skip_json v lexbuf; done; assert false with End_of_tuple -> () # 817 "lib/read.mll" ) # 2636 "lib/read.ml" # 2637 "lib/read.ml" | 12 -> # 819 "lib/read.mll" # 819 "lib/read.mll" ( # 821 "lib/read.mll" read_space v lexbuf; skip_ident v lexbuf; read_space v lexbuf; finish_skip_variant v lexbuf # 828 "lib/read.mll" ) # 2650 "lib/read.ml" # 2651 "lib/read.ml" | 13 -> # 830 "lib/read.mll" # 830 "lib/read.mll" ( skip_json v lexbuf ) # 2655 "lib/read.ml" # 2656 "lib/read.ml" | 14 -> # 831 "lib/read.mll" # 831 "lib/read.mll" ( finish_comment v lexbuf; skip_json v lexbuf ) # 2660 "lib/read.ml" # 2661 "lib/read.ml" | 15 -> # 832 "lib/read.mll" # 832 "lib/read.mll" ( newline v lexbuf; skip_json v lexbuf ) # 2665 "lib/read.ml" # 2666 "lib/read.ml" | 16 -> # 833 "lib/read.mll" # 833 "lib/read.mll" ( skip_json v lexbuf ) # 2670 "lib/read.ml" # 2671 "lib/read.ml" | 17 -> # 834 "lib/read.mll" # 834 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2675 "lib/read.ml" # 2676 "lib/read.ml" | 18 -> # 835 "lib/read.mll" # 835 "lib/read.mll" ( long_error "Invalid token" v lexbuf ) # 2680 "lib/read.ml" # 2681 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_skip_json_rec v lexbuf __ocaml_lex_state and finish_skip_stringlit v lexbuf = __ocaml_lex_finish_skip_stringlit_rec v lexbuf 378 and __ocaml_lex_finish_skip_stringlit_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 841 "lib/read.mll" # 841 "lib/read.mll" ( () ) # 2692 "lib/read.ml" # 2693 "lib/read.ml" | 1 -> # 842 "lib/read.mll" # 842 "lib/read.mll" ( long_error "Invalid string literal" v lexbuf ) # 2697 "lib/read.ml" # 2698 "lib/read.ml" | 2 -> # 843 "lib/read.mll" # 843 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2702 "lib/read.ml" # 2703 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_finish_skip_stringlit_rec v lexbuf __ocaml_lex_state and finish_skip_variant v lexbuf = __ocaml_lex_finish_skip_variant_rec v lexbuf 389 and __ocaml_lex_finish_skip_variant_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 846 "lib/read.mll" # 846 "lib/read.mll" ( skip_json v lexbuf; read_space v lexbuf; read_gt v lexbuf ) # 2716 "lib/read.ml" # 2717 "lib/read.ml" | 1 -> # 849 "lib/read.mll" # 849 "lib/read.mll" ( () ) # 2721 "lib/read.ml" # 2722 "lib/read.ml" | 2 -> # 850 "lib/read.mll" # 850 "lib/read.mll" ( long_error "Expected ':' or '>' but found" v lexbuf ) # 2726 "lib/read.ml" # 2727 "lib/read.ml" | 3 -> # 851 "lib/read.mll" # 851 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2731 "lib/read.ml" # 2732 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_finish_skip_variant_rec v lexbuf __ocaml_lex_state and skip_ident v lexbuf = __ocaml_lex_skip_ident_rec v lexbuf 394 and __ocaml_lex_skip_ident_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 854 "lib/read.mll" # 854 "lib/read.mll" ( finish_skip_stringlit v lexbuf ) # 2743 "lib/read.ml" # 2744 "lib/read.ml" | 1 -> # 855 "lib/read.mll" # 855 "lib/read.mll" ( () ) # 2748 "lib/read.ml" # 2749 "lib/read.ml" | 2 -> # 856 "lib/read.mll" # 856 "lib/read.mll" ( long_error "Expected string or identifier but found" v lexbuf ) # 2753 "lib/read.ml" # 2754 "lib/read.ml" | 3 -> # 857 "lib/read.mll" # 857 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2758 "lib/read.ml" # 2759 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_skip_ident_rec v lexbuf __ocaml_lex_state and buffer_json v lexbuf = __ocaml_lex_buffer_json_rec v lexbuf 399 and __ocaml_lex_buffer_json_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 870 "lib/read.mll" # 870 "lib/read.mll" ( add_lexeme v.buf lexbuf ) # 2770 "lib/read.ml" # 2771 "lib/read.ml" | 1 -> # 872 "lib/read.mll" # 872 "lib/read.mll" ( finish_buffer_stringlit v lexbuf ) # 2775 "lib/read.ml" # 2776 "lib/read.ml" | 2 -> # 873 "lib/read.mll" # 873 "lib/read.mll" ( try Buffer.add_char v.buf '{'; buffer_space v lexbuf; buffer_object_end v lexbuf; buffer_ident v lexbuf; buffer_space v lexbuf; buffer_colon v lexbuf; buffer_space v lexbuf; buffer_json v lexbuf; while true do buffer_space v lexbuf; buffer_object_sep v lexbuf; buffer_space v lexbuf; buffer_ident v lexbuf; buffer_space v lexbuf; buffer_colon v lexbuf; buffer_space v lexbuf; buffer_json v lexbuf; done; assert false with End_of_object -> () ) # 2802 "lib/read.ml" # 2803 "lib/read.ml" | 3 -> # 897 "lib/read.mll" # 897 "lib/read.mll" ( try Buffer.add_char v.buf '['; buffer_space v lexbuf; buffer_array_end v lexbuf; buffer_json v lexbuf; while true do buffer_space v lexbuf; buffer_array_sep v lexbuf; buffer_space v lexbuf; buffer_json v lexbuf; done; assert false with End_of_array -> () ) # 2821 "lib/read.ml" # 2822 "lib/read.ml" | 4 -> # 913 "lib/read.mll" # 913 "lib/read.mll" ( # 915 "lib/read.mll" try Buffer.add_char v.buf '('; buffer_space v lexbuf; buffer_tuple_end v lexbuf; buffer_json v lexbuf; while true do buffer_space v lexbuf; buffer_tuple_sep v lexbuf; buffer_space v lexbuf; buffer_json v lexbuf; done; assert false with End_of_tuple -> () # 932 "lib/read.mll" ) # 2845 "lib/read.ml" # 2846 "lib/read.ml" | 5 -> # 934 "lib/read.mll" # 934 "lib/read.mll" ( # 936 "lib/read.mll" Buffer.add_char v.buf '<'; buffer_space v lexbuf; buffer_ident v lexbuf; buffer_space v lexbuf; finish_buffer_variant v lexbuf # 944 "lib/read.mll" ) # 2860 "lib/read.ml" # 2861 "lib/read.ml" | 6 -> # 946 "lib/read.mll" # 946 "lib/read.mll" ( add_lexeme v.buf lexbuf; buffer_json v lexbuf ) # 2865 "lib/read.ml" # 2866 "lib/read.ml" | 7 -> # 947 "lib/read.mll" # 947 "lib/read.mll" ( Buffer.add_string v.buf "/*"; finish_buffer_comment v lexbuf; buffer_json v lexbuf ) # 2872 "lib/read.ml" # 2873 "lib/read.ml" | 8 -> # 950 "lib/read.mll" # 950 "lib/read.mll" ( Buffer.add_char v.buf '\n'; newline v lexbuf; buffer_json v lexbuf ) # 2879 "lib/read.ml" # 2880 "lib/read.ml" | 9 -> # 953 "lib/read.mll" # 953 "lib/read.mll" ( add_lexeme v.buf lexbuf; buffer_json v lexbuf ) # 2884 "lib/read.ml" # 2885 "lib/read.ml" | 10 -> # 954 "lib/read.mll" # 954 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2889 "lib/read.ml" # 2890 "lib/read.ml" | 11 -> # 955 "lib/read.mll" # 955 "lib/read.mll" ( long_error "Invalid token" v lexbuf ) # 2894 "lib/read.ml" # 2895 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_buffer_json_rec v lexbuf __ocaml_lex_state and finish_buffer_stringlit v lexbuf = __ocaml_lex_finish_buffer_stringlit_rec v lexbuf 450 and __ocaml_lex_finish_buffer_stringlit_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 961 "lib/read.mll" # 961 "lib/read.mll" ( Buffer.add_char v.buf '"'; add_lexeme v.buf lexbuf ) # 2908 "lib/read.ml" # 2909 "lib/read.ml" | 1 -> # 964 "lib/read.mll" # 964 "lib/read.mll" ( long_error "Invalid string literal" v lexbuf ) # 2913 "lib/read.ml" # 2914 "lib/read.ml" | 2 -> # 965 "lib/read.mll" # 965 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2918 "lib/read.ml" # 2919 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_finish_buffer_stringlit_rec v lexbuf __ocaml_lex_state and finish_buffer_variant v lexbuf = __ocaml_lex_finish_buffer_variant_rec v lexbuf 461 and __ocaml_lex_finish_buffer_variant_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 968 "lib/read.mll" # 968 "lib/read.mll" ( Buffer.add_char v.buf ':'; buffer_json v lexbuf; buffer_space v lexbuf; buffer_gt v lexbuf ) # 2933 "lib/read.ml" # 2934 "lib/read.ml" | 1 -> # 972 "lib/read.mll" # 972 "lib/read.mll" ( Buffer.add_char v.buf '>' ) # 2938 "lib/read.ml" # 2939 "lib/read.ml" | 2 -> # 973 "lib/read.mll" # 973 "lib/read.mll" ( long_error "Expected ':' or '>' but found" v lexbuf ) # 2943 "lib/read.ml" # 2944 "lib/read.ml" | 3 -> # 974 "lib/read.mll" # 974 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2948 "lib/read.ml" # 2949 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_finish_buffer_variant_rec v lexbuf __ocaml_lex_state and buffer_ident v lexbuf = __ocaml_lex_buffer_ident_rec v lexbuf 466 and __ocaml_lex_buffer_ident_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 977 "lib/read.mll" # 977 "lib/read.mll" ( finish_buffer_stringlit v lexbuf ) # 2960 "lib/read.ml" # 2961 "lib/read.ml" | 1 -> # 978 "lib/read.mll" # 978 "lib/read.mll" ( add_lexeme v.buf lexbuf ) # 2965 "lib/read.ml" # 2966 "lib/read.ml" | 2 -> # 979 "lib/read.mll" # 979 "lib/read.mll" ( long_error "Expected string or identifier but found" v lexbuf ) # 2970 "lib/read.ml" # 2971 "lib/read.ml" | 3 -> # 980 "lib/read.mll" # 980 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2975 "lib/read.ml" # 2976 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_buffer_ident_rec v lexbuf __ocaml_lex_state and buffer_space v lexbuf = __ocaml_lex_buffer_space_rec v lexbuf 471 and __ocaml_lex_buffer_space_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 983 "lib/read.mll" # 983 "lib/read.mll" ( add_lexeme v.buf lexbuf; newline v lexbuf; buffer_space v lexbuf ) # 2990 "lib/read.ml" # 2991 "lib/read.ml" | 1 -> # 987 "lib/read.mll" # 987 "lib/read.mll" ( Buffer.add_string v.buf "/*"; finish_buffer_comment v lexbuf; buffer_space v lexbuf ) # 2998 "lib/read.ml" # 2999 "lib/read.ml" | 2 -> # 991 "lib/read.mll" # 991 "lib/read.mll" ( Buffer.add_char v.buf '\n'; newline v lexbuf; buffer_space v lexbuf ) # 3006 "lib/read.ml" # 3007 "lib/read.ml" | 3 -> # 995 "lib/read.mll" # 995 "lib/read.mll" ( add_lexeme v.buf lexbuf; buffer_space v lexbuf ) # 3013 "lib/read.ml" # 3014 "lib/read.ml" | 4 -> # 998 "lib/read.mll" # 998 "lib/read.mll" ( () ) # 3018 "lib/read.ml" # 3019 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_buffer_space_rec v lexbuf __ocaml_lex_state and buffer_object_end v lexbuf = __ocaml_lex_buffer_object_end_rec v lexbuf 478 and __ocaml_lex_buffer_object_end_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 1001 "lib/read.mll" # 1001 "lib/read.mll" ( Buffer.add_char v.buf '}'; raise End_of_object ) # 3032 "lib/read.ml" # 3033 "lib/read.ml" | 1 -> # 1004 "lib/read.mll" # 1004 "lib/read.mll" ( () ) # 3037 "lib/read.ml" # 3038 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_buffer_object_end_rec v lexbuf __ocaml_lex_state and buffer_object_sep v lexbuf = __ocaml_lex_buffer_object_sep_rec v lexbuf 480 and __ocaml_lex_buffer_object_sep_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 1007 "lib/read.mll" # 1007 "lib/read.mll" ( Buffer.add_char v.buf ',' ) # 3049 "lib/read.ml" # 3050 "lib/read.ml" | 1 -> # 1008 "lib/read.mll" # 1008 "lib/read.mll" ( Buffer.add_char v.buf '}'; raise End_of_object ) # 3054 "lib/read.ml" # 3055 "lib/read.ml" | 2 -> # 1009 "lib/read.mll" # 1009 "lib/read.mll" ( long_error "Expected ',' or '}' but found" v lexbuf ) # 3059 "lib/read.ml" # 3060 "lib/read.ml" | 3 -> # 1010 "lib/read.mll" # 1010 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 3064 "lib/read.ml" # 3065 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_buffer_object_sep_rec v lexbuf __ocaml_lex_state and buffer_array_end v lexbuf = __ocaml_lex_buffer_array_end_rec v lexbuf 485 and __ocaml_lex_buffer_array_end_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 1013 "lib/read.mll" # 1013 "lib/read.mll" ( Buffer.add_char v.buf ']'; raise End_of_array ) # 3076 "lib/read.ml" # 3077 "lib/read.ml" | 1 -> # 1014 "lib/read.mll" # 1014 "lib/read.mll" ( () ) # 3081 "lib/read.ml" # 3082 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_buffer_array_end_rec v lexbuf __ocaml_lex_state and buffer_array_sep v lexbuf = __ocaml_lex_buffer_array_sep_rec v lexbuf 487 and __ocaml_lex_buffer_array_sep_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 1017 "lib/read.mll" # 1017 "lib/read.mll" ( Buffer.add_char v.buf ',' ) # 3093 "lib/read.ml" # 3094 "lib/read.ml" | 1 -> # 1018 "lib/read.mll" # 1018 "lib/read.mll" ( Buffer.add_char v.buf ']'; raise End_of_array ) # 3098 "lib/read.ml" # 3099 "lib/read.ml" | 2 -> # 1019 "lib/read.mll" # 1019 "lib/read.mll" ( long_error "Expected ',' or ']' but found" v lexbuf ) # 3103 "lib/read.ml" # 3104 "lib/read.ml" | 3 -> # 1020 "lib/read.mll" # 1020 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 3108 "lib/read.ml" # 3109 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_buffer_array_sep_rec v lexbuf __ocaml_lex_state and buffer_tuple_end v lexbuf = __ocaml_lex_buffer_tuple_end_rec v lexbuf 492 and __ocaml_lex_buffer_tuple_end_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 1023 "lib/read.mll" # 1023 "lib/read.mll" ( Buffer.add_char v.buf ')'; raise End_of_tuple ) # 3122 "lib/read.ml" # 3123 "lib/read.ml" | 1 -> # 1026 "lib/read.mll" # 1026 "lib/read.mll" ( () ) # 3127 "lib/read.ml" # 3128 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_buffer_tuple_end_rec v lexbuf __ocaml_lex_state and buffer_tuple_sep v lexbuf = __ocaml_lex_buffer_tuple_sep_rec v lexbuf 494 and __ocaml_lex_buffer_tuple_sep_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 1029 "lib/read.mll" # 1029 "lib/read.mll" ( Buffer.add_char v.buf ',' ) # 3139 "lib/read.ml" # 3140 "lib/read.ml" | 1 -> # 1030 "lib/read.mll" # 1030 "lib/read.mll" ( Buffer.add_char v.buf ')'; raise End_of_tuple ) # 3144 "lib/read.ml" # 3145 "lib/read.ml" | 2 -> # 1031 "lib/read.mll" # 1031 "lib/read.mll" ( long_error "Expected ',' or ')' but found" v lexbuf ) # 3149 "lib/read.ml" # 3150 "lib/read.ml" | 3 -> # 1032 "lib/read.mll" # 1032 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 3154 "lib/read.ml" # 3155 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_buffer_tuple_sep_rec v lexbuf __ocaml_lex_state and buffer_colon v lexbuf = __ocaml_lex_buffer_colon_rec v lexbuf 499 and __ocaml_lex_buffer_colon_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 1035 "lib/read.mll" # 1035 "lib/read.mll" ( Buffer.add_char v.buf ':' ) # 3166 "lib/read.ml" # 3167 "lib/read.ml" | 1 -> # 1036 "lib/read.mll" # 1036 "lib/read.mll" ( long_error "Expected ':' but found" v lexbuf ) # 3171 "lib/read.ml" # 3172 "lib/read.ml" | 2 -> # 1037 "lib/read.mll" # 1037 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 3176 "lib/read.ml" # 3177 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_buffer_colon_rec v lexbuf __ocaml_lex_state and buffer_gt v lexbuf = __ocaml_lex_buffer_gt_rec v lexbuf 503 and __ocaml_lex_buffer_gt_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 1040 "lib/read.mll" # 1040 "lib/read.mll" ( Buffer.add_char v.buf '>' ) # 3188 "lib/read.ml" # 3189 "lib/read.ml" | 1 -> # 1041 "lib/read.mll" # 1041 "lib/read.mll" ( long_error "Expected '>' but found" v lexbuf ) # 3193 "lib/read.ml" # 3194 "lib/read.ml" | 2 -> # 1042 "lib/read.mll" # 1042 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 3198 "lib/read.ml" # 3199 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_buffer_gt_rec v lexbuf __ocaml_lex_state and finish_buffer_comment v lexbuf = __ocaml_lex_finish_buffer_comment_rec v lexbuf 507 and __ocaml_lex_finish_buffer_comment_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 1045 "lib/read.mll" # 1045 "lib/read.mll" ( Buffer.add_string v.buf "*/" ) # 3210 "lib/read.ml" # 3211 "lib/read.ml" | 1 -> # 1046 "lib/read.mll" # 1046 "lib/read.mll" ( long_error "Unterminated comment" v lexbuf ) # 3215 "lib/read.ml" # 3216 "lib/read.ml" | 2 -> # 1047 "lib/read.mll" # 1047 "lib/read.mll" ( Buffer.add_char v.buf '\n'; newline v lexbuf; finish_buffer_comment v lexbuf ) # 3222 "lib/read.ml" # 3223 "lib/read.ml" | 3 -> # 1050 "lib/read.mll" # 1050 "lib/read.mll" ( add_lexeme v.buf lexbuf; finish_buffer_comment v lexbuf ) # 3227 "lib/read.ml" # 3228 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_finish_buffer_comment_rec v lexbuf __ocaml_lex_state and junk lexbuf = __ocaml_lex_junk_rec lexbuf 513 and __ocaml_lex_junk_rec lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 1053 "lib/read.mll" # 1053 "lib/read.mll" ( Lexing.lexeme lexbuf ) # 3239 "lib/read.ml" # 3240 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_junk_rec lexbuf __ocaml_lex_state ;; # 1055 "lib/read.mll" # 1056 "lib/read.mll" let _ = (read_json : lexer_state -> Lexing.lexbuf -> t) let read_t = read_json let () = read_junk := junk let read_int8 v lexbuf = let n = read_int v lexbuf in if n < 0 || n > 255 then lexer_error "Int8 overflow" v lexbuf else char_of_int n let read_list read_cell v lexbuf = List.rev (read_list_rev read_cell v lexbuf) let array_of_rev_list l = match l with [] -> [| |] | x :: tl -> let len = List.length l in let a = Array.make len x in let r = ref tl in for i = len - 2 downto 0 do a.(i) <- List.hd !r; r := List.tl !r done; a let read_array read_cell v lexbuf = let l = read_list_rev read_cell v lexbuf in array_of_rev_list l (* Read a JSON object, reading the keys into OCaml strings (provided for backward compatibility) *) let read_fields read_field init_acc v = read_abstract_fields read_ident read_field init_acc v let finish v lexbuf = read_space v lexbuf; if not (read_eof lexbuf) then long_error "Junk after end of JSON value:" v lexbuf let init_lexer = init_lexer let from_lexbuf v ?(stream = false) lexbuf = read_space v lexbuf; let x = if read_eof lexbuf then raise End_of_input else read_json v lexbuf in if not stream then finish v lexbuf; x let from_string ?buf ?fname ?lnum s = try let lexbuf = Lexing.from_string s in let v = init_lexer ?buf ?fname ?lnum () in from_lexbuf v lexbuf with End_of_input -> json_error "Blank input data" let from_channel ?buf ?fname ?lnum ic = try let lexbuf = Lexing.from_channel ic in let v = init_lexer ?buf ?fname ?lnum () in from_lexbuf v lexbuf with End_of_input -> json_error "Blank input data" let from_file ?buf ?fname ?lnum file = let ic = open_in file in try let x = from_channel ?buf ?fname ?lnum ic in close_in ic; x with e -> close_in_noerr ic; raise e exception Finally of exn * exn let seq_from_lexbuf v ?(fin = fun () -> ()) lexbuf = let stream = Some true in let rec f () = try Seq.Cons (from_lexbuf v ?stream lexbuf, f) with End_of_input -> fin (); Seq.Nil | e -> (try fin () with fin_e -> raise (Finally (e, fin_e))); raise e in f let seq_from_string ?buf ?fname ?lnum s = let v = init_lexer ?buf ?fname ?lnum () in seq_from_lexbuf v (Lexing.from_string s) let seq_from_channel ?buf ?fin ?fname ?lnum ic = let lexbuf = Lexing.from_channel ic in let v = init_lexer ?buf ?fname ?lnum () in seq_from_lexbuf v ?fin lexbuf let seq_from_file ?buf ?fname ?lnum file = let ic = open_in file in let fin () = close_in ic in let fname = match fname with None -> Some file | x -> x in let lexbuf = Lexing.from_channel ic in let v = init_lexer ?buf ?fname ?lnum () in seq_from_lexbuf v ~fin lexbuf type json_line = [ `Json of t | `Exn of exn ] let lineseq_from_channel ?buf ?(fin = fun () -> ()) ?fname ?lnum:(lnum0 = 1) ic = let buf = match buf with None -> Some (Buffer.create 256) | Some _ -> buf in let rec f lnum = fun () -> try let line = input_line ic in Seq.Cons (`Json (from_string ?buf ?fname ~lnum line), f (lnum + 1)) with End_of_file -> fin (); Seq.Nil | e -> Seq.Cons (`Exn e, f (lnum + 1)) in f lnum0 let lineseq_from_file ?buf ?fname ?lnum file = let ic = open_in file in let fin () = close_in ic in let fname = match fname with None -> Some file | x -> x in lineseq_from_channel ?buf ~fin ?fname ?lnum ic let prettify ?std s = pretty_to_string ?std (from_string s) let compact ?std s = to_string (from_string s) # 3408 "lib/read.ml" # 69 "yojson.cppo.ml" module Util = struct # 1 "util.ml" exception Type_error of string * t let typeof = function | `Assoc _ -> "object" | `Bool _ -> "bool" | `Float _ -> "float" | `Int _ -> "int" | `List _ -> "array" | `Null -> "null" | `String _ -> "string" | `Intlit _ -> "intlit" | `Tuple _ -> "tuple" | `Variant _ -> "variant" let typerr msg js = raise (Type_error (msg ^ typeof js, js)) exception Undefined of string * t let assoc name obj = try List.assoc name obj with Not_found -> `Null let member name = function | `Assoc obj -> assoc name obj | js -> typerr ("Can't get member '" ^ name ^ "' of non-object type ") js let index i = function | `List l as js -> let len = List.length l in let wrapped_index = if i < 0 then len + i else i in if wrapped_index < 0 || wrapped_index >= len then raise (Undefined ("Index " ^ string_of_int i ^ " out of bounds", js)) else List.nth l wrapped_index | js -> typerr ("Can't get index " ^ string_of_int i ^ " of non-array type ") js let map f = function | `List l -> `List (List.map f l) | js -> typerr "Can't map function over non-array type " js let to_assoc = function | `Assoc obj -> obj | js -> typerr "Expected object, got " js let to_option f = function | `Null -> None | x -> Some (f x) let to_bool = function | `Bool b -> b | js -> typerr "Expected bool, got " js let to_bool_option = function | `Bool b -> Some b | `Null -> None | js -> typerr "Expected bool or null, got " js let to_number = function | `Int i -> float i | `Float f -> f | js -> typerr "Expected number, got " js let to_number_option = function | `Int i -> Some (float i) | `Float f -> Some f | `Null -> None | js -> typerr "Expected number or null, got " js let to_float = function | `Float f -> f | js -> typerr "Expected float, got " js let to_float_option = function | `Float f -> Some f | `Null -> None | js -> typerr "Expected float or null, got " js let to_int = function | `Int i -> i | js -> typerr "Expected int, got " js let to_int_option = function | `Int i -> Some i | `Null -> None | js -> typerr "Expected int or null, got " js let to_list = function | `List l -> l | js -> typerr "Expected array, got " js let to_string = function | `String s -> s | js -> typerr "Expected string, got " js let to_string_option = function | `String s -> Some s | `Null -> None | js -> typerr "Expected string or null, got " js let convert_each f = function | `List l -> List.map f l | js -> typerr "Can't convert each element of non-array type " js let rec rev_filter_map f acc l = match l with [] -> acc | x :: tl -> match f x with None -> rev_filter_map f acc tl | Some y -> rev_filter_map f (y :: acc) tl let filter_map f l = List.rev (rev_filter_map f [] l) let rec rev_flatten acc l = match l with [] -> acc | x :: tl -> match x with `List l2 -> rev_flatten (List.rev_append l2 acc) tl | _ -> rev_flatten acc tl let flatten l = List.rev (rev_flatten [] l) let filter_index i l = filter_map ( function `List l -> (try Some (List.nth l i) with _ -> None) | _ -> None ) l let filter_list l = filter_map ( function `List l -> Some l | _ -> None ) l let filter_member k l = filter_map ( function `Assoc l -> (try Some (List.assoc k l) with _ -> None) | _ -> None ) l let filter_assoc l = filter_map ( function `Assoc l -> Some l | _ -> None ) l let filter_bool l = filter_map ( function `Bool x -> Some x | _ -> None ) l let filter_int l = filter_map ( function `Int x -> Some x | _ -> None ) l let filter_float l = filter_map ( function `Float x -> Some x | _ -> None ) l let filter_number l = filter_map ( function `Int x -> Some (float x) | `Float x -> Some x | _ -> None ) l let filter_string l = filter_map ( function `String x -> Some x | _ -> None ) l let keys o = to_assoc o |> List.map (fun (key, _) -> key) let values o = to_assoc o |> List.map (fun (_, value) -> value) let combine (first : t) (second : t) = match (first, second) with | (`Assoc a, `Assoc b) -> (`Assoc (a @ b) : t) | (a, b) -> raise (Invalid_argument "Expected two objects, check inputs") # 72 "yojson.cppo.ml" end # 79 "yojson.cppo.ml" end module Raw = struct # 1 "type.ml" (** {3 Type of the JSON tree} *) type t = [ | `Null | `Bool of bool # 11 "type.ml" | `Intlit of string # 17 "type.ml" | `Floatlit of string # 23 "type.ml" | `Stringlit of string # 25 "type.ml" | `Assoc of (string * t) list | `List of t list # 28 "type.ml" | `Tuple of t list # 31 "type.ml" | `Variant of (string * t option) # 33 "type.ml" ] (** All possible cases defined in Yojson: - `Null: JSON null - `Bool of bool: JSON boolean - `Int of int: JSON number without decimal point or exponent. - `Intlit of string: JSON number without decimal point or exponent, preserved as a string. - `Float of float: JSON number, Infinity, -Infinity or NaN. - `Floatlit of string: JSON number, Infinity, -Infinity or NaN, preserved as a string. - `String of string: JSON string. Bytes in the range 128-255 are preserved as-is without encoding validation for both reading and writing. - `Stringlit of string: JSON string literal including the double quotes. - `Assoc of (string * json) list: JSON object. - `List of json list: JSON array. - `Tuple of json list: Tuple (non-standard extension of JSON). Syntax: [("abc", 123)]. - `Variant of (string * json option): Variant (non-standard extension of JSON). Syntax: [<"Foo">] or [<"Bar":123>]. *) (* Note to adventurers: ocamldoc does not support inline comments on each polymorphic variant, and cppo doesn't allow to concatenate comments, so it would be complicated to document only the cases that are preserved by cppo in the type definition. *) # 1 "write.ml" (* included: type.ml *) let hex n = Char.chr ( if n < 10 then n + 48 else n + 87 ) let write_special src start stop ob str = Buffer.add_substring ob src !start (stop - !start); Buffer.add_string ob str; start := stop + 1 let write_control_char src start stop ob c = Buffer.add_substring ob src !start (stop - !start); Buffer.add_string ob "\\u00"; Buffer.add_char ob (hex (Char.code c lsr 4)); Buffer.add_char ob (hex (Char.code c land 0xf)); start := stop + 1 let finish_string src start ob = try Buffer.add_substring ob src !start (String.length src - !start) with exc -> Printf.eprintf "src=%S start=%i len=%i\n%!" src !start (String.length src - !start); raise exc let write_string_body ob s = let start = ref 0 in for i = 0 to String.length s - 1 do match s.[i] with '"' -> write_special s start i ob "\\\"" | '\\' -> write_special s start i ob "\\\\" | '\b' -> write_special s start i ob "\\b" | '\012' -> write_special s start i ob "\\f" | '\n' -> write_special s start i ob "\\n" | '\r' -> write_special s start i ob "\\r" | '\t' -> write_special s start i ob "\\t" | '\x00'..'\x1F' | '\x7F' as c -> write_control_char s start i ob c | _ -> () done; finish_string s start ob let write_string ob s = Buffer.add_char ob '"'; write_string_body ob s; Buffer.add_char ob '"' let json_string_of_string s = let ob = Buffer.create 10 in write_string ob s; Buffer.contents ob let test_string () = let s = Bytes.create 256 in for i = 0 to 255 do Bytes.set s i (Char.chr i) done; json_string_of_string (Bytes.to_string s) let write_null ob () = Buffer.add_string ob "null" let write_bool ob x = Buffer.add_string ob (if x then "true" else "false") let max_digits = max (String.length (string_of_int max_int)) (String.length (string_of_int min_int)) let dec n = Char.chr (n + 48) let rec write_digits s x = if x = 0 then () else let d = x mod 10 in write_digits s (x / 10); Buffer.add_char s (dec (abs d)) let write_int ob x = if x > 0 then write_digits ob x else if x < 0 then ( Buffer.add_char ob '-'; write_digits ob x ) else Buffer.add_char ob '0' let json_string_of_int i = string_of_int i (* Ensure that the float is not printed as an int. This is not required by JSON, but useful in order to guarantee reversibility. *) let float_needs_period s = try for i = 0 to String.length s - 1 do match s.[i] with '0'..'9' | '-' -> () | _ -> raise Exit done; true with Exit -> false (* Guarantees that a sufficient number of digits are printed in order to allow reversibility. *) let write_float ob x = match classify_float x with FP_nan -> Buffer.add_string ob "NaN" | FP_infinite -> Buffer.add_string ob (if x > 0. then "Infinity" else "-Infinity") | _ -> let s1 = Printf.sprintf "%.16g" x in let s = if float_of_string s1 = x then s1 else Printf.sprintf "%.17g" x in Buffer.add_string ob s; if float_needs_period s then Buffer.add_string ob ".0" let write_normal_float_prec significant_figures ob x = let open Printf in let s = match significant_figures with 1 -> sprintf "%.1g" x | 2 -> sprintf "%.2g" x | 3 -> sprintf "%.3g" x | 4 -> sprintf "%.4g" x | 5 -> sprintf "%.5g" x | 6 -> sprintf "%.6g" x | 7 -> sprintf "%.7g" x | 8 -> sprintf "%.8g" x | 9 -> sprintf "%.9g" x | 10 -> sprintf "%.10g" x | 11 -> sprintf "%.11g" x | 12 -> sprintf "%.12g" x | 13 -> sprintf "%.13g" x | 14 -> sprintf "%.14g" x | 15 -> sprintf "%.15g" x | 16 -> sprintf "%.16g" x | _ -> sprintf "%.17g" x in Buffer.add_string ob s; if float_needs_period s then Buffer.add_string ob ".0" (* used by atdgen *) let write_float_prec significant_figures ob x = match classify_float x with FP_nan -> Buffer.add_string ob "NaN" | FP_infinite -> Buffer.add_string ob (if x > 0. then "Infinity" else "-Infinity") | _ -> write_normal_float_prec significant_figures ob x let json_string_of_float x = let ob = Buffer.create 20 in write_float ob x; Buffer.contents ob let write_std_float ob x = match classify_float x with FP_nan -> json_error "NaN value not allowed in standard JSON" | FP_infinite -> json_error (if x > 0. then "Infinity value not allowed in standard JSON" else "-Infinity value not allowed in standard JSON") | _ -> let s1 = Printf.sprintf "%.16g" x in let s = if float_of_string s1 = x then s1 else Printf.sprintf "%.17g" x in Buffer.add_string ob s; if float_needs_period s then Buffer.add_string ob ".0" (* used by atdgen *) let write_std_float_prec significant_figures ob x = match classify_float x with FP_nan -> json_error "NaN value not allowed in standard JSON" | FP_infinite -> json_error (if x > 0. then "Infinity value not allowed in standard JSON" else "-Infinity value not allowed in standard JSON") | _ -> write_normal_float_prec significant_figures ob x let std_json_string_of_float x = let ob = Buffer.create 20 in write_std_float ob x; Buffer.contents ob let test_float () = let l = [ 0.; 1.; -1. ] in let l = l @ List.map (fun x -> 2. *. x +. 1.) l in let l = l @ List.map (fun x -> x /. sqrt 2.) l in let l = l @ List.map (fun x -> x *. sqrt 3.) l in let l = l @ List.map cos l in let l = l @ List.map (fun x -> x *. 1.23e50) l in let l = l @ [ infinity; neg_infinity ] in List.iter ( fun x -> let s = Printf.sprintf "%.17g" x in let y = float_of_string s in Printf.printf "%g %g %S %B\n" x y s (x = y) ) l (* let () = test_float () *) let write_intlit = Buffer.add_string let write_floatlit = Buffer.add_string let write_stringlit = Buffer.add_string let rec iter2_aux f_elt f_sep x = function [] -> () | y :: l -> f_sep x; f_elt x y; iter2_aux f_elt f_sep x l let iter2 f_elt f_sep x = function [] -> () | y :: l -> f_elt x y; iter2_aux f_elt f_sep x l let f_sep ob = Buffer.add_char ob ',' let rec write_json ob (x : t) = match x with `Null -> write_null ob () | `Bool b -> write_bool ob b # 267 "write.ml" | `Intlit s -> Buffer.add_string ob s # 273 "write.ml" | `Floatlit s -> Buffer.add_string ob s # 279 "write.ml" | `Stringlit s -> Buffer.add_string ob s # 281 "write.ml" | `Assoc l -> write_assoc ob l | `List l -> write_list ob l # 284 "write.ml" | `Tuple l -> write_tuple ob l # 287 "write.ml" | `Variant (s, o) -> write_variant ob s o # 290 "write.ml" and write_assoc ob l = let f_elt ob (s, x) = write_string ob s; Buffer.add_char ob ':'; write_json ob x in Buffer.add_char ob '{'; iter2 f_elt f_sep ob l; Buffer.add_char ob '}'; and write_list ob l = Buffer.add_char ob '['; iter2 write_json f_sep ob l; Buffer.add_char ob ']' # 306 "write.ml" and write_tuple ob l = Buffer.add_char ob '('; iter2 write_json f_sep ob l; Buffer.add_char ob ')' # 313 "write.ml" and write_variant ob s o = Buffer.add_char ob '<'; write_string ob s; (match o with None -> () | Some x -> Buffer.add_char ob ':'; write_json ob x ); Buffer.add_char ob '>' # 325 "write.ml" let write_t = write_json let rec write_std_json ob (x : t) = match x with `Null -> write_null ob () | `Bool b -> write_bool ob b # 335 "write.ml" | `Intlit s -> Buffer.add_string ob s # 341 "write.ml" | `Floatlit s -> Buffer.add_string ob s # 347 "write.ml" | `Stringlit s -> Buffer.add_string ob s # 349 "write.ml" | `Assoc l -> write_std_assoc ob l | `List l -> write_std_list ob l # 352 "write.ml" | `Tuple l -> write_std_tuple ob l # 355 "write.ml" | `Variant (s, o) -> write_std_variant ob s o # 358 "write.ml" and write_std_assoc ob l = let f_elt ob (s, x) = write_string ob s; Buffer.add_char ob ':'; write_std_json ob x in Buffer.add_char ob '{'; iter2 f_elt f_sep ob l; Buffer.add_char ob '}'; and write_std_list ob l = Buffer.add_char ob '['; iter2 write_std_json f_sep ob l; Buffer.add_char ob ']' and write_std_tuple ob l = Buffer.add_char ob '['; iter2 write_std_json f_sep ob l; Buffer.add_char ob ']' # 379 "write.ml" and write_std_variant ob s o = match o with None -> write_string ob s | Some x -> Buffer.add_char ob '['; write_string ob s; Buffer.add_char ob ','; write_std_json ob x; Buffer.add_char ob ']' # 391 "write.ml" let to_buffer ?(suf = "") ?(std = false) ob x = if std then write_std_json ob x else write_json ob x; Buffer.add_string ob suf let to_string ?buf ?(len = 256) ?(suf = "") ?std x = let ob = match buf with None -> Buffer.create len | Some ob -> Buffer.clear ob; ob in to_buffer ~suf ?std ob x; let s = Buffer.contents ob in Buffer.clear ob; s let to_channel ?buf ?(len=4096) ?(suf = "") ?std oc x = let ob = match buf with None -> Buffer.create len | Some ob -> Buffer.clear ob; ob in to_buffer ~suf ?std ob x; Buffer.output_buffer oc ob; Buffer.clear ob let to_output ?buf ?(len=4096) ?(suf = "") ?std out x = let ob = match buf with None -> Buffer.create len | Some ob -> Buffer.clear ob; ob in to_buffer ~suf ?std ob x; out#output (Buffer.contents ob) 0 (Buffer.length ob); Buffer.clear ob let to_file ?len ?std ?(suf = "\n") file x = let oc = open_out file in try to_channel ?len ~suf ?std oc x; close_out oc with e -> close_out_noerr oc; raise e let seq_to_buffer ?(suf = "\n") ?std ob st = Seq.iter (to_buffer ~suf ?std ob) st let seq_to_string ?buf ?(len = 256) ?(suf = "\n") ?std st = let ob = match buf with None -> Buffer.create len | Some ob -> Buffer.clear ob; ob in seq_to_buffer ~suf ?std ob st; let s = Buffer.contents ob in Buffer.clear ob; s let seq_to_channel ?buf ?(len=2096) ?(suf = "\n") ?std oc seq = let ob = match buf with None -> Buffer.create len | Some ob -> Buffer.clear ob; ob in Seq.iter (fun json -> to_buffer ~suf ?std ob json; Buffer.output_buffer oc ob; Buffer.clear ob; ) seq let seq_to_file ?len ?(suf = "\n") ?std file st = let oc = open_out file in try seq_to_channel ?len ~suf ?std oc st; close_out oc with e -> close_out_noerr oc; raise e let rec sort = function | `Assoc l -> let l = List.rev (List.rev_map (fun (k, v) -> (k, sort v)) l) in `Assoc (List.stable_sort (fun (a, _) (b, _) -> String.compare a b) l) | `List l -> `List (List.rev (List.rev_map sort l)) # 485 "write.ml" | `Tuple l -> `Tuple (List.rev (List.rev_map sort l)) # 489 "write.ml" | `Variant (k, Some v) as x -> let v' = sort v in if v == v' then x else `Variant (k, Some v') # 495 "write.ml" | x -> x # 90 "yojson.cppo.ml" module Pretty = struct # 1 "pretty.ml" (* Pretty-print JSON data in an attempt to maximize readability. 1. What fits on one line stays on one line. 2. What doesn't fit on one line gets printed more vertically so as to not exceed a reasonable page width, if possible. Arrays containing only simple elements ("atoms") are pretty-printed with end-of-line wrapping like ordinary text: [ "hello", "hello", "hello", "hello", "hello", "hello", "hello", "hello", "hello", "hello", "hello", "hello", "hello", "hello", "hello", "hello" ] Other arrays are printed either horizontally or vertically depending on whether they fit on a single line: [ { "hello": "world" }, { "hello": "world" }, { "hello": "world" } ] or [ { "hello": "world" }, { "hello": "world" }, { "hello": "world" }, { "hello": "world" } ] *) let pp_list sep ppx out l = let pp_sep out () = Format.fprintf out "%s@ " sep in Format.pp_print_list ~pp_sep ppx out l let is_atom (x: [> t]) = match x with | `Null | `Bool _ | `Int _ | `Float _ | `String _ | `Intlit _ | `Floatlit _ | `Stringlit _ | `List [] | `Assoc [] | `Tuple [] | `Variant (_, None) -> true | `List _ | `Assoc _ | `Tuple _ | `Variant (_, Some _) -> false let is_atom_list l = List.for_all is_atom l (* inside_box: indicates that we're already within a box that imposes a certain style and we shouldn't create a new one. This is used for printing field values like this: foo: [ bar ] rather than something else like foo: [ bar ] *) let rec format ~inside_box std (out:Format.formatter) (x:t) : unit = match x with | `Null -> Format.pp_print_string out "null" | `Bool x -> Format.pp_print_bool out x # 92 "pretty.ml" | `Intlit s -> Format.pp_print_string out s # 95 "pretty.ml" | `Floatlit s -> Format.pp_print_string out s # 98 "pretty.ml" | `Stringlit s -> Format.pp_print_string out s # 100 "pretty.ml" | `List [] -> Format.pp_print_string out "[]" | `List l -> if not inside_box then Format.fprintf out "@["; if is_atom_list l then (* use line wrapping like we would do for a paragraph of text *) Format.fprintf out "[@;<1 0>@[%a@]@;<1 -2>]" (pp_list "," (format ~inside_box:false std)) l else (* print the elements horizontally if they fit on the line, otherwise print them in a column *) Format.fprintf out "[@;<1 0>@[%a@]@;<1 -2>]" (pp_list "," (format ~inside_box:false std)) l; if not inside_box then Format.fprintf out "@]"; | `Assoc [] -> Format.pp_print_string out "{}" | `Assoc l -> if not inside_box then Format.fprintf out "@["; Format.fprintf out "{@;<1 0>%a@;<1 -2>}" (pp_list "," (format_field std)) l; if not inside_box then Format.fprintf out "@]"; # 119 "pretty.ml" | `Tuple l -> if std then format ~inside_box std out (`List l) else if l = [] then Format.pp_print_string out "()" else ( if not inside_box then Format.fprintf out "@["; Format.fprintf out "(@,%a@;<0 -2>)" (pp_list "," (format ~inside_box:false std)) l; if not inside_box then Format.fprintf out "@]"; ) # 132 "pretty.ml" | `Variant (s, None) -> if std then # 137 "pretty.ml" let representation = `Stringlit s in # 139 "pretty.ml" format ~inside_box std out representation else Format.fprintf out "<%s>" (json_string_of_string s) | `Variant (s, Some x) -> if std then # 148 "pretty.ml" let representation = `Stringlit s in # 150 "pretty.ml" format ~inside_box std out (`List [ representation; x ]) else let op = json_string_of_string s in Format.fprintf out "<@[%s: %a@]>" op (format ~inside_box:true std) x # 156 "pretty.ml" and format_field std out (name, x) = Format.fprintf out "@[%s: %a@]" (json_string_of_string name) (format ~inside_box:true std) x let pp ?(std = false) out x = Format.fprintf out "@[%a@]" (format ~inside_box:true std) (x :> t) let to_string ?std x = Format.asprintf "%a" (pp ?std) x let to_channel ?std oc x = let fmt = Format.formatter_of_out_channel oc in Format.fprintf fmt "%a@?" (pp ?std) x # 93 "yojson.cppo.ml" end # 1 "monomorphic.ml" let rec pp fmt = function | `Null -> Format.pp_print_string fmt "`Null" | `Bool x -> Format.fprintf fmt "`Bool (@["; Format.fprintf fmt "%B" x; Format.fprintf fmt "@])" # 15 "monomorphic.ml" | `Intlit x -> Format.fprintf fmt "`Intlit (@["; Format.fprintf fmt "%S" x; Format.fprintf fmt "@])" # 27 "monomorphic.ml" | `Floatlit x -> Format.fprintf fmt "`Floatlit (@["; Format.fprintf fmt "%S" x; Format.fprintf fmt "@])" # 39 "monomorphic.ml" | `Stringlit x -> Format.fprintf fmt "`Stringlit (@["; Format.fprintf fmt "%S" x; Format.fprintf fmt "@])" # 44 "monomorphic.ml" | `Assoc xs -> Format.fprintf fmt "`Assoc (@["; Format.fprintf fmt "@[<2>["; ignore (List.fold_left (fun sep (key, value) -> if sep then Format.fprintf fmt ";@ "; Format.fprintf fmt "(@["; Format.fprintf fmt "%S" key; Format.fprintf fmt ",@ "; pp fmt value; Format.fprintf fmt "@])"; true) false xs); Format.fprintf fmt "@,]@]"; Format.fprintf fmt "@])" | `List xs -> Format.fprintf fmt "`List (@["; Format.fprintf fmt "@[<2>["; ignore (List.fold_left (fun sep x -> if sep then Format.fprintf fmt ";@ "; pp fmt x; true) false xs); Format.fprintf fmt "@,]@]"; Format.fprintf fmt "@])" # 71 "monomorphic.ml" | `Tuple tup -> Format.fprintf fmt "`Tuple (@["; Format.fprintf fmt "@[<2>["; ignore (List.fold_left (fun sep e -> if sep then Format.fprintf fmt ";@ "; pp fmt e; true) false tup); Format.fprintf fmt "@,]@]"; Format.fprintf fmt "@])" # 84 "monomorphic.ml" | `Variant (name, value) -> Format.fprintf fmt "`Variant (@["; Format.fprintf fmt "(@["; Format.fprintf fmt "%S" name; Format.fprintf fmt ",@ "; (match value with | None -> Format.pp_print_string fmt "None" | Some x -> Format.pp_print_string fmt "(Some "; pp fmt x; Format.pp_print_string fmt ")"); Format.fprintf fmt "@])"; Format.fprintf fmt "@])" # 99 "monomorphic.ml" let show x = Format.asprintf "%a" pp x let rec equal a b = match a, b with | `Null, `Null -> true | `Bool a, `Bool b -> a = b # 110 "monomorphic.ml" | `Intlit a, `Intlit b -> a = b # 116 "monomorphic.ml" | `Floatlit a, `Floatlit b -> a = b # 122 "monomorphic.ml" | `Stringlit a, `Stringlit b -> a = b # 124 "monomorphic.ml" | `Assoc xs, `Assoc ys -> let compare_keys = fun (key, _) (key', _) -> String.compare key key' in let xs = List.stable_sort compare_keys xs in let ys = List.stable_sort compare_keys ys in (match List.for_all2 (fun (key, value) (key', value') -> match key = key' with | false -> false | true -> equal value value') xs ys with | result -> result | exception Invalid_argument _ -> (* the lists were of different lengths, thus unequal *) false) # 137 "monomorphic.ml" | `Tuple xs, `Tuple ys # 139 "monomorphic.ml" | `List xs, `List ys -> (match List.for_all2 equal xs ys with | result -> result | exception Invalid_argument _ -> (* the lists were of different lengths, thus unequal *) false) # 146 "monomorphic.ml" | `Variant (name, value), `Variant (name', value') -> (match name = name' with | false -> false | true -> match value, value' with | None, None -> true | Some x, Some y -> equal x y | _ -> false) # 155 "monomorphic.ml" | _ -> false # 2 "write2.ml" let pretty_print ?std out x = Pretty.pp ?std out x let pretty_to_string ?std x = Pretty.to_string ?std x let pretty_to_channel ?std oc x = Pretty.to_channel ?std oc x # 1 "lib/read.mll" # 2 "lib/read.mll" module Lexing = (* We override Lexing.engine in order to avoid creating a new position record each time a rule is matched. This reduces total parsing time by about 31%. *) struct include Lexing external c_engine : lex_tables -> int -> lexbuf -> int = "caml_lex_engine" let engine tbl state buf = let result = c_engine tbl state buf in (* if result >= 0 then begin buf.lex_start_p <- buf.lex_curr_p; buf.lex_curr_p <- {buf.lex_curr_p with pos_cnum = buf.lex_abs_pos + buf.lex_curr_pos}; end; *) result end open Printf open Lexing (* see description in common.mli *) type lexer_state = Lexer_state.t = { buf : Buffer.t; mutable lnum : int; mutable bol : int; mutable fname : string option; } let dec c = Char.code c - 48 let hex c = match c with '0'..'9' -> int_of_char c - int_of_char '0' | 'a'..'f' -> int_of_char c - int_of_char 'a' + 10 | 'A'..'F' -> int_of_char c - int_of_char 'A' + 10 | _ -> assert false let custom_error descr v lexbuf = let offs = lexbuf.lex_abs_pos - 1 in let bol = v.bol in let pos1 = offs + lexbuf.lex_start_pos - bol - 1 in let pos2 = max pos1 (offs + lexbuf.lex_curr_pos - bol) in let file_line = match v.fname with None -> "Line" | Some s -> sprintf "File %s, line" s in let bytes = if pos1 = pos2 then sprintf "byte %i" (pos1+1) else sprintf "bytes %i-%i" (pos1+1) (pos2+1) in let msg = sprintf "%s %i, %s:\n%s" file_line v.lnum bytes descr in json_error msg let lexer_error descr v lexbuf = custom_error (sprintf "%s '%s'" descr (Lexing.lexeme lexbuf)) v lexbuf let read_junk = ref (fun _ -> assert false) let long_error descr v lexbuf = let junk = Lexing.lexeme lexbuf in let extra_junk = !read_junk lexbuf in custom_error (sprintf "%s '%s%s'" descr junk extra_junk) v lexbuf let min10 = min_int / 10 - (if min_int mod 10 = 0 then 0 else 1) let max10 = max_int / 10 + (if max_int mod 10 = 0 then 0 else 1) exception Int_overflow let extract_positive_int lexbuf = let start = lexbuf.lex_start_pos in let stop = lexbuf.lex_curr_pos in let s = lexbuf.lex_buffer in let n = ref 0 in for i = start to stop - 1 do if !n >= max10 then raise Int_overflow else n := 10 * !n + dec (Bytes.get s i) done; if !n < 0 then raise Int_overflow else !n let make_positive_int v lexbuf = # 108 "lib/read.mll" `Intlit (lexeme lexbuf) # 113 "lib/read.mll" let extract_negative_int lexbuf = let start = lexbuf.lex_start_pos + 1 in let stop = lexbuf.lex_curr_pos in let s = lexbuf.lex_buffer in let n = ref 0 in for i = start to stop - 1 do if !n <= min10 then raise Int_overflow else n := 10 * !n - dec (Bytes.get s i) done; if !n > 0 then raise Int_overflow else !n let make_negative_int v lexbuf = # 135 "lib/read.mll" `Intlit (lexeme lexbuf) # 141 "lib/read.mll" let set_file_name v fname = v.fname <- fname let newline v lexbuf = v.lnum <- v.lnum + 1; v.bol <- lexbuf.lex_abs_pos + lexbuf.lex_curr_pos let add_lexeme buf lexbuf = let len = lexbuf.lex_curr_pos - lexbuf.lex_start_pos in Buffer.add_subbytes buf lexbuf.lex_buffer lexbuf.lex_start_pos len let map_lexeme f lexbuf = let len = lexbuf.lex_curr_pos - lexbuf.lex_start_pos in f (Bytes.sub_string lexbuf.lex_buffer lexbuf.lex_start_pos len) 0 len type variant_kind = [ `Edgy_bracket | `Square_bracket | `Double_quote ] type tuple_kind = [ `Parenthesis | `Square_bracket ] # 161 "lib/read.ml" # 161 "lib/read.ml" let __ocaml_lex_tables = { Lexing.lex_base = "\000\000\236\255\237\255\003\000\239\255\016\000\242\255\243\255\ \244\255\245\255\000\000\031\000\249\255\085\000\001\000\000\000\ \000\000\001\000\000\000\001\000\002\000\255\255\000\000\000\000\ \003\000\254\255\001\000\004\000\253\255\011\000\252\255\003\000\ \001\000\003\000\002\000\003\000\000\000\251\255\021\000\097\000\ \010\000\022\000\020\000\016\000\022\000\012\000\008\000\250\255\ \119\000\129\000\139\000\161\000\171\000\181\000\193\000\209\000\ \240\255\011\000\038\000\252\255\065\000\254\255\255\255\110\000\ \252\255\163\000\254\255\255\255\234\000\247\255\248\255\048\001\ \250\255\251\255\252\255\253\255\254\255\255\255\071\001\126\001\ \149\001\249\255\039\000\253\255\254\255\038\000\187\001\210\001\ \248\001\015\002\255\255\220\000\253\255\255\255\245\000\039\002\ \109\002\014\001\088\002\164\002\187\002\225\002\013\000\252\255\ \253\255\254\255\255\255\014\000\253\255\254\255\255\255\030\000\ \253\255\254\255\255\255\015\000\253\255\254\255\255\255\017\001\ \251\255\252\255\253\255\254\255\255\255\019\000\252\255\253\255\ \254\255\015\000\255\255\016\000\255\255\008\001\005\000\253\255\ \023\000\254\255\020\000\255\255\046\000\253\255\254\255\042\000\ \052\000\053\000\255\255\053\000\048\000\091\000\092\000\255\255\ \027\001\250\255\251\255\137\000\104\000\089\000\088\000\106\000\ \255\255\143\000\137\000\177\000\254\255\183\000\168\000\166\000\ \183\000\002\000\253\255\177\000\172\000\187\000\004\000\252\255\ \053\002\251\255\252\255\253\255\103\001\255\255\248\002\254\255\ \006\003\030\003\252\255\253\255\254\255\255\255\040\003\050\003\ \074\003\252\255\253\255\254\255\255\255\061\003\084\003\108\003\ \249\255\250\255\251\255\244\000\120\003\142\003\179\000\194\000\ \015\000\255\255\190\000\188\000\187\000\193\000\183\000\179\000\ \254\255\191\000\201\000\200\000\196\000\203\000\193\000\189\000\ \253\255\157\003\095\003\174\003\196\003\206\003\216\003\228\003\ \239\003\060\000\253\255\254\255\255\255\012\004\252\255\253\255\ \087\004\255\255\145\004\252\255\253\255\221\004\255\255\229\000\ \253\255\254\255\255\255\231\000\253\255\254\255\255\255\002\000\ \255\255\018\001\252\255\253\255\254\255\255\255\034\001\253\255\ \254\255\255\255\000\000\255\255\003\000\254\255\255\255\038\001\ \252\255\253\255\254\255\255\255\120\001\251\255\252\255\253\255\ \254\255\255\255\208\000\253\255\254\255\255\255\211\000\253\255\ \254\255\255\255\189\000\255\255\143\001\252\255\253\255\254\255\ \255\255\013\001\253\255\254\255\255\255\095\001\252\255\253\255\ \254\255\255\255\050\001\253\255\254\255\255\255\026\001\253\255\ \254\255\255\255\233\000\253\255\254\255\255\255\222\000\253\255\ \254\255\255\255\079\005\237\255\238\255\010\000\240\255\044\001\ \243\255\244\255\245\255\246\255\061\001\002\004\249\255\045\005\ \209\000\228\000\211\000\232\000\225\000\223\000\240\000\255\255\ \235\000\234\000\008\001\254\255\004\001\023\001\253\255\054\001\ \252\255\031\001\029\001\032\001\039\001\049\001\045\001\251\255\ \057\001\082\001\080\001\078\001\084\001\074\001\086\001\250\255\ \110\005\012\004\123\005\155\005\165\005\177\005\187\005\197\005\ \241\255\199\001\077\002\253\255\255\255\154\002\222\005\209\005\ \155\002\239\005\053\006\076\006\114\006\016\002\252\255\253\255\ \254\255\255\255\152\006\252\255\253\255\227\006\255\255\085\007\ \244\255\245\255\011\000\247\255\076\002\250\255\251\255\252\255\ \253\255\254\255\031\002\243\005\051\007\100\001\115\001\104\001\ \133\001\118\001\154\001\171\001\255\255\173\001\176\001\191\001\ \185\001\187\001\253\001\230\001\230\001\234\001\247\001\237\001\ \234\001\009\002\019\002\019\002\015\002\021\002\011\002\007\002\ \142\006\152\006\116\007\170\007\180\007\190\007\200\007\210\007\ \248\255\120\002\167\002\253\255\255\255\216\002\082\007\220\007\ \236\002\244\007\058\008\081\008\119\008\076\002\252\255\253\255\ \254\255\255\255\157\008\252\255\253\255\232\008\255\255\135\002\ \120\002\253\255\100\002\254\255\182\002\255\255\011\002\255\255\ \204\002\252\255\253\255\254\255\255\255\046\002\255\255\178\002\ \252\255\253\255\254\255\255\255\023\000\255\255\183\002\252\255\ \253\255\254\255\255\255\187\002\253\255\254\255\255\255\121\002\ \253\255\254\255\255\255\184\002\252\255\253\255\254\255\019\000\ \255\255\140\001\146\001\255\255\150\001\151\001\154\001\168\001\ \170\001\171\001\172\001\173\001\181\001\184\001\185\001\187\001\ \191\001\193\001\195\001\196\001\197\001\200\001\203\001\223\001\ \225\001\228\001\249\001\251\001\002\002\004\002\011\002\012\002\ \013\002\000\000"; Lexing.lex_backtrk = "\255\255\255\255\255\255\017\000\255\255\019\000\255\255\255\255\ \255\255\255\255\007\000\007\000\255\255\019\000\019\000\019\000\ \019\000\019\000\019\000\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\008\000\008\000\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\009\000\255\255\009\000\255\255\009\000\255\255\ \255\255\014\000\255\255\255\255\002\000\255\255\255\255\255\255\ \255\255\002\000\255\255\255\255\255\255\255\255\255\255\007\000\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\001\000\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\001\000\001\000\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\003\000\255\255\001\000\255\255\004\000\003\000\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\001\000\ \255\255\255\255\255\255\001\000\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\004\000\004\000\004\000\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\003\000\255\255\000\000\255\255\ \001\000\255\255\255\255\255\255\255\255\255\255\000\000\002\000\ \255\255\255\255\255\255\255\255\255\255\000\000\002\000\255\255\ \255\255\255\255\255\255\003\000\003\000\005\000\005\000\005\000\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\003\000\255\255\003\000\255\255\003\000\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \001\000\255\255\255\255\255\255\255\255\001\000\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\001\000\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\001\000\255\255\002\000\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\001\000\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\016\000\255\255\018\000\ \255\255\255\255\255\255\255\255\007\000\007\000\255\255\018\000\ \018\000\018\000\018\000\018\000\018\000\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\008\000\255\255\008\000\255\255\008\000\255\255\ \255\255\013\000\255\255\255\255\255\255\001\000\001\000\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\001\000\255\255\255\255\ \255\255\255\255\009\000\255\255\011\000\255\255\255\255\255\255\ \255\255\255\255\000\000\000\000\011\000\011\000\011\000\011\000\ \011\000\011\000\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\000\000\255\255\000\000\255\255\000\000\255\255\ \255\255\006\000\255\255\255\255\255\255\001\000\001\000\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\001\000\255\255\004\000\ \003\000\255\255\255\255\255\255\255\255\255\255\001\000\255\255\ \255\255\255\255\255\255\255\255\255\255\001\000\255\255\255\255\ \255\255\255\255\255\255\255\255\001\000\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\003\000\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255"; Lexing.lex_default = "\001\000\000\000\000\000\255\255\000\000\255\255\000\000\000\000\ \000\000\000\000\255\255\255\255\000\000\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\000\000\255\255\255\255\ \255\255\000\000\255\255\255\255\000\000\255\255\000\000\255\255\ \255\255\255\255\255\255\255\255\255\255\000\000\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\000\000\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \000\000\057\000\060\000\000\000\060\000\000\000\000\000\065\000\ \000\000\065\000\000\000\000\000\070\000\000\000\000\000\255\255\ \000\000\000\000\000\000\000\000\000\000\000\000\255\255\255\255\ \255\255\000\000\084\000\000\000\000\000\255\255\255\255\255\255\ \255\255\255\255\000\000\094\000\000\000\000\000\097\000\255\255\ \255\255\097\000\255\255\255\255\255\255\255\255\104\000\000\000\ \000\000\000\000\000\000\109\000\000\000\000\000\000\000\113\000\ \000\000\000\000\000\000\117\000\000\000\000\000\000\000\121\000\ \000\000\000\000\000\000\000\000\000\000\126\000\000\000\000\000\ \000\000\255\255\000\000\255\255\000\000\255\255\255\255\000\000\ \255\255\000\000\138\000\000\000\142\000\000\000\000\000\255\255\ \255\255\255\255\000\000\255\255\255\255\255\255\255\255\000\000\ \154\000\000\000\000\000\255\255\255\255\255\255\255\255\255\255\ \000\000\255\255\255\255\255\255\000\000\255\255\255\255\255\255\ \255\255\255\255\000\000\255\255\255\255\255\255\255\255\000\000\ \178\000\000\000\000\000\000\000\255\255\000\000\255\255\000\000\ \255\255\187\000\000\000\000\000\000\000\000\000\255\255\255\255\ \194\000\000\000\000\000\000\000\000\000\255\255\255\255\201\000\ \000\000\000\000\000\000\255\255\255\255\255\255\255\255\255\255\ \255\255\000\000\255\255\255\255\255\255\255\255\255\255\255\255\ \000\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \000\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\235\000\000\000\000\000\000\000\239\000\000\000\000\000\ \255\255\000\000\244\000\000\000\000\000\255\255\000\000\249\000\ \000\000\000\000\000\000\253\000\000\000\000\000\000\000\255\255\ \000\000\003\001\000\000\000\000\000\000\000\000\008\001\000\000\ \000\000\000\000\255\255\000\000\255\255\000\000\000\000\017\001\ \000\000\000\000\000\000\000\000\022\001\000\000\000\000\000\000\ \000\000\000\000\028\001\000\000\000\000\000\000\032\001\000\000\ \000\000\000\000\255\255\000\000\038\001\000\000\000\000\000\000\ \000\000\043\001\000\000\000\000\000\000\047\001\000\000\000\000\ \000\000\000\000\052\001\000\000\000\000\000\000\056\001\000\000\ \000\000\000\000\060\001\000\000\000\000\000\000\064\001\000\000\ \000\000\000\000\067\001\000\000\000\000\255\255\000\000\255\255\ \000\000\000\000\000\000\000\000\255\255\255\255\000\000\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\000\000\ \255\255\255\255\255\255\000\000\255\255\255\255\000\000\255\255\ \000\000\255\255\255\255\255\255\255\255\255\255\255\255\000\000\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\000\000\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \000\000\121\001\125\001\000\000\000\000\128\001\255\255\255\255\ \128\001\255\255\255\255\255\255\255\255\135\001\000\000\000\000\ \000\000\000\000\140\001\000\000\000\000\255\255\000\000\144\001\ \000\000\000\000\255\255\000\000\255\255\000\000\000\000\000\000\ \000\000\000\000\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\000\000\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \000\000\193\001\197\001\000\000\000\000\200\001\255\255\255\255\ \200\001\255\255\255\255\255\255\255\255\207\001\000\000\000\000\ \000\000\000\000\212\001\000\000\000\000\255\255\000\000\255\255\ \255\255\000\000\255\255\000\000\220\001\000\000\255\255\000\000\ \226\001\000\000\000\000\000\000\000\000\255\255\000\000\233\001\ \000\000\000\000\000\000\000\000\255\255\000\000\240\001\000\000\ \000\000\000\000\000\000\245\001\000\000\000\000\000\000\249\001\ \000\000\000\000\000\000\252\001\000\000\000\000\000\000\255\255\ \000\000\002\002\004\002\000\000\005\002\006\002\007\002\008\002\ \009\002\010\002\011\002\012\002\013\002\014\002\015\002\016\002\ \017\002\018\002\019\002\020\002\021\002\022\002\023\002\024\002\ \025\002\026\002\027\002\028\002\029\002\030\002\031\002\032\002\ \033\002\003\002"; Lexing.lex_trans = "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\003\000\004\000\000\000\003\000\003\000\134\000\000\000\ \003\000\000\000\134\000\069\001\146\001\255\255\000\000\069\001\ \146\001\000\000\000\000\000\000\000\000\127\000\139\000\000\000\ \003\000\000\000\012\000\003\000\170\000\134\000\175\000\000\000\ \007\000\011\001\069\001\146\001\014\001\013\000\049\000\005\000\ \010\000\011\000\011\000\011\000\011\000\011\000\011\000\011\000\ \011\000\011\000\056\000\118\000\006\000\129\000\130\000\057\000\ \237\001\137\000\000\002\049\000\000\000\048\000\138\000\106\000\ \062\000\014\000\110\000\105\000\000\000\049\000\015\000\011\000\ \011\000\011\000\011\000\011\000\011\000\011\000\011\000\011\000\ \011\000\030\000\048\000\008\000\114\000\209\000\236\000\000\001\ \013\001\029\000\022\000\255\255\048\000\048\000\017\000\021\000\ \025\000\032\000\033\000\035\000\023\000\027\000\016\000\031\000\ \028\000\034\000\019\000\024\000\018\000\026\000\020\000\036\000\ \041\000\037\000\048\000\009\000\042\000\043\000\044\000\045\000\ \046\000\047\000\061\000\085\000\048\000\038\000\039\000\039\000\ \039\000\039\000\039\000\039\000\039\000\039\000\039\000\049\000\ \067\000\039\000\039\000\039\000\039\000\039\000\039\000\039\000\ \039\000\039\000\039\000\086\000\143\000\255\255\040\000\144\000\ \145\000\146\000\055\000\148\000\055\000\149\000\048\000\054\000\ \054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\ \054\000\050\000\050\000\050\000\050\000\050\000\050\000\050\000\ \050\000\050\000\050\000\050\000\050\000\050\000\050\000\050\000\ \050\000\050\000\050\000\050\000\050\000\255\255\048\000\150\000\ \151\000\161\000\066\000\158\000\053\000\159\000\053\000\160\000\ \051\000\052\000\052\000\052\000\052\000\052\000\052\000\052\000\ \052\000\052\000\052\000\052\000\052\000\052\000\052\000\052\000\ \052\000\052\000\052\000\052\000\052\000\052\000\052\000\052\000\ \052\000\052\000\052\000\052\000\052\000\052\000\052\000\165\000\ \051\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\ \054\000\054\000\054\000\162\000\163\000\166\000\093\000\255\255\ \002\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\ \054\000\054\000\054\000\255\255\077\000\103\000\108\000\116\000\ \132\000\134\000\135\000\128\000\139\000\134\000\164\000\093\000\ \171\000\077\000\167\000\168\000\169\000\172\000\112\000\173\000\ \174\000\210\000\226\000\208\000\211\000\212\000\059\000\083\000\ \134\000\213\000\214\000\215\000\216\000\218\000\141\000\219\000\ \093\000\220\000\221\000\123\000\222\000\223\000\224\000\136\000\ \095\000\225\000\035\001\065\001\234\000\155\000\005\001\097\001\ \250\000\255\255\254\000\057\001\061\001\095\001\077\000\044\001\ \092\001\088\001\009\001\029\001\076\000\124\000\033\001\018\001\ \075\000\098\000\019\001\085\001\086\001\087\001\120\001\089\001\ \074\000\225\000\053\001\121\001\073\000\090\001\072\000\071\000\ \078\000\078\000\078\000\078\000\078\000\078\000\078\000\078\000\ \078\000\078\000\098\000\113\001\122\000\091\001\064\000\004\001\ \093\001\078\000\078\000\078\000\078\000\078\000\078\000\079\000\ \079\000\079\000\079\000\079\000\079\000\079\000\079\000\079\000\ \079\000\156\000\112\001\094\001\096\001\098\001\099\001\049\001\ \079\000\079\000\079\000\079\000\079\000\079\000\100\001\157\000\ \101\001\078\000\078\000\078\000\078\000\078\000\078\000\183\000\ \184\000\184\000\184\000\184\000\184\000\184\000\184\000\184\000\ \184\000\024\001\112\001\255\255\025\001\102\001\103\001\105\001\ \079\000\079\000\079\000\079\000\079\000\079\000\080\000\080\000\ \080\000\080\000\080\000\080\000\080\000\080\000\080\000\080\000\ \106\001\107\001\048\001\040\001\108\001\109\001\110\001\080\000\ \080\000\080\000\080\000\080\000\080\000\081\000\081\000\081\000\ \081\000\081\000\081\000\081\000\081\000\081\000\081\000\111\001\ \027\001\255\255\171\001\031\001\170\001\023\001\081\000\081\000\ \081\000\081\000\081\000\081\000\092\000\168\001\063\001\080\000\ \080\000\080\000\080\000\080\000\080\000\248\000\165\001\252\000\ \162\001\059\001\069\000\087\000\087\000\087\000\087\000\087\000\ \087\000\087\000\087\000\087\000\087\000\255\255\081\000\081\000\ \081\000\081\000\081\000\081\000\087\000\087\000\087\000\087\000\ \087\000\087\000\088\000\088\000\088\000\088\000\088\000\088\000\ \088\000\088\000\088\000\088\000\039\001\042\001\255\255\163\001\ \164\001\120\000\002\001\088\000\088\000\088\000\088\000\088\000\ \088\000\166\001\055\001\153\000\087\000\087\000\087\000\087\000\ \087\000\087\000\007\001\167\001\164\001\169\001\016\001\164\001\ \089\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\ \089\000\089\000\051\001\088\000\088\000\088\000\088\000\088\000\ \088\000\089\000\089\000\089\000\089\000\089\000\089\000\090\000\ \090\000\090\000\090\000\090\000\090\000\090\000\090\000\090\000\ \090\000\097\000\137\001\164\001\172\001\185\001\136\001\173\001\ \090\000\090\000\090\000\090\000\090\000\090\000\097\000\179\000\ \174\001\089\000\089\000\089\000\089\000\089\000\089\000\046\001\ \175\001\176\001\180\000\164\001\184\001\181\000\182\000\182\000\ \182\000\182\000\182\000\182\000\182\000\182\000\182\000\124\001\ \090\000\090\000\090\000\090\000\090\000\090\000\192\001\178\001\ \021\001\179\001\097\000\193\001\180\001\181\001\182\001\183\001\ \164\001\216\001\255\255\097\000\184\001\216\001\209\001\097\000\ \223\001\097\000\208\001\230\001\003\002\097\000\219\001\037\001\ \216\001\217\001\003\002\220\001\216\001\097\000\003\002\003\002\ \216\001\097\000\003\002\097\000\096\000\099\000\099\000\099\000\ \099\000\099\000\099\000\099\000\099\000\099\000\099\000\216\001\ \003\002\126\001\003\002\003\002\003\002\003\002\099\000\099\000\ \099\000\099\000\099\000\099\000\097\000\003\002\218\001\250\001\ \003\002\003\002\097\000\003\002\124\001\124\001\097\000\003\002\ \221\001\003\002\253\001\003\002\003\002\003\002\097\000\255\255\ \003\002\196\001\097\000\003\002\097\000\096\000\099\000\099\000\ \099\000\099\000\099\000\099\000\100\000\100\000\100\000\100\000\ \100\000\100\000\100\000\100\000\100\000\100\000\235\001\003\002\ \241\001\003\002\255\001\242\001\003\002\100\000\100\000\100\000\ \100\000\100\000\100\000\101\000\101\000\101\000\101\000\101\000\ \101\000\101\000\101\000\101\000\101\000\246\001\129\001\129\001\ \228\001\003\002\196\001\003\002\101\000\101\000\101\000\101\000\ \101\000\101\000\003\002\198\001\003\002\100\000\100\000\100\000\ \100\000\100\000\100\000\003\002\003\002\003\002\196\001\234\001\ \134\001\097\000\097\000\097\000\097\000\097\000\097\000\097\000\ \097\000\097\000\097\000\000\000\101\000\101\000\101\000\101\000\ \101\000\101\000\097\000\097\000\097\000\097\000\097\000\097\000\ \182\000\182\000\182\000\182\000\182\000\182\000\182\000\182\000\ \182\000\182\000\000\000\000\000\201\001\177\000\184\000\184\000\ \184\000\184\000\184\000\184\000\184\000\184\000\184\000\184\000\ \188\000\000\000\097\000\097\000\097\000\097\000\097\000\097\000\ \201\001\227\001\000\000\191\000\206\001\123\001\189\000\190\000\ \190\000\190\000\190\000\190\000\190\000\190\000\190\000\190\000\ \190\000\190\000\190\000\190\000\190\000\190\000\190\000\190\000\ \190\000\190\000\189\000\190\000\190\000\190\000\190\000\190\000\ \190\000\190\000\190\000\190\000\195\000\197\000\197\000\197\000\ \197\000\197\000\197\000\197\000\197\000\197\000\197\000\198\000\ \255\255\248\001\196\000\197\000\197\000\197\000\197\000\197\000\ \197\000\197\000\197\000\197\000\196\000\197\000\197\000\197\000\ \197\000\197\000\197\000\197\000\197\000\197\000\202\000\227\000\ \227\000\227\000\227\000\227\000\227\000\227\000\227\000\227\000\ \227\000\205\000\255\255\255\255\203\000\204\000\204\000\204\000\ \204\000\204\000\204\000\204\000\204\000\204\000\226\000\195\001\ \204\000\204\000\204\000\204\000\204\000\204\000\204\000\204\000\ \204\000\204\000\232\001\000\000\000\000\206\000\221\001\239\001\ \254\001\000\000\207\000\244\001\000\000\225\000\203\000\204\000\ \204\000\204\000\204\000\204\000\204\000\204\000\204\000\204\000\ \232\000\000\000\232\000\000\000\225\001\231\000\231\000\231\000\ \231\000\231\000\231\000\231\000\231\000\231\000\231\000\217\000\ \255\255\000\000\000\000\000\000\000\000\225\000\227\000\227\000\ \227\000\227\000\227\000\227\000\227\000\227\000\227\000\227\000\ \000\000\000\000\000\000\000\000\255\255\000\000\000\000\230\000\ \000\000\230\000\000\000\228\000\229\000\229\000\229\000\229\000\ \229\000\229\000\229\000\229\000\229\000\229\000\229\000\229\000\ \229\000\229\000\229\000\229\000\229\000\229\000\229\000\229\000\ \229\000\229\000\229\000\229\000\229\000\229\000\229\000\229\000\ \229\000\229\000\000\000\228\000\231\000\231\000\231\000\231\000\ \231\000\231\000\231\000\231\000\231\000\231\000\186\000\231\000\ \231\000\231\000\231\000\231\000\231\000\231\000\231\000\231\000\ \231\000\000\000\000\000\000\000\000\000\000\000\241\000\000\000\ \113\001\000\000\077\001\077\001\077\001\077\001\077\001\077\001\ \077\001\077\001\077\001\077\001\114\001\114\001\114\001\114\001\ \114\001\114\001\114\001\114\001\114\001\114\001\000\000\112\001\ \000\000\000\000\193\000\000\000\000\000\240\000\240\000\240\000\ \240\000\240\000\240\000\240\000\240\000\240\000\240\000\240\000\ \240\000\240\000\240\000\240\000\240\000\240\000\240\000\240\000\ \240\000\240\000\240\000\240\000\240\000\240\000\240\000\112\001\ \000\000\000\000\000\000\240\000\200\000\240\000\240\000\240\000\ \240\000\240\000\240\000\240\000\240\000\240\000\240\000\240\000\ \240\000\240\000\240\000\240\000\240\000\240\000\240\000\240\000\ \240\000\240\000\240\000\240\000\240\000\240\000\240\000\240\000\ \240\000\240\000\240\000\240\000\240\000\240\000\240\000\240\000\ \240\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \240\000\240\000\240\000\240\000\240\000\240\000\240\000\240\000\ \240\000\240\000\240\000\240\000\240\000\240\000\240\000\240\000\ \240\000\240\000\240\000\240\000\240\000\240\000\240\000\240\000\ \240\000\240\000\000\000\246\000\000\000\000\000\240\000\000\000\ \240\000\240\000\240\000\240\000\240\000\240\000\240\000\240\000\ \240\000\240\000\240\000\240\000\240\000\240\000\240\000\240\000\ \240\000\240\000\240\000\240\000\240\000\240\000\240\000\240\000\ \240\000\240\000\245\000\245\000\245\000\245\000\245\000\245\000\ \245\000\245\000\245\000\245\000\245\000\245\000\245\000\245\000\ \245\000\245\000\245\000\245\000\245\000\245\000\245\000\245\000\ \245\000\245\000\245\000\245\000\000\000\000\000\000\000\000\000\ \245\000\000\000\245\000\245\000\245\000\245\000\245\000\245\000\ \245\000\245\000\245\000\245\000\245\000\245\000\245\000\245\000\ \245\000\245\000\245\000\245\000\245\000\245\000\245\000\245\000\ \245\000\245\000\245\000\245\000\238\000\245\000\245\000\245\000\ \245\000\245\000\245\000\245\000\245\000\245\000\245\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\245\000\245\000\ \245\000\245\000\245\000\245\000\245\000\245\000\245\000\245\000\ \245\000\245\000\245\000\245\000\245\000\245\000\245\000\245\000\ \245\000\245\000\245\000\245\000\245\000\245\000\245\000\245\000\ \000\000\000\000\000\000\000\000\245\000\000\000\245\000\245\000\ \245\000\245\000\245\000\245\000\245\000\245\000\245\000\245\000\ \245\000\245\000\245\000\245\000\245\000\245\000\245\000\245\000\ \245\000\245\000\245\000\245\000\245\000\245\000\245\000\245\000\ \069\001\070\001\000\000\000\000\069\001\076\001\077\001\077\001\ \077\001\077\001\077\001\077\001\077\001\077\001\077\001\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\069\001\ \000\000\078\001\000\000\000\000\000\000\000\000\104\001\073\001\ \000\000\000\000\000\000\000\000\079\001\000\000\071\001\076\001\ \077\001\077\001\077\001\077\001\077\001\077\001\077\001\077\001\ \077\001\000\000\000\000\072\001\000\000\000\000\000\000\000\000\ \000\000\243\000\000\000\000\000\000\000\000\000\000\000\000\000\ \080\001\119\001\000\000\119\001\000\000\081\001\118\001\118\001\ \118\001\118\001\118\001\118\001\118\001\118\001\118\001\118\001\ \000\000\000\000\074\001\114\001\114\001\114\001\114\001\114\001\ \114\001\114\001\114\001\114\001\114\001\083\001\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\082\001\000\000\000\000\ \115\001\000\000\000\000\084\001\000\000\000\000\117\001\000\000\ \117\001\000\000\075\001\116\001\116\001\116\001\116\001\116\001\ \116\001\116\001\116\001\116\001\116\001\116\001\116\001\116\001\ \116\001\116\001\116\001\116\001\116\001\116\001\116\001\000\000\ \115\001\116\001\116\001\116\001\116\001\116\001\116\001\116\001\ \116\001\116\001\116\001\118\001\118\001\118\001\118\001\118\001\ \118\001\118\001\118\001\118\001\118\001\118\001\118\001\118\001\ \118\001\118\001\118\001\118\001\118\001\118\001\118\001\000\000\ \128\001\130\001\130\001\130\001\130\001\130\001\130\001\130\001\ \130\001\130\001\130\001\000\000\000\000\128\001\000\000\000\000\ \000\000\128\001\130\001\130\001\130\001\130\001\130\001\130\001\ \000\000\000\000\000\000\000\000\000\000\000\000\128\001\000\000\ \000\000\185\001\000\000\155\001\155\001\155\001\155\001\155\001\ \155\001\155\001\155\001\155\001\155\001\000\000\000\000\000\000\ \000\000\000\000\130\001\130\001\130\001\130\001\130\001\130\001\ \184\001\000\000\128\001\000\000\000\000\000\000\000\000\000\000\ \128\001\000\000\000\000\000\000\128\001\000\000\000\000\000\000\ \000\000\000\000\000\000\128\001\128\001\000\000\000\000\068\001\ \128\001\128\001\128\001\127\001\000\000\128\001\000\000\000\000\ \184\001\000\000\000\000\000\000\000\000\128\001\000\000\000\000\ \000\000\128\001\000\000\128\001\127\001\131\001\131\001\131\001\ \131\001\131\001\131\001\131\001\131\001\131\001\131\001\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\131\001\131\001\ \131\001\131\001\131\001\131\001\132\001\132\001\132\001\132\001\ \132\001\132\001\132\001\132\001\132\001\132\001\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\132\001\132\001\132\001\ \132\001\132\001\132\001\000\000\000\000\000\000\131\001\131\001\ \131\001\131\001\131\001\131\001\000\000\000\000\000\000\000\000\ \000\000\000\000\128\001\128\001\128\001\128\001\128\001\128\001\ \128\001\128\001\128\001\128\001\000\000\132\001\132\001\132\001\ \132\001\132\001\132\001\128\001\128\001\128\001\128\001\128\001\ \128\001\191\001\142\001\191\001\000\000\000\000\190\001\190\001\ \190\001\190\001\190\001\190\001\190\001\190\001\190\001\190\001\ \186\001\186\001\186\001\186\001\186\001\186\001\186\001\186\001\ \186\001\186\001\000\000\128\001\128\001\128\001\128\001\128\001\ \128\001\141\001\141\001\141\001\141\001\141\001\141\001\141\001\ \141\001\141\001\141\001\141\001\141\001\141\001\141\001\141\001\ \141\001\141\001\141\001\141\001\141\001\141\001\141\001\141\001\ \141\001\141\001\141\001\000\000\000\000\000\000\000\000\141\001\ \000\000\141\001\141\001\141\001\141\001\141\001\141\001\141\001\ \141\001\141\001\141\001\141\001\141\001\141\001\141\001\141\001\ \141\001\141\001\141\001\141\001\141\001\141\001\141\001\141\001\ \141\001\141\001\141\001\141\001\141\001\141\001\141\001\141\001\ \141\001\141\001\141\001\141\001\141\001\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\141\001\141\001\141\001\141\001\ \141\001\141\001\141\001\141\001\141\001\141\001\141\001\141\001\ \141\001\141\001\141\001\141\001\141\001\141\001\141\001\141\001\ \141\001\141\001\141\001\141\001\141\001\141\001\000\000\000\000\ \000\000\000\000\141\001\000\000\141\001\141\001\141\001\141\001\ \141\001\141\001\141\001\141\001\141\001\141\001\141\001\141\001\ \141\001\141\001\141\001\141\001\141\001\141\001\141\001\141\001\ \141\001\141\001\141\001\141\001\141\001\141\001\146\001\147\001\ \000\000\000\000\146\001\154\001\155\001\155\001\155\001\155\001\ \155\001\155\001\155\001\155\001\155\001\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\200\001\146\001\000\000\153\001\ \000\000\000\000\000\000\000\000\177\001\150\001\000\000\000\000\ \000\000\200\001\156\001\000\000\148\001\154\001\155\001\155\001\ \155\001\155\001\155\001\155\001\155\001\155\001\155\001\000\000\ \000\000\149\001\000\000\000\000\000\000\000\000\000\000\000\000\ \139\001\000\000\000\000\000\000\000\000\000\000\157\001\000\000\ \000\000\000\000\000\000\158\001\186\001\186\001\186\001\186\001\ \186\001\186\001\186\001\186\001\186\001\186\001\200\001\000\000\ \151\001\000\000\000\000\000\000\200\001\000\000\000\000\000\000\ \200\001\187\001\000\000\160\001\000\000\000\000\000\000\000\000\ \200\001\000\000\000\000\159\001\200\001\000\000\200\001\199\001\ \000\000\161\001\000\000\000\000\000\000\000\000\000\000\000\000\ \152\001\000\000\000\000\000\000\000\000\189\001\000\000\189\001\ \000\000\187\001\188\001\188\001\188\001\188\001\188\001\188\001\ \188\001\188\001\188\001\188\001\188\001\188\001\188\001\188\001\ \188\001\188\001\188\001\188\001\188\001\188\001\188\001\188\001\ \188\001\188\001\188\001\188\001\188\001\188\001\188\001\188\001\ \190\001\190\001\190\001\190\001\190\001\190\001\190\001\190\001\ \190\001\190\001\190\001\190\001\190\001\190\001\190\001\190\001\ \190\001\190\001\190\001\190\001\202\001\202\001\202\001\202\001\ \202\001\202\001\202\001\202\001\202\001\202\001\200\001\000\000\ \000\000\000\000\000\000\000\000\000\000\202\001\202\001\202\001\ \202\001\202\001\202\001\200\001\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\202\001\202\001\202\001\ \202\001\202\001\202\001\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \200\001\000\000\000\000\000\000\000\000\145\001\200\001\000\000\ \000\000\000\000\200\001\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\200\001\000\000\000\000\000\000\200\001\000\000\ \200\001\199\001\203\001\203\001\203\001\203\001\203\001\203\001\ \203\001\203\001\203\001\203\001\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\203\001\203\001\203\001\203\001\203\001\ \203\001\204\001\204\001\204\001\204\001\204\001\204\001\204\001\ \204\001\204\001\204\001\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\204\001\204\001\204\001\204\001\204\001\204\001\ \000\000\000\000\000\000\203\001\203\001\203\001\203\001\203\001\ \203\001\000\000\000\000\000\000\000\000\000\000\000\000\200\001\ \200\001\200\001\200\001\200\001\200\001\200\001\200\001\200\001\ \200\001\000\000\204\001\204\001\204\001\204\001\204\001\204\001\ \200\001\200\001\200\001\200\001\200\001\200\001\000\000\214\001\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \200\001\200\001\200\001\200\001\200\001\200\001\213\001\213\001\ \213\001\213\001\213\001\213\001\213\001\213\001\213\001\213\001\ \213\001\213\001\213\001\213\001\213\001\213\001\213\001\213\001\ \213\001\213\001\213\001\213\001\213\001\213\001\213\001\213\001\ \000\000\000\000\000\000\000\000\213\001\000\000\213\001\213\001\ \213\001\213\001\213\001\213\001\213\001\213\001\213\001\213\001\ \213\001\213\001\213\001\213\001\213\001\213\001\213\001\213\001\ \213\001\213\001\213\001\213\001\213\001\213\001\213\001\213\001\ \213\001\213\001\213\001\213\001\213\001\213\001\213\001\213\001\ \213\001\213\001\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\213\001\213\001\213\001\213\001\213\001\213\001\213\001\ \213\001\213\001\213\001\213\001\213\001\213\001\213\001\213\001\ \213\001\213\001\213\001\213\001\213\001\213\001\213\001\213\001\ \213\001\213\001\213\001\000\000\000\000\000\000\000\000\213\001\ \000\000\213\001\213\001\213\001\213\001\213\001\213\001\213\001\ \213\001\213\001\213\001\213\001\213\001\213\001\213\001\213\001\ \213\001\213\001\213\001\213\001\213\001\213\001\213\001\213\001\ \213\001\213\001\213\001\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\211\001\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000"; Lexing.lex_check = "\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\000\000\000\000\255\255\003\000\000\000\134\000\255\255\ \003\000\255\255\134\000\069\001\146\001\057\000\255\255\069\001\ \146\001\255\255\255\255\255\255\255\255\125\000\138\000\255\255\ \000\000\255\255\000\000\003\000\169\000\134\000\174\000\255\255\ \000\000\010\001\069\001\146\001\012\001\000\000\010\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\005\000\115\000\000\000\125\000\129\000\005\000\ \236\001\136\000\255\001\038\000\255\255\010\000\136\000\102\000\ \058\000\000\000\107\000\102\000\255\255\011\000\000\000\011\000\ \011\000\011\000\011\000\011\000\011\000\011\000\011\000\011\000\ \011\000\029\000\038\000\000\000\111\000\208\000\233\000\255\000\ \012\001\015\000\017\000\060\000\011\000\010\000\000\000\020\000\ \024\000\031\000\032\000\034\000\022\000\026\000\000\000\014\000\ \027\000\033\000\018\000\023\000\000\000\016\000\019\000\035\000\ \040\000\036\000\038\000\000\000\041\000\042\000\043\000\044\000\ \045\000\046\000\058\000\082\000\011\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\039\000\ \063\000\039\000\039\000\039\000\039\000\039\000\039\000\039\000\ \039\000\039\000\039\000\085\000\140\000\060\000\013\000\143\000\ \144\000\145\000\048\000\147\000\048\000\148\000\039\000\048\000\ \048\000\048\000\048\000\048\000\048\000\048\000\048\000\048\000\ \048\000\049\000\049\000\049\000\049\000\049\000\049\000\049\000\ \049\000\049\000\049\000\050\000\050\000\050\000\050\000\050\000\ \050\000\050\000\050\000\050\000\050\000\065\000\039\000\149\000\ \150\000\156\000\063\000\157\000\051\000\158\000\051\000\159\000\ \050\000\051\000\051\000\051\000\051\000\051\000\051\000\051\000\ \051\000\051\000\051\000\052\000\052\000\052\000\052\000\052\000\ \052\000\052\000\052\000\052\000\052\000\053\000\053\000\053\000\ \053\000\053\000\053\000\053\000\053\000\053\000\053\000\155\000\ \050\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\ \054\000\054\000\054\000\161\000\162\000\155\000\091\000\065\000\ \000\000\055\000\055\000\055\000\055\000\055\000\055\000\055\000\ \055\000\055\000\055\000\057\000\068\000\102\000\107\000\115\000\ \131\000\133\000\133\000\125\000\138\000\133\000\163\000\094\000\ \165\000\068\000\166\000\167\000\168\000\171\000\111\000\172\000\ \173\000\206\000\203\000\207\000\210\000\211\000\058\000\082\000\ \133\000\212\000\213\000\214\000\215\000\217\000\140\000\218\000\ \097\000\219\000\220\000\119\000\221\000\222\000\223\000\133\000\ \091\000\203\000\034\001\062\001\233\000\152\000\001\001\080\001\ \247\000\060\000\251\000\054\001\058\001\081\001\068\000\041\001\ \082\001\083\001\006\001\026\001\068\000\119\000\030\001\015\001\ \068\000\094\000\015\001\084\001\085\001\086\001\071\001\088\001\ \068\000\203\000\050\001\071\001\068\000\089\001\068\000\068\000\ \071\000\071\000\071\000\071\000\071\000\071\000\071\000\071\000\ \071\000\071\000\097\000\076\001\119\000\090\001\063\000\001\001\ \092\001\071\000\071\000\071\000\071\000\071\000\071\000\078\000\ \078\000\078\000\078\000\078\000\078\000\078\000\078\000\078\000\ \078\000\152\000\076\001\093\001\095\001\097\001\098\001\045\001\ \078\000\078\000\078\000\078\000\078\000\078\000\099\001\152\000\ \100\001\071\000\071\000\071\000\071\000\071\000\071\000\180\000\ \180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\ \180\000\020\001\076\001\065\000\020\001\101\001\102\001\104\001\ \078\000\078\000\078\000\078\000\078\000\078\000\079\000\079\000\ \079\000\079\000\079\000\079\000\079\000\079\000\079\000\079\000\ \105\001\106\001\045\001\036\001\107\001\108\001\109\001\079\000\ \079\000\079\000\079\000\079\000\079\000\080\000\080\000\080\000\ \080\000\080\000\080\000\080\000\080\000\080\000\080\000\110\001\ \026\001\121\001\157\001\030\001\158\001\020\001\080\000\080\000\ \080\000\080\000\080\000\080\000\091\000\159\001\062\001\079\000\ \079\000\079\000\079\000\079\000\079\000\247\000\160\001\251\000\ \161\001\058\001\068\000\086\000\086\000\086\000\086\000\086\000\ \086\000\086\000\086\000\086\000\086\000\094\000\080\000\080\000\ \080\000\080\000\080\000\080\000\086\000\086\000\086\000\086\000\ \086\000\086\000\087\000\087\000\087\000\087\000\087\000\087\000\ \087\000\087\000\087\000\087\000\036\001\041\001\097\000\162\001\ \163\001\119\000\001\001\087\000\087\000\087\000\087\000\087\000\ \087\000\165\001\054\001\152\000\086\000\086\000\086\000\086\000\ \086\000\086\000\006\001\166\001\167\001\168\001\015\001\169\001\ \088\000\088\000\088\000\088\000\088\000\088\000\088\000\088\000\ \088\000\088\000\050\001\087\000\087\000\087\000\087\000\087\000\ \087\000\088\000\088\000\088\000\088\000\088\000\088\000\089\000\ \089\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\ \089\000\095\000\133\001\170\001\171\001\154\001\133\001\172\001\ \089\000\089\000\089\000\089\000\089\000\089\000\095\000\176\000\ \173\001\088\000\088\000\088\000\088\000\088\000\088\000\045\001\ \174\001\175\001\176\000\176\001\154\001\176\000\176\000\176\000\ \176\000\176\000\176\000\176\000\176\000\176\000\176\000\122\001\ \089\000\089\000\089\000\089\000\089\000\089\000\148\001\177\001\ \020\001\178\001\098\000\148\001\179\001\180\001\181\001\182\001\ \183\001\216\001\193\001\095\000\154\001\216\001\205\001\098\000\ \222\001\095\000\205\001\229\001\001\002\095\000\218\001\036\001\ \215\001\215\001\002\002\218\001\215\001\095\000\004\002\005\002\ \216\001\095\000\006\002\095\000\095\000\096\000\096\000\096\000\ \096\000\096\000\096\000\096\000\096\000\096\000\096\000\215\001\ \007\002\122\001\008\002\009\002\010\002\011\002\096\000\096\000\ \096\000\096\000\096\000\096\000\098\000\012\002\215\001\247\001\ \013\002\014\002\098\000\015\002\125\001\128\001\098\000\016\002\ \220\001\017\002\251\001\018\002\019\002\020\002\098\000\121\001\ \021\002\194\001\098\000\022\002\098\000\098\000\096\000\096\000\ \096\000\096\000\096\000\096\000\099\000\099\000\099\000\099\000\ \099\000\099\000\099\000\099\000\099\000\099\000\231\001\023\002\ \238\001\024\002\251\001\238\001\025\002\099\000\099\000\099\000\ \099\000\099\000\099\000\100\000\100\000\100\000\100\000\100\000\ \100\000\100\000\100\000\100\000\100\000\243\001\125\001\128\001\ \224\001\026\002\197\001\027\002\100\000\100\000\100\000\100\000\ \100\000\100\000\028\002\194\001\029\002\099\000\099\000\099\000\ \099\000\099\000\099\000\030\002\031\002\032\002\200\001\231\001\ \133\001\101\000\101\000\101\000\101\000\101\000\101\000\101\000\ \101\000\101\000\101\000\255\255\100\000\100\000\100\000\100\000\ \100\000\100\000\101\000\101\000\101\000\101\000\101\000\101\000\ \182\000\182\000\182\000\182\000\182\000\182\000\182\000\182\000\ \182\000\182\000\255\255\255\255\197\001\176\000\184\000\184\000\ \184\000\184\000\184\000\184\000\184\000\184\000\184\000\184\000\ \185\000\255\255\101\000\101\000\101\000\101\000\101\000\101\000\ \200\001\224\001\255\255\185\000\205\001\122\001\185\000\185\000\ \185\000\185\000\185\000\185\000\185\000\185\000\185\000\185\000\ \190\000\190\000\190\000\190\000\190\000\190\000\190\000\190\000\ \190\000\190\000\191\000\191\000\191\000\191\000\191\000\191\000\ \191\000\191\000\191\000\191\000\192\000\197\000\197\000\197\000\ \197\000\197\000\197\000\197\000\197\000\197\000\197\000\192\000\ \193\001\247\001\192\000\192\000\192\000\192\000\192\000\192\000\ \192\000\192\000\192\000\192\000\198\000\198\000\198\000\198\000\ \198\000\198\000\198\000\198\000\198\000\198\000\199\000\226\000\ \226\000\226\000\226\000\226\000\226\000\226\000\226\000\226\000\ \226\000\199\000\125\001\128\001\199\000\199\000\199\000\199\000\ \199\000\199\000\199\000\199\000\199\000\199\000\204\000\194\001\ \204\000\204\000\204\000\204\000\204\000\204\000\204\000\204\000\ \204\000\204\000\231\001\255\255\255\255\199\000\220\001\238\001\ \251\001\255\255\199\000\243\001\255\255\204\000\205\000\205\000\ \205\000\205\000\205\000\205\000\205\000\205\000\205\000\205\000\ \225\000\255\255\225\000\255\255\224\001\225\000\225\000\225\000\ \225\000\225\000\225\000\225\000\225\000\225\000\225\000\205\000\ \197\001\255\255\255\255\255\255\255\255\204\000\227\000\227\000\ \227\000\227\000\227\000\227\000\227\000\227\000\227\000\227\000\ \255\255\255\255\255\255\255\255\200\001\255\255\255\255\228\000\ \255\255\228\000\255\255\227\000\228\000\228\000\228\000\228\000\ \228\000\228\000\228\000\228\000\228\000\228\000\229\000\229\000\ \229\000\229\000\229\000\229\000\229\000\229\000\229\000\229\000\ \230\000\230\000\230\000\230\000\230\000\230\000\230\000\230\000\ \230\000\230\000\255\255\227\000\231\000\231\000\231\000\231\000\ \231\000\231\000\231\000\231\000\231\000\231\000\185\000\232\000\ \232\000\232\000\232\000\232\000\232\000\232\000\232\000\232\000\ \232\000\255\255\255\255\255\255\255\255\255\255\237\000\255\255\ \077\001\255\255\077\001\077\001\077\001\077\001\077\001\077\001\ \077\001\077\001\077\001\077\001\113\001\113\001\113\001\113\001\ \113\001\113\001\113\001\113\001\113\001\113\001\255\255\077\001\ \255\255\255\255\192\000\255\255\255\255\237\000\237\000\237\000\ \237\000\237\000\237\000\237\000\237\000\237\000\237\000\237\000\ \237\000\237\000\237\000\237\000\237\000\237\000\237\000\237\000\ \237\000\237\000\237\000\237\000\237\000\237\000\237\000\077\001\ \255\255\255\255\255\255\237\000\199\000\237\000\237\000\237\000\ \237\000\237\000\237\000\237\000\237\000\237\000\237\000\237\000\ \237\000\237\000\237\000\237\000\237\000\237\000\237\000\237\000\ \237\000\237\000\237\000\237\000\237\000\237\000\237\000\240\000\ \240\000\240\000\240\000\240\000\240\000\240\000\240\000\240\000\ \240\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \240\000\240\000\240\000\240\000\240\000\240\000\240\000\240\000\ \240\000\240\000\240\000\240\000\240\000\240\000\240\000\240\000\ \240\000\240\000\240\000\240\000\240\000\240\000\240\000\240\000\ \240\000\240\000\255\255\242\000\255\255\255\255\240\000\255\255\ \240\000\240\000\240\000\240\000\240\000\240\000\240\000\240\000\ \240\000\240\000\240\000\240\000\240\000\240\000\240\000\240\000\ \240\000\240\000\240\000\240\000\240\000\240\000\240\000\240\000\ \240\000\240\000\242\000\242\000\242\000\242\000\242\000\242\000\ \242\000\242\000\242\000\242\000\242\000\242\000\242\000\242\000\ \242\000\242\000\242\000\242\000\242\000\242\000\242\000\242\000\ \242\000\242\000\242\000\242\000\255\255\255\255\255\255\255\255\ \242\000\255\255\242\000\242\000\242\000\242\000\242\000\242\000\ \242\000\242\000\242\000\242\000\242\000\242\000\242\000\242\000\ \242\000\242\000\242\000\242\000\242\000\242\000\242\000\242\000\ \242\000\242\000\242\000\242\000\237\000\245\000\245\000\245\000\ \245\000\245\000\245\000\245\000\245\000\245\000\245\000\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\245\000\245\000\ \245\000\245\000\245\000\245\000\245\000\245\000\245\000\245\000\ \245\000\245\000\245\000\245\000\245\000\245\000\245\000\245\000\ \245\000\245\000\245\000\245\000\245\000\245\000\245\000\245\000\ \255\255\255\255\255\255\255\255\245\000\255\255\245\000\245\000\ \245\000\245\000\245\000\245\000\245\000\245\000\245\000\245\000\ \245\000\245\000\245\000\245\000\245\000\245\000\245\000\245\000\ \245\000\245\000\245\000\245\000\245\000\245\000\245\000\245\000\ \066\001\066\001\255\255\255\255\066\001\079\001\079\001\079\001\ \079\001\079\001\079\001\079\001\079\001\079\001\079\001\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\066\001\ \255\255\066\001\255\255\255\255\255\255\255\255\079\001\066\001\ \255\255\255\255\255\255\255\255\066\001\255\255\066\001\066\001\ \066\001\066\001\066\001\066\001\066\001\066\001\066\001\066\001\ \066\001\255\255\255\255\066\001\255\255\255\255\255\255\255\255\ \255\255\242\000\255\255\255\255\255\255\255\255\255\255\255\255\ \066\001\112\001\255\255\112\001\255\255\066\001\112\001\112\001\ \112\001\112\001\112\001\112\001\112\001\112\001\112\001\112\001\ \255\255\255\255\066\001\114\001\114\001\114\001\114\001\114\001\ \114\001\114\001\114\001\114\001\114\001\066\001\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\066\001\255\255\255\255\ \114\001\255\255\255\255\066\001\255\255\255\255\115\001\255\255\ \115\001\255\255\066\001\115\001\115\001\115\001\115\001\115\001\ \115\001\115\001\115\001\115\001\115\001\116\001\116\001\116\001\ \116\001\116\001\116\001\116\001\116\001\116\001\116\001\255\255\ \114\001\117\001\117\001\117\001\117\001\117\001\117\001\117\001\ \117\001\117\001\117\001\118\001\118\001\118\001\118\001\118\001\ \118\001\118\001\118\001\118\001\118\001\119\001\119\001\119\001\ \119\001\119\001\119\001\119\001\119\001\119\001\119\001\255\255\ \126\001\127\001\127\001\127\001\127\001\127\001\127\001\127\001\ \127\001\127\001\127\001\255\255\255\255\126\001\255\255\255\255\ \255\255\129\001\127\001\127\001\127\001\127\001\127\001\127\001\ \255\255\255\255\255\255\255\255\255\255\255\255\129\001\255\255\ \255\255\155\001\255\255\155\001\155\001\155\001\155\001\155\001\ \155\001\155\001\155\001\155\001\155\001\255\255\255\255\255\255\ \255\255\255\255\127\001\127\001\127\001\127\001\127\001\127\001\ \155\001\255\255\126\001\255\255\255\255\255\255\255\255\255\255\ \126\001\255\255\255\255\255\255\126\001\255\255\255\255\255\255\ \255\255\255\255\255\255\129\001\126\001\255\255\255\255\066\001\ \126\001\129\001\126\001\126\001\255\255\129\001\255\255\255\255\ \155\001\255\255\255\255\255\255\255\255\129\001\255\255\255\255\ \255\255\129\001\255\255\129\001\129\001\130\001\130\001\130\001\ \130\001\130\001\130\001\130\001\130\001\130\001\130\001\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\130\001\130\001\ \130\001\130\001\130\001\130\001\131\001\131\001\131\001\131\001\ \131\001\131\001\131\001\131\001\131\001\131\001\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\131\001\131\001\131\001\ \131\001\131\001\131\001\255\255\255\255\255\255\130\001\130\001\ \130\001\130\001\130\001\130\001\255\255\255\255\255\255\255\255\ \255\255\255\255\132\001\132\001\132\001\132\001\132\001\132\001\ \132\001\132\001\132\001\132\001\255\255\131\001\131\001\131\001\ \131\001\131\001\131\001\132\001\132\001\132\001\132\001\132\001\ \132\001\184\001\138\001\184\001\255\255\255\255\184\001\184\001\ \184\001\184\001\184\001\184\001\184\001\184\001\184\001\184\001\ \185\001\185\001\185\001\185\001\185\001\185\001\185\001\185\001\ \185\001\185\001\255\255\132\001\132\001\132\001\132\001\132\001\ \132\001\138\001\138\001\138\001\138\001\138\001\138\001\138\001\ \138\001\138\001\138\001\138\001\138\001\138\001\138\001\138\001\ \138\001\138\001\138\001\138\001\138\001\138\001\138\001\138\001\ \138\001\138\001\138\001\255\255\255\255\255\255\255\255\138\001\ \255\255\138\001\138\001\138\001\138\001\138\001\138\001\138\001\ \138\001\138\001\138\001\138\001\138\001\138\001\138\001\138\001\ \138\001\138\001\138\001\138\001\138\001\138\001\138\001\138\001\ \138\001\138\001\138\001\141\001\141\001\141\001\141\001\141\001\ \141\001\141\001\141\001\141\001\141\001\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\141\001\141\001\141\001\141\001\ \141\001\141\001\141\001\141\001\141\001\141\001\141\001\141\001\ \141\001\141\001\141\001\141\001\141\001\141\001\141\001\141\001\ \141\001\141\001\141\001\141\001\141\001\141\001\255\255\255\255\ \255\255\255\255\141\001\255\255\141\001\141\001\141\001\141\001\ \141\001\141\001\141\001\141\001\141\001\141\001\141\001\141\001\ \141\001\141\001\141\001\141\001\141\001\141\001\141\001\141\001\ \141\001\141\001\141\001\141\001\141\001\141\001\143\001\143\001\ \255\255\255\255\143\001\156\001\156\001\156\001\156\001\156\001\ \156\001\156\001\156\001\156\001\156\001\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\198\001\143\001\255\255\143\001\ \255\255\255\255\255\255\255\255\156\001\143\001\255\255\255\255\ \255\255\198\001\143\001\255\255\143\001\143\001\143\001\143\001\ \143\001\143\001\143\001\143\001\143\001\143\001\143\001\255\255\ \255\255\143\001\255\255\255\255\255\255\255\255\255\255\255\255\ \138\001\255\255\255\255\255\255\255\255\255\255\143\001\255\255\ \255\255\255\255\255\255\143\001\186\001\186\001\186\001\186\001\ \186\001\186\001\186\001\186\001\186\001\186\001\198\001\255\255\ \143\001\255\255\255\255\255\255\198\001\255\255\255\255\255\255\ \198\001\186\001\255\255\143\001\255\255\255\255\255\255\255\255\ \198\001\255\255\255\255\143\001\198\001\255\255\198\001\198\001\ \255\255\143\001\255\255\255\255\255\255\255\255\255\255\255\255\ \143\001\255\255\255\255\255\255\255\255\187\001\255\255\187\001\ \255\255\186\001\187\001\187\001\187\001\187\001\187\001\187\001\ \187\001\187\001\187\001\187\001\188\001\188\001\188\001\188\001\ \188\001\188\001\188\001\188\001\188\001\188\001\189\001\189\001\ \189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\ \190\001\190\001\190\001\190\001\190\001\190\001\190\001\190\001\ \190\001\190\001\191\001\191\001\191\001\191\001\191\001\191\001\ \191\001\191\001\191\001\191\001\199\001\199\001\199\001\199\001\ \199\001\199\001\199\001\199\001\199\001\199\001\201\001\255\255\ \255\255\255\255\255\255\255\255\255\255\199\001\199\001\199\001\ \199\001\199\001\199\001\201\001\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\199\001\199\001\199\001\ \199\001\199\001\199\001\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \201\001\255\255\255\255\255\255\255\255\143\001\201\001\255\255\ \255\255\255\255\201\001\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\201\001\255\255\255\255\255\255\201\001\255\255\ \201\001\201\001\202\001\202\001\202\001\202\001\202\001\202\001\ \202\001\202\001\202\001\202\001\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\202\001\202\001\202\001\202\001\202\001\ \202\001\203\001\203\001\203\001\203\001\203\001\203\001\203\001\ \203\001\203\001\203\001\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\203\001\203\001\203\001\203\001\203\001\203\001\ \255\255\255\255\255\255\202\001\202\001\202\001\202\001\202\001\ \202\001\255\255\255\255\255\255\255\255\255\255\255\255\204\001\ \204\001\204\001\204\001\204\001\204\001\204\001\204\001\204\001\ \204\001\255\255\203\001\203\001\203\001\203\001\203\001\203\001\ \204\001\204\001\204\001\204\001\204\001\204\001\255\255\210\001\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \204\001\204\001\204\001\204\001\204\001\204\001\210\001\210\001\ \210\001\210\001\210\001\210\001\210\001\210\001\210\001\210\001\ \210\001\210\001\210\001\210\001\210\001\210\001\210\001\210\001\ \210\001\210\001\210\001\210\001\210\001\210\001\210\001\210\001\ \255\255\255\255\255\255\255\255\210\001\255\255\210\001\210\001\ \210\001\210\001\210\001\210\001\210\001\210\001\210\001\210\001\ \210\001\210\001\210\001\210\001\210\001\210\001\210\001\210\001\ \210\001\210\001\210\001\210\001\210\001\210\001\210\001\210\001\ \213\001\213\001\213\001\213\001\213\001\213\001\213\001\213\001\ \213\001\213\001\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\213\001\213\001\213\001\213\001\213\001\213\001\213\001\ \213\001\213\001\213\001\213\001\213\001\213\001\213\001\213\001\ \213\001\213\001\213\001\213\001\213\001\213\001\213\001\213\001\ \213\001\213\001\213\001\255\255\255\255\255\255\255\255\213\001\ \255\255\213\001\213\001\213\001\213\001\213\001\213\001\213\001\ \213\001\213\001\213\001\213\001\213\001\213\001\213\001\213\001\ \213\001\213\001\213\001\213\001\213\001\213\001\213\001\213\001\ \213\001\213\001\213\001\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\210\001\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255"; Lexing.lex_base_code = ""; Lexing.lex_backtrk_code = ""; Lexing.lex_default_code = ""; Lexing.lex_trans_code = ""; Lexing.lex_check_code = ""; Lexing.lex_code = ""; } let rec read_json v lexbuf = __ocaml_lex_read_json_rec v lexbuf 0 and __ocaml_lex_read_json_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 188 "lib/read.mll" # 188 "lib/read.mll" ( `Bool true ) # 1032 "lib/read.ml" # 1033 "lib/read.ml" | 1 -> # 189 "lib/read.mll" # 189 "lib/read.mll" ( `Bool false ) # 1037 "lib/read.ml" # 1038 "lib/read.ml" | 2 -> # 190 "lib/read.mll" # 190 "lib/read.mll" ( `Null ) # 1042 "lib/read.ml" # 1043 "lib/read.ml" | 3 -> # 191 "lib/read.mll" # 191 "lib/read.mll" ( # 195 "lib/read.mll" `Floatlit "NaN" # 197 "lib/read.mll" ) # 1053 "lib/read.ml" # 1054 "lib/read.ml" | 4 -> # 198 "lib/read.mll" # 198 "lib/read.mll" ( # 202 "lib/read.mll" `Floatlit "Infinity" # 204 "lib/read.mll" ) # 1064 "lib/read.ml" # 1065 "lib/read.ml" | 5 -> # 205 "lib/read.mll" # 205 "lib/read.mll" ( # 209 "lib/read.mll" `Floatlit "-Infinity" # 211 "lib/read.mll" ) # 1075 "lib/read.ml" # 1076 "lib/read.ml" | 6 -> # 212 "lib/read.mll" # 212 "lib/read.mll" ( # 217 "lib/read.mll" `Stringlit (finish_stringlit v lexbuf) # 219 "lib/read.mll" ) # 1087 "lib/read.ml" # 1088 "lib/read.ml" | 7 -> # 220 "lib/read.mll" # 220 "lib/read.mll" ( make_positive_int v lexbuf ) # 1092 "lib/read.ml" # 1093 "lib/read.ml" | 8 -> # 221 "lib/read.mll" # 221 "lib/read.mll" ( make_negative_int v lexbuf ) # 1097 "lib/read.ml" # 1098 "lib/read.ml" | 9 -> # 222 "lib/read.mll" # 222 "lib/read.mll" ( # 226 "lib/read.mll" `Floatlit (lexeme lexbuf) # 228 "lib/read.mll" ) # 1108 "lib/read.ml" # 1109 "lib/read.ml" | 10 -> # 230 "lib/read.mll" # 230 "lib/read.mll" ( let acc = ref [] in try read_space v lexbuf; read_object_end lexbuf; let field_name = read_ident v lexbuf in read_space v lexbuf; read_colon v lexbuf; read_space v lexbuf; acc := (field_name, read_json v lexbuf) :: !acc; while true do read_space v lexbuf; read_object_sep v lexbuf; read_space v lexbuf; let field_name = read_ident v lexbuf in read_space v lexbuf; read_colon v lexbuf; read_space v lexbuf; acc := (field_name, read_json v lexbuf) :: !acc; done; assert false with End_of_object -> `Assoc (List.rev !acc) ) # 1135 "lib/read.ml" # 1136 "lib/read.ml" | 11 -> # 254 "lib/read.mll" # 254 "lib/read.mll" ( let acc = ref [] in try read_space v lexbuf; read_array_end lexbuf; acc := read_json v lexbuf :: !acc; while true do read_space v lexbuf; read_array_sep v lexbuf; read_space v lexbuf; acc := read_json v lexbuf :: !acc; done; assert false with End_of_array -> `List (List.rev !acc) ) # 1154 "lib/read.ml" # 1155 "lib/read.ml" | 12 -> # 270 "lib/read.mll" # 270 "lib/read.mll" ( # 272 "lib/read.mll" let acc = ref [] in try read_space v lexbuf; read_tuple_end lexbuf; acc := read_json v lexbuf :: !acc; while true do read_space v lexbuf; read_tuple_sep v lexbuf; read_space v lexbuf; acc := read_json v lexbuf :: !acc; done; assert false with End_of_tuple -> `Tuple (List.rev !acc) # 289 "lib/read.mll" ) # 1178 "lib/read.ml" # 1179 "lib/read.ml" | 13 -> # 291 "lib/read.mll" # 291 "lib/read.mll" ( # 293 "lib/read.mll" read_space v lexbuf; let cons = read_ident v lexbuf in read_space v lexbuf; `Variant (cons, finish_variant v lexbuf) # 300 "lib/read.mll" ) # 1192 "lib/read.ml" # 1193 "lib/read.ml" | 14 -> # 302 "lib/read.mll" # 302 "lib/read.mll" ( read_json v lexbuf ) # 1197 "lib/read.ml" # 1198 "lib/read.ml" | 15 -> # 303 "lib/read.mll" # 303 "lib/read.mll" ( finish_comment v lexbuf; read_json v lexbuf ) # 1202 "lib/read.ml" # 1203 "lib/read.ml" | 16 -> # 304 "lib/read.mll" # 304 "lib/read.mll" ( newline v lexbuf; read_json v lexbuf ) # 1207 "lib/read.ml" # 1208 "lib/read.ml" | 17 -> # 305 "lib/read.mll" # 305 "lib/read.mll" ( read_json v lexbuf ) # 1212 "lib/read.ml" # 1213 "lib/read.ml" | 18 -> # 306 "lib/read.mll" # 306 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 1217 "lib/read.ml" # 1218 "lib/read.ml" | 19 -> # 307 "lib/read.mll" # 307 "lib/read.mll" ( long_error "Invalid token" v lexbuf ) # 1222 "lib/read.ml" # 1223 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_json_rec v lexbuf __ocaml_lex_state and finish_string v lexbuf = __ocaml_lex_finish_string_rec v lexbuf 58 and __ocaml_lex_finish_string_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 311 "lib/read.mll" # 311 "lib/read.mll" ( Buffer.contents v.buf ) # 1234 "lib/read.ml" # 1235 "lib/read.ml" | 1 -> # 312 "lib/read.mll" # 312 "lib/read.mll" ( finish_escaped_char v lexbuf; finish_string v lexbuf ) # 1240 "lib/read.ml" # 1241 "lib/read.ml" | 2 -> # 314 "lib/read.mll" # 314 "lib/read.mll" ( add_lexeme v.buf lexbuf; finish_string v lexbuf ) # 1246 "lib/read.ml" # 1247 "lib/read.ml" | 3 -> # 316 "lib/read.mll" # 316 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 1251 "lib/read.ml" # 1252 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_finish_string_rec v lexbuf __ocaml_lex_state and map_string v f lexbuf = __ocaml_lex_map_string_rec v f lexbuf 63 and __ocaml_lex_map_string_rec v f lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 319 "lib/read.mll" # 319 "lib/read.mll" ( let b = v.buf in f (Buffer.contents b) 0 (Buffer.length b) ) # 1264 "lib/read.ml" # 1265 "lib/read.ml" | 1 -> # 321 "lib/read.mll" # 321 "lib/read.mll" ( finish_escaped_char v lexbuf; map_string v f lexbuf ) # 1270 "lib/read.ml" # 1271 "lib/read.ml" | 2 -> # 323 "lib/read.mll" # 323 "lib/read.mll" ( add_lexeme v.buf lexbuf; map_string v f lexbuf ) # 1276 "lib/read.ml" # 1277 "lib/read.ml" | 3 -> # 325 "lib/read.mll" # 325 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 1281 "lib/read.ml" # 1282 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_map_string_rec v f lexbuf __ocaml_lex_state and finish_escaped_char v lexbuf = __ocaml_lex_finish_escaped_char_rec v lexbuf 68 and __ocaml_lex_finish_escaped_char_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> let # 330 "lib/read.mll" # 330 "lib/read.mll" c # 1294 "lib/read.ml" # 1294 "lib/read.ml" = Lexing.sub_lexeme_char lexbuf lexbuf.Lexing.lex_start_pos in # 330 "lib/read.mll" # 330 "lib/read.mll" ( Buffer.add_char v.buf c ) # 1298 "lib/read.ml" # 1299 "lib/read.ml" | 1 -> # 331 "lib/read.mll" # 331 "lib/read.mll" ( Buffer.add_char v.buf '\b' ) # 1303 "lib/read.ml" # 1304 "lib/read.ml" | 2 -> # 332 "lib/read.mll" # 332 "lib/read.mll" ( Buffer.add_char v.buf '\012' ) # 1308 "lib/read.ml" # 1309 "lib/read.ml" | 3 -> # 333 "lib/read.mll" # 333 "lib/read.mll" ( Buffer.add_char v.buf '\n' ) # 1313 "lib/read.ml" # 1314 "lib/read.ml" | 4 -> # 334 "lib/read.mll" # 334 "lib/read.mll" ( Buffer.add_char v.buf '\r' ) # 1318 "lib/read.ml" # 1319 "lib/read.ml" | 5 -> # 335 "lib/read.mll" # 335 "lib/read.mll" ( Buffer.add_char v.buf '\t' ) # 1323 "lib/read.ml" # 1324 "lib/read.ml" | 6 -> let # 336 "lib/read.mll" # 336 "lib/read.mll" a # 1329 "lib/read.ml" # 1329 "lib/read.ml" = Lexing.sub_lexeme_char lexbuf (lexbuf.Lexing.lex_start_pos + 1) and # 336 "lib/read.mll" # 336 "lib/read.mll" b # 1334 "lib/read.ml" # 1334 "lib/read.ml" = Lexing.sub_lexeme_char lexbuf (lexbuf.Lexing.lex_start_pos + 2) and # 336 "lib/read.mll" # 336 "lib/read.mll" c # 1339 "lib/read.ml" # 1339 "lib/read.ml" = Lexing.sub_lexeme_char lexbuf (lexbuf.Lexing.lex_start_pos + 3) and # 336 "lib/read.mll" # 336 "lib/read.mll" d # 1344 "lib/read.ml" # 1344 "lib/read.ml" = Lexing.sub_lexeme_char lexbuf (lexbuf.Lexing.lex_start_pos + 4) in # 337 "lib/read.mll" # 337 "lib/read.mll" ( let x = (hex a lsl 12) lor (hex b lsl 8) lor (hex c lsl 4) lor hex d in if x >= 0xD800 && x <= 0xDBFF then finish_surrogate_pair v x lexbuf else utf8_of_code v.buf x ) # 1355 "lib/read.ml" # 1356 "lib/read.ml" | 7 -> # 345 "lib/read.mll" # 345 "lib/read.mll" ( long_error "Invalid escape sequence" v lexbuf ) # 1360 "lib/read.ml" # 1361 "lib/read.ml" | 8 -> # 346 "lib/read.mll" # 346 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 1365 "lib/read.ml" # 1366 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_finish_escaped_char_rec v lexbuf __ocaml_lex_state and finish_surrogate_pair v x lexbuf = __ocaml_lex_finish_surrogate_pair_rec v x lexbuf 82 and __ocaml_lex_finish_surrogate_pair_rec v x lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> let # 349 "lib/read.mll" # 349 "lib/read.mll" a # 1378 "lib/read.ml" # 1378 "lib/read.ml" = Lexing.sub_lexeme_char lexbuf (lexbuf.Lexing.lex_start_pos + 2) and # 349 "lib/read.mll" # 349 "lib/read.mll" b # 1383 "lib/read.ml" # 1383 "lib/read.ml" = Lexing.sub_lexeme_char lexbuf (lexbuf.Lexing.lex_start_pos + 3) and # 349 "lib/read.mll" # 349 "lib/read.mll" c # 1388 "lib/read.ml" # 1388 "lib/read.ml" = Lexing.sub_lexeme_char lexbuf (lexbuf.Lexing.lex_start_pos + 4) and # 349 "lib/read.mll" # 349 "lib/read.mll" d # 1393 "lib/read.ml" # 1393 "lib/read.ml" = Lexing.sub_lexeme_char lexbuf (lexbuf.Lexing.lex_start_pos + 5) in # 350 "lib/read.mll" # 350 "lib/read.mll" ( let y = (hex a lsl 12) lor (hex b lsl 8) lor (hex c lsl 4) lor hex d in if y >= 0xDC00 && y <= 0xDFFF then utf8_of_surrogate_pair v.buf x y else long_error "Invalid low surrogate for code point beyond U+FFFF" v lexbuf ) # 1405 "lib/read.ml" # 1406 "lib/read.ml" | 1 -> # 359 "lib/read.mll" # 359 "lib/read.mll" ( long_error "Missing escape sequence representing low surrogate \ for code point beyond U+FFFF" v lexbuf ) # 1411 "lib/read.ml" # 1412 "lib/read.ml" | 2 -> # 361 "lib/read.mll" # 361 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 1416 "lib/read.ml" # 1417 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_finish_surrogate_pair_rec v x lexbuf __ocaml_lex_state and finish_stringlit v lexbuf = __ocaml_lex_finish_stringlit_rec v lexbuf 91 and __ocaml_lex_finish_stringlit_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 366 "lib/read.mll" # 366 "lib/read.mll" ( let len = lexbuf.lex_curr_pos - lexbuf.lex_start_pos in let s = Bytes.create (len+1) in Bytes.set s 0 '"'; Bytes.blit lexbuf.lex_buffer lexbuf.lex_start_pos s 1 len; Bytes.to_string s ) # 1433 "lib/read.ml" # 1434 "lib/read.ml" | 1 -> # 372 "lib/read.mll" # 372 "lib/read.mll" ( long_error "Invalid string literal" v lexbuf ) # 1438 "lib/read.ml" # 1439 "lib/read.ml" | 2 -> # 373 "lib/read.mll" # 373 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 1443 "lib/read.ml" # 1444 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_finish_stringlit_rec v lexbuf __ocaml_lex_state and finish_variant v lexbuf = __ocaml_lex_finish_variant_rec v lexbuf 102 and __ocaml_lex_finish_variant_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 376 "lib/read.mll" # 376 "lib/read.mll" ( let x = read_json v lexbuf in read_space v lexbuf; read_gt v lexbuf; Some x ) # 1458 "lib/read.ml" # 1459 "lib/read.ml" | 1 -> # 380 "lib/read.mll" # 380 "lib/read.mll" ( None ) # 1463 "lib/read.ml" # 1464 "lib/read.ml" | 2 -> # 381 "lib/read.mll" # 381 "lib/read.mll" ( long_error "Expected ':' or '>' but found" v lexbuf ) # 1468 "lib/read.ml" # 1469 "lib/read.ml" | 3 -> # 382 "lib/read.mll" # 382 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 1473 "lib/read.ml" # 1474 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_finish_variant_rec v lexbuf __ocaml_lex_state and read_lt v lexbuf = __ocaml_lex_read_lt_rec v lexbuf 107 and __ocaml_lex_read_lt_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 385 "lib/read.mll" # 385 "lib/read.mll" ( () ) # 1485 "lib/read.ml" # 1486 "lib/read.ml" | 1 -> # 386 "lib/read.mll" # 386 "lib/read.mll" ( long_error "Expected '<' but found" v lexbuf ) # 1490 "lib/read.ml" # 1491 "lib/read.ml" | 2 -> # 387 "lib/read.mll" # 387 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 1495 "lib/read.ml" # 1496 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_lt_rec v lexbuf __ocaml_lex_state and read_gt v lexbuf = __ocaml_lex_read_gt_rec v lexbuf 111 and __ocaml_lex_read_gt_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 390 "lib/read.mll" # 390 "lib/read.mll" ( () ) # 1507 "lib/read.ml" # 1508 "lib/read.ml" | 1 -> # 391 "lib/read.mll" # 391 "lib/read.mll" ( long_error "Expected '>' but found" v lexbuf ) # 1512 "lib/read.ml" # 1513 "lib/read.ml" | 2 -> # 392 "lib/read.mll" # 392 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 1517 "lib/read.ml" # 1518 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_gt_rec v lexbuf __ocaml_lex_state and read_comma v lexbuf = __ocaml_lex_read_comma_rec v lexbuf 115 and __ocaml_lex_read_comma_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 395 "lib/read.mll" # 395 "lib/read.mll" ( () ) # 1529 "lib/read.ml" # 1530 "lib/read.ml" | 1 -> # 396 "lib/read.mll" # 396 "lib/read.mll" ( long_error "Expected ',' but found" v lexbuf ) # 1534 "lib/read.ml" # 1535 "lib/read.ml" | 2 -> # 397 "lib/read.mll" # 397 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 1539 "lib/read.ml" # 1540 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_comma_rec v lexbuf __ocaml_lex_state and start_any_variant v lexbuf = __ocaml_lex_start_any_variant_rec v lexbuf 119 and __ocaml_lex_start_any_variant_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 400 "lib/read.mll" # 400 "lib/read.mll" ( `Edgy_bracket ) # 1551 "lib/read.ml" # 1552 "lib/read.ml" | 1 -> # 401 "lib/read.mll" # 401 "lib/read.mll" ( Buffer.clear v.buf; `Double_quote ) # 1557 "lib/read.ml" # 1558 "lib/read.ml" | 2 -> # 403 "lib/read.mll" # 403 "lib/read.mll" ( `Square_bracket ) # 1562 "lib/read.ml" # 1563 "lib/read.ml" | 3 -> # 404 "lib/read.mll" # 404 "lib/read.mll" ( long_error "Expected '<', '\"' or '[' but found" v lexbuf ) # 1567 "lib/read.ml" # 1568 "lib/read.ml" | 4 -> # 405 "lib/read.mll" # 405 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 1572 "lib/read.ml" # 1573 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_start_any_variant_rec v lexbuf __ocaml_lex_state and finish_comment v lexbuf = __ocaml_lex_finish_comment_rec v lexbuf 125 and __ocaml_lex_finish_comment_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 408 "lib/read.mll" # 408 "lib/read.mll" ( () ) # 1584 "lib/read.ml" # 1585 "lib/read.ml" | 1 -> # 409 "lib/read.mll" # 409 "lib/read.mll" ( long_error "Unterminated comment" v lexbuf ) # 1589 "lib/read.ml" # 1590 "lib/read.ml" | 2 -> # 410 "lib/read.mll" # 410 "lib/read.mll" ( newline v lexbuf; finish_comment v lexbuf ) # 1594 "lib/read.ml" # 1595 "lib/read.ml" | 3 -> # 411 "lib/read.mll" # 411 "lib/read.mll" ( finish_comment v lexbuf ) # 1599 "lib/read.ml" # 1600 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_finish_comment_rec v lexbuf __ocaml_lex_state and read_eof lexbuf = __ocaml_lex_read_eof_rec lexbuf 131 and __ocaml_lex_read_eof_rec lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 419 "lib/read.mll" # 419 "lib/read.mll" ( true ) # 1611 "lib/read.ml" # 1612 "lib/read.ml" | 1 -> # 420 "lib/read.mll" # 420 "lib/read.mll" ( false ) # 1616 "lib/read.ml" # 1617 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_eof_rec lexbuf __ocaml_lex_state and read_space v lexbuf = __ocaml_lex_read_space_rec v lexbuf 133 and __ocaml_lex_read_space_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 423 "lib/read.mll" # 423 "lib/read.mll" ( newline v lexbuf; read_space v lexbuf ) # 1628 "lib/read.ml" # 1629 "lib/read.ml" | 1 -> # 424 "lib/read.mll" # 424 "lib/read.mll" ( finish_comment v lexbuf; read_space v lexbuf ) # 1633 "lib/read.ml" # 1634 "lib/read.ml" | 2 -> # 425 "lib/read.mll" # 425 "lib/read.mll" ( newline v lexbuf; read_space v lexbuf ) # 1638 "lib/read.ml" # 1639 "lib/read.ml" | 3 -> # 426 "lib/read.mll" # 426 "lib/read.mll" ( read_space v lexbuf ) # 1643 "lib/read.ml" # 1644 "lib/read.ml" | 4 -> # 427 "lib/read.mll" # 427 "lib/read.mll" ( () ) # 1648 "lib/read.ml" # 1649 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_space_rec v lexbuf __ocaml_lex_state and read_null v lexbuf = __ocaml_lex_read_null_rec v lexbuf 140 and __ocaml_lex_read_null_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 430 "lib/read.mll" # 430 "lib/read.mll" ( () ) # 1660 "lib/read.ml" # 1661 "lib/read.ml" | 1 -> # 431 "lib/read.mll" # 431 "lib/read.mll" ( long_error "Expected 'null' but found" v lexbuf ) # 1665 "lib/read.ml" # 1666 "lib/read.ml" | 2 -> # 432 "lib/read.mll" # 432 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 1670 "lib/read.ml" # 1671 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_null_rec v lexbuf __ocaml_lex_state and read_null_if_possible v lexbuf = __ocaml_lex_read_null_if_possible_rec v lexbuf 147 and __ocaml_lex_read_null_if_possible_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 435 "lib/read.mll" # 435 "lib/read.mll" ( true ) # 1682 "lib/read.ml" # 1683 "lib/read.ml" | 1 -> # 436 "lib/read.mll" # 436 "lib/read.mll" ( false ) # 1687 "lib/read.ml" # 1688 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_null_if_possible_rec v lexbuf __ocaml_lex_state and read_bool v lexbuf = __ocaml_lex_read_bool_rec v lexbuf 152 and __ocaml_lex_read_bool_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 439 "lib/read.mll" # 439 "lib/read.mll" ( true ) # 1699 "lib/read.ml" # 1700 "lib/read.ml" | 1 -> # 440 "lib/read.mll" # 440 "lib/read.mll" ( false ) # 1704 "lib/read.ml" # 1705 "lib/read.ml" | 2 -> # 443 "lib/read.mll" # 443 "lib/read.mll" ( true ) # 1709 "lib/read.ml" # 1710 "lib/read.ml" | 3 -> # 444 "lib/read.mll" # 444 "lib/read.mll" ( false ) # 1714 "lib/read.ml" # 1715 "lib/read.ml" | 4 -> # 446 "lib/read.mll" # 446 "lib/read.mll" ( long_error "Expected 'true' or 'false' but found" v lexbuf ) # 1719 "lib/read.ml" # 1720 "lib/read.ml" | 5 -> # 447 "lib/read.mll" # 447 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 1724 "lib/read.ml" # 1725 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_bool_rec v lexbuf __ocaml_lex_state and read_int v lexbuf = __ocaml_lex_read_int_rec v lexbuf 176 and __ocaml_lex_read_int_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 450 "lib/read.mll" # 450 "lib/read.mll" ( try extract_positive_int lexbuf with Int_overflow -> lexer_error "Int overflow" v lexbuf ) # 1738 "lib/read.ml" # 1739 "lib/read.ml" | 1 -> # 453 "lib/read.mll" # 453 "lib/read.mll" ( try extract_negative_int lexbuf with Int_overflow -> lexer_error "Int overflow" v lexbuf ) # 1745 "lib/read.ml" # 1746 "lib/read.ml" | 2 -> # 456 "lib/read.mll" # 456 "lib/read.mll" ( (* Support for double-quoted "ints" *) Buffer.clear v.buf; let s = finish_string v lexbuf in try (* Any OCaml-compliant int will pass, including hexadecimal and octal notations, and embedded underscores *) int_of_string s with _ -> custom_error "Expected an integer but found a string that \ doesn't even represent an integer" v lexbuf ) # 1763 "lib/read.ml" # 1764 "lib/read.ml" | 3 -> # 470 "lib/read.mll" # 470 "lib/read.mll" ( long_error "Expected integer but found" v lexbuf ) # 1768 "lib/read.ml" # 1769 "lib/read.ml" | 4 -> # 471 "lib/read.mll" # 471 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 1773 "lib/read.ml" # 1774 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_int_rec v lexbuf __ocaml_lex_state and read_int32 v lexbuf = __ocaml_lex_read_int32_rec v lexbuf 185 and __ocaml_lex_read_int32_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 474 "lib/read.mll" # 474 "lib/read.mll" ( try Int32.of_string (Lexing.lexeme lexbuf) with _ -> lexer_error "Int32 overflow" v lexbuf ) # 1787 "lib/read.ml" # 1788 "lib/read.ml" | 1 -> # 477 "lib/read.mll" # 477 "lib/read.mll" ( (* Support for double-quoted "ints" *) Buffer.clear v.buf; let s = finish_string v lexbuf in try (* Any OCaml-compliant int will pass, including hexadecimal and octal notations, and embedded underscores *) Int32.of_string s with _ -> custom_error "Expected an int32 but found a string that \ doesn't even represent an integer" v lexbuf ) # 1805 "lib/read.ml" # 1806 "lib/read.ml" | 2 -> # 491 "lib/read.mll" # 491 "lib/read.mll" ( long_error "Expected int32 but found" v lexbuf ) # 1810 "lib/read.ml" # 1811 "lib/read.ml" | 3 -> # 492 "lib/read.mll" # 492 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 1815 "lib/read.ml" # 1816 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_int32_rec v lexbuf __ocaml_lex_state and read_int64 v lexbuf = __ocaml_lex_read_int64_rec v lexbuf 192 and __ocaml_lex_read_int64_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 495 "lib/read.mll" # 495 "lib/read.mll" ( try Int64.of_string (Lexing.lexeme lexbuf) with _ -> lexer_error "Int32 overflow" v lexbuf ) # 1829 "lib/read.ml" # 1830 "lib/read.ml" | 1 -> # 498 "lib/read.mll" # 498 "lib/read.mll" ( (* Support for double-quoted "ints" *) Buffer.clear v.buf; let s = finish_string v lexbuf in try (* Any OCaml-compliant int will pass, including hexadecimal and octal notations, and embedded underscores *) Int64.of_string s with _ -> custom_error "Expected an int64 but found a string that \ doesn't even represent an integer" v lexbuf ) # 1847 "lib/read.ml" # 1848 "lib/read.ml" | 2 -> # 512 "lib/read.mll" # 512 "lib/read.mll" ( long_error "Expected int64 but found" v lexbuf ) # 1852 "lib/read.ml" # 1853 "lib/read.ml" | 3 -> # 513 "lib/read.mll" # 513 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 1857 "lib/read.ml" # 1858 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_int64_rec v lexbuf __ocaml_lex_state and read_number v lexbuf = __ocaml_lex_read_number_rec v lexbuf 199 and __ocaml_lex_read_number_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 516 "lib/read.mll" # 516 "lib/read.mll" ( nan ) # 1869 "lib/read.ml" # 1870 "lib/read.ml" | 1 -> # 517 "lib/read.mll" # 517 "lib/read.mll" ( infinity ) # 1874 "lib/read.ml" # 1875 "lib/read.ml" | 2 -> # 518 "lib/read.mll" # 518 "lib/read.mll" ( neg_infinity ) # 1879 "lib/read.ml" # 1880 "lib/read.ml" | 3 -> # 519 "lib/read.mll" # 519 "lib/read.mll" ( float_of_string (lexeme lexbuf) ) # 1884 "lib/read.ml" # 1885 "lib/read.ml" | 4 -> # 520 "lib/read.mll" # 520 "lib/read.mll" ( Buffer.clear v.buf; let s = finish_string v lexbuf in try (* Any OCaml-compliant float will pass, including hexadecimal and octal notations, and embedded underscores. *) float_of_string s with _ -> match s with "NaN" -> nan | "Infinity" -> infinity | "-Infinity" -> neg_infinity | _ -> custom_error "Expected a number but found a string that \ doesn't even represent a number" v lexbuf ) # 1906 "lib/read.ml" # 1907 "lib/read.ml" | 5 -> # 538 "lib/read.mll" # 538 "lib/read.mll" ( long_error "Expected number but found" v lexbuf ) # 1911 "lib/read.ml" # 1912 "lib/read.ml" | 6 -> # 539 "lib/read.mll" # 539 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 1916 "lib/read.ml" # 1917 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_number_rec v lexbuf __ocaml_lex_state and read_string v lexbuf = __ocaml_lex_read_string_rec v lexbuf 233 and __ocaml_lex_read_string_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 542 "lib/read.mll" # 542 "lib/read.mll" ( Buffer.clear v.buf; finish_string v lexbuf ) # 1929 "lib/read.ml" # 1930 "lib/read.ml" | 1 -> # 544 "lib/read.mll" # 544 "lib/read.mll" ( long_error "Expected '\"' but found" v lexbuf ) # 1934 "lib/read.ml" # 1935 "lib/read.ml" | 2 -> # 545 "lib/read.mll" # 545 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 1939 "lib/read.ml" # 1940 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_string_rec v lexbuf __ocaml_lex_state and read_ident v lexbuf = __ocaml_lex_read_ident_rec v lexbuf 237 and __ocaml_lex_read_ident_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 548 "lib/read.mll" # 548 "lib/read.mll" ( Buffer.clear v.buf; finish_string v lexbuf ) # 1952 "lib/read.ml" # 1953 "lib/read.ml" | 1 -> let # 550 "lib/read.mll" # 550 "lib/read.mll" s # 1958 "lib/read.ml" # 1958 "lib/read.ml" = Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos lexbuf.Lexing.lex_curr_pos in # 551 "lib/read.mll" # 551 "lib/read.mll" ( s ) # 1962 "lib/read.ml" # 1963 "lib/read.ml" | 2 -> # 552 "lib/read.mll" # 552 "lib/read.mll" ( long_error "Expected string or identifier but found" v lexbuf ) # 1967 "lib/read.ml" # 1968 "lib/read.ml" | 3 -> # 553 "lib/read.mll" # 553 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 1972 "lib/read.ml" # 1973 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_ident_rec v lexbuf __ocaml_lex_state and map_ident v f lexbuf = __ocaml_lex_map_ident_rec v f lexbuf 242 and __ocaml_lex_map_ident_rec v f lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 556 "lib/read.mll" # 556 "lib/read.mll" ( Buffer.clear v.buf; map_string v f lexbuf ) # 1985 "lib/read.ml" # 1986 "lib/read.ml" | 1 -> # 559 "lib/read.mll" # 559 "lib/read.mll" ( map_lexeme f lexbuf ) # 1990 "lib/read.ml" # 1991 "lib/read.ml" | 2 -> # 560 "lib/read.mll" # 560 "lib/read.mll" ( long_error "Expected string or identifier but found" v lexbuf ) # 1995 "lib/read.ml" # 1996 "lib/read.ml" | 3 -> # 561 "lib/read.mll" # 561 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2000 "lib/read.ml" # 2001 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_map_ident_rec v f lexbuf __ocaml_lex_state and read_sequence read_cell init_acc v lexbuf = __ocaml_lex_read_sequence_rec read_cell init_acc v lexbuf 247 and __ocaml_lex_read_sequence_rec read_cell init_acc v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 564 "lib/read.mll" # 564 "lib/read.mll" ( let acc = ref init_acc in try read_space v lexbuf; read_array_end lexbuf; acc := read_cell !acc v lexbuf; while true do read_space v lexbuf; read_array_sep v lexbuf; read_space v lexbuf; acc := read_cell !acc v lexbuf; done; assert false with End_of_array -> !acc ) # 2026 "lib/read.ml" # 2027 "lib/read.ml" | 1 -> # 579 "lib/read.mll" # 579 "lib/read.mll" ( long_error "Expected '[' but found" v lexbuf ) # 2031 "lib/read.ml" # 2032 "lib/read.ml" | 2 -> # 580 "lib/read.mll" # 580 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2036 "lib/read.ml" # 2037 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_sequence_rec read_cell init_acc v lexbuf __ocaml_lex_state and read_list_rev read_cell v lexbuf = __ocaml_lex_read_list_rev_rec read_cell v lexbuf 251 and __ocaml_lex_read_list_rev_rec read_cell v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 583 "lib/read.mll" # 583 "lib/read.mll" ( let acc = ref [] in try read_space v lexbuf; read_array_end lexbuf; acc := read_cell v lexbuf :: !acc; while true do read_space v lexbuf; read_array_sep v lexbuf; read_space v lexbuf; acc := read_cell v lexbuf :: !acc; done; assert false with End_of_array -> !acc ) # 2062 "lib/read.ml" # 2063 "lib/read.ml" | 1 -> # 598 "lib/read.mll" # 598 "lib/read.mll" ( long_error "Expected '[' but found" v lexbuf ) # 2067 "lib/read.ml" # 2068 "lib/read.ml" | 2 -> # 599 "lib/read.mll" # 599 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2072 "lib/read.ml" # 2073 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_list_rev_rec read_cell v lexbuf __ocaml_lex_state and read_array_end lexbuf = __ocaml_lex_read_array_end_rec lexbuf 255 and __ocaml_lex_read_array_end_rec lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 602 "lib/read.mll" # 602 "lib/read.mll" ( raise End_of_array ) # 2084 "lib/read.ml" # 2085 "lib/read.ml" | 1 -> # 603 "lib/read.mll" # 603 "lib/read.mll" ( () ) # 2089 "lib/read.ml" # 2090 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_array_end_rec lexbuf __ocaml_lex_state and read_array_sep v lexbuf = __ocaml_lex_read_array_sep_rec v lexbuf 257 and __ocaml_lex_read_array_sep_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 606 "lib/read.mll" # 606 "lib/read.mll" ( () ) # 2101 "lib/read.ml" # 2102 "lib/read.ml" | 1 -> # 607 "lib/read.mll" # 607 "lib/read.mll" ( raise End_of_array ) # 2106 "lib/read.ml" # 2107 "lib/read.ml" | 2 -> # 608 "lib/read.mll" # 608 "lib/read.mll" ( long_error "Expected ',' or ']' but found" v lexbuf ) # 2111 "lib/read.ml" # 2112 "lib/read.ml" | 3 -> # 609 "lib/read.mll" # 609 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2116 "lib/read.ml" # 2117 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_array_sep_rec v lexbuf __ocaml_lex_state and read_tuple read_cell init_acc v lexbuf = __ocaml_lex_read_tuple_rec read_cell init_acc v lexbuf 262 and __ocaml_lex_read_tuple_rec read_cell init_acc v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 613 "lib/read.mll" # 613 "lib/read.mll" ( # 615 "lib/read.mll" let pos = ref 0 in let acc = ref init_acc in try read_space v lexbuf; read_tuple_end lexbuf; acc := read_cell !pos !acc v lexbuf; incr pos; while true do read_space v lexbuf; read_tuple_sep v lexbuf; read_space v lexbuf; acc := read_cell !pos !acc v lexbuf; incr pos; done; assert false with End_of_tuple -> !acc # 635 "lib/read.mll" ) # 2150 "lib/read.ml" # 2151 "lib/read.ml" | 1 -> # 636 "lib/read.mll" # 636 "lib/read.mll" ( long_error "Expected ')' but found" v lexbuf ) # 2155 "lib/read.ml" # 2156 "lib/read.ml" | 2 -> # 637 "lib/read.mll" # 637 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2160 "lib/read.ml" # 2161 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_tuple_rec read_cell init_acc v lexbuf __ocaml_lex_state and read_tuple_end lexbuf = __ocaml_lex_read_tuple_end_rec lexbuf 266 and __ocaml_lex_read_tuple_end_rec lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 640 "lib/read.mll" # 640 "lib/read.mll" ( raise End_of_tuple ) # 2172 "lib/read.ml" # 2173 "lib/read.ml" | 1 -> # 641 "lib/read.mll" # 641 "lib/read.mll" ( () ) # 2177 "lib/read.ml" # 2178 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_tuple_end_rec lexbuf __ocaml_lex_state and read_tuple_end2 v std lexbuf = __ocaml_lex_read_tuple_end2_rec v std lexbuf 268 and __ocaml_lex_read_tuple_end2_rec v std lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 644 "lib/read.mll" # 644 "lib/read.mll" ( if std then long_error "Expected ')' or '' but found" v lexbuf else raise End_of_tuple ) # 2192 "lib/read.ml" # 2193 "lib/read.ml" | 1 -> # 648 "lib/read.mll" # 648 "lib/read.mll" ( if std then raise End_of_tuple else long_error "Expected ']' or '' but found" v lexbuf ) # 2200 "lib/read.ml" # 2201 "lib/read.ml" | 2 -> # 652 "lib/read.mll" # 652 "lib/read.mll" ( () ) # 2205 "lib/read.ml" # 2206 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_tuple_end2_rec v std lexbuf __ocaml_lex_state and read_tuple_sep v lexbuf = __ocaml_lex_read_tuple_sep_rec v lexbuf 271 and __ocaml_lex_read_tuple_sep_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 655 "lib/read.mll" # 655 "lib/read.mll" ( () ) # 2217 "lib/read.ml" # 2218 "lib/read.ml" | 1 -> # 656 "lib/read.mll" # 656 "lib/read.mll" ( raise End_of_tuple ) # 2222 "lib/read.ml" # 2223 "lib/read.ml" | 2 -> # 657 "lib/read.mll" # 657 "lib/read.mll" ( long_error "Expected ',' or ')' but found" v lexbuf ) # 2227 "lib/read.ml" # 2228 "lib/read.ml" | 3 -> # 658 "lib/read.mll" # 658 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2232 "lib/read.ml" # 2233 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_tuple_sep_rec v lexbuf __ocaml_lex_state and read_tuple_sep2 v std lexbuf = __ocaml_lex_read_tuple_sep2_rec v std lexbuf 276 and __ocaml_lex_read_tuple_sep2_rec v std lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 661 "lib/read.mll" # 661 "lib/read.mll" ( () ) # 2244 "lib/read.ml" # 2245 "lib/read.ml" | 1 -> # 662 "lib/read.mll" # 662 "lib/read.mll" ( if std then long_error "Expected ',' or ']' but found" v lexbuf else raise End_of_tuple ) # 2252 "lib/read.ml" # 2253 "lib/read.ml" | 2 -> # 666 "lib/read.mll" # 666 "lib/read.mll" ( if std then raise End_of_tuple else long_error "Expected ',' or ')' but found" v lexbuf ) # 2260 "lib/read.ml" # 2261 "lib/read.ml" | 3 -> # 670 "lib/read.mll" # 670 "lib/read.mll" ( long_error "Expected ',' or ')' but found" v lexbuf ) # 2265 "lib/read.ml" # 2266 "lib/read.ml" | 4 -> # 671 "lib/read.mll" # 671 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2270 "lib/read.ml" # 2271 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_tuple_sep2_rec v std lexbuf __ocaml_lex_state and read_abstract_fields read_key read_field init_acc v lexbuf = __ocaml_lex_read_abstract_fields_rec read_key read_field init_acc v lexbuf 282 and __ocaml_lex_read_abstract_fields_rec read_key read_field init_acc v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 675 "lib/read.mll" # 675 "lib/read.mll" ( let acc = ref init_acc in try read_space v lexbuf; read_object_end lexbuf; let field_name = read_key v lexbuf in read_space v lexbuf; read_colon v lexbuf; read_space v lexbuf; acc := read_field !acc field_name v lexbuf; while true do read_space v lexbuf; read_object_sep v lexbuf; read_space v lexbuf; let field_name = read_key v lexbuf in read_space v lexbuf; read_colon v lexbuf; read_space v lexbuf; acc := read_field !acc field_name v lexbuf; done; assert false with End_of_object -> !acc ) # 2304 "lib/read.ml" # 2305 "lib/read.ml" | 1 -> # 698 "lib/read.mll" # 698 "lib/read.mll" ( long_error "Expected '{' but found" v lexbuf ) # 2309 "lib/read.ml" # 2310 "lib/read.ml" | 2 -> # 699 "lib/read.mll" # 699 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2314 "lib/read.ml" # 2315 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_abstract_fields_rec read_key read_field init_acc v lexbuf __ocaml_lex_state and read_lcurl v lexbuf = __ocaml_lex_read_lcurl_rec v lexbuf 286 and __ocaml_lex_read_lcurl_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 702 "lib/read.mll" # 702 "lib/read.mll" ( () ) # 2326 "lib/read.ml" # 2327 "lib/read.ml" | 1 -> # 703 "lib/read.mll" # 703 "lib/read.mll" ( long_error "Expected '{' but found" v lexbuf ) # 2331 "lib/read.ml" # 2332 "lib/read.ml" | 2 -> # 704 "lib/read.mll" # 704 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2336 "lib/read.ml" # 2337 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_lcurl_rec v lexbuf __ocaml_lex_state and read_object_end lexbuf = __ocaml_lex_read_object_end_rec lexbuf 290 and __ocaml_lex_read_object_end_rec lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 707 "lib/read.mll" # 707 "lib/read.mll" ( raise End_of_object ) # 2348 "lib/read.ml" # 2349 "lib/read.ml" | 1 -> # 708 "lib/read.mll" # 708 "lib/read.mll" ( () ) # 2353 "lib/read.ml" # 2354 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_object_end_rec lexbuf __ocaml_lex_state and read_object_sep v lexbuf = __ocaml_lex_read_object_sep_rec v lexbuf 292 and __ocaml_lex_read_object_sep_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 711 "lib/read.mll" # 711 "lib/read.mll" ( () ) # 2365 "lib/read.ml" # 2366 "lib/read.ml" | 1 -> # 712 "lib/read.mll" # 712 "lib/read.mll" ( raise End_of_object ) # 2370 "lib/read.ml" # 2371 "lib/read.ml" | 2 -> # 713 "lib/read.mll" # 713 "lib/read.mll" ( long_error "Expected ',' or '}' but found" v lexbuf ) # 2375 "lib/read.ml" # 2376 "lib/read.ml" | 3 -> # 714 "lib/read.mll" # 714 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2380 "lib/read.ml" # 2381 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_object_sep_rec v lexbuf __ocaml_lex_state and read_colon v lexbuf = __ocaml_lex_read_colon_rec v lexbuf 297 and __ocaml_lex_read_colon_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 717 "lib/read.mll" # 717 "lib/read.mll" ( () ) # 2392 "lib/read.ml" # 2393 "lib/read.ml" | 1 -> # 718 "lib/read.mll" # 718 "lib/read.mll" ( long_error "Expected ':' but found" v lexbuf ) # 2397 "lib/read.ml" # 2398 "lib/read.ml" | 2 -> # 719 "lib/read.mll" # 719 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2402 "lib/read.ml" # 2403 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_colon_rec v lexbuf __ocaml_lex_state and start_any_tuple v lexbuf = __ocaml_lex_start_any_tuple_rec v lexbuf 301 and __ocaml_lex_start_any_tuple_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 722 "lib/read.mll" # 722 "lib/read.mll" ( false ) # 2414 "lib/read.ml" # 2415 "lib/read.ml" | 1 -> # 723 "lib/read.mll" # 723 "lib/read.mll" ( true ) # 2419 "lib/read.ml" # 2420 "lib/read.ml" | 2 -> # 724 "lib/read.mll" # 724 "lib/read.mll" ( long_error "Expected '(' or '[' but found" v lexbuf ) # 2424 "lib/read.ml" # 2425 "lib/read.ml" | 3 -> # 725 "lib/read.mll" # 725 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2429 "lib/read.ml" # 2430 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_start_any_tuple_rec v lexbuf __ocaml_lex_state and read_lpar v lexbuf = __ocaml_lex_read_lpar_rec v lexbuf 306 and __ocaml_lex_read_lpar_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 728 "lib/read.mll" # 728 "lib/read.mll" ( () ) # 2441 "lib/read.ml" # 2442 "lib/read.ml" | 1 -> # 729 "lib/read.mll" # 729 "lib/read.mll" ( long_error "Expected '(' but found" v lexbuf ) # 2446 "lib/read.ml" # 2447 "lib/read.ml" | 2 -> # 730 "lib/read.mll" # 730 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2451 "lib/read.ml" # 2452 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_lpar_rec v lexbuf __ocaml_lex_state and read_rpar v lexbuf = __ocaml_lex_read_rpar_rec v lexbuf 310 and __ocaml_lex_read_rpar_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 733 "lib/read.mll" # 733 "lib/read.mll" ( () ) # 2463 "lib/read.ml" # 2464 "lib/read.ml" | 1 -> # 734 "lib/read.mll" # 734 "lib/read.mll" ( long_error "Expected ')' but found" v lexbuf ) # 2468 "lib/read.ml" # 2469 "lib/read.ml" | 2 -> # 735 "lib/read.mll" # 735 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2473 "lib/read.ml" # 2474 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_rpar_rec v lexbuf __ocaml_lex_state and read_lbr v lexbuf = __ocaml_lex_read_lbr_rec v lexbuf 314 and __ocaml_lex_read_lbr_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 738 "lib/read.mll" # 738 "lib/read.mll" ( () ) # 2485 "lib/read.ml" # 2486 "lib/read.ml" | 1 -> # 739 "lib/read.mll" # 739 "lib/read.mll" ( long_error "Expected '[' but found" v lexbuf ) # 2490 "lib/read.ml" # 2491 "lib/read.ml" | 2 -> # 740 "lib/read.mll" # 740 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2495 "lib/read.ml" # 2496 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_lbr_rec v lexbuf __ocaml_lex_state and read_rbr v lexbuf = __ocaml_lex_read_rbr_rec v lexbuf 318 and __ocaml_lex_read_rbr_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 743 "lib/read.mll" # 743 "lib/read.mll" ( () ) # 2507 "lib/read.ml" # 2508 "lib/read.ml" | 1 -> # 744 "lib/read.mll" # 744 "lib/read.mll" ( long_error "Expected ']' but found" v lexbuf ) # 2512 "lib/read.ml" # 2513 "lib/read.ml" | 2 -> # 745 "lib/read.mll" # 745 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2517 "lib/read.ml" # 2518 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_rbr_rec v lexbuf __ocaml_lex_state and skip_json v lexbuf = __ocaml_lex_skip_json_rec v lexbuf 322 and __ocaml_lex_skip_json_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 751 "lib/read.mll" # 751 "lib/read.mll" ( () ) # 2529 "lib/read.ml" # 2530 "lib/read.ml" | 1 -> # 752 "lib/read.mll" # 752 "lib/read.mll" ( () ) # 2534 "lib/read.ml" # 2535 "lib/read.ml" | 2 -> # 753 "lib/read.mll" # 753 "lib/read.mll" ( () ) # 2539 "lib/read.ml" # 2540 "lib/read.ml" | 3 -> # 754 "lib/read.mll" # 754 "lib/read.mll" ( () ) # 2544 "lib/read.ml" # 2545 "lib/read.ml" | 4 -> # 755 "lib/read.mll" # 755 "lib/read.mll" ( () ) # 2549 "lib/read.ml" # 2550 "lib/read.ml" | 5 -> # 756 "lib/read.mll" # 756 "lib/read.mll" ( () ) # 2554 "lib/read.ml" # 2555 "lib/read.ml" | 6 -> # 757 "lib/read.mll" # 757 "lib/read.mll" ( finish_skip_stringlit v lexbuf ) # 2559 "lib/read.ml" # 2560 "lib/read.ml" | 7 -> # 758 "lib/read.mll" # 758 "lib/read.mll" ( () ) # 2564 "lib/read.ml" # 2565 "lib/read.ml" | 8 -> # 759 "lib/read.mll" # 759 "lib/read.mll" ( () ) # 2569 "lib/read.ml" # 2570 "lib/read.ml" | 9 -> # 761 "lib/read.mll" # 761 "lib/read.mll" ( try read_space v lexbuf; read_object_end lexbuf; skip_ident v lexbuf; read_space v lexbuf; read_colon v lexbuf; read_space v lexbuf; skip_json v lexbuf; while true do read_space v lexbuf; read_object_sep v lexbuf; read_space v lexbuf; skip_ident v lexbuf; read_space v lexbuf; read_colon v lexbuf; read_space v lexbuf; skip_json v lexbuf; done; assert false with End_of_object -> () ) # 2595 "lib/read.ml" # 2596 "lib/read.ml" | 10 -> # 784 "lib/read.mll" # 784 "lib/read.mll" ( try read_space v lexbuf; read_array_end lexbuf; skip_json v lexbuf; while true do read_space v lexbuf; read_array_sep v lexbuf; read_space v lexbuf; skip_json v lexbuf; done; assert false with End_of_array -> () ) # 2613 "lib/read.ml" # 2614 "lib/read.ml" | 11 -> # 799 "lib/read.mll" # 799 "lib/read.mll" ( # 801 "lib/read.mll" try read_space v lexbuf; read_tuple_end lexbuf; skip_json v lexbuf; while true do read_space v lexbuf; read_tuple_sep v lexbuf; read_space v lexbuf; skip_json v lexbuf; done; assert false with End_of_tuple -> () # 817 "lib/read.mll" ) # 2636 "lib/read.ml" # 2637 "lib/read.ml" | 12 -> # 819 "lib/read.mll" # 819 "lib/read.mll" ( # 821 "lib/read.mll" read_space v lexbuf; skip_ident v lexbuf; read_space v lexbuf; finish_skip_variant v lexbuf # 828 "lib/read.mll" ) # 2650 "lib/read.ml" # 2651 "lib/read.ml" | 13 -> # 830 "lib/read.mll" # 830 "lib/read.mll" ( skip_json v lexbuf ) # 2655 "lib/read.ml" # 2656 "lib/read.ml" | 14 -> # 831 "lib/read.mll" # 831 "lib/read.mll" ( finish_comment v lexbuf; skip_json v lexbuf ) # 2660 "lib/read.ml" # 2661 "lib/read.ml" | 15 -> # 832 "lib/read.mll" # 832 "lib/read.mll" ( newline v lexbuf; skip_json v lexbuf ) # 2665 "lib/read.ml" # 2666 "lib/read.ml" | 16 -> # 833 "lib/read.mll" # 833 "lib/read.mll" ( skip_json v lexbuf ) # 2670 "lib/read.ml" # 2671 "lib/read.ml" | 17 -> # 834 "lib/read.mll" # 834 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2675 "lib/read.ml" # 2676 "lib/read.ml" | 18 -> # 835 "lib/read.mll" # 835 "lib/read.mll" ( long_error "Invalid token" v lexbuf ) # 2680 "lib/read.ml" # 2681 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_skip_json_rec v lexbuf __ocaml_lex_state and finish_skip_stringlit v lexbuf = __ocaml_lex_finish_skip_stringlit_rec v lexbuf 378 and __ocaml_lex_finish_skip_stringlit_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 841 "lib/read.mll" # 841 "lib/read.mll" ( () ) # 2692 "lib/read.ml" # 2693 "lib/read.ml" | 1 -> # 842 "lib/read.mll" # 842 "lib/read.mll" ( long_error "Invalid string literal" v lexbuf ) # 2697 "lib/read.ml" # 2698 "lib/read.ml" | 2 -> # 843 "lib/read.mll" # 843 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2702 "lib/read.ml" # 2703 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_finish_skip_stringlit_rec v lexbuf __ocaml_lex_state and finish_skip_variant v lexbuf = __ocaml_lex_finish_skip_variant_rec v lexbuf 389 and __ocaml_lex_finish_skip_variant_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 846 "lib/read.mll" # 846 "lib/read.mll" ( skip_json v lexbuf; read_space v lexbuf; read_gt v lexbuf ) # 2716 "lib/read.ml" # 2717 "lib/read.ml" | 1 -> # 849 "lib/read.mll" # 849 "lib/read.mll" ( () ) # 2721 "lib/read.ml" # 2722 "lib/read.ml" | 2 -> # 850 "lib/read.mll" # 850 "lib/read.mll" ( long_error "Expected ':' or '>' but found" v lexbuf ) # 2726 "lib/read.ml" # 2727 "lib/read.ml" | 3 -> # 851 "lib/read.mll" # 851 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2731 "lib/read.ml" # 2732 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_finish_skip_variant_rec v lexbuf __ocaml_lex_state and skip_ident v lexbuf = __ocaml_lex_skip_ident_rec v lexbuf 394 and __ocaml_lex_skip_ident_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 854 "lib/read.mll" # 854 "lib/read.mll" ( finish_skip_stringlit v lexbuf ) # 2743 "lib/read.ml" # 2744 "lib/read.ml" | 1 -> # 855 "lib/read.mll" # 855 "lib/read.mll" ( () ) # 2748 "lib/read.ml" # 2749 "lib/read.ml" | 2 -> # 856 "lib/read.mll" # 856 "lib/read.mll" ( long_error "Expected string or identifier but found" v lexbuf ) # 2753 "lib/read.ml" # 2754 "lib/read.ml" | 3 -> # 857 "lib/read.mll" # 857 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2758 "lib/read.ml" # 2759 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_skip_ident_rec v lexbuf __ocaml_lex_state and buffer_json v lexbuf = __ocaml_lex_buffer_json_rec v lexbuf 399 and __ocaml_lex_buffer_json_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 870 "lib/read.mll" # 870 "lib/read.mll" ( add_lexeme v.buf lexbuf ) # 2770 "lib/read.ml" # 2771 "lib/read.ml" | 1 -> # 872 "lib/read.mll" # 872 "lib/read.mll" ( finish_buffer_stringlit v lexbuf ) # 2775 "lib/read.ml" # 2776 "lib/read.ml" | 2 -> # 873 "lib/read.mll" # 873 "lib/read.mll" ( try Buffer.add_char v.buf '{'; buffer_space v lexbuf; buffer_object_end v lexbuf; buffer_ident v lexbuf; buffer_space v lexbuf; buffer_colon v lexbuf; buffer_space v lexbuf; buffer_json v lexbuf; while true do buffer_space v lexbuf; buffer_object_sep v lexbuf; buffer_space v lexbuf; buffer_ident v lexbuf; buffer_space v lexbuf; buffer_colon v lexbuf; buffer_space v lexbuf; buffer_json v lexbuf; done; assert false with End_of_object -> () ) # 2802 "lib/read.ml" # 2803 "lib/read.ml" | 3 -> # 897 "lib/read.mll" # 897 "lib/read.mll" ( try Buffer.add_char v.buf '['; buffer_space v lexbuf; buffer_array_end v lexbuf; buffer_json v lexbuf; while true do buffer_space v lexbuf; buffer_array_sep v lexbuf; buffer_space v lexbuf; buffer_json v lexbuf; done; assert false with End_of_array -> () ) # 2821 "lib/read.ml" # 2822 "lib/read.ml" | 4 -> # 913 "lib/read.mll" # 913 "lib/read.mll" ( # 915 "lib/read.mll" try Buffer.add_char v.buf '('; buffer_space v lexbuf; buffer_tuple_end v lexbuf; buffer_json v lexbuf; while true do buffer_space v lexbuf; buffer_tuple_sep v lexbuf; buffer_space v lexbuf; buffer_json v lexbuf; done; assert false with End_of_tuple -> () # 932 "lib/read.mll" ) # 2845 "lib/read.ml" # 2846 "lib/read.ml" | 5 -> # 934 "lib/read.mll" # 934 "lib/read.mll" ( # 936 "lib/read.mll" Buffer.add_char v.buf '<'; buffer_space v lexbuf; buffer_ident v lexbuf; buffer_space v lexbuf; finish_buffer_variant v lexbuf # 944 "lib/read.mll" ) # 2860 "lib/read.ml" # 2861 "lib/read.ml" | 6 -> # 946 "lib/read.mll" # 946 "lib/read.mll" ( add_lexeme v.buf lexbuf; buffer_json v lexbuf ) # 2865 "lib/read.ml" # 2866 "lib/read.ml" | 7 -> # 947 "lib/read.mll" # 947 "lib/read.mll" ( Buffer.add_string v.buf "/*"; finish_buffer_comment v lexbuf; buffer_json v lexbuf ) # 2872 "lib/read.ml" # 2873 "lib/read.ml" | 8 -> # 950 "lib/read.mll" # 950 "lib/read.mll" ( Buffer.add_char v.buf '\n'; newline v lexbuf; buffer_json v lexbuf ) # 2879 "lib/read.ml" # 2880 "lib/read.ml" | 9 -> # 953 "lib/read.mll" # 953 "lib/read.mll" ( add_lexeme v.buf lexbuf; buffer_json v lexbuf ) # 2884 "lib/read.ml" # 2885 "lib/read.ml" | 10 -> # 954 "lib/read.mll" # 954 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2889 "lib/read.ml" # 2890 "lib/read.ml" | 11 -> # 955 "lib/read.mll" # 955 "lib/read.mll" ( long_error "Invalid token" v lexbuf ) # 2894 "lib/read.ml" # 2895 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_buffer_json_rec v lexbuf __ocaml_lex_state and finish_buffer_stringlit v lexbuf = __ocaml_lex_finish_buffer_stringlit_rec v lexbuf 450 and __ocaml_lex_finish_buffer_stringlit_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 961 "lib/read.mll" # 961 "lib/read.mll" ( Buffer.add_char v.buf '"'; add_lexeme v.buf lexbuf ) # 2908 "lib/read.ml" # 2909 "lib/read.ml" | 1 -> # 964 "lib/read.mll" # 964 "lib/read.mll" ( long_error "Invalid string literal" v lexbuf ) # 2913 "lib/read.ml" # 2914 "lib/read.ml" | 2 -> # 965 "lib/read.mll" # 965 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2918 "lib/read.ml" # 2919 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_finish_buffer_stringlit_rec v lexbuf __ocaml_lex_state and finish_buffer_variant v lexbuf = __ocaml_lex_finish_buffer_variant_rec v lexbuf 461 and __ocaml_lex_finish_buffer_variant_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 968 "lib/read.mll" # 968 "lib/read.mll" ( Buffer.add_char v.buf ':'; buffer_json v lexbuf; buffer_space v lexbuf; buffer_gt v lexbuf ) # 2933 "lib/read.ml" # 2934 "lib/read.ml" | 1 -> # 972 "lib/read.mll" # 972 "lib/read.mll" ( Buffer.add_char v.buf '>' ) # 2938 "lib/read.ml" # 2939 "lib/read.ml" | 2 -> # 973 "lib/read.mll" # 973 "lib/read.mll" ( long_error "Expected ':' or '>' but found" v lexbuf ) # 2943 "lib/read.ml" # 2944 "lib/read.ml" | 3 -> # 974 "lib/read.mll" # 974 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2948 "lib/read.ml" # 2949 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_finish_buffer_variant_rec v lexbuf __ocaml_lex_state and buffer_ident v lexbuf = __ocaml_lex_buffer_ident_rec v lexbuf 466 and __ocaml_lex_buffer_ident_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 977 "lib/read.mll" # 977 "lib/read.mll" ( finish_buffer_stringlit v lexbuf ) # 2960 "lib/read.ml" # 2961 "lib/read.ml" | 1 -> # 978 "lib/read.mll" # 978 "lib/read.mll" ( add_lexeme v.buf lexbuf ) # 2965 "lib/read.ml" # 2966 "lib/read.ml" | 2 -> # 979 "lib/read.mll" # 979 "lib/read.mll" ( long_error "Expected string or identifier but found" v lexbuf ) # 2970 "lib/read.ml" # 2971 "lib/read.ml" | 3 -> # 980 "lib/read.mll" # 980 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 2975 "lib/read.ml" # 2976 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_buffer_ident_rec v lexbuf __ocaml_lex_state and buffer_space v lexbuf = __ocaml_lex_buffer_space_rec v lexbuf 471 and __ocaml_lex_buffer_space_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 983 "lib/read.mll" # 983 "lib/read.mll" ( add_lexeme v.buf lexbuf; newline v lexbuf; buffer_space v lexbuf ) # 2990 "lib/read.ml" # 2991 "lib/read.ml" | 1 -> # 987 "lib/read.mll" # 987 "lib/read.mll" ( Buffer.add_string v.buf "/*"; finish_buffer_comment v lexbuf; buffer_space v lexbuf ) # 2998 "lib/read.ml" # 2999 "lib/read.ml" | 2 -> # 991 "lib/read.mll" # 991 "lib/read.mll" ( Buffer.add_char v.buf '\n'; newline v lexbuf; buffer_space v lexbuf ) # 3006 "lib/read.ml" # 3007 "lib/read.ml" | 3 -> # 995 "lib/read.mll" # 995 "lib/read.mll" ( add_lexeme v.buf lexbuf; buffer_space v lexbuf ) # 3013 "lib/read.ml" # 3014 "lib/read.ml" | 4 -> # 998 "lib/read.mll" # 998 "lib/read.mll" ( () ) # 3018 "lib/read.ml" # 3019 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_buffer_space_rec v lexbuf __ocaml_lex_state and buffer_object_end v lexbuf = __ocaml_lex_buffer_object_end_rec v lexbuf 478 and __ocaml_lex_buffer_object_end_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 1001 "lib/read.mll" # 1001 "lib/read.mll" ( Buffer.add_char v.buf '}'; raise End_of_object ) # 3032 "lib/read.ml" # 3033 "lib/read.ml" | 1 -> # 1004 "lib/read.mll" # 1004 "lib/read.mll" ( () ) # 3037 "lib/read.ml" # 3038 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_buffer_object_end_rec v lexbuf __ocaml_lex_state and buffer_object_sep v lexbuf = __ocaml_lex_buffer_object_sep_rec v lexbuf 480 and __ocaml_lex_buffer_object_sep_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 1007 "lib/read.mll" # 1007 "lib/read.mll" ( Buffer.add_char v.buf ',' ) # 3049 "lib/read.ml" # 3050 "lib/read.ml" | 1 -> # 1008 "lib/read.mll" # 1008 "lib/read.mll" ( Buffer.add_char v.buf '}'; raise End_of_object ) # 3054 "lib/read.ml" # 3055 "lib/read.ml" | 2 -> # 1009 "lib/read.mll" # 1009 "lib/read.mll" ( long_error "Expected ',' or '}' but found" v lexbuf ) # 3059 "lib/read.ml" # 3060 "lib/read.ml" | 3 -> # 1010 "lib/read.mll" # 1010 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 3064 "lib/read.ml" # 3065 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_buffer_object_sep_rec v lexbuf __ocaml_lex_state and buffer_array_end v lexbuf = __ocaml_lex_buffer_array_end_rec v lexbuf 485 and __ocaml_lex_buffer_array_end_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 1013 "lib/read.mll" # 1013 "lib/read.mll" ( Buffer.add_char v.buf ']'; raise End_of_array ) # 3076 "lib/read.ml" # 3077 "lib/read.ml" | 1 -> # 1014 "lib/read.mll" # 1014 "lib/read.mll" ( () ) # 3081 "lib/read.ml" # 3082 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_buffer_array_end_rec v lexbuf __ocaml_lex_state and buffer_array_sep v lexbuf = __ocaml_lex_buffer_array_sep_rec v lexbuf 487 and __ocaml_lex_buffer_array_sep_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 1017 "lib/read.mll" # 1017 "lib/read.mll" ( Buffer.add_char v.buf ',' ) # 3093 "lib/read.ml" # 3094 "lib/read.ml" | 1 -> # 1018 "lib/read.mll" # 1018 "lib/read.mll" ( Buffer.add_char v.buf ']'; raise End_of_array ) # 3098 "lib/read.ml" # 3099 "lib/read.ml" | 2 -> # 1019 "lib/read.mll" # 1019 "lib/read.mll" ( long_error "Expected ',' or ']' but found" v lexbuf ) # 3103 "lib/read.ml" # 3104 "lib/read.ml" | 3 -> # 1020 "lib/read.mll" # 1020 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 3108 "lib/read.ml" # 3109 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_buffer_array_sep_rec v lexbuf __ocaml_lex_state and buffer_tuple_end v lexbuf = __ocaml_lex_buffer_tuple_end_rec v lexbuf 492 and __ocaml_lex_buffer_tuple_end_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 1023 "lib/read.mll" # 1023 "lib/read.mll" ( Buffer.add_char v.buf ')'; raise End_of_tuple ) # 3122 "lib/read.ml" # 3123 "lib/read.ml" | 1 -> # 1026 "lib/read.mll" # 1026 "lib/read.mll" ( () ) # 3127 "lib/read.ml" # 3128 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_buffer_tuple_end_rec v lexbuf __ocaml_lex_state and buffer_tuple_sep v lexbuf = __ocaml_lex_buffer_tuple_sep_rec v lexbuf 494 and __ocaml_lex_buffer_tuple_sep_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 1029 "lib/read.mll" # 1029 "lib/read.mll" ( Buffer.add_char v.buf ',' ) # 3139 "lib/read.ml" # 3140 "lib/read.ml" | 1 -> # 1030 "lib/read.mll" # 1030 "lib/read.mll" ( Buffer.add_char v.buf ')'; raise End_of_tuple ) # 3144 "lib/read.ml" # 3145 "lib/read.ml" | 2 -> # 1031 "lib/read.mll" # 1031 "lib/read.mll" ( long_error "Expected ',' or ')' but found" v lexbuf ) # 3149 "lib/read.ml" # 3150 "lib/read.ml" | 3 -> # 1032 "lib/read.mll" # 1032 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 3154 "lib/read.ml" # 3155 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_buffer_tuple_sep_rec v lexbuf __ocaml_lex_state and buffer_colon v lexbuf = __ocaml_lex_buffer_colon_rec v lexbuf 499 and __ocaml_lex_buffer_colon_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 1035 "lib/read.mll" # 1035 "lib/read.mll" ( Buffer.add_char v.buf ':' ) # 3166 "lib/read.ml" # 3167 "lib/read.ml" | 1 -> # 1036 "lib/read.mll" # 1036 "lib/read.mll" ( long_error "Expected ':' but found" v lexbuf ) # 3171 "lib/read.ml" # 3172 "lib/read.ml" | 2 -> # 1037 "lib/read.mll" # 1037 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 3176 "lib/read.ml" # 3177 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_buffer_colon_rec v lexbuf __ocaml_lex_state and buffer_gt v lexbuf = __ocaml_lex_buffer_gt_rec v lexbuf 503 and __ocaml_lex_buffer_gt_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 1040 "lib/read.mll" # 1040 "lib/read.mll" ( Buffer.add_char v.buf '>' ) # 3188 "lib/read.ml" # 3189 "lib/read.ml" | 1 -> # 1041 "lib/read.mll" # 1041 "lib/read.mll" ( long_error "Expected '>' but found" v lexbuf ) # 3193 "lib/read.ml" # 3194 "lib/read.ml" | 2 -> # 1042 "lib/read.mll" # 1042 "lib/read.mll" ( custom_error "Unexpected end of input" v lexbuf ) # 3198 "lib/read.ml" # 3199 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_buffer_gt_rec v lexbuf __ocaml_lex_state and finish_buffer_comment v lexbuf = __ocaml_lex_finish_buffer_comment_rec v lexbuf 507 and __ocaml_lex_finish_buffer_comment_rec v lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 1045 "lib/read.mll" # 1045 "lib/read.mll" ( Buffer.add_string v.buf "*/" ) # 3210 "lib/read.ml" # 3211 "lib/read.ml" | 1 -> # 1046 "lib/read.mll" # 1046 "lib/read.mll" ( long_error "Unterminated comment" v lexbuf ) # 3215 "lib/read.ml" # 3216 "lib/read.ml" | 2 -> # 1047 "lib/read.mll" # 1047 "lib/read.mll" ( Buffer.add_char v.buf '\n'; newline v lexbuf; finish_buffer_comment v lexbuf ) # 3222 "lib/read.ml" # 3223 "lib/read.ml" | 3 -> # 1050 "lib/read.mll" # 1050 "lib/read.mll" ( add_lexeme v.buf lexbuf; finish_buffer_comment v lexbuf ) # 3227 "lib/read.ml" # 3228 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_finish_buffer_comment_rec v lexbuf __ocaml_lex_state and junk lexbuf = __ocaml_lex_junk_rec lexbuf 513 and __ocaml_lex_junk_rec lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> # 1053 "lib/read.mll" # 1053 "lib/read.mll" ( Lexing.lexeme lexbuf ) # 3239 "lib/read.ml" # 3240 "lib/read.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_junk_rec lexbuf __ocaml_lex_state ;; # 1055 "lib/read.mll" # 1056 "lib/read.mll" let _ = (read_json : lexer_state -> Lexing.lexbuf -> t) let read_t = read_json let () = read_junk := junk let read_int8 v lexbuf = let n = read_int v lexbuf in if n < 0 || n > 255 then lexer_error "Int8 overflow" v lexbuf else char_of_int n let read_list read_cell v lexbuf = List.rev (read_list_rev read_cell v lexbuf) let array_of_rev_list l = match l with [] -> [| |] | x :: tl -> let len = List.length l in let a = Array.make len x in let r = ref tl in for i = len - 2 downto 0 do a.(i) <- List.hd !r; r := List.tl !r done; a let read_array read_cell v lexbuf = let l = read_list_rev read_cell v lexbuf in array_of_rev_list l (* Read a JSON object, reading the keys into OCaml strings (provided for backward compatibility) *) let read_fields read_field init_acc v = read_abstract_fields read_ident read_field init_acc v let finish v lexbuf = read_space v lexbuf; if not (read_eof lexbuf) then long_error "Junk after end of JSON value:" v lexbuf let init_lexer = init_lexer let from_lexbuf v ?(stream = false) lexbuf = read_space v lexbuf; let x = if read_eof lexbuf then raise End_of_input else read_json v lexbuf in if not stream then finish v lexbuf; x let from_string ?buf ?fname ?lnum s = try let lexbuf = Lexing.from_string s in let v = init_lexer ?buf ?fname ?lnum () in from_lexbuf v lexbuf with End_of_input -> json_error "Blank input data" let from_channel ?buf ?fname ?lnum ic = try let lexbuf = Lexing.from_channel ic in let v = init_lexer ?buf ?fname ?lnum () in from_lexbuf v lexbuf with End_of_input -> json_error "Blank input data" let from_file ?buf ?fname ?lnum file = let ic = open_in file in try let x = from_channel ?buf ?fname ?lnum ic in close_in ic; x with e -> close_in_noerr ic; raise e exception Finally of exn * exn let seq_from_lexbuf v ?(fin = fun () -> ()) lexbuf = let stream = Some true in let rec f () = try Seq.Cons (from_lexbuf v ?stream lexbuf, f) with End_of_input -> fin (); Seq.Nil | e -> (try fin () with fin_e -> raise (Finally (e, fin_e))); raise e in f let seq_from_string ?buf ?fname ?lnum s = let v = init_lexer ?buf ?fname ?lnum () in seq_from_lexbuf v (Lexing.from_string s) let seq_from_channel ?buf ?fin ?fname ?lnum ic = let lexbuf = Lexing.from_channel ic in let v = init_lexer ?buf ?fname ?lnum () in seq_from_lexbuf v ?fin lexbuf let seq_from_file ?buf ?fname ?lnum file = let ic = open_in file in let fin () = close_in ic in let fname = match fname with None -> Some file | x -> x in let lexbuf = Lexing.from_channel ic in let v = init_lexer ?buf ?fname ?lnum () in seq_from_lexbuf v ~fin lexbuf type json_line = [ `Json of t | `Exn of exn ] let lineseq_from_channel ?buf ?(fin = fun () -> ()) ?fname ?lnum:(lnum0 = 1) ic = let buf = match buf with None -> Some (Buffer.create 256) | Some _ -> buf in let rec f lnum = fun () -> try let line = input_line ic in Seq.Cons (`Json (from_string ?buf ?fname ~lnum line), f (lnum + 1)) with End_of_file -> fin (); Seq.Nil | e -> Seq.Cons (`Exn e, f (lnum + 1)) in f lnum0 let lineseq_from_file ?buf ?fname ?lnum file = let ic = open_in file in let fin () = close_in ic in let fname = match fname with None -> Some file | x -> x in lineseq_from_channel ?buf ~fin ?fname ?lnum ic let prettify ?std s = pretty_to_string ?std (from_string s) let compact ?std s = to_string (from_string s) # 3408 "lib/read.ml" # 102 "yojson.cppo.ml" end cpdf-2.8.1/cpdfjson.ml0000664000175000017500000006034214771516640013276 0ustar johnjohn(* Read and write PDF files in JSON format. Format version 3: adds UTF8 option for strings for easier editing Format version 2: adds object -1 with format data, roundtripping Format version 1: no format specifier, output only The file is an array of arrays containing an object number followed by an object, one for each object in the file and two special ones: Object -1: CPDF's own data with the PDF version number, CPDF JSON format number, and flags used when writing (which may be required when reading): o /CPDFJSONformatversion (CPDFJSON integer (see below), currently 3) o /CPDFJSONcontentparsed (boolean, true if content streams have been parsed) o /CPDFJSONstreamdataincluded (boolean, true if stream data included. Cannot round-trip if false). o /CPDFJSONmajorpdfversion (CPDFJSON integer) o /CPDFJSONminorpdfversion (CPDFJSON integer) Object 0: The PDF's trailer dictionary Objects 1..n: The PDF's objects. o PDF arrays, dictionaries, booleans, and strings are the same in JSON. o Integers are written as {"I": 0} o Floats are written as {"F": 0.0} o Names are written as {"N": "/Pages"} o Indirect references are integers o Streams are {"S": [dict, data]} o Strings are converted into JSON strings in a way which is fully reversible. In original (utf8=false) mode, the bytes of the string in PDF representation are converted into UTF8, rather than the string itself being converted. In UTF8 mode (utf8=true), instead: 1 If a String contains only PDFDocEncoding characters, is is converted to UTF8, and stored as {"U" : "..."}. 2 If a String has a BOM and successfully converts to UTF8, it is converted to UTF8, and stored as {"U" : "..."} 3 If a String has a BOM but fails to convert, or has no BOM, it is stored in original mode, as an unmarked string. In all cases, this process is still reversible: 1. We try to convert back from UTF8 to PDFDocEncoding - this will always work on an unchanged string. If the string has changed, and we cannot convert to PDFDocEncoding, we convert back to UTF16 with a BOM. 2. Same as (1) - if unaltered, will be UTF16, if altered, could be PDFDocEncoding or UTF16 3. As in non-UTF-mode, reversible as we know. We need to mark strings as {"U" : ...} or not to preseve the distinction between PDFDocEncoding / UTF16BE on the one hand, and byte strings on the other. There are two subformats: parsing content streams or not. Hello World in CPDF JSON without parsing content streams: [ [ -1, { "/CPDFJSONformatversion": { "I": 2 }, "/CPDFJSONcontentparsed": false, "/CPDFJSONstreamdataincluded": true, "/CPDFJSONmajorpdfversion": { "I": 1 }, "/CPDFJSONminorpdfversion": { "I": 1 } } ], [ 0, { "/Size": { "I": 4 }, "/Root": 4, "/ID": [ "èÎ25\u001e³/°q:Oʇ°u‰", "èÎ25\u001e³/°q:Oʇ°u‰" ] } ], [ 1, { "/Type": { "N": "/Pages" }, "/Kids": [ 3 ], "/Count": { "I": 1 } } ], [ 2, { "S": [ { "/Length": { "I": 49 } }, "1 0 0 1 50 770 cm BT/F0 36 Tf(Hello, World!)Tj ET" ] } ], [ 3, { "/Type": { "N": "/Page" }, "/Parent": 1, "/Resources": { "/Font": { "/F0": { "/Type": { "N": "/Font" }, "/Subtype": { "N": "/Type1" }, "/BaseFont": { "N": "/Times-Italic" } } } }, "/MediaBox": [ { "I": 0 }, { "I": 0 }, { "F": 595.2755905510001 }, { "F": 841.88976378 } ], "/Rotate": { "I": 0 }, "/Contents": [ 2 ] } ], [ 4, { "/Type": { "N": "/Catalog" }, "/Pages": 1 } ] ] Alternative object number 2 when parsing of object streams in operation: 2, { "S": [ {}, [ [ { "F": 1.0 }, { "F": 0.0 }, { "F": 0.0 }, { "F": 1.0 }, { "F": 50.0 }, { "F": 770.0 }, "cm" ], [ "BT" ], [ "/F0", { "F": 36.0 }, "Tf" ], [ "Hello, World!", "Tj" ], [ "ET" ] ] ] } ], [ When parsing content streams: o Each operation is an array o The 'operation' for inline images is "InlineImage" CPDF currently never preserves object streams, and only outputs unencrypted files. When reloading a JSON file, CPDF knows how to correct or add /Length entries in streams, so you need not worry about them. *) open Pdfutil open Cpdferror module J = Cpdfyojson.Safe module P = Pdf module O = Pdfops let opf = function | `Assoc ["F", `Float f] -> f | `Assoc ["F", `Int i] -> float_of_int i | _ -> error "num: not a float" let opi = function | `Assoc ["I", `Int i] -> i | `Assoc ["I", `Float f] -> int_of_float f | _ -> error "num: not an integer" let rec op_of_json = function | `List [`String "S"] -> O.Op_S | `List [`String "s"] -> O.Op_s | `List [`String "f"] -> O.Op_f | `List [`String "F"] -> O.Op_F | `List [`String "f*"] -> O.Op_f' | `List [`String "B"] -> O.Op_B | `List [`String "B*"] -> O.Op_B' | `List [`String "b"] -> O.Op_b | `List [`String "b*"] -> O.Op_b' | `List [`String "n"] -> O.Op_n | `List [`String "W"] -> O.Op_W | `List [`String "W*"] -> O.Op_W' | `List [`String "BT"] -> O.Op_BT | `List [`String "ET"] -> O.Op_ET | `List [`String "q"] -> O.Op_q | `List [`String "Q"] -> O.Op_Q | `List [`String "h"] -> O.Op_h | `List [`String "T*"] -> O.Op_T' | `List [`String "EMC"] -> O.Op_EMC | `List [`String "BX"] -> O.Op_BX | `List [`String "EX"] -> O.Op_EX | `List [a; b; c; d; `String "re"] -> O.Op_re (opf a, opf b, opf c, opf d) | `List [a; b; c; d; `String "k"] -> O.Op_k (opf a, opf b, opf c, opf d) | `List [a; b; `String "m"] -> O.Op_m (opf a, opf b) | `List [a; b; `String "l"] -> O.Op_l (opf a, opf b) | `List [`String s; obj; `String "BDC"] -> O.Op_BDC (s, object_of_json obj) | `List [`String s; `String "gs"] -> O.Op_gs s | `List [`String s; `String "Do"] -> O.Op_Do s | `List [`String s; `String "CS"] -> O.Op_CS s | `List [i; `String "j"] -> O.Op_j (opi i) | `List [a; b; c; d; e; f; `String "cm"] -> O.Op_cm {Pdftransform.a = opf a; Pdftransform.b = opf b; Pdftransform.c = opf c; Pdftransform.d = opf d; Pdftransform.e = opf e; Pdftransform.f = opf f} | `List [`List fls; y; `String "d"] -> O.Op_d (map opf fls, opf y) | `List [a; `String "w"] -> O.Op_w (opf a) | `List [a; `String "J"] -> O.Op_J (opi a) | `List [a; `String "M"] -> O.Op_M (opf a) | `List [`String s; `String "ri"] -> O.Op_ri s | `List [a; `String "i"] -> O.Op_i (opi a) | `List [a; b; c; d; e; f; `String "c"] -> O.Op_c (opf a, opf b, opf c, opf d, opf e, opf f) | `List [a; b; c; d; `String "v"] -> O.Op_v (opf a, opf b, opf c, opf d) | `List [a; b; c; d; `String "y"] -> O.Op_y (opf a, opf b, opf c, opf d) | `List [a; `String "Tc"] -> O.Op_Tc (opf a) | `List [a; `String "Tw"] -> O.Op_Tw (opf a) | `List [a; `String "Tz"] -> O.Op_Tz (opf a) | `List [a; `String "TL"] -> O.Op_TL (opf a) | `List [`String k; n; `String "Tf"] -> O.Op_Tf (k, opf n) | `List [a; `String "Tr"] -> O.Op_Tr (opi a) | `List [a; `String "Ts"] -> O.Op_Ts (opf a) | `List [a; b; `String "Td"] -> O.Op_Td (opf a, opf b) | `List [a; b; `String "TD"] -> O.Op_TD (opf a, opf b) | `List [a; b; c; d; e; f; `String "Tm"] -> O.Op_Tm {Pdftransform.a = opf a; Pdftransform.b = opf b; Pdftransform.c = opf c; Pdftransform.d = opf d; Pdftransform.e = opf e; Pdftransform.f = opf f} | `List [`String s; `String "Tj"] -> Op_Tj s | `List [obj; `String "TJ"] -> Op_TJ (object_of_json obj) | `List [`String s; `String "'"] -> Op_' s | `List [a; b; `String s; `String "''"] -> Op_'' (opf a, opf b, s) | `List [a; b; `String "d0"] -> Op_d0 (opf a, opf b) | `List [a; b; c; d; e; f; `String "d1"] -> Op_d1 (opf a, opf b, opf c, opf d, opf e, opf f) | `List [`String s; `String "cs"] -> Op_cs s | `List [a; `String "G"] -> Op_G (opf a); | `List [a; `String "g"] -> Op_g (opf a); | `List [a; b; c; `String "RG"] -> Op_RG (opf a, opf b, opf c); | `List [a; b; c; `String "rg"] -> Op_rg (opf a, opf b, opf c); | `List [a; b; c; d; `String "K"] -> Op_K (opf a, opf b, opf c, opf d); | `List [`String s; `String "sh"] -> Op_sh s; | `List [`String s; `String "MP"] -> Op_MP s; | `List [`String s; `String "BMC"] -> Op_BMC s; | `List [`String s; `String "Unknown"] -> O.Op_Unknown s | `List [`String s; obj; `String "DP"] -> O.Op_DP (s, object_of_json obj) | `List [a; `String b; `String "InlineImage"] -> O.InlineImage (object_of_json a, None, Pdfio.bytes_of_string b) | `List torev -> begin match rev torev with | `String "SCN"::ns -> O.Op_SCN (map opf (rev ns)) | `String "SC"::ns -> O.Op_SC (map opf (rev ns)) | `String "sc"::ns -> O.Op_sc (map opf (rev ns)) | `String "scn"::ns -> O.Op_scn (map opf (rev ns)) | `String "SCNName"::`String s::ns -> O.Op_SCNName (s, map opf (rev ns)) | `String "scnName"::`String s::ns -> O.Op_scnName (s, map opf (rev ns)) | j -> Pdfe.log (Printf.sprintf "Unable to read reversed op from %s\n" (J.show (`List j))); error "op reading failed" end | j -> Pdfe.log (Printf.sprintf "Unable to read op from %s\n" (J.show j)); error "op reading failed" and object_of_json = function | `Null -> P.Null | `Bool b -> P.Boolean b | `Int n -> Pdf.Indirect n | `String s -> P.String s | `List objs -> P.Array (map object_of_json objs) | `Assoc ["U", `String u] -> begin try P.String (Pdftext.pdfdocstring_of_utf8 u) with _ -> Pdfe.log (Printf.sprintf "Could not read UTF8 string %S\n" u); P.String u end | `Assoc ["I", `Int i] -> P.Integer i | `Assoc ["F", `Float f] -> P.Real f | `Assoc ["N", `String n] -> P.Name n | `Assoc ["S", `List [dict; `String data]] -> let d' = P.add_dict_entry (object_of_json dict) "/Length" (P.Integer (String.length data)) in P.Stream (ref (d', P.Got (Pdfio.bytes_of_string data))) | `Assoc ["S", `List [dict; `List parsed_ops]] -> begin match Pdfops.stream_of_ops (List.map op_of_json parsed_ops) with | P.Stream {contents = (_, Pdf.Got data)} -> let d' = P.add_dict_entry (object_of_json dict) "/Length" (P.Integer (Pdfio.bytes_size data)) in P.Stream (ref (d', Pdf.Got data)) | _ -> assert false end | `Assoc elts -> P.Dictionary (map (fun (n, o) -> (n, object_of_json o)) elts) | _ -> error "not recognised in object_of_json" let pdf_of_json json = let objs = match json with `List objs -> objs | _ -> error "bad json top level" in let params = ref Pdf.Null in let trailerdict = ref Pdf.Null in let objects = option_map (function | `List [`Int objnum; o] -> begin match objnum with | -1 -> params := object_of_json o; None | 0 -> trailerdict := object_of_json o; None | n when n < 0 -> None | n -> Some (n, object_of_json o) end | _ -> error "json bad obj") objs in begin match Pdf.lookup_direct (Pdf.empty ()) "/CPDFJSONstreamdataincluded" !params with | Some (Pdf.Boolean false) -> error "no stream data; cannot reconstruct PDF" | _ -> () end; let major = match Pdf.lookup_direct (Pdf.empty ()) "/CPDFJSONmajorpdfversion" !params with Some (Pdf.Integer i) -> i | _ -> error "bad major version" in let minor = match Pdf.lookup_direct (Pdf.empty ()) "/CPDFJSONminorpdfversion" !params with Some (Pdf.Integer i) -> i | _ -> error "bad minor version" in let root = match !trailerdict with Pdf.Dictionary d -> begin match lookup "/Root" d with Some (Pdf.Indirect i) -> i | _ -> error "bad root" end | _ -> error "bad root 2" in let objmap = P.pdfobjmap_empty () in List.iter (fun (k, v) -> Hashtbl.add objmap k (ref (P.Parsed v), 0)) objects; let objects = {P.maxobjnum = 0; P.parse = None; P.pdfobjects = objmap; P.object_stream_ids = Hashtbl.create 0} in {P.major; P.minor; P.root; P.objects; P.trailerdict = !trailerdict; P.was_linearized = false; P.saved_encryption = None} let mkfloat f = `Assoc [("F", `Float f)] let mkint i = `Assoc [("I", `Int i)] let mkname n = `Assoc [("N", `String n)] let rec json_of_object ~utf8 ?(clean_strings=false) pdf fcs ~no_stream_data ~parse_content = function | P.Null -> `Null | P.Boolean b -> `Bool b | P.Integer i -> mkint i | P.Real r -> mkfloat r | P.String s -> if utf8 then begin try `Assoc [("U", `String (Pdftext.utf8_of_pdfdocstring s))] with _ -> `String s end else if clean_strings then `String (Pdftext.simplify_utf16be s) else `String s | P.Name n -> mkname n | P.Array objs -> `List (map (json_of_object ~utf8 pdf fcs ~no_stream_data ~parse_content) objs) | P.Dictionary elts -> iter (function ("/Contents", P.Indirect i) -> begin match Pdf.lookup_obj pdf i with | Pdf.Array is -> iter (function Pdf.Indirect i -> fcs i | _ -> ()) is | _ -> fcs i end | ("/Contents", P.Array elts) -> iter (function P.Indirect i -> fcs i | _ -> ()) elts | _ -> ()) elts; `Assoc (map (fun (k, v) -> (k, json_of_object ~utf8 pdf fcs ~no_stream_data ~parse_content v)) elts) | P.Stream ({contents = (P.Dictionary dict as d, stream)} as mut) as thestream -> P.getstream thestream; let str, dict' = match P.lookup_direct pdf "/FunctionType" d, parse_content with | Some _, true -> Pdfcodec.decode_pdfstream_until_unknown pdf thestream; let dict = P.remove_dict_entry d "/Filter" in begin match !mut with (_, P.Got b) -> (Pdfio.string_of_bytes b, dict) | _ -> error "/FunctionType: failure: decomp" end | _ -> if no_stream_data then ("<>", d) else match !mut with (_, P.Got b) -> (Pdfio.string_of_bytes b, d) | _ -> error "failure: toget" in (* We don't want to allow UTF8 processing of the stream here, so generate JSON without recursion. *) let dictjson = json_of_object ~utf8 pdf fcs ~no_stream_data ~parse_content dict' in `Assoc [("S", `List [dictjson; `String str])] | P.Stream _ -> error "error: stream with not-a-dictionary" | P.Indirect i -> begin match P.lookup_obj pdf i with | P.Stream {contents = (P.Dictionary dict as d, _)} -> begin match P.lookup_direct pdf "/Subtype" d with | Some (P.Name "/Form") -> fcs i | _ -> begin match P.lookup_direct pdf "/Type" d with | Some (P.Name "/Pattern") -> fcs i | _ -> () end end | _ -> () end; `Int i let json_of_op utf8 pdf no_stream_data = function | O.Op_S -> `List [`String "S"] | O.Op_s -> `List [`String "s"] | O.Op_f -> `List [`String "f"] | O.Op_F -> `List [`String "F"] | O.Op_f' ->`List [`String "f*"] | O.Op_B -> `List [`String "B"] | O.Op_B' -> `List [`String "B*"] | O.Op_b -> `List [`String "b"] | O.Op_b' -> `List [`String "b*"] | O.Op_n -> `List [`String "n"] | O.Op_W -> `List [`String "W"] | O.Op_W' -> `List [`String "W*"] | O.Op_BT -> `List [`String "BT"] | O.Op_ET -> `List [`String "ET"] | O.Op_q -> `List [`String "q"] | O.Op_Q -> `List [`String "Q"] | O.Op_h -> `List [`String "h"] | O.Op_T' -> `List [`String "T*"] | O.Op_EMC -> `List [`String "EMC"] | O.Op_BX -> `List [`String "BX"] | O.Op_EX -> `List [`String "EX"] | O.Op_re (a, b, c, d) -> `List [mkfloat a; mkfloat b; mkfloat c; mkfloat d; `String "re"] | O.Op_k (c, m, y, k) -> `List [mkfloat c; mkfloat m; mkfloat y; mkfloat k; `String "k"] | O.Op_m (a, b) -> `List [mkfloat a; mkfloat b; `String "m"] | O.Op_l (a, b) -> `List [mkfloat a; mkfloat b; `String "l"] | O.Op_BDC (s, obj) -> `List [`String s; json_of_object ~utf8 pdf (fun _ -> ()) ~no_stream_data ~parse_content:false obj; `String "BDC"] | O.Op_gs s -> `List [`String s; `String "gs"] | O.Op_Do s -> `List [`String s; `String "Do"] | O.Op_CS s -> `List [`String s; `String "CS"] | O.Op_SCN fs -> `List ((map (fun x -> mkfloat x) fs) @ [`String "SCN"]) | O.Op_j j -> `List [mkint j; `String "j"] | O.Op_cm t -> `List [mkfloat t.Pdftransform.a; mkfloat t.Pdftransform.b; mkfloat t.Pdftransform.c; mkfloat t.Pdftransform.d; mkfloat t.Pdftransform.e; mkfloat t.Pdftransform.f; `String "cm"] | O.Op_d (fl, y) -> `List [`List (map (fun x -> mkfloat x) fl); mkfloat y; `String "d"] | O.Op_w w -> `List [mkfloat w; `String "w"] | O.Op_J j -> `List [mkint j; `String "J"] | O.Op_M m -> `List [mkfloat m; `String "M"] | O.Op_ri s -> `List [`String s; `String "ri"] | O.Op_i i -> `List [mkint i; `String "i"] | O.Op_c (a, b, c, d, e, f) -> `List [mkfloat a; mkfloat b; mkfloat c; mkfloat d; mkfloat e; mkfloat f; `String "c"] | O.Op_v (a, b, c, d) -> `List [mkfloat a; mkfloat b; mkfloat c; mkfloat d; `String "v"] | O.Op_y (a, b, c, d) -> `List [mkfloat a; mkfloat b; mkfloat c; mkfloat d; `String "y"] | O.Op_Tc c -> `List [mkfloat c; `String "Tc"] | O.Op_Tw w -> `List [mkfloat w; `String "Tw"] | O.Op_Tz z -> `List [mkfloat z; `String "Tz"] | O.Op_TL l -> `List [mkfloat l; `String "TL"] | O.Op_Tf (k, s) -> `List [`String k; mkfloat s; `String "Tf"] | O.Op_Tr i -> `List [mkint i; `String "Tr"] | O.Op_Ts k -> `List [mkfloat k; `String "Ts"] | O.Op_Td (k, k') -> `List [mkfloat k; mkfloat k'; `String "Td"] | O.Op_TD (k, k') -> `List [mkfloat k; mkfloat k'; `String "TD"] | O.Op_Tm t -> `List [mkfloat t.Pdftransform.a; mkfloat t.Pdftransform.b; mkfloat t.Pdftransform.c; mkfloat t.Pdftransform.d; mkfloat t.Pdftransform.e; mkfloat t.Pdftransform.f; `String "Tm"] | O.Op_Tj s -> `List [`String s; `String "Tj"] | O.Op_TJ pdfobject -> `List [json_of_object ~utf8 pdf (fun _ -> ()) ~no_stream_data ~parse_content:false pdfobject; `String "TJ"] | O.Op_' s -> `List [`String s; `String "'"] | O.Op_'' (k, k', s) -> `List [mkfloat k; mkfloat k'; `String s; `String "''"] | O.Op_d0 (k, k') -> `List [mkfloat k; mkfloat k'; `String "d0"] | O.Op_d1 (a, b, c, d, e, f) -> `List [mkfloat a; mkfloat b; mkfloat c; mkfloat d; mkfloat e; mkfloat f; `String "d1"] | O.Op_cs s -> `List [`String s; `String "cs"] | O.Op_SC fs -> `List (map (fun x -> mkfloat x) fs @ [`String "SC"]) | O.Op_sc fs -> `List (map (fun x -> mkfloat x) fs @ [`String "sc"]) | O.Op_scn fs -> `List (map (fun x -> mkfloat x) fs @ [`String "scn"]) | O.Op_G k -> `List [mkfloat k; `String "G"] | O.Op_g k -> `List [mkfloat k; `String "g"] | O.Op_RG (r, g, b) -> `List [mkfloat r; mkfloat g; mkfloat b; `String "RG"] | O.Op_rg (r, g, b) -> `List [mkfloat r; mkfloat g; mkfloat b; `String "rg"] | O.Op_K (c, m, y, k) -> `List [mkfloat c; mkfloat m; mkfloat y; mkfloat k; `String "K"] | O.Op_sh s -> `List [`String s; `String "sh"] | O.Op_MP s -> `List [`String s; `String "MP"] | O.Op_BMC s -> `List [`String s; `String "BMC"] | O.Op_Unknown s -> `List [`String s; `String "Unknown"] | O.Op_Comment s -> `List [`String s; `String "Comment"] | O.Op_SCNName (s, fs) -> `List (map (fun x -> mkfloat x) fs @ [`String s; `String "SCNName"]) | O.Op_scnName (s, fs) -> `List (map (fun x -> mkfloat x) fs @ [`String s; `String "scnName"]) | O.InlineImage (dict, dp, data) -> `List [json_of_object ~utf8 pdf (fun _ -> ()) ~no_stream_data ~parse_content:false dict; `String (Pdfio.string_of_bytes data); `String "InlineImage"] | O.Op_DP (s, obj) -> `List [`String s; json_of_object ~utf8 pdf (fun _ -> ()) ~no_stream_data ~parse_content:false obj; `String "DP"] (* parse_stream needs pdf and resources. These are for lexing of inline images, * looking up the colourspace. *) let parse_content_stream utf8 pdf resources bs = let ops = O.parse_stream pdf resources [bs] in `List (map (json_of_op utf8 pdf false) ops) (* Make sure each page only has one page content stream. Otherwise, if not split on op boundaries, each one would fail to parse on its own. *) let precombine_page_content pdf = let pages' = map (fun page -> match page.Pdfpage.content with [] | [_] -> page | _ -> let operators = Pdfops.parse_operators pdf page.Pdfpage.resources page.Pdfpage.content in {page with Pdfpage.content = [Pdfops.stream_of_ops operators]} ) (Pdfpage.pages_of_pagetree pdf) in Pdfpage.change_pages true pdf pages' (* Convert any strings in UTF16BE which could actually be in PDFDocEncoding (due to having no high bytes) to make editing JSON easier. *) let rec ppstring_single_object pdf = function | Pdf.Dictionary d -> Pdf.recurse_dict (ppstring_single_object pdf) d | (Pdf.Stream {contents = (Pdf.Dictionary dict, data)}) -> Pdf.Stream {contents = (Pdf.recurse_dict (ppstring_single_object pdf) dict, data)} | Pdf.Array a -> Pdf.recurse_array (ppstring_single_object pdf) a | Pdf.String s -> Pdf.String (Pdftext.simplify_utf16be s) | x -> x (* Do all objects, but skip the trailer dictionary since may mess up /ID if it happens to begin with UTF16BE BOM *) let preprocess_strings pdf = Pdf.objselfmap (ppstring_single_object pdf) pdf let json_of_pdf ~utf8 ~parse_content ~no_stream_data ~decompress_streams ~clean_strings pdf = if clean_strings then preprocess_strings pdf; let pdf = if parse_content then precombine_page_content pdf else pdf in if decompress_streams then Pdf.objiter (fun _ obj -> match obj with Pdf.Stream _ -> Pdfcodec.decode_pdfstream_until_unknown pdf obj | _ -> ()) pdf; Pdf.remove_unreferenced pdf; let trailerdict = (0, json_of_object ~utf8 pdf (fun x -> ()) ~no_stream_data ~parse_content:false pdf.P.trailerdict) in let parameters = (-1, json_of_object ~utf8 pdf (fun x -> ()) ~no_stream_data:false ~parse_content:false (Pdf.Dictionary [("/CPDFJSONformatversion", Pdf.Integer 3); ("/CPDFJSONcontentparsed", Pdf.Boolean parse_content); ("/CPDFJSONstreamdataincluded", Pdf.Boolean (not no_stream_data)); ("/CPDFJSONmajorpdfversion", Pdf.Integer pdf.Pdf.major); ("/CPDFJSONminorpdfversion", Pdf.Integer pdf.Pdf.minor); ])) in let content_streams = ref [] in let fcs n = content_streams := n::!content_streams; if parse_content then Pdfcodec.decode_pdfstream_until_unknown pdf (P.lookup_obj pdf n) in let pairs = let ps = ref [] in P.objiter (fun i pdfobj -> ps := (i, json_of_object ~utf8 pdf fcs ~no_stream_data ~parse_content pdfobj)::!ps) pdf; parameters::trailerdict::sort compare !ps in let pairs_parsed = if not parse_content then pairs else map (fun (objnum, obj) -> if mem objnum !content_streams then begin match obj with | `Assoc ["S", `List [dict; `String _]] -> let streamdata = match P.lookup_obj pdf objnum with | P.Stream {contents = (_, P.Got b)} -> b | _ -> error "JSON: stream not decoded" in let dict = match dict with | `Assoc d -> `Assoc (option_map (function (("/Filter" | "/Length"), _) -> None | (a, b) -> Some (a, b)) d) | _ -> assert false in (objnum, `Assoc ["S", `List [dict; parse_content_stream utf8 pdf (P.Dictionary []) streamdata]]) | _ -> error "json_of_pdf: stream parsing inconsistency" end else (objnum, obj)) pairs in `List (map (fun (objnum, jsonobj) -> `List [`Int objnum; jsonobj]) pairs_parsed) let to_output o ~utf8 ~parse_content ~no_stream_data ~decompress_streams ?(clean_strings=false) pdf = let json = json_of_pdf ~utf8 ~parse_content ~no_stream_data ~decompress_streams ~clean_strings pdf in match o.Pdfio.out_caml_channel with | Some ch -> J.pretty_to_channel ch json | None -> o.Pdfio.output_string (J.pretty_to_string json) let of_input i = try match i.Pdfio.caml_channel with | Some ch -> pdf_of_json (J.from_channel ch) | None -> let content = Pdfio.string_of_input i in pdf_of_json (J.from_string content) with e -> error (Printexc.to_string e) cpdf-2.8.1/cpdfutil.ml0000664000175000017500000000242114771516640013274 0ustar johnjohnlet rec dict_entry_single_object f pdf = function | (Pdf.Dictionary d) -> f (Pdf.recurse_dict (dict_entry_single_object f pdf) d) | (Pdf.Stream {contents = (Pdf.Dictionary dict, data)}) -> f (Pdf.Stream {contents = (Pdf.recurse_dict (dict_entry_single_object f pdf) dict, data)}) | Pdf.Array a -> Pdf.recurse_array (dict_entry_single_object f pdf) a | x -> x (* FIXME are we sure that functional values can never appear in the equality here? *) let remove_dict_entry pdf key search = let f d = match search with | None -> Pdf.remove_dict_entry d key | Some s -> match Pdf.lookup_direct pdf key d with | Some v when v = s -> Pdf.remove_dict_entry d key | _ -> d in Pdf.objselfmap (dict_entry_single_object f pdf) pdf; pdf.Pdf.trailerdict <- dict_entry_single_object f pdf pdf.Pdf.trailerdict let replace_dict_entry pdf key value search = let f d = match search with | None -> begin try Pdf.replace_dict_entry d key value with _ -> d end | Some s -> match Pdf.lookup_direct pdf key d with | Some v when v = s -> Pdf.replace_dict_entry d key value | _ -> d in Pdf.objselfmap (dict_entry_single_object f pdf) pdf; pdf.Pdf.trailerdict <- dict_entry_single_object f pdf pdf.Pdf.trailerdict cpdf-2.8.1/cpdfjpeg.mli0000664000175000017500000000016314771516640013416 0ustar johnjohn(** JPEG Utilities *) (** Return the width and height of a JPEG *) val jpeg_dimensions : Pdfio.bytes -> int * int cpdf-2.8.1/.gitignore0000664000175000017500000000002514771516640013116 0ustar johnjohn.DS_Store .texpadtmp cpdf-2.8.1/cpdfpng.ml0000664000175000017500000001143314771516640013106 0ustar johnjohn(* Read non-interlaced, non-transparent PNGs. Such a PNG may be loaded into a PDF simply by extracting its width and height from the IHDR, and concatenating all its IDAT data sections together, and specifying the appropriate Filter and Predictor.*) open Pdfutil open Pdfio type t = {width : int; height : int; bitdepth : int; colortype : int; idat : bytes} (* Writing *) (*let tbl = ref ([||] : int32 array) let mktbl () = let f n = let a = ref (i32ofi n) in for _ = 0 to 7 do a := lxor32 (lsr32 !a 1) (land32 0xEDB88320l (i32succ (lnot32 (land32 !a 1l)))) done; !a in tbl := Array.init 256 f let update crc buf len = let a = ref crc in for n = 0 to len - 1 do let e = i32ofi (int_of_char buf.[n]) in a := lxor32 !tbl.(i32toi (land32 (lxor32 !a e) 0xFFl)) (lsr32 !a 8) done; !a let bytes_of_word x = i32toi (sr32 x 24), i32toi (land32 0x000000FFl (sr32 x 16)), i32toi (land32 0x000000FFl (sr32 x 8)), i32toi (land32 0x000000FFl x) let output_bytes_of_word o w = let a, b, c, d = bytes_of_word w in o.output_byte a; o.output_byte b; o.output_byte c; o.output_byte d let write_crc o ctype cdata = let crc = update 0xFFFFFFFFl ctype 4 in let crc = update crc cdata (String.length cdata) in let crc = lnot32 crc in output_bytes_of_word o crc let write_chunk o ctype data = output_bytes_of_word o (i32ofi (Bytes.length data)); for x = 0 to 3 do o.output_byte (int_of_char ctype.[x]) done; o.output_string (Bytes.unsafe_to_string data); write_crc o ctype (Bytes.unsafe_to_string data) let write_word b x n = let p, q, r, s = bytes_of_word n in Bytes.set b x (char_of_int p); Bytes.set b (x + 1) (char_of_int q); Bytes.set b (x + 2) (char_of_int r); Bytes.set b (x + 3) (char_of_int s) let write_png png o = if bytes_size png.idat > 1073741823 then raise (Invalid_argument "write_png: too large") else if Array.length !tbl = 0 then mktbl (); o.output_string "\137\080\078\071\013\010\026\010"; let ihdr = Bytes.make 13 '\000' in write_word ihdr 0 (i32ofi png.width); write_word ihdr 4 (i32ofi png.height); Bytes.set ihdr 8 (char_of_int 8); (* bit depth *) Bytes.set ihdr 9 (char_of_int 2); (* colour type *) Bytes.set ihdr 10 (char_of_int 0); (* compression method *) Bytes.set ihdr 11 (char_of_int 0); (* filter method *) Bytes.set ihdr 12 (char_of_int 0); (* interlace method *) write_chunk o "IHDR" ihdr; write_chunk o "IDAT" (Bytes.unsafe_of_string (string_of_bytes png.idat)); write_chunk o "IEND" (Bytes.create 0)*) (* Reading *) let string_of_tag t = Printf.sprintf "%c%c%c%c" (char_of_int (i32toi (sr32 t 24))) (char_of_int (i32toi (land32 0x000000FFl (sr32 t 16)))) (char_of_int (i32toi (land32 0x000000FFl (sr32 t 8)))) (char_of_int (i32toi (land32 0x000000FFl t))) let read_unsigned_4byte i = let a = i32ofi (i.input_byte ()) in let b = i32ofi (i.input_byte ()) in let c = i32ofi (i.input_byte ()) in let d = i32ofi (i.input_byte ()) in lor32 (lor32 (lsl32 a 24) (lsl32 b 16)) (lor32 (lsl32 c 8) d) let read_chunk i = let chunklen = i32toi (read_unsigned_4byte i) in let chunktype = read_unsigned_4byte i in let chunkdata = mkbytes chunklen in setinit i chunkdata 0 chunklen; let _ (* crc *) = read_unsigned_4byte i in (string_of_tag chunktype, chunkdata) let concat_bytes ss = let total_length = sum (map bytes_size ss) in let s' = mkbytes total_length in let p = ref 0 in iter (fun s -> for x = 0 to bytes_size s - 1 do bset_unsafe s' !p (bget s x); incr p done) ss; s' let read_png i = try i.seek_in 8; let ihdr, ihdrdata = read_chunk i in if ihdr <> "IHDR" then raise (Pdf.PDFError "read_png: first table not IHDR") else let hdr = input_of_bytes ihdrdata in let width = read_unsigned_4byte hdr in let height = read_unsigned_4byte hdr in let bitdepth = hdr.input_byte () in let colortype = hdr.input_byte () in if colortype <> 2 && colortype <> 0 then raise (Pdf.PDFError "read_png: only non-alpha non-palette PNGs") else let _ (*compressionmethod*) = hdr.input_byte () in let _ (*filtermethod*) = hdr.input_byte () in let interlacemethod = hdr.input_byte () in if interlacemethod <> 0 then raise (Pdf.PDFError "read_png: interlaced PDFs not supported") else let idat = ref [] in begin try while true do let chunkname, chunkdata = read_chunk i in if chunkname = "IDAT" then idat := chunkdata::!idat done with _ -> () end; {width = i32toi width; height = i32toi height; colortype; bitdepth; idat = concat_bytes (rev !idat)} with e -> raise (Pdf.PDFError (Printf.sprintf "read_png: failed on %s" (Printexc.to_string e))) cpdf-2.8.1/cpdfjpeg2000.mli0000664000175000017500000000020614771516640013716 0ustar johnjohn(** JPEG2000 Utilities *) (** Return the width and height of a JPEG2000 stream *) val jpeg2000_dimensions : Pdfio.bytes -> int * int cpdf-2.8.1/compressor/0000775000175000017500000000000014771516640013325 5ustar johnjohncpdf-2.8.1/compressor/compressor.ml0000664000175000017500000000255414771516640016061 0ustar johnjohn(* compressor [] substitutes data files specified by __DATA:\n into the template, writing to . The data is printed in way which meets OCaml's syntax. It is compressed by zlib. *) open Pdfutil let contents_of_file filename = let ch = open_in_bin filename in let s = really_input_string ch (in_channel_length ch) in close_in ch; s let contents_to_file filename contents = let ch = open_out_bin filename in output_string ch contents; close_out ch let rec process a = function | '_'::'_'::'D'::'A'::'T'::'A'::':'::more -> let filename, rest = cleavewhile (neq '\n') more in let data = all_but_last (explode (contents_of_file (implode filename))) in let compressed = Pdfio.string_of_bytes (Pdfcodec.encode_flate (Pdfio.bytes_of_string (implode data))) in let ocaml = explode (Printf.sprintf "%S" compressed) in process (rev ocaml @ a) rest | h::t -> process (h::a) t | [] -> rev a let go infile outfile compress = let indata = explode (contents_of_file infile) in let processed = process [] indata in contents_to_file outfile (implode processed) let () = match Sys.argv with | [|_; infile; outfile|] -> go infile outfile false | [|_; infile; outfile; "compress"|] -> go infile outfile true | _ -> Printf.eprintf "compressor: unknown command line\n" cpdf-2.8.1/compressor/UnicodeData.txt0000664000175000017500000717251014771516640016263 0ustar johnjohn0000;;Cc;0;BN;a;b;c;d;N;NULL;e;f;g; 0001;;Cc;0;BN;;;;;N;START OF HEADING;;;; 0002;;Cc;0;BN;;;;;N;START OF TEXT;;;; 0003;;Cc;0;BN;;;;;N;END OF TEXT;;;; 0004;;Cc;0;BN;;;;;N;END OF TRANSMISSION;;;; 0005;;Cc;0;BN;;;;;N;ENQUIRY;;;; 0006;;Cc;0;BN;;;;;N;ACKNOWLEDGE;;;; 0007;;Cc;0;BN;;;;;N;BELL;;;; 0008;;Cc;0;BN;;;;;N;BACKSPACE;;;; 0009;;Cc;0;S;;;;;N;CHARACTER TABULATION;;;; 000A;;Cc;0;B;;;;;N;LINE FEED (LF);;;; 000B;;Cc;0;S;;;;;N;LINE TABULATION;;;; 000C;;Cc;0;WS;;;;;N;FORM FEED (FF);;;; 000D;;Cc;0;B;;;;;N;CARRIAGE RETURN (CR);;;; 000E;;Cc;0;BN;;;;;N;SHIFT OUT;;;; 000F;;Cc;0;BN;;;;;N;SHIFT IN;;;; 0010;;Cc;0;BN;;;;;N;DATA LINK ESCAPE;;;; 0011;;Cc;0;BN;;;;;N;DEVICE CONTROL ONE;;;; 0012;;Cc;0;BN;;;;;N;DEVICE CONTROL TWO;;;; 0013;;Cc;0;BN;;;;;N;DEVICE CONTROL THREE;;;; 0014;;Cc;0;BN;;;;;N;DEVICE CONTROL FOUR;;;; 0015;;Cc;0;BN;;;;;N;NEGATIVE ACKNOWLEDGE;;;; 0016;;Cc;0;BN;;;;;N;SYNCHRONOUS IDLE;;;; 0017;;Cc;0;BN;;;;;N;END OF TRANSMISSION BLOCK;;;; 0018;;Cc;0;BN;;;;;N;CANCEL;;;; 0019;;Cc;0;BN;;;;;N;END OF MEDIUM;;;; 001A;;Cc;0;BN;;;;;N;SUBSTITUTE;;;; 001B;;Cc;0;BN;;;;;N;ESCAPE;;;; 001C;;Cc;0;B;;;;;N;INFORMATION SEPARATOR FOUR;;;; 001D;;Cc;0;B;;;;;N;INFORMATION SEPARATOR THREE;;;; 001E;;Cc;0;B;;;;;N;INFORMATION SEPARATOR TWO;;;; 001F;;Cc;0;S;;;;;N;INFORMATION SEPARATOR ONE;;;; 0020;SPACE;Zs;0;WS;;;;;N;;;;; 0021;EXCLAMATION MARK;Po;0;ON;;;;;N;;;;; 0022;QUOTATION MARK;Po;0;ON;;;;;N;;;;; 0023;NUMBER SIGN;Po;0;ET;;;;;N;;;;; 0024;DOLLAR SIGN;Sc;0;ET;;;;;N;;;;; 0025;PERCENT SIGN;Po;0;ET;;;;;N;;;;; 0026;AMPERSAND;Po;0;ON;;;;;N;;;;; 0027;APOSTROPHE;Po;0;ON;;;;;N;APOSTROPHE-QUOTE;;;; 0028;LEFT PARENTHESIS;Ps;0;ON;;;;;Y;OPENING PARENTHESIS;;;; 0029;RIGHT PARENTHESIS;Pe;0;ON;;;;;Y;CLOSING PARENTHESIS;;;; 002A;ASTERISK;Po;0;ON;;;;;N;;;;; 002B;PLUS SIGN;Sm;0;ES;;;;;N;;;;; 002C;COMMA;Po;0;CS;;;;;N;;;;; 002D;HYPHEN-MINUS;Pd;0;ES;;;;;N;;;;; 002E;FULL STOP;Po;0;CS;;;;;N;PERIOD;;;; 002F;SOLIDUS;Po;0;CS;;;;;N;SLASH;;;; 0030;DIGIT ZERO;Nd;0;EN;;0;0;0;N;;;;; 0031;DIGIT ONE;Nd;0;EN;;1;1;1;N;;;;; 0032;DIGIT TWO;Nd;0;EN;;2;2;2;N;;;;; 0033;DIGIT THREE;Nd;0;EN;;3;3;3;N;;;;; 0034;DIGIT FOUR;Nd;0;EN;;4;4;4;N;;;;; 0035;DIGIT FIVE;Nd;0;EN;;5;5;5;N;;;;; 0036;DIGIT SIX;Nd;0;EN;;6;6;6;N;;;;; 0037;DIGIT SEVEN;Nd;0;EN;;7;7;7;N;;;;; 0038;DIGIT EIGHT;Nd;0;EN;;8;8;8;N;;;;; 0039;DIGIT NINE;Nd;0;EN;;9;9;9;N;;;;; 003A;COLON;Po;0;CS;;;;;N;;;;; 003B;SEMICOLON;Po;0;ON;;;;;N;;;;; 003C;LESS-THAN SIGN;Sm;0;ON;;;;;Y;;;;; 003D;EQUALS SIGN;Sm;0;ON;;;;;N;;;;; 003E;GREATER-THAN SIGN;Sm;0;ON;;;;;Y;;;;; 003F;QUESTION MARK;Po;0;ON;;;;;N;;;;; 0040;COMMERCIAL AT;Po;0;ON;;;;;N;;;;; 0041;LATIN CAPITAL LETTER A;Lu;0;L;;;;;N;;;;0061; 0042;LATIN CAPITAL LETTER B;Lu;0;L;;;;;N;;;;0062; 0043;LATIN CAPITAL LETTER C;Lu;0;L;;;;;N;;;;0063; 0044;LATIN CAPITAL LETTER D;Lu;0;L;;;;;N;;;;0064; 0045;LATIN CAPITAL LETTER E;Lu;0;L;;;;;N;;;;0065; 0046;LATIN CAPITAL LETTER F;Lu;0;L;;;;;N;;;;0066; 0047;LATIN CAPITAL LETTER G;Lu;0;L;;;;;N;;;;0067; 0048;LATIN CAPITAL LETTER H;Lu;0;L;;;;;N;;;;0068; 0049;LATIN CAPITAL LETTER I;Lu;0;L;;;;;N;;;;0069; 004A;LATIN CAPITAL LETTER J;Lu;0;L;;;;;N;;;;006A; 004B;LATIN CAPITAL LETTER K;Lu;0;L;;;;;N;;;;006B; 004C;LATIN CAPITAL LETTER L;Lu;0;L;;;;;N;;;;006C; 004D;LATIN CAPITAL LETTER M;Lu;0;L;;;;;N;;;;006D; 004E;LATIN CAPITAL LETTER N;Lu;0;L;;;;;N;;;;006E; 004F;LATIN CAPITAL LETTER O;Lu;0;L;;;;;N;;;;006F; 0050;LATIN CAPITAL LETTER P;Lu;0;L;;;;;N;;;;0070; 0051;LATIN CAPITAL LETTER Q;Lu;0;L;;;;;N;;;;0071; 0052;LATIN CAPITAL LETTER R;Lu;0;L;;;;;N;;;;0072; 0053;LATIN CAPITAL LETTER S;Lu;0;L;;;;;N;;;;0073; 0054;LATIN CAPITAL LETTER T;Lu;0;L;;;;;N;;;;0074; 0055;LATIN CAPITAL LETTER U;Lu;0;L;;;;;N;;;;0075; 0056;LATIN CAPITAL LETTER V;Lu;0;L;;;;;N;;;;0076; 0057;LATIN CAPITAL LETTER W;Lu;0;L;;;;;N;;;;0077; 0058;LATIN CAPITAL LETTER X;Lu;0;L;;;;;N;;;;0078; 0059;LATIN CAPITAL LETTER Y;Lu;0;L;;;;;N;;;;0079; 005A;LATIN CAPITAL LETTER Z;Lu;0;L;;;;;N;;;;007A; 005B;LEFT SQUARE BRACKET;Ps;0;ON;;;;;Y;OPENING SQUARE BRACKET;;;; 005C;REVERSE SOLIDUS;Po;0;ON;;;;;N;BACKSLASH;;;; 005D;RIGHT SQUARE BRACKET;Pe;0;ON;;;;;Y;CLOSING SQUARE BRACKET;;;; 005E;CIRCUMFLEX ACCENT;Sk;0;ON;;;;;N;SPACING CIRCUMFLEX;;;; 005F;LOW LINE;Pc;0;ON;;;;;N;SPACING UNDERSCORE;;;; 0060;GRAVE ACCENT;Sk;0;ON;;;;;N;SPACING GRAVE;;;; 0061;LATIN SMALL LETTER A;Ll;0;L;;;;;N;;;0041;;0041 0062;LATIN SMALL LETTER B;Ll;0;L;;;;;N;;;0042;;0042 0063;LATIN SMALL LETTER C;Ll;0;L;;;;;N;;;0043;;0043 0064;LATIN SMALL LETTER D;Ll;0;L;;;;;N;;;0044;;0044 0065;LATIN SMALL LETTER E;Ll;0;L;;;;;N;;;0045;;0045 0066;LATIN SMALL LETTER F;Ll;0;L;;;;;N;;;0046;;0046 0067;LATIN SMALL LETTER G;Ll;0;L;;;;;N;;;0047;;0047 0068;LATIN SMALL LETTER H;Ll;0;L;;;;;N;;;0048;;0048 0069;LATIN SMALL LETTER I;Ll;0;L;;;;;N;;;0049;;0049 006A;LATIN SMALL LETTER J;Ll;0;L;;;;;N;;;004A;;004A 006B;LATIN SMALL LETTER K;Ll;0;L;;;;;N;;;004B;;004B 006C;LATIN SMALL LETTER L;Ll;0;L;;;;;N;;;004C;;004C 006D;LATIN SMALL LETTER M;Ll;0;L;;;;;N;;;004D;;004D 006E;LATIN SMALL LETTER N;Ll;0;L;;;;;N;;;004E;;004E 006F;LATIN SMALL LETTER O;Ll;0;L;;;;;N;;;004F;;004F 0070;LATIN SMALL LETTER P;Ll;0;L;;;;;N;;;0050;;0050 0071;LATIN SMALL LETTER Q;Ll;0;L;;;;;N;;;0051;;0051 0072;LATIN SMALL LETTER R;Ll;0;L;;;;;N;;;0052;;0052 0073;LATIN SMALL LETTER S;Ll;0;L;;;;;N;;;0053;;0053 0074;LATIN SMALL LETTER T;Ll;0;L;;;;;N;;;0054;;0054 0075;LATIN SMALL LETTER U;Ll;0;L;;;;;N;;;0055;;0055 0076;LATIN SMALL LETTER V;Ll;0;L;;;;;N;;;0056;;0056 0077;LATIN SMALL LETTER W;Ll;0;L;;;;;N;;;0057;;0057 0078;LATIN SMALL LETTER X;Ll;0;L;;;;;N;;;0058;;0058 0079;LATIN SMALL LETTER Y;Ll;0;L;;;;;N;;;0059;;0059 007A;LATIN SMALL LETTER Z;Ll;0;L;;;;;N;;;005A;;005A 007B;LEFT CURLY BRACKET;Ps;0;ON;;;;;Y;OPENING CURLY BRACKET;;;; 007C;VERTICAL LINE;Sm;0;ON;;;;;N;VERTICAL BAR;;;; 007D;RIGHT CURLY BRACKET;Pe;0;ON;;;;;Y;CLOSING CURLY BRACKET;;;; 007E;TILDE;Sm;0;ON;;;;;N;;;;; 007F;;Cc;0;BN;;;;;N;DELETE;;;; 0080;;Cc;0;BN;;;;;N;;;;; 0081;;Cc;0;BN;;;;;N;;;;; 0082;;Cc;0;BN;;;;;N;BREAK PERMITTED HERE;;;; 0083;;Cc;0;BN;;;;;N;NO BREAK HERE;;;; 0084;;Cc;0;BN;;;;;N;;;;; 0085;;Cc;0;B;;;;;N;NEXT LINE (NEL);;;; 0086;;Cc;0;BN;;;;;N;START OF SELECTED AREA;;;; 0087;;Cc;0;BN;;;;;N;END OF SELECTED AREA;;;; 0088;;Cc;0;BN;;;;;N;CHARACTER TABULATION SET;;;; 0089;;Cc;0;BN;;;;;N;CHARACTER TABULATION WITH JUSTIFICATION;;;; 008A;;Cc;0;BN;;;;;N;LINE TABULATION SET;;;; 008B;;Cc;0;BN;;;;;N;PARTIAL LINE FORWARD;;;; 008C;;Cc;0;BN;;;;;N;PARTIAL LINE BACKWARD;;;; 008D;;Cc;0;BN;;;;;N;REVERSE LINE FEED;;;; 008E;;Cc;0;BN;;;;;N;SINGLE SHIFT TWO;;;; 008F;;Cc;0;BN;;;;;N;SINGLE SHIFT THREE;;;; 0090;;Cc;0;BN;;;;;N;DEVICE CONTROL STRING;;;; 0091;;Cc;0;BN;;;;;N;PRIVATE USE ONE;;;; 0092;;Cc;0;BN;;;;;N;PRIVATE USE TWO;;;; 0093;;Cc;0;BN;;;;;N;SET TRANSMIT STATE;;;; 0094;;Cc;0;BN;;;;;N;CANCEL CHARACTER;;;; 0095;;Cc;0;BN;;;;;N;MESSAGE WAITING;;;; 0096;;Cc;0;BN;;;;;N;START OF GUARDED AREA;;;; 0097;;Cc;0;BN;;;;;N;END OF GUARDED AREA;;;; 0098;;Cc;0;BN;;;;;N;START OF STRING;;;; 0099;;Cc;0;BN;;;;;N;;;;; 009A;;Cc;0;BN;;;;;N;SINGLE CHARACTER INTRODUCER;;;; 009B;;Cc;0;BN;;;;;N;CONTROL SEQUENCE INTRODUCER;;;; 009C;;Cc;0;BN;;;;;N;STRING TERMINATOR;;;; 009D;;Cc;0;BN;;;;;N;OPERATING SYSTEM COMMAND;;;; 009E;;Cc;0;BN;;;;;N;PRIVACY MESSAGE;;;; 009F;;Cc;0;BN;;;;;N;APPLICATION PROGRAM COMMAND;;;; 00A0;NO-BREAK SPACE;Zs;0;CS; 0020;;;;N;NON-BREAKING SPACE;;;; 00A1;INVERTED EXCLAMATION MARK;Po;0;ON;;;;;N;;;;; 00A2;CENT SIGN;Sc;0;ET;;;;;N;;;;; 00A3;POUND SIGN;Sc;0;ET;;;;;N;;;;; 00A4;CURRENCY SIGN;Sc;0;ET;;;;;N;;;;; 00A5;YEN SIGN;Sc;0;ET;;;;;N;;;;; 00A6;BROKEN BAR;So;0;ON;;;;;N;BROKEN VERTICAL BAR;;;; 00A7;SECTION SIGN;Po;0;ON;;;;;N;;;;; 00A8;DIAERESIS;Sk;0;ON; 0020 0308;;;;N;SPACING DIAERESIS;;;; 00A9;COPYRIGHT SIGN;So;0;ON;;;;;N;;;;; 00AA;FEMININE ORDINAL INDICATOR;Lo;0;L; 0061;;;;N;;;;; 00AB;LEFT-POINTING DOUBLE ANGLE QUOTATION MARK;Pi;0;ON;;;;;Y;LEFT POINTING GUILLEMET;;;; 00AC;NOT SIGN;Sm;0;ON;;;;;N;;;;; 00AD;SOFT HYPHEN;Cf;0;BN;;;;;N;;;;; 00AE;REGISTERED SIGN;So;0;ON;;;;;N;REGISTERED TRADE MARK SIGN;;;; 00AF;MACRON;Sk;0;ON; 0020 0304;;;;N;SPACING MACRON;;;; 00B0;DEGREE SIGN;So;0;ET;;;;;N;;;;; 00B1;PLUS-MINUS SIGN;Sm;0;ET;;;;;N;PLUS-OR-MINUS SIGN;;;; 00B2;SUPERSCRIPT TWO;No;0;EN; 0032;;2;2;N;SUPERSCRIPT DIGIT TWO;;;; 00B3;SUPERSCRIPT THREE;No;0;EN; 0033;;3;3;N;SUPERSCRIPT DIGIT THREE;;;; 00B4;ACUTE ACCENT;Sk;0;ON; 0020 0301;;;;N;SPACING ACUTE;;;; 00B5;MICRO SIGN;Ll;0;L; 03BC;;;;N;;;039C;;039C 00B6;PILCROW SIGN;Po;0;ON;;;;;N;PARAGRAPH SIGN;;;; 00B7;MIDDLE DOT;Po;0;ON;;;;;N;;;;; 00B8;CEDILLA;Sk;0;ON; 0020 0327;;;;N;SPACING CEDILLA;;;; 00B9;SUPERSCRIPT ONE;No;0;EN; 0031;;1;1;N;SUPERSCRIPT DIGIT ONE;;;; 00BA;MASCULINE ORDINAL INDICATOR;Lo;0;L; 006F;;;;N;;;;; 00BB;RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK;Pf;0;ON;;;;;Y;RIGHT POINTING GUILLEMET;;;; 00BC;VULGAR FRACTION ONE QUARTER;No;0;ON; 0031 2044 0034;;;1/4;N;FRACTION ONE QUARTER;;;; 00BD;VULGAR FRACTION ONE HALF;No;0;ON; 0031 2044 0032;;;1/2;N;FRACTION ONE HALF;;;; 00BE;VULGAR FRACTION THREE QUARTERS;No;0;ON; 0033 2044 0034;;;3/4;N;FRACTION THREE QUARTERS;;;; 00BF;INVERTED QUESTION MARK;Po;0;ON;;;;;N;;;;; 00C0;LATIN CAPITAL LETTER A WITH GRAVE;Lu;0;L;0041 0300;;;;N;LATIN CAPITAL LETTER A GRAVE;;;00E0; 00C1;LATIN CAPITAL LETTER A WITH ACUTE;Lu;0;L;0041 0301;;;;N;LATIN CAPITAL LETTER A ACUTE;;;00E1; 00C2;LATIN CAPITAL LETTER A WITH CIRCUMFLEX;Lu;0;L;0041 0302;;;;N;LATIN CAPITAL LETTER A CIRCUMFLEX;;;00E2; 00C3;LATIN CAPITAL LETTER A WITH TILDE;Lu;0;L;0041 0303;;;;N;LATIN CAPITAL LETTER A TILDE;;;00E3; 00C4;LATIN CAPITAL LETTER A WITH DIAERESIS;Lu;0;L;0041 0308;;;;N;LATIN CAPITAL LETTER A DIAERESIS;;;00E4; 00C5;LATIN CAPITAL LETTER A WITH RING ABOVE;Lu;0;L;0041 030A;;;;N;LATIN CAPITAL LETTER A RING;;;00E5; 00C6;LATIN CAPITAL LETTER AE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER A E;;;00E6; 00C7;LATIN CAPITAL LETTER C WITH CEDILLA;Lu;0;L;0043 0327;;;;N;LATIN CAPITAL LETTER C CEDILLA;;;00E7; 00C8;LATIN CAPITAL LETTER E WITH GRAVE;Lu;0;L;0045 0300;;;;N;LATIN CAPITAL LETTER E GRAVE;;;00E8; 00C9;LATIN CAPITAL LETTER E WITH ACUTE;Lu;0;L;0045 0301;;;;N;LATIN CAPITAL LETTER E ACUTE;;;00E9; 00CA;LATIN CAPITAL LETTER E WITH CIRCUMFLEX;Lu;0;L;0045 0302;;;;N;LATIN CAPITAL LETTER E CIRCUMFLEX;;;00EA; 00CB;LATIN CAPITAL LETTER E WITH DIAERESIS;Lu;0;L;0045 0308;;;;N;LATIN CAPITAL LETTER E DIAERESIS;;;00EB; 00CC;LATIN CAPITAL LETTER I WITH GRAVE;Lu;0;L;0049 0300;;;;N;LATIN CAPITAL LETTER I GRAVE;;;00EC; 00CD;LATIN CAPITAL LETTER I WITH ACUTE;Lu;0;L;0049 0301;;;;N;LATIN CAPITAL LETTER I ACUTE;;;00ED; 00CE;LATIN CAPITAL LETTER I WITH CIRCUMFLEX;Lu;0;L;0049 0302;;;;N;LATIN CAPITAL LETTER I CIRCUMFLEX;;;00EE; 00CF;LATIN CAPITAL LETTER I WITH DIAERESIS;Lu;0;L;0049 0308;;;;N;LATIN CAPITAL LETTER I DIAERESIS;;;00EF; 00D0;LATIN CAPITAL LETTER ETH;Lu;0;L;;;;;N;;;;00F0; 00D1;LATIN CAPITAL LETTER N WITH TILDE;Lu;0;L;004E 0303;;;;N;LATIN CAPITAL LETTER N TILDE;;;00F1; 00D2;LATIN CAPITAL LETTER O WITH GRAVE;Lu;0;L;004F 0300;;;;N;LATIN CAPITAL LETTER O GRAVE;;;00F2; 00D3;LATIN CAPITAL LETTER O WITH ACUTE;Lu;0;L;004F 0301;;;;N;LATIN CAPITAL LETTER O ACUTE;;;00F3; 00D4;LATIN CAPITAL LETTER O WITH CIRCUMFLEX;Lu;0;L;004F 0302;;;;N;LATIN CAPITAL LETTER O CIRCUMFLEX;;;00F4; 00D5;LATIN CAPITAL LETTER O WITH TILDE;Lu;0;L;004F 0303;;;;N;LATIN CAPITAL LETTER O TILDE;;;00F5; 00D6;LATIN CAPITAL LETTER O WITH DIAERESIS;Lu;0;L;004F 0308;;;;N;LATIN CAPITAL LETTER O DIAERESIS;;;00F6; 00D7;MULTIPLICATION SIGN;Sm;0;ON;;;;;N;;;;; 00D8;LATIN CAPITAL LETTER O WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O SLASH;;;00F8; 00D9;LATIN CAPITAL LETTER U WITH GRAVE;Lu;0;L;0055 0300;;;;N;LATIN CAPITAL LETTER U GRAVE;;;00F9; 00DA;LATIN CAPITAL LETTER U WITH ACUTE;Lu;0;L;0055 0301;;;;N;LATIN CAPITAL LETTER U ACUTE;;;00FA; 00DB;LATIN CAPITAL LETTER U WITH CIRCUMFLEX;Lu;0;L;0055 0302;;;;N;LATIN CAPITAL LETTER U CIRCUMFLEX;;;00FB; 00DC;LATIN CAPITAL LETTER U WITH DIAERESIS;Lu;0;L;0055 0308;;;;N;LATIN CAPITAL LETTER U DIAERESIS;;;00FC; 00DD;LATIN CAPITAL LETTER Y WITH ACUTE;Lu;0;L;0059 0301;;;;N;LATIN CAPITAL LETTER Y ACUTE;;;00FD; 00DE;LATIN CAPITAL LETTER THORN;Lu;0;L;;;;;N;;;;00FE; 00DF;LATIN SMALL LETTER SHARP S;Ll;0;L;;;;;N;;;;; 00E0;LATIN SMALL LETTER A WITH GRAVE;Ll;0;L;0061 0300;;;;N;LATIN SMALL LETTER A GRAVE;;00C0;;00C0 00E1;LATIN SMALL LETTER A WITH ACUTE;Ll;0;L;0061 0301;;;;N;LATIN SMALL LETTER A ACUTE;;00C1;;00C1 00E2;LATIN SMALL LETTER A WITH CIRCUMFLEX;Ll;0;L;0061 0302;;;;N;LATIN SMALL LETTER A CIRCUMFLEX;;00C2;;00C2 00E3;LATIN SMALL LETTER A WITH TILDE;Ll;0;L;0061 0303;;;;N;LATIN SMALL LETTER A TILDE;;00C3;;00C3 00E4;LATIN SMALL LETTER A WITH DIAERESIS;Ll;0;L;0061 0308;;;;N;LATIN SMALL LETTER A DIAERESIS;;00C4;;00C4 00E5;LATIN SMALL LETTER A WITH RING ABOVE;Ll;0;L;0061 030A;;;;N;LATIN SMALL LETTER A RING;;00C5;;00C5 00E6;LATIN SMALL LETTER AE;Ll;0;L;;;;;N;LATIN SMALL LETTER A E;;00C6;;00C6 00E7;LATIN SMALL LETTER C WITH CEDILLA;Ll;0;L;0063 0327;;;;N;LATIN SMALL LETTER C CEDILLA;;00C7;;00C7 00E8;LATIN SMALL LETTER E WITH GRAVE;Ll;0;L;0065 0300;;;;N;LATIN SMALL LETTER E GRAVE;;00C8;;00C8 00E9;LATIN SMALL LETTER E WITH ACUTE;Ll;0;L;0065 0301;;;;N;LATIN SMALL LETTER E ACUTE;;00C9;;00C9 00EA;LATIN SMALL LETTER E WITH CIRCUMFLEX;Ll;0;L;0065 0302;;;;N;LATIN SMALL LETTER E CIRCUMFLEX;;00CA;;00CA 00EB;LATIN SMALL LETTER E WITH DIAERESIS;Ll;0;L;0065 0308;;;;N;LATIN SMALL LETTER E DIAERESIS;;00CB;;00CB 00EC;LATIN SMALL LETTER I WITH GRAVE;Ll;0;L;0069 0300;;;;N;LATIN SMALL LETTER I GRAVE;;00CC;;00CC 00ED;LATIN SMALL LETTER I WITH ACUTE;Ll;0;L;0069 0301;;;;N;LATIN SMALL LETTER I ACUTE;;00CD;;00CD 00EE;LATIN SMALL LETTER I WITH CIRCUMFLEX;Ll;0;L;0069 0302;;;;N;LATIN SMALL LETTER I CIRCUMFLEX;;00CE;;00CE 00EF;LATIN SMALL LETTER I WITH DIAERESIS;Ll;0;L;0069 0308;;;;N;LATIN SMALL LETTER I DIAERESIS;;00CF;;00CF 00F0;LATIN SMALL LETTER ETH;Ll;0;L;;;;;N;;;00D0;;00D0 00F1;LATIN SMALL LETTER N WITH TILDE;Ll;0;L;006E 0303;;;;N;LATIN SMALL LETTER N TILDE;;00D1;;00D1 00F2;LATIN SMALL LETTER O WITH GRAVE;Ll;0;L;006F 0300;;;;N;LATIN SMALL LETTER O GRAVE;;00D2;;00D2 00F3;LATIN SMALL LETTER O WITH ACUTE;Ll;0;L;006F 0301;;;;N;LATIN SMALL LETTER O ACUTE;;00D3;;00D3 00F4;LATIN SMALL LETTER O WITH CIRCUMFLEX;Ll;0;L;006F 0302;;;;N;LATIN SMALL LETTER O CIRCUMFLEX;;00D4;;00D4 00F5;LATIN SMALL LETTER O WITH TILDE;Ll;0;L;006F 0303;;;;N;LATIN SMALL LETTER O TILDE;;00D5;;00D5 00F6;LATIN SMALL LETTER O WITH DIAERESIS;Ll;0;L;006F 0308;;;;N;LATIN SMALL LETTER O DIAERESIS;;00D6;;00D6 00F7;DIVISION SIGN;Sm;0;ON;;;;;N;;;;; 00F8;LATIN SMALL LETTER O WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER O SLASH;;00D8;;00D8 00F9;LATIN SMALL LETTER U WITH GRAVE;Ll;0;L;0075 0300;;;;N;LATIN SMALL LETTER U GRAVE;;00D9;;00D9 00FA;LATIN SMALL LETTER U WITH ACUTE;Ll;0;L;0075 0301;;;;N;LATIN SMALL LETTER U ACUTE;;00DA;;00DA 00FB;LATIN SMALL LETTER U WITH CIRCUMFLEX;Ll;0;L;0075 0302;;;;N;LATIN SMALL LETTER U CIRCUMFLEX;;00DB;;00DB 00FC;LATIN SMALL LETTER U WITH DIAERESIS;Ll;0;L;0075 0308;;;;N;LATIN SMALL LETTER U DIAERESIS;;00DC;;00DC 00FD;LATIN SMALL LETTER Y WITH ACUTE;Ll;0;L;0079 0301;;;;N;LATIN SMALL LETTER Y ACUTE;;00DD;;00DD 00FE;LATIN SMALL LETTER THORN;Ll;0;L;;;;;N;;;00DE;;00DE 00FF;LATIN SMALL LETTER Y WITH DIAERESIS;Ll;0;L;0079 0308;;;;N;LATIN SMALL LETTER Y DIAERESIS;;0178;;0178 0100;LATIN CAPITAL LETTER A WITH MACRON;Lu;0;L;0041 0304;;;;N;LATIN CAPITAL LETTER A MACRON;;;0101; 0101;LATIN SMALL LETTER A WITH MACRON;Ll;0;L;0061 0304;;;;N;LATIN SMALL LETTER A MACRON;;0100;;0100 0102;LATIN CAPITAL LETTER A WITH BREVE;Lu;0;L;0041 0306;;;;N;LATIN CAPITAL LETTER A BREVE;;;0103; 0103;LATIN SMALL LETTER A WITH BREVE;Ll;0;L;0061 0306;;;;N;LATIN SMALL LETTER A BREVE;;0102;;0102 0104;LATIN CAPITAL LETTER A WITH OGONEK;Lu;0;L;0041 0328;;;;N;LATIN CAPITAL LETTER A OGONEK;;;0105; 0105;LATIN SMALL LETTER A WITH OGONEK;Ll;0;L;0061 0328;;;;N;LATIN SMALL LETTER A OGONEK;;0104;;0104 0106;LATIN CAPITAL LETTER C WITH ACUTE;Lu;0;L;0043 0301;;;;N;LATIN CAPITAL LETTER C ACUTE;;;0107; 0107;LATIN SMALL LETTER C WITH ACUTE;Ll;0;L;0063 0301;;;;N;LATIN SMALL LETTER C ACUTE;;0106;;0106 0108;LATIN CAPITAL LETTER C WITH CIRCUMFLEX;Lu;0;L;0043 0302;;;;N;LATIN CAPITAL LETTER C CIRCUMFLEX;;;0109; 0109;LATIN SMALL LETTER C WITH CIRCUMFLEX;Ll;0;L;0063 0302;;;;N;LATIN SMALL LETTER C CIRCUMFLEX;;0108;;0108 010A;LATIN CAPITAL LETTER C WITH DOT ABOVE;Lu;0;L;0043 0307;;;;N;LATIN CAPITAL LETTER C DOT;;;010B; 010B;LATIN SMALL LETTER C WITH DOT ABOVE;Ll;0;L;0063 0307;;;;N;LATIN SMALL LETTER C DOT;;010A;;010A 010C;LATIN CAPITAL LETTER C WITH CARON;Lu;0;L;0043 030C;;;;N;LATIN CAPITAL LETTER C HACEK;;;010D; 010D;LATIN SMALL LETTER C WITH CARON;Ll;0;L;0063 030C;;;;N;LATIN SMALL LETTER C HACEK;;010C;;010C 010E;LATIN CAPITAL LETTER D WITH CARON;Lu;0;L;0044 030C;;;;N;LATIN CAPITAL LETTER D HACEK;;;010F; 010F;LATIN SMALL LETTER D WITH CARON;Ll;0;L;0064 030C;;;;N;LATIN SMALL LETTER D HACEK;;010E;;010E 0110;LATIN CAPITAL LETTER D WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D BAR;;;0111; 0111;LATIN SMALL LETTER D WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER D BAR;;0110;;0110 0112;LATIN CAPITAL LETTER E WITH MACRON;Lu;0;L;0045 0304;;;;N;LATIN CAPITAL LETTER E MACRON;;;0113; 0113;LATIN SMALL LETTER E WITH MACRON;Ll;0;L;0065 0304;;;;N;LATIN SMALL LETTER E MACRON;;0112;;0112 0114;LATIN CAPITAL LETTER E WITH BREVE;Lu;0;L;0045 0306;;;;N;LATIN CAPITAL LETTER E BREVE;;;0115; 0115;LATIN SMALL LETTER E WITH BREVE;Ll;0;L;0065 0306;;;;N;LATIN SMALL LETTER E BREVE;;0114;;0114 0116;LATIN CAPITAL LETTER E WITH DOT ABOVE;Lu;0;L;0045 0307;;;;N;LATIN CAPITAL LETTER E DOT;;;0117; 0117;LATIN SMALL LETTER E WITH DOT ABOVE;Ll;0;L;0065 0307;;;;N;LATIN SMALL LETTER E DOT;;0116;;0116 0118;LATIN CAPITAL LETTER E WITH OGONEK;Lu;0;L;0045 0328;;;;N;LATIN CAPITAL LETTER E OGONEK;;;0119; 0119;LATIN SMALL LETTER E WITH OGONEK;Ll;0;L;0065 0328;;;;N;LATIN SMALL LETTER E OGONEK;;0118;;0118 011A;LATIN CAPITAL LETTER E WITH CARON;Lu;0;L;0045 030C;;;;N;LATIN CAPITAL LETTER E HACEK;;;011B; 011B;LATIN SMALL LETTER E WITH CARON;Ll;0;L;0065 030C;;;;N;LATIN SMALL LETTER E HACEK;;011A;;011A 011C;LATIN CAPITAL LETTER G WITH CIRCUMFLEX;Lu;0;L;0047 0302;;;;N;LATIN CAPITAL LETTER G CIRCUMFLEX;;;011D; 011D;LATIN SMALL LETTER G WITH CIRCUMFLEX;Ll;0;L;0067 0302;;;;N;LATIN SMALL LETTER G CIRCUMFLEX;;011C;;011C 011E;LATIN CAPITAL LETTER G WITH BREVE;Lu;0;L;0047 0306;;;;N;LATIN CAPITAL LETTER G BREVE;;;011F; 011F;LATIN SMALL LETTER G WITH BREVE;Ll;0;L;0067 0306;;;;N;LATIN SMALL LETTER G BREVE;;011E;;011E 0120;LATIN CAPITAL LETTER G WITH DOT ABOVE;Lu;0;L;0047 0307;;;;N;LATIN CAPITAL LETTER G DOT;;;0121; 0121;LATIN SMALL LETTER G WITH DOT ABOVE;Ll;0;L;0067 0307;;;;N;LATIN SMALL LETTER G DOT;;0120;;0120 0122;LATIN CAPITAL LETTER G WITH CEDILLA;Lu;0;L;0047 0327;;;;N;LATIN CAPITAL LETTER G CEDILLA;;;0123; 0123;LATIN SMALL LETTER G WITH CEDILLA;Ll;0;L;0067 0327;;;;N;LATIN SMALL LETTER G CEDILLA;;0122;;0122 0124;LATIN CAPITAL LETTER H WITH CIRCUMFLEX;Lu;0;L;0048 0302;;;;N;LATIN CAPITAL LETTER H CIRCUMFLEX;;;0125; 0125;LATIN SMALL LETTER H WITH CIRCUMFLEX;Ll;0;L;0068 0302;;;;N;LATIN SMALL LETTER H CIRCUMFLEX;;0124;;0124 0126;LATIN CAPITAL LETTER H WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER H BAR;;;0127; 0127;LATIN SMALL LETTER H WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER H BAR;;0126;;0126 0128;LATIN CAPITAL LETTER I WITH TILDE;Lu;0;L;0049 0303;;;;N;LATIN CAPITAL LETTER I TILDE;;;0129; 0129;LATIN SMALL LETTER I WITH TILDE;Ll;0;L;0069 0303;;;;N;LATIN SMALL LETTER I TILDE;;0128;;0128 012A;LATIN CAPITAL LETTER I WITH MACRON;Lu;0;L;0049 0304;;;;N;LATIN CAPITAL LETTER I MACRON;;;012B; 012B;LATIN SMALL LETTER I WITH MACRON;Ll;0;L;0069 0304;;;;N;LATIN SMALL LETTER I MACRON;;012A;;012A 012C;LATIN CAPITAL LETTER I WITH BREVE;Lu;0;L;0049 0306;;;;N;LATIN CAPITAL LETTER I BREVE;;;012D; 012D;LATIN SMALL LETTER I WITH BREVE;Ll;0;L;0069 0306;;;;N;LATIN SMALL LETTER I BREVE;;012C;;012C 012E;LATIN CAPITAL LETTER I WITH OGONEK;Lu;0;L;0049 0328;;;;N;LATIN CAPITAL LETTER I OGONEK;;;012F; 012F;LATIN SMALL LETTER I WITH OGONEK;Ll;0;L;0069 0328;;;;N;LATIN SMALL LETTER I OGONEK;;012E;;012E 0130;LATIN CAPITAL LETTER I WITH DOT ABOVE;Lu;0;L;0049 0307;;;;N;LATIN CAPITAL LETTER I DOT;;;0069; 0131;LATIN SMALL LETTER DOTLESS I;Ll;0;L;;;;;N;;;0049;;0049 0132;LATIN CAPITAL LIGATURE IJ;Lu;0;L; 0049 004A;;;;N;LATIN CAPITAL LETTER I J;;;0133; 0133;LATIN SMALL LIGATURE IJ;Ll;0;L; 0069 006A;;;;N;LATIN SMALL LETTER I J;;0132;;0132 0134;LATIN CAPITAL LETTER J WITH CIRCUMFLEX;Lu;0;L;004A 0302;;;;N;LATIN CAPITAL LETTER J CIRCUMFLEX;;;0135; 0135;LATIN SMALL LETTER J WITH CIRCUMFLEX;Ll;0;L;006A 0302;;;;N;LATIN SMALL LETTER J CIRCUMFLEX;;0134;;0134 0136;LATIN CAPITAL LETTER K WITH CEDILLA;Lu;0;L;004B 0327;;;;N;LATIN CAPITAL LETTER K CEDILLA;;;0137; 0137;LATIN SMALL LETTER K WITH CEDILLA;Ll;0;L;006B 0327;;;;N;LATIN SMALL LETTER K CEDILLA;;0136;;0136 0138;LATIN SMALL LETTER KRA;Ll;0;L;;;;;N;;;;; 0139;LATIN CAPITAL LETTER L WITH ACUTE;Lu;0;L;004C 0301;;;;N;LATIN CAPITAL LETTER L ACUTE;;;013A; 013A;LATIN SMALL LETTER L WITH ACUTE;Ll;0;L;006C 0301;;;;N;LATIN SMALL LETTER L ACUTE;;0139;;0139 013B;LATIN CAPITAL LETTER L WITH CEDILLA;Lu;0;L;004C 0327;;;;N;LATIN CAPITAL LETTER L CEDILLA;;;013C; 013C;LATIN SMALL LETTER L WITH CEDILLA;Ll;0;L;006C 0327;;;;N;LATIN SMALL LETTER L CEDILLA;;013B;;013B 013D;LATIN CAPITAL LETTER L WITH CARON;Lu;0;L;004C 030C;;;;N;LATIN CAPITAL LETTER L HACEK;;;013E; 013E;LATIN SMALL LETTER L WITH CARON;Ll;0;L;006C 030C;;;;N;LATIN SMALL LETTER L HACEK;;013D;;013D 013F;LATIN CAPITAL LETTER L WITH MIDDLE DOT;Lu;0;L; 004C 00B7;;;;N;;;;0140; 0140;LATIN SMALL LETTER L WITH MIDDLE DOT;Ll;0;L; 006C 00B7;;;;N;;;013F;;013F 0141;LATIN CAPITAL LETTER L WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER L SLASH;;;0142; 0142;LATIN SMALL LETTER L WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER L SLASH;;0141;;0141 0143;LATIN CAPITAL LETTER N WITH ACUTE;Lu;0;L;004E 0301;;;;N;LATIN CAPITAL LETTER N ACUTE;;;0144; 0144;LATIN SMALL LETTER N WITH ACUTE;Ll;0;L;006E 0301;;;;N;LATIN SMALL LETTER N ACUTE;;0143;;0143 0145;LATIN CAPITAL LETTER N WITH CEDILLA;Lu;0;L;004E 0327;;;;N;LATIN CAPITAL LETTER N CEDILLA;;;0146; 0146;LATIN SMALL LETTER N WITH CEDILLA;Ll;0;L;006E 0327;;;;N;LATIN SMALL LETTER N CEDILLA;;0145;;0145 0147;LATIN CAPITAL LETTER N WITH CARON;Lu;0;L;004E 030C;;;;N;LATIN CAPITAL LETTER N HACEK;;;0148; 0148;LATIN SMALL LETTER N WITH CARON;Ll;0;L;006E 030C;;;;N;LATIN SMALL LETTER N HACEK;;0147;;0147 0149;LATIN SMALL LETTER N PRECEDED BY APOSTROPHE;Ll;0;L; 02BC 006E;;;;N;LATIN SMALL LETTER APOSTROPHE N;;;; 014A;LATIN CAPITAL LETTER ENG;Lu;0;L;;;;;N;;;;014B; 014B;LATIN SMALL LETTER ENG;Ll;0;L;;;;;N;;;014A;;014A 014C;LATIN CAPITAL LETTER O WITH MACRON;Lu;0;L;004F 0304;;;;N;LATIN CAPITAL LETTER O MACRON;;;014D; 014D;LATIN SMALL LETTER O WITH MACRON;Ll;0;L;006F 0304;;;;N;LATIN SMALL LETTER O MACRON;;014C;;014C 014E;LATIN CAPITAL LETTER O WITH BREVE;Lu;0;L;004F 0306;;;;N;LATIN CAPITAL LETTER O BREVE;;;014F; 014F;LATIN SMALL LETTER O WITH BREVE;Ll;0;L;006F 0306;;;;N;LATIN SMALL LETTER O BREVE;;014E;;014E 0150;LATIN CAPITAL LETTER O WITH DOUBLE ACUTE;Lu;0;L;004F 030B;;;;N;LATIN CAPITAL LETTER O DOUBLE ACUTE;;;0151; 0151;LATIN SMALL LETTER O WITH DOUBLE ACUTE;Ll;0;L;006F 030B;;;;N;LATIN SMALL LETTER O DOUBLE ACUTE;;0150;;0150 0152;LATIN CAPITAL LIGATURE OE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O E;;;0153; 0153;LATIN SMALL LIGATURE OE;Ll;0;L;;;;;N;LATIN SMALL LETTER O E;;0152;;0152 0154;LATIN CAPITAL LETTER R WITH ACUTE;Lu;0;L;0052 0301;;;;N;LATIN CAPITAL LETTER R ACUTE;;;0155; 0155;LATIN SMALL LETTER R WITH ACUTE;Ll;0;L;0072 0301;;;;N;LATIN SMALL LETTER R ACUTE;;0154;;0154 0156;LATIN CAPITAL LETTER R WITH CEDILLA;Lu;0;L;0052 0327;;;;N;LATIN CAPITAL LETTER R CEDILLA;;;0157; 0157;LATIN SMALL LETTER R WITH CEDILLA;Ll;0;L;0072 0327;;;;N;LATIN SMALL LETTER R CEDILLA;;0156;;0156 0158;LATIN CAPITAL LETTER R WITH CARON;Lu;0;L;0052 030C;;;;N;LATIN CAPITAL LETTER R HACEK;;;0159; 0159;LATIN SMALL LETTER R WITH CARON;Ll;0;L;0072 030C;;;;N;LATIN SMALL LETTER R HACEK;;0158;;0158 015A;LATIN CAPITAL LETTER S WITH ACUTE;Lu;0;L;0053 0301;;;;N;LATIN CAPITAL LETTER S ACUTE;;;015B; 015B;LATIN SMALL LETTER S WITH ACUTE;Ll;0;L;0073 0301;;;;N;LATIN SMALL LETTER S ACUTE;;015A;;015A 015C;LATIN CAPITAL LETTER S WITH CIRCUMFLEX;Lu;0;L;0053 0302;;;;N;LATIN CAPITAL LETTER S CIRCUMFLEX;;;015D; 015D;LATIN SMALL LETTER S WITH CIRCUMFLEX;Ll;0;L;0073 0302;;;;N;LATIN SMALL LETTER S CIRCUMFLEX;;015C;;015C 015E;LATIN CAPITAL LETTER S WITH CEDILLA;Lu;0;L;0053 0327;;;;N;LATIN CAPITAL LETTER S CEDILLA;;;015F; 015F;LATIN SMALL LETTER S WITH CEDILLA;Ll;0;L;0073 0327;;;;N;LATIN SMALL LETTER S CEDILLA;;015E;;015E 0160;LATIN CAPITAL LETTER S WITH CARON;Lu;0;L;0053 030C;;;;N;LATIN CAPITAL LETTER S HACEK;;;0161; 0161;LATIN SMALL LETTER S WITH CARON;Ll;0;L;0073 030C;;;;N;LATIN SMALL LETTER S HACEK;;0160;;0160 0162;LATIN CAPITAL LETTER T WITH CEDILLA;Lu;0;L;0054 0327;;;;N;LATIN CAPITAL LETTER T CEDILLA;;;0163; 0163;LATIN SMALL LETTER T WITH CEDILLA;Ll;0;L;0074 0327;;;;N;LATIN SMALL LETTER T CEDILLA;;0162;;0162 0164;LATIN CAPITAL LETTER T WITH CARON;Lu;0;L;0054 030C;;;;N;LATIN CAPITAL LETTER T HACEK;;;0165; 0165;LATIN SMALL LETTER T WITH CARON;Ll;0;L;0074 030C;;;;N;LATIN SMALL LETTER T HACEK;;0164;;0164 0166;LATIN CAPITAL LETTER T WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T BAR;;;0167; 0167;LATIN SMALL LETTER T WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER T BAR;;0166;;0166 0168;LATIN CAPITAL LETTER U WITH TILDE;Lu;0;L;0055 0303;;;;N;LATIN CAPITAL LETTER U TILDE;;;0169; 0169;LATIN SMALL LETTER U WITH TILDE;Ll;0;L;0075 0303;;;;N;LATIN SMALL LETTER U TILDE;;0168;;0168 016A;LATIN CAPITAL LETTER U WITH MACRON;Lu;0;L;0055 0304;;;;N;LATIN CAPITAL LETTER U MACRON;;;016B; 016B;LATIN SMALL LETTER U WITH MACRON;Ll;0;L;0075 0304;;;;N;LATIN SMALL LETTER U MACRON;;016A;;016A 016C;LATIN CAPITAL LETTER U WITH BREVE;Lu;0;L;0055 0306;;;;N;LATIN CAPITAL LETTER U BREVE;;;016D; 016D;LATIN SMALL LETTER U WITH BREVE;Ll;0;L;0075 0306;;;;N;LATIN SMALL LETTER U BREVE;;016C;;016C 016E;LATIN CAPITAL LETTER U WITH RING ABOVE;Lu;0;L;0055 030A;;;;N;LATIN CAPITAL LETTER U RING;;;016F; 016F;LATIN SMALL LETTER U WITH RING ABOVE;Ll;0;L;0075 030A;;;;N;LATIN SMALL LETTER U RING;;016E;;016E 0170;LATIN CAPITAL LETTER U WITH DOUBLE ACUTE;Lu;0;L;0055 030B;;;;N;LATIN CAPITAL LETTER U DOUBLE ACUTE;;;0171; 0171;LATIN SMALL LETTER U WITH DOUBLE ACUTE;Ll;0;L;0075 030B;;;;N;LATIN SMALL LETTER U DOUBLE ACUTE;;0170;;0170 0172;LATIN CAPITAL LETTER U WITH OGONEK;Lu;0;L;0055 0328;;;;N;LATIN CAPITAL LETTER U OGONEK;;;0173; 0173;LATIN SMALL LETTER U WITH OGONEK;Ll;0;L;0075 0328;;;;N;LATIN SMALL LETTER U OGONEK;;0172;;0172 0174;LATIN CAPITAL LETTER W WITH CIRCUMFLEX;Lu;0;L;0057 0302;;;;N;LATIN CAPITAL LETTER W CIRCUMFLEX;;;0175; 0175;LATIN SMALL LETTER W WITH CIRCUMFLEX;Ll;0;L;0077 0302;;;;N;LATIN SMALL LETTER W CIRCUMFLEX;;0174;;0174 0176;LATIN CAPITAL LETTER Y WITH CIRCUMFLEX;Lu;0;L;0059 0302;;;;N;LATIN CAPITAL LETTER Y CIRCUMFLEX;;;0177; 0177;LATIN SMALL LETTER Y WITH CIRCUMFLEX;Ll;0;L;0079 0302;;;;N;LATIN SMALL LETTER Y CIRCUMFLEX;;0176;;0176 0178;LATIN CAPITAL LETTER Y WITH DIAERESIS;Lu;0;L;0059 0308;;;;N;LATIN CAPITAL LETTER Y DIAERESIS;;;00FF; 0179;LATIN CAPITAL LETTER Z WITH ACUTE;Lu;0;L;005A 0301;;;;N;LATIN CAPITAL LETTER Z ACUTE;;;017A; 017A;LATIN SMALL LETTER Z WITH ACUTE;Ll;0;L;007A 0301;;;;N;LATIN SMALL LETTER Z ACUTE;;0179;;0179 017B;LATIN CAPITAL LETTER Z WITH DOT ABOVE;Lu;0;L;005A 0307;;;;N;LATIN CAPITAL LETTER Z DOT;;;017C; 017C;LATIN SMALL LETTER Z WITH DOT ABOVE;Ll;0;L;007A 0307;;;;N;LATIN SMALL LETTER Z DOT;;017B;;017B 017D;LATIN CAPITAL LETTER Z WITH CARON;Lu;0;L;005A 030C;;;;N;LATIN CAPITAL LETTER Z HACEK;;;017E; 017E;LATIN SMALL LETTER Z WITH CARON;Ll;0;L;007A 030C;;;;N;LATIN SMALL LETTER Z HACEK;;017D;;017D 017F;LATIN SMALL LETTER LONG S;Ll;0;L; 0073;;;;N;;;0053;;0053 0180;LATIN SMALL LETTER B WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER B BAR;;0243;;0243 0181;LATIN CAPITAL LETTER B WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER B HOOK;;;0253; 0182;LATIN CAPITAL LETTER B WITH TOPBAR;Lu;0;L;;;;;N;LATIN CAPITAL LETTER B TOPBAR;;;0183; 0183;LATIN SMALL LETTER B WITH TOPBAR;Ll;0;L;;;;;N;LATIN SMALL LETTER B TOPBAR;;0182;;0182 0184;LATIN CAPITAL LETTER TONE SIX;Lu;0;L;;;;;N;;;;0185; 0185;LATIN SMALL LETTER TONE SIX;Ll;0;L;;;;;N;;;0184;;0184 0186;LATIN CAPITAL LETTER OPEN O;Lu;0;L;;;;;N;;;;0254; 0187;LATIN CAPITAL LETTER C WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER C HOOK;;;0188; 0188;LATIN SMALL LETTER C WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER C HOOK;;0187;;0187 0189;LATIN CAPITAL LETTER AFRICAN D;Lu;0;L;;;;;N;;;;0256; 018A;LATIN CAPITAL LETTER D WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D HOOK;;;0257; 018B;LATIN CAPITAL LETTER D WITH TOPBAR;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D TOPBAR;;;018C; 018C;LATIN SMALL LETTER D WITH TOPBAR;Ll;0;L;;;;;N;LATIN SMALL LETTER D TOPBAR;;018B;;018B 018D;LATIN SMALL LETTER TURNED DELTA;Ll;0;L;;;;;N;;;;; 018E;LATIN CAPITAL LETTER REVERSED E;Lu;0;L;;;;;N;LATIN CAPITAL LETTER TURNED E;;;01DD; 018F;LATIN CAPITAL LETTER SCHWA;Lu;0;L;;;;;N;;;;0259; 0190;LATIN CAPITAL LETTER OPEN E;Lu;0;L;;;;;N;LATIN CAPITAL LETTER EPSILON;;;025B; 0191;LATIN CAPITAL LETTER F WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER F HOOK;;;0192; 0192;LATIN SMALL LETTER F WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT F;;0191;;0191 0193;LATIN CAPITAL LETTER G WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER G HOOK;;;0260; 0194;LATIN CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;0263; 0195;LATIN SMALL LETTER HV;Ll;0;L;;;;;N;LATIN SMALL LETTER H V;;01F6;;01F6 0196;LATIN CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;0269; 0197;LATIN CAPITAL LETTER I WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER BARRED I;;;0268; 0198;LATIN CAPITAL LETTER K WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER K HOOK;;;0199; 0199;LATIN SMALL LETTER K WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER K HOOK;;0198;;0198 019A;LATIN SMALL LETTER L WITH BAR;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED L;;023D;;023D 019B;LATIN SMALL LETTER LAMBDA WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED LAMBDA;;;; 019C;LATIN CAPITAL LETTER TURNED M;Lu;0;L;;;;;N;;;;026F; 019D;LATIN CAPITAL LETTER N WITH LEFT HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER N HOOK;;;0272; 019E;LATIN SMALL LETTER N WITH LONG RIGHT LEG;Ll;0;L;;;;;N;;;0220;;0220 019F;LATIN CAPITAL LETTER O WITH MIDDLE TILDE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER BARRED O;;;0275; 01A0;LATIN CAPITAL LETTER O WITH HORN;Lu;0;L;004F 031B;;;;N;LATIN CAPITAL LETTER O HORN;;;01A1; 01A1;LATIN SMALL LETTER O WITH HORN;Ll;0;L;006F 031B;;;;N;LATIN SMALL LETTER O HORN;;01A0;;01A0 01A2;LATIN CAPITAL LETTER OI;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O I;;;01A3; 01A3;LATIN SMALL LETTER OI;Ll;0;L;;;;;N;LATIN SMALL LETTER O I;;01A2;;01A2 01A4;LATIN CAPITAL LETTER P WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER P HOOK;;;01A5; 01A5;LATIN SMALL LETTER P WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER P HOOK;;01A4;;01A4 01A6;LATIN LETTER YR;Lu;0;L;;;;;N;LATIN LETTER Y R;;;0280; 01A7;LATIN CAPITAL LETTER TONE TWO;Lu;0;L;;;;;N;;;;01A8; 01A8;LATIN SMALL LETTER TONE TWO;Ll;0;L;;;;;N;;;01A7;;01A7 01A9;LATIN CAPITAL LETTER ESH;Lu;0;L;;;;;N;;;;0283; 01AA;LATIN LETTER REVERSED ESH LOOP;Ll;0;L;;;;;N;;;;; 01AB;LATIN SMALL LETTER T WITH PALATAL HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T PALATAL HOOK;;;; 01AC;LATIN CAPITAL LETTER T WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T HOOK;;;01AD; 01AD;LATIN SMALL LETTER T WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T HOOK;;01AC;;01AC 01AE;LATIN CAPITAL LETTER T WITH RETROFLEX HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T RETROFLEX HOOK;;;0288; 01AF;LATIN CAPITAL LETTER U WITH HORN;Lu;0;L;0055 031B;;;;N;LATIN CAPITAL LETTER U HORN;;;01B0; 01B0;LATIN SMALL LETTER U WITH HORN;Ll;0;L;0075 031B;;;;N;LATIN SMALL LETTER U HORN;;01AF;;01AF 01B1;LATIN CAPITAL LETTER UPSILON;Lu;0;L;;;;;N;;;;028A; 01B2;LATIN CAPITAL LETTER V WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER SCRIPT V;;;028B; 01B3;LATIN CAPITAL LETTER Y WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER Y HOOK;;;01B4; 01B4;LATIN SMALL LETTER Y WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Y HOOK;;01B3;;01B3 01B5;LATIN CAPITAL LETTER Z WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER Z BAR;;;01B6; 01B6;LATIN SMALL LETTER Z WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER Z BAR;;01B5;;01B5 01B7;LATIN CAPITAL LETTER EZH;Lu;0;L;;;;;N;LATIN CAPITAL LETTER YOGH;;;0292; 01B8;LATIN CAPITAL LETTER EZH REVERSED;Lu;0;L;;;;;N;LATIN CAPITAL LETTER REVERSED YOGH;;;01B9; 01B9;LATIN SMALL LETTER EZH REVERSED;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED YOGH;;01B8;;01B8 01BA;LATIN SMALL LETTER EZH WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH WITH TAIL;;;; 01BB;LATIN LETTER TWO WITH STROKE;Lo;0;L;;;;;N;LATIN LETTER TWO BAR;;;; 01BC;LATIN CAPITAL LETTER TONE FIVE;Lu;0;L;;;;;N;;;;01BD; 01BD;LATIN SMALL LETTER TONE FIVE;Ll;0;L;;;;;N;;;01BC;;01BC 01BE;LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER INVERTED GLOTTAL STOP BAR;;;; 01BF;LATIN LETTER WYNN;Ll;0;L;;;;;N;;;01F7;;01F7 01C0;LATIN LETTER DENTAL CLICK;Lo;0;L;;;;;N;LATIN LETTER PIPE;;;; 01C1;LATIN LETTER LATERAL CLICK;Lo;0;L;;;;;N;LATIN LETTER DOUBLE PIPE;;;; 01C2;LATIN LETTER ALVEOLAR CLICK;Lo;0;L;;;;;N;LATIN LETTER PIPE DOUBLE BAR;;;; 01C3;LATIN LETTER RETROFLEX CLICK;Lo;0;L;;;;;N;LATIN LETTER EXCLAMATION MARK;;;; 01C4;LATIN CAPITAL LETTER DZ WITH CARON;Lu;0;L; 0044 017D;;;;N;LATIN CAPITAL LETTER D Z HACEK;;;01C6;01C5 01C5;LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON;Lt;0;L; 0044 017E;;;;N;LATIN LETTER CAPITAL D SMALL Z HACEK;;01C4;01C6;01C5 01C6;LATIN SMALL LETTER DZ WITH CARON;Ll;0;L; 0064 017E;;;;N;LATIN SMALL LETTER D Z HACEK;;01C4;;01C5 01C7;LATIN CAPITAL LETTER LJ;Lu;0;L; 004C 004A;;;;N;LATIN CAPITAL LETTER L J;;;01C9;01C8 01C8;LATIN CAPITAL LETTER L WITH SMALL LETTER J;Lt;0;L; 004C 006A;;;;N;LATIN LETTER CAPITAL L SMALL J;;01C7;01C9;01C8 01C9;LATIN SMALL LETTER LJ;Ll;0;L; 006C 006A;;;;N;LATIN SMALL LETTER L J;;01C7;;01C8 01CA;LATIN CAPITAL LETTER NJ;Lu;0;L; 004E 004A;;;;N;LATIN CAPITAL LETTER N J;;;01CC;01CB 01CB;LATIN CAPITAL LETTER N WITH SMALL LETTER J;Lt;0;L; 004E 006A;;;;N;LATIN LETTER CAPITAL N SMALL J;;01CA;01CC;01CB 01CC;LATIN SMALL LETTER NJ;Ll;0;L; 006E 006A;;;;N;LATIN SMALL LETTER N J;;01CA;;01CB 01CD;LATIN CAPITAL LETTER A WITH CARON;Lu;0;L;0041 030C;;;;N;LATIN CAPITAL LETTER A HACEK;;;01CE; 01CE;LATIN SMALL LETTER A WITH CARON;Ll;0;L;0061 030C;;;;N;LATIN SMALL LETTER A HACEK;;01CD;;01CD 01CF;LATIN CAPITAL LETTER I WITH CARON;Lu;0;L;0049 030C;;;;N;LATIN CAPITAL LETTER I HACEK;;;01D0; 01D0;LATIN SMALL LETTER I WITH CARON;Ll;0;L;0069 030C;;;;N;LATIN SMALL LETTER I HACEK;;01CF;;01CF 01D1;LATIN CAPITAL LETTER O WITH CARON;Lu;0;L;004F 030C;;;;N;LATIN CAPITAL LETTER O HACEK;;;01D2; 01D2;LATIN SMALL LETTER O WITH CARON;Ll;0;L;006F 030C;;;;N;LATIN SMALL LETTER O HACEK;;01D1;;01D1 01D3;LATIN CAPITAL LETTER U WITH CARON;Lu;0;L;0055 030C;;;;N;LATIN CAPITAL LETTER U HACEK;;;01D4; 01D4;LATIN SMALL LETTER U WITH CARON;Ll;0;L;0075 030C;;;;N;LATIN SMALL LETTER U HACEK;;01D3;;01D3 01D5;LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON;Lu;0;L;00DC 0304;;;;N;LATIN CAPITAL LETTER U DIAERESIS MACRON;;;01D6; 01D6;LATIN SMALL LETTER U WITH DIAERESIS AND MACRON;Ll;0;L;00FC 0304;;;;N;LATIN SMALL LETTER U DIAERESIS MACRON;;01D5;;01D5 01D7;LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE;Lu;0;L;00DC 0301;;;;N;LATIN CAPITAL LETTER U DIAERESIS ACUTE;;;01D8; 01D8;LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE;Ll;0;L;00FC 0301;;;;N;LATIN SMALL LETTER U DIAERESIS ACUTE;;01D7;;01D7 01D9;LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON;Lu;0;L;00DC 030C;;;;N;LATIN CAPITAL LETTER U DIAERESIS HACEK;;;01DA; 01DA;LATIN SMALL LETTER U WITH DIAERESIS AND CARON;Ll;0;L;00FC 030C;;;;N;LATIN SMALL LETTER U DIAERESIS HACEK;;01D9;;01D9 01DB;LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE;Lu;0;L;00DC 0300;;;;N;LATIN CAPITAL LETTER U DIAERESIS GRAVE;;;01DC; 01DC;LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE;Ll;0;L;00FC 0300;;;;N;LATIN SMALL LETTER U DIAERESIS GRAVE;;01DB;;01DB 01DD;LATIN SMALL LETTER TURNED E;Ll;0;L;;;;;N;;;018E;;018E 01DE;LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON;Lu;0;L;00C4 0304;;;;N;LATIN CAPITAL LETTER A DIAERESIS MACRON;;;01DF; 01DF;LATIN SMALL LETTER A WITH DIAERESIS AND MACRON;Ll;0;L;00E4 0304;;;;N;LATIN SMALL LETTER A DIAERESIS MACRON;;01DE;;01DE 01E0;LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON;Lu;0;L;0226 0304;;;;N;LATIN CAPITAL LETTER A DOT MACRON;;;01E1; 01E1;LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON;Ll;0;L;0227 0304;;;;N;LATIN SMALL LETTER A DOT MACRON;;01E0;;01E0 01E2;LATIN CAPITAL LETTER AE WITH MACRON;Lu;0;L;00C6 0304;;;;N;LATIN CAPITAL LETTER A E MACRON;;;01E3; 01E3;LATIN SMALL LETTER AE WITH MACRON;Ll;0;L;00E6 0304;;;;N;LATIN SMALL LETTER A E MACRON;;01E2;;01E2 01E4;LATIN CAPITAL LETTER G WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER G BAR;;;01E5; 01E5;LATIN SMALL LETTER G WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER G BAR;;01E4;;01E4 01E6;LATIN CAPITAL LETTER G WITH CARON;Lu;0;L;0047 030C;;;;N;LATIN CAPITAL LETTER G HACEK;;;01E7; 01E7;LATIN SMALL LETTER G WITH CARON;Ll;0;L;0067 030C;;;;N;LATIN SMALL LETTER G HACEK;;01E6;;01E6 01E8;LATIN CAPITAL LETTER K WITH CARON;Lu;0;L;004B 030C;;;;N;LATIN CAPITAL LETTER K HACEK;;;01E9; 01E9;LATIN SMALL LETTER K WITH CARON;Ll;0;L;006B 030C;;;;N;LATIN SMALL LETTER K HACEK;;01E8;;01E8 01EA;LATIN CAPITAL LETTER O WITH OGONEK;Lu;0;L;004F 0328;;;;N;LATIN CAPITAL LETTER O OGONEK;;;01EB; 01EB;LATIN SMALL LETTER O WITH OGONEK;Ll;0;L;006F 0328;;;;N;LATIN SMALL LETTER O OGONEK;;01EA;;01EA 01EC;LATIN CAPITAL LETTER O WITH OGONEK AND MACRON;Lu;0;L;01EA 0304;;;;N;LATIN CAPITAL LETTER O OGONEK MACRON;;;01ED; 01ED;LATIN SMALL LETTER O WITH OGONEK AND MACRON;Ll;0;L;01EB 0304;;;;N;LATIN SMALL LETTER O OGONEK MACRON;;01EC;;01EC 01EE;LATIN CAPITAL LETTER EZH WITH CARON;Lu;0;L;01B7 030C;;;;N;LATIN CAPITAL LETTER YOGH HACEK;;;01EF; 01EF;LATIN SMALL LETTER EZH WITH CARON;Ll;0;L;0292 030C;;;;N;LATIN SMALL LETTER YOGH HACEK;;01EE;;01EE 01F0;LATIN SMALL LETTER J WITH CARON;Ll;0;L;006A 030C;;;;N;LATIN SMALL LETTER J HACEK;;;; 01F1;LATIN CAPITAL LETTER DZ;Lu;0;L; 0044 005A;;;;N;;;;01F3;01F2 01F2;LATIN CAPITAL LETTER D WITH SMALL LETTER Z;Lt;0;L; 0044 007A;;;;N;;;01F1;01F3;01F2 01F3;LATIN SMALL LETTER DZ;Ll;0;L; 0064 007A;;;;N;;;01F1;;01F2 01F4;LATIN CAPITAL LETTER G WITH ACUTE;Lu;0;L;0047 0301;;;;N;;;;01F5; 01F5;LATIN SMALL LETTER G WITH ACUTE;Ll;0;L;0067 0301;;;;N;;;01F4;;01F4 01F6;LATIN CAPITAL LETTER HWAIR;Lu;0;L;;;;;N;;;;0195; 01F7;LATIN CAPITAL LETTER WYNN;Lu;0;L;;;;;N;;;;01BF; 01F8;LATIN CAPITAL LETTER N WITH GRAVE;Lu;0;L;004E 0300;;;;N;;;;01F9; 01F9;LATIN SMALL LETTER N WITH GRAVE;Ll;0;L;006E 0300;;;;N;;;01F8;;01F8 01FA;LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE;Lu;0;L;00C5 0301;;;;N;;;;01FB; 01FB;LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE;Ll;0;L;00E5 0301;;;;N;;;01FA;;01FA 01FC;LATIN CAPITAL LETTER AE WITH ACUTE;Lu;0;L;00C6 0301;;;;N;;;;01FD; 01FD;LATIN SMALL LETTER AE WITH ACUTE;Ll;0;L;00E6 0301;;;;N;;;01FC;;01FC 01FE;LATIN CAPITAL LETTER O WITH STROKE AND ACUTE;Lu;0;L;00D8 0301;;;;N;;;;01FF; 01FF;LATIN SMALL LETTER O WITH STROKE AND ACUTE;Ll;0;L;00F8 0301;;;;N;;;01FE;;01FE 0200;LATIN CAPITAL LETTER A WITH DOUBLE GRAVE;Lu;0;L;0041 030F;;;;N;;;;0201; 0201;LATIN SMALL LETTER A WITH DOUBLE GRAVE;Ll;0;L;0061 030F;;;;N;;;0200;;0200 0202;LATIN CAPITAL LETTER A WITH INVERTED BREVE;Lu;0;L;0041 0311;;;;N;;;;0203; 0203;LATIN SMALL LETTER A WITH INVERTED BREVE;Ll;0;L;0061 0311;;;;N;;;0202;;0202 0204;LATIN CAPITAL LETTER E WITH DOUBLE GRAVE;Lu;0;L;0045 030F;;;;N;;;;0205; 0205;LATIN SMALL LETTER E WITH DOUBLE GRAVE;Ll;0;L;0065 030F;;;;N;;;0204;;0204 0206;LATIN CAPITAL LETTER E WITH INVERTED BREVE;Lu;0;L;0045 0311;;;;N;;;;0207; 0207;LATIN SMALL LETTER E WITH INVERTED BREVE;Ll;0;L;0065 0311;;;;N;;;0206;;0206 0208;LATIN CAPITAL LETTER I WITH DOUBLE GRAVE;Lu;0;L;0049 030F;;;;N;;;;0209; 0209;LATIN SMALL LETTER I WITH DOUBLE GRAVE;Ll;0;L;0069 030F;;;;N;;;0208;;0208 020A;LATIN CAPITAL LETTER I WITH INVERTED BREVE;Lu;0;L;0049 0311;;;;N;;;;020B; 020B;LATIN SMALL LETTER I WITH INVERTED BREVE;Ll;0;L;0069 0311;;;;N;;;020A;;020A 020C;LATIN CAPITAL LETTER O WITH DOUBLE GRAVE;Lu;0;L;004F 030F;;;;N;;;;020D; 020D;LATIN SMALL LETTER O WITH DOUBLE GRAVE;Ll;0;L;006F 030F;;;;N;;;020C;;020C 020E;LATIN CAPITAL LETTER O WITH INVERTED BREVE;Lu;0;L;004F 0311;;;;N;;;;020F; 020F;LATIN SMALL LETTER O WITH INVERTED BREVE;Ll;0;L;006F 0311;;;;N;;;020E;;020E 0210;LATIN CAPITAL LETTER R WITH DOUBLE GRAVE;Lu;0;L;0052 030F;;;;N;;;;0211; 0211;LATIN SMALL LETTER R WITH DOUBLE GRAVE;Ll;0;L;0072 030F;;;;N;;;0210;;0210 0212;LATIN CAPITAL LETTER R WITH INVERTED BREVE;Lu;0;L;0052 0311;;;;N;;;;0213; 0213;LATIN SMALL LETTER R WITH INVERTED BREVE;Ll;0;L;0072 0311;;;;N;;;0212;;0212 0214;LATIN CAPITAL LETTER U WITH DOUBLE GRAVE;Lu;0;L;0055 030F;;;;N;;;;0215; 0215;LATIN SMALL LETTER U WITH DOUBLE GRAVE;Ll;0;L;0075 030F;;;;N;;;0214;;0214 0216;LATIN CAPITAL LETTER U WITH INVERTED BREVE;Lu;0;L;0055 0311;;;;N;;;;0217; 0217;LATIN SMALL LETTER U WITH INVERTED BREVE;Ll;0;L;0075 0311;;;;N;;;0216;;0216 0218;LATIN CAPITAL LETTER S WITH COMMA BELOW;Lu;0;L;0053 0326;;;;N;;;;0219; 0219;LATIN SMALL LETTER S WITH COMMA BELOW;Ll;0;L;0073 0326;;;;N;;;0218;;0218 021A;LATIN CAPITAL LETTER T WITH COMMA BELOW;Lu;0;L;0054 0326;;;;N;;;;021B; 021B;LATIN SMALL LETTER T WITH COMMA BELOW;Ll;0;L;0074 0326;;;;N;;;021A;;021A 021C;LATIN CAPITAL LETTER YOGH;Lu;0;L;;;;;N;;;;021D; 021D;LATIN SMALL LETTER YOGH;Ll;0;L;;;;;N;;;021C;;021C 021E;LATIN CAPITAL LETTER H WITH CARON;Lu;0;L;0048 030C;;;;N;;;;021F; 021F;LATIN SMALL LETTER H WITH CARON;Ll;0;L;0068 030C;;;;N;;;021E;;021E 0220;LATIN CAPITAL LETTER N WITH LONG RIGHT LEG;Lu;0;L;;;;;N;;;;019E; 0221;LATIN SMALL LETTER D WITH CURL;Ll;0;L;;;;;N;;;;; 0222;LATIN CAPITAL LETTER OU;Lu;0;L;;;;;N;;;;0223; 0223;LATIN SMALL LETTER OU;Ll;0;L;;;;;N;;;0222;;0222 0224;LATIN CAPITAL LETTER Z WITH HOOK;Lu;0;L;;;;;N;;;;0225; 0225;LATIN SMALL LETTER Z WITH HOOK;Ll;0;L;;;;;N;;;0224;;0224 0226;LATIN CAPITAL LETTER A WITH DOT ABOVE;Lu;0;L;0041 0307;;;;N;;;;0227; 0227;LATIN SMALL LETTER A WITH DOT ABOVE;Ll;0;L;0061 0307;;;;N;;;0226;;0226 0228;LATIN CAPITAL LETTER E WITH CEDILLA;Lu;0;L;0045 0327;;;;N;;;;0229; 0229;LATIN SMALL LETTER E WITH CEDILLA;Ll;0;L;0065 0327;;;;N;;;0228;;0228 022A;LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON;Lu;0;L;00D6 0304;;;;N;;;;022B; 022B;LATIN SMALL LETTER O WITH DIAERESIS AND MACRON;Ll;0;L;00F6 0304;;;;N;;;022A;;022A 022C;LATIN CAPITAL LETTER O WITH TILDE AND MACRON;Lu;0;L;00D5 0304;;;;N;;;;022D; 022D;LATIN SMALL LETTER O WITH TILDE AND MACRON;Ll;0;L;00F5 0304;;;;N;;;022C;;022C 022E;LATIN CAPITAL LETTER O WITH DOT ABOVE;Lu;0;L;004F 0307;;;;N;;;;022F; 022F;LATIN SMALL LETTER O WITH DOT ABOVE;Ll;0;L;006F 0307;;;;N;;;022E;;022E 0230;LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON;Lu;0;L;022E 0304;;;;N;;;;0231; 0231;LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON;Ll;0;L;022F 0304;;;;N;;;0230;;0230 0232;LATIN CAPITAL LETTER Y WITH MACRON;Lu;0;L;0059 0304;;;;N;;;;0233; 0233;LATIN SMALL LETTER Y WITH MACRON;Ll;0;L;0079 0304;;;;N;;;0232;;0232 0234;LATIN SMALL LETTER L WITH CURL;Ll;0;L;;;;;N;;;;; 0235;LATIN SMALL LETTER N WITH CURL;Ll;0;L;;;;;N;;;;; 0236;LATIN SMALL LETTER T WITH CURL;Ll;0;L;;;;;N;;;;; 0237;LATIN SMALL LETTER DOTLESS J;Ll;0;L;;;;;N;;;;; 0238;LATIN SMALL LETTER DB DIGRAPH;Ll;0;L;;;;;N;;;;; 0239;LATIN SMALL LETTER QP DIGRAPH;Ll;0;L;;;;;N;;;;; 023A;LATIN CAPITAL LETTER A WITH STROKE;Lu;0;L;;;;;N;;;;2C65; 023B;LATIN CAPITAL LETTER C WITH STROKE;Lu;0;L;;;;;N;;;;023C; 023C;LATIN SMALL LETTER C WITH STROKE;Ll;0;L;;;;;N;;;023B;;023B 023D;LATIN CAPITAL LETTER L WITH BAR;Lu;0;L;;;;;N;;;;019A; 023E;LATIN CAPITAL LETTER T WITH DIAGONAL STROKE;Lu;0;L;;;;;N;;;;2C66; 023F;LATIN SMALL LETTER S WITH SWASH TAIL;Ll;0;L;;;;;N;;;2C7E;;2C7E 0240;LATIN SMALL LETTER Z WITH SWASH TAIL;Ll;0;L;;;;;N;;;2C7F;;2C7F 0241;LATIN CAPITAL LETTER GLOTTAL STOP;Lu;0;L;;;;;N;;;;0242; 0242;LATIN SMALL LETTER GLOTTAL STOP;Ll;0;L;;;;;N;;;0241;;0241 0243;LATIN CAPITAL LETTER B WITH STROKE;Lu;0;L;;;;;N;;;;0180; 0244;LATIN CAPITAL LETTER U BAR;Lu;0;L;;;;;N;;;;0289; 0245;LATIN CAPITAL LETTER TURNED V;Lu;0;L;;;;;N;;;;028C; 0246;LATIN CAPITAL LETTER E WITH STROKE;Lu;0;L;;;;;N;;;;0247; 0247;LATIN SMALL LETTER E WITH STROKE;Ll;0;L;;;;;N;;;0246;;0246 0248;LATIN CAPITAL LETTER J WITH STROKE;Lu;0;L;;;;;N;;;;0249; 0249;LATIN SMALL LETTER J WITH STROKE;Ll;0;L;;;;;N;;;0248;;0248 024A;LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL;Lu;0;L;;;;;N;;;;024B; 024B;LATIN SMALL LETTER Q WITH HOOK TAIL;Ll;0;L;;;;;N;;;024A;;024A 024C;LATIN CAPITAL LETTER R WITH STROKE;Lu;0;L;;;;;N;;;;024D; 024D;LATIN SMALL LETTER R WITH STROKE;Ll;0;L;;;;;N;;;024C;;024C 024E;LATIN CAPITAL LETTER Y WITH STROKE;Lu;0;L;;;;;N;;;;024F; 024F;LATIN SMALL LETTER Y WITH STROKE;Ll;0;L;;;;;N;;;024E;;024E 0250;LATIN SMALL LETTER TURNED A;Ll;0;L;;;;;N;;;2C6F;;2C6F 0251;LATIN SMALL LETTER ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT A;;2C6D;;2C6D 0252;LATIN SMALL LETTER TURNED ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER TURNED SCRIPT A;;2C70;;2C70 0253;LATIN SMALL LETTER B WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER B HOOK;;0181;;0181 0254;LATIN SMALL LETTER OPEN O;Ll;0;L;;;;;N;;;0186;;0186 0255;LATIN SMALL LETTER C WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER C CURL;;;; 0256;LATIN SMALL LETTER D WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER D RETROFLEX HOOK;;0189;;0189 0257;LATIN SMALL LETTER D WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER D HOOK;;018A;;018A 0258;LATIN SMALL LETTER REVERSED E;Ll;0;L;;;;;N;;;;; 0259;LATIN SMALL LETTER SCHWA;Ll;0;L;;;;;N;;;018F;;018F 025A;LATIN SMALL LETTER SCHWA WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCHWA HOOK;;;; 025B;LATIN SMALL LETTER OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER EPSILON;;0190;;0190 025C;LATIN SMALL LETTER REVERSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED EPSILON;;A7AB;;A7AB 025D;LATIN SMALL LETTER REVERSED OPEN E WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED EPSILON HOOK;;;; 025E;LATIN SMALL LETTER CLOSED REVERSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER CLOSED REVERSED EPSILON;;;; 025F;LATIN SMALL LETTER DOTLESS J WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER DOTLESS J BAR;;;; 0260;LATIN SMALL LETTER G WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER G HOOK;;0193;;0193 0261;LATIN SMALL LETTER SCRIPT G;Ll;0;L;;;;;N;;;A7AC;;A7AC 0262;LATIN LETTER SMALL CAPITAL G;Ll;0;L;;;;;N;;;;; 0263;LATIN SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;0194;;0194 0264;LATIN SMALL LETTER RAMS HORN;Ll;0;L;;;;;N;LATIN SMALL LETTER BABY GAMMA;;;; 0265;LATIN SMALL LETTER TURNED H;Ll;0;L;;;;;N;;;A78D;;A78D 0266;LATIN SMALL LETTER H WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER H HOOK;;A7AA;;A7AA 0267;LATIN SMALL LETTER HENG WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER HENG HOOK;;;; 0268;LATIN SMALL LETTER I WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED I;;0197;;0197 0269;LATIN SMALL LETTER IOTA;Ll;0;L;;;;;N;;;0196;;0196 026A;LATIN LETTER SMALL CAPITAL I;Ll;0;L;;;;;N;;;A7AE;;A7AE 026B;LATIN SMALL LETTER L WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;2C62;;2C62 026C;LATIN SMALL LETTER L WITH BELT;Ll;0;L;;;;;N;LATIN SMALL LETTER L BELT;;A7AD;;A7AD 026D;LATIN SMALL LETTER L WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER L RETROFLEX HOOK;;;; 026E;LATIN SMALL LETTER LEZH;Ll;0;L;;;;;N;LATIN SMALL LETTER L YOGH;;;; 026F;LATIN SMALL LETTER TURNED M;Ll;0;L;;;;;N;;;019C;;019C 0270;LATIN SMALL LETTER TURNED M WITH LONG LEG;Ll;0;L;;;;;N;;;;; 0271;LATIN SMALL LETTER M WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER M HOOK;;2C6E;;2C6E 0272;LATIN SMALL LETTER N WITH LEFT HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER N HOOK;;019D;;019D 0273;LATIN SMALL LETTER N WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER N RETROFLEX HOOK;;;; 0274;LATIN LETTER SMALL CAPITAL N;Ll;0;L;;;;;N;;;;; 0275;LATIN SMALL LETTER BARRED O;Ll;0;L;;;;;N;;;019F;;019F 0276;LATIN LETTER SMALL CAPITAL OE;Ll;0;L;;;;;N;LATIN LETTER SMALL CAPITAL O E;;;; 0277;LATIN SMALL LETTER CLOSED OMEGA;Ll;0;L;;;;;N;;;;; 0278;LATIN SMALL LETTER PHI;Ll;0;L;;;;;N;;;;; 0279;LATIN SMALL LETTER TURNED R;Ll;0;L;;;;;N;;;;; 027A;LATIN SMALL LETTER TURNED R WITH LONG LEG;Ll;0;L;;;;;N;;;;; 027B;LATIN SMALL LETTER TURNED R WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER TURNED R HOOK;;;; 027C;LATIN SMALL LETTER R WITH LONG LEG;Ll;0;L;;;;;N;;;;; 027D;LATIN SMALL LETTER R WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER R HOOK;;2C64;;2C64 027E;LATIN SMALL LETTER R WITH FISHHOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER FISHHOOK R;;;; 027F;LATIN SMALL LETTER REVERSED R WITH FISHHOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED FISHHOOK R;;;; 0280;LATIN LETTER SMALL CAPITAL R;Ll;0;L;;;;;N;;;01A6;;01A6 0281;LATIN LETTER SMALL CAPITAL INVERTED R;Ll;0;L;;;;;N;;;;; 0282;LATIN SMALL LETTER S WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER S HOOK;;A7C5;;A7C5 0283;LATIN SMALL LETTER ESH;Ll;0;L;;;;;N;;;01A9;;01A9 0284;LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER DOTLESS J BAR HOOK;;;; 0285;LATIN SMALL LETTER SQUAT REVERSED ESH;Ll;0;L;;;;;N;;;;; 0286;LATIN SMALL LETTER ESH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER ESH CURL;;;; 0287;LATIN SMALL LETTER TURNED T;Ll;0;L;;;;;N;;;A7B1;;A7B1 0288;LATIN SMALL LETTER T WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T RETROFLEX HOOK;;01AE;;01AE 0289;LATIN SMALL LETTER U BAR;Ll;0;L;;;;;N;;;0244;;0244 028A;LATIN SMALL LETTER UPSILON;Ll;0;L;;;;;N;;;01B1;;01B1 028B;LATIN SMALL LETTER V WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT V;;01B2;;01B2 028C;LATIN SMALL LETTER TURNED V;Ll;0;L;;;;;N;;;0245;;0245 028D;LATIN SMALL LETTER TURNED W;Ll;0;L;;;;;N;;;;; 028E;LATIN SMALL LETTER TURNED Y;Ll;0;L;;;;;N;;;;; 028F;LATIN LETTER SMALL CAPITAL Y;Ll;0;L;;;;;N;;;;; 0290;LATIN SMALL LETTER Z WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Z RETROFLEX HOOK;;;; 0291;LATIN SMALL LETTER Z WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER Z CURL;;;; 0292;LATIN SMALL LETTER EZH;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH;;01B7;;01B7 0293;LATIN SMALL LETTER EZH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH CURL;;;; 0294;LATIN LETTER GLOTTAL STOP;Lo;0;L;;;;;N;;;;; 0295;LATIN LETTER PHARYNGEAL VOICED FRICATIVE;Ll;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP;;;; 0296;LATIN LETTER INVERTED GLOTTAL STOP;Ll;0;L;;;;;N;;;;; 0297;LATIN LETTER STRETCHED C;Ll;0;L;;;;;N;;;;; 0298;LATIN LETTER BILABIAL CLICK;Ll;0;L;;;;;N;LATIN LETTER BULLSEYE;;;; 0299;LATIN LETTER SMALL CAPITAL B;Ll;0;L;;;;;N;;;;; 029A;LATIN SMALL LETTER CLOSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER CLOSED EPSILON;;;; 029B;LATIN LETTER SMALL CAPITAL G WITH HOOK;Ll;0;L;;;;;N;LATIN LETTER SMALL CAPITAL G HOOK;;;; 029C;LATIN LETTER SMALL CAPITAL H;Ll;0;L;;;;;N;;;;; 029D;LATIN SMALL LETTER J WITH CROSSED-TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER CROSSED-TAIL J;;A7B2;;A7B2 029E;LATIN SMALL LETTER TURNED K;Ll;0;L;;;;;N;;;A7B0;;A7B0 029F;LATIN LETTER SMALL CAPITAL L;Ll;0;L;;;;;N;;;;; 02A0;LATIN SMALL LETTER Q WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Q HOOK;;;; 02A1;LATIN LETTER GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER GLOTTAL STOP BAR;;;; 02A2;LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP BAR;;;; 02A3;LATIN SMALL LETTER DZ DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER D Z;;;; 02A4;LATIN SMALL LETTER DEZH DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER D YOGH;;;; 02A5;LATIN SMALL LETTER DZ DIGRAPH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER D Z CURL;;;; 02A6;LATIN SMALL LETTER TS DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER T S;;;; 02A7;LATIN SMALL LETTER TESH DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER T ESH;;;; 02A8;LATIN SMALL LETTER TC DIGRAPH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER T C CURL;;;; 02A9;LATIN SMALL LETTER FENG DIGRAPH;Ll;0;L;;;;;N;;;;; 02AA;LATIN SMALL LETTER LS DIGRAPH;Ll;0;L;;;;;N;;;;; 02AB;LATIN SMALL LETTER LZ DIGRAPH;Ll;0;L;;;;;N;;;;; 02AC;LATIN LETTER BILABIAL PERCUSSIVE;Ll;0;L;;;;;N;;;;; 02AD;LATIN LETTER BIDENTAL PERCUSSIVE;Ll;0;L;;;;;N;;;;; 02AE;LATIN SMALL LETTER TURNED H WITH FISHHOOK;Ll;0;L;;;;;N;;;;; 02AF;LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL;Ll;0;L;;;;;N;;;;; 02B0;MODIFIER LETTER SMALL H;Lm;0;L; 0068;;;;N;;;;; 02B1;MODIFIER LETTER SMALL H WITH HOOK;Lm;0;L; 0266;;;;N;MODIFIER LETTER SMALL H HOOK;;;; 02B2;MODIFIER LETTER SMALL J;Lm;0;L; 006A;;;;N;;;;; 02B3;MODIFIER LETTER SMALL R;Lm;0;L; 0072;;;;N;;;;; 02B4;MODIFIER LETTER SMALL TURNED R;Lm;0;L; 0279;;;;N;;;;; 02B5;MODIFIER LETTER SMALL TURNED R WITH HOOK;Lm;0;L; 027B;;;;N;MODIFIER LETTER SMALL TURNED R HOOK;;;; 02B6;MODIFIER LETTER SMALL CAPITAL INVERTED R;Lm;0;L; 0281;;;;N;;;;; 02B7;MODIFIER LETTER SMALL W;Lm;0;L; 0077;;;;N;;;;; 02B8;MODIFIER LETTER SMALL Y;Lm;0;L; 0079;;;;N;;;;; 02B9;MODIFIER LETTER PRIME;Lm;0;ON;;;;;N;;;;; 02BA;MODIFIER LETTER DOUBLE PRIME;Lm;0;ON;;;;;N;;;;; 02BB;MODIFIER LETTER TURNED COMMA;Lm;0;L;;;;;N;;;;; 02BC;MODIFIER LETTER APOSTROPHE;Lm;0;L;;;;;N;;;;; 02BD;MODIFIER LETTER REVERSED COMMA;Lm;0;L;;;;;N;;;;; 02BE;MODIFIER LETTER RIGHT HALF RING;Lm;0;L;;;;;N;;;;; 02BF;MODIFIER LETTER LEFT HALF RING;Lm;0;L;;;;;N;;;;; 02C0;MODIFIER LETTER GLOTTAL STOP;Lm;0;L;;;;;N;;;;; 02C1;MODIFIER LETTER REVERSED GLOTTAL STOP;Lm;0;L;;;;;N;;;;; 02C2;MODIFIER LETTER LEFT ARROWHEAD;Sk;0;ON;;;;;N;;;;; 02C3;MODIFIER LETTER RIGHT ARROWHEAD;Sk;0;ON;;;;;N;;;;; 02C4;MODIFIER LETTER UP ARROWHEAD;Sk;0;ON;;;;;N;;;;; 02C5;MODIFIER LETTER DOWN ARROWHEAD;Sk;0;ON;;;;;N;;;;; 02C6;MODIFIER LETTER CIRCUMFLEX ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER CIRCUMFLEX;;;; 02C7;CARON;Lm;0;ON;;;;;N;MODIFIER LETTER HACEK;;;; 02C8;MODIFIER LETTER VERTICAL LINE;Lm;0;ON;;;;;N;;;;; 02C9;MODIFIER LETTER MACRON;Lm;0;ON;;;;;N;;;;; 02CA;MODIFIER LETTER ACUTE ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER ACUTE;;;; 02CB;MODIFIER LETTER GRAVE ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER GRAVE;;;; 02CC;MODIFIER LETTER LOW VERTICAL LINE;Lm;0;ON;;;;;N;;;;; 02CD;MODIFIER LETTER LOW MACRON;Lm;0;ON;;;;;N;;;;; 02CE;MODIFIER LETTER LOW GRAVE ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER LOW GRAVE;;;; 02CF;MODIFIER LETTER LOW ACUTE ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER LOW ACUTE;;;; 02D0;MODIFIER LETTER TRIANGULAR COLON;Lm;0;L;;;;;N;;;;; 02D1;MODIFIER LETTER HALF TRIANGULAR COLON;Lm;0;L;;;;;N;;;;; 02D2;MODIFIER LETTER CENTRED RIGHT HALF RING;Sk;0;ON;;;;;N;MODIFIER LETTER CENTERED RIGHT HALF RING;;;; 02D3;MODIFIER LETTER CENTRED LEFT HALF RING;Sk;0;ON;;;;;N;MODIFIER LETTER CENTERED LEFT HALF RING;;;; 02D4;MODIFIER LETTER UP TACK;Sk;0;ON;;;;;N;;;;; 02D5;MODIFIER LETTER DOWN TACK;Sk;0;ON;;;;;N;;;;; 02D6;MODIFIER LETTER PLUS SIGN;Sk;0;ON;;;;;N;;;;; 02D7;MODIFIER LETTER MINUS SIGN;Sk;0;ON;;;;;N;;;;; 02D8;BREVE;Sk;0;ON; 0020 0306;;;;N;SPACING BREVE;;;; 02D9;DOT ABOVE;Sk;0;ON; 0020 0307;;;;N;SPACING DOT ABOVE;;;; 02DA;RING ABOVE;Sk;0;ON; 0020 030A;;;;N;SPACING RING ABOVE;;;; 02DB;OGONEK;Sk;0;ON; 0020 0328;;;;N;SPACING OGONEK;;;; 02DC;SMALL TILDE;Sk;0;ON; 0020 0303;;;;N;SPACING TILDE;;;; 02DD;DOUBLE ACUTE ACCENT;Sk;0;ON; 0020 030B;;;;N;SPACING DOUBLE ACUTE;;;; 02DE;MODIFIER LETTER RHOTIC HOOK;Sk;0;ON;;;;;N;;;;; 02DF;MODIFIER LETTER CROSS ACCENT;Sk;0;ON;;;;;N;;;;; 02E0;MODIFIER LETTER SMALL GAMMA;Lm;0;L; 0263;;;;N;;;;; 02E1;MODIFIER LETTER SMALL L;Lm;0;L; 006C;;;;N;;;;; 02E2;MODIFIER LETTER SMALL S;Lm;0;L; 0073;;;;N;;;;; 02E3;MODIFIER LETTER SMALL X;Lm;0;L; 0078;;;;N;;;;; 02E4;MODIFIER LETTER SMALL REVERSED GLOTTAL STOP;Lm;0;L; 0295;;;;N;;;;; 02E5;MODIFIER LETTER EXTRA-HIGH TONE BAR;Sk;0;ON;;;;;N;;;;; 02E6;MODIFIER LETTER HIGH TONE BAR;Sk;0;ON;;;;;N;;;;; 02E7;MODIFIER LETTER MID TONE BAR;Sk;0;ON;;;;;N;;;;; 02E8;MODIFIER LETTER LOW TONE BAR;Sk;0;ON;;;;;N;;;;; 02E9;MODIFIER LETTER EXTRA-LOW TONE BAR;Sk;0;ON;;;;;N;;;;; 02EA;MODIFIER LETTER YIN DEPARTING TONE MARK;Sk;0;ON;;;;;N;;;;; 02EB;MODIFIER LETTER YANG DEPARTING TONE MARK;Sk;0;ON;;;;;N;;;;; 02EC;MODIFIER LETTER VOICING;Lm;0;ON;;;;;N;;;;; 02ED;MODIFIER LETTER UNASPIRATED;Sk;0;ON;;;;;N;;;;; 02EE;MODIFIER LETTER DOUBLE APOSTROPHE;Lm;0;L;;;;;N;;;;; 02EF;MODIFIER LETTER LOW DOWN ARROWHEAD;Sk;0;ON;;;;;N;;;;; 02F0;MODIFIER LETTER LOW UP ARROWHEAD;Sk;0;ON;;;;;N;;;;; 02F1;MODIFIER LETTER LOW LEFT ARROWHEAD;Sk;0;ON;;;;;N;;;;; 02F2;MODIFIER LETTER LOW RIGHT ARROWHEAD;Sk;0;ON;;;;;N;;;;; 02F3;MODIFIER LETTER LOW RING;Sk;0;ON;;;;;N;;;;; 02F4;MODIFIER LETTER MIDDLE GRAVE ACCENT;Sk;0;ON;;;;;N;;;;; 02F5;MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT;Sk;0;ON;;;;;N;;;;; 02F6;MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT;Sk;0;ON;;;;;N;;;;; 02F7;MODIFIER LETTER LOW TILDE;Sk;0;ON;;;;;N;;;;; 02F8;MODIFIER LETTER RAISED COLON;Sk;0;ON;;;;;N;;;;; 02F9;MODIFIER LETTER BEGIN HIGH TONE;Sk;0;ON;;;;;N;;;;; 02FA;MODIFIER LETTER END HIGH TONE;Sk;0;ON;;;;;N;;;;; 02FB;MODIFIER LETTER BEGIN LOW TONE;Sk;0;ON;;;;;N;;;;; 02FC;MODIFIER LETTER END LOW TONE;Sk;0;ON;;;;;N;;;;; 02FD;MODIFIER LETTER SHELF;Sk;0;ON;;;;;N;;;;; 02FE;MODIFIER LETTER OPEN SHELF;Sk;0;ON;;;;;N;;;;; 02FF;MODIFIER LETTER LOW LEFT ARROW;Sk;0;ON;;;;;N;;;;; 0300;COMBINING GRAVE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING GRAVE;;;; 0301;COMBINING ACUTE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING ACUTE;;;; 0302;COMBINING CIRCUMFLEX ACCENT;Mn;230;NSM;;;;;N;NON-SPACING CIRCUMFLEX;;;; 0303;COMBINING TILDE;Mn;230;NSM;;;;;N;NON-SPACING TILDE;;;; 0304;COMBINING MACRON;Mn;230;NSM;;;;;N;NON-SPACING MACRON;;;; 0305;COMBINING OVERLINE;Mn;230;NSM;;;;;N;NON-SPACING OVERSCORE;;;; 0306;COMBINING BREVE;Mn;230;NSM;;;;;N;NON-SPACING BREVE;;;; 0307;COMBINING DOT ABOVE;Mn;230;NSM;;;;;N;NON-SPACING DOT ABOVE;;;; 0308;COMBINING DIAERESIS;Mn;230;NSM;;;;;N;NON-SPACING DIAERESIS;;;; 0309;COMBINING HOOK ABOVE;Mn;230;NSM;;;;;N;NON-SPACING HOOK ABOVE;;;; 030A;COMBINING RING ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RING ABOVE;;;; 030B;COMBINING DOUBLE ACUTE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE ACUTE;;;; 030C;COMBINING CARON;Mn;230;NSM;;;;;N;NON-SPACING HACEK;;;; 030D;COMBINING VERTICAL LINE ABOVE;Mn;230;NSM;;;;;N;NON-SPACING VERTICAL LINE ABOVE;;;; 030E;COMBINING DOUBLE VERTICAL LINE ABOVE;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE VERTICAL LINE ABOVE;;;; 030F;COMBINING DOUBLE GRAVE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE GRAVE;;;; 0310;COMBINING CANDRABINDU;Mn;230;NSM;;;;;N;NON-SPACING CANDRABINDU;;;; 0311;COMBINING INVERTED BREVE;Mn;230;NSM;;;;;N;NON-SPACING INVERTED BREVE;;;; 0312;COMBINING TURNED COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING TURNED COMMA ABOVE;;;; 0313;COMBINING COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING COMMA ABOVE;;;; 0314;COMBINING REVERSED COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING REVERSED COMMA ABOVE;;;; 0315;COMBINING COMMA ABOVE RIGHT;Mn;232;NSM;;;;;N;NON-SPACING COMMA ABOVE RIGHT;;;; 0316;COMBINING GRAVE ACCENT BELOW;Mn;220;NSM;;;;;N;NON-SPACING GRAVE BELOW;;;; 0317;COMBINING ACUTE ACCENT BELOW;Mn;220;NSM;;;;;N;NON-SPACING ACUTE BELOW;;;; 0318;COMBINING LEFT TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING LEFT TACK BELOW;;;; 0319;COMBINING RIGHT TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING RIGHT TACK BELOW;;;; 031A;COMBINING LEFT ANGLE ABOVE;Mn;232;NSM;;;;;N;NON-SPACING LEFT ANGLE ABOVE;;;; 031B;COMBINING HORN;Mn;216;NSM;;;;;N;NON-SPACING HORN;;;; 031C;COMBINING LEFT HALF RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING LEFT HALF RING BELOW;;;; 031D;COMBINING UP TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING UP TACK BELOW;;;; 031E;COMBINING DOWN TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOWN TACK BELOW;;;; 031F;COMBINING PLUS SIGN BELOW;Mn;220;NSM;;;;;N;NON-SPACING PLUS SIGN BELOW;;;; 0320;COMBINING MINUS SIGN BELOW;Mn;220;NSM;;;;;N;NON-SPACING MINUS SIGN BELOW;;;; 0321;COMBINING PALATALIZED HOOK BELOW;Mn;202;NSM;;;;;N;NON-SPACING PALATALIZED HOOK BELOW;;;; 0322;COMBINING RETROFLEX HOOK BELOW;Mn;202;NSM;;;;;N;NON-SPACING RETROFLEX HOOK BELOW;;;; 0323;COMBINING DOT BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOT BELOW;;;; 0324;COMBINING DIAERESIS BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOUBLE DOT BELOW;;;; 0325;COMBINING RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING RING BELOW;;;; 0326;COMBINING COMMA BELOW;Mn;220;NSM;;;;;N;NON-SPACING COMMA BELOW;;;; 0327;COMBINING CEDILLA;Mn;202;NSM;;;;;N;NON-SPACING CEDILLA;;;; 0328;COMBINING OGONEK;Mn;202;NSM;;;;;N;NON-SPACING OGONEK;;;; 0329;COMBINING VERTICAL LINE BELOW;Mn;220;NSM;;;;;N;NON-SPACING VERTICAL LINE BELOW;;;; 032A;COMBINING BRIDGE BELOW;Mn;220;NSM;;;;;N;NON-SPACING BRIDGE BELOW;;;; 032B;COMBINING INVERTED DOUBLE ARCH BELOW;Mn;220;NSM;;;;;N;NON-SPACING INVERTED DOUBLE ARCH BELOW;;;; 032C;COMBINING CARON BELOW;Mn;220;NSM;;;;;N;NON-SPACING HACEK BELOW;;;; 032D;COMBINING CIRCUMFLEX ACCENT BELOW;Mn;220;NSM;;;;;N;NON-SPACING CIRCUMFLEX BELOW;;;; 032E;COMBINING BREVE BELOW;Mn;220;NSM;;;;;N;NON-SPACING BREVE BELOW;;;; 032F;COMBINING INVERTED BREVE BELOW;Mn;220;NSM;;;;;N;NON-SPACING INVERTED BREVE BELOW;;;; 0330;COMBINING TILDE BELOW;Mn;220;NSM;;;;;N;NON-SPACING TILDE BELOW;;;; 0331;COMBINING MACRON BELOW;Mn;220;NSM;;;;;N;NON-SPACING MACRON BELOW;;;; 0332;COMBINING LOW LINE;Mn;220;NSM;;;;;N;NON-SPACING UNDERSCORE;;;; 0333;COMBINING DOUBLE LOW LINE;Mn;220;NSM;;;;;N;NON-SPACING DOUBLE UNDERSCORE;;;; 0334;COMBINING TILDE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING TILDE OVERLAY;;;; 0335;COMBINING SHORT STROKE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING SHORT BAR OVERLAY;;;; 0336;COMBINING LONG STROKE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG BAR OVERLAY;;;; 0337;COMBINING SHORT SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING SHORT SLASH OVERLAY;;;; 0338;COMBINING LONG SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG SLASH OVERLAY;;;; 0339;COMBINING RIGHT HALF RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING RIGHT HALF RING BELOW;;;; 033A;COMBINING INVERTED BRIDGE BELOW;Mn;220;NSM;;;;;N;NON-SPACING INVERTED BRIDGE BELOW;;;; 033B;COMBINING SQUARE BELOW;Mn;220;NSM;;;;;N;NON-SPACING SQUARE BELOW;;;; 033C;COMBINING SEAGULL BELOW;Mn;220;NSM;;;;;N;NON-SPACING SEAGULL BELOW;;;; 033D;COMBINING X ABOVE;Mn;230;NSM;;;;;N;NON-SPACING X ABOVE;;;; 033E;COMBINING VERTICAL TILDE;Mn;230;NSM;;;;;N;NON-SPACING VERTICAL TILDE;;;; 033F;COMBINING DOUBLE OVERLINE;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE OVERSCORE;;;; 0340;COMBINING GRAVE TONE MARK;Mn;230;NSM;0300;;;;N;NON-SPACING GRAVE TONE MARK;;;; 0341;COMBINING ACUTE TONE MARK;Mn;230;NSM;0301;;;;N;NON-SPACING ACUTE TONE MARK;;;; 0342;COMBINING GREEK PERISPOMENI;Mn;230;NSM;;;;;N;;;;; 0343;COMBINING GREEK KORONIS;Mn;230;NSM;0313;;;;N;;;;; 0344;COMBINING GREEK DIALYTIKA TONOS;Mn;230;NSM;0308 0301;;;;N;GREEK NON-SPACING DIAERESIS TONOS;;;; 0345;COMBINING GREEK YPOGEGRAMMENI;Mn;240;NSM;;;;;N;GREEK NON-SPACING IOTA BELOW;;0399;;0399 0346;COMBINING BRIDGE ABOVE;Mn;230;NSM;;;;;N;;;;; 0347;COMBINING EQUALS SIGN BELOW;Mn;220;NSM;;;;;N;;;;; 0348;COMBINING DOUBLE VERTICAL LINE BELOW;Mn;220;NSM;;;;;N;;;;; 0349;COMBINING LEFT ANGLE BELOW;Mn;220;NSM;;;;;N;;;;; 034A;COMBINING NOT TILDE ABOVE;Mn;230;NSM;;;;;N;;;;; 034B;COMBINING HOMOTHETIC ABOVE;Mn;230;NSM;;;;;N;;;;; 034C;COMBINING ALMOST EQUAL TO ABOVE;Mn;230;NSM;;;;;N;;;;; 034D;COMBINING LEFT RIGHT ARROW BELOW;Mn;220;NSM;;;;;N;;;;; 034E;COMBINING UPWARDS ARROW BELOW;Mn;220;NSM;;;;;N;;;;; 034F;COMBINING GRAPHEME JOINER;Mn;0;NSM;;;;;N;;;;; 0350;COMBINING RIGHT ARROWHEAD ABOVE;Mn;230;NSM;;;;;N;;;;; 0351;COMBINING LEFT HALF RING ABOVE;Mn;230;NSM;;;;;N;;;;; 0352;COMBINING FERMATA;Mn;230;NSM;;;;;N;;;;; 0353;COMBINING X BELOW;Mn;220;NSM;;;;;N;;;;; 0354;COMBINING LEFT ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;; 0355;COMBINING RIGHT ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;; 0356;COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;; 0357;COMBINING RIGHT HALF RING ABOVE;Mn;230;NSM;;;;;N;;;;; 0358;COMBINING DOT ABOVE RIGHT;Mn;232;NSM;;;;;N;;;;; 0359;COMBINING ASTERISK BELOW;Mn;220;NSM;;;;;N;;;;; 035A;COMBINING DOUBLE RING BELOW;Mn;220;NSM;;;;;N;;;;; 035B;COMBINING ZIGZAG ABOVE;Mn;230;NSM;;;;;N;;;;; 035C;COMBINING DOUBLE BREVE BELOW;Mn;233;NSM;;;;;N;;;;; 035D;COMBINING DOUBLE BREVE;Mn;234;NSM;;;;;N;;;;; 035E;COMBINING DOUBLE MACRON;Mn;234;NSM;;;;;N;;;;; 035F;COMBINING DOUBLE MACRON BELOW;Mn;233;NSM;;;;;N;;;;; 0360;COMBINING DOUBLE TILDE;Mn;234;NSM;;;;;N;;;;; 0361;COMBINING DOUBLE INVERTED BREVE;Mn;234;NSM;;;;;N;;;;; 0362;COMBINING DOUBLE RIGHTWARDS ARROW BELOW;Mn;233;NSM;;;;;N;;;;; 0363;COMBINING LATIN SMALL LETTER A;Mn;230;NSM;;;;;N;;;;; 0364;COMBINING LATIN SMALL LETTER E;Mn;230;NSM;;;;;N;;;;; 0365;COMBINING LATIN SMALL LETTER I;Mn;230;NSM;;;;;N;;;;; 0366;COMBINING LATIN SMALL LETTER O;Mn;230;NSM;;;;;N;;;;; 0367;COMBINING LATIN SMALL LETTER U;Mn;230;NSM;;;;;N;;;;; 0368;COMBINING LATIN SMALL LETTER C;Mn;230;NSM;;;;;N;;;;; 0369;COMBINING LATIN SMALL LETTER D;Mn;230;NSM;;;;;N;;;;; 036A;COMBINING LATIN SMALL LETTER H;Mn;230;NSM;;;;;N;;;;; 036B;COMBINING LATIN SMALL LETTER M;Mn;230;NSM;;;;;N;;;;; 036C;COMBINING LATIN SMALL LETTER R;Mn;230;NSM;;;;;N;;;;; 036D;COMBINING LATIN SMALL LETTER T;Mn;230;NSM;;;;;N;;;;; 036E;COMBINING LATIN SMALL LETTER V;Mn;230;NSM;;;;;N;;;;; 036F;COMBINING LATIN SMALL LETTER X;Mn;230;NSM;;;;;N;;;;; 0370;GREEK CAPITAL LETTER HETA;Lu;0;L;;;;;N;;;;0371; 0371;GREEK SMALL LETTER HETA;Ll;0;L;;;;;N;;;0370;;0370 0372;GREEK CAPITAL LETTER ARCHAIC SAMPI;Lu;0;L;;;;;N;;;;0373; 0373;GREEK SMALL LETTER ARCHAIC SAMPI;Ll;0;L;;;;;N;;;0372;;0372 0374;GREEK NUMERAL SIGN;Lm;0;ON;02B9;;;;N;GREEK UPPER NUMERAL SIGN;;;; 0375;GREEK LOWER NUMERAL SIGN;Sk;0;ON;;;;;N;;;;; 0376;GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA;Lu;0;L;;;;;N;;;;0377; 0377;GREEK SMALL LETTER PAMPHYLIAN DIGAMMA;Ll;0;L;;;;;N;;;0376;;0376 037A;GREEK YPOGEGRAMMENI;Lm;0;L; 0020 0345;;;;N;GREEK SPACING IOTA BELOW;;;; 037B;GREEK SMALL REVERSED LUNATE SIGMA SYMBOL;Ll;0;L;;;;;N;;;03FD;;03FD 037C;GREEK SMALL DOTTED LUNATE SIGMA SYMBOL;Ll;0;L;;;;;N;;;03FE;;03FE 037D;GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL;Ll;0;L;;;;;N;;;03FF;;03FF 037E;GREEK QUESTION MARK;Po;0;ON;003B;;;;N;;;;; 037F;GREEK CAPITAL LETTER YOT;Lu;0;L;;;;;N;;;;03F3; 0384;GREEK TONOS;Sk;0;ON; 0020 0301;;;;N;GREEK SPACING TONOS;;;; 0385;GREEK DIALYTIKA TONOS;Sk;0;ON;00A8 0301;;;;N;GREEK SPACING DIAERESIS TONOS;;;; 0386;GREEK CAPITAL LETTER ALPHA WITH TONOS;Lu;0;L;0391 0301;;;;N;GREEK CAPITAL LETTER ALPHA TONOS;;;03AC; 0387;GREEK ANO TELEIA;Po;0;ON;00B7;;;;N;;;;; 0388;GREEK CAPITAL LETTER EPSILON WITH TONOS;Lu;0;L;0395 0301;;;;N;GREEK CAPITAL LETTER EPSILON TONOS;;;03AD; 0389;GREEK CAPITAL LETTER ETA WITH TONOS;Lu;0;L;0397 0301;;;;N;GREEK CAPITAL LETTER ETA TONOS;;;03AE; 038A;GREEK CAPITAL LETTER IOTA WITH TONOS;Lu;0;L;0399 0301;;;;N;GREEK CAPITAL LETTER IOTA TONOS;;;03AF; 038C;GREEK CAPITAL LETTER OMICRON WITH TONOS;Lu;0;L;039F 0301;;;;N;GREEK CAPITAL LETTER OMICRON TONOS;;;03CC; 038E;GREEK CAPITAL LETTER UPSILON WITH TONOS;Lu;0;L;03A5 0301;;;;N;GREEK CAPITAL LETTER UPSILON TONOS;;;03CD; 038F;GREEK CAPITAL LETTER OMEGA WITH TONOS;Lu;0;L;03A9 0301;;;;N;GREEK CAPITAL LETTER OMEGA TONOS;;;03CE; 0390;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS;Ll;0;L;03CA 0301;;;;N;GREEK SMALL LETTER IOTA DIAERESIS TONOS;;;; 0391;GREEK CAPITAL LETTER ALPHA;Lu;0;L;;;;;N;;;;03B1; 0392;GREEK CAPITAL LETTER BETA;Lu;0;L;;;;;N;;;;03B2; 0393;GREEK CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;03B3; 0394;GREEK CAPITAL LETTER DELTA;Lu;0;L;;;;;N;;;;03B4; 0395;GREEK CAPITAL LETTER EPSILON;Lu;0;L;;;;;N;;;;03B5; 0396;GREEK CAPITAL LETTER ZETA;Lu;0;L;;;;;N;;;;03B6; 0397;GREEK CAPITAL LETTER ETA;Lu;0;L;;;;;N;;;;03B7; 0398;GREEK CAPITAL LETTER THETA;Lu;0;L;;;;;N;;;;03B8; 0399;GREEK CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;03B9; 039A;GREEK CAPITAL LETTER KAPPA;Lu;0;L;;;;;N;;;;03BA; 039B;GREEK CAPITAL LETTER LAMDA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER LAMBDA;;;03BB; 039C;GREEK CAPITAL LETTER MU;Lu;0;L;;;;;N;;;;03BC; 039D;GREEK CAPITAL LETTER NU;Lu;0;L;;;;;N;;;;03BD; 039E;GREEK CAPITAL LETTER XI;Lu;0;L;;;;;N;;;;03BE; 039F;GREEK CAPITAL LETTER OMICRON;Lu;0;L;;;;;N;;;;03BF; 03A0;GREEK CAPITAL LETTER PI;Lu;0;L;;;;;N;;;;03C0; 03A1;GREEK CAPITAL LETTER RHO;Lu;0;L;;;;;N;;;;03C1; 03A3;GREEK CAPITAL LETTER SIGMA;Lu;0;L;;;;;N;;;;03C3; 03A4;GREEK CAPITAL LETTER TAU;Lu;0;L;;;;;N;;;;03C4; 03A5;GREEK CAPITAL LETTER UPSILON;Lu;0;L;;;;;N;;;;03C5; 03A6;GREEK CAPITAL LETTER PHI;Lu;0;L;;;;;N;;;;03C6; 03A7;GREEK CAPITAL LETTER CHI;Lu;0;L;;;;;N;;;;03C7; 03A8;GREEK CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;03C8; 03A9;GREEK CAPITAL LETTER OMEGA;Lu;0;L;;;;;N;;;;03C9; 03AA;GREEK CAPITAL LETTER IOTA WITH DIALYTIKA;Lu;0;L;0399 0308;;;;N;GREEK CAPITAL LETTER IOTA DIAERESIS;;;03CA; 03AB;GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA;Lu;0;L;03A5 0308;;;;N;GREEK CAPITAL LETTER UPSILON DIAERESIS;;;03CB; 03AC;GREEK SMALL LETTER ALPHA WITH TONOS;Ll;0;L;03B1 0301;;;;N;GREEK SMALL LETTER ALPHA TONOS;;0386;;0386 03AD;GREEK SMALL LETTER EPSILON WITH TONOS;Ll;0;L;03B5 0301;;;;N;GREEK SMALL LETTER EPSILON TONOS;;0388;;0388 03AE;GREEK SMALL LETTER ETA WITH TONOS;Ll;0;L;03B7 0301;;;;N;GREEK SMALL LETTER ETA TONOS;;0389;;0389 03AF;GREEK SMALL LETTER IOTA WITH TONOS;Ll;0;L;03B9 0301;;;;N;GREEK SMALL LETTER IOTA TONOS;;038A;;038A 03B0;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS;Ll;0;L;03CB 0301;;;;N;GREEK SMALL LETTER UPSILON DIAERESIS TONOS;;;; 03B1;GREEK SMALL LETTER ALPHA;Ll;0;L;;;;;N;;;0391;;0391 03B2;GREEK SMALL LETTER BETA;Ll;0;L;;;;;N;;;0392;;0392 03B3;GREEK SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;0393;;0393 03B4;GREEK SMALL LETTER DELTA;Ll;0;L;;;;;N;;;0394;;0394 03B5;GREEK SMALL LETTER EPSILON;Ll;0;L;;;;;N;;;0395;;0395 03B6;GREEK SMALL LETTER ZETA;Ll;0;L;;;;;N;;;0396;;0396 03B7;GREEK SMALL LETTER ETA;Ll;0;L;;;;;N;;;0397;;0397 03B8;GREEK SMALL LETTER THETA;Ll;0;L;;;;;N;;;0398;;0398 03B9;GREEK SMALL LETTER IOTA;Ll;0;L;;;;;N;;;0399;;0399 03BA;GREEK SMALL LETTER KAPPA;Ll;0;L;;;;;N;;;039A;;039A 03BB;GREEK SMALL LETTER LAMDA;Ll;0;L;;;;;N;GREEK SMALL LETTER LAMBDA;;039B;;039B 03BC;GREEK SMALL LETTER MU;Ll;0;L;;;;;N;;;039C;;039C 03BD;GREEK SMALL LETTER NU;Ll;0;L;;;;;N;;;039D;;039D 03BE;GREEK SMALL LETTER XI;Ll;0;L;;;;;N;;;039E;;039E 03BF;GREEK SMALL LETTER OMICRON;Ll;0;L;;;;;N;;;039F;;039F 03C0;GREEK SMALL LETTER PI;Ll;0;L;;;;;N;;;03A0;;03A0 03C1;GREEK SMALL LETTER RHO;Ll;0;L;;;;;N;;;03A1;;03A1 03C2;GREEK SMALL LETTER FINAL SIGMA;Ll;0;L;;;;;N;;;03A3;;03A3 03C3;GREEK SMALL LETTER SIGMA;Ll;0;L;;;;;N;;;03A3;;03A3 03C4;GREEK SMALL LETTER TAU;Ll;0;L;;;;;N;;;03A4;;03A4 03C5;GREEK SMALL LETTER UPSILON;Ll;0;L;;;;;N;;;03A5;;03A5 03C6;GREEK SMALL LETTER PHI;Ll;0;L;;;;;N;;;03A6;;03A6 03C7;GREEK SMALL LETTER CHI;Ll;0;L;;;;;N;;;03A7;;03A7 03C8;GREEK SMALL LETTER PSI;Ll;0;L;;;;;N;;;03A8;;03A8 03C9;GREEK SMALL LETTER OMEGA;Ll;0;L;;;;;N;;;03A9;;03A9 03CA;GREEK SMALL LETTER IOTA WITH DIALYTIKA;Ll;0;L;03B9 0308;;;;N;GREEK SMALL LETTER IOTA DIAERESIS;;03AA;;03AA 03CB;GREEK SMALL LETTER UPSILON WITH DIALYTIKA;Ll;0;L;03C5 0308;;;;N;GREEK SMALL LETTER UPSILON DIAERESIS;;03AB;;03AB 03CC;GREEK SMALL LETTER OMICRON WITH TONOS;Ll;0;L;03BF 0301;;;;N;GREEK SMALL LETTER OMICRON TONOS;;038C;;038C 03CD;GREEK SMALL LETTER UPSILON WITH TONOS;Ll;0;L;03C5 0301;;;;N;GREEK SMALL LETTER UPSILON TONOS;;038E;;038E 03CE;GREEK SMALL LETTER OMEGA WITH TONOS;Ll;0;L;03C9 0301;;;;N;GREEK SMALL LETTER OMEGA TONOS;;038F;;038F 03CF;GREEK CAPITAL KAI SYMBOL;Lu;0;L;;;;;N;;;;03D7; 03D0;GREEK BETA SYMBOL;Ll;0;L; 03B2;;;;N;GREEK SMALL LETTER CURLED BETA;;0392;;0392 03D1;GREEK THETA SYMBOL;Ll;0;L; 03B8;;;;N;GREEK SMALL LETTER SCRIPT THETA;;0398;;0398 03D2;GREEK UPSILON WITH HOOK SYMBOL;Lu;0;L; 03A5;;;;N;GREEK CAPITAL LETTER UPSILON HOOK;;;; 03D3;GREEK UPSILON WITH ACUTE AND HOOK SYMBOL;Lu;0;L;03D2 0301;;;;N;GREEK CAPITAL LETTER UPSILON HOOK TONOS;;;; 03D4;GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL;Lu;0;L;03D2 0308;;;;N;GREEK CAPITAL LETTER UPSILON HOOK DIAERESIS;;;; 03D5;GREEK PHI SYMBOL;Ll;0;L; 03C6;;;;N;GREEK SMALL LETTER SCRIPT PHI;;03A6;;03A6 03D6;GREEK PI SYMBOL;Ll;0;L; 03C0;;;;N;GREEK SMALL LETTER OMEGA PI;;03A0;;03A0 03D7;GREEK KAI SYMBOL;Ll;0;L;;;;;N;;;03CF;;03CF 03D8;GREEK LETTER ARCHAIC KOPPA;Lu;0;L;;;;;N;;;;03D9; 03D9;GREEK SMALL LETTER ARCHAIC KOPPA;Ll;0;L;;;;;N;;;03D8;;03D8 03DA;GREEK LETTER STIGMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER STIGMA;;;03DB; 03DB;GREEK SMALL LETTER STIGMA;Ll;0;L;;;;;N;;;03DA;;03DA 03DC;GREEK LETTER DIGAMMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER DIGAMMA;;;03DD; 03DD;GREEK SMALL LETTER DIGAMMA;Ll;0;L;;;;;N;;;03DC;;03DC 03DE;GREEK LETTER KOPPA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER KOPPA;;;03DF; 03DF;GREEK SMALL LETTER KOPPA;Ll;0;L;;;;;N;;;03DE;;03DE 03E0;GREEK LETTER SAMPI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SAMPI;;;03E1; 03E1;GREEK SMALL LETTER SAMPI;Ll;0;L;;;;;N;;;03E0;;03E0 03E2;COPTIC CAPITAL LETTER SHEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SHEI;;;03E3; 03E3;COPTIC SMALL LETTER SHEI;Ll;0;L;;;;;N;GREEK SMALL LETTER SHEI;;03E2;;03E2 03E4;COPTIC CAPITAL LETTER FEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER FEI;;;03E5; 03E5;COPTIC SMALL LETTER FEI;Ll;0;L;;;;;N;GREEK SMALL LETTER FEI;;03E4;;03E4 03E6;COPTIC CAPITAL LETTER KHEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER KHEI;;;03E7; 03E7;COPTIC SMALL LETTER KHEI;Ll;0;L;;;;;N;GREEK SMALL LETTER KHEI;;03E6;;03E6 03E8;COPTIC CAPITAL LETTER HORI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER HORI;;;03E9; 03E9;COPTIC SMALL LETTER HORI;Ll;0;L;;;;;N;GREEK SMALL LETTER HORI;;03E8;;03E8 03EA;COPTIC CAPITAL LETTER GANGIA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER GANGIA;;;03EB; 03EB;COPTIC SMALL LETTER GANGIA;Ll;0;L;;;;;N;GREEK SMALL LETTER GANGIA;;03EA;;03EA 03EC;COPTIC CAPITAL LETTER SHIMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SHIMA;;;03ED; 03ED;COPTIC SMALL LETTER SHIMA;Ll;0;L;;;;;N;GREEK SMALL LETTER SHIMA;;03EC;;03EC 03EE;COPTIC CAPITAL LETTER DEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER DEI;;;03EF; 03EF;COPTIC SMALL LETTER DEI;Ll;0;L;;;;;N;GREEK SMALL LETTER DEI;;03EE;;03EE 03F0;GREEK KAPPA SYMBOL;Ll;0;L; 03BA;;;;N;GREEK SMALL LETTER SCRIPT KAPPA;;039A;;039A 03F1;GREEK RHO SYMBOL;Ll;0;L; 03C1;;;;N;GREEK SMALL LETTER TAILED RHO;;03A1;;03A1 03F2;GREEK LUNATE SIGMA SYMBOL;Ll;0;L; 03C2;;;;N;GREEK SMALL LETTER LUNATE SIGMA;;03F9;;03F9 03F3;GREEK LETTER YOT;Ll;0;L;;;;;N;;;037F;;037F 03F4;GREEK CAPITAL THETA SYMBOL;Lu;0;L; 0398;;;;N;;;;03B8; 03F5;GREEK LUNATE EPSILON SYMBOL;Ll;0;L; 03B5;;;;N;;;0395;;0395 03F6;GREEK REVERSED LUNATE EPSILON SYMBOL;Sm;0;ON;;;;;N;;;;; 03F7;GREEK CAPITAL LETTER SHO;Lu;0;L;;;;;N;;;;03F8; 03F8;GREEK SMALL LETTER SHO;Ll;0;L;;;;;N;;;03F7;;03F7 03F9;GREEK CAPITAL LUNATE SIGMA SYMBOL;Lu;0;L; 03A3;;;;N;;;;03F2; 03FA;GREEK CAPITAL LETTER SAN;Lu;0;L;;;;;N;;;;03FB; 03FB;GREEK SMALL LETTER SAN;Ll;0;L;;;;;N;;;03FA;;03FA 03FC;GREEK RHO WITH STROKE SYMBOL;Ll;0;L;;;;;N;;;;; 03FD;GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL;Lu;0;L;;;;;N;;;;037B; 03FE;GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL;Lu;0;L;;;;;N;;;;037C; 03FF;GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL;Lu;0;L;;;;;N;;;;037D; 0400;CYRILLIC CAPITAL LETTER IE WITH GRAVE;Lu;0;L;0415 0300;;;;N;;;;0450; 0401;CYRILLIC CAPITAL LETTER IO;Lu;0;L;0415 0308;;;;N;;;;0451; 0402;CYRILLIC CAPITAL LETTER DJE;Lu;0;L;;;;;N;;;;0452; 0403;CYRILLIC CAPITAL LETTER GJE;Lu;0;L;0413 0301;;;;N;;;;0453; 0404;CYRILLIC CAPITAL LETTER UKRAINIAN IE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER E;;;0454; 0405;CYRILLIC CAPITAL LETTER DZE;Lu;0;L;;;;;N;;;;0455; 0406;CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER I;;;0456; 0407;CYRILLIC CAPITAL LETTER YI;Lu;0;L;0406 0308;;;;N;;;;0457; 0408;CYRILLIC CAPITAL LETTER JE;Lu;0;L;;;;;N;;;;0458; 0409;CYRILLIC CAPITAL LETTER LJE;Lu;0;L;;;;;N;;;;0459; 040A;CYRILLIC CAPITAL LETTER NJE;Lu;0;L;;;;;N;;;;045A; 040B;CYRILLIC CAPITAL LETTER TSHE;Lu;0;L;;;;;N;;;;045B; 040C;CYRILLIC CAPITAL LETTER KJE;Lu;0;L;041A 0301;;;;N;;;;045C; 040D;CYRILLIC CAPITAL LETTER I WITH GRAVE;Lu;0;L;0418 0300;;;;N;;;;045D; 040E;CYRILLIC CAPITAL LETTER SHORT U;Lu;0;L;0423 0306;;;;N;;;;045E; 040F;CYRILLIC CAPITAL LETTER DZHE;Lu;0;L;;;;;N;;;;045F; 0410;CYRILLIC CAPITAL LETTER A;Lu;0;L;;;;;N;;;;0430; 0411;CYRILLIC CAPITAL LETTER BE;Lu;0;L;;;;;N;;;;0431; 0412;CYRILLIC CAPITAL LETTER VE;Lu;0;L;;;;;N;;;;0432; 0413;CYRILLIC CAPITAL LETTER GHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE;;;0433; 0414;CYRILLIC CAPITAL LETTER DE;Lu;0;L;;;;;N;;;;0434; 0415;CYRILLIC CAPITAL LETTER IE;Lu;0;L;;;;;N;;;;0435; 0416;CYRILLIC CAPITAL LETTER ZHE;Lu;0;L;;;;;N;;;;0436; 0417;CYRILLIC CAPITAL LETTER ZE;Lu;0;L;;;;;N;;;;0437; 0418;CYRILLIC CAPITAL LETTER I;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER II;;;0438; 0419;CYRILLIC CAPITAL LETTER SHORT I;Lu;0;L;0418 0306;;;;N;CYRILLIC CAPITAL LETTER SHORT II;;;0439; 041A;CYRILLIC CAPITAL LETTER KA;Lu;0;L;;;;;N;;;;043A; 041B;CYRILLIC CAPITAL LETTER EL;Lu;0;L;;;;;N;;;;043B; 041C;CYRILLIC CAPITAL LETTER EM;Lu;0;L;;;;;N;;;;043C; 041D;CYRILLIC CAPITAL LETTER EN;Lu;0;L;;;;;N;;;;043D; 041E;CYRILLIC CAPITAL LETTER O;Lu;0;L;;;;;N;;;;043E; 041F;CYRILLIC CAPITAL LETTER PE;Lu;0;L;;;;;N;;;;043F; 0420;CYRILLIC CAPITAL LETTER ER;Lu;0;L;;;;;N;;;;0440; 0421;CYRILLIC CAPITAL LETTER ES;Lu;0;L;;;;;N;;;;0441; 0422;CYRILLIC CAPITAL LETTER TE;Lu;0;L;;;;;N;;;;0442; 0423;CYRILLIC CAPITAL LETTER U;Lu;0;L;;;;;N;;;;0443; 0424;CYRILLIC CAPITAL LETTER EF;Lu;0;L;;;;;N;;;;0444; 0425;CYRILLIC CAPITAL LETTER HA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KHA;;;0445; 0426;CYRILLIC CAPITAL LETTER TSE;Lu;0;L;;;;;N;;;;0446; 0427;CYRILLIC CAPITAL LETTER CHE;Lu;0;L;;;;;N;;;;0447; 0428;CYRILLIC CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;0448; 0429;CYRILLIC CAPITAL LETTER SHCHA;Lu;0;L;;;;;N;;;;0449; 042A;CYRILLIC CAPITAL LETTER HARD SIGN;Lu;0;L;;;;;N;;;;044A; 042B;CYRILLIC CAPITAL LETTER YERU;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER YERI;;;044B; 042C;CYRILLIC CAPITAL LETTER SOFT SIGN;Lu;0;L;;;;;N;;;;044C; 042D;CYRILLIC CAPITAL LETTER E;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER REVERSED E;;;044D; 042E;CYRILLIC CAPITAL LETTER YU;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IU;;;044E; 042F;CYRILLIC CAPITAL LETTER YA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IA;;;044F; 0430;CYRILLIC SMALL LETTER A;Ll;0;L;;;;;N;;;0410;;0410 0431;CYRILLIC SMALL LETTER BE;Ll;0;L;;;;;N;;;0411;;0411 0432;CYRILLIC SMALL LETTER VE;Ll;0;L;;;;;N;;;0412;;0412 0433;CYRILLIC SMALL LETTER GHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE;;0413;;0413 0434;CYRILLIC SMALL LETTER DE;Ll;0;L;;;;;N;;;0414;;0414 0435;CYRILLIC SMALL LETTER IE;Ll;0;L;;;;;N;;;0415;;0415 0436;CYRILLIC SMALL LETTER ZHE;Ll;0;L;;;;;N;;;0416;;0416 0437;CYRILLIC SMALL LETTER ZE;Ll;0;L;;;;;N;;;0417;;0417 0438;CYRILLIC SMALL LETTER I;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER II;;0418;;0418 0439;CYRILLIC SMALL LETTER SHORT I;Ll;0;L;0438 0306;;;;N;CYRILLIC SMALL LETTER SHORT II;;0419;;0419 043A;CYRILLIC SMALL LETTER KA;Ll;0;L;;;;;N;;;041A;;041A 043B;CYRILLIC SMALL LETTER EL;Ll;0;L;;;;;N;;;041B;;041B 043C;CYRILLIC SMALL LETTER EM;Ll;0;L;;;;;N;;;041C;;041C 043D;CYRILLIC SMALL LETTER EN;Ll;0;L;;;;;N;;;041D;;041D 043E;CYRILLIC SMALL LETTER O;Ll;0;L;;;;;N;;;041E;;041E 043F;CYRILLIC SMALL LETTER PE;Ll;0;L;;;;;N;;;041F;;041F 0440;CYRILLIC SMALL LETTER ER;Ll;0;L;;;;;N;;;0420;;0420 0441;CYRILLIC SMALL LETTER ES;Ll;0;L;;;;;N;;;0421;;0421 0442;CYRILLIC SMALL LETTER TE;Ll;0;L;;;;;N;;;0422;;0422 0443;CYRILLIC SMALL LETTER U;Ll;0;L;;;;;N;;;0423;;0423 0444;CYRILLIC SMALL LETTER EF;Ll;0;L;;;;;N;;;0424;;0424 0445;CYRILLIC SMALL LETTER HA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KHA;;0425;;0425 0446;CYRILLIC SMALL LETTER TSE;Ll;0;L;;;;;N;;;0426;;0426 0447;CYRILLIC SMALL LETTER CHE;Ll;0;L;;;;;N;;;0427;;0427 0448;CYRILLIC SMALL LETTER SHA;Ll;0;L;;;;;N;;;0428;;0428 0449;CYRILLIC SMALL LETTER SHCHA;Ll;0;L;;;;;N;;;0429;;0429 044A;CYRILLIC SMALL LETTER HARD SIGN;Ll;0;L;;;;;N;;;042A;;042A 044B;CYRILLIC SMALL LETTER YERU;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER YERI;;042B;;042B 044C;CYRILLIC SMALL LETTER SOFT SIGN;Ll;0;L;;;;;N;;;042C;;042C 044D;CYRILLIC SMALL LETTER E;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER REVERSED E;;042D;;042D 044E;CYRILLIC SMALL LETTER YU;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IU;;042E;;042E 044F;CYRILLIC SMALL LETTER YA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IA;;042F;;042F 0450;CYRILLIC SMALL LETTER IE WITH GRAVE;Ll;0;L;0435 0300;;;;N;;;0400;;0400 0451;CYRILLIC SMALL LETTER IO;Ll;0;L;0435 0308;;;;N;;;0401;;0401 0452;CYRILLIC SMALL LETTER DJE;Ll;0;L;;;;;N;;;0402;;0402 0453;CYRILLIC SMALL LETTER GJE;Ll;0;L;0433 0301;;;;N;;;0403;;0403 0454;CYRILLIC SMALL LETTER UKRAINIAN IE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER E;;0404;;0404 0455;CYRILLIC SMALL LETTER DZE;Ll;0;L;;;;;N;;;0405;;0405 0456;CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER I;;0406;;0406 0457;CYRILLIC SMALL LETTER YI;Ll;0;L;0456 0308;;;;N;;;0407;;0407 0458;CYRILLIC SMALL LETTER JE;Ll;0;L;;;;;N;;;0408;;0408 0459;CYRILLIC SMALL LETTER LJE;Ll;0;L;;;;;N;;;0409;;0409 045A;CYRILLIC SMALL LETTER NJE;Ll;0;L;;;;;N;;;040A;;040A 045B;CYRILLIC SMALL LETTER TSHE;Ll;0;L;;;;;N;;;040B;;040B 045C;CYRILLIC SMALL LETTER KJE;Ll;0;L;043A 0301;;;;N;;;040C;;040C 045D;CYRILLIC SMALL LETTER I WITH GRAVE;Ll;0;L;0438 0300;;;;N;;;040D;;040D 045E;CYRILLIC SMALL LETTER SHORT U;Ll;0;L;0443 0306;;;;N;;;040E;;040E 045F;CYRILLIC SMALL LETTER DZHE;Ll;0;L;;;;;N;;;040F;;040F 0460;CYRILLIC CAPITAL LETTER OMEGA;Lu;0;L;;;;;N;;;;0461; 0461;CYRILLIC SMALL LETTER OMEGA;Ll;0;L;;;;;N;;;0460;;0460 0462;CYRILLIC CAPITAL LETTER YAT;Lu;0;L;;;;;N;;;;0463; 0463;CYRILLIC SMALL LETTER YAT;Ll;0;L;;;;;N;;;0462;;0462 0464;CYRILLIC CAPITAL LETTER IOTIFIED E;Lu;0;L;;;;;N;;;;0465; 0465;CYRILLIC SMALL LETTER IOTIFIED E;Ll;0;L;;;;;N;;;0464;;0464 0466;CYRILLIC CAPITAL LETTER LITTLE YUS;Lu;0;L;;;;;N;;;;0467; 0467;CYRILLIC SMALL LETTER LITTLE YUS;Ll;0;L;;;;;N;;;0466;;0466 0468;CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS;Lu;0;L;;;;;N;;;;0469; 0469;CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS;Ll;0;L;;;;;N;;;0468;;0468 046A;CYRILLIC CAPITAL LETTER BIG YUS;Lu;0;L;;;;;N;;;;046B; 046B;CYRILLIC SMALL LETTER BIG YUS;Ll;0;L;;;;;N;;;046A;;046A 046C;CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS;Lu;0;L;;;;;N;;;;046D; 046D;CYRILLIC SMALL LETTER IOTIFIED BIG YUS;Ll;0;L;;;;;N;;;046C;;046C 046E;CYRILLIC CAPITAL LETTER KSI;Lu;0;L;;;;;N;;;;046F; 046F;CYRILLIC SMALL LETTER KSI;Ll;0;L;;;;;N;;;046E;;046E 0470;CYRILLIC CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;0471; 0471;CYRILLIC SMALL LETTER PSI;Ll;0;L;;;;;N;;;0470;;0470 0472;CYRILLIC CAPITAL LETTER FITA;Lu;0;L;;;;;N;;;;0473; 0473;CYRILLIC SMALL LETTER FITA;Ll;0;L;;;;;N;;;0472;;0472 0474;CYRILLIC CAPITAL LETTER IZHITSA;Lu;0;L;;;;;N;;;;0475; 0475;CYRILLIC SMALL LETTER IZHITSA;Ll;0;L;;;;;N;;;0474;;0474 0476;CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT;Lu;0;L;0474 030F;;;;N;CYRILLIC CAPITAL LETTER IZHITSA DOUBLE GRAVE;;;0477; 0477;CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT;Ll;0;L;0475 030F;;;;N;CYRILLIC SMALL LETTER IZHITSA DOUBLE GRAVE;;0476;;0476 0478;CYRILLIC CAPITAL LETTER UK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER UK DIGRAPH;;;0479; 0479;CYRILLIC SMALL LETTER UK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER UK DIGRAPH;;0478;;0478 047A;CYRILLIC CAPITAL LETTER ROUND OMEGA;Lu;0;L;;;;;N;;;;047B; 047B;CYRILLIC SMALL LETTER ROUND OMEGA;Ll;0;L;;;;;N;;;047A;;047A 047C;CYRILLIC CAPITAL LETTER OMEGA WITH TITLO;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER OMEGA TITLO;;;047D; 047D;CYRILLIC SMALL LETTER OMEGA WITH TITLO;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER OMEGA TITLO;;047C;;047C 047E;CYRILLIC CAPITAL LETTER OT;Lu;0;L;;;;;N;;;;047F; 047F;CYRILLIC SMALL LETTER OT;Ll;0;L;;;;;N;;;047E;;047E 0480;CYRILLIC CAPITAL LETTER KOPPA;Lu;0;L;;;;;N;;;;0481; 0481;CYRILLIC SMALL LETTER KOPPA;Ll;0;L;;;;;N;;;0480;;0480 0482;CYRILLIC THOUSANDS SIGN;So;0;L;;;;;N;;;;; 0483;COMBINING CYRILLIC TITLO;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING TITLO;;;; 0484;COMBINING CYRILLIC PALATALIZATION;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING PALATALIZATION;;;; 0485;COMBINING CYRILLIC DASIA PNEUMATA;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING DASIA PNEUMATA;;;; 0486;COMBINING CYRILLIC PSILI PNEUMATA;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING PSILI PNEUMATA;;;; 0487;COMBINING CYRILLIC POKRYTIE;Mn;230;NSM;;;;;N;;;;; 0488;COMBINING CYRILLIC HUNDRED THOUSANDS SIGN;Me;0;NSM;;;;;N;;;;; 0489;COMBINING CYRILLIC MILLIONS SIGN;Me;0;NSM;;;;;N;;;;; 048A;CYRILLIC CAPITAL LETTER SHORT I WITH TAIL;Lu;0;L;;;;;N;;;;048B; 048B;CYRILLIC SMALL LETTER SHORT I WITH TAIL;Ll;0;L;;;;;N;;;048A;;048A 048C;CYRILLIC CAPITAL LETTER SEMISOFT SIGN;Lu;0;L;;;;;N;;;;048D; 048D;CYRILLIC SMALL LETTER SEMISOFT SIGN;Ll;0;L;;;;;N;;;048C;;048C 048E;CYRILLIC CAPITAL LETTER ER WITH TICK;Lu;0;L;;;;;N;;;;048F; 048F;CYRILLIC SMALL LETTER ER WITH TICK;Ll;0;L;;;;;N;;;048E;;048E 0490;CYRILLIC CAPITAL LETTER GHE WITH UPTURN;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE WITH UPTURN;;;0491; 0491;CYRILLIC SMALL LETTER GHE WITH UPTURN;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE WITH UPTURN;;0490;;0490 0492;CYRILLIC CAPITAL LETTER GHE WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE BAR;;;0493; 0493;CYRILLIC SMALL LETTER GHE WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE BAR;;0492;;0492 0494;CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE HOOK;;;0495; 0495;CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE HOOK;;0494;;0494 0496;CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ZHE WITH RIGHT DESCENDER;;;0497; 0497;CYRILLIC SMALL LETTER ZHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ZHE WITH RIGHT DESCENDER;;0496;;0496 0498;CYRILLIC CAPITAL LETTER ZE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ZE CEDILLA;;;0499; 0499;CYRILLIC SMALL LETTER ZE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ZE CEDILLA;;0498;;0498 049A;CYRILLIC CAPITAL LETTER KA WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA WITH RIGHT DESCENDER;;;049B; 049B;CYRILLIC SMALL LETTER KA WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA WITH RIGHT DESCENDER;;049A;;049A 049C;CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA VERTICAL BAR;;;049D; 049D;CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA VERTICAL BAR;;049C;;049C 049E;CYRILLIC CAPITAL LETTER KA WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA BAR;;;049F; 049F;CYRILLIC SMALL LETTER KA WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA BAR;;049E;;049E 04A0;CYRILLIC CAPITAL LETTER BASHKIR KA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER REVERSED GE KA;;;04A1; 04A1;CYRILLIC SMALL LETTER BASHKIR KA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER REVERSED GE KA;;04A0;;04A0 04A2;CYRILLIC CAPITAL LETTER EN WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN WITH RIGHT DESCENDER;;;04A3; 04A3;CYRILLIC SMALL LETTER EN WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN WITH RIGHT DESCENDER;;04A2;;04A2 04A4;CYRILLIC CAPITAL LIGATURE EN GHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN GE;;;04A5; 04A5;CYRILLIC SMALL LIGATURE EN GHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN GE;;04A4;;04A4 04A6;CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER PE HOOK;;;04A7; 04A7;CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER PE HOOK;;04A6;;04A6 04A8;CYRILLIC CAPITAL LETTER ABKHASIAN HA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER O HOOK;;;04A9; 04A9;CYRILLIC SMALL LETTER ABKHASIAN HA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER O HOOK;;04A8;;04A8 04AA;CYRILLIC CAPITAL LETTER ES WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ES CEDILLA;;;04AB; 04AB;CYRILLIC SMALL LETTER ES WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ES CEDILLA;;04AA;;04AA 04AC;CYRILLIC CAPITAL LETTER TE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER TE WITH RIGHT DESCENDER;;;04AD; 04AD;CYRILLIC SMALL LETTER TE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER TE WITH RIGHT DESCENDER;;04AC;;04AC 04AE;CYRILLIC CAPITAL LETTER STRAIGHT U;Lu;0;L;;;;;N;;;;04AF; 04AF;CYRILLIC SMALL LETTER STRAIGHT U;Ll;0;L;;;;;N;;;04AE;;04AE 04B0;CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER STRAIGHT U BAR;;;04B1; 04B1;CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER STRAIGHT U BAR;;04B0;;04B0 04B2;CYRILLIC CAPITAL LETTER HA WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KHA WITH RIGHT DESCENDER;;;04B3; 04B3;CYRILLIC SMALL LETTER HA WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KHA WITH RIGHT DESCENDER;;04B2;;04B2 04B4;CYRILLIC CAPITAL LIGATURE TE TSE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER TE TSE;;;04B5; 04B5;CYRILLIC SMALL LIGATURE TE TSE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER TE TSE;;04B4;;04B4 04B6;CYRILLIC CAPITAL LETTER CHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE WITH RIGHT DESCENDER;;;04B7; 04B7;CYRILLIC SMALL LETTER CHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE WITH RIGHT DESCENDER;;04B6;;04B6 04B8;CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE VERTICAL BAR;;;04B9; 04B9;CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE VERTICAL BAR;;04B8;;04B8 04BA;CYRILLIC CAPITAL LETTER SHHA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER H;;;04BB; 04BB;CYRILLIC SMALL LETTER SHHA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER H;;04BA;;04BA 04BC;CYRILLIC CAPITAL LETTER ABKHASIAN CHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IE HOOK;;;04BD; 04BD;CYRILLIC SMALL LETTER ABKHASIAN CHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IE HOOK;;04BC;;04BC 04BE;CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IE HOOK OGONEK;;;04BF; 04BF;CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IE HOOK OGONEK;;04BE;;04BE 04C0;CYRILLIC LETTER PALOCHKA;Lu;0;L;;;;;N;CYRILLIC LETTER I;;;04CF; 04C1;CYRILLIC CAPITAL LETTER ZHE WITH BREVE;Lu;0;L;0416 0306;;;;N;CYRILLIC CAPITAL LETTER SHORT ZHE;;;04C2; 04C2;CYRILLIC SMALL LETTER ZHE WITH BREVE;Ll;0;L;0436 0306;;;;N;CYRILLIC SMALL LETTER SHORT ZHE;;04C1;;04C1 04C3;CYRILLIC CAPITAL LETTER KA WITH HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA HOOK;;;04C4; 04C4;CYRILLIC SMALL LETTER KA WITH HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA HOOK;;04C3;;04C3 04C5;CYRILLIC CAPITAL LETTER EL WITH TAIL;Lu;0;L;;;;;N;;;;04C6; 04C6;CYRILLIC SMALL LETTER EL WITH TAIL;Ll;0;L;;;;;N;;;04C5;;04C5 04C7;CYRILLIC CAPITAL LETTER EN WITH HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN HOOK;;;04C8; 04C8;CYRILLIC SMALL LETTER EN WITH HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN HOOK;;04C7;;04C7 04C9;CYRILLIC CAPITAL LETTER EN WITH TAIL;Lu;0;L;;;;;N;;;;04CA; 04CA;CYRILLIC SMALL LETTER EN WITH TAIL;Ll;0;L;;;;;N;;;04C9;;04C9 04CB;CYRILLIC CAPITAL LETTER KHAKASSIAN CHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE WITH LEFT DESCENDER;;;04CC; 04CC;CYRILLIC SMALL LETTER KHAKASSIAN CHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE WITH LEFT DESCENDER;;04CB;;04CB 04CD;CYRILLIC CAPITAL LETTER EM WITH TAIL;Lu;0;L;;;;;N;;;;04CE; 04CE;CYRILLIC SMALL LETTER EM WITH TAIL;Ll;0;L;;;;;N;;;04CD;;04CD 04CF;CYRILLIC SMALL LETTER PALOCHKA;Ll;0;L;;;;;N;;;04C0;;04C0 04D0;CYRILLIC CAPITAL LETTER A WITH BREVE;Lu;0;L;0410 0306;;;;N;;;;04D1; 04D1;CYRILLIC SMALL LETTER A WITH BREVE;Ll;0;L;0430 0306;;;;N;;;04D0;;04D0 04D2;CYRILLIC CAPITAL LETTER A WITH DIAERESIS;Lu;0;L;0410 0308;;;;N;;;;04D3; 04D3;CYRILLIC SMALL LETTER A WITH DIAERESIS;Ll;0;L;0430 0308;;;;N;;;04D2;;04D2 04D4;CYRILLIC CAPITAL LIGATURE A IE;Lu;0;L;;;;;N;;;;04D5; 04D5;CYRILLIC SMALL LIGATURE A IE;Ll;0;L;;;;;N;;;04D4;;04D4 04D6;CYRILLIC CAPITAL LETTER IE WITH BREVE;Lu;0;L;0415 0306;;;;N;;;;04D7; 04D7;CYRILLIC SMALL LETTER IE WITH BREVE;Ll;0;L;0435 0306;;;;N;;;04D6;;04D6 04D8;CYRILLIC CAPITAL LETTER SCHWA;Lu;0;L;;;;;N;;;;04D9; 04D9;CYRILLIC SMALL LETTER SCHWA;Ll;0;L;;;;;N;;;04D8;;04D8 04DA;CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS;Lu;0;L;04D8 0308;;;;N;;;;04DB; 04DB;CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS;Ll;0;L;04D9 0308;;;;N;;;04DA;;04DA 04DC;CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS;Lu;0;L;0416 0308;;;;N;;;;04DD; 04DD;CYRILLIC SMALL LETTER ZHE WITH DIAERESIS;Ll;0;L;0436 0308;;;;N;;;04DC;;04DC 04DE;CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS;Lu;0;L;0417 0308;;;;N;;;;04DF; 04DF;CYRILLIC SMALL LETTER ZE WITH DIAERESIS;Ll;0;L;0437 0308;;;;N;;;04DE;;04DE 04E0;CYRILLIC CAPITAL LETTER ABKHASIAN DZE;Lu;0;L;;;;;N;;;;04E1; 04E1;CYRILLIC SMALL LETTER ABKHASIAN DZE;Ll;0;L;;;;;N;;;04E0;;04E0 04E2;CYRILLIC CAPITAL LETTER I WITH MACRON;Lu;0;L;0418 0304;;;;N;;;;04E3; 04E3;CYRILLIC SMALL LETTER I WITH MACRON;Ll;0;L;0438 0304;;;;N;;;04E2;;04E2 04E4;CYRILLIC CAPITAL LETTER I WITH DIAERESIS;Lu;0;L;0418 0308;;;;N;;;;04E5; 04E5;CYRILLIC SMALL LETTER I WITH DIAERESIS;Ll;0;L;0438 0308;;;;N;;;04E4;;04E4 04E6;CYRILLIC CAPITAL LETTER O WITH DIAERESIS;Lu;0;L;041E 0308;;;;N;;;;04E7; 04E7;CYRILLIC SMALL LETTER O WITH DIAERESIS;Ll;0;L;043E 0308;;;;N;;;04E6;;04E6 04E8;CYRILLIC CAPITAL LETTER BARRED O;Lu;0;L;;;;;N;;;;04E9; 04E9;CYRILLIC SMALL LETTER BARRED O;Ll;0;L;;;;;N;;;04E8;;04E8 04EA;CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS;Lu;0;L;04E8 0308;;;;N;;;;04EB; 04EB;CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS;Ll;0;L;04E9 0308;;;;N;;;04EA;;04EA 04EC;CYRILLIC CAPITAL LETTER E WITH DIAERESIS;Lu;0;L;042D 0308;;;;N;;;;04ED; 04ED;CYRILLIC SMALL LETTER E WITH DIAERESIS;Ll;0;L;044D 0308;;;;N;;;04EC;;04EC 04EE;CYRILLIC CAPITAL LETTER U WITH MACRON;Lu;0;L;0423 0304;;;;N;;;;04EF; 04EF;CYRILLIC SMALL LETTER U WITH MACRON;Ll;0;L;0443 0304;;;;N;;;04EE;;04EE 04F0;CYRILLIC CAPITAL LETTER U WITH DIAERESIS;Lu;0;L;0423 0308;;;;N;;;;04F1; 04F1;CYRILLIC SMALL LETTER U WITH DIAERESIS;Ll;0;L;0443 0308;;;;N;;;04F0;;04F0 04F2;CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE;Lu;0;L;0423 030B;;;;N;;;;04F3; 04F3;CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE;Ll;0;L;0443 030B;;;;N;;;04F2;;04F2 04F4;CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS;Lu;0;L;0427 0308;;;;N;;;;04F5; 04F5;CYRILLIC SMALL LETTER CHE WITH DIAERESIS;Ll;0;L;0447 0308;;;;N;;;04F4;;04F4 04F6;CYRILLIC CAPITAL LETTER GHE WITH DESCENDER;Lu;0;L;;;;;N;;;;04F7; 04F7;CYRILLIC SMALL LETTER GHE WITH DESCENDER;Ll;0;L;;;;;N;;;04F6;;04F6 04F8;CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS;Lu;0;L;042B 0308;;;;N;;;;04F9; 04F9;CYRILLIC SMALL LETTER YERU WITH DIAERESIS;Ll;0;L;044B 0308;;;;N;;;04F8;;04F8 04FA;CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK;Lu;0;L;;;;;N;;;;04FB; 04FB;CYRILLIC SMALL LETTER GHE WITH STROKE AND HOOK;Ll;0;L;;;;;N;;;04FA;;04FA 04FC;CYRILLIC CAPITAL LETTER HA WITH HOOK;Lu;0;L;;;;;N;;;;04FD; 04FD;CYRILLIC SMALL LETTER HA WITH HOOK;Ll;0;L;;;;;N;;;04FC;;04FC 04FE;CYRILLIC CAPITAL LETTER HA WITH STROKE;Lu;0;L;;;;;N;;;;04FF; 04FF;CYRILLIC SMALL LETTER HA WITH STROKE;Ll;0;L;;;;;N;;;04FE;;04FE 0500;CYRILLIC CAPITAL LETTER KOMI DE;Lu;0;L;;;;;N;;;;0501; 0501;CYRILLIC SMALL LETTER KOMI DE;Ll;0;L;;;;;N;;;0500;;0500 0502;CYRILLIC CAPITAL LETTER KOMI DJE;Lu;0;L;;;;;N;;;;0503; 0503;CYRILLIC SMALL LETTER KOMI DJE;Ll;0;L;;;;;N;;;0502;;0502 0504;CYRILLIC CAPITAL LETTER KOMI ZJE;Lu;0;L;;;;;N;;;;0505; 0505;CYRILLIC SMALL LETTER KOMI ZJE;Ll;0;L;;;;;N;;;0504;;0504 0506;CYRILLIC CAPITAL LETTER KOMI DZJE;Lu;0;L;;;;;N;;;;0507; 0507;CYRILLIC SMALL LETTER KOMI DZJE;Ll;0;L;;;;;N;;;0506;;0506 0508;CYRILLIC CAPITAL LETTER KOMI LJE;Lu;0;L;;;;;N;;;;0509; 0509;CYRILLIC SMALL LETTER KOMI LJE;Ll;0;L;;;;;N;;;0508;;0508 050A;CYRILLIC CAPITAL LETTER KOMI NJE;Lu;0;L;;;;;N;;;;050B; 050B;CYRILLIC SMALL LETTER KOMI NJE;Ll;0;L;;;;;N;;;050A;;050A 050C;CYRILLIC CAPITAL LETTER KOMI SJE;Lu;0;L;;;;;N;;;;050D; 050D;CYRILLIC SMALL LETTER KOMI SJE;Ll;0;L;;;;;N;;;050C;;050C 050E;CYRILLIC CAPITAL LETTER KOMI TJE;Lu;0;L;;;;;N;;;;050F; 050F;CYRILLIC SMALL LETTER KOMI TJE;Ll;0;L;;;;;N;;;050E;;050E 0510;CYRILLIC CAPITAL LETTER REVERSED ZE;Lu;0;L;;;;;N;;;;0511; 0511;CYRILLIC SMALL LETTER REVERSED ZE;Ll;0;L;;;;;N;;;0510;;0510 0512;CYRILLIC CAPITAL LETTER EL WITH HOOK;Lu;0;L;;;;;N;;;;0513; 0513;CYRILLIC SMALL LETTER EL WITH HOOK;Ll;0;L;;;;;N;;;0512;;0512 0514;CYRILLIC CAPITAL LETTER LHA;Lu;0;L;;;;;N;;;;0515; 0515;CYRILLIC SMALL LETTER LHA;Ll;0;L;;;;;N;;;0514;;0514 0516;CYRILLIC CAPITAL LETTER RHA;Lu;0;L;;;;;N;;;;0517; 0517;CYRILLIC SMALL LETTER RHA;Ll;0;L;;;;;N;;;0516;;0516 0518;CYRILLIC CAPITAL LETTER YAE;Lu;0;L;;;;;N;;;;0519; 0519;CYRILLIC SMALL LETTER YAE;Ll;0;L;;;;;N;;;0518;;0518 051A;CYRILLIC CAPITAL LETTER QA;Lu;0;L;;;;;N;;;;051B; 051B;CYRILLIC SMALL LETTER QA;Ll;0;L;;;;;N;;;051A;;051A 051C;CYRILLIC CAPITAL LETTER WE;Lu;0;L;;;;;N;;;;051D; 051D;CYRILLIC SMALL LETTER WE;Ll;0;L;;;;;N;;;051C;;051C 051E;CYRILLIC CAPITAL LETTER ALEUT KA;Lu;0;L;;;;;N;;;;051F; 051F;CYRILLIC SMALL LETTER ALEUT KA;Ll;0;L;;;;;N;;;051E;;051E 0520;CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK;Lu;0;L;;;;;N;;;;0521; 0521;CYRILLIC SMALL LETTER EL WITH MIDDLE HOOK;Ll;0;L;;;;;N;;;0520;;0520 0522;CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK;Lu;0;L;;;;;N;;;;0523; 0523;CYRILLIC SMALL LETTER EN WITH MIDDLE HOOK;Ll;0;L;;;;;N;;;0522;;0522 0524;CYRILLIC CAPITAL LETTER PE WITH DESCENDER;Lu;0;L;;;;;N;;;;0525; 0525;CYRILLIC SMALL LETTER PE WITH DESCENDER;Ll;0;L;;;;;N;;;0524;;0524 0526;CYRILLIC CAPITAL LETTER SHHA WITH DESCENDER;Lu;0;L;;;;;N;;;;0527; 0527;CYRILLIC SMALL LETTER SHHA WITH DESCENDER;Ll;0;L;;;;;N;;;0526;;0526 0528;CYRILLIC CAPITAL LETTER EN WITH LEFT HOOK;Lu;0;L;;;;;N;;;;0529; 0529;CYRILLIC SMALL LETTER EN WITH LEFT HOOK;Ll;0;L;;;;;N;;;0528;;0528 052A;CYRILLIC CAPITAL LETTER DZZHE;Lu;0;L;;;;;N;;;;052B; 052B;CYRILLIC SMALL LETTER DZZHE;Ll;0;L;;;;;N;;;052A;;052A 052C;CYRILLIC CAPITAL LETTER DCHE;Lu;0;L;;;;;N;;;;052D; 052D;CYRILLIC SMALL LETTER DCHE;Ll;0;L;;;;;N;;;052C;;052C 052E;CYRILLIC CAPITAL LETTER EL WITH DESCENDER;Lu;0;L;;;;;N;;;;052F; 052F;CYRILLIC SMALL LETTER EL WITH DESCENDER;Ll;0;L;;;;;N;;;052E;;052E 0531;ARMENIAN CAPITAL LETTER AYB;Lu;0;L;;;;;N;;;;0561; 0532;ARMENIAN CAPITAL LETTER BEN;Lu;0;L;;;;;N;;;;0562; 0533;ARMENIAN CAPITAL LETTER GIM;Lu;0;L;;;;;N;;;;0563; 0534;ARMENIAN CAPITAL LETTER DA;Lu;0;L;;;;;N;;;;0564; 0535;ARMENIAN CAPITAL LETTER ECH;Lu;0;L;;;;;N;;;;0565; 0536;ARMENIAN CAPITAL LETTER ZA;Lu;0;L;;;;;N;;;;0566; 0537;ARMENIAN CAPITAL LETTER EH;Lu;0;L;;;;;N;;;;0567; 0538;ARMENIAN CAPITAL LETTER ET;Lu;0;L;;;;;N;;;;0568; 0539;ARMENIAN CAPITAL LETTER TO;Lu;0;L;;;;;N;;;;0569; 053A;ARMENIAN CAPITAL LETTER ZHE;Lu;0;L;;;;;N;;;;056A; 053B;ARMENIAN CAPITAL LETTER INI;Lu;0;L;;;;;N;;;;056B; 053C;ARMENIAN CAPITAL LETTER LIWN;Lu;0;L;;;;;N;;;;056C; 053D;ARMENIAN CAPITAL LETTER XEH;Lu;0;L;;;;;N;;;;056D; 053E;ARMENIAN CAPITAL LETTER CA;Lu;0;L;;;;;N;;;;056E; 053F;ARMENIAN CAPITAL LETTER KEN;Lu;0;L;;;;;N;;;;056F; 0540;ARMENIAN CAPITAL LETTER HO;Lu;0;L;;;;;N;;;;0570; 0541;ARMENIAN CAPITAL LETTER JA;Lu;0;L;;;;;N;;;;0571; 0542;ARMENIAN CAPITAL LETTER GHAD;Lu;0;L;;;;;N;ARMENIAN CAPITAL LETTER LAD;;;0572; 0543;ARMENIAN CAPITAL LETTER CHEH;Lu;0;L;;;;;N;;;;0573; 0544;ARMENIAN CAPITAL LETTER MEN;Lu;0;L;;;;;N;;;;0574; 0545;ARMENIAN CAPITAL LETTER YI;Lu;0;L;;;;;N;;;;0575; 0546;ARMENIAN CAPITAL LETTER NOW;Lu;0;L;;;;;N;;;;0576; 0547;ARMENIAN CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;0577; 0548;ARMENIAN CAPITAL LETTER VO;Lu;0;L;;;;;N;;;;0578; 0549;ARMENIAN CAPITAL LETTER CHA;Lu;0;L;;;;;N;;;;0579; 054A;ARMENIAN CAPITAL LETTER PEH;Lu;0;L;;;;;N;;;;057A; 054B;ARMENIAN CAPITAL LETTER JHEH;Lu;0;L;;;;;N;;;;057B; 054C;ARMENIAN CAPITAL LETTER RA;Lu;0;L;;;;;N;;;;057C; 054D;ARMENIAN CAPITAL LETTER SEH;Lu;0;L;;;;;N;;;;057D; 054E;ARMENIAN CAPITAL LETTER VEW;Lu;0;L;;;;;N;;;;057E; 054F;ARMENIAN CAPITAL LETTER TIWN;Lu;0;L;;;;;N;;;;057F; 0550;ARMENIAN CAPITAL LETTER REH;Lu;0;L;;;;;N;;;;0580; 0551;ARMENIAN CAPITAL LETTER CO;Lu;0;L;;;;;N;;;;0581; 0552;ARMENIAN CAPITAL LETTER YIWN;Lu;0;L;;;;;N;;;;0582; 0553;ARMENIAN CAPITAL LETTER PIWR;Lu;0;L;;;;;N;;;;0583; 0554;ARMENIAN CAPITAL LETTER KEH;Lu;0;L;;;;;N;;;;0584; 0555;ARMENIAN CAPITAL LETTER OH;Lu;0;L;;;;;N;;;;0585; 0556;ARMENIAN CAPITAL LETTER FEH;Lu;0;L;;;;;N;;;;0586; 0559;ARMENIAN MODIFIER LETTER LEFT HALF RING;Lm;0;L;;;;;N;;;;; 055A;ARMENIAN APOSTROPHE;Po;0;L;;;;;N;ARMENIAN MODIFIER LETTER RIGHT HALF RING;;;; 055B;ARMENIAN EMPHASIS MARK;Po;0;L;;;;;N;;;;; 055C;ARMENIAN EXCLAMATION MARK;Po;0;L;;;;;N;;;;; 055D;ARMENIAN COMMA;Po;0;L;;;;;N;;;;; 055E;ARMENIAN QUESTION MARK;Po;0;L;;;;;N;;;;; 055F;ARMENIAN ABBREVIATION MARK;Po;0;L;;;;;N;;;;; 0560;ARMENIAN SMALL LETTER TURNED AYB;Ll;0;L;;;;;N;;;;; 0561;ARMENIAN SMALL LETTER AYB;Ll;0;L;;;;;N;;;0531;;0531 0562;ARMENIAN SMALL LETTER BEN;Ll;0;L;;;;;N;;;0532;;0532 0563;ARMENIAN SMALL LETTER GIM;Ll;0;L;;;;;N;;;0533;;0533 0564;ARMENIAN SMALL LETTER DA;Ll;0;L;;;;;N;;;0534;;0534 0565;ARMENIAN SMALL LETTER ECH;Ll;0;L;;;;;N;;;0535;;0535 0566;ARMENIAN SMALL LETTER ZA;Ll;0;L;;;;;N;;;0536;;0536 0567;ARMENIAN SMALL LETTER EH;Ll;0;L;;;;;N;;;0537;;0537 0568;ARMENIAN SMALL LETTER ET;Ll;0;L;;;;;N;;;0538;;0538 0569;ARMENIAN SMALL LETTER TO;Ll;0;L;;;;;N;;;0539;;0539 056A;ARMENIAN SMALL LETTER ZHE;Ll;0;L;;;;;N;;;053A;;053A 056B;ARMENIAN SMALL LETTER INI;Ll;0;L;;;;;N;;;053B;;053B 056C;ARMENIAN SMALL LETTER LIWN;Ll;0;L;;;;;N;;;053C;;053C 056D;ARMENIAN SMALL LETTER XEH;Ll;0;L;;;;;N;;;053D;;053D 056E;ARMENIAN SMALL LETTER CA;Ll;0;L;;;;;N;;;053E;;053E 056F;ARMENIAN SMALL LETTER KEN;Ll;0;L;;;;;N;;;053F;;053F 0570;ARMENIAN SMALL LETTER HO;Ll;0;L;;;;;N;;;0540;;0540 0571;ARMENIAN SMALL LETTER JA;Ll;0;L;;;;;N;;;0541;;0541 0572;ARMENIAN SMALL LETTER GHAD;Ll;0;L;;;;;N;ARMENIAN SMALL LETTER LAD;;0542;;0542 0573;ARMENIAN SMALL LETTER CHEH;Ll;0;L;;;;;N;;;0543;;0543 0574;ARMENIAN SMALL LETTER MEN;Ll;0;L;;;;;N;;;0544;;0544 0575;ARMENIAN SMALL LETTER YI;Ll;0;L;;;;;N;;;0545;;0545 0576;ARMENIAN SMALL LETTER NOW;Ll;0;L;;;;;N;;;0546;;0546 0577;ARMENIAN SMALL LETTER SHA;Ll;0;L;;;;;N;;;0547;;0547 0578;ARMENIAN SMALL LETTER VO;Ll;0;L;;;;;N;;;0548;;0548 0579;ARMENIAN SMALL LETTER CHA;Ll;0;L;;;;;N;;;0549;;0549 057A;ARMENIAN SMALL LETTER PEH;Ll;0;L;;;;;N;;;054A;;054A 057B;ARMENIAN SMALL LETTER JHEH;Ll;0;L;;;;;N;;;054B;;054B 057C;ARMENIAN SMALL LETTER RA;Ll;0;L;;;;;N;;;054C;;054C 057D;ARMENIAN SMALL LETTER SEH;Ll;0;L;;;;;N;;;054D;;054D 057E;ARMENIAN SMALL LETTER VEW;Ll;0;L;;;;;N;;;054E;;054E 057F;ARMENIAN SMALL LETTER TIWN;Ll;0;L;;;;;N;;;054F;;054F 0580;ARMENIAN SMALL LETTER REH;Ll;0;L;;;;;N;;;0550;;0550 0581;ARMENIAN SMALL LETTER CO;Ll;0;L;;;;;N;;;0551;;0551 0582;ARMENIAN SMALL LETTER YIWN;Ll;0;L;;;;;N;;;0552;;0552 0583;ARMENIAN SMALL LETTER PIWR;Ll;0;L;;;;;N;;;0553;;0553 0584;ARMENIAN SMALL LETTER KEH;Ll;0;L;;;;;N;;;0554;;0554 0585;ARMENIAN SMALL LETTER OH;Ll;0;L;;;;;N;;;0555;;0555 0586;ARMENIAN SMALL LETTER FEH;Ll;0;L;;;;;N;;;0556;;0556 0587;ARMENIAN SMALL LIGATURE ECH YIWN;Ll;0;L; 0565 0582;;;;N;;;;; 0588;ARMENIAN SMALL LETTER YI WITH STROKE;Ll;0;L;;;;;N;;;;; 0589;ARMENIAN FULL STOP;Po;0;L;;;;;N;ARMENIAN PERIOD;;;; 058A;ARMENIAN HYPHEN;Pd;0;ON;;;;;N;;;;; 058D;RIGHT-FACING ARMENIAN ETERNITY SIGN;So;0;ON;;;;;N;;;;; 058E;LEFT-FACING ARMENIAN ETERNITY SIGN;So;0;ON;;;;;N;;;;; 058F;ARMENIAN DRAM SIGN;Sc;0;ET;;;;;N;;;;; 0591;HEBREW ACCENT ETNAHTA;Mn;220;NSM;;;;;N;;;;; 0592;HEBREW ACCENT SEGOL;Mn;230;NSM;;;;;N;;;;; 0593;HEBREW ACCENT SHALSHELET;Mn;230;NSM;;;;;N;;;;; 0594;HEBREW ACCENT ZAQEF QATAN;Mn;230;NSM;;;;;N;;;;; 0595;HEBREW ACCENT ZAQEF GADOL;Mn;230;NSM;;;;;N;;;;; 0596;HEBREW ACCENT TIPEHA;Mn;220;NSM;;;;;N;;;;; 0597;HEBREW ACCENT REVIA;Mn;230;NSM;;;;;N;;;;; 0598;HEBREW ACCENT ZARQA;Mn;230;NSM;;;;;N;;;;; 0599;HEBREW ACCENT PASHTA;Mn;230;NSM;;;;;N;;;;; 059A;HEBREW ACCENT YETIV;Mn;222;NSM;;;;;N;;;;; 059B;HEBREW ACCENT TEVIR;Mn;220;NSM;;;;;N;;;;; 059C;HEBREW ACCENT GERESH;Mn;230;NSM;;;;;N;;;;; 059D;HEBREW ACCENT GERESH MUQDAM;Mn;230;NSM;;;;;N;;;;; 059E;HEBREW ACCENT GERSHAYIM;Mn;230;NSM;;;;;N;;;;; 059F;HEBREW ACCENT QARNEY PARA;Mn;230;NSM;;;;;N;;;;; 05A0;HEBREW ACCENT TELISHA GEDOLA;Mn;230;NSM;;;;;N;;;;; 05A1;HEBREW ACCENT PAZER;Mn;230;NSM;;;;;N;;;;; 05A2;HEBREW ACCENT ATNAH HAFUKH;Mn;220;NSM;;;;;N;;;;; 05A3;HEBREW ACCENT MUNAH;Mn;220;NSM;;;;;N;;;;; 05A4;HEBREW ACCENT MAHAPAKH;Mn;220;NSM;;;;;N;;;;; 05A5;HEBREW ACCENT MERKHA;Mn;220;NSM;;;;;N;;;;; 05A6;HEBREW ACCENT MERKHA KEFULA;Mn;220;NSM;;;;;N;;;;; 05A7;HEBREW ACCENT DARGA;Mn;220;NSM;;;;;N;;;;; 05A8;HEBREW ACCENT QADMA;Mn;230;NSM;;;;;N;;;;; 05A9;HEBREW ACCENT TELISHA QETANA;Mn;230;NSM;;;;;N;;;;; 05AA;HEBREW ACCENT YERAH BEN YOMO;Mn;220;NSM;;;;;N;;;;; 05AB;HEBREW ACCENT OLE;Mn;230;NSM;;;;;N;;;;; 05AC;HEBREW ACCENT ILUY;Mn;230;NSM;;;;;N;;;;; 05AD;HEBREW ACCENT DEHI;Mn;222;NSM;;;;;N;;;;; 05AE;HEBREW ACCENT ZINOR;Mn;228;NSM;;;;;N;;;;; 05AF;HEBREW MARK MASORA CIRCLE;Mn;230;NSM;;;;;N;;;;; 05B0;HEBREW POINT SHEVA;Mn;10;NSM;;;;;N;;;;; 05B1;HEBREW POINT HATAF SEGOL;Mn;11;NSM;;;;;N;;;;; 05B2;HEBREW POINT HATAF PATAH;Mn;12;NSM;;;;;N;;;;; 05B3;HEBREW POINT HATAF QAMATS;Mn;13;NSM;;;;;N;;;;; 05B4;HEBREW POINT HIRIQ;Mn;14;NSM;;;;;N;;;;; 05B5;HEBREW POINT TSERE;Mn;15;NSM;;;;;N;;;;; 05B6;HEBREW POINT SEGOL;Mn;16;NSM;;;;;N;;;;; 05B7;HEBREW POINT PATAH;Mn;17;NSM;;;;;N;;;;; 05B8;HEBREW POINT QAMATS;Mn;18;NSM;;;;;N;;;;; 05B9;HEBREW POINT HOLAM;Mn;19;NSM;;;;;N;;;;; 05BA;HEBREW POINT HOLAM HASER FOR VAV;Mn;19;NSM;;;;;N;;;;; 05BB;HEBREW POINT QUBUTS;Mn;20;NSM;;;;;N;;;;; 05BC;HEBREW POINT DAGESH OR MAPIQ;Mn;21;NSM;;;;;N;HEBREW POINT DAGESH;;;; 05BD;HEBREW POINT METEG;Mn;22;NSM;;;;;N;;;;; 05BE;HEBREW PUNCTUATION MAQAF;Pd;0;R;;;;;N;;;;; 05BF;HEBREW POINT RAFE;Mn;23;NSM;;;;;N;;;;; 05C0;HEBREW PUNCTUATION PASEQ;Po;0;R;;;;;N;HEBREW POINT PASEQ;;;; 05C1;HEBREW POINT SHIN DOT;Mn;24;NSM;;;;;N;;;;; 05C2;HEBREW POINT SIN DOT;Mn;25;NSM;;;;;N;;;;; 05C3;HEBREW PUNCTUATION SOF PASUQ;Po;0;R;;;;;N;;;;; 05C4;HEBREW MARK UPPER DOT;Mn;230;NSM;;;;;N;;;;; 05C5;HEBREW MARK LOWER DOT;Mn;220;NSM;;;;;N;;;;; 05C6;HEBREW PUNCTUATION NUN HAFUKHA;Po;0;R;;;;;N;;;;; 05C7;HEBREW POINT QAMATS QATAN;Mn;18;NSM;;;;;N;;;;; 05D0;HEBREW LETTER ALEF;Lo;0;R;;;;;N;;;;; 05D1;HEBREW LETTER BET;Lo;0;R;;;;;N;;;;; 05D2;HEBREW LETTER GIMEL;Lo;0;R;;;;;N;;;;; 05D3;HEBREW LETTER DALET;Lo;0;R;;;;;N;;;;; 05D4;HEBREW LETTER HE;Lo;0;R;;;;;N;;;;; 05D5;HEBREW LETTER VAV;Lo;0;R;;;;;N;;;;; 05D6;HEBREW LETTER ZAYIN;Lo;0;R;;;;;N;;;;; 05D7;HEBREW LETTER HET;Lo;0;R;;;;;N;;;;; 05D8;HEBREW LETTER TET;Lo;0;R;;;;;N;;;;; 05D9;HEBREW LETTER YOD;Lo;0;R;;;;;N;;;;; 05DA;HEBREW LETTER FINAL KAF;Lo;0;R;;;;;N;;;;; 05DB;HEBREW LETTER KAF;Lo;0;R;;;;;N;;;;; 05DC;HEBREW LETTER LAMED;Lo;0;R;;;;;N;;;;; 05DD;HEBREW LETTER FINAL MEM;Lo;0;R;;;;;N;;;;; 05DE;HEBREW LETTER MEM;Lo;0;R;;;;;N;;;;; 05DF;HEBREW LETTER FINAL NUN;Lo;0;R;;;;;N;;;;; 05E0;HEBREW LETTER NUN;Lo;0;R;;;;;N;;;;; 05E1;HEBREW LETTER SAMEKH;Lo;0;R;;;;;N;;;;; 05E2;HEBREW LETTER AYIN;Lo;0;R;;;;;N;;;;; 05E3;HEBREW LETTER FINAL PE;Lo;0;R;;;;;N;;;;; 05E4;HEBREW LETTER PE;Lo;0;R;;;;;N;;;;; 05E5;HEBREW LETTER FINAL TSADI;Lo;0;R;;;;;N;;;;; 05E6;HEBREW LETTER TSADI;Lo;0;R;;;;;N;;;;; 05E7;HEBREW LETTER QOF;Lo;0;R;;;;;N;;;;; 05E8;HEBREW LETTER RESH;Lo;0;R;;;;;N;;;;; 05E9;HEBREW LETTER SHIN;Lo;0;R;;;;;N;;;;; 05EA;HEBREW LETTER TAV;Lo;0;R;;;;;N;;;;; 05EF;HEBREW YOD TRIANGLE;Lo;0;R;;;;;N;;;;; 05F0;HEBREW LIGATURE YIDDISH DOUBLE VAV;Lo;0;R;;;;;N;HEBREW LETTER DOUBLE VAV;;;; 05F1;HEBREW LIGATURE YIDDISH VAV YOD;Lo;0;R;;;;;N;HEBREW LETTER VAV YOD;;;; 05F2;HEBREW LIGATURE YIDDISH DOUBLE YOD;Lo;0;R;;;;;N;HEBREW LETTER DOUBLE YOD;;;; 05F3;HEBREW PUNCTUATION GERESH;Po;0;R;;;;;N;;;;; 05F4;HEBREW PUNCTUATION GERSHAYIM;Po;0;R;;;;;N;;;;; 0600;ARABIC NUMBER SIGN;Cf;0;AN;;;;;N;;;;; 0601;ARABIC SIGN SANAH;Cf;0;AN;;;;;N;;;;; 0602;ARABIC FOOTNOTE MARKER;Cf;0;AN;;;;;N;;;;; 0603;ARABIC SIGN SAFHA;Cf;0;AN;;;;;N;;;;; 0604;ARABIC SIGN SAMVAT;Cf;0;AN;;;;;N;;;;; 0605;ARABIC NUMBER MARK ABOVE;Cf;0;AN;;;;;N;;;;; 0606;ARABIC-INDIC CUBE ROOT;Sm;0;ON;;;;;N;;;;; 0607;ARABIC-INDIC FOURTH ROOT;Sm;0;ON;;;;;N;;;;; 0608;ARABIC RAY;Sm;0;AL;;;;;N;;;;; 0609;ARABIC-INDIC PER MILLE SIGN;Po;0;ET;;;;;N;;;;; 060A;ARABIC-INDIC PER TEN THOUSAND SIGN;Po;0;ET;;;;;N;;;;; 060B;AFGHANI SIGN;Sc;0;AL;;;;;N;;;;; 060C;ARABIC COMMA;Po;0;CS;;;;;N;;;;; 060D;ARABIC DATE SEPARATOR;Po;0;AL;;;;;N;;;;; 060E;ARABIC POETIC VERSE SIGN;So;0;ON;;;;;N;;;;; 060F;ARABIC SIGN MISRA;So;0;ON;;;;;N;;;;; 0610;ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM;Mn;230;NSM;;;;;N;;;;; 0611;ARABIC SIGN ALAYHE ASSALLAM;Mn;230;NSM;;;;;N;;;;; 0612;ARABIC SIGN RAHMATULLAH ALAYHE;Mn;230;NSM;;;;;N;;;;; 0613;ARABIC SIGN RADI ALLAHOU ANHU;Mn;230;NSM;;;;;N;;;;; 0614;ARABIC SIGN TAKHALLUS;Mn;230;NSM;;;;;N;;;;; 0615;ARABIC SMALL HIGH TAH;Mn;230;NSM;;;;;N;;;;; 0616;ARABIC SMALL HIGH LIGATURE ALEF WITH LAM WITH YEH;Mn;230;NSM;;;;;N;;;;; 0617;ARABIC SMALL HIGH ZAIN;Mn;230;NSM;;;;;N;;;;; 0618;ARABIC SMALL FATHA;Mn;30;NSM;;;;;N;;;;; 0619;ARABIC SMALL DAMMA;Mn;31;NSM;;;;;N;;;;; 061A;ARABIC SMALL KASRA;Mn;32;NSM;;;;;N;;;;; 061B;ARABIC SEMICOLON;Po;0;AL;;;;;N;;;;; 061C;ARABIC LETTER MARK;Cf;0;AL;;;;;N;;;;; 061D;ARABIC END OF TEXT MARK;Po;0;AL;;;;;N;;;;; 061E;ARABIC TRIPLE DOT PUNCTUATION MARK;Po;0;AL;;;;;N;;;;; 061F;ARABIC QUESTION MARK;Po;0;AL;;;;;N;;;;; 0620;ARABIC LETTER KASHMIRI YEH;Lo;0;AL;;;;;N;;;;; 0621;ARABIC LETTER HAMZA;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAH;;;; 0622;ARABIC LETTER ALEF WITH MADDA ABOVE;Lo;0;AL;0627 0653;;;;N;ARABIC LETTER MADDAH ON ALEF;;;; 0623;ARABIC LETTER ALEF WITH HAMZA ABOVE;Lo;0;AL;0627 0654;;;;N;ARABIC LETTER HAMZAH ON ALEF;;;; 0624;ARABIC LETTER WAW WITH HAMZA ABOVE;Lo;0;AL;0648 0654;;;;N;ARABIC LETTER HAMZAH ON WAW;;;; 0625;ARABIC LETTER ALEF WITH HAMZA BELOW;Lo;0;AL;0627 0655;;;;N;ARABIC LETTER HAMZAH UNDER ALEF;;;; 0626;ARABIC LETTER YEH WITH HAMZA ABOVE;Lo;0;AL;064A 0654;;;;N;ARABIC LETTER HAMZAH ON YA;;;; 0627;ARABIC LETTER ALEF;Lo;0;AL;;;;;N;;;;; 0628;ARABIC LETTER BEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA;;;; 0629;ARABIC LETTER TEH MARBUTA;Lo;0;AL;;;;;N;ARABIC LETTER TAA MARBUTAH;;;; 062A;ARABIC LETTER TEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA;;;; 062B;ARABIC LETTER THEH;Lo;0;AL;;;;;N;ARABIC LETTER THAA;;;; 062C;ARABIC LETTER JEEM;Lo;0;AL;;;;;N;;;;; 062D;ARABIC LETTER HAH;Lo;0;AL;;;;;N;ARABIC LETTER HAA;;;; 062E;ARABIC LETTER KHAH;Lo;0;AL;;;;;N;ARABIC LETTER KHAA;;;; 062F;ARABIC LETTER DAL;Lo;0;AL;;;;;N;;;;; 0630;ARABIC LETTER THAL;Lo;0;AL;;;;;N;;;;; 0631;ARABIC LETTER REH;Lo;0;AL;;;;;N;ARABIC LETTER RA;;;; 0632;ARABIC LETTER ZAIN;Lo;0;AL;;;;;N;;;;; 0633;ARABIC LETTER SEEN;Lo;0;AL;;;;;N;;;;; 0634;ARABIC LETTER SHEEN;Lo;0;AL;;;;;N;;;;; 0635;ARABIC LETTER SAD;Lo;0;AL;;;;;N;;;;; 0636;ARABIC LETTER DAD;Lo;0;AL;;;;;N;;;;; 0637;ARABIC LETTER TAH;Lo;0;AL;;;;;N;;;;; 0638;ARABIC LETTER ZAH;Lo;0;AL;;;;;N;ARABIC LETTER DHAH;;;; 0639;ARABIC LETTER AIN;Lo;0;AL;;;;;N;;;;; 063A;ARABIC LETTER GHAIN;Lo;0;AL;;;;;N;;;;; 063B;ARABIC LETTER KEHEH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 063C;ARABIC LETTER KEHEH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;; 063D;ARABIC LETTER FARSI YEH WITH INVERTED V;Lo;0;AL;;;;;N;;;;; 063E;ARABIC LETTER FARSI YEH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 063F;ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 0640;ARABIC TATWEEL;Lm;0;AL;;;;;N;;;;; 0641;ARABIC LETTER FEH;Lo;0;AL;;;;;N;ARABIC LETTER FA;;;; 0642;ARABIC LETTER QAF;Lo;0;AL;;;;;N;;;;; 0643;ARABIC LETTER KAF;Lo;0;AL;;;;;N;ARABIC LETTER CAF;;;; 0644;ARABIC LETTER LAM;Lo;0;AL;;;;;N;;;;; 0645;ARABIC LETTER MEEM;Lo;0;AL;;;;;N;;;;; 0646;ARABIC LETTER NOON;Lo;0;AL;;;;;N;;;;; 0647;ARABIC LETTER HEH;Lo;0;AL;;;;;N;ARABIC LETTER HA;;;; 0648;ARABIC LETTER WAW;Lo;0;AL;;;;;N;;;;; 0649;ARABIC LETTER ALEF MAKSURA;Lo;0;AL;;;;;N;ARABIC LETTER ALEF MAQSURAH;;;; 064A;ARABIC LETTER YEH;Lo;0;AL;;;;;N;ARABIC LETTER YA;;;; 064B;ARABIC FATHATAN;Mn;27;NSM;;;;;N;;;;; 064C;ARABIC DAMMATAN;Mn;28;NSM;;;;;N;;;;; 064D;ARABIC KASRATAN;Mn;29;NSM;;;;;N;;;;; 064E;ARABIC FATHA;Mn;30;NSM;;;;;N;ARABIC FATHAH;;;; 064F;ARABIC DAMMA;Mn;31;NSM;;;;;N;ARABIC DAMMAH;;;; 0650;ARABIC KASRA;Mn;32;NSM;;;;;N;ARABIC KASRAH;;;; 0651;ARABIC SHADDA;Mn;33;NSM;;;;;N;ARABIC SHADDAH;;;; 0652;ARABIC SUKUN;Mn;34;NSM;;;;;N;;;;; 0653;ARABIC MADDAH ABOVE;Mn;230;NSM;;;;;N;;;;; 0654;ARABIC HAMZA ABOVE;Mn;230;NSM;;;;;N;;;;; 0655;ARABIC HAMZA BELOW;Mn;220;NSM;;;;;N;;;;; 0656;ARABIC SUBSCRIPT ALEF;Mn;220;NSM;;;;;N;;;;; 0657;ARABIC INVERTED DAMMA;Mn;230;NSM;;;;;N;;;;; 0658;ARABIC MARK NOON GHUNNA;Mn;230;NSM;;;;;N;;;;; 0659;ARABIC ZWARAKAY;Mn;230;NSM;;;;;N;;;;; 065A;ARABIC VOWEL SIGN SMALL V ABOVE;Mn;230;NSM;;;;;N;;;;; 065B;ARABIC VOWEL SIGN INVERTED SMALL V ABOVE;Mn;230;NSM;;;;;N;;;;; 065C;ARABIC VOWEL SIGN DOT BELOW;Mn;220;NSM;;;;;N;;;;; 065D;ARABIC REVERSED DAMMA;Mn;230;NSM;;;;;N;;;;; 065E;ARABIC FATHA WITH TWO DOTS;Mn;230;NSM;;;;;N;;;;; 065F;ARABIC WAVY HAMZA BELOW;Mn;220;NSM;;;;;N;;;;; 0660;ARABIC-INDIC DIGIT ZERO;Nd;0;AN;;0;0;0;N;;;;; 0661;ARABIC-INDIC DIGIT ONE;Nd;0;AN;;1;1;1;N;;;;; 0662;ARABIC-INDIC DIGIT TWO;Nd;0;AN;;2;2;2;N;;;;; 0663;ARABIC-INDIC DIGIT THREE;Nd;0;AN;;3;3;3;N;;;;; 0664;ARABIC-INDIC DIGIT FOUR;Nd;0;AN;;4;4;4;N;;;;; 0665;ARABIC-INDIC DIGIT FIVE;Nd;0;AN;;5;5;5;N;;;;; 0666;ARABIC-INDIC DIGIT SIX;Nd;0;AN;;6;6;6;N;;;;; 0667;ARABIC-INDIC DIGIT SEVEN;Nd;0;AN;;7;7;7;N;;;;; 0668;ARABIC-INDIC DIGIT EIGHT;Nd;0;AN;;8;8;8;N;;;;; 0669;ARABIC-INDIC DIGIT NINE;Nd;0;AN;;9;9;9;N;;;;; 066A;ARABIC PERCENT SIGN;Po;0;ET;;;;;N;;;;; 066B;ARABIC DECIMAL SEPARATOR;Po;0;AN;;;;;N;;;;; 066C;ARABIC THOUSANDS SEPARATOR;Po;0;AN;;;;;N;;;;; 066D;ARABIC FIVE POINTED STAR;Po;0;AL;;;;;N;;;;; 066E;ARABIC LETTER DOTLESS BEH;Lo;0;AL;;;;;N;;;;; 066F;ARABIC LETTER DOTLESS QAF;Lo;0;AL;;;;;N;;;;; 0670;ARABIC LETTER SUPERSCRIPT ALEF;Mn;35;NSM;;;;;N;ARABIC ALEF ABOVE;;;; 0671;ARABIC LETTER ALEF WASLA;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAT WASL ON ALEF;;;; 0672;ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER WAVY HAMZAH ON ALEF;;;; 0673;ARABIC LETTER ALEF WITH WAVY HAMZA BELOW;Lo;0;AL;;;;;N;ARABIC LETTER WAVY HAMZAH UNDER ALEF;;;; 0674;ARABIC LETTER HIGH HAMZA;Lo;0;AL;;;;;N;ARABIC LETTER HIGH HAMZAH;;;; 0675;ARABIC LETTER HIGH HAMZA ALEF;Lo;0;AL; 0627 0674;;;;N;ARABIC LETTER HIGH HAMZAH ALEF;;;; 0676;ARABIC LETTER HIGH HAMZA WAW;Lo;0;AL; 0648 0674;;;;N;ARABIC LETTER HIGH HAMZAH WAW;;;; 0677;ARABIC LETTER U WITH HAMZA ABOVE;Lo;0;AL; 06C7 0674;;;;N;ARABIC LETTER HIGH HAMZAH WAW WITH DAMMAH;;;; 0678;ARABIC LETTER HIGH HAMZA YEH;Lo;0;AL; 064A 0674;;;;N;ARABIC LETTER HIGH HAMZAH YA;;;; 0679;ARABIC LETTER TTEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH SMALL TAH;;;; 067A;ARABIC LETTER TTEHEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH TWO DOTS VERTICAL ABOVE;;;; 067B;ARABIC LETTER BEEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA WITH TWO DOTS VERTICAL BELOW;;;; 067C;ARABIC LETTER TEH WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH RING;;;; 067D;ARABIC LETTER TEH WITH THREE DOTS ABOVE DOWNWARDS;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH THREE DOTS ABOVE DOWNWARD;;;; 067E;ARABIC LETTER PEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH THREE DOTS BELOW;;;; 067F;ARABIC LETTER TEHEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH FOUR DOTS ABOVE;;;; 0680;ARABIC LETTER BEHEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA WITH FOUR DOTS BELOW;;;; 0681;ARABIC LETTER HAH WITH HAMZA ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAH ON HAA;;;; 0682;ARABIC LETTER HAH WITH TWO DOTS VERTICAL ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH TWO DOTS VERTICAL ABOVE;;;; 0683;ARABIC LETTER NYEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE TWO DOTS;;;; 0684;ARABIC LETTER DYEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE TWO DOTS VERTICAL;;;; 0685;ARABIC LETTER HAH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH THREE DOTS ABOVE;;;; 0686;ARABIC LETTER TCHEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE THREE DOTS DOWNWARD;;;; 0687;ARABIC LETTER TCHEHEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE FOUR DOTS;;;; 0688;ARABIC LETTER DDAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH SMALL TAH;;;; 0689;ARABIC LETTER DAL WITH RING;Lo;0;AL;;;;;N;;;;; 068A;ARABIC LETTER DAL WITH DOT BELOW;Lo;0;AL;;;;;N;;;;; 068B;ARABIC LETTER DAL WITH DOT BELOW AND SMALL TAH;Lo;0;AL;;;;;N;;;;; 068C;ARABIC LETTER DAHAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH TWO DOTS ABOVE;;;; 068D;ARABIC LETTER DDAHAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH TWO DOTS BELOW;;;; 068E;ARABIC LETTER DUL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH THREE DOTS ABOVE;;;; 068F;ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARD;;;; 0690;ARABIC LETTER DAL WITH FOUR DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 0691;ARABIC LETTER RREH;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL TAH;;;; 0692;ARABIC LETTER REH WITH SMALL V;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL V;;;; 0693;ARABIC LETTER REH WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH RING;;;; 0694;ARABIC LETTER REH WITH DOT BELOW;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH DOT BELOW;;;; 0695;ARABIC LETTER REH WITH SMALL V BELOW;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL V BELOW;;;; 0696;ARABIC LETTER REH WITH DOT BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH DOT BELOW AND DOT ABOVE;;;; 0697;ARABIC LETTER REH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH TWO DOTS ABOVE;;;; 0698;ARABIC LETTER JEH;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH THREE DOTS ABOVE;;;; 0699;ARABIC LETTER REH WITH FOUR DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH FOUR DOTS ABOVE;;;; 069A;ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;;;;; 069B;ARABIC LETTER SEEN WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;; 069C;ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 069D;ARABIC LETTER SAD WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;; 069E;ARABIC LETTER SAD WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 069F;ARABIC LETTER TAH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 06A0;ARABIC LETTER AIN WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 06A1;ARABIC LETTER DOTLESS FEH;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS FA;;;; 06A2;ARABIC LETTER FEH WITH DOT MOVED BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH DOT MOVED BELOW;;;; 06A3;ARABIC LETTER FEH WITH DOT BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH DOT BELOW;;;; 06A4;ARABIC LETTER VEH;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH THREE DOTS ABOVE;;;; 06A5;ARABIC LETTER FEH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH THREE DOTS BELOW;;;; 06A6;ARABIC LETTER PEHEH;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH FOUR DOTS ABOVE;;;; 06A7;ARABIC LETTER QAF WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;; 06A8;ARABIC LETTER QAF WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 06A9;ARABIC LETTER KEHEH;Lo;0;AL;;;;;N;ARABIC LETTER OPEN CAF;;;; 06AA;ARABIC LETTER SWASH KAF;Lo;0;AL;;;;;N;ARABIC LETTER SWASH CAF;;;; 06AB;ARABIC LETTER KAF WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH RING;;;; 06AC;ARABIC LETTER KAF WITH DOT ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH DOT ABOVE;;;; 06AD;ARABIC LETTER NG;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH THREE DOTS ABOVE;;;; 06AE;ARABIC LETTER KAF WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH THREE DOTS BELOW;;;; 06AF;ARABIC LETTER GAF;Lo;0;AL;;;;;N;;;;; 06B0;ARABIC LETTER GAF WITH RING;Lo;0;AL;;;;;N;;;;; 06B1;ARABIC LETTER NGOEH;Lo;0;AL;;;;;N;ARABIC LETTER GAF WITH TWO DOTS ABOVE;;;; 06B2;ARABIC LETTER GAF WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;; 06B3;ARABIC LETTER GUEH;Lo;0;AL;;;;;N;ARABIC LETTER GAF WITH TWO DOTS VERTICAL BELOW;;;; 06B4;ARABIC LETTER GAF WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 06B5;ARABIC LETTER LAM WITH SMALL V;Lo;0;AL;;;;;N;;;;; 06B6;ARABIC LETTER LAM WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;; 06B7;ARABIC LETTER LAM WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 06B8;ARABIC LETTER LAM WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;; 06B9;ARABIC LETTER NOON WITH DOT BELOW;Lo;0;AL;;;;;N;;;;; 06BA;ARABIC LETTER NOON GHUNNA;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS NOON;;;; 06BB;ARABIC LETTER RNOON;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS NOON WITH SMALL TAH;;;; 06BC;ARABIC LETTER NOON WITH RING;Lo;0;AL;;;;;N;;;;; 06BD;ARABIC LETTER NOON WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 06BE;ARABIC LETTER HEH DOACHASHMEE;Lo;0;AL;;;;;N;ARABIC LETTER KNOTTED HA;;;; 06BF;ARABIC LETTER TCHEH WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;; 06C0;ARABIC LETTER HEH WITH YEH ABOVE;Lo;0;AL;06D5 0654;;;;N;ARABIC LETTER HAMZAH ON HA;;;; 06C1;ARABIC LETTER HEH GOAL;Lo;0;AL;;;;;N;ARABIC LETTER HA GOAL;;;; 06C2;ARABIC LETTER HEH GOAL WITH HAMZA ABOVE;Lo;0;AL;06C1 0654;;;;N;ARABIC LETTER HAMZAH ON HA GOAL;;;; 06C3;ARABIC LETTER TEH MARBUTA GOAL;Lo;0;AL;;;;;N;ARABIC LETTER TAA MARBUTAH GOAL;;;; 06C4;ARABIC LETTER WAW WITH RING;Lo;0;AL;;;;;N;;;;; 06C5;ARABIC LETTER KIRGHIZ OE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH BAR;;;; 06C6;ARABIC LETTER OE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH SMALL V;;;; 06C7;ARABIC LETTER U;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH DAMMAH;;;; 06C8;ARABIC LETTER YU;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH ALEF ABOVE;;;; 06C9;ARABIC LETTER KIRGHIZ YU;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH INVERTED SMALL V;;;; 06CA;ARABIC LETTER WAW WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 06CB;ARABIC LETTER VE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH THREE DOTS ABOVE;;;; 06CC;ARABIC LETTER FARSI YEH;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS YA;;;; 06CD;ARABIC LETTER YEH WITH TAIL;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH TAIL;;;; 06CE;ARABIC LETTER YEH WITH SMALL V;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH SMALL V;;;; 06CF;ARABIC LETTER WAW WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;; 06D0;ARABIC LETTER E;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH TWO DOTS VERTICAL BELOW;;;; 06D1;ARABIC LETTER YEH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH THREE DOTS BELOW;;;; 06D2;ARABIC LETTER YEH BARREE;Lo;0;AL;;;;;N;ARABIC LETTER YA BARREE;;;; 06D3;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE;Lo;0;AL;06D2 0654;;;;N;ARABIC LETTER HAMZAH ON YA BARREE;;;; 06D4;ARABIC FULL STOP;Po;0;AL;;;;;N;ARABIC PERIOD;;;; 06D5;ARABIC LETTER AE;Lo;0;AL;;;;;N;;;;; 06D6;ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA;Mn;230;NSM;;;;;N;;;;; 06D7;ARABIC SMALL HIGH LIGATURE QAF WITH LAM WITH ALEF MAKSURA;Mn;230;NSM;;;;;N;;;;; 06D8;ARABIC SMALL HIGH MEEM INITIAL FORM;Mn;230;NSM;;;;;N;;;;; 06D9;ARABIC SMALL HIGH LAM ALEF;Mn;230;NSM;;;;;N;;;;; 06DA;ARABIC SMALL HIGH JEEM;Mn;230;NSM;;;;;N;;;;; 06DB;ARABIC SMALL HIGH THREE DOTS;Mn;230;NSM;;;;;N;;;;; 06DC;ARABIC SMALL HIGH SEEN;Mn;230;NSM;;;;;N;;;;; 06DD;ARABIC END OF AYAH;Cf;0;AN;;;;;N;;;;; 06DE;ARABIC START OF RUB EL HIZB;So;0;ON;;;;;N;;;;; 06DF;ARABIC SMALL HIGH ROUNDED ZERO;Mn;230;NSM;;;;;N;;;;; 06E0;ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO;Mn;230;NSM;;;;;N;;;;; 06E1;ARABIC SMALL HIGH DOTLESS HEAD OF KHAH;Mn;230;NSM;;;;;N;;;;; 06E2;ARABIC SMALL HIGH MEEM ISOLATED FORM;Mn;230;NSM;;;;;N;;;;; 06E3;ARABIC SMALL LOW SEEN;Mn;220;NSM;;;;;N;;;;; 06E4;ARABIC SMALL HIGH MADDA;Mn;230;NSM;;;;;N;;;;; 06E5;ARABIC SMALL WAW;Lm;0;AL;;;;;N;;;;; 06E6;ARABIC SMALL YEH;Lm;0;AL;;;;;N;;;;; 06E7;ARABIC SMALL HIGH YEH;Mn;230;NSM;;;;;N;;;;; 06E8;ARABIC SMALL HIGH NOON;Mn;230;NSM;;;;;N;;;;; 06E9;ARABIC PLACE OF SAJDAH;So;0;ON;;;;;N;;;;; 06EA;ARABIC EMPTY CENTRE LOW STOP;Mn;220;NSM;;;;;N;;;;; 06EB;ARABIC EMPTY CENTRE HIGH STOP;Mn;230;NSM;;;;;N;;;;; 06EC;ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE;Mn;230;NSM;;;;;N;;;;; 06ED;ARABIC SMALL LOW MEEM;Mn;220;NSM;;;;;N;;;;; 06EE;ARABIC LETTER DAL WITH INVERTED V;Lo;0;AL;;;;;N;;;;; 06EF;ARABIC LETTER REH WITH INVERTED V;Lo;0;AL;;;;;N;;;;; 06F0;EXTENDED ARABIC-INDIC DIGIT ZERO;Nd;0;EN;;0;0;0;N;EASTERN ARABIC-INDIC DIGIT ZERO;;;; 06F1;EXTENDED ARABIC-INDIC DIGIT ONE;Nd;0;EN;;1;1;1;N;EASTERN ARABIC-INDIC DIGIT ONE;;;; 06F2;EXTENDED ARABIC-INDIC DIGIT TWO;Nd;0;EN;;2;2;2;N;EASTERN ARABIC-INDIC DIGIT TWO;;;; 06F3;EXTENDED ARABIC-INDIC DIGIT THREE;Nd;0;EN;;3;3;3;N;EASTERN ARABIC-INDIC DIGIT THREE;;;; 06F4;EXTENDED ARABIC-INDIC DIGIT FOUR;Nd;0;EN;;4;4;4;N;EASTERN ARABIC-INDIC DIGIT FOUR;;;; 06F5;EXTENDED ARABIC-INDIC DIGIT FIVE;Nd;0;EN;;5;5;5;N;EASTERN ARABIC-INDIC DIGIT FIVE;;;; 06F6;EXTENDED ARABIC-INDIC DIGIT SIX;Nd;0;EN;;6;6;6;N;EASTERN ARABIC-INDIC DIGIT SIX;;;; 06F7;EXTENDED ARABIC-INDIC DIGIT SEVEN;Nd;0;EN;;7;7;7;N;EASTERN ARABIC-INDIC DIGIT SEVEN;;;; 06F8;EXTENDED ARABIC-INDIC DIGIT EIGHT;Nd;0;EN;;8;8;8;N;EASTERN ARABIC-INDIC DIGIT EIGHT;;;; 06F9;EXTENDED ARABIC-INDIC DIGIT NINE;Nd;0;EN;;9;9;9;N;EASTERN ARABIC-INDIC DIGIT NINE;;;; 06FA;ARABIC LETTER SHEEN WITH DOT BELOW;Lo;0;AL;;;;;N;;;;; 06FB;ARABIC LETTER DAD WITH DOT BELOW;Lo;0;AL;;;;;N;;;;; 06FC;ARABIC LETTER GHAIN WITH DOT BELOW;Lo;0;AL;;;;;N;;;;; 06FD;ARABIC SIGN SINDHI AMPERSAND;So;0;AL;;;;;N;;;;; 06FE;ARABIC SIGN SINDHI POSTPOSITION MEN;So;0;AL;;;;;N;;;;; 06FF;ARABIC LETTER HEH WITH INVERTED V;Lo;0;AL;;;;;N;;;;; 0700;SYRIAC END OF PARAGRAPH;Po;0;AL;;;;;N;;;;; 0701;SYRIAC SUPRALINEAR FULL STOP;Po;0;AL;;;;;N;;;;; 0702;SYRIAC SUBLINEAR FULL STOP;Po;0;AL;;;;;N;;;;; 0703;SYRIAC SUPRALINEAR COLON;Po;0;AL;;;;;N;;;;; 0704;SYRIAC SUBLINEAR COLON;Po;0;AL;;;;;N;;;;; 0705;SYRIAC HORIZONTAL COLON;Po;0;AL;;;;;N;;;;; 0706;SYRIAC COLON SKEWED LEFT;Po;0;AL;;;;;N;;;;; 0707;SYRIAC COLON SKEWED RIGHT;Po;0;AL;;;;;N;;;;; 0708;SYRIAC SUPRALINEAR COLON SKEWED LEFT;Po;0;AL;;;;;N;;;;; 0709;SYRIAC SUBLINEAR COLON SKEWED RIGHT;Po;0;AL;;;;;N;;;;; 070A;SYRIAC CONTRACTION;Po;0;AL;;;;;N;;;;; 070B;SYRIAC HARKLEAN OBELUS;Po;0;AL;;;;;N;;;;; 070C;SYRIAC HARKLEAN METOBELUS;Po;0;AL;;;;;N;;;;; 070D;SYRIAC HARKLEAN ASTERISCUS;Po;0;AL;;;;;N;;;;; 070F;SYRIAC ABBREVIATION MARK;Cf;0;AL;;;;;N;;;;; 0710;SYRIAC LETTER ALAPH;Lo;0;AL;;;;;N;;;;; 0711;SYRIAC LETTER SUPERSCRIPT ALAPH;Mn;36;NSM;;;;;N;;;;; 0712;SYRIAC LETTER BETH;Lo;0;AL;;;;;N;;;;; 0713;SYRIAC LETTER GAMAL;Lo;0;AL;;;;;N;;;;; 0714;SYRIAC LETTER GAMAL GARSHUNI;Lo;0;AL;;;;;N;;;;; 0715;SYRIAC LETTER DALATH;Lo;0;AL;;;;;N;;;;; 0716;SYRIAC LETTER DOTLESS DALATH RISH;Lo;0;AL;;;;;N;;;;; 0717;SYRIAC LETTER HE;Lo;0;AL;;;;;N;;;;; 0718;SYRIAC LETTER WAW;Lo;0;AL;;;;;N;;;;; 0719;SYRIAC LETTER ZAIN;Lo;0;AL;;;;;N;;;;; 071A;SYRIAC LETTER HETH;Lo;0;AL;;;;;N;;;;; 071B;SYRIAC LETTER TETH;Lo;0;AL;;;;;N;;;;; 071C;SYRIAC LETTER TETH GARSHUNI;Lo;0;AL;;;;;N;;;;; 071D;SYRIAC LETTER YUDH;Lo;0;AL;;;;;N;;;;; 071E;SYRIAC LETTER YUDH HE;Lo;0;AL;;;;;N;;;;; 071F;SYRIAC LETTER KAPH;Lo;0;AL;;;;;N;;;;; 0720;SYRIAC LETTER LAMADH;Lo;0;AL;;;;;N;;;;; 0721;SYRIAC LETTER MIM;Lo;0;AL;;;;;N;;;;; 0722;SYRIAC LETTER NUN;Lo;0;AL;;;;;N;;;;; 0723;SYRIAC LETTER SEMKATH;Lo;0;AL;;;;;N;;;;; 0724;SYRIAC LETTER FINAL SEMKATH;Lo;0;AL;;;;;N;;;;; 0725;SYRIAC LETTER E;Lo;0;AL;;;;;N;;;;; 0726;SYRIAC LETTER PE;Lo;0;AL;;;;;N;;;;; 0727;SYRIAC LETTER REVERSED PE;Lo;0;AL;;;;;N;;;;; 0728;SYRIAC LETTER SADHE;Lo;0;AL;;;;;N;;;;; 0729;SYRIAC LETTER QAPH;Lo;0;AL;;;;;N;;;;; 072A;SYRIAC LETTER RISH;Lo;0;AL;;;;;N;;;;; 072B;SYRIAC LETTER SHIN;Lo;0;AL;;;;;N;;;;; 072C;SYRIAC LETTER TAW;Lo;0;AL;;;;;N;;;;; 072D;SYRIAC LETTER PERSIAN BHETH;Lo;0;AL;;;;;N;;;;; 072E;SYRIAC LETTER PERSIAN GHAMAL;Lo;0;AL;;;;;N;;;;; 072F;SYRIAC LETTER PERSIAN DHALATH;Lo;0;AL;;;;;N;;;;; 0730;SYRIAC PTHAHA ABOVE;Mn;230;NSM;;;;;N;;;;; 0731;SYRIAC PTHAHA BELOW;Mn;220;NSM;;;;;N;;;;; 0732;SYRIAC PTHAHA DOTTED;Mn;230;NSM;;;;;N;;;;; 0733;SYRIAC ZQAPHA ABOVE;Mn;230;NSM;;;;;N;;;;; 0734;SYRIAC ZQAPHA BELOW;Mn;220;NSM;;;;;N;;;;; 0735;SYRIAC ZQAPHA DOTTED;Mn;230;NSM;;;;;N;;;;; 0736;SYRIAC RBASA ABOVE;Mn;230;NSM;;;;;N;;;;; 0737;SYRIAC RBASA BELOW;Mn;220;NSM;;;;;N;;;;; 0738;SYRIAC DOTTED ZLAMA HORIZONTAL;Mn;220;NSM;;;;;N;;;;; 0739;SYRIAC DOTTED ZLAMA ANGULAR;Mn;220;NSM;;;;;N;;;;; 073A;SYRIAC HBASA ABOVE;Mn;230;NSM;;;;;N;;;;; 073B;SYRIAC HBASA BELOW;Mn;220;NSM;;;;;N;;;;; 073C;SYRIAC HBASA-ESASA DOTTED;Mn;220;NSM;;;;;N;;;;; 073D;SYRIAC ESASA ABOVE;Mn;230;NSM;;;;;N;;;;; 073E;SYRIAC ESASA BELOW;Mn;220;NSM;;;;;N;;;;; 073F;SYRIAC RWAHA;Mn;230;NSM;;;;;N;;;;; 0740;SYRIAC FEMININE DOT;Mn;230;NSM;;;;;N;;;;; 0741;SYRIAC QUSHSHAYA;Mn;230;NSM;;;;;N;;;;; 0742;SYRIAC RUKKAKHA;Mn;220;NSM;;;;;N;;;;; 0743;SYRIAC TWO VERTICAL DOTS ABOVE;Mn;230;NSM;;;;;N;;;;; 0744;SYRIAC TWO VERTICAL DOTS BELOW;Mn;220;NSM;;;;;N;;;;; 0745;SYRIAC THREE DOTS ABOVE;Mn;230;NSM;;;;;N;;;;; 0746;SYRIAC THREE DOTS BELOW;Mn;220;NSM;;;;;N;;;;; 0747;SYRIAC OBLIQUE LINE ABOVE;Mn;230;NSM;;;;;N;;;;; 0748;SYRIAC OBLIQUE LINE BELOW;Mn;220;NSM;;;;;N;;;;; 0749;SYRIAC MUSIC;Mn;230;NSM;;;;;N;;;;; 074A;SYRIAC BARREKH;Mn;230;NSM;;;;;N;;;;; 074D;SYRIAC LETTER SOGDIAN ZHAIN;Lo;0;AL;;;;;N;;;;; 074E;SYRIAC LETTER SOGDIAN KHAPH;Lo;0;AL;;;;;N;;;;; 074F;SYRIAC LETTER SOGDIAN FE;Lo;0;AL;;;;;N;;;;; 0750;ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW;Lo;0;AL;;;;;N;;;;; 0751;ARABIC LETTER BEH WITH DOT BELOW AND THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 0752;ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;; 0753;ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW AND TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 0754;ARABIC LETTER BEH WITH TWO DOTS BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;;;;; 0755;ARABIC LETTER BEH WITH INVERTED SMALL V BELOW;Lo;0;AL;;;;;N;;;;; 0756;ARABIC LETTER BEH WITH SMALL V;Lo;0;AL;;;;;N;;;;; 0757;ARABIC LETTER HAH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 0758;ARABIC LETTER HAH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;; 0759;ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW AND SMALL TAH;Lo;0;AL;;;;;N;;;;; 075A;ARABIC LETTER DAL WITH INVERTED SMALL V BELOW;Lo;0;AL;;;;;N;;;;; 075B;ARABIC LETTER REH WITH STROKE;Lo;0;AL;;;;;N;;;;; 075C;ARABIC LETTER SEEN WITH FOUR DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 075D;ARABIC LETTER AIN WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 075E;ARABIC LETTER AIN WITH THREE DOTS POINTING DOWNWARDS ABOVE;Lo;0;AL;;;;;N;;;;; 075F;ARABIC LETTER AIN WITH TWO DOTS VERTICALLY ABOVE;Lo;0;AL;;;;;N;;;;; 0760;ARABIC LETTER FEH WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;; 0761;ARABIC LETTER FEH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;; 0762;ARABIC LETTER KEHEH WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;; 0763;ARABIC LETTER KEHEH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 0764;ARABIC LETTER KEHEH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;; 0765;ARABIC LETTER MEEM WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;; 0766;ARABIC LETTER MEEM WITH DOT BELOW;Lo;0;AL;;;;;N;;;;; 0767;ARABIC LETTER NOON WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;; 0768;ARABIC LETTER NOON WITH SMALL TAH;Lo;0;AL;;;;;N;;;;; 0769;ARABIC LETTER NOON WITH SMALL V;Lo;0;AL;;;;;N;;;;; 076A;ARABIC LETTER LAM WITH BAR;Lo;0;AL;;;;;N;;;;; 076B;ARABIC LETTER REH WITH TWO DOTS VERTICALLY ABOVE;Lo;0;AL;;;;;N;;;;; 076C;ARABIC LETTER REH WITH HAMZA ABOVE;Lo;0;AL;;;;;N;;;;; 076D;ARABIC LETTER SEEN WITH TWO DOTS VERTICALLY ABOVE;Lo;0;AL;;;;;N;;;;; 076E;ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH BELOW;Lo;0;AL;;;;;N;;;;; 076F;ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH AND TWO DOTS;Lo;0;AL;;;;;N;;;;; 0770;ARABIC LETTER SEEN WITH SMALL ARABIC LETTER TAH AND TWO DOTS;Lo;0;AL;;;;;N;;;;; 0771;ARABIC LETTER REH WITH SMALL ARABIC LETTER TAH AND TWO DOTS;Lo;0;AL;;;;;N;;;;; 0772;ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH ABOVE;Lo;0;AL;;;;;N;;;;; 0773;ARABIC LETTER ALEF WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE;Lo;0;AL;;;;;N;;;;; 0774;ARABIC LETTER ALEF WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE;Lo;0;AL;;;;;N;;;;; 0775;ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE;Lo;0;AL;;;;;N;;;;; 0776;ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE;Lo;0;AL;;;;;N;;;;; 0777;ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT FOUR BELOW;Lo;0;AL;;;;;N;;;;; 0778;ARABIC LETTER WAW WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE;Lo;0;AL;;;;;N;;;;; 0779;ARABIC LETTER WAW WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE;Lo;0;AL;;;;;N;;;;; 077A;ARABIC LETTER YEH BARREE WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE;Lo;0;AL;;;;;N;;;;; 077B;ARABIC LETTER YEH BARREE WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE;Lo;0;AL;;;;;N;;;;; 077C;ARABIC LETTER HAH WITH EXTENDED ARABIC-INDIC DIGIT FOUR BELOW;Lo;0;AL;;;;;N;;;;; 077D;ARABIC LETTER SEEN WITH EXTENDED ARABIC-INDIC DIGIT FOUR ABOVE;Lo;0;AL;;;;;N;;;;; 077E;ARABIC LETTER SEEN WITH INVERTED V;Lo;0;AL;;;;;N;;;;; 077F;ARABIC LETTER KAF WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 0780;THAANA LETTER HAA;Lo;0;AL;;;;;N;;;;; 0781;THAANA LETTER SHAVIYANI;Lo;0;AL;;;;;N;;;;; 0782;THAANA LETTER NOONU;Lo;0;AL;;;;;N;;;;; 0783;THAANA LETTER RAA;Lo;0;AL;;;;;N;;;;; 0784;THAANA LETTER BAA;Lo;0;AL;;;;;N;;;;; 0785;THAANA LETTER LHAVIYANI;Lo;0;AL;;;;;N;;;;; 0786;THAANA LETTER KAAFU;Lo;0;AL;;;;;N;;;;; 0787;THAANA LETTER ALIFU;Lo;0;AL;;;;;N;;;;; 0788;THAANA LETTER VAAVU;Lo;0;AL;;;;;N;;;;; 0789;THAANA LETTER MEEMU;Lo;0;AL;;;;;N;;;;; 078A;THAANA LETTER FAAFU;Lo;0;AL;;;;;N;;;;; 078B;THAANA LETTER DHAALU;Lo;0;AL;;;;;N;;;;; 078C;THAANA LETTER THAA;Lo;0;AL;;;;;N;;;;; 078D;THAANA LETTER LAAMU;Lo;0;AL;;;;;N;;;;; 078E;THAANA LETTER GAAFU;Lo;0;AL;;;;;N;;;;; 078F;THAANA LETTER GNAVIYANI;Lo;0;AL;;;;;N;;;;; 0790;THAANA LETTER SEENU;Lo;0;AL;;;;;N;;;;; 0791;THAANA LETTER DAVIYANI;Lo;0;AL;;;;;N;;;;; 0792;THAANA LETTER ZAVIYANI;Lo;0;AL;;;;;N;;;;; 0793;THAANA LETTER TAVIYANI;Lo;0;AL;;;;;N;;;;; 0794;THAANA LETTER YAA;Lo;0;AL;;;;;N;;;;; 0795;THAANA LETTER PAVIYANI;Lo;0;AL;;;;;N;;;;; 0796;THAANA LETTER JAVIYANI;Lo;0;AL;;;;;N;;;;; 0797;THAANA LETTER CHAVIYANI;Lo;0;AL;;;;;N;;;;; 0798;THAANA LETTER TTAA;Lo;0;AL;;;;;N;;;;; 0799;THAANA LETTER HHAA;Lo;0;AL;;;;;N;;;;; 079A;THAANA LETTER KHAA;Lo;0;AL;;;;;N;;;;; 079B;THAANA LETTER THAALU;Lo;0;AL;;;;;N;;;;; 079C;THAANA LETTER ZAA;Lo;0;AL;;;;;N;;;;; 079D;THAANA LETTER SHEENU;Lo;0;AL;;;;;N;;;;; 079E;THAANA LETTER SAADHU;Lo;0;AL;;;;;N;;;;; 079F;THAANA LETTER DAADHU;Lo;0;AL;;;;;N;;;;; 07A0;THAANA LETTER TO;Lo;0;AL;;;;;N;;;;; 07A1;THAANA LETTER ZO;Lo;0;AL;;;;;N;;;;; 07A2;THAANA LETTER AINU;Lo;0;AL;;;;;N;;;;; 07A3;THAANA LETTER GHAINU;Lo;0;AL;;;;;N;;;;; 07A4;THAANA LETTER QAAFU;Lo;0;AL;;;;;N;;;;; 07A5;THAANA LETTER WAAVU;Lo;0;AL;;;;;N;;;;; 07A6;THAANA ABAFILI;Mn;0;NSM;;;;;N;;;;; 07A7;THAANA AABAAFILI;Mn;0;NSM;;;;;N;;;;; 07A8;THAANA IBIFILI;Mn;0;NSM;;;;;N;;;;; 07A9;THAANA EEBEEFILI;Mn;0;NSM;;;;;N;;;;; 07AA;THAANA UBUFILI;Mn;0;NSM;;;;;N;;;;; 07AB;THAANA OOBOOFILI;Mn;0;NSM;;;;;N;;;;; 07AC;THAANA EBEFILI;Mn;0;NSM;;;;;N;;;;; 07AD;THAANA EYBEYFILI;Mn;0;NSM;;;;;N;;;;; 07AE;THAANA OBOFILI;Mn;0;NSM;;;;;N;;;;; 07AF;THAANA OABOAFILI;Mn;0;NSM;;;;;N;;;;; 07B0;THAANA SUKUN;Mn;0;NSM;;;;;N;;;;; 07B1;THAANA LETTER NAA;Lo;0;AL;;;;;N;;;;; 07C0;NKO DIGIT ZERO;Nd;0;R;;0;0;0;N;;;;; 07C1;NKO DIGIT ONE;Nd;0;R;;1;1;1;N;;;;; 07C2;NKO DIGIT TWO;Nd;0;R;;2;2;2;N;;;;; 07C3;NKO DIGIT THREE;Nd;0;R;;3;3;3;N;;;;; 07C4;NKO DIGIT FOUR;Nd;0;R;;4;4;4;N;;;;; 07C5;NKO DIGIT FIVE;Nd;0;R;;5;5;5;N;;;;; 07C6;NKO DIGIT SIX;Nd;0;R;;6;6;6;N;;;;; 07C7;NKO DIGIT SEVEN;Nd;0;R;;7;7;7;N;;;;; 07C8;NKO DIGIT EIGHT;Nd;0;R;;8;8;8;N;;;;; 07C9;NKO DIGIT NINE;Nd;0;R;;9;9;9;N;;;;; 07CA;NKO LETTER A;Lo;0;R;;;;;N;;;;; 07CB;NKO LETTER EE;Lo;0;R;;;;;N;;;;; 07CC;NKO LETTER I;Lo;0;R;;;;;N;;;;; 07CD;NKO LETTER E;Lo;0;R;;;;;N;;;;; 07CE;NKO LETTER U;Lo;0;R;;;;;N;;;;; 07CF;NKO LETTER OO;Lo;0;R;;;;;N;;;;; 07D0;NKO LETTER O;Lo;0;R;;;;;N;;;;; 07D1;NKO LETTER DAGBASINNA;Lo;0;R;;;;;N;;;;; 07D2;NKO LETTER N;Lo;0;R;;;;;N;;;;; 07D3;NKO LETTER BA;Lo;0;R;;;;;N;;;;; 07D4;NKO LETTER PA;Lo;0;R;;;;;N;;;;; 07D5;NKO LETTER TA;Lo;0;R;;;;;N;;;;; 07D6;NKO LETTER JA;Lo;0;R;;;;;N;;;;; 07D7;NKO LETTER CHA;Lo;0;R;;;;;N;;;;; 07D8;NKO LETTER DA;Lo;0;R;;;;;N;;;;; 07D9;NKO LETTER RA;Lo;0;R;;;;;N;;;;; 07DA;NKO LETTER RRA;Lo;0;R;;;;;N;;;;; 07DB;NKO LETTER SA;Lo;0;R;;;;;N;;;;; 07DC;NKO LETTER GBA;Lo;0;R;;;;;N;;;;; 07DD;NKO LETTER FA;Lo;0;R;;;;;N;;;;; 07DE;NKO LETTER KA;Lo;0;R;;;;;N;;;;; 07DF;NKO LETTER LA;Lo;0;R;;;;;N;;;;; 07E0;NKO LETTER NA WOLOSO;Lo;0;R;;;;;N;;;;; 07E1;NKO LETTER MA;Lo;0;R;;;;;N;;;;; 07E2;NKO LETTER NYA;Lo;0;R;;;;;N;;;;; 07E3;NKO LETTER NA;Lo;0;R;;;;;N;;;;; 07E4;NKO LETTER HA;Lo;0;R;;;;;N;;;;; 07E5;NKO LETTER WA;Lo;0;R;;;;;N;;;;; 07E6;NKO LETTER YA;Lo;0;R;;;;;N;;;;; 07E7;NKO LETTER NYA WOLOSO;Lo;0;R;;;;;N;;;;; 07E8;NKO LETTER JONA JA;Lo;0;R;;;;;N;;;;; 07E9;NKO LETTER JONA CHA;Lo;0;R;;;;;N;;;;; 07EA;NKO LETTER JONA RA;Lo;0;R;;;;;N;;;;; 07EB;NKO COMBINING SHORT HIGH TONE;Mn;230;NSM;;;;;N;;;;; 07EC;NKO COMBINING SHORT LOW TONE;Mn;230;NSM;;;;;N;;;;; 07ED;NKO COMBINING SHORT RISING TONE;Mn;230;NSM;;;;;N;;;;; 07EE;NKO COMBINING LONG DESCENDING TONE;Mn;230;NSM;;;;;N;;;;; 07EF;NKO COMBINING LONG HIGH TONE;Mn;230;NSM;;;;;N;;;;; 07F0;NKO COMBINING LONG LOW TONE;Mn;230;NSM;;;;;N;;;;; 07F1;NKO COMBINING LONG RISING TONE;Mn;230;NSM;;;;;N;;;;; 07F2;NKO COMBINING NASALIZATION MARK;Mn;220;NSM;;;;;N;;;;; 07F3;NKO COMBINING DOUBLE DOT ABOVE;Mn;230;NSM;;;;;N;;;;; 07F4;NKO HIGH TONE APOSTROPHE;Lm;0;R;;;;;N;;;;; 07F5;NKO LOW TONE APOSTROPHE;Lm;0;R;;;;;N;;;;; 07F6;NKO SYMBOL OO DENNEN;So;0;ON;;;;;N;;;;; 07F7;NKO SYMBOL GBAKURUNEN;Po;0;ON;;;;;N;;;;; 07F8;NKO COMMA;Po;0;ON;;;;;N;;;;; 07F9;NKO EXCLAMATION MARK;Po;0;ON;;;;;N;;;;; 07FA;NKO LAJANYALAN;Lm;0;R;;;;;N;;;;; 07FD;NKO DANTAYALAN;Mn;220;NSM;;;;;N;;;;; 07FE;NKO DOROME SIGN;Sc;0;R;;;;;N;;;;; 07FF;NKO TAMAN SIGN;Sc;0;R;;;;;N;;;;; 0800;SAMARITAN LETTER ALAF;Lo;0;R;;;;;N;;;;; 0801;SAMARITAN LETTER BIT;Lo;0;R;;;;;N;;;;; 0802;SAMARITAN LETTER GAMAN;Lo;0;R;;;;;N;;;;; 0803;SAMARITAN LETTER DALAT;Lo;0;R;;;;;N;;;;; 0804;SAMARITAN LETTER IY;Lo;0;R;;;;;N;;;;; 0805;SAMARITAN LETTER BAA;Lo;0;R;;;;;N;;;;; 0806;SAMARITAN LETTER ZEN;Lo;0;R;;;;;N;;;;; 0807;SAMARITAN LETTER IT;Lo;0;R;;;;;N;;;;; 0808;SAMARITAN LETTER TIT;Lo;0;R;;;;;N;;;;; 0809;SAMARITAN LETTER YUT;Lo;0;R;;;;;N;;;;; 080A;SAMARITAN LETTER KAAF;Lo;0;R;;;;;N;;;;; 080B;SAMARITAN LETTER LABAT;Lo;0;R;;;;;N;;;;; 080C;SAMARITAN LETTER MIM;Lo;0;R;;;;;N;;;;; 080D;SAMARITAN LETTER NUN;Lo;0;R;;;;;N;;;;; 080E;SAMARITAN LETTER SINGAAT;Lo;0;R;;;;;N;;;;; 080F;SAMARITAN LETTER IN;Lo;0;R;;;;;N;;;;; 0810;SAMARITAN LETTER FI;Lo;0;R;;;;;N;;;;; 0811;SAMARITAN LETTER TSAADIY;Lo;0;R;;;;;N;;;;; 0812;SAMARITAN LETTER QUF;Lo;0;R;;;;;N;;;;; 0813;SAMARITAN LETTER RISH;Lo;0;R;;;;;N;;;;; 0814;SAMARITAN LETTER SHAN;Lo;0;R;;;;;N;;;;; 0815;SAMARITAN LETTER TAAF;Lo;0;R;;;;;N;;;;; 0816;SAMARITAN MARK IN;Mn;230;NSM;;;;;N;;;;; 0817;SAMARITAN MARK IN-ALAF;Mn;230;NSM;;;;;N;;;;; 0818;SAMARITAN MARK OCCLUSION;Mn;230;NSM;;;;;N;;;;; 0819;SAMARITAN MARK DAGESH;Mn;230;NSM;;;;;N;;;;; 081A;SAMARITAN MODIFIER LETTER EPENTHETIC YUT;Lm;0;R;;;;;N;;;;; 081B;SAMARITAN MARK EPENTHETIC YUT;Mn;230;NSM;;;;;N;;;;; 081C;SAMARITAN VOWEL SIGN LONG E;Mn;230;NSM;;;;;N;;;;; 081D;SAMARITAN VOWEL SIGN E;Mn;230;NSM;;;;;N;;;;; 081E;SAMARITAN VOWEL SIGN OVERLONG AA;Mn;230;NSM;;;;;N;;;;; 081F;SAMARITAN VOWEL SIGN LONG AA;Mn;230;NSM;;;;;N;;;;; 0820;SAMARITAN VOWEL SIGN AA;Mn;230;NSM;;;;;N;;;;; 0821;SAMARITAN VOWEL SIGN OVERLONG A;Mn;230;NSM;;;;;N;;;;; 0822;SAMARITAN VOWEL SIGN LONG A;Mn;230;NSM;;;;;N;;;;; 0823;SAMARITAN VOWEL SIGN A;Mn;230;NSM;;;;;N;;;;; 0824;SAMARITAN MODIFIER LETTER SHORT A;Lm;0;R;;;;;N;;;;; 0825;SAMARITAN VOWEL SIGN SHORT A;Mn;230;NSM;;;;;N;;;;; 0826;SAMARITAN VOWEL SIGN LONG U;Mn;230;NSM;;;;;N;;;;; 0827;SAMARITAN VOWEL SIGN U;Mn;230;NSM;;;;;N;;;;; 0828;SAMARITAN MODIFIER LETTER I;Lm;0;R;;;;;N;;;;; 0829;SAMARITAN VOWEL SIGN LONG I;Mn;230;NSM;;;;;N;;;;; 082A;SAMARITAN VOWEL SIGN I;Mn;230;NSM;;;;;N;;;;; 082B;SAMARITAN VOWEL SIGN O;Mn;230;NSM;;;;;N;;;;; 082C;SAMARITAN VOWEL SIGN SUKUN;Mn;230;NSM;;;;;N;;;;; 082D;SAMARITAN MARK NEQUDAA;Mn;230;NSM;;;;;N;;;;; 0830;SAMARITAN PUNCTUATION NEQUDAA;Po;0;R;;;;;N;;;;; 0831;SAMARITAN PUNCTUATION AFSAAQ;Po;0;R;;;;;N;;;;; 0832;SAMARITAN PUNCTUATION ANGED;Po;0;R;;;;;N;;;;; 0833;SAMARITAN PUNCTUATION BAU;Po;0;R;;;;;N;;;;; 0834;SAMARITAN PUNCTUATION ATMAAU;Po;0;R;;;;;N;;;;; 0835;SAMARITAN PUNCTUATION SHIYYAALAA;Po;0;R;;;;;N;;;;; 0836;SAMARITAN ABBREVIATION MARK;Po;0;R;;;;;N;;;;; 0837;SAMARITAN PUNCTUATION MELODIC QITSA;Po;0;R;;;;;N;;;;; 0838;SAMARITAN PUNCTUATION ZIQAA;Po;0;R;;;;;N;;;;; 0839;SAMARITAN PUNCTUATION QITSA;Po;0;R;;;;;N;;;;; 083A;SAMARITAN PUNCTUATION ZAEF;Po;0;R;;;;;N;;;;; 083B;SAMARITAN PUNCTUATION TURU;Po;0;R;;;;;N;;;;; 083C;SAMARITAN PUNCTUATION ARKAANU;Po;0;R;;;;;N;;;;; 083D;SAMARITAN PUNCTUATION SOF MASHFAAT;Po;0;R;;;;;N;;;;; 083E;SAMARITAN PUNCTUATION ANNAAU;Po;0;R;;;;;N;;;;; 0840;MANDAIC LETTER HALQA;Lo;0;R;;;;;N;;;;; 0841;MANDAIC LETTER AB;Lo;0;R;;;;;N;;;;; 0842;MANDAIC LETTER AG;Lo;0;R;;;;;N;;;;; 0843;MANDAIC LETTER AD;Lo;0;R;;;;;N;;;;; 0844;MANDAIC LETTER AH;Lo;0;R;;;;;N;;;;; 0845;MANDAIC LETTER USHENNA;Lo;0;R;;;;;N;;;;; 0846;MANDAIC LETTER AZ;Lo;0;R;;;;;N;;;;; 0847;MANDAIC LETTER IT;Lo;0;R;;;;;N;;;;; 0848;MANDAIC LETTER ATT;Lo;0;R;;;;;N;;;;; 0849;MANDAIC LETTER AKSA;Lo;0;R;;;;;N;;;;; 084A;MANDAIC LETTER AK;Lo;0;R;;;;;N;;;;; 084B;MANDAIC LETTER AL;Lo;0;R;;;;;N;;;;; 084C;MANDAIC LETTER AM;Lo;0;R;;;;;N;;;;; 084D;MANDAIC LETTER AN;Lo;0;R;;;;;N;;;;; 084E;MANDAIC LETTER AS;Lo;0;R;;;;;N;;;;; 084F;MANDAIC LETTER IN;Lo;0;R;;;;;N;;;;; 0850;MANDAIC LETTER AP;Lo;0;R;;;;;N;;;;; 0851;MANDAIC LETTER ASZ;Lo;0;R;;;;;N;;;;; 0852;MANDAIC LETTER AQ;Lo;0;R;;;;;N;;;;; 0853;MANDAIC LETTER AR;Lo;0;R;;;;;N;;;;; 0854;MANDAIC LETTER ASH;Lo;0;R;;;;;N;;;;; 0855;MANDAIC LETTER AT;Lo;0;R;;;;;N;;;;; 0856;MANDAIC LETTER DUSHENNA;Lo;0;R;;;;;N;;;;; 0857;MANDAIC LETTER KAD;Lo;0;R;;;;;N;;;;; 0858;MANDAIC LETTER AIN;Lo;0;R;;;;;N;;;;; 0859;MANDAIC AFFRICATION MARK;Mn;220;NSM;;;;;N;;;;; 085A;MANDAIC VOCALIZATION MARK;Mn;220;NSM;;;;;N;;;;; 085B;MANDAIC GEMINATION MARK;Mn;220;NSM;;;;;N;;;;; 085E;MANDAIC PUNCTUATION;Po;0;R;;;;;N;;;;; 0860;SYRIAC LETTER MALAYALAM NGA;Lo;0;AL;;;;;N;;;;; 0861;SYRIAC LETTER MALAYALAM JA;Lo;0;AL;;;;;N;;;;; 0862;SYRIAC LETTER MALAYALAM NYA;Lo;0;AL;;;;;N;;;;; 0863;SYRIAC LETTER MALAYALAM TTA;Lo;0;AL;;;;;N;;;;; 0864;SYRIAC LETTER MALAYALAM NNA;Lo;0;AL;;;;;N;;;;; 0865;SYRIAC LETTER MALAYALAM NNNA;Lo;0;AL;;;;;N;;;;; 0866;SYRIAC LETTER MALAYALAM BHA;Lo;0;AL;;;;;N;;;;; 0867;SYRIAC LETTER MALAYALAM RA;Lo;0;AL;;;;;N;;;;; 0868;SYRIAC LETTER MALAYALAM LLA;Lo;0;AL;;;;;N;;;;; 0869;SYRIAC LETTER MALAYALAM LLLA;Lo;0;AL;;;;;N;;;;; 086A;SYRIAC LETTER MALAYALAM SSA;Lo;0;AL;;;;;N;;;;; 0870;ARABIC LETTER ALEF WITH ATTACHED FATHA;Lo;0;AL;;;;;N;;;;; 0871;ARABIC LETTER ALEF WITH ATTACHED TOP RIGHT FATHA;Lo;0;AL;;;;;N;;;;; 0872;ARABIC LETTER ALEF WITH RIGHT MIDDLE STROKE;Lo;0;AL;;;;;N;;;;; 0873;ARABIC LETTER ALEF WITH LEFT MIDDLE STROKE;Lo;0;AL;;;;;N;;;;; 0874;ARABIC LETTER ALEF WITH ATTACHED KASRA;Lo;0;AL;;;;;N;;;;; 0875;ARABIC LETTER ALEF WITH ATTACHED BOTTOM RIGHT KASRA;Lo;0;AL;;;;;N;;;;; 0876;ARABIC LETTER ALEF WITH ATTACHED ROUND DOT ABOVE;Lo;0;AL;;;;;N;;;;; 0877;ARABIC LETTER ALEF WITH ATTACHED RIGHT ROUND DOT;Lo;0;AL;;;;;N;;;;; 0878;ARABIC LETTER ALEF WITH ATTACHED LEFT ROUND DOT;Lo;0;AL;;;;;N;;;;; 0879;ARABIC LETTER ALEF WITH ATTACHED ROUND DOT BELOW;Lo;0;AL;;;;;N;;;;; 087A;ARABIC LETTER ALEF WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;; 087B;ARABIC LETTER ALEF WITH ATTACHED TOP RIGHT FATHA AND DOT ABOVE;Lo;0;AL;;;;;N;;;;; 087C;ARABIC LETTER ALEF WITH RIGHT MIDDLE STROKE AND DOT ABOVE;Lo;0;AL;;;;;N;;;;; 087D;ARABIC LETTER ALEF WITH ATTACHED BOTTOM RIGHT KASRA AND DOT ABOVE;Lo;0;AL;;;;;N;;;;; 087E;ARABIC LETTER ALEF WITH ATTACHED TOP RIGHT FATHA AND LEFT RING;Lo;0;AL;;;;;N;;;;; 087F;ARABIC LETTER ALEF WITH RIGHT MIDDLE STROKE AND LEFT RING;Lo;0;AL;;;;;N;;;;; 0880;ARABIC LETTER ALEF WITH ATTACHED BOTTOM RIGHT KASRA AND LEFT RING;Lo;0;AL;;;;;N;;;;; 0881;ARABIC LETTER ALEF WITH ATTACHED RIGHT HAMZA;Lo;0;AL;;;;;N;;;;; 0882;ARABIC LETTER ALEF WITH ATTACHED LEFT HAMZA;Lo;0;AL;;;;;N;;;;; 0883;ARABIC TATWEEL WITH OVERSTRUCK HAMZA;Lo;0;AL;;;;;N;;;;; 0884;ARABIC TATWEEL WITH OVERSTRUCK WAW;Lo;0;AL;;;;;N;;;;; 0885;ARABIC TATWEEL WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;; 0886;ARABIC LETTER THIN YEH;Lo;0;AL;;;;;N;;;;; 0887;ARABIC BASELINE ROUND DOT;Lo;0;AL;;;;;N;;;;; 0888;ARABIC RAISED ROUND DOT;Sk;0;AL;;;;;N;;;;; 0889;ARABIC LETTER NOON WITH INVERTED SMALL V;Lo;0;AL;;;;;N;;;;; 088A;ARABIC LETTER HAH WITH INVERTED SMALL V BELOW;Lo;0;AL;;;;;N;;;;; 088B;ARABIC LETTER TAH WITH DOT BELOW;Lo;0;AL;;;;;N;;;;; 088C;ARABIC LETTER TAH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;; 088D;ARABIC LETTER KEHEH WITH TWO DOTS VERTICALLY BELOW;Lo;0;AL;;;;;N;;;;; 088E;ARABIC VERTICAL TAIL;Lo;0;AL;;;;;N;;;;; 0890;ARABIC POUND MARK ABOVE;Cf;0;AN;;;;;N;;;;; 0891;ARABIC PIASTRE MARK ABOVE;Cf;0;AN;;;;;N;;;;; 0898;ARABIC SMALL HIGH WORD AL-JUZ;Mn;230;NSM;;;;;N;;;;; 0899;ARABIC SMALL LOW WORD ISHMAAM;Mn;220;NSM;;;;;N;;;;; 089A;ARABIC SMALL LOW WORD IMAALA;Mn;220;NSM;;;;;N;;;;; 089B;ARABIC SMALL LOW WORD TASHEEL;Mn;220;NSM;;;;;N;;;;; 089C;ARABIC MADDA WAAJIB;Mn;230;NSM;;;;;N;;;;; 089D;ARABIC SUPERSCRIPT ALEF MOKHASSAS;Mn;230;NSM;;;;;N;;;;; 089E;ARABIC DOUBLED MADDA;Mn;230;NSM;;;;;N;;;;; 089F;ARABIC HALF MADDA OVER MADDA;Mn;230;NSM;;;;;N;;;;; 08A0;ARABIC LETTER BEH WITH SMALL V BELOW;Lo;0;AL;;;;;N;;;;; 08A1;ARABIC LETTER BEH WITH HAMZA ABOVE;Lo;0;AL;;;;;N;;;;; 08A2;ARABIC LETTER JEEM WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 08A3;ARABIC LETTER TAH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 08A4;ARABIC LETTER FEH WITH DOT BELOW AND THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 08A5;ARABIC LETTER QAF WITH DOT BELOW;Lo;0;AL;;;;;N;;;;; 08A6;ARABIC LETTER LAM WITH DOUBLE BAR;Lo;0;AL;;;;;N;;;;; 08A7;ARABIC LETTER MEEM WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 08A8;ARABIC LETTER YEH WITH TWO DOTS BELOW AND HAMZA ABOVE;Lo;0;AL;;;;;N;;;;; 08A9;ARABIC LETTER YEH WITH TWO DOTS BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;;;;; 08AA;ARABIC LETTER REH WITH LOOP;Lo;0;AL;;;;;N;;;;; 08AB;ARABIC LETTER WAW WITH DOT WITHIN;Lo;0;AL;;;;;N;;;;; 08AC;ARABIC LETTER ROHINGYA YEH;Lo;0;AL;;;;;N;;;;; 08AD;ARABIC LETTER LOW ALEF;Lo;0;AL;;;;;N;;;;; 08AE;ARABIC LETTER DAL WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;; 08AF;ARABIC LETTER SAD WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;; 08B0;ARABIC LETTER GAF WITH INVERTED STROKE;Lo;0;AL;;;;;N;;;;; 08B1;ARABIC LETTER STRAIGHT WAW;Lo;0;AL;;;;;N;;;;; 08B2;ARABIC LETTER ZAIN WITH INVERTED V ABOVE;Lo;0;AL;;;;;N;;;;; 08B3;ARABIC LETTER AIN WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;; 08B4;ARABIC LETTER KAF WITH DOT BELOW;Lo;0;AL;;;;;N;;;;; 08B5;ARABIC LETTER QAF WITH DOT BELOW AND NO DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 08B6;ARABIC LETTER BEH WITH SMALL MEEM ABOVE;Lo;0;AL;;;;;N;;;;; 08B7;ARABIC LETTER PEH WITH SMALL MEEM ABOVE;Lo;0;AL;;;;;N;;;;; 08B8;ARABIC LETTER TEH WITH SMALL TEH ABOVE;Lo;0;AL;;;;;N;;;;; 08B9;ARABIC LETTER REH WITH SMALL NOON ABOVE;Lo;0;AL;;;;;N;;;;; 08BA;ARABIC LETTER YEH WITH TWO DOTS BELOW AND SMALL NOON ABOVE;Lo;0;AL;;;;;N;;;;; 08BB;ARABIC LETTER AFRICAN FEH;Lo;0;AL;;;;;N;;;;; 08BC;ARABIC LETTER AFRICAN QAF;Lo;0;AL;;;;;N;;;;; 08BD;ARABIC LETTER AFRICAN NOON;Lo;0;AL;;;;;N;;;;; 08BE;ARABIC LETTER PEH WITH SMALL V;Lo;0;AL;;;;;N;;;;; 08BF;ARABIC LETTER TEH WITH SMALL V;Lo;0;AL;;;;;N;;;;; 08C0;ARABIC LETTER TTEH WITH SMALL V;Lo;0;AL;;;;;N;;;;; 08C1;ARABIC LETTER TCHEH WITH SMALL V;Lo;0;AL;;;;;N;;;;; 08C2;ARABIC LETTER KEHEH WITH SMALL V;Lo;0;AL;;;;;N;;;;; 08C3;ARABIC LETTER GHAIN WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 08C4;ARABIC LETTER AFRICAN QAF WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 08C5;ARABIC LETTER JEEM WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 08C6;ARABIC LETTER JEEM WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;; 08C7;ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE;Lo;0;AL;;;;;N;;;;; 08C8;ARABIC LETTER GRAF;Lo;0;AL;;;;;N;;;;; 08C9;ARABIC SMALL FARSI YEH;Lm;0;AL;;;;;N;;;;; 08CA;ARABIC SMALL HIGH FARSI YEH;Mn;230;NSM;;;;;N;;;;; 08CB;ARABIC SMALL HIGH YEH BARREE WITH TWO DOTS BELOW;Mn;230;NSM;;;;;N;;;;; 08CC;ARABIC SMALL HIGH WORD SAH;Mn;230;NSM;;;;;N;;;;; 08CD;ARABIC SMALL HIGH ZAH;Mn;230;NSM;;;;;N;;;;; 08CE;ARABIC LARGE ROUND DOT ABOVE;Mn;230;NSM;;;;;N;;;;; 08CF;ARABIC LARGE ROUND DOT BELOW;Mn;220;NSM;;;;;N;;;;; 08D0;ARABIC SUKUN BELOW;Mn;220;NSM;;;;;N;;;;; 08D1;ARABIC LARGE CIRCLE BELOW;Mn;220;NSM;;;;;N;;;;; 08D2;ARABIC LARGE ROUND DOT INSIDE CIRCLE BELOW;Mn;220;NSM;;;;;N;;;;; 08D3;ARABIC SMALL LOW WAW;Mn;220;NSM;;;;;N;;;;; 08D4;ARABIC SMALL HIGH WORD AR-RUB;Mn;230;NSM;;;;;N;;;;; 08D5;ARABIC SMALL HIGH SAD;Mn;230;NSM;;;;;N;;;;; 08D6;ARABIC SMALL HIGH AIN;Mn;230;NSM;;;;;N;;;;; 08D7;ARABIC SMALL HIGH QAF;Mn;230;NSM;;;;;N;;;;; 08D8;ARABIC SMALL HIGH NOON WITH KASRA;Mn;230;NSM;;;;;N;;;;; 08D9;ARABIC SMALL LOW NOON WITH KASRA;Mn;230;NSM;;;;;N;;;;; 08DA;ARABIC SMALL HIGH WORD ATH-THALATHA;Mn;230;NSM;;;;;N;;;;; 08DB;ARABIC SMALL HIGH WORD AS-SAJDA;Mn;230;NSM;;;;;N;;;;; 08DC;ARABIC SMALL HIGH WORD AN-NISF;Mn;230;NSM;;;;;N;;;;; 08DD;ARABIC SMALL HIGH WORD SAKTA;Mn;230;NSM;;;;;N;;;;; 08DE;ARABIC SMALL HIGH WORD QIF;Mn;230;NSM;;;;;N;;;;; 08DF;ARABIC SMALL HIGH WORD WAQFA;Mn;230;NSM;;;;;N;;;;; 08E0;ARABIC SMALL HIGH FOOTNOTE MARKER;Mn;230;NSM;;;;;N;;;;; 08E1;ARABIC SMALL HIGH SIGN SAFHA;Mn;230;NSM;;;;;N;;;;; 08E2;ARABIC DISPUTED END OF AYAH;Cf;0;AN;;;;;N;;;;; 08E3;ARABIC TURNED DAMMA BELOW;Mn;220;NSM;;;;;N;;;;; 08E4;ARABIC CURLY FATHA;Mn;230;NSM;;;;;N;;;;; 08E5;ARABIC CURLY DAMMA;Mn;230;NSM;;;;;N;;;;; 08E6;ARABIC CURLY KASRA;Mn;220;NSM;;;;;N;;;;; 08E7;ARABIC CURLY FATHATAN;Mn;230;NSM;;;;;N;;;;; 08E8;ARABIC CURLY DAMMATAN;Mn;230;NSM;;;;;N;;;;; 08E9;ARABIC CURLY KASRATAN;Mn;220;NSM;;;;;N;;;;; 08EA;ARABIC TONE ONE DOT ABOVE;Mn;230;NSM;;;;;N;;;;; 08EB;ARABIC TONE TWO DOTS ABOVE;Mn;230;NSM;;;;;N;;;;; 08EC;ARABIC TONE LOOP ABOVE;Mn;230;NSM;;;;;N;;;;; 08ED;ARABIC TONE ONE DOT BELOW;Mn;220;NSM;;;;;N;;;;; 08EE;ARABIC TONE TWO DOTS BELOW;Mn;220;NSM;;;;;N;;;;; 08EF;ARABIC TONE LOOP BELOW;Mn;220;NSM;;;;;N;;;;; 08F0;ARABIC OPEN FATHATAN;Mn;27;NSM;;;;;N;;;;; 08F1;ARABIC OPEN DAMMATAN;Mn;28;NSM;;;;;N;;;;; 08F2;ARABIC OPEN KASRATAN;Mn;29;NSM;;;;;N;;;;; 08F3;ARABIC SMALL HIGH WAW;Mn;230;NSM;;;;;N;;;;; 08F4;ARABIC FATHA WITH RING;Mn;230;NSM;;;;;N;;;;; 08F5;ARABIC FATHA WITH DOT ABOVE;Mn;230;NSM;;;;;N;;;;; 08F6;ARABIC KASRA WITH DOT BELOW;Mn;220;NSM;;;;;N;;;;; 08F7;ARABIC LEFT ARROWHEAD ABOVE;Mn;230;NSM;;;;;N;;;;; 08F8;ARABIC RIGHT ARROWHEAD ABOVE;Mn;230;NSM;;;;;N;;;;; 08F9;ARABIC LEFT ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;; 08FA;ARABIC RIGHT ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;; 08FB;ARABIC DOUBLE RIGHT ARROWHEAD ABOVE;Mn;230;NSM;;;;;N;;;;; 08FC;ARABIC DOUBLE RIGHT ARROWHEAD ABOVE WITH DOT;Mn;230;NSM;;;;;N;;;;; 08FD;ARABIC RIGHT ARROWHEAD ABOVE WITH DOT;Mn;230;NSM;;;;;N;;;;; 08FE;ARABIC DAMMA WITH DOT;Mn;230;NSM;;;;;N;;;;; 08FF;ARABIC MARK SIDEWAYS NOON GHUNNA;Mn;230;NSM;;;;;N;;;;; 0900;DEVANAGARI SIGN INVERTED CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 0901;DEVANAGARI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 0902;DEVANAGARI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 0903;DEVANAGARI SIGN VISARGA;Mc;0;L;;;;;N;;;;; 0904;DEVANAGARI LETTER SHORT A;Lo;0;L;;;;;N;;;;; 0905;DEVANAGARI LETTER A;Lo;0;L;;;;;N;;;;; 0906;DEVANAGARI LETTER AA;Lo;0;L;;;;;N;;;;; 0907;DEVANAGARI LETTER I;Lo;0;L;;;;;N;;;;; 0908;DEVANAGARI LETTER II;Lo;0;L;;;;;N;;;;; 0909;DEVANAGARI LETTER U;Lo;0;L;;;;;N;;;;; 090A;DEVANAGARI LETTER UU;Lo;0;L;;;;;N;;;;; 090B;DEVANAGARI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 090C;DEVANAGARI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 090D;DEVANAGARI LETTER CANDRA E;Lo;0;L;;;;;N;;;;; 090E;DEVANAGARI LETTER SHORT E;Lo;0;L;;;;;N;;;;; 090F;DEVANAGARI LETTER E;Lo;0;L;;;;;N;;;;; 0910;DEVANAGARI LETTER AI;Lo;0;L;;;;;N;;;;; 0911;DEVANAGARI LETTER CANDRA O;Lo;0;L;;;;;N;;;;; 0912;DEVANAGARI LETTER SHORT O;Lo;0;L;;;;;N;;;;; 0913;DEVANAGARI LETTER O;Lo;0;L;;;;;N;;;;; 0914;DEVANAGARI LETTER AU;Lo;0;L;;;;;N;;;;; 0915;DEVANAGARI LETTER KA;Lo;0;L;;;;;N;;;;; 0916;DEVANAGARI LETTER KHA;Lo;0;L;;;;;N;;;;; 0917;DEVANAGARI LETTER GA;Lo;0;L;;;;;N;;;;; 0918;DEVANAGARI LETTER GHA;Lo;0;L;;;;;N;;;;; 0919;DEVANAGARI LETTER NGA;Lo;0;L;;;;;N;;;;; 091A;DEVANAGARI LETTER CA;Lo;0;L;;;;;N;;;;; 091B;DEVANAGARI LETTER CHA;Lo;0;L;;;;;N;;;;; 091C;DEVANAGARI LETTER JA;Lo;0;L;;;;;N;;;;; 091D;DEVANAGARI LETTER JHA;Lo;0;L;;;;;N;;;;; 091E;DEVANAGARI LETTER NYA;Lo;0;L;;;;;N;;;;; 091F;DEVANAGARI LETTER TTA;Lo;0;L;;;;;N;;;;; 0920;DEVANAGARI LETTER TTHA;Lo;0;L;;;;;N;;;;; 0921;DEVANAGARI LETTER DDA;Lo;0;L;;;;;N;;;;; 0922;DEVANAGARI LETTER DDHA;Lo;0;L;;;;;N;;;;; 0923;DEVANAGARI LETTER NNA;Lo;0;L;;;;;N;;;;; 0924;DEVANAGARI LETTER TA;Lo;0;L;;;;;N;;;;; 0925;DEVANAGARI LETTER THA;Lo;0;L;;;;;N;;;;; 0926;DEVANAGARI LETTER DA;Lo;0;L;;;;;N;;;;; 0927;DEVANAGARI LETTER DHA;Lo;0;L;;;;;N;;;;; 0928;DEVANAGARI LETTER NA;Lo;0;L;;;;;N;;;;; 0929;DEVANAGARI LETTER NNNA;Lo;0;L;0928 093C;;;;N;;;;; 092A;DEVANAGARI LETTER PA;Lo;0;L;;;;;N;;;;; 092B;DEVANAGARI LETTER PHA;Lo;0;L;;;;;N;;;;; 092C;DEVANAGARI LETTER BA;Lo;0;L;;;;;N;;;;; 092D;DEVANAGARI LETTER BHA;Lo;0;L;;;;;N;;;;; 092E;DEVANAGARI LETTER MA;Lo;0;L;;;;;N;;;;; 092F;DEVANAGARI LETTER YA;Lo;0;L;;;;;N;;;;; 0930;DEVANAGARI LETTER RA;Lo;0;L;;;;;N;;;;; 0931;DEVANAGARI LETTER RRA;Lo;0;L;0930 093C;;;;N;;;;; 0932;DEVANAGARI LETTER LA;Lo;0;L;;;;;N;;;;; 0933;DEVANAGARI LETTER LLA;Lo;0;L;;;;;N;;;;; 0934;DEVANAGARI LETTER LLLA;Lo;0;L;0933 093C;;;;N;;;;; 0935;DEVANAGARI LETTER VA;Lo;0;L;;;;;N;;;;; 0936;DEVANAGARI LETTER SHA;Lo;0;L;;;;;N;;;;; 0937;DEVANAGARI LETTER SSA;Lo;0;L;;;;;N;;;;; 0938;DEVANAGARI LETTER SA;Lo;0;L;;;;;N;;;;; 0939;DEVANAGARI LETTER HA;Lo;0;L;;;;;N;;;;; 093A;DEVANAGARI VOWEL SIGN OE;Mn;0;NSM;;;;;N;;;;; 093B;DEVANAGARI VOWEL SIGN OOE;Mc;0;L;;;;;N;;;;; 093C;DEVANAGARI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 093D;DEVANAGARI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; 093E;DEVANAGARI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 093F;DEVANAGARI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 0940;DEVANAGARI VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 0941;DEVANAGARI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 0942;DEVANAGARI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 0943;DEVANAGARI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; 0944;DEVANAGARI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;; 0945;DEVANAGARI VOWEL SIGN CANDRA E;Mn;0;NSM;;;;;N;;;;; 0946;DEVANAGARI VOWEL SIGN SHORT E;Mn;0;NSM;;;;;N;;;;; 0947;DEVANAGARI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 0948;DEVANAGARI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; 0949;DEVANAGARI VOWEL SIGN CANDRA O;Mc;0;L;;;;;N;;;;; 094A;DEVANAGARI VOWEL SIGN SHORT O;Mc;0;L;;;;;N;;;;; 094B;DEVANAGARI VOWEL SIGN O;Mc;0;L;;;;;N;;;;; 094C;DEVANAGARI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; 094D;DEVANAGARI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 094E;DEVANAGARI VOWEL SIGN PRISHTHAMATRA E;Mc;0;L;;;;;N;;;;; 094F;DEVANAGARI VOWEL SIGN AW;Mc;0;L;;;;;N;;;;; 0950;DEVANAGARI OM;Lo;0;L;;;;;N;;;;; 0951;DEVANAGARI STRESS SIGN UDATTA;Mn;230;NSM;;;;;N;;;;; 0952;DEVANAGARI STRESS SIGN ANUDATTA;Mn;220;NSM;;;;;N;;;;; 0953;DEVANAGARI GRAVE ACCENT;Mn;230;NSM;;;;;N;;;;; 0954;DEVANAGARI ACUTE ACCENT;Mn;230;NSM;;;;;N;;;;; 0955;DEVANAGARI VOWEL SIGN CANDRA LONG E;Mn;0;NSM;;;;;N;;;;; 0956;DEVANAGARI VOWEL SIGN UE;Mn;0;NSM;;;;;N;;;;; 0957;DEVANAGARI VOWEL SIGN UUE;Mn;0;NSM;;;;;N;;;;; 0958;DEVANAGARI LETTER QA;Lo;0;L;0915 093C;;;;N;;;;; 0959;DEVANAGARI LETTER KHHA;Lo;0;L;0916 093C;;;;N;;;;; 095A;DEVANAGARI LETTER GHHA;Lo;0;L;0917 093C;;;;N;;;;; 095B;DEVANAGARI LETTER ZA;Lo;0;L;091C 093C;;;;N;;;;; 095C;DEVANAGARI LETTER DDDHA;Lo;0;L;0921 093C;;;;N;;;;; 095D;DEVANAGARI LETTER RHA;Lo;0;L;0922 093C;;;;N;;;;; 095E;DEVANAGARI LETTER FA;Lo;0;L;092B 093C;;;;N;;;;; 095F;DEVANAGARI LETTER YYA;Lo;0;L;092F 093C;;;;N;;;;; 0960;DEVANAGARI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 0961;DEVANAGARI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 0962;DEVANAGARI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; 0963;DEVANAGARI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; 0964;DEVANAGARI DANDA;Po;0;L;;;;;N;;;;; 0965;DEVANAGARI DOUBLE DANDA;Po;0;L;;;;;N;;;;; 0966;DEVANAGARI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0967;DEVANAGARI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0968;DEVANAGARI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0969;DEVANAGARI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 096A;DEVANAGARI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 096B;DEVANAGARI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 096C;DEVANAGARI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 096D;DEVANAGARI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 096E;DEVANAGARI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 096F;DEVANAGARI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0970;DEVANAGARI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;; 0971;DEVANAGARI SIGN HIGH SPACING DOT;Lm;0;L;;;;;N;;;;; 0972;DEVANAGARI LETTER CANDRA A;Lo;0;L;;;;;N;;;;; 0973;DEVANAGARI LETTER OE;Lo;0;L;;;;;N;;;;; 0974;DEVANAGARI LETTER OOE;Lo;0;L;;;;;N;;;;; 0975;DEVANAGARI LETTER AW;Lo;0;L;;;;;N;;;;; 0976;DEVANAGARI LETTER UE;Lo;0;L;;;;;N;;;;; 0977;DEVANAGARI LETTER UUE;Lo;0;L;;;;;N;;;;; 0978;DEVANAGARI LETTER MARWARI DDA;Lo;0;L;;;;;N;;;;; 0979;DEVANAGARI LETTER ZHA;Lo;0;L;;;;;N;;;;; 097A;DEVANAGARI LETTER HEAVY YA;Lo;0;L;;;;;N;;;;; 097B;DEVANAGARI LETTER GGA;Lo;0;L;;;;;N;;;;; 097C;DEVANAGARI LETTER JJA;Lo;0;L;;;;;N;;;;; 097D;DEVANAGARI LETTER GLOTTAL STOP;Lo;0;L;;;;;N;;;;; 097E;DEVANAGARI LETTER DDDA;Lo;0;L;;;;;N;;;;; 097F;DEVANAGARI LETTER BBA;Lo;0;L;;;;;N;;;;; 0980;BENGALI ANJI;Lo;0;L;;;;;N;;;;; 0981;BENGALI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 0982;BENGALI SIGN ANUSVARA;Mc;0;L;;;;;N;;;;; 0983;BENGALI SIGN VISARGA;Mc;0;L;;;;;N;;;;; 0985;BENGALI LETTER A;Lo;0;L;;;;;N;;;;; 0986;BENGALI LETTER AA;Lo;0;L;;;;;N;;;;; 0987;BENGALI LETTER I;Lo;0;L;;;;;N;;;;; 0988;BENGALI LETTER II;Lo;0;L;;;;;N;;;;; 0989;BENGALI LETTER U;Lo;0;L;;;;;N;;;;; 098A;BENGALI LETTER UU;Lo;0;L;;;;;N;;;;; 098B;BENGALI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 098C;BENGALI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 098F;BENGALI LETTER E;Lo;0;L;;;;;N;;;;; 0990;BENGALI LETTER AI;Lo;0;L;;;;;N;;;;; 0993;BENGALI LETTER O;Lo;0;L;;;;;N;;;;; 0994;BENGALI LETTER AU;Lo;0;L;;;;;N;;;;; 0995;BENGALI LETTER KA;Lo;0;L;;;;;N;;;;; 0996;BENGALI LETTER KHA;Lo;0;L;;;;;N;;;;; 0997;BENGALI LETTER GA;Lo;0;L;;;;;N;;;;; 0998;BENGALI LETTER GHA;Lo;0;L;;;;;N;;;;; 0999;BENGALI LETTER NGA;Lo;0;L;;;;;N;;;;; 099A;BENGALI LETTER CA;Lo;0;L;;;;;N;;;;; 099B;BENGALI LETTER CHA;Lo;0;L;;;;;N;;;;; 099C;BENGALI LETTER JA;Lo;0;L;;;;;N;;;;; 099D;BENGALI LETTER JHA;Lo;0;L;;;;;N;;;;; 099E;BENGALI LETTER NYA;Lo;0;L;;;;;N;;;;; 099F;BENGALI LETTER TTA;Lo;0;L;;;;;N;;;;; 09A0;BENGALI LETTER TTHA;Lo;0;L;;;;;N;;;;; 09A1;BENGALI LETTER DDA;Lo;0;L;;;;;N;;;;; 09A2;BENGALI LETTER DDHA;Lo;0;L;;;;;N;;;;; 09A3;BENGALI LETTER NNA;Lo;0;L;;;;;N;;;;; 09A4;BENGALI LETTER TA;Lo;0;L;;;;;N;;;;; 09A5;BENGALI LETTER THA;Lo;0;L;;;;;N;;;;; 09A6;BENGALI LETTER DA;Lo;0;L;;;;;N;;;;; 09A7;BENGALI LETTER DHA;Lo;0;L;;;;;N;;;;; 09A8;BENGALI LETTER NA;Lo;0;L;;;;;N;;;;; 09AA;BENGALI LETTER PA;Lo;0;L;;;;;N;;;;; 09AB;BENGALI LETTER PHA;Lo;0;L;;;;;N;;;;; 09AC;BENGALI LETTER BA;Lo;0;L;;;;;N;;;;; 09AD;BENGALI LETTER BHA;Lo;0;L;;;;;N;;;;; 09AE;BENGALI LETTER MA;Lo;0;L;;;;;N;;;;; 09AF;BENGALI LETTER YA;Lo;0;L;;;;;N;;;;; 09B0;BENGALI LETTER RA;Lo;0;L;;;;;N;;;;; 09B2;BENGALI LETTER LA;Lo;0;L;;;;;N;;;;; 09B6;BENGALI LETTER SHA;Lo;0;L;;;;;N;;;;; 09B7;BENGALI LETTER SSA;Lo;0;L;;;;;N;;;;; 09B8;BENGALI LETTER SA;Lo;0;L;;;;;N;;;;; 09B9;BENGALI LETTER HA;Lo;0;L;;;;;N;;;;; 09BC;BENGALI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 09BD;BENGALI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; 09BE;BENGALI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 09BF;BENGALI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 09C0;BENGALI VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 09C1;BENGALI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 09C2;BENGALI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 09C3;BENGALI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; 09C4;BENGALI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;; 09C7;BENGALI VOWEL SIGN E;Mc;0;L;;;;;N;;;;; 09C8;BENGALI VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; 09CB;BENGALI VOWEL SIGN O;Mc;0;L;09C7 09BE;;;;N;;;;; 09CC;BENGALI VOWEL SIGN AU;Mc;0;L;09C7 09D7;;;;N;;;;; 09CD;BENGALI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 09CE;BENGALI LETTER KHANDA TA;Lo;0;L;;;;;N;;;;; 09D7;BENGALI AU LENGTH MARK;Mc;0;L;;;;;N;;;;; 09DC;BENGALI LETTER RRA;Lo;0;L;09A1 09BC;;;;N;;;;; 09DD;BENGALI LETTER RHA;Lo;0;L;09A2 09BC;;;;N;;;;; 09DF;BENGALI LETTER YYA;Lo;0;L;09AF 09BC;;;;N;;;;; 09E0;BENGALI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 09E1;BENGALI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 09E2;BENGALI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; 09E3;BENGALI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; 09E6;BENGALI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 09E7;BENGALI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 09E8;BENGALI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 09E9;BENGALI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 09EA;BENGALI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 09EB;BENGALI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 09EC;BENGALI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 09ED;BENGALI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 09EE;BENGALI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 09EF;BENGALI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 09F0;BENGALI LETTER RA WITH MIDDLE DIAGONAL;Lo;0;L;;;;;N;;;;; 09F1;BENGALI LETTER RA WITH LOWER DIAGONAL;Lo;0;L;;;;;N;BENGALI LETTER VA WITH LOWER DIAGONAL;;;; 09F2;BENGALI RUPEE MARK;Sc;0;ET;;;;;N;;;;; 09F3;BENGALI RUPEE SIGN;Sc;0;ET;;;;;N;;;;; 09F4;BENGALI CURRENCY NUMERATOR ONE;No;0;L;;;;1/16;N;;;;; 09F5;BENGALI CURRENCY NUMERATOR TWO;No;0;L;;;;1/8;N;;;;; 09F6;BENGALI CURRENCY NUMERATOR THREE;No;0;L;;;;3/16;N;;;;; 09F7;BENGALI CURRENCY NUMERATOR FOUR;No;0;L;;;;1/4;N;;;;; 09F8;BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR;No;0;L;;;;3/4;N;;;;; 09F9;BENGALI CURRENCY DENOMINATOR SIXTEEN;No;0;L;;;;16;N;;;;; 09FA;BENGALI ISSHAR;So;0;L;;;;;N;;;;; 09FB;BENGALI GANDA MARK;Sc;0;ET;;;;;N;;;;; 09FC;BENGALI LETTER VEDIC ANUSVARA;Lo;0;L;;;;;N;;;;; 09FD;BENGALI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;; 09FE;BENGALI SANDHI MARK;Mn;230;NSM;;;;;N;;;;; 0A01;GURMUKHI SIGN ADAK BINDI;Mn;0;NSM;;;;;N;;;;; 0A02;GURMUKHI SIGN BINDI;Mn;0;NSM;;;;;N;;;;; 0A03;GURMUKHI SIGN VISARGA;Mc;0;L;;;;;N;;;;; 0A05;GURMUKHI LETTER A;Lo;0;L;;;;;N;;;;; 0A06;GURMUKHI LETTER AA;Lo;0;L;;;;;N;;;;; 0A07;GURMUKHI LETTER I;Lo;0;L;;;;;N;;;;; 0A08;GURMUKHI LETTER II;Lo;0;L;;;;;N;;;;; 0A09;GURMUKHI LETTER U;Lo;0;L;;;;;N;;;;; 0A0A;GURMUKHI LETTER UU;Lo;0;L;;;;;N;;;;; 0A0F;GURMUKHI LETTER EE;Lo;0;L;;;;;N;;;;; 0A10;GURMUKHI LETTER AI;Lo;0;L;;;;;N;;;;; 0A13;GURMUKHI LETTER OO;Lo;0;L;;;;;N;;;;; 0A14;GURMUKHI LETTER AU;Lo;0;L;;;;;N;;;;; 0A15;GURMUKHI LETTER KA;Lo;0;L;;;;;N;;;;; 0A16;GURMUKHI LETTER KHA;Lo;0;L;;;;;N;;;;; 0A17;GURMUKHI LETTER GA;Lo;0;L;;;;;N;;;;; 0A18;GURMUKHI LETTER GHA;Lo;0;L;;;;;N;;;;; 0A19;GURMUKHI LETTER NGA;Lo;0;L;;;;;N;;;;; 0A1A;GURMUKHI LETTER CA;Lo;0;L;;;;;N;;;;; 0A1B;GURMUKHI LETTER CHA;Lo;0;L;;;;;N;;;;; 0A1C;GURMUKHI LETTER JA;Lo;0;L;;;;;N;;;;; 0A1D;GURMUKHI LETTER JHA;Lo;0;L;;;;;N;;;;; 0A1E;GURMUKHI LETTER NYA;Lo;0;L;;;;;N;;;;; 0A1F;GURMUKHI LETTER TTA;Lo;0;L;;;;;N;;;;; 0A20;GURMUKHI LETTER TTHA;Lo;0;L;;;;;N;;;;; 0A21;GURMUKHI LETTER DDA;Lo;0;L;;;;;N;;;;; 0A22;GURMUKHI LETTER DDHA;Lo;0;L;;;;;N;;;;; 0A23;GURMUKHI LETTER NNA;Lo;0;L;;;;;N;;;;; 0A24;GURMUKHI LETTER TA;Lo;0;L;;;;;N;;;;; 0A25;GURMUKHI LETTER THA;Lo;0;L;;;;;N;;;;; 0A26;GURMUKHI LETTER DA;Lo;0;L;;;;;N;;;;; 0A27;GURMUKHI LETTER DHA;Lo;0;L;;;;;N;;;;; 0A28;GURMUKHI LETTER NA;Lo;0;L;;;;;N;;;;; 0A2A;GURMUKHI LETTER PA;Lo;0;L;;;;;N;;;;; 0A2B;GURMUKHI LETTER PHA;Lo;0;L;;;;;N;;;;; 0A2C;GURMUKHI LETTER BA;Lo;0;L;;;;;N;;;;; 0A2D;GURMUKHI LETTER BHA;Lo;0;L;;;;;N;;;;; 0A2E;GURMUKHI LETTER MA;Lo;0;L;;;;;N;;;;; 0A2F;GURMUKHI LETTER YA;Lo;0;L;;;;;N;;;;; 0A30;GURMUKHI LETTER RA;Lo;0;L;;;;;N;;;;; 0A32;GURMUKHI LETTER LA;Lo;0;L;;;;;N;;;;; 0A33;GURMUKHI LETTER LLA;Lo;0;L;0A32 0A3C;;;;N;;;;; 0A35;GURMUKHI LETTER VA;Lo;0;L;;;;;N;;;;; 0A36;GURMUKHI LETTER SHA;Lo;0;L;0A38 0A3C;;;;N;;;;; 0A38;GURMUKHI LETTER SA;Lo;0;L;;;;;N;;;;; 0A39;GURMUKHI LETTER HA;Lo;0;L;;;;;N;;;;; 0A3C;GURMUKHI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 0A3E;GURMUKHI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 0A3F;GURMUKHI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 0A40;GURMUKHI VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 0A41;GURMUKHI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 0A42;GURMUKHI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 0A47;GURMUKHI VOWEL SIGN EE;Mn;0;NSM;;;;;N;;;;; 0A48;GURMUKHI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; 0A4B;GURMUKHI VOWEL SIGN OO;Mn;0;NSM;;;;;N;;;;; 0A4C;GURMUKHI VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;; 0A4D;GURMUKHI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 0A51;GURMUKHI SIGN UDAAT;Mn;0;NSM;;;;;N;;;;; 0A59;GURMUKHI LETTER KHHA;Lo;0;L;0A16 0A3C;;;;N;;;;; 0A5A;GURMUKHI LETTER GHHA;Lo;0;L;0A17 0A3C;;;;N;;;;; 0A5B;GURMUKHI LETTER ZA;Lo;0;L;0A1C 0A3C;;;;N;;;;; 0A5C;GURMUKHI LETTER RRA;Lo;0;L;;;;;N;;;;; 0A5E;GURMUKHI LETTER FA;Lo;0;L;0A2B 0A3C;;;;N;;;;; 0A66;GURMUKHI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0A67;GURMUKHI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0A68;GURMUKHI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0A69;GURMUKHI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 0A6A;GURMUKHI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 0A6B;GURMUKHI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 0A6C;GURMUKHI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 0A6D;GURMUKHI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0A6E;GURMUKHI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0A6F;GURMUKHI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0A70;GURMUKHI TIPPI;Mn;0;NSM;;;;;N;;;;; 0A71;GURMUKHI ADDAK;Mn;0;NSM;;;;;N;;;;; 0A72;GURMUKHI IRI;Lo;0;L;;;;;N;;;;; 0A73;GURMUKHI URA;Lo;0;L;;;;;N;;;;; 0A74;GURMUKHI EK ONKAR;Lo;0;L;;;;;N;;;;; 0A75;GURMUKHI SIGN YAKASH;Mn;0;NSM;;;;;N;;;;; 0A76;GURMUKHI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;; 0A81;GUJARATI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 0A82;GUJARATI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 0A83;GUJARATI SIGN VISARGA;Mc;0;L;;;;;N;;;;; 0A85;GUJARATI LETTER A;Lo;0;L;;;;;N;;;;; 0A86;GUJARATI LETTER AA;Lo;0;L;;;;;N;;;;; 0A87;GUJARATI LETTER I;Lo;0;L;;;;;N;;;;; 0A88;GUJARATI LETTER II;Lo;0;L;;;;;N;;;;; 0A89;GUJARATI LETTER U;Lo;0;L;;;;;N;;;;; 0A8A;GUJARATI LETTER UU;Lo;0;L;;;;;N;;;;; 0A8B;GUJARATI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 0A8C;GUJARATI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 0A8D;GUJARATI VOWEL CANDRA E;Lo;0;L;;;;;N;;;;; 0A8F;GUJARATI LETTER E;Lo;0;L;;;;;N;;;;; 0A90;GUJARATI LETTER AI;Lo;0;L;;;;;N;;;;; 0A91;GUJARATI VOWEL CANDRA O;Lo;0;L;;;;;N;;;;; 0A93;GUJARATI LETTER O;Lo;0;L;;;;;N;;;;; 0A94;GUJARATI LETTER AU;Lo;0;L;;;;;N;;;;; 0A95;GUJARATI LETTER KA;Lo;0;L;;;;;N;;;;; 0A96;GUJARATI LETTER KHA;Lo;0;L;;;;;N;;;;; 0A97;GUJARATI LETTER GA;Lo;0;L;;;;;N;;;;; 0A98;GUJARATI LETTER GHA;Lo;0;L;;;;;N;;;;; 0A99;GUJARATI LETTER NGA;Lo;0;L;;;;;N;;;;; 0A9A;GUJARATI LETTER CA;Lo;0;L;;;;;N;;;;; 0A9B;GUJARATI LETTER CHA;Lo;0;L;;;;;N;;;;; 0A9C;GUJARATI LETTER JA;Lo;0;L;;;;;N;;;;; 0A9D;GUJARATI LETTER JHA;Lo;0;L;;;;;N;;;;; 0A9E;GUJARATI LETTER NYA;Lo;0;L;;;;;N;;;;; 0A9F;GUJARATI LETTER TTA;Lo;0;L;;;;;N;;;;; 0AA0;GUJARATI LETTER TTHA;Lo;0;L;;;;;N;;;;; 0AA1;GUJARATI LETTER DDA;Lo;0;L;;;;;N;;;;; 0AA2;GUJARATI LETTER DDHA;Lo;0;L;;;;;N;;;;; 0AA3;GUJARATI LETTER NNA;Lo;0;L;;;;;N;;;;; 0AA4;GUJARATI LETTER TA;Lo;0;L;;;;;N;;;;; 0AA5;GUJARATI LETTER THA;Lo;0;L;;;;;N;;;;; 0AA6;GUJARATI LETTER DA;Lo;0;L;;;;;N;;;;; 0AA7;GUJARATI LETTER DHA;Lo;0;L;;;;;N;;;;; 0AA8;GUJARATI LETTER NA;Lo;0;L;;;;;N;;;;; 0AAA;GUJARATI LETTER PA;Lo;0;L;;;;;N;;;;; 0AAB;GUJARATI LETTER PHA;Lo;0;L;;;;;N;;;;; 0AAC;GUJARATI LETTER BA;Lo;0;L;;;;;N;;;;; 0AAD;GUJARATI LETTER BHA;Lo;0;L;;;;;N;;;;; 0AAE;GUJARATI LETTER MA;Lo;0;L;;;;;N;;;;; 0AAF;GUJARATI LETTER YA;Lo;0;L;;;;;N;;;;; 0AB0;GUJARATI LETTER RA;Lo;0;L;;;;;N;;;;; 0AB2;GUJARATI LETTER LA;Lo;0;L;;;;;N;;;;; 0AB3;GUJARATI LETTER LLA;Lo;0;L;;;;;N;;;;; 0AB5;GUJARATI LETTER VA;Lo;0;L;;;;;N;;;;; 0AB6;GUJARATI LETTER SHA;Lo;0;L;;;;;N;;;;; 0AB7;GUJARATI LETTER SSA;Lo;0;L;;;;;N;;;;; 0AB8;GUJARATI LETTER SA;Lo;0;L;;;;;N;;;;; 0AB9;GUJARATI LETTER HA;Lo;0;L;;;;;N;;;;; 0ABC;GUJARATI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 0ABD;GUJARATI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; 0ABE;GUJARATI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 0ABF;GUJARATI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 0AC0;GUJARATI VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 0AC1;GUJARATI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 0AC2;GUJARATI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 0AC3;GUJARATI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; 0AC4;GUJARATI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;; 0AC5;GUJARATI VOWEL SIGN CANDRA E;Mn;0;NSM;;;;;N;;;;; 0AC7;GUJARATI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 0AC8;GUJARATI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; 0AC9;GUJARATI VOWEL SIGN CANDRA O;Mc;0;L;;;;;N;;;;; 0ACB;GUJARATI VOWEL SIGN O;Mc;0;L;;;;;N;;;;; 0ACC;GUJARATI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; 0ACD;GUJARATI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 0AD0;GUJARATI OM;Lo;0;L;;;;;N;;;;; 0AE0;GUJARATI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 0AE1;GUJARATI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 0AE2;GUJARATI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; 0AE3;GUJARATI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; 0AE6;GUJARATI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0AE7;GUJARATI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0AE8;GUJARATI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0AE9;GUJARATI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 0AEA;GUJARATI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 0AEB;GUJARATI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 0AEC;GUJARATI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 0AED;GUJARATI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0AEE;GUJARATI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0AEF;GUJARATI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0AF0;GUJARATI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;; 0AF1;GUJARATI RUPEE SIGN;Sc;0;ET;;;;;N;;;;; 0AF9;GUJARATI LETTER ZHA;Lo;0;L;;;;;N;;;;; 0AFA;GUJARATI SIGN SUKUN;Mn;0;NSM;;;;;N;;;;; 0AFB;GUJARATI SIGN SHADDA;Mn;0;NSM;;;;;N;;;;; 0AFC;GUJARATI SIGN MADDAH;Mn;0;NSM;;;;;N;;;;; 0AFD;GUJARATI SIGN THREE-DOT NUKTA ABOVE;Mn;0;NSM;;;;;N;;;;; 0AFE;GUJARATI SIGN CIRCLE NUKTA ABOVE;Mn;0;NSM;;;;;N;;;;; 0AFF;GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE;Mn;0;NSM;;;;;N;;;;; 0B01;ORIYA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 0B02;ORIYA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;; 0B03;ORIYA SIGN VISARGA;Mc;0;L;;;;;N;;;;; 0B05;ORIYA LETTER A;Lo;0;L;;;;;N;;;;; 0B06;ORIYA LETTER AA;Lo;0;L;;;;;N;;;;; 0B07;ORIYA LETTER I;Lo;0;L;;;;;N;;;;; 0B08;ORIYA LETTER II;Lo;0;L;;;;;N;;;;; 0B09;ORIYA LETTER U;Lo;0;L;;;;;N;;;;; 0B0A;ORIYA LETTER UU;Lo;0;L;;;;;N;;;;; 0B0B;ORIYA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 0B0C;ORIYA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 0B0F;ORIYA LETTER E;Lo;0;L;;;;;N;;;;; 0B10;ORIYA LETTER AI;Lo;0;L;;;;;N;;;;; 0B13;ORIYA LETTER O;Lo;0;L;;;;;N;;;;; 0B14;ORIYA LETTER AU;Lo;0;L;;;;;N;;;;; 0B15;ORIYA LETTER KA;Lo;0;L;;;;;N;;;;; 0B16;ORIYA LETTER KHA;Lo;0;L;;;;;N;;;;; 0B17;ORIYA LETTER GA;Lo;0;L;;;;;N;;;;; 0B18;ORIYA LETTER GHA;Lo;0;L;;;;;N;;;;; 0B19;ORIYA LETTER NGA;Lo;0;L;;;;;N;;;;; 0B1A;ORIYA LETTER CA;Lo;0;L;;;;;N;;;;; 0B1B;ORIYA LETTER CHA;Lo;0;L;;;;;N;;;;; 0B1C;ORIYA LETTER JA;Lo;0;L;;;;;N;;;;; 0B1D;ORIYA LETTER JHA;Lo;0;L;;;;;N;;;;; 0B1E;ORIYA LETTER NYA;Lo;0;L;;;;;N;;;;; 0B1F;ORIYA LETTER TTA;Lo;0;L;;;;;N;;;;; 0B20;ORIYA LETTER TTHA;Lo;0;L;;;;;N;;;;; 0B21;ORIYA LETTER DDA;Lo;0;L;;;;;N;;;;; 0B22;ORIYA LETTER DDHA;Lo;0;L;;;;;N;;;;; 0B23;ORIYA LETTER NNA;Lo;0;L;;;;;N;;;;; 0B24;ORIYA LETTER TA;Lo;0;L;;;;;N;;;;; 0B25;ORIYA LETTER THA;Lo;0;L;;;;;N;;;;; 0B26;ORIYA LETTER DA;Lo;0;L;;;;;N;;;;; 0B27;ORIYA LETTER DHA;Lo;0;L;;;;;N;;;;; 0B28;ORIYA LETTER NA;Lo;0;L;;;;;N;;;;; 0B2A;ORIYA LETTER PA;Lo;0;L;;;;;N;;;;; 0B2B;ORIYA LETTER PHA;Lo;0;L;;;;;N;;;;; 0B2C;ORIYA LETTER BA;Lo;0;L;;;;;N;;;;; 0B2D;ORIYA LETTER BHA;Lo;0;L;;;;;N;;;;; 0B2E;ORIYA LETTER MA;Lo;0;L;;;;;N;;;;; 0B2F;ORIYA LETTER YA;Lo;0;L;;;;;N;;;;; 0B30;ORIYA LETTER RA;Lo;0;L;;;;;N;;;;; 0B32;ORIYA LETTER LA;Lo;0;L;;;;;N;;;;; 0B33;ORIYA LETTER LLA;Lo;0;L;;;;;N;;;;; 0B35;ORIYA LETTER VA;Lo;0;L;;;;;N;;;;; 0B36;ORIYA LETTER SHA;Lo;0;L;;;;;N;;;;; 0B37;ORIYA LETTER SSA;Lo;0;L;;;;;N;;;;; 0B38;ORIYA LETTER SA;Lo;0;L;;;;;N;;;;; 0B39;ORIYA LETTER HA;Lo;0;L;;;;;N;;;;; 0B3C;ORIYA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 0B3D;ORIYA SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; 0B3E;ORIYA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 0B3F;ORIYA VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 0B40;ORIYA VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 0B41;ORIYA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 0B42;ORIYA VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 0B43;ORIYA VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; 0B44;ORIYA VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;; 0B47;ORIYA VOWEL SIGN E;Mc;0;L;;;;;N;;;;; 0B48;ORIYA VOWEL SIGN AI;Mc;0;L;0B47 0B56;;;;N;;;;; 0B4B;ORIYA VOWEL SIGN O;Mc;0;L;0B47 0B3E;;;;N;;;;; 0B4C;ORIYA VOWEL SIGN AU;Mc;0;L;0B47 0B57;;;;N;;;;; 0B4D;ORIYA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 0B55;ORIYA SIGN OVERLINE;Mn;0;NSM;;;;;N;;;;; 0B56;ORIYA AI LENGTH MARK;Mn;0;NSM;;;;;N;;;;; 0B57;ORIYA AU LENGTH MARK;Mc;0;L;;;;;N;;;;; 0B5C;ORIYA LETTER RRA;Lo;0;L;0B21 0B3C;;;;N;;;;; 0B5D;ORIYA LETTER RHA;Lo;0;L;0B22 0B3C;;;;N;;;;; 0B5F;ORIYA LETTER YYA;Lo;0;L;;;;;N;;;;; 0B60;ORIYA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 0B61;ORIYA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 0B62;ORIYA VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; 0B63;ORIYA VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; 0B66;ORIYA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0B67;ORIYA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0B68;ORIYA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0B69;ORIYA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 0B6A;ORIYA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 0B6B;ORIYA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 0B6C;ORIYA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 0B6D;ORIYA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0B6E;ORIYA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0B6F;ORIYA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0B70;ORIYA ISSHAR;So;0;L;;;;;N;;;;; 0B71;ORIYA LETTER WA;Lo;0;L;;;;;N;;;;; 0B72;ORIYA FRACTION ONE QUARTER;No;0;L;;;;1/4;N;;;;; 0B73;ORIYA FRACTION ONE HALF;No;0;L;;;;1/2;N;;;;; 0B74;ORIYA FRACTION THREE QUARTERS;No;0;L;;;;3/4;N;;;;; 0B75;ORIYA FRACTION ONE SIXTEENTH;No;0;L;;;;1/16;N;;;;; 0B76;ORIYA FRACTION ONE EIGHTH;No;0;L;;;;1/8;N;;;;; 0B77;ORIYA FRACTION THREE SIXTEENTHS;No;0;L;;;;3/16;N;;;;; 0B82;TAMIL SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 0B83;TAMIL SIGN VISARGA;Lo;0;L;;;;;N;;;;; 0B85;TAMIL LETTER A;Lo;0;L;;;;;N;;;;; 0B86;TAMIL LETTER AA;Lo;0;L;;;;;N;;;;; 0B87;TAMIL LETTER I;Lo;0;L;;;;;N;;;;; 0B88;TAMIL LETTER II;Lo;0;L;;;;;N;;;;; 0B89;TAMIL LETTER U;Lo;0;L;;;;;N;;;;; 0B8A;TAMIL LETTER UU;Lo;0;L;;;;;N;;;;; 0B8E;TAMIL LETTER E;Lo;0;L;;;;;N;;;;; 0B8F;TAMIL LETTER EE;Lo;0;L;;;;;N;;;;; 0B90;TAMIL LETTER AI;Lo;0;L;;;;;N;;;;; 0B92;TAMIL LETTER O;Lo;0;L;;;;;N;;;;; 0B93;TAMIL LETTER OO;Lo;0;L;;;;;N;;;;; 0B94;TAMIL LETTER AU;Lo;0;L;0B92 0BD7;;;;N;;;;; 0B95;TAMIL LETTER KA;Lo;0;L;;;;;N;;;;; 0B99;TAMIL LETTER NGA;Lo;0;L;;;;;N;;;;; 0B9A;TAMIL LETTER CA;Lo;0;L;;;;;N;;;;; 0B9C;TAMIL LETTER JA;Lo;0;L;;;;;N;;;;; 0B9E;TAMIL LETTER NYA;Lo;0;L;;;;;N;;;;; 0B9F;TAMIL LETTER TTA;Lo;0;L;;;;;N;;;;; 0BA3;TAMIL LETTER NNA;Lo;0;L;;;;;N;;;;; 0BA4;TAMIL LETTER TA;Lo;0;L;;;;;N;;;;; 0BA8;TAMIL LETTER NA;Lo;0;L;;;;;N;;;;; 0BA9;TAMIL LETTER NNNA;Lo;0;L;;;;;N;;;;; 0BAA;TAMIL LETTER PA;Lo;0;L;;;;;N;;;;; 0BAE;TAMIL LETTER MA;Lo;0;L;;;;;N;;;;; 0BAF;TAMIL LETTER YA;Lo;0;L;;;;;N;;;;; 0BB0;TAMIL LETTER RA;Lo;0;L;;;;;N;;;;; 0BB1;TAMIL LETTER RRA;Lo;0;L;;;;;N;;;;; 0BB2;TAMIL LETTER LA;Lo;0;L;;;;;N;;;;; 0BB3;TAMIL LETTER LLA;Lo;0;L;;;;;N;;;;; 0BB4;TAMIL LETTER LLLA;Lo;0;L;;;;;N;;;;; 0BB5;TAMIL LETTER VA;Lo;0;L;;;;;N;;;;; 0BB6;TAMIL LETTER SHA;Lo;0;L;;;;;N;;;;; 0BB7;TAMIL LETTER SSA;Lo;0;L;;;;;N;;;;; 0BB8;TAMIL LETTER SA;Lo;0;L;;;;;N;;;;; 0BB9;TAMIL LETTER HA;Lo;0;L;;;;;N;;;;; 0BBE;TAMIL VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 0BBF;TAMIL VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 0BC0;TAMIL VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; 0BC1;TAMIL VOWEL SIGN U;Mc;0;L;;;;;N;;;;; 0BC2;TAMIL VOWEL SIGN UU;Mc;0;L;;;;;N;;;;; 0BC6;TAMIL VOWEL SIGN E;Mc;0;L;;;;;N;;;;; 0BC7;TAMIL VOWEL SIGN EE;Mc;0;L;;;;;N;;;;; 0BC8;TAMIL VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; 0BCA;TAMIL VOWEL SIGN O;Mc;0;L;0BC6 0BBE;;;;N;;;;; 0BCB;TAMIL VOWEL SIGN OO;Mc;0;L;0BC7 0BBE;;;;N;;;;; 0BCC;TAMIL VOWEL SIGN AU;Mc;0;L;0BC6 0BD7;;;;N;;;;; 0BCD;TAMIL SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 0BD0;TAMIL OM;Lo;0;L;;;;;N;;;;; 0BD7;TAMIL AU LENGTH MARK;Mc;0;L;;;;;N;;;;; 0BE6;TAMIL DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0BE7;TAMIL DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0BE8;TAMIL DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0BE9;TAMIL DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 0BEA;TAMIL DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 0BEB;TAMIL DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 0BEC;TAMIL DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 0BED;TAMIL DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0BEE;TAMIL DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0BEF;TAMIL DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0BF0;TAMIL NUMBER TEN;No;0;L;;;;10;N;;;;; 0BF1;TAMIL NUMBER ONE HUNDRED;No;0;L;;;;100;N;;;;; 0BF2;TAMIL NUMBER ONE THOUSAND;No;0;L;;;;1000;N;;;;; 0BF3;TAMIL DAY SIGN;So;0;ON;;;;;N;;;;; 0BF4;TAMIL MONTH SIGN;So;0;ON;;;;;N;;;;; 0BF5;TAMIL YEAR SIGN;So;0;ON;;;;;N;;;;; 0BF6;TAMIL DEBIT SIGN;So;0;ON;;;;;N;;;;; 0BF7;TAMIL CREDIT SIGN;So;0;ON;;;;;N;;;;; 0BF8;TAMIL AS ABOVE SIGN;So;0;ON;;;;;N;;;;; 0BF9;TAMIL RUPEE SIGN;Sc;0;ET;;;;;N;;;;; 0BFA;TAMIL NUMBER SIGN;So;0;ON;;;;;N;;;;; 0C00;TELUGU SIGN COMBINING CANDRABINDU ABOVE;Mn;0;NSM;;;;;N;;;;; 0C01;TELUGU SIGN CANDRABINDU;Mc;0;L;;;;;N;;;;; 0C02;TELUGU SIGN ANUSVARA;Mc;0;L;;;;;N;;;;; 0C03;TELUGU SIGN VISARGA;Mc;0;L;;;;;N;;;;; 0C04;TELUGU SIGN COMBINING ANUSVARA ABOVE;Mn;0;NSM;;;;;N;;;;; 0C05;TELUGU LETTER A;Lo;0;L;;;;;N;;;;; 0C06;TELUGU LETTER AA;Lo;0;L;;;;;N;;;;; 0C07;TELUGU LETTER I;Lo;0;L;;;;;N;;;;; 0C08;TELUGU LETTER II;Lo;0;L;;;;;N;;;;; 0C09;TELUGU LETTER U;Lo;0;L;;;;;N;;;;; 0C0A;TELUGU LETTER UU;Lo;0;L;;;;;N;;;;; 0C0B;TELUGU LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 0C0C;TELUGU LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 0C0E;TELUGU LETTER E;Lo;0;L;;;;;N;;;;; 0C0F;TELUGU LETTER EE;Lo;0;L;;;;;N;;;;; 0C10;TELUGU LETTER AI;Lo;0;L;;;;;N;;;;; 0C12;TELUGU LETTER O;Lo;0;L;;;;;N;;;;; 0C13;TELUGU LETTER OO;Lo;0;L;;;;;N;;;;; 0C14;TELUGU LETTER AU;Lo;0;L;;;;;N;;;;; 0C15;TELUGU LETTER KA;Lo;0;L;;;;;N;;;;; 0C16;TELUGU LETTER KHA;Lo;0;L;;;;;N;;;;; 0C17;TELUGU LETTER GA;Lo;0;L;;;;;N;;;;; 0C18;TELUGU LETTER GHA;Lo;0;L;;;;;N;;;;; 0C19;TELUGU LETTER NGA;Lo;0;L;;;;;N;;;;; 0C1A;TELUGU LETTER CA;Lo;0;L;;;;;N;;;;; 0C1B;TELUGU LETTER CHA;Lo;0;L;;;;;N;;;;; 0C1C;TELUGU LETTER JA;Lo;0;L;;;;;N;;;;; 0C1D;TELUGU LETTER JHA;Lo;0;L;;;;;N;;;;; 0C1E;TELUGU LETTER NYA;Lo;0;L;;;;;N;;;;; 0C1F;TELUGU LETTER TTA;Lo;0;L;;;;;N;;;;; 0C20;TELUGU LETTER TTHA;Lo;0;L;;;;;N;;;;; 0C21;TELUGU LETTER DDA;Lo;0;L;;;;;N;;;;; 0C22;TELUGU LETTER DDHA;Lo;0;L;;;;;N;;;;; 0C23;TELUGU LETTER NNA;Lo;0;L;;;;;N;;;;; 0C24;TELUGU LETTER TA;Lo;0;L;;;;;N;;;;; 0C25;TELUGU LETTER THA;Lo;0;L;;;;;N;;;;; 0C26;TELUGU LETTER DA;Lo;0;L;;;;;N;;;;; 0C27;TELUGU LETTER DHA;Lo;0;L;;;;;N;;;;; 0C28;TELUGU LETTER NA;Lo;0;L;;;;;N;;;;; 0C2A;TELUGU LETTER PA;Lo;0;L;;;;;N;;;;; 0C2B;TELUGU LETTER PHA;Lo;0;L;;;;;N;;;;; 0C2C;TELUGU LETTER BA;Lo;0;L;;;;;N;;;;; 0C2D;TELUGU LETTER BHA;Lo;0;L;;;;;N;;;;; 0C2E;TELUGU LETTER MA;Lo;0;L;;;;;N;;;;; 0C2F;TELUGU LETTER YA;Lo;0;L;;;;;N;;;;; 0C30;TELUGU LETTER RA;Lo;0;L;;;;;N;;;;; 0C31;TELUGU LETTER RRA;Lo;0;L;;;;;N;;;;; 0C32;TELUGU LETTER LA;Lo;0;L;;;;;N;;;;; 0C33;TELUGU LETTER LLA;Lo;0;L;;;;;N;;;;; 0C34;TELUGU LETTER LLLA;Lo;0;L;;;;;N;;;;; 0C35;TELUGU LETTER VA;Lo;0;L;;;;;N;;;;; 0C36;TELUGU LETTER SHA;Lo;0;L;;;;;N;;;;; 0C37;TELUGU LETTER SSA;Lo;0;L;;;;;N;;;;; 0C38;TELUGU LETTER SA;Lo;0;L;;;;;N;;;;; 0C39;TELUGU LETTER HA;Lo;0;L;;;;;N;;;;; 0C3C;TELUGU SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 0C3D;TELUGU SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; 0C3E;TELUGU VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;; 0C3F;TELUGU VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 0C40;TELUGU VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; 0C41;TELUGU VOWEL SIGN U;Mc;0;L;;;;;N;;;;; 0C42;TELUGU VOWEL SIGN UU;Mc;0;L;;;;;N;;;;; 0C43;TELUGU VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;; 0C44;TELUGU VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;; 0C46;TELUGU VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 0C47;TELUGU VOWEL SIGN EE;Mn;0;NSM;;;;;N;;;;; 0C48;TELUGU VOWEL SIGN AI;Mn;0;NSM;0C46 0C56;;;;N;;;;; 0C4A;TELUGU VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;; 0C4B;TELUGU VOWEL SIGN OO;Mn;0;NSM;;;;;N;;;;; 0C4C;TELUGU VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;; 0C4D;TELUGU SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 0C55;TELUGU LENGTH MARK;Mn;84;NSM;;;;;N;;;;; 0C56;TELUGU AI LENGTH MARK;Mn;91;NSM;;;;;N;;;;; 0C58;TELUGU LETTER TSA;Lo;0;L;;;;;N;;;;; 0C59;TELUGU LETTER DZA;Lo;0;L;;;;;N;;;;; 0C5A;TELUGU LETTER RRRA;Lo;0;L;;;;;N;;;;; 0C5D;TELUGU LETTER NAKAARA POLLU;Lo;0;L;;;;;N;;;;; 0C60;TELUGU LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 0C61;TELUGU LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 0C62;TELUGU VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; 0C63;TELUGU VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; 0C66;TELUGU DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0C67;TELUGU DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0C68;TELUGU DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0C69;TELUGU DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 0C6A;TELUGU DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 0C6B;TELUGU DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 0C6C;TELUGU DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 0C6D;TELUGU DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0C6E;TELUGU DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0C6F;TELUGU DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0C77;TELUGU SIGN SIDDHAM;Po;0;L;;;;;N;;;;; 0C78;TELUGU FRACTION DIGIT ZERO FOR ODD POWERS OF FOUR;No;0;ON;;;;0;N;;;;; 0C79;TELUGU FRACTION DIGIT ONE FOR ODD POWERS OF FOUR;No;0;ON;;;;1;N;;;;; 0C7A;TELUGU FRACTION DIGIT TWO FOR ODD POWERS OF FOUR;No;0;ON;;;;2;N;;;;; 0C7B;TELUGU FRACTION DIGIT THREE FOR ODD POWERS OF FOUR;No;0;ON;;;;3;N;;;;; 0C7C;TELUGU FRACTION DIGIT ONE FOR EVEN POWERS OF FOUR;No;0;ON;;;;1;N;;;;; 0C7D;TELUGU FRACTION DIGIT TWO FOR EVEN POWERS OF FOUR;No;0;ON;;;;2;N;;;;; 0C7E;TELUGU FRACTION DIGIT THREE FOR EVEN POWERS OF FOUR;No;0;ON;;;;3;N;;;;; 0C7F;TELUGU SIGN TUUMU;So;0;L;;;;;N;;;;; 0C80;KANNADA SIGN SPACING CANDRABINDU;Lo;0;L;;;;;N;;;;; 0C81;KANNADA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 0C82;KANNADA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;; 0C83;KANNADA SIGN VISARGA;Mc;0;L;;;;;N;;;;; 0C84;KANNADA SIGN SIDDHAM;Po;0;L;;;;;N;;;;; 0C85;KANNADA LETTER A;Lo;0;L;;;;;N;;;;; 0C86;KANNADA LETTER AA;Lo;0;L;;;;;N;;;;; 0C87;KANNADA LETTER I;Lo;0;L;;;;;N;;;;; 0C88;KANNADA LETTER II;Lo;0;L;;;;;N;;;;; 0C89;KANNADA LETTER U;Lo;0;L;;;;;N;;;;; 0C8A;KANNADA LETTER UU;Lo;0;L;;;;;N;;;;; 0C8B;KANNADA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 0C8C;KANNADA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 0C8E;KANNADA LETTER E;Lo;0;L;;;;;N;;;;; 0C8F;KANNADA LETTER EE;Lo;0;L;;;;;N;;;;; 0C90;KANNADA LETTER AI;Lo;0;L;;;;;N;;;;; 0C92;KANNADA LETTER O;Lo;0;L;;;;;N;;;;; 0C93;KANNADA LETTER OO;Lo;0;L;;;;;N;;;;; 0C94;KANNADA LETTER AU;Lo;0;L;;;;;N;;;;; 0C95;KANNADA LETTER KA;Lo;0;L;;;;;N;;;;; 0C96;KANNADA LETTER KHA;Lo;0;L;;;;;N;;;;; 0C97;KANNADA LETTER GA;Lo;0;L;;;;;N;;;;; 0C98;KANNADA LETTER GHA;Lo;0;L;;;;;N;;;;; 0C99;KANNADA LETTER NGA;Lo;0;L;;;;;N;;;;; 0C9A;KANNADA LETTER CA;Lo;0;L;;;;;N;;;;; 0C9B;KANNADA LETTER CHA;Lo;0;L;;;;;N;;;;; 0C9C;KANNADA LETTER JA;Lo;0;L;;;;;N;;;;; 0C9D;KANNADA LETTER JHA;Lo;0;L;;;;;N;;;;; 0C9E;KANNADA LETTER NYA;Lo;0;L;;;;;N;;;;; 0C9F;KANNADA LETTER TTA;Lo;0;L;;;;;N;;;;; 0CA0;KANNADA LETTER TTHA;Lo;0;L;;;;;N;;;;; 0CA1;KANNADA LETTER DDA;Lo;0;L;;;;;N;;;;; 0CA2;KANNADA LETTER DDHA;Lo;0;L;;;;;N;;;;; 0CA3;KANNADA LETTER NNA;Lo;0;L;;;;;N;;;;; 0CA4;KANNADA LETTER TA;Lo;0;L;;;;;N;;;;; 0CA5;KANNADA LETTER THA;Lo;0;L;;;;;N;;;;; 0CA6;KANNADA LETTER DA;Lo;0;L;;;;;N;;;;; 0CA7;KANNADA LETTER DHA;Lo;0;L;;;;;N;;;;; 0CA8;KANNADA LETTER NA;Lo;0;L;;;;;N;;;;; 0CAA;KANNADA LETTER PA;Lo;0;L;;;;;N;;;;; 0CAB;KANNADA LETTER PHA;Lo;0;L;;;;;N;;;;; 0CAC;KANNADA LETTER BA;Lo;0;L;;;;;N;;;;; 0CAD;KANNADA LETTER BHA;Lo;0;L;;;;;N;;;;; 0CAE;KANNADA LETTER MA;Lo;0;L;;;;;N;;;;; 0CAF;KANNADA LETTER YA;Lo;0;L;;;;;N;;;;; 0CB0;KANNADA LETTER RA;Lo;0;L;;;;;N;;;;; 0CB1;KANNADA LETTER RRA;Lo;0;L;;;;;N;;;;; 0CB2;KANNADA LETTER LA;Lo;0;L;;;;;N;;;;; 0CB3;KANNADA LETTER LLA;Lo;0;L;;;;;N;;;;; 0CB5;KANNADA LETTER VA;Lo;0;L;;;;;N;;;;; 0CB6;KANNADA LETTER SHA;Lo;0;L;;;;;N;;;;; 0CB7;KANNADA LETTER SSA;Lo;0;L;;;;;N;;;;; 0CB8;KANNADA LETTER SA;Lo;0;L;;;;;N;;;;; 0CB9;KANNADA LETTER HA;Lo;0;L;;;;;N;;;;; 0CBC;KANNADA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 0CBD;KANNADA SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; 0CBE;KANNADA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 0CBF;KANNADA VOWEL SIGN I;Mn;0;L;;;;;N;;;;; 0CC0;KANNADA VOWEL SIGN II;Mc;0;L;0CBF 0CD5;;;;N;;;;; 0CC1;KANNADA VOWEL SIGN U;Mc;0;L;;;;;N;;;;; 0CC2;KANNADA VOWEL SIGN UU;Mc;0;L;;;;;N;;;;; 0CC3;KANNADA VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;; 0CC4;KANNADA VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;; 0CC6;KANNADA VOWEL SIGN E;Mn;0;L;;;;;N;;;;; 0CC7;KANNADA VOWEL SIGN EE;Mc;0;L;0CC6 0CD5;;;;N;;;;; 0CC8;KANNADA VOWEL SIGN AI;Mc;0;L;0CC6 0CD6;;;;N;;;;; 0CCA;KANNADA VOWEL SIGN O;Mc;0;L;0CC6 0CC2;;;;N;;;;; 0CCB;KANNADA VOWEL SIGN OO;Mc;0;L;0CCA 0CD5;;;;N;;;;; 0CCC;KANNADA VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;; 0CCD;KANNADA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 0CD5;KANNADA LENGTH MARK;Mc;0;L;;;;;N;;;;; 0CD6;KANNADA AI LENGTH MARK;Mc;0;L;;;;;N;;;;; 0CDD;KANNADA LETTER NAKAARA POLLU;Lo;0;L;;;;;N;;;;; 0CDE;KANNADA LETTER FA;Lo;0;L;;;;;N;;;;; 0CE0;KANNADA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 0CE1;KANNADA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 0CE2;KANNADA VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; 0CE3;KANNADA VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; 0CE6;KANNADA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0CE7;KANNADA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0CE8;KANNADA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0CE9;KANNADA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 0CEA;KANNADA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 0CEB;KANNADA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 0CEC;KANNADA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 0CED;KANNADA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0CEE;KANNADA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0CEF;KANNADA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0CF1;KANNADA SIGN JIHVAMULIYA;Lo;0;L;;;;;N;;;;; 0CF2;KANNADA SIGN UPADHMANIYA;Lo;0;L;;;;;N;;;;; 0D00;MALAYALAM SIGN COMBINING ANUSVARA ABOVE;Mn;0;NSM;;;;;N;;;;; 0D01;MALAYALAM SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 0D02;MALAYALAM SIGN ANUSVARA;Mc;0;L;;;;;N;;;;; 0D03;MALAYALAM SIGN VISARGA;Mc;0;L;;;;;N;;;;; 0D04;MALAYALAM LETTER VEDIC ANUSVARA;Lo;0;L;;;;;N;;;;; 0D05;MALAYALAM LETTER A;Lo;0;L;;;;;N;;;;; 0D06;MALAYALAM LETTER AA;Lo;0;L;;;;;N;;;;; 0D07;MALAYALAM LETTER I;Lo;0;L;;;;;N;;;;; 0D08;MALAYALAM LETTER II;Lo;0;L;;;;;N;;;;; 0D09;MALAYALAM LETTER U;Lo;0;L;;;;;N;;;;; 0D0A;MALAYALAM LETTER UU;Lo;0;L;;;;;N;;;;; 0D0B;MALAYALAM LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 0D0C;MALAYALAM LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 0D0E;MALAYALAM LETTER E;Lo;0;L;;;;;N;;;;; 0D0F;MALAYALAM LETTER EE;Lo;0;L;;;;;N;;;;; 0D10;MALAYALAM LETTER AI;Lo;0;L;;;;;N;;;;; 0D12;MALAYALAM LETTER O;Lo;0;L;;;;;N;;;;; 0D13;MALAYALAM LETTER OO;Lo;0;L;;;;;N;;;;; 0D14;MALAYALAM LETTER AU;Lo;0;L;;;;;N;;;;; 0D15;MALAYALAM LETTER KA;Lo;0;L;;;;;N;;;;; 0D16;MALAYALAM LETTER KHA;Lo;0;L;;;;;N;;;;; 0D17;MALAYALAM LETTER GA;Lo;0;L;;;;;N;;;;; 0D18;MALAYALAM LETTER GHA;Lo;0;L;;;;;N;;;;; 0D19;MALAYALAM LETTER NGA;Lo;0;L;;;;;N;;;;; 0D1A;MALAYALAM LETTER CA;Lo;0;L;;;;;N;;;;; 0D1B;MALAYALAM LETTER CHA;Lo;0;L;;;;;N;;;;; 0D1C;MALAYALAM LETTER JA;Lo;0;L;;;;;N;;;;; 0D1D;MALAYALAM LETTER JHA;Lo;0;L;;;;;N;;;;; 0D1E;MALAYALAM LETTER NYA;Lo;0;L;;;;;N;;;;; 0D1F;MALAYALAM LETTER TTA;Lo;0;L;;;;;N;;;;; 0D20;MALAYALAM LETTER TTHA;Lo;0;L;;;;;N;;;;; 0D21;MALAYALAM LETTER DDA;Lo;0;L;;;;;N;;;;; 0D22;MALAYALAM LETTER DDHA;Lo;0;L;;;;;N;;;;; 0D23;MALAYALAM LETTER NNA;Lo;0;L;;;;;N;;;;; 0D24;MALAYALAM LETTER TA;Lo;0;L;;;;;N;;;;; 0D25;MALAYALAM LETTER THA;Lo;0;L;;;;;N;;;;; 0D26;MALAYALAM LETTER DA;Lo;0;L;;;;;N;;;;; 0D27;MALAYALAM LETTER DHA;Lo;0;L;;;;;N;;;;; 0D28;MALAYALAM LETTER NA;Lo;0;L;;;;;N;;;;; 0D29;MALAYALAM LETTER NNNA;Lo;0;L;;;;;N;;;;; 0D2A;MALAYALAM LETTER PA;Lo;0;L;;;;;N;;;;; 0D2B;MALAYALAM LETTER PHA;Lo;0;L;;;;;N;;;;; 0D2C;MALAYALAM LETTER BA;Lo;0;L;;;;;N;;;;; 0D2D;MALAYALAM LETTER BHA;Lo;0;L;;;;;N;;;;; 0D2E;MALAYALAM LETTER MA;Lo;0;L;;;;;N;;;;; 0D2F;MALAYALAM LETTER YA;Lo;0;L;;;;;N;;;;; 0D30;MALAYALAM LETTER RA;Lo;0;L;;;;;N;;;;; 0D31;MALAYALAM LETTER RRA;Lo;0;L;;;;;N;;;;; 0D32;MALAYALAM LETTER LA;Lo;0;L;;;;;N;;;;; 0D33;MALAYALAM LETTER LLA;Lo;0;L;;;;;N;;;;; 0D34;MALAYALAM LETTER LLLA;Lo;0;L;;;;;N;;;;; 0D35;MALAYALAM LETTER VA;Lo;0;L;;;;;N;;;;; 0D36;MALAYALAM LETTER SHA;Lo;0;L;;;;;N;;;;; 0D37;MALAYALAM LETTER SSA;Lo;0;L;;;;;N;;;;; 0D38;MALAYALAM LETTER SA;Lo;0;L;;;;;N;;;;; 0D39;MALAYALAM LETTER HA;Lo;0;L;;;;;N;;;;; 0D3A;MALAYALAM LETTER TTTA;Lo;0;L;;;;;N;;;;; 0D3B;MALAYALAM SIGN VERTICAL BAR VIRAMA;Mn;9;NSM;;;;;N;;;;; 0D3C;MALAYALAM SIGN CIRCULAR VIRAMA;Mn;9;NSM;;;;;N;;;;; 0D3D;MALAYALAM SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; 0D3E;MALAYALAM VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 0D3F;MALAYALAM VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 0D40;MALAYALAM VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 0D41;MALAYALAM VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 0D42;MALAYALAM VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 0D43;MALAYALAM VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; 0D44;MALAYALAM VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;; 0D46;MALAYALAM VOWEL SIGN E;Mc;0;L;;;;;N;;;;; 0D47;MALAYALAM VOWEL SIGN EE;Mc;0;L;;;;;N;;;;; 0D48;MALAYALAM VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; 0D4A;MALAYALAM VOWEL SIGN O;Mc;0;L;0D46 0D3E;;;;N;;;;; 0D4B;MALAYALAM VOWEL SIGN OO;Mc;0;L;0D47 0D3E;;;;N;;;;; 0D4C;MALAYALAM VOWEL SIGN AU;Mc;0;L;0D46 0D57;;;;N;;;;; 0D4D;MALAYALAM SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 0D4E;MALAYALAM LETTER DOT REPH;Lo;0;L;;;;;N;;;;; 0D4F;MALAYALAM SIGN PARA;So;0;L;;;;;N;;;;; 0D54;MALAYALAM LETTER CHILLU M;Lo;0;L;;;;;N;;;;; 0D55;MALAYALAM LETTER CHILLU Y;Lo;0;L;;;;;N;;;;; 0D56;MALAYALAM LETTER CHILLU LLL;Lo;0;L;;;;;N;;;;; 0D57;MALAYALAM AU LENGTH MARK;Mc;0;L;;;;;N;;;;; 0D58;MALAYALAM FRACTION ONE ONE-HUNDRED-AND-SIXTIETH;No;0;L;;;;1/160;N;;;;; 0D59;MALAYALAM FRACTION ONE FORTIETH;No;0;L;;;;1/40;N;;;;; 0D5A;MALAYALAM FRACTION THREE EIGHTIETHS;No;0;L;;;;3/80;N;;;;; 0D5B;MALAYALAM FRACTION ONE TWENTIETH;No;0;L;;;;1/20;N;;;;; 0D5C;MALAYALAM FRACTION ONE TENTH;No;0;L;;;;1/10;N;;;;; 0D5D;MALAYALAM FRACTION THREE TWENTIETHS;No;0;L;;;;3/20;N;;;;; 0D5E;MALAYALAM FRACTION ONE FIFTH;No;0;L;;;;1/5;N;;;;; 0D5F;MALAYALAM LETTER ARCHAIC II;Lo;0;L;;;;;N;;;;; 0D60;MALAYALAM LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 0D61;MALAYALAM LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 0D62;MALAYALAM VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; 0D63;MALAYALAM VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; 0D66;MALAYALAM DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0D67;MALAYALAM DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0D68;MALAYALAM DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0D69;MALAYALAM DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 0D6A;MALAYALAM DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 0D6B;MALAYALAM DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 0D6C;MALAYALAM DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 0D6D;MALAYALAM DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0D6E;MALAYALAM DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0D6F;MALAYALAM DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0D70;MALAYALAM NUMBER TEN;No;0;L;;;;10;N;;;;; 0D71;MALAYALAM NUMBER ONE HUNDRED;No;0;L;;;;100;N;;;;; 0D72;MALAYALAM NUMBER ONE THOUSAND;No;0;L;;;;1000;N;;;;; 0D73;MALAYALAM FRACTION ONE QUARTER;No;0;L;;;;1/4;N;;;;; 0D74;MALAYALAM FRACTION ONE HALF;No;0;L;;;;1/2;N;;;;; 0D75;MALAYALAM FRACTION THREE QUARTERS;No;0;L;;;;3/4;N;;;;; 0D76;MALAYALAM FRACTION ONE SIXTEENTH;No;0;L;;;;1/16;N;;;;; 0D77;MALAYALAM FRACTION ONE EIGHTH;No;0;L;;;;1/8;N;;;;; 0D78;MALAYALAM FRACTION THREE SIXTEENTHS;No;0;L;;;;3/16;N;;;;; 0D79;MALAYALAM DATE MARK;So;0;L;;;;;N;;;;; 0D7A;MALAYALAM LETTER CHILLU NN;Lo;0;L;;;;;N;;;;; 0D7B;MALAYALAM LETTER CHILLU N;Lo;0;L;;;;;N;;;;; 0D7C;MALAYALAM LETTER CHILLU RR;Lo;0;L;;;;;N;;;;; 0D7D;MALAYALAM LETTER CHILLU L;Lo;0;L;;;;;N;;;;; 0D7E;MALAYALAM LETTER CHILLU LL;Lo;0;L;;;;;N;;;;; 0D7F;MALAYALAM LETTER CHILLU K;Lo;0;L;;;;;N;;;;; 0D81;SINHALA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 0D82;SINHALA SIGN ANUSVARAYA;Mc;0;L;;;;;N;;;;; 0D83;SINHALA SIGN VISARGAYA;Mc;0;L;;;;;N;;;;; 0D85;SINHALA LETTER AYANNA;Lo;0;L;;;;;N;;;;; 0D86;SINHALA LETTER AAYANNA;Lo;0;L;;;;;N;;;;; 0D87;SINHALA LETTER AEYANNA;Lo;0;L;;;;;N;;;;; 0D88;SINHALA LETTER AEEYANNA;Lo;0;L;;;;;N;;;;; 0D89;SINHALA LETTER IYANNA;Lo;0;L;;;;;N;;;;; 0D8A;SINHALA LETTER IIYANNA;Lo;0;L;;;;;N;;;;; 0D8B;SINHALA LETTER UYANNA;Lo;0;L;;;;;N;;;;; 0D8C;SINHALA LETTER UUYANNA;Lo;0;L;;;;;N;;;;; 0D8D;SINHALA LETTER IRUYANNA;Lo;0;L;;;;;N;;;;; 0D8E;SINHALA LETTER IRUUYANNA;Lo;0;L;;;;;N;;;;; 0D8F;SINHALA LETTER ILUYANNA;Lo;0;L;;;;;N;;;;; 0D90;SINHALA LETTER ILUUYANNA;Lo;0;L;;;;;N;;;;; 0D91;SINHALA LETTER EYANNA;Lo;0;L;;;;;N;;;;; 0D92;SINHALA LETTER EEYANNA;Lo;0;L;;;;;N;;;;; 0D93;SINHALA LETTER AIYANNA;Lo;0;L;;;;;N;;;;; 0D94;SINHALA LETTER OYANNA;Lo;0;L;;;;;N;;;;; 0D95;SINHALA LETTER OOYANNA;Lo;0;L;;;;;N;;;;; 0D96;SINHALA LETTER AUYANNA;Lo;0;L;;;;;N;;;;; 0D9A;SINHALA LETTER ALPAPRAANA KAYANNA;Lo;0;L;;;;;N;;;;; 0D9B;SINHALA LETTER MAHAAPRAANA KAYANNA;Lo;0;L;;;;;N;;;;; 0D9C;SINHALA LETTER ALPAPRAANA GAYANNA;Lo;0;L;;;;;N;;;;; 0D9D;SINHALA LETTER MAHAAPRAANA GAYANNA;Lo;0;L;;;;;N;;;;; 0D9E;SINHALA LETTER KANTAJA NAASIKYAYA;Lo;0;L;;;;;N;;;;; 0D9F;SINHALA LETTER SANYAKA GAYANNA;Lo;0;L;;;;;N;;;;; 0DA0;SINHALA LETTER ALPAPRAANA CAYANNA;Lo;0;L;;;;;N;;;;; 0DA1;SINHALA LETTER MAHAAPRAANA CAYANNA;Lo;0;L;;;;;N;;;;; 0DA2;SINHALA LETTER ALPAPRAANA JAYANNA;Lo;0;L;;;;;N;;;;; 0DA3;SINHALA LETTER MAHAAPRAANA JAYANNA;Lo;0;L;;;;;N;;;;; 0DA4;SINHALA LETTER TAALUJA NAASIKYAYA;Lo;0;L;;;;;N;;;;; 0DA5;SINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYA;Lo;0;L;;;;;N;;;;; 0DA6;SINHALA LETTER SANYAKA JAYANNA;Lo;0;L;;;;;N;;;;; 0DA7;SINHALA LETTER ALPAPRAANA TTAYANNA;Lo;0;L;;;;;N;;;;; 0DA8;SINHALA LETTER MAHAAPRAANA TTAYANNA;Lo;0;L;;;;;N;;;;; 0DA9;SINHALA LETTER ALPAPRAANA DDAYANNA;Lo;0;L;;;;;N;;;;; 0DAA;SINHALA LETTER MAHAAPRAANA DDAYANNA;Lo;0;L;;;;;N;;;;; 0DAB;SINHALA LETTER MUURDHAJA NAYANNA;Lo;0;L;;;;;N;;;;; 0DAC;SINHALA LETTER SANYAKA DDAYANNA;Lo;0;L;;;;;N;;;;; 0DAD;SINHALA LETTER ALPAPRAANA TAYANNA;Lo;0;L;;;;;N;;;;; 0DAE;SINHALA LETTER MAHAAPRAANA TAYANNA;Lo;0;L;;;;;N;;;;; 0DAF;SINHALA LETTER ALPAPRAANA DAYANNA;Lo;0;L;;;;;N;;;;; 0DB0;SINHALA LETTER MAHAAPRAANA DAYANNA;Lo;0;L;;;;;N;;;;; 0DB1;SINHALA LETTER DANTAJA NAYANNA;Lo;0;L;;;;;N;;;;; 0DB3;SINHALA LETTER SANYAKA DAYANNA;Lo;0;L;;;;;N;;;;; 0DB4;SINHALA LETTER ALPAPRAANA PAYANNA;Lo;0;L;;;;;N;;;;; 0DB5;SINHALA LETTER MAHAAPRAANA PAYANNA;Lo;0;L;;;;;N;;;;; 0DB6;SINHALA LETTER ALPAPRAANA BAYANNA;Lo;0;L;;;;;N;;;;; 0DB7;SINHALA LETTER MAHAAPRAANA BAYANNA;Lo;0;L;;;;;N;;;;; 0DB8;SINHALA LETTER MAYANNA;Lo;0;L;;;;;N;;;;; 0DB9;SINHALA LETTER AMBA BAYANNA;Lo;0;L;;;;;N;;;;; 0DBA;SINHALA LETTER YAYANNA;Lo;0;L;;;;;N;;;;; 0DBB;SINHALA LETTER RAYANNA;Lo;0;L;;;;;N;;;;; 0DBD;SINHALA LETTER DANTAJA LAYANNA;Lo;0;L;;;;;N;;;;; 0DC0;SINHALA LETTER VAYANNA;Lo;0;L;;;;;N;;;;; 0DC1;SINHALA LETTER TAALUJA SAYANNA;Lo;0;L;;;;;N;;;;; 0DC2;SINHALA LETTER MUURDHAJA SAYANNA;Lo;0;L;;;;;N;;;;; 0DC3;SINHALA LETTER DANTAJA SAYANNA;Lo;0;L;;;;;N;;;;; 0DC4;SINHALA LETTER HAYANNA;Lo;0;L;;;;;N;;;;; 0DC5;SINHALA LETTER MUURDHAJA LAYANNA;Lo;0;L;;;;;N;;;;; 0DC6;SINHALA LETTER FAYANNA;Lo;0;L;;;;;N;;;;; 0DCA;SINHALA SIGN AL-LAKUNA;Mn;9;NSM;;;;;N;;;;; 0DCF;SINHALA VOWEL SIGN AELA-PILLA;Mc;0;L;;;;;N;;;;; 0DD0;SINHALA VOWEL SIGN KETTI AEDA-PILLA;Mc;0;L;;;;;N;;;;; 0DD1;SINHALA VOWEL SIGN DIGA AEDA-PILLA;Mc;0;L;;;;;N;;;;; 0DD2;SINHALA VOWEL SIGN KETTI IS-PILLA;Mn;0;NSM;;;;;N;;;;; 0DD3;SINHALA VOWEL SIGN DIGA IS-PILLA;Mn;0;NSM;;;;;N;;;;; 0DD4;SINHALA VOWEL SIGN KETTI PAA-PILLA;Mn;0;NSM;;;;;N;;;;; 0DD6;SINHALA VOWEL SIGN DIGA PAA-PILLA;Mn;0;NSM;;;;;N;;;;; 0DD8;SINHALA VOWEL SIGN GAETTA-PILLA;Mc;0;L;;;;;N;;;;; 0DD9;SINHALA VOWEL SIGN KOMBUVA;Mc;0;L;;;;;N;;;;; 0DDA;SINHALA VOWEL SIGN DIGA KOMBUVA;Mc;0;L;0DD9 0DCA;;;;N;;;;; 0DDB;SINHALA VOWEL SIGN KOMBU DEKA;Mc;0;L;;;;;N;;;;; 0DDC;SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA;Mc;0;L;0DD9 0DCF;;;;N;;;;; 0DDD;SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA;Mc;0;L;0DDC 0DCA;;;;N;;;;; 0DDE;SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA;Mc;0;L;0DD9 0DDF;;;;N;;;;; 0DDF;SINHALA VOWEL SIGN GAYANUKITTA;Mc;0;L;;;;;N;;;;; 0DE6;SINHALA LITH DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0DE7;SINHALA LITH DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0DE8;SINHALA LITH DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0DE9;SINHALA LITH DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 0DEA;SINHALA LITH DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 0DEB;SINHALA LITH DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 0DEC;SINHALA LITH DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 0DED;SINHALA LITH DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0DEE;SINHALA LITH DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0DEF;SINHALA LITH DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0DF2;SINHALA VOWEL SIGN DIGA GAETTA-PILLA;Mc;0;L;;;;;N;;;;; 0DF3;SINHALA VOWEL SIGN DIGA GAYANUKITTA;Mc;0;L;;;;;N;;;;; 0DF4;SINHALA PUNCTUATION KUNDDALIYA;Po;0;L;;;;;N;;;;; 0E01;THAI CHARACTER KO KAI;Lo;0;L;;;;;N;THAI LETTER KO KAI;;;; 0E02;THAI CHARACTER KHO KHAI;Lo;0;L;;;;;N;THAI LETTER KHO KHAI;;;; 0E03;THAI CHARACTER KHO KHUAT;Lo;0;L;;;;;N;THAI LETTER KHO KHUAT;;;; 0E04;THAI CHARACTER KHO KHWAI;Lo;0;L;;;;;N;THAI LETTER KHO KHWAI;;;; 0E05;THAI CHARACTER KHO KHON;Lo;0;L;;;;;N;THAI LETTER KHO KHON;;;; 0E06;THAI CHARACTER KHO RAKHANG;Lo;0;L;;;;;N;THAI LETTER KHO RAKHANG;;;; 0E07;THAI CHARACTER NGO NGU;Lo;0;L;;;;;N;THAI LETTER NGO NGU;;;; 0E08;THAI CHARACTER CHO CHAN;Lo;0;L;;;;;N;THAI LETTER CHO CHAN;;;; 0E09;THAI CHARACTER CHO CHING;Lo;0;L;;;;;N;THAI LETTER CHO CHING;;;; 0E0A;THAI CHARACTER CHO CHANG;Lo;0;L;;;;;N;THAI LETTER CHO CHANG;;;; 0E0B;THAI CHARACTER SO SO;Lo;0;L;;;;;N;THAI LETTER SO SO;;;; 0E0C;THAI CHARACTER CHO CHOE;Lo;0;L;;;;;N;THAI LETTER CHO CHOE;;;; 0E0D;THAI CHARACTER YO YING;Lo;0;L;;;;;N;THAI LETTER YO YING;;;; 0E0E;THAI CHARACTER DO CHADA;Lo;0;L;;;;;N;THAI LETTER DO CHADA;;;; 0E0F;THAI CHARACTER TO PATAK;Lo;0;L;;;;;N;THAI LETTER TO PATAK;;;; 0E10;THAI CHARACTER THO THAN;Lo;0;L;;;;;N;THAI LETTER THO THAN;;;; 0E11;THAI CHARACTER THO NANGMONTHO;Lo;0;L;;;;;N;THAI LETTER THO NANGMONTHO;;;; 0E12;THAI CHARACTER THO PHUTHAO;Lo;0;L;;;;;N;THAI LETTER THO PHUTHAO;;;; 0E13;THAI CHARACTER NO NEN;Lo;0;L;;;;;N;THAI LETTER NO NEN;;;; 0E14;THAI CHARACTER DO DEK;Lo;0;L;;;;;N;THAI LETTER DO DEK;;;; 0E15;THAI CHARACTER TO TAO;Lo;0;L;;;;;N;THAI LETTER TO TAO;;;; 0E16;THAI CHARACTER THO THUNG;Lo;0;L;;;;;N;THAI LETTER THO THUNG;;;; 0E17;THAI CHARACTER THO THAHAN;Lo;0;L;;;;;N;THAI LETTER THO THAHAN;;;; 0E18;THAI CHARACTER THO THONG;Lo;0;L;;;;;N;THAI LETTER THO THONG;;;; 0E19;THAI CHARACTER NO NU;Lo;0;L;;;;;N;THAI LETTER NO NU;;;; 0E1A;THAI CHARACTER BO BAIMAI;Lo;0;L;;;;;N;THAI LETTER BO BAIMAI;;;; 0E1B;THAI CHARACTER PO PLA;Lo;0;L;;;;;N;THAI LETTER PO PLA;;;; 0E1C;THAI CHARACTER PHO PHUNG;Lo;0;L;;;;;N;THAI LETTER PHO PHUNG;;;; 0E1D;THAI CHARACTER FO FA;Lo;0;L;;;;;N;THAI LETTER FO FA;;;; 0E1E;THAI CHARACTER PHO PHAN;Lo;0;L;;;;;N;THAI LETTER PHO PHAN;;;; 0E1F;THAI CHARACTER FO FAN;Lo;0;L;;;;;N;THAI LETTER FO FAN;;;; 0E20;THAI CHARACTER PHO SAMPHAO;Lo;0;L;;;;;N;THAI LETTER PHO SAMPHAO;;;; 0E21;THAI CHARACTER MO MA;Lo;0;L;;;;;N;THAI LETTER MO MA;;;; 0E22;THAI CHARACTER YO YAK;Lo;0;L;;;;;N;THAI LETTER YO YAK;;;; 0E23;THAI CHARACTER RO RUA;Lo;0;L;;;;;N;THAI LETTER RO RUA;;;; 0E24;THAI CHARACTER RU;Lo;0;L;;;;;N;THAI LETTER RU;;;; 0E25;THAI CHARACTER LO LING;Lo;0;L;;;;;N;THAI LETTER LO LING;;;; 0E26;THAI CHARACTER LU;Lo;0;L;;;;;N;THAI LETTER LU;;;; 0E27;THAI CHARACTER WO WAEN;Lo;0;L;;;;;N;THAI LETTER WO WAEN;;;; 0E28;THAI CHARACTER SO SALA;Lo;0;L;;;;;N;THAI LETTER SO SALA;;;; 0E29;THAI CHARACTER SO RUSI;Lo;0;L;;;;;N;THAI LETTER SO RUSI;;;; 0E2A;THAI CHARACTER SO SUA;Lo;0;L;;;;;N;THAI LETTER SO SUA;;;; 0E2B;THAI CHARACTER HO HIP;Lo;0;L;;;;;N;THAI LETTER HO HIP;;;; 0E2C;THAI CHARACTER LO CHULA;Lo;0;L;;;;;N;THAI LETTER LO CHULA;;;; 0E2D;THAI CHARACTER O ANG;Lo;0;L;;;;;N;THAI LETTER O ANG;;;; 0E2E;THAI CHARACTER HO NOKHUK;Lo;0;L;;;;;N;THAI LETTER HO NOK HUK;;;; 0E2F;THAI CHARACTER PAIYANNOI;Lo;0;L;;;;;N;THAI PAI YAN NOI;;;; 0E30;THAI CHARACTER SARA A;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA A;;;; 0E31;THAI CHARACTER MAI HAN-AKAT;Mn;0;NSM;;;;;N;THAI VOWEL SIGN MAI HAN-AKAT;;;; 0E32;THAI CHARACTER SARA AA;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA AA;;;; 0E33;THAI CHARACTER SARA AM;Lo;0;L; 0E4D 0E32;;;;N;THAI VOWEL SIGN SARA AM;;;; 0E34;THAI CHARACTER SARA I;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA I;;;; 0E35;THAI CHARACTER SARA II;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA II;;;; 0E36;THAI CHARACTER SARA UE;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA UE;;;; 0E37;THAI CHARACTER SARA UEE;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA UEE;;;; 0E38;THAI CHARACTER SARA U;Mn;103;NSM;;;;;N;THAI VOWEL SIGN SARA U;;;; 0E39;THAI CHARACTER SARA UU;Mn;103;NSM;;;;;N;THAI VOWEL SIGN SARA UU;;;; 0E3A;THAI CHARACTER PHINTHU;Mn;9;NSM;;;;;N;THAI VOWEL SIGN PHINTHU;;;; 0E3F;THAI CURRENCY SYMBOL BAHT;Sc;0;ET;;;;;N;THAI BAHT SIGN;;;; 0E40;THAI CHARACTER SARA E;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA E;;;; 0E41;THAI CHARACTER SARA AE;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA AE;;;; 0E42;THAI CHARACTER SARA O;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA O;;;; 0E43;THAI CHARACTER SARA AI MAIMUAN;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA MAI MUAN;;;; 0E44;THAI CHARACTER SARA AI MAIMALAI;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA MAI MALAI;;;; 0E45;THAI CHARACTER LAKKHANGYAO;Lo;0;L;;;;;N;THAI LAK KHANG YAO;;;; 0E46;THAI CHARACTER MAIYAMOK;Lm;0;L;;;;;N;THAI MAI YAMOK;;;; 0E47;THAI CHARACTER MAITAIKHU;Mn;0;NSM;;;;;N;THAI VOWEL SIGN MAI TAI KHU;;;; 0E48;THAI CHARACTER MAI EK;Mn;107;NSM;;;;;N;THAI TONE MAI EK;;;; 0E49;THAI CHARACTER MAI THO;Mn;107;NSM;;;;;N;THAI TONE MAI THO;;;; 0E4A;THAI CHARACTER MAI TRI;Mn;107;NSM;;;;;N;THAI TONE MAI TRI;;;; 0E4B;THAI CHARACTER MAI CHATTAWA;Mn;107;NSM;;;;;N;THAI TONE MAI CHATTAWA;;;; 0E4C;THAI CHARACTER THANTHAKHAT;Mn;0;NSM;;;;;N;THAI THANTHAKHAT;;;; 0E4D;THAI CHARACTER NIKHAHIT;Mn;0;NSM;;;;;N;THAI NIKKHAHIT;;;; 0E4E;THAI CHARACTER YAMAKKAN;Mn;0;NSM;;;;;N;THAI YAMAKKAN;;;; 0E4F;THAI CHARACTER FONGMAN;Po;0;L;;;;;N;THAI FONGMAN;;;; 0E50;THAI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0E51;THAI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0E52;THAI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0E53;THAI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 0E54;THAI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 0E55;THAI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 0E56;THAI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 0E57;THAI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0E58;THAI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0E59;THAI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0E5A;THAI CHARACTER ANGKHANKHU;Po;0;L;;;;;N;THAI ANGKHANKHU;;;; 0E5B;THAI CHARACTER KHOMUT;Po;0;L;;;;;N;THAI KHOMUT;;;; 0E81;LAO LETTER KO;Lo;0;L;;;;;N;;;;; 0E82;LAO LETTER KHO SUNG;Lo;0;L;;;;;N;;;;; 0E84;LAO LETTER KHO TAM;Lo;0;L;;;;;N;;;;; 0E86;LAO LETTER PALI GHA;Lo;0;L;;;;;N;;;;; 0E87;LAO LETTER NGO;Lo;0;L;;;;;N;;;;; 0E88;LAO LETTER CO;Lo;0;L;;;;;N;;;;; 0E89;LAO LETTER PALI CHA;Lo;0;L;;;;;N;;;;; 0E8A;LAO LETTER SO TAM;Lo;0;L;;;;;N;;;;; 0E8C;LAO LETTER PALI JHA;Lo;0;L;;;;;N;;;;; 0E8D;LAO LETTER NYO;Lo;0;L;;;;;N;;;;; 0E8E;LAO LETTER PALI NYA;Lo;0;L;;;;;N;;;;; 0E8F;LAO LETTER PALI TTA;Lo;0;L;;;;;N;;;;; 0E90;LAO LETTER PALI TTHA;Lo;0;L;;;;;N;;;;; 0E91;LAO LETTER PALI DDA;Lo;0;L;;;;;N;;;;; 0E92;LAO LETTER PALI DDHA;Lo;0;L;;;;;N;;;;; 0E93;LAO LETTER PALI NNA;Lo;0;L;;;;;N;;;;; 0E94;LAO LETTER DO;Lo;0;L;;;;;N;;;;; 0E95;LAO LETTER TO;Lo;0;L;;;;;N;;;;; 0E96;LAO LETTER THO SUNG;Lo;0;L;;;;;N;;;;; 0E97;LAO LETTER THO TAM;Lo;0;L;;;;;N;;;;; 0E98;LAO LETTER PALI DHA;Lo;0;L;;;;;N;;;;; 0E99;LAO LETTER NO;Lo;0;L;;;;;N;;;;; 0E9A;LAO LETTER BO;Lo;0;L;;;;;N;;;;; 0E9B;LAO LETTER PO;Lo;0;L;;;;;N;;;;; 0E9C;LAO LETTER PHO SUNG;Lo;0;L;;;;;N;;;;; 0E9D;LAO LETTER FO TAM;Lo;0;L;;;;;N;;;;; 0E9E;LAO LETTER PHO TAM;Lo;0;L;;;;;N;;;;; 0E9F;LAO LETTER FO SUNG;Lo;0;L;;;;;N;;;;; 0EA0;LAO LETTER PALI BHA;Lo;0;L;;;;;N;;;;; 0EA1;LAO LETTER MO;Lo;0;L;;;;;N;;;;; 0EA2;LAO LETTER YO;Lo;0;L;;;;;N;;;;; 0EA3;LAO LETTER LO LING;Lo;0;L;;;;;N;;;;; 0EA5;LAO LETTER LO LOOT;Lo;0;L;;;;;N;;;;; 0EA7;LAO LETTER WO;Lo;0;L;;;;;N;;;;; 0EA8;LAO LETTER SANSKRIT SHA;Lo;0;L;;;;;N;;;;; 0EA9;LAO LETTER SANSKRIT SSA;Lo;0;L;;;;;N;;;;; 0EAA;LAO LETTER SO SUNG;Lo;0;L;;;;;N;;;;; 0EAB;LAO LETTER HO SUNG;Lo;0;L;;;;;N;;;;; 0EAC;LAO LETTER PALI LLA;Lo;0;L;;;;;N;;;;; 0EAD;LAO LETTER O;Lo;0;L;;;;;N;;;;; 0EAE;LAO LETTER HO TAM;Lo;0;L;;;;;N;;;;; 0EAF;LAO ELLIPSIS;Lo;0;L;;;;;N;;;;; 0EB0;LAO VOWEL SIGN A;Lo;0;L;;;;;N;;;;; 0EB1;LAO VOWEL SIGN MAI KAN;Mn;0;NSM;;;;;N;;;;; 0EB2;LAO VOWEL SIGN AA;Lo;0;L;;;;;N;;;;; 0EB3;LAO VOWEL SIGN AM;Lo;0;L; 0ECD 0EB2;;;;N;;;;; 0EB4;LAO VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 0EB5;LAO VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; 0EB6;LAO VOWEL SIGN Y;Mn;0;NSM;;;;;N;;;;; 0EB7;LAO VOWEL SIGN YY;Mn;0;NSM;;;;;N;;;;; 0EB8;LAO VOWEL SIGN U;Mn;118;NSM;;;;;N;;;;; 0EB9;LAO VOWEL SIGN UU;Mn;118;NSM;;;;;N;;;;; 0EBA;LAO SIGN PALI VIRAMA;Mn;9;NSM;;;;;N;;;;; 0EBB;LAO VOWEL SIGN MAI KON;Mn;0;NSM;;;;;N;;;;; 0EBC;LAO SEMIVOWEL SIGN LO;Mn;0;NSM;;;;;N;;;;; 0EBD;LAO SEMIVOWEL SIGN NYO;Lo;0;L;;;;;N;;;;; 0EC0;LAO VOWEL SIGN E;Lo;0;L;;;;;N;;;;; 0EC1;LAO VOWEL SIGN EI;Lo;0;L;;;;;N;;;;; 0EC2;LAO VOWEL SIGN O;Lo;0;L;;;;;N;;;;; 0EC3;LAO VOWEL SIGN AY;Lo;0;L;;;;;N;;;;; 0EC4;LAO VOWEL SIGN AI;Lo;0;L;;;;;N;;;;; 0EC6;LAO KO LA;Lm;0;L;;;;;N;;;;; 0EC8;LAO TONE MAI EK;Mn;122;NSM;;;;;N;;;;; 0EC9;LAO TONE MAI THO;Mn;122;NSM;;;;;N;;;;; 0ECA;LAO TONE MAI TI;Mn;122;NSM;;;;;N;;;;; 0ECB;LAO TONE MAI CATAWA;Mn;122;NSM;;;;;N;;;;; 0ECC;LAO CANCELLATION MARK;Mn;0;NSM;;;;;N;;;;; 0ECD;LAO NIGGAHITA;Mn;0;NSM;;;;;N;;;;; 0ED0;LAO DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0ED1;LAO DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0ED2;LAO DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0ED3;LAO DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 0ED4;LAO DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 0ED5;LAO DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 0ED6;LAO DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 0ED7;LAO DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0ED8;LAO DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0ED9;LAO DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0EDC;LAO HO NO;Lo;0;L; 0EAB 0E99;;;;N;;;;; 0EDD;LAO HO MO;Lo;0;L; 0EAB 0EA1;;;;N;;;;; 0EDE;LAO LETTER KHMU GO;Lo;0;L;;;;;N;;;;; 0EDF;LAO LETTER KHMU NYO;Lo;0;L;;;;;N;;;;; 0F00;TIBETAN SYLLABLE OM;Lo;0;L;;;;;N;;;;; 0F01;TIBETAN MARK GTER YIG MGO TRUNCATED A;So;0;L;;;;;N;;;;; 0F02;TIBETAN MARK GTER YIG MGO -UM RNAM BCAD MA;So;0;L;;;;;N;;;;; 0F03;TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA;So;0;L;;;;;N;;;;; 0F04;TIBETAN MARK INITIAL YIG MGO MDUN MA;Po;0;L;;;;;N;TIBETAN SINGLE ORNAMENT;;;; 0F05;TIBETAN MARK CLOSING YIG MGO SGAB MA;Po;0;L;;;;;N;;;;; 0F06;TIBETAN MARK CARET YIG MGO PHUR SHAD MA;Po;0;L;;;;;N;;;;; 0F07;TIBETAN MARK YIG MGO TSHEG SHAD MA;Po;0;L;;;;;N;;;;; 0F08;TIBETAN MARK SBRUL SHAD;Po;0;L;;;;;N;TIBETAN RGYANSHAD;;;; 0F09;TIBETAN MARK BSKUR YIG MGO;Po;0;L;;;;;N;;;;; 0F0A;TIBETAN MARK BKA- SHOG YIG MGO;Po;0;L;;;;;N;;;;; 0F0B;TIBETAN MARK INTERSYLLABIC TSHEG;Po;0;L;;;;;N;TIBETAN TSEG;;;; 0F0C;TIBETAN MARK DELIMITER TSHEG BSTAR;Po;0;L; 0F0B;;;;N;;;;; 0F0D;TIBETAN MARK SHAD;Po;0;L;;;;;N;TIBETAN SHAD;;;; 0F0E;TIBETAN MARK NYIS SHAD;Po;0;L;;;;;N;TIBETAN DOUBLE SHAD;;;; 0F0F;TIBETAN MARK TSHEG SHAD;Po;0;L;;;;;N;;;;; 0F10;TIBETAN MARK NYIS TSHEG SHAD;Po;0;L;;;;;N;;;;; 0F11;TIBETAN MARK RIN CHEN SPUNGS SHAD;Po;0;L;;;;;N;TIBETAN RINCHANPHUNGSHAD;;;; 0F12;TIBETAN MARK RGYA GRAM SHAD;Po;0;L;;;;;N;;;;; 0F13;TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN;So;0;L;;;;;N;;;;; 0F14;TIBETAN MARK GTER TSHEG;Po;0;L;;;;;N;TIBETAN COMMA;;;; 0F15;TIBETAN LOGOTYPE SIGN CHAD RTAGS;So;0;L;;;;;N;;;;; 0F16;TIBETAN LOGOTYPE SIGN LHAG RTAGS;So;0;L;;;;;N;;;;; 0F17;TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS;So;0;L;;;;;N;;;;; 0F18;TIBETAN ASTROLOGICAL SIGN -KHYUD PA;Mn;220;NSM;;;;;N;;;;; 0F19;TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS;Mn;220;NSM;;;;;N;;;;; 0F1A;TIBETAN SIGN RDEL DKAR GCIG;So;0;L;;;;;N;;;;; 0F1B;TIBETAN SIGN RDEL DKAR GNYIS;So;0;L;;;;;N;;;;; 0F1C;TIBETAN SIGN RDEL DKAR GSUM;So;0;L;;;;;N;;;;; 0F1D;TIBETAN SIGN RDEL NAG GCIG;So;0;L;;;;;N;;;;; 0F1E;TIBETAN SIGN RDEL NAG GNYIS;So;0;L;;;;;N;;;;; 0F1F;TIBETAN SIGN RDEL DKAR RDEL NAG;So;0;L;;;;;N;;;;; 0F20;TIBETAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0F21;TIBETAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0F22;TIBETAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0F23;TIBETAN DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 0F24;TIBETAN DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 0F25;TIBETAN DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 0F26;TIBETAN DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 0F27;TIBETAN DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0F28;TIBETAN DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0F29;TIBETAN DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0F2A;TIBETAN DIGIT HALF ONE;No;0;L;;;;1/2;N;;;;; 0F2B;TIBETAN DIGIT HALF TWO;No;0;L;;;;3/2;N;;;;; 0F2C;TIBETAN DIGIT HALF THREE;No;0;L;;;;5/2;N;;;;; 0F2D;TIBETAN DIGIT HALF FOUR;No;0;L;;;;7/2;N;;;;; 0F2E;TIBETAN DIGIT HALF FIVE;No;0;L;;;;9/2;N;;;;; 0F2F;TIBETAN DIGIT HALF SIX;No;0;L;;;;11/2;N;;;;; 0F30;TIBETAN DIGIT HALF SEVEN;No;0;L;;;;13/2;N;;;;; 0F31;TIBETAN DIGIT HALF EIGHT;No;0;L;;;;15/2;N;;;;; 0F32;TIBETAN DIGIT HALF NINE;No;0;L;;;;17/2;N;;;;; 0F33;TIBETAN DIGIT HALF ZERO;No;0;L;;;;-1/2;N;;;;; 0F34;TIBETAN MARK BSDUS RTAGS;So;0;L;;;;;N;;;;; 0F35;TIBETAN MARK NGAS BZUNG NYI ZLA;Mn;220;NSM;;;;;N;TIBETAN HONORIFIC UNDER RING;;;; 0F36;TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN;So;0;L;;;;;N;;;;; 0F37;TIBETAN MARK NGAS BZUNG SGOR RTAGS;Mn;220;NSM;;;;;N;TIBETAN UNDER RING;;;; 0F38;TIBETAN MARK CHE MGO;So;0;L;;;;;N;;;;; 0F39;TIBETAN MARK TSA -PHRU;Mn;216;NSM;;;;;N;TIBETAN LENITION MARK;;;; 0F3A;TIBETAN MARK GUG RTAGS GYON;Ps;0;ON;;;;;Y;;;;; 0F3B;TIBETAN MARK GUG RTAGS GYAS;Pe;0;ON;;;;;Y;;;;; 0F3C;TIBETAN MARK ANG KHANG GYON;Ps;0;ON;;;;;Y;TIBETAN LEFT BRACE;;;; 0F3D;TIBETAN MARK ANG KHANG GYAS;Pe;0;ON;;;;;Y;TIBETAN RIGHT BRACE;;;; 0F3E;TIBETAN SIGN YAR TSHES;Mc;0;L;;;;;N;;;;; 0F3F;TIBETAN SIGN MAR TSHES;Mc;0;L;;;;;N;;;;; 0F40;TIBETAN LETTER KA;Lo;0;L;;;;;N;;;;; 0F41;TIBETAN LETTER KHA;Lo;0;L;;;;;N;;;;; 0F42;TIBETAN LETTER GA;Lo;0;L;;;;;N;;;;; 0F43;TIBETAN LETTER GHA;Lo;0;L;0F42 0FB7;;;;N;;;;; 0F44;TIBETAN LETTER NGA;Lo;0;L;;;;;N;;;;; 0F45;TIBETAN LETTER CA;Lo;0;L;;;;;N;;;;; 0F46;TIBETAN LETTER CHA;Lo;0;L;;;;;N;;;;; 0F47;TIBETAN LETTER JA;Lo;0;L;;;;;N;;;;; 0F49;TIBETAN LETTER NYA;Lo;0;L;;;;;N;;;;; 0F4A;TIBETAN LETTER TTA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED TA;;;; 0F4B;TIBETAN LETTER TTHA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED THA;;;; 0F4C;TIBETAN LETTER DDA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED DA;;;; 0F4D;TIBETAN LETTER DDHA;Lo;0;L;0F4C 0FB7;;;;N;;;;; 0F4E;TIBETAN LETTER NNA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED NA;;;; 0F4F;TIBETAN LETTER TA;Lo;0;L;;;;;N;;;;; 0F50;TIBETAN LETTER THA;Lo;0;L;;;;;N;;;;; 0F51;TIBETAN LETTER DA;Lo;0;L;;;;;N;;;;; 0F52;TIBETAN LETTER DHA;Lo;0;L;0F51 0FB7;;;;N;;;;; 0F53;TIBETAN LETTER NA;Lo;0;L;;;;;N;;;;; 0F54;TIBETAN LETTER PA;Lo;0;L;;;;;N;;;;; 0F55;TIBETAN LETTER PHA;Lo;0;L;;;;;N;;;;; 0F56;TIBETAN LETTER BA;Lo;0;L;;;;;N;;;;; 0F57;TIBETAN LETTER BHA;Lo;0;L;0F56 0FB7;;;;N;;;;; 0F58;TIBETAN LETTER MA;Lo;0;L;;;;;N;;;;; 0F59;TIBETAN LETTER TSA;Lo;0;L;;;;;N;;;;; 0F5A;TIBETAN LETTER TSHA;Lo;0;L;;;;;N;;;;; 0F5B;TIBETAN LETTER DZA;Lo;0;L;;;;;N;;;;; 0F5C;TIBETAN LETTER DZHA;Lo;0;L;0F5B 0FB7;;;;N;;;;; 0F5D;TIBETAN LETTER WA;Lo;0;L;;;;;N;;;;; 0F5E;TIBETAN LETTER ZHA;Lo;0;L;;;;;N;;;;; 0F5F;TIBETAN LETTER ZA;Lo;0;L;;;;;N;;;;; 0F60;TIBETAN LETTER -A;Lo;0;L;;;;;N;TIBETAN LETTER AA;;;; 0F61;TIBETAN LETTER YA;Lo;0;L;;;;;N;;;;; 0F62;TIBETAN LETTER RA;Lo;0;L;;;;;N;;;;; 0F63;TIBETAN LETTER LA;Lo;0;L;;;;;N;;;;; 0F64;TIBETAN LETTER SHA;Lo;0;L;;;;;N;;;;; 0F65;TIBETAN LETTER SSA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED SHA;;;; 0F66;TIBETAN LETTER SA;Lo;0;L;;;;;N;;;;; 0F67;TIBETAN LETTER HA;Lo;0;L;;;;;N;;;;; 0F68;TIBETAN LETTER A;Lo;0;L;;;;;N;;;;; 0F69;TIBETAN LETTER KSSA;Lo;0;L;0F40 0FB5;;;;N;;;;; 0F6A;TIBETAN LETTER FIXED-FORM RA;Lo;0;L;;;;;N;;;;; 0F6B;TIBETAN LETTER KKA;Lo;0;L;;;;;N;;;;; 0F6C;TIBETAN LETTER RRA;Lo;0;L;;;;;N;;;;; 0F71;TIBETAN VOWEL SIGN AA;Mn;129;NSM;;;;;N;;;;; 0F72;TIBETAN VOWEL SIGN I;Mn;130;NSM;;;;;N;;;;; 0F73;TIBETAN VOWEL SIGN II;Mn;0;NSM;0F71 0F72;;;;N;;;;; 0F74;TIBETAN VOWEL SIGN U;Mn;132;NSM;;;;;N;;;;; 0F75;TIBETAN VOWEL SIGN UU;Mn;0;NSM;0F71 0F74;;;;N;;;;; 0F76;TIBETAN VOWEL SIGN VOCALIC R;Mn;0;NSM;0FB2 0F80;;;;N;;;;; 0F77;TIBETAN VOWEL SIGN VOCALIC RR;Mn;0;NSM; 0FB2 0F81;;;;N;;;;; 0F78;TIBETAN VOWEL SIGN VOCALIC L;Mn;0;NSM;0FB3 0F80;;;;N;;;;; 0F79;TIBETAN VOWEL SIGN VOCALIC LL;Mn;0;NSM; 0FB3 0F81;;;;N;;;;; 0F7A;TIBETAN VOWEL SIGN E;Mn;130;NSM;;;;;N;;;;; 0F7B;TIBETAN VOWEL SIGN EE;Mn;130;NSM;;;;;N;TIBETAN VOWEL SIGN AI;;;; 0F7C;TIBETAN VOWEL SIGN O;Mn;130;NSM;;;;;N;;;;; 0F7D;TIBETAN VOWEL SIGN OO;Mn;130;NSM;;;;;N;TIBETAN VOWEL SIGN AU;;;; 0F7E;TIBETAN SIGN RJES SU NGA RO;Mn;0;NSM;;;;;N;TIBETAN ANUSVARA;;;; 0F7F;TIBETAN SIGN RNAM BCAD;Mc;0;L;;;;;N;TIBETAN VISARGA;;;; 0F80;TIBETAN VOWEL SIGN REVERSED I;Mn;130;NSM;;;;;N;TIBETAN VOWEL SIGN SHORT I;;;; 0F81;TIBETAN VOWEL SIGN REVERSED II;Mn;0;NSM;0F71 0F80;;;;N;;;;; 0F82;TIBETAN SIGN NYI ZLA NAA DA;Mn;230;NSM;;;;;N;TIBETAN CANDRABINDU WITH ORNAMENT;;;; 0F83;TIBETAN SIGN SNA LDAN;Mn;230;NSM;;;;;N;TIBETAN CANDRABINDU;;;; 0F84;TIBETAN MARK HALANTA;Mn;9;NSM;;;;;N;TIBETAN VIRAMA;;;; 0F85;TIBETAN MARK PALUTA;Po;0;L;;;;;N;TIBETAN CHUCHENYIGE;;;; 0F86;TIBETAN SIGN LCI RTAGS;Mn;230;NSM;;;;;N;;;;; 0F87;TIBETAN SIGN YANG RTAGS;Mn;230;NSM;;;;;N;;;;; 0F88;TIBETAN SIGN LCE TSA CAN;Lo;0;L;;;;;N;;;;; 0F89;TIBETAN SIGN MCHU CAN;Lo;0;L;;;;;N;;;;; 0F8A;TIBETAN SIGN GRU CAN RGYINGS;Lo;0;L;;;;;N;;;;; 0F8B;TIBETAN SIGN GRU MED RGYINGS;Lo;0;L;;;;;N;;;;; 0F8C;TIBETAN SIGN INVERTED MCHU CAN;Lo;0;L;;;;;N;;;;; 0F8D;TIBETAN SUBJOINED SIGN LCE TSA CAN;Mn;0;NSM;;;;;N;;;;; 0F8E;TIBETAN SUBJOINED SIGN MCHU CAN;Mn;0;NSM;;;;;N;;;;; 0F8F;TIBETAN SUBJOINED SIGN INVERTED MCHU CAN;Mn;0;NSM;;;;;N;;;;; 0F90;TIBETAN SUBJOINED LETTER KA;Mn;0;NSM;;;;;N;;;;; 0F91;TIBETAN SUBJOINED LETTER KHA;Mn;0;NSM;;;;;N;;;;; 0F92;TIBETAN SUBJOINED LETTER GA;Mn;0;NSM;;;;;N;;;;; 0F93;TIBETAN SUBJOINED LETTER GHA;Mn;0;NSM;0F92 0FB7;;;;N;;;;; 0F94;TIBETAN SUBJOINED LETTER NGA;Mn;0;NSM;;;;;N;;;;; 0F95;TIBETAN SUBJOINED LETTER CA;Mn;0;NSM;;;;;N;;;;; 0F96;TIBETAN SUBJOINED LETTER CHA;Mn;0;NSM;;;;;N;;;;; 0F97;TIBETAN SUBJOINED LETTER JA;Mn;0;NSM;;;;;N;;;;; 0F99;TIBETAN SUBJOINED LETTER NYA;Mn;0;NSM;;;;;N;;;;; 0F9A;TIBETAN SUBJOINED LETTER TTA;Mn;0;NSM;;;;;N;;;;; 0F9B;TIBETAN SUBJOINED LETTER TTHA;Mn;0;NSM;;;;;N;;;;; 0F9C;TIBETAN SUBJOINED LETTER DDA;Mn;0;NSM;;;;;N;;;;; 0F9D;TIBETAN SUBJOINED LETTER DDHA;Mn;0;NSM;0F9C 0FB7;;;;N;;;;; 0F9E;TIBETAN SUBJOINED LETTER NNA;Mn;0;NSM;;;;;N;;;;; 0F9F;TIBETAN SUBJOINED LETTER TA;Mn;0;NSM;;;;;N;;;;; 0FA0;TIBETAN SUBJOINED LETTER THA;Mn;0;NSM;;;;;N;;;;; 0FA1;TIBETAN SUBJOINED LETTER DA;Mn;0;NSM;;;;;N;;;;; 0FA2;TIBETAN SUBJOINED LETTER DHA;Mn;0;NSM;0FA1 0FB7;;;;N;;;;; 0FA3;TIBETAN SUBJOINED LETTER NA;Mn;0;NSM;;;;;N;;;;; 0FA4;TIBETAN SUBJOINED LETTER PA;Mn;0;NSM;;;;;N;;;;; 0FA5;TIBETAN SUBJOINED LETTER PHA;Mn;0;NSM;;;;;N;;;;; 0FA6;TIBETAN SUBJOINED LETTER BA;Mn;0;NSM;;;;;N;;;;; 0FA7;TIBETAN SUBJOINED LETTER BHA;Mn;0;NSM;0FA6 0FB7;;;;N;;;;; 0FA8;TIBETAN SUBJOINED LETTER MA;Mn;0;NSM;;;;;N;;;;; 0FA9;TIBETAN SUBJOINED LETTER TSA;Mn;0;NSM;;;;;N;;;;; 0FAA;TIBETAN SUBJOINED LETTER TSHA;Mn;0;NSM;;;;;N;;;;; 0FAB;TIBETAN SUBJOINED LETTER DZA;Mn;0;NSM;;;;;N;;;;; 0FAC;TIBETAN SUBJOINED LETTER DZHA;Mn;0;NSM;0FAB 0FB7;;;;N;;;;; 0FAD;TIBETAN SUBJOINED LETTER WA;Mn;0;NSM;;;;;N;;;;; 0FAE;TIBETAN SUBJOINED LETTER ZHA;Mn;0;NSM;;;;;N;;;;; 0FAF;TIBETAN SUBJOINED LETTER ZA;Mn;0;NSM;;;;;N;;;;; 0FB0;TIBETAN SUBJOINED LETTER -A;Mn;0;NSM;;;;;N;;;;; 0FB1;TIBETAN SUBJOINED LETTER YA;Mn;0;NSM;;;;;N;;;;; 0FB2;TIBETAN SUBJOINED LETTER RA;Mn;0;NSM;;;;;N;;;;; 0FB3;TIBETAN SUBJOINED LETTER LA;Mn;0;NSM;;;;;N;;;;; 0FB4;TIBETAN SUBJOINED LETTER SHA;Mn;0;NSM;;;;;N;;;;; 0FB5;TIBETAN SUBJOINED LETTER SSA;Mn;0;NSM;;;;;N;;;;; 0FB6;TIBETAN SUBJOINED LETTER SA;Mn;0;NSM;;;;;N;;;;; 0FB7;TIBETAN SUBJOINED LETTER HA;Mn;0;NSM;;;;;N;;;;; 0FB8;TIBETAN SUBJOINED LETTER A;Mn;0;NSM;;;;;N;;;;; 0FB9;TIBETAN SUBJOINED LETTER KSSA;Mn;0;NSM;0F90 0FB5;;;;N;;;;; 0FBA;TIBETAN SUBJOINED LETTER FIXED-FORM WA;Mn;0;NSM;;;;;N;;;;; 0FBB;TIBETAN SUBJOINED LETTER FIXED-FORM YA;Mn;0;NSM;;;;;N;;;;; 0FBC;TIBETAN SUBJOINED LETTER FIXED-FORM RA;Mn;0;NSM;;;;;N;;;;; 0FBE;TIBETAN KU RU KHA;So;0;L;;;;;N;;;;; 0FBF;TIBETAN KU RU KHA BZHI MIG CAN;So;0;L;;;;;N;;;;; 0FC0;TIBETAN CANTILLATION SIGN HEAVY BEAT;So;0;L;;;;;N;;;;; 0FC1;TIBETAN CANTILLATION SIGN LIGHT BEAT;So;0;L;;;;;N;;;;; 0FC2;TIBETAN CANTILLATION SIGN CANG TE-U;So;0;L;;;;;N;;;;; 0FC3;TIBETAN CANTILLATION SIGN SBUB -CHAL;So;0;L;;;;;N;;;;; 0FC4;TIBETAN SYMBOL DRIL BU;So;0;L;;;;;N;;;;; 0FC5;TIBETAN SYMBOL RDO RJE;So;0;L;;;;;N;;;;; 0FC6;TIBETAN SYMBOL PADMA GDAN;Mn;220;NSM;;;;;N;;;;; 0FC7;TIBETAN SYMBOL RDO RJE RGYA GRAM;So;0;L;;;;;N;;;;; 0FC8;TIBETAN SYMBOL PHUR PA;So;0;L;;;;;N;;;;; 0FC9;TIBETAN SYMBOL NOR BU;So;0;L;;;;;N;;;;; 0FCA;TIBETAN SYMBOL NOR BU NYIS -KHYIL;So;0;L;;;;;N;;;;; 0FCB;TIBETAN SYMBOL NOR BU GSUM -KHYIL;So;0;L;;;;;N;;;;; 0FCC;TIBETAN SYMBOL NOR BU BZHI -KHYIL;So;0;L;;;;;N;;;;; 0FCE;TIBETAN SIGN RDEL NAG RDEL DKAR;So;0;L;;;;;N;;;;; 0FCF;TIBETAN SIGN RDEL NAG GSUM;So;0;L;;;;;N;;;;; 0FD0;TIBETAN MARK BSKA- SHOG GI MGO RGYAN;Po;0;L;;;;;N;;;;; 0FD1;TIBETAN MARK MNYAM YIG GI MGO RGYAN;Po;0;L;;;;;N;;;;; 0FD2;TIBETAN MARK NYIS TSHEG;Po;0;L;;;;;N;;;;; 0FD3;TIBETAN MARK INITIAL BRDA RNYING YIG MGO MDUN MA;Po;0;L;;;;;N;;;;; 0FD4;TIBETAN MARK CLOSING BRDA RNYING YIG MGO SGAB MA;Po;0;L;;;;;N;;;;; 0FD5;RIGHT-FACING SVASTI SIGN;So;0;L;;;;;N;;;;; 0FD6;LEFT-FACING SVASTI SIGN;So;0;L;;;;;N;;;;; 0FD7;RIGHT-FACING SVASTI SIGN WITH DOTS;So;0;L;;;;;N;;;;; 0FD8;LEFT-FACING SVASTI SIGN WITH DOTS;So;0;L;;;;;N;;;;; 0FD9;TIBETAN MARK LEADING MCHAN RTAGS;Po;0;L;;;;;N;;;;; 0FDA;TIBETAN MARK TRAILING MCHAN RTAGS;Po;0;L;;;;;N;;;;; 1000;MYANMAR LETTER KA;Lo;0;L;;;;;N;;;;; 1001;MYANMAR LETTER KHA;Lo;0;L;;;;;N;;;;; 1002;MYANMAR LETTER GA;Lo;0;L;;;;;N;;;;; 1003;MYANMAR LETTER GHA;Lo;0;L;;;;;N;;;;; 1004;MYANMAR LETTER NGA;Lo;0;L;;;;;N;;;;; 1005;MYANMAR LETTER CA;Lo;0;L;;;;;N;;;;; 1006;MYANMAR LETTER CHA;Lo;0;L;;;;;N;;;;; 1007;MYANMAR LETTER JA;Lo;0;L;;;;;N;;;;; 1008;MYANMAR LETTER JHA;Lo;0;L;;;;;N;;;;; 1009;MYANMAR LETTER NYA;Lo;0;L;;;;;N;;;;; 100A;MYANMAR LETTER NNYA;Lo;0;L;;;;;N;;;;; 100B;MYANMAR LETTER TTA;Lo;0;L;;;;;N;;;;; 100C;MYANMAR LETTER TTHA;Lo;0;L;;;;;N;;;;; 100D;MYANMAR LETTER DDA;Lo;0;L;;;;;N;;;;; 100E;MYANMAR LETTER DDHA;Lo;0;L;;;;;N;;;;; 100F;MYANMAR LETTER NNA;Lo;0;L;;;;;N;;;;; 1010;MYANMAR LETTER TA;Lo;0;L;;;;;N;;;;; 1011;MYANMAR LETTER THA;Lo;0;L;;;;;N;;;;; 1012;MYANMAR LETTER DA;Lo;0;L;;;;;N;;;;; 1013;MYANMAR LETTER DHA;Lo;0;L;;;;;N;;;;; 1014;MYANMAR LETTER NA;Lo;0;L;;;;;N;;;;; 1015;MYANMAR LETTER PA;Lo;0;L;;;;;N;;;;; 1016;MYANMAR LETTER PHA;Lo;0;L;;;;;N;;;;; 1017;MYANMAR LETTER BA;Lo;0;L;;;;;N;;;;; 1018;MYANMAR LETTER BHA;Lo;0;L;;;;;N;;;;; 1019;MYANMAR LETTER MA;Lo;0;L;;;;;N;;;;; 101A;MYANMAR LETTER YA;Lo;0;L;;;;;N;;;;; 101B;MYANMAR LETTER RA;Lo;0;L;;;;;N;;;;; 101C;MYANMAR LETTER LA;Lo;0;L;;;;;N;;;;; 101D;MYANMAR LETTER WA;Lo;0;L;;;;;N;;;;; 101E;MYANMAR LETTER SA;Lo;0;L;;;;;N;;;;; 101F;MYANMAR LETTER HA;Lo;0;L;;;;;N;;;;; 1020;MYANMAR LETTER LLA;Lo;0;L;;;;;N;;;;; 1021;MYANMAR LETTER A;Lo;0;L;;;;;N;;;;; 1022;MYANMAR LETTER SHAN A;Lo;0;L;;;;;N;;;;; 1023;MYANMAR LETTER I;Lo;0;L;;;;;N;;;;; 1024;MYANMAR LETTER II;Lo;0;L;;;;;N;;;;; 1025;MYANMAR LETTER U;Lo;0;L;;;;;N;;;;; 1026;MYANMAR LETTER UU;Lo;0;L;1025 102E;;;;N;;;;; 1027;MYANMAR LETTER E;Lo;0;L;;;;;N;;;;; 1028;MYANMAR LETTER MON E;Lo;0;L;;;;;N;;;;; 1029;MYANMAR LETTER O;Lo;0;L;;;;;N;;;;; 102A;MYANMAR LETTER AU;Lo;0;L;;;;;N;;;;; 102B;MYANMAR VOWEL SIGN TALL AA;Mc;0;L;;;;;N;;;;; 102C;MYANMAR VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 102D;MYANMAR VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 102E;MYANMAR VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; 102F;MYANMAR VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 1030;MYANMAR VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 1031;MYANMAR VOWEL SIGN E;Mc;0;L;;;;;N;;;;; 1032;MYANMAR VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; 1033;MYANMAR VOWEL SIGN MON II;Mn;0;NSM;;;;;N;;;;; 1034;MYANMAR VOWEL SIGN MON O;Mn;0;NSM;;;;;N;;;;; 1035;MYANMAR VOWEL SIGN E ABOVE;Mn;0;NSM;;;;;N;;;;; 1036;MYANMAR SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 1037;MYANMAR SIGN DOT BELOW;Mn;7;NSM;;;;;N;;;;; 1038;MYANMAR SIGN VISARGA;Mc;0;L;;;;;N;;;;; 1039;MYANMAR SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 103A;MYANMAR SIGN ASAT;Mn;9;NSM;;;;;N;;;;; 103B;MYANMAR CONSONANT SIGN MEDIAL YA;Mc;0;L;;;;;N;;;;; 103C;MYANMAR CONSONANT SIGN MEDIAL RA;Mc;0;L;;;;;N;;;;; 103D;MYANMAR CONSONANT SIGN MEDIAL WA;Mn;0;NSM;;;;;N;;;;; 103E;MYANMAR CONSONANT SIGN MEDIAL HA;Mn;0;NSM;;;;;N;;;;; 103F;MYANMAR LETTER GREAT SA;Lo;0;L;;;;;N;;;;; 1040;MYANMAR DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 1041;MYANMAR DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 1042;MYANMAR DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 1043;MYANMAR DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 1044;MYANMAR DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 1045;MYANMAR DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 1046;MYANMAR DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 1047;MYANMAR DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 1048;MYANMAR DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 1049;MYANMAR DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 104A;MYANMAR SIGN LITTLE SECTION;Po;0;L;;;;;N;;;;; 104B;MYANMAR SIGN SECTION;Po;0;L;;;;;N;;;;; 104C;MYANMAR SYMBOL LOCATIVE;Po;0;L;;;;;N;;;;; 104D;MYANMAR SYMBOL COMPLETED;Po;0;L;;;;;N;;;;; 104E;MYANMAR SYMBOL AFOREMENTIONED;Po;0;L;;;;;N;;;;; 104F;MYANMAR SYMBOL GENITIVE;Po;0;L;;;;;N;;;;; 1050;MYANMAR LETTER SHA;Lo;0;L;;;;;N;;;;; 1051;MYANMAR LETTER SSA;Lo;0;L;;;;;N;;;;; 1052;MYANMAR LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 1053;MYANMAR LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 1054;MYANMAR LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 1055;MYANMAR LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 1056;MYANMAR VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;; 1057;MYANMAR VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;; 1058;MYANMAR VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; 1059;MYANMAR VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; 105A;MYANMAR LETTER MON NGA;Lo;0;L;;;;;N;;;;; 105B;MYANMAR LETTER MON JHA;Lo;0;L;;;;;N;;;;; 105C;MYANMAR LETTER MON BBA;Lo;0;L;;;;;N;;;;; 105D;MYANMAR LETTER MON BBE;Lo;0;L;;;;;N;;;;; 105E;MYANMAR CONSONANT SIGN MON MEDIAL NA;Mn;0;NSM;;;;;N;;;;; 105F;MYANMAR CONSONANT SIGN MON MEDIAL MA;Mn;0;NSM;;;;;N;;;;; 1060;MYANMAR CONSONANT SIGN MON MEDIAL LA;Mn;0;NSM;;;;;N;;;;; 1061;MYANMAR LETTER SGAW KAREN SHA;Lo;0;L;;;;;N;;;;; 1062;MYANMAR VOWEL SIGN SGAW KAREN EU;Mc;0;L;;;;;N;;;;; 1063;MYANMAR TONE MARK SGAW KAREN HATHI;Mc;0;L;;;;;N;;;;; 1064;MYANMAR TONE MARK SGAW KAREN KE PHO;Mc;0;L;;;;;N;;;;; 1065;MYANMAR LETTER WESTERN PWO KAREN THA;Lo;0;L;;;;;N;;;;; 1066;MYANMAR LETTER WESTERN PWO KAREN PWA;Lo;0;L;;;;;N;;;;; 1067;MYANMAR VOWEL SIGN WESTERN PWO KAREN EU;Mc;0;L;;;;;N;;;;; 1068;MYANMAR VOWEL SIGN WESTERN PWO KAREN UE;Mc;0;L;;;;;N;;;;; 1069;MYANMAR SIGN WESTERN PWO KAREN TONE-1;Mc;0;L;;;;;N;;;;; 106A;MYANMAR SIGN WESTERN PWO KAREN TONE-2;Mc;0;L;;;;;N;;;;; 106B;MYANMAR SIGN WESTERN PWO KAREN TONE-3;Mc;0;L;;;;;N;;;;; 106C;MYANMAR SIGN WESTERN PWO KAREN TONE-4;Mc;0;L;;;;;N;;;;; 106D;MYANMAR SIGN WESTERN PWO KAREN TONE-5;Mc;0;L;;;;;N;;;;; 106E;MYANMAR LETTER EASTERN PWO KAREN NNA;Lo;0;L;;;;;N;;;;; 106F;MYANMAR LETTER EASTERN PWO KAREN YWA;Lo;0;L;;;;;N;;;;; 1070;MYANMAR LETTER EASTERN PWO KAREN GHWA;Lo;0;L;;;;;N;;;;; 1071;MYANMAR VOWEL SIGN GEBA KAREN I;Mn;0;NSM;;;;;N;;;;; 1072;MYANMAR VOWEL SIGN KAYAH OE;Mn;0;NSM;;;;;N;;;;; 1073;MYANMAR VOWEL SIGN KAYAH U;Mn;0;NSM;;;;;N;;;;; 1074;MYANMAR VOWEL SIGN KAYAH EE;Mn;0;NSM;;;;;N;;;;; 1075;MYANMAR LETTER SHAN KA;Lo;0;L;;;;;N;;;;; 1076;MYANMAR LETTER SHAN KHA;Lo;0;L;;;;;N;;;;; 1077;MYANMAR LETTER SHAN GA;Lo;0;L;;;;;N;;;;; 1078;MYANMAR LETTER SHAN CA;Lo;0;L;;;;;N;;;;; 1079;MYANMAR LETTER SHAN ZA;Lo;0;L;;;;;N;;;;; 107A;MYANMAR LETTER SHAN NYA;Lo;0;L;;;;;N;;;;; 107B;MYANMAR LETTER SHAN DA;Lo;0;L;;;;;N;;;;; 107C;MYANMAR LETTER SHAN NA;Lo;0;L;;;;;N;;;;; 107D;MYANMAR LETTER SHAN PHA;Lo;0;L;;;;;N;;;;; 107E;MYANMAR LETTER SHAN FA;Lo;0;L;;;;;N;;;;; 107F;MYANMAR LETTER SHAN BA;Lo;0;L;;;;;N;;;;; 1080;MYANMAR LETTER SHAN THA;Lo;0;L;;;;;N;;;;; 1081;MYANMAR LETTER SHAN HA;Lo;0;L;;;;;N;;;;; 1082;MYANMAR CONSONANT SIGN SHAN MEDIAL WA;Mn;0;NSM;;;;;N;;;;; 1083;MYANMAR VOWEL SIGN SHAN AA;Mc;0;L;;;;;N;;;;; 1084;MYANMAR VOWEL SIGN SHAN E;Mc;0;L;;;;;N;;;;; 1085;MYANMAR VOWEL SIGN SHAN E ABOVE;Mn;0;NSM;;;;;N;;;;; 1086;MYANMAR VOWEL SIGN SHAN FINAL Y;Mn;0;NSM;;;;;N;;;;; 1087;MYANMAR SIGN SHAN TONE-2;Mc;0;L;;;;;N;;;;; 1088;MYANMAR SIGN SHAN TONE-3;Mc;0;L;;;;;N;;;;; 1089;MYANMAR SIGN SHAN TONE-5;Mc;0;L;;;;;N;;;;; 108A;MYANMAR SIGN SHAN TONE-6;Mc;0;L;;;;;N;;;;; 108B;MYANMAR SIGN SHAN COUNCIL TONE-2;Mc;0;L;;;;;N;;;;; 108C;MYANMAR SIGN SHAN COUNCIL TONE-3;Mc;0;L;;;;;N;;;;; 108D;MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE;Mn;220;NSM;;;;;N;;;;; 108E;MYANMAR LETTER RUMAI PALAUNG FA;Lo;0;L;;;;;N;;;;; 108F;MYANMAR SIGN RUMAI PALAUNG TONE-5;Mc;0;L;;;;;N;;;;; 1090;MYANMAR SHAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 1091;MYANMAR SHAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 1092;MYANMAR SHAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 1093;MYANMAR SHAN DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 1094;MYANMAR SHAN DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 1095;MYANMAR SHAN DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 1096;MYANMAR SHAN DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 1097;MYANMAR SHAN DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 1098;MYANMAR SHAN DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 1099;MYANMAR SHAN DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 109A;MYANMAR SIGN KHAMTI TONE-1;Mc;0;L;;;;;N;;;;; 109B;MYANMAR SIGN KHAMTI TONE-3;Mc;0;L;;;;;N;;;;; 109C;MYANMAR VOWEL SIGN AITON A;Mc;0;L;;;;;N;;;;; 109D;MYANMAR VOWEL SIGN AITON AI;Mn;0;NSM;;;;;N;;;;; 109E;MYANMAR SYMBOL SHAN ONE;So;0;L;;;;;N;;;;; 109F;MYANMAR SYMBOL SHAN EXCLAMATION;So;0;L;;;;;N;;;;; 10A0;GEORGIAN CAPITAL LETTER AN;Lu;0;L;;;;;N;;;;2D00; 10A1;GEORGIAN CAPITAL LETTER BAN;Lu;0;L;;;;;N;;;;2D01; 10A2;GEORGIAN CAPITAL LETTER GAN;Lu;0;L;;;;;N;;;;2D02; 10A3;GEORGIAN CAPITAL LETTER DON;Lu;0;L;;;;;N;;;;2D03; 10A4;GEORGIAN CAPITAL LETTER EN;Lu;0;L;;;;;N;;;;2D04; 10A5;GEORGIAN CAPITAL LETTER VIN;Lu;0;L;;;;;N;;;;2D05; 10A6;GEORGIAN CAPITAL LETTER ZEN;Lu;0;L;;;;;N;;;;2D06; 10A7;GEORGIAN CAPITAL LETTER TAN;Lu;0;L;;;;;N;;;;2D07; 10A8;GEORGIAN CAPITAL LETTER IN;Lu;0;L;;;;;N;;;;2D08; 10A9;GEORGIAN CAPITAL LETTER KAN;Lu;0;L;;;;;N;;;;2D09; 10AA;GEORGIAN CAPITAL LETTER LAS;Lu;0;L;;;;;N;;;;2D0A; 10AB;GEORGIAN CAPITAL LETTER MAN;Lu;0;L;;;;;N;;;;2D0B; 10AC;GEORGIAN CAPITAL LETTER NAR;Lu;0;L;;;;;N;;;;2D0C; 10AD;GEORGIAN CAPITAL LETTER ON;Lu;0;L;;;;;N;;;;2D0D; 10AE;GEORGIAN CAPITAL LETTER PAR;Lu;0;L;;;;;N;;;;2D0E; 10AF;GEORGIAN CAPITAL LETTER ZHAR;Lu;0;L;;;;;N;;;;2D0F; 10B0;GEORGIAN CAPITAL LETTER RAE;Lu;0;L;;;;;N;;;;2D10; 10B1;GEORGIAN CAPITAL LETTER SAN;Lu;0;L;;;;;N;;;;2D11; 10B2;GEORGIAN CAPITAL LETTER TAR;Lu;0;L;;;;;N;;;;2D12; 10B3;GEORGIAN CAPITAL LETTER UN;Lu;0;L;;;;;N;;;;2D13; 10B4;GEORGIAN CAPITAL LETTER PHAR;Lu;0;L;;;;;N;;;;2D14; 10B5;GEORGIAN CAPITAL LETTER KHAR;Lu;0;L;;;;;N;;;;2D15; 10B6;GEORGIAN CAPITAL LETTER GHAN;Lu;0;L;;;;;N;;;;2D16; 10B7;GEORGIAN CAPITAL LETTER QAR;Lu;0;L;;;;;N;;;;2D17; 10B8;GEORGIAN CAPITAL LETTER SHIN;Lu;0;L;;;;;N;;;;2D18; 10B9;GEORGIAN CAPITAL LETTER CHIN;Lu;0;L;;;;;N;;;;2D19; 10BA;GEORGIAN CAPITAL LETTER CAN;Lu;0;L;;;;;N;;;;2D1A; 10BB;GEORGIAN CAPITAL LETTER JIL;Lu;0;L;;;;;N;;;;2D1B; 10BC;GEORGIAN CAPITAL LETTER CIL;Lu;0;L;;;;;N;;;;2D1C; 10BD;GEORGIAN CAPITAL LETTER CHAR;Lu;0;L;;;;;N;;;;2D1D; 10BE;GEORGIAN CAPITAL LETTER XAN;Lu;0;L;;;;;N;;;;2D1E; 10BF;GEORGIAN CAPITAL LETTER JHAN;Lu;0;L;;;;;N;;;;2D1F; 10C0;GEORGIAN CAPITAL LETTER HAE;Lu;0;L;;;;;N;;;;2D20; 10C1;GEORGIAN CAPITAL LETTER HE;Lu;0;L;;;;;N;;;;2D21; 10C2;GEORGIAN CAPITAL LETTER HIE;Lu;0;L;;;;;N;;;;2D22; 10C3;GEORGIAN CAPITAL LETTER WE;Lu;0;L;;;;;N;;;;2D23; 10C4;GEORGIAN CAPITAL LETTER HAR;Lu;0;L;;;;;N;;;;2D24; 10C5;GEORGIAN CAPITAL LETTER HOE;Lu;0;L;;;;;N;;;;2D25; 10C7;GEORGIAN CAPITAL LETTER YN;Lu;0;L;;;;;N;;;;2D27; 10CD;GEORGIAN CAPITAL LETTER AEN;Lu;0;L;;;;;N;;;;2D2D; 10D0;GEORGIAN LETTER AN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER AN;;1C90;;10D0 10D1;GEORGIAN LETTER BAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER BAN;;1C91;;10D1 10D2;GEORGIAN LETTER GAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER GAN;;1C92;;10D2 10D3;GEORGIAN LETTER DON;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER DON;;1C93;;10D3 10D4;GEORGIAN LETTER EN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER EN;;1C94;;10D4 10D5;GEORGIAN LETTER VIN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER VIN;;1C95;;10D5 10D6;GEORGIAN LETTER ZEN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER ZEN;;1C96;;10D6 10D7;GEORGIAN LETTER TAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER TAN;;1C97;;10D7 10D8;GEORGIAN LETTER IN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER IN;;1C98;;10D8 10D9;GEORGIAN LETTER KAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER KAN;;1C99;;10D9 10DA;GEORGIAN LETTER LAS;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER LAS;;1C9A;;10DA 10DB;GEORGIAN LETTER MAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER MAN;;1C9B;;10DB 10DC;GEORGIAN LETTER NAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER NAR;;1C9C;;10DC 10DD;GEORGIAN LETTER ON;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER ON;;1C9D;;10DD 10DE;GEORGIAN LETTER PAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER PAR;;1C9E;;10DE 10DF;GEORGIAN LETTER ZHAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER ZHAR;;1C9F;;10DF 10E0;GEORGIAN LETTER RAE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER RAE;;1CA0;;10E0 10E1;GEORGIAN LETTER SAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER SAN;;1CA1;;10E1 10E2;GEORGIAN LETTER TAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER TAR;;1CA2;;10E2 10E3;GEORGIAN LETTER UN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER UN;;1CA3;;10E3 10E4;GEORGIAN LETTER PHAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER PHAR;;1CA4;;10E4 10E5;GEORGIAN LETTER KHAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER KHAR;;1CA5;;10E5 10E6;GEORGIAN LETTER GHAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER GHAN;;1CA6;;10E6 10E7;GEORGIAN LETTER QAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER QAR;;1CA7;;10E7 10E8;GEORGIAN LETTER SHIN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER SHIN;;1CA8;;10E8 10E9;GEORGIAN LETTER CHIN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER CHIN;;1CA9;;10E9 10EA;GEORGIAN LETTER CAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER CAN;;1CAA;;10EA 10EB;GEORGIAN LETTER JIL;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER JIL;;1CAB;;10EB 10EC;GEORGIAN LETTER CIL;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER CIL;;1CAC;;10EC 10ED;GEORGIAN LETTER CHAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER CHAR;;1CAD;;10ED 10EE;GEORGIAN LETTER XAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER XAN;;1CAE;;10EE 10EF;GEORGIAN LETTER JHAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER JHAN;;1CAF;;10EF 10F0;GEORGIAN LETTER HAE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER HAE;;1CB0;;10F0 10F1;GEORGIAN LETTER HE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER HE;;1CB1;;10F1 10F2;GEORGIAN LETTER HIE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER HIE;;1CB2;;10F2 10F3;GEORGIAN LETTER WE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER WE;;1CB3;;10F3 10F4;GEORGIAN LETTER HAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER HAR;;1CB4;;10F4 10F5;GEORGIAN LETTER HOE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER HOE;;1CB5;;10F5 10F6;GEORGIAN LETTER FI;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER FI;;1CB6;;10F6 10F7;GEORGIAN LETTER YN;Ll;0;L;;;;;N;;;1CB7;;10F7 10F8;GEORGIAN LETTER ELIFI;Ll;0;L;;;;;N;;;1CB8;;10F8 10F9;GEORGIAN LETTER TURNED GAN;Ll;0;L;;;;;N;;;1CB9;;10F9 10FA;GEORGIAN LETTER AIN;Ll;0;L;;;;;N;;;1CBA;;10FA 10FB;GEORGIAN PARAGRAPH SEPARATOR;Po;0;L;;;;;N;;;;; 10FC;MODIFIER LETTER GEORGIAN NAR;Lm;0;L; 10DC;;;;N;;;;; 10FD;GEORGIAN LETTER AEN;Ll;0;L;;;;;N;;;1CBD;;10FD 10FE;GEORGIAN LETTER HARD SIGN;Ll;0;L;;;;;N;;;1CBE;;10FE 10FF;GEORGIAN LETTER LABIAL SIGN;Ll;0;L;;;;;N;;;1CBF;;10FF 1100;HANGUL CHOSEONG KIYEOK;Lo;0;L;;;;;N;;;;; 1101;HANGUL CHOSEONG SSANGKIYEOK;Lo;0;L;;;;;N;;;;; 1102;HANGUL CHOSEONG NIEUN;Lo;0;L;;;;;N;;;;; 1103;HANGUL CHOSEONG TIKEUT;Lo;0;L;;;;;N;;;;; 1104;HANGUL CHOSEONG SSANGTIKEUT;Lo;0;L;;;;;N;;;;; 1105;HANGUL CHOSEONG RIEUL;Lo;0;L;;;;;N;;;;; 1106;HANGUL CHOSEONG MIEUM;Lo;0;L;;;;;N;;;;; 1107;HANGUL CHOSEONG PIEUP;Lo;0;L;;;;;N;;;;; 1108;HANGUL CHOSEONG SSANGPIEUP;Lo;0;L;;;;;N;;;;; 1109;HANGUL CHOSEONG SIOS;Lo;0;L;;;;;N;;;;; 110A;HANGUL CHOSEONG SSANGSIOS;Lo;0;L;;;;;N;;;;; 110B;HANGUL CHOSEONG IEUNG;Lo;0;L;;;;;N;;;;; 110C;HANGUL CHOSEONG CIEUC;Lo;0;L;;;;;N;;;;; 110D;HANGUL CHOSEONG SSANGCIEUC;Lo;0;L;;;;;N;;;;; 110E;HANGUL CHOSEONG CHIEUCH;Lo;0;L;;;;;N;;;;; 110F;HANGUL CHOSEONG KHIEUKH;Lo;0;L;;;;;N;;;;; 1110;HANGUL CHOSEONG THIEUTH;Lo;0;L;;;;;N;;;;; 1111;HANGUL CHOSEONG PHIEUPH;Lo;0;L;;;;;N;;;;; 1112;HANGUL CHOSEONG HIEUH;Lo;0;L;;;;;N;;;;; 1113;HANGUL CHOSEONG NIEUN-KIYEOK;Lo;0;L;;;;;N;;;;; 1114;HANGUL CHOSEONG SSANGNIEUN;Lo;0;L;;;;;N;;;;; 1115;HANGUL CHOSEONG NIEUN-TIKEUT;Lo;0;L;;;;;N;;;;; 1116;HANGUL CHOSEONG NIEUN-PIEUP;Lo;0;L;;;;;N;;;;; 1117;HANGUL CHOSEONG TIKEUT-KIYEOK;Lo;0;L;;;;;N;;;;; 1118;HANGUL CHOSEONG RIEUL-NIEUN;Lo;0;L;;;;;N;;;;; 1119;HANGUL CHOSEONG SSANGRIEUL;Lo;0;L;;;;;N;;;;; 111A;HANGUL CHOSEONG RIEUL-HIEUH;Lo;0;L;;;;;N;;;;; 111B;HANGUL CHOSEONG KAPYEOUNRIEUL;Lo;0;L;;;;;N;;;;; 111C;HANGUL CHOSEONG MIEUM-PIEUP;Lo;0;L;;;;;N;;;;; 111D;HANGUL CHOSEONG KAPYEOUNMIEUM;Lo;0;L;;;;;N;;;;; 111E;HANGUL CHOSEONG PIEUP-KIYEOK;Lo;0;L;;;;;N;;;;; 111F;HANGUL CHOSEONG PIEUP-NIEUN;Lo;0;L;;;;;N;;;;; 1120;HANGUL CHOSEONG PIEUP-TIKEUT;Lo;0;L;;;;;N;;;;; 1121;HANGUL CHOSEONG PIEUP-SIOS;Lo;0;L;;;;;N;;;;; 1122;HANGUL CHOSEONG PIEUP-SIOS-KIYEOK;Lo;0;L;;;;;N;;;;; 1123;HANGUL CHOSEONG PIEUP-SIOS-TIKEUT;Lo;0;L;;;;;N;;;;; 1124;HANGUL CHOSEONG PIEUP-SIOS-PIEUP;Lo;0;L;;;;;N;;;;; 1125;HANGUL CHOSEONG PIEUP-SSANGSIOS;Lo;0;L;;;;;N;;;;; 1126;HANGUL CHOSEONG PIEUP-SIOS-CIEUC;Lo;0;L;;;;;N;;;;; 1127;HANGUL CHOSEONG PIEUP-CIEUC;Lo;0;L;;;;;N;;;;; 1128;HANGUL CHOSEONG PIEUP-CHIEUCH;Lo;0;L;;;;;N;;;;; 1129;HANGUL CHOSEONG PIEUP-THIEUTH;Lo;0;L;;;;;N;;;;; 112A;HANGUL CHOSEONG PIEUP-PHIEUPH;Lo;0;L;;;;;N;;;;; 112B;HANGUL CHOSEONG KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;; 112C;HANGUL CHOSEONG KAPYEOUNSSANGPIEUP;Lo;0;L;;;;;N;;;;; 112D;HANGUL CHOSEONG SIOS-KIYEOK;Lo;0;L;;;;;N;;;;; 112E;HANGUL CHOSEONG SIOS-NIEUN;Lo;0;L;;;;;N;;;;; 112F;HANGUL CHOSEONG SIOS-TIKEUT;Lo;0;L;;;;;N;;;;; 1130;HANGUL CHOSEONG SIOS-RIEUL;Lo;0;L;;;;;N;;;;; 1131;HANGUL CHOSEONG SIOS-MIEUM;Lo;0;L;;;;;N;;;;; 1132;HANGUL CHOSEONG SIOS-PIEUP;Lo;0;L;;;;;N;;;;; 1133;HANGUL CHOSEONG SIOS-PIEUP-KIYEOK;Lo;0;L;;;;;N;;;;; 1134;HANGUL CHOSEONG SIOS-SSANGSIOS;Lo;0;L;;;;;N;;;;; 1135;HANGUL CHOSEONG SIOS-IEUNG;Lo;0;L;;;;;N;;;;; 1136;HANGUL CHOSEONG SIOS-CIEUC;Lo;0;L;;;;;N;;;;; 1137;HANGUL CHOSEONG SIOS-CHIEUCH;Lo;0;L;;;;;N;;;;; 1138;HANGUL CHOSEONG SIOS-KHIEUKH;Lo;0;L;;;;;N;;;;; 1139;HANGUL CHOSEONG SIOS-THIEUTH;Lo;0;L;;;;;N;;;;; 113A;HANGUL CHOSEONG SIOS-PHIEUPH;Lo;0;L;;;;;N;;;;; 113B;HANGUL CHOSEONG SIOS-HIEUH;Lo;0;L;;;;;N;;;;; 113C;HANGUL CHOSEONG CHITUEUMSIOS;Lo;0;L;;;;;N;;;;; 113D;HANGUL CHOSEONG CHITUEUMSSANGSIOS;Lo;0;L;;;;;N;;;;; 113E;HANGUL CHOSEONG CEONGCHIEUMSIOS;Lo;0;L;;;;;N;;;;; 113F;HANGUL CHOSEONG CEONGCHIEUMSSANGSIOS;Lo;0;L;;;;;N;;;;; 1140;HANGUL CHOSEONG PANSIOS;Lo;0;L;;;;;N;;;;; 1141;HANGUL CHOSEONG IEUNG-KIYEOK;Lo;0;L;;;;;N;;;;; 1142;HANGUL CHOSEONG IEUNG-TIKEUT;Lo;0;L;;;;;N;;;;; 1143;HANGUL CHOSEONG IEUNG-MIEUM;Lo;0;L;;;;;N;;;;; 1144;HANGUL CHOSEONG IEUNG-PIEUP;Lo;0;L;;;;;N;;;;; 1145;HANGUL CHOSEONG IEUNG-SIOS;Lo;0;L;;;;;N;;;;; 1146;HANGUL CHOSEONG IEUNG-PANSIOS;Lo;0;L;;;;;N;;;;; 1147;HANGUL CHOSEONG SSANGIEUNG;Lo;0;L;;;;;N;;;;; 1148;HANGUL CHOSEONG IEUNG-CIEUC;Lo;0;L;;;;;N;;;;; 1149;HANGUL CHOSEONG IEUNG-CHIEUCH;Lo;0;L;;;;;N;;;;; 114A;HANGUL CHOSEONG IEUNG-THIEUTH;Lo;0;L;;;;;N;;;;; 114B;HANGUL CHOSEONG IEUNG-PHIEUPH;Lo;0;L;;;;;N;;;;; 114C;HANGUL CHOSEONG YESIEUNG;Lo;0;L;;;;;N;;;;; 114D;HANGUL CHOSEONG CIEUC-IEUNG;Lo;0;L;;;;;N;;;;; 114E;HANGUL CHOSEONG CHITUEUMCIEUC;Lo;0;L;;;;;N;;;;; 114F;HANGUL CHOSEONG CHITUEUMSSANGCIEUC;Lo;0;L;;;;;N;;;;; 1150;HANGUL CHOSEONG CEONGCHIEUMCIEUC;Lo;0;L;;;;;N;;;;; 1151;HANGUL CHOSEONG CEONGCHIEUMSSANGCIEUC;Lo;0;L;;;;;N;;;;; 1152;HANGUL CHOSEONG CHIEUCH-KHIEUKH;Lo;0;L;;;;;N;;;;; 1153;HANGUL CHOSEONG CHIEUCH-HIEUH;Lo;0;L;;;;;N;;;;; 1154;HANGUL CHOSEONG CHITUEUMCHIEUCH;Lo;0;L;;;;;N;;;;; 1155;HANGUL CHOSEONG CEONGCHIEUMCHIEUCH;Lo;0;L;;;;;N;;;;; 1156;HANGUL CHOSEONG PHIEUPH-PIEUP;Lo;0;L;;;;;N;;;;; 1157;HANGUL CHOSEONG KAPYEOUNPHIEUPH;Lo;0;L;;;;;N;;;;; 1158;HANGUL CHOSEONG SSANGHIEUH;Lo;0;L;;;;;N;;;;; 1159;HANGUL CHOSEONG YEORINHIEUH;Lo;0;L;;;;;N;;;;; 115A;HANGUL CHOSEONG KIYEOK-TIKEUT;Lo;0;L;;;;;N;;;;; 115B;HANGUL CHOSEONG NIEUN-SIOS;Lo;0;L;;;;;N;;;;; 115C;HANGUL CHOSEONG NIEUN-CIEUC;Lo;0;L;;;;;N;;;;; 115D;HANGUL CHOSEONG NIEUN-HIEUH;Lo;0;L;;;;;N;;;;; 115E;HANGUL CHOSEONG TIKEUT-RIEUL;Lo;0;L;;;;;N;;;;; 115F;HANGUL CHOSEONG FILLER;Lo;0;L;;;;;N;;;;; 1160;HANGUL JUNGSEONG FILLER;Lo;0;L;;;;;N;;;;; 1161;HANGUL JUNGSEONG A;Lo;0;L;;;;;N;;;;; 1162;HANGUL JUNGSEONG AE;Lo;0;L;;;;;N;;;;; 1163;HANGUL JUNGSEONG YA;Lo;0;L;;;;;N;;;;; 1164;HANGUL JUNGSEONG YAE;Lo;0;L;;;;;N;;;;; 1165;HANGUL JUNGSEONG EO;Lo;0;L;;;;;N;;;;; 1166;HANGUL JUNGSEONG E;Lo;0;L;;;;;N;;;;; 1167;HANGUL JUNGSEONG YEO;Lo;0;L;;;;;N;;;;; 1168;HANGUL JUNGSEONG YE;Lo;0;L;;;;;N;;;;; 1169;HANGUL JUNGSEONG O;Lo;0;L;;;;;N;;;;; 116A;HANGUL JUNGSEONG WA;Lo;0;L;;;;;N;;;;; 116B;HANGUL JUNGSEONG WAE;Lo;0;L;;;;;N;;;;; 116C;HANGUL JUNGSEONG OE;Lo;0;L;;;;;N;;;;; 116D;HANGUL JUNGSEONG YO;Lo;0;L;;;;;N;;;;; 116E;HANGUL JUNGSEONG U;Lo;0;L;;;;;N;;;;; 116F;HANGUL JUNGSEONG WEO;Lo;0;L;;;;;N;;;;; 1170;HANGUL JUNGSEONG WE;Lo;0;L;;;;;N;;;;; 1171;HANGUL JUNGSEONG WI;Lo;0;L;;;;;N;;;;; 1172;HANGUL JUNGSEONG YU;Lo;0;L;;;;;N;;;;; 1173;HANGUL JUNGSEONG EU;Lo;0;L;;;;;N;;;;; 1174;HANGUL JUNGSEONG YI;Lo;0;L;;;;;N;;;;; 1175;HANGUL JUNGSEONG I;Lo;0;L;;;;;N;;;;; 1176;HANGUL JUNGSEONG A-O;Lo;0;L;;;;;N;;;;; 1177;HANGUL JUNGSEONG A-U;Lo;0;L;;;;;N;;;;; 1178;HANGUL JUNGSEONG YA-O;Lo;0;L;;;;;N;;;;; 1179;HANGUL JUNGSEONG YA-YO;Lo;0;L;;;;;N;;;;; 117A;HANGUL JUNGSEONG EO-O;Lo;0;L;;;;;N;;;;; 117B;HANGUL JUNGSEONG EO-U;Lo;0;L;;;;;N;;;;; 117C;HANGUL JUNGSEONG EO-EU;Lo;0;L;;;;;N;;;;; 117D;HANGUL JUNGSEONG YEO-O;Lo;0;L;;;;;N;;;;; 117E;HANGUL JUNGSEONG YEO-U;Lo;0;L;;;;;N;;;;; 117F;HANGUL JUNGSEONG O-EO;Lo;0;L;;;;;N;;;;; 1180;HANGUL JUNGSEONG O-E;Lo;0;L;;;;;N;;;;; 1181;HANGUL JUNGSEONG O-YE;Lo;0;L;;;;;N;;;;; 1182;HANGUL JUNGSEONG O-O;Lo;0;L;;;;;N;;;;; 1183;HANGUL JUNGSEONG O-U;Lo;0;L;;;;;N;;;;; 1184;HANGUL JUNGSEONG YO-YA;Lo;0;L;;;;;N;;;;; 1185;HANGUL JUNGSEONG YO-YAE;Lo;0;L;;;;;N;;;;; 1186;HANGUL JUNGSEONG YO-YEO;Lo;0;L;;;;;N;;;;; 1187;HANGUL JUNGSEONG YO-O;Lo;0;L;;;;;N;;;;; 1188;HANGUL JUNGSEONG YO-I;Lo;0;L;;;;;N;;;;; 1189;HANGUL JUNGSEONG U-A;Lo;0;L;;;;;N;;;;; 118A;HANGUL JUNGSEONG U-AE;Lo;0;L;;;;;N;;;;; 118B;HANGUL JUNGSEONG U-EO-EU;Lo;0;L;;;;;N;;;;; 118C;HANGUL JUNGSEONG U-YE;Lo;0;L;;;;;N;;;;; 118D;HANGUL JUNGSEONG U-U;Lo;0;L;;;;;N;;;;; 118E;HANGUL JUNGSEONG YU-A;Lo;0;L;;;;;N;;;;; 118F;HANGUL JUNGSEONG YU-EO;Lo;0;L;;;;;N;;;;; 1190;HANGUL JUNGSEONG YU-E;Lo;0;L;;;;;N;;;;; 1191;HANGUL JUNGSEONG YU-YEO;Lo;0;L;;;;;N;;;;; 1192;HANGUL JUNGSEONG YU-YE;Lo;0;L;;;;;N;;;;; 1193;HANGUL JUNGSEONG YU-U;Lo;0;L;;;;;N;;;;; 1194;HANGUL JUNGSEONG YU-I;Lo;0;L;;;;;N;;;;; 1195;HANGUL JUNGSEONG EU-U;Lo;0;L;;;;;N;;;;; 1196;HANGUL JUNGSEONG EU-EU;Lo;0;L;;;;;N;;;;; 1197;HANGUL JUNGSEONG YI-U;Lo;0;L;;;;;N;;;;; 1198;HANGUL JUNGSEONG I-A;Lo;0;L;;;;;N;;;;; 1199;HANGUL JUNGSEONG I-YA;Lo;0;L;;;;;N;;;;; 119A;HANGUL JUNGSEONG I-O;Lo;0;L;;;;;N;;;;; 119B;HANGUL JUNGSEONG I-U;Lo;0;L;;;;;N;;;;; 119C;HANGUL JUNGSEONG I-EU;Lo;0;L;;;;;N;;;;; 119D;HANGUL JUNGSEONG I-ARAEA;Lo;0;L;;;;;N;;;;; 119E;HANGUL JUNGSEONG ARAEA;Lo;0;L;;;;;N;;;;; 119F;HANGUL JUNGSEONG ARAEA-EO;Lo;0;L;;;;;N;;;;; 11A0;HANGUL JUNGSEONG ARAEA-U;Lo;0;L;;;;;N;;;;; 11A1;HANGUL JUNGSEONG ARAEA-I;Lo;0;L;;;;;N;;;;; 11A2;HANGUL JUNGSEONG SSANGARAEA;Lo;0;L;;;;;N;;;;; 11A3;HANGUL JUNGSEONG A-EU;Lo;0;L;;;;;N;;;;; 11A4;HANGUL JUNGSEONG YA-U;Lo;0;L;;;;;N;;;;; 11A5;HANGUL JUNGSEONG YEO-YA;Lo;0;L;;;;;N;;;;; 11A6;HANGUL JUNGSEONG O-YA;Lo;0;L;;;;;N;;;;; 11A7;HANGUL JUNGSEONG O-YAE;Lo;0;L;;;;;N;;;;; 11A8;HANGUL JONGSEONG KIYEOK;Lo;0;L;;;;;N;;;;; 11A9;HANGUL JONGSEONG SSANGKIYEOK;Lo;0;L;;;;;N;;;;; 11AA;HANGUL JONGSEONG KIYEOK-SIOS;Lo;0;L;;;;;N;;;;; 11AB;HANGUL JONGSEONG NIEUN;Lo;0;L;;;;;N;;;;; 11AC;HANGUL JONGSEONG NIEUN-CIEUC;Lo;0;L;;;;;N;;;;; 11AD;HANGUL JONGSEONG NIEUN-HIEUH;Lo;0;L;;;;;N;;;;; 11AE;HANGUL JONGSEONG TIKEUT;Lo;0;L;;;;;N;;;;; 11AF;HANGUL JONGSEONG RIEUL;Lo;0;L;;;;;N;;;;; 11B0;HANGUL JONGSEONG RIEUL-KIYEOK;Lo;0;L;;;;;N;;;;; 11B1;HANGUL JONGSEONG RIEUL-MIEUM;Lo;0;L;;;;;N;;;;; 11B2;HANGUL JONGSEONG RIEUL-PIEUP;Lo;0;L;;;;;N;;;;; 11B3;HANGUL JONGSEONG RIEUL-SIOS;Lo;0;L;;;;;N;;;;; 11B4;HANGUL JONGSEONG RIEUL-THIEUTH;Lo;0;L;;;;;N;;;;; 11B5;HANGUL JONGSEONG RIEUL-PHIEUPH;Lo;0;L;;;;;N;;;;; 11B6;HANGUL JONGSEONG RIEUL-HIEUH;Lo;0;L;;;;;N;;;;; 11B7;HANGUL JONGSEONG MIEUM;Lo;0;L;;;;;N;;;;; 11B8;HANGUL JONGSEONG PIEUP;Lo;0;L;;;;;N;;;;; 11B9;HANGUL JONGSEONG PIEUP-SIOS;Lo;0;L;;;;;N;;;;; 11BA;HANGUL JONGSEONG SIOS;Lo;0;L;;;;;N;;;;; 11BB;HANGUL JONGSEONG SSANGSIOS;Lo;0;L;;;;;N;;;;; 11BC;HANGUL JONGSEONG IEUNG;Lo;0;L;;;;;N;;;;; 11BD;HANGUL JONGSEONG CIEUC;Lo;0;L;;;;;N;;;;; 11BE;HANGUL JONGSEONG CHIEUCH;Lo;0;L;;;;;N;;;;; 11BF;HANGUL JONGSEONG KHIEUKH;Lo;0;L;;;;;N;;;;; 11C0;HANGUL JONGSEONG THIEUTH;Lo;0;L;;;;;N;;;;; 11C1;HANGUL JONGSEONG PHIEUPH;Lo;0;L;;;;;N;;;;; 11C2;HANGUL JONGSEONG HIEUH;Lo;0;L;;;;;N;;;;; 11C3;HANGUL JONGSEONG KIYEOK-RIEUL;Lo;0;L;;;;;N;;;;; 11C4;HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK;Lo;0;L;;;;;N;;;;; 11C5;HANGUL JONGSEONG NIEUN-KIYEOK;Lo;0;L;;;;;N;;;;; 11C6;HANGUL JONGSEONG NIEUN-TIKEUT;Lo;0;L;;;;;N;;;;; 11C7;HANGUL JONGSEONG NIEUN-SIOS;Lo;0;L;;;;;N;;;;; 11C8;HANGUL JONGSEONG NIEUN-PANSIOS;Lo;0;L;;;;;N;;;;; 11C9;HANGUL JONGSEONG NIEUN-THIEUTH;Lo;0;L;;;;;N;;;;; 11CA;HANGUL JONGSEONG TIKEUT-KIYEOK;Lo;0;L;;;;;N;;;;; 11CB;HANGUL JONGSEONG TIKEUT-RIEUL;Lo;0;L;;;;;N;;;;; 11CC;HANGUL JONGSEONG RIEUL-KIYEOK-SIOS;Lo;0;L;;;;;N;;;;; 11CD;HANGUL JONGSEONG RIEUL-NIEUN;Lo;0;L;;;;;N;;;;; 11CE;HANGUL JONGSEONG RIEUL-TIKEUT;Lo;0;L;;;;;N;;;;; 11CF;HANGUL JONGSEONG RIEUL-TIKEUT-HIEUH;Lo;0;L;;;;;N;;;;; 11D0;HANGUL JONGSEONG SSANGRIEUL;Lo;0;L;;;;;N;;;;; 11D1;HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK;Lo;0;L;;;;;N;;;;; 11D2;HANGUL JONGSEONG RIEUL-MIEUM-SIOS;Lo;0;L;;;;;N;;;;; 11D3;HANGUL JONGSEONG RIEUL-PIEUP-SIOS;Lo;0;L;;;;;N;;;;; 11D4;HANGUL JONGSEONG RIEUL-PIEUP-HIEUH;Lo;0;L;;;;;N;;;;; 11D5;HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;; 11D6;HANGUL JONGSEONG RIEUL-SSANGSIOS;Lo;0;L;;;;;N;;;;; 11D7;HANGUL JONGSEONG RIEUL-PANSIOS;Lo;0;L;;;;;N;;;;; 11D8;HANGUL JONGSEONG RIEUL-KHIEUKH;Lo;0;L;;;;;N;;;;; 11D9;HANGUL JONGSEONG RIEUL-YEORINHIEUH;Lo;0;L;;;;;N;;;;; 11DA;HANGUL JONGSEONG MIEUM-KIYEOK;Lo;0;L;;;;;N;;;;; 11DB;HANGUL JONGSEONG MIEUM-RIEUL;Lo;0;L;;;;;N;;;;; 11DC;HANGUL JONGSEONG MIEUM-PIEUP;Lo;0;L;;;;;N;;;;; 11DD;HANGUL JONGSEONG MIEUM-SIOS;Lo;0;L;;;;;N;;;;; 11DE;HANGUL JONGSEONG MIEUM-SSANGSIOS;Lo;0;L;;;;;N;;;;; 11DF;HANGUL JONGSEONG MIEUM-PANSIOS;Lo;0;L;;;;;N;;;;; 11E0;HANGUL JONGSEONG MIEUM-CHIEUCH;Lo;0;L;;;;;N;;;;; 11E1;HANGUL JONGSEONG MIEUM-HIEUH;Lo;0;L;;;;;N;;;;; 11E2;HANGUL JONGSEONG KAPYEOUNMIEUM;Lo;0;L;;;;;N;;;;; 11E3;HANGUL JONGSEONG PIEUP-RIEUL;Lo;0;L;;;;;N;;;;; 11E4;HANGUL JONGSEONG PIEUP-PHIEUPH;Lo;0;L;;;;;N;;;;; 11E5;HANGUL JONGSEONG PIEUP-HIEUH;Lo;0;L;;;;;N;;;;; 11E6;HANGUL JONGSEONG KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;; 11E7;HANGUL JONGSEONG SIOS-KIYEOK;Lo;0;L;;;;;N;;;;; 11E8;HANGUL JONGSEONG SIOS-TIKEUT;Lo;0;L;;;;;N;;;;; 11E9;HANGUL JONGSEONG SIOS-RIEUL;Lo;0;L;;;;;N;;;;; 11EA;HANGUL JONGSEONG SIOS-PIEUP;Lo;0;L;;;;;N;;;;; 11EB;HANGUL JONGSEONG PANSIOS;Lo;0;L;;;;;N;;;;; 11EC;HANGUL JONGSEONG IEUNG-KIYEOK;Lo;0;L;;;;;N;;;;; 11ED;HANGUL JONGSEONG IEUNG-SSANGKIYEOK;Lo;0;L;;;;;N;;;;; 11EE;HANGUL JONGSEONG SSANGIEUNG;Lo;0;L;;;;;N;;;;; 11EF;HANGUL JONGSEONG IEUNG-KHIEUKH;Lo;0;L;;;;;N;;;;; 11F0;HANGUL JONGSEONG YESIEUNG;Lo;0;L;;;;;N;;;;; 11F1;HANGUL JONGSEONG YESIEUNG-SIOS;Lo;0;L;;;;;N;;;;; 11F2;HANGUL JONGSEONG YESIEUNG-PANSIOS;Lo;0;L;;;;;N;;;;; 11F3;HANGUL JONGSEONG PHIEUPH-PIEUP;Lo;0;L;;;;;N;;;;; 11F4;HANGUL JONGSEONG KAPYEOUNPHIEUPH;Lo;0;L;;;;;N;;;;; 11F5;HANGUL JONGSEONG HIEUH-NIEUN;Lo;0;L;;;;;N;;;;; 11F6;HANGUL JONGSEONG HIEUH-RIEUL;Lo;0;L;;;;;N;;;;; 11F7;HANGUL JONGSEONG HIEUH-MIEUM;Lo;0;L;;;;;N;;;;; 11F8;HANGUL JONGSEONG HIEUH-PIEUP;Lo;0;L;;;;;N;;;;; 11F9;HANGUL JONGSEONG YEORINHIEUH;Lo;0;L;;;;;N;;;;; 11FA;HANGUL JONGSEONG KIYEOK-NIEUN;Lo;0;L;;;;;N;;;;; 11FB;HANGUL JONGSEONG KIYEOK-PIEUP;Lo;0;L;;;;;N;;;;; 11FC;HANGUL JONGSEONG KIYEOK-CHIEUCH;Lo;0;L;;;;;N;;;;; 11FD;HANGUL JONGSEONG KIYEOK-KHIEUKH;Lo;0;L;;;;;N;;;;; 11FE;HANGUL JONGSEONG KIYEOK-HIEUH;Lo;0;L;;;;;N;;;;; 11FF;HANGUL JONGSEONG SSANGNIEUN;Lo;0;L;;;;;N;;;;; 1200;ETHIOPIC SYLLABLE HA;Lo;0;L;;;;;N;;;;; 1201;ETHIOPIC SYLLABLE HU;Lo;0;L;;;;;N;;;;; 1202;ETHIOPIC SYLLABLE HI;Lo;0;L;;;;;N;;;;; 1203;ETHIOPIC SYLLABLE HAA;Lo;0;L;;;;;N;;;;; 1204;ETHIOPIC SYLLABLE HEE;Lo;0;L;;;;;N;;;;; 1205;ETHIOPIC SYLLABLE HE;Lo;0;L;;;;;N;;;;; 1206;ETHIOPIC SYLLABLE HO;Lo;0;L;;;;;N;;;;; 1207;ETHIOPIC SYLLABLE HOA;Lo;0;L;;;;;N;;;;; 1208;ETHIOPIC SYLLABLE LA;Lo;0;L;;;;;N;;;;; 1209;ETHIOPIC SYLLABLE LU;Lo;0;L;;;;;N;;;;; 120A;ETHIOPIC SYLLABLE LI;Lo;0;L;;;;;N;;;;; 120B;ETHIOPIC SYLLABLE LAA;Lo;0;L;;;;;N;;;;; 120C;ETHIOPIC SYLLABLE LEE;Lo;0;L;;;;;N;;;;; 120D;ETHIOPIC SYLLABLE LE;Lo;0;L;;;;;N;;;;; 120E;ETHIOPIC SYLLABLE LO;Lo;0;L;;;;;N;;;;; 120F;ETHIOPIC SYLLABLE LWA;Lo;0;L;;;;;N;;;;; 1210;ETHIOPIC SYLLABLE HHA;Lo;0;L;;;;;N;;;;; 1211;ETHIOPIC SYLLABLE HHU;Lo;0;L;;;;;N;;;;; 1212;ETHIOPIC SYLLABLE HHI;Lo;0;L;;;;;N;;;;; 1213;ETHIOPIC SYLLABLE HHAA;Lo;0;L;;;;;N;;;;; 1214;ETHIOPIC SYLLABLE HHEE;Lo;0;L;;;;;N;;;;; 1215;ETHIOPIC SYLLABLE HHE;Lo;0;L;;;;;N;;;;; 1216;ETHIOPIC SYLLABLE HHO;Lo;0;L;;;;;N;;;;; 1217;ETHIOPIC SYLLABLE HHWA;Lo;0;L;;;;;N;;;;; 1218;ETHIOPIC SYLLABLE MA;Lo;0;L;;;;;N;;;;; 1219;ETHIOPIC SYLLABLE MU;Lo;0;L;;;;;N;;;;; 121A;ETHIOPIC SYLLABLE MI;Lo;0;L;;;;;N;;;;; 121B;ETHIOPIC SYLLABLE MAA;Lo;0;L;;;;;N;;;;; 121C;ETHIOPIC SYLLABLE MEE;Lo;0;L;;;;;N;;;;; 121D;ETHIOPIC SYLLABLE ME;Lo;0;L;;;;;N;;;;; 121E;ETHIOPIC SYLLABLE MO;Lo;0;L;;;;;N;;;;; 121F;ETHIOPIC SYLLABLE MWA;Lo;0;L;;;;;N;;;;; 1220;ETHIOPIC SYLLABLE SZA;Lo;0;L;;;;;N;;;;; 1221;ETHIOPIC SYLLABLE SZU;Lo;0;L;;;;;N;;;;; 1222;ETHIOPIC SYLLABLE SZI;Lo;0;L;;;;;N;;;;; 1223;ETHIOPIC SYLLABLE SZAA;Lo;0;L;;;;;N;;;;; 1224;ETHIOPIC SYLLABLE SZEE;Lo;0;L;;;;;N;;;;; 1225;ETHIOPIC SYLLABLE SZE;Lo;0;L;;;;;N;;;;; 1226;ETHIOPIC SYLLABLE SZO;Lo;0;L;;;;;N;;;;; 1227;ETHIOPIC SYLLABLE SZWA;Lo;0;L;;;;;N;;;;; 1228;ETHIOPIC SYLLABLE RA;Lo;0;L;;;;;N;;;;; 1229;ETHIOPIC SYLLABLE RU;Lo;0;L;;;;;N;;;;; 122A;ETHIOPIC SYLLABLE RI;Lo;0;L;;;;;N;;;;; 122B;ETHIOPIC SYLLABLE RAA;Lo;0;L;;;;;N;;;;; 122C;ETHIOPIC SYLLABLE REE;Lo;0;L;;;;;N;;;;; 122D;ETHIOPIC SYLLABLE RE;Lo;0;L;;;;;N;;;;; 122E;ETHIOPIC SYLLABLE RO;Lo;0;L;;;;;N;;;;; 122F;ETHIOPIC SYLLABLE RWA;Lo;0;L;;;;;N;;;;; 1230;ETHIOPIC SYLLABLE SA;Lo;0;L;;;;;N;;;;; 1231;ETHIOPIC SYLLABLE SU;Lo;0;L;;;;;N;;;;; 1232;ETHIOPIC SYLLABLE SI;Lo;0;L;;;;;N;;;;; 1233;ETHIOPIC SYLLABLE SAA;Lo;0;L;;;;;N;;;;; 1234;ETHIOPIC SYLLABLE SEE;Lo;0;L;;;;;N;;;;; 1235;ETHIOPIC SYLLABLE SE;Lo;0;L;;;;;N;;;;; 1236;ETHIOPIC SYLLABLE SO;Lo;0;L;;;;;N;;;;; 1237;ETHIOPIC SYLLABLE SWA;Lo;0;L;;;;;N;;;;; 1238;ETHIOPIC SYLLABLE SHA;Lo;0;L;;;;;N;;;;; 1239;ETHIOPIC SYLLABLE SHU;Lo;0;L;;;;;N;;;;; 123A;ETHIOPIC SYLLABLE SHI;Lo;0;L;;;;;N;;;;; 123B;ETHIOPIC SYLLABLE SHAA;Lo;0;L;;;;;N;;;;; 123C;ETHIOPIC SYLLABLE SHEE;Lo;0;L;;;;;N;;;;; 123D;ETHIOPIC SYLLABLE SHE;Lo;0;L;;;;;N;;;;; 123E;ETHIOPIC SYLLABLE SHO;Lo;0;L;;;;;N;;;;; 123F;ETHIOPIC SYLLABLE SHWA;Lo;0;L;;;;;N;;;;; 1240;ETHIOPIC SYLLABLE QA;Lo;0;L;;;;;N;;;;; 1241;ETHIOPIC SYLLABLE QU;Lo;0;L;;;;;N;;;;; 1242;ETHIOPIC SYLLABLE QI;Lo;0;L;;;;;N;;;;; 1243;ETHIOPIC SYLLABLE QAA;Lo;0;L;;;;;N;;;;; 1244;ETHIOPIC SYLLABLE QEE;Lo;0;L;;;;;N;;;;; 1245;ETHIOPIC SYLLABLE QE;Lo;0;L;;;;;N;;;;; 1246;ETHIOPIC SYLLABLE QO;Lo;0;L;;;;;N;;;;; 1247;ETHIOPIC SYLLABLE QOA;Lo;0;L;;;;;N;;;;; 1248;ETHIOPIC SYLLABLE QWA;Lo;0;L;;;;;N;;;;; 124A;ETHIOPIC SYLLABLE QWI;Lo;0;L;;;;;N;;;;; 124B;ETHIOPIC SYLLABLE QWAA;Lo;0;L;;;;;N;;;;; 124C;ETHIOPIC SYLLABLE QWEE;Lo;0;L;;;;;N;;;;; 124D;ETHIOPIC SYLLABLE QWE;Lo;0;L;;;;;N;;;;; 1250;ETHIOPIC SYLLABLE QHA;Lo;0;L;;;;;N;;;;; 1251;ETHIOPIC SYLLABLE QHU;Lo;0;L;;;;;N;;;;; 1252;ETHIOPIC SYLLABLE QHI;Lo;0;L;;;;;N;;;;; 1253;ETHIOPIC SYLLABLE QHAA;Lo;0;L;;;;;N;;;;; 1254;ETHIOPIC SYLLABLE QHEE;Lo;0;L;;;;;N;;;;; 1255;ETHIOPIC SYLLABLE QHE;Lo;0;L;;;;;N;;;;; 1256;ETHIOPIC SYLLABLE QHO;Lo;0;L;;;;;N;;;;; 1258;ETHIOPIC SYLLABLE QHWA;Lo;0;L;;;;;N;;;;; 125A;ETHIOPIC SYLLABLE QHWI;Lo;0;L;;;;;N;;;;; 125B;ETHIOPIC SYLLABLE QHWAA;Lo;0;L;;;;;N;;;;; 125C;ETHIOPIC SYLLABLE QHWEE;Lo;0;L;;;;;N;;;;; 125D;ETHIOPIC SYLLABLE QHWE;Lo;0;L;;;;;N;;;;; 1260;ETHIOPIC SYLLABLE BA;Lo;0;L;;;;;N;;;;; 1261;ETHIOPIC SYLLABLE BU;Lo;0;L;;;;;N;;;;; 1262;ETHIOPIC SYLLABLE BI;Lo;0;L;;;;;N;;;;; 1263;ETHIOPIC SYLLABLE BAA;Lo;0;L;;;;;N;;;;; 1264;ETHIOPIC SYLLABLE BEE;Lo;0;L;;;;;N;;;;; 1265;ETHIOPIC SYLLABLE BE;Lo;0;L;;;;;N;;;;; 1266;ETHIOPIC SYLLABLE BO;Lo;0;L;;;;;N;;;;; 1267;ETHIOPIC SYLLABLE BWA;Lo;0;L;;;;;N;;;;; 1268;ETHIOPIC SYLLABLE VA;Lo;0;L;;;;;N;;;;; 1269;ETHIOPIC SYLLABLE VU;Lo;0;L;;;;;N;;;;; 126A;ETHIOPIC SYLLABLE VI;Lo;0;L;;;;;N;;;;; 126B;ETHIOPIC SYLLABLE VAA;Lo;0;L;;;;;N;;;;; 126C;ETHIOPIC SYLLABLE VEE;Lo;0;L;;;;;N;;;;; 126D;ETHIOPIC SYLLABLE VE;Lo;0;L;;;;;N;;;;; 126E;ETHIOPIC SYLLABLE VO;Lo;0;L;;;;;N;;;;; 126F;ETHIOPIC SYLLABLE VWA;Lo;0;L;;;;;N;;;;; 1270;ETHIOPIC SYLLABLE TA;Lo;0;L;;;;;N;;;;; 1271;ETHIOPIC SYLLABLE TU;Lo;0;L;;;;;N;;;;; 1272;ETHIOPIC SYLLABLE TI;Lo;0;L;;;;;N;;;;; 1273;ETHIOPIC SYLLABLE TAA;Lo;0;L;;;;;N;;;;; 1274;ETHIOPIC SYLLABLE TEE;Lo;0;L;;;;;N;;;;; 1275;ETHIOPIC SYLLABLE TE;Lo;0;L;;;;;N;;;;; 1276;ETHIOPIC SYLLABLE TO;Lo;0;L;;;;;N;;;;; 1277;ETHIOPIC SYLLABLE TWA;Lo;0;L;;;;;N;;;;; 1278;ETHIOPIC SYLLABLE CA;Lo;0;L;;;;;N;;;;; 1279;ETHIOPIC SYLLABLE CU;Lo;0;L;;;;;N;;;;; 127A;ETHIOPIC SYLLABLE CI;Lo;0;L;;;;;N;;;;; 127B;ETHIOPIC SYLLABLE CAA;Lo;0;L;;;;;N;;;;; 127C;ETHIOPIC SYLLABLE CEE;Lo;0;L;;;;;N;;;;; 127D;ETHIOPIC SYLLABLE CE;Lo;0;L;;;;;N;;;;; 127E;ETHIOPIC SYLLABLE CO;Lo;0;L;;;;;N;;;;; 127F;ETHIOPIC SYLLABLE CWA;Lo;0;L;;;;;N;;;;; 1280;ETHIOPIC SYLLABLE XA;Lo;0;L;;;;;N;;;;; 1281;ETHIOPIC SYLLABLE XU;Lo;0;L;;;;;N;;;;; 1282;ETHIOPIC SYLLABLE XI;Lo;0;L;;;;;N;;;;; 1283;ETHIOPIC SYLLABLE XAA;Lo;0;L;;;;;N;;;;; 1284;ETHIOPIC SYLLABLE XEE;Lo;0;L;;;;;N;;;;; 1285;ETHIOPIC SYLLABLE XE;Lo;0;L;;;;;N;;;;; 1286;ETHIOPIC SYLLABLE XO;Lo;0;L;;;;;N;;;;; 1287;ETHIOPIC SYLLABLE XOA;Lo;0;L;;;;;N;;;;; 1288;ETHIOPIC SYLLABLE XWA;Lo;0;L;;;;;N;;;;; 128A;ETHIOPIC SYLLABLE XWI;Lo;0;L;;;;;N;;;;; 128B;ETHIOPIC SYLLABLE XWAA;Lo;0;L;;;;;N;;;;; 128C;ETHIOPIC SYLLABLE XWEE;Lo;0;L;;;;;N;;;;; 128D;ETHIOPIC SYLLABLE XWE;Lo;0;L;;;;;N;;;;; 1290;ETHIOPIC SYLLABLE NA;Lo;0;L;;;;;N;;;;; 1291;ETHIOPIC SYLLABLE NU;Lo;0;L;;;;;N;;;;; 1292;ETHIOPIC SYLLABLE NI;Lo;0;L;;;;;N;;;;; 1293;ETHIOPIC SYLLABLE NAA;Lo;0;L;;;;;N;;;;; 1294;ETHIOPIC SYLLABLE NEE;Lo;0;L;;;;;N;;;;; 1295;ETHIOPIC SYLLABLE NE;Lo;0;L;;;;;N;;;;; 1296;ETHIOPIC SYLLABLE NO;Lo;0;L;;;;;N;;;;; 1297;ETHIOPIC SYLLABLE NWA;Lo;0;L;;;;;N;;;;; 1298;ETHIOPIC SYLLABLE NYA;Lo;0;L;;;;;N;;;;; 1299;ETHIOPIC SYLLABLE NYU;Lo;0;L;;;;;N;;;;; 129A;ETHIOPIC SYLLABLE NYI;Lo;0;L;;;;;N;;;;; 129B;ETHIOPIC SYLLABLE NYAA;Lo;0;L;;;;;N;;;;; 129C;ETHIOPIC SYLLABLE NYEE;Lo;0;L;;;;;N;;;;; 129D;ETHIOPIC SYLLABLE NYE;Lo;0;L;;;;;N;;;;; 129E;ETHIOPIC SYLLABLE NYO;Lo;0;L;;;;;N;;;;; 129F;ETHIOPIC SYLLABLE NYWA;Lo;0;L;;;;;N;;;;; 12A0;ETHIOPIC SYLLABLE GLOTTAL A;Lo;0;L;;;;;N;;;;; 12A1;ETHIOPIC SYLLABLE GLOTTAL U;Lo;0;L;;;;;N;;;;; 12A2;ETHIOPIC SYLLABLE GLOTTAL I;Lo;0;L;;;;;N;;;;; 12A3;ETHIOPIC SYLLABLE GLOTTAL AA;Lo;0;L;;;;;N;;;;; 12A4;ETHIOPIC SYLLABLE GLOTTAL EE;Lo;0;L;;;;;N;;;;; 12A5;ETHIOPIC SYLLABLE GLOTTAL E;Lo;0;L;;;;;N;;;;; 12A6;ETHIOPIC SYLLABLE GLOTTAL O;Lo;0;L;;;;;N;;;;; 12A7;ETHIOPIC SYLLABLE GLOTTAL WA;Lo;0;L;;;;;N;;;;; 12A8;ETHIOPIC SYLLABLE KA;Lo;0;L;;;;;N;;;;; 12A9;ETHIOPIC SYLLABLE KU;Lo;0;L;;;;;N;;;;; 12AA;ETHIOPIC SYLLABLE KI;Lo;0;L;;;;;N;;;;; 12AB;ETHIOPIC SYLLABLE KAA;Lo;0;L;;;;;N;;;;; 12AC;ETHIOPIC SYLLABLE KEE;Lo;0;L;;;;;N;;;;; 12AD;ETHIOPIC SYLLABLE KE;Lo;0;L;;;;;N;;;;; 12AE;ETHIOPIC SYLLABLE KO;Lo;0;L;;;;;N;;;;; 12AF;ETHIOPIC SYLLABLE KOA;Lo;0;L;;;;;N;;;;; 12B0;ETHIOPIC SYLLABLE KWA;Lo;0;L;;;;;N;;;;; 12B2;ETHIOPIC SYLLABLE KWI;Lo;0;L;;;;;N;;;;; 12B3;ETHIOPIC SYLLABLE KWAA;Lo;0;L;;;;;N;;;;; 12B4;ETHIOPIC SYLLABLE KWEE;Lo;0;L;;;;;N;;;;; 12B5;ETHIOPIC SYLLABLE KWE;Lo;0;L;;;;;N;;;;; 12B8;ETHIOPIC SYLLABLE KXA;Lo;0;L;;;;;N;;;;; 12B9;ETHIOPIC SYLLABLE KXU;Lo;0;L;;;;;N;;;;; 12BA;ETHIOPIC SYLLABLE KXI;Lo;0;L;;;;;N;;;;; 12BB;ETHIOPIC SYLLABLE KXAA;Lo;0;L;;;;;N;;;;; 12BC;ETHIOPIC SYLLABLE KXEE;Lo;0;L;;;;;N;;;;; 12BD;ETHIOPIC SYLLABLE KXE;Lo;0;L;;;;;N;;;;; 12BE;ETHIOPIC SYLLABLE KXO;Lo;0;L;;;;;N;;;;; 12C0;ETHIOPIC SYLLABLE KXWA;Lo;0;L;;;;;N;;;;; 12C2;ETHIOPIC SYLLABLE KXWI;Lo;0;L;;;;;N;;;;; 12C3;ETHIOPIC SYLLABLE KXWAA;Lo;0;L;;;;;N;;;;; 12C4;ETHIOPIC SYLLABLE KXWEE;Lo;0;L;;;;;N;;;;; 12C5;ETHIOPIC SYLLABLE KXWE;Lo;0;L;;;;;N;;;;; 12C8;ETHIOPIC SYLLABLE WA;Lo;0;L;;;;;N;;;;; 12C9;ETHIOPIC SYLLABLE WU;Lo;0;L;;;;;N;;;;; 12CA;ETHIOPIC SYLLABLE WI;Lo;0;L;;;;;N;;;;; 12CB;ETHIOPIC SYLLABLE WAA;Lo;0;L;;;;;N;;;;; 12CC;ETHIOPIC SYLLABLE WEE;Lo;0;L;;;;;N;;;;; 12CD;ETHIOPIC SYLLABLE WE;Lo;0;L;;;;;N;;;;; 12CE;ETHIOPIC SYLLABLE WO;Lo;0;L;;;;;N;;;;; 12CF;ETHIOPIC SYLLABLE WOA;Lo;0;L;;;;;N;;;;; 12D0;ETHIOPIC SYLLABLE PHARYNGEAL A;Lo;0;L;;;;;N;;;;; 12D1;ETHIOPIC SYLLABLE PHARYNGEAL U;Lo;0;L;;;;;N;;;;; 12D2;ETHIOPIC SYLLABLE PHARYNGEAL I;Lo;0;L;;;;;N;;;;; 12D3;ETHIOPIC SYLLABLE PHARYNGEAL AA;Lo;0;L;;;;;N;;;;; 12D4;ETHIOPIC SYLLABLE PHARYNGEAL EE;Lo;0;L;;;;;N;;;;; 12D5;ETHIOPIC SYLLABLE PHARYNGEAL E;Lo;0;L;;;;;N;;;;; 12D6;ETHIOPIC SYLLABLE PHARYNGEAL O;Lo;0;L;;;;;N;;;;; 12D8;ETHIOPIC SYLLABLE ZA;Lo;0;L;;;;;N;;;;; 12D9;ETHIOPIC SYLLABLE ZU;Lo;0;L;;;;;N;;;;; 12DA;ETHIOPIC SYLLABLE ZI;Lo;0;L;;;;;N;;;;; 12DB;ETHIOPIC SYLLABLE ZAA;Lo;0;L;;;;;N;;;;; 12DC;ETHIOPIC SYLLABLE ZEE;Lo;0;L;;;;;N;;;;; 12DD;ETHIOPIC SYLLABLE ZE;Lo;0;L;;;;;N;;;;; 12DE;ETHIOPIC SYLLABLE ZO;Lo;0;L;;;;;N;;;;; 12DF;ETHIOPIC SYLLABLE ZWA;Lo;0;L;;;;;N;;;;; 12E0;ETHIOPIC SYLLABLE ZHA;Lo;0;L;;;;;N;;;;; 12E1;ETHIOPIC SYLLABLE ZHU;Lo;0;L;;;;;N;;;;; 12E2;ETHIOPIC SYLLABLE ZHI;Lo;0;L;;;;;N;;;;; 12E3;ETHIOPIC SYLLABLE ZHAA;Lo;0;L;;;;;N;;;;; 12E4;ETHIOPIC SYLLABLE ZHEE;Lo;0;L;;;;;N;;;;; 12E5;ETHIOPIC SYLLABLE ZHE;Lo;0;L;;;;;N;;;;; 12E6;ETHIOPIC SYLLABLE ZHO;Lo;0;L;;;;;N;;;;; 12E7;ETHIOPIC SYLLABLE ZHWA;Lo;0;L;;;;;N;;;;; 12E8;ETHIOPIC SYLLABLE YA;Lo;0;L;;;;;N;;;;; 12E9;ETHIOPIC SYLLABLE YU;Lo;0;L;;;;;N;;;;; 12EA;ETHIOPIC SYLLABLE YI;Lo;0;L;;;;;N;;;;; 12EB;ETHIOPIC SYLLABLE YAA;Lo;0;L;;;;;N;;;;; 12EC;ETHIOPIC SYLLABLE YEE;Lo;0;L;;;;;N;;;;; 12ED;ETHIOPIC SYLLABLE YE;Lo;0;L;;;;;N;;;;; 12EE;ETHIOPIC SYLLABLE YO;Lo;0;L;;;;;N;;;;; 12EF;ETHIOPIC SYLLABLE YOA;Lo;0;L;;;;;N;;;;; 12F0;ETHIOPIC SYLLABLE DA;Lo;0;L;;;;;N;;;;; 12F1;ETHIOPIC SYLLABLE DU;Lo;0;L;;;;;N;;;;; 12F2;ETHIOPIC SYLLABLE DI;Lo;0;L;;;;;N;;;;; 12F3;ETHIOPIC SYLLABLE DAA;Lo;0;L;;;;;N;;;;; 12F4;ETHIOPIC SYLLABLE DEE;Lo;0;L;;;;;N;;;;; 12F5;ETHIOPIC SYLLABLE DE;Lo;0;L;;;;;N;;;;; 12F6;ETHIOPIC SYLLABLE DO;Lo;0;L;;;;;N;;;;; 12F7;ETHIOPIC SYLLABLE DWA;Lo;0;L;;;;;N;;;;; 12F8;ETHIOPIC SYLLABLE DDA;Lo;0;L;;;;;N;;;;; 12F9;ETHIOPIC SYLLABLE DDU;Lo;0;L;;;;;N;;;;; 12FA;ETHIOPIC SYLLABLE DDI;Lo;0;L;;;;;N;;;;; 12FB;ETHIOPIC SYLLABLE DDAA;Lo;0;L;;;;;N;;;;; 12FC;ETHIOPIC SYLLABLE DDEE;Lo;0;L;;;;;N;;;;; 12FD;ETHIOPIC SYLLABLE DDE;Lo;0;L;;;;;N;;;;; 12FE;ETHIOPIC SYLLABLE DDO;Lo;0;L;;;;;N;;;;; 12FF;ETHIOPIC SYLLABLE DDWA;Lo;0;L;;;;;N;;;;; 1300;ETHIOPIC SYLLABLE JA;Lo;0;L;;;;;N;;;;; 1301;ETHIOPIC SYLLABLE JU;Lo;0;L;;;;;N;;;;; 1302;ETHIOPIC SYLLABLE JI;Lo;0;L;;;;;N;;;;; 1303;ETHIOPIC SYLLABLE JAA;Lo;0;L;;;;;N;;;;; 1304;ETHIOPIC SYLLABLE JEE;Lo;0;L;;;;;N;;;;; 1305;ETHIOPIC SYLLABLE JE;Lo;0;L;;;;;N;;;;; 1306;ETHIOPIC SYLLABLE JO;Lo;0;L;;;;;N;;;;; 1307;ETHIOPIC SYLLABLE JWA;Lo;0;L;;;;;N;;;;; 1308;ETHIOPIC SYLLABLE GA;Lo;0;L;;;;;N;;;;; 1309;ETHIOPIC SYLLABLE GU;Lo;0;L;;;;;N;;;;; 130A;ETHIOPIC SYLLABLE GI;Lo;0;L;;;;;N;;;;; 130B;ETHIOPIC SYLLABLE GAA;Lo;0;L;;;;;N;;;;; 130C;ETHIOPIC SYLLABLE GEE;Lo;0;L;;;;;N;;;;; 130D;ETHIOPIC SYLLABLE GE;Lo;0;L;;;;;N;;;;; 130E;ETHIOPIC SYLLABLE GO;Lo;0;L;;;;;N;;;;; 130F;ETHIOPIC SYLLABLE GOA;Lo;0;L;;;;;N;;;;; 1310;ETHIOPIC SYLLABLE GWA;Lo;0;L;;;;;N;;;;; 1312;ETHIOPIC SYLLABLE GWI;Lo;0;L;;;;;N;;;;; 1313;ETHIOPIC SYLLABLE GWAA;Lo;0;L;;;;;N;;;;; 1314;ETHIOPIC SYLLABLE GWEE;Lo;0;L;;;;;N;;;;; 1315;ETHIOPIC SYLLABLE GWE;Lo;0;L;;;;;N;;;;; 1318;ETHIOPIC SYLLABLE GGA;Lo;0;L;;;;;N;;;;; 1319;ETHIOPIC SYLLABLE GGU;Lo;0;L;;;;;N;;;;; 131A;ETHIOPIC SYLLABLE GGI;Lo;0;L;;;;;N;;;;; 131B;ETHIOPIC SYLLABLE GGAA;Lo;0;L;;;;;N;;;;; 131C;ETHIOPIC SYLLABLE GGEE;Lo;0;L;;;;;N;;;;; 131D;ETHIOPIC SYLLABLE GGE;Lo;0;L;;;;;N;;;;; 131E;ETHIOPIC SYLLABLE GGO;Lo;0;L;;;;;N;;;;; 131F;ETHIOPIC SYLLABLE GGWAA;Lo;0;L;;;;;N;;;;; 1320;ETHIOPIC SYLLABLE THA;Lo;0;L;;;;;N;;;;; 1321;ETHIOPIC SYLLABLE THU;Lo;0;L;;;;;N;;;;; 1322;ETHIOPIC SYLLABLE THI;Lo;0;L;;;;;N;;;;; 1323;ETHIOPIC SYLLABLE THAA;Lo;0;L;;;;;N;;;;; 1324;ETHIOPIC SYLLABLE THEE;Lo;0;L;;;;;N;;;;; 1325;ETHIOPIC SYLLABLE THE;Lo;0;L;;;;;N;;;;; 1326;ETHIOPIC SYLLABLE THO;Lo;0;L;;;;;N;;;;; 1327;ETHIOPIC SYLLABLE THWA;Lo;0;L;;;;;N;;;;; 1328;ETHIOPIC SYLLABLE CHA;Lo;0;L;;;;;N;;;;; 1329;ETHIOPIC SYLLABLE CHU;Lo;0;L;;;;;N;;;;; 132A;ETHIOPIC SYLLABLE CHI;Lo;0;L;;;;;N;;;;; 132B;ETHIOPIC SYLLABLE CHAA;Lo;0;L;;;;;N;;;;; 132C;ETHIOPIC SYLLABLE CHEE;Lo;0;L;;;;;N;;;;; 132D;ETHIOPIC SYLLABLE CHE;Lo;0;L;;;;;N;;;;; 132E;ETHIOPIC SYLLABLE CHO;Lo;0;L;;;;;N;;;;; 132F;ETHIOPIC SYLLABLE CHWA;Lo;0;L;;;;;N;;;;; 1330;ETHIOPIC SYLLABLE PHA;Lo;0;L;;;;;N;;;;; 1331;ETHIOPIC SYLLABLE PHU;Lo;0;L;;;;;N;;;;; 1332;ETHIOPIC SYLLABLE PHI;Lo;0;L;;;;;N;;;;; 1333;ETHIOPIC SYLLABLE PHAA;Lo;0;L;;;;;N;;;;; 1334;ETHIOPIC SYLLABLE PHEE;Lo;0;L;;;;;N;;;;; 1335;ETHIOPIC SYLLABLE PHE;Lo;0;L;;;;;N;;;;; 1336;ETHIOPIC SYLLABLE PHO;Lo;0;L;;;;;N;;;;; 1337;ETHIOPIC SYLLABLE PHWA;Lo;0;L;;;;;N;;;;; 1338;ETHIOPIC SYLLABLE TSA;Lo;0;L;;;;;N;;;;; 1339;ETHIOPIC SYLLABLE TSU;Lo;0;L;;;;;N;;;;; 133A;ETHIOPIC SYLLABLE TSI;Lo;0;L;;;;;N;;;;; 133B;ETHIOPIC SYLLABLE TSAA;Lo;0;L;;;;;N;;;;; 133C;ETHIOPIC SYLLABLE TSEE;Lo;0;L;;;;;N;;;;; 133D;ETHIOPIC SYLLABLE TSE;Lo;0;L;;;;;N;;;;; 133E;ETHIOPIC SYLLABLE TSO;Lo;0;L;;;;;N;;;;; 133F;ETHIOPIC SYLLABLE TSWA;Lo;0;L;;;;;N;;;;; 1340;ETHIOPIC SYLLABLE TZA;Lo;0;L;;;;;N;;;;; 1341;ETHIOPIC SYLLABLE TZU;Lo;0;L;;;;;N;;;;; 1342;ETHIOPIC SYLLABLE TZI;Lo;0;L;;;;;N;;;;; 1343;ETHIOPIC SYLLABLE TZAA;Lo;0;L;;;;;N;;;;; 1344;ETHIOPIC SYLLABLE TZEE;Lo;0;L;;;;;N;;;;; 1345;ETHIOPIC SYLLABLE TZE;Lo;0;L;;;;;N;;;;; 1346;ETHIOPIC SYLLABLE TZO;Lo;0;L;;;;;N;;;;; 1347;ETHIOPIC SYLLABLE TZOA;Lo;0;L;;;;;N;;;;; 1348;ETHIOPIC SYLLABLE FA;Lo;0;L;;;;;N;;;;; 1349;ETHIOPIC SYLLABLE FU;Lo;0;L;;;;;N;;;;; 134A;ETHIOPIC SYLLABLE FI;Lo;0;L;;;;;N;;;;; 134B;ETHIOPIC SYLLABLE FAA;Lo;0;L;;;;;N;;;;; 134C;ETHIOPIC SYLLABLE FEE;Lo;0;L;;;;;N;;;;; 134D;ETHIOPIC SYLLABLE FE;Lo;0;L;;;;;N;;;;; 134E;ETHIOPIC SYLLABLE FO;Lo;0;L;;;;;N;;;;; 134F;ETHIOPIC SYLLABLE FWA;Lo;0;L;;;;;N;;;;; 1350;ETHIOPIC SYLLABLE PA;Lo;0;L;;;;;N;;;;; 1351;ETHIOPIC SYLLABLE PU;Lo;0;L;;;;;N;;;;; 1352;ETHIOPIC SYLLABLE PI;Lo;0;L;;;;;N;;;;; 1353;ETHIOPIC SYLLABLE PAA;Lo;0;L;;;;;N;;;;; 1354;ETHIOPIC SYLLABLE PEE;Lo;0;L;;;;;N;;;;; 1355;ETHIOPIC SYLLABLE PE;Lo;0;L;;;;;N;;;;; 1356;ETHIOPIC SYLLABLE PO;Lo;0;L;;;;;N;;;;; 1357;ETHIOPIC SYLLABLE PWA;Lo;0;L;;;;;N;;;;; 1358;ETHIOPIC SYLLABLE RYA;Lo;0;L;;;;;N;;;;; 1359;ETHIOPIC SYLLABLE MYA;Lo;0;L;;;;;N;;;;; 135A;ETHIOPIC SYLLABLE FYA;Lo;0;L;;;;;N;;;;; 135D;ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK;Mn;230;NSM;;;;;N;;;;; 135E;ETHIOPIC COMBINING VOWEL LENGTH MARK;Mn;230;NSM;;;;;N;;;;; 135F;ETHIOPIC COMBINING GEMINATION MARK;Mn;230;NSM;;;;;N;;;;; 1360;ETHIOPIC SECTION MARK;Po;0;L;;;;;N;;;;; 1361;ETHIOPIC WORDSPACE;Po;0;L;;;;;N;;;;; 1362;ETHIOPIC FULL STOP;Po;0;L;;;;;N;;;;; 1363;ETHIOPIC COMMA;Po;0;L;;;;;N;;;;; 1364;ETHIOPIC SEMICOLON;Po;0;L;;;;;N;;;;; 1365;ETHIOPIC COLON;Po;0;L;;;;;N;;;;; 1366;ETHIOPIC PREFACE COLON;Po;0;L;;;;;N;;;;; 1367;ETHIOPIC QUESTION MARK;Po;0;L;;;;;N;;;;; 1368;ETHIOPIC PARAGRAPH SEPARATOR;Po;0;L;;;;;N;;;;; 1369;ETHIOPIC DIGIT ONE;No;0;L;;;1;1;N;;;;; 136A;ETHIOPIC DIGIT TWO;No;0;L;;;2;2;N;;;;; 136B;ETHIOPIC DIGIT THREE;No;0;L;;;3;3;N;;;;; 136C;ETHIOPIC DIGIT FOUR;No;0;L;;;4;4;N;;;;; 136D;ETHIOPIC DIGIT FIVE;No;0;L;;;5;5;N;;;;; 136E;ETHIOPIC DIGIT SIX;No;0;L;;;6;6;N;;;;; 136F;ETHIOPIC DIGIT SEVEN;No;0;L;;;7;7;N;;;;; 1370;ETHIOPIC DIGIT EIGHT;No;0;L;;;8;8;N;;;;; 1371;ETHIOPIC DIGIT NINE;No;0;L;;;9;9;N;;;;; 1372;ETHIOPIC NUMBER TEN;No;0;L;;;;10;N;;;;; 1373;ETHIOPIC NUMBER TWENTY;No;0;L;;;;20;N;;;;; 1374;ETHIOPIC NUMBER THIRTY;No;0;L;;;;30;N;;;;; 1375;ETHIOPIC NUMBER FORTY;No;0;L;;;;40;N;;;;; 1376;ETHIOPIC NUMBER FIFTY;No;0;L;;;;50;N;;;;; 1377;ETHIOPIC NUMBER SIXTY;No;0;L;;;;60;N;;;;; 1378;ETHIOPIC NUMBER SEVENTY;No;0;L;;;;70;N;;;;; 1379;ETHIOPIC NUMBER EIGHTY;No;0;L;;;;80;N;;;;; 137A;ETHIOPIC NUMBER NINETY;No;0;L;;;;90;N;;;;; 137B;ETHIOPIC NUMBER HUNDRED;No;0;L;;;;100;N;;;;; 137C;ETHIOPIC NUMBER TEN THOUSAND;No;0;L;;;;10000;N;;;;; 1380;ETHIOPIC SYLLABLE SEBATBEIT MWA;Lo;0;L;;;;;N;;;;; 1381;ETHIOPIC SYLLABLE MWI;Lo;0;L;;;;;N;;;;; 1382;ETHIOPIC SYLLABLE MWEE;Lo;0;L;;;;;N;;;;; 1383;ETHIOPIC SYLLABLE MWE;Lo;0;L;;;;;N;;;;; 1384;ETHIOPIC SYLLABLE SEBATBEIT BWA;Lo;0;L;;;;;N;;;;; 1385;ETHIOPIC SYLLABLE BWI;Lo;0;L;;;;;N;;;;; 1386;ETHIOPIC SYLLABLE BWEE;Lo;0;L;;;;;N;;;;; 1387;ETHIOPIC SYLLABLE BWE;Lo;0;L;;;;;N;;;;; 1388;ETHIOPIC SYLLABLE SEBATBEIT FWA;Lo;0;L;;;;;N;;;;; 1389;ETHIOPIC SYLLABLE FWI;Lo;0;L;;;;;N;;;;; 138A;ETHIOPIC SYLLABLE FWEE;Lo;0;L;;;;;N;;;;; 138B;ETHIOPIC SYLLABLE FWE;Lo;0;L;;;;;N;;;;; 138C;ETHIOPIC SYLLABLE SEBATBEIT PWA;Lo;0;L;;;;;N;;;;; 138D;ETHIOPIC SYLLABLE PWI;Lo;0;L;;;;;N;;;;; 138E;ETHIOPIC SYLLABLE PWEE;Lo;0;L;;;;;N;;;;; 138F;ETHIOPIC SYLLABLE PWE;Lo;0;L;;;;;N;;;;; 1390;ETHIOPIC TONAL MARK YIZET;So;0;ON;;;;;N;;;;; 1391;ETHIOPIC TONAL MARK DERET;So;0;ON;;;;;N;;;;; 1392;ETHIOPIC TONAL MARK RIKRIK;So;0;ON;;;;;N;;;;; 1393;ETHIOPIC TONAL MARK SHORT RIKRIK;So;0;ON;;;;;N;;;;; 1394;ETHIOPIC TONAL MARK DIFAT;So;0;ON;;;;;N;;;;; 1395;ETHIOPIC TONAL MARK KENAT;So;0;ON;;;;;N;;;;; 1396;ETHIOPIC TONAL MARK CHIRET;So;0;ON;;;;;N;;;;; 1397;ETHIOPIC TONAL MARK HIDET;So;0;ON;;;;;N;;;;; 1398;ETHIOPIC TONAL MARK DERET-HIDET;So;0;ON;;;;;N;;;;; 1399;ETHIOPIC TONAL MARK KURT;So;0;ON;;;;;N;;;;; 13A0;CHEROKEE LETTER A;Lu;0;L;;;;;N;;;;AB70; 13A1;CHEROKEE LETTER E;Lu;0;L;;;;;N;;;;AB71; 13A2;CHEROKEE LETTER I;Lu;0;L;;;;;N;;;;AB72; 13A3;CHEROKEE LETTER O;Lu;0;L;;;;;N;;;;AB73; 13A4;CHEROKEE LETTER U;Lu;0;L;;;;;N;;;;AB74; 13A5;CHEROKEE LETTER V;Lu;0;L;;;;;N;;;;AB75; 13A6;CHEROKEE LETTER GA;Lu;0;L;;;;;N;;;;AB76; 13A7;CHEROKEE LETTER KA;Lu;0;L;;;;;N;;;;AB77; 13A8;CHEROKEE LETTER GE;Lu;0;L;;;;;N;;;;AB78; 13A9;CHEROKEE LETTER GI;Lu;0;L;;;;;N;;;;AB79; 13AA;CHEROKEE LETTER GO;Lu;0;L;;;;;N;;;;AB7A; 13AB;CHEROKEE LETTER GU;Lu;0;L;;;;;N;;;;AB7B; 13AC;CHEROKEE LETTER GV;Lu;0;L;;;;;N;;;;AB7C; 13AD;CHEROKEE LETTER HA;Lu;0;L;;;;;N;;;;AB7D; 13AE;CHEROKEE LETTER HE;Lu;0;L;;;;;N;;;;AB7E; 13AF;CHEROKEE LETTER HI;Lu;0;L;;;;;N;;;;AB7F; 13B0;CHEROKEE LETTER HO;Lu;0;L;;;;;N;;;;AB80; 13B1;CHEROKEE LETTER HU;Lu;0;L;;;;;N;;;;AB81; 13B2;CHEROKEE LETTER HV;Lu;0;L;;;;;N;;;;AB82; 13B3;CHEROKEE LETTER LA;Lu;0;L;;;;;N;;;;AB83; 13B4;CHEROKEE LETTER LE;Lu;0;L;;;;;N;;;;AB84; 13B5;CHEROKEE LETTER LI;Lu;0;L;;;;;N;;;;AB85; 13B6;CHEROKEE LETTER LO;Lu;0;L;;;;;N;;;;AB86; 13B7;CHEROKEE LETTER LU;Lu;0;L;;;;;N;;;;AB87; 13B8;CHEROKEE LETTER LV;Lu;0;L;;;;;N;;;;AB88; 13B9;CHEROKEE LETTER MA;Lu;0;L;;;;;N;;;;AB89; 13BA;CHEROKEE LETTER ME;Lu;0;L;;;;;N;;;;AB8A; 13BB;CHEROKEE LETTER MI;Lu;0;L;;;;;N;;;;AB8B; 13BC;CHEROKEE LETTER MO;Lu;0;L;;;;;N;;;;AB8C; 13BD;CHEROKEE LETTER MU;Lu;0;L;;;;;N;;;;AB8D; 13BE;CHEROKEE LETTER NA;Lu;0;L;;;;;N;;;;AB8E; 13BF;CHEROKEE LETTER HNA;Lu;0;L;;;;;N;;;;AB8F; 13C0;CHEROKEE LETTER NAH;Lu;0;L;;;;;N;;;;AB90; 13C1;CHEROKEE LETTER NE;Lu;0;L;;;;;N;;;;AB91; 13C2;CHEROKEE LETTER NI;Lu;0;L;;;;;N;;;;AB92; 13C3;CHEROKEE LETTER NO;Lu;0;L;;;;;N;;;;AB93; 13C4;CHEROKEE LETTER NU;Lu;0;L;;;;;N;;;;AB94; 13C5;CHEROKEE LETTER NV;Lu;0;L;;;;;N;;;;AB95; 13C6;CHEROKEE LETTER QUA;Lu;0;L;;;;;N;;;;AB96; 13C7;CHEROKEE LETTER QUE;Lu;0;L;;;;;N;;;;AB97; 13C8;CHEROKEE LETTER QUI;Lu;0;L;;;;;N;;;;AB98; 13C9;CHEROKEE LETTER QUO;Lu;0;L;;;;;N;;;;AB99; 13CA;CHEROKEE LETTER QUU;Lu;0;L;;;;;N;;;;AB9A; 13CB;CHEROKEE LETTER QUV;Lu;0;L;;;;;N;;;;AB9B; 13CC;CHEROKEE LETTER SA;Lu;0;L;;;;;N;;;;AB9C; 13CD;CHEROKEE LETTER S;Lu;0;L;;;;;N;;;;AB9D; 13CE;CHEROKEE LETTER SE;Lu;0;L;;;;;N;;;;AB9E; 13CF;CHEROKEE LETTER SI;Lu;0;L;;;;;N;;;;AB9F; 13D0;CHEROKEE LETTER SO;Lu;0;L;;;;;N;;;;ABA0; 13D1;CHEROKEE LETTER SU;Lu;0;L;;;;;N;;;;ABA1; 13D2;CHEROKEE LETTER SV;Lu;0;L;;;;;N;;;;ABA2; 13D3;CHEROKEE LETTER DA;Lu;0;L;;;;;N;;;;ABA3; 13D4;CHEROKEE LETTER TA;Lu;0;L;;;;;N;;;;ABA4; 13D5;CHEROKEE LETTER DE;Lu;0;L;;;;;N;;;;ABA5; 13D6;CHEROKEE LETTER TE;Lu;0;L;;;;;N;;;;ABA6; 13D7;CHEROKEE LETTER DI;Lu;0;L;;;;;N;;;;ABA7; 13D8;CHEROKEE LETTER TI;Lu;0;L;;;;;N;;;;ABA8; 13D9;CHEROKEE LETTER DO;Lu;0;L;;;;;N;;;;ABA9; 13DA;CHEROKEE LETTER DU;Lu;0;L;;;;;N;;;;ABAA; 13DB;CHEROKEE LETTER DV;Lu;0;L;;;;;N;;;;ABAB; 13DC;CHEROKEE LETTER DLA;Lu;0;L;;;;;N;;;;ABAC; 13DD;CHEROKEE LETTER TLA;Lu;0;L;;;;;N;;;;ABAD; 13DE;CHEROKEE LETTER TLE;Lu;0;L;;;;;N;;;;ABAE; 13DF;CHEROKEE LETTER TLI;Lu;0;L;;;;;N;;;;ABAF; 13E0;CHEROKEE LETTER TLO;Lu;0;L;;;;;N;;;;ABB0; 13E1;CHEROKEE LETTER TLU;Lu;0;L;;;;;N;;;;ABB1; 13E2;CHEROKEE LETTER TLV;Lu;0;L;;;;;N;;;;ABB2; 13E3;CHEROKEE LETTER TSA;Lu;0;L;;;;;N;;;;ABB3; 13E4;CHEROKEE LETTER TSE;Lu;0;L;;;;;N;;;;ABB4; 13E5;CHEROKEE LETTER TSI;Lu;0;L;;;;;N;;;;ABB5; 13E6;CHEROKEE LETTER TSO;Lu;0;L;;;;;N;;;;ABB6; 13E7;CHEROKEE LETTER TSU;Lu;0;L;;;;;N;;;;ABB7; 13E8;CHEROKEE LETTER TSV;Lu;0;L;;;;;N;;;;ABB8; 13E9;CHEROKEE LETTER WA;Lu;0;L;;;;;N;;;;ABB9; 13EA;CHEROKEE LETTER WE;Lu;0;L;;;;;N;;;;ABBA; 13EB;CHEROKEE LETTER WI;Lu;0;L;;;;;N;;;;ABBB; 13EC;CHEROKEE LETTER WO;Lu;0;L;;;;;N;;;;ABBC; 13ED;CHEROKEE LETTER WU;Lu;0;L;;;;;N;;;;ABBD; 13EE;CHEROKEE LETTER WV;Lu;0;L;;;;;N;;;;ABBE; 13EF;CHEROKEE LETTER YA;Lu;0;L;;;;;N;;;;ABBF; 13F0;CHEROKEE LETTER YE;Lu;0;L;;;;;N;;;;13F8; 13F1;CHEROKEE LETTER YI;Lu;0;L;;;;;N;;;;13F9; 13F2;CHEROKEE LETTER YO;Lu;0;L;;;;;N;;;;13FA; 13F3;CHEROKEE LETTER YU;Lu;0;L;;;;;N;;;;13FB; 13F4;CHEROKEE LETTER YV;Lu;0;L;;;;;N;;;;13FC; 13F5;CHEROKEE LETTER MV;Lu;0;L;;;;;N;;;;13FD; 13F8;CHEROKEE SMALL LETTER YE;Ll;0;L;;;;;N;;;13F0;;13F0 13F9;CHEROKEE SMALL LETTER YI;Ll;0;L;;;;;N;;;13F1;;13F1 13FA;CHEROKEE SMALL LETTER YO;Ll;0;L;;;;;N;;;13F2;;13F2 13FB;CHEROKEE SMALL LETTER YU;Ll;0;L;;;;;N;;;13F3;;13F3 13FC;CHEROKEE SMALL LETTER YV;Ll;0;L;;;;;N;;;13F4;;13F4 13FD;CHEROKEE SMALL LETTER MV;Ll;0;L;;;;;N;;;13F5;;13F5 1400;CANADIAN SYLLABICS HYPHEN;Pd;0;ON;;;;;N;;;;; 1401;CANADIAN SYLLABICS E;Lo;0;L;;;;;N;;;;; 1402;CANADIAN SYLLABICS AAI;Lo;0;L;;;;;N;;;;; 1403;CANADIAN SYLLABICS I;Lo;0;L;;;;;N;;;;; 1404;CANADIAN SYLLABICS II;Lo;0;L;;;;;N;;;;; 1405;CANADIAN SYLLABICS O;Lo;0;L;;;;;N;;;;; 1406;CANADIAN SYLLABICS OO;Lo;0;L;;;;;N;;;;; 1407;CANADIAN SYLLABICS Y-CREE OO;Lo;0;L;;;;;N;;;;; 1408;CANADIAN SYLLABICS CARRIER EE;Lo;0;L;;;;;N;;;;; 1409;CANADIAN SYLLABICS CARRIER I;Lo;0;L;;;;;N;;;;; 140A;CANADIAN SYLLABICS A;Lo;0;L;;;;;N;;;;; 140B;CANADIAN SYLLABICS AA;Lo;0;L;;;;;N;;;;; 140C;CANADIAN SYLLABICS WE;Lo;0;L;;;;;N;;;;; 140D;CANADIAN SYLLABICS WEST-CREE WE;Lo;0;L;;;;;N;;;;; 140E;CANADIAN SYLLABICS WI;Lo;0;L;;;;;N;;;;; 140F;CANADIAN SYLLABICS WEST-CREE WI;Lo;0;L;;;;;N;;;;; 1410;CANADIAN SYLLABICS WII;Lo;0;L;;;;;N;;;;; 1411;CANADIAN SYLLABICS WEST-CREE WII;Lo;0;L;;;;;N;;;;; 1412;CANADIAN SYLLABICS WO;Lo;0;L;;;;;N;;;;; 1413;CANADIAN SYLLABICS WEST-CREE WO;Lo;0;L;;;;;N;;;;; 1414;CANADIAN SYLLABICS WOO;Lo;0;L;;;;;N;;;;; 1415;CANADIAN SYLLABICS WEST-CREE WOO;Lo;0;L;;;;;N;;;;; 1416;CANADIAN SYLLABICS NASKAPI WOO;Lo;0;L;;;;;N;;;;; 1417;CANADIAN SYLLABICS WA;Lo;0;L;;;;;N;;;;; 1418;CANADIAN SYLLABICS WEST-CREE WA;Lo;0;L;;;;;N;;;;; 1419;CANADIAN SYLLABICS WAA;Lo;0;L;;;;;N;;;;; 141A;CANADIAN SYLLABICS WEST-CREE WAA;Lo;0;L;;;;;N;;;;; 141B;CANADIAN SYLLABICS NASKAPI WAA;Lo;0;L;;;;;N;;;;; 141C;CANADIAN SYLLABICS AI;Lo;0;L;;;;;N;;;;; 141D;CANADIAN SYLLABICS Y-CREE W;Lo;0;L;;;;;N;;;;; 141E;CANADIAN SYLLABICS GLOTTAL STOP;Lo;0;L;;;;;N;;;;; 141F;CANADIAN SYLLABICS FINAL ACUTE;Lo;0;L;;;;;N;;;;; 1420;CANADIAN SYLLABICS FINAL GRAVE;Lo;0;L;;;;;N;;;;; 1421;CANADIAN SYLLABICS FINAL BOTTOM HALF RING;Lo;0;L;;;;;N;;;;; 1422;CANADIAN SYLLABICS FINAL TOP HALF RING;Lo;0;L;;;;;N;;;;; 1423;CANADIAN SYLLABICS FINAL RIGHT HALF RING;Lo;0;L;;;;;N;;;;; 1424;CANADIAN SYLLABICS FINAL RING;Lo;0;L;;;;;N;;;;; 1425;CANADIAN SYLLABICS FINAL DOUBLE ACUTE;Lo;0;L;;;;;N;;;;; 1426;CANADIAN SYLLABICS FINAL DOUBLE SHORT VERTICAL STROKES;Lo;0;L;;;;;N;;;;; 1427;CANADIAN SYLLABICS FINAL MIDDLE DOT;Lo;0;L;;;;;N;;;;; 1428;CANADIAN SYLLABICS FINAL SHORT HORIZONTAL STROKE;Lo;0;L;;;;;N;;;;; 1429;CANADIAN SYLLABICS FINAL PLUS;Lo;0;L;;;;;N;;;;; 142A;CANADIAN SYLLABICS FINAL DOWN TACK;Lo;0;L;;;;;N;;;;; 142B;CANADIAN SYLLABICS EN;Lo;0;L;;;;;N;;;;; 142C;CANADIAN SYLLABICS IN;Lo;0;L;;;;;N;;;;; 142D;CANADIAN SYLLABICS ON;Lo;0;L;;;;;N;;;;; 142E;CANADIAN SYLLABICS AN;Lo;0;L;;;;;N;;;;; 142F;CANADIAN SYLLABICS PE;Lo;0;L;;;;;N;;;;; 1430;CANADIAN SYLLABICS PAAI;Lo;0;L;;;;;N;;;;; 1431;CANADIAN SYLLABICS PI;Lo;0;L;;;;;N;;;;; 1432;CANADIAN SYLLABICS PII;Lo;0;L;;;;;N;;;;; 1433;CANADIAN SYLLABICS PO;Lo;0;L;;;;;N;;;;; 1434;CANADIAN SYLLABICS POO;Lo;0;L;;;;;N;;;;; 1435;CANADIAN SYLLABICS Y-CREE POO;Lo;0;L;;;;;N;;;;; 1436;CANADIAN SYLLABICS CARRIER HEE;Lo;0;L;;;;;N;;;;; 1437;CANADIAN SYLLABICS CARRIER HI;Lo;0;L;;;;;N;;;;; 1438;CANADIAN SYLLABICS PA;Lo;0;L;;;;;N;;;;; 1439;CANADIAN SYLLABICS PAA;Lo;0;L;;;;;N;;;;; 143A;CANADIAN SYLLABICS PWE;Lo;0;L;;;;;N;;;;; 143B;CANADIAN SYLLABICS WEST-CREE PWE;Lo;0;L;;;;;N;;;;; 143C;CANADIAN SYLLABICS PWI;Lo;0;L;;;;;N;;;;; 143D;CANADIAN SYLLABICS WEST-CREE PWI;Lo;0;L;;;;;N;;;;; 143E;CANADIAN SYLLABICS PWII;Lo;0;L;;;;;N;;;;; 143F;CANADIAN SYLLABICS WEST-CREE PWII;Lo;0;L;;;;;N;;;;; 1440;CANADIAN SYLLABICS PWO;Lo;0;L;;;;;N;;;;; 1441;CANADIAN SYLLABICS WEST-CREE PWO;Lo;0;L;;;;;N;;;;; 1442;CANADIAN SYLLABICS PWOO;Lo;0;L;;;;;N;;;;; 1443;CANADIAN SYLLABICS WEST-CREE PWOO;Lo;0;L;;;;;N;;;;; 1444;CANADIAN SYLLABICS PWA;Lo;0;L;;;;;N;;;;; 1445;CANADIAN SYLLABICS WEST-CREE PWA;Lo;0;L;;;;;N;;;;; 1446;CANADIAN SYLLABICS PWAA;Lo;0;L;;;;;N;;;;; 1447;CANADIAN SYLLABICS WEST-CREE PWAA;Lo;0;L;;;;;N;;;;; 1448;CANADIAN SYLLABICS Y-CREE PWAA;Lo;0;L;;;;;N;;;;; 1449;CANADIAN SYLLABICS P;Lo;0;L;;;;;N;;;;; 144A;CANADIAN SYLLABICS WEST-CREE P;Lo;0;L;;;;;N;;;;; 144B;CANADIAN SYLLABICS CARRIER H;Lo;0;L;;;;;N;;;;; 144C;CANADIAN SYLLABICS TE;Lo;0;L;;;;;N;;;;; 144D;CANADIAN SYLLABICS TAAI;Lo;0;L;;;;;N;;;;; 144E;CANADIAN SYLLABICS TI;Lo;0;L;;;;;N;;;;; 144F;CANADIAN SYLLABICS TII;Lo;0;L;;;;;N;;;;; 1450;CANADIAN SYLLABICS TO;Lo;0;L;;;;;N;;;;; 1451;CANADIAN SYLLABICS TOO;Lo;0;L;;;;;N;;;;; 1452;CANADIAN SYLLABICS Y-CREE TOO;Lo;0;L;;;;;N;;;;; 1453;CANADIAN SYLLABICS CARRIER DEE;Lo;0;L;;;;;N;;;;; 1454;CANADIAN SYLLABICS CARRIER DI;Lo;0;L;;;;;N;;;;; 1455;CANADIAN SYLLABICS TA;Lo;0;L;;;;;N;;;;; 1456;CANADIAN SYLLABICS TAA;Lo;0;L;;;;;N;;;;; 1457;CANADIAN SYLLABICS TWE;Lo;0;L;;;;;N;;;;; 1458;CANADIAN SYLLABICS WEST-CREE TWE;Lo;0;L;;;;;N;;;;; 1459;CANADIAN SYLLABICS TWI;Lo;0;L;;;;;N;;;;; 145A;CANADIAN SYLLABICS WEST-CREE TWI;Lo;0;L;;;;;N;;;;; 145B;CANADIAN SYLLABICS TWII;Lo;0;L;;;;;N;;;;; 145C;CANADIAN SYLLABICS WEST-CREE TWII;Lo;0;L;;;;;N;;;;; 145D;CANADIAN SYLLABICS TWO;Lo;0;L;;;;;N;;;;; 145E;CANADIAN SYLLABICS WEST-CREE TWO;Lo;0;L;;;;;N;;;;; 145F;CANADIAN SYLLABICS TWOO;Lo;0;L;;;;;N;;;;; 1460;CANADIAN SYLLABICS WEST-CREE TWOO;Lo;0;L;;;;;N;;;;; 1461;CANADIAN SYLLABICS TWA;Lo;0;L;;;;;N;;;;; 1462;CANADIAN SYLLABICS WEST-CREE TWA;Lo;0;L;;;;;N;;;;; 1463;CANADIAN SYLLABICS TWAA;Lo;0;L;;;;;N;;;;; 1464;CANADIAN SYLLABICS WEST-CREE TWAA;Lo;0;L;;;;;N;;;;; 1465;CANADIAN SYLLABICS NASKAPI TWAA;Lo;0;L;;;;;N;;;;; 1466;CANADIAN SYLLABICS T;Lo;0;L;;;;;N;;;;; 1467;CANADIAN SYLLABICS TTE;Lo;0;L;;;;;N;;;;; 1468;CANADIAN SYLLABICS TTI;Lo;0;L;;;;;N;;;;; 1469;CANADIAN SYLLABICS TTO;Lo;0;L;;;;;N;;;;; 146A;CANADIAN SYLLABICS TTA;Lo;0;L;;;;;N;;;;; 146B;CANADIAN SYLLABICS KE;Lo;0;L;;;;;N;;;;; 146C;CANADIAN SYLLABICS KAAI;Lo;0;L;;;;;N;;;;; 146D;CANADIAN SYLLABICS KI;Lo;0;L;;;;;N;;;;; 146E;CANADIAN SYLLABICS KII;Lo;0;L;;;;;N;;;;; 146F;CANADIAN SYLLABICS KO;Lo;0;L;;;;;N;;;;; 1470;CANADIAN SYLLABICS KOO;Lo;0;L;;;;;N;;;;; 1471;CANADIAN SYLLABICS Y-CREE KOO;Lo;0;L;;;;;N;;;;; 1472;CANADIAN SYLLABICS KA;Lo;0;L;;;;;N;;;;; 1473;CANADIAN SYLLABICS KAA;Lo;0;L;;;;;N;;;;; 1474;CANADIAN SYLLABICS KWE;Lo;0;L;;;;;N;;;;; 1475;CANADIAN SYLLABICS WEST-CREE KWE;Lo;0;L;;;;;N;;;;; 1476;CANADIAN SYLLABICS KWI;Lo;0;L;;;;;N;;;;; 1477;CANADIAN SYLLABICS WEST-CREE KWI;Lo;0;L;;;;;N;;;;; 1478;CANADIAN SYLLABICS KWII;Lo;0;L;;;;;N;;;;; 1479;CANADIAN SYLLABICS WEST-CREE KWII;Lo;0;L;;;;;N;;;;; 147A;CANADIAN SYLLABICS KWO;Lo;0;L;;;;;N;;;;; 147B;CANADIAN SYLLABICS WEST-CREE KWO;Lo;0;L;;;;;N;;;;; 147C;CANADIAN SYLLABICS KWOO;Lo;0;L;;;;;N;;;;; 147D;CANADIAN SYLLABICS WEST-CREE KWOO;Lo;0;L;;;;;N;;;;; 147E;CANADIAN SYLLABICS KWA;Lo;0;L;;;;;N;;;;; 147F;CANADIAN SYLLABICS WEST-CREE KWA;Lo;0;L;;;;;N;;;;; 1480;CANADIAN SYLLABICS KWAA;Lo;0;L;;;;;N;;;;; 1481;CANADIAN SYLLABICS WEST-CREE KWAA;Lo;0;L;;;;;N;;;;; 1482;CANADIAN SYLLABICS NASKAPI KWAA;Lo;0;L;;;;;N;;;;; 1483;CANADIAN SYLLABICS K;Lo;0;L;;;;;N;;;;; 1484;CANADIAN SYLLABICS KW;Lo;0;L;;;;;N;;;;; 1485;CANADIAN SYLLABICS SOUTH-SLAVEY KEH;Lo;0;L;;;;;N;;;;; 1486;CANADIAN SYLLABICS SOUTH-SLAVEY KIH;Lo;0;L;;;;;N;;;;; 1487;CANADIAN SYLLABICS SOUTH-SLAVEY KOH;Lo;0;L;;;;;N;;;;; 1488;CANADIAN SYLLABICS SOUTH-SLAVEY KAH;Lo;0;L;;;;;N;;;;; 1489;CANADIAN SYLLABICS CE;Lo;0;L;;;;;N;;;;; 148A;CANADIAN SYLLABICS CAAI;Lo;0;L;;;;;N;;;;; 148B;CANADIAN SYLLABICS CI;Lo;0;L;;;;;N;;;;; 148C;CANADIAN SYLLABICS CII;Lo;0;L;;;;;N;;;;; 148D;CANADIAN SYLLABICS CO;Lo;0;L;;;;;N;;;;; 148E;CANADIAN SYLLABICS COO;Lo;0;L;;;;;N;;;;; 148F;CANADIAN SYLLABICS Y-CREE COO;Lo;0;L;;;;;N;;;;; 1490;CANADIAN SYLLABICS CA;Lo;0;L;;;;;N;;;;; 1491;CANADIAN SYLLABICS CAA;Lo;0;L;;;;;N;;;;; 1492;CANADIAN SYLLABICS CWE;Lo;0;L;;;;;N;;;;; 1493;CANADIAN SYLLABICS WEST-CREE CWE;Lo;0;L;;;;;N;;;;; 1494;CANADIAN SYLLABICS CWI;Lo;0;L;;;;;N;;;;; 1495;CANADIAN SYLLABICS WEST-CREE CWI;Lo;0;L;;;;;N;;;;; 1496;CANADIAN SYLLABICS CWII;Lo;0;L;;;;;N;;;;; 1497;CANADIAN SYLLABICS WEST-CREE CWII;Lo;0;L;;;;;N;;;;; 1498;CANADIAN SYLLABICS CWO;Lo;0;L;;;;;N;;;;; 1499;CANADIAN SYLLABICS WEST-CREE CWO;Lo;0;L;;;;;N;;;;; 149A;CANADIAN SYLLABICS CWOO;Lo;0;L;;;;;N;;;;; 149B;CANADIAN SYLLABICS WEST-CREE CWOO;Lo;0;L;;;;;N;;;;; 149C;CANADIAN SYLLABICS CWA;Lo;0;L;;;;;N;;;;; 149D;CANADIAN SYLLABICS WEST-CREE CWA;Lo;0;L;;;;;N;;;;; 149E;CANADIAN SYLLABICS CWAA;Lo;0;L;;;;;N;;;;; 149F;CANADIAN SYLLABICS WEST-CREE CWAA;Lo;0;L;;;;;N;;;;; 14A0;CANADIAN SYLLABICS NASKAPI CWAA;Lo;0;L;;;;;N;;;;; 14A1;CANADIAN SYLLABICS C;Lo;0;L;;;;;N;;;;; 14A2;CANADIAN SYLLABICS SAYISI TH;Lo;0;L;;;;;N;;;;; 14A3;CANADIAN SYLLABICS ME;Lo;0;L;;;;;N;;;;; 14A4;CANADIAN SYLLABICS MAAI;Lo;0;L;;;;;N;;;;; 14A5;CANADIAN SYLLABICS MI;Lo;0;L;;;;;N;;;;; 14A6;CANADIAN SYLLABICS MII;Lo;0;L;;;;;N;;;;; 14A7;CANADIAN SYLLABICS MO;Lo;0;L;;;;;N;;;;; 14A8;CANADIAN SYLLABICS MOO;Lo;0;L;;;;;N;;;;; 14A9;CANADIAN SYLLABICS Y-CREE MOO;Lo;0;L;;;;;N;;;;; 14AA;CANADIAN SYLLABICS MA;Lo;0;L;;;;;N;;;;; 14AB;CANADIAN SYLLABICS MAA;Lo;0;L;;;;;N;;;;; 14AC;CANADIAN SYLLABICS MWE;Lo;0;L;;;;;N;;;;; 14AD;CANADIAN SYLLABICS WEST-CREE MWE;Lo;0;L;;;;;N;;;;; 14AE;CANADIAN SYLLABICS MWI;Lo;0;L;;;;;N;;;;; 14AF;CANADIAN SYLLABICS WEST-CREE MWI;Lo;0;L;;;;;N;;;;; 14B0;CANADIAN SYLLABICS MWII;Lo;0;L;;;;;N;;;;; 14B1;CANADIAN SYLLABICS WEST-CREE MWII;Lo;0;L;;;;;N;;;;; 14B2;CANADIAN SYLLABICS MWO;Lo;0;L;;;;;N;;;;; 14B3;CANADIAN SYLLABICS WEST-CREE MWO;Lo;0;L;;;;;N;;;;; 14B4;CANADIAN SYLLABICS MWOO;Lo;0;L;;;;;N;;;;; 14B5;CANADIAN SYLLABICS WEST-CREE MWOO;Lo;0;L;;;;;N;;;;; 14B6;CANADIAN SYLLABICS MWA;Lo;0;L;;;;;N;;;;; 14B7;CANADIAN SYLLABICS WEST-CREE MWA;Lo;0;L;;;;;N;;;;; 14B8;CANADIAN SYLLABICS MWAA;Lo;0;L;;;;;N;;;;; 14B9;CANADIAN SYLLABICS WEST-CREE MWAA;Lo;0;L;;;;;N;;;;; 14BA;CANADIAN SYLLABICS NASKAPI MWAA;Lo;0;L;;;;;N;;;;; 14BB;CANADIAN SYLLABICS M;Lo;0;L;;;;;N;;;;; 14BC;CANADIAN SYLLABICS WEST-CREE M;Lo;0;L;;;;;N;;;;; 14BD;CANADIAN SYLLABICS MH;Lo;0;L;;;;;N;;;;; 14BE;CANADIAN SYLLABICS ATHAPASCAN M;Lo;0;L;;;;;N;;;;; 14BF;CANADIAN SYLLABICS SAYISI M;Lo;0;L;;;;;N;;;;; 14C0;CANADIAN SYLLABICS NE;Lo;0;L;;;;;N;;;;; 14C1;CANADIAN SYLLABICS NAAI;Lo;0;L;;;;;N;;;;; 14C2;CANADIAN SYLLABICS NI;Lo;0;L;;;;;N;;;;; 14C3;CANADIAN SYLLABICS NII;Lo;0;L;;;;;N;;;;; 14C4;CANADIAN SYLLABICS NO;Lo;0;L;;;;;N;;;;; 14C5;CANADIAN SYLLABICS NOO;Lo;0;L;;;;;N;;;;; 14C6;CANADIAN SYLLABICS Y-CREE NOO;Lo;0;L;;;;;N;;;;; 14C7;CANADIAN SYLLABICS NA;Lo;0;L;;;;;N;;;;; 14C8;CANADIAN SYLLABICS NAA;Lo;0;L;;;;;N;;;;; 14C9;CANADIAN SYLLABICS NWE;Lo;0;L;;;;;N;;;;; 14CA;CANADIAN SYLLABICS WEST-CREE NWE;Lo;0;L;;;;;N;;;;; 14CB;CANADIAN SYLLABICS NWA;Lo;0;L;;;;;N;;;;; 14CC;CANADIAN SYLLABICS WEST-CREE NWA;Lo;0;L;;;;;N;;;;; 14CD;CANADIAN SYLLABICS NWAA;Lo;0;L;;;;;N;;;;; 14CE;CANADIAN SYLLABICS WEST-CREE NWAA;Lo;0;L;;;;;N;;;;; 14CF;CANADIAN SYLLABICS NASKAPI NWAA;Lo;0;L;;;;;N;;;;; 14D0;CANADIAN SYLLABICS N;Lo;0;L;;;;;N;;;;; 14D1;CANADIAN SYLLABICS CARRIER NG;Lo;0;L;;;;;N;;;;; 14D2;CANADIAN SYLLABICS NH;Lo;0;L;;;;;N;;;;; 14D3;CANADIAN SYLLABICS LE;Lo;0;L;;;;;N;;;;; 14D4;CANADIAN SYLLABICS LAAI;Lo;0;L;;;;;N;;;;; 14D5;CANADIAN SYLLABICS LI;Lo;0;L;;;;;N;;;;; 14D6;CANADIAN SYLLABICS LII;Lo;0;L;;;;;N;;;;; 14D7;CANADIAN SYLLABICS LO;Lo;0;L;;;;;N;;;;; 14D8;CANADIAN SYLLABICS LOO;Lo;0;L;;;;;N;;;;; 14D9;CANADIAN SYLLABICS Y-CREE LOO;Lo;0;L;;;;;N;;;;; 14DA;CANADIAN SYLLABICS LA;Lo;0;L;;;;;N;;;;; 14DB;CANADIAN SYLLABICS LAA;Lo;0;L;;;;;N;;;;; 14DC;CANADIAN SYLLABICS LWE;Lo;0;L;;;;;N;;;;; 14DD;CANADIAN SYLLABICS WEST-CREE LWE;Lo;0;L;;;;;N;;;;; 14DE;CANADIAN SYLLABICS LWI;Lo;0;L;;;;;N;;;;; 14DF;CANADIAN SYLLABICS WEST-CREE LWI;Lo;0;L;;;;;N;;;;; 14E0;CANADIAN SYLLABICS LWII;Lo;0;L;;;;;N;;;;; 14E1;CANADIAN SYLLABICS WEST-CREE LWII;Lo;0;L;;;;;N;;;;; 14E2;CANADIAN SYLLABICS LWO;Lo;0;L;;;;;N;;;;; 14E3;CANADIAN SYLLABICS WEST-CREE LWO;Lo;0;L;;;;;N;;;;; 14E4;CANADIAN SYLLABICS LWOO;Lo;0;L;;;;;N;;;;; 14E5;CANADIAN SYLLABICS WEST-CREE LWOO;Lo;0;L;;;;;N;;;;; 14E6;CANADIAN SYLLABICS LWA;Lo;0;L;;;;;N;;;;; 14E7;CANADIAN SYLLABICS WEST-CREE LWA;Lo;0;L;;;;;N;;;;; 14E8;CANADIAN SYLLABICS LWAA;Lo;0;L;;;;;N;;;;; 14E9;CANADIAN SYLLABICS WEST-CREE LWAA;Lo;0;L;;;;;N;;;;; 14EA;CANADIAN SYLLABICS L;Lo;0;L;;;;;N;;;;; 14EB;CANADIAN SYLLABICS WEST-CREE L;Lo;0;L;;;;;N;;;;; 14EC;CANADIAN SYLLABICS MEDIAL L;Lo;0;L;;;;;N;;;;; 14ED;CANADIAN SYLLABICS SE;Lo;0;L;;;;;N;;;;; 14EE;CANADIAN SYLLABICS SAAI;Lo;0;L;;;;;N;;;;; 14EF;CANADIAN SYLLABICS SI;Lo;0;L;;;;;N;;;;; 14F0;CANADIAN SYLLABICS SII;Lo;0;L;;;;;N;;;;; 14F1;CANADIAN SYLLABICS SO;Lo;0;L;;;;;N;;;;; 14F2;CANADIAN SYLLABICS SOO;Lo;0;L;;;;;N;;;;; 14F3;CANADIAN SYLLABICS Y-CREE SOO;Lo;0;L;;;;;N;;;;; 14F4;CANADIAN SYLLABICS SA;Lo;0;L;;;;;N;;;;; 14F5;CANADIAN SYLLABICS SAA;Lo;0;L;;;;;N;;;;; 14F6;CANADIAN SYLLABICS SWE;Lo;0;L;;;;;N;;;;; 14F7;CANADIAN SYLLABICS WEST-CREE SWE;Lo;0;L;;;;;N;;;;; 14F8;CANADIAN SYLLABICS SWI;Lo;0;L;;;;;N;;;;; 14F9;CANADIAN SYLLABICS WEST-CREE SWI;Lo;0;L;;;;;N;;;;; 14FA;CANADIAN SYLLABICS SWII;Lo;0;L;;;;;N;;;;; 14FB;CANADIAN SYLLABICS WEST-CREE SWII;Lo;0;L;;;;;N;;;;; 14FC;CANADIAN SYLLABICS SWO;Lo;0;L;;;;;N;;;;; 14FD;CANADIAN SYLLABICS WEST-CREE SWO;Lo;0;L;;;;;N;;;;; 14FE;CANADIAN SYLLABICS SWOO;Lo;0;L;;;;;N;;;;; 14FF;CANADIAN SYLLABICS WEST-CREE SWOO;Lo;0;L;;;;;N;;;;; 1500;CANADIAN SYLLABICS SWA;Lo;0;L;;;;;N;;;;; 1501;CANADIAN SYLLABICS WEST-CREE SWA;Lo;0;L;;;;;N;;;;; 1502;CANADIAN SYLLABICS SWAA;Lo;0;L;;;;;N;;;;; 1503;CANADIAN SYLLABICS WEST-CREE SWAA;Lo;0;L;;;;;N;;;;; 1504;CANADIAN SYLLABICS NASKAPI SWAA;Lo;0;L;;;;;N;;;;; 1505;CANADIAN SYLLABICS S;Lo;0;L;;;;;N;;;;; 1506;CANADIAN SYLLABICS ATHAPASCAN S;Lo;0;L;;;;;N;;;;; 1507;CANADIAN SYLLABICS SW;Lo;0;L;;;;;N;;;;; 1508;CANADIAN SYLLABICS BLACKFOOT S;Lo;0;L;;;;;N;;;;; 1509;CANADIAN SYLLABICS MOOSE-CREE SK;Lo;0;L;;;;;N;;;;; 150A;CANADIAN SYLLABICS NASKAPI SKW;Lo;0;L;;;;;N;;;;; 150B;CANADIAN SYLLABICS NASKAPI S-W;Lo;0;L;;;;;N;;;;; 150C;CANADIAN SYLLABICS NASKAPI SPWA;Lo;0;L;;;;;N;;;;; 150D;CANADIAN SYLLABICS NASKAPI STWA;Lo;0;L;;;;;N;;;;; 150E;CANADIAN SYLLABICS NASKAPI SKWA;Lo;0;L;;;;;N;;;;; 150F;CANADIAN SYLLABICS NASKAPI SCWA;Lo;0;L;;;;;N;;;;; 1510;CANADIAN SYLLABICS SHE;Lo;0;L;;;;;N;;;;; 1511;CANADIAN SYLLABICS SHI;Lo;0;L;;;;;N;;;;; 1512;CANADIAN SYLLABICS SHII;Lo;0;L;;;;;N;;;;; 1513;CANADIAN SYLLABICS SHO;Lo;0;L;;;;;N;;;;; 1514;CANADIAN SYLLABICS SHOO;Lo;0;L;;;;;N;;;;; 1515;CANADIAN SYLLABICS SHA;Lo;0;L;;;;;N;;;;; 1516;CANADIAN SYLLABICS SHAA;Lo;0;L;;;;;N;;;;; 1517;CANADIAN SYLLABICS SHWE;Lo;0;L;;;;;N;;;;; 1518;CANADIAN SYLLABICS WEST-CREE SHWE;Lo;0;L;;;;;N;;;;; 1519;CANADIAN SYLLABICS SHWI;Lo;0;L;;;;;N;;;;; 151A;CANADIAN SYLLABICS WEST-CREE SHWI;Lo;0;L;;;;;N;;;;; 151B;CANADIAN SYLLABICS SHWII;Lo;0;L;;;;;N;;;;; 151C;CANADIAN SYLLABICS WEST-CREE SHWII;Lo;0;L;;;;;N;;;;; 151D;CANADIAN SYLLABICS SHWO;Lo;0;L;;;;;N;;;;; 151E;CANADIAN SYLLABICS WEST-CREE SHWO;Lo;0;L;;;;;N;;;;; 151F;CANADIAN SYLLABICS SHWOO;Lo;0;L;;;;;N;;;;; 1520;CANADIAN SYLLABICS WEST-CREE SHWOO;Lo;0;L;;;;;N;;;;; 1521;CANADIAN SYLLABICS SHWA;Lo;0;L;;;;;N;;;;; 1522;CANADIAN SYLLABICS WEST-CREE SHWA;Lo;0;L;;;;;N;;;;; 1523;CANADIAN SYLLABICS SHWAA;Lo;0;L;;;;;N;;;;; 1524;CANADIAN SYLLABICS WEST-CREE SHWAA;Lo;0;L;;;;;N;;;;; 1525;CANADIAN SYLLABICS SH;Lo;0;L;;;;;N;;;;; 1526;CANADIAN SYLLABICS YE;Lo;0;L;;;;;N;;;;; 1527;CANADIAN SYLLABICS YAAI;Lo;0;L;;;;;N;;;;; 1528;CANADIAN SYLLABICS YI;Lo;0;L;;;;;N;;;;; 1529;CANADIAN SYLLABICS YII;Lo;0;L;;;;;N;;;;; 152A;CANADIAN SYLLABICS YO;Lo;0;L;;;;;N;;;;; 152B;CANADIAN SYLLABICS YOO;Lo;0;L;;;;;N;;;;; 152C;CANADIAN SYLLABICS Y-CREE YOO;Lo;0;L;;;;;N;;;;; 152D;CANADIAN SYLLABICS YA;Lo;0;L;;;;;N;;;;; 152E;CANADIAN SYLLABICS YAA;Lo;0;L;;;;;N;;;;; 152F;CANADIAN SYLLABICS YWE;Lo;0;L;;;;;N;;;;; 1530;CANADIAN SYLLABICS WEST-CREE YWE;Lo;0;L;;;;;N;;;;; 1531;CANADIAN SYLLABICS YWI;Lo;0;L;;;;;N;;;;; 1532;CANADIAN SYLLABICS WEST-CREE YWI;Lo;0;L;;;;;N;;;;; 1533;CANADIAN SYLLABICS YWII;Lo;0;L;;;;;N;;;;; 1534;CANADIAN SYLLABICS WEST-CREE YWII;Lo;0;L;;;;;N;;;;; 1535;CANADIAN SYLLABICS YWO;Lo;0;L;;;;;N;;;;; 1536;CANADIAN SYLLABICS WEST-CREE YWO;Lo;0;L;;;;;N;;;;; 1537;CANADIAN SYLLABICS YWOO;Lo;0;L;;;;;N;;;;; 1538;CANADIAN SYLLABICS WEST-CREE YWOO;Lo;0;L;;;;;N;;;;; 1539;CANADIAN SYLLABICS YWA;Lo;0;L;;;;;N;;;;; 153A;CANADIAN SYLLABICS WEST-CREE YWA;Lo;0;L;;;;;N;;;;; 153B;CANADIAN SYLLABICS YWAA;Lo;0;L;;;;;N;;;;; 153C;CANADIAN SYLLABICS WEST-CREE YWAA;Lo;0;L;;;;;N;;;;; 153D;CANADIAN SYLLABICS NASKAPI YWAA;Lo;0;L;;;;;N;;;;; 153E;CANADIAN SYLLABICS Y;Lo;0;L;;;;;N;;;;; 153F;CANADIAN SYLLABICS BIBLE-CREE Y;Lo;0;L;;;;;N;;;;; 1540;CANADIAN SYLLABICS WEST-CREE Y;Lo;0;L;;;;;N;;;;; 1541;CANADIAN SYLLABICS SAYISI YI;Lo;0;L;;;;;N;;;;; 1542;CANADIAN SYLLABICS RE;Lo;0;L;;;;;N;;;;; 1543;CANADIAN SYLLABICS R-CREE RE;Lo;0;L;;;;;N;;;;; 1544;CANADIAN SYLLABICS WEST-CREE LE;Lo;0;L;;;;;N;;;;; 1545;CANADIAN SYLLABICS RAAI;Lo;0;L;;;;;N;;;;; 1546;CANADIAN SYLLABICS RI;Lo;0;L;;;;;N;;;;; 1547;CANADIAN SYLLABICS RII;Lo;0;L;;;;;N;;;;; 1548;CANADIAN SYLLABICS RO;Lo;0;L;;;;;N;;;;; 1549;CANADIAN SYLLABICS ROO;Lo;0;L;;;;;N;;;;; 154A;CANADIAN SYLLABICS WEST-CREE LO;Lo;0;L;;;;;N;;;;; 154B;CANADIAN SYLLABICS RA;Lo;0;L;;;;;N;;;;; 154C;CANADIAN SYLLABICS RAA;Lo;0;L;;;;;N;;;;; 154D;CANADIAN SYLLABICS WEST-CREE LA;Lo;0;L;;;;;N;;;;; 154E;CANADIAN SYLLABICS RWAA;Lo;0;L;;;;;N;;;;; 154F;CANADIAN SYLLABICS WEST-CREE RWAA;Lo;0;L;;;;;N;;;;; 1550;CANADIAN SYLLABICS R;Lo;0;L;;;;;N;;;;; 1551;CANADIAN SYLLABICS WEST-CREE R;Lo;0;L;;;;;N;;;;; 1552;CANADIAN SYLLABICS MEDIAL R;Lo;0;L;;;;;N;;;;; 1553;CANADIAN SYLLABICS FE;Lo;0;L;;;;;N;;;;; 1554;CANADIAN SYLLABICS FAAI;Lo;0;L;;;;;N;;;;; 1555;CANADIAN SYLLABICS FI;Lo;0;L;;;;;N;;;;; 1556;CANADIAN SYLLABICS FII;Lo;0;L;;;;;N;;;;; 1557;CANADIAN SYLLABICS FO;Lo;0;L;;;;;N;;;;; 1558;CANADIAN SYLLABICS FOO;Lo;0;L;;;;;N;;;;; 1559;CANADIAN SYLLABICS FA;Lo;0;L;;;;;N;;;;; 155A;CANADIAN SYLLABICS FAA;Lo;0;L;;;;;N;;;;; 155B;CANADIAN SYLLABICS FWAA;Lo;0;L;;;;;N;;;;; 155C;CANADIAN SYLLABICS WEST-CREE FWAA;Lo;0;L;;;;;N;;;;; 155D;CANADIAN SYLLABICS F;Lo;0;L;;;;;N;;;;; 155E;CANADIAN SYLLABICS THE;Lo;0;L;;;;;N;;;;; 155F;CANADIAN SYLLABICS N-CREE THE;Lo;0;L;;;;;N;;;;; 1560;CANADIAN SYLLABICS THI;Lo;0;L;;;;;N;;;;; 1561;CANADIAN SYLLABICS N-CREE THI;Lo;0;L;;;;;N;;;;; 1562;CANADIAN SYLLABICS THII;Lo;0;L;;;;;N;;;;; 1563;CANADIAN SYLLABICS N-CREE THII;Lo;0;L;;;;;N;;;;; 1564;CANADIAN SYLLABICS THO;Lo;0;L;;;;;N;;;;; 1565;CANADIAN SYLLABICS THOO;Lo;0;L;;;;;N;;;;; 1566;CANADIAN SYLLABICS THA;Lo;0;L;;;;;N;;;;; 1567;CANADIAN SYLLABICS THAA;Lo;0;L;;;;;N;;;;; 1568;CANADIAN SYLLABICS THWAA;Lo;0;L;;;;;N;;;;; 1569;CANADIAN SYLLABICS WEST-CREE THWAA;Lo;0;L;;;;;N;;;;; 156A;CANADIAN SYLLABICS TH;Lo;0;L;;;;;N;;;;; 156B;CANADIAN SYLLABICS TTHE;Lo;0;L;;;;;N;;;;; 156C;CANADIAN SYLLABICS TTHI;Lo;0;L;;;;;N;;;;; 156D;CANADIAN SYLLABICS TTHO;Lo;0;L;;;;;N;;;;; 156E;CANADIAN SYLLABICS TTHA;Lo;0;L;;;;;N;;;;; 156F;CANADIAN SYLLABICS TTH;Lo;0;L;;;;;N;;;;; 1570;CANADIAN SYLLABICS TYE;Lo;0;L;;;;;N;;;;; 1571;CANADIAN SYLLABICS TYI;Lo;0;L;;;;;N;;;;; 1572;CANADIAN SYLLABICS TYO;Lo;0;L;;;;;N;;;;; 1573;CANADIAN SYLLABICS TYA;Lo;0;L;;;;;N;;;;; 1574;CANADIAN SYLLABICS NUNAVIK HE;Lo;0;L;;;;;N;;;;; 1575;CANADIAN SYLLABICS NUNAVIK HI;Lo;0;L;;;;;N;;;;; 1576;CANADIAN SYLLABICS NUNAVIK HII;Lo;0;L;;;;;N;;;;; 1577;CANADIAN SYLLABICS NUNAVIK HO;Lo;0;L;;;;;N;;;;; 1578;CANADIAN SYLLABICS NUNAVIK HOO;Lo;0;L;;;;;N;;;;; 1579;CANADIAN SYLLABICS NUNAVIK HA;Lo;0;L;;;;;N;;;;; 157A;CANADIAN SYLLABICS NUNAVIK HAA;Lo;0;L;;;;;N;;;;; 157B;CANADIAN SYLLABICS NUNAVIK H;Lo;0;L;;;;;N;;;;; 157C;CANADIAN SYLLABICS NUNAVUT H;Lo;0;L;;;;;N;;;;; 157D;CANADIAN SYLLABICS HK;Lo;0;L;;;;;N;;;;; 157E;CANADIAN SYLLABICS QAAI;Lo;0;L;;;;;N;;;;; 157F;CANADIAN SYLLABICS QI;Lo;0;L;;;;;N;;;;; 1580;CANADIAN SYLLABICS QII;Lo;0;L;;;;;N;;;;; 1581;CANADIAN SYLLABICS QO;Lo;0;L;;;;;N;;;;; 1582;CANADIAN SYLLABICS QOO;Lo;0;L;;;;;N;;;;; 1583;CANADIAN SYLLABICS QA;Lo;0;L;;;;;N;;;;; 1584;CANADIAN SYLLABICS QAA;Lo;0;L;;;;;N;;;;; 1585;CANADIAN SYLLABICS Q;Lo;0;L;;;;;N;;;;; 1586;CANADIAN SYLLABICS TLHE;Lo;0;L;;;;;N;;;;; 1587;CANADIAN SYLLABICS TLHI;Lo;0;L;;;;;N;;;;; 1588;CANADIAN SYLLABICS TLHO;Lo;0;L;;;;;N;;;;; 1589;CANADIAN SYLLABICS TLHA;Lo;0;L;;;;;N;;;;; 158A;CANADIAN SYLLABICS WEST-CREE RE;Lo;0;L;;;;;N;;;;; 158B;CANADIAN SYLLABICS WEST-CREE RI;Lo;0;L;;;;;N;;;;; 158C;CANADIAN SYLLABICS WEST-CREE RO;Lo;0;L;;;;;N;;;;; 158D;CANADIAN SYLLABICS WEST-CREE RA;Lo;0;L;;;;;N;;;;; 158E;CANADIAN SYLLABICS NGAAI;Lo;0;L;;;;;N;;;;; 158F;CANADIAN SYLLABICS NGI;Lo;0;L;;;;;N;;;;; 1590;CANADIAN SYLLABICS NGII;Lo;0;L;;;;;N;;;;; 1591;CANADIAN SYLLABICS NGO;Lo;0;L;;;;;N;;;;; 1592;CANADIAN SYLLABICS NGOO;Lo;0;L;;;;;N;;;;; 1593;CANADIAN SYLLABICS NGA;Lo;0;L;;;;;N;;;;; 1594;CANADIAN SYLLABICS NGAA;Lo;0;L;;;;;N;;;;; 1595;CANADIAN SYLLABICS NG;Lo;0;L;;;;;N;;;;; 1596;CANADIAN SYLLABICS NNG;Lo;0;L;;;;;N;;;;; 1597;CANADIAN SYLLABICS SAYISI SHE;Lo;0;L;;;;;N;;;;; 1598;CANADIAN SYLLABICS SAYISI SHI;Lo;0;L;;;;;N;;;;; 1599;CANADIAN SYLLABICS SAYISI SHO;Lo;0;L;;;;;N;;;;; 159A;CANADIAN SYLLABICS SAYISI SHA;Lo;0;L;;;;;N;;;;; 159B;CANADIAN SYLLABICS WOODS-CREE THE;Lo;0;L;;;;;N;;;;; 159C;CANADIAN SYLLABICS WOODS-CREE THI;Lo;0;L;;;;;N;;;;; 159D;CANADIAN SYLLABICS WOODS-CREE THO;Lo;0;L;;;;;N;;;;; 159E;CANADIAN SYLLABICS WOODS-CREE THA;Lo;0;L;;;;;N;;;;; 159F;CANADIAN SYLLABICS WOODS-CREE TH;Lo;0;L;;;;;N;;;;; 15A0;CANADIAN SYLLABICS LHI;Lo;0;L;;;;;N;;;;; 15A1;CANADIAN SYLLABICS LHII;Lo;0;L;;;;;N;;;;; 15A2;CANADIAN SYLLABICS LHO;Lo;0;L;;;;;N;;;;; 15A3;CANADIAN SYLLABICS LHOO;Lo;0;L;;;;;N;;;;; 15A4;CANADIAN SYLLABICS LHA;Lo;0;L;;;;;N;;;;; 15A5;CANADIAN SYLLABICS LHAA;Lo;0;L;;;;;N;;;;; 15A6;CANADIAN SYLLABICS LH;Lo;0;L;;;;;N;;;;; 15A7;CANADIAN SYLLABICS TH-CREE THE;Lo;0;L;;;;;N;;;;; 15A8;CANADIAN SYLLABICS TH-CREE THI;Lo;0;L;;;;;N;;;;; 15A9;CANADIAN SYLLABICS TH-CREE THII;Lo;0;L;;;;;N;;;;; 15AA;CANADIAN SYLLABICS TH-CREE THO;Lo;0;L;;;;;N;;;;; 15AB;CANADIAN SYLLABICS TH-CREE THOO;Lo;0;L;;;;;N;;;;; 15AC;CANADIAN SYLLABICS TH-CREE THA;Lo;0;L;;;;;N;;;;; 15AD;CANADIAN SYLLABICS TH-CREE THAA;Lo;0;L;;;;;N;;;;; 15AE;CANADIAN SYLLABICS TH-CREE TH;Lo;0;L;;;;;N;;;;; 15AF;CANADIAN SYLLABICS AIVILIK B;Lo;0;L;;;;;N;;;;; 15B0;CANADIAN SYLLABICS BLACKFOOT E;Lo;0;L;;;;;N;;;;; 15B1;CANADIAN SYLLABICS BLACKFOOT I;Lo;0;L;;;;;N;;;;; 15B2;CANADIAN SYLLABICS BLACKFOOT O;Lo;0;L;;;;;N;;;;; 15B3;CANADIAN SYLLABICS BLACKFOOT A;Lo;0;L;;;;;N;;;;; 15B4;CANADIAN SYLLABICS BLACKFOOT WE;Lo;0;L;;;;;N;;;;; 15B5;CANADIAN SYLLABICS BLACKFOOT WI;Lo;0;L;;;;;N;;;;; 15B6;CANADIAN SYLLABICS BLACKFOOT WO;Lo;0;L;;;;;N;;;;; 15B7;CANADIAN SYLLABICS BLACKFOOT WA;Lo;0;L;;;;;N;;;;; 15B8;CANADIAN SYLLABICS BLACKFOOT NE;Lo;0;L;;;;;N;;;;; 15B9;CANADIAN SYLLABICS BLACKFOOT NI;Lo;0;L;;;;;N;;;;; 15BA;CANADIAN SYLLABICS BLACKFOOT NO;Lo;0;L;;;;;N;;;;; 15BB;CANADIAN SYLLABICS BLACKFOOT NA;Lo;0;L;;;;;N;;;;; 15BC;CANADIAN SYLLABICS BLACKFOOT KE;Lo;0;L;;;;;N;;;;; 15BD;CANADIAN SYLLABICS BLACKFOOT KI;Lo;0;L;;;;;N;;;;; 15BE;CANADIAN SYLLABICS BLACKFOOT KO;Lo;0;L;;;;;N;;;;; 15BF;CANADIAN SYLLABICS BLACKFOOT KA;Lo;0;L;;;;;N;;;;; 15C0;CANADIAN SYLLABICS SAYISI HE;Lo;0;L;;;;;N;;;;; 15C1;CANADIAN SYLLABICS SAYISI HI;Lo;0;L;;;;;N;;;;; 15C2;CANADIAN SYLLABICS SAYISI HO;Lo;0;L;;;;;N;;;;; 15C3;CANADIAN SYLLABICS SAYISI HA;Lo;0;L;;;;;N;;;;; 15C4;CANADIAN SYLLABICS CARRIER GHU;Lo;0;L;;;;;N;;;;; 15C5;CANADIAN SYLLABICS CARRIER GHO;Lo;0;L;;;;;N;;;;; 15C6;CANADIAN SYLLABICS CARRIER GHE;Lo;0;L;;;;;N;;;;; 15C7;CANADIAN SYLLABICS CARRIER GHEE;Lo;0;L;;;;;N;;;;; 15C8;CANADIAN SYLLABICS CARRIER GHI;Lo;0;L;;;;;N;;;;; 15C9;CANADIAN SYLLABICS CARRIER GHA;Lo;0;L;;;;;N;;;;; 15CA;CANADIAN SYLLABICS CARRIER RU;Lo;0;L;;;;;N;;;;; 15CB;CANADIAN SYLLABICS CARRIER RO;Lo;0;L;;;;;N;;;;; 15CC;CANADIAN SYLLABICS CARRIER RE;Lo;0;L;;;;;N;;;;; 15CD;CANADIAN SYLLABICS CARRIER REE;Lo;0;L;;;;;N;;;;; 15CE;CANADIAN SYLLABICS CARRIER RI;Lo;0;L;;;;;N;;;;; 15CF;CANADIAN SYLLABICS CARRIER RA;Lo;0;L;;;;;N;;;;; 15D0;CANADIAN SYLLABICS CARRIER WU;Lo;0;L;;;;;N;;;;; 15D1;CANADIAN SYLLABICS CARRIER WO;Lo;0;L;;;;;N;;;;; 15D2;CANADIAN SYLLABICS CARRIER WE;Lo;0;L;;;;;N;;;;; 15D3;CANADIAN SYLLABICS CARRIER WEE;Lo;0;L;;;;;N;;;;; 15D4;CANADIAN SYLLABICS CARRIER WI;Lo;0;L;;;;;N;;;;; 15D5;CANADIAN SYLLABICS CARRIER WA;Lo;0;L;;;;;N;;;;; 15D6;CANADIAN SYLLABICS CARRIER HWU;Lo;0;L;;;;;N;;;;; 15D7;CANADIAN SYLLABICS CARRIER HWO;Lo;0;L;;;;;N;;;;; 15D8;CANADIAN SYLLABICS CARRIER HWE;Lo;0;L;;;;;N;;;;; 15D9;CANADIAN SYLLABICS CARRIER HWEE;Lo;0;L;;;;;N;;;;; 15DA;CANADIAN SYLLABICS CARRIER HWI;Lo;0;L;;;;;N;;;;; 15DB;CANADIAN SYLLABICS CARRIER HWA;Lo;0;L;;;;;N;;;;; 15DC;CANADIAN SYLLABICS CARRIER THU;Lo;0;L;;;;;N;;;;; 15DD;CANADIAN SYLLABICS CARRIER THO;Lo;0;L;;;;;N;;;;; 15DE;CANADIAN SYLLABICS CARRIER THE;Lo;0;L;;;;;N;;;;; 15DF;CANADIAN SYLLABICS CARRIER THEE;Lo;0;L;;;;;N;;;;; 15E0;CANADIAN SYLLABICS CARRIER THI;Lo;0;L;;;;;N;;;;; 15E1;CANADIAN SYLLABICS CARRIER THA;Lo;0;L;;;;;N;;;;; 15E2;CANADIAN SYLLABICS CARRIER TTU;Lo;0;L;;;;;N;;;;; 15E3;CANADIAN SYLLABICS CARRIER TTO;Lo;0;L;;;;;N;;;;; 15E4;CANADIAN SYLLABICS CARRIER TTE;Lo;0;L;;;;;N;;;;; 15E5;CANADIAN SYLLABICS CARRIER TTEE;Lo;0;L;;;;;N;;;;; 15E6;CANADIAN SYLLABICS CARRIER TTI;Lo;0;L;;;;;N;;;;; 15E7;CANADIAN SYLLABICS CARRIER TTA;Lo;0;L;;;;;N;;;;; 15E8;CANADIAN SYLLABICS CARRIER PU;Lo;0;L;;;;;N;;;;; 15E9;CANADIAN SYLLABICS CARRIER PO;Lo;0;L;;;;;N;;;;; 15EA;CANADIAN SYLLABICS CARRIER PE;Lo;0;L;;;;;N;;;;; 15EB;CANADIAN SYLLABICS CARRIER PEE;Lo;0;L;;;;;N;;;;; 15EC;CANADIAN SYLLABICS CARRIER PI;Lo;0;L;;;;;N;;;;; 15ED;CANADIAN SYLLABICS CARRIER PA;Lo;0;L;;;;;N;;;;; 15EE;CANADIAN SYLLABICS CARRIER P;Lo;0;L;;;;;N;;;;; 15EF;CANADIAN SYLLABICS CARRIER GU;Lo;0;L;;;;;N;;;;; 15F0;CANADIAN SYLLABICS CARRIER GO;Lo;0;L;;;;;N;;;;; 15F1;CANADIAN SYLLABICS CARRIER GE;Lo;0;L;;;;;N;;;;; 15F2;CANADIAN SYLLABICS CARRIER GEE;Lo;0;L;;;;;N;;;;; 15F3;CANADIAN SYLLABICS CARRIER GI;Lo;0;L;;;;;N;;;;; 15F4;CANADIAN SYLLABICS CARRIER GA;Lo;0;L;;;;;N;;;;; 15F5;CANADIAN SYLLABICS CARRIER KHU;Lo;0;L;;;;;N;;;;; 15F6;CANADIAN SYLLABICS CARRIER KHO;Lo;0;L;;;;;N;;;;; 15F7;CANADIAN SYLLABICS CARRIER KHE;Lo;0;L;;;;;N;;;;; 15F8;CANADIAN SYLLABICS CARRIER KHEE;Lo;0;L;;;;;N;;;;; 15F9;CANADIAN SYLLABICS CARRIER KHI;Lo;0;L;;;;;N;;;;; 15FA;CANADIAN SYLLABICS CARRIER KHA;Lo;0;L;;;;;N;;;;; 15FB;CANADIAN SYLLABICS CARRIER KKU;Lo;0;L;;;;;N;;;;; 15FC;CANADIAN SYLLABICS CARRIER KKO;Lo;0;L;;;;;N;;;;; 15FD;CANADIAN SYLLABICS CARRIER KKE;Lo;0;L;;;;;N;;;;; 15FE;CANADIAN SYLLABICS CARRIER KKEE;Lo;0;L;;;;;N;;;;; 15FF;CANADIAN SYLLABICS CARRIER KKI;Lo;0;L;;;;;N;;;;; 1600;CANADIAN SYLLABICS CARRIER KKA;Lo;0;L;;;;;N;;;;; 1601;CANADIAN SYLLABICS CARRIER KK;Lo;0;L;;;;;N;;;;; 1602;CANADIAN SYLLABICS CARRIER NU;Lo;0;L;;;;;N;;;;; 1603;CANADIAN SYLLABICS CARRIER NO;Lo;0;L;;;;;N;;;;; 1604;CANADIAN SYLLABICS CARRIER NE;Lo;0;L;;;;;N;;;;; 1605;CANADIAN SYLLABICS CARRIER NEE;Lo;0;L;;;;;N;;;;; 1606;CANADIAN SYLLABICS CARRIER NI;Lo;0;L;;;;;N;;;;; 1607;CANADIAN SYLLABICS CARRIER NA;Lo;0;L;;;;;N;;;;; 1608;CANADIAN SYLLABICS CARRIER MU;Lo;0;L;;;;;N;;;;; 1609;CANADIAN SYLLABICS CARRIER MO;Lo;0;L;;;;;N;;;;; 160A;CANADIAN SYLLABICS CARRIER ME;Lo;0;L;;;;;N;;;;; 160B;CANADIAN SYLLABICS CARRIER MEE;Lo;0;L;;;;;N;;;;; 160C;CANADIAN SYLLABICS CARRIER MI;Lo;0;L;;;;;N;;;;; 160D;CANADIAN SYLLABICS CARRIER MA;Lo;0;L;;;;;N;;;;; 160E;CANADIAN SYLLABICS CARRIER YU;Lo;0;L;;;;;N;;;;; 160F;CANADIAN SYLLABICS CARRIER YO;Lo;0;L;;;;;N;;;;; 1610;CANADIAN SYLLABICS CARRIER YE;Lo;0;L;;;;;N;;;;; 1611;CANADIAN SYLLABICS CARRIER YEE;Lo;0;L;;;;;N;;;;; 1612;CANADIAN SYLLABICS CARRIER YI;Lo;0;L;;;;;N;;;;; 1613;CANADIAN SYLLABICS CARRIER YA;Lo;0;L;;;;;N;;;;; 1614;CANADIAN SYLLABICS CARRIER JU;Lo;0;L;;;;;N;;;;; 1615;CANADIAN SYLLABICS SAYISI JU;Lo;0;L;;;;;N;;;;; 1616;CANADIAN SYLLABICS CARRIER JO;Lo;0;L;;;;;N;;;;; 1617;CANADIAN SYLLABICS CARRIER JE;Lo;0;L;;;;;N;;;;; 1618;CANADIAN SYLLABICS CARRIER JEE;Lo;0;L;;;;;N;;;;; 1619;CANADIAN SYLLABICS CARRIER JI;Lo;0;L;;;;;N;;;;; 161A;CANADIAN SYLLABICS SAYISI JI;Lo;0;L;;;;;N;;;;; 161B;CANADIAN SYLLABICS CARRIER JA;Lo;0;L;;;;;N;;;;; 161C;CANADIAN SYLLABICS CARRIER JJU;Lo;0;L;;;;;N;;;;; 161D;CANADIAN SYLLABICS CARRIER JJO;Lo;0;L;;;;;N;;;;; 161E;CANADIAN SYLLABICS CARRIER JJE;Lo;0;L;;;;;N;;;;; 161F;CANADIAN SYLLABICS CARRIER JJEE;Lo;0;L;;;;;N;;;;; 1620;CANADIAN SYLLABICS CARRIER JJI;Lo;0;L;;;;;N;;;;; 1621;CANADIAN SYLLABICS CARRIER JJA;Lo;0;L;;;;;N;;;;; 1622;CANADIAN SYLLABICS CARRIER LU;Lo;0;L;;;;;N;;;;; 1623;CANADIAN SYLLABICS CARRIER LO;Lo;0;L;;;;;N;;;;; 1624;CANADIAN SYLLABICS CARRIER LE;Lo;0;L;;;;;N;;;;; 1625;CANADIAN SYLLABICS CARRIER LEE;Lo;0;L;;;;;N;;;;; 1626;CANADIAN SYLLABICS CARRIER LI;Lo;0;L;;;;;N;;;;; 1627;CANADIAN SYLLABICS CARRIER LA;Lo;0;L;;;;;N;;;;; 1628;CANADIAN SYLLABICS CARRIER DLU;Lo;0;L;;;;;N;;;;; 1629;CANADIAN SYLLABICS CARRIER DLO;Lo;0;L;;;;;N;;;;; 162A;CANADIAN SYLLABICS CARRIER DLE;Lo;0;L;;;;;N;;;;; 162B;CANADIAN SYLLABICS CARRIER DLEE;Lo;0;L;;;;;N;;;;; 162C;CANADIAN SYLLABICS CARRIER DLI;Lo;0;L;;;;;N;;;;; 162D;CANADIAN SYLLABICS CARRIER DLA;Lo;0;L;;;;;N;;;;; 162E;CANADIAN SYLLABICS CARRIER LHU;Lo;0;L;;;;;N;;;;; 162F;CANADIAN SYLLABICS CARRIER LHO;Lo;0;L;;;;;N;;;;; 1630;CANADIAN SYLLABICS CARRIER LHE;Lo;0;L;;;;;N;;;;; 1631;CANADIAN SYLLABICS CARRIER LHEE;Lo;0;L;;;;;N;;;;; 1632;CANADIAN SYLLABICS CARRIER LHI;Lo;0;L;;;;;N;;;;; 1633;CANADIAN SYLLABICS CARRIER LHA;Lo;0;L;;;;;N;;;;; 1634;CANADIAN SYLLABICS CARRIER TLHU;Lo;0;L;;;;;N;;;;; 1635;CANADIAN SYLLABICS CARRIER TLHO;Lo;0;L;;;;;N;;;;; 1636;CANADIAN SYLLABICS CARRIER TLHE;Lo;0;L;;;;;N;;;;; 1637;CANADIAN SYLLABICS CARRIER TLHEE;Lo;0;L;;;;;N;;;;; 1638;CANADIAN SYLLABICS CARRIER TLHI;Lo;0;L;;;;;N;;;;; 1639;CANADIAN SYLLABICS CARRIER TLHA;Lo;0;L;;;;;N;;;;; 163A;CANADIAN SYLLABICS CARRIER TLU;Lo;0;L;;;;;N;;;;; 163B;CANADIAN SYLLABICS CARRIER TLO;Lo;0;L;;;;;N;;;;; 163C;CANADIAN SYLLABICS CARRIER TLE;Lo;0;L;;;;;N;;;;; 163D;CANADIAN SYLLABICS CARRIER TLEE;Lo;0;L;;;;;N;;;;; 163E;CANADIAN SYLLABICS CARRIER TLI;Lo;0;L;;;;;N;;;;; 163F;CANADIAN SYLLABICS CARRIER TLA;Lo;0;L;;;;;N;;;;; 1640;CANADIAN SYLLABICS CARRIER ZU;Lo;0;L;;;;;N;;;;; 1641;CANADIAN SYLLABICS CARRIER ZO;Lo;0;L;;;;;N;;;;; 1642;CANADIAN SYLLABICS CARRIER ZE;Lo;0;L;;;;;N;;;;; 1643;CANADIAN SYLLABICS CARRIER ZEE;Lo;0;L;;;;;N;;;;; 1644;CANADIAN SYLLABICS CARRIER ZI;Lo;0;L;;;;;N;;;;; 1645;CANADIAN SYLLABICS CARRIER ZA;Lo;0;L;;;;;N;;;;; 1646;CANADIAN SYLLABICS CARRIER Z;Lo;0;L;;;;;N;;;;; 1647;CANADIAN SYLLABICS CARRIER INITIAL Z;Lo;0;L;;;;;N;;;;; 1648;CANADIAN SYLLABICS CARRIER DZU;Lo;0;L;;;;;N;;;;; 1649;CANADIAN SYLLABICS CARRIER DZO;Lo;0;L;;;;;N;;;;; 164A;CANADIAN SYLLABICS CARRIER DZE;Lo;0;L;;;;;N;;;;; 164B;CANADIAN SYLLABICS CARRIER DZEE;Lo;0;L;;;;;N;;;;; 164C;CANADIAN SYLLABICS CARRIER DZI;Lo;0;L;;;;;N;;;;; 164D;CANADIAN SYLLABICS CARRIER DZA;Lo;0;L;;;;;N;;;;; 164E;CANADIAN SYLLABICS CARRIER SU;Lo;0;L;;;;;N;;;;; 164F;CANADIAN SYLLABICS CARRIER SO;Lo;0;L;;;;;N;;;;; 1650;CANADIAN SYLLABICS CARRIER SE;Lo;0;L;;;;;N;;;;; 1651;CANADIAN SYLLABICS CARRIER SEE;Lo;0;L;;;;;N;;;;; 1652;CANADIAN SYLLABICS CARRIER SI;Lo;0;L;;;;;N;;;;; 1653;CANADIAN SYLLABICS CARRIER SA;Lo;0;L;;;;;N;;;;; 1654;CANADIAN SYLLABICS CARRIER SHU;Lo;0;L;;;;;N;;;;; 1655;CANADIAN SYLLABICS CARRIER SHO;Lo;0;L;;;;;N;;;;; 1656;CANADIAN SYLLABICS CARRIER SHE;Lo;0;L;;;;;N;;;;; 1657;CANADIAN SYLLABICS CARRIER SHEE;Lo;0;L;;;;;N;;;;; 1658;CANADIAN SYLLABICS CARRIER SHI;Lo;0;L;;;;;N;;;;; 1659;CANADIAN SYLLABICS CARRIER SHA;Lo;0;L;;;;;N;;;;; 165A;CANADIAN SYLLABICS CARRIER SH;Lo;0;L;;;;;N;;;;; 165B;CANADIAN SYLLABICS CARRIER TSU;Lo;0;L;;;;;N;;;;; 165C;CANADIAN SYLLABICS CARRIER TSO;Lo;0;L;;;;;N;;;;; 165D;CANADIAN SYLLABICS CARRIER TSE;Lo;0;L;;;;;N;;;;; 165E;CANADIAN SYLLABICS CARRIER TSEE;Lo;0;L;;;;;N;;;;; 165F;CANADIAN SYLLABICS CARRIER TSI;Lo;0;L;;;;;N;;;;; 1660;CANADIAN SYLLABICS CARRIER TSA;Lo;0;L;;;;;N;;;;; 1661;CANADIAN SYLLABICS CARRIER CHU;Lo;0;L;;;;;N;;;;; 1662;CANADIAN SYLLABICS CARRIER CHO;Lo;0;L;;;;;N;;;;; 1663;CANADIAN SYLLABICS CARRIER CHE;Lo;0;L;;;;;N;;;;; 1664;CANADIAN SYLLABICS CARRIER CHEE;Lo;0;L;;;;;N;;;;; 1665;CANADIAN SYLLABICS CARRIER CHI;Lo;0;L;;;;;N;;;;; 1666;CANADIAN SYLLABICS CARRIER CHA;Lo;0;L;;;;;N;;;;; 1667;CANADIAN SYLLABICS CARRIER TTSU;Lo;0;L;;;;;N;;;;; 1668;CANADIAN SYLLABICS CARRIER TTSO;Lo;0;L;;;;;N;;;;; 1669;CANADIAN SYLLABICS CARRIER TTSE;Lo;0;L;;;;;N;;;;; 166A;CANADIAN SYLLABICS CARRIER TTSEE;Lo;0;L;;;;;N;;;;; 166B;CANADIAN SYLLABICS CARRIER TTSI;Lo;0;L;;;;;N;;;;; 166C;CANADIAN SYLLABICS CARRIER TTSA;Lo;0;L;;;;;N;;;;; 166D;CANADIAN SYLLABICS CHI SIGN;So;0;L;;;;;N;;;;; 166E;CANADIAN SYLLABICS FULL STOP;Po;0;L;;;;;N;;;;; 166F;CANADIAN SYLLABICS QAI;Lo;0;L;;;;;N;;;;; 1670;CANADIAN SYLLABICS NGAI;Lo;0;L;;;;;N;;;;; 1671;CANADIAN SYLLABICS NNGI;Lo;0;L;;;;;N;;;;; 1672;CANADIAN SYLLABICS NNGII;Lo;0;L;;;;;N;;;;; 1673;CANADIAN SYLLABICS NNGO;Lo;0;L;;;;;N;;;;; 1674;CANADIAN SYLLABICS NNGOO;Lo;0;L;;;;;N;;;;; 1675;CANADIAN SYLLABICS NNGA;Lo;0;L;;;;;N;;;;; 1676;CANADIAN SYLLABICS NNGAA;Lo;0;L;;;;;N;;;;; 1677;CANADIAN SYLLABICS WOODS-CREE THWEE;Lo;0;L;;;;;N;;;;; 1678;CANADIAN SYLLABICS WOODS-CREE THWI;Lo;0;L;;;;;N;;;;; 1679;CANADIAN SYLLABICS WOODS-CREE THWII;Lo;0;L;;;;;N;;;;; 167A;CANADIAN SYLLABICS WOODS-CREE THWO;Lo;0;L;;;;;N;;;;; 167B;CANADIAN SYLLABICS WOODS-CREE THWOO;Lo;0;L;;;;;N;;;;; 167C;CANADIAN SYLLABICS WOODS-CREE THWA;Lo;0;L;;;;;N;;;;; 167D;CANADIAN SYLLABICS WOODS-CREE THWAA;Lo;0;L;;;;;N;;;;; 167E;CANADIAN SYLLABICS WOODS-CREE FINAL TH;Lo;0;L;;;;;N;;;;; 167F;CANADIAN SYLLABICS BLACKFOOT W;Lo;0;L;;;;;N;;;;; 1680;OGHAM SPACE MARK;Zs;0;WS;;;;;N;;;;; 1681;OGHAM LETTER BEITH;Lo;0;L;;;;;N;;;;; 1682;OGHAM LETTER LUIS;Lo;0;L;;;;;N;;;;; 1683;OGHAM LETTER FEARN;Lo;0;L;;;;;N;;;;; 1684;OGHAM LETTER SAIL;Lo;0;L;;;;;N;;;;; 1685;OGHAM LETTER NION;Lo;0;L;;;;;N;;;;; 1686;OGHAM LETTER UATH;Lo;0;L;;;;;N;;;;; 1687;OGHAM LETTER DAIR;Lo;0;L;;;;;N;;;;; 1688;OGHAM LETTER TINNE;Lo;0;L;;;;;N;;;;; 1689;OGHAM LETTER COLL;Lo;0;L;;;;;N;;;;; 168A;OGHAM LETTER CEIRT;Lo;0;L;;;;;N;;;;; 168B;OGHAM LETTER MUIN;Lo;0;L;;;;;N;;;;; 168C;OGHAM LETTER GORT;Lo;0;L;;;;;N;;;;; 168D;OGHAM LETTER NGEADAL;Lo;0;L;;;;;N;;;;; 168E;OGHAM LETTER STRAIF;Lo;0;L;;;;;N;;;;; 168F;OGHAM LETTER RUIS;Lo;0;L;;;;;N;;;;; 1690;OGHAM LETTER AILM;Lo;0;L;;;;;N;;;;; 1691;OGHAM LETTER ONN;Lo;0;L;;;;;N;;;;; 1692;OGHAM LETTER UR;Lo;0;L;;;;;N;;;;; 1693;OGHAM LETTER EADHADH;Lo;0;L;;;;;N;;;;; 1694;OGHAM LETTER IODHADH;Lo;0;L;;;;;N;;;;; 1695;OGHAM LETTER EABHADH;Lo;0;L;;;;;N;;;;; 1696;OGHAM LETTER OR;Lo;0;L;;;;;N;;;;; 1697;OGHAM LETTER UILLEANN;Lo;0;L;;;;;N;;;;; 1698;OGHAM LETTER IFIN;Lo;0;L;;;;;N;;;;; 1699;OGHAM LETTER EAMHANCHOLL;Lo;0;L;;;;;N;;;;; 169A;OGHAM LETTER PEITH;Lo;0;L;;;;;N;;;;; 169B;OGHAM FEATHER MARK;Ps;0;ON;;;;;Y;;;;; 169C;OGHAM REVERSED FEATHER MARK;Pe;0;ON;;;;;Y;;;;; 16A0;RUNIC LETTER FEHU FEOH FE F;Lo;0;L;;;;;N;;;;; 16A1;RUNIC LETTER V;Lo;0;L;;;;;N;;;;; 16A2;RUNIC LETTER URUZ UR U;Lo;0;L;;;;;N;;;;; 16A3;RUNIC LETTER YR;Lo;0;L;;;;;N;;;;; 16A4;RUNIC LETTER Y;Lo;0;L;;;;;N;;;;; 16A5;RUNIC LETTER W;Lo;0;L;;;;;N;;;;; 16A6;RUNIC LETTER THURISAZ THURS THORN;Lo;0;L;;;;;N;;;;; 16A7;RUNIC LETTER ETH;Lo;0;L;;;;;N;;;;; 16A8;RUNIC LETTER ANSUZ A;Lo;0;L;;;;;N;;;;; 16A9;RUNIC LETTER OS O;Lo;0;L;;;;;N;;;;; 16AA;RUNIC LETTER AC A;Lo;0;L;;;;;N;;;;; 16AB;RUNIC LETTER AESC;Lo;0;L;;;;;N;;;;; 16AC;RUNIC LETTER LONG-BRANCH-OSS O;Lo;0;L;;;;;N;;;;; 16AD;RUNIC LETTER SHORT-TWIG-OSS O;Lo;0;L;;;;;N;;;;; 16AE;RUNIC LETTER O;Lo;0;L;;;;;N;;;;; 16AF;RUNIC LETTER OE;Lo;0;L;;;;;N;;;;; 16B0;RUNIC LETTER ON;Lo;0;L;;;;;N;;;;; 16B1;RUNIC LETTER RAIDO RAD REID R;Lo;0;L;;;;;N;;;;; 16B2;RUNIC LETTER KAUNA;Lo;0;L;;;;;N;;;;; 16B3;RUNIC LETTER CEN;Lo;0;L;;;;;N;;;;; 16B4;RUNIC LETTER KAUN K;Lo;0;L;;;;;N;;;;; 16B5;RUNIC LETTER G;Lo;0;L;;;;;N;;;;; 16B6;RUNIC LETTER ENG;Lo;0;L;;;;;N;;;;; 16B7;RUNIC LETTER GEBO GYFU G;Lo;0;L;;;;;N;;;;; 16B8;RUNIC LETTER GAR;Lo;0;L;;;;;N;;;;; 16B9;RUNIC LETTER WUNJO WYNN W;Lo;0;L;;;;;N;;;;; 16BA;RUNIC LETTER HAGLAZ H;Lo;0;L;;;;;N;;;;; 16BB;RUNIC LETTER HAEGL H;Lo;0;L;;;;;N;;;;; 16BC;RUNIC LETTER LONG-BRANCH-HAGALL H;Lo;0;L;;;;;N;;;;; 16BD;RUNIC LETTER SHORT-TWIG-HAGALL H;Lo;0;L;;;;;N;;;;; 16BE;RUNIC LETTER NAUDIZ NYD NAUD N;Lo;0;L;;;;;N;;;;; 16BF;RUNIC LETTER SHORT-TWIG-NAUD N;Lo;0;L;;;;;N;;;;; 16C0;RUNIC LETTER DOTTED-N;Lo;0;L;;;;;N;;;;; 16C1;RUNIC LETTER ISAZ IS ISS I;Lo;0;L;;;;;N;;;;; 16C2;RUNIC LETTER E;Lo;0;L;;;;;N;;;;; 16C3;RUNIC LETTER JERAN J;Lo;0;L;;;;;N;;;;; 16C4;RUNIC LETTER GER;Lo;0;L;;;;;N;;;;; 16C5;RUNIC LETTER LONG-BRANCH-AR AE;Lo;0;L;;;;;N;;;;; 16C6;RUNIC LETTER SHORT-TWIG-AR A;Lo;0;L;;;;;N;;;;; 16C7;RUNIC LETTER IWAZ EOH;Lo;0;L;;;;;N;;;;; 16C8;RUNIC LETTER PERTHO PEORTH P;Lo;0;L;;;;;N;;;;; 16C9;RUNIC LETTER ALGIZ EOLHX;Lo;0;L;;;;;N;;;;; 16CA;RUNIC LETTER SOWILO S;Lo;0;L;;;;;N;;;;; 16CB;RUNIC LETTER SIGEL LONG-BRANCH-SOL S;Lo;0;L;;;;;N;;;;; 16CC;RUNIC LETTER SHORT-TWIG-SOL S;Lo;0;L;;;;;N;;;;; 16CD;RUNIC LETTER C;Lo;0;L;;;;;N;;;;; 16CE;RUNIC LETTER Z;Lo;0;L;;;;;N;;;;; 16CF;RUNIC LETTER TIWAZ TIR TYR T;Lo;0;L;;;;;N;;;;; 16D0;RUNIC LETTER SHORT-TWIG-TYR T;Lo;0;L;;;;;N;;;;; 16D1;RUNIC LETTER D;Lo;0;L;;;;;N;;;;; 16D2;RUNIC LETTER BERKANAN BEORC BJARKAN B;Lo;0;L;;;;;N;;;;; 16D3;RUNIC LETTER SHORT-TWIG-BJARKAN B;Lo;0;L;;;;;N;;;;; 16D4;RUNIC LETTER DOTTED-P;Lo;0;L;;;;;N;;;;; 16D5;RUNIC LETTER OPEN-P;Lo;0;L;;;;;N;;;;; 16D6;RUNIC LETTER EHWAZ EH E;Lo;0;L;;;;;N;;;;; 16D7;RUNIC LETTER MANNAZ MAN M;Lo;0;L;;;;;N;;;;; 16D8;RUNIC LETTER LONG-BRANCH-MADR M;Lo;0;L;;;;;N;;;;; 16D9;RUNIC LETTER SHORT-TWIG-MADR M;Lo;0;L;;;;;N;;;;; 16DA;RUNIC LETTER LAUKAZ LAGU LOGR L;Lo;0;L;;;;;N;;;;; 16DB;RUNIC LETTER DOTTED-L;Lo;0;L;;;;;N;;;;; 16DC;RUNIC LETTER INGWAZ;Lo;0;L;;;;;N;;;;; 16DD;RUNIC LETTER ING;Lo;0;L;;;;;N;;;;; 16DE;RUNIC LETTER DAGAZ DAEG D;Lo;0;L;;;;;N;;;;; 16DF;RUNIC LETTER OTHALAN ETHEL O;Lo;0;L;;;;;N;;;;; 16E0;RUNIC LETTER EAR;Lo;0;L;;;;;N;;;;; 16E1;RUNIC LETTER IOR;Lo;0;L;;;;;N;;;;; 16E2;RUNIC LETTER CWEORTH;Lo;0;L;;;;;N;;;;; 16E3;RUNIC LETTER CALC;Lo;0;L;;;;;N;;;;; 16E4;RUNIC LETTER CEALC;Lo;0;L;;;;;N;;;;; 16E5;RUNIC LETTER STAN;Lo;0;L;;;;;N;;;;; 16E6;RUNIC LETTER LONG-BRANCH-YR;Lo;0;L;;;;;N;;;;; 16E7;RUNIC LETTER SHORT-TWIG-YR;Lo;0;L;;;;;N;;;;; 16E8;RUNIC LETTER ICELANDIC-YR;Lo;0;L;;;;;N;;;;; 16E9;RUNIC LETTER Q;Lo;0;L;;;;;N;;;;; 16EA;RUNIC LETTER X;Lo;0;L;;;;;N;;;;; 16EB;RUNIC SINGLE PUNCTUATION;Po;0;L;;;;;N;;;;; 16EC;RUNIC MULTIPLE PUNCTUATION;Po;0;L;;;;;N;;;;; 16ED;RUNIC CROSS PUNCTUATION;Po;0;L;;;;;N;;;;; 16EE;RUNIC ARLAUG SYMBOL;Nl;0;L;;;;17;N;;;;; 16EF;RUNIC TVIMADUR SYMBOL;Nl;0;L;;;;18;N;;;;; 16F0;RUNIC BELGTHOR SYMBOL;Nl;0;L;;;;19;N;;;;; 16F1;RUNIC LETTER K;Lo;0;L;;;;;N;;;;; 16F2;RUNIC LETTER SH;Lo;0;L;;;;;N;;;;; 16F3;RUNIC LETTER OO;Lo;0;L;;;;;N;;;;; 16F4;RUNIC LETTER FRANKS CASKET OS;Lo;0;L;;;;;N;;;;; 16F5;RUNIC LETTER FRANKS CASKET IS;Lo;0;L;;;;;N;;;;; 16F6;RUNIC LETTER FRANKS CASKET EH;Lo;0;L;;;;;N;;;;; 16F7;RUNIC LETTER FRANKS CASKET AC;Lo;0;L;;;;;N;;;;; 16F8;RUNIC LETTER FRANKS CASKET AESC;Lo;0;L;;;;;N;;;;; 1700;TAGALOG LETTER A;Lo;0;L;;;;;N;;;;; 1701;TAGALOG LETTER I;Lo;0;L;;;;;N;;;;; 1702;TAGALOG LETTER U;Lo;0;L;;;;;N;;;;; 1703;TAGALOG LETTER KA;Lo;0;L;;;;;N;;;;; 1704;TAGALOG LETTER GA;Lo;0;L;;;;;N;;;;; 1705;TAGALOG LETTER NGA;Lo;0;L;;;;;N;;;;; 1706;TAGALOG LETTER TA;Lo;0;L;;;;;N;;;;; 1707;TAGALOG LETTER DA;Lo;0;L;;;;;N;;;;; 1708;TAGALOG LETTER NA;Lo;0;L;;;;;N;;;;; 1709;TAGALOG LETTER PA;Lo;0;L;;;;;N;;;;; 170A;TAGALOG LETTER BA;Lo;0;L;;;;;N;;;;; 170B;TAGALOG LETTER MA;Lo;0;L;;;;;N;;;;; 170C;TAGALOG LETTER YA;Lo;0;L;;;;;N;;;;; 170D;TAGALOG LETTER RA;Lo;0;L;;;;;N;;;;; 170E;TAGALOG LETTER LA;Lo;0;L;;;;;N;;;;; 170F;TAGALOG LETTER WA;Lo;0;L;;;;;N;;;;; 1710;TAGALOG LETTER SA;Lo;0;L;;;;;N;;;;; 1711;TAGALOG LETTER HA;Lo;0;L;;;;;N;;;;; 1712;TAGALOG VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 1713;TAGALOG VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 1714;TAGALOG SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 1715;TAGALOG SIGN PAMUDPOD;Mc;9;L;;;;;N;;;;; 171F;TAGALOG LETTER ARCHAIC RA;Lo;0;L;;;;;N;;;;; 1720;HANUNOO LETTER A;Lo;0;L;;;;;N;;;;; 1721;HANUNOO LETTER I;Lo;0;L;;;;;N;;;;; 1722;HANUNOO LETTER U;Lo;0;L;;;;;N;;;;; 1723;HANUNOO LETTER KA;Lo;0;L;;;;;N;;;;; 1724;HANUNOO LETTER GA;Lo;0;L;;;;;N;;;;; 1725;HANUNOO LETTER NGA;Lo;0;L;;;;;N;;;;; 1726;HANUNOO LETTER TA;Lo;0;L;;;;;N;;;;; 1727;HANUNOO LETTER DA;Lo;0;L;;;;;N;;;;; 1728;HANUNOO LETTER NA;Lo;0;L;;;;;N;;;;; 1729;HANUNOO LETTER PA;Lo;0;L;;;;;N;;;;; 172A;HANUNOO LETTER BA;Lo;0;L;;;;;N;;;;; 172B;HANUNOO LETTER MA;Lo;0;L;;;;;N;;;;; 172C;HANUNOO LETTER YA;Lo;0;L;;;;;N;;;;; 172D;HANUNOO LETTER RA;Lo;0;L;;;;;N;;;;; 172E;HANUNOO LETTER LA;Lo;0;L;;;;;N;;;;; 172F;HANUNOO LETTER WA;Lo;0;L;;;;;N;;;;; 1730;HANUNOO LETTER SA;Lo;0;L;;;;;N;;;;; 1731;HANUNOO LETTER HA;Lo;0;L;;;;;N;;;;; 1732;HANUNOO VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 1733;HANUNOO VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 1734;HANUNOO SIGN PAMUDPOD;Mc;9;L;;;;;N;;;;; 1735;PHILIPPINE SINGLE PUNCTUATION;Po;0;L;;;;;N;;;;; 1736;PHILIPPINE DOUBLE PUNCTUATION;Po;0;L;;;;;N;;;;; 1740;BUHID LETTER A;Lo;0;L;;;;;N;;;;; 1741;BUHID LETTER I;Lo;0;L;;;;;N;;;;; 1742;BUHID LETTER U;Lo;0;L;;;;;N;;;;; 1743;BUHID LETTER KA;Lo;0;L;;;;;N;;;;; 1744;BUHID LETTER GA;Lo;0;L;;;;;N;;;;; 1745;BUHID LETTER NGA;Lo;0;L;;;;;N;;;;; 1746;BUHID LETTER TA;Lo;0;L;;;;;N;;;;; 1747;BUHID LETTER DA;Lo;0;L;;;;;N;;;;; 1748;BUHID LETTER NA;Lo;0;L;;;;;N;;;;; 1749;BUHID LETTER PA;Lo;0;L;;;;;N;;;;; 174A;BUHID LETTER BA;Lo;0;L;;;;;N;;;;; 174B;BUHID LETTER MA;Lo;0;L;;;;;N;;;;; 174C;BUHID LETTER YA;Lo;0;L;;;;;N;;;;; 174D;BUHID LETTER RA;Lo;0;L;;;;;N;;;;; 174E;BUHID LETTER LA;Lo;0;L;;;;;N;;;;; 174F;BUHID LETTER WA;Lo;0;L;;;;;N;;;;; 1750;BUHID LETTER SA;Lo;0;L;;;;;N;;;;; 1751;BUHID LETTER HA;Lo;0;L;;;;;N;;;;; 1752;BUHID VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 1753;BUHID VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 1760;TAGBANWA LETTER A;Lo;0;L;;;;;N;;;;; 1761;TAGBANWA LETTER I;Lo;0;L;;;;;N;;;;; 1762;TAGBANWA LETTER U;Lo;0;L;;;;;N;;;;; 1763;TAGBANWA LETTER KA;Lo;0;L;;;;;N;;;;; 1764;TAGBANWA LETTER GA;Lo;0;L;;;;;N;;;;; 1765;TAGBANWA LETTER NGA;Lo;0;L;;;;;N;;;;; 1766;TAGBANWA LETTER TA;Lo;0;L;;;;;N;;;;; 1767;TAGBANWA LETTER DA;Lo;0;L;;;;;N;;;;; 1768;TAGBANWA LETTER NA;Lo;0;L;;;;;N;;;;; 1769;TAGBANWA LETTER PA;Lo;0;L;;;;;N;;;;; 176A;TAGBANWA LETTER BA;Lo;0;L;;;;;N;;;;; 176B;TAGBANWA LETTER MA;Lo;0;L;;;;;N;;;;; 176C;TAGBANWA LETTER YA;Lo;0;L;;;;;N;;;;; 176E;TAGBANWA LETTER LA;Lo;0;L;;;;;N;;;;; 176F;TAGBANWA LETTER WA;Lo;0;L;;;;;N;;;;; 1770;TAGBANWA LETTER SA;Lo;0;L;;;;;N;;;;; 1772;TAGBANWA VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 1773;TAGBANWA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 1780;KHMER LETTER KA;Lo;0;L;;;;;N;;;;; 1781;KHMER LETTER KHA;Lo;0;L;;;;;N;;;;; 1782;KHMER LETTER KO;Lo;0;L;;;;;N;;;;; 1783;KHMER LETTER KHO;Lo;0;L;;;;;N;;;;; 1784;KHMER LETTER NGO;Lo;0;L;;;;;N;;;;; 1785;KHMER LETTER CA;Lo;0;L;;;;;N;;;;; 1786;KHMER LETTER CHA;Lo;0;L;;;;;N;;;;; 1787;KHMER LETTER CO;Lo;0;L;;;;;N;;;;; 1788;KHMER LETTER CHO;Lo;0;L;;;;;N;;;;; 1789;KHMER LETTER NYO;Lo;0;L;;;;;N;;;;; 178A;KHMER LETTER DA;Lo;0;L;;;;;N;;;;; 178B;KHMER LETTER TTHA;Lo;0;L;;;;;N;;;;; 178C;KHMER LETTER DO;Lo;0;L;;;;;N;;;;; 178D;KHMER LETTER TTHO;Lo;0;L;;;;;N;;;;; 178E;KHMER LETTER NNO;Lo;0;L;;;;;N;;;;; 178F;KHMER LETTER TA;Lo;0;L;;;;;N;;;;; 1790;KHMER LETTER THA;Lo;0;L;;;;;N;;;;; 1791;KHMER LETTER TO;Lo;0;L;;;;;N;;;;; 1792;KHMER LETTER THO;Lo;0;L;;;;;N;;;;; 1793;KHMER LETTER NO;Lo;0;L;;;;;N;;;;; 1794;KHMER LETTER BA;Lo;0;L;;;;;N;;;;; 1795;KHMER LETTER PHA;Lo;0;L;;;;;N;;;;; 1796;KHMER LETTER PO;Lo;0;L;;;;;N;;;;; 1797;KHMER LETTER PHO;Lo;0;L;;;;;N;;;;; 1798;KHMER LETTER MO;Lo;0;L;;;;;N;;;;; 1799;KHMER LETTER YO;Lo;0;L;;;;;N;;;;; 179A;KHMER LETTER RO;Lo;0;L;;;;;N;;;;; 179B;KHMER LETTER LO;Lo;0;L;;;;;N;;;;; 179C;KHMER LETTER VO;Lo;0;L;;;;;N;;;;; 179D;KHMER LETTER SHA;Lo;0;L;;;;;N;;;;; 179E;KHMER LETTER SSO;Lo;0;L;;;;;N;;;;; 179F;KHMER LETTER SA;Lo;0;L;;;;;N;;;;; 17A0;KHMER LETTER HA;Lo;0;L;;;;;N;;;;; 17A1;KHMER LETTER LA;Lo;0;L;;;;;N;;;;; 17A2;KHMER LETTER QA;Lo;0;L;;;;;N;;;;; 17A3;KHMER INDEPENDENT VOWEL QAQ;Lo;0;L;;;;;N;;;;; 17A4;KHMER INDEPENDENT VOWEL QAA;Lo;0;L;;;;;N;;;;; 17A5;KHMER INDEPENDENT VOWEL QI;Lo;0;L;;;;;N;;;;; 17A6;KHMER INDEPENDENT VOWEL QII;Lo;0;L;;;;;N;;;;; 17A7;KHMER INDEPENDENT VOWEL QU;Lo;0;L;;;;;N;;;;; 17A8;KHMER INDEPENDENT VOWEL QUK;Lo;0;L;;;;;N;;;;; 17A9;KHMER INDEPENDENT VOWEL QUU;Lo;0;L;;;;;N;;;;; 17AA;KHMER INDEPENDENT VOWEL QUUV;Lo;0;L;;;;;N;;;;; 17AB;KHMER INDEPENDENT VOWEL RY;Lo;0;L;;;;;N;;;;; 17AC;KHMER INDEPENDENT VOWEL RYY;Lo;0;L;;;;;N;;;;; 17AD;KHMER INDEPENDENT VOWEL LY;Lo;0;L;;;;;N;;;;; 17AE;KHMER INDEPENDENT VOWEL LYY;Lo;0;L;;;;;N;;;;; 17AF;KHMER INDEPENDENT VOWEL QE;Lo;0;L;;;;;N;;;;; 17B0;KHMER INDEPENDENT VOWEL QAI;Lo;0;L;;;;;N;;;;; 17B1;KHMER INDEPENDENT VOWEL QOO TYPE ONE;Lo;0;L;;;;;N;;;;; 17B2;KHMER INDEPENDENT VOWEL QOO TYPE TWO;Lo;0;L;;;;;N;;;;; 17B3;KHMER INDEPENDENT VOWEL QAU;Lo;0;L;;;;;N;;;;; 17B4;KHMER VOWEL INHERENT AQ;Mn;0;NSM;;;;;N;;;;; 17B5;KHMER VOWEL INHERENT AA;Mn;0;NSM;;;;;N;;;;; 17B6;KHMER VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 17B7;KHMER VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 17B8;KHMER VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; 17B9;KHMER VOWEL SIGN Y;Mn;0;NSM;;;;;N;;;;; 17BA;KHMER VOWEL SIGN YY;Mn;0;NSM;;;;;N;;;;; 17BB;KHMER VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 17BC;KHMER VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 17BD;KHMER VOWEL SIGN UA;Mn;0;NSM;;;;;N;;;;; 17BE;KHMER VOWEL SIGN OE;Mc;0;L;;;;;N;;;;; 17BF;KHMER VOWEL SIGN YA;Mc;0;L;;;;;N;;;;; 17C0;KHMER VOWEL SIGN IE;Mc;0;L;;;;;N;;;;; 17C1;KHMER VOWEL SIGN E;Mc;0;L;;;;;N;;;;; 17C2;KHMER VOWEL SIGN AE;Mc;0;L;;;;;N;;;;; 17C3;KHMER VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; 17C4;KHMER VOWEL SIGN OO;Mc;0;L;;;;;N;;;;; 17C5;KHMER VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; 17C6;KHMER SIGN NIKAHIT;Mn;0;NSM;;;;;N;;;;; 17C7;KHMER SIGN REAHMUK;Mc;0;L;;;;;N;;;;; 17C8;KHMER SIGN YUUKALEAPINTU;Mc;0;L;;;;;N;;;;; 17C9;KHMER SIGN MUUSIKATOAN;Mn;0;NSM;;;;;N;;;;; 17CA;KHMER SIGN TRIISAP;Mn;0;NSM;;;;;N;;;;; 17CB;KHMER SIGN BANTOC;Mn;0;NSM;;;;;N;;;;; 17CC;KHMER SIGN ROBAT;Mn;0;NSM;;;;;N;;;;; 17CD;KHMER SIGN TOANDAKHIAT;Mn;0;NSM;;;;;N;;;;; 17CE;KHMER SIGN KAKABAT;Mn;0;NSM;;;;;N;;;;; 17CF;KHMER SIGN AHSDA;Mn;0;NSM;;;;;N;;;;; 17D0;KHMER SIGN SAMYOK SANNYA;Mn;0;NSM;;;;;N;;;;; 17D1;KHMER SIGN VIRIAM;Mn;0;NSM;;;;;N;;;;; 17D2;KHMER SIGN COENG;Mn;9;NSM;;;;;N;;;;; 17D3;KHMER SIGN BATHAMASAT;Mn;0;NSM;;;;;N;;;;; 17D4;KHMER SIGN KHAN;Po;0;L;;;;;N;;;;; 17D5;KHMER SIGN BARIYOOSAN;Po;0;L;;;;;N;;;;; 17D6;KHMER SIGN CAMNUC PII KUUH;Po;0;L;;;;;N;;;;; 17D7;KHMER SIGN LEK TOO;Lm;0;L;;;;;N;;;;; 17D8;KHMER SIGN BEYYAL;Po;0;L;;;;;N;;;;; 17D9;KHMER SIGN PHNAEK MUAN;Po;0;L;;;;;N;;;;; 17DA;KHMER SIGN KOOMUUT;Po;0;L;;;;;N;;;;; 17DB;KHMER CURRENCY SYMBOL RIEL;Sc;0;ET;;;;;N;;;;; 17DC;KHMER SIGN AVAKRAHASANYA;Lo;0;L;;;;;N;;;;; 17DD;KHMER SIGN ATTHACAN;Mn;230;NSM;;;;;N;;;;; 17E0;KHMER DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 17E1;KHMER DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 17E2;KHMER DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 17E3;KHMER DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 17E4;KHMER DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 17E5;KHMER DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 17E6;KHMER DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 17E7;KHMER DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 17E8;KHMER DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 17E9;KHMER DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 17F0;KHMER SYMBOL LEK ATTAK SON;No;0;ON;;;;0;N;;;;; 17F1;KHMER SYMBOL LEK ATTAK MUOY;No;0;ON;;;;1;N;;;;; 17F2;KHMER SYMBOL LEK ATTAK PII;No;0;ON;;;;2;N;;;;; 17F3;KHMER SYMBOL LEK ATTAK BEI;No;0;ON;;;;3;N;;;;; 17F4;KHMER SYMBOL LEK ATTAK BUON;No;0;ON;;;;4;N;;;;; 17F5;KHMER SYMBOL LEK ATTAK PRAM;No;0;ON;;;;5;N;;;;; 17F6;KHMER SYMBOL LEK ATTAK PRAM-MUOY;No;0;ON;;;;6;N;;;;; 17F7;KHMER SYMBOL LEK ATTAK PRAM-PII;No;0;ON;;;;7;N;;;;; 17F8;KHMER SYMBOL LEK ATTAK PRAM-BEI;No;0;ON;;;;8;N;;;;; 17F9;KHMER SYMBOL LEK ATTAK PRAM-BUON;No;0;ON;;;;9;N;;;;; 1800;MONGOLIAN BIRGA;Po;0;ON;;;;;N;;;;; 1801;MONGOLIAN ELLIPSIS;Po;0;ON;;;;;N;;;;; 1802;MONGOLIAN COMMA;Po;0;ON;;;;;N;;;;; 1803;MONGOLIAN FULL STOP;Po;0;ON;;;;;N;;;;; 1804;MONGOLIAN COLON;Po;0;ON;;;;;N;;;;; 1805;MONGOLIAN FOUR DOTS;Po;0;ON;;;;;N;;;;; 1806;MONGOLIAN TODO SOFT HYPHEN;Pd;0;ON;;;;;N;;;;; 1807;MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER;Po;0;ON;;;;;N;;;;; 1808;MONGOLIAN MANCHU COMMA;Po;0;ON;;;;;N;;;;; 1809;MONGOLIAN MANCHU FULL STOP;Po;0;ON;;;;;N;;;;; 180A;MONGOLIAN NIRUGU;Po;0;ON;;;;;N;;;;; 180B;MONGOLIAN FREE VARIATION SELECTOR ONE;Mn;0;NSM;;;;;N;;;;; 180C;MONGOLIAN FREE VARIATION SELECTOR TWO;Mn;0;NSM;;;;;N;;;;; 180D;MONGOLIAN FREE VARIATION SELECTOR THREE;Mn;0;NSM;;;;;N;;;;; 180E;MONGOLIAN VOWEL SEPARATOR;Cf;0;BN;;;;;N;;;;; 180F;MONGOLIAN FREE VARIATION SELECTOR FOUR;Mn;0;NSM;;;;;N;;;;; 1810;MONGOLIAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 1811;MONGOLIAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 1812;MONGOLIAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 1813;MONGOLIAN DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 1814;MONGOLIAN DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 1815;MONGOLIAN DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 1816;MONGOLIAN DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 1817;MONGOLIAN DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 1818;MONGOLIAN DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 1819;MONGOLIAN DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 1820;MONGOLIAN LETTER A;Lo;0;L;;;;;N;;;;; 1821;MONGOLIAN LETTER E;Lo;0;L;;;;;N;;;;; 1822;MONGOLIAN LETTER I;Lo;0;L;;;;;N;;;;; 1823;MONGOLIAN LETTER O;Lo;0;L;;;;;N;;;;; 1824;MONGOLIAN LETTER U;Lo;0;L;;;;;N;;;;; 1825;MONGOLIAN LETTER OE;Lo;0;L;;;;;N;;;;; 1826;MONGOLIAN LETTER UE;Lo;0;L;;;;;N;;;;; 1827;MONGOLIAN LETTER EE;Lo;0;L;;;;;N;;;;; 1828;MONGOLIAN LETTER NA;Lo;0;L;;;;;N;;;;; 1829;MONGOLIAN LETTER ANG;Lo;0;L;;;;;N;;;;; 182A;MONGOLIAN LETTER BA;Lo;0;L;;;;;N;;;;; 182B;MONGOLIAN LETTER PA;Lo;0;L;;;;;N;;;;; 182C;MONGOLIAN LETTER QA;Lo;0;L;;;;;N;;;;; 182D;MONGOLIAN LETTER GA;Lo;0;L;;;;;N;;;;; 182E;MONGOLIAN LETTER MA;Lo;0;L;;;;;N;;;;; 182F;MONGOLIAN LETTER LA;Lo;0;L;;;;;N;;;;; 1830;MONGOLIAN LETTER SA;Lo;0;L;;;;;N;;;;; 1831;MONGOLIAN LETTER SHA;Lo;0;L;;;;;N;;;;; 1832;MONGOLIAN LETTER TA;Lo;0;L;;;;;N;;;;; 1833;MONGOLIAN LETTER DA;Lo;0;L;;;;;N;;;;; 1834;MONGOLIAN LETTER CHA;Lo;0;L;;;;;N;;;;; 1835;MONGOLIAN LETTER JA;Lo;0;L;;;;;N;;;;; 1836;MONGOLIAN LETTER YA;Lo;0;L;;;;;N;;;;; 1837;MONGOLIAN LETTER RA;Lo;0;L;;;;;N;;;;; 1838;MONGOLIAN LETTER WA;Lo;0;L;;;;;N;;;;; 1839;MONGOLIAN LETTER FA;Lo;0;L;;;;;N;;;;; 183A;MONGOLIAN LETTER KA;Lo;0;L;;;;;N;;;;; 183B;MONGOLIAN LETTER KHA;Lo;0;L;;;;;N;;;;; 183C;MONGOLIAN LETTER TSA;Lo;0;L;;;;;N;;;;; 183D;MONGOLIAN LETTER ZA;Lo;0;L;;;;;N;;;;; 183E;MONGOLIAN LETTER HAA;Lo;0;L;;;;;N;;;;; 183F;MONGOLIAN LETTER ZRA;Lo;0;L;;;;;N;;;;; 1840;MONGOLIAN LETTER LHA;Lo;0;L;;;;;N;;;;; 1841;MONGOLIAN LETTER ZHI;Lo;0;L;;;;;N;;;;; 1842;MONGOLIAN LETTER CHI;Lo;0;L;;;;;N;;;;; 1843;MONGOLIAN LETTER TODO LONG VOWEL SIGN;Lm;0;L;;;;;N;;;;; 1844;MONGOLIAN LETTER TODO E;Lo;0;L;;;;;N;;;;; 1845;MONGOLIAN LETTER TODO I;Lo;0;L;;;;;N;;;;; 1846;MONGOLIAN LETTER TODO O;Lo;0;L;;;;;N;;;;; 1847;MONGOLIAN LETTER TODO U;Lo;0;L;;;;;N;;;;; 1848;MONGOLIAN LETTER TODO OE;Lo;0;L;;;;;N;;;;; 1849;MONGOLIAN LETTER TODO UE;Lo;0;L;;;;;N;;;;; 184A;MONGOLIAN LETTER TODO ANG;Lo;0;L;;;;;N;;;;; 184B;MONGOLIAN LETTER TODO BA;Lo;0;L;;;;;N;;;;; 184C;MONGOLIAN LETTER TODO PA;Lo;0;L;;;;;N;;;;; 184D;MONGOLIAN LETTER TODO QA;Lo;0;L;;;;;N;;;;; 184E;MONGOLIAN LETTER TODO GA;Lo;0;L;;;;;N;;;;; 184F;MONGOLIAN LETTER TODO MA;Lo;0;L;;;;;N;;;;; 1850;MONGOLIAN LETTER TODO TA;Lo;0;L;;;;;N;;;;; 1851;MONGOLIAN LETTER TODO DA;Lo;0;L;;;;;N;;;;; 1852;MONGOLIAN LETTER TODO CHA;Lo;0;L;;;;;N;;;;; 1853;MONGOLIAN LETTER TODO JA;Lo;0;L;;;;;N;;;;; 1854;MONGOLIAN LETTER TODO TSA;Lo;0;L;;;;;N;;;;; 1855;MONGOLIAN LETTER TODO YA;Lo;0;L;;;;;N;;;;; 1856;MONGOLIAN LETTER TODO WA;Lo;0;L;;;;;N;;;;; 1857;MONGOLIAN LETTER TODO KA;Lo;0;L;;;;;N;;;;; 1858;MONGOLIAN LETTER TODO GAA;Lo;0;L;;;;;N;;;;; 1859;MONGOLIAN LETTER TODO HAA;Lo;0;L;;;;;N;;;;; 185A;MONGOLIAN LETTER TODO JIA;Lo;0;L;;;;;N;;;;; 185B;MONGOLIAN LETTER TODO NIA;Lo;0;L;;;;;N;;;;; 185C;MONGOLIAN LETTER TODO DZA;Lo;0;L;;;;;N;;;;; 185D;MONGOLIAN LETTER SIBE E;Lo;0;L;;;;;N;;;;; 185E;MONGOLIAN LETTER SIBE I;Lo;0;L;;;;;N;;;;; 185F;MONGOLIAN LETTER SIBE IY;Lo;0;L;;;;;N;;;;; 1860;MONGOLIAN LETTER SIBE UE;Lo;0;L;;;;;N;;;;; 1861;MONGOLIAN LETTER SIBE U;Lo;0;L;;;;;N;;;;; 1862;MONGOLIAN LETTER SIBE ANG;Lo;0;L;;;;;N;;;;; 1863;MONGOLIAN LETTER SIBE KA;Lo;0;L;;;;;N;;;;; 1864;MONGOLIAN LETTER SIBE GA;Lo;0;L;;;;;N;;;;; 1865;MONGOLIAN LETTER SIBE HA;Lo;0;L;;;;;N;;;;; 1866;MONGOLIAN LETTER SIBE PA;Lo;0;L;;;;;N;;;;; 1867;MONGOLIAN LETTER SIBE SHA;Lo;0;L;;;;;N;;;;; 1868;MONGOLIAN LETTER SIBE TA;Lo;0;L;;;;;N;;;;; 1869;MONGOLIAN LETTER SIBE DA;Lo;0;L;;;;;N;;;;; 186A;MONGOLIAN LETTER SIBE JA;Lo;0;L;;;;;N;;;;; 186B;MONGOLIAN LETTER SIBE FA;Lo;0;L;;;;;N;;;;; 186C;MONGOLIAN LETTER SIBE GAA;Lo;0;L;;;;;N;;;;; 186D;MONGOLIAN LETTER SIBE HAA;Lo;0;L;;;;;N;;;;; 186E;MONGOLIAN LETTER SIBE TSA;Lo;0;L;;;;;N;;;;; 186F;MONGOLIAN LETTER SIBE ZA;Lo;0;L;;;;;N;;;;; 1870;MONGOLIAN LETTER SIBE RAA;Lo;0;L;;;;;N;;;;; 1871;MONGOLIAN LETTER SIBE CHA;Lo;0;L;;;;;N;;;;; 1872;MONGOLIAN LETTER SIBE ZHA;Lo;0;L;;;;;N;;;;; 1873;MONGOLIAN LETTER MANCHU I;Lo;0;L;;;;;N;;;;; 1874;MONGOLIAN LETTER MANCHU KA;Lo;0;L;;;;;N;;;;; 1875;MONGOLIAN LETTER MANCHU RA;Lo;0;L;;;;;N;;;;; 1876;MONGOLIAN LETTER MANCHU FA;Lo;0;L;;;;;N;;;;; 1877;MONGOLIAN LETTER MANCHU ZHA;Lo;0;L;;;;;N;;;;; 1878;MONGOLIAN LETTER CHA WITH TWO DOTS;Lo;0;L;;;;;N;;;;; 1880;MONGOLIAN LETTER ALI GALI ANUSVARA ONE;Lo;0;L;;;;;N;;;;; 1881;MONGOLIAN LETTER ALI GALI VISARGA ONE;Lo;0;L;;;;;N;;;;; 1882;MONGOLIAN LETTER ALI GALI DAMARU;Lo;0;L;;;;;N;;;;; 1883;MONGOLIAN LETTER ALI GALI UBADAMA;Lo;0;L;;;;;N;;;;; 1884;MONGOLIAN LETTER ALI GALI INVERTED UBADAMA;Lo;0;L;;;;;N;;;;; 1885;MONGOLIAN LETTER ALI GALI BALUDA;Mn;0;NSM;;;;;N;;;;; 1886;MONGOLIAN LETTER ALI GALI THREE BALUDA;Mn;0;NSM;;;;;N;;;;; 1887;MONGOLIAN LETTER ALI GALI A;Lo;0;L;;;;;N;;;;; 1888;MONGOLIAN LETTER ALI GALI I;Lo;0;L;;;;;N;;;;; 1889;MONGOLIAN LETTER ALI GALI KA;Lo;0;L;;;;;N;;;;; 188A;MONGOLIAN LETTER ALI GALI NGA;Lo;0;L;;;;;N;;;;; 188B;MONGOLIAN LETTER ALI GALI CA;Lo;0;L;;;;;N;;;;; 188C;MONGOLIAN LETTER ALI GALI TTA;Lo;0;L;;;;;N;;;;; 188D;MONGOLIAN LETTER ALI GALI TTHA;Lo;0;L;;;;;N;;;;; 188E;MONGOLIAN LETTER ALI GALI DDA;Lo;0;L;;;;;N;;;;; 188F;MONGOLIAN LETTER ALI GALI NNA;Lo;0;L;;;;;N;;;;; 1890;MONGOLIAN LETTER ALI GALI TA;Lo;0;L;;;;;N;;;;; 1891;MONGOLIAN LETTER ALI GALI DA;Lo;0;L;;;;;N;;;;; 1892;MONGOLIAN LETTER ALI GALI PA;Lo;0;L;;;;;N;;;;; 1893;MONGOLIAN LETTER ALI GALI PHA;Lo;0;L;;;;;N;;;;; 1894;MONGOLIAN LETTER ALI GALI SSA;Lo;0;L;;;;;N;;;;; 1895;MONGOLIAN LETTER ALI GALI ZHA;Lo;0;L;;;;;N;;;;; 1896;MONGOLIAN LETTER ALI GALI ZA;Lo;0;L;;;;;N;;;;; 1897;MONGOLIAN LETTER ALI GALI AH;Lo;0;L;;;;;N;;;;; 1898;MONGOLIAN LETTER TODO ALI GALI TA;Lo;0;L;;;;;N;;;;; 1899;MONGOLIAN LETTER TODO ALI GALI ZHA;Lo;0;L;;;;;N;;;;; 189A;MONGOLIAN LETTER MANCHU ALI GALI GHA;Lo;0;L;;;;;N;;;;; 189B;MONGOLIAN LETTER MANCHU ALI GALI NGA;Lo;0;L;;;;;N;;;;; 189C;MONGOLIAN LETTER MANCHU ALI GALI CA;Lo;0;L;;;;;N;;;;; 189D;MONGOLIAN LETTER MANCHU ALI GALI JHA;Lo;0;L;;;;;N;;;;; 189E;MONGOLIAN LETTER MANCHU ALI GALI TTA;Lo;0;L;;;;;N;;;;; 189F;MONGOLIAN LETTER MANCHU ALI GALI DDHA;Lo;0;L;;;;;N;;;;; 18A0;MONGOLIAN LETTER MANCHU ALI GALI TA;Lo;0;L;;;;;N;;;;; 18A1;MONGOLIAN LETTER MANCHU ALI GALI DHA;Lo;0;L;;;;;N;;;;; 18A2;MONGOLIAN LETTER MANCHU ALI GALI SSA;Lo;0;L;;;;;N;;;;; 18A3;MONGOLIAN LETTER MANCHU ALI GALI CYA;Lo;0;L;;;;;N;;;;; 18A4;MONGOLIAN LETTER MANCHU ALI GALI ZHA;Lo;0;L;;;;;N;;;;; 18A5;MONGOLIAN LETTER MANCHU ALI GALI ZA;Lo;0;L;;;;;N;;;;; 18A6;MONGOLIAN LETTER ALI GALI HALF U;Lo;0;L;;;;;N;;;;; 18A7;MONGOLIAN LETTER ALI GALI HALF YA;Lo;0;L;;;;;N;;;;; 18A8;MONGOLIAN LETTER MANCHU ALI GALI BHA;Lo;0;L;;;;;N;;;;; 18A9;MONGOLIAN LETTER ALI GALI DAGALGA;Mn;228;NSM;;;;;N;;;;; 18AA;MONGOLIAN LETTER MANCHU ALI GALI LHA;Lo;0;L;;;;;N;;;;; 18B0;CANADIAN SYLLABICS OY;Lo;0;L;;;;;N;;;;; 18B1;CANADIAN SYLLABICS AY;Lo;0;L;;;;;N;;;;; 18B2;CANADIAN SYLLABICS AAY;Lo;0;L;;;;;N;;;;; 18B3;CANADIAN SYLLABICS WAY;Lo;0;L;;;;;N;;;;; 18B4;CANADIAN SYLLABICS POY;Lo;0;L;;;;;N;;;;; 18B5;CANADIAN SYLLABICS PAY;Lo;0;L;;;;;N;;;;; 18B6;CANADIAN SYLLABICS PWOY;Lo;0;L;;;;;N;;;;; 18B7;CANADIAN SYLLABICS TAY;Lo;0;L;;;;;N;;;;; 18B8;CANADIAN SYLLABICS KAY;Lo;0;L;;;;;N;;;;; 18B9;CANADIAN SYLLABICS KWAY;Lo;0;L;;;;;N;;;;; 18BA;CANADIAN SYLLABICS MAY;Lo;0;L;;;;;N;;;;; 18BB;CANADIAN SYLLABICS NOY;Lo;0;L;;;;;N;;;;; 18BC;CANADIAN SYLLABICS NAY;Lo;0;L;;;;;N;;;;; 18BD;CANADIAN SYLLABICS LAY;Lo;0;L;;;;;N;;;;; 18BE;CANADIAN SYLLABICS SOY;Lo;0;L;;;;;N;;;;; 18BF;CANADIAN SYLLABICS SAY;Lo;0;L;;;;;N;;;;; 18C0;CANADIAN SYLLABICS SHOY;Lo;0;L;;;;;N;;;;; 18C1;CANADIAN SYLLABICS SHAY;Lo;0;L;;;;;N;;;;; 18C2;CANADIAN SYLLABICS SHWOY;Lo;0;L;;;;;N;;;;; 18C3;CANADIAN SYLLABICS YOY;Lo;0;L;;;;;N;;;;; 18C4;CANADIAN SYLLABICS YAY;Lo;0;L;;;;;N;;;;; 18C5;CANADIAN SYLLABICS RAY;Lo;0;L;;;;;N;;;;; 18C6;CANADIAN SYLLABICS NWI;Lo;0;L;;;;;N;;;;; 18C7;CANADIAN SYLLABICS OJIBWAY NWI;Lo;0;L;;;;;N;;;;; 18C8;CANADIAN SYLLABICS NWII;Lo;0;L;;;;;N;;;;; 18C9;CANADIAN SYLLABICS OJIBWAY NWII;Lo;0;L;;;;;N;;;;; 18CA;CANADIAN SYLLABICS NWO;Lo;0;L;;;;;N;;;;; 18CB;CANADIAN SYLLABICS OJIBWAY NWO;Lo;0;L;;;;;N;;;;; 18CC;CANADIAN SYLLABICS NWOO;Lo;0;L;;;;;N;;;;; 18CD;CANADIAN SYLLABICS OJIBWAY NWOO;Lo;0;L;;;;;N;;;;; 18CE;CANADIAN SYLLABICS RWEE;Lo;0;L;;;;;N;;;;; 18CF;CANADIAN SYLLABICS RWI;Lo;0;L;;;;;N;;;;; 18D0;CANADIAN SYLLABICS RWII;Lo;0;L;;;;;N;;;;; 18D1;CANADIAN SYLLABICS RWO;Lo;0;L;;;;;N;;;;; 18D2;CANADIAN SYLLABICS RWOO;Lo;0;L;;;;;N;;;;; 18D3;CANADIAN SYLLABICS RWA;Lo;0;L;;;;;N;;;;; 18D4;CANADIAN SYLLABICS OJIBWAY P;Lo;0;L;;;;;N;;;;; 18D5;CANADIAN SYLLABICS OJIBWAY T;Lo;0;L;;;;;N;;;;; 18D6;CANADIAN SYLLABICS OJIBWAY K;Lo;0;L;;;;;N;;;;; 18D7;CANADIAN SYLLABICS OJIBWAY C;Lo;0;L;;;;;N;;;;; 18D8;CANADIAN SYLLABICS OJIBWAY M;Lo;0;L;;;;;N;;;;; 18D9;CANADIAN SYLLABICS OJIBWAY N;Lo;0;L;;;;;N;;;;; 18DA;CANADIAN SYLLABICS OJIBWAY S;Lo;0;L;;;;;N;;;;; 18DB;CANADIAN SYLLABICS OJIBWAY SH;Lo;0;L;;;;;N;;;;; 18DC;CANADIAN SYLLABICS EASTERN W;Lo;0;L;;;;;N;;;;; 18DD;CANADIAN SYLLABICS WESTERN W;Lo;0;L;;;;;N;;;;; 18DE;CANADIAN SYLLABICS FINAL SMALL RING;Lo;0;L;;;;;N;;;;; 18DF;CANADIAN SYLLABICS FINAL RAISED DOT;Lo;0;L;;;;;N;;;;; 18E0;CANADIAN SYLLABICS R-CREE RWE;Lo;0;L;;;;;N;;;;; 18E1;CANADIAN SYLLABICS WEST-CREE LOO;Lo;0;L;;;;;N;;;;; 18E2;CANADIAN SYLLABICS WEST-CREE LAA;Lo;0;L;;;;;N;;;;; 18E3;CANADIAN SYLLABICS THWE;Lo;0;L;;;;;N;;;;; 18E4;CANADIAN SYLLABICS THWA;Lo;0;L;;;;;N;;;;; 18E5;CANADIAN SYLLABICS TTHWE;Lo;0;L;;;;;N;;;;; 18E6;CANADIAN SYLLABICS TTHOO;Lo;0;L;;;;;N;;;;; 18E7;CANADIAN SYLLABICS TTHAA;Lo;0;L;;;;;N;;;;; 18E8;CANADIAN SYLLABICS TLHWE;Lo;0;L;;;;;N;;;;; 18E9;CANADIAN SYLLABICS TLHOO;Lo;0;L;;;;;N;;;;; 18EA;CANADIAN SYLLABICS SAYISI SHWE;Lo;0;L;;;;;N;;;;; 18EB;CANADIAN SYLLABICS SAYISI SHOO;Lo;0;L;;;;;N;;;;; 18EC;CANADIAN SYLLABICS SAYISI HOO;Lo;0;L;;;;;N;;;;; 18ED;CANADIAN SYLLABICS CARRIER GWU;Lo;0;L;;;;;N;;;;; 18EE;CANADIAN SYLLABICS CARRIER DENE GEE;Lo;0;L;;;;;N;;;;; 18EF;CANADIAN SYLLABICS CARRIER GAA;Lo;0;L;;;;;N;;;;; 18F0;CANADIAN SYLLABICS CARRIER GWA;Lo;0;L;;;;;N;;;;; 18F1;CANADIAN SYLLABICS SAYISI JUU;Lo;0;L;;;;;N;;;;; 18F2;CANADIAN SYLLABICS CARRIER JWA;Lo;0;L;;;;;N;;;;; 18F3;CANADIAN SYLLABICS BEAVER DENE L;Lo;0;L;;;;;N;;;;; 18F4;CANADIAN SYLLABICS BEAVER DENE R;Lo;0;L;;;;;N;;;;; 18F5;CANADIAN SYLLABICS CARRIER DENTAL S;Lo;0;L;;;;;N;;;;; 1900;LIMBU VOWEL-CARRIER LETTER;Lo;0;L;;;;;N;;;;; 1901;LIMBU LETTER KA;Lo;0;L;;;;;N;;;;; 1902;LIMBU LETTER KHA;Lo;0;L;;;;;N;;;;; 1903;LIMBU LETTER GA;Lo;0;L;;;;;N;;;;; 1904;LIMBU LETTER GHA;Lo;0;L;;;;;N;;;;; 1905;LIMBU LETTER NGA;Lo;0;L;;;;;N;;;;; 1906;LIMBU LETTER CA;Lo;0;L;;;;;N;;;;; 1907;LIMBU LETTER CHA;Lo;0;L;;;;;N;;;;; 1908;LIMBU LETTER JA;Lo;0;L;;;;;N;;;;; 1909;LIMBU LETTER JHA;Lo;0;L;;;;;N;;;;; 190A;LIMBU LETTER YAN;Lo;0;L;;;;;N;;;;; 190B;LIMBU LETTER TA;Lo;0;L;;;;;N;;;;; 190C;LIMBU LETTER THA;Lo;0;L;;;;;N;;;;; 190D;LIMBU LETTER DA;Lo;0;L;;;;;N;;;;; 190E;LIMBU LETTER DHA;Lo;0;L;;;;;N;;;;; 190F;LIMBU LETTER NA;Lo;0;L;;;;;N;;;;; 1910;LIMBU LETTER PA;Lo;0;L;;;;;N;;;;; 1911;LIMBU LETTER PHA;Lo;0;L;;;;;N;;;;; 1912;LIMBU LETTER BA;Lo;0;L;;;;;N;;;;; 1913;LIMBU LETTER BHA;Lo;0;L;;;;;N;;;;; 1914;LIMBU LETTER MA;Lo;0;L;;;;;N;;;;; 1915;LIMBU LETTER YA;Lo;0;L;;;;;N;;;;; 1916;LIMBU LETTER RA;Lo;0;L;;;;;N;;;;; 1917;LIMBU LETTER LA;Lo;0;L;;;;;N;;;;; 1918;LIMBU LETTER WA;Lo;0;L;;;;;N;;;;; 1919;LIMBU LETTER SHA;Lo;0;L;;;;;N;;;;; 191A;LIMBU LETTER SSA;Lo;0;L;;;;;N;;;;; 191B;LIMBU LETTER SA;Lo;0;L;;;;;N;;;;; 191C;LIMBU LETTER HA;Lo;0;L;;;;;N;;;;; 191D;LIMBU LETTER GYAN;Lo;0;L;;;;;N;;;;; 191E;LIMBU LETTER TRA;Lo;0;L;;;;;N;;;;; 1920;LIMBU VOWEL SIGN A;Mn;0;NSM;;;;;N;;;;; 1921;LIMBU VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 1922;LIMBU VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 1923;LIMBU VOWEL SIGN EE;Mc;0;L;;;;;N;;;;; 1924;LIMBU VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; 1925;LIMBU VOWEL SIGN OO;Mc;0;L;;;;;N;;;;; 1926;LIMBU VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; 1927;LIMBU VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 1928;LIMBU VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;; 1929;LIMBU SUBJOINED LETTER YA;Mc;0;L;;;;;N;;;;; 192A;LIMBU SUBJOINED LETTER RA;Mc;0;L;;;;;N;;;;; 192B;LIMBU SUBJOINED LETTER WA;Mc;0;L;;;;;N;;;;; 1930;LIMBU SMALL LETTER KA;Mc;0;L;;;;;N;;;;; 1931;LIMBU SMALL LETTER NGA;Mc;0;L;;;;;N;;;;; 1932;LIMBU SMALL LETTER ANUSVARA;Mn;0;NSM;;;;;N;;;;; 1933;LIMBU SMALL LETTER TA;Mc;0;L;;;;;N;;;;; 1934;LIMBU SMALL LETTER NA;Mc;0;L;;;;;N;;;;; 1935;LIMBU SMALL LETTER PA;Mc;0;L;;;;;N;;;;; 1936;LIMBU SMALL LETTER MA;Mc;0;L;;;;;N;;;;; 1937;LIMBU SMALL LETTER RA;Mc;0;L;;;;;N;;;;; 1938;LIMBU SMALL LETTER LA;Mc;0;L;;;;;N;;;;; 1939;LIMBU SIGN MUKPHRENG;Mn;222;NSM;;;;;N;;;;; 193A;LIMBU SIGN KEMPHRENG;Mn;230;NSM;;;;;N;;;;; 193B;LIMBU SIGN SA-I;Mn;220;NSM;;;;;N;;;;; 1940;LIMBU SIGN LOO;So;0;ON;;;;;N;;;;; 1944;LIMBU EXCLAMATION MARK;Po;0;ON;;;;;N;;;;; 1945;LIMBU QUESTION MARK;Po;0;ON;;;;;N;;;;; 1946;LIMBU DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 1947;LIMBU DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 1948;LIMBU DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 1949;LIMBU DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 194A;LIMBU DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 194B;LIMBU DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 194C;LIMBU DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 194D;LIMBU DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 194E;LIMBU DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 194F;LIMBU DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 1950;TAI LE LETTER KA;Lo;0;L;;;;;N;;;;; 1951;TAI LE LETTER XA;Lo;0;L;;;;;N;;;;; 1952;TAI LE LETTER NGA;Lo;0;L;;;;;N;;;;; 1953;TAI LE LETTER TSA;Lo;0;L;;;;;N;;;;; 1954;TAI LE LETTER SA;Lo;0;L;;;;;N;;;;; 1955;TAI LE LETTER YA;Lo;0;L;;;;;N;;;;; 1956;TAI LE LETTER TA;Lo;0;L;;;;;N;;;;; 1957;TAI LE LETTER THA;Lo;0;L;;;;;N;;;;; 1958;TAI LE LETTER LA;Lo;0;L;;;;;N;;;;; 1959;TAI LE LETTER PA;Lo;0;L;;;;;N;;;;; 195A;TAI LE LETTER PHA;Lo;0;L;;;;;N;;;;; 195B;TAI LE LETTER MA;Lo;0;L;;;;;N;;;;; 195C;TAI LE LETTER FA;Lo;0;L;;;;;N;;;;; 195D;TAI LE LETTER VA;Lo;0;L;;;;;N;;;;; 195E;TAI LE LETTER HA;Lo;0;L;;;;;N;;;;; 195F;TAI LE LETTER QA;Lo;0;L;;;;;N;;;;; 1960;TAI LE LETTER KHA;Lo;0;L;;;;;N;;;;; 1961;TAI LE LETTER TSHA;Lo;0;L;;;;;N;;;;; 1962;TAI LE LETTER NA;Lo;0;L;;;;;N;;;;; 1963;TAI LE LETTER A;Lo;0;L;;;;;N;;;;; 1964;TAI LE LETTER I;Lo;0;L;;;;;N;;;;; 1965;TAI LE LETTER EE;Lo;0;L;;;;;N;;;;; 1966;TAI LE LETTER EH;Lo;0;L;;;;;N;;;;; 1967;TAI LE LETTER U;Lo;0;L;;;;;N;;;;; 1968;TAI LE LETTER OO;Lo;0;L;;;;;N;;;;; 1969;TAI LE LETTER O;Lo;0;L;;;;;N;;;;; 196A;TAI LE LETTER UE;Lo;0;L;;;;;N;;;;; 196B;TAI LE LETTER E;Lo;0;L;;;;;N;;;;; 196C;TAI LE LETTER AUE;Lo;0;L;;;;;N;;;;; 196D;TAI LE LETTER AI;Lo;0;L;;;;;N;;;;; 1970;TAI LE LETTER TONE-2;Lo;0;L;;;;;N;;;;; 1971;TAI LE LETTER TONE-3;Lo;0;L;;;;;N;;;;; 1972;TAI LE LETTER TONE-4;Lo;0;L;;;;;N;;;;; 1973;TAI LE LETTER TONE-5;Lo;0;L;;;;;N;;;;; 1974;TAI LE LETTER TONE-6;Lo;0;L;;;;;N;;;;; 1980;NEW TAI LUE LETTER HIGH QA;Lo;0;L;;;;;N;;;;; 1981;NEW TAI LUE LETTER LOW QA;Lo;0;L;;;;;N;;;;; 1982;NEW TAI LUE LETTER HIGH KA;Lo;0;L;;;;;N;;;;; 1983;NEW TAI LUE LETTER HIGH XA;Lo;0;L;;;;;N;;;;; 1984;NEW TAI LUE LETTER HIGH NGA;Lo;0;L;;;;;N;;;;; 1985;NEW TAI LUE LETTER LOW KA;Lo;0;L;;;;;N;;;;; 1986;NEW TAI LUE LETTER LOW XA;Lo;0;L;;;;;N;;;;; 1987;NEW TAI LUE LETTER LOW NGA;Lo;0;L;;;;;N;;;;; 1988;NEW TAI LUE LETTER HIGH TSA;Lo;0;L;;;;;N;;;;; 1989;NEW TAI LUE LETTER HIGH SA;Lo;0;L;;;;;N;;;;; 198A;NEW TAI LUE LETTER HIGH YA;Lo;0;L;;;;;N;;;;; 198B;NEW TAI LUE LETTER LOW TSA;Lo;0;L;;;;;N;;;;; 198C;NEW TAI LUE LETTER LOW SA;Lo;0;L;;;;;N;;;;; 198D;NEW TAI LUE LETTER LOW YA;Lo;0;L;;;;;N;;;;; 198E;NEW TAI LUE LETTER HIGH TA;Lo;0;L;;;;;N;;;;; 198F;NEW TAI LUE LETTER HIGH THA;Lo;0;L;;;;;N;;;;; 1990;NEW TAI LUE LETTER HIGH NA;Lo;0;L;;;;;N;;;;; 1991;NEW TAI LUE LETTER LOW TA;Lo;0;L;;;;;N;;;;; 1992;NEW TAI LUE LETTER LOW THA;Lo;0;L;;;;;N;;;;; 1993;NEW TAI LUE LETTER LOW NA;Lo;0;L;;;;;N;;;;; 1994;NEW TAI LUE LETTER HIGH PA;Lo;0;L;;;;;N;;;;; 1995;NEW TAI LUE LETTER HIGH PHA;Lo;0;L;;;;;N;;;;; 1996;NEW TAI LUE LETTER HIGH MA;Lo;0;L;;;;;N;;;;; 1997;NEW TAI LUE LETTER LOW PA;Lo;0;L;;;;;N;;;;; 1998;NEW TAI LUE LETTER LOW PHA;Lo;0;L;;;;;N;;;;; 1999;NEW TAI LUE LETTER LOW MA;Lo;0;L;;;;;N;;;;; 199A;NEW TAI LUE LETTER HIGH FA;Lo;0;L;;;;;N;;;;; 199B;NEW TAI LUE LETTER HIGH VA;Lo;0;L;;;;;N;;;;; 199C;NEW TAI LUE LETTER HIGH LA;Lo;0;L;;;;;N;;;;; 199D;NEW TAI LUE LETTER LOW FA;Lo;0;L;;;;;N;;;;; 199E;NEW TAI LUE LETTER LOW VA;Lo;0;L;;;;;N;;;;; 199F;NEW TAI LUE LETTER LOW LA;Lo;0;L;;;;;N;;;;; 19A0;NEW TAI LUE LETTER HIGH HA;Lo;0;L;;;;;N;;;;; 19A1;NEW TAI LUE LETTER HIGH DA;Lo;0;L;;;;;N;;;;; 19A2;NEW TAI LUE LETTER HIGH BA;Lo;0;L;;;;;N;;;;; 19A3;NEW TAI LUE LETTER LOW HA;Lo;0;L;;;;;N;;;;; 19A4;NEW TAI LUE LETTER LOW DA;Lo;0;L;;;;;N;;;;; 19A5;NEW TAI LUE LETTER LOW BA;Lo;0;L;;;;;N;;;;; 19A6;NEW TAI LUE LETTER HIGH KVA;Lo;0;L;;;;;N;;;;; 19A7;NEW TAI LUE LETTER HIGH XVA;Lo;0;L;;;;;N;;;;; 19A8;NEW TAI LUE LETTER LOW KVA;Lo;0;L;;;;;N;;;;; 19A9;NEW TAI LUE LETTER LOW XVA;Lo;0;L;;;;;N;;;;; 19AA;NEW TAI LUE LETTER HIGH SUA;Lo;0;L;;;;;N;;;;; 19AB;NEW TAI LUE LETTER LOW SUA;Lo;0;L;;;;;N;;;;; 19B0;NEW TAI LUE VOWEL SIGN VOWEL SHORTENER;Lo;0;L;;;;;N;;;;; 19B1;NEW TAI LUE VOWEL SIGN AA;Lo;0;L;;;;;N;;;;; 19B2;NEW TAI LUE VOWEL SIGN II;Lo;0;L;;;;;N;;;;; 19B3;NEW TAI LUE VOWEL SIGN U;Lo;0;L;;;;;N;;;;; 19B4;NEW TAI LUE VOWEL SIGN UU;Lo;0;L;;;;;N;;;;; 19B5;NEW TAI LUE VOWEL SIGN E;Lo;0;L;;;;;N;;;;; 19B6;NEW TAI LUE VOWEL SIGN AE;Lo;0;L;;;;;N;;;;; 19B7;NEW TAI LUE VOWEL SIGN O;Lo;0;L;;;;;N;;;;; 19B8;NEW TAI LUE VOWEL SIGN OA;Lo;0;L;;;;;N;;;;; 19B9;NEW TAI LUE VOWEL SIGN UE;Lo;0;L;;;;;N;;;;; 19BA;NEW TAI LUE VOWEL SIGN AY;Lo;0;L;;;;;N;;;;; 19BB;NEW TAI LUE VOWEL SIGN AAY;Lo;0;L;;;;;N;;;;; 19BC;NEW TAI LUE VOWEL SIGN UY;Lo;0;L;;;;;N;;;;; 19BD;NEW TAI LUE VOWEL SIGN OY;Lo;0;L;;;;;N;;;;; 19BE;NEW TAI LUE VOWEL SIGN OAY;Lo;0;L;;;;;N;;;;; 19BF;NEW TAI LUE VOWEL SIGN UEY;Lo;0;L;;;;;N;;;;; 19C0;NEW TAI LUE VOWEL SIGN IY;Lo;0;L;;;;;N;;;;; 19C1;NEW TAI LUE LETTER FINAL V;Lo;0;L;;;;;N;;;;; 19C2;NEW TAI LUE LETTER FINAL NG;Lo;0;L;;;;;N;;;;; 19C3;NEW TAI LUE LETTER FINAL N;Lo;0;L;;;;;N;;;;; 19C4;NEW TAI LUE LETTER FINAL M;Lo;0;L;;;;;N;;;;; 19C5;NEW TAI LUE LETTER FINAL K;Lo;0;L;;;;;N;;;;; 19C6;NEW TAI LUE LETTER FINAL D;Lo;0;L;;;;;N;;;;; 19C7;NEW TAI LUE LETTER FINAL B;Lo;0;L;;;;;N;;;;; 19C8;NEW TAI LUE TONE MARK-1;Lo;0;L;;;;;N;;;;; 19C9;NEW TAI LUE TONE MARK-2;Lo;0;L;;;;;N;;;;; 19D0;NEW TAI LUE DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 19D1;NEW TAI LUE DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 19D2;NEW TAI LUE DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 19D3;NEW TAI LUE DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 19D4;NEW TAI LUE DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 19D5;NEW TAI LUE DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 19D6;NEW TAI LUE DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 19D7;NEW TAI LUE DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 19D8;NEW TAI LUE DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 19D9;NEW TAI LUE DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 19DA;NEW TAI LUE THAM DIGIT ONE;No;0;L;;;1;1;N;;;;; 19DE;NEW TAI LUE SIGN LAE;So;0;ON;;;;;N;;;;; 19DF;NEW TAI LUE SIGN LAEV;So;0;ON;;;;;N;;;;; 19E0;KHMER SYMBOL PATHAMASAT;So;0;ON;;;;;N;;;;; 19E1;KHMER SYMBOL MUOY KOET;So;0;ON;;;;;N;;;;; 19E2;KHMER SYMBOL PII KOET;So;0;ON;;;;;N;;;;; 19E3;KHMER SYMBOL BEI KOET;So;0;ON;;;;;N;;;;; 19E4;KHMER SYMBOL BUON KOET;So;0;ON;;;;;N;;;;; 19E5;KHMER SYMBOL PRAM KOET;So;0;ON;;;;;N;;;;; 19E6;KHMER SYMBOL PRAM-MUOY KOET;So;0;ON;;;;;N;;;;; 19E7;KHMER SYMBOL PRAM-PII KOET;So;0;ON;;;;;N;;;;; 19E8;KHMER SYMBOL PRAM-BEI KOET;So;0;ON;;;;;N;;;;; 19E9;KHMER SYMBOL PRAM-BUON KOET;So;0;ON;;;;;N;;;;; 19EA;KHMER SYMBOL DAP KOET;So;0;ON;;;;;N;;;;; 19EB;KHMER SYMBOL DAP-MUOY KOET;So;0;ON;;;;;N;;;;; 19EC;KHMER SYMBOL DAP-PII KOET;So;0;ON;;;;;N;;;;; 19ED;KHMER SYMBOL DAP-BEI KOET;So;0;ON;;;;;N;;;;; 19EE;KHMER SYMBOL DAP-BUON KOET;So;0;ON;;;;;N;;;;; 19EF;KHMER SYMBOL DAP-PRAM KOET;So;0;ON;;;;;N;;;;; 19F0;KHMER SYMBOL TUTEYASAT;So;0;ON;;;;;N;;;;; 19F1;KHMER SYMBOL MUOY ROC;So;0;ON;;;;;N;;;;; 19F2;KHMER SYMBOL PII ROC;So;0;ON;;;;;N;;;;; 19F3;KHMER SYMBOL BEI ROC;So;0;ON;;;;;N;;;;; 19F4;KHMER SYMBOL BUON ROC;So;0;ON;;;;;N;;;;; 19F5;KHMER SYMBOL PRAM ROC;So;0;ON;;;;;N;;;;; 19F6;KHMER SYMBOL PRAM-MUOY ROC;So;0;ON;;;;;N;;;;; 19F7;KHMER SYMBOL PRAM-PII ROC;So;0;ON;;;;;N;;;;; 19F8;KHMER SYMBOL PRAM-BEI ROC;So;0;ON;;;;;N;;;;; 19F9;KHMER SYMBOL PRAM-BUON ROC;So;0;ON;;;;;N;;;;; 19FA;KHMER SYMBOL DAP ROC;So;0;ON;;;;;N;;;;; 19FB;KHMER SYMBOL DAP-MUOY ROC;So;0;ON;;;;;N;;;;; 19FC;KHMER SYMBOL DAP-PII ROC;So;0;ON;;;;;N;;;;; 19FD;KHMER SYMBOL DAP-BEI ROC;So;0;ON;;;;;N;;;;; 19FE;KHMER SYMBOL DAP-BUON ROC;So;0;ON;;;;;N;;;;; 19FF;KHMER SYMBOL DAP-PRAM ROC;So;0;ON;;;;;N;;;;; 1A00;BUGINESE LETTER KA;Lo;0;L;;;;;N;;;;; 1A01;BUGINESE LETTER GA;Lo;0;L;;;;;N;;;;; 1A02;BUGINESE LETTER NGA;Lo;0;L;;;;;N;;;;; 1A03;BUGINESE LETTER NGKA;Lo;0;L;;;;;N;;;;; 1A04;BUGINESE LETTER PA;Lo;0;L;;;;;N;;;;; 1A05;BUGINESE LETTER BA;Lo;0;L;;;;;N;;;;; 1A06;BUGINESE LETTER MA;Lo;0;L;;;;;N;;;;; 1A07;BUGINESE LETTER MPA;Lo;0;L;;;;;N;;;;; 1A08;BUGINESE LETTER TA;Lo;0;L;;;;;N;;;;; 1A09;BUGINESE LETTER DA;Lo;0;L;;;;;N;;;;; 1A0A;BUGINESE LETTER NA;Lo;0;L;;;;;N;;;;; 1A0B;BUGINESE LETTER NRA;Lo;0;L;;;;;N;;;;; 1A0C;BUGINESE LETTER CA;Lo;0;L;;;;;N;;;;; 1A0D;BUGINESE LETTER JA;Lo;0;L;;;;;N;;;;; 1A0E;BUGINESE LETTER NYA;Lo;0;L;;;;;N;;;;; 1A0F;BUGINESE LETTER NYCA;Lo;0;L;;;;;N;;;;; 1A10;BUGINESE LETTER YA;Lo;0;L;;;;;N;;;;; 1A11;BUGINESE LETTER RA;Lo;0;L;;;;;N;;;;; 1A12;BUGINESE LETTER LA;Lo;0;L;;;;;N;;;;; 1A13;BUGINESE LETTER VA;Lo;0;L;;;;;N;;;;; 1A14;BUGINESE LETTER SA;Lo;0;L;;;;;N;;;;; 1A15;BUGINESE LETTER A;Lo;0;L;;;;;N;;;;; 1A16;BUGINESE LETTER HA;Lo;0;L;;;;;N;;;;; 1A17;BUGINESE VOWEL SIGN I;Mn;230;NSM;;;;;N;;;;; 1A18;BUGINESE VOWEL SIGN U;Mn;220;NSM;;;;;N;;;;; 1A19;BUGINESE VOWEL SIGN E;Mc;0;L;;;;;N;;;;; 1A1A;BUGINESE VOWEL SIGN O;Mc;0;L;;;;;N;;;;; 1A1B;BUGINESE VOWEL SIGN AE;Mn;0;NSM;;;;;N;;;;; 1A1E;BUGINESE PALLAWA;Po;0;L;;;;;N;;;;; 1A1F;BUGINESE END OF SECTION;Po;0;L;;;;;N;;;;; 1A20;TAI THAM LETTER HIGH KA;Lo;0;L;;;;;N;;;;; 1A21;TAI THAM LETTER HIGH KHA;Lo;0;L;;;;;N;;;;; 1A22;TAI THAM LETTER HIGH KXA;Lo;0;L;;;;;N;;;;; 1A23;TAI THAM LETTER LOW KA;Lo;0;L;;;;;N;;;;; 1A24;TAI THAM LETTER LOW KXA;Lo;0;L;;;;;N;;;;; 1A25;TAI THAM LETTER LOW KHA;Lo;0;L;;;;;N;;;;; 1A26;TAI THAM LETTER NGA;Lo;0;L;;;;;N;;;;; 1A27;TAI THAM LETTER HIGH CA;Lo;0;L;;;;;N;;;;; 1A28;TAI THAM LETTER HIGH CHA;Lo;0;L;;;;;N;;;;; 1A29;TAI THAM LETTER LOW CA;Lo;0;L;;;;;N;;;;; 1A2A;TAI THAM LETTER LOW SA;Lo;0;L;;;;;N;;;;; 1A2B;TAI THAM LETTER LOW CHA;Lo;0;L;;;;;N;;;;; 1A2C;TAI THAM LETTER NYA;Lo;0;L;;;;;N;;;;; 1A2D;TAI THAM LETTER RATA;Lo;0;L;;;;;N;;;;; 1A2E;TAI THAM LETTER HIGH RATHA;Lo;0;L;;;;;N;;;;; 1A2F;TAI THAM LETTER DA;Lo;0;L;;;;;N;;;;; 1A30;TAI THAM LETTER LOW RATHA;Lo;0;L;;;;;N;;;;; 1A31;TAI THAM LETTER RANA;Lo;0;L;;;;;N;;;;; 1A32;TAI THAM LETTER HIGH TA;Lo;0;L;;;;;N;;;;; 1A33;TAI THAM LETTER HIGH THA;Lo;0;L;;;;;N;;;;; 1A34;TAI THAM LETTER LOW TA;Lo;0;L;;;;;N;;;;; 1A35;TAI THAM LETTER LOW THA;Lo;0;L;;;;;N;;;;; 1A36;TAI THAM LETTER NA;Lo;0;L;;;;;N;;;;; 1A37;TAI THAM LETTER BA;Lo;0;L;;;;;N;;;;; 1A38;TAI THAM LETTER HIGH PA;Lo;0;L;;;;;N;;;;; 1A39;TAI THAM LETTER HIGH PHA;Lo;0;L;;;;;N;;;;; 1A3A;TAI THAM LETTER HIGH FA;Lo;0;L;;;;;N;;;;; 1A3B;TAI THAM LETTER LOW PA;Lo;0;L;;;;;N;;;;; 1A3C;TAI THAM LETTER LOW FA;Lo;0;L;;;;;N;;;;; 1A3D;TAI THAM LETTER LOW PHA;Lo;0;L;;;;;N;;;;; 1A3E;TAI THAM LETTER MA;Lo;0;L;;;;;N;;;;; 1A3F;TAI THAM LETTER LOW YA;Lo;0;L;;;;;N;;;;; 1A40;TAI THAM LETTER HIGH YA;Lo;0;L;;;;;N;;;;; 1A41;TAI THAM LETTER RA;Lo;0;L;;;;;N;;;;; 1A42;TAI THAM LETTER RUE;Lo;0;L;;;;;N;;;;; 1A43;TAI THAM LETTER LA;Lo;0;L;;;;;N;;;;; 1A44;TAI THAM LETTER LUE;Lo;0;L;;;;;N;;;;; 1A45;TAI THAM LETTER WA;Lo;0;L;;;;;N;;;;; 1A46;TAI THAM LETTER HIGH SHA;Lo;0;L;;;;;N;;;;; 1A47;TAI THAM LETTER HIGH SSA;Lo;0;L;;;;;N;;;;; 1A48;TAI THAM LETTER HIGH SA;Lo;0;L;;;;;N;;;;; 1A49;TAI THAM LETTER HIGH HA;Lo;0;L;;;;;N;;;;; 1A4A;TAI THAM LETTER LLA;Lo;0;L;;;;;N;;;;; 1A4B;TAI THAM LETTER A;Lo;0;L;;;;;N;;;;; 1A4C;TAI THAM LETTER LOW HA;Lo;0;L;;;;;N;;;;; 1A4D;TAI THAM LETTER I;Lo;0;L;;;;;N;;;;; 1A4E;TAI THAM LETTER II;Lo;0;L;;;;;N;;;;; 1A4F;TAI THAM LETTER U;Lo;0;L;;;;;N;;;;; 1A50;TAI THAM LETTER UU;Lo;0;L;;;;;N;;;;; 1A51;TAI THAM LETTER EE;Lo;0;L;;;;;N;;;;; 1A52;TAI THAM LETTER OO;Lo;0;L;;;;;N;;;;; 1A53;TAI THAM LETTER LAE;Lo;0;L;;;;;N;;;;; 1A54;TAI THAM LETTER GREAT SA;Lo;0;L;;;;;N;;;;; 1A55;TAI THAM CONSONANT SIGN MEDIAL RA;Mc;0;L;;;;;N;;;;; 1A56;TAI THAM CONSONANT SIGN MEDIAL LA;Mn;0;NSM;;;;;N;;;;; 1A57;TAI THAM CONSONANT SIGN LA TANG LAI;Mc;0;L;;;;;N;;;;; 1A58;TAI THAM SIGN MAI KANG LAI;Mn;0;NSM;;;;;N;;;;; 1A59;TAI THAM CONSONANT SIGN FINAL NGA;Mn;0;NSM;;;;;N;;;;; 1A5A;TAI THAM CONSONANT SIGN LOW PA;Mn;0;NSM;;;;;N;;;;; 1A5B;TAI THAM CONSONANT SIGN HIGH RATHA OR LOW PA;Mn;0;NSM;;;;;N;;;;; 1A5C;TAI THAM CONSONANT SIGN MA;Mn;0;NSM;;;;;N;;;;; 1A5D;TAI THAM CONSONANT SIGN BA;Mn;0;NSM;;;;;N;;;;; 1A5E;TAI THAM CONSONANT SIGN SA;Mn;0;NSM;;;;;N;;;;; 1A60;TAI THAM SIGN SAKOT;Mn;9;NSM;;;;;N;;;;; 1A61;TAI THAM VOWEL SIGN A;Mc;0;L;;;;;N;;;;; 1A62;TAI THAM VOWEL SIGN MAI SAT;Mn;0;NSM;;;;;N;;;;; 1A63;TAI THAM VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 1A64;TAI THAM VOWEL SIGN TALL AA;Mc;0;L;;;;;N;;;;; 1A65;TAI THAM VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 1A66;TAI THAM VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; 1A67;TAI THAM VOWEL SIGN UE;Mn;0;NSM;;;;;N;;;;; 1A68;TAI THAM VOWEL SIGN UUE;Mn;0;NSM;;;;;N;;;;; 1A69;TAI THAM VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 1A6A;TAI THAM VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 1A6B;TAI THAM VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;; 1A6C;TAI THAM VOWEL SIGN OA BELOW;Mn;0;NSM;;;;;N;;;;; 1A6D;TAI THAM VOWEL SIGN OY;Mc;0;L;;;;;N;;;;; 1A6E;TAI THAM VOWEL SIGN E;Mc;0;L;;;;;N;;;;; 1A6F;TAI THAM VOWEL SIGN AE;Mc;0;L;;;;;N;;;;; 1A70;TAI THAM VOWEL SIGN OO;Mc;0;L;;;;;N;;;;; 1A71;TAI THAM VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; 1A72;TAI THAM VOWEL SIGN THAM AI;Mc;0;L;;;;;N;;;;; 1A73;TAI THAM VOWEL SIGN OA ABOVE;Mn;0;NSM;;;;;N;;;;; 1A74;TAI THAM SIGN MAI KANG;Mn;0;NSM;;;;;N;;;;; 1A75;TAI THAM SIGN TONE-1;Mn;230;NSM;;;;;N;;;;; 1A76;TAI THAM SIGN TONE-2;Mn;230;NSM;;;;;N;;;;; 1A77;TAI THAM SIGN KHUEN TONE-3;Mn;230;NSM;;;;;N;;;;; 1A78;TAI THAM SIGN KHUEN TONE-4;Mn;230;NSM;;;;;N;;;;; 1A79;TAI THAM SIGN KHUEN TONE-5;Mn;230;NSM;;;;;N;;;;; 1A7A;TAI THAM SIGN RA HAAM;Mn;230;NSM;;;;;N;;;;; 1A7B;TAI THAM SIGN MAI SAM;Mn;230;NSM;;;;;N;;;;; 1A7C;TAI THAM SIGN KHUEN-LUE KARAN;Mn;230;NSM;;;;;N;;;;; 1A7F;TAI THAM COMBINING CRYPTOGRAMMIC DOT;Mn;220;NSM;;;;;N;;;;; 1A80;TAI THAM HORA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 1A81;TAI THAM HORA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 1A82;TAI THAM HORA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 1A83;TAI THAM HORA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 1A84;TAI THAM HORA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 1A85;TAI THAM HORA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 1A86;TAI THAM HORA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 1A87;TAI THAM HORA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 1A88;TAI THAM HORA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 1A89;TAI THAM HORA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 1A90;TAI THAM THAM DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 1A91;TAI THAM THAM DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 1A92;TAI THAM THAM DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 1A93;TAI THAM THAM DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 1A94;TAI THAM THAM DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 1A95;TAI THAM THAM DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 1A96;TAI THAM THAM DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 1A97;TAI THAM THAM DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 1A98;TAI THAM THAM DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 1A99;TAI THAM THAM DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 1AA0;TAI THAM SIGN WIANG;Po;0;L;;;;;N;;;;; 1AA1;TAI THAM SIGN WIANGWAAK;Po;0;L;;;;;N;;;;; 1AA2;TAI THAM SIGN SAWAN;Po;0;L;;;;;N;;;;; 1AA3;TAI THAM SIGN KEOW;Po;0;L;;;;;N;;;;; 1AA4;TAI THAM SIGN HOY;Po;0;L;;;;;N;;;;; 1AA5;TAI THAM SIGN DOKMAI;Po;0;L;;;;;N;;;;; 1AA6;TAI THAM SIGN REVERSED ROTATED RANA;Po;0;L;;;;;N;;;;; 1AA7;TAI THAM SIGN MAI YAMOK;Lm;0;L;;;;;N;;;;; 1AA8;TAI THAM SIGN KAAN;Po;0;L;;;;;N;;;;; 1AA9;TAI THAM SIGN KAANKUU;Po;0;L;;;;;N;;;;; 1AAA;TAI THAM SIGN SATKAAN;Po;0;L;;;;;N;;;;; 1AAB;TAI THAM SIGN SATKAANKUU;Po;0;L;;;;;N;;;;; 1AAC;TAI THAM SIGN HANG;Po;0;L;;;;;N;;;;; 1AAD;TAI THAM SIGN CAANG;Po;0;L;;;;;N;;;;; 1AB0;COMBINING DOUBLED CIRCUMFLEX ACCENT;Mn;230;NSM;;;;;N;;;;; 1AB1;COMBINING DIAERESIS-RING;Mn;230;NSM;;;;;N;;;;; 1AB2;COMBINING INFINITY;Mn;230;NSM;;;;;N;;;;; 1AB3;COMBINING DOWNWARDS ARROW;Mn;230;NSM;;;;;N;;;;; 1AB4;COMBINING TRIPLE DOT;Mn;230;NSM;;;;;N;;;;; 1AB5;COMBINING X-X BELOW;Mn;220;NSM;;;;;N;;;;; 1AB6;COMBINING WIGGLY LINE BELOW;Mn;220;NSM;;;;;N;;;;; 1AB7;COMBINING OPEN MARK BELOW;Mn;220;NSM;;;;;N;;;;; 1AB8;COMBINING DOUBLE OPEN MARK BELOW;Mn;220;NSM;;;;;N;;;;; 1AB9;COMBINING LIGHT CENTRALIZATION STROKE BELOW;Mn;220;NSM;;;;;N;;;;; 1ABA;COMBINING STRONG CENTRALIZATION STROKE BELOW;Mn;220;NSM;;;;;N;;;;; 1ABB;COMBINING PARENTHESES ABOVE;Mn;230;NSM;;;;;N;;;;; 1ABC;COMBINING DOUBLE PARENTHESES ABOVE;Mn;230;NSM;;;;;N;;;;; 1ABD;COMBINING PARENTHESES BELOW;Mn;220;NSM;;;;;N;;;;; 1ABE;COMBINING PARENTHESES OVERLAY;Me;0;NSM;;;;;N;;;;; 1ABF;COMBINING LATIN SMALL LETTER W BELOW;Mn;220;NSM;;;;;N;;;;; 1AC0;COMBINING LATIN SMALL LETTER TURNED W BELOW;Mn;220;NSM;;;;;N;;;;; 1AC1;COMBINING LEFT PARENTHESIS ABOVE LEFT;Mn;230;NSM;;;;;N;;;;; 1AC2;COMBINING RIGHT PARENTHESIS ABOVE RIGHT;Mn;230;NSM;;;;;N;;;;; 1AC3;COMBINING LEFT PARENTHESIS BELOW LEFT;Mn;220;NSM;;;;;N;;;;; 1AC4;COMBINING RIGHT PARENTHESIS BELOW RIGHT;Mn;220;NSM;;;;;N;;;;; 1AC5;COMBINING SQUARE BRACKETS ABOVE;Mn;230;NSM;;;;;N;;;;; 1AC6;COMBINING NUMBER SIGN ABOVE;Mn;230;NSM;;;;;N;;;;; 1AC7;COMBINING INVERTED DOUBLE ARCH ABOVE;Mn;230;NSM;;;;;N;;;;; 1AC8;COMBINING PLUS SIGN ABOVE;Mn;230;NSM;;;;;N;;;;; 1AC9;COMBINING DOUBLE PLUS SIGN ABOVE;Mn;230;NSM;;;;;N;;;;; 1ACA;COMBINING DOUBLE PLUS SIGN BELOW;Mn;220;NSM;;;;;N;;;;; 1ACB;COMBINING TRIPLE ACUTE ACCENT;Mn;230;NSM;;;;;N;;;;; 1ACC;COMBINING LATIN SMALL LETTER INSULAR G;Mn;230;NSM;;;;;N;;;;; 1ACD;COMBINING LATIN SMALL LETTER INSULAR R;Mn;230;NSM;;;;;N;;;;; 1ACE;COMBINING LATIN SMALL LETTER INSULAR T;Mn;230;NSM;;;;;N;;;;; 1B00;BALINESE SIGN ULU RICEM;Mn;0;NSM;;;;;N;;;;; 1B01;BALINESE SIGN ULU CANDRA;Mn;0;NSM;;;;;N;;;;; 1B02;BALINESE SIGN CECEK;Mn;0;NSM;;;;;N;;;;; 1B03;BALINESE SIGN SURANG;Mn;0;NSM;;;;;N;;;;; 1B04;BALINESE SIGN BISAH;Mc;0;L;;;;;N;;;;; 1B05;BALINESE LETTER AKARA;Lo;0;L;;;;;N;;;;; 1B06;BALINESE LETTER AKARA TEDUNG;Lo;0;L;1B05 1B35;;;;N;;;;; 1B07;BALINESE LETTER IKARA;Lo;0;L;;;;;N;;;;; 1B08;BALINESE LETTER IKARA TEDUNG;Lo;0;L;1B07 1B35;;;;N;;;;; 1B09;BALINESE LETTER UKARA;Lo;0;L;;;;;N;;;;; 1B0A;BALINESE LETTER UKARA TEDUNG;Lo;0;L;1B09 1B35;;;;N;;;;; 1B0B;BALINESE LETTER RA REPA;Lo;0;L;;;;;N;;;;; 1B0C;BALINESE LETTER RA REPA TEDUNG;Lo;0;L;1B0B 1B35;;;;N;;;;; 1B0D;BALINESE LETTER LA LENGA;Lo;0;L;;;;;N;;;;; 1B0E;BALINESE LETTER LA LENGA TEDUNG;Lo;0;L;1B0D 1B35;;;;N;;;;; 1B0F;BALINESE LETTER EKARA;Lo;0;L;;;;;N;;;;; 1B10;BALINESE LETTER AIKARA;Lo;0;L;;;;;N;;;;; 1B11;BALINESE LETTER OKARA;Lo;0;L;;;;;N;;;;; 1B12;BALINESE LETTER OKARA TEDUNG;Lo;0;L;1B11 1B35;;;;N;;;;; 1B13;BALINESE LETTER KA;Lo;0;L;;;;;N;;;;; 1B14;BALINESE LETTER KA MAHAPRANA;Lo;0;L;;;;;N;;;;; 1B15;BALINESE LETTER GA;Lo;0;L;;;;;N;;;;; 1B16;BALINESE LETTER GA GORA;Lo;0;L;;;;;N;;;;; 1B17;BALINESE LETTER NGA;Lo;0;L;;;;;N;;;;; 1B18;BALINESE LETTER CA;Lo;0;L;;;;;N;;;;; 1B19;BALINESE LETTER CA LACA;Lo;0;L;;;;;N;;;;; 1B1A;BALINESE LETTER JA;Lo;0;L;;;;;N;;;;; 1B1B;BALINESE LETTER JA JERA;Lo;0;L;;;;;N;;;;; 1B1C;BALINESE LETTER NYA;Lo;0;L;;;;;N;;;;; 1B1D;BALINESE LETTER TA LATIK;Lo;0;L;;;;;N;;;;; 1B1E;BALINESE LETTER TA MURDA MAHAPRANA;Lo;0;L;;;;;N;;;;; 1B1F;BALINESE LETTER DA MURDA ALPAPRANA;Lo;0;L;;;;;N;;;;; 1B20;BALINESE LETTER DA MURDA MAHAPRANA;Lo;0;L;;;;;N;;;;; 1B21;BALINESE LETTER NA RAMBAT;Lo;0;L;;;;;N;;;;; 1B22;BALINESE LETTER TA;Lo;0;L;;;;;N;;;;; 1B23;BALINESE LETTER TA TAWA;Lo;0;L;;;;;N;;;;; 1B24;BALINESE LETTER DA;Lo;0;L;;;;;N;;;;; 1B25;BALINESE LETTER DA MADU;Lo;0;L;;;;;N;;;;; 1B26;BALINESE LETTER NA;Lo;0;L;;;;;N;;;;; 1B27;BALINESE LETTER PA;Lo;0;L;;;;;N;;;;; 1B28;BALINESE LETTER PA KAPAL;Lo;0;L;;;;;N;;;;; 1B29;BALINESE LETTER BA;Lo;0;L;;;;;N;;;;; 1B2A;BALINESE LETTER BA KEMBANG;Lo;0;L;;;;;N;;;;; 1B2B;BALINESE LETTER MA;Lo;0;L;;;;;N;;;;; 1B2C;BALINESE LETTER YA;Lo;0;L;;;;;N;;;;; 1B2D;BALINESE LETTER RA;Lo;0;L;;;;;N;;;;; 1B2E;BALINESE LETTER LA;Lo;0;L;;;;;N;;;;; 1B2F;BALINESE LETTER WA;Lo;0;L;;;;;N;;;;; 1B30;BALINESE LETTER SA SAGA;Lo;0;L;;;;;N;;;;; 1B31;BALINESE LETTER SA SAPA;Lo;0;L;;;;;N;;;;; 1B32;BALINESE LETTER SA;Lo;0;L;;;;;N;;;;; 1B33;BALINESE LETTER HA;Lo;0;L;;;;;N;;;;; 1B34;BALINESE SIGN REREKAN;Mn;7;NSM;;;;;N;;;;; 1B35;BALINESE VOWEL SIGN TEDUNG;Mc;0;L;;;;;N;;;;; 1B36;BALINESE VOWEL SIGN ULU;Mn;0;NSM;;;;;N;;;;; 1B37;BALINESE VOWEL SIGN ULU SARI;Mn;0;NSM;;;;;N;;;;; 1B38;BALINESE VOWEL SIGN SUKU;Mn;0;NSM;;;;;N;;;;; 1B39;BALINESE VOWEL SIGN SUKU ILUT;Mn;0;NSM;;;;;N;;;;; 1B3A;BALINESE VOWEL SIGN RA REPA;Mn;0;NSM;;;;;N;;;;; 1B3B;BALINESE VOWEL SIGN RA REPA TEDUNG;Mc;0;L;1B3A 1B35;;;;N;;;;; 1B3C;BALINESE VOWEL SIGN LA LENGA;Mn;0;NSM;;;;;N;;;;; 1B3D;BALINESE VOWEL SIGN LA LENGA TEDUNG;Mc;0;L;1B3C 1B35;;;;N;;;;; 1B3E;BALINESE VOWEL SIGN TALING;Mc;0;L;;;;;N;;;;; 1B3F;BALINESE VOWEL SIGN TALING REPA;Mc;0;L;;;;;N;;;;; 1B40;BALINESE VOWEL SIGN TALING TEDUNG;Mc;0;L;1B3E 1B35;;;;N;;;;; 1B41;BALINESE VOWEL SIGN TALING REPA TEDUNG;Mc;0;L;1B3F 1B35;;;;N;;;;; 1B42;BALINESE VOWEL SIGN PEPET;Mn;0;NSM;;;;;N;;;;; 1B43;BALINESE VOWEL SIGN PEPET TEDUNG;Mc;0;L;1B42 1B35;;;;N;;;;; 1B44;BALINESE ADEG ADEG;Mc;9;L;;;;;N;;;;; 1B45;BALINESE LETTER KAF SASAK;Lo;0;L;;;;;N;;;;; 1B46;BALINESE LETTER KHOT SASAK;Lo;0;L;;;;;N;;;;; 1B47;BALINESE LETTER TZIR SASAK;Lo;0;L;;;;;N;;;;; 1B48;BALINESE LETTER EF SASAK;Lo;0;L;;;;;N;;;;; 1B49;BALINESE LETTER VE SASAK;Lo;0;L;;;;;N;;;;; 1B4A;BALINESE LETTER ZAL SASAK;Lo;0;L;;;;;N;;;;; 1B4B;BALINESE LETTER ASYURA SASAK;Lo;0;L;;;;;N;;;;; 1B4C;BALINESE LETTER ARCHAIC JNYA;Lo;0;L;;;;;N;;;;; 1B50;BALINESE DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 1B51;BALINESE DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 1B52;BALINESE DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 1B53;BALINESE DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 1B54;BALINESE DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 1B55;BALINESE DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 1B56;BALINESE DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 1B57;BALINESE DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 1B58;BALINESE DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 1B59;BALINESE DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 1B5A;BALINESE PANTI;Po;0;L;;;;;N;;;;; 1B5B;BALINESE PAMADA;Po;0;L;;;;;N;;;;; 1B5C;BALINESE WINDU;Po;0;L;;;;;N;;;;; 1B5D;BALINESE CARIK PAMUNGKAH;Po;0;L;;;;;N;;;;; 1B5E;BALINESE CARIK SIKI;Po;0;L;;;;;N;;;;; 1B5F;BALINESE CARIK PAREREN;Po;0;L;;;;;N;;;;; 1B60;BALINESE PAMENENG;Po;0;L;;;;;N;;;;; 1B61;BALINESE MUSICAL SYMBOL DONG;So;0;L;;;;;N;;;;; 1B62;BALINESE MUSICAL SYMBOL DENG;So;0;L;;;;;N;;;;; 1B63;BALINESE MUSICAL SYMBOL DUNG;So;0;L;;;;;N;;;;; 1B64;BALINESE MUSICAL SYMBOL DANG;So;0;L;;;;;N;;;;; 1B65;BALINESE MUSICAL SYMBOL DANG SURANG;So;0;L;;;;;N;;;;; 1B66;BALINESE MUSICAL SYMBOL DING;So;0;L;;;;;N;;;;; 1B67;BALINESE MUSICAL SYMBOL DAENG;So;0;L;;;;;N;;;;; 1B68;BALINESE MUSICAL SYMBOL DEUNG;So;0;L;;;;;N;;;;; 1B69;BALINESE MUSICAL SYMBOL DAING;So;0;L;;;;;N;;;;; 1B6A;BALINESE MUSICAL SYMBOL DANG GEDE;So;0;L;;;;;N;;;;; 1B6B;BALINESE MUSICAL SYMBOL COMBINING TEGEH;Mn;230;NSM;;;;;N;;;;; 1B6C;BALINESE MUSICAL SYMBOL COMBINING ENDEP;Mn;220;NSM;;;;;N;;;;; 1B6D;BALINESE MUSICAL SYMBOL COMBINING KEMPUL;Mn;230;NSM;;;;;N;;;;; 1B6E;BALINESE MUSICAL SYMBOL COMBINING KEMPLI;Mn;230;NSM;;;;;N;;;;; 1B6F;BALINESE MUSICAL SYMBOL COMBINING JEGOGAN;Mn;230;NSM;;;;;N;;;;; 1B70;BALINESE MUSICAL SYMBOL COMBINING KEMPUL WITH JEGOGAN;Mn;230;NSM;;;;;N;;;;; 1B71;BALINESE MUSICAL SYMBOL COMBINING KEMPLI WITH JEGOGAN;Mn;230;NSM;;;;;N;;;;; 1B72;BALINESE MUSICAL SYMBOL COMBINING BENDE;Mn;230;NSM;;;;;N;;;;; 1B73;BALINESE MUSICAL SYMBOL COMBINING GONG;Mn;230;NSM;;;;;N;;;;; 1B74;BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG;So;0;L;;;;;N;;;;; 1B75;BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DAG;So;0;L;;;;;N;;;;; 1B76;BALINESE MUSICAL SYMBOL RIGHT-HAND CLOSED TUK;So;0;L;;;;;N;;;;; 1B77;BALINESE MUSICAL SYMBOL RIGHT-HAND CLOSED TAK;So;0;L;;;;;N;;;;; 1B78;BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PANG;So;0;L;;;;;N;;;;; 1B79;BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PUNG;So;0;L;;;;;N;;;;; 1B7A;BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLAK;So;0;L;;;;;N;;;;; 1B7B;BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLUK;So;0;L;;;;;N;;;;; 1B7C;BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING;So;0;L;;;;;N;;;;; 1B7D;BALINESE PANTI LANTANG;Po;0;L;;;;;N;;;;; 1B7E;BALINESE PAMADA LANTANG;Po;0;L;;;;;N;;;;; 1B80;SUNDANESE SIGN PANYECEK;Mn;0;NSM;;;;;N;;;;; 1B81;SUNDANESE SIGN PANGLAYAR;Mn;0;NSM;;;;;N;;;;; 1B82;SUNDANESE SIGN PANGWISAD;Mc;0;L;;;;;N;;;;; 1B83;SUNDANESE LETTER A;Lo;0;L;;;;;N;;;;; 1B84;SUNDANESE LETTER I;Lo;0;L;;;;;N;;;;; 1B85;SUNDANESE LETTER U;Lo;0;L;;;;;N;;;;; 1B86;SUNDANESE LETTER AE;Lo;0;L;;;;;N;;;;; 1B87;SUNDANESE LETTER O;Lo;0;L;;;;;N;;;;; 1B88;SUNDANESE LETTER E;Lo;0;L;;;;;N;;;;; 1B89;SUNDANESE LETTER EU;Lo;0;L;;;;;N;;;;; 1B8A;SUNDANESE LETTER KA;Lo;0;L;;;;;N;;;;; 1B8B;SUNDANESE LETTER QA;Lo;0;L;;;;;N;;;;; 1B8C;SUNDANESE LETTER GA;Lo;0;L;;;;;N;;;;; 1B8D;SUNDANESE LETTER NGA;Lo;0;L;;;;;N;;;;; 1B8E;SUNDANESE LETTER CA;Lo;0;L;;;;;N;;;;; 1B8F;SUNDANESE LETTER JA;Lo;0;L;;;;;N;;;;; 1B90;SUNDANESE LETTER ZA;Lo;0;L;;;;;N;;;;; 1B91;SUNDANESE LETTER NYA;Lo;0;L;;;;;N;;;;; 1B92;SUNDANESE LETTER TA;Lo;0;L;;;;;N;;;;; 1B93;SUNDANESE LETTER DA;Lo;0;L;;;;;N;;;;; 1B94;SUNDANESE LETTER NA;Lo;0;L;;;;;N;;;;; 1B95;SUNDANESE LETTER PA;Lo;0;L;;;;;N;;;;; 1B96;SUNDANESE LETTER FA;Lo;0;L;;;;;N;;;;; 1B97;SUNDANESE LETTER VA;Lo;0;L;;;;;N;;;;; 1B98;SUNDANESE LETTER BA;Lo;0;L;;;;;N;;;;; 1B99;SUNDANESE LETTER MA;Lo;0;L;;;;;N;;;;; 1B9A;SUNDANESE LETTER YA;Lo;0;L;;;;;N;;;;; 1B9B;SUNDANESE LETTER RA;Lo;0;L;;;;;N;;;;; 1B9C;SUNDANESE LETTER LA;Lo;0;L;;;;;N;;;;; 1B9D;SUNDANESE LETTER WA;Lo;0;L;;;;;N;;;;; 1B9E;SUNDANESE LETTER SA;Lo;0;L;;;;;N;;;;; 1B9F;SUNDANESE LETTER XA;Lo;0;L;;;;;N;;;;; 1BA0;SUNDANESE LETTER HA;Lo;0;L;;;;;N;;;;; 1BA1;SUNDANESE CONSONANT SIGN PAMINGKAL;Mc;0;L;;;;;N;;;;; 1BA2;SUNDANESE CONSONANT SIGN PANYAKRA;Mn;0;NSM;;;;;N;;;;; 1BA3;SUNDANESE CONSONANT SIGN PANYIKU;Mn;0;NSM;;;;;N;;;;; 1BA4;SUNDANESE VOWEL SIGN PANGHULU;Mn;0;NSM;;;;;N;;;;; 1BA5;SUNDANESE VOWEL SIGN PANYUKU;Mn;0;NSM;;;;;N;;;;; 1BA6;SUNDANESE VOWEL SIGN PANAELAENG;Mc;0;L;;;;;N;;;;; 1BA7;SUNDANESE VOWEL SIGN PANOLONG;Mc;0;L;;;;;N;;;;; 1BA8;SUNDANESE VOWEL SIGN PAMEPET;Mn;0;NSM;;;;;N;;;;; 1BA9;SUNDANESE VOWEL SIGN PANEULEUNG;Mn;0;NSM;;;;;N;;;;; 1BAA;SUNDANESE SIGN PAMAAEH;Mc;9;L;;;;;N;;;;; 1BAB;SUNDANESE SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 1BAC;SUNDANESE CONSONANT SIGN PASANGAN MA;Mn;0;NSM;;;;;N;;;;; 1BAD;SUNDANESE CONSONANT SIGN PASANGAN WA;Mn;0;NSM;;;;;N;;;;; 1BAE;SUNDANESE LETTER KHA;Lo;0;L;;;;;N;;;;; 1BAF;SUNDANESE LETTER SYA;Lo;0;L;;;;;N;;;;; 1BB0;SUNDANESE DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 1BB1;SUNDANESE DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 1BB2;SUNDANESE DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 1BB3;SUNDANESE DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 1BB4;SUNDANESE DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 1BB5;SUNDANESE DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 1BB6;SUNDANESE DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 1BB7;SUNDANESE DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 1BB8;SUNDANESE DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 1BB9;SUNDANESE DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 1BBA;SUNDANESE AVAGRAHA;Lo;0;L;;;;;N;;;;; 1BBB;SUNDANESE LETTER REU;Lo;0;L;;;;;N;;;;; 1BBC;SUNDANESE LETTER LEU;Lo;0;L;;;;;N;;;;; 1BBD;SUNDANESE LETTER BHA;Lo;0;L;;;;;N;;;;; 1BBE;SUNDANESE LETTER FINAL K;Lo;0;L;;;;;N;;;;; 1BBF;SUNDANESE LETTER FINAL M;Lo;0;L;;;;;N;;;;; 1BC0;BATAK LETTER A;Lo;0;L;;;;;N;;;;; 1BC1;BATAK LETTER SIMALUNGUN A;Lo;0;L;;;;;N;;;;; 1BC2;BATAK LETTER HA;Lo;0;L;;;;;N;;;;; 1BC3;BATAK LETTER SIMALUNGUN HA;Lo;0;L;;;;;N;;;;; 1BC4;BATAK LETTER MANDAILING HA;Lo;0;L;;;;;N;;;;; 1BC5;BATAK LETTER BA;Lo;0;L;;;;;N;;;;; 1BC6;BATAK LETTER KARO BA;Lo;0;L;;;;;N;;;;; 1BC7;BATAK LETTER PA;Lo;0;L;;;;;N;;;;; 1BC8;BATAK LETTER SIMALUNGUN PA;Lo;0;L;;;;;N;;;;; 1BC9;BATAK LETTER NA;Lo;0;L;;;;;N;;;;; 1BCA;BATAK LETTER MANDAILING NA;Lo;0;L;;;;;N;;;;; 1BCB;BATAK LETTER WA;Lo;0;L;;;;;N;;;;; 1BCC;BATAK LETTER SIMALUNGUN WA;Lo;0;L;;;;;N;;;;; 1BCD;BATAK LETTER PAKPAK WA;Lo;0;L;;;;;N;;;;; 1BCE;BATAK LETTER GA;Lo;0;L;;;;;N;;;;; 1BCF;BATAK LETTER SIMALUNGUN GA;Lo;0;L;;;;;N;;;;; 1BD0;BATAK LETTER JA;Lo;0;L;;;;;N;;;;; 1BD1;BATAK LETTER DA;Lo;0;L;;;;;N;;;;; 1BD2;BATAK LETTER RA;Lo;0;L;;;;;N;;;;; 1BD3;BATAK LETTER SIMALUNGUN RA;Lo;0;L;;;;;N;;;;; 1BD4;BATAK LETTER MA;Lo;0;L;;;;;N;;;;; 1BD5;BATAK LETTER SIMALUNGUN MA;Lo;0;L;;;;;N;;;;; 1BD6;BATAK LETTER SOUTHERN TA;Lo;0;L;;;;;N;;;;; 1BD7;BATAK LETTER NORTHERN TA;Lo;0;L;;;;;N;;;;; 1BD8;BATAK LETTER SA;Lo;0;L;;;;;N;;;;; 1BD9;BATAK LETTER SIMALUNGUN SA;Lo;0;L;;;;;N;;;;; 1BDA;BATAK LETTER MANDAILING SA;Lo;0;L;;;;;N;;;;; 1BDB;BATAK LETTER YA;Lo;0;L;;;;;N;;;;; 1BDC;BATAK LETTER SIMALUNGUN YA;Lo;0;L;;;;;N;;;;; 1BDD;BATAK LETTER NGA;Lo;0;L;;;;;N;;;;; 1BDE;BATAK LETTER LA;Lo;0;L;;;;;N;;;;; 1BDF;BATAK LETTER SIMALUNGUN LA;Lo;0;L;;;;;N;;;;; 1BE0;BATAK LETTER NYA;Lo;0;L;;;;;N;;;;; 1BE1;BATAK LETTER CA;Lo;0;L;;;;;N;;;;; 1BE2;BATAK LETTER NDA;Lo;0;L;;;;;N;;;;; 1BE3;BATAK LETTER MBA;Lo;0;L;;;;;N;;;;; 1BE4;BATAK LETTER I;Lo;0;L;;;;;N;;;;; 1BE5;BATAK LETTER U;Lo;0;L;;;;;N;;;;; 1BE6;BATAK SIGN TOMPI;Mn;7;NSM;;;;;N;;;;; 1BE7;BATAK VOWEL SIGN E;Mc;0;L;;;;;N;;;;; 1BE8;BATAK VOWEL SIGN PAKPAK E;Mn;0;NSM;;;;;N;;;;; 1BE9;BATAK VOWEL SIGN EE;Mn;0;NSM;;;;;N;;;;; 1BEA;BATAK VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 1BEB;BATAK VOWEL SIGN KARO I;Mc;0;L;;;;;N;;;;; 1BEC;BATAK VOWEL SIGN O;Mc;0;L;;;;;N;;;;; 1BED;BATAK VOWEL SIGN KARO O;Mn;0;NSM;;;;;N;;;;; 1BEE;BATAK VOWEL SIGN U;Mc;0;L;;;;;N;;;;; 1BEF;BATAK VOWEL SIGN U FOR SIMALUNGUN SA;Mn;0;NSM;;;;;N;;;;; 1BF0;BATAK CONSONANT SIGN NG;Mn;0;NSM;;;;;N;;;;; 1BF1;BATAK CONSONANT SIGN H;Mn;0;NSM;;;;;N;;;;; 1BF2;BATAK PANGOLAT;Mc;9;L;;;;;N;;;;; 1BF3;BATAK PANONGONAN;Mc;9;L;;;;;N;;;;; 1BFC;BATAK SYMBOL BINDU NA METEK;Po;0;L;;;;;N;;;;; 1BFD;BATAK SYMBOL BINDU PINARBORAS;Po;0;L;;;;;N;;;;; 1BFE;BATAK SYMBOL BINDU JUDUL;Po;0;L;;;;;N;;;;; 1BFF;BATAK SYMBOL BINDU PANGOLAT;Po;0;L;;;;;N;;;;; 1C00;LEPCHA LETTER KA;Lo;0;L;;;;;N;;;;; 1C01;LEPCHA LETTER KLA;Lo;0;L;;;;;N;;;;; 1C02;LEPCHA LETTER KHA;Lo;0;L;;;;;N;;;;; 1C03;LEPCHA LETTER GA;Lo;0;L;;;;;N;;;;; 1C04;LEPCHA LETTER GLA;Lo;0;L;;;;;N;;;;; 1C05;LEPCHA LETTER NGA;Lo;0;L;;;;;N;;;;; 1C06;LEPCHA LETTER CA;Lo;0;L;;;;;N;;;;; 1C07;LEPCHA LETTER CHA;Lo;0;L;;;;;N;;;;; 1C08;LEPCHA LETTER JA;Lo;0;L;;;;;N;;;;; 1C09;LEPCHA LETTER NYA;Lo;0;L;;;;;N;;;;; 1C0A;LEPCHA LETTER TA;Lo;0;L;;;;;N;;;;; 1C0B;LEPCHA LETTER THA;Lo;0;L;;;;;N;;;;; 1C0C;LEPCHA LETTER DA;Lo;0;L;;;;;N;;;;; 1C0D;LEPCHA LETTER NA;Lo;0;L;;;;;N;;;;; 1C0E;LEPCHA LETTER PA;Lo;0;L;;;;;N;;;;; 1C0F;LEPCHA LETTER PLA;Lo;0;L;;;;;N;;;;; 1C10;LEPCHA LETTER PHA;Lo;0;L;;;;;N;;;;; 1C11;LEPCHA LETTER FA;Lo;0;L;;;;;N;;;;; 1C12;LEPCHA LETTER FLA;Lo;0;L;;;;;N;;;;; 1C13;LEPCHA LETTER BA;Lo;0;L;;;;;N;;;;; 1C14;LEPCHA LETTER BLA;Lo;0;L;;;;;N;;;;; 1C15;LEPCHA LETTER MA;Lo;0;L;;;;;N;;;;; 1C16;LEPCHA LETTER MLA;Lo;0;L;;;;;N;;;;; 1C17;LEPCHA LETTER TSA;Lo;0;L;;;;;N;;;;; 1C18;LEPCHA LETTER TSHA;Lo;0;L;;;;;N;;;;; 1C19;LEPCHA LETTER DZA;Lo;0;L;;;;;N;;;;; 1C1A;LEPCHA LETTER YA;Lo;0;L;;;;;N;;;;; 1C1B;LEPCHA LETTER RA;Lo;0;L;;;;;N;;;;; 1C1C;LEPCHA LETTER LA;Lo;0;L;;;;;N;;;;; 1C1D;LEPCHA LETTER HA;Lo;0;L;;;;;N;;;;; 1C1E;LEPCHA LETTER HLA;Lo;0;L;;;;;N;;;;; 1C1F;LEPCHA LETTER VA;Lo;0;L;;;;;N;;;;; 1C20;LEPCHA LETTER SA;Lo;0;L;;;;;N;;;;; 1C21;LEPCHA LETTER SHA;Lo;0;L;;;;;N;;;;; 1C22;LEPCHA LETTER WA;Lo;0;L;;;;;N;;;;; 1C23;LEPCHA LETTER A;Lo;0;L;;;;;N;;;;; 1C24;LEPCHA SUBJOINED LETTER YA;Mc;0;L;;;;;N;;;;; 1C25;LEPCHA SUBJOINED LETTER RA;Mc;0;L;;;;;N;;;;; 1C26;LEPCHA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 1C27;LEPCHA VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 1C28;LEPCHA VOWEL SIGN O;Mc;0;L;;;;;N;;;;; 1C29;LEPCHA VOWEL SIGN OO;Mc;0;L;;;;;N;;;;; 1C2A;LEPCHA VOWEL SIGN U;Mc;0;L;;;;;N;;;;; 1C2B;LEPCHA VOWEL SIGN UU;Mc;0;L;;;;;N;;;;; 1C2C;LEPCHA VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 1C2D;LEPCHA CONSONANT SIGN K;Mn;0;NSM;;;;;N;;;;; 1C2E;LEPCHA CONSONANT SIGN M;Mn;0;NSM;;;;;N;;;;; 1C2F;LEPCHA CONSONANT SIGN L;Mn;0;NSM;;;;;N;;;;; 1C30;LEPCHA CONSONANT SIGN N;Mn;0;NSM;;;;;N;;;;; 1C31;LEPCHA CONSONANT SIGN P;Mn;0;NSM;;;;;N;;;;; 1C32;LEPCHA CONSONANT SIGN R;Mn;0;NSM;;;;;N;;;;; 1C33;LEPCHA CONSONANT SIGN T;Mn;0;NSM;;;;;N;;;;; 1C34;LEPCHA CONSONANT SIGN NYIN-DO;Mc;0;L;;;;;N;;;;; 1C35;LEPCHA CONSONANT SIGN KANG;Mc;0;L;;;;;N;;;;; 1C36;LEPCHA SIGN RAN;Mn;0;NSM;;;;;N;;;;; 1C37;LEPCHA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 1C3B;LEPCHA PUNCTUATION TA-ROL;Po;0;L;;;;;N;;;;; 1C3C;LEPCHA PUNCTUATION NYET THYOOM TA-ROL;Po;0;L;;;;;N;;;;; 1C3D;LEPCHA PUNCTUATION CER-WA;Po;0;L;;;;;N;;;;; 1C3E;LEPCHA PUNCTUATION TSHOOK CER-WA;Po;0;L;;;;;N;;;;; 1C3F;LEPCHA PUNCTUATION TSHOOK;Po;0;L;;;;;N;;;;; 1C40;LEPCHA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 1C41;LEPCHA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 1C42;LEPCHA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 1C43;LEPCHA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 1C44;LEPCHA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 1C45;LEPCHA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 1C46;LEPCHA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 1C47;LEPCHA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 1C48;LEPCHA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 1C49;LEPCHA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 1C4D;LEPCHA LETTER TTA;Lo;0;L;;;;;N;;;;; 1C4E;LEPCHA LETTER TTHA;Lo;0;L;;;;;N;;;;; 1C4F;LEPCHA LETTER DDA;Lo;0;L;;;;;N;;;;; 1C50;OL CHIKI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 1C51;OL CHIKI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 1C52;OL CHIKI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 1C53;OL CHIKI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 1C54;OL CHIKI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 1C55;OL CHIKI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 1C56;OL CHIKI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 1C57;OL CHIKI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 1C58;OL CHIKI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 1C59;OL CHIKI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 1C5A;OL CHIKI LETTER LA;Lo;0;L;;;;;N;;;;; 1C5B;OL CHIKI LETTER AT;Lo;0;L;;;;;N;;;;; 1C5C;OL CHIKI LETTER AG;Lo;0;L;;;;;N;;;;; 1C5D;OL CHIKI LETTER ANG;Lo;0;L;;;;;N;;;;; 1C5E;OL CHIKI LETTER AL;Lo;0;L;;;;;N;;;;; 1C5F;OL CHIKI LETTER LAA;Lo;0;L;;;;;N;;;;; 1C60;OL CHIKI LETTER AAK;Lo;0;L;;;;;N;;;;; 1C61;OL CHIKI LETTER AAJ;Lo;0;L;;;;;N;;;;; 1C62;OL CHIKI LETTER AAM;Lo;0;L;;;;;N;;;;; 1C63;OL CHIKI LETTER AAW;Lo;0;L;;;;;N;;;;; 1C64;OL CHIKI LETTER LI;Lo;0;L;;;;;N;;;;; 1C65;OL CHIKI LETTER IS;Lo;0;L;;;;;N;;;;; 1C66;OL CHIKI LETTER IH;Lo;0;L;;;;;N;;;;; 1C67;OL CHIKI LETTER INY;Lo;0;L;;;;;N;;;;; 1C68;OL CHIKI LETTER IR;Lo;0;L;;;;;N;;;;; 1C69;OL CHIKI LETTER LU;Lo;0;L;;;;;N;;;;; 1C6A;OL CHIKI LETTER UC;Lo;0;L;;;;;N;;;;; 1C6B;OL CHIKI LETTER UD;Lo;0;L;;;;;N;;;;; 1C6C;OL CHIKI LETTER UNN;Lo;0;L;;;;;N;;;;; 1C6D;OL CHIKI LETTER UY;Lo;0;L;;;;;N;;;;; 1C6E;OL CHIKI LETTER LE;Lo;0;L;;;;;N;;;;; 1C6F;OL CHIKI LETTER EP;Lo;0;L;;;;;N;;;;; 1C70;OL CHIKI LETTER EDD;Lo;0;L;;;;;N;;;;; 1C71;OL CHIKI LETTER EN;Lo;0;L;;;;;N;;;;; 1C72;OL CHIKI LETTER ERR;Lo;0;L;;;;;N;;;;; 1C73;OL CHIKI LETTER LO;Lo;0;L;;;;;N;;;;; 1C74;OL CHIKI LETTER OTT;Lo;0;L;;;;;N;;;;; 1C75;OL CHIKI LETTER OB;Lo;0;L;;;;;N;;;;; 1C76;OL CHIKI LETTER OV;Lo;0;L;;;;;N;;;;; 1C77;OL CHIKI LETTER OH;Lo;0;L;;;;;N;;;;; 1C78;OL CHIKI MU TTUDDAG;Lm;0;L;;;;;N;;;;; 1C79;OL CHIKI GAAHLAA TTUDDAAG;Lm;0;L;;;;;N;;;;; 1C7A;OL CHIKI MU-GAAHLAA TTUDDAAG;Lm;0;L;;;;;N;;;;; 1C7B;OL CHIKI RELAA;Lm;0;L;;;;;N;;;;; 1C7C;OL CHIKI PHAARKAA;Lm;0;L;;;;;N;;;;; 1C7D;OL CHIKI AHAD;Lm;0;L;;;;;N;;;;; 1C7E;OL CHIKI PUNCTUATION MUCAAD;Po;0;L;;;;;N;;;;; 1C7F;OL CHIKI PUNCTUATION DOUBLE MUCAAD;Po;0;L;;;;;N;;;;; 1C80;CYRILLIC SMALL LETTER ROUNDED VE;Ll;0;L;;;;;N;;;0412;;0412 1C81;CYRILLIC SMALL LETTER LONG-LEGGED DE;Ll;0;L;;;;;N;;;0414;;0414 1C82;CYRILLIC SMALL LETTER NARROW O;Ll;0;L;;;;;N;;;041E;;041E 1C83;CYRILLIC SMALL LETTER WIDE ES;Ll;0;L;;;;;N;;;0421;;0421 1C84;CYRILLIC SMALL LETTER TALL TE;Ll;0;L;;;;;N;;;0422;;0422 1C85;CYRILLIC SMALL LETTER THREE-LEGGED TE;Ll;0;L;;;;;N;;;0422;;0422 1C86;CYRILLIC SMALL LETTER TALL HARD SIGN;Ll;0;L;;;;;N;;;042A;;042A 1C87;CYRILLIC SMALL LETTER TALL YAT;Ll;0;L;;;;;N;;;0462;;0462 1C88;CYRILLIC SMALL LETTER UNBLENDED UK;Ll;0;L;;;;;N;;;A64A;;A64A 1C90;GEORGIAN MTAVRULI CAPITAL LETTER AN;Lu;0;L;;;;;N;;;;10D0; 1C91;GEORGIAN MTAVRULI CAPITAL LETTER BAN;Lu;0;L;;;;;N;;;;10D1; 1C92;GEORGIAN MTAVRULI CAPITAL LETTER GAN;Lu;0;L;;;;;N;;;;10D2; 1C93;GEORGIAN MTAVRULI CAPITAL LETTER DON;Lu;0;L;;;;;N;;;;10D3; 1C94;GEORGIAN MTAVRULI CAPITAL LETTER EN;Lu;0;L;;;;;N;;;;10D4; 1C95;GEORGIAN MTAVRULI CAPITAL LETTER VIN;Lu;0;L;;;;;N;;;;10D5; 1C96;GEORGIAN MTAVRULI CAPITAL LETTER ZEN;Lu;0;L;;;;;N;;;;10D6; 1C97;GEORGIAN MTAVRULI CAPITAL LETTER TAN;Lu;0;L;;;;;N;;;;10D7; 1C98;GEORGIAN MTAVRULI CAPITAL LETTER IN;Lu;0;L;;;;;N;;;;10D8; 1C99;GEORGIAN MTAVRULI CAPITAL LETTER KAN;Lu;0;L;;;;;N;;;;10D9; 1C9A;GEORGIAN MTAVRULI CAPITAL LETTER LAS;Lu;0;L;;;;;N;;;;10DA; 1C9B;GEORGIAN MTAVRULI CAPITAL LETTER MAN;Lu;0;L;;;;;N;;;;10DB; 1C9C;GEORGIAN MTAVRULI CAPITAL LETTER NAR;Lu;0;L;;;;;N;;;;10DC; 1C9D;GEORGIAN MTAVRULI CAPITAL LETTER ON;Lu;0;L;;;;;N;;;;10DD; 1C9E;GEORGIAN MTAVRULI CAPITAL LETTER PAR;Lu;0;L;;;;;N;;;;10DE; 1C9F;GEORGIAN MTAVRULI CAPITAL LETTER ZHAR;Lu;0;L;;;;;N;;;;10DF; 1CA0;GEORGIAN MTAVRULI CAPITAL LETTER RAE;Lu;0;L;;;;;N;;;;10E0; 1CA1;GEORGIAN MTAVRULI CAPITAL LETTER SAN;Lu;0;L;;;;;N;;;;10E1; 1CA2;GEORGIAN MTAVRULI CAPITAL LETTER TAR;Lu;0;L;;;;;N;;;;10E2; 1CA3;GEORGIAN MTAVRULI CAPITAL LETTER UN;Lu;0;L;;;;;N;;;;10E3; 1CA4;GEORGIAN MTAVRULI CAPITAL LETTER PHAR;Lu;0;L;;;;;N;;;;10E4; 1CA5;GEORGIAN MTAVRULI CAPITAL LETTER KHAR;Lu;0;L;;;;;N;;;;10E5; 1CA6;GEORGIAN MTAVRULI CAPITAL LETTER GHAN;Lu;0;L;;;;;N;;;;10E6; 1CA7;GEORGIAN MTAVRULI CAPITAL LETTER QAR;Lu;0;L;;;;;N;;;;10E7; 1CA8;GEORGIAN MTAVRULI CAPITAL LETTER SHIN;Lu;0;L;;;;;N;;;;10E8; 1CA9;GEORGIAN MTAVRULI CAPITAL LETTER CHIN;Lu;0;L;;;;;N;;;;10E9; 1CAA;GEORGIAN MTAVRULI CAPITAL LETTER CAN;Lu;0;L;;;;;N;;;;10EA; 1CAB;GEORGIAN MTAVRULI CAPITAL LETTER JIL;Lu;0;L;;;;;N;;;;10EB; 1CAC;GEORGIAN MTAVRULI CAPITAL LETTER CIL;Lu;0;L;;;;;N;;;;10EC; 1CAD;GEORGIAN MTAVRULI CAPITAL LETTER CHAR;Lu;0;L;;;;;N;;;;10ED; 1CAE;GEORGIAN MTAVRULI CAPITAL LETTER XAN;Lu;0;L;;;;;N;;;;10EE; 1CAF;GEORGIAN MTAVRULI CAPITAL LETTER JHAN;Lu;0;L;;;;;N;;;;10EF; 1CB0;GEORGIAN MTAVRULI CAPITAL LETTER HAE;Lu;0;L;;;;;N;;;;10F0; 1CB1;GEORGIAN MTAVRULI CAPITAL LETTER HE;Lu;0;L;;;;;N;;;;10F1; 1CB2;GEORGIAN MTAVRULI CAPITAL LETTER HIE;Lu;0;L;;;;;N;;;;10F2; 1CB3;GEORGIAN MTAVRULI CAPITAL LETTER WE;Lu;0;L;;;;;N;;;;10F3; 1CB4;GEORGIAN MTAVRULI CAPITAL LETTER HAR;Lu;0;L;;;;;N;;;;10F4; 1CB5;GEORGIAN MTAVRULI CAPITAL LETTER HOE;Lu;0;L;;;;;N;;;;10F5; 1CB6;GEORGIAN MTAVRULI CAPITAL LETTER FI;Lu;0;L;;;;;N;;;;10F6; 1CB7;GEORGIAN MTAVRULI CAPITAL LETTER YN;Lu;0;L;;;;;N;;;;10F7; 1CB8;GEORGIAN MTAVRULI CAPITAL LETTER ELIFI;Lu;0;L;;;;;N;;;;10F8; 1CB9;GEORGIAN MTAVRULI CAPITAL LETTER TURNED GAN;Lu;0;L;;;;;N;;;;10F9; 1CBA;GEORGIAN MTAVRULI CAPITAL LETTER AIN;Lu;0;L;;;;;N;;;;10FA; 1CBD;GEORGIAN MTAVRULI CAPITAL LETTER AEN;Lu;0;L;;;;;N;;;;10FD; 1CBE;GEORGIAN MTAVRULI CAPITAL LETTER HARD SIGN;Lu;0;L;;;;;N;;;;10FE; 1CBF;GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN;Lu;0;L;;;;;N;;;;10FF; 1CC0;SUNDANESE PUNCTUATION BINDU SURYA;Po;0;L;;;;;N;;;;; 1CC1;SUNDANESE PUNCTUATION BINDU PANGLONG;Po;0;L;;;;;N;;;;; 1CC2;SUNDANESE PUNCTUATION BINDU PURNAMA;Po;0;L;;;;;N;;;;; 1CC3;SUNDANESE PUNCTUATION BINDU CAKRA;Po;0;L;;;;;N;;;;; 1CC4;SUNDANESE PUNCTUATION BINDU LEU SATANGA;Po;0;L;;;;;N;;;;; 1CC5;SUNDANESE PUNCTUATION BINDU KA SATANGA;Po;0;L;;;;;N;;;;; 1CC6;SUNDANESE PUNCTUATION BINDU DA SATANGA;Po;0;L;;;;;N;;;;; 1CC7;SUNDANESE PUNCTUATION BINDU BA SATANGA;Po;0;L;;;;;N;;;;; 1CD0;VEDIC TONE KARSHANA;Mn;230;NSM;;;;;N;;;;; 1CD1;VEDIC TONE SHARA;Mn;230;NSM;;;;;N;;;;; 1CD2;VEDIC TONE PRENKHA;Mn;230;NSM;;;;;N;;;;; 1CD3;VEDIC SIGN NIHSHVASA;Po;0;L;;;;;N;;;;; 1CD4;VEDIC SIGN YAJURVEDIC MIDLINE SVARITA;Mn;1;NSM;;;;;N;;;;; 1CD5;VEDIC TONE YAJURVEDIC AGGRAVATED INDEPENDENT SVARITA;Mn;220;NSM;;;;;N;;;;; 1CD6;VEDIC TONE YAJURVEDIC INDEPENDENT SVARITA;Mn;220;NSM;;;;;N;;;;; 1CD7;VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA;Mn;220;NSM;;;;;N;;;;; 1CD8;VEDIC TONE CANDRA BELOW;Mn;220;NSM;;;;;N;;;;; 1CD9;VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA SCHROEDER;Mn;220;NSM;;;;;N;;;;; 1CDA;VEDIC TONE DOUBLE SVARITA;Mn;230;NSM;;;;;N;;;;; 1CDB;VEDIC TONE TRIPLE SVARITA;Mn;230;NSM;;;;;N;;;;; 1CDC;VEDIC TONE KATHAKA ANUDATTA;Mn;220;NSM;;;;;N;;;;; 1CDD;VEDIC TONE DOT BELOW;Mn;220;NSM;;;;;N;;;;; 1CDE;VEDIC TONE TWO DOTS BELOW;Mn;220;NSM;;;;;N;;;;; 1CDF;VEDIC TONE THREE DOTS BELOW;Mn;220;NSM;;;;;N;;;;; 1CE0;VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA;Mn;230;NSM;;;;;N;;;;; 1CE1;VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA;Mc;0;L;;;;;N;;;;; 1CE2;VEDIC SIGN VISARGA SVARITA;Mn;1;NSM;;;;;N;;;;; 1CE3;VEDIC SIGN VISARGA UDATTA;Mn;1;NSM;;;;;N;;;;; 1CE4;VEDIC SIGN REVERSED VISARGA UDATTA;Mn;1;NSM;;;;;N;;;;; 1CE5;VEDIC SIGN VISARGA ANUDATTA;Mn;1;NSM;;;;;N;;;;; 1CE6;VEDIC SIGN REVERSED VISARGA ANUDATTA;Mn;1;NSM;;;;;N;;;;; 1CE7;VEDIC SIGN VISARGA UDATTA WITH TAIL;Mn;1;NSM;;;;;N;;;;; 1CE8;VEDIC SIGN VISARGA ANUDATTA WITH TAIL;Mn;1;NSM;;;;;N;;;;; 1CE9;VEDIC SIGN ANUSVARA ANTARGOMUKHA;Lo;0;L;;;;;N;;;;; 1CEA;VEDIC SIGN ANUSVARA BAHIRGOMUKHA;Lo;0;L;;;;;N;;;;; 1CEB;VEDIC SIGN ANUSVARA VAMAGOMUKHA;Lo;0;L;;;;;N;;;;; 1CEC;VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL;Lo;0;L;;;;;N;;;;; 1CED;VEDIC SIGN TIRYAK;Mn;220;NSM;;;;;N;;;;; 1CEE;VEDIC SIGN HEXIFORM LONG ANUSVARA;Lo;0;L;;;;;N;;;;; 1CEF;VEDIC SIGN LONG ANUSVARA;Lo;0;L;;;;;N;;;;; 1CF0;VEDIC SIGN RTHANG LONG ANUSVARA;Lo;0;L;;;;;N;;;;; 1CF1;VEDIC SIGN ANUSVARA UBHAYATO MUKHA;Lo;0;L;;;;;N;;;;; 1CF2;VEDIC SIGN ARDHAVISARGA;Lo;0;L;;;;;N;;;;; 1CF3;VEDIC SIGN ROTATED ARDHAVISARGA;Lo;0;L;;;;;N;;;;; 1CF4;VEDIC TONE CANDRA ABOVE;Mn;230;NSM;;;;;N;;;;; 1CF5;VEDIC SIGN JIHVAMULIYA;Lo;0;L;;;;;N;;;;; 1CF6;VEDIC SIGN UPADHMANIYA;Lo;0;L;;;;;N;;;;; 1CF7;VEDIC SIGN ATIKRAMA;Mc;0;L;;;;;N;;;;; 1CF8;VEDIC TONE RING ABOVE;Mn;230;NSM;;;;;N;;;;; 1CF9;VEDIC TONE DOUBLE RING ABOVE;Mn;230;NSM;;;;;N;;;;; 1CFA;VEDIC SIGN DOUBLE ANUSVARA ANTARGOMUKHA;Lo;0;L;;;;;N;;;;; 1D00;LATIN LETTER SMALL CAPITAL A;Ll;0;L;;;;;N;;;;; 1D01;LATIN LETTER SMALL CAPITAL AE;Ll;0;L;;;;;N;;;;; 1D02;LATIN SMALL LETTER TURNED AE;Ll;0;L;;;;;N;;;;; 1D03;LATIN LETTER SMALL CAPITAL BARRED B;Ll;0;L;;;;;N;;;;; 1D04;LATIN LETTER SMALL CAPITAL C;Ll;0;L;;;;;N;;;;; 1D05;LATIN LETTER SMALL CAPITAL D;Ll;0;L;;;;;N;;;;; 1D06;LATIN LETTER SMALL CAPITAL ETH;Ll;0;L;;;;;N;;;;; 1D07;LATIN LETTER SMALL CAPITAL E;Ll;0;L;;;;;N;;;;; 1D08;LATIN SMALL LETTER TURNED OPEN E;Ll;0;L;;;;;N;;;;; 1D09;LATIN SMALL LETTER TURNED I;Ll;0;L;;;;;N;;;;; 1D0A;LATIN LETTER SMALL CAPITAL J;Ll;0;L;;;;;N;;;;; 1D0B;LATIN LETTER SMALL CAPITAL K;Ll;0;L;;;;;N;;;;; 1D0C;LATIN LETTER SMALL CAPITAL L WITH STROKE;Ll;0;L;;;;;N;;;;; 1D0D;LATIN LETTER SMALL CAPITAL M;Ll;0;L;;;;;N;;;;; 1D0E;LATIN LETTER SMALL CAPITAL REVERSED N;Ll;0;L;;;;;N;;;;; 1D0F;LATIN LETTER SMALL CAPITAL O;Ll;0;L;;;;;N;;;;; 1D10;LATIN LETTER SMALL CAPITAL OPEN O;Ll;0;L;;;;;N;;;;; 1D11;LATIN SMALL LETTER SIDEWAYS O;Ll;0;L;;;;;N;;;;; 1D12;LATIN SMALL LETTER SIDEWAYS OPEN O;Ll;0;L;;;;;N;;;;; 1D13;LATIN SMALL LETTER SIDEWAYS O WITH STROKE;Ll;0;L;;;;;N;;;;; 1D14;LATIN SMALL LETTER TURNED OE;Ll;0;L;;;;;N;;;;; 1D15;LATIN LETTER SMALL CAPITAL OU;Ll;0;L;;;;;N;;;;; 1D16;LATIN SMALL LETTER TOP HALF O;Ll;0;L;;;;;N;;;;; 1D17;LATIN SMALL LETTER BOTTOM HALF O;Ll;0;L;;;;;N;;;;; 1D18;LATIN LETTER SMALL CAPITAL P;Ll;0;L;;;;;N;;;;; 1D19;LATIN LETTER SMALL CAPITAL REVERSED R;Ll;0;L;;;;;N;;;;; 1D1A;LATIN LETTER SMALL CAPITAL TURNED R;Ll;0;L;;;;;N;;;;; 1D1B;LATIN LETTER SMALL CAPITAL T;Ll;0;L;;;;;N;;;;; 1D1C;LATIN LETTER SMALL CAPITAL U;Ll;0;L;;;;;N;;;;; 1D1D;LATIN SMALL LETTER SIDEWAYS U;Ll;0;L;;;;;N;;;;; 1D1E;LATIN SMALL LETTER SIDEWAYS DIAERESIZED U;Ll;0;L;;;;;N;;;;; 1D1F;LATIN SMALL LETTER SIDEWAYS TURNED M;Ll;0;L;;;;;N;;;;; 1D20;LATIN LETTER SMALL CAPITAL V;Ll;0;L;;;;;N;;;;; 1D21;LATIN LETTER SMALL CAPITAL W;Ll;0;L;;;;;N;;;;; 1D22;LATIN LETTER SMALL CAPITAL Z;Ll;0;L;;;;;N;;;;; 1D23;LATIN LETTER SMALL CAPITAL EZH;Ll;0;L;;;;;N;;;;; 1D24;LATIN LETTER VOICED LARYNGEAL SPIRANT;Ll;0;L;;;;;N;;;;; 1D25;LATIN LETTER AIN;Ll;0;L;;;;;N;;;;; 1D26;GREEK LETTER SMALL CAPITAL GAMMA;Ll;0;L;;;;;N;;;;; 1D27;GREEK LETTER SMALL CAPITAL LAMDA;Ll;0;L;;;;;N;;;;; 1D28;GREEK LETTER SMALL CAPITAL PI;Ll;0;L;;;;;N;;;;; 1D29;GREEK LETTER SMALL CAPITAL RHO;Ll;0;L;;;;;N;;;;; 1D2A;GREEK LETTER SMALL CAPITAL PSI;Ll;0;L;;;;;N;;;;; 1D2B;CYRILLIC LETTER SMALL CAPITAL EL;Ll;0;L;;;;;N;;;;; 1D2C;MODIFIER LETTER CAPITAL A;Lm;0;L; 0041;;;;N;;;;; 1D2D;MODIFIER LETTER CAPITAL AE;Lm;0;L; 00C6;;;;N;;;;; 1D2E;MODIFIER LETTER CAPITAL B;Lm;0;L; 0042;;;;N;;;;; 1D2F;MODIFIER LETTER CAPITAL BARRED B;Lm;0;L;;;;;N;;;;; 1D30;MODIFIER LETTER CAPITAL D;Lm;0;L; 0044;;;;N;;;;; 1D31;MODIFIER LETTER CAPITAL E;Lm;0;L; 0045;;;;N;;;;; 1D32;MODIFIER LETTER CAPITAL REVERSED E;Lm;0;L; 018E;;;;N;;;;; 1D33;MODIFIER LETTER CAPITAL G;Lm;0;L; 0047;;;;N;;;;; 1D34;MODIFIER LETTER CAPITAL H;Lm;0;L; 0048;;;;N;;;;; 1D35;MODIFIER LETTER CAPITAL I;Lm;0;L; 0049;;;;N;;;;; 1D36;MODIFIER LETTER CAPITAL J;Lm;0;L; 004A;;;;N;;;;; 1D37;MODIFIER LETTER CAPITAL K;Lm;0;L; 004B;;;;N;;;;; 1D38;MODIFIER LETTER CAPITAL L;Lm;0;L; 004C;;;;N;;;;; 1D39;MODIFIER LETTER CAPITAL M;Lm;0;L; 004D;;;;N;;;;; 1D3A;MODIFIER LETTER CAPITAL N;Lm;0;L; 004E;;;;N;;;;; 1D3B;MODIFIER LETTER CAPITAL REVERSED N;Lm;0;L;;;;;N;;;;; 1D3C;MODIFIER LETTER CAPITAL O;Lm;0;L; 004F;;;;N;;;;; 1D3D;MODIFIER LETTER CAPITAL OU;Lm;0;L; 0222;;;;N;;;;; 1D3E;MODIFIER LETTER CAPITAL P;Lm;0;L; 0050;;;;N;;;;; 1D3F;MODIFIER LETTER CAPITAL R;Lm;0;L; 0052;;;;N;;;;; 1D40;MODIFIER LETTER CAPITAL T;Lm;0;L; 0054;;;;N;;;;; 1D41;MODIFIER LETTER CAPITAL U;Lm;0;L; 0055;;;;N;;;;; 1D42;MODIFIER LETTER CAPITAL W;Lm;0;L; 0057;;;;N;;;;; 1D43;MODIFIER LETTER SMALL A;Lm;0;L; 0061;;;;N;;;;; 1D44;MODIFIER LETTER SMALL TURNED A;Lm;0;L; 0250;;;;N;;;;; 1D45;MODIFIER LETTER SMALL ALPHA;Lm;0;L; 0251;;;;N;;;;; 1D46;MODIFIER LETTER SMALL TURNED AE;Lm;0;L; 1D02;;;;N;;;;; 1D47;MODIFIER LETTER SMALL B;Lm;0;L; 0062;;;;N;;;;; 1D48;MODIFIER LETTER SMALL D;Lm;0;L; 0064;;;;N;;;;; 1D49;MODIFIER LETTER SMALL E;Lm;0;L; 0065;;;;N;;;;; 1D4A;MODIFIER LETTER SMALL SCHWA;Lm;0;L; 0259;;;;N;;;;; 1D4B;MODIFIER LETTER SMALL OPEN E;Lm;0;L; 025B;;;;N;;;;; 1D4C;MODIFIER LETTER SMALL TURNED OPEN E;Lm;0;L; 025C;;;;N;;;;; 1D4D;MODIFIER LETTER SMALL G;Lm;0;L; 0067;;;;N;;;;; 1D4E;MODIFIER LETTER SMALL TURNED I;Lm;0;L;;;;;N;;;;; 1D4F;MODIFIER LETTER SMALL K;Lm;0;L; 006B;;;;N;;;;; 1D50;MODIFIER LETTER SMALL M;Lm;0;L; 006D;;;;N;;;;; 1D51;MODIFIER LETTER SMALL ENG;Lm;0;L; 014B;;;;N;;;;; 1D52;MODIFIER LETTER SMALL O;Lm;0;L; 006F;;;;N;;;;; 1D53;MODIFIER LETTER SMALL OPEN O;Lm;0;L; 0254;;;;N;;;;; 1D54;MODIFIER LETTER SMALL TOP HALF O;Lm;0;L; 1D16;;;;N;;;;; 1D55;MODIFIER LETTER SMALL BOTTOM HALF O;Lm;0;L; 1D17;;;;N;;;;; 1D56;MODIFIER LETTER SMALL P;Lm;0;L; 0070;;;;N;;;;; 1D57;MODIFIER LETTER SMALL T;Lm;0;L; 0074;;;;N;;;;; 1D58;MODIFIER LETTER SMALL U;Lm;0;L; 0075;;;;N;;;;; 1D59;MODIFIER LETTER SMALL SIDEWAYS U;Lm;0;L; 1D1D;;;;N;;;;; 1D5A;MODIFIER LETTER SMALL TURNED M;Lm;0;L; 026F;;;;N;;;;; 1D5B;MODIFIER LETTER SMALL V;Lm;0;L; 0076;;;;N;;;;; 1D5C;MODIFIER LETTER SMALL AIN;Lm;0;L; 1D25;;;;N;;;;; 1D5D;MODIFIER LETTER SMALL BETA;Lm;0;L; 03B2;;;;N;;;;; 1D5E;MODIFIER LETTER SMALL GREEK GAMMA;Lm;0;L; 03B3;;;;N;;;;; 1D5F;MODIFIER LETTER SMALL DELTA;Lm;0;L; 03B4;;;;N;;;;; 1D60;MODIFIER LETTER SMALL GREEK PHI;Lm;0;L; 03C6;;;;N;;;;; 1D61;MODIFIER LETTER SMALL CHI;Lm;0;L; 03C7;;;;N;;;;; 1D62;LATIN SUBSCRIPT SMALL LETTER I;Lm;0;L; 0069;;;;N;;;;; 1D63;LATIN SUBSCRIPT SMALL LETTER R;Lm;0;L; 0072;;;;N;;;;; 1D64;LATIN SUBSCRIPT SMALL LETTER U;Lm;0;L; 0075;;;;N;;;;; 1D65;LATIN SUBSCRIPT SMALL LETTER V;Lm;0;L; 0076;;;;N;;;;; 1D66;GREEK SUBSCRIPT SMALL LETTER BETA;Lm;0;L; 03B2;;;;N;;;;; 1D67;GREEK SUBSCRIPT SMALL LETTER GAMMA;Lm;0;L; 03B3;;;;N;;;;; 1D68;GREEK SUBSCRIPT SMALL LETTER RHO;Lm;0;L; 03C1;;;;N;;;;; 1D69;GREEK SUBSCRIPT SMALL LETTER PHI;Lm;0;L; 03C6;;;;N;;;;; 1D6A;GREEK SUBSCRIPT SMALL LETTER CHI;Lm;0;L; 03C7;;;;N;;;;; 1D6B;LATIN SMALL LETTER UE;Ll;0;L;;;;;N;;;;; 1D6C;LATIN SMALL LETTER B WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; 1D6D;LATIN SMALL LETTER D WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; 1D6E;LATIN SMALL LETTER F WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; 1D6F;LATIN SMALL LETTER M WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; 1D70;LATIN SMALL LETTER N WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; 1D71;LATIN SMALL LETTER P WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; 1D72;LATIN SMALL LETTER R WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; 1D73;LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE;Ll;0;L;;;;;N;;;;; 1D74;LATIN SMALL LETTER S WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; 1D75;LATIN SMALL LETTER T WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; 1D76;LATIN SMALL LETTER Z WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; 1D77;LATIN SMALL LETTER TURNED G;Ll;0;L;;;;;N;;;;; 1D78;MODIFIER LETTER CYRILLIC EN;Lm;0;L; 043D;;;;N;;;;; 1D79;LATIN SMALL LETTER INSULAR G;Ll;0;L;;;;;N;;;A77D;;A77D 1D7A;LATIN SMALL LETTER TH WITH STRIKETHROUGH;Ll;0;L;;;;;N;;;;; 1D7B;LATIN SMALL CAPITAL LETTER I WITH STROKE;Ll;0;L;;;;;N;;;;; 1D7C;LATIN SMALL LETTER IOTA WITH STROKE;Ll;0;L;;;;;N;;;;; 1D7D;LATIN SMALL LETTER P WITH STROKE;Ll;0;L;;;;;N;;;2C63;;2C63 1D7E;LATIN SMALL CAPITAL LETTER U WITH STROKE;Ll;0;L;;;;;N;;;;; 1D7F;LATIN SMALL LETTER UPSILON WITH STROKE;Ll;0;L;;;;;N;;;;; 1D80;LATIN SMALL LETTER B WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; 1D81;LATIN SMALL LETTER D WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; 1D82;LATIN SMALL LETTER F WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; 1D83;LATIN SMALL LETTER G WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; 1D84;LATIN SMALL LETTER K WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; 1D85;LATIN SMALL LETTER L WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; 1D86;LATIN SMALL LETTER M WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; 1D87;LATIN SMALL LETTER N WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; 1D88;LATIN SMALL LETTER P WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; 1D89;LATIN SMALL LETTER R WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; 1D8A;LATIN SMALL LETTER S WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; 1D8B;LATIN SMALL LETTER ESH WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; 1D8C;LATIN SMALL LETTER V WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; 1D8D;LATIN SMALL LETTER X WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; 1D8E;LATIN SMALL LETTER Z WITH PALATAL HOOK;Ll;0;L;;;;;N;;;A7C6;;A7C6 1D8F;LATIN SMALL LETTER A WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; 1D90;LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; 1D91;LATIN SMALL LETTER D WITH HOOK AND TAIL;Ll;0;L;;;;;N;;;;; 1D92;LATIN SMALL LETTER E WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; 1D93;LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; 1D94;LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; 1D95;LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; 1D96;LATIN SMALL LETTER I WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; 1D97;LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; 1D98;LATIN SMALL LETTER ESH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; 1D99;LATIN SMALL LETTER U WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; 1D9A;LATIN SMALL LETTER EZH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; 1D9B;MODIFIER LETTER SMALL TURNED ALPHA;Lm;0;L; 0252;;;;N;;;;; 1D9C;MODIFIER LETTER SMALL C;Lm;0;L; 0063;;;;N;;;;; 1D9D;MODIFIER LETTER SMALL C WITH CURL;Lm;0;L; 0255;;;;N;;;;; 1D9E;MODIFIER LETTER SMALL ETH;Lm;0;L; 00F0;;;;N;;;;; 1D9F;MODIFIER LETTER SMALL REVERSED OPEN E;Lm;0;L; 025C;;;;N;;;;; 1DA0;MODIFIER LETTER SMALL F;Lm;0;L; 0066;;;;N;;;;; 1DA1;MODIFIER LETTER SMALL DOTLESS J WITH STROKE;Lm;0;L; 025F;;;;N;;;;; 1DA2;MODIFIER LETTER SMALL SCRIPT G;Lm;0;L; 0261;;;;N;;;;; 1DA3;MODIFIER LETTER SMALL TURNED H;Lm;0;L; 0265;;;;N;;;;; 1DA4;MODIFIER LETTER SMALL I WITH STROKE;Lm;0;L; 0268;;;;N;;;;; 1DA5;MODIFIER LETTER SMALL IOTA;Lm;0;L; 0269;;;;N;;;;; 1DA6;MODIFIER LETTER SMALL CAPITAL I;Lm;0;L; 026A;;;;N;;;;; 1DA7;MODIFIER LETTER SMALL CAPITAL I WITH STROKE;Lm;0;L; 1D7B;;;;N;;;;; 1DA8;MODIFIER LETTER SMALL J WITH CROSSED-TAIL;Lm;0;L; 029D;;;;N;;;;; 1DA9;MODIFIER LETTER SMALL L WITH RETROFLEX HOOK;Lm;0;L; 026D;;;;N;;;;; 1DAA;MODIFIER LETTER SMALL L WITH PALATAL HOOK;Lm;0;L; 1D85;;;;N;;;;; 1DAB;MODIFIER LETTER SMALL CAPITAL L;Lm;0;L; 029F;;;;N;;;;; 1DAC;MODIFIER LETTER SMALL M WITH HOOK;Lm;0;L; 0271;;;;N;;;;; 1DAD;MODIFIER LETTER SMALL TURNED M WITH LONG LEG;Lm;0;L; 0270;;;;N;;;;; 1DAE;MODIFIER LETTER SMALL N WITH LEFT HOOK;Lm;0;L; 0272;;;;N;;;;; 1DAF;MODIFIER LETTER SMALL N WITH RETROFLEX HOOK;Lm;0;L; 0273;;;;N;;;;; 1DB0;MODIFIER LETTER SMALL CAPITAL N;Lm;0;L; 0274;;;;N;;;;; 1DB1;MODIFIER LETTER SMALL BARRED O;Lm;0;L; 0275;;;;N;;;;; 1DB2;MODIFIER LETTER SMALL PHI;Lm;0;L; 0278;;;;N;;;;; 1DB3;MODIFIER LETTER SMALL S WITH HOOK;Lm;0;L; 0282;;;;N;;;;; 1DB4;MODIFIER LETTER SMALL ESH;Lm;0;L; 0283;;;;N;;;;; 1DB5;MODIFIER LETTER SMALL T WITH PALATAL HOOK;Lm;0;L; 01AB;;;;N;;;;; 1DB6;MODIFIER LETTER SMALL U BAR;Lm;0;L; 0289;;;;N;;;;; 1DB7;MODIFIER LETTER SMALL UPSILON;Lm;0;L; 028A;;;;N;;;;; 1DB8;MODIFIER LETTER SMALL CAPITAL U;Lm;0;L; 1D1C;;;;N;;;;; 1DB9;MODIFIER LETTER SMALL V WITH HOOK;Lm;0;L; 028B;;;;N;;;;; 1DBA;MODIFIER LETTER SMALL TURNED V;Lm;0;L; 028C;;;;N;;;;; 1DBB;MODIFIER LETTER SMALL Z;Lm;0;L; 007A;;;;N;;;;; 1DBC;MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK;Lm;0;L; 0290;;;;N;;;;; 1DBD;MODIFIER LETTER SMALL Z WITH CURL;Lm;0;L; 0291;;;;N;;;;; 1DBE;MODIFIER LETTER SMALL EZH;Lm;0;L; 0292;;;;N;;;;; 1DBF;MODIFIER LETTER SMALL THETA;Lm;0;L; 03B8;;;;N;;;;; 1DC0;COMBINING DOTTED GRAVE ACCENT;Mn;230;NSM;;;;;N;;;;; 1DC1;COMBINING DOTTED ACUTE ACCENT;Mn;230;NSM;;;;;N;;;;; 1DC2;COMBINING SNAKE BELOW;Mn;220;NSM;;;;;N;;;;; 1DC3;COMBINING SUSPENSION MARK;Mn;230;NSM;;;;;N;;;;; 1DC4;COMBINING MACRON-ACUTE;Mn;230;NSM;;;;;N;;;;; 1DC5;COMBINING GRAVE-MACRON;Mn;230;NSM;;;;;N;;;;; 1DC6;COMBINING MACRON-GRAVE;Mn;230;NSM;;;;;N;;;;; 1DC7;COMBINING ACUTE-MACRON;Mn;230;NSM;;;;;N;;;;; 1DC8;COMBINING GRAVE-ACUTE-GRAVE;Mn;230;NSM;;;;;N;;;;; 1DC9;COMBINING ACUTE-GRAVE-ACUTE;Mn;230;NSM;;;;;N;;;;; 1DCA;COMBINING LATIN SMALL LETTER R BELOW;Mn;220;NSM;;;;;N;;;;; 1DCB;COMBINING BREVE-MACRON;Mn;230;NSM;;;;;N;;;;; 1DCC;COMBINING MACRON-BREVE;Mn;230;NSM;;;;;N;;;;; 1DCD;COMBINING DOUBLE CIRCUMFLEX ABOVE;Mn;234;NSM;;;;;N;;;;; 1DCE;COMBINING OGONEK ABOVE;Mn;214;NSM;;;;;N;;;;; 1DCF;COMBINING ZIGZAG BELOW;Mn;220;NSM;;;;;N;;;;; 1DD0;COMBINING IS BELOW;Mn;202;NSM;;;;;N;;;;; 1DD1;COMBINING UR ABOVE;Mn;230;NSM;;;;;N;;;;; 1DD2;COMBINING US ABOVE;Mn;230;NSM;;;;;N;;;;; 1DD3;COMBINING LATIN SMALL LETTER FLATTENED OPEN A ABOVE;Mn;230;NSM;;;;;N;;;;; 1DD4;COMBINING LATIN SMALL LETTER AE;Mn;230;NSM;;;;;N;;;;; 1DD5;COMBINING LATIN SMALL LETTER AO;Mn;230;NSM;;;;;N;;;;; 1DD6;COMBINING LATIN SMALL LETTER AV;Mn;230;NSM;;;;;N;;;;; 1DD7;COMBINING LATIN SMALL LETTER C CEDILLA;Mn;230;NSM;;;;;N;;;;; 1DD8;COMBINING LATIN SMALL LETTER INSULAR D;Mn;230;NSM;;;;;N;;;;; 1DD9;COMBINING LATIN SMALL LETTER ETH;Mn;230;NSM;;;;;N;;;;; 1DDA;COMBINING LATIN SMALL LETTER G;Mn;230;NSM;;;;;N;;;;; 1DDB;COMBINING LATIN LETTER SMALL CAPITAL G;Mn;230;NSM;;;;;N;;;;; 1DDC;COMBINING LATIN SMALL LETTER K;Mn;230;NSM;;;;;N;;;;; 1DDD;COMBINING LATIN SMALL LETTER L;Mn;230;NSM;;;;;N;;;;; 1DDE;COMBINING LATIN LETTER SMALL CAPITAL L;Mn;230;NSM;;;;;N;;;;; 1DDF;COMBINING LATIN LETTER SMALL CAPITAL M;Mn;230;NSM;;;;;N;;;;; 1DE0;COMBINING LATIN SMALL LETTER N;Mn;230;NSM;;;;;N;;;;; 1DE1;COMBINING LATIN LETTER SMALL CAPITAL N;Mn;230;NSM;;;;;N;;;;; 1DE2;COMBINING LATIN LETTER SMALL CAPITAL R;Mn;230;NSM;;;;;N;;;;; 1DE3;COMBINING LATIN SMALL LETTER R ROTUNDA;Mn;230;NSM;;;;;N;;;;; 1DE4;COMBINING LATIN SMALL LETTER S;Mn;230;NSM;;;;;N;;;;; 1DE5;COMBINING LATIN SMALL LETTER LONG S;Mn;230;NSM;;;;;N;;;;; 1DE6;COMBINING LATIN SMALL LETTER Z;Mn;230;NSM;;;;;N;;;;; 1DE7;COMBINING LATIN SMALL LETTER ALPHA;Mn;230;NSM;;;;;N;;;;; 1DE8;COMBINING LATIN SMALL LETTER B;Mn;230;NSM;;;;;N;;;;; 1DE9;COMBINING LATIN SMALL LETTER BETA;Mn;230;NSM;;;;;N;;;;; 1DEA;COMBINING LATIN SMALL LETTER SCHWA;Mn;230;NSM;;;;;N;;;;; 1DEB;COMBINING LATIN SMALL LETTER F;Mn;230;NSM;;;;;N;;;;; 1DEC;COMBINING LATIN SMALL LETTER L WITH DOUBLE MIDDLE TILDE;Mn;230;NSM;;;;;N;;;;; 1DED;COMBINING LATIN SMALL LETTER O WITH LIGHT CENTRALIZATION STROKE;Mn;230;NSM;;;;;N;;;;; 1DEE;COMBINING LATIN SMALL LETTER P;Mn;230;NSM;;;;;N;;;;; 1DEF;COMBINING LATIN SMALL LETTER ESH;Mn;230;NSM;;;;;N;;;;; 1DF0;COMBINING LATIN SMALL LETTER U WITH LIGHT CENTRALIZATION STROKE;Mn;230;NSM;;;;;N;;;;; 1DF1;COMBINING LATIN SMALL LETTER W;Mn;230;NSM;;;;;N;;;;; 1DF2;COMBINING LATIN SMALL LETTER A WITH DIAERESIS;Mn;230;NSM;;;;;N;;;;; 1DF3;COMBINING LATIN SMALL LETTER O WITH DIAERESIS;Mn;230;NSM;;;;;N;;;;; 1DF4;COMBINING LATIN SMALL LETTER U WITH DIAERESIS;Mn;230;NSM;;;;;N;;;;; 1DF5;COMBINING UP TACK ABOVE;Mn;230;NSM;;;;;N;;;;; 1DF6;COMBINING KAVYKA ABOVE RIGHT;Mn;232;NSM;;;;;N;;;;; 1DF7;COMBINING KAVYKA ABOVE LEFT;Mn;228;NSM;;;;;N;;;;; 1DF8;COMBINING DOT ABOVE LEFT;Mn;228;NSM;;;;;N;;;;; 1DF9;COMBINING WIDE INVERTED BRIDGE BELOW;Mn;220;NSM;;;;;N;;;;; 1DFA;COMBINING DOT BELOW LEFT;Mn;218;NSM;;;;;N;;;;; 1DFB;COMBINING DELETION MARK;Mn;230;NSM;;;;;N;;;;; 1DFC;COMBINING DOUBLE INVERTED BREVE BELOW;Mn;233;NSM;;;;;N;;;;; 1DFD;COMBINING ALMOST EQUAL TO BELOW;Mn;220;NSM;;;;;N;;;;; 1DFE;COMBINING LEFT ARROWHEAD ABOVE;Mn;230;NSM;;;;;N;;;;; 1DFF;COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;; 1E00;LATIN CAPITAL LETTER A WITH RING BELOW;Lu;0;L;0041 0325;;;;N;;;;1E01; 1E01;LATIN SMALL LETTER A WITH RING BELOW;Ll;0;L;0061 0325;;;;N;;;1E00;;1E00 1E02;LATIN CAPITAL LETTER B WITH DOT ABOVE;Lu;0;L;0042 0307;;;;N;;;;1E03; 1E03;LATIN SMALL LETTER B WITH DOT ABOVE;Ll;0;L;0062 0307;;;;N;;;1E02;;1E02 1E04;LATIN CAPITAL LETTER B WITH DOT BELOW;Lu;0;L;0042 0323;;;;N;;;;1E05; 1E05;LATIN SMALL LETTER B WITH DOT BELOW;Ll;0;L;0062 0323;;;;N;;;1E04;;1E04 1E06;LATIN CAPITAL LETTER B WITH LINE BELOW;Lu;0;L;0042 0331;;;;N;;;;1E07; 1E07;LATIN SMALL LETTER B WITH LINE BELOW;Ll;0;L;0062 0331;;;;N;;;1E06;;1E06 1E08;LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE;Lu;0;L;00C7 0301;;;;N;;;;1E09; 1E09;LATIN SMALL LETTER C WITH CEDILLA AND ACUTE;Ll;0;L;00E7 0301;;;;N;;;1E08;;1E08 1E0A;LATIN CAPITAL LETTER D WITH DOT ABOVE;Lu;0;L;0044 0307;;;;N;;;;1E0B; 1E0B;LATIN SMALL LETTER D WITH DOT ABOVE;Ll;0;L;0064 0307;;;;N;;;1E0A;;1E0A 1E0C;LATIN CAPITAL LETTER D WITH DOT BELOW;Lu;0;L;0044 0323;;;;N;;;;1E0D; 1E0D;LATIN SMALL LETTER D WITH DOT BELOW;Ll;0;L;0064 0323;;;;N;;;1E0C;;1E0C 1E0E;LATIN CAPITAL LETTER D WITH LINE BELOW;Lu;0;L;0044 0331;;;;N;;;;1E0F; 1E0F;LATIN SMALL LETTER D WITH LINE BELOW;Ll;0;L;0064 0331;;;;N;;;1E0E;;1E0E 1E10;LATIN CAPITAL LETTER D WITH CEDILLA;Lu;0;L;0044 0327;;;;N;;;;1E11; 1E11;LATIN SMALL LETTER D WITH CEDILLA;Ll;0;L;0064 0327;;;;N;;;1E10;;1E10 1E12;LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW;Lu;0;L;0044 032D;;;;N;;;;1E13; 1E13;LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW;Ll;0;L;0064 032D;;;;N;;;1E12;;1E12 1E14;LATIN CAPITAL LETTER E WITH MACRON AND GRAVE;Lu;0;L;0112 0300;;;;N;;;;1E15; 1E15;LATIN SMALL LETTER E WITH MACRON AND GRAVE;Ll;0;L;0113 0300;;;;N;;;1E14;;1E14 1E16;LATIN CAPITAL LETTER E WITH MACRON AND ACUTE;Lu;0;L;0112 0301;;;;N;;;;1E17; 1E17;LATIN SMALL LETTER E WITH MACRON AND ACUTE;Ll;0;L;0113 0301;;;;N;;;1E16;;1E16 1E18;LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW;Lu;0;L;0045 032D;;;;N;;;;1E19; 1E19;LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW;Ll;0;L;0065 032D;;;;N;;;1E18;;1E18 1E1A;LATIN CAPITAL LETTER E WITH TILDE BELOW;Lu;0;L;0045 0330;;;;N;;;;1E1B; 1E1B;LATIN SMALL LETTER E WITH TILDE BELOW;Ll;0;L;0065 0330;;;;N;;;1E1A;;1E1A 1E1C;LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE;Lu;0;L;0228 0306;;;;N;;;;1E1D; 1E1D;LATIN SMALL LETTER E WITH CEDILLA AND BREVE;Ll;0;L;0229 0306;;;;N;;;1E1C;;1E1C 1E1E;LATIN CAPITAL LETTER F WITH DOT ABOVE;Lu;0;L;0046 0307;;;;N;;;;1E1F; 1E1F;LATIN SMALL LETTER F WITH DOT ABOVE;Ll;0;L;0066 0307;;;;N;;;1E1E;;1E1E 1E20;LATIN CAPITAL LETTER G WITH MACRON;Lu;0;L;0047 0304;;;;N;;;;1E21; 1E21;LATIN SMALL LETTER G WITH MACRON;Ll;0;L;0067 0304;;;;N;;;1E20;;1E20 1E22;LATIN CAPITAL LETTER H WITH DOT ABOVE;Lu;0;L;0048 0307;;;;N;;;;1E23; 1E23;LATIN SMALL LETTER H WITH DOT ABOVE;Ll;0;L;0068 0307;;;;N;;;1E22;;1E22 1E24;LATIN CAPITAL LETTER H WITH DOT BELOW;Lu;0;L;0048 0323;;;;N;;;;1E25; 1E25;LATIN SMALL LETTER H WITH DOT BELOW;Ll;0;L;0068 0323;;;;N;;;1E24;;1E24 1E26;LATIN CAPITAL LETTER H WITH DIAERESIS;Lu;0;L;0048 0308;;;;N;;;;1E27; 1E27;LATIN SMALL LETTER H WITH DIAERESIS;Ll;0;L;0068 0308;;;;N;;;1E26;;1E26 1E28;LATIN CAPITAL LETTER H WITH CEDILLA;Lu;0;L;0048 0327;;;;N;;;;1E29; 1E29;LATIN SMALL LETTER H WITH CEDILLA;Ll;0;L;0068 0327;;;;N;;;1E28;;1E28 1E2A;LATIN CAPITAL LETTER H WITH BREVE BELOW;Lu;0;L;0048 032E;;;;N;;;;1E2B; 1E2B;LATIN SMALL LETTER H WITH BREVE BELOW;Ll;0;L;0068 032E;;;;N;;;1E2A;;1E2A 1E2C;LATIN CAPITAL LETTER I WITH TILDE BELOW;Lu;0;L;0049 0330;;;;N;;;;1E2D; 1E2D;LATIN SMALL LETTER I WITH TILDE BELOW;Ll;0;L;0069 0330;;;;N;;;1E2C;;1E2C 1E2E;LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE;Lu;0;L;00CF 0301;;;;N;;;;1E2F; 1E2F;LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE;Ll;0;L;00EF 0301;;;;N;;;1E2E;;1E2E 1E30;LATIN CAPITAL LETTER K WITH ACUTE;Lu;0;L;004B 0301;;;;N;;;;1E31; 1E31;LATIN SMALL LETTER K WITH ACUTE;Ll;0;L;006B 0301;;;;N;;;1E30;;1E30 1E32;LATIN CAPITAL LETTER K WITH DOT BELOW;Lu;0;L;004B 0323;;;;N;;;;1E33; 1E33;LATIN SMALL LETTER K WITH DOT BELOW;Ll;0;L;006B 0323;;;;N;;;1E32;;1E32 1E34;LATIN CAPITAL LETTER K WITH LINE BELOW;Lu;0;L;004B 0331;;;;N;;;;1E35; 1E35;LATIN SMALL LETTER K WITH LINE BELOW;Ll;0;L;006B 0331;;;;N;;;1E34;;1E34 1E36;LATIN CAPITAL LETTER L WITH DOT BELOW;Lu;0;L;004C 0323;;;;N;;;;1E37; 1E37;LATIN SMALL LETTER L WITH DOT BELOW;Ll;0;L;006C 0323;;;;N;;;1E36;;1E36 1E38;LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON;Lu;0;L;1E36 0304;;;;N;;;;1E39; 1E39;LATIN SMALL LETTER L WITH DOT BELOW AND MACRON;Ll;0;L;1E37 0304;;;;N;;;1E38;;1E38 1E3A;LATIN CAPITAL LETTER L WITH LINE BELOW;Lu;0;L;004C 0331;;;;N;;;;1E3B; 1E3B;LATIN SMALL LETTER L WITH LINE BELOW;Ll;0;L;006C 0331;;;;N;;;1E3A;;1E3A 1E3C;LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW;Lu;0;L;004C 032D;;;;N;;;;1E3D; 1E3D;LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW;Ll;0;L;006C 032D;;;;N;;;1E3C;;1E3C 1E3E;LATIN CAPITAL LETTER M WITH ACUTE;Lu;0;L;004D 0301;;;;N;;;;1E3F; 1E3F;LATIN SMALL LETTER M WITH ACUTE;Ll;0;L;006D 0301;;;;N;;;1E3E;;1E3E 1E40;LATIN CAPITAL LETTER M WITH DOT ABOVE;Lu;0;L;004D 0307;;;;N;;;;1E41; 1E41;LATIN SMALL LETTER M WITH DOT ABOVE;Ll;0;L;006D 0307;;;;N;;;1E40;;1E40 1E42;LATIN CAPITAL LETTER M WITH DOT BELOW;Lu;0;L;004D 0323;;;;N;;;;1E43; 1E43;LATIN SMALL LETTER M WITH DOT BELOW;Ll;0;L;006D 0323;;;;N;;;1E42;;1E42 1E44;LATIN CAPITAL LETTER N WITH DOT ABOVE;Lu;0;L;004E 0307;;;;N;;;;1E45; 1E45;LATIN SMALL LETTER N WITH DOT ABOVE;Ll;0;L;006E 0307;;;;N;;;1E44;;1E44 1E46;LATIN CAPITAL LETTER N WITH DOT BELOW;Lu;0;L;004E 0323;;;;N;;;;1E47; 1E47;LATIN SMALL LETTER N WITH DOT BELOW;Ll;0;L;006E 0323;;;;N;;;1E46;;1E46 1E48;LATIN CAPITAL LETTER N WITH LINE BELOW;Lu;0;L;004E 0331;;;;N;;;;1E49; 1E49;LATIN SMALL LETTER N WITH LINE BELOW;Ll;0;L;006E 0331;;;;N;;;1E48;;1E48 1E4A;LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW;Lu;0;L;004E 032D;;;;N;;;;1E4B; 1E4B;LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW;Ll;0;L;006E 032D;;;;N;;;1E4A;;1E4A 1E4C;LATIN CAPITAL LETTER O WITH TILDE AND ACUTE;Lu;0;L;00D5 0301;;;;N;;;;1E4D; 1E4D;LATIN SMALL LETTER O WITH TILDE AND ACUTE;Ll;0;L;00F5 0301;;;;N;;;1E4C;;1E4C 1E4E;LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS;Lu;0;L;00D5 0308;;;;N;;;;1E4F; 1E4F;LATIN SMALL LETTER O WITH TILDE AND DIAERESIS;Ll;0;L;00F5 0308;;;;N;;;1E4E;;1E4E 1E50;LATIN CAPITAL LETTER O WITH MACRON AND GRAVE;Lu;0;L;014C 0300;;;;N;;;;1E51; 1E51;LATIN SMALL LETTER O WITH MACRON AND GRAVE;Ll;0;L;014D 0300;;;;N;;;1E50;;1E50 1E52;LATIN CAPITAL LETTER O WITH MACRON AND ACUTE;Lu;0;L;014C 0301;;;;N;;;;1E53; 1E53;LATIN SMALL LETTER O WITH MACRON AND ACUTE;Ll;0;L;014D 0301;;;;N;;;1E52;;1E52 1E54;LATIN CAPITAL LETTER P WITH ACUTE;Lu;0;L;0050 0301;;;;N;;;;1E55; 1E55;LATIN SMALL LETTER P WITH ACUTE;Ll;0;L;0070 0301;;;;N;;;1E54;;1E54 1E56;LATIN CAPITAL LETTER P WITH DOT ABOVE;Lu;0;L;0050 0307;;;;N;;;;1E57; 1E57;LATIN SMALL LETTER P WITH DOT ABOVE;Ll;0;L;0070 0307;;;;N;;;1E56;;1E56 1E58;LATIN CAPITAL LETTER R WITH DOT ABOVE;Lu;0;L;0052 0307;;;;N;;;;1E59; 1E59;LATIN SMALL LETTER R WITH DOT ABOVE;Ll;0;L;0072 0307;;;;N;;;1E58;;1E58 1E5A;LATIN CAPITAL LETTER R WITH DOT BELOW;Lu;0;L;0052 0323;;;;N;;;;1E5B; 1E5B;LATIN SMALL LETTER R WITH DOT BELOW;Ll;0;L;0072 0323;;;;N;;;1E5A;;1E5A 1E5C;LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON;Lu;0;L;1E5A 0304;;;;N;;;;1E5D; 1E5D;LATIN SMALL LETTER R WITH DOT BELOW AND MACRON;Ll;0;L;1E5B 0304;;;;N;;;1E5C;;1E5C 1E5E;LATIN CAPITAL LETTER R WITH LINE BELOW;Lu;0;L;0052 0331;;;;N;;;;1E5F; 1E5F;LATIN SMALL LETTER R WITH LINE BELOW;Ll;0;L;0072 0331;;;;N;;;1E5E;;1E5E 1E60;LATIN CAPITAL LETTER S WITH DOT ABOVE;Lu;0;L;0053 0307;;;;N;;;;1E61; 1E61;LATIN SMALL LETTER S WITH DOT ABOVE;Ll;0;L;0073 0307;;;;N;;;1E60;;1E60 1E62;LATIN CAPITAL LETTER S WITH DOT BELOW;Lu;0;L;0053 0323;;;;N;;;;1E63; 1E63;LATIN SMALL LETTER S WITH DOT BELOW;Ll;0;L;0073 0323;;;;N;;;1E62;;1E62 1E64;LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE;Lu;0;L;015A 0307;;;;N;;;;1E65; 1E65;LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE;Ll;0;L;015B 0307;;;;N;;;1E64;;1E64 1E66;LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE;Lu;0;L;0160 0307;;;;N;;;;1E67; 1E67;LATIN SMALL LETTER S WITH CARON AND DOT ABOVE;Ll;0;L;0161 0307;;;;N;;;1E66;;1E66 1E68;LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE;Lu;0;L;1E62 0307;;;;N;;;;1E69; 1E69;LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE;Ll;0;L;1E63 0307;;;;N;;;1E68;;1E68 1E6A;LATIN CAPITAL LETTER T WITH DOT ABOVE;Lu;0;L;0054 0307;;;;N;;;;1E6B; 1E6B;LATIN SMALL LETTER T WITH DOT ABOVE;Ll;0;L;0074 0307;;;;N;;;1E6A;;1E6A 1E6C;LATIN CAPITAL LETTER T WITH DOT BELOW;Lu;0;L;0054 0323;;;;N;;;;1E6D; 1E6D;LATIN SMALL LETTER T WITH DOT BELOW;Ll;0;L;0074 0323;;;;N;;;1E6C;;1E6C 1E6E;LATIN CAPITAL LETTER T WITH LINE BELOW;Lu;0;L;0054 0331;;;;N;;;;1E6F; 1E6F;LATIN SMALL LETTER T WITH LINE BELOW;Ll;0;L;0074 0331;;;;N;;;1E6E;;1E6E 1E70;LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW;Lu;0;L;0054 032D;;;;N;;;;1E71; 1E71;LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW;Ll;0;L;0074 032D;;;;N;;;1E70;;1E70 1E72;LATIN CAPITAL LETTER U WITH DIAERESIS BELOW;Lu;0;L;0055 0324;;;;N;;;;1E73; 1E73;LATIN SMALL LETTER U WITH DIAERESIS BELOW;Ll;0;L;0075 0324;;;;N;;;1E72;;1E72 1E74;LATIN CAPITAL LETTER U WITH TILDE BELOW;Lu;0;L;0055 0330;;;;N;;;;1E75; 1E75;LATIN SMALL LETTER U WITH TILDE BELOW;Ll;0;L;0075 0330;;;;N;;;1E74;;1E74 1E76;LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW;Lu;0;L;0055 032D;;;;N;;;;1E77; 1E77;LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW;Ll;0;L;0075 032D;;;;N;;;1E76;;1E76 1E78;LATIN CAPITAL LETTER U WITH TILDE AND ACUTE;Lu;0;L;0168 0301;;;;N;;;;1E79; 1E79;LATIN SMALL LETTER U WITH TILDE AND ACUTE;Ll;0;L;0169 0301;;;;N;;;1E78;;1E78 1E7A;LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS;Lu;0;L;016A 0308;;;;N;;;;1E7B; 1E7B;LATIN SMALL LETTER U WITH MACRON AND DIAERESIS;Ll;0;L;016B 0308;;;;N;;;1E7A;;1E7A 1E7C;LATIN CAPITAL LETTER V WITH TILDE;Lu;0;L;0056 0303;;;;N;;;;1E7D; 1E7D;LATIN SMALL LETTER V WITH TILDE;Ll;0;L;0076 0303;;;;N;;;1E7C;;1E7C 1E7E;LATIN CAPITAL LETTER V WITH DOT BELOW;Lu;0;L;0056 0323;;;;N;;;;1E7F; 1E7F;LATIN SMALL LETTER V WITH DOT BELOW;Ll;0;L;0076 0323;;;;N;;;1E7E;;1E7E 1E80;LATIN CAPITAL LETTER W WITH GRAVE;Lu;0;L;0057 0300;;;;N;;;;1E81; 1E81;LATIN SMALL LETTER W WITH GRAVE;Ll;0;L;0077 0300;;;;N;;;1E80;;1E80 1E82;LATIN CAPITAL LETTER W WITH ACUTE;Lu;0;L;0057 0301;;;;N;;;;1E83; 1E83;LATIN SMALL LETTER W WITH ACUTE;Ll;0;L;0077 0301;;;;N;;;1E82;;1E82 1E84;LATIN CAPITAL LETTER W WITH DIAERESIS;Lu;0;L;0057 0308;;;;N;;;;1E85; 1E85;LATIN SMALL LETTER W WITH DIAERESIS;Ll;0;L;0077 0308;;;;N;;;1E84;;1E84 1E86;LATIN CAPITAL LETTER W WITH DOT ABOVE;Lu;0;L;0057 0307;;;;N;;;;1E87; 1E87;LATIN SMALL LETTER W WITH DOT ABOVE;Ll;0;L;0077 0307;;;;N;;;1E86;;1E86 1E88;LATIN CAPITAL LETTER W WITH DOT BELOW;Lu;0;L;0057 0323;;;;N;;;;1E89; 1E89;LATIN SMALL LETTER W WITH DOT BELOW;Ll;0;L;0077 0323;;;;N;;;1E88;;1E88 1E8A;LATIN CAPITAL LETTER X WITH DOT ABOVE;Lu;0;L;0058 0307;;;;N;;;;1E8B; 1E8B;LATIN SMALL LETTER X WITH DOT ABOVE;Ll;0;L;0078 0307;;;;N;;;1E8A;;1E8A 1E8C;LATIN CAPITAL LETTER X WITH DIAERESIS;Lu;0;L;0058 0308;;;;N;;;;1E8D; 1E8D;LATIN SMALL LETTER X WITH DIAERESIS;Ll;0;L;0078 0308;;;;N;;;1E8C;;1E8C 1E8E;LATIN CAPITAL LETTER Y WITH DOT ABOVE;Lu;0;L;0059 0307;;;;N;;;;1E8F; 1E8F;LATIN SMALL LETTER Y WITH DOT ABOVE;Ll;0;L;0079 0307;;;;N;;;1E8E;;1E8E 1E90;LATIN CAPITAL LETTER Z WITH CIRCUMFLEX;Lu;0;L;005A 0302;;;;N;;;;1E91; 1E91;LATIN SMALL LETTER Z WITH CIRCUMFLEX;Ll;0;L;007A 0302;;;;N;;;1E90;;1E90 1E92;LATIN CAPITAL LETTER Z WITH DOT BELOW;Lu;0;L;005A 0323;;;;N;;;;1E93; 1E93;LATIN SMALL LETTER Z WITH DOT BELOW;Ll;0;L;007A 0323;;;;N;;;1E92;;1E92 1E94;LATIN CAPITAL LETTER Z WITH LINE BELOW;Lu;0;L;005A 0331;;;;N;;;;1E95; 1E95;LATIN SMALL LETTER Z WITH LINE BELOW;Ll;0;L;007A 0331;;;;N;;;1E94;;1E94 1E96;LATIN SMALL LETTER H WITH LINE BELOW;Ll;0;L;0068 0331;;;;N;;;;; 1E97;LATIN SMALL LETTER T WITH DIAERESIS;Ll;0;L;0074 0308;;;;N;;;;; 1E98;LATIN SMALL LETTER W WITH RING ABOVE;Ll;0;L;0077 030A;;;;N;;;;; 1E99;LATIN SMALL LETTER Y WITH RING ABOVE;Ll;0;L;0079 030A;;;;N;;;;; 1E9A;LATIN SMALL LETTER A WITH RIGHT HALF RING;Ll;0;L; 0061 02BE;;;;N;;;;; 1E9B;LATIN SMALL LETTER LONG S WITH DOT ABOVE;Ll;0;L;017F 0307;;;;N;;;1E60;;1E60 1E9C;LATIN SMALL LETTER LONG S WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;;; 1E9D;LATIN SMALL LETTER LONG S WITH HIGH STROKE;Ll;0;L;;;;;N;;;;; 1E9E;LATIN CAPITAL LETTER SHARP S;Lu;0;L;;;;;N;;;;00DF; 1E9F;LATIN SMALL LETTER DELTA;Ll;0;L;;;;;N;;;;; 1EA0;LATIN CAPITAL LETTER A WITH DOT BELOW;Lu;0;L;0041 0323;;;;N;;;;1EA1; 1EA1;LATIN SMALL LETTER A WITH DOT BELOW;Ll;0;L;0061 0323;;;;N;;;1EA0;;1EA0 1EA2;LATIN CAPITAL LETTER A WITH HOOK ABOVE;Lu;0;L;0041 0309;;;;N;;;;1EA3; 1EA3;LATIN SMALL LETTER A WITH HOOK ABOVE;Ll;0;L;0061 0309;;;;N;;;1EA2;;1EA2 1EA4;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00C2 0301;;;;N;;;;1EA5; 1EA5;LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00E2 0301;;;;N;;;1EA4;;1EA4 1EA6;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00C2 0300;;;;N;;;;1EA7; 1EA7;LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00E2 0300;;;;N;;;1EA6;;1EA6 1EA8;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00C2 0309;;;;N;;;;1EA9; 1EA9;LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00E2 0309;;;;N;;;1EA8;;1EA8 1EAA;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE;Lu;0;L;00C2 0303;;;;N;;;;1EAB; 1EAB;LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE;Ll;0;L;00E2 0303;;;;N;;;1EAA;;1EAA 1EAC;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;1EA0 0302;;;;N;;;;1EAD; 1EAD;LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;1EA1 0302;;;;N;;;1EAC;;1EAC 1EAE;LATIN CAPITAL LETTER A WITH BREVE AND ACUTE;Lu;0;L;0102 0301;;;;N;;;;1EAF; 1EAF;LATIN SMALL LETTER A WITH BREVE AND ACUTE;Ll;0;L;0103 0301;;;;N;;;1EAE;;1EAE 1EB0;LATIN CAPITAL LETTER A WITH BREVE AND GRAVE;Lu;0;L;0102 0300;;;;N;;;;1EB1; 1EB1;LATIN SMALL LETTER A WITH BREVE AND GRAVE;Ll;0;L;0103 0300;;;;N;;;1EB0;;1EB0 1EB2;LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE;Lu;0;L;0102 0309;;;;N;;;;1EB3; 1EB3;LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE;Ll;0;L;0103 0309;;;;N;;;1EB2;;1EB2 1EB4;LATIN CAPITAL LETTER A WITH BREVE AND TILDE;Lu;0;L;0102 0303;;;;N;;;;1EB5; 1EB5;LATIN SMALL LETTER A WITH BREVE AND TILDE;Ll;0;L;0103 0303;;;;N;;;1EB4;;1EB4 1EB6;LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW;Lu;0;L;1EA0 0306;;;;N;;;;1EB7; 1EB7;LATIN SMALL LETTER A WITH BREVE AND DOT BELOW;Ll;0;L;1EA1 0306;;;;N;;;1EB6;;1EB6 1EB8;LATIN CAPITAL LETTER E WITH DOT BELOW;Lu;0;L;0045 0323;;;;N;;;;1EB9; 1EB9;LATIN SMALL LETTER E WITH DOT BELOW;Ll;0;L;0065 0323;;;;N;;;1EB8;;1EB8 1EBA;LATIN CAPITAL LETTER E WITH HOOK ABOVE;Lu;0;L;0045 0309;;;;N;;;;1EBB; 1EBB;LATIN SMALL LETTER E WITH HOOK ABOVE;Ll;0;L;0065 0309;;;;N;;;1EBA;;1EBA 1EBC;LATIN CAPITAL LETTER E WITH TILDE;Lu;0;L;0045 0303;;;;N;;;;1EBD; 1EBD;LATIN SMALL LETTER E WITH TILDE;Ll;0;L;0065 0303;;;;N;;;1EBC;;1EBC 1EBE;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00CA 0301;;;;N;;;;1EBF; 1EBF;LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00EA 0301;;;;N;;;1EBE;;1EBE 1EC0;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00CA 0300;;;;N;;;;1EC1; 1EC1;LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00EA 0300;;;;N;;;1EC0;;1EC0 1EC2;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00CA 0309;;;;N;;;;1EC3; 1EC3;LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00EA 0309;;;;N;;;1EC2;;1EC2 1EC4;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE;Lu;0;L;00CA 0303;;;;N;;;;1EC5; 1EC5;LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE;Ll;0;L;00EA 0303;;;;N;;;1EC4;;1EC4 1EC6;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;1EB8 0302;;;;N;;;;1EC7; 1EC7;LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;1EB9 0302;;;;N;;;1EC6;;1EC6 1EC8;LATIN CAPITAL LETTER I WITH HOOK ABOVE;Lu;0;L;0049 0309;;;;N;;;;1EC9; 1EC9;LATIN SMALL LETTER I WITH HOOK ABOVE;Ll;0;L;0069 0309;;;;N;;;1EC8;;1EC8 1ECA;LATIN CAPITAL LETTER I WITH DOT BELOW;Lu;0;L;0049 0323;;;;N;;;;1ECB; 1ECB;LATIN SMALL LETTER I WITH DOT BELOW;Ll;0;L;0069 0323;;;;N;;;1ECA;;1ECA 1ECC;LATIN CAPITAL LETTER O WITH DOT BELOW;Lu;0;L;004F 0323;;;;N;;;;1ECD; 1ECD;LATIN SMALL LETTER O WITH DOT BELOW;Ll;0;L;006F 0323;;;;N;;;1ECC;;1ECC 1ECE;LATIN CAPITAL LETTER O WITH HOOK ABOVE;Lu;0;L;004F 0309;;;;N;;;;1ECF; 1ECF;LATIN SMALL LETTER O WITH HOOK ABOVE;Ll;0;L;006F 0309;;;;N;;;1ECE;;1ECE 1ED0;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00D4 0301;;;;N;;;;1ED1; 1ED1;LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00F4 0301;;;;N;;;1ED0;;1ED0 1ED2;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00D4 0300;;;;N;;;;1ED3; 1ED3;LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00F4 0300;;;;N;;;1ED2;;1ED2 1ED4;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00D4 0309;;;;N;;;;1ED5; 1ED5;LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00F4 0309;;;;N;;;1ED4;;1ED4 1ED6;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE;Lu;0;L;00D4 0303;;;;N;;;;1ED7; 1ED7;LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE;Ll;0;L;00F4 0303;;;;N;;;1ED6;;1ED6 1ED8;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;1ECC 0302;;;;N;;;;1ED9; 1ED9;LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;1ECD 0302;;;;N;;;1ED8;;1ED8 1EDA;LATIN CAPITAL LETTER O WITH HORN AND ACUTE;Lu;0;L;01A0 0301;;;;N;;;;1EDB; 1EDB;LATIN SMALL LETTER O WITH HORN AND ACUTE;Ll;0;L;01A1 0301;;;;N;;;1EDA;;1EDA 1EDC;LATIN CAPITAL LETTER O WITH HORN AND GRAVE;Lu;0;L;01A0 0300;;;;N;;;;1EDD; 1EDD;LATIN SMALL LETTER O WITH HORN AND GRAVE;Ll;0;L;01A1 0300;;;;N;;;1EDC;;1EDC 1EDE;LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE;Lu;0;L;01A0 0309;;;;N;;;;1EDF; 1EDF;LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE;Ll;0;L;01A1 0309;;;;N;;;1EDE;;1EDE 1EE0;LATIN CAPITAL LETTER O WITH HORN AND TILDE;Lu;0;L;01A0 0303;;;;N;;;;1EE1; 1EE1;LATIN SMALL LETTER O WITH HORN AND TILDE;Ll;0;L;01A1 0303;;;;N;;;1EE0;;1EE0 1EE2;LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW;Lu;0;L;01A0 0323;;;;N;;;;1EE3; 1EE3;LATIN SMALL LETTER O WITH HORN AND DOT BELOW;Ll;0;L;01A1 0323;;;;N;;;1EE2;;1EE2 1EE4;LATIN CAPITAL LETTER U WITH DOT BELOW;Lu;0;L;0055 0323;;;;N;;;;1EE5; 1EE5;LATIN SMALL LETTER U WITH DOT BELOW;Ll;0;L;0075 0323;;;;N;;;1EE4;;1EE4 1EE6;LATIN CAPITAL LETTER U WITH HOOK ABOVE;Lu;0;L;0055 0309;;;;N;;;;1EE7; 1EE7;LATIN SMALL LETTER U WITH HOOK ABOVE;Ll;0;L;0075 0309;;;;N;;;1EE6;;1EE6 1EE8;LATIN CAPITAL LETTER U WITH HORN AND ACUTE;Lu;0;L;01AF 0301;;;;N;;;;1EE9; 1EE9;LATIN SMALL LETTER U WITH HORN AND ACUTE;Ll;0;L;01B0 0301;;;;N;;;1EE8;;1EE8 1EEA;LATIN CAPITAL LETTER U WITH HORN AND GRAVE;Lu;0;L;01AF 0300;;;;N;;;;1EEB; 1EEB;LATIN SMALL LETTER U WITH HORN AND GRAVE;Ll;0;L;01B0 0300;;;;N;;;1EEA;;1EEA 1EEC;LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE;Lu;0;L;01AF 0309;;;;N;;;;1EED; 1EED;LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE;Ll;0;L;01B0 0309;;;;N;;;1EEC;;1EEC 1EEE;LATIN CAPITAL LETTER U WITH HORN AND TILDE;Lu;0;L;01AF 0303;;;;N;;;;1EEF; 1EEF;LATIN SMALL LETTER U WITH HORN AND TILDE;Ll;0;L;01B0 0303;;;;N;;;1EEE;;1EEE 1EF0;LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW;Lu;0;L;01AF 0323;;;;N;;;;1EF1; 1EF1;LATIN SMALL LETTER U WITH HORN AND DOT BELOW;Ll;0;L;01B0 0323;;;;N;;;1EF0;;1EF0 1EF2;LATIN CAPITAL LETTER Y WITH GRAVE;Lu;0;L;0059 0300;;;;N;;;;1EF3; 1EF3;LATIN SMALL LETTER Y WITH GRAVE;Ll;0;L;0079 0300;;;;N;;;1EF2;;1EF2 1EF4;LATIN CAPITAL LETTER Y WITH DOT BELOW;Lu;0;L;0059 0323;;;;N;;;;1EF5; 1EF5;LATIN SMALL LETTER Y WITH DOT BELOW;Ll;0;L;0079 0323;;;;N;;;1EF4;;1EF4 1EF6;LATIN CAPITAL LETTER Y WITH HOOK ABOVE;Lu;0;L;0059 0309;;;;N;;;;1EF7; 1EF7;LATIN SMALL LETTER Y WITH HOOK ABOVE;Ll;0;L;0079 0309;;;;N;;;1EF6;;1EF6 1EF8;LATIN CAPITAL LETTER Y WITH TILDE;Lu;0;L;0059 0303;;;;N;;;;1EF9; 1EF9;LATIN SMALL LETTER Y WITH TILDE;Ll;0;L;0079 0303;;;;N;;;1EF8;;1EF8 1EFA;LATIN CAPITAL LETTER MIDDLE-WELSH LL;Lu;0;L;;;;;N;;;;1EFB; 1EFB;LATIN SMALL LETTER MIDDLE-WELSH LL;Ll;0;L;;;;;N;;;1EFA;;1EFA 1EFC;LATIN CAPITAL LETTER MIDDLE-WELSH V;Lu;0;L;;;;;N;;;;1EFD; 1EFD;LATIN SMALL LETTER MIDDLE-WELSH V;Ll;0;L;;;;;N;;;1EFC;;1EFC 1EFE;LATIN CAPITAL LETTER Y WITH LOOP;Lu;0;L;;;;;N;;;;1EFF; 1EFF;LATIN SMALL LETTER Y WITH LOOP;Ll;0;L;;;;;N;;;1EFE;;1EFE 1F00;GREEK SMALL LETTER ALPHA WITH PSILI;Ll;0;L;03B1 0313;;;;N;;;1F08;;1F08 1F01;GREEK SMALL LETTER ALPHA WITH DASIA;Ll;0;L;03B1 0314;;;;N;;;1F09;;1F09 1F02;GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA;Ll;0;L;1F00 0300;;;;N;;;1F0A;;1F0A 1F03;GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA;Ll;0;L;1F01 0300;;;;N;;;1F0B;;1F0B 1F04;GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA;Ll;0;L;1F00 0301;;;;N;;;1F0C;;1F0C 1F05;GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA;Ll;0;L;1F01 0301;;;;N;;;1F0D;;1F0D 1F06;GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI;Ll;0;L;1F00 0342;;;;N;;;1F0E;;1F0E 1F07;GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI;Ll;0;L;1F01 0342;;;;N;;;1F0F;;1F0F 1F08;GREEK CAPITAL LETTER ALPHA WITH PSILI;Lu;0;L;0391 0313;;;;N;;;;1F00; 1F09;GREEK CAPITAL LETTER ALPHA WITH DASIA;Lu;0;L;0391 0314;;;;N;;;;1F01; 1F0A;GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA;Lu;0;L;1F08 0300;;;;N;;;;1F02; 1F0B;GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA;Lu;0;L;1F09 0300;;;;N;;;;1F03; 1F0C;GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA;Lu;0;L;1F08 0301;;;;N;;;;1F04; 1F0D;GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA;Lu;0;L;1F09 0301;;;;N;;;;1F05; 1F0E;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI;Lu;0;L;1F08 0342;;;;N;;;;1F06; 1F0F;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI;Lu;0;L;1F09 0342;;;;N;;;;1F07; 1F10;GREEK SMALL LETTER EPSILON WITH PSILI;Ll;0;L;03B5 0313;;;;N;;;1F18;;1F18 1F11;GREEK SMALL LETTER EPSILON WITH DASIA;Ll;0;L;03B5 0314;;;;N;;;1F19;;1F19 1F12;GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA;Ll;0;L;1F10 0300;;;;N;;;1F1A;;1F1A 1F13;GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA;Ll;0;L;1F11 0300;;;;N;;;1F1B;;1F1B 1F14;GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA;Ll;0;L;1F10 0301;;;;N;;;1F1C;;1F1C 1F15;GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA;Ll;0;L;1F11 0301;;;;N;;;1F1D;;1F1D 1F18;GREEK CAPITAL LETTER EPSILON WITH PSILI;Lu;0;L;0395 0313;;;;N;;;;1F10; 1F19;GREEK CAPITAL LETTER EPSILON WITH DASIA;Lu;0;L;0395 0314;;;;N;;;;1F11; 1F1A;GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA;Lu;0;L;1F18 0300;;;;N;;;;1F12; 1F1B;GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA;Lu;0;L;1F19 0300;;;;N;;;;1F13; 1F1C;GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA;Lu;0;L;1F18 0301;;;;N;;;;1F14; 1F1D;GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA;Lu;0;L;1F19 0301;;;;N;;;;1F15; 1F20;GREEK SMALL LETTER ETA WITH PSILI;Ll;0;L;03B7 0313;;;;N;;;1F28;;1F28 1F21;GREEK SMALL LETTER ETA WITH DASIA;Ll;0;L;03B7 0314;;;;N;;;1F29;;1F29 1F22;GREEK SMALL LETTER ETA WITH PSILI AND VARIA;Ll;0;L;1F20 0300;;;;N;;;1F2A;;1F2A 1F23;GREEK SMALL LETTER ETA WITH DASIA AND VARIA;Ll;0;L;1F21 0300;;;;N;;;1F2B;;1F2B 1F24;GREEK SMALL LETTER ETA WITH PSILI AND OXIA;Ll;0;L;1F20 0301;;;;N;;;1F2C;;1F2C 1F25;GREEK SMALL LETTER ETA WITH DASIA AND OXIA;Ll;0;L;1F21 0301;;;;N;;;1F2D;;1F2D 1F26;GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI;Ll;0;L;1F20 0342;;;;N;;;1F2E;;1F2E 1F27;GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI;Ll;0;L;1F21 0342;;;;N;;;1F2F;;1F2F 1F28;GREEK CAPITAL LETTER ETA WITH PSILI;Lu;0;L;0397 0313;;;;N;;;;1F20; 1F29;GREEK CAPITAL LETTER ETA WITH DASIA;Lu;0;L;0397 0314;;;;N;;;;1F21; 1F2A;GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA;Lu;0;L;1F28 0300;;;;N;;;;1F22; 1F2B;GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA;Lu;0;L;1F29 0300;;;;N;;;;1F23; 1F2C;GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA;Lu;0;L;1F28 0301;;;;N;;;;1F24; 1F2D;GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA;Lu;0;L;1F29 0301;;;;N;;;;1F25; 1F2E;GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI;Lu;0;L;1F28 0342;;;;N;;;;1F26; 1F2F;GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI;Lu;0;L;1F29 0342;;;;N;;;;1F27; 1F30;GREEK SMALL LETTER IOTA WITH PSILI;Ll;0;L;03B9 0313;;;;N;;;1F38;;1F38 1F31;GREEK SMALL LETTER IOTA WITH DASIA;Ll;0;L;03B9 0314;;;;N;;;1F39;;1F39 1F32;GREEK SMALL LETTER IOTA WITH PSILI AND VARIA;Ll;0;L;1F30 0300;;;;N;;;1F3A;;1F3A 1F33;GREEK SMALL LETTER IOTA WITH DASIA AND VARIA;Ll;0;L;1F31 0300;;;;N;;;1F3B;;1F3B 1F34;GREEK SMALL LETTER IOTA WITH PSILI AND OXIA;Ll;0;L;1F30 0301;;;;N;;;1F3C;;1F3C 1F35;GREEK SMALL LETTER IOTA WITH DASIA AND OXIA;Ll;0;L;1F31 0301;;;;N;;;1F3D;;1F3D 1F36;GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI;Ll;0;L;1F30 0342;;;;N;;;1F3E;;1F3E 1F37;GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI;Ll;0;L;1F31 0342;;;;N;;;1F3F;;1F3F 1F38;GREEK CAPITAL LETTER IOTA WITH PSILI;Lu;0;L;0399 0313;;;;N;;;;1F30; 1F39;GREEK CAPITAL LETTER IOTA WITH DASIA;Lu;0;L;0399 0314;;;;N;;;;1F31; 1F3A;GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA;Lu;0;L;1F38 0300;;;;N;;;;1F32; 1F3B;GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA;Lu;0;L;1F39 0300;;;;N;;;;1F33; 1F3C;GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA;Lu;0;L;1F38 0301;;;;N;;;;1F34; 1F3D;GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA;Lu;0;L;1F39 0301;;;;N;;;;1F35; 1F3E;GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI;Lu;0;L;1F38 0342;;;;N;;;;1F36; 1F3F;GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI;Lu;0;L;1F39 0342;;;;N;;;;1F37; 1F40;GREEK SMALL LETTER OMICRON WITH PSILI;Ll;0;L;03BF 0313;;;;N;;;1F48;;1F48 1F41;GREEK SMALL LETTER OMICRON WITH DASIA;Ll;0;L;03BF 0314;;;;N;;;1F49;;1F49 1F42;GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA;Ll;0;L;1F40 0300;;;;N;;;1F4A;;1F4A 1F43;GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA;Ll;0;L;1F41 0300;;;;N;;;1F4B;;1F4B 1F44;GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA;Ll;0;L;1F40 0301;;;;N;;;1F4C;;1F4C 1F45;GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA;Ll;0;L;1F41 0301;;;;N;;;1F4D;;1F4D 1F48;GREEK CAPITAL LETTER OMICRON WITH PSILI;Lu;0;L;039F 0313;;;;N;;;;1F40; 1F49;GREEK CAPITAL LETTER OMICRON WITH DASIA;Lu;0;L;039F 0314;;;;N;;;;1F41; 1F4A;GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA;Lu;0;L;1F48 0300;;;;N;;;;1F42; 1F4B;GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA;Lu;0;L;1F49 0300;;;;N;;;;1F43; 1F4C;GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA;Lu;0;L;1F48 0301;;;;N;;;;1F44; 1F4D;GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA;Lu;0;L;1F49 0301;;;;N;;;;1F45; 1F50;GREEK SMALL LETTER UPSILON WITH PSILI;Ll;0;L;03C5 0313;;;;N;;;;; 1F51;GREEK SMALL LETTER UPSILON WITH DASIA;Ll;0;L;03C5 0314;;;;N;;;1F59;;1F59 1F52;GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA;Ll;0;L;1F50 0300;;;;N;;;;; 1F53;GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA;Ll;0;L;1F51 0300;;;;N;;;1F5B;;1F5B 1F54;GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA;Ll;0;L;1F50 0301;;;;N;;;;; 1F55;GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA;Ll;0;L;1F51 0301;;;;N;;;1F5D;;1F5D 1F56;GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI;Ll;0;L;1F50 0342;;;;N;;;;; 1F57;GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI;Ll;0;L;1F51 0342;;;;N;;;1F5F;;1F5F 1F59;GREEK CAPITAL LETTER UPSILON WITH DASIA;Lu;0;L;03A5 0314;;;;N;;;;1F51; 1F5B;GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA;Lu;0;L;1F59 0300;;;;N;;;;1F53; 1F5D;GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA;Lu;0;L;1F59 0301;;;;N;;;;1F55; 1F5F;GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI;Lu;0;L;1F59 0342;;;;N;;;;1F57; 1F60;GREEK SMALL LETTER OMEGA WITH PSILI;Ll;0;L;03C9 0313;;;;N;;;1F68;;1F68 1F61;GREEK SMALL LETTER OMEGA WITH DASIA;Ll;0;L;03C9 0314;;;;N;;;1F69;;1F69 1F62;GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA;Ll;0;L;1F60 0300;;;;N;;;1F6A;;1F6A 1F63;GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA;Ll;0;L;1F61 0300;;;;N;;;1F6B;;1F6B 1F64;GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA;Ll;0;L;1F60 0301;;;;N;;;1F6C;;1F6C 1F65;GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA;Ll;0;L;1F61 0301;;;;N;;;1F6D;;1F6D 1F66;GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI;Ll;0;L;1F60 0342;;;;N;;;1F6E;;1F6E 1F67;GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI;Ll;0;L;1F61 0342;;;;N;;;1F6F;;1F6F 1F68;GREEK CAPITAL LETTER OMEGA WITH PSILI;Lu;0;L;03A9 0313;;;;N;;;;1F60; 1F69;GREEK CAPITAL LETTER OMEGA WITH DASIA;Lu;0;L;03A9 0314;;;;N;;;;1F61; 1F6A;GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA;Lu;0;L;1F68 0300;;;;N;;;;1F62; 1F6B;GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA;Lu;0;L;1F69 0300;;;;N;;;;1F63; 1F6C;GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA;Lu;0;L;1F68 0301;;;;N;;;;1F64; 1F6D;GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA;Lu;0;L;1F69 0301;;;;N;;;;1F65; 1F6E;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI;Lu;0;L;1F68 0342;;;;N;;;;1F66; 1F6F;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI;Lu;0;L;1F69 0342;;;;N;;;;1F67; 1F70;GREEK SMALL LETTER ALPHA WITH VARIA;Ll;0;L;03B1 0300;;;;N;;;1FBA;;1FBA 1F71;GREEK SMALL LETTER ALPHA WITH OXIA;Ll;0;L;03AC;;;;N;;;1FBB;;1FBB 1F72;GREEK SMALL LETTER EPSILON WITH VARIA;Ll;0;L;03B5 0300;;;;N;;;1FC8;;1FC8 1F73;GREEK SMALL LETTER EPSILON WITH OXIA;Ll;0;L;03AD;;;;N;;;1FC9;;1FC9 1F74;GREEK SMALL LETTER ETA WITH VARIA;Ll;0;L;03B7 0300;;;;N;;;1FCA;;1FCA 1F75;GREEK SMALL LETTER ETA WITH OXIA;Ll;0;L;03AE;;;;N;;;1FCB;;1FCB 1F76;GREEK SMALL LETTER IOTA WITH VARIA;Ll;0;L;03B9 0300;;;;N;;;1FDA;;1FDA 1F77;GREEK SMALL LETTER IOTA WITH OXIA;Ll;0;L;03AF;;;;N;;;1FDB;;1FDB 1F78;GREEK SMALL LETTER OMICRON WITH VARIA;Ll;0;L;03BF 0300;;;;N;;;1FF8;;1FF8 1F79;GREEK SMALL LETTER OMICRON WITH OXIA;Ll;0;L;03CC;;;;N;;;1FF9;;1FF9 1F7A;GREEK SMALL LETTER UPSILON WITH VARIA;Ll;0;L;03C5 0300;;;;N;;;1FEA;;1FEA 1F7B;GREEK SMALL LETTER UPSILON WITH OXIA;Ll;0;L;03CD;;;;N;;;1FEB;;1FEB 1F7C;GREEK SMALL LETTER OMEGA WITH VARIA;Ll;0;L;03C9 0300;;;;N;;;1FFA;;1FFA 1F7D;GREEK SMALL LETTER OMEGA WITH OXIA;Ll;0;L;03CE;;;;N;;;1FFB;;1FFB 1F80;GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F00 0345;;;;N;;;1F88;;1F88 1F81;GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F01 0345;;;;N;;;1F89;;1F89 1F82;GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F02 0345;;;;N;;;1F8A;;1F8A 1F83;GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F03 0345;;;;N;;;1F8B;;1F8B 1F84;GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F04 0345;;;;N;;;1F8C;;1F8C 1F85;GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F05 0345;;;;N;;;1F8D;;1F8D 1F86;GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F06 0345;;;;N;;;1F8E;;1F8E 1F87;GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F07 0345;;;;N;;;1F8F;;1F8F 1F88;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI;Lt;0;L;1F08 0345;;;;N;;;;1F80; 1F89;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI;Lt;0;L;1F09 0345;;;;N;;;;1F81; 1F8A;GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F0A 0345;;;;N;;;;1F82; 1F8B;GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F0B 0345;;;;N;;;;1F83; 1F8C;GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F0C 0345;;;;N;;;;1F84; 1F8D;GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F0D 0345;;;;N;;;;1F85; 1F8E;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F0E 0345;;;;N;;;;1F86; 1F8F;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F0F 0345;;;;N;;;;1F87; 1F90;GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F20 0345;;;;N;;;1F98;;1F98 1F91;GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F21 0345;;;;N;;;1F99;;1F99 1F92;GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F22 0345;;;;N;;;1F9A;;1F9A 1F93;GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F23 0345;;;;N;;;1F9B;;1F9B 1F94;GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F24 0345;;;;N;;;1F9C;;1F9C 1F95;GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F25 0345;;;;N;;;1F9D;;1F9D 1F96;GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F26 0345;;;;N;;;1F9E;;1F9E 1F97;GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F27 0345;;;;N;;;1F9F;;1F9F 1F98;GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI;Lt;0;L;1F28 0345;;;;N;;;;1F90; 1F99;GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI;Lt;0;L;1F29 0345;;;;N;;;;1F91; 1F9A;GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F2A 0345;;;;N;;;;1F92; 1F9B;GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F2B 0345;;;;N;;;;1F93; 1F9C;GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F2C 0345;;;;N;;;;1F94; 1F9D;GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F2D 0345;;;;N;;;;1F95; 1F9E;GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F2E 0345;;;;N;;;;1F96; 1F9F;GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F2F 0345;;;;N;;;;1F97; 1FA0;GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F60 0345;;;;N;;;1FA8;;1FA8 1FA1;GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F61 0345;;;;N;;;1FA9;;1FA9 1FA2;GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F62 0345;;;;N;;;1FAA;;1FAA 1FA3;GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F63 0345;;;;N;;;1FAB;;1FAB 1FA4;GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F64 0345;;;;N;;;1FAC;;1FAC 1FA5;GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F65 0345;;;;N;;;1FAD;;1FAD 1FA6;GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F66 0345;;;;N;;;1FAE;;1FAE 1FA7;GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F67 0345;;;;N;;;1FAF;;1FAF 1FA8;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI;Lt;0;L;1F68 0345;;;;N;;;;1FA0; 1FA9;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI;Lt;0;L;1F69 0345;;;;N;;;;1FA1; 1FAA;GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F6A 0345;;;;N;;;;1FA2; 1FAB;GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F6B 0345;;;;N;;;;1FA3; 1FAC;GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F6C 0345;;;;N;;;;1FA4; 1FAD;GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F6D 0345;;;;N;;;;1FA5; 1FAE;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F6E 0345;;;;N;;;;1FA6; 1FAF;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F6F 0345;;;;N;;;;1FA7; 1FB0;GREEK SMALL LETTER ALPHA WITH VRACHY;Ll;0;L;03B1 0306;;;;N;;;1FB8;;1FB8 1FB1;GREEK SMALL LETTER ALPHA WITH MACRON;Ll;0;L;03B1 0304;;;;N;;;1FB9;;1FB9 1FB2;GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F70 0345;;;;N;;;;; 1FB3;GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI;Ll;0;L;03B1 0345;;;;N;;;1FBC;;1FBC 1FB4;GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03AC 0345;;;;N;;;;; 1FB6;GREEK SMALL LETTER ALPHA WITH PERISPOMENI;Ll;0;L;03B1 0342;;;;N;;;;; 1FB7;GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FB6 0345;;;;N;;;;; 1FB8;GREEK CAPITAL LETTER ALPHA WITH VRACHY;Lu;0;L;0391 0306;;;;N;;;;1FB0; 1FB9;GREEK CAPITAL LETTER ALPHA WITH MACRON;Lu;0;L;0391 0304;;;;N;;;;1FB1; 1FBA;GREEK CAPITAL LETTER ALPHA WITH VARIA;Lu;0;L;0391 0300;;;;N;;;;1F70; 1FBB;GREEK CAPITAL LETTER ALPHA WITH OXIA;Lu;0;L;0386;;;;N;;;;1F71; 1FBC;GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI;Lt;0;L;0391 0345;;;;N;;;;1FB3; 1FBD;GREEK KORONIS;Sk;0;ON; 0020 0313;;;;N;;;;; 1FBE;GREEK PROSGEGRAMMENI;Ll;0;L;03B9;;;;N;;;0399;;0399 1FBF;GREEK PSILI;Sk;0;ON; 0020 0313;;;;N;;;;; 1FC0;GREEK PERISPOMENI;Sk;0;ON; 0020 0342;;;;N;;;;; 1FC1;GREEK DIALYTIKA AND PERISPOMENI;Sk;0;ON;00A8 0342;;;;N;;;;; 1FC2;GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F74 0345;;;;N;;;;; 1FC3;GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI;Ll;0;L;03B7 0345;;;;N;;;1FCC;;1FCC 1FC4;GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03AE 0345;;;;N;;;;; 1FC6;GREEK SMALL LETTER ETA WITH PERISPOMENI;Ll;0;L;03B7 0342;;;;N;;;;; 1FC7;GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FC6 0345;;;;N;;;;; 1FC8;GREEK CAPITAL LETTER EPSILON WITH VARIA;Lu;0;L;0395 0300;;;;N;;;;1F72; 1FC9;GREEK CAPITAL LETTER EPSILON WITH OXIA;Lu;0;L;0388;;;;N;;;;1F73; 1FCA;GREEK CAPITAL LETTER ETA WITH VARIA;Lu;0;L;0397 0300;;;;N;;;;1F74; 1FCB;GREEK CAPITAL LETTER ETA WITH OXIA;Lu;0;L;0389;;;;N;;;;1F75; 1FCC;GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI;Lt;0;L;0397 0345;;;;N;;;;1FC3; 1FCD;GREEK PSILI AND VARIA;Sk;0;ON;1FBF 0300;;;;N;;;;; 1FCE;GREEK PSILI AND OXIA;Sk;0;ON;1FBF 0301;;;;N;;;;; 1FCF;GREEK PSILI AND PERISPOMENI;Sk;0;ON;1FBF 0342;;;;N;;;;; 1FD0;GREEK SMALL LETTER IOTA WITH VRACHY;Ll;0;L;03B9 0306;;;;N;;;1FD8;;1FD8 1FD1;GREEK SMALL LETTER IOTA WITH MACRON;Ll;0;L;03B9 0304;;;;N;;;1FD9;;1FD9 1FD2;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA;Ll;0;L;03CA 0300;;;;N;;;;; 1FD3;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA;Ll;0;L;0390;;;;N;;;;; 1FD6;GREEK SMALL LETTER IOTA WITH PERISPOMENI;Ll;0;L;03B9 0342;;;;N;;;;; 1FD7;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI;Ll;0;L;03CA 0342;;;;N;;;;; 1FD8;GREEK CAPITAL LETTER IOTA WITH VRACHY;Lu;0;L;0399 0306;;;;N;;;;1FD0; 1FD9;GREEK CAPITAL LETTER IOTA WITH MACRON;Lu;0;L;0399 0304;;;;N;;;;1FD1; 1FDA;GREEK CAPITAL LETTER IOTA WITH VARIA;Lu;0;L;0399 0300;;;;N;;;;1F76; 1FDB;GREEK CAPITAL LETTER IOTA WITH OXIA;Lu;0;L;038A;;;;N;;;;1F77; 1FDD;GREEK DASIA AND VARIA;Sk;0;ON;1FFE 0300;;;;N;;;;; 1FDE;GREEK DASIA AND OXIA;Sk;0;ON;1FFE 0301;;;;N;;;;; 1FDF;GREEK DASIA AND PERISPOMENI;Sk;0;ON;1FFE 0342;;;;N;;;;; 1FE0;GREEK SMALL LETTER UPSILON WITH VRACHY;Ll;0;L;03C5 0306;;;;N;;;1FE8;;1FE8 1FE1;GREEK SMALL LETTER UPSILON WITH MACRON;Ll;0;L;03C5 0304;;;;N;;;1FE9;;1FE9 1FE2;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA;Ll;0;L;03CB 0300;;;;N;;;;; 1FE3;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA;Ll;0;L;03B0;;;;N;;;;; 1FE4;GREEK SMALL LETTER RHO WITH PSILI;Ll;0;L;03C1 0313;;;;N;;;;; 1FE5;GREEK SMALL LETTER RHO WITH DASIA;Ll;0;L;03C1 0314;;;;N;;;1FEC;;1FEC 1FE6;GREEK SMALL LETTER UPSILON WITH PERISPOMENI;Ll;0;L;03C5 0342;;;;N;;;;; 1FE7;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI;Ll;0;L;03CB 0342;;;;N;;;;; 1FE8;GREEK CAPITAL LETTER UPSILON WITH VRACHY;Lu;0;L;03A5 0306;;;;N;;;;1FE0; 1FE9;GREEK CAPITAL LETTER UPSILON WITH MACRON;Lu;0;L;03A5 0304;;;;N;;;;1FE1; 1FEA;GREEK CAPITAL LETTER UPSILON WITH VARIA;Lu;0;L;03A5 0300;;;;N;;;;1F7A; 1FEB;GREEK CAPITAL LETTER UPSILON WITH OXIA;Lu;0;L;038E;;;;N;;;;1F7B; 1FEC;GREEK CAPITAL LETTER RHO WITH DASIA;Lu;0;L;03A1 0314;;;;N;;;;1FE5; 1FED;GREEK DIALYTIKA AND VARIA;Sk;0;ON;00A8 0300;;;;N;;;;; 1FEE;GREEK DIALYTIKA AND OXIA;Sk;0;ON;0385;;;;N;;;;; 1FEF;GREEK VARIA;Sk;0;ON;0060;;;;N;;;;; 1FF2;GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F7C 0345;;;;N;;;;; 1FF3;GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI;Ll;0;L;03C9 0345;;;;N;;;1FFC;;1FFC 1FF4;GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03CE 0345;;;;N;;;;; 1FF6;GREEK SMALL LETTER OMEGA WITH PERISPOMENI;Ll;0;L;03C9 0342;;;;N;;;;; 1FF7;GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FF6 0345;;;;N;;;;; 1FF8;GREEK CAPITAL LETTER OMICRON WITH VARIA;Lu;0;L;039F 0300;;;;N;;;;1F78; 1FF9;GREEK CAPITAL LETTER OMICRON WITH OXIA;Lu;0;L;038C;;;;N;;;;1F79; 1FFA;GREEK CAPITAL LETTER OMEGA WITH VARIA;Lu;0;L;03A9 0300;;;;N;;;;1F7C; 1FFB;GREEK CAPITAL LETTER OMEGA WITH OXIA;Lu;0;L;038F;;;;N;;;;1F7D; 1FFC;GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI;Lt;0;L;03A9 0345;;;;N;;;;1FF3; 1FFD;GREEK OXIA;Sk;0;ON;00B4;;;;N;;;;; 1FFE;GREEK DASIA;Sk;0;ON; 0020 0314;;;;N;;;;; 2000;EN QUAD;Zs;0;WS;2002;;;;N;;;;; 2001;EM QUAD;Zs;0;WS;2003;;;;N;;;;; 2002;EN SPACE;Zs;0;WS; 0020;;;;N;;;;; 2003;EM SPACE;Zs;0;WS; 0020;;;;N;;;;; 2004;THREE-PER-EM SPACE;Zs;0;WS; 0020;;;;N;;;;; 2005;FOUR-PER-EM SPACE;Zs;0;WS; 0020;;;;N;;;;; 2006;SIX-PER-EM SPACE;Zs;0;WS; 0020;;;;N;;;;; 2007;FIGURE SPACE;Zs;0;WS; 0020;;;;N;;;;; 2008;PUNCTUATION SPACE;Zs;0;WS; 0020;;;;N;;;;; 2009;THIN SPACE;Zs;0;WS; 0020;;;;N;;;;; 200A;HAIR SPACE;Zs;0;WS; 0020;;;;N;;;;; 200B;ZERO WIDTH SPACE;Cf;0;BN;;;;;N;;;;; 200C;ZERO WIDTH NON-JOINER;Cf;0;BN;;;;;N;;;;; 200D;ZERO WIDTH JOINER;Cf;0;BN;;;;;N;;;;; 200E;LEFT-TO-RIGHT MARK;Cf;0;L;;;;;N;;;;; 200F;RIGHT-TO-LEFT MARK;Cf;0;R;;;;;N;;;;; 2010;HYPHEN;Pd;0;ON;;;;;N;;;;; 2011;NON-BREAKING HYPHEN;Pd;0;ON; 2010;;;;N;;;;; 2012;FIGURE DASH;Pd;0;ON;;;;;N;;;;; 2013;EN DASH;Pd;0;ON;;;;;N;;;;; 2014;EM DASH;Pd;0;ON;;;;;N;;;;; 2015;HORIZONTAL BAR;Pd;0;ON;;;;;N;QUOTATION DASH;;;; 2016;DOUBLE VERTICAL LINE;Po;0;ON;;;;;N;DOUBLE VERTICAL BAR;;;; 2017;DOUBLE LOW LINE;Po;0;ON; 0020 0333;;;;N;SPACING DOUBLE UNDERSCORE;;;; 2018;LEFT SINGLE QUOTATION MARK;Pi;0;ON;;;;;N;SINGLE TURNED COMMA QUOTATION MARK;;;; 2019;RIGHT SINGLE QUOTATION MARK;Pf;0;ON;;;;;N;SINGLE COMMA QUOTATION MARK;;;; 201A;SINGLE LOW-9 QUOTATION MARK;Ps;0;ON;;;;;N;LOW SINGLE COMMA QUOTATION MARK;;;; 201B;SINGLE HIGH-REVERSED-9 QUOTATION MARK;Pi;0;ON;;;;;N;SINGLE REVERSED COMMA QUOTATION MARK;;;; 201C;LEFT DOUBLE QUOTATION MARK;Pi;0;ON;;;;;N;DOUBLE TURNED COMMA QUOTATION MARK;;;; 201D;RIGHT DOUBLE QUOTATION MARK;Pf;0;ON;;;;;N;DOUBLE COMMA QUOTATION MARK;;;; 201E;DOUBLE LOW-9 QUOTATION MARK;Ps;0;ON;;;;;N;LOW DOUBLE COMMA QUOTATION MARK;;;; 201F;DOUBLE HIGH-REVERSED-9 QUOTATION MARK;Pi;0;ON;;;;;N;DOUBLE REVERSED COMMA QUOTATION MARK;;;; 2020;DAGGER;Po;0;ON;;;;;N;;;;; 2021;DOUBLE DAGGER;Po;0;ON;;;;;N;;;;; 2022;BULLET;Po;0;ON;;;;;N;;;;; 2023;TRIANGULAR BULLET;Po;0;ON;;;;;N;;;;; 2024;ONE DOT LEADER;Po;0;ON; 002E;;;;N;;;;; 2025;TWO DOT LEADER;Po;0;ON; 002E 002E;;;;N;;;;; 2026;HORIZONTAL ELLIPSIS;Po;0;ON; 002E 002E 002E;;;;N;;;;; 2027;HYPHENATION POINT;Po;0;ON;;;;;N;;;;; 2028;LINE SEPARATOR;Zl;0;WS;;;;;N;;;;; 2029;PARAGRAPH SEPARATOR;Zp;0;B;;;;;N;;;;; 202A;LEFT-TO-RIGHT EMBEDDING;Cf;0;LRE;;;;;N;;;;; 202B;RIGHT-TO-LEFT EMBEDDING;Cf;0;RLE;;;;;N;;;;; 202C;POP DIRECTIONAL FORMATTING;Cf;0;PDF;;;;;N;;;;; 202D;LEFT-TO-RIGHT OVERRIDE;Cf;0;LRO;;;;;N;;;;; 202E;RIGHT-TO-LEFT OVERRIDE;Cf;0;RLO;;;;;N;;;;; 202F;NARROW NO-BREAK SPACE;Zs;0;CS; 0020;;;;N;;;;; 2030;PER MILLE SIGN;Po;0;ET;;;;;N;;;;; 2031;PER TEN THOUSAND SIGN;Po;0;ET;;;;;N;;;;; 2032;PRIME;Po;0;ET;;;;;N;;;;; 2033;DOUBLE PRIME;Po;0;ET; 2032 2032;;;;N;;;;; 2034;TRIPLE PRIME;Po;0;ET; 2032 2032 2032;;;;N;;;;; 2035;REVERSED PRIME;Po;0;ON;;;;;N;;;;; 2036;REVERSED DOUBLE PRIME;Po;0;ON; 2035 2035;;;;N;;;;; 2037;REVERSED TRIPLE PRIME;Po;0;ON; 2035 2035 2035;;;;N;;;;; 2038;CARET;Po;0;ON;;;;;N;;;;; 2039;SINGLE LEFT-POINTING ANGLE QUOTATION MARK;Pi;0;ON;;;;;Y;LEFT POINTING SINGLE GUILLEMET;;;; 203A;SINGLE RIGHT-POINTING ANGLE QUOTATION MARK;Pf;0;ON;;;;;Y;RIGHT POINTING SINGLE GUILLEMET;;;; 203B;REFERENCE MARK;Po;0;ON;;;;;N;;;;; 203C;DOUBLE EXCLAMATION MARK;Po;0;ON; 0021 0021;;;;N;;;;; 203D;INTERROBANG;Po;0;ON;;;;;N;;;;; 203E;OVERLINE;Po;0;ON; 0020 0305;;;;N;SPACING OVERSCORE;;;; 203F;UNDERTIE;Pc;0;ON;;;;;N;;;;; 2040;CHARACTER TIE;Pc;0;ON;;;;;N;;;;; 2041;CARET INSERTION POINT;Po;0;ON;;;;;N;;;;; 2042;ASTERISM;Po;0;ON;;;;;N;;;;; 2043;HYPHEN BULLET;Po;0;ON;;;;;N;;;;; 2044;FRACTION SLASH;Sm;0;CS;;;;;N;;;;; 2045;LEFT SQUARE BRACKET WITH QUILL;Ps;0;ON;;;;;Y;;;;; 2046;RIGHT SQUARE BRACKET WITH QUILL;Pe;0;ON;;;;;Y;;;;; 2047;DOUBLE QUESTION MARK;Po;0;ON; 003F 003F;;;;N;;;;; 2048;QUESTION EXCLAMATION MARK;Po;0;ON; 003F 0021;;;;N;;;;; 2049;EXCLAMATION QUESTION MARK;Po;0;ON; 0021 003F;;;;N;;;;; 204A;TIRONIAN SIGN ET;Po;0;ON;;;;;N;;;;; 204B;REVERSED PILCROW SIGN;Po;0;ON;;;;;N;;;;; 204C;BLACK LEFTWARDS BULLET;Po;0;ON;;;;;N;;;;; 204D;BLACK RIGHTWARDS BULLET;Po;0;ON;;;;;N;;;;; 204E;LOW ASTERISK;Po;0;ON;;;;;N;;;;; 204F;REVERSED SEMICOLON;Po;0;ON;;;;;N;;;;; 2050;CLOSE UP;Po;0;ON;;;;;N;;;;; 2051;TWO ASTERISKS ALIGNED VERTICALLY;Po;0;ON;;;;;N;;;;; 2052;COMMERCIAL MINUS SIGN;Sm;0;ON;;;;;N;;;;; 2053;SWUNG DASH;Po;0;ON;;;;;N;;;;; 2054;INVERTED UNDERTIE;Pc;0;ON;;;;;N;;;;; 2055;FLOWER PUNCTUATION MARK;Po;0;ON;;;;;N;;;;; 2056;THREE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;; 2057;QUADRUPLE PRIME;Po;0;ON; 2032 2032 2032 2032;;;;N;;;;; 2058;FOUR DOT PUNCTUATION;Po;0;ON;;;;;N;;;;; 2059;FIVE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;; 205A;TWO DOT PUNCTUATION;Po;0;ON;;;;;N;;;;; 205B;FOUR DOT MARK;Po;0;ON;;;;;N;;;;; 205C;DOTTED CROSS;Po;0;ON;;;;;N;;;;; 205D;TRICOLON;Po;0;ON;;;;;N;;;;; 205E;VERTICAL FOUR DOTS;Po;0;ON;;;;;N;;;;; 205F;MEDIUM MATHEMATICAL SPACE;Zs;0;WS; 0020;;;;N;;;;; 2060;WORD JOINER;Cf;0;BN;;;;;N;;;;; 2061;FUNCTION APPLICATION;Cf;0;BN;;;;;N;;;;; 2062;INVISIBLE TIMES;Cf;0;BN;;;;;N;;;;; 2063;INVISIBLE SEPARATOR;Cf;0;BN;;;;;N;;;;; 2064;INVISIBLE PLUS;Cf;0;BN;;;;;N;;;;; 2066;LEFT-TO-RIGHT ISOLATE;Cf;0;LRI;;;;;N;;;;; 2067;RIGHT-TO-LEFT ISOLATE;Cf;0;RLI;;;;;N;;;;; 2068;FIRST STRONG ISOLATE;Cf;0;FSI;;;;;N;;;;; 2069;POP DIRECTIONAL ISOLATE;Cf;0;PDI;;;;;N;;;;; 206A;INHIBIT SYMMETRIC SWAPPING;Cf;0;BN;;;;;N;;;;; 206B;ACTIVATE SYMMETRIC SWAPPING;Cf;0;BN;;;;;N;;;;; 206C;INHIBIT ARABIC FORM SHAPING;Cf;0;BN;;;;;N;;;;; 206D;ACTIVATE ARABIC FORM SHAPING;Cf;0;BN;;;;;N;;;;; 206E;NATIONAL DIGIT SHAPES;Cf;0;BN;;;;;N;;;;; 206F;NOMINAL DIGIT SHAPES;Cf;0;BN;;;;;N;;;;; 2070;SUPERSCRIPT ZERO;No;0;EN; 0030;;0;0;N;SUPERSCRIPT DIGIT ZERO;;;; 2071;SUPERSCRIPT LATIN SMALL LETTER I;Lm;0;L; 0069;;;;N;;;;; 2074;SUPERSCRIPT FOUR;No;0;EN; 0034;;4;4;N;SUPERSCRIPT DIGIT FOUR;;;; 2075;SUPERSCRIPT FIVE;No;0;EN; 0035;;5;5;N;SUPERSCRIPT DIGIT FIVE;;;; 2076;SUPERSCRIPT SIX;No;0;EN; 0036;;6;6;N;SUPERSCRIPT DIGIT SIX;;;; 2077;SUPERSCRIPT SEVEN;No;0;EN; 0037;;7;7;N;SUPERSCRIPT DIGIT SEVEN;;;; 2078;SUPERSCRIPT EIGHT;No;0;EN; 0038;;8;8;N;SUPERSCRIPT DIGIT EIGHT;;;; 2079;SUPERSCRIPT NINE;No;0;EN; 0039;;9;9;N;SUPERSCRIPT DIGIT NINE;;;; 207A;SUPERSCRIPT PLUS SIGN;Sm;0;ES; 002B;;;;N;;;;; 207B;SUPERSCRIPT MINUS;Sm;0;ES; 2212;;;;N;SUPERSCRIPT HYPHEN-MINUS;;;; 207C;SUPERSCRIPT EQUALS SIGN;Sm;0;ON; 003D;;;;N;;;;; 207D;SUPERSCRIPT LEFT PARENTHESIS;Ps;0;ON; 0028;;;;Y;SUPERSCRIPT OPENING PARENTHESIS;;;; 207E;SUPERSCRIPT RIGHT PARENTHESIS;Pe;0;ON; 0029;;;;Y;SUPERSCRIPT CLOSING PARENTHESIS;;;; 207F;SUPERSCRIPT LATIN SMALL LETTER N;Lm;0;L; 006E;;;;N;;;;; 2080;SUBSCRIPT ZERO;No;0;EN; 0030;;0;0;N;SUBSCRIPT DIGIT ZERO;;;; 2081;SUBSCRIPT ONE;No;0;EN; 0031;;1;1;N;SUBSCRIPT DIGIT ONE;;;; 2082;SUBSCRIPT TWO;No;0;EN; 0032;;2;2;N;SUBSCRIPT DIGIT TWO;;;; 2083;SUBSCRIPT THREE;No;0;EN; 0033;;3;3;N;SUBSCRIPT DIGIT THREE;;;; 2084;SUBSCRIPT FOUR;No;0;EN; 0034;;4;4;N;SUBSCRIPT DIGIT FOUR;;;; 2085;SUBSCRIPT FIVE;No;0;EN; 0035;;5;5;N;SUBSCRIPT DIGIT FIVE;;;; 2086;SUBSCRIPT SIX;No;0;EN; 0036;;6;6;N;SUBSCRIPT DIGIT SIX;;;; 2087;SUBSCRIPT SEVEN;No;0;EN; 0037;;7;7;N;SUBSCRIPT DIGIT SEVEN;;;; 2088;SUBSCRIPT EIGHT;No;0;EN; 0038;;8;8;N;SUBSCRIPT DIGIT EIGHT;;;; 2089;SUBSCRIPT NINE;No;0;EN; 0039;;9;9;N;SUBSCRIPT DIGIT NINE;;;; 208A;SUBSCRIPT PLUS SIGN;Sm;0;ES; 002B;;;;N;;;;; 208B;SUBSCRIPT MINUS;Sm;0;ES; 2212;;;;N;SUBSCRIPT HYPHEN-MINUS;;;; 208C;SUBSCRIPT EQUALS SIGN;Sm;0;ON; 003D;;;;N;;;;; 208D;SUBSCRIPT LEFT PARENTHESIS;Ps;0;ON; 0028;;;;Y;SUBSCRIPT OPENING PARENTHESIS;;;; 208E;SUBSCRIPT RIGHT PARENTHESIS;Pe;0;ON; 0029;;;;Y;SUBSCRIPT CLOSING PARENTHESIS;;;; 2090;LATIN SUBSCRIPT SMALL LETTER A;Lm;0;L; 0061;;;;N;;;;; 2091;LATIN SUBSCRIPT SMALL LETTER E;Lm;0;L; 0065;;;;N;;;;; 2092;LATIN SUBSCRIPT SMALL LETTER O;Lm;0;L; 006F;;;;N;;;;; 2093;LATIN SUBSCRIPT SMALL LETTER X;Lm;0;L; 0078;;;;N;;;;; 2094;LATIN SUBSCRIPT SMALL LETTER SCHWA;Lm;0;L; 0259;;;;N;;;;; 2095;LATIN SUBSCRIPT SMALL LETTER H;Lm;0;L; 0068;;;;N;;;;; 2096;LATIN SUBSCRIPT SMALL LETTER K;Lm;0;L; 006B;;;;N;;;;; 2097;LATIN SUBSCRIPT SMALL LETTER L;Lm;0;L; 006C;;;;N;;;;; 2098;LATIN SUBSCRIPT SMALL LETTER M;Lm;0;L; 006D;;;;N;;;;; 2099;LATIN SUBSCRIPT SMALL LETTER N;Lm;0;L; 006E;;;;N;;;;; 209A;LATIN SUBSCRIPT SMALL LETTER P;Lm;0;L; 0070;;;;N;;;;; 209B;LATIN SUBSCRIPT SMALL LETTER S;Lm;0;L; 0073;;;;N;;;;; 209C;LATIN SUBSCRIPT SMALL LETTER T;Lm;0;L; 0074;;;;N;;;;; 20A0;EURO-CURRENCY SIGN;Sc;0;ET;;;;;N;;;;; 20A1;COLON SIGN;Sc;0;ET;;;;;N;;;;; 20A2;CRUZEIRO SIGN;Sc;0;ET;;;;;N;;;;; 20A3;FRENCH FRANC SIGN;Sc;0;ET;;;;;N;;;;; 20A4;LIRA SIGN;Sc;0;ET;;;;;N;;;;; 20A5;MILL SIGN;Sc;0;ET;;;;;N;;;;; 20A6;NAIRA SIGN;Sc;0;ET;;;;;N;;;;; 20A7;PESETA SIGN;Sc;0;ET;;;;;N;;;;; 20A8;RUPEE SIGN;Sc;0;ET; 0052 0073;;;;N;;;;; 20A9;WON SIGN;Sc;0;ET;;;;;N;;;;; 20AA;NEW SHEQEL SIGN;Sc;0;ET;;;;;N;;;;; 20AB;DONG SIGN;Sc;0;ET;;;;;N;;;;; 20AC;EURO SIGN;Sc;0;ET;;;;;N;;;;; 20AD;KIP SIGN;Sc;0;ET;;;;;N;;;;; 20AE;TUGRIK SIGN;Sc;0;ET;;;;;N;;;;; 20AF;DRACHMA SIGN;Sc;0;ET;;;;;N;;;;; 20B0;GERMAN PENNY SIGN;Sc;0;ET;;;;;N;;;;; 20B1;PESO SIGN;Sc;0;ET;;;;;N;;;;; 20B2;GUARANI SIGN;Sc;0;ET;;;;;N;;;;; 20B3;AUSTRAL SIGN;Sc;0;ET;;;;;N;;;;; 20B4;HRYVNIA SIGN;Sc;0;ET;;;;;N;;;;; 20B5;CEDI SIGN;Sc;0;ET;;;;;N;;;;; 20B6;LIVRE TOURNOIS SIGN;Sc;0;ET;;;;;N;;;;; 20B7;SPESMILO SIGN;Sc;0;ET;;;;;N;;;;; 20B8;TENGE SIGN;Sc;0;ET;;;;;N;;;;; 20B9;INDIAN RUPEE SIGN;Sc;0;ET;;;;;N;;;;; 20BA;TURKISH LIRA SIGN;Sc;0;ET;;;;;N;;;;; 20BB;NORDIC MARK SIGN;Sc;0;ET;;;;;N;;;;; 20BC;MANAT SIGN;Sc;0;ET;;;;;N;;;;; 20BD;RUBLE SIGN;Sc;0;ET;;;;;N;;;;; 20BE;LARI SIGN;Sc;0;ET;;;;;N;;;;; 20BF;BITCOIN SIGN;Sc;0;ET;;;;;N;;;;; 20C0;SOM SIGN;Sc;0;ET;;;;;N;;;;; 20D0;COMBINING LEFT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT HARPOON ABOVE;;;; 20D1;COMBINING RIGHT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RIGHT HARPOON ABOVE;;;; 20D2;COMBINING LONG VERTICAL LINE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG VERTICAL BAR OVERLAY;;;; 20D3;COMBINING SHORT VERTICAL LINE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING SHORT VERTICAL BAR OVERLAY;;;; 20D4;COMBINING ANTICLOCKWISE ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING ANTICLOCKWISE ARROW ABOVE;;;; 20D5;COMBINING CLOCKWISE ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING CLOCKWISE ARROW ABOVE;;;; 20D6;COMBINING LEFT ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT ARROW ABOVE;;;; 20D7;COMBINING RIGHT ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RIGHT ARROW ABOVE;;;; 20D8;COMBINING RING OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING RING OVERLAY;;;; 20D9;COMBINING CLOCKWISE RING OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING CLOCKWISE RING OVERLAY;;;; 20DA;COMBINING ANTICLOCKWISE RING OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING ANTICLOCKWISE RING OVERLAY;;;; 20DB;COMBINING THREE DOTS ABOVE;Mn;230;NSM;;;;;N;NON-SPACING THREE DOTS ABOVE;;;; 20DC;COMBINING FOUR DOTS ABOVE;Mn;230;NSM;;;;;N;NON-SPACING FOUR DOTS ABOVE;;;; 20DD;COMBINING ENCLOSING CIRCLE;Me;0;NSM;;;;;N;ENCLOSING CIRCLE;;;; 20DE;COMBINING ENCLOSING SQUARE;Me;0;NSM;;;;;N;ENCLOSING SQUARE;;;; 20DF;COMBINING ENCLOSING DIAMOND;Me;0;NSM;;;;;N;ENCLOSING DIAMOND;;;; 20E0;COMBINING ENCLOSING CIRCLE BACKSLASH;Me;0;NSM;;;;;N;ENCLOSING CIRCLE SLASH;;;; 20E1;COMBINING LEFT RIGHT ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT RIGHT ARROW ABOVE;;;; 20E2;COMBINING ENCLOSING SCREEN;Me;0;NSM;;;;;N;;;;; 20E3;COMBINING ENCLOSING KEYCAP;Me;0;NSM;;;;;N;;;;; 20E4;COMBINING ENCLOSING UPWARD POINTING TRIANGLE;Me;0;NSM;;;;;N;;;;; 20E5;COMBINING REVERSE SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;;;;; 20E6;COMBINING DOUBLE VERTICAL STROKE OVERLAY;Mn;1;NSM;;;;;N;;;;; 20E7;COMBINING ANNUITY SYMBOL;Mn;230;NSM;;;;;N;;;;; 20E8;COMBINING TRIPLE UNDERDOT;Mn;220;NSM;;;;;N;;;;; 20E9;COMBINING WIDE BRIDGE ABOVE;Mn;230;NSM;;;;;N;;;;; 20EA;COMBINING LEFTWARDS ARROW OVERLAY;Mn;1;NSM;;;;;N;;;;; 20EB;COMBINING LONG DOUBLE SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;;;;; 20EC;COMBINING RIGHTWARDS HARPOON WITH BARB DOWNWARDS;Mn;220;NSM;;;;;N;;;;; 20ED;COMBINING LEFTWARDS HARPOON WITH BARB DOWNWARDS;Mn;220;NSM;;;;;N;;;;; 20EE;COMBINING LEFT ARROW BELOW;Mn;220;NSM;;;;;N;;;;; 20EF;COMBINING RIGHT ARROW BELOW;Mn;220;NSM;;;;;N;;;;; 20F0;COMBINING ASTERISK ABOVE;Mn;230;NSM;;;;;N;;;;; 2100;ACCOUNT OF;So;0;ON; 0061 002F 0063;;;;N;;;;; 2101;ADDRESSED TO THE SUBJECT;So;0;ON; 0061 002F 0073;;;;N;;;;; 2102;DOUBLE-STRUCK CAPITAL C;Lu;0;L; 0043;;;;N;DOUBLE-STRUCK C;;;; 2103;DEGREE CELSIUS;So;0;ON; 00B0 0043;;;;N;DEGREES CENTIGRADE;;;; 2104;CENTRE LINE SYMBOL;So;0;ON;;;;;N;C L SYMBOL;;;; 2105;CARE OF;So;0;ON; 0063 002F 006F;;;;N;;;;; 2106;CADA UNA;So;0;ON; 0063 002F 0075;;;;N;;;;; 2107;EULER CONSTANT;Lu;0;L; 0190;;;;N;EULERS;;;; 2108;SCRUPLE;So;0;ON;;;;;N;;;;; 2109;DEGREE FAHRENHEIT;So;0;ON; 00B0 0046;;;;N;DEGREES FAHRENHEIT;;;; 210A;SCRIPT SMALL G;Ll;0;L; 0067;;;;N;;;;; 210B;SCRIPT CAPITAL H;Lu;0;L; 0048;;;;N;SCRIPT H;;;; 210C;BLACK-LETTER CAPITAL H;Lu;0;L; 0048;;;;N;BLACK-LETTER H;;;; 210D;DOUBLE-STRUCK CAPITAL H;Lu;0;L; 0048;;;;N;DOUBLE-STRUCK H;;;; 210E;PLANCK CONSTANT;Ll;0;L; 0068;;;;N;;;;; 210F;PLANCK CONSTANT OVER TWO PI;Ll;0;L; 0127;;;;N;PLANCK CONSTANT OVER 2 PI;;;; 2110;SCRIPT CAPITAL I;Lu;0;L; 0049;;;;N;SCRIPT I;;;; 2111;BLACK-LETTER CAPITAL I;Lu;0;L; 0049;;;;N;BLACK-LETTER I;;;; 2112;SCRIPT CAPITAL L;Lu;0;L; 004C;;;;N;SCRIPT L;;;; 2113;SCRIPT SMALL L;Ll;0;L; 006C;;;;N;;;;; 2114;L B BAR SYMBOL;So;0;ON;;;;;N;;;;; 2115;DOUBLE-STRUCK CAPITAL N;Lu;0;L; 004E;;;;N;DOUBLE-STRUCK N;;;; 2116;NUMERO SIGN;So;0;ON; 004E 006F;;;;N;NUMERO;;;; 2117;SOUND RECORDING COPYRIGHT;So;0;ON;;;;;N;;;;; 2118;SCRIPT CAPITAL P;Sm;0;ON;;;;;N;SCRIPT P;;;; 2119;DOUBLE-STRUCK CAPITAL P;Lu;0;L; 0050;;;;N;DOUBLE-STRUCK P;;;; 211A;DOUBLE-STRUCK CAPITAL Q;Lu;0;L; 0051;;;;N;DOUBLE-STRUCK Q;;;; 211B;SCRIPT CAPITAL R;Lu;0;L; 0052;;;;N;SCRIPT R;;;; 211C;BLACK-LETTER CAPITAL R;Lu;0;L; 0052;;;;N;BLACK-LETTER R;;;; 211D;DOUBLE-STRUCK CAPITAL R;Lu;0;L; 0052;;;;N;DOUBLE-STRUCK R;;;; 211E;PRESCRIPTION TAKE;So;0;ON;;;;;N;;;;; 211F;RESPONSE;So;0;ON;;;;;N;;;;; 2120;SERVICE MARK;So;0;ON; 0053 004D;;;;N;;;;; 2121;TELEPHONE SIGN;So;0;ON; 0054 0045 004C;;;;N;T E L SYMBOL;;;; 2122;TRADE MARK SIGN;So;0;ON; 0054 004D;;;;N;TRADEMARK;;;; 2123;VERSICLE;So;0;ON;;;;;N;;;;; 2124;DOUBLE-STRUCK CAPITAL Z;Lu;0;L; 005A;;;;N;DOUBLE-STRUCK Z;;;; 2125;OUNCE SIGN;So;0;ON;;;;;N;OUNCE;;;; 2126;OHM SIGN;Lu;0;L;03A9;;;;N;OHM;;;03C9; 2127;INVERTED OHM SIGN;So;0;ON;;;;;N;MHO;;;; 2128;BLACK-LETTER CAPITAL Z;Lu;0;L; 005A;;;;N;BLACK-LETTER Z;;;; 2129;TURNED GREEK SMALL LETTER IOTA;So;0;ON;;;;;N;;;;; 212A;KELVIN SIGN;Lu;0;L;004B;;;;N;DEGREES KELVIN;;;006B; 212B;ANGSTROM SIGN;Lu;0;L;00C5;;;;N;ANGSTROM UNIT;;;00E5; 212C;SCRIPT CAPITAL B;Lu;0;L; 0042;;;;N;SCRIPT B;;;; 212D;BLACK-LETTER CAPITAL C;Lu;0;L; 0043;;;;N;BLACK-LETTER C;;;; 212E;ESTIMATED SYMBOL;So;0;ET;;;;;N;;;;; 212F;SCRIPT SMALL E;Ll;0;L; 0065;;;;N;;;;; 2130;SCRIPT CAPITAL E;Lu;0;L; 0045;;;;N;SCRIPT E;;;; 2131;SCRIPT CAPITAL F;Lu;0;L; 0046;;;;N;SCRIPT F;;;; 2132;TURNED CAPITAL F;Lu;0;L;;;;;N;TURNED F;;;214E; 2133;SCRIPT CAPITAL M;Lu;0;L; 004D;;;;N;SCRIPT M;;;; 2134;SCRIPT SMALL O;Ll;0;L; 006F;;;;N;;;;; 2135;ALEF SYMBOL;Lo;0;L; 05D0;;;;N;FIRST TRANSFINITE CARDINAL;;;; 2136;BET SYMBOL;Lo;0;L; 05D1;;;;N;SECOND TRANSFINITE CARDINAL;;;; 2137;GIMEL SYMBOL;Lo;0;L; 05D2;;;;N;THIRD TRANSFINITE CARDINAL;;;; 2138;DALET SYMBOL;Lo;0;L; 05D3;;;;N;FOURTH TRANSFINITE CARDINAL;;;; 2139;INFORMATION SOURCE;Ll;0;L; 0069;;;;N;;;;; 213A;ROTATED CAPITAL Q;So;0;ON;;;;;N;;;;; 213B;FACSIMILE SIGN;So;0;ON; 0046 0041 0058;;;;N;;;;; 213C;DOUBLE-STRUCK SMALL PI;Ll;0;L; 03C0;;;;N;;;;; 213D;DOUBLE-STRUCK SMALL GAMMA;Ll;0;L; 03B3;;;;N;;;;; 213E;DOUBLE-STRUCK CAPITAL GAMMA;Lu;0;L; 0393;;;;N;;;;; 213F;DOUBLE-STRUCK CAPITAL PI;Lu;0;L; 03A0;;;;N;;;;; 2140;DOUBLE-STRUCK N-ARY SUMMATION;Sm;0;ON; 2211;;;;Y;;;;; 2141;TURNED SANS-SERIF CAPITAL G;Sm;0;ON;;;;;N;;;;; 2142;TURNED SANS-SERIF CAPITAL L;Sm;0;ON;;;;;N;;;;; 2143;REVERSED SANS-SERIF CAPITAL L;Sm;0;ON;;;;;N;;;;; 2144;TURNED SANS-SERIF CAPITAL Y;Sm;0;ON;;;;;N;;;;; 2145;DOUBLE-STRUCK ITALIC CAPITAL D;Lu;0;L; 0044;;;;N;;;;; 2146;DOUBLE-STRUCK ITALIC SMALL D;Ll;0;L; 0064;;;;N;;;;; 2147;DOUBLE-STRUCK ITALIC SMALL E;Ll;0;L; 0065;;;;N;;;;; 2148;DOUBLE-STRUCK ITALIC SMALL I;Ll;0;L; 0069;;;;N;;;;; 2149;DOUBLE-STRUCK ITALIC SMALL J;Ll;0;L; 006A;;;;N;;;;; 214A;PROPERTY LINE;So;0;ON;;;;;N;;;;; 214B;TURNED AMPERSAND;Sm;0;ON;;;;;N;;;;; 214C;PER SIGN;So;0;ON;;;;;N;;;;; 214D;AKTIESELSKAB;So;0;ON;;;;;N;;;;; 214E;TURNED SMALL F;Ll;0;L;;;;;N;;;2132;;2132 214F;SYMBOL FOR SAMARITAN SOURCE;So;0;L;;;;;N;;;;; 2150;VULGAR FRACTION ONE SEVENTH;No;0;ON; 0031 2044 0037;;;1/7;N;;;;; 2151;VULGAR FRACTION ONE NINTH;No;0;ON; 0031 2044 0039;;;1/9;N;;;;; 2152;VULGAR FRACTION ONE TENTH;No;0;ON; 0031 2044 0031 0030;;;1/10;N;;;;; 2153;VULGAR FRACTION ONE THIRD;No;0;ON; 0031 2044 0033;;;1/3;N;FRACTION ONE THIRD;;;; 2154;VULGAR FRACTION TWO THIRDS;No;0;ON; 0032 2044 0033;;;2/3;N;FRACTION TWO THIRDS;;;; 2155;VULGAR FRACTION ONE FIFTH;No;0;ON; 0031 2044 0035;;;1/5;N;FRACTION ONE FIFTH;;;; 2156;VULGAR FRACTION TWO FIFTHS;No;0;ON; 0032 2044 0035;;;2/5;N;FRACTION TWO FIFTHS;;;; 2157;VULGAR FRACTION THREE FIFTHS;No;0;ON; 0033 2044 0035;;;3/5;N;FRACTION THREE FIFTHS;;;; 2158;VULGAR FRACTION FOUR FIFTHS;No;0;ON; 0034 2044 0035;;;4/5;N;FRACTION FOUR FIFTHS;;;; 2159;VULGAR FRACTION ONE SIXTH;No;0;ON; 0031 2044 0036;;;1/6;N;FRACTION ONE SIXTH;;;; 215A;VULGAR FRACTION FIVE SIXTHS;No;0;ON; 0035 2044 0036;;;5/6;N;FRACTION FIVE SIXTHS;;;; 215B;VULGAR FRACTION ONE EIGHTH;No;0;ON; 0031 2044 0038;;;1/8;N;FRACTION ONE EIGHTH;;;; 215C;VULGAR FRACTION THREE EIGHTHS;No;0;ON; 0033 2044 0038;;;3/8;N;FRACTION THREE EIGHTHS;;;; 215D;VULGAR FRACTION FIVE EIGHTHS;No;0;ON; 0035 2044 0038;;;5/8;N;FRACTION FIVE EIGHTHS;;;; 215E;VULGAR FRACTION SEVEN EIGHTHS;No;0;ON; 0037 2044 0038;;;7/8;N;FRACTION SEVEN EIGHTHS;;;; 215F;FRACTION NUMERATOR ONE;No;0;ON; 0031 2044;;;1;N;;;;; 2160;ROMAN NUMERAL ONE;Nl;0;L; 0049;;;1;N;;;;2170; 2161;ROMAN NUMERAL TWO;Nl;0;L; 0049 0049;;;2;N;;;;2171; 2162;ROMAN NUMERAL THREE;Nl;0;L; 0049 0049 0049;;;3;N;;;;2172; 2163;ROMAN NUMERAL FOUR;Nl;0;L; 0049 0056;;;4;N;;;;2173; 2164;ROMAN NUMERAL FIVE;Nl;0;L; 0056;;;5;N;;;;2174; 2165;ROMAN NUMERAL SIX;Nl;0;L; 0056 0049;;;6;N;;;;2175; 2166;ROMAN NUMERAL SEVEN;Nl;0;L; 0056 0049 0049;;;7;N;;;;2176; 2167;ROMAN NUMERAL EIGHT;Nl;0;L; 0056 0049 0049 0049;;;8;N;;;;2177; 2168;ROMAN NUMERAL NINE;Nl;0;L; 0049 0058;;;9;N;;;;2178; 2169;ROMAN NUMERAL TEN;Nl;0;L; 0058;;;10;N;;;;2179; 216A;ROMAN NUMERAL ELEVEN;Nl;0;L; 0058 0049;;;11;N;;;;217A; 216B;ROMAN NUMERAL TWELVE;Nl;0;L; 0058 0049 0049;;;12;N;;;;217B; 216C;ROMAN NUMERAL FIFTY;Nl;0;L; 004C;;;50;N;;;;217C; 216D;ROMAN NUMERAL ONE HUNDRED;Nl;0;L; 0043;;;100;N;;;;217D; 216E;ROMAN NUMERAL FIVE HUNDRED;Nl;0;L; 0044;;;500;N;;;;217E; 216F;ROMAN NUMERAL ONE THOUSAND;Nl;0;L; 004D;;;1000;N;;;;217F; 2170;SMALL ROMAN NUMERAL ONE;Nl;0;L; 0069;;;1;N;;;2160;;2160 2171;SMALL ROMAN NUMERAL TWO;Nl;0;L; 0069 0069;;;2;N;;;2161;;2161 2172;SMALL ROMAN NUMERAL THREE;Nl;0;L; 0069 0069 0069;;;3;N;;;2162;;2162 2173;SMALL ROMAN NUMERAL FOUR;Nl;0;L; 0069 0076;;;4;N;;;2163;;2163 2174;SMALL ROMAN NUMERAL FIVE;Nl;0;L; 0076;;;5;N;;;2164;;2164 2175;SMALL ROMAN NUMERAL SIX;Nl;0;L; 0076 0069;;;6;N;;;2165;;2165 2176;SMALL ROMAN NUMERAL SEVEN;Nl;0;L; 0076 0069 0069;;;7;N;;;2166;;2166 2177;SMALL ROMAN NUMERAL EIGHT;Nl;0;L; 0076 0069 0069 0069;;;8;N;;;2167;;2167 2178;SMALL ROMAN NUMERAL NINE;Nl;0;L; 0069 0078;;;9;N;;;2168;;2168 2179;SMALL ROMAN NUMERAL TEN;Nl;0;L; 0078;;;10;N;;;2169;;2169 217A;SMALL ROMAN NUMERAL ELEVEN;Nl;0;L; 0078 0069;;;11;N;;;216A;;216A 217B;SMALL ROMAN NUMERAL TWELVE;Nl;0;L; 0078 0069 0069;;;12;N;;;216B;;216B 217C;SMALL ROMAN NUMERAL FIFTY;Nl;0;L; 006C;;;50;N;;;216C;;216C 217D;SMALL ROMAN NUMERAL ONE HUNDRED;Nl;0;L; 0063;;;100;N;;;216D;;216D 217E;SMALL ROMAN NUMERAL FIVE HUNDRED;Nl;0;L; 0064;;;500;N;;;216E;;216E 217F;SMALL ROMAN NUMERAL ONE THOUSAND;Nl;0;L; 006D;;;1000;N;;;216F;;216F 2180;ROMAN NUMERAL ONE THOUSAND C D;Nl;0;L;;;;1000;N;;;;; 2181;ROMAN NUMERAL FIVE THOUSAND;Nl;0;L;;;;5000;N;;;;; 2182;ROMAN NUMERAL TEN THOUSAND;Nl;0;L;;;;10000;N;;;;; 2183;ROMAN NUMERAL REVERSED ONE HUNDRED;Lu;0;L;;;;;N;;;;2184; 2184;LATIN SMALL LETTER REVERSED C;Ll;0;L;;;;;N;;;2183;;2183 2185;ROMAN NUMERAL SIX LATE FORM;Nl;0;L;;;;6;N;;;;; 2186;ROMAN NUMERAL FIFTY EARLY FORM;Nl;0;L;;;;50;N;;;;; 2187;ROMAN NUMERAL FIFTY THOUSAND;Nl;0;L;;;;50000;N;;;;; 2188;ROMAN NUMERAL ONE HUNDRED THOUSAND;Nl;0;L;;;;100000;N;;;;; 2189;VULGAR FRACTION ZERO THIRDS;No;0;ON; 0030 2044 0033;;;0;N;;;;; 218A;TURNED DIGIT TWO;So;0;ON;;;;;N;;;;; 218B;TURNED DIGIT THREE;So;0;ON;;;;;N;;;;; 2190;LEFTWARDS ARROW;Sm;0;ON;;;;;N;LEFT ARROW;;;; 2191;UPWARDS ARROW;Sm;0;ON;;;;;N;UP ARROW;;;; 2192;RIGHTWARDS ARROW;Sm;0;ON;;;;;N;RIGHT ARROW;;;; 2193;DOWNWARDS ARROW;Sm;0;ON;;;;;N;DOWN ARROW;;;; 2194;LEFT RIGHT ARROW;Sm;0;ON;;;;;N;;;;; 2195;UP DOWN ARROW;So;0;ON;;;;;N;;;;; 2196;NORTH WEST ARROW;So;0;ON;;;;;N;UPPER LEFT ARROW;;;; 2197;NORTH EAST ARROW;So;0;ON;;;;;N;UPPER RIGHT ARROW;;;; 2198;SOUTH EAST ARROW;So;0;ON;;;;;N;LOWER RIGHT ARROW;;;; 2199;SOUTH WEST ARROW;So;0;ON;;;;;N;LOWER LEFT ARROW;;;; 219A;LEFTWARDS ARROW WITH STROKE;Sm;0;ON;2190 0338;;;;N;LEFT ARROW WITH STROKE;;;; 219B;RIGHTWARDS ARROW WITH STROKE;Sm;0;ON;2192 0338;;;;N;RIGHT ARROW WITH STROKE;;;; 219C;LEFTWARDS WAVE ARROW;So;0;ON;;;;;N;LEFT WAVE ARROW;;;; 219D;RIGHTWARDS WAVE ARROW;So;0;ON;;;;;N;RIGHT WAVE ARROW;;;; 219E;LEFTWARDS TWO HEADED ARROW;So;0;ON;;;;;N;LEFT TWO HEADED ARROW;;;; 219F;UPWARDS TWO HEADED ARROW;So;0;ON;;;;;N;UP TWO HEADED ARROW;;;; 21A0;RIGHTWARDS TWO HEADED ARROW;Sm;0;ON;;;;;N;RIGHT TWO HEADED ARROW;;;; 21A1;DOWNWARDS TWO HEADED ARROW;So;0;ON;;;;;N;DOWN TWO HEADED ARROW;;;; 21A2;LEFTWARDS ARROW WITH TAIL;So;0;ON;;;;;N;LEFT ARROW WITH TAIL;;;; 21A3;RIGHTWARDS ARROW WITH TAIL;Sm;0;ON;;;;;N;RIGHT ARROW WITH TAIL;;;; 21A4;LEFTWARDS ARROW FROM BAR;So;0;ON;;;;;N;LEFT ARROW FROM BAR;;;; 21A5;UPWARDS ARROW FROM BAR;So;0;ON;;;;;N;UP ARROW FROM BAR;;;; 21A6;RIGHTWARDS ARROW FROM BAR;Sm;0;ON;;;;;N;RIGHT ARROW FROM BAR;;;; 21A7;DOWNWARDS ARROW FROM BAR;So;0;ON;;;;;N;DOWN ARROW FROM BAR;;;; 21A8;UP DOWN ARROW WITH BASE;So;0;ON;;;;;N;;;;; 21A9;LEFTWARDS ARROW WITH HOOK;So;0;ON;;;;;N;LEFT ARROW WITH HOOK;;;; 21AA;RIGHTWARDS ARROW WITH HOOK;So;0;ON;;;;;N;RIGHT ARROW WITH HOOK;;;; 21AB;LEFTWARDS ARROW WITH LOOP;So;0;ON;;;;;N;LEFT ARROW WITH LOOP;;;; 21AC;RIGHTWARDS ARROW WITH LOOP;So;0;ON;;;;;N;RIGHT ARROW WITH LOOP;;;; 21AD;LEFT RIGHT WAVE ARROW;So;0;ON;;;;;N;;;;; 21AE;LEFT RIGHT ARROW WITH STROKE;Sm;0;ON;2194 0338;;;;N;;;;; 21AF;DOWNWARDS ZIGZAG ARROW;So;0;ON;;;;;N;DOWN ZIGZAG ARROW;;;; 21B0;UPWARDS ARROW WITH TIP LEFTWARDS;So;0;ON;;;;;N;UP ARROW WITH TIP LEFT;;;; 21B1;UPWARDS ARROW WITH TIP RIGHTWARDS;So;0;ON;;;;;N;UP ARROW WITH TIP RIGHT;;;; 21B2;DOWNWARDS ARROW WITH TIP LEFTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH TIP LEFT;;;; 21B3;DOWNWARDS ARROW WITH TIP RIGHTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH TIP RIGHT;;;; 21B4;RIGHTWARDS ARROW WITH CORNER DOWNWARDS;So;0;ON;;;;;N;RIGHT ARROW WITH CORNER DOWN;;;; 21B5;DOWNWARDS ARROW WITH CORNER LEFTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH CORNER LEFT;;;; 21B6;ANTICLOCKWISE TOP SEMICIRCLE ARROW;So;0;ON;;;;;N;;;;; 21B7;CLOCKWISE TOP SEMICIRCLE ARROW;So;0;ON;;;;;N;;;;; 21B8;NORTH WEST ARROW TO LONG BAR;So;0;ON;;;;;N;UPPER LEFT ARROW TO LONG BAR;;;; 21B9;LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR;So;0;ON;;;;;N;LEFT ARROW TO BAR OVER RIGHT ARROW TO BAR;;;; 21BA;ANTICLOCKWISE OPEN CIRCLE ARROW;So;0;ON;;;;;N;;;;; 21BB;CLOCKWISE OPEN CIRCLE ARROW;So;0;ON;;;;;N;;;;; 21BC;LEFTWARDS HARPOON WITH BARB UPWARDS;So;0;ON;;;;;N;LEFT HARPOON WITH BARB UP;;;; 21BD;LEFTWARDS HARPOON WITH BARB DOWNWARDS;So;0;ON;;;;;N;LEFT HARPOON WITH BARB DOWN;;;; 21BE;UPWARDS HARPOON WITH BARB RIGHTWARDS;So;0;ON;;;;;N;UP HARPOON WITH BARB RIGHT;;;; 21BF;UPWARDS HARPOON WITH BARB LEFTWARDS;So;0;ON;;;;;N;UP HARPOON WITH BARB LEFT;;;; 21C0;RIGHTWARDS HARPOON WITH BARB UPWARDS;So;0;ON;;;;;N;RIGHT HARPOON WITH BARB UP;;;; 21C1;RIGHTWARDS HARPOON WITH BARB DOWNWARDS;So;0;ON;;;;;N;RIGHT HARPOON WITH BARB DOWN;;;; 21C2;DOWNWARDS HARPOON WITH BARB RIGHTWARDS;So;0;ON;;;;;N;DOWN HARPOON WITH BARB RIGHT;;;; 21C3;DOWNWARDS HARPOON WITH BARB LEFTWARDS;So;0;ON;;;;;N;DOWN HARPOON WITH BARB LEFT;;;; 21C4;RIGHTWARDS ARROW OVER LEFTWARDS ARROW;So;0;ON;;;;;N;RIGHT ARROW OVER LEFT ARROW;;;; 21C5;UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW;So;0;ON;;;;;N;UP ARROW LEFT OF DOWN ARROW;;;; 21C6;LEFTWARDS ARROW OVER RIGHTWARDS ARROW;So;0;ON;;;;;N;LEFT ARROW OVER RIGHT ARROW;;;; 21C7;LEFTWARDS PAIRED ARROWS;So;0;ON;;;;;N;LEFT PAIRED ARROWS;;;; 21C8;UPWARDS PAIRED ARROWS;So;0;ON;;;;;N;UP PAIRED ARROWS;;;; 21C9;RIGHTWARDS PAIRED ARROWS;So;0;ON;;;;;N;RIGHT PAIRED ARROWS;;;; 21CA;DOWNWARDS PAIRED ARROWS;So;0;ON;;;;;N;DOWN PAIRED ARROWS;;;; 21CB;LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON;So;0;ON;;;;;N;LEFT HARPOON OVER RIGHT HARPOON;;;; 21CC;RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON;So;0;ON;;;;;N;RIGHT HARPOON OVER LEFT HARPOON;;;; 21CD;LEFTWARDS DOUBLE ARROW WITH STROKE;So;0;ON;21D0 0338;;;;N;LEFT DOUBLE ARROW WITH STROKE;;;; 21CE;LEFT RIGHT DOUBLE ARROW WITH STROKE;Sm;0;ON;21D4 0338;;;;N;;;;; 21CF;RIGHTWARDS DOUBLE ARROW WITH STROKE;Sm;0;ON;21D2 0338;;;;N;RIGHT DOUBLE ARROW WITH STROKE;;;; 21D0;LEFTWARDS DOUBLE ARROW;So;0;ON;;;;;N;LEFT DOUBLE ARROW;;;; 21D1;UPWARDS DOUBLE ARROW;So;0;ON;;;;;N;UP DOUBLE ARROW;;;; 21D2;RIGHTWARDS DOUBLE ARROW;Sm;0;ON;;;;;N;RIGHT DOUBLE ARROW;;;; 21D3;DOWNWARDS DOUBLE ARROW;So;0;ON;;;;;N;DOWN DOUBLE ARROW;;;; 21D4;LEFT RIGHT DOUBLE ARROW;Sm;0;ON;;;;;N;;;;; 21D5;UP DOWN DOUBLE ARROW;So;0;ON;;;;;N;;;;; 21D6;NORTH WEST DOUBLE ARROW;So;0;ON;;;;;N;UPPER LEFT DOUBLE ARROW;;;; 21D7;NORTH EAST DOUBLE ARROW;So;0;ON;;;;;N;UPPER RIGHT DOUBLE ARROW;;;; 21D8;SOUTH EAST DOUBLE ARROW;So;0;ON;;;;;N;LOWER RIGHT DOUBLE ARROW;;;; 21D9;SOUTH WEST DOUBLE ARROW;So;0;ON;;;;;N;LOWER LEFT DOUBLE ARROW;;;; 21DA;LEFTWARDS TRIPLE ARROW;So;0;ON;;;;;N;LEFT TRIPLE ARROW;;;; 21DB;RIGHTWARDS TRIPLE ARROW;So;0;ON;;;;;N;RIGHT TRIPLE ARROW;;;; 21DC;LEFTWARDS SQUIGGLE ARROW;So;0;ON;;;;;N;LEFT SQUIGGLE ARROW;;;; 21DD;RIGHTWARDS SQUIGGLE ARROW;So;0;ON;;;;;N;RIGHT SQUIGGLE ARROW;;;; 21DE;UPWARDS ARROW WITH DOUBLE STROKE;So;0;ON;;;;;N;UP ARROW WITH DOUBLE STROKE;;;; 21DF;DOWNWARDS ARROW WITH DOUBLE STROKE;So;0;ON;;;;;N;DOWN ARROW WITH DOUBLE STROKE;;;; 21E0;LEFTWARDS DASHED ARROW;So;0;ON;;;;;N;LEFT DASHED ARROW;;;; 21E1;UPWARDS DASHED ARROW;So;0;ON;;;;;N;UP DASHED ARROW;;;; 21E2;RIGHTWARDS DASHED ARROW;So;0;ON;;;;;N;RIGHT DASHED ARROW;;;; 21E3;DOWNWARDS DASHED ARROW;So;0;ON;;;;;N;DOWN DASHED ARROW;;;; 21E4;LEFTWARDS ARROW TO BAR;So;0;ON;;;;;N;LEFT ARROW TO BAR;;;; 21E5;RIGHTWARDS ARROW TO BAR;So;0;ON;;;;;N;RIGHT ARROW TO BAR;;;; 21E6;LEFTWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE LEFT ARROW;;;; 21E7;UPWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE UP ARROW;;;; 21E8;RIGHTWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE RIGHT ARROW;;;; 21E9;DOWNWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE DOWN ARROW;;;; 21EA;UPWARDS WHITE ARROW FROM BAR;So;0;ON;;;;;N;WHITE UP ARROW FROM BAR;;;; 21EB;UPWARDS WHITE ARROW ON PEDESTAL;So;0;ON;;;;;N;;;;; 21EC;UPWARDS WHITE ARROW ON PEDESTAL WITH HORIZONTAL BAR;So;0;ON;;;;;N;;;;; 21ED;UPWARDS WHITE ARROW ON PEDESTAL WITH VERTICAL BAR;So;0;ON;;;;;N;;;;; 21EE;UPWARDS WHITE DOUBLE ARROW;So;0;ON;;;;;N;;;;; 21EF;UPWARDS WHITE DOUBLE ARROW ON PEDESTAL;So;0;ON;;;;;N;;;;; 21F0;RIGHTWARDS WHITE ARROW FROM WALL;So;0;ON;;;;;N;;;;; 21F1;NORTH WEST ARROW TO CORNER;So;0;ON;;;;;N;;;;; 21F2;SOUTH EAST ARROW TO CORNER;So;0;ON;;;;;N;;;;; 21F3;UP DOWN WHITE ARROW;So;0;ON;;;;;N;;;;; 21F4;RIGHT ARROW WITH SMALL CIRCLE;Sm;0;ON;;;;;N;;;;; 21F5;DOWNWARDS ARROW LEFTWARDS OF UPWARDS ARROW;Sm;0;ON;;;;;N;;;;; 21F6;THREE RIGHTWARDS ARROWS;Sm;0;ON;;;;;N;;;;; 21F7;LEFTWARDS ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 21F8;RIGHTWARDS ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 21F9;LEFT RIGHT ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 21FA;LEFTWARDS ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 21FB;RIGHTWARDS ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 21FC;LEFT RIGHT ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 21FD;LEFTWARDS OPEN-HEADED ARROW;Sm;0;ON;;;;;N;;;;; 21FE;RIGHTWARDS OPEN-HEADED ARROW;Sm;0;ON;;;;;N;;;;; 21FF;LEFT RIGHT OPEN-HEADED ARROW;Sm;0;ON;;;;;N;;;;; 2200;FOR ALL;Sm;0;ON;;;;;N;;;;; 2201;COMPLEMENT;Sm;0;ON;;;;;Y;;;;; 2202;PARTIAL DIFFERENTIAL;Sm;0;ON;;;;;Y;;;;; 2203;THERE EXISTS;Sm;0;ON;;;;;Y;;;;; 2204;THERE DOES NOT EXIST;Sm;0;ON;2203 0338;;;;Y;;;;; 2205;EMPTY SET;Sm;0;ON;;;;;N;;;;; 2206;INCREMENT;Sm;0;ON;;;;;N;;;;; 2207;NABLA;Sm;0;ON;;;;;N;;;;; 2208;ELEMENT OF;Sm;0;ON;;;;;Y;;;;; 2209;NOT AN ELEMENT OF;Sm;0;ON;2208 0338;;;;Y;;;;; 220A;SMALL ELEMENT OF;Sm;0;ON;;;;;Y;;;;; 220B;CONTAINS AS MEMBER;Sm;0;ON;;;;;Y;;;;; 220C;DOES NOT CONTAIN AS MEMBER;Sm;0;ON;220B 0338;;;;Y;;;;; 220D;SMALL CONTAINS AS MEMBER;Sm;0;ON;;;;;Y;;;;; 220E;END OF PROOF;Sm;0;ON;;;;;N;;;;; 220F;N-ARY PRODUCT;Sm;0;ON;;;;;N;;;;; 2210;N-ARY COPRODUCT;Sm;0;ON;;;;;N;;;;; 2211;N-ARY SUMMATION;Sm;0;ON;;;;;Y;;;;; 2212;MINUS SIGN;Sm;0;ES;;;;;N;;;;; 2213;MINUS-OR-PLUS SIGN;Sm;0;ET;;;;;N;;;;; 2214;DOT PLUS;Sm;0;ON;;;;;N;;;;; 2215;DIVISION SLASH;Sm;0;ON;;;;;Y;;;;; 2216;SET MINUS;Sm;0;ON;;;;;Y;;;;; 2217;ASTERISK OPERATOR;Sm;0;ON;;;;;N;;;;; 2218;RING OPERATOR;Sm;0;ON;;;;;N;;;;; 2219;BULLET OPERATOR;Sm;0;ON;;;;;N;;;;; 221A;SQUARE ROOT;Sm;0;ON;;;;;Y;;;;; 221B;CUBE ROOT;Sm;0;ON;;;;;Y;;;;; 221C;FOURTH ROOT;Sm;0;ON;;;;;Y;;;;; 221D;PROPORTIONAL TO;Sm;0;ON;;;;;Y;;;;; 221E;INFINITY;Sm;0;ON;;;;;N;;;;; 221F;RIGHT ANGLE;Sm;0;ON;;;;;Y;;;;; 2220;ANGLE;Sm;0;ON;;;;;Y;;;;; 2221;MEASURED ANGLE;Sm;0;ON;;;;;Y;;;;; 2222;SPHERICAL ANGLE;Sm;0;ON;;;;;Y;;;;; 2223;DIVIDES;Sm;0;ON;;;;;N;;;;; 2224;DOES NOT DIVIDE;Sm;0;ON;2223 0338;;;;Y;;;;; 2225;PARALLEL TO;Sm;0;ON;;;;;N;;;;; 2226;NOT PARALLEL TO;Sm;0;ON;2225 0338;;;;Y;;;;; 2227;LOGICAL AND;Sm;0;ON;;;;;N;;;;; 2228;LOGICAL OR;Sm;0;ON;;;;;N;;;;; 2229;INTERSECTION;Sm;0;ON;;;;;N;;;;; 222A;UNION;Sm;0;ON;;;;;N;;;;; 222B;INTEGRAL;Sm;0;ON;;;;;Y;;;;; 222C;DOUBLE INTEGRAL;Sm;0;ON; 222B 222B;;;;Y;;;;; 222D;TRIPLE INTEGRAL;Sm;0;ON; 222B 222B 222B;;;;Y;;;;; 222E;CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;; 222F;SURFACE INTEGRAL;Sm;0;ON; 222E 222E;;;;Y;;;;; 2230;VOLUME INTEGRAL;Sm;0;ON; 222E 222E 222E;;;;Y;;;;; 2231;CLOCKWISE INTEGRAL;Sm;0;ON;;;;;Y;;;;; 2232;CLOCKWISE CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;; 2233;ANTICLOCKWISE CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;; 2234;THEREFORE;Sm;0;ON;;;;;N;;;;; 2235;BECAUSE;Sm;0;ON;;;;;N;;;;; 2236;RATIO;Sm;0;ON;;;;;N;;;;; 2237;PROPORTION;Sm;0;ON;;;;;N;;;;; 2238;DOT MINUS;Sm;0;ON;;;;;N;;;;; 2239;EXCESS;Sm;0;ON;;;;;Y;;;;; 223A;GEOMETRIC PROPORTION;Sm;0;ON;;;;;N;;;;; 223B;HOMOTHETIC;Sm;0;ON;;;;;Y;;;;; 223C;TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;; 223D;REVERSED TILDE;Sm;0;ON;;;;;Y;;;;; 223E;INVERTED LAZY S;Sm;0;ON;;;;;Y;;;;; 223F;SINE WAVE;Sm;0;ON;;;;;Y;;;;; 2240;WREATH PRODUCT;Sm;0;ON;;;;;Y;;;;; 2241;NOT TILDE;Sm;0;ON;223C 0338;;;;Y;;;;; 2242;MINUS TILDE;Sm;0;ON;;;;;Y;;;;; 2243;ASYMPTOTICALLY EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2244;NOT ASYMPTOTICALLY EQUAL TO;Sm;0;ON;2243 0338;;;;Y;;;;; 2245;APPROXIMATELY EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2246;APPROXIMATELY BUT NOT ACTUALLY EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2247;NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO;Sm;0;ON;2245 0338;;;;Y;;;;; 2248;ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2249;NOT ALMOST EQUAL TO;Sm;0;ON;2248 0338;;;;Y;;;;; 224A;ALMOST EQUAL OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 224B;TRIPLE TILDE;Sm;0;ON;;;;;Y;;;;; 224C;ALL EQUAL TO;Sm;0;ON;;;;;Y;;;;; 224D;EQUIVALENT TO;Sm;0;ON;;;;;N;;;;; 224E;GEOMETRICALLY EQUIVALENT TO;Sm;0;ON;;;;;N;;;;; 224F;DIFFERENCE BETWEEN;Sm;0;ON;;;;;N;;;;; 2250;APPROACHES THE LIMIT;Sm;0;ON;;;;;N;;;;; 2251;GEOMETRICALLY EQUAL TO;Sm;0;ON;;;;;N;;;;; 2252;APPROXIMATELY EQUAL TO OR THE IMAGE OF;Sm;0;ON;;;;;Y;;;;; 2253;IMAGE OF OR APPROXIMATELY EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2254;COLON EQUALS;Sm;0;ON;;;;;Y;COLON EQUAL;;;; 2255;EQUALS COLON;Sm;0;ON;;;;;Y;EQUAL COLON;;;; 2256;RING IN EQUAL TO;Sm;0;ON;;;;;N;;;;; 2257;RING EQUAL TO;Sm;0;ON;;;;;N;;;;; 2258;CORRESPONDS TO;Sm;0;ON;;;;;N;;;;; 2259;ESTIMATES;Sm;0;ON;;;;;N;;;;; 225A;EQUIANGULAR TO;Sm;0;ON;;;;;N;;;;; 225B;STAR EQUALS;Sm;0;ON;;;;;N;;;;; 225C;DELTA EQUAL TO;Sm;0;ON;;;;;N;;;;; 225D;EQUAL TO BY DEFINITION;Sm;0;ON;;;;;N;;;;; 225E;MEASURED BY;Sm;0;ON;;;;;N;;;;; 225F;QUESTIONED EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2260;NOT EQUAL TO;Sm;0;ON;003D 0338;;;;Y;;;;; 2261;IDENTICAL TO;Sm;0;ON;;;;;N;;;;; 2262;NOT IDENTICAL TO;Sm;0;ON;2261 0338;;;;Y;;;;; 2263;STRICTLY EQUIVALENT TO;Sm;0;ON;;;;;N;;;;; 2264;LESS-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN OR EQUAL TO;;;; 2265;GREATER-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN OR EQUAL TO;;;; 2266;LESS-THAN OVER EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN OVER EQUAL TO;;;; 2267;GREATER-THAN OVER EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN OVER EQUAL TO;;;; 2268;LESS-THAN BUT NOT EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN BUT NOT EQUAL TO;;;; 2269;GREATER-THAN BUT NOT EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN BUT NOT EQUAL TO;;;; 226A;MUCH LESS-THAN;Sm;0;ON;;;;;Y;MUCH LESS THAN;;;; 226B;MUCH GREATER-THAN;Sm;0;ON;;;;;Y;MUCH GREATER THAN;;;; 226C;BETWEEN;Sm;0;ON;;;;;N;;;;; 226D;NOT EQUIVALENT TO;Sm;0;ON;224D 0338;;;;N;;;;; 226E;NOT LESS-THAN;Sm;0;ON;003C 0338;;;;Y;NOT LESS THAN;;;; 226F;NOT GREATER-THAN;Sm;0;ON;003E 0338;;;;Y;NOT GREATER THAN;;;; 2270;NEITHER LESS-THAN NOR EQUAL TO;Sm;0;ON;2264 0338;;;;Y;NEITHER LESS THAN NOR EQUAL TO;;;; 2271;NEITHER GREATER-THAN NOR EQUAL TO;Sm;0;ON;2265 0338;;;;Y;NEITHER GREATER THAN NOR EQUAL TO;;;; 2272;LESS-THAN OR EQUIVALENT TO;Sm;0;ON;;;;;Y;LESS THAN OR EQUIVALENT TO;;;; 2273;GREATER-THAN OR EQUIVALENT TO;Sm;0;ON;;;;;Y;GREATER THAN OR EQUIVALENT TO;;;; 2274;NEITHER LESS-THAN NOR EQUIVALENT TO;Sm;0;ON;2272 0338;;;;Y;NEITHER LESS THAN NOR EQUIVALENT TO;;;; 2275;NEITHER GREATER-THAN NOR EQUIVALENT TO;Sm;0;ON;2273 0338;;;;Y;NEITHER GREATER THAN NOR EQUIVALENT TO;;;; 2276;LESS-THAN OR GREATER-THAN;Sm;0;ON;;;;;Y;LESS THAN OR GREATER THAN;;;; 2277;GREATER-THAN OR LESS-THAN;Sm;0;ON;;;;;Y;GREATER THAN OR LESS THAN;;;; 2278;NEITHER LESS-THAN NOR GREATER-THAN;Sm;0;ON;2276 0338;;;;Y;NEITHER LESS THAN NOR GREATER THAN;;;; 2279;NEITHER GREATER-THAN NOR LESS-THAN;Sm;0;ON;2277 0338;;;;Y;NEITHER GREATER THAN NOR LESS THAN;;;; 227A;PRECEDES;Sm;0;ON;;;;;Y;;;;; 227B;SUCCEEDS;Sm;0;ON;;;;;Y;;;;; 227C;PRECEDES OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 227D;SUCCEEDS OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 227E;PRECEDES OR EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;; 227F;SUCCEEDS OR EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;; 2280;DOES NOT PRECEDE;Sm;0;ON;227A 0338;;;;Y;;;;; 2281;DOES NOT SUCCEED;Sm;0;ON;227B 0338;;;;Y;;;;; 2282;SUBSET OF;Sm;0;ON;;;;;Y;;;;; 2283;SUPERSET OF;Sm;0;ON;;;;;Y;;;;; 2284;NOT A SUBSET OF;Sm;0;ON;2282 0338;;;;Y;;;;; 2285;NOT A SUPERSET OF;Sm;0;ON;2283 0338;;;;Y;;;;; 2286;SUBSET OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2287;SUPERSET OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2288;NEITHER A SUBSET OF NOR EQUAL TO;Sm;0;ON;2286 0338;;;;Y;;;;; 2289;NEITHER A SUPERSET OF NOR EQUAL TO;Sm;0;ON;2287 0338;;;;Y;;;;; 228A;SUBSET OF WITH NOT EQUAL TO;Sm;0;ON;;;;;Y;SUBSET OF OR NOT EQUAL TO;;;; 228B;SUPERSET OF WITH NOT EQUAL TO;Sm;0;ON;;;;;Y;SUPERSET OF OR NOT EQUAL TO;;;; 228C;MULTISET;Sm;0;ON;;;;;Y;;;;; 228D;MULTISET MULTIPLICATION;Sm;0;ON;;;;;N;;;;; 228E;MULTISET UNION;Sm;0;ON;;;;;N;;;;; 228F;SQUARE IMAGE OF;Sm;0;ON;;;;;Y;;;;; 2290;SQUARE ORIGINAL OF;Sm;0;ON;;;;;Y;;;;; 2291;SQUARE IMAGE OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2292;SQUARE ORIGINAL OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2293;SQUARE CAP;Sm;0;ON;;;;;N;;;;; 2294;SQUARE CUP;Sm;0;ON;;;;;N;;;;; 2295;CIRCLED PLUS;Sm;0;ON;;;;;N;;;;; 2296;CIRCLED MINUS;Sm;0;ON;;;;;N;;;;; 2297;CIRCLED TIMES;Sm;0;ON;;;;;N;;;;; 2298;CIRCLED DIVISION SLASH;Sm;0;ON;;;;;Y;;;;; 2299;CIRCLED DOT OPERATOR;Sm;0;ON;;;;;N;;;;; 229A;CIRCLED RING OPERATOR;Sm;0;ON;;;;;N;;;;; 229B;CIRCLED ASTERISK OPERATOR;Sm;0;ON;;;;;N;;;;; 229C;CIRCLED EQUALS;Sm;0;ON;;;;;N;;;;; 229D;CIRCLED DASH;Sm;0;ON;;;;;N;;;;; 229E;SQUARED PLUS;Sm;0;ON;;;;;N;;;;; 229F;SQUARED MINUS;Sm;0;ON;;;;;N;;;;; 22A0;SQUARED TIMES;Sm;0;ON;;;;;N;;;;; 22A1;SQUARED DOT OPERATOR;Sm;0;ON;;;;;N;;;;; 22A2;RIGHT TACK;Sm;0;ON;;;;;Y;;;;; 22A3;LEFT TACK;Sm;0;ON;;;;;Y;;;;; 22A4;DOWN TACK;Sm;0;ON;;;;;N;;;;; 22A5;UP TACK;Sm;0;ON;;;;;N;;;;; 22A6;ASSERTION;Sm;0;ON;;;;;Y;;;;; 22A7;MODELS;Sm;0;ON;;;;;Y;;;;; 22A8;TRUE;Sm;0;ON;;;;;Y;;;;; 22A9;FORCES;Sm;0;ON;;;;;Y;;;;; 22AA;TRIPLE VERTICAL BAR RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;; 22AB;DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;; 22AC;DOES NOT PROVE;Sm;0;ON;22A2 0338;;;;Y;;;;; 22AD;NOT TRUE;Sm;0;ON;22A8 0338;;;;Y;;;;; 22AE;DOES NOT FORCE;Sm;0;ON;22A9 0338;;;;Y;;;;; 22AF;NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE;Sm;0;ON;22AB 0338;;;;Y;;;;; 22B0;PRECEDES UNDER RELATION;Sm;0;ON;;;;;Y;;;;; 22B1;SUCCEEDS UNDER RELATION;Sm;0;ON;;;;;Y;;;;; 22B2;NORMAL SUBGROUP OF;Sm;0;ON;;;;;Y;;;;; 22B3;CONTAINS AS NORMAL SUBGROUP;Sm;0;ON;;;;;Y;;;;; 22B4;NORMAL SUBGROUP OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 22B5;CONTAINS AS NORMAL SUBGROUP OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 22B6;ORIGINAL OF;Sm;0;ON;;;;;Y;;;;; 22B7;IMAGE OF;Sm;0;ON;;;;;Y;;;;; 22B8;MULTIMAP;Sm;0;ON;;;;;Y;;;;; 22B9;HERMITIAN CONJUGATE MATRIX;Sm;0;ON;;;;;N;;;;; 22BA;INTERCALATE;Sm;0;ON;;;;;N;;;;; 22BB;XOR;Sm;0;ON;;;;;N;;;;; 22BC;NAND;Sm;0;ON;;;;;N;;;;; 22BD;NOR;Sm;0;ON;;;;;N;;;;; 22BE;RIGHT ANGLE WITH ARC;Sm;0;ON;;;;;Y;;;;; 22BF;RIGHT TRIANGLE;Sm;0;ON;;;;;Y;;;;; 22C0;N-ARY LOGICAL AND;Sm;0;ON;;;;;N;;;;; 22C1;N-ARY LOGICAL OR;Sm;0;ON;;;;;N;;;;; 22C2;N-ARY INTERSECTION;Sm;0;ON;;;;;N;;;;; 22C3;N-ARY UNION;Sm;0;ON;;;;;N;;;;; 22C4;DIAMOND OPERATOR;Sm;0;ON;;;;;N;;;;; 22C5;DOT OPERATOR;Sm;0;ON;;;;;N;;;;; 22C6;STAR OPERATOR;Sm;0;ON;;;;;N;;;;; 22C7;DIVISION TIMES;Sm;0;ON;;;;;N;;;;; 22C8;BOWTIE;Sm;0;ON;;;;;N;;;;; 22C9;LEFT NORMAL FACTOR SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;; 22CA;RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;; 22CB;LEFT SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;; 22CC;RIGHT SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;; 22CD;REVERSED TILDE EQUALS;Sm;0;ON;;;;;Y;;;;; 22CE;CURLY LOGICAL OR;Sm;0;ON;;;;;N;;;;; 22CF;CURLY LOGICAL AND;Sm;0;ON;;;;;N;;;;; 22D0;DOUBLE SUBSET;Sm;0;ON;;;;;Y;;;;; 22D1;DOUBLE SUPERSET;Sm;0;ON;;;;;Y;;;;; 22D2;DOUBLE INTERSECTION;Sm;0;ON;;;;;N;;;;; 22D3;DOUBLE UNION;Sm;0;ON;;;;;N;;;;; 22D4;PITCHFORK;Sm;0;ON;;;;;N;;;;; 22D5;EQUAL AND PARALLEL TO;Sm;0;ON;;;;;N;;;;; 22D6;LESS-THAN WITH DOT;Sm;0;ON;;;;;Y;LESS THAN WITH DOT;;;; 22D7;GREATER-THAN WITH DOT;Sm;0;ON;;;;;Y;GREATER THAN WITH DOT;;;; 22D8;VERY MUCH LESS-THAN;Sm;0;ON;;;;;Y;VERY MUCH LESS THAN;;;; 22D9;VERY MUCH GREATER-THAN;Sm;0;ON;;;;;Y;VERY MUCH GREATER THAN;;;; 22DA;LESS-THAN EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;LESS THAN EQUAL TO OR GREATER THAN;;;; 22DB;GREATER-THAN EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;GREATER THAN EQUAL TO OR LESS THAN;;;; 22DC;EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;EQUAL TO OR LESS THAN;;;; 22DD;EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;EQUAL TO OR GREATER THAN;;;; 22DE;EQUAL TO OR PRECEDES;Sm;0;ON;;;;;Y;;;;; 22DF;EQUAL TO OR SUCCEEDS;Sm;0;ON;;;;;Y;;;;; 22E0;DOES NOT PRECEDE OR EQUAL;Sm;0;ON;227C 0338;;;;Y;;;;; 22E1;DOES NOT SUCCEED OR EQUAL;Sm;0;ON;227D 0338;;;;Y;;;;; 22E2;NOT SQUARE IMAGE OF OR EQUAL TO;Sm;0;ON;2291 0338;;;;Y;;;;; 22E3;NOT SQUARE ORIGINAL OF OR EQUAL TO;Sm;0;ON;2292 0338;;;;Y;;;;; 22E4;SQUARE IMAGE OF OR NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;; 22E5;SQUARE ORIGINAL OF OR NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;; 22E6;LESS-THAN BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;LESS THAN BUT NOT EQUIVALENT TO;;;; 22E7;GREATER-THAN BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;GREATER THAN BUT NOT EQUIVALENT TO;;;; 22E8;PRECEDES BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;; 22E9;SUCCEEDS BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;; 22EA;NOT NORMAL SUBGROUP OF;Sm;0;ON;22B2 0338;;;;Y;;;;; 22EB;DOES NOT CONTAIN AS NORMAL SUBGROUP;Sm;0;ON;22B3 0338;;;;Y;;;;; 22EC;NOT NORMAL SUBGROUP OF OR EQUAL TO;Sm;0;ON;22B4 0338;;;;Y;;;;; 22ED;DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL;Sm;0;ON;22B5 0338;;;;Y;;;;; 22EE;VERTICAL ELLIPSIS;Sm;0;ON;;;;;N;;;;; 22EF;MIDLINE HORIZONTAL ELLIPSIS;Sm;0;ON;;;;;N;;;;; 22F0;UP RIGHT DIAGONAL ELLIPSIS;Sm;0;ON;;;;;Y;;;;; 22F1;DOWN RIGHT DIAGONAL ELLIPSIS;Sm;0;ON;;;;;Y;;;;; 22F2;ELEMENT OF WITH LONG HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;; 22F3;ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;; 22F4;SMALL ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;; 22F5;ELEMENT OF WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;; 22F6;ELEMENT OF WITH OVERBAR;Sm;0;ON;;;;;Y;;;;; 22F7;SMALL ELEMENT OF WITH OVERBAR;Sm;0;ON;;;;;Y;;;;; 22F8;ELEMENT OF WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;; 22F9;ELEMENT OF WITH TWO HORIZONTAL STROKES;Sm;0;ON;;;;;Y;;;;; 22FA;CONTAINS WITH LONG HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;; 22FB;CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;; 22FC;SMALL CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;; 22FD;CONTAINS WITH OVERBAR;Sm;0;ON;;;;;Y;;;;; 22FE;SMALL CONTAINS WITH OVERBAR;Sm;0;ON;;;;;Y;;;;; 22FF;Z NOTATION BAG MEMBERSHIP;Sm;0;ON;;;;;Y;;;;; 2300;DIAMETER SIGN;So;0;ON;;;;;N;;;;; 2301;ELECTRIC ARROW;So;0;ON;;;;;N;;;;; 2302;HOUSE;So;0;ON;;;;;N;;;;; 2303;UP ARROWHEAD;So;0;ON;;;;;N;;;;; 2304;DOWN ARROWHEAD;So;0;ON;;;;;N;;;;; 2305;PROJECTIVE;So;0;ON;;;;;N;;;;; 2306;PERSPECTIVE;So;0;ON;;;;;N;;;;; 2307;WAVY LINE;So;0;ON;;;;;N;;;;; 2308;LEFT CEILING;Ps;0;ON;;;;;Y;;;;; 2309;RIGHT CEILING;Pe;0;ON;;;;;Y;;;;; 230A;LEFT FLOOR;Ps;0;ON;;;;;Y;;;;; 230B;RIGHT FLOOR;Pe;0;ON;;;;;Y;;;;; 230C;BOTTOM RIGHT CROP;So;0;ON;;;;;N;;;;; 230D;BOTTOM LEFT CROP;So;0;ON;;;;;N;;;;; 230E;TOP RIGHT CROP;So;0;ON;;;;;N;;;;; 230F;TOP LEFT CROP;So;0;ON;;;;;N;;;;; 2310;REVERSED NOT SIGN;So;0;ON;;;;;N;;;;; 2311;SQUARE LOZENGE;So;0;ON;;;;;N;;;;; 2312;ARC;So;0;ON;;;;;N;;;;; 2313;SEGMENT;So;0;ON;;;;;N;;;;; 2314;SECTOR;So;0;ON;;;;;N;;;;; 2315;TELEPHONE RECORDER;So;0;ON;;;;;N;;;;; 2316;POSITION INDICATOR;So;0;ON;;;;;N;;;;; 2317;VIEWDATA SQUARE;So;0;ON;;;;;N;;;;; 2318;PLACE OF INTEREST SIGN;So;0;ON;;;;;N;COMMAND KEY;;;; 2319;TURNED NOT SIGN;So;0;ON;;;;;N;;;;; 231A;WATCH;So;0;ON;;;;;N;;;;; 231B;HOURGLASS;So;0;ON;;;;;N;;;;; 231C;TOP LEFT CORNER;So;0;ON;;;;;N;;;;; 231D;TOP RIGHT CORNER;So;0;ON;;;;;N;;;;; 231E;BOTTOM LEFT CORNER;So;0;ON;;;;;N;;;;; 231F;BOTTOM RIGHT CORNER;So;0;ON;;;;;N;;;;; 2320;TOP HALF INTEGRAL;Sm;0;ON;;;;;Y;;;;; 2321;BOTTOM HALF INTEGRAL;Sm;0;ON;;;;;Y;;;;; 2322;FROWN;So;0;ON;;;;;N;;;;; 2323;SMILE;So;0;ON;;;;;N;;;;; 2324;UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS;So;0;ON;;;;;N;ENTER KEY;;;; 2325;OPTION KEY;So;0;ON;;;;;N;;;;; 2326;ERASE TO THE RIGHT;So;0;ON;;;;;N;DELETE TO THE RIGHT KEY;;;; 2327;X IN A RECTANGLE BOX;So;0;ON;;;;;N;CLEAR KEY;;;; 2328;KEYBOARD;So;0;ON;;;;;N;;;;; 2329;LEFT-POINTING ANGLE BRACKET;Ps;0;ON;3008;;;;Y;BRA;;;; 232A;RIGHT-POINTING ANGLE BRACKET;Pe;0;ON;3009;;;;Y;KET;;;; 232B;ERASE TO THE LEFT;So;0;ON;;;;;N;DELETE TO THE LEFT KEY;;;; 232C;BENZENE RING;So;0;ON;;;;;N;;;;; 232D;CYLINDRICITY;So;0;ON;;;;;N;;;;; 232E;ALL AROUND-PROFILE;So;0;ON;;;;;N;;;;; 232F;SYMMETRY;So;0;ON;;;;;N;;;;; 2330;TOTAL RUNOUT;So;0;ON;;;;;N;;;;; 2331;DIMENSION ORIGIN;So;0;ON;;;;;N;;;;; 2332;CONICAL TAPER;So;0;ON;;;;;N;;;;; 2333;SLOPE;So;0;ON;;;;;N;;;;; 2334;COUNTERBORE;So;0;ON;;;;;N;;;;; 2335;COUNTERSINK;So;0;ON;;;;;N;;;;; 2336;APL FUNCTIONAL SYMBOL I-BEAM;So;0;L;;;;;N;;;;; 2337;APL FUNCTIONAL SYMBOL SQUISH QUAD;So;0;L;;;;;N;;;;; 2338;APL FUNCTIONAL SYMBOL QUAD EQUAL;So;0;L;;;;;N;;;;; 2339;APL FUNCTIONAL SYMBOL QUAD DIVIDE;So;0;L;;;;;N;;;;; 233A;APL FUNCTIONAL SYMBOL QUAD DIAMOND;So;0;L;;;;;N;;;;; 233B;APL FUNCTIONAL SYMBOL QUAD JOT;So;0;L;;;;;N;;;;; 233C;APL FUNCTIONAL SYMBOL QUAD CIRCLE;So;0;L;;;;;N;;;;; 233D;APL FUNCTIONAL SYMBOL CIRCLE STILE;So;0;L;;;;;N;;;;; 233E;APL FUNCTIONAL SYMBOL CIRCLE JOT;So;0;L;;;;;N;;;;; 233F;APL FUNCTIONAL SYMBOL SLASH BAR;So;0;L;;;;;N;;;;; 2340;APL FUNCTIONAL SYMBOL BACKSLASH BAR;So;0;L;;;;;N;;;;; 2341;APL FUNCTIONAL SYMBOL QUAD SLASH;So;0;L;;;;;N;;;;; 2342;APL FUNCTIONAL SYMBOL QUAD BACKSLASH;So;0;L;;;;;N;;;;; 2343;APL FUNCTIONAL SYMBOL QUAD LESS-THAN;So;0;L;;;;;N;;;;; 2344;APL FUNCTIONAL SYMBOL QUAD GREATER-THAN;So;0;L;;;;;N;;;;; 2345;APL FUNCTIONAL SYMBOL LEFTWARDS VANE;So;0;L;;;;;N;;;;; 2346;APL FUNCTIONAL SYMBOL RIGHTWARDS VANE;So;0;L;;;;;N;;;;; 2347;APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW;So;0;L;;;;;N;;;;; 2348;APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW;So;0;L;;;;;N;;;;; 2349;APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH;So;0;L;;;;;N;;;;; 234A;APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR;So;0;L;;;;;N;;;;; 234B;APL FUNCTIONAL SYMBOL DELTA STILE;So;0;L;;;;;N;;;;; 234C;APL FUNCTIONAL SYMBOL QUAD DOWN CARET;So;0;L;;;;;N;;;;; 234D;APL FUNCTIONAL SYMBOL QUAD DELTA;So;0;L;;;;;N;;;;; 234E;APL FUNCTIONAL SYMBOL DOWN TACK JOT;So;0;L;;;;;N;;;;; 234F;APL FUNCTIONAL SYMBOL UPWARDS VANE;So;0;L;;;;;N;;;;; 2350;APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW;So;0;L;;;;;N;;;;; 2351;APL FUNCTIONAL SYMBOL UP TACK OVERBAR;So;0;L;;;;;N;;;;; 2352;APL FUNCTIONAL SYMBOL DEL STILE;So;0;L;;;;;N;;;;; 2353;APL FUNCTIONAL SYMBOL QUAD UP CARET;So;0;L;;;;;N;;;;; 2354;APL FUNCTIONAL SYMBOL QUAD DEL;So;0;L;;;;;N;;;;; 2355;APL FUNCTIONAL SYMBOL UP TACK JOT;So;0;L;;;;;N;;;;; 2356;APL FUNCTIONAL SYMBOL DOWNWARDS VANE;So;0;L;;;;;N;;;;; 2357;APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW;So;0;L;;;;;N;;;;; 2358;APL FUNCTIONAL SYMBOL QUOTE UNDERBAR;So;0;L;;;;;N;;;;; 2359;APL FUNCTIONAL SYMBOL DELTA UNDERBAR;So;0;L;;;;;N;;;;; 235A;APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR;So;0;L;;;;;N;;;;; 235B;APL FUNCTIONAL SYMBOL JOT UNDERBAR;So;0;L;;;;;N;;;;; 235C;APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR;So;0;L;;;;;N;;;;; 235D;APL FUNCTIONAL SYMBOL UP SHOE JOT;So;0;L;;;;;N;;;;; 235E;APL FUNCTIONAL SYMBOL QUOTE QUAD;So;0;L;;;;;N;;;;; 235F;APL FUNCTIONAL SYMBOL CIRCLE STAR;So;0;L;;;;;N;;;;; 2360;APL FUNCTIONAL SYMBOL QUAD COLON;So;0;L;;;;;N;;;;; 2361;APL FUNCTIONAL SYMBOL UP TACK DIAERESIS;So;0;L;;;;;N;;;;; 2362;APL FUNCTIONAL SYMBOL DEL DIAERESIS;So;0;L;;;;;N;;;;; 2363;APL FUNCTIONAL SYMBOL STAR DIAERESIS;So;0;L;;;;;N;;;;; 2364;APL FUNCTIONAL SYMBOL JOT DIAERESIS;So;0;L;;;;;N;;;;; 2365;APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS;So;0;L;;;;;N;;;;; 2366;APL FUNCTIONAL SYMBOL DOWN SHOE STILE;So;0;L;;;;;N;;;;; 2367;APL FUNCTIONAL SYMBOL LEFT SHOE STILE;So;0;L;;;;;N;;;;; 2368;APL FUNCTIONAL SYMBOL TILDE DIAERESIS;So;0;L;;;;;N;;;;; 2369;APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS;So;0;L;;;;;N;;;;; 236A;APL FUNCTIONAL SYMBOL COMMA BAR;So;0;L;;;;;N;;;;; 236B;APL FUNCTIONAL SYMBOL DEL TILDE;So;0;L;;;;;N;;;;; 236C;APL FUNCTIONAL SYMBOL ZILDE;So;0;L;;;;;N;;;;; 236D;APL FUNCTIONAL SYMBOL STILE TILDE;So;0;L;;;;;N;;;;; 236E;APL FUNCTIONAL SYMBOL SEMICOLON UNDERBAR;So;0;L;;;;;N;;;;; 236F;APL FUNCTIONAL SYMBOL QUAD NOT EQUAL;So;0;L;;;;;N;;;;; 2370;APL FUNCTIONAL SYMBOL QUAD QUESTION;So;0;L;;;;;N;;;;; 2371;APL FUNCTIONAL SYMBOL DOWN CARET TILDE;So;0;L;;;;;N;;;;; 2372;APL FUNCTIONAL SYMBOL UP CARET TILDE;So;0;L;;;;;N;;;;; 2373;APL FUNCTIONAL SYMBOL IOTA;So;0;L;;;;;N;;;;; 2374;APL FUNCTIONAL SYMBOL RHO;So;0;L;;;;;N;;;;; 2375;APL FUNCTIONAL SYMBOL OMEGA;So;0;L;;;;;N;;;;; 2376;APL FUNCTIONAL SYMBOL ALPHA UNDERBAR;So;0;L;;;;;N;;;;; 2377;APL FUNCTIONAL SYMBOL EPSILON UNDERBAR;So;0;L;;;;;N;;;;; 2378;APL FUNCTIONAL SYMBOL IOTA UNDERBAR;So;0;L;;;;;N;;;;; 2379;APL FUNCTIONAL SYMBOL OMEGA UNDERBAR;So;0;L;;;;;N;;;;; 237A;APL FUNCTIONAL SYMBOL ALPHA;So;0;L;;;;;N;;;;; 237B;NOT CHECK MARK;So;0;ON;;;;;N;;;;; 237C;RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW;Sm;0;ON;;;;;N;;;;; 237D;SHOULDERED OPEN BOX;So;0;ON;;;;;N;;;;; 237E;BELL SYMBOL;So;0;ON;;;;;N;;;;; 237F;VERTICAL LINE WITH MIDDLE DOT;So;0;ON;;;;;N;;;;; 2380;INSERTION SYMBOL;So;0;ON;;;;;N;;;;; 2381;CONTINUOUS UNDERLINE SYMBOL;So;0;ON;;;;;N;;;;; 2382;DISCONTINUOUS UNDERLINE SYMBOL;So;0;ON;;;;;N;;;;; 2383;EMPHASIS SYMBOL;So;0;ON;;;;;N;;;;; 2384;COMPOSITION SYMBOL;So;0;ON;;;;;N;;;;; 2385;WHITE SQUARE WITH CENTRE VERTICAL LINE;So;0;ON;;;;;N;;;;; 2386;ENTER SYMBOL;So;0;ON;;;;;N;;;;; 2387;ALTERNATIVE KEY SYMBOL;So;0;ON;;;;;N;;;;; 2388;HELM SYMBOL;So;0;ON;;;;;N;;;;; 2389;CIRCLED HORIZONTAL BAR WITH NOTCH;So;0;ON;;;;;N;;;;; 238A;CIRCLED TRIANGLE DOWN;So;0;ON;;;;;N;;;;; 238B;BROKEN CIRCLE WITH NORTHWEST ARROW;So;0;ON;;;;;N;;;;; 238C;UNDO SYMBOL;So;0;ON;;;;;N;;;;; 238D;MONOSTABLE SYMBOL;So;0;ON;;;;;N;;;;; 238E;HYSTERESIS SYMBOL;So;0;ON;;;;;N;;;;; 238F;OPEN-CIRCUIT-OUTPUT H-TYPE SYMBOL;So;0;ON;;;;;N;;;;; 2390;OPEN-CIRCUIT-OUTPUT L-TYPE SYMBOL;So;0;ON;;;;;N;;;;; 2391;PASSIVE-PULL-DOWN-OUTPUT SYMBOL;So;0;ON;;;;;N;;;;; 2392;PASSIVE-PULL-UP-OUTPUT SYMBOL;So;0;ON;;;;;N;;;;; 2393;DIRECT CURRENT SYMBOL FORM TWO;So;0;ON;;;;;N;;;;; 2394;SOFTWARE-FUNCTION SYMBOL;So;0;ON;;;;;N;;;;; 2395;APL FUNCTIONAL SYMBOL QUAD;So;0;L;;;;;N;;;;; 2396;DECIMAL SEPARATOR KEY SYMBOL;So;0;ON;;;;;N;;;;; 2397;PREVIOUS PAGE;So;0;ON;;;;;N;;;;; 2398;NEXT PAGE;So;0;ON;;;;;N;;;;; 2399;PRINT SCREEN SYMBOL;So;0;ON;;;;;N;;;;; 239A;CLEAR SCREEN SYMBOL;So;0;ON;;;;;N;;;;; 239B;LEFT PARENTHESIS UPPER HOOK;Sm;0;ON;;;;;N;;;;; 239C;LEFT PARENTHESIS EXTENSION;Sm;0;ON;;;;;N;;;;; 239D;LEFT PARENTHESIS LOWER HOOK;Sm;0;ON;;;;;N;;;;; 239E;RIGHT PARENTHESIS UPPER HOOK;Sm;0;ON;;;;;N;;;;; 239F;RIGHT PARENTHESIS EXTENSION;Sm;0;ON;;;;;N;;;;; 23A0;RIGHT PARENTHESIS LOWER HOOK;Sm;0;ON;;;;;N;;;;; 23A1;LEFT SQUARE BRACKET UPPER CORNER;Sm;0;ON;;;;;N;;;;; 23A2;LEFT SQUARE BRACKET EXTENSION;Sm;0;ON;;;;;N;;;;; 23A3;LEFT SQUARE BRACKET LOWER CORNER;Sm;0;ON;;;;;N;;;;; 23A4;RIGHT SQUARE BRACKET UPPER CORNER;Sm;0;ON;;;;;N;;;;; 23A5;RIGHT SQUARE BRACKET EXTENSION;Sm;0;ON;;;;;N;;;;; 23A6;RIGHT SQUARE BRACKET LOWER CORNER;Sm;0;ON;;;;;N;;;;; 23A7;LEFT CURLY BRACKET UPPER HOOK;Sm;0;ON;;;;;N;;;;; 23A8;LEFT CURLY BRACKET MIDDLE PIECE;Sm;0;ON;;;;;N;;;;; 23A9;LEFT CURLY BRACKET LOWER HOOK;Sm;0;ON;;;;;N;;;;; 23AA;CURLY BRACKET EXTENSION;Sm;0;ON;;;;;N;;;;; 23AB;RIGHT CURLY BRACKET UPPER HOOK;Sm;0;ON;;;;;N;;;;; 23AC;RIGHT CURLY BRACKET MIDDLE PIECE;Sm;0;ON;;;;;N;;;;; 23AD;RIGHT CURLY BRACKET LOWER HOOK;Sm;0;ON;;;;;N;;;;; 23AE;INTEGRAL EXTENSION;Sm;0;ON;;;;;N;;;;; 23AF;HORIZONTAL LINE EXTENSION;Sm;0;ON;;;;;N;;;;; 23B0;UPPER LEFT OR LOWER RIGHT CURLY BRACKET SECTION;Sm;0;ON;;;;;N;;;;; 23B1;UPPER RIGHT OR LOWER LEFT CURLY BRACKET SECTION;Sm;0;ON;;;;;N;;;;; 23B2;SUMMATION TOP;Sm;0;ON;;;;;N;;;;; 23B3;SUMMATION BOTTOM;Sm;0;ON;;;;;N;;;;; 23B4;TOP SQUARE BRACKET;So;0;ON;;;;;N;;;;; 23B5;BOTTOM SQUARE BRACKET;So;0;ON;;;;;N;;;;; 23B6;BOTTOM SQUARE BRACKET OVER TOP SQUARE BRACKET;So;0;ON;;;;;N;;;;; 23B7;RADICAL SYMBOL BOTTOM;So;0;ON;;;;;N;;;;; 23B8;LEFT VERTICAL BOX LINE;So;0;ON;;;;;N;;;;; 23B9;RIGHT VERTICAL BOX LINE;So;0;ON;;;;;N;;;;; 23BA;HORIZONTAL SCAN LINE-1;So;0;ON;;;;;N;;;;; 23BB;HORIZONTAL SCAN LINE-3;So;0;ON;;;;;N;;;;; 23BC;HORIZONTAL SCAN LINE-7;So;0;ON;;;;;N;;;;; 23BD;HORIZONTAL SCAN LINE-9;So;0;ON;;;;;N;;;;; 23BE;DENTISTRY SYMBOL LIGHT VERTICAL AND TOP RIGHT;So;0;ON;;;;;N;;;;; 23BF;DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM RIGHT;So;0;ON;;;;;N;;;;; 23C0;DENTISTRY SYMBOL LIGHT VERTICAL WITH CIRCLE;So;0;ON;;;;;N;;;;; 23C1;DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH CIRCLE;So;0;ON;;;;;N;;;;; 23C2;DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH CIRCLE;So;0;ON;;;;;N;;;;; 23C3;DENTISTRY SYMBOL LIGHT VERTICAL WITH TRIANGLE;So;0;ON;;;;;N;;;;; 23C4;DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH TRIANGLE;So;0;ON;;;;;N;;;;; 23C5;DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH TRIANGLE;So;0;ON;;;;;N;;;;; 23C6;DENTISTRY SYMBOL LIGHT VERTICAL AND WAVE;So;0;ON;;;;;N;;;;; 23C7;DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH WAVE;So;0;ON;;;;;N;;;;; 23C8;DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH WAVE;So;0;ON;;;;;N;;;;; 23C9;DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL;So;0;ON;;;;;N;;;;; 23CA;DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL;So;0;ON;;;;;N;;;;; 23CB;DENTISTRY SYMBOL LIGHT VERTICAL AND TOP LEFT;So;0;ON;;;;;N;;;;; 23CC;DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM LEFT;So;0;ON;;;;;N;;;;; 23CD;SQUARE FOOT;So;0;ON;;;;;N;;;;; 23CE;RETURN SYMBOL;So;0;ON;;;;;N;;;;; 23CF;EJECT SYMBOL;So;0;ON;;;;;N;;;;; 23D0;VERTICAL LINE EXTENSION;So;0;ON;;;;;N;;;;; 23D1;METRICAL BREVE;So;0;ON;;;;;N;;;;; 23D2;METRICAL LONG OVER SHORT;So;0;ON;;;;;N;;;;; 23D3;METRICAL SHORT OVER LONG;So;0;ON;;;;;N;;;;; 23D4;METRICAL LONG OVER TWO SHORTS;So;0;ON;;;;;N;;;;; 23D5;METRICAL TWO SHORTS OVER LONG;So;0;ON;;;;;N;;;;; 23D6;METRICAL TWO SHORTS JOINED;So;0;ON;;;;;N;;;;; 23D7;METRICAL TRISEME;So;0;ON;;;;;N;;;;; 23D8;METRICAL TETRASEME;So;0;ON;;;;;N;;;;; 23D9;METRICAL PENTASEME;So;0;ON;;;;;N;;;;; 23DA;EARTH GROUND;So;0;ON;;;;;N;;;;; 23DB;FUSE;So;0;ON;;;;;N;;;;; 23DC;TOP PARENTHESIS;Sm;0;ON;;;;;N;;;;; 23DD;BOTTOM PARENTHESIS;Sm;0;ON;;;;;N;;;;; 23DE;TOP CURLY BRACKET;Sm;0;ON;;;;;N;;;;; 23DF;BOTTOM CURLY BRACKET;Sm;0;ON;;;;;N;;;;; 23E0;TOP TORTOISE SHELL BRACKET;Sm;0;ON;;;;;N;;;;; 23E1;BOTTOM TORTOISE SHELL BRACKET;Sm;0;ON;;;;;N;;;;; 23E2;WHITE TRAPEZIUM;So;0;ON;;;;;N;;;;; 23E3;BENZENE RING WITH CIRCLE;So;0;ON;;;;;N;;;;; 23E4;STRAIGHTNESS;So;0;ON;;;;;N;;;;; 23E5;FLATNESS;So;0;ON;;;;;N;;;;; 23E6;AC CURRENT;So;0;ON;;;;;N;;;;; 23E7;ELECTRICAL INTERSECTION;So;0;ON;;;;;N;;;;; 23E8;DECIMAL EXPONENT SYMBOL;So;0;ON;;;;;N;;;;; 23E9;BLACK RIGHT-POINTING DOUBLE TRIANGLE;So;0;ON;;;;;N;;;;; 23EA;BLACK LEFT-POINTING DOUBLE TRIANGLE;So;0;ON;;;;;N;;;;; 23EB;BLACK UP-POINTING DOUBLE TRIANGLE;So;0;ON;;;;;N;;;;; 23EC;BLACK DOWN-POINTING DOUBLE TRIANGLE;So;0;ON;;;;;N;;;;; 23ED;BLACK RIGHT-POINTING DOUBLE TRIANGLE WITH VERTICAL BAR;So;0;ON;;;;;N;;;;; 23EE;BLACK LEFT-POINTING DOUBLE TRIANGLE WITH VERTICAL BAR;So;0;ON;;;;;N;;;;; 23EF;BLACK RIGHT-POINTING TRIANGLE WITH DOUBLE VERTICAL BAR;So;0;ON;;;;;N;;;;; 23F0;ALARM CLOCK;So;0;ON;;;;;N;;;;; 23F1;STOPWATCH;So;0;ON;;;;;N;;;;; 23F2;TIMER CLOCK;So;0;ON;;;;;N;;;;; 23F3;HOURGLASS WITH FLOWING SAND;So;0;ON;;;;;N;;;;; 23F4;BLACK MEDIUM LEFT-POINTING TRIANGLE;So;0;ON;;;;;N;;;;; 23F5;BLACK MEDIUM RIGHT-POINTING TRIANGLE;So;0;ON;;;;;N;;;;; 23F6;BLACK MEDIUM UP-POINTING TRIANGLE;So;0;ON;;;;;N;;;;; 23F7;BLACK MEDIUM DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;;;;; 23F8;DOUBLE VERTICAL BAR;So;0;ON;;;;;N;;;;; 23F9;BLACK SQUARE FOR STOP;So;0;ON;;;;;N;;;;; 23FA;BLACK CIRCLE FOR RECORD;So;0;ON;;;;;N;;;;; 23FB;POWER SYMBOL;So;0;ON;;;;;N;;;;; 23FC;POWER ON-OFF SYMBOL;So;0;ON;;;;;N;;;;; 23FD;POWER ON SYMBOL;So;0;ON;;;;;N;;;;; 23FE;POWER SLEEP SYMBOL;So;0;ON;;;;;N;;;;; 23FF;OBSERVER EYE SYMBOL;So;0;ON;;;;;N;;;;; 2400;SYMBOL FOR NULL;So;0;ON;;;;;N;GRAPHIC FOR NULL;;;; 2401;SYMBOL FOR START OF HEADING;So;0;ON;;;;;N;GRAPHIC FOR START OF HEADING;;;; 2402;SYMBOL FOR START OF TEXT;So;0;ON;;;;;N;GRAPHIC FOR START OF TEXT;;;; 2403;SYMBOL FOR END OF TEXT;So;0;ON;;;;;N;GRAPHIC FOR END OF TEXT;;;; 2404;SYMBOL FOR END OF TRANSMISSION;So;0;ON;;;;;N;GRAPHIC FOR END OF TRANSMISSION;;;; 2405;SYMBOL FOR ENQUIRY;So;0;ON;;;;;N;GRAPHIC FOR ENQUIRY;;;; 2406;SYMBOL FOR ACKNOWLEDGE;So;0;ON;;;;;N;GRAPHIC FOR ACKNOWLEDGE;;;; 2407;SYMBOL FOR BELL;So;0;ON;;;;;N;GRAPHIC FOR BELL;;;; 2408;SYMBOL FOR BACKSPACE;So;0;ON;;;;;N;GRAPHIC FOR BACKSPACE;;;; 2409;SYMBOL FOR HORIZONTAL TABULATION;So;0;ON;;;;;N;GRAPHIC FOR HORIZONTAL TABULATION;;;; 240A;SYMBOL FOR LINE FEED;So;0;ON;;;;;N;GRAPHIC FOR LINE FEED;;;; 240B;SYMBOL FOR VERTICAL TABULATION;So;0;ON;;;;;N;GRAPHIC FOR VERTICAL TABULATION;;;; 240C;SYMBOL FOR FORM FEED;So;0;ON;;;;;N;GRAPHIC FOR FORM FEED;;;; 240D;SYMBOL FOR CARRIAGE RETURN;So;0;ON;;;;;N;GRAPHIC FOR CARRIAGE RETURN;;;; 240E;SYMBOL FOR SHIFT OUT;So;0;ON;;;;;N;GRAPHIC FOR SHIFT OUT;;;; 240F;SYMBOL FOR SHIFT IN;So;0;ON;;;;;N;GRAPHIC FOR SHIFT IN;;;; 2410;SYMBOL FOR DATA LINK ESCAPE;So;0;ON;;;;;N;GRAPHIC FOR DATA LINK ESCAPE;;;; 2411;SYMBOL FOR DEVICE CONTROL ONE;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL ONE;;;; 2412;SYMBOL FOR DEVICE CONTROL TWO;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL TWO;;;; 2413;SYMBOL FOR DEVICE CONTROL THREE;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL THREE;;;; 2414;SYMBOL FOR DEVICE CONTROL FOUR;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL FOUR;;;; 2415;SYMBOL FOR NEGATIVE ACKNOWLEDGE;So;0;ON;;;;;N;GRAPHIC FOR NEGATIVE ACKNOWLEDGE;;;; 2416;SYMBOL FOR SYNCHRONOUS IDLE;So;0;ON;;;;;N;GRAPHIC FOR SYNCHRONOUS IDLE;;;; 2417;SYMBOL FOR END OF TRANSMISSION BLOCK;So;0;ON;;;;;N;GRAPHIC FOR END OF TRANSMISSION BLOCK;;;; 2418;SYMBOL FOR CANCEL;So;0;ON;;;;;N;GRAPHIC FOR CANCEL;;;; 2419;SYMBOL FOR END OF MEDIUM;So;0;ON;;;;;N;GRAPHIC FOR END OF MEDIUM;;;; 241A;SYMBOL FOR SUBSTITUTE;So;0;ON;;;;;N;GRAPHIC FOR SUBSTITUTE;;;; 241B;SYMBOL FOR ESCAPE;So;0;ON;;;;;N;GRAPHIC FOR ESCAPE;;;; 241C;SYMBOL FOR FILE SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR FILE SEPARATOR;;;; 241D;SYMBOL FOR GROUP SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR GROUP SEPARATOR;;;; 241E;SYMBOL FOR RECORD SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR RECORD SEPARATOR;;;; 241F;SYMBOL FOR UNIT SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR UNIT SEPARATOR;;;; 2420;SYMBOL FOR SPACE;So;0;ON;;;;;N;GRAPHIC FOR SPACE;;;; 2421;SYMBOL FOR DELETE;So;0;ON;;;;;N;GRAPHIC FOR DELETE;;;; 2422;BLANK SYMBOL;So;0;ON;;;;;N;BLANK;;;; 2423;OPEN BOX;So;0;ON;;;;;N;;;;; 2424;SYMBOL FOR NEWLINE;So;0;ON;;;;;N;GRAPHIC FOR NEWLINE;;;; 2425;SYMBOL FOR DELETE FORM TWO;So;0;ON;;;;;N;;;;; 2426;SYMBOL FOR SUBSTITUTE FORM TWO;So;0;ON;;;;;N;;;;; 2440;OCR HOOK;So;0;ON;;;;;N;;;;; 2441;OCR CHAIR;So;0;ON;;;;;N;;;;; 2442;OCR FORK;So;0;ON;;;;;N;;;;; 2443;OCR INVERTED FORK;So;0;ON;;;;;N;;;;; 2444;OCR BELT BUCKLE;So;0;ON;;;;;N;;;;; 2445;OCR BOW TIE;So;0;ON;;;;;N;;;;; 2446;OCR BRANCH BANK IDENTIFICATION;So;0;ON;;;;;N;;;;; 2447;OCR AMOUNT OF CHECK;So;0;ON;;;;;N;;;;; 2448;OCR DASH;So;0;ON;;;;;N;;;;; 2449;OCR CUSTOMER ACCOUNT NUMBER;So;0;ON;;;;;N;;;;; 244A;OCR DOUBLE BACKSLASH;So;0;ON;;;;;N;;;;; 2460;CIRCLED DIGIT ONE;No;0;ON; 0031;;1;1;N;;;;; 2461;CIRCLED DIGIT TWO;No;0;ON; 0032;;2;2;N;;;;; 2462;CIRCLED DIGIT THREE;No;0;ON; 0033;;3;3;N;;;;; 2463;CIRCLED DIGIT FOUR;No;0;ON; 0034;;4;4;N;;;;; 2464;CIRCLED DIGIT FIVE;No;0;ON; 0035;;5;5;N;;;;; 2465;CIRCLED DIGIT SIX;No;0;ON; 0036;;6;6;N;;;;; 2466;CIRCLED DIGIT SEVEN;No;0;ON; 0037;;7;7;N;;;;; 2467;CIRCLED DIGIT EIGHT;No;0;ON; 0038;;8;8;N;;;;; 2468;CIRCLED DIGIT NINE;No;0;ON; 0039;;9;9;N;;;;; 2469;CIRCLED NUMBER TEN;No;0;ON; 0031 0030;;;10;N;;;;; 246A;CIRCLED NUMBER ELEVEN;No;0;ON; 0031 0031;;;11;N;;;;; 246B;CIRCLED NUMBER TWELVE;No;0;ON; 0031 0032;;;12;N;;;;; 246C;CIRCLED NUMBER THIRTEEN;No;0;ON; 0031 0033;;;13;N;;;;; 246D;CIRCLED NUMBER FOURTEEN;No;0;ON; 0031 0034;;;14;N;;;;; 246E;CIRCLED NUMBER FIFTEEN;No;0;ON; 0031 0035;;;15;N;;;;; 246F;CIRCLED NUMBER SIXTEEN;No;0;ON; 0031 0036;;;16;N;;;;; 2470;CIRCLED NUMBER SEVENTEEN;No;0;ON; 0031 0037;;;17;N;;;;; 2471;CIRCLED NUMBER EIGHTEEN;No;0;ON; 0031 0038;;;18;N;;;;; 2472;CIRCLED NUMBER NINETEEN;No;0;ON; 0031 0039;;;19;N;;;;; 2473;CIRCLED NUMBER TWENTY;No;0;ON; 0032 0030;;;20;N;;;;; 2474;PARENTHESIZED DIGIT ONE;No;0;ON; 0028 0031 0029;;1;1;N;;;;; 2475;PARENTHESIZED DIGIT TWO;No;0;ON; 0028 0032 0029;;2;2;N;;;;; 2476;PARENTHESIZED DIGIT THREE;No;0;ON; 0028 0033 0029;;3;3;N;;;;; 2477;PARENTHESIZED DIGIT FOUR;No;0;ON; 0028 0034 0029;;4;4;N;;;;; 2478;PARENTHESIZED DIGIT FIVE;No;0;ON; 0028 0035 0029;;5;5;N;;;;; 2479;PARENTHESIZED DIGIT SIX;No;0;ON; 0028 0036 0029;;6;6;N;;;;; 247A;PARENTHESIZED DIGIT SEVEN;No;0;ON; 0028 0037 0029;;7;7;N;;;;; 247B;PARENTHESIZED DIGIT EIGHT;No;0;ON; 0028 0038 0029;;8;8;N;;;;; 247C;PARENTHESIZED DIGIT NINE;No;0;ON; 0028 0039 0029;;9;9;N;;;;; 247D;PARENTHESIZED NUMBER TEN;No;0;ON; 0028 0031 0030 0029;;;10;N;;;;; 247E;PARENTHESIZED NUMBER ELEVEN;No;0;ON; 0028 0031 0031 0029;;;11;N;;;;; 247F;PARENTHESIZED NUMBER TWELVE;No;0;ON; 0028 0031 0032 0029;;;12;N;;;;; 2480;PARENTHESIZED NUMBER THIRTEEN;No;0;ON; 0028 0031 0033 0029;;;13;N;;;;; 2481;PARENTHESIZED NUMBER FOURTEEN;No;0;ON; 0028 0031 0034 0029;;;14;N;;;;; 2482;PARENTHESIZED NUMBER FIFTEEN;No;0;ON; 0028 0031 0035 0029;;;15;N;;;;; 2483;PARENTHESIZED NUMBER SIXTEEN;No;0;ON; 0028 0031 0036 0029;;;16;N;;;;; 2484;PARENTHESIZED NUMBER SEVENTEEN;No;0;ON; 0028 0031 0037 0029;;;17;N;;;;; 2485;PARENTHESIZED NUMBER EIGHTEEN;No;0;ON; 0028 0031 0038 0029;;;18;N;;;;; 2486;PARENTHESIZED NUMBER NINETEEN;No;0;ON; 0028 0031 0039 0029;;;19;N;;;;; 2487;PARENTHESIZED NUMBER TWENTY;No;0;ON; 0028 0032 0030 0029;;;20;N;;;;; 2488;DIGIT ONE FULL STOP;No;0;EN; 0031 002E;;1;1;N;DIGIT ONE PERIOD;;;; 2489;DIGIT TWO FULL STOP;No;0;EN; 0032 002E;;2;2;N;DIGIT TWO PERIOD;;;; 248A;DIGIT THREE FULL STOP;No;0;EN; 0033 002E;;3;3;N;DIGIT THREE PERIOD;;;; 248B;DIGIT FOUR FULL STOP;No;0;EN; 0034 002E;;4;4;N;DIGIT FOUR PERIOD;;;; 248C;DIGIT FIVE FULL STOP;No;0;EN; 0035 002E;;5;5;N;DIGIT FIVE PERIOD;;;; 248D;DIGIT SIX FULL STOP;No;0;EN; 0036 002E;;6;6;N;DIGIT SIX PERIOD;;;; 248E;DIGIT SEVEN FULL STOP;No;0;EN; 0037 002E;;7;7;N;DIGIT SEVEN PERIOD;;;; 248F;DIGIT EIGHT FULL STOP;No;0;EN; 0038 002E;;8;8;N;DIGIT EIGHT PERIOD;;;; 2490;DIGIT NINE FULL STOP;No;0;EN; 0039 002E;;9;9;N;DIGIT NINE PERIOD;;;; 2491;NUMBER TEN FULL STOP;No;0;EN; 0031 0030 002E;;;10;N;NUMBER TEN PERIOD;;;; 2492;NUMBER ELEVEN FULL STOP;No;0;EN; 0031 0031 002E;;;11;N;NUMBER ELEVEN PERIOD;;;; 2493;NUMBER TWELVE FULL STOP;No;0;EN; 0031 0032 002E;;;12;N;NUMBER TWELVE PERIOD;;;; 2494;NUMBER THIRTEEN FULL STOP;No;0;EN; 0031 0033 002E;;;13;N;NUMBER THIRTEEN PERIOD;;;; 2495;NUMBER FOURTEEN FULL STOP;No;0;EN; 0031 0034 002E;;;14;N;NUMBER FOURTEEN PERIOD;;;; 2496;NUMBER FIFTEEN FULL STOP;No;0;EN; 0031 0035 002E;;;15;N;NUMBER FIFTEEN PERIOD;;;; 2497;NUMBER SIXTEEN FULL STOP;No;0;EN; 0031 0036 002E;;;16;N;NUMBER SIXTEEN PERIOD;;;; 2498;NUMBER SEVENTEEN FULL STOP;No;0;EN; 0031 0037 002E;;;17;N;NUMBER SEVENTEEN PERIOD;;;; 2499;NUMBER EIGHTEEN FULL STOP;No;0;EN; 0031 0038 002E;;;18;N;NUMBER EIGHTEEN PERIOD;;;; 249A;NUMBER NINETEEN FULL STOP;No;0;EN; 0031 0039 002E;;;19;N;NUMBER NINETEEN PERIOD;;;; 249B;NUMBER TWENTY FULL STOP;No;0;EN; 0032 0030 002E;;;20;N;NUMBER TWENTY PERIOD;;;; 249C;PARENTHESIZED LATIN SMALL LETTER A;So;0;L; 0028 0061 0029;;;;N;;;;; 249D;PARENTHESIZED LATIN SMALL LETTER B;So;0;L; 0028 0062 0029;;;;N;;;;; 249E;PARENTHESIZED LATIN SMALL LETTER C;So;0;L; 0028 0063 0029;;;;N;;;;; 249F;PARENTHESIZED LATIN SMALL LETTER D;So;0;L; 0028 0064 0029;;;;N;;;;; 24A0;PARENTHESIZED LATIN SMALL LETTER E;So;0;L; 0028 0065 0029;;;;N;;;;; 24A1;PARENTHESIZED LATIN SMALL LETTER F;So;0;L; 0028 0066 0029;;;;N;;;;; 24A2;PARENTHESIZED LATIN SMALL LETTER G;So;0;L; 0028 0067 0029;;;;N;;;;; 24A3;PARENTHESIZED LATIN SMALL LETTER H;So;0;L; 0028 0068 0029;;;;N;;;;; 24A4;PARENTHESIZED LATIN SMALL LETTER I;So;0;L; 0028 0069 0029;;;;N;;;;; 24A5;PARENTHESIZED LATIN SMALL LETTER J;So;0;L; 0028 006A 0029;;;;N;;;;; 24A6;PARENTHESIZED LATIN SMALL LETTER K;So;0;L; 0028 006B 0029;;;;N;;;;; 24A7;PARENTHESIZED LATIN SMALL LETTER L;So;0;L; 0028 006C 0029;;;;N;;;;; 24A8;PARENTHESIZED LATIN SMALL LETTER M;So;0;L; 0028 006D 0029;;;;N;;;;; 24A9;PARENTHESIZED LATIN SMALL LETTER N;So;0;L; 0028 006E 0029;;;;N;;;;; 24AA;PARENTHESIZED LATIN SMALL LETTER O;So;0;L; 0028 006F 0029;;;;N;;;;; 24AB;PARENTHESIZED LATIN SMALL LETTER P;So;0;L; 0028 0070 0029;;;;N;;;;; 24AC;PARENTHESIZED LATIN SMALL LETTER Q;So;0;L; 0028 0071 0029;;;;N;;;;; 24AD;PARENTHESIZED LATIN SMALL LETTER R;So;0;L; 0028 0072 0029;;;;N;;;;; 24AE;PARENTHESIZED LATIN SMALL LETTER S;So;0;L; 0028 0073 0029;;;;N;;;;; 24AF;PARENTHESIZED LATIN SMALL LETTER T;So;0;L; 0028 0074 0029;;;;N;;;;; 24B0;PARENTHESIZED LATIN SMALL LETTER U;So;0;L; 0028 0075 0029;;;;N;;;;; 24B1;PARENTHESIZED LATIN SMALL LETTER V;So;0;L; 0028 0076 0029;;;;N;;;;; 24B2;PARENTHESIZED LATIN SMALL LETTER W;So;0;L; 0028 0077 0029;;;;N;;;;; 24B3;PARENTHESIZED LATIN SMALL LETTER X;So;0;L; 0028 0078 0029;;;;N;;;;; 24B4;PARENTHESIZED LATIN SMALL LETTER Y;So;0;L; 0028 0079 0029;;;;N;;;;; 24B5;PARENTHESIZED LATIN SMALL LETTER Z;So;0;L; 0028 007A 0029;;;;N;;;;; 24B6;CIRCLED LATIN CAPITAL LETTER A;So;0;L; 0041;;;;N;;;;24D0; 24B7;CIRCLED LATIN CAPITAL LETTER B;So;0;L; 0042;;;;N;;;;24D1; 24B8;CIRCLED LATIN CAPITAL LETTER C;So;0;L; 0043;;;;N;;;;24D2; 24B9;CIRCLED LATIN CAPITAL LETTER D;So;0;L; 0044;;;;N;;;;24D3; 24BA;CIRCLED LATIN CAPITAL LETTER E;So;0;L; 0045;;;;N;;;;24D4; 24BB;CIRCLED LATIN CAPITAL LETTER F;So;0;L; 0046;;;;N;;;;24D5; 24BC;CIRCLED LATIN CAPITAL LETTER G;So;0;L; 0047;;;;N;;;;24D6; 24BD;CIRCLED LATIN CAPITAL LETTER H;So;0;L; 0048;;;;N;;;;24D7; 24BE;CIRCLED LATIN CAPITAL LETTER I;So;0;L; 0049;;;;N;;;;24D8; 24BF;CIRCLED LATIN CAPITAL LETTER J;So;0;L; 004A;;;;N;;;;24D9; 24C0;CIRCLED LATIN CAPITAL LETTER K;So;0;L; 004B;;;;N;;;;24DA; 24C1;CIRCLED LATIN CAPITAL LETTER L;So;0;L; 004C;;;;N;;;;24DB; 24C2;CIRCLED LATIN CAPITAL LETTER M;So;0;L; 004D;;;;N;;;;24DC; 24C3;CIRCLED LATIN CAPITAL LETTER N;So;0;L; 004E;;;;N;;;;24DD; 24C4;CIRCLED LATIN CAPITAL LETTER O;So;0;L; 004F;;;;N;;;;24DE; 24C5;CIRCLED LATIN CAPITAL LETTER P;So;0;L; 0050;;;;N;;;;24DF; 24C6;CIRCLED LATIN CAPITAL LETTER Q;So;0;L; 0051;;;;N;;;;24E0; 24C7;CIRCLED LATIN CAPITAL LETTER R;So;0;L; 0052;;;;N;;;;24E1; 24C8;CIRCLED LATIN CAPITAL LETTER S;So;0;L; 0053;;;;N;;;;24E2; 24C9;CIRCLED LATIN CAPITAL LETTER T;So;0;L; 0054;;;;N;;;;24E3; 24CA;CIRCLED LATIN CAPITAL LETTER U;So;0;L; 0055;;;;N;;;;24E4; 24CB;CIRCLED LATIN CAPITAL LETTER V;So;0;L; 0056;;;;N;;;;24E5; 24CC;CIRCLED LATIN CAPITAL LETTER W;So;0;L; 0057;;;;N;;;;24E6; 24CD;CIRCLED LATIN CAPITAL LETTER X;So;0;L; 0058;;;;N;;;;24E7; 24CE;CIRCLED LATIN CAPITAL LETTER Y;So;0;L; 0059;;;;N;;;;24E8; 24CF;CIRCLED LATIN CAPITAL LETTER Z;So;0;L; 005A;;;;N;;;;24E9; 24D0;CIRCLED LATIN SMALL LETTER A;So;0;L; 0061;;;;N;;;24B6;;24B6 24D1;CIRCLED LATIN SMALL LETTER B;So;0;L; 0062;;;;N;;;24B7;;24B7 24D2;CIRCLED LATIN SMALL LETTER C;So;0;L; 0063;;;;N;;;24B8;;24B8 24D3;CIRCLED LATIN SMALL LETTER D;So;0;L; 0064;;;;N;;;24B9;;24B9 24D4;CIRCLED LATIN SMALL LETTER E;So;0;L; 0065;;;;N;;;24BA;;24BA 24D5;CIRCLED LATIN SMALL LETTER F;So;0;L; 0066;;;;N;;;24BB;;24BB 24D6;CIRCLED LATIN SMALL LETTER G;So;0;L; 0067;;;;N;;;24BC;;24BC 24D7;CIRCLED LATIN SMALL LETTER H;So;0;L; 0068;;;;N;;;24BD;;24BD 24D8;CIRCLED LATIN SMALL LETTER I;So;0;L; 0069;;;;N;;;24BE;;24BE 24D9;CIRCLED LATIN SMALL LETTER J;So;0;L; 006A;;;;N;;;24BF;;24BF 24DA;CIRCLED LATIN SMALL LETTER K;So;0;L; 006B;;;;N;;;24C0;;24C0 24DB;CIRCLED LATIN SMALL LETTER L;So;0;L; 006C;;;;N;;;24C1;;24C1 24DC;CIRCLED LATIN SMALL LETTER M;So;0;L; 006D;;;;N;;;24C2;;24C2 24DD;CIRCLED LATIN SMALL LETTER N;So;0;L; 006E;;;;N;;;24C3;;24C3 24DE;CIRCLED LATIN SMALL LETTER O;So;0;L; 006F;;;;N;;;24C4;;24C4 24DF;CIRCLED LATIN SMALL LETTER P;So;0;L; 0070;;;;N;;;24C5;;24C5 24E0;CIRCLED LATIN SMALL LETTER Q;So;0;L; 0071;;;;N;;;24C6;;24C6 24E1;CIRCLED LATIN SMALL LETTER R;So;0;L; 0072;;;;N;;;24C7;;24C7 24E2;CIRCLED LATIN SMALL LETTER S;So;0;L; 0073;;;;N;;;24C8;;24C8 24E3;CIRCLED LATIN SMALL LETTER T;So;0;L; 0074;;;;N;;;24C9;;24C9 24E4;CIRCLED LATIN SMALL LETTER U;So;0;L; 0075;;;;N;;;24CA;;24CA 24E5;CIRCLED LATIN SMALL LETTER V;So;0;L; 0076;;;;N;;;24CB;;24CB 24E6;CIRCLED LATIN SMALL LETTER W;So;0;L; 0077;;;;N;;;24CC;;24CC 24E7;CIRCLED LATIN SMALL LETTER X;So;0;L; 0078;;;;N;;;24CD;;24CD 24E8;CIRCLED LATIN SMALL LETTER Y;So;0;L; 0079;;;;N;;;24CE;;24CE 24E9;CIRCLED LATIN SMALL LETTER Z;So;0;L; 007A;;;;N;;;24CF;;24CF 24EA;CIRCLED DIGIT ZERO;No;0;ON; 0030;;0;0;N;;;;; 24EB;NEGATIVE CIRCLED NUMBER ELEVEN;No;0;ON;;;;11;N;;;;; 24EC;NEGATIVE CIRCLED NUMBER TWELVE;No;0;ON;;;;12;N;;;;; 24ED;NEGATIVE CIRCLED NUMBER THIRTEEN;No;0;ON;;;;13;N;;;;; 24EE;NEGATIVE CIRCLED NUMBER FOURTEEN;No;0;ON;;;;14;N;;;;; 24EF;NEGATIVE CIRCLED NUMBER FIFTEEN;No;0;ON;;;;15;N;;;;; 24F0;NEGATIVE CIRCLED NUMBER SIXTEEN;No;0;ON;;;;16;N;;;;; 24F1;NEGATIVE CIRCLED NUMBER SEVENTEEN;No;0;ON;;;;17;N;;;;; 24F2;NEGATIVE CIRCLED NUMBER EIGHTEEN;No;0;ON;;;;18;N;;;;; 24F3;NEGATIVE CIRCLED NUMBER NINETEEN;No;0;ON;;;;19;N;;;;; 24F4;NEGATIVE CIRCLED NUMBER TWENTY;No;0;ON;;;;20;N;;;;; 24F5;DOUBLE CIRCLED DIGIT ONE;No;0;ON;;;1;1;N;;;;; 24F6;DOUBLE CIRCLED DIGIT TWO;No;0;ON;;;2;2;N;;;;; 24F7;DOUBLE CIRCLED DIGIT THREE;No;0;ON;;;3;3;N;;;;; 24F8;DOUBLE CIRCLED DIGIT FOUR;No;0;ON;;;4;4;N;;;;; 24F9;DOUBLE CIRCLED DIGIT FIVE;No;0;ON;;;5;5;N;;;;; 24FA;DOUBLE CIRCLED DIGIT SIX;No;0;ON;;;6;6;N;;;;; 24FB;DOUBLE CIRCLED DIGIT SEVEN;No;0;ON;;;7;7;N;;;;; 24FC;DOUBLE CIRCLED DIGIT EIGHT;No;0;ON;;;8;8;N;;;;; 24FD;DOUBLE CIRCLED DIGIT NINE;No;0;ON;;;9;9;N;;;;; 24FE;DOUBLE CIRCLED NUMBER TEN;No;0;ON;;;;10;N;;;;; 24FF;NEGATIVE CIRCLED DIGIT ZERO;No;0;ON;;;0;0;N;;;;; 2500;BOX DRAWINGS LIGHT HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT HORIZONTAL;;;; 2501;BOX DRAWINGS HEAVY HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY HORIZONTAL;;;; 2502;BOX DRAWINGS LIGHT VERTICAL;So;0;ON;;;;;N;FORMS LIGHT VERTICAL;;;; 2503;BOX DRAWINGS HEAVY VERTICAL;So;0;ON;;;;;N;FORMS HEAVY VERTICAL;;;; 2504;BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT TRIPLE DASH HORIZONTAL;;;; 2505;BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY TRIPLE DASH HORIZONTAL;;;; 2506;BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT TRIPLE DASH VERTICAL;;;; 2507;BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY TRIPLE DASH VERTICAL;;;; 2508;BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT QUADRUPLE DASH HORIZONTAL;;;; 2509;BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY QUADRUPLE DASH HORIZONTAL;;;; 250A;BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT QUADRUPLE DASH VERTICAL;;;; 250B;BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY QUADRUPLE DASH VERTICAL;;;; 250C;BOX DRAWINGS LIGHT DOWN AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT DOWN AND RIGHT;;;; 250D;BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND RIGHT HEAVY;;;; 250E;BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND RIGHT LIGHT;;;; 250F;BOX DRAWINGS HEAVY DOWN AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY DOWN AND RIGHT;;;; 2510;BOX DRAWINGS LIGHT DOWN AND LEFT;So;0;ON;;;;;N;FORMS LIGHT DOWN AND LEFT;;;; 2511;BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND LEFT HEAVY;;;; 2512;BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND LEFT LIGHT;;;; 2513;BOX DRAWINGS HEAVY DOWN AND LEFT;So;0;ON;;;;;N;FORMS HEAVY DOWN AND LEFT;;;; 2514;BOX DRAWINGS LIGHT UP AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT UP AND RIGHT;;;; 2515;BOX DRAWINGS UP LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND RIGHT HEAVY;;;; 2516;BOX DRAWINGS UP HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND RIGHT LIGHT;;;; 2517;BOX DRAWINGS HEAVY UP AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY UP AND RIGHT;;;; 2518;BOX DRAWINGS LIGHT UP AND LEFT;So;0;ON;;;;;N;FORMS LIGHT UP AND LEFT;;;; 2519;BOX DRAWINGS UP LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND LEFT HEAVY;;;; 251A;BOX DRAWINGS UP HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND LEFT LIGHT;;;; 251B;BOX DRAWINGS HEAVY UP AND LEFT;So;0;ON;;;;;N;FORMS HEAVY UP AND LEFT;;;; 251C;BOX DRAWINGS LIGHT VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND RIGHT;;;; 251D;BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND RIGHT HEAVY;;;; 251E;BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND RIGHT DOWN LIGHT;;;; 251F;BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND RIGHT UP LIGHT;;;; 2520;BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND RIGHT LIGHT;;;; 2521;BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND RIGHT UP HEAVY;;;; 2522;BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND RIGHT DOWN HEAVY;;;; 2523;BOX DRAWINGS HEAVY VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND RIGHT;;;; 2524;BOX DRAWINGS LIGHT VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND LEFT;;;; 2525;BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND LEFT HEAVY;;;; 2526;BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND LEFT DOWN LIGHT;;;; 2527;BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND LEFT UP LIGHT;;;; 2528;BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND LEFT LIGHT;;;; 2529;BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND LEFT UP HEAVY;;;; 252A;BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND LEFT DOWN HEAVY;;;; 252B;BOX DRAWINGS HEAVY VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND LEFT;;;; 252C;BOX DRAWINGS LIGHT DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT DOWN AND HORIZONTAL;;;; 252D;BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT DOWN LIGHT;;;; 252E;BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT DOWN LIGHT;;;; 252F;BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND HORIZONTAL HEAVY;;;; 2530;BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND HORIZONTAL LIGHT;;;; 2531;BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT DOWN HEAVY;;;; 2532;BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT DOWN HEAVY;;;; 2533;BOX DRAWINGS HEAVY DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY DOWN AND HORIZONTAL;;;; 2534;BOX DRAWINGS LIGHT UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT UP AND HORIZONTAL;;;; 2535;BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT UP LIGHT;;;; 2536;BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT UP LIGHT;;;; 2537;BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND HORIZONTAL HEAVY;;;; 2538;BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND HORIZONTAL LIGHT;;;; 2539;BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT UP HEAVY;;;; 253A;BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT UP HEAVY;;;; 253B;BOX DRAWINGS HEAVY UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY UP AND HORIZONTAL;;;; 253C;BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND HORIZONTAL;;;; 253D;BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT VERTICAL LIGHT;;;; 253E;BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT VERTICAL LIGHT;;;; 253F;BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND HORIZONTAL HEAVY;;;; 2540;BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND DOWN HORIZONTAL LIGHT;;;; 2541;BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND UP HORIZONTAL LIGHT;;;; 2542;BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND HORIZONTAL LIGHT;;;; 2543;BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS LEFT UP HEAVY AND RIGHT DOWN LIGHT;;;; 2544;BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS RIGHT UP HEAVY AND LEFT DOWN LIGHT;;;; 2545;BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS LEFT DOWN HEAVY AND RIGHT UP LIGHT;;;; 2546;BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS RIGHT DOWN HEAVY AND LEFT UP LIGHT;;;; 2547;BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND UP HORIZONTAL HEAVY;;;; 2548;BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND DOWN HORIZONTAL HEAVY;;;; 2549;BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT VERTICAL HEAVY;;;; 254A;BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT VERTICAL HEAVY;;;; 254B;BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND HORIZONTAL;;;; 254C;BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT DOUBLE DASH HORIZONTAL;;;; 254D;BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY DOUBLE DASH HORIZONTAL;;;; 254E;BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT DOUBLE DASH VERTICAL;;;; 254F;BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY DOUBLE DASH VERTICAL;;;; 2550;BOX DRAWINGS DOUBLE HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE HORIZONTAL;;;; 2551;BOX DRAWINGS DOUBLE VERTICAL;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL;;;; 2552;BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND RIGHT DOUBLE;;;; 2553;BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND RIGHT SINGLE;;;; 2554;BOX DRAWINGS DOUBLE DOWN AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND RIGHT;;;; 2555;BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND LEFT DOUBLE;;;; 2556;BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND LEFT SINGLE;;;; 2557;BOX DRAWINGS DOUBLE DOWN AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND LEFT;;;; 2558;BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND RIGHT DOUBLE;;;; 2559;BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND RIGHT SINGLE;;;; 255A;BOX DRAWINGS DOUBLE UP AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE UP AND RIGHT;;;; 255B;BOX DRAWINGS UP SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND LEFT DOUBLE;;;; 255C;BOX DRAWINGS UP DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND LEFT SINGLE;;;; 255D;BOX DRAWINGS DOUBLE UP AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE UP AND LEFT;;;; 255E;BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND RIGHT DOUBLE;;;; 255F;BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND RIGHT SINGLE;;;; 2560;BOX DRAWINGS DOUBLE VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND RIGHT;;;; 2561;BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND LEFT DOUBLE;;;; 2562;BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND LEFT SINGLE;;;; 2563;BOX DRAWINGS DOUBLE VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND LEFT;;;; 2564;BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND HORIZONTAL DOUBLE;;;; 2565;BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND HORIZONTAL SINGLE;;;; 2566;BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND HORIZONTAL;;;; 2567;BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND HORIZONTAL DOUBLE;;;; 2568;BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND HORIZONTAL SINGLE;;;; 2569;BOX DRAWINGS DOUBLE UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE UP AND HORIZONTAL;;;; 256A;BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND HORIZONTAL DOUBLE;;;; 256B;BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND HORIZONTAL SINGLE;;;; 256C;BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND HORIZONTAL;;;; 256D;BOX DRAWINGS LIGHT ARC DOWN AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT ARC DOWN AND RIGHT;;;; 256E;BOX DRAWINGS LIGHT ARC DOWN AND LEFT;So;0;ON;;;;;N;FORMS LIGHT ARC DOWN AND LEFT;;;; 256F;BOX DRAWINGS LIGHT ARC UP AND LEFT;So;0;ON;;;;;N;FORMS LIGHT ARC UP AND LEFT;;;; 2570;BOX DRAWINGS LIGHT ARC UP AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT ARC UP AND RIGHT;;;; 2571;BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT;;;; 2572;BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT;;;; 2573;BOX DRAWINGS LIGHT DIAGONAL CROSS;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL CROSS;;;; 2574;BOX DRAWINGS LIGHT LEFT;So;0;ON;;;;;N;FORMS LIGHT LEFT;;;; 2575;BOX DRAWINGS LIGHT UP;So;0;ON;;;;;N;FORMS LIGHT UP;;;; 2576;BOX DRAWINGS LIGHT RIGHT;So;0;ON;;;;;N;FORMS LIGHT RIGHT;;;; 2577;BOX DRAWINGS LIGHT DOWN;So;0;ON;;;;;N;FORMS LIGHT DOWN;;;; 2578;BOX DRAWINGS HEAVY LEFT;So;0;ON;;;;;N;FORMS HEAVY LEFT;;;; 2579;BOX DRAWINGS HEAVY UP;So;0;ON;;;;;N;FORMS HEAVY UP;;;; 257A;BOX DRAWINGS HEAVY RIGHT;So;0;ON;;;;;N;FORMS HEAVY RIGHT;;;; 257B;BOX DRAWINGS HEAVY DOWN;So;0;ON;;;;;N;FORMS HEAVY DOWN;;;; 257C;BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT;So;0;ON;;;;;N;FORMS LIGHT LEFT AND HEAVY RIGHT;;;; 257D;BOX DRAWINGS LIGHT UP AND HEAVY DOWN;So;0;ON;;;;;N;FORMS LIGHT UP AND HEAVY DOWN;;;; 257E;BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT;So;0;ON;;;;;N;FORMS HEAVY LEFT AND LIGHT RIGHT;;;; 257F;BOX DRAWINGS HEAVY UP AND LIGHT DOWN;So;0;ON;;;;;N;FORMS HEAVY UP AND LIGHT DOWN;;;; 2580;UPPER HALF BLOCK;So;0;ON;;;;;N;;;;; 2581;LOWER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;; 2582;LOWER ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; 2583;LOWER THREE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;; 2584;LOWER HALF BLOCK;So;0;ON;;;;;N;;;;; 2585;LOWER FIVE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;; 2586;LOWER THREE QUARTERS BLOCK;So;0;ON;;;;;N;LOWER THREE QUARTER BLOCK;;;; 2587;LOWER SEVEN EIGHTHS BLOCK;So;0;ON;;;;;N;;;;; 2588;FULL BLOCK;So;0;ON;;;;;N;;;;; 2589;LEFT SEVEN EIGHTHS BLOCK;So;0;ON;;;;;N;;;;; 258A;LEFT THREE QUARTERS BLOCK;So;0;ON;;;;;N;LEFT THREE QUARTER BLOCK;;;; 258B;LEFT FIVE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;; 258C;LEFT HALF BLOCK;So;0;ON;;;;;N;;;;; 258D;LEFT THREE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;; 258E;LEFT ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; 258F;LEFT ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;; 2590;RIGHT HALF BLOCK;So;0;ON;;;;;N;;;;; 2591;LIGHT SHADE;So;0;ON;;;;;N;;;;; 2592;MEDIUM SHADE;So;0;ON;;;;;N;;;;; 2593;DARK SHADE;So;0;ON;;;;;N;;;;; 2594;UPPER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;; 2595;RIGHT ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;; 2596;QUADRANT LOWER LEFT;So;0;ON;;;;;N;;;;; 2597;QUADRANT LOWER RIGHT;So;0;ON;;;;;N;;;;; 2598;QUADRANT UPPER LEFT;So;0;ON;;;;;N;;;;; 2599;QUADRANT UPPER LEFT AND LOWER LEFT AND LOWER RIGHT;So;0;ON;;;;;N;;;;; 259A;QUADRANT UPPER LEFT AND LOWER RIGHT;So;0;ON;;;;;N;;;;; 259B;QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER LEFT;So;0;ON;;;;;N;;;;; 259C;QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER RIGHT;So;0;ON;;;;;N;;;;; 259D;QUADRANT UPPER RIGHT;So;0;ON;;;;;N;;;;; 259E;QUADRANT UPPER RIGHT AND LOWER LEFT;So;0;ON;;;;;N;;;;; 259F;QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT;So;0;ON;;;;;N;;;;; 25A0;BLACK SQUARE;So;0;ON;;;;;N;;;;; 25A1;WHITE SQUARE;So;0;ON;;;;;N;;;;; 25A2;WHITE SQUARE WITH ROUNDED CORNERS;So;0;ON;;;;;N;;;;; 25A3;WHITE SQUARE CONTAINING BLACK SMALL SQUARE;So;0;ON;;;;;N;;;;; 25A4;SQUARE WITH HORIZONTAL FILL;So;0;ON;;;;;N;;;;; 25A5;SQUARE WITH VERTICAL FILL;So;0;ON;;;;;N;;;;; 25A6;SQUARE WITH ORTHOGONAL CROSSHATCH FILL;So;0;ON;;;;;N;;;;; 25A7;SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL;So;0;ON;;;;;N;;;;; 25A8;SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL;So;0;ON;;;;;N;;;;; 25A9;SQUARE WITH DIAGONAL CROSSHATCH FILL;So;0;ON;;;;;N;;;;; 25AA;BLACK SMALL SQUARE;So;0;ON;;;;;N;;;;; 25AB;WHITE SMALL SQUARE;So;0;ON;;;;;N;;;;; 25AC;BLACK RECTANGLE;So;0;ON;;;;;N;;;;; 25AD;WHITE RECTANGLE;So;0;ON;;;;;N;;;;; 25AE;BLACK VERTICAL RECTANGLE;So;0;ON;;;;;N;;;;; 25AF;WHITE VERTICAL RECTANGLE;So;0;ON;;;;;N;;;;; 25B0;BLACK PARALLELOGRAM;So;0;ON;;;;;N;;;;; 25B1;WHITE PARALLELOGRAM;So;0;ON;;;;;N;;;;; 25B2;BLACK UP-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK UP POINTING TRIANGLE;;;; 25B3;WHITE UP-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE UP POINTING TRIANGLE;;;; 25B4;BLACK UP-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK UP POINTING SMALL TRIANGLE;;;; 25B5;WHITE UP-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE UP POINTING SMALL TRIANGLE;;;; 25B6;BLACK RIGHT-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK RIGHT POINTING TRIANGLE;;;; 25B7;WHITE RIGHT-POINTING TRIANGLE;Sm;0;ON;;;;;N;WHITE RIGHT POINTING TRIANGLE;;;; 25B8;BLACK RIGHT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK RIGHT POINTING SMALL TRIANGLE;;;; 25B9;WHITE RIGHT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE RIGHT POINTING SMALL TRIANGLE;;;; 25BA;BLACK RIGHT-POINTING POINTER;So;0;ON;;;;;N;BLACK RIGHT POINTING POINTER;;;; 25BB;WHITE RIGHT-POINTING POINTER;So;0;ON;;;;;N;WHITE RIGHT POINTING POINTER;;;; 25BC;BLACK DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK DOWN POINTING TRIANGLE;;;; 25BD;WHITE DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE DOWN POINTING TRIANGLE;;;; 25BE;BLACK DOWN-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK DOWN POINTING SMALL TRIANGLE;;;; 25BF;WHITE DOWN-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE DOWN POINTING SMALL TRIANGLE;;;; 25C0;BLACK LEFT-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK LEFT POINTING TRIANGLE;;;; 25C1;WHITE LEFT-POINTING TRIANGLE;Sm;0;ON;;;;;N;WHITE LEFT POINTING TRIANGLE;;;; 25C2;BLACK LEFT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK LEFT POINTING SMALL TRIANGLE;;;; 25C3;WHITE LEFT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE LEFT POINTING SMALL TRIANGLE;;;; 25C4;BLACK LEFT-POINTING POINTER;So;0;ON;;;;;N;BLACK LEFT POINTING POINTER;;;; 25C5;WHITE LEFT-POINTING POINTER;So;0;ON;;;;;N;WHITE LEFT POINTING POINTER;;;; 25C6;BLACK DIAMOND;So;0;ON;;;;;N;;;;; 25C7;WHITE DIAMOND;So;0;ON;;;;;N;;;;; 25C8;WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND;So;0;ON;;;;;N;;;;; 25C9;FISHEYE;So;0;ON;;;;;N;;;;; 25CA;LOZENGE;So;0;ON;;;;;N;;;;; 25CB;WHITE CIRCLE;So;0;ON;;;;;N;;;;; 25CC;DOTTED CIRCLE;So;0;ON;;;;;N;;;;; 25CD;CIRCLE WITH VERTICAL FILL;So;0;ON;;;;;N;;;;; 25CE;BULLSEYE;So;0;ON;;;;;N;;;;; 25CF;BLACK CIRCLE;So;0;ON;;;;;N;;;;; 25D0;CIRCLE WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;; 25D1;CIRCLE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;; 25D2;CIRCLE WITH LOWER HALF BLACK;So;0;ON;;;;;N;;;;; 25D3;CIRCLE WITH UPPER HALF BLACK;So;0;ON;;;;;N;;;;; 25D4;CIRCLE WITH UPPER RIGHT QUADRANT BLACK;So;0;ON;;;;;N;;;;; 25D5;CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK;So;0;ON;;;;;N;;;;; 25D6;LEFT HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;; 25D7;RIGHT HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;; 25D8;INVERSE BULLET;So;0;ON;;;;;N;;;;; 25D9;INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;; 25DA;UPPER HALF INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;; 25DB;LOWER HALF INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;; 25DC;UPPER LEFT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;; 25DD;UPPER RIGHT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;; 25DE;LOWER RIGHT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;; 25DF;LOWER LEFT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;; 25E0;UPPER HALF CIRCLE;So;0;ON;;;;;N;;;;; 25E1;LOWER HALF CIRCLE;So;0;ON;;;;;N;;;;; 25E2;BLACK LOWER RIGHT TRIANGLE;So;0;ON;;;;;N;;;;; 25E3;BLACK LOWER LEFT TRIANGLE;So;0;ON;;;;;N;;;;; 25E4;BLACK UPPER LEFT TRIANGLE;So;0;ON;;;;;N;;;;; 25E5;BLACK UPPER RIGHT TRIANGLE;So;0;ON;;;;;N;;;;; 25E6;WHITE BULLET;So;0;ON;;;;;N;;;;; 25E7;SQUARE WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;; 25E8;SQUARE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;; 25E9;SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;; 25EA;SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;; 25EB;WHITE SQUARE WITH VERTICAL BISECTING LINE;So;0;ON;;;;;N;;;;; 25EC;WHITE UP-POINTING TRIANGLE WITH DOT;So;0;ON;;;;;N;WHITE UP POINTING TRIANGLE WITH DOT;;;; 25ED;UP-POINTING TRIANGLE WITH LEFT HALF BLACK;So;0;ON;;;;;N;UP POINTING TRIANGLE WITH LEFT HALF BLACK;;;; 25EE;UP-POINTING TRIANGLE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;UP POINTING TRIANGLE WITH RIGHT HALF BLACK;;;; 25EF;LARGE CIRCLE;So;0;ON;;;;;N;;;;; 25F0;WHITE SQUARE WITH UPPER LEFT QUADRANT;So;0;ON;;;;;N;;;;; 25F1;WHITE SQUARE WITH LOWER LEFT QUADRANT;So;0;ON;;;;;N;;;;; 25F2;WHITE SQUARE WITH LOWER RIGHT QUADRANT;So;0;ON;;;;;N;;;;; 25F3;WHITE SQUARE WITH UPPER RIGHT QUADRANT;So;0;ON;;;;;N;;;;; 25F4;WHITE CIRCLE WITH UPPER LEFT QUADRANT;So;0;ON;;;;;N;;;;; 25F5;WHITE CIRCLE WITH LOWER LEFT QUADRANT;So;0;ON;;;;;N;;;;; 25F6;WHITE CIRCLE WITH LOWER RIGHT QUADRANT;So;0;ON;;;;;N;;;;; 25F7;WHITE CIRCLE WITH UPPER RIGHT QUADRANT;So;0;ON;;;;;N;;;;; 25F8;UPPER LEFT TRIANGLE;Sm;0;ON;;;;;N;;;;; 25F9;UPPER RIGHT TRIANGLE;Sm;0;ON;;;;;N;;;;; 25FA;LOWER LEFT TRIANGLE;Sm;0;ON;;;;;N;;;;; 25FB;WHITE MEDIUM SQUARE;Sm;0;ON;;;;;N;;;;; 25FC;BLACK MEDIUM SQUARE;Sm;0;ON;;;;;N;;;;; 25FD;WHITE MEDIUM SMALL SQUARE;Sm;0;ON;;;;;N;;;;; 25FE;BLACK MEDIUM SMALL SQUARE;Sm;0;ON;;;;;N;;;;; 25FF;LOWER RIGHT TRIANGLE;Sm;0;ON;;;;;N;;;;; 2600;BLACK SUN WITH RAYS;So;0;ON;;;;;N;;;;; 2601;CLOUD;So;0;ON;;;;;N;;;;; 2602;UMBRELLA;So;0;ON;;;;;N;;;;; 2603;SNOWMAN;So;0;ON;;;;;N;;;;; 2604;COMET;So;0;ON;;;;;N;;;;; 2605;BLACK STAR;So;0;ON;;;;;N;;;;; 2606;WHITE STAR;So;0;ON;;;;;N;;;;; 2607;LIGHTNING;So;0;ON;;;;;N;;;;; 2608;THUNDERSTORM;So;0;ON;;;;;N;;;;; 2609;SUN;So;0;ON;;;;;N;;;;; 260A;ASCENDING NODE;So;0;ON;;;;;N;;;;; 260B;DESCENDING NODE;So;0;ON;;;;;N;;;;; 260C;CONJUNCTION;So;0;ON;;;;;N;;;;; 260D;OPPOSITION;So;0;ON;;;;;N;;;;; 260E;BLACK TELEPHONE;So;0;ON;;;;;N;;;;; 260F;WHITE TELEPHONE;So;0;ON;;;;;N;;;;; 2610;BALLOT BOX;So;0;ON;;;;;N;;;;; 2611;BALLOT BOX WITH CHECK;So;0;ON;;;;;N;;;;; 2612;BALLOT BOX WITH X;So;0;ON;;;;;N;;;;; 2613;SALTIRE;So;0;ON;;;;;N;;;;; 2614;UMBRELLA WITH RAIN DROPS;So;0;ON;;;;;N;;;;; 2615;HOT BEVERAGE;So;0;ON;;;;;N;;;;; 2616;WHITE SHOGI PIECE;So;0;ON;;;;;N;;;;; 2617;BLACK SHOGI PIECE;So;0;ON;;;;;N;;;;; 2618;SHAMROCK;So;0;ON;;;;;N;;;;; 2619;REVERSED ROTATED FLORAL HEART BULLET;So;0;ON;;;;;N;;;;; 261A;BLACK LEFT POINTING INDEX;So;0;ON;;;;;N;;;;; 261B;BLACK RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;; 261C;WHITE LEFT POINTING INDEX;So;0;ON;;;;;N;;;;; 261D;WHITE UP POINTING INDEX;So;0;ON;;;;;N;;;;; 261E;WHITE RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;; 261F;WHITE DOWN POINTING INDEX;So;0;ON;;;;;N;;;;; 2620;SKULL AND CROSSBONES;So;0;ON;;;;;N;;;;; 2621;CAUTION SIGN;So;0;ON;;;;;N;;;;; 2622;RADIOACTIVE SIGN;So;0;ON;;;;;N;;;;; 2623;BIOHAZARD SIGN;So;0;ON;;;;;N;;;;; 2624;CADUCEUS;So;0;ON;;;;;N;;;;; 2625;ANKH;So;0;ON;;;;;N;;;;; 2626;ORTHODOX CROSS;So;0;ON;;;;;N;;;;; 2627;CHI RHO;So;0;ON;;;;;N;;;;; 2628;CROSS OF LORRAINE;So;0;ON;;;;;N;;;;; 2629;CROSS OF JERUSALEM;So;0;ON;;;;;N;;;;; 262A;STAR AND CRESCENT;So;0;ON;;;;;N;;;;; 262B;FARSI SYMBOL;So;0;ON;;;;;N;SYMBOL OF IRAN;;;; 262C;ADI SHAKTI;So;0;ON;;;;;N;;;;; 262D;HAMMER AND SICKLE;So;0;ON;;;;;N;;;;; 262E;PEACE SYMBOL;So;0;ON;;;;;N;;;;; 262F;YIN YANG;So;0;ON;;;;;N;;;;; 2630;TRIGRAM FOR HEAVEN;So;0;ON;;;;;N;;;;; 2631;TRIGRAM FOR LAKE;So;0;ON;;;;;N;;;;; 2632;TRIGRAM FOR FIRE;So;0;ON;;;;;N;;;;; 2633;TRIGRAM FOR THUNDER;So;0;ON;;;;;N;;;;; 2634;TRIGRAM FOR WIND;So;0;ON;;;;;N;;;;; 2635;TRIGRAM FOR WATER;So;0;ON;;;;;N;;;;; 2636;TRIGRAM FOR MOUNTAIN;So;0;ON;;;;;N;;;;; 2637;TRIGRAM FOR EARTH;So;0;ON;;;;;N;;;;; 2638;WHEEL OF DHARMA;So;0;ON;;;;;N;;;;; 2639;WHITE FROWNING FACE;So;0;ON;;;;;N;;;;; 263A;WHITE SMILING FACE;So;0;ON;;;;;N;;;;; 263B;BLACK SMILING FACE;So;0;ON;;;;;N;;;;; 263C;WHITE SUN WITH RAYS;So;0;ON;;;;;N;;;;; 263D;FIRST QUARTER MOON;So;0;ON;;;;;N;;;;; 263E;LAST QUARTER MOON;So;0;ON;;;;;N;;;;; 263F;MERCURY;So;0;ON;;;;;N;;;;; 2640;FEMALE SIGN;So;0;ON;;;;;N;;;;; 2641;EARTH;So;0;ON;;;;;N;;;;; 2642;MALE SIGN;So;0;ON;;;;;N;;;;; 2643;JUPITER;So;0;ON;;;;;N;;;;; 2644;SATURN;So;0;ON;;;;;N;;;;; 2645;URANUS;So;0;ON;;;;;N;;;;; 2646;NEPTUNE;So;0;ON;;;;;N;;;;; 2647;PLUTO;So;0;ON;;;;;N;;;;; 2648;ARIES;So;0;ON;;;;;N;;;;; 2649;TAURUS;So;0;ON;;;;;N;;;;; 264A;GEMINI;So;0;ON;;;;;N;;;;; 264B;CANCER;So;0;ON;;;;;N;;;;; 264C;LEO;So;0;ON;;;;;N;;;;; 264D;VIRGO;So;0;ON;;;;;N;;;;; 264E;LIBRA;So;0;ON;;;;;N;;;;; 264F;SCORPIUS;So;0;ON;;;;;N;;;;; 2650;SAGITTARIUS;So;0;ON;;;;;N;;;;; 2651;CAPRICORN;So;0;ON;;;;;N;;;;; 2652;AQUARIUS;So;0;ON;;;;;N;;;;; 2653;PISCES;So;0;ON;;;;;N;;;;; 2654;WHITE CHESS KING;So;0;ON;;;;;N;;;;; 2655;WHITE CHESS QUEEN;So;0;ON;;;;;N;;;;; 2656;WHITE CHESS ROOK;So;0;ON;;;;;N;;;;; 2657;WHITE CHESS BISHOP;So;0;ON;;;;;N;;;;; 2658;WHITE CHESS KNIGHT;So;0;ON;;;;;N;;;;; 2659;WHITE CHESS PAWN;So;0;ON;;;;;N;;;;; 265A;BLACK CHESS KING;So;0;ON;;;;;N;;;;; 265B;BLACK CHESS QUEEN;So;0;ON;;;;;N;;;;; 265C;BLACK CHESS ROOK;So;0;ON;;;;;N;;;;; 265D;BLACK CHESS BISHOP;So;0;ON;;;;;N;;;;; 265E;BLACK CHESS KNIGHT;So;0;ON;;;;;N;;;;; 265F;BLACK CHESS PAWN;So;0;ON;;;;;N;;;;; 2660;BLACK SPADE SUIT;So;0;ON;;;;;N;;;;; 2661;WHITE HEART SUIT;So;0;ON;;;;;N;;;;; 2662;WHITE DIAMOND SUIT;So;0;ON;;;;;N;;;;; 2663;BLACK CLUB SUIT;So;0;ON;;;;;N;;;;; 2664;WHITE SPADE SUIT;So;0;ON;;;;;N;;;;; 2665;BLACK HEART SUIT;So;0;ON;;;;;N;;;;; 2666;BLACK DIAMOND SUIT;So;0;ON;;;;;N;;;;; 2667;WHITE CLUB SUIT;So;0;ON;;;;;N;;;;; 2668;HOT SPRINGS;So;0;ON;;;;;N;;;;; 2669;QUARTER NOTE;So;0;ON;;;;;N;;;;; 266A;EIGHTH NOTE;So;0;ON;;;;;N;;;;; 266B;BEAMED EIGHTH NOTES;So;0;ON;;;;;N;BARRED EIGHTH NOTES;;;; 266C;BEAMED SIXTEENTH NOTES;So;0;ON;;;;;N;BARRED SIXTEENTH NOTES;;;; 266D;MUSIC FLAT SIGN;So;0;ON;;;;;N;FLAT;;;; 266E;MUSIC NATURAL SIGN;So;0;ON;;;;;N;NATURAL;;;; 266F;MUSIC SHARP SIGN;Sm;0;ON;;;;;N;SHARP;;;; 2670;WEST SYRIAC CROSS;So;0;ON;;;;;N;;;;; 2671;EAST SYRIAC CROSS;So;0;ON;;;;;N;;;;; 2672;UNIVERSAL RECYCLING SYMBOL;So;0;ON;;;;;N;;;;; 2673;RECYCLING SYMBOL FOR TYPE-1 PLASTICS;So;0;ON;;;;;N;;;;; 2674;RECYCLING SYMBOL FOR TYPE-2 PLASTICS;So;0;ON;;;;;N;;;;; 2675;RECYCLING SYMBOL FOR TYPE-3 PLASTICS;So;0;ON;;;;;N;;;;; 2676;RECYCLING SYMBOL FOR TYPE-4 PLASTICS;So;0;ON;;;;;N;;;;; 2677;RECYCLING SYMBOL FOR TYPE-5 PLASTICS;So;0;ON;;;;;N;;;;; 2678;RECYCLING SYMBOL FOR TYPE-6 PLASTICS;So;0;ON;;;;;N;;;;; 2679;RECYCLING SYMBOL FOR TYPE-7 PLASTICS;So;0;ON;;;;;N;;;;; 267A;RECYCLING SYMBOL FOR GENERIC MATERIALS;So;0;ON;;;;;N;;;;; 267B;BLACK UNIVERSAL RECYCLING SYMBOL;So;0;ON;;;;;N;;;;; 267C;RECYCLED PAPER SYMBOL;So;0;ON;;;;;N;;;;; 267D;PARTIALLY-RECYCLED PAPER SYMBOL;So;0;ON;;;;;N;;;;; 267E;PERMANENT PAPER SIGN;So;0;ON;;;;;N;;;;; 267F;WHEELCHAIR SYMBOL;So;0;ON;;;;;N;;;;; 2680;DIE FACE-1;So;0;ON;;;;;N;;;;; 2681;DIE FACE-2;So;0;ON;;;;;N;;;;; 2682;DIE FACE-3;So;0;ON;;;;;N;;;;; 2683;DIE FACE-4;So;0;ON;;;;;N;;;;; 2684;DIE FACE-5;So;0;ON;;;;;N;;;;; 2685;DIE FACE-6;So;0;ON;;;;;N;;;;; 2686;WHITE CIRCLE WITH DOT RIGHT;So;0;ON;;;;;N;;;;; 2687;WHITE CIRCLE WITH TWO DOTS;So;0;ON;;;;;N;;;;; 2688;BLACK CIRCLE WITH WHITE DOT RIGHT;So;0;ON;;;;;N;;;;; 2689;BLACK CIRCLE WITH TWO WHITE DOTS;So;0;ON;;;;;N;;;;; 268A;MONOGRAM FOR YANG;So;0;ON;;;;;N;;;;; 268B;MONOGRAM FOR YIN;So;0;ON;;;;;N;;;;; 268C;DIGRAM FOR GREATER YANG;So;0;ON;;;;;N;;;;; 268D;DIGRAM FOR LESSER YIN;So;0;ON;;;;;N;;;;; 268E;DIGRAM FOR LESSER YANG;So;0;ON;;;;;N;;;;; 268F;DIGRAM FOR GREATER YIN;So;0;ON;;;;;N;;;;; 2690;WHITE FLAG;So;0;ON;;;;;N;;;;; 2691;BLACK FLAG;So;0;ON;;;;;N;;;;; 2692;HAMMER AND PICK;So;0;ON;;;;;N;;;;; 2693;ANCHOR;So;0;ON;;;;;N;;;;; 2694;CROSSED SWORDS;So;0;ON;;;;;N;;;;; 2695;STAFF OF AESCULAPIUS;So;0;ON;;;;;N;;;;; 2696;SCALES;So;0;ON;;;;;N;;;;; 2697;ALEMBIC;So;0;ON;;;;;N;;;;; 2698;FLOWER;So;0;ON;;;;;N;;;;; 2699;GEAR;So;0;ON;;;;;N;;;;; 269A;STAFF OF HERMES;So;0;ON;;;;;N;;;;; 269B;ATOM SYMBOL;So;0;ON;;;;;N;;;;; 269C;FLEUR-DE-LIS;So;0;ON;;;;;N;;;;; 269D;OUTLINED WHITE STAR;So;0;ON;;;;;N;;;;; 269E;THREE LINES CONVERGING RIGHT;So;0;ON;;;;;N;;;;; 269F;THREE LINES CONVERGING LEFT;So;0;ON;;;;;N;;;;; 26A0;WARNING SIGN;So;0;ON;;;;;N;;;;; 26A1;HIGH VOLTAGE SIGN;So;0;ON;;;;;N;;;;; 26A2;DOUBLED FEMALE SIGN;So;0;ON;;;;;N;;;;; 26A3;DOUBLED MALE SIGN;So;0;ON;;;;;N;;;;; 26A4;INTERLOCKED FEMALE AND MALE SIGN;So;0;ON;;;;;N;;;;; 26A5;MALE AND FEMALE SIGN;So;0;ON;;;;;N;;;;; 26A6;MALE WITH STROKE SIGN;So;0;ON;;;;;N;;;;; 26A7;MALE WITH STROKE AND MALE AND FEMALE SIGN;So;0;ON;;;;;N;;;;; 26A8;VERTICAL MALE WITH STROKE SIGN;So;0;ON;;;;;N;;;;; 26A9;HORIZONTAL MALE WITH STROKE SIGN;So;0;ON;;;;;N;;;;; 26AA;MEDIUM WHITE CIRCLE;So;0;ON;;;;;N;;;;; 26AB;MEDIUM BLACK CIRCLE;So;0;ON;;;;;N;;;;; 26AC;MEDIUM SMALL WHITE CIRCLE;So;0;L;;;;;N;;;;; 26AD;MARRIAGE SYMBOL;So;0;ON;;;;;N;;;;; 26AE;DIVORCE SYMBOL;So;0;ON;;;;;N;;;;; 26AF;UNMARRIED PARTNERSHIP SYMBOL;So;0;ON;;;;;N;;;;; 26B0;COFFIN;So;0;ON;;;;;N;;;;; 26B1;FUNERAL URN;So;0;ON;;;;;N;;;;; 26B2;NEUTER;So;0;ON;;;;;N;;;;; 26B3;CERES;So;0;ON;;;;;N;;;;; 26B4;PALLAS;So;0;ON;;;;;N;;;;; 26B5;JUNO;So;0;ON;;;;;N;;;;; 26B6;VESTA;So;0;ON;;;;;N;;;;; 26B7;CHIRON;So;0;ON;;;;;N;;;;; 26B8;BLACK MOON LILITH;So;0;ON;;;;;N;;;;; 26B9;SEXTILE;So;0;ON;;;;;N;;;;; 26BA;SEMISEXTILE;So;0;ON;;;;;N;;;;; 26BB;QUINCUNX;So;0;ON;;;;;N;;;;; 26BC;SESQUIQUADRATE;So;0;ON;;;;;N;;;;; 26BD;SOCCER BALL;So;0;ON;;;;;N;;;;; 26BE;BASEBALL;So;0;ON;;;;;N;;;;; 26BF;SQUARED KEY;So;0;ON;;;;;N;;;;; 26C0;WHITE DRAUGHTS MAN;So;0;ON;;;;;N;;;;; 26C1;WHITE DRAUGHTS KING;So;0;ON;;;;;N;;;;; 26C2;BLACK DRAUGHTS MAN;So;0;ON;;;;;N;;;;; 26C3;BLACK DRAUGHTS KING;So;0;ON;;;;;N;;;;; 26C4;SNOWMAN WITHOUT SNOW;So;0;ON;;;;;N;;;;; 26C5;SUN BEHIND CLOUD;So;0;ON;;;;;N;;;;; 26C6;RAIN;So;0;ON;;;;;N;;;;; 26C7;BLACK SNOWMAN;So;0;ON;;;;;N;;;;; 26C8;THUNDER CLOUD AND RAIN;So;0;ON;;;;;N;;;;; 26C9;TURNED WHITE SHOGI PIECE;So;0;ON;;;;;N;;;;; 26CA;TURNED BLACK SHOGI PIECE;So;0;ON;;;;;N;;;;; 26CB;WHITE DIAMOND IN SQUARE;So;0;ON;;;;;N;;;;; 26CC;CROSSING LANES;So;0;ON;;;;;N;;;;; 26CD;DISABLED CAR;So;0;ON;;;;;N;;;;; 26CE;OPHIUCHUS;So;0;ON;;;;;N;;;;; 26CF;PICK;So;0;ON;;;;;N;;;;; 26D0;CAR SLIDING;So;0;ON;;;;;N;;;;; 26D1;HELMET WITH WHITE CROSS;So;0;ON;;;;;N;;;;; 26D2;CIRCLED CROSSING LANES;So;0;ON;;;;;N;;;;; 26D3;CHAINS;So;0;ON;;;;;N;;;;; 26D4;NO ENTRY;So;0;ON;;;;;N;;;;; 26D5;ALTERNATE ONE-WAY LEFT WAY TRAFFIC;So;0;ON;;;;;N;;;;; 26D6;BLACK TWO-WAY LEFT WAY TRAFFIC;So;0;ON;;;;;N;;;;; 26D7;WHITE TWO-WAY LEFT WAY TRAFFIC;So;0;ON;;;;;N;;;;; 26D8;BLACK LEFT LANE MERGE;So;0;ON;;;;;N;;;;; 26D9;WHITE LEFT LANE MERGE;So;0;ON;;;;;N;;;;; 26DA;DRIVE SLOW SIGN;So;0;ON;;;;;N;;;;; 26DB;HEAVY WHITE DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;;;;; 26DC;LEFT CLOSED ENTRY;So;0;ON;;;;;N;;;;; 26DD;SQUARED SALTIRE;So;0;ON;;;;;N;;;;; 26DE;FALLING DIAGONAL IN WHITE CIRCLE IN BLACK SQUARE;So;0;ON;;;;;N;;;;; 26DF;BLACK TRUCK;So;0;ON;;;;;N;;;;; 26E0;RESTRICTED LEFT ENTRY-1;So;0;ON;;;;;N;;;;; 26E1;RESTRICTED LEFT ENTRY-2;So;0;ON;;;;;N;;;;; 26E2;ASTRONOMICAL SYMBOL FOR URANUS;So;0;ON;;;;;N;;;;; 26E3;HEAVY CIRCLE WITH STROKE AND TWO DOTS ABOVE;So;0;ON;;;;;N;;;;; 26E4;PENTAGRAM;So;0;ON;;;;;N;;;;; 26E5;RIGHT-HANDED INTERLACED PENTAGRAM;So;0;ON;;;;;N;;;;; 26E6;LEFT-HANDED INTERLACED PENTAGRAM;So;0;ON;;;;;N;;;;; 26E7;INVERTED PENTAGRAM;So;0;ON;;;;;N;;;;; 26E8;BLACK CROSS ON SHIELD;So;0;ON;;;;;N;;;;; 26E9;SHINTO SHRINE;So;0;ON;;;;;N;;;;; 26EA;CHURCH;So;0;ON;;;;;N;;;;; 26EB;CASTLE;So;0;ON;;;;;N;;;;; 26EC;HISTORIC SITE;So;0;ON;;;;;N;;;;; 26ED;GEAR WITHOUT HUB;So;0;ON;;;;;N;;;;; 26EE;GEAR WITH HANDLES;So;0;ON;;;;;N;;;;; 26EF;MAP SYMBOL FOR LIGHTHOUSE;So;0;ON;;;;;N;;;;; 26F0;MOUNTAIN;So;0;ON;;;;;N;;;;; 26F1;UMBRELLA ON GROUND;So;0;ON;;;;;N;;;;; 26F2;FOUNTAIN;So;0;ON;;;;;N;;;;; 26F3;FLAG IN HOLE;So;0;ON;;;;;N;;;;; 26F4;FERRY;So;0;ON;;;;;N;;;;; 26F5;SAILBOAT;So;0;ON;;;;;N;;;;; 26F6;SQUARE FOUR CORNERS;So;0;ON;;;;;N;;;;; 26F7;SKIER;So;0;ON;;;;;N;;;;; 26F8;ICE SKATE;So;0;ON;;;;;N;;;;; 26F9;PERSON WITH BALL;So;0;ON;;;;;N;;;;; 26FA;TENT;So;0;ON;;;;;N;;;;; 26FB;JAPANESE BANK SYMBOL;So;0;ON;;;;;N;;;;; 26FC;HEADSTONE GRAVEYARD SYMBOL;So;0;ON;;;;;N;;;;; 26FD;FUEL PUMP;So;0;ON;;;;;N;;;;; 26FE;CUP ON BLACK SQUARE;So;0;ON;;;;;N;;;;; 26FF;WHITE FLAG WITH HORIZONTAL MIDDLE BLACK STRIPE;So;0;ON;;;;;N;;;;; 2700;BLACK SAFETY SCISSORS;So;0;ON;;;;;N;;;;; 2701;UPPER BLADE SCISSORS;So;0;ON;;;;;N;;;;; 2702;BLACK SCISSORS;So;0;ON;;;;;N;;;;; 2703;LOWER BLADE SCISSORS;So;0;ON;;;;;N;;;;; 2704;WHITE SCISSORS;So;0;ON;;;;;N;;;;; 2705;WHITE HEAVY CHECK MARK;So;0;ON;;;;;N;;;;; 2706;TELEPHONE LOCATION SIGN;So;0;ON;;;;;N;;;;; 2707;TAPE DRIVE;So;0;ON;;;;;N;;;;; 2708;AIRPLANE;So;0;ON;;;;;N;;;;; 2709;ENVELOPE;So;0;ON;;;;;N;;;;; 270A;RAISED FIST;So;0;ON;;;;;N;;;;; 270B;RAISED HAND;So;0;ON;;;;;N;;;;; 270C;VICTORY HAND;So;0;ON;;;;;N;;;;; 270D;WRITING HAND;So;0;ON;;;;;N;;;;; 270E;LOWER RIGHT PENCIL;So;0;ON;;;;;N;;;;; 270F;PENCIL;So;0;ON;;;;;N;;;;; 2710;UPPER RIGHT PENCIL;So;0;ON;;;;;N;;;;; 2711;WHITE NIB;So;0;ON;;;;;N;;;;; 2712;BLACK NIB;So;0;ON;;;;;N;;;;; 2713;CHECK MARK;So;0;ON;;;;;N;;;;; 2714;HEAVY CHECK MARK;So;0;ON;;;;;N;;;;; 2715;MULTIPLICATION X;So;0;ON;;;;;N;;;;; 2716;HEAVY MULTIPLICATION X;So;0;ON;;;;;N;;;;; 2717;BALLOT X;So;0;ON;;;;;N;;;;; 2718;HEAVY BALLOT X;So;0;ON;;;;;N;;;;; 2719;OUTLINED GREEK CROSS;So;0;ON;;;;;N;;;;; 271A;HEAVY GREEK CROSS;So;0;ON;;;;;N;;;;; 271B;OPEN CENTRE CROSS;So;0;ON;;;;;N;OPEN CENTER CROSS;;;; 271C;HEAVY OPEN CENTRE CROSS;So;0;ON;;;;;N;HEAVY OPEN CENTER CROSS;;;; 271D;LATIN CROSS;So;0;ON;;;;;N;;;;; 271E;SHADOWED WHITE LATIN CROSS;So;0;ON;;;;;N;;;;; 271F;OUTLINED LATIN CROSS;So;0;ON;;;;;N;;;;; 2720;MALTESE CROSS;So;0;ON;;;;;N;;;;; 2721;STAR OF DAVID;So;0;ON;;;;;N;;;;; 2722;FOUR TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 2723;FOUR BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 2724;HEAVY FOUR BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 2725;FOUR CLUB-SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 2726;BLACK FOUR POINTED STAR;So;0;ON;;;;;N;;;;; 2727;WHITE FOUR POINTED STAR;So;0;ON;;;;;N;;;;; 2728;SPARKLES;So;0;ON;;;;;N;;;;; 2729;STRESS OUTLINED WHITE STAR;So;0;ON;;;;;N;;;;; 272A;CIRCLED WHITE STAR;So;0;ON;;;;;N;;;;; 272B;OPEN CENTRE BLACK STAR;So;0;ON;;;;;N;OPEN CENTER BLACK STAR;;;; 272C;BLACK CENTRE WHITE STAR;So;0;ON;;;;;N;BLACK CENTER WHITE STAR;;;; 272D;OUTLINED BLACK STAR;So;0;ON;;;;;N;;;;; 272E;HEAVY OUTLINED BLACK STAR;So;0;ON;;;;;N;;;;; 272F;PINWHEEL STAR;So;0;ON;;;;;N;;;;; 2730;SHADOWED WHITE STAR;So;0;ON;;;;;N;;;;; 2731;HEAVY ASTERISK;So;0;ON;;;;;N;;;;; 2732;OPEN CENTRE ASTERISK;So;0;ON;;;;;N;OPEN CENTER ASTERISK;;;; 2733;EIGHT SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 2734;EIGHT POINTED BLACK STAR;So;0;ON;;;;;N;;;;; 2735;EIGHT POINTED PINWHEEL STAR;So;0;ON;;;;;N;;;;; 2736;SIX POINTED BLACK STAR;So;0;ON;;;;;N;;;;; 2737;EIGHT POINTED RECTILINEAR BLACK STAR;So;0;ON;;;;;N;;;;; 2738;HEAVY EIGHT POINTED RECTILINEAR BLACK STAR;So;0;ON;;;;;N;;;;; 2739;TWELVE POINTED BLACK STAR;So;0;ON;;;;;N;;;;; 273A;SIXTEEN POINTED ASTERISK;So;0;ON;;;;;N;;;;; 273B;TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 273C;OPEN CENTRE TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;OPEN CENTER TEARDROP-SPOKED ASTERISK;;;; 273D;HEAVY TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 273E;SIX PETALLED BLACK AND WHITE FLORETTE;So;0;ON;;;;;N;;;;; 273F;BLACK FLORETTE;So;0;ON;;;;;N;;;;; 2740;WHITE FLORETTE;So;0;ON;;;;;N;;;;; 2741;EIGHT PETALLED OUTLINED BLACK FLORETTE;So;0;ON;;;;;N;;;;; 2742;CIRCLED OPEN CENTRE EIGHT POINTED STAR;So;0;ON;;;;;N;CIRCLED OPEN CENTER EIGHT POINTED STAR;;;; 2743;HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK;So;0;ON;;;;;N;;;;; 2744;SNOWFLAKE;So;0;ON;;;;;N;;;;; 2745;TIGHT TRIFOLIATE SNOWFLAKE;So;0;ON;;;;;N;;;;; 2746;HEAVY CHEVRON SNOWFLAKE;So;0;ON;;;;;N;;;;; 2747;SPARKLE;So;0;ON;;;;;N;;;;; 2748;HEAVY SPARKLE;So;0;ON;;;;;N;;;;; 2749;BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 274A;EIGHT TEARDROP-SPOKED PROPELLER ASTERISK;So;0;ON;;;;;N;;;;; 274B;HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK;So;0;ON;;;;;N;;;;; 274C;CROSS MARK;So;0;ON;;;;;N;;;;; 274D;SHADOWED WHITE CIRCLE;So;0;ON;;;;;N;;;;; 274E;NEGATIVE SQUARED CROSS MARK;So;0;ON;;;;;N;;;;; 274F;LOWER RIGHT DROP-SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;; 2750;UPPER RIGHT DROP-SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;; 2751;LOWER RIGHT SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;; 2752;UPPER RIGHT SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;; 2753;BLACK QUESTION MARK ORNAMENT;So;0;ON;;;;;N;;;;; 2754;WHITE QUESTION MARK ORNAMENT;So;0;ON;;;;;N;;;;; 2755;WHITE EXCLAMATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; 2756;BLACK DIAMOND MINUS WHITE X;So;0;ON;;;;;N;;;;; 2757;HEAVY EXCLAMATION MARK SYMBOL;So;0;ON;;;;;N;;;;; 2758;LIGHT VERTICAL BAR;So;0;ON;;;;;N;;;;; 2759;MEDIUM VERTICAL BAR;So;0;ON;;;;;N;;;;; 275A;HEAVY VERTICAL BAR;So;0;ON;;;;;N;;;;; 275B;HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; 275C;HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; 275D;HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; 275E;HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; 275F;HEAVY LOW SINGLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; 2760;HEAVY LOW DOUBLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; 2761;CURVED STEM PARAGRAPH SIGN ORNAMENT;So;0;ON;;;;;N;;;;; 2762;HEAVY EXCLAMATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; 2763;HEAVY HEART EXCLAMATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; 2764;HEAVY BLACK HEART;So;0;ON;;;;;N;;;;; 2765;ROTATED HEAVY BLACK HEART BULLET;So;0;ON;;;;;N;;;;; 2766;FLORAL HEART;So;0;ON;;;;;N;;;;; 2767;ROTATED FLORAL HEART BULLET;So;0;ON;;;;;N;;;;; 2768;MEDIUM LEFT PARENTHESIS ORNAMENT;Ps;0;ON;;;;;Y;;;;; 2769;MEDIUM RIGHT PARENTHESIS ORNAMENT;Pe;0;ON;;;;;Y;;;;; 276A;MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT;Ps;0;ON;;;;;Y;;;;; 276B;MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT;Pe;0;ON;;;;;Y;;;;; 276C;MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT;Ps;0;ON;;;;;Y;;;;; 276D;MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT;Pe;0;ON;;;;;Y;;;;; 276E;HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT;Ps;0;ON;;;;;Y;;;;; 276F;HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT;Pe;0;ON;;;;;Y;;;;; 2770;HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT;Ps;0;ON;;;;;Y;;;;; 2771;HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT;Pe;0;ON;;;;;Y;;;;; 2772;LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT;Ps;0;ON;;;;;Y;;;;; 2773;LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT;Pe;0;ON;;;;;Y;;;;; 2774;MEDIUM LEFT CURLY BRACKET ORNAMENT;Ps;0;ON;;;;;Y;;;;; 2775;MEDIUM RIGHT CURLY BRACKET ORNAMENT;Pe;0;ON;;;;;Y;;;;; 2776;DINGBAT NEGATIVE CIRCLED DIGIT ONE;No;0;ON;;;1;1;N;INVERSE CIRCLED DIGIT ONE;;;; 2777;DINGBAT NEGATIVE CIRCLED DIGIT TWO;No;0;ON;;;2;2;N;INVERSE CIRCLED DIGIT TWO;;;; 2778;DINGBAT NEGATIVE CIRCLED DIGIT THREE;No;0;ON;;;3;3;N;INVERSE CIRCLED DIGIT THREE;;;; 2779;DINGBAT NEGATIVE CIRCLED DIGIT FOUR;No;0;ON;;;4;4;N;INVERSE CIRCLED DIGIT FOUR;;;; 277A;DINGBAT NEGATIVE CIRCLED DIGIT FIVE;No;0;ON;;;5;5;N;INVERSE CIRCLED DIGIT FIVE;;;; 277B;DINGBAT NEGATIVE CIRCLED DIGIT SIX;No;0;ON;;;6;6;N;INVERSE CIRCLED DIGIT SIX;;;; 277C;DINGBAT NEGATIVE CIRCLED DIGIT SEVEN;No;0;ON;;;7;7;N;INVERSE CIRCLED DIGIT SEVEN;;;; 277D;DINGBAT NEGATIVE CIRCLED DIGIT EIGHT;No;0;ON;;;8;8;N;INVERSE CIRCLED DIGIT EIGHT;;;; 277E;DINGBAT NEGATIVE CIRCLED DIGIT NINE;No;0;ON;;;9;9;N;INVERSE CIRCLED DIGIT NINE;;;; 277F;DINGBAT NEGATIVE CIRCLED NUMBER TEN;No;0;ON;;;;10;N;INVERSE CIRCLED NUMBER TEN;;;; 2780;DINGBAT CIRCLED SANS-SERIF DIGIT ONE;No;0;ON;;;1;1;N;CIRCLED SANS-SERIF DIGIT ONE;;;; 2781;DINGBAT CIRCLED SANS-SERIF DIGIT TWO;No;0;ON;;;2;2;N;CIRCLED SANS-SERIF DIGIT TWO;;;; 2782;DINGBAT CIRCLED SANS-SERIF DIGIT THREE;No;0;ON;;;3;3;N;CIRCLED SANS-SERIF DIGIT THREE;;;; 2783;DINGBAT CIRCLED SANS-SERIF DIGIT FOUR;No;0;ON;;;4;4;N;CIRCLED SANS-SERIF DIGIT FOUR;;;; 2784;DINGBAT CIRCLED SANS-SERIF DIGIT FIVE;No;0;ON;;;5;5;N;CIRCLED SANS-SERIF DIGIT FIVE;;;; 2785;DINGBAT CIRCLED SANS-SERIF DIGIT SIX;No;0;ON;;;6;6;N;CIRCLED SANS-SERIF DIGIT SIX;;;; 2786;DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN;No;0;ON;;;7;7;N;CIRCLED SANS-SERIF DIGIT SEVEN;;;; 2787;DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT;No;0;ON;;;8;8;N;CIRCLED SANS-SERIF DIGIT EIGHT;;;; 2788;DINGBAT CIRCLED SANS-SERIF DIGIT NINE;No;0;ON;;;9;9;N;CIRCLED SANS-SERIF DIGIT NINE;;;; 2789;DINGBAT CIRCLED SANS-SERIF NUMBER TEN;No;0;ON;;;;10;N;CIRCLED SANS-SERIF NUMBER TEN;;;; 278A;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE;No;0;ON;;;1;1;N;INVERSE CIRCLED SANS-SERIF DIGIT ONE;;;; 278B;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO;No;0;ON;;;2;2;N;INVERSE CIRCLED SANS-SERIF DIGIT TWO;;;; 278C;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE;No;0;ON;;;3;3;N;INVERSE CIRCLED SANS-SERIF DIGIT THREE;;;; 278D;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR;No;0;ON;;;4;4;N;INVERSE CIRCLED SANS-SERIF DIGIT FOUR;;;; 278E;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE;No;0;ON;;;5;5;N;INVERSE CIRCLED SANS-SERIF DIGIT FIVE;;;; 278F;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX;No;0;ON;;;6;6;N;INVERSE CIRCLED SANS-SERIF DIGIT SIX;;;; 2790;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN;No;0;ON;;;7;7;N;INVERSE CIRCLED SANS-SERIF DIGIT SEVEN;;;; 2791;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT;No;0;ON;;;8;8;N;INVERSE CIRCLED SANS-SERIF DIGIT EIGHT;;;; 2792;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE;No;0;ON;;;9;9;N;INVERSE CIRCLED SANS-SERIF DIGIT NINE;;;; 2793;DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN;No;0;ON;;;;10;N;INVERSE CIRCLED SANS-SERIF NUMBER TEN;;;; 2794;HEAVY WIDE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY WIDE-HEADED RIGHT ARROW;;;; 2795;HEAVY PLUS SIGN;So;0;ON;;;;;N;;;;; 2796;HEAVY MINUS SIGN;So;0;ON;;;;;N;;;;; 2797;HEAVY DIVISION SIGN;So;0;ON;;;;;N;;;;; 2798;HEAVY SOUTH EAST ARROW;So;0;ON;;;;;N;HEAVY LOWER RIGHT ARROW;;;; 2799;HEAVY RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY RIGHT ARROW;;;; 279A;HEAVY NORTH EAST ARROW;So;0;ON;;;;;N;HEAVY UPPER RIGHT ARROW;;;; 279B;DRAFTING POINT RIGHTWARDS ARROW;So;0;ON;;;;;N;DRAFTING POINT RIGHT ARROW;;;; 279C;HEAVY ROUND-TIPPED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY ROUND-TIPPED RIGHT ARROW;;;; 279D;TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;TRIANGLE-HEADED RIGHT ARROW;;;; 279E;HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY TRIANGLE-HEADED RIGHT ARROW;;;; 279F;DASHED TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;DASHED TRIANGLE-HEADED RIGHT ARROW;;;; 27A0;HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY DASHED TRIANGLE-HEADED RIGHT ARROW;;;; 27A1;BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;BLACK RIGHT ARROW;;;; 27A2;THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;THREE-D TOP-LIGHTED RIGHT ARROWHEAD;;;; 27A3;THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;THREE-D BOTTOM-LIGHTED RIGHT ARROWHEAD;;;; 27A4;BLACK RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;BLACK RIGHT ARROWHEAD;;;; 27A5;HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK CURVED DOWN AND RIGHT ARROW;;;; 27A6;HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK CURVED UP AND RIGHT ARROW;;;; 27A7;SQUAT BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;SQUAT BLACK RIGHT ARROW;;;; 27A8;HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY CONCAVE-POINTED BLACK RIGHT ARROW;;;; 27A9;RIGHT-SHADED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;RIGHT-SHADED WHITE RIGHT ARROW;;;; 27AA;LEFT-SHADED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;LEFT-SHADED WHITE RIGHT ARROW;;;; 27AB;BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;BACK-TILTED SHADOWED WHITE RIGHT ARROW;;;; 27AC;FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;FRONT-TILTED SHADOWED WHITE RIGHT ARROW;;;; 27AD;HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY LOWER RIGHT-SHADOWED WHITE RIGHT ARROW;;;; 27AE;HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY UPPER RIGHT-SHADOWED WHITE RIGHT ARROW;;;; 27AF;NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHT ARROW;;;; 27B0;CURLY LOOP;So;0;ON;;;;;N;;;;; 27B1;NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHT ARROW;;;; 27B2;CIRCLED HEAVY WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;CIRCLED HEAVY WHITE RIGHT ARROW;;;; 27B3;WHITE-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;WHITE-FEATHERED RIGHT ARROW;;;; 27B4;BLACK-FEATHERED SOUTH EAST ARROW;So;0;ON;;;;;N;BLACK-FEATHERED LOWER RIGHT ARROW;;;; 27B5;BLACK-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;BLACK-FEATHERED RIGHT ARROW;;;; 27B6;BLACK-FEATHERED NORTH EAST ARROW;So;0;ON;;;;;N;BLACK-FEATHERED UPPER RIGHT ARROW;;;; 27B7;HEAVY BLACK-FEATHERED SOUTH EAST ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED LOWER RIGHT ARROW;;;; 27B8;HEAVY BLACK-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED RIGHT ARROW;;;; 27B9;HEAVY BLACK-FEATHERED NORTH EAST ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED UPPER RIGHT ARROW;;;; 27BA;TEARDROP-BARBED RIGHTWARDS ARROW;So;0;ON;;;;;N;TEARDROP-BARBED RIGHT ARROW;;;; 27BB;HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY TEARDROP-SHANKED RIGHT ARROW;;;; 27BC;WEDGE-TAILED RIGHTWARDS ARROW;So;0;ON;;;;;N;WEDGE-TAILED RIGHT ARROW;;;; 27BD;HEAVY WEDGE-TAILED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY WEDGE-TAILED RIGHT ARROW;;;; 27BE;OPEN-OUTLINED RIGHTWARDS ARROW;So;0;ON;;;;;N;OPEN-OUTLINED RIGHT ARROW;;;; 27BF;DOUBLE CURLY LOOP;So;0;ON;;;;;N;;;;; 27C0;THREE DIMENSIONAL ANGLE;Sm;0;ON;;;;;Y;;;;; 27C1;WHITE TRIANGLE CONTAINING SMALL WHITE TRIANGLE;Sm;0;ON;;;;;N;;;;; 27C2;PERPENDICULAR;Sm;0;ON;;;;;N;;;;; 27C3;OPEN SUBSET;Sm;0;ON;;;;;Y;;;;; 27C4;OPEN SUPERSET;Sm;0;ON;;;;;Y;;;;; 27C5;LEFT S-SHAPED BAG DELIMITER;Ps;0;ON;;;;;Y;;;;; 27C6;RIGHT S-SHAPED BAG DELIMITER;Pe;0;ON;;;;;Y;;;;; 27C7;OR WITH DOT INSIDE;Sm;0;ON;;;;;N;;;;; 27C8;REVERSE SOLIDUS PRECEDING SUBSET;Sm;0;ON;;;;;Y;;;;; 27C9;SUPERSET PRECEDING SOLIDUS;Sm;0;ON;;;;;Y;;;;; 27CA;VERTICAL BAR WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;; 27CB;MATHEMATICAL RISING DIAGONAL;Sm;0;ON;;;;;Y;;;;; 27CC;LONG DIVISION;Sm;0;ON;;;;;Y;;;;; 27CD;MATHEMATICAL FALLING DIAGONAL;Sm;0;ON;;;;;Y;;;;; 27CE;SQUARED LOGICAL AND;Sm;0;ON;;;;;N;;;;; 27CF;SQUARED LOGICAL OR;Sm;0;ON;;;;;N;;;;; 27D0;WHITE DIAMOND WITH CENTRED DOT;Sm;0;ON;;;;;N;;;;; 27D1;AND WITH DOT;Sm;0;ON;;;;;N;;;;; 27D2;ELEMENT OF OPENING UPWARDS;Sm;0;ON;;;;;N;;;;; 27D3;LOWER RIGHT CORNER WITH DOT;Sm;0;ON;;;;;Y;;;;; 27D4;UPPER LEFT CORNER WITH DOT;Sm;0;ON;;;;;Y;;;;; 27D5;LEFT OUTER JOIN;Sm;0;ON;;;;;Y;;;;; 27D6;RIGHT OUTER JOIN;Sm;0;ON;;;;;Y;;;;; 27D7;FULL OUTER JOIN;Sm;0;ON;;;;;N;;;;; 27D8;LARGE UP TACK;Sm;0;ON;;;;;N;;;;; 27D9;LARGE DOWN TACK;Sm;0;ON;;;;;N;;;;; 27DA;LEFT AND RIGHT DOUBLE TURNSTILE;Sm;0;ON;;;;;N;;;;; 27DB;LEFT AND RIGHT TACK;Sm;0;ON;;;;;N;;;;; 27DC;LEFT MULTIMAP;Sm;0;ON;;;;;Y;;;;; 27DD;LONG RIGHT TACK;Sm;0;ON;;;;;Y;;;;; 27DE;LONG LEFT TACK;Sm;0;ON;;;;;Y;;;;; 27DF;UP TACK WITH CIRCLE ABOVE;Sm;0;ON;;;;;N;;;;; 27E0;LOZENGE DIVIDED BY HORIZONTAL RULE;Sm;0;ON;;;;;N;;;;; 27E1;WHITE CONCAVE-SIDED DIAMOND;Sm;0;ON;;;;;N;;;;; 27E2;WHITE CONCAVE-SIDED DIAMOND WITH LEFTWARDS TICK;Sm;0;ON;;;;;Y;;;;; 27E3;WHITE CONCAVE-SIDED DIAMOND WITH RIGHTWARDS TICK;Sm;0;ON;;;;;Y;;;;; 27E4;WHITE SQUARE WITH LEFTWARDS TICK;Sm;0;ON;;;;;Y;;;;; 27E5;WHITE SQUARE WITH RIGHTWARDS TICK;Sm;0;ON;;;;;Y;;;;; 27E6;MATHEMATICAL LEFT WHITE SQUARE BRACKET;Ps;0;ON;;;;;Y;;;;; 27E7;MATHEMATICAL RIGHT WHITE SQUARE BRACKET;Pe;0;ON;;;;;Y;;;;; 27E8;MATHEMATICAL LEFT ANGLE BRACKET;Ps;0;ON;;;;;Y;;;;; 27E9;MATHEMATICAL RIGHT ANGLE BRACKET;Pe;0;ON;;;;;Y;;;;; 27EA;MATHEMATICAL LEFT DOUBLE ANGLE BRACKET;Ps;0;ON;;;;;Y;;;;; 27EB;MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON;;;;;Y;;;;; 27EC;MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;;;;; 27ED;MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;;;;; 27EE;MATHEMATICAL LEFT FLATTENED PARENTHESIS;Ps;0;ON;;;;;Y;;;;; 27EF;MATHEMATICAL RIGHT FLATTENED PARENTHESIS;Pe;0;ON;;;;;Y;;;;; 27F0;UPWARDS QUADRUPLE ARROW;Sm;0;ON;;;;;N;;;;; 27F1;DOWNWARDS QUADRUPLE ARROW;Sm;0;ON;;;;;N;;;;; 27F2;ANTICLOCKWISE GAPPED CIRCLE ARROW;Sm;0;ON;;;;;N;;;;; 27F3;CLOCKWISE GAPPED CIRCLE ARROW;Sm;0;ON;;;;;N;;;;; 27F4;RIGHT ARROW WITH CIRCLED PLUS;Sm;0;ON;;;;;N;;;;; 27F5;LONG LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;; 27F6;LONG RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;; 27F7;LONG LEFT RIGHT ARROW;Sm;0;ON;;;;;N;;;;; 27F8;LONG LEFTWARDS DOUBLE ARROW;Sm;0;ON;;;;;N;;;;; 27F9;LONG RIGHTWARDS DOUBLE ARROW;Sm;0;ON;;;;;N;;;;; 27FA;LONG LEFT RIGHT DOUBLE ARROW;Sm;0;ON;;;;;N;;;;; 27FB;LONG LEFTWARDS ARROW FROM BAR;Sm;0;ON;;;;;N;;;;; 27FC;LONG RIGHTWARDS ARROW FROM BAR;Sm;0;ON;;;;;N;;;;; 27FD;LONG LEFTWARDS DOUBLE ARROW FROM BAR;Sm;0;ON;;;;;N;;;;; 27FE;LONG RIGHTWARDS DOUBLE ARROW FROM BAR;Sm;0;ON;;;;;N;;;;; 27FF;LONG RIGHTWARDS SQUIGGLE ARROW;Sm;0;ON;;;;;N;;;;; 2800;BRAILLE PATTERN BLANK;So;0;L;;;;;N;;;;; 2801;BRAILLE PATTERN DOTS-1;So;0;L;;;;;N;;;;; 2802;BRAILLE PATTERN DOTS-2;So;0;L;;;;;N;;;;; 2803;BRAILLE PATTERN DOTS-12;So;0;L;;;;;N;;;;; 2804;BRAILLE PATTERN DOTS-3;So;0;L;;;;;N;;;;; 2805;BRAILLE PATTERN DOTS-13;So;0;L;;;;;N;;;;; 2806;BRAILLE PATTERN DOTS-23;So;0;L;;;;;N;;;;; 2807;BRAILLE PATTERN DOTS-123;So;0;L;;;;;N;;;;; 2808;BRAILLE PATTERN DOTS-4;So;0;L;;;;;N;;;;; 2809;BRAILLE PATTERN DOTS-14;So;0;L;;;;;N;;;;; 280A;BRAILLE PATTERN DOTS-24;So;0;L;;;;;N;;;;; 280B;BRAILLE PATTERN DOTS-124;So;0;L;;;;;N;;;;; 280C;BRAILLE PATTERN DOTS-34;So;0;L;;;;;N;;;;; 280D;BRAILLE PATTERN DOTS-134;So;0;L;;;;;N;;;;; 280E;BRAILLE PATTERN DOTS-234;So;0;L;;;;;N;;;;; 280F;BRAILLE PATTERN DOTS-1234;So;0;L;;;;;N;;;;; 2810;BRAILLE PATTERN DOTS-5;So;0;L;;;;;N;;;;; 2811;BRAILLE PATTERN DOTS-15;So;0;L;;;;;N;;;;; 2812;BRAILLE PATTERN DOTS-25;So;0;L;;;;;N;;;;; 2813;BRAILLE PATTERN DOTS-125;So;0;L;;;;;N;;;;; 2814;BRAILLE PATTERN DOTS-35;So;0;L;;;;;N;;;;; 2815;BRAILLE PATTERN DOTS-135;So;0;L;;;;;N;;;;; 2816;BRAILLE PATTERN DOTS-235;So;0;L;;;;;N;;;;; 2817;BRAILLE PATTERN DOTS-1235;So;0;L;;;;;N;;;;; 2818;BRAILLE PATTERN DOTS-45;So;0;L;;;;;N;;;;; 2819;BRAILLE PATTERN DOTS-145;So;0;L;;;;;N;;;;; 281A;BRAILLE PATTERN DOTS-245;So;0;L;;;;;N;;;;; 281B;BRAILLE PATTERN DOTS-1245;So;0;L;;;;;N;;;;; 281C;BRAILLE PATTERN DOTS-345;So;0;L;;;;;N;;;;; 281D;BRAILLE PATTERN DOTS-1345;So;0;L;;;;;N;;;;; 281E;BRAILLE PATTERN DOTS-2345;So;0;L;;;;;N;;;;; 281F;BRAILLE PATTERN DOTS-12345;So;0;L;;;;;N;;;;; 2820;BRAILLE PATTERN DOTS-6;So;0;L;;;;;N;;;;; 2821;BRAILLE PATTERN DOTS-16;So;0;L;;;;;N;;;;; 2822;BRAILLE PATTERN DOTS-26;So;0;L;;;;;N;;;;; 2823;BRAILLE PATTERN DOTS-126;So;0;L;;;;;N;;;;; 2824;BRAILLE PATTERN DOTS-36;So;0;L;;;;;N;;;;; 2825;BRAILLE PATTERN DOTS-136;So;0;L;;;;;N;;;;; 2826;BRAILLE PATTERN DOTS-236;So;0;L;;;;;N;;;;; 2827;BRAILLE PATTERN DOTS-1236;So;0;L;;;;;N;;;;; 2828;BRAILLE PATTERN DOTS-46;So;0;L;;;;;N;;;;; 2829;BRAILLE PATTERN DOTS-146;So;0;L;;;;;N;;;;; 282A;BRAILLE PATTERN DOTS-246;So;0;L;;;;;N;;;;; 282B;BRAILLE PATTERN DOTS-1246;So;0;L;;;;;N;;;;; 282C;BRAILLE PATTERN DOTS-346;So;0;L;;;;;N;;;;; 282D;BRAILLE PATTERN DOTS-1346;So;0;L;;;;;N;;;;; 282E;BRAILLE PATTERN DOTS-2346;So;0;L;;;;;N;;;;; 282F;BRAILLE PATTERN DOTS-12346;So;0;L;;;;;N;;;;; 2830;BRAILLE PATTERN DOTS-56;So;0;L;;;;;N;;;;; 2831;BRAILLE PATTERN DOTS-156;So;0;L;;;;;N;;;;; 2832;BRAILLE PATTERN DOTS-256;So;0;L;;;;;N;;;;; 2833;BRAILLE PATTERN DOTS-1256;So;0;L;;;;;N;;;;; 2834;BRAILLE PATTERN DOTS-356;So;0;L;;;;;N;;;;; 2835;BRAILLE PATTERN DOTS-1356;So;0;L;;;;;N;;;;; 2836;BRAILLE PATTERN DOTS-2356;So;0;L;;;;;N;;;;; 2837;BRAILLE PATTERN DOTS-12356;So;0;L;;;;;N;;;;; 2838;BRAILLE PATTERN DOTS-456;So;0;L;;;;;N;;;;; 2839;BRAILLE PATTERN DOTS-1456;So;0;L;;;;;N;;;;; 283A;BRAILLE PATTERN DOTS-2456;So;0;L;;;;;N;;;;; 283B;BRAILLE PATTERN DOTS-12456;So;0;L;;;;;N;;;;; 283C;BRAILLE PATTERN DOTS-3456;So;0;L;;;;;N;;;;; 283D;BRAILLE PATTERN DOTS-13456;So;0;L;;;;;N;;;;; 283E;BRAILLE PATTERN DOTS-23456;So;0;L;;;;;N;;;;; 283F;BRAILLE PATTERN DOTS-123456;So;0;L;;;;;N;;;;; 2840;BRAILLE PATTERN DOTS-7;So;0;L;;;;;N;;;;; 2841;BRAILLE PATTERN DOTS-17;So;0;L;;;;;N;;;;; 2842;BRAILLE PATTERN DOTS-27;So;0;L;;;;;N;;;;; 2843;BRAILLE PATTERN DOTS-127;So;0;L;;;;;N;;;;; 2844;BRAILLE PATTERN DOTS-37;So;0;L;;;;;N;;;;; 2845;BRAILLE PATTERN DOTS-137;So;0;L;;;;;N;;;;; 2846;BRAILLE PATTERN DOTS-237;So;0;L;;;;;N;;;;; 2847;BRAILLE PATTERN DOTS-1237;So;0;L;;;;;N;;;;; 2848;BRAILLE PATTERN DOTS-47;So;0;L;;;;;N;;;;; 2849;BRAILLE PATTERN DOTS-147;So;0;L;;;;;N;;;;; 284A;BRAILLE PATTERN DOTS-247;So;0;L;;;;;N;;;;; 284B;BRAILLE PATTERN DOTS-1247;So;0;L;;;;;N;;;;; 284C;BRAILLE PATTERN DOTS-347;So;0;L;;;;;N;;;;; 284D;BRAILLE PATTERN DOTS-1347;So;0;L;;;;;N;;;;; 284E;BRAILLE PATTERN DOTS-2347;So;0;L;;;;;N;;;;; 284F;BRAILLE PATTERN DOTS-12347;So;0;L;;;;;N;;;;; 2850;BRAILLE PATTERN DOTS-57;So;0;L;;;;;N;;;;; 2851;BRAILLE PATTERN DOTS-157;So;0;L;;;;;N;;;;; 2852;BRAILLE PATTERN DOTS-257;So;0;L;;;;;N;;;;; 2853;BRAILLE PATTERN DOTS-1257;So;0;L;;;;;N;;;;; 2854;BRAILLE PATTERN DOTS-357;So;0;L;;;;;N;;;;; 2855;BRAILLE PATTERN DOTS-1357;So;0;L;;;;;N;;;;; 2856;BRAILLE PATTERN DOTS-2357;So;0;L;;;;;N;;;;; 2857;BRAILLE PATTERN DOTS-12357;So;0;L;;;;;N;;;;; 2858;BRAILLE PATTERN DOTS-457;So;0;L;;;;;N;;;;; 2859;BRAILLE PATTERN DOTS-1457;So;0;L;;;;;N;;;;; 285A;BRAILLE PATTERN DOTS-2457;So;0;L;;;;;N;;;;; 285B;BRAILLE PATTERN DOTS-12457;So;0;L;;;;;N;;;;; 285C;BRAILLE PATTERN DOTS-3457;So;0;L;;;;;N;;;;; 285D;BRAILLE PATTERN DOTS-13457;So;0;L;;;;;N;;;;; 285E;BRAILLE PATTERN DOTS-23457;So;0;L;;;;;N;;;;; 285F;BRAILLE PATTERN DOTS-123457;So;0;L;;;;;N;;;;; 2860;BRAILLE PATTERN DOTS-67;So;0;L;;;;;N;;;;; 2861;BRAILLE PATTERN DOTS-167;So;0;L;;;;;N;;;;; 2862;BRAILLE PATTERN DOTS-267;So;0;L;;;;;N;;;;; 2863;BRAILLE PATTERN DOTS-1267;So;0;L;;;;;N;;;;; 2864;BRAILLE PATTERN DOTS-367;So;0;L;;;;;N;;;;; 2865;BRAILLE PATTERN DOTS-1367;So;0;L;;;;;N;;;;; 2866;BRAILLE PATTERN DOTS-2367;So;0;L;;;;;N;;;;; 2867;BRAILLE PATTERN DOTS-12367;So;0;L;;;;;N;;;;; 2868;BRAILLE PATTERN DOTS-467;So;0;L;;;;;N;;;;; 2869;BRAILLE PATTERN DOTS-1467;So;0;L;;;;;N;;;;; 286A;BRAILLE PATTERN DOTS-2467;So;0;L;;;;;N;;;;; 286B;BRAILLE PATTERN DOTS-12467;So;0;L;;;;;N;;;;; 286C;BRAILLE PATTERN DOTS-3467;So;0;L;;;;;N;;;;; 286D;BRAILLE PATTERN DOTS-13467;So;0;L;;;;;N;;;;; 286E;BRAILLE PATTERN DOTS-23467;So;0;L;;;;;N;;;;; 286F;BRAILLE PATTERN DOTS-123467;So;0;L;;;;;N;;;;; 2870;BRAILLE PATTERN DOTS-567;So;0;L;;;;;N;;;;; 2871;BRAILLE PATTERN DOTS-1567;So;0;L;;;;;N;;;;; 2872;BRAILLE PATTERN DOTS-2567;So;0;L;;;;;N;;;;; 2873;BRAILLE PATTERN DOTS-12567;So;0;L;;;;;N;;;;; 2874;BRAILLE PATTERN DOTS-3567;So;0;L;;;;;N;;;;; 2875;BRAILLE PATTERN DOTS-13567;So;0;L;;;;;N;;;;; 2876;BRAILLE PATTERN DOTS-23567;So;0;L;;;;;N;;;;; 2877;BRAILLE PATTERN DOTS-123567;So;0;L;;;;;N;;;;; 2878;BRAILLE PATTERN DOTS-4567;So;0;L;;;;;N;;;;; 2879;BRAILLE PATTERN DOTS-14567;So;0;L;;;;;N;;;;; 287A;BRAILLE PATTERN DOTS-24567;So;0;L;;;;;N;;;;; 287B;BRAILLE PATTERN DOTS-124567;So;0;L;;;;;N;;;;; 287C;BRAILLE PATTERN DOTS-34567;So;0;L;;;;;N;;;;; 287D;BRAILLE PATTERN DOTS-134567;So;0;L;;;;;N;;;;; 287E;BRAILLE PATTERN DOTS-234567;So;0;L;;;;;N;;;;; 287F;BRAILLE PATTERN DOTS-1234567;So;0;L;;;;;N;;;;; 2880;BRAILLE PATTERN DOTS-8;So;0;L;;;;;N;;;;; 2881;BRAILLE PATTERN DOTS-18;So;0;L;;;;;N;;;;; 2882;BRAILLE PATTERN DOTS-28;So;0;L;;;;;N;;;;; 2883;BRAILLE PATTERN DOTS-128;So;0;L;;;;;N;;;;; 2884;BRAILLE PATTERN DOTS-38;So;0;L;;;;;N;;;;; 2885;BRAILLE PATTERN DOTS-138;So;0;L;;;;;N;;;;; 2886;BRAILLE PATTERN DOTS-238;So;0;L;;;;;N;;;;; 2887;BRAILLE PATTERN DOTS-1238;So;0;L;;;;;N;;;;; 2888;BRAILLE PATTERN DOTS-48;So;0;L;;;;;N;;;;; 2889;BRAILLE PATTERN DOTS-148;So;0;L;;;;;N;;;;; 288A;BRAILLE PATTERN DOTS-248;So;0;L;;;;;N;;;;; 288B;BRAILLE PATTERN DOTS-1248;So;0;L;;;;;N;;;;; 288C;BRAILLE PATTERN DOTS-348;So;0;L;;;;;N;;;;; 288D;BRAILLE PATTERN DOTS-1348;So;0;L;;;;;N;;;;; 288E;BRAILLE PATTERN DOTS-2348;So;0;L;;;;;N;;;;; 288F;BRAILLE PATTERN DOTS-12348;So;0;L;;;;;N;;;;; 2890;BRAILLE PATTERN DOTS-58;So;0;L;;;;;N;;;;; 2891;BRAILLE PATTERN DOTS-158;So;0;L;;;;;N;;;;; 2892;BRAILLE PATTERN DOTS-258;So;0;L;;;;;N;;;;; 2893;BRAILLE PATTERN DOTS-1258;So;0;L;;;;;N;;;;; 2894;BRAILLE PATTERN DOTS-358;So;0;L;;;;;N;;;;; 2895;BRAILLE PATTERN DOTS-1358;So;0;L;;;;;N;;;;; 2896;BRAILLE PATTERN DOTS-2358;So;0;L;;;;;N;;;;; 2897;BRAILLE PATTERN DOTS-12358;So;0;L;;;;;N;;;;; 2898;BRAILLE PATTERN DOTS-458;So;0;L;;;;;N;;;;; 2899;BRAILLE PATTERN DOTS-1458;So;0;L;;;;;N;;;;; 289A;BRAILLE PATTERN DOTS-2458;So;0;L;;;;;N;;;;; 289B;BRAILLE PATTERN DOTS-12458;So;0;L;;;;;N;;;;; 289C;BRAILLE PATTERN DOTS-3458;So;0;L;;;;;N;;;;; 289D;BRAILLE PATTERN DOTS-13458;So;0;L;;;;;N;;;;; 289E;BRAILLE PATTERN DOTS-23458;So;0;L;;;;;N;;;;; 289F;BRAILLE PATTERN DOTS-123458;So;0;L;;;;;N;;;;; 28A0;BRAILLE PATTERN DOTS-68;So;0;L;;;;;N;;;;; 28A1;BRAILLE PATTERN DOTS-168;So;0;L;;;;;N;;;;; 28A2;BRAILLE PATTERN DOTS-268;So;0;L;;;;;N;;;;; 28A3;BRAILLE PATTERN DOTS-1268;So;0;L;;;;;N;;;;; 28A4;BRAILLE PATTERN DOTS-368;So;0;L;;;;;N;;;;; 28A5;BRAILLE PATTERN DOTS-1368;So;0;L;;;;;N;;;;; 28A6;BRAILLE PATTERN DOTS-2368;So;0;L;;;;;N;;;;; 28A7;BRAILLE PATTERN DOTS-12368;So;0;L;;;;;N;;;;; 28A8;BRAILLE PATTERN DOTS-468;So;0;L;;;;;N;;;;; 28A9;BRAILLE PATTERN DOTS-1468;So;0;L;;;;;N;;;;; 28AA;BRAILLE PATTERN DOTS-2468;So;0;L;;;;;N;;;;; 28AB;BRAILLE PATTERN DOTS-12468;So;0;L;;;;;N;;;;; 28AC;BRAILLE PATTERN DOTS-3468;So;0;L;;;;;N;;;;; 28AD;BRAILLE PATTERN DOTS-13468;So;0;L;;;;;N;;;;; 28AE;BRAILLE PATTERN DOTS-23468;So;0;L;;;;;N;;;;; 28AF;BRAILLE PATTERN DOTS-123468;So;0;L;;;;;N;;;;; 28B0;BRAILLE PATTERN DOTS-568;So;0;L;;;;;N;;;;; 28B1;BRAILLE PATTERN DOTS-1568;So;0;L;;;;;N;;;;; 28B2;BRAILLE PATTERN DOTS-2568;So;0;L;;;;;N;;;;; 28B3;BRAILLE PATTERN DOTS-12568;So;0;L;;;;;N;;;;; 28B4;BRAILLE PATTERN DOTS-3568;So;0;L;;;;;N;;;;; 28B5;BRAILLE PATTERN DOTS-13568;So;0;L;;;;;N;;;;; 28B6;BRAILLE PATTERN DOTS-23568;So;0;L;;;;;N;;;;; 28B7;BRAILLE PATTERN DOTS-123568;So;0;L;;;;;N;;;;; 28B8;BRAILLE PATTERN DOTS-4568;So;0;L;;;;;N;;;;; 28B9;BRAILLE PATTERN DOTS-14568;So;0;L;;;;;N;;;;; 28BA;BRAILLE PATTERN DOTS-24568;So;0;L;;;;;N;;;;; 28BB;BRAILLE PATTERN DOTS-124568;So;0;L;;;;;N;;;;; 28BC;BRAILLE PATTERN DOTS-34568;So;0;L;;;;;N;;;;; 28BD;BRAILLE PATTERN DOTS-134568;So;0;L;;;;;N;;;;; 28BE;BRAILLE PATTERN DOTS-234568;So;0;L;;;;;N;;;;; 28BF;BRAILLE PATTERN DOTS-1234568;So;0;L;;;;;N;;;;; 28C0;BRAILLE PATTERN DOTS-78;So;0;L;;;;;N;;;;; 28C1;BRAILLE PATTERN DOTS-178;So;0;L;;;;;N;;;;; 28C2;BRAILLE PATTERN DOTS-278;So;0;L;;;;;N;;;;; 28C3;BRAILLE PATTERN DOTS-1278;So;0;L;;;;;N;;;;; 28C4;BRAILLE PATTERN DOTS-378;So;0;L;;;;;N;;;;; 28C5;BRAILLE PATTERN DOTS-1378;So;0;L;;;;;N;;;;; 28C6;BRAILLE PATTERN DOTS-2378;So;0;L;;;;;N;;;;; 28C7;BRAILLE PATTERN DOTS-12378;So;0;L;;;;;N;;;;; 28C8;BRAILLE PATTERN DOTS-478;So;0;L;;;;;N;;;;; 28C9;BRAILLE PATTERN DOTS-1478;So;0;L;;;;;N;;;;; 28CA;BRAILLE PATTERN DOTS-2478;So;0;L;;;;;N;;;;; 28CB;BRAILLE PATTERN DOTS-12478;So;0;L;;;;;N;;;;; 28CC;BRAILLE PATTERN DOTS-3478;So;0;L;;;;;N;;;;; 28CD;BRAILLE PATTERN DOTS-13478;So;0;L;;;;;N;;;;; 28CE;BRAILLE PATTERN DOTS-23478;So;0;L;;;;;N;;;;; 28CF;BRAILLE PATTERN DOTS-123478;So;0;L;;;;;N;;;;; 28D0;BRAILLE PATTERN DOTS-578;So;0;L;;;;;N;;;;; 28D1;BRAILLE PATTERN DOTS-1578;So;0;L;;;;;N;;;;; 28D2;BRAILLE PATTERN DOTS-2578;So;0;L;;;;;N;;;;; 28D3;BRAILLE PATTERN DOTS-12578;So;0;L;;;;;N;;;;; 28D4;BRAILLE PATTERN DOTS-3578;So;0;L;;;;;N;;;;; 28D5;BRAILLE PATTERN DOTS-13578;So;0;L;;;;;N;;;;; 28D6;BRAILLE PATTERN DOTS-23578;So;0;L;;;;;N;;;;; 28D7;BRAILLE PATTERN DOTS-123578;So;0;L;;;;;N;;;;; 28D8;BRAILLE PATTERN DOTS-4578;So;0;L;;;;;N;;;;; 28D9;BRAILLE PATTERN DOTS-14578;So;0;L;;;;;N;;;;; 28DA;BRAILLE PATTERN DOTS-24578;So;0;L;;;;;N;;;;; 28DB;BRAILLE PATTERN DOTS-124578;So;0;L;;;;;N;;;;; 28DC;BRAILLE PATTERN DOTS-34578;So;0;L;;;;;N;;;;; 28DD;BRAILLE PATTERN DOTS-134578;So;0;L;;;;;N;;;;; 28DE;BRAILLE PATTERN DOTS-234578;So;0;L;;;;;N;;;;; 28DF;BRAILLE PATTERN DOTS-1234578;So;0;L;;;;;N;;;;; 28E0;BRAILLE PATTERN DOTS-678;So;0;L;;;;;N;;;;; 28E1;BRAILLE PATTERN DOTS-1678;So;0;L;;;;;N;;;;; 28E2;BRAILLE PATTERN DOTS-2678;So;0;L;;;;;N;;;;; 28E3;BRAILLE PATTERN DOTS-12678;So;0;L;;;;;N;;;;; 28E4;BRAILLE PATTERN DOTS-3678;So;0;L;;;;;N;;;;; 28E5;BRAILLE PATTERN DOTS-13678;So;0;L;;;;;N;;;;; 28E6;BRAILLE PATTERN DOTS-23678;So;0;L;;;;;N;;;;; 28E7;BRAILLE PATTERN DOTS-123678;So;0;L;;;;;N;;;;; 28E8;BRAILLE PATTERN DOTS-4678;So;0;L;;;;;N;;;;; 28E9;BRAILLE PATTERN DOTS-14678;So;0;L;;;;;N;;;;; 28EA;BRAILLE PATTERN DOTS-24678;So;0;L;;;;;N;;;;; 28EB;BRAILLE PATTERN DOTS-124678;So;0;L;;;;;N;;;;; 28EC;BRAILLE PATTERN DOTS-34678;So;0;L;;;;;N;;;;; 28ED;BRAILLE PATTERN DOTS-134678;So;0;L;;;;;N;;;;; 28EE;BRAILLE PATTERN DOTS-234678;So;0;L;;;;;N;;;;; 28EF;BRAILLE PATTERN DOTS-1234678;So;0;L;;;;;N;;;;; 28F0;BRAILLE PATTERN DOTS-5678;So;0;L;;;;;N;;;;; 28F1;BRAILLE PATTERN DOTS-15678;So;0;L;;;;;N;;;;; 28F2;BRAILLE PATTERN DOTS-25678;So;0;L;;;;;N;;;;; 28F3;BRAILLE PATTERN DOTS-125678;So;0;L;;;;;N;;;;; 28F4;BRAILLE PATTERN DOTS-35678;So;0;L;;;;;N;;;;; 28F5;BRAILLE PATTERN DOTS-135678;So;0;L;;;;;N;;;;; 28F6;BRAILLE PATTERN DOTS-235678;So;0;L;;;;;N;;;;; 28F7;BRAILLE PATTERN DOTS-1235678;So;0;L;;;;;N;;;;; 28F8;BRAILLE PATTERN DOTS-45678;So;0;L;;;;;N;;;;; 28F9;BRAILLE PATTERN DOTS-145678;So;0;L;;;;;N;;;;; 28FA;BRAILLE PATTERN DOTS-245678;So;0;L;;;;;N;;;;; 28FB;BRAILLE PATTERN DOTS-1245678;So;0;L;;;;;N;;;;; 28FC;BRAILLE PATTERN DOTS-345678;So;0;L;;;;;N;;;;; 28FD;BRAILLE PATTERN DOTS-1345678;So;0;L;;;;;N;;;;; 28FE;BRAILLE PATTERN DOTS-2345678;So;0;L;;;;;N;;;;; 28FF;BRAILLE PATTERN DOTS-12345678;So;0;L;;;;;N;;;;; 2900;RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 2901;RIGHTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 2902;LEFTWARDS DOUBLE ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 2903;RIGHTWARDS DOUBLE ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 2904;LEFT RIGHT DOUBLE ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 2905;RIGHTWARDS TWO-HEADED ARROW FROM BAR;Sm;0;ON;;;;;N;;;;; 2906;LEFTWARDS DOUBLE ARROW FROM BAR;Sm;0;ON;;;;;N;;;;; 2907;RIGHTWARDS DOUBLE ARROW FROM BAR;Sm;0;ON;;;;;N;;;;; 2908;DOWNWARDS ARROW WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;; 2909;UPWARDS ARROW WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;; 290A;UPWARDS TRIPLE ARROW;Sm;0;ON;;;;;N;;;;; 290B;DOWNWARDS TRIPLE ARROW;Sm;0;ON;;;;;N;;;;; 290C;LEFTWARDS DOUBLE DASH ARROW;Sm;0;ON;;;;;N;;;;; 290D;RIGHTWARDS DOUBLE DASH ARROW;Sm;0;ON;;;;;N;;;;; 290E;LEFTWARDS TRIPLE DASH ARROW;Sm;0;ON;;;;;N;;;;; 290F;RIGHTWARDS TRIPLE DASH ARROW;Sm;0;ON;;;;;N;;;;; 2910;RIGHTWARDS TWO-HEADED TRIPLE DASH ARROW;Sm;0;ON;;;;;N;;;;; 2911;RIGHTWARDS ARROW WITH DOTTED STEM;Sm;0;ON;;;;;N;;;;; 2912;UPWARDS ARROW TO BAR;Sm;0;ON;;;;;N;;;;; 2913;DOWNWARDS ARROW TO BAR;Sm;0;ON;;;;;N;;;;; 2914;RIGHTWARDS ARROW WITH TAIL WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 2915;RIGHTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 2916;RIGHTWARDS TWO-HEADED ARROW WITH TAIL;Sm;0;ON;;;;;N;;;;; 2917;RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 2918;RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 2919;LEFTWARDS ARROW-TAIL;Sm;0;ON;;;;;N;;;;; 291A;RIGHTWARDS ARROW-TAIL;Sm;0;ON;;;;;N;;;;; 291B;LEFTWARDS DOUBLE ARROW-TAIL;Sm;0;ON;;;;;N;;;;; 291C;RIGHTWARDS DOUBLE ARROW-TAIL;Sm;0;ON;;;;;N;;;;; 291D;LEFTWARDS ARROW TO BLACK DIAMOND;Sm;0;ON;;;;;N;;;;; 291E;RIGHTWARDS ARROW TO BLACK DIAMOND;Sm;0;ON;;;;;N;;;;; 291F;LEFTWARDS ARROW FROM BAR TO BLACK DIAMOND;Sm;0;ON;;;;;N;;;;; 2920;RIGHTWARDS ARROW FROM BAR TO BLACK DIAMOND;Sm;0;ON;;;;;N;;;;; 2921;NORTH WEST AND SOUTH EAST ARROW;Sm;0;ON;;;;;N;;;;; 2922;NORTH EAST AND SOUTH WEST ARROW;Sm;0;ON;;;;;N;;;;; 2923;NORTH WEST ARROW WITH HOOK;Sm;0;ON;;;;;N;;;;; 2924;NORTH EAST ARROW WITH HOOK;Sm;0;ON;;;;;N;;;;; 2925;SOUTH EAST ARROW WITH HOOK;Sm;0;ON;;;;;N;;;;; 2926;SOUTH WEST ARROW WITH HOOK;Sm;0;ON;;;;;N;;;;; 2927;NORTH WEST ARROW AND NORTH EAST ARROW;Sm;0;ON;;;;;N;;;;; 2928;NORTH EAST ARROW AND SOUTH EAST ARROW;Sm;0;ON;;;;;N;;;;; 2929;SOUTH EAST ARROW AND SOUTH WEST ARROW;Sm;0;ON;;;;;N;;;;; 292A;SOUTH WEST ARROW AND NORTH WEST ARROW;Sm;0;ON;;;;;N;;;;; 292B;RISING DIAGONAL CROSSING FALLING DIAGONAL;Sm;0;ON;;;;;N;;;;; 292C;FALLING DIAGONAL CROSSING RISING DIAGONAL;Sm;0;ON;;;;;N;;;;; 292D;SOUTH EAST ARROW CROSSING NORTH EAST ARROW;Sm;0;ON;;;;;N;;;;; 292E;NORTH EAST ARROW CROSSING SOUTH EAST ARROW;Sm;0;ON;;;;;N;;;;; 292F;FALLING DIAGONAL CROSSING NORTH EAST ARROW;Sm;0;ON;;;;;N;;;;; 2930;RISING DIAGONAL CROSSING SOUTH EAST ARROW;Sm;0;ON;;;;;N;;;;; 2931;NORTH EAST ARROW CROSSING NORTH WEST ARROW;Sm;0;ON;;;;;N;;;;; 2932;NORTH WEST ARROW CROSSING NORTH EAST ARROW;Sm;0;ON;;;;;N;;;;; 2933;WAVE ARROW POINTING DIRECTLY RIGHT;Sm;0;ON;;;;;N;;;;; 2934;ARROW POINTING RIGHTWARDS THEN CURVING UPWARDS;Sm;0;ON;;;;;N;;;;; 2935;ARROW POINTING RIGHTWARDS THEN CURVING DOWNWARDS;Sm;0;ON;;;;;N;;;;; 2936;ARROW POINTING DOWNWARDS THEN CURVING LEFTWARDS;Sm;0;ON;;;;;N;;;;; 2937;ARROW POINTING DOWNWARDS THEN CURVING RIGHTWARDS;Sm;0;ON;;;;;N;;;;; 2938;RIGHT-SIDE ARC CLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;; 2939;LEFT-SIDE ARC ANTICLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;; 293A;TOP ARC ANTICLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;; 293B;BOTTOM ARC ANTICLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;; 293C;TOP ARC CLOCKWISE ARROW WITH MINUS;Sm;0;ON;;;;;N;;;;; 293D;TOP ARC ANTICLOCKWISE ARROW WITH PLUS;Sm;0;ON;;;;;N;;;;; 293E;LOWER RIGHT SEMICIRCULAR CLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;; 293F;LOWER LEFT SEMICIRCULAR ANTICLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;; 2940;ANTICLOCKWISE CLOSED CIRCLE ARROW;Sm;0;ON;;;;;N;;;;; 2941;CLOCKWISE CLOSED CIRCLE ARROW;Sm;0;ON;;;;;N;;;;; 2942;RIGHTWARDS ARROW ABOVE SHORT LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;; 2943;LEFTWARDS ARROW ABOVE SHORT RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;; 2944;SHORT RIGHTWARDS ARROW ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;; 2945;RIGHTWARDS ARROW WITH PLUS BELOW;Sm;0;ON;;;;;N;;;;; 2946;LEFTWARDS ARROW WITH PLUS BELOW;Sm;0;ON;;;;;N;;;;; 2947;RIGHTWARDS ARROW THROUGH X;Sm;0;ON;;;;;N;;;;; 2948;LEFT RIGHT ARROW THROUGH SMALL CIRCLE;Sm;0;ON;;;;;N;;;;; 2949;UPWARDS TWO-HEADED ARROW FROM SMALL CIRCLE;Sm;0;ON;;;;;N;;;;; 294A;LEFT BARB UP RIGHT BARB DOWN HARPOON;Sm;0;ON;;;;;N;;;;; 294B;LEFT BARB DOWN RIGHT BARB UP HARPOON;Sm;0;ON;;;;;N;;;;; 294C;UP BARB RIGHT DOWN BARB LEFT HARPOON;Sm;0;ON;;;;;N;;;;; 294D;UP BARB LEFT DOWN BARB RIGHT HARPOON;Sm;0;ON;;;;;N;;;;; 294E;LEFT BARB UP RIGHT BARB UP HARPOON;Sm;0;ON;;;;;N;;;;; 294F;UP BARB RIGHT DOWN BARB RIGHT HARPOON;Sm;0;ON;;;;;N;;;;; 2950;LEFT BARB DOWN RIGHT BARB DOWN HARPOON;Sm;0;ON;;;;;N;;;;; 2951;UP BARB LEFT DOWN BARB LEFT HARPOON;Sm;0;ON;;;;;N;;;;; 2952;LEFTWARDS HARPOON WITH BARB UP TO BAR;Sm;0;ON;;;;;N;;;;; 2953;RIGHTWARDS HARPOON WITH BARB UP TO BAR;Sm;0;ON;;;;;N;;;;; 2954;UPWARDS HARPOON WITH BARB RIGHT TO BAR;Sm;0;ON;;;;;N;;;;; 2955;DOWNWARDS HARPOON WITH BARB RIGHT TO BAR;Sm;0;ON;;;;;N;;;;; 2956;LEFTWARDS HARPOON WITH BARB DOWN TO BAR;Sm;0;ON;;;;;N;;;;; 2957;RIGHTWARDS HARPOON WITH BARB DOWN TO BAR;Sm;0;ON;;;;;N;;;;; 2958;UPWARDS HARPOON WITH BARB LEFT TO BAR;Sm;0;ON;;;;;N;;;;; 2959;DOWNWARDS HARPOON WITH BARB LEFT TO BAR;Sm;0;ON;;;;;N;;;;; 295A;LEFTWARDS HARPOON WITH BARB UP FROM BAR;Sm;0;ON;;;;;N;;;;; 295B;RIGHTWARDS HARPOON WITH BARB UP FROM BAR;Sm;0;ON;;;;;N;;;;; 295C;UPWARDS HARPOON WITH BARB RIGHT FROM BAR;Sm;0;ON;;;;;N;;;;; 295D;DOWNWARDS HARPOON WITH BARB RIGHT FROM BAR;Sm;0;ON;;;;;N;;;;; 295E;LEFTWARDS HARPOON WITH BARB DOWN FROM BAR;Sm;0;ON;;;;;N;;;;; 295F;RIGHTWARDS HARPOON WITH BARB DOWN FROM BAR;Sm;0;ON;;;;;N;;;;; 2960;UPWARDS HARPOON WITH BARB LEFT FROM BAR;Sm;0;ON;;;;;N;;;;; 2961;DOWNWARDS HARPOON WITH BARB LEFT FROM BAR;Sm;0;ON;;;;;N;;;;; 2962;LEFTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB DOWN;Sm;0;ON;;;;;N;;;;; 2963;UPWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT;Sm;0;ON;;;;;N;;;;; 2964;RIGHTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB DOWN;Sm;0;ON;;;;;N;;;;; 2965;DOWNWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT;Sm;0;ON;;;;;N;;;;; 2966;LEFTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB UP;Sm;0;ON;;;;;N;;;;; 2967;LEFTWARDS HARPOON WITH BARB DOWN ABOVE RIGHTWARDS HARPOON WITH BARB DOWN;Sm;0;ON;;;;;N;;;;; 2968;RIGHTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB UP;Sm;0;ON;;;;;N;;;;; 2969;RIGHTWARDS HARPOON WITH BARB DOWN ABOVE LEFTWARDS HARPOON WITH BARB DOWN;Sm;0;ON;;;;;N;;;;; 296A;LEFTWARDS HARPOON WITH BARB UP ABOVE LONG DASH;Sm;0;ON;;;;;N;;;;; 296B;LEFTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH;Sm;0;ON;;;;;N;;;;; 296C;RIGHTWARDS HARPOON WITH BARB UP ABOVE LONG DASH;Sm;0;ON;;;;;N;;;;; 296D;RIGHTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH;Sm;0;ON;;;;;N;;;;; 296E;UPWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT;Sm;0;ON;;;;;N;;;;; 296F;DOWNWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT;Sm;0;ON;;;;;N;;;;; 2970;RIGHT DOUBLE ARROW WITH ROUNDED HEAD;Sm;0;ON;;;;;N;;;;; 2971;EQUALS SIGN ABOVE RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;; 2972;TILDE OPERATOR ABOVE RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;; 2973;LEFTWARDS ARROW ABOVE TILDE OPERATOR;Sm;0;ON;;;;;N;;;;; 2974;RIGHTWARDS ARROW ABOVE TILDE OPERATOR;Sm;0;ON;;;;;N;;;;; 2975;RIGHTWARDS ARROW ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;N;;;;; 2976;LESS-THAN ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;; 2977;LEFTWARDS ARROW THROUGH LESS-THAN;Sm;0;ON;;;;;N;;;;; 2978;GREATER-THAN ABOVE RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;; 2979;SUBSET ABOVE RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;; 297A;LEFTWARDS ARROW THROUGH SUBSET;Sm;0;ON;;;;;N;;;;; 297B;SUPERSET ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;; 297C;LEFT FISH TAIL;Sm;0;ON;;;;;N;;;;; 297D;RIGHT FISH TAIL;Sm;0;ON;;;;;N;;;;; 297E;UP FISH TAIL;Sm;0;ON;;;;;N;;;;; 297F;DOWN FISH TAIL;Sm;0;ON;;;;;N;;;;; 2980;TRIPLE VERTICAL BAR DELIMITER;Sm;0;ON;;;;;N;;;;; 2981;Z NOTATION SPOT;Sm;0;ON;;;;;N;;;;; 2982;Z NOTATION TYPE COLON;Sm;0;ON;;;;;N;;;;; 2983;LEFT WHITE CURLY BRACKET;Ps;0;ON;;;;;Y;;;;; 2984;RIGHT WHITE CURLY BRACKET;Pe;0;ON;;;;;Y;;;;; 2985;LEFT WHITE PARENTHESIS;Ps;0;ON;;;;;Y;;;;; 2986;RIGHT WHITE PARENTHESIS;Pe;0;ON;;;;;Y;;;;; 2987;Z NOTATION LEFT IMAGE BRACKET;Ps;0;ON;;;;;Y;;;;; 2988;Z NOTATION RIGHT IMAGE BRACKET;Pe;0;ON;;;;;Y;;;;; 2989;Z NOTATION LEFT BINDING BRACKET;Ps;0;ON;;;;;Y;;;;; 298A;Z NOTATION RIGHT BINDING BRACKET;Pe;0;ON;;;;;Y;;;;; 298B;LEFT SQUARE BRACKET WITH UNDERBAR;Ps;0;ON;;;;;Y;;;;; 298C;RIGHT SQUARE BRACKET WITH UNDERBAR;Pe;0;ON;;;;;Y;;;;; 298D;LEFT SQUARE BRACKET WITH TICK IN TOP CORNER;Ps;0;ON;;;;;Y;;;;; 298E;RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER;Pe;0;ON;;;;;Y;;;;; 298F;LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER;Ps;0;ON;;;;;Y;;;;; 2990;RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER;Pe;0;ON;;;;;Y;;;;; 2991;LEFT ANGLE BRACKET WITH DOT;Ps;0;ON;;;;;Y;;;;; 2992;RIGHT ANGLE BRACKET WITH DOT;Pe;0;ON;;;;;Y;;;;; 2993;LEFT ARC LESS-THAN BRACKET;Ps;0;ON;;;;;Y;;;;; 2994;RIGHT ARC GREATER-THAN BRACKET;Pe;0;ON;;;;;Y;;;;; 2995;DOUBLE LEFT ARC GREATER-THAN BRACKET;Ps;0;ON;;;;;Y;;;;; 2996;DOUBLE RIGHT ARC LESS-THAN BRACKET;Pe;0;ON;;;;;Y;;;;; 2997;LEFT BLACK TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;;;;; 2998;RIGHT BLACK TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;;;;; 2999;DOTTED FENCE;Sm;0;ON;;;;;N;;;;; 299A;VERTICAL ZIGZAG LINE;Sm;0;ON;;;;;N;;;;; 299B;MEASURED ANGLE OPENING LEFT;Sm;0;ON;;;;;Y;;;;; 299C;RIGHT ANGLE VARIANT WITH SQUARE;Sm;0;ON;;;;;Y;;;;; 299D;MEASURED RIGHT ANGLE WITH DOT;Sm;0;ON;;;;;Y;;;;; 299E;ANGLE WITH S INSIDE;Sm;0;ON;;;;;Y;;;;; 299F;ACUTE ANGLE;Sm;0;ON;;;;;Y;;;;; 29A0;SPHERICAL ANGLE OPENING LEFT;Sm;0;ON;;;;;Y;;;;; 29A1;SPHERICAL ANGLE OPENING UP;Sm;0;ON;;;;;N;;;;; 29A2;TURNED ANGLE;Sm;0;ON;;;;;Y;;;;; 29A3;REVERSED ANGLE;Sm;0;ON;;;;;Y;;;;; 29A4;ANGLE WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;; 29A5;REVERSED ANGLE WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;; 29A6;OBLIQUE ANGLE OPENING UP;Sm;0;ON;;;;;Y;;;;; 29A7;OBLIQUE ANGLE OPENING DOWN;Sm;0;ON;;;;;Y;;;;; 29A8;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND RIGHT;Sm;0;ON;;;;;Y;;;;; 29A9;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND LEFT;Sm;0;ON;;;;;Y;;;;; 29AA;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND RIGHT;Sm;0;ON;;;;;Y;;;;; 29AB;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND LEFT;Sm;0;ON;;;;;Y;;;;; 29AC;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND UP;Sm;0;ON;;;;;Y;;;;; 29AD;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND UP;Sm;0;ON;;;;;Y;;;;; 29AE;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND DOWN;Sm;0;ON;;;;;Y;;;;; 29AF;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND DOWN;Sm;0;ON;;;;;Y;;;;; 29B0;REVERSED EMPTY SET;Sm;0;ON;;;;;N;;;;; 29B1;EMPTY SET WITH OVERBAR;Sm;0;ON;;;;;N;;;;; 29B2;EMPTY SET WITH SMALL CIRCLE ABOVE;Sm;0;ON;;;;;N;;;;; 29B3;EMPTY SET WITH RIGHT ARROW ABOVE;Sm;0;ON;;;;;N;;;;; 29B4;EMPTY SET WITH LEFT ARROW ABOVE;Sm;0;ON;;;;;N;;;;; 29B5;CIRCLE WITH HORIZONTAL BAR;Sm;0;ON;;;;;N;;;;; 29B6;CIRCLED VERTICAL BAR;Sm;0;ON;;;;;N;;;;; 29B7;CIRCLED PARALLEL;Sm;0;ON;;;;;N;;;;; 29B8;CIRCLED REVERSE SOLIDUS;Sm;0;ON;;;;;Y;;;;; 29B9;CIRCLED PERPENDICULAR;Sm;0;ON;;;;;N;;;;; 29BA;CIRCLE DIVIDED BY HORIZONTAL BAR AND TOP HALF DIVIDED BY VERTICAL BAR;Sm;0;ON;;;;;N;;;;; 29BB;CIRCLE WITH SUPERIMPOSED X;Sm;0;ON;;;;;N;;;;; 29BC;CIRCLED ANTICLOCKWISE-ROTATED DIVISION SIGN;Sm;0;ON;;;;;N;;;;; 29BD;UP ARROW THROUGH CIRCLE;Sm;0;ON;;;;;N;;;;; 29BE;CIRCLED WHITE BULLET;Sm;0;ON;;;;;N;;;;; 29BF;CIRCLED BULLET;Sm;0;ON;;;;;N;;;;; 29C0;CIRCLED LESS-THAN;Sm;0;ON;;;;;Y;;;;; 29C1;CIRCLED GREATER-THAN;Sm;0;ON;;;;;Y;;;;; 29C2;CIRCLE WITH SMALL CIRCLE TO THE RIGHT;Sm;0;ON;;;;;Y;;;;; 29C3;CIRCLE WITH TWO HORIZONTAL STROKES TO THE RIGHT;Sm;0;ON;;;;;Y;;;;; 29C4;SQUARED RISING DIAGONAL SLASH;Sm;0;ON;;;;;Y;;;;; 29C5;SQUARED FALLING DIAGONAL SLASH;Sm;0;ON;;;;;Y;;;;; 29C6;SQUARED ASTERISK;Sm;0;ON;;;;;N;;;;; 29C7;SQUARED SMALL CIRCLE;Sm;0;ON;;;;;N;;;;; 29C8;SQUARED SQUARE;Sm;0;ON;;;;;N;;;;; 29C9;TWO JOINED SQUARES;Sm;0;ON;;;;;Y;;;;; 29CA;TRIANGLE WITH DOT ABOVE;Sm;0;ON;;;;;N;;;;; 29CB;TRIANGLE WITH UNDERBAR;Sm;0;ON;;;;;N;;;;; 29CC;S IN TRIANGLE;Sm;0;ON;;;;;N;;;;; 29CD;TRIANGLE WITH SERIFS AT BOTTOM;Sm;0;ON;;;;;N;;;;; 29CE;RIGHT TRIANGLE ABOVE LEFT TRIANGLE;Sm;0;ON;;;;;Y;;;;; 29CF;LEFT TRIANGLE BESIDE VERTICAL BAR;Sm;0;ON;;;;;Y;;;;; 29D0;VERTICAL BAR BESIDE RIGHT TRIANGLE;Sm;0;ON;;;;;Y;;;;; 29D1;BOWTIE WITH LEFT HALF BLACK;Sm;0;ON;;;;;Y;;;;; 29D2;BOWTIE WITH RIGHT HALF BLACK;Sm;0;ON;;;;;Y;;;;; 29D3;BLACK BOWTIE;Sm;0;ON;;;;;N;;;;; 29D4;TIMES WITH LEFT HALF BLACK;Sm;0;ON;;;;;Y;;;;; 29D5;TIMES WITH RIGHT HALF BLACK;Sm;0;ON;;;;;Y;;;;; 29D6;WHITE HOURGLASS;Sm;0;ON;;;;;N;;;;; 29D7;BLACK HOURGLASS;Sm;0;ON;;;;;N;;;;; 29D8;LEFT WIGGLY FENCE;Ps;0;ON;;;;;Y;;;;; 29D9;RIGHT WIGGLY FENCE;Pe;0;ON;;;;;Y;;;;; 29DA;LEFT DOUBLE WIGGLY FENCE;Ps;0;ON;;;;;Y;;;;; 29DB;RIGHT DOUBLE WIGGLY FENCE;Pe;0;ON;;;;;Y;;;;; 29DC;INCOMPLETE INFINITY;Sm;0;ON;;;;;Y;;;;; 29DD;TIE OVER INFINITY;Sm;0;ON;;;;;N;;;;; 29DE;INFINITY NEGATED WITH VERTICAL BAR;Sm;0;ON;;;;;N;;;;; 29DF;DOUBLE-ENDED MULTIMAP;Sm;0;ON;;;;;N;;;;; 29E0;SQUARE WITH CONTOURED OUTLINE;Sm;0;ON;;;;;N;;;;; 29E1;INCREASES AS;Sm;0;ON;;;;;Y;;;;; 29E2;SHUFFLE PRODUCT;Sm;0;ON;;;;;N;;;;; 29E3;EQUALS SIGN AND SLANTED PARALLEL;Sm;0;ON;;;;;Y;;;;; 29E4;EQUALS SIGN AND SLANTED PARALLEL WITH TILDE ABOVE;Sm;0;ON;;;;;Y;;;;; 29E5;IDENTICAL TO AND SLANTED PARALLEL;Sm;0;ON;;;;;Y;;;;; 29E6;GLEICH STARK;Sm;0;ON;;;;;N;;;;; 29E7;THERMODYNAMIC;Sm;0;ON;;;;;N;;;;; 29E8;DOWN-POINTING TRIANGLE WITH LEFT HALF BLACK;Sm;0;ON;;;;;Y;;;;; 29E9;DOWN-POINTING TRIANGLE WITH RIGHT HALF BLACK;Sm;0;ON;;;;;Y;;;;; 29EA;BLACK DIAMOND WITH DOWN ARROW;Sm;0;ON;;;;;N;;;;; 29EB;BLACK LOZENGE;Sm;0;ON;;;;;N;;;;; 29EC;WHITE CIRCLE WITH DOWN ARROW;Sm;0;ON;;;;;N;;;;; 29ED;BLACK CIRCLE WITH DOWN ARROW;Sm;0;ON;;;;;N;;;;; 29EE;ERROR-BARRED WHITE SQUARE;Sm;0;ON;;;;;N;;;;; 29EF;ERROR-BARRED BLACK SQUARE;Sm;0;ON;;;;;N;;;;; 29F0;ERROR-BARRED WHITE DIAMOND;Sm;0;ON;;;;;N;;;;; 29F1;ERROR-BARRED BLACK DIAMOND;Sm;0;ON;;;;;N;;;;; 29F2;ERROR-BARRED WHITE CIRCLE;Sm;0;ON;;;;;N;;;;; 29F3;ERROR-BARRED BLACK CIRCLE;Sm;0;ON;;;;;N;;;;; 29F4;RULE-DELAYED;Sm;0;ON;;;;;Y;;;;; 29F5;REVERSE SOLIDUS OPERATOR;Sm;0;ON;;;;;Y;;;;; 29F6;SOLIDUS WITH OVERBAR;Sm;0;ON;;;;;Y;;;;; 29F7;REVERSE SOLIDUS WITH HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;; 29F8;BIG SOLIDUS;Sm;0;ON;;;;;Y;;;;; 29F9;BIG REVERSE SOLIDUS;Sm;0;ON;;;;;Y;;;;; 29FA;DOUBLE PLUS;Sm;0;ON;;;;;N;;;;; 29FB;TRIPLE PLUS;Sm;0;ON;;;;;N;;;;; 29FC;LEFT-POINTING CURVED ANGLE BRACKET;Ps;0;ON;;;;;Y;;;;; 29FD;RIGHT-POINTING CURVED ANGLE BRACKET;Pe;0;ON;;;;;Y;;;;; 29FE;TINY;Sm;0;ON;;;;;N;;;;; 29FF;MINY;Sm;0;ON;;;;;N;;;;; 2A00;N-ARY CIRCLED DOT OPERATOR;Sm;0;ON;;;;;N;;;;; 2A01;N-ARY CIRCLED PLUS OPERATOR;Sm;0;ON;;;;;N;;;;; 2A02;N-ARY CIRCLED TIMES OPERATOR;Sm;0;ON;;;;;N;;;;; 2A03;N-ARY UNION OPERATOR WITH DOT;Sm;0;ON;;;;;N;;;;; 2A04;N-ARY UNION OPERATOR WITH PLUS;Sm;0;ON;;;;;N;;;;; 2A05;N-ARY SQUARE INTERSECTION OPERATOR;Sm;0;ON;;;;;N;;;;; 2A06;N-ARY SQUARE UNION OPERATOR;Sm;0;ON;;;;;N;;;;; 2A07;TWO LOGICAL AND OPERATOR;Sm;0;ON;;;;;N;;;;; 2A08;TWO LOGICAL OR OPERATOR;Sm;0;ON;;;;;N;;;;; 2A09;N-ARY TIMES OPERATOR;Sm;0;ON;;;;;N;;;;; 2A0A;MODULO TWO SUM;Sm;0;ON;;;;;Y;;;;; 2A0B;SUMMATION WITH INTEGRAL;Sm;0;ON;;;;;Y;;;;; 2A0C;QUADRUPLE INTEGRAL OPERATOR;Sm;0;ON; 222B 222B 222B 222B;;;;Y;;;;; 2A0D;FINITE PART INTEGRAL;Sm;0;ON;;;;;Y;;;;; 2A0E;INTEGRAL WITH DOUBLE STROKE;Sm;0;ON;;;;;Y;;;;; 2A0F;INTEGRAL AVERAGE WITH SLASH;Sm;0;ON;;;;;Y;;;;; 2A10;CIRCULATION FUNCTION;Sm;0;ON;;;;;Y;;;;; 2A11;ANTICLOCKWISE INTEGRATION;Sm;0;ON;;;;;Y;;;;; 2A12;LINE INTEGRATION WITH RECTANGULAR PATH AROUND POLE;Sm;0;ON;;;;;Y;;;;; 2A13;LINE INTEGRATION WITH SEMICIRCULAR PATH AROUND POLE;Sm;0;ON;;;;;Y;;;;; 2A14;LINE INTEGRATION NOT INCLUDING THE POLE;Sm;0;ON;;;;;Y;;;;; 2A15;INTEGRAL AROUND A POINT OPERATOR;Sm;0;ON;;;;;Y;;;;; 2A16;QUATERNION INTEGRAL OPERATOR;Sm;0;ON;;;;;Y;;;;; 2A17;INTEGRAL WITH LEFTWARDS ARROW WITH HOOK;Sm;0;ON;;;;;Y;;;;; 2A18;INTEGRAL WITH TIMES SIGN;Sm;0;ON;;;;;Y;;;;; 2A19;INTEGRAL WITH INTERSECTION;Sm;0;ON;;;;;Y;;;;; 2A1A;INTEGRAL WITH UNION;Sm;0;ON;;;;;Y;;;;; 2A1B;INTEGRAL WITH OVERBAR;Sm;0;ON;;;;;Y;;;;; 2A1C;INTEGRAL WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;; 2A1D;JOIN;Sm;0;ON;;;;;N;;;;; 2A1E;LARGE LEFT TRIANGLE OPERATOR;Sm;0;ON;;;;;Y;;;;; 2A1F;Z NOTATION SCHEMA COMPOSITION;Sm;0;ON;;;;;Y;;;;; 2A20;Z NOTATION SCHEMA PIPING;Sm;0;ON;;;;;Y;;;;; 2A21;Z NOTATION SCHEMA PROJECTION;Sm;0;ON;;;;;Y;;;;; 2A22;PLUS SIGN WITH SMALL CIRCLE ABOVE;Sm;0;ON;;;;;N;;;;; 2A23;PLUS SIGN WITH CIRCUMFLEX ACCENT ABOVE;Sm;0;ON;;;;;N;;;;; 2A24;PLUS SIGN WITH TILDE ABOVE;Sm;0;ON;;;;;Y;;;;; 2A25;PLUS SIGN WITH DOT BELOW;Sm;0;ON;;;;;N;;;;; 2A26;PLUS SIGN WITH TILDE BELOW;Sm;0;ON;;;;;Y;;;;; 2A27;PLUS SIGN WITH SUBSCRIPT TWO;Sm;0;ON;;;;;N;;;;; 2A28;PLUS SIGN WITH BLACK TRIANGLE;Sm;0;ON;;;;;N;;;;; 2A29;MINUS SIGN WITH COMMA ABOVE;Sm;0;ON;;;;;Y;;;;; 2A2A;MINUS SIGN WITH DOT BELOW;Sm;0;ON;;;;;N;;;;; 2A2B;MINUS SIGN WITH FALLING DOTS;Sm;0;ON;;;;;Y;;;;; 2A2C;MINUS SIGN WITH RISING DOTS;Sm;0;ON;;;;;Y;;;;; 2A2D;PLUS SIGN IN LEFT HALF CIRCLE;Sm;0;ON;;;;;Y;;;;; 2A2E;PLUS SIGN IN RIGHT HALF CIRCLE;Sm;0;ON;;;;;Y;;;;; 2A2F;VECTOR OR CROSS PRODUCT;Sm;0;ON;;;;;N;;;;; 2A30;MULTIPLICATION SIGN WITH DOT ABOVE;Sm;0;ON;;;;;N;;;;; 2A31;MULTIPLICATION SIGN WITH UNDERBAR;Sm;0;ON;;;;;N;;;;; 2A32;SEMIDIRECT PRODUCT WITH BOTTOM CLOSED;Sm;0;ON;;;;;N;;;;; 2A33;SMASH PRODUCT;Sm;0;ON;;;;;N;;;;; 2A34;MULTIPLICATION SIGN IN LEFT HALF CIRCLE;Sm;0;ON;;;;;Y;;;;; 2A35;MULTIPLICATION SIGN IN RIGHT HALF CIRCLE;Sm;0;ON;;;;;Y;;;;; 2A36;CIRCLED MULTIPLICATION SIGN WITH CIRCUMFLEX ACCENT;Sm;0;ON;;;;;N;;;;; 2A37;MULTIPLICATION SIGN IN DOUBLE CIRCLE;Sm;0;ON;;;;;N;;;;; 2A38;CIRCLED DIVISION SIGN;Sm;0;ON;;;;;N;;;;; 2A39;PLUS SIGN IN TRIANGLE;Sm;0;ON;;;;;N;;;;; 2A3A;MINUS SIGN IN TRIANGLE;Sm;0;ON;;;;;N;;;;; 2A3B;MULTIPLICATION SIGN IN TRIANGLE;Sm;0;ON;;;;;N;;;;; 2A3C;INTERIOR PRODUCT;Sm;0;ON;;;;;Y;;;;; 2A3D;RIGHTHAND INTERIOR PRODUCT;Sm;0;ON;;;;;Y;;;;; 2A3E;Z NOTATION RELATIONAL COMPOSITION;Sm;0;ON;;;;;Y;;;;; 2A3F;AMALGAMATION OR COPRODUCT;Sm;0;ON;;;;;N;;;;; 2A40;INTERSECTION WITH DOT;Sm;0;ON;;;;;N;;;;; 2A41;UNION WITH MINUS SIGN;Sm;0;ON;;;;;N;;;;; 2A42;UNION WITH OVERBAR;Sm;0;ON;;;;;N;;;;; 2A43;INTERSECTION WITH OVERBAR;Sm;0;ON;;;;;N;;;;; 2A44;INTERSECTION WITH LOGICAL AND;Sm;0;ON;;;;;N;;;;; 2A45;UNION WITH LOGICAL OR;Sm;0;ON;;;;;N;;;;; 2A46;UNION ABOVE INTERSECTION;Sm;0;ON;;;;;N;;;;; 2A47;INTERSECTION ABOVE UNION;Sm;0;ON;;;;;N;;;;; 2A48;UNION ABOVE BAR ABOVE INTERSECTION;Sm;0;ON;;;;;N;;;;; 2A49;INTERSECTION ABOVE BAR ABOVE UNION;Sm;0;ON;;;;;N;;;;; 2A4A;UNION BESIDE AND JOINED WITH UNION;Sm;0;ON;;;;;N;;;;; 2A4B;INTERSECTION BESIDE AND JOINED WITH INTERSECTION;Sm;0;ON;;;;;N;;;;; 2A4C;CLOSED UNION WITH SERIFS;Sm;0;ON;;;;;N;;;;; 2A4D;CLOSED INTERSECTION WITH SERIFS;Sm;0;ON;;;;;N;;;;; 2A4E;DOUBLE SQUARE INTERSECTION;Sm;0;ON;;;;;N;;;;; 2A4F;DOUBLE SQUARE UNION;Sm;0;ON;;;;;N;;;;; 2A50;CLOSED UNION WITH SERIFS AND SMASH PRODUCT;Sm;0;ON;;;;;N;;;;; 2A51;LOGICAL AND WITH DOT ABOVE;Sm;0;ON;;;;;N;;;;; 2A52;LOGICAL OR WITH DOT ABOVE;Sm;0;ON;;;;;N;;;;; 2A53;DOUBLE LOGICAL AND;Sm;0;ON;;;;;N;;;;; 2A54;DOUBLE LOGICAL OR;Sm;0;ON;;;;;N;;;;; 2A55;TWO INTERSECTING LOGICAL AND;Sm;0;ON;;;;;N;;;;; 2A56;TWO INTERSECTING LOGICAL OR;Sm;0;ON;;;;;N;;;;; 2A57;SLOPING LARGE OR;Sm;0;ON;;;;;Y;;;;; 2A58;SLOPING LARGE AND;Sm;0;ON;;;;;Y;;;;; 2A59;LOGICAL OR OVERLAPPING LOGICAL AND;Sm;0;ON;;;;;N;;;;; 2A5A;LOGICAL AND WITH MIDDLE STEM;Sm;0;ON;;;;;N;;;;; 2A5B;LOGICAL OR WITH MIDDLE STEM;Sm;0;ON;;;;;N;;;;; 2A5C;LOGICAL AND WITH HORIZONTAL DASH;Sm;0;ON;;;;;N;;;;; 2A5D;LOGICAL OR WITH HORIZONTAL DASH;Sm;0;ON;;;;;N;;;;; 2A5E;LOGICAL AND WITH DOUBLE OVERBAR;Sm;0;ON;;;;;N;;;;; 2A5F;LOGICAL AND WITH UNDERBAR;Sm;0;ON;;;;;N;;;;; 2A60;LOGICAL AND WITH DOUBLE UNDERBAR;Sm;0;ON;;;;;N;;;;; 2A61;SMALL VEE WITH UNDERBAR;Sm;0;ON;;;;;N;;;;; 2A62;LOGICAL OR WITH DOUBLE OVERBAR;Sm;0;ON;;;;;N;;;;; 2A63;LOGICAL OR WITH DOUBLE UNDERBAR;Sm;0;ON;;;;;N;;;;; 2A64;Z NOTATION DOMAIN ANTIRESTRICTION;Sm;0;ON;;;;;Y;;;;; 2A65;Z NOTATION RANGE ANTIRESTRICTION;Sm;0;ON;;;;;Y;;;;; 2A66;EQUALS SIGN WITH DOT BELOW;Sm;0;ON;;;;;N;;;;; 2A67;IDENTICAL WITH DOT ABOVE;Sm;0;ON;;;;;N;;;;; 2A68;TRIPLE HORIZONTAL BAR WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 2A69;TRIPLE HORIZONTAL BAR WITH TRIPLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 2A6A;TILDE OPERATOR WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;; 2A6B;TILDE OPERATOR WITH RISING DOTS;Sm;0;ON;;;;;Y;;;;; 2A6C;SIMILAR MINUS SIMILAR;Sm;0;ON;;;;;Y;;;;; 2A6D;CONGRUENT WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;; 2A6E;EQUALS WITH ASTERISK;Sm;0;ON;;;;;N;;;;; 2A6F;ALMOST EQUAL TO WITH CIRCUMFLEX ACCENT;Sm;0;ON;;;;;Y;;;;; 2A70;APPROXIMATELY EQUAL OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2A71;EQUALS SIGN ABOVE PLUS SIGN;Sm;0;ON;;;;;N;;;;; 2A72;PLUS SIGN ABOVE EQUALS SIGN;Sm;0;ON;;;;;N;;;;; 2A73;EQUALS SIGN ABOVE TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;; 2A74;DOUBLE COLON EQUAL;Sm;0;ON; 003A 003A 003D;;;;Y;;;;; 2A75;TWO CONSECUTIVE EQUALS SIGNS;Sm;0;ON; 003D 003D;;;;N;;;;; 2A76;THREE CONSECUTIVE EQUALS SIGNS;Sm;0;ON; 003D 003D 003D;;;;N;;;;; 2A77;EQUALS SIGN WITH TWO DOTS ABOVE AND TWO DOTS BELOW;Sm;0;ON;;;;;N;;;;; 2A78;EQUIVALENT WITH FOUR DOTS ABOVE;Sm;0;ON;;;;;N;;;;; 2A79;LESS-THAN WITH CIRCLE INSIDE;Sm;0;ON;;;;;Y;;;;; 2A7A;GREATER-THAN WITH CIRCLE INSIDE;Sm;0;ON;;;;;Y;;;;; 2A7B;LESS-THAN WITH QUESTION MARK ABOVE;Sm;0;ON;;;;;Y;;;;; 2A7C;GREATER-THAN WITH QUESTION MARK ABOVE;Sm;0;ON;;;;;Y;;;;; 2A7D;LESS-THAN OR SLANTED EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2A7E;GREATER-THAN OR SLANTED EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2A7F;LESS-THAN OR SLANTED EQUAL TO WITH DOT INSIDE;Sm;0;ON;;;;;Y;;;;; 2A80;GREATER-THAN OR SLANTED EQUAL TO WITH DOT INSIDE;Sm;0;ON;;;;;Y;;;;; 2A81;LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;; 2A82;GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;; 2A83;LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE RIGHT;Sm;0;ON;;;;;Y;;;;; 2A84;GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE LEFT;Sm;0;ON;;;;;Y;;;;; 2A85;LESS-THAN OR APPROXIMATE;Sm;0;ON;;;;;Y;;;;; 2A86;GREATER-THAN OR APPROXIMATE;Sm;0;ON;;;;;Y;;;;; 2A87;LESS-THAN AND SINGLE-LINE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2A88;GREATER-THAN AND SINGLE-LINE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2A89;LESS-THAN AND NOT APPROXIMATE;Sm;0;ON;;;;;Y;;;;; 2A8A;GREATER-THAN AND NOT APPROXIMATE;Sm;0;ON;;;;;Y;;;;; 2A8B;LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER-THAN;Sm;0;ON;;;;;Y;;;;; 2A8C;GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THAN;Sm;0;ON;;;;;Y;;;;; 2A8D;LESS-THAN ABOVE SIMILAR OR EQUAL;Sm;0;ON;;;;;Y;;;;; 2A8E;GREATER-THAN ABOVE SIMILAR OR EQUAL;Sm;0;ON;;;;;Y;;;;; 2A8F;LESS-THAN ABOVE SIMILAR ABOVE GREATER-THAN;Sm;0;ON;;;;;Y;;;;; 2A90;GREATER-THAN ABOVE SIMILAR ABOVE LESS-THAN;Sm;0;ON;;;;;Y;;;;; 2A91;LESS-THAN ABOVE GREATER-THAN ABOVE DOUBLE-LINE EQUAL;Sm;0;ON;;;;;Y;;;;; 2A92;GREATER-THAN ABOVE LESS-THAN ABOVE DOUBLE-LINE EQUAL;Sm;0;ON;;;;;Y;;;;; 2A93;LESS-THAN ABOVE SLANTED EQUAL ABOVE GREATER-THAN ABOVE SLANTED EQUAL;Sm;0;ON;;;;;Y;;;;; 2A94;GREATER-THAN ABOVE SLANTED EQUAL ABOVE LESS-THAN ABOVE SLANTED EQUAL;Sm;0;ON;;;;;Y;;;;; 2A95;SLANTED EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;;;;; 2A96;SLANTED EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;;;;; 2A97;SLANTED EQUAL TO OR LESS-THAN WITH DOT INSIDE;Sm;0;ON;;;;;Y;;;;; 2A98;SLANTED EQUAL TO OR GREATER-THAN WITH DOT INSIDE;Sm;0;ON;;;;;Y;;;;; 2A99;DOUBLE-LINE EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;;;;; 2A9A;DOUBLE-LINE EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;;;;; 2A9B;DOUBLE-LINE SLANTED EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;;;;; 2A9C;DOUBLE-LINE SLANTED EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;;;;; 2A9D;SIMILAR OR LESS-THAN;Sm;0;ON;;;;;Y;;;;; 2A9E;SIMILAR OR GREATER-THAN;Sm;0;ON;;;;;Y;;;;; 2A9F;SIMILAR ABOVE LESS-THAN ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;; 2AA0;SIMILAR ABOVE GREATER-THAN ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;; 2AA1;DOUBLE NESTED LESS-THAN;Sm;0;ON;;;;;Y;;;;; 2AA2;DOUBLE NESTED GREATER-THAN;Sm;0;ON;;;;;Y;;;;; 2AA3;DOUBLE NESTED LESS-THAN WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;; 2AA4;GREATER-THAN OVERLAPPING LESS-THAN;Sm;0;ON;;;;;N;;;;; 2AA5;GREATER-THAN BESIDE LESS-THAN;Sm;0;ON;;;;;N;;;;; 2AA6;LESS-THAN CLOSED BY CURVE;Sm;0;ON;;;;;Y;;;;; 2AA7;GREATER-THAN CLOSED BY CURVE;Sm;0;ON;;;;;Y;;;;; 2AA8;LESS-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL;Sm;0;ON;;;;;Y;;;;; 2AA9;GREATER-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL;Sm;0;ON;;;;;Y;;;;; 2AAA;SMALLER THAN;Sm;0;ON;;;;;Y;;;;; 2AAB;LARGER THAN;Sm;0;ON;;;;;Y;;;;; 2AAC;SMALLER THAN OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2AAD;LARGER THAN OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2AAE;EQUALS SIGN WITH BUMPY ABOVE;Sm;0;ON;;;;;N;;;;; 2AAF;PRECEDES ABOVE SINGLE-LINE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;; 2AB0;SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;; 2AB1;PRECEDES ABOVE SINGLE-LINE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2AB2;SUCCEEDS ABOVE SINGLE-LINE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2AB3;PRECEDES ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;; 2AB4;SUCCEEDS ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;; 2AB5;PRECEDES ABOVE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2AB6;SUCCEEDS ABOVE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2AB7;PRECEDES ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2AB8;SUCCEEDS ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2AB9;PRECEDES ABOVE NOT ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2ABA;SUCCEEDS ABOVE NOT ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2ABB;DOUBLE PRECEDES;Sm;0;ON;;;;;Y;;;;; 2ABC;DOUBLE SUCCEEDS;Sm;0;ON;;;;;Y;;;;; 2ABD;SUBSET WITH DOT;Sm;0;ON;;;;;Y;;;;; 2ABE;SUPERSET WITH DOT;Sm;0;ON;;;;;Y;;;;; 2ABF;SUBSET WITH PLUS SIGN BELOW;Sm;0;ON;;;;;Y;;;;; 2AC0;SUPERSET WITH PLUS SIGN BELOW;Sm;0;ON;;;;;Y;;;;; 2AC1;SUBSET WITH MULTIPLICATION SIGN BELOW;Sm;0;ON;;;;;Y;;;;; 2AC2;SUPERSET WITH MULTIPLICATION SIGN BELOW;Sm;0;ON;;;;;Y;;;;; 2AC3;SUBSET OF OR EQUAL TO WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;; 2AC4;SUPERSET OF OR EQUAL TO WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;; 2AC5;SUBSET OF ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;; 2AC6;SUPERSET OF ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;; 2AC7;SUBSET OF ABOVE TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;; 2AC8;SUPERSET OF ABOVE TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;; 2AC9;SUBSET OF ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2ACA;SUPERSET OF ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2ACB;SUBSET OF ABOVE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2ACC;SUPERSET OF ABOVE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2ACD;SQUARE LEFT OPEN BOX OPERATOR;Sm;0;ON;;;;;Y;;;;; 2ACE;SQUARE RIGHT OPEN BOX OPERATOR;Sm;0;ON;;;;;Y;;;;; 2ACF;CLOSED SUBSET;Sm;0;ON;;;;;Y;;;;; 2AD0;CLOSED SUPERSET;Sm;0;ON;;;;;Y;;;;; 2AD1;CLOSED SUBSET OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2AD2;CLOSED SUPERSET OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2AD3;SUBSET ABOVE SUPERSET;Sm;0;ON;;;;;Y;;;;; 2AD4;SUPERSET ABOVE SUBSET;Sm;0;ON;;;;;Y;;;;; 2AD5;SUBSET ABOVE SUBSET;Sm;0;ON;;;;;Y;;;;; 2AD6;SUPERSET ABOVE SUPERSET;Sm;0;ON;;;;;Y;;;;; 2AD7;SUPERSET BESIDE SUBSET;Sm;0;ON;;;;;N;;;;; 2AD8;SUPERSET BESIDE AND JOINED BY DASH WITH SUBSET;Sm;0;ON;;;;;N;;;;; 2AD9;ELEMENT OF OPENING DOWNWARDS;Sm;0;ON;;;;;N;;;;; 2ADA;PITCHFORK WITH TEE TOP;Sm;0;ON;;;;;N;;;;; 2ADB;TRANSVERSAL INTERSECTION;Sm;0;ON;;;;;N;;;;; 2ADC;FORKING;Sm;0;ON;2ADD 0338;;;;Y;;;;; 2ADD;NONFORKING;Sm;0;ON;;;;;N;;;;; 2ADE;SHORT LEFT TACK;Sm;0;ON;;;;;Y;;;;; 2ADF;SHORT DOWN TACK;Sm;0;ON;;;;;N;;;;; 2AE0;SHORT UP TACK;Sm;0;ON;;;;;N;;;;; 2AE1;PERPENDICULAR WITH S;Sm;0;ON;;;;;N;;;;; 2AE2;VERTICAL BAR TRIPLE RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;; 2AE3;DOUBLE VERTICAL BAR LEFT TURNSTILE;Sm;0;ON;;;;;Y;;;;; 2AE4;VERTICAL BAR DOUBLE LEFT TURNSTILE;Sm;0;ON;;;;;Y;;;;; 2AE5;DOUBLE VERTICAL BAR DOUBLE LEFT TURNSTILE;Sm;0;ON;;;;;Y;;;;; 2AE6;LONG DASH FROM LEFT MEMBER OF DOUBLE VERTICAL;Sm;0;ON;;;;;Y;;;;; 2AE7;SHORT DOWN TACK WITH OVERBAR;Sm;0;ON;;;;;N;;;;; 2AE8;SHORT UP TACK WITH UNDERBAR;Sm;0;ON;;;;;N;;;;; 2AE9;SHORT UP TACK ABOVE SHORT DOWN TACK;Sm;0;ON;;;;;N;;;;; 2AEA;DOUBLE DOWN TACK;Sm;0;ON;;;;;N;;;;; 2AEB;DOUBLE UP TACK;Sm;0;ON;;;;;N;;;;; 2AEC;DOUBLE STROKE NOT SIGN;Sm;0;ON;;;;;Y;;;;; 2AED;REVERSED DOUBLE STROKE NOT SIGN;Sm;0;ON;;;;;Y;;;;; 2AEE;DOES NOT DIVIDE WITH REVERSED NEGATION SLASH;Sm;0;ON;;;;;Y;;;;; 2AEF;VERTICAL LINE WITH CIRCLE ABOVE;Sm;0;ON;;;;;N;;;;; 2AF0;VERTICAL LINE WITH CIRCLE BELOW;Sm;0;ON;;;;;N;;;;; 2AF1;DOWN TACK WITH CIRCLE BELOW;Sm;0;ON;;;;;N;;;;; 2AF2;PARALLEL WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;; 2AF3;PARALLEL WITH TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;; 2AF4;TRIPLE VERTICAL BAR BINARY RELATION;Sm;0;ON;;;;;N;;;;; 2AF5;TRIPLE VERTICAL BAR WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;; 2AF6;TRIPLE COLON OPERATOR;Sm;0;ON;;;;;N;;;;; 2AF7;TRIPLE NESTED LESS-THAN;Sm;0;ON;;;;;Y;;;;; 2AF8;TRIPLE NESTED GREATER-THAN;Sm;0;ON;;;;;Y;;;;; 2AF9;DOUBLE-LINE SLANTED LESS-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2AFA;DOUBLE-LINE SLANTED GREATER-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2AFB;TRIPLE SOLIDUS BINARY RELATION;Sm;0;ON;;;;;Y;;;;; 2AFC;LARGE TRIPLE VERTICAL BAR OPERATOR;Sm;0;ON;;;;;N;;;;; 2AFD;DOUBLE SOLIDUS OPERATOR;Sm;0;ON;;;;;Y;;;;; 2AFE;WHITE VERTICAL BAR;Sm;0;ON;;;;;N;;;;; 2AFF;N-ARY WHITE VERTICAL BAR;Sm;0;ON;;;;;N;;;;; 2B00;NORTH EAST WHITE ARROW;So;0;ON;;;;;N;;;;; 2B01;NORTH WEST WHITE ARROW;So;0;ON;;;;;N;;;;; 2B02;SOUTH EAST WHITE ARROW;So;0;ON;;;;;N;;;;; 2B03;SOUTH WEST WHITE ARROW;So;0;ON;;;;;N;;;;; 2B04;LEFT RIGHT WHITE ARROW;So;0;ON;;;;;N;;;;; 2B05;LEFTWARDS BLACK ARROW;So;0;ON;;;;;N;;;;; 2B06;UPWARDS BLACK ARROW;So;0;ON;;;;;N;;;;; 2B07;DOWNWARDS BLACK ARROW;So;0;ON;;;;;N;;;;; 2B08;NORTH EAST BLACK ARROW;So;0;ON;;;;;N;;;;; 2B09;NORTH WEST BLACK ARROW;So;0;ON;;;;;N;;;;; 2B0A;SOUTH EAST BLACK ARROW;So;0;ON;;;;;N;;;;; 2B0B;SOUTH WEST BLACK ARROW;So;0;ON;;;;;N;;;;; 2B0C;LEFT RIGHT BLACK ARROW;So;0;ON;;;;;N;;;;; 2B0D;UP DOWN BLACK ARROW;So;0;ON;;;;;N;;;;; 2B0E;RIGHTWARDS ARROW WITH TIP DOWNWARDS;So;0;ON;;;;;N;;;;; 2B0F;RIGHTWARDS ARROW WITH TIP UPWARDS;So;0;ON;;;;;N;;;;; 2B10;LEFTWARDS ARROW WITH TIP DOWNWARDS;So;0;ON;;;;;N;;;;; 2B11;LEFTWARDS ARROW WITH TIP UPWARDS;So;0;ON;;;;;N;;;;; 2B12;SQUARE WITH TOP HALF BLACK;So;0;ON;;;;;N;;;;; 2B13;SQUARE WITH BOTTOM HALF BLACK;So;0;ON;;;;;N;;;;; 2B14;SQUARE WITH UPPER RIGHT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;; 2B15;SQUARE WITH LOWER LEFT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;; 2B16;DIAMOND WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;; 2B17;DIAMOND WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;; 2B18;DIAMOND WITH TOP HALF BLACK;So;0;ON;;;;;N;;;;; 2B19;DIAMOND WITH BOTTOM HALF BLACK;So;0;ON;;;;;N;;;;; 2B1A;DOTTED SQUARE;So;0;ON;;;;;N;;;;; 2B1B;BLACK LARGE SQUARE;So;0;ON;;;;;N;;;;; 2B1C;WHITE LARGE SQUARE;So;0;ON;;;;;N;;;;; 2B1D;BLACK VERY SMALL SQUARE;So;0;ON;;;;;N;;;;; 2B1E;WHITE VERY SMALL SQUARE;So;0;ON;;;;;N;;;;; 2B1F;BLACK PENTAGON;So;0;ON;;;;;N;;;;; 2B20;WHITE PENTAGON;So;0;ON;;;;;N;;;;; 2B21;WHITE HEXAGON;So;0;ON;;;;;N;;;;; 2B22;BLACK HEXAGON;So;0;ON;;;;;N;;;;; 2B23;HORIZONTAL BLACK HEXAGON;So;0;ON;;;;;N;;;;; 2B24;BLACK LARGE CIRCLE;So;0;ON;;;;;N;;;;; 2B25;BLACK MEDIUM DIAMOND;So;0;ON;;;;;N;;;;; 2B26;WHITE MEDIUM DIAMOND;So;0;ON;;;;;N;;;;; 2B27;BLACK MEDIUM LOZENGE;So;0;ON;;;;;N;;;;; 2B28;WHITE MEDIUM LOZENGE;So;0;ON;;;;;N;;;;; 2B29;BLACK SMALL DIAMOND;So;0;ON;;;;;N;;;;; 2B2A;BLACK SMALL LOZENGE;So;0;ON;;;;;N;;;;; 2B2B;WHITE SMALL LOZENGE;So;0;ON;;;;;N;;;;; 2B2C;BLACK HORIZONTAL ELLIPSE;So;0;ON;;;;;N;;;;; 2B2D;WHITE HORIZONTAL ELLIPSE;So;0;ON;;;;;N;;;;; 2B2E;BLACK VERTICAL ELLIPSE;So;0;ON;;;;;N;;;;; 2B2F;WHITE VERTICAL ELLIPSE;So;0;ON;;;;;N;;;;; 2B30;LEFT ARROW WITH SMALL CIRCLE;Sm;0;ON;;;;;N;;;;; 2B31;THREE LEFTWARDS ARROWS;Sm;0;ON;;;;;N;;;;; 2B32;LEFT ARROW WITH CIRCLED PLUS;Sm;0;ON;;;;;N;;;;; 2B33;LONG LEFTWARDS SQUIGGLE ARROW;Sm;0;ON;;;;;N;;;;; 2B34;LEFTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 2B35;LEFTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 2B36;LEFTWARDS TWO-HEADED ARROW FROM BAR;Sm;0;ON;;;;;N;;;;; 2B37;LEFTWARDS TWO-HEADED TRIPLE DASH ARROW;Sm;0;ON;;;;;N;;;;; 2B38;LEFTWARDS ARROW WITH DOTTED STEM;Sm;0;ON;;;;;N;;;;; 2B39;LEFTWARDS ARROW WITH TAIL WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 2B3A;LEFTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 2B3B;LEFTWARDS TWO-HEADED ARROW WITH TAIL;Sm;0;ON;;;;;N;;;;; 2B3C;LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 2B3D;LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 2B3E;LEFTWARDS ARROW THROUGH X;Sm;0;ON;;;;;N;;;;; 2B3F;WAVE ARROW POINTING DIRECTLY LEFT;Sm;0;ON;;;;;N;;;;; 2B40;EQUALS SIGN ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;; 2B41;REVERSE TILDE OPERATOR ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;; 2B42;LEFTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO;Sm;0;ON;;;;;N;;;;; 2B43;RIGHTWARDS ARROW THROUGH GREATER-THAN;Sm;0;ON;;;;;N;;;;; 2B44;RIGHTWARDS ARROW THROUGH SUPERSET;Sm;0;ON;;;;;N;;;;; 2B45;LEFTWARDS QUADRUPLE ARROW;So;0;ON;;;;;N;;;;; 2B46;RIGHTWARDS QUADRUPLE ARROW;So;0;ON;;;;;N;;;;; 2B47;REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;; 2B48;RIGHTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO;Sm;0;ON;;;;;N;;;;; 2B49;TILDE OPERATOR ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;; 2B4A;LEFTWARDS ARROW ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;N;;;;; 2B4B;LEFTWARDS ARROW ABOVE REVERSE TILDE OPERATOR;Sm;0;ON;;;;;N;;;;; 2B4C;RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR;Sm;0;ON;;;;;N;;;;; 2B4D;DOWNWARDS TRIANGLE-HEADED ZIGZAG ARROW;So;0;ON;;;;;N;;;;; 2B4E;SHORT SLANTED NORTH ARROW;So;0;ON;;;;;N;;;;; 2B4F;SHORT BACKSLANTED SOUTH ARROW;So;0;ON;;;;;N;;;;; 2B50;WHITE MEDIUM STAR;So;0;ON;;;;;N;;;;; 2B51;BLACK SMALL STAR;So;0;ON;;;;;N;;;;; 2B52;WHITE SMALL STAR;So;0;ON;;;;;N;;;;; 2B53;BLACK RIGHT-POINTING PENTAGON;So;0;ON;;;;;N;;;;; 2B54;WHITE RIGHT-POINTING PENTAGON;So;0;ON;;;;;N;;;;; 2B55;HEAVY LARGE CIRCLE;So;0;ON;;;;;N;;;;; 2B56;HEAVY OVAL WITH OVAL INSIDE;So;0;ON;;;;;N;;;;; 2B57;HEAVY CIRCLE WITH CIRCLE INSIDE;So;0;ON;;;;;N;;;;; 2B58;HEAVY CIRCLE;So;0;ON;;;;;N;;;;; 2B59;HEAVY CIRCLED SALTIRE;So;0;ON;;;;;N;;;;; 2B5A;SLANTED NORTH ARROW WITH HOOKED HEAD;So;0;ON;;;;;N;;;;; 2B5B;BACKSLANTED SOUTH ARROW WITH HOOKED TAIL;So;0;ON;;;;;N;;;;; 2B5C;SLANTED NORTH ARROW WITH HORIZONTAL TAIL;So;0;ON;;;;;N;;;;; 2B5D;BACKSLANTED SOUTH ARROW WITH HORIZONTAL TAIL;So;0;ON;;;;;N;;;;; 2B5E;BENT ARROW POINTING DOWNWARDS THEN NORTH EAST;So;0;ON;;;;;N;;;;; 2B5F;SHORT BENT ARROW POINTING DOWNWARDS THEN NORTH EAST;So;0;ON;;;;;N;;;;; 2B60;LEFTWARDS TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;; 2B61;UPWARDS TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;; 2B62;RIGHTWARDS TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;; 2B63;DOWNWARDS TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;; 2B64;LEFT RIGHT TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;; 2B65;UP DOWN TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;; 2B66;NORTH WEST TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;; 2B67;NORTH EAST TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;; 2B68;SOUTH EAST TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;; 2B69;SOUTH WEST TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;; 2B6A;LEFTWARDS TRIANGLE-HEADED DASHED ARROW;So;0;ON;;;;;N;;;;; 2B6B;UPWARDS TRIANGLE-HEADED DASHED ARROW;So;0;ON;;;;;N;;;;; 2B6C;RIGHTWARDS TRIANGLE-HEADED DASHED ARROW;So;0;ON;;;;;N;;;;; 2B6D;DOWNWARDS TRIANGLE-HEADED DASHED ARROW;So;0;ON;;;;;N;;;;; 2B6E;CLOCKWISE TRIANGLE-HEADED OPEN CIRCLE ARROW;So;0;ON;;;;;N;;;;; 2B6F;ANTICLOCKWISE TRIANGLE-HEADED OPEN CIRCLE ARROW;So;0;ON;;;;;N;;;;; 2B70;LEFTWARDS TRIANGLE-HEADED ARROW TO BAR;So;0;ON;;;;;N;;;;; 2B71;UPWARDS TRIANGLE-HEADED ARROW TO BAR;So;0;ON;;;;;N;;;;; 2B72;RIGHTWARDS TRIANGLE-HEADED ARROW TO BAR;So;0;ON;;;;;N;;;;; 2B73;DOWNWARDS TRIANGLE-HEADED ARROW TO BAR;So;0;ON;;;;;N;;;;; 2B76;NORTH WEST TRIANGLE-HEADED ARROW TO BAR;So;0;ON;;;;;N;;;;; 2B77;NORTH EAST TRIANGLE-HEADED ARROW TO BAR;So;0;ON;;;;;N;;;;; 2B78;SOUTH EAST TRIANGLE-HEADED ARROW TO BAR;So;0;ON;;;;;N;;;;; 2B79;SOUTH WEST TRIANGLE-HEADED ARROW TO BAR;So;0;ON;;;;;N;;;;; 2B7A;LEFTWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE;So;0;ON;;;;;N;;;;; 2B7B;UPWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE;So;0;ON;;;;;N;;;;; 2B7C;RIGHTWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE;So;0;ON;;;;;N;;;;; 2B7D;DOWNWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE;So;0;ON;;;;;N;;;;; 2B7E;HORIZONTAL TAB KEY;So;0;ON;;;;;N;;;;; 2B7F;VERTICAL TAB KEY;So;0;ON;;;;;N;;;;; 2B80;LEFTWARDS TRIANGLE-HEADED ARROW OVER RIGHTWARDS TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;; 2B81;UPWARDS TRIANGLE-HEADED ARROW LEFTWARDS OF DOWNWARDS TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;; 2B82;RIGHTWARDS TRIANGLE-HEADED ARROW OVER LEFTWARDS TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;; 2B83;DOWNWARDS TRIANGLE-HEADED ARROW LEFTWARDS OF UPWARDS TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;; 2B84;LEFTWARDS TRIANGLE-HEADED PAIRED ARROWS;So;0;ON;;;;;N;;;;; 2B85;UPWARDS TRIANGLE-HEADED PAIRED ARROWS;So;0;ON;;;;;N;;;;; 2B86;RIGHTWARDS TRIANGLE-HEADED PAIRED ARROWS;So;0;ON;;;;;N;;;;; 2B87;DOWNWARDS TRIANGLE-HEADED PAIRED ARROWS;So;0;ON;;;;;N;;;;; 2B88;LEFTWARDS BLACK CIRCLED WHITE ARROW;So;0;ON;;;;;N;;;;; 2B89;UPWARDS BLACK CIRCLED WHITE ARROW;So;0;ON;;;;;N;;;;; 2B8A;RIGHTWARDS BLACK CIRCLED WHITE ARROW;So;0;ON;;;;;N;;;;; 2B8B;DOWNWARDS BLACK CIRCLED WHITE ARROW;So;0;ON;;;;;N;;;;; 2B8C;ANTICLOCKWISE TRIANGLE-HEADED RIGHT U-SHAPED ARROW;So;0;ON;;;;;N;;;;; 2B8D;ANTICLOCKWISE TRIANGLE-HEADED BOTTOM U-SHAPED ARROW;So;0;ON;;;;;N;;;;; 2B8E;ANTICLOCKWISE TRIANGLE-HEADED LEFT U-SHAPED ARROW;So;0;ON;;;;;N;;;;; 2B8F;ANTICLOCKWISE TRIANGLE-HEADED TOP U-SHAPED ARROW;So;0;ON;;;;;N;;;;; 2B90;RETURN LEFT;So;0;ON;;;;;N;;;;; 2B91;RETURN RIGHT;So;0;ON;;;;;N;;;;; 2B92;NEWLINE LEFT;So;0;ON;;;;;N;;;;; 2B93;NEWLINE RIGHT;So;0;ON;;;;;N;;;;; 2B94;FOUR CORNER ARROWS CIRCLING ANTICLOCKWISE;So;0;ON;;;;;N;;;;; 2B95;RIGHTWARDS BLACK ARROW;So;0;ON;;;;;N;;;;; 2B97;SYMBOL FOR TYPE A ELECTRONICS;So;0;ON;;;;;N;;;;; 2B98;THREE-D TOP-LIGHTED LEFTWARDS EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 2B99;THREE-D RIGHT-LIGHTED UPWARDS EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 2B9A;THREE-D TOP-LIGHTED RIGHTWARDS EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 2B9B;THREE-D LEFT-LIGHTED DOWNWARDS EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 2B9C;BLACK LEFTWARDS EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 2B9D;BLACK UPWARDS EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 2B9E;BLACK RIGHTWARDS EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 2B9F;BLACK DOWNWARDS EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 2BA0;DOWNWARDS TRIANGLE-HEADED ARROW WITH LONG TIP LEFTWARDS;So;0;ON;;;;;N;;;;; 2BA1;DOWNWARDS TRIANGLE-HEADED ARROW WITH LONG TIP RIGHTWARDS;So;0;ON;;;;;N;;;;; 2BA2;UPWARDS TRIANGLE-HEADED ARROW WITH LONG TIP LEFTWARDS;So;0;ON;;;;;N;;;;; 2BA3;UPWARDS TRIANGLE-HEADED ARROW WITH LONG TIP RIGHTWARDS;So;0;ON;;;;;N;;;;; 2BA4;LEFTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP UPWARDS;So;0;ON;;;;;N;;;;; 2BA5;RIGHTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP UPWARDS;So;0;ON;;;;;N;;;;; 2BA6;LEFTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP DOWNWARDS;So;0;ON;;;;;N;;;;; 2BA7;RIGHTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP DOWNWARDS;So;0;ON;;;;;N;;;;; 2BA8;BLACK CURVED DOWNWARDS AND LEFTWARDS ARROW;So;0;ON;;;;;N;;;;; 2BA9;BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW;So;0;ON;;;;;N;;;;; 2BAA;BLACK CURVED UPWARDS AND LEFTWARDS ARROW;So;0;ON;;;;;N;;;;; 2BAB;BLACK CURVED UPWARDS AND RIGHTWARDS ARROW;So;0;ON;;;;;N;;;;; 2BAC;BLACK CURVED LEFTWARDS AND UPWARDS ARROW;So;0;ON;;;;;N;;;;; 2BAD;BLACK CURVED RIGHTWARDS AND UPWARDS ARROW;So;0;ON;;;;;N;;;;; 2BAE;BLACK CURVED LEFTWARDS AND DOWNWARDS ARROW;So;0;ON;;;;;N;;;;; 2BAF;BLACK CURVED RIGHTWARDS AND DOWNWARDS ARROW;So;0;ON;;;;;N;;;;; 2BB0;RIBBON ARROW DOWN LEFT;So;0;ON;;;;;N;;;;; 2BB1;RIBBON ARROW DOWN RIGHT;So;0;ON;;;;;N;;;;; 2BB2;RIBBON ARROW UP LEFT;So;0;ON;;;;;N;;;;; 2BB3;RIBBON ARROW UP RIGHT;So;0;ON;;;;;N;;;;; 2BB4;RIBBON ARROW LEFT UP;So;0;ON;;;;;N;;;;; 2BB5;RIBBON ARROW RIGHT UP;So;0;ON;;;;;N;;;;; 2BB6;RIBBON ARROW LEFT DOWN;So;0;ON;;;;;N;;;;; 2BB7;RIBBON ARROW RIGHT DOWN;So;0;ON;;;;;N;;;;; 2BB8;UPWARDS WHITE ARROW FROM BAR WITH HORIZONTAL BAR;So;0;ON;;;;;N;;;;; 2BB9;UP ARROWHEAD IN A RECTANGLE BOX;So;0;ON;;;;;N;;;;; 2BBA;OVERLAPPING WHITE SQUARES;So;0;ON;;;;;N;;;;; 2BBB;OVERLAPPING WHITE AND BLACK SQUARES;So;0;ON;;;;;N;;;;; 2BBC;OVERLAPPING BLACK SQUARES;So;0;ON;;;;;N;;;;; 2BBD;BALLOT BOX WITH LIGHT X;So;0;ON;;;;;N;;;;; 2BBE;CIRCLED X;So;0;ON;;;;;N;;;;; 2BBF;CIRCLED BOLD X;So;0;ON;;;;;N;;;;; 2BC0;BLACK SQUARE CENTRED;So;0;ON;;;;;N;;;;; 2BC1;BLACK DIAMOND CENTRED;So;0;ON;;;;;N;;;;; 2BC2;TURNED BLACK PENTAGON;So;0;ON;;;;;N;;;;; 2BC3;HORIZONTAL BLACK OCTAGON;So;0;ON;;;;;N;;;;; 2BC4;BLACK OCTAGON;So;0;ON;;;;;N;;;;; 2BC5;BLACK MEDIUM UP-POINTING TRIANGLE CENTRED;So;0;ON;;;;;N;;;;; 2BC6;BLACK MEDIUM DOWN-POINTING TRIANGLE CENTRED;So;0;ON;;;;;N;;;;; 2BC7;BLACK MEDIUM LEFT-POINTING TRIANGLE CENTRED;So;0;ON;;;;;N;;;;; 2BC8;BLACK MEDIUM RIGHT-POINTING TRIANGLE CENTRED;So;0;ON;;;;;N;;;;; 2BC9;NEPTUNE FORM TWO;So;0;ON;;;;;N;;;;; 2BCA;TOP HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;; 2BCB;BOTTOM HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;; 2BCC;LIGHT FOUR POINTED BLACK CUSP;So;0;ON;;;;;N;;;;; 2BCD;ROTATED LIGHT FOUR POINTED BLACK CUSP;So;0;ON;;;;;N;;;;; 2BCE;WHITE FOUR POINTED CUSP;So;0;ON;;;;;N;;;;; 2BCF;ROTATED WHITE FOUR POINTED CUSP;So;0;ON;;;;;N;;;;; 2BD0;SQUARE POSITION INDICATOR;So;0;ON;;;;;N;;;;; 2BD1;UNCERTAINTY SIGN;So;0;ON;;;;;N;;;;; 2BD2;GROUP MARK;So;0;ON;;;;;N;;;;; 2BD3;PLUTO FORM TWO;So;0;ON;;;;;N;;;;; 2BD4;PLUTO FORM THREE;So;0;ON;;;;;N;;;;; 2BD5;PLUTO FORM FOUR;So;0;ON;;;;;N;;;;; 2BD6;PLUTO FORM FIVE;So;0;ON;;;;;N;;;;; 2BD7;TRANSPLUTO;So;0;ON;;;;;N;;;;; 2BD8;PROSERPINA;So;0;ON;;;;;N;;;;; 2BD9;ASTRAEA;So;0;ON;;;;;N;;;;; 2BDA;HYGIEA;So;0;ON;;;;;N;;;;; 2BDB;PHOLUS;So;0;ON;;;;;N;;;;; 2BDC;NESSUS;So;0;ON;;;;;N;;;;; 2BDD;WHITE MOON SELENA;So;0;ON;;;;;N;;;;; 2BDE;BLACK DIAMOND ON CROSS;So;0;ON;;;;;N;;;;; 2BDF;TRUE LIGHT MOON ARTA;So;0;ON;;;;;N;;;;; 2BE0;CUPIDO;So;0;ON;;;;;N;;;;; 2BE1;HADES;So;0;ON;;;;;N;;;;; 2BE2;ZEUS;So;0;ON;;;;;N;;;;; 2BE3;KRONOS;So;0;ON;;;;;N;;;;; 2BE4;APOLLON;So;0;ON;;;;;N;;;;; 2BE5;ADMETOS;So;0;ON;;;;;N;;;;; 2BE6;VULCANUS;So;0;ON;;;;;N;;;;; 2BE7;POSEIDON;So;0;ON;;;;;N;;;;; 2BE8;LEFT HALF BLACK STAR;So;0;ON;;;;;N;;;;; 2BE9;RIGHT HALF BLACK STAR;So;0;ON;;;;;N;;;;; 2BEA;STAR WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;; 2BEB;STAR WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;; 2BEC;LEFTWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS;So;0;ON;;;;;N;;;;; 2BED;UPWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS;So;0;ON;;;;;N;;;;; 2BEE;RIGHTWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS;So;0;ON;;;;;N;;;;; 2BEF;DOWNWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS;So;0;ON;;;;;N;;;;; 2BF0;ERIS FORM ONE;So;0;ON;;;;;N;;;;; 2BF1;ERIS FORM TWO;So;0;ON;;;;;N;;;;; 2BF2;SEDNA;So;0;ON;;;;;N;;;;; 2BF3;RUSSIAN ASTROLOGICAL SYMBOL VIGINTILE;So;0;ON;;;;;N;;;;; 2BF4;RUSSIAN ASTROLOGICAL SYMBOL NOVILE;So;0;ON;;;;;N;;;;; 2BF5;RUSSIAN ASTROLOGICAL SYMBOL QUINTILE;So;0;ON;;;;;N;;;;; 2BF6;RUSSIAN ASTROLOGICAL SYMBOL BINOVILE;So;0;ON;;;;;N;;;;; 2BF7;RUSSIAN ASTROLOGICAL SYMBOL SENTAGON;So;0;ON;;;;;N;;;;; 2BF8;RUSSIAN ASTROLOGICAL SYMBOL TREDECILE;So;0;ON;;;;;N;;;;; 2BF9;EQUALS SIGN WITH INFINITY BELOW;So;0;ON;;;;;N;;;;; 2BFA;UNITED SYMBOL;So;0;ON;;;;;N;;;;; 2BFB;SEPARATED SYMBOL;So;0;ON;;;;;N;;;;; 2BFC;DOUBLED SYMBOL;So;0;ON;;;;;N;;;;; 2BFD;PASSED SYMBOL;So;0;ON;;;;;N;;;;; 2BFE;REVERSED RIGHT ANGLE;So;0;ON;;;;;Y;;;;; 2BFF;HELLSCHREIBER PAUSE SYMBOL;So;0;ON;;;;;N;;;;; 2C00;GLAGOLITIC CAPITAL LETTER AZU;Lu;0;L;;;;;N;;;;2C30; 2C01;GLAGOLITIC CAPITAL LETTER BUKY;Lu;0;L;;;;;N;;;;2C31; 2C02;GLAGOLITIC CAPITAL LETTER VEDE;Lu;0;L;;;;;N;;;;2C32; 2C03;GLAGOLITIC CAPITAL LETTER GLAGOLI;Lu;0;L;;;;;N;;;;2C33; 2C04;GLAGOLITIC CAPITAL LETTER DOBRO;Lu;0;L;;;;;N;;;;2C34; 2C05;GLAGOLITIC CAPITAL LETTER YESTU;Lu;0;L;;;;;N;;;;2C35; 2C06;GLAGOLITIC CAPITAL LETTER ZHIVETE;Lu;0;L;;;;;N;;;;2C36; 2C07;GLAGOLITIC CAPITAL LETTER DZELO;Lu;0;L;;;;;N;;;;2C37; 2C08;GLAGOLITIC CAPITAL LETTER ZEMLJA;Lu;0;L;;;;;N;;;;2C38; 2C09;GLAGOLITIC CAPITAL LETTER IZHE;Lu;0;L;;;;;N;;;;2C39; 2C0A;GLAGOLITIC CAPITAL LETTER INITIAL IZHE;Lu;0;L;;;;;N;;;;2C3A; 2C0B;GLAGOLITIC CAPITAL LETTER I;Lu;0;L;;;;;N;;;;2C3B; 2C0C;GLAGOLITIC CAPITAL LETTER DJERVI;Lu;0;L;;;;;N;;;;2C3C; 2C0D;GLAGOLITIC CAPITAL LETTER KAKO;Lu;0;L;;;;;N;;;;2C3D; 2C0E;GLAGOLITIC CAPITAL LETTER LJUDIJE;Lu;0;L;;;;;N;;;;2C3E; 2C0F;GLAGOLITIC CAPITAL LETTER MYSLITE;Lu;0;L;;;;;N;;;;2C3F; 2C10;GLAGOLITIC CAPITAL LETTER NASHI;Lu;0;L;;;;;N;;;;2C40; 2C11;GLAGOLITIC CAPITAL LETTER ONU;Lu;0;L;;;;;N;;;;2C41; 2C12;GLAGOLITIC CAPITAL LETTER POKOJI;Lu;0;L;;;;;N;;;;2C42; 2C13;GLAGOLITIC CAPITAL LETTER RITSI;Lu;0;L;;;;;N;;;;2C43; 2C14;GLAGOLITIC CAPITAL LETTER SLOVO;Lu;0;L;;;;;N;;;;2C44; 2C15;GLAGOLITIC CAPITAL LETTER TVRIDO;Lu;0;L;;;;;N;;;;2C45; 2C16;GLAGOLITIC CAPITAL LETTER UKU;Lu;0;L;;;;;N;;;;2C46; 2C17;GLAGOLITIC CAPITAL LETTER FRITU;Lu;0;L;;;;;N;;;;2C47; 2C18;GLAGOLITIC CAPITAL LETTER HERU;Lu;0;L;;;;;N;;;;2C48; 2C19;GLAGOLITIC CAPITAL LETTER OTU;Lu;0;L;;;;;N;;;;2C49; 2C1A;GLAGOLITIC CAPITAL LETTER PE;Lu;0;L;;;;;N;;;;2C4A; 2C1B;GLAGOLITIC CAPITAL LETTER SHTA;Lu;0;L;;;;;N;;;;2C4B; 2C1C;GLAGOLITIC CAPITAL LETTER TSI;Lu;0;L;;;;;N;;;;2C4C; 2C1D;GLAGOLITIC CAPITAL LETTER CHRIVI;Lu;0;L;;;;;N;;;;2C4D; 2C1E;GLAGOLITIC CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;2C4E; 2C1F;GLAGOLITIC CAPITAL LETTER YERU;Lu;0;L;;;;;N;;;;2C4F; 2C20;GLAGOLITIC CAPITAL LETTER YERI;Lu;0;L;;;;;N;;;;2C50; 2C21;GLAGOLITIC CAPITAL LETTER YATI;Lu;0;L;;;;;N;;;;2C51; 2C22;GLAGOLITIC CAPITAL LETTER SPIDERY HA;Lu;0;L;;;;;N;;;;2C52; 2C23;GLAGOLITIC CAPITAL LETTER YU;Lu;0;L;;;;;N;;;;2C53; 2C24;GLAGOLITIC CAPITAL LETTER SMALL YUS;Lu;0;L;;;;;N;;;;2C54; 2C25;GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL;Lu;0;L;;;;;N;;;;2C55; 2C26;GLAGOLITIC CAPITAL LETTER YO;Lu;0;L;;;;;N;;;;2C56; 2C27;GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS;Lu;0;L;;;;;N;;;;2C57; 2C28;GLAGOLITIC CAPITAL LETTER BIG YUS;Lu;0;L;;;;;N;;;;2C58; 2C29;GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS;Lu;0;L;;;;;N;;;;2C59; 2C2A;GLAGOLITIC CAPITAL LETTER FITA;Lu;0;L;;;;;N;;;;2C5A; 2C2B;GLAGOLITIC CAPITAL LETTER IZHITSA;Lu;0;L;;;;;N;;;;2C5B; 2C2C;GLAGOLITIC CAPITAL LETTER SHTAPIC;Lu;0;L;;;;;N;;;;2C5C; 2C2D;GLAGOLITIC CAPITAL LETTER TROKUTASTI A;Lu;0;L;;;;;N;;;;2C5D; 2C2E;GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE;Lu;0;L;;;;;N;;;;2C5E; 2C2F;GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI;Lu;0;L;;;;;N;;;;2C5F; 2C30;GLAGOLITIC SMALL LETTER AZU;Ll;0;L;;;;;N;;;2C00;;2C00 2C31;GLAGOLITIC SMALL LETTER BUKY;Ll;0;L;;;;;N;;;2C01;;2C01 2C32;GLAGOLITIC SMALL LETTER VEDE;Ll;0;L;;;;;N;;;2C02;;2C02 2C33;GLAGOLITIC SMALL LETTER GLAGOLI;Ll;0;L;;;;;N;;;2C03;;2C03 2C34;GLAGOLITIC SMALL LETTER DOBRO;Ll;0;L;;;;;N;;;2C04;;2C04 2C35;GLAGOLITIC SMALL LETTER YESTU;Ll;0;L;;;;;N;;;2C05;;2C05 2C36;GLAGOLITIC SMALL LETTER ZHIVETE;Ll;0;L;;;;;N;;;2C06;;2C06 2C37;GLAGOLITIC SMALL LETTER DZELO;Ll;0;L;;;;;N;;;2C07;;2C07 2C38;GLAGOLITIC SMALL LETTER ZEMLJA;Ll;0;L;;;;;N;;;2C08;;2C08 2C39;GLAGOLITIC SMALL LETTER IZHE;Ll;0;L;;;;;N;;;2C09;;2C09 2C3A;GLAGOLITIC SMALL LETTER INITIAL IZHE;Ll;0;L;;;;;N;;;2C0A;;2C0A 2C3B;GLAGOLITIC SMALL LETTER I;Ll;0;L;;;;;N;;;2C0B;;2C0B 2C3C;GLAGOLITIC SMALL LETTER DJERVI;Ll;0;L;;;;;N;;;2C0C;;2C0C 2C3D;GLAGOLITIC SMALL LETTER KAKO;Ll;0;L;;;;;N;;;2C0D;;2C0D 2C3E;GLAGOLITIC SMALL LETTER LJUDIJE;Ll;0;L;;;;;N;;;2C0E;;2C0E 2C3F;GLAGOLITIC SMALL LETTER MYSLITE;Ll;0;L;;;;;N;;;2C0F;;2C0F 2C40;GLAGOLITIC SMALL LETTER NASHI;Ll;0;L;;;;;N;;;2C10;;2C10 2C41;GLAGOLITIC SMALL LETTER ONU;Ll;0;L;;;;;N;;;2C11;;2C11 2C42;GLAGOLITIC SMALL LETTER POKOJI;Ll;0;L;;;;;N;;;2C12;;2C12 2C43;GLAGOLITIC SMALL LETTER RITSI;Ll;0;L;;;;;N;;;2C13;;2C13 2C44;GLAGOLITIC SMALL LETTER SLOVO;Ll;0;L;;;;;N;;;2C14;;2C14 2C45;GLAGOLITIC SMALL LETTER TVRIDO;Ll;0;L;;;;;N;;;2C15;;2C15 2C46;GLAGOLITIC SMALL LETTER UKU;Ll;0;L;;;;;N;;;2C16;;2C16 2C47;GLAGOLITIC SMALL LETTER FRITU;Ll;0;L;;;;;N;;;2C17;;2C17 2C48;GLAGOLITIC SMALL LETTER HERU;Ll;0;L;;;;;N;;;2C18;;2C18 2C49;GLAGOLITIC SMALL LETTER OTU;Ll;0;L;;;;;N;;;2C19;;2C19 2C4A;GLAGOLITIC SMALL LETTER PE;Ll;0;L;;;;;N;;;2C1A;;2C1A 2C4B;GLAGOLITIC SMALL LETTER SHTA;Ll;0;L;;;;;N;;;2C1B;;2C1B 2C4C;GLAGOLITIC SMALL LETTER TSI;Ll;0;L;;;;;N;;;2C1C;;2C1C 2C4D;GLAGOLITIC SMALL LETTER CHRIVI;Ll;0;L;;;;;N;;;2C1D;;2C1D 2C4E;GLAGOLITIC SMALL LETTER SHA;Ll;0;L;;;;;N;;;2C1E;;2C1E 2C4F;GLAGOLITIC SMALL LETTER YERU;Ll;0;L;;;;;N;;;2C1F;;2C1F 2C50;GLAGOLITIC SMALL LETTER YERI;Ll;0;L;;;;;N;;;2C20;;2C20 2C51;GLAGOLITIC SMALL LETTER YATI;Ll;0;L;;;;;N;;;2C21;;2C21 2C52;GLAGOLITIC SMALL LETTER SPIDERY HA;Ll;0;L;;;;;N;;;2C22;;2C22 2C53;GLAGOLITIC SMALL LETTER YU;Ll;0;L;;;;;N;;;2C23;;2C23 2C54;GLAGOLITIC SMALL LETTER SMALL YUS;Ll;0;L;;;;;N;;;2C24;;2C24 2C55;GLAGOLITIC SMALL LETTER SMALL YUS WITH TAIL;Ll;0;L;;;;;N;;;2C25;;2C25 2C56;GLAGOLITIC SMALL LETTER YO;Ll;0;L;;;;;N;;;2C26;;2C26 2C57;GLAGOLITIC SMALL LETTER IOTATED SMALL YUS;Ll;0;L;;;;;N;;;2C27;;2C27 2C58;GLAGOLITIC SMALL LETTER BIG YUS;Ll;0;L;;;;;N;;;2C28;;2C28 2C59;GLAGOLITIC SMALL LETTER IOTATED BIG YUS;Ll;0;L;;;;;N;;;2C29;;2C29 2C5A;GLAGOLITIC SMALL LETTER FITA;Ll;0;L;;;;;N;;;2C2A;;2C2A 2C5B;GLAGOLITIC SMALL LETTER IZHITSA;Ll;0;L;;;;;N;;;2C2B;;2C2B 2C5C;GLAGOLITIC SMALL LETTER SHTAPIC;Ll;0;L;;;;;N;;;2C2C;;2C2C 2C5D;GLAGOLITIC SMALL LETTER TROKUTASTI A;Ll;0;L;;;;;N;;;2C2D;;2C2D 2C5E;GLAGOLITIC SMALL LETTER LATINATE MYSLITE;Ll;0;L;;;;;N;;;2C2E;;2C2E 2C5F;GLAGOLITIC SMALL LETTER CAUDATE CHRIVI;Ll;0;L;;;;;N;;;2C2F;;2C2F 2C60;LATIN CAPITAL LETTER L WITH DOUBLE BAR;Lu;0;L;;;;;N;;;;2C61; 2C61;LATIN SMALL LETTER L WITH DOUBLE BAR;Ll;0;L;;;;;N;;;2C60;;2C60 2C62;LATIN CAPITAL LETTER L WITH MIDDLE TILDE;Lu;0;L;;;;;N;;;;026B; 2C63;LATIN CAPITAL LETTER P WITH STROKE;Lu;0;L;;;;;N;;;;1D7D; 2C64;LATIN CAPITAL LETTER R WITH TAIL;Lu;0;L;;;;;N;;;;027D; 2C65;LATIN SMALL LETTER A WITH STROKE;Ll;0;L;;;;;N;;;023A;;023A 2C66;LATIN SMALL LETTER T WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;023E;;023E 2C67;LATIN CAPITAL LETTER H WITH DESCENDER;Lu;0;L;;;;;N;;;;2C68; 2C68;LATIN SMALL LETTER H WITH DESCENDER;Ll;0;L;;;;;N;;;2C67;;2C67 2C69;LATIN CAPITAL LETTER K WITH DESCENDER;Lu;0;L;;;;;N;;;;2C6A; 2C6A;LATIN SMALL LETTER K WITH DESCENDER;Ll;0;L;;;;;N;;;2C69;;2C69 2C6B;LATIN CAPITAL LETTER Z WITH DESCENDER;Lu;0;L;;;;;N;;;;2C6C; 2C6C;LATIN SMALL LETTER Z WITH DESCENDER;Ll;0;L;;;;;N;;;2C6B;;2C6B 2C6D;LATIN CAPITAL LETTER ALPHA;Lu;0;L;;;;;N;;;;0251; 2C6E;LATIN CAPITAL LETTER M WITH HOOK;Lu;0;L;;;;;N;;;;0271; 2C6F;LATIN CAPITAL LETTER TURNED A;Lu;0;L;;;;;N;;;;0250; 2C70;LATIN CAPITAL LETTER TURNED ALPHA;Lu;0;L;;;;;N;;;;0252; 2C71;LATIN SMALL LETTER V WITH RIGHT HOOK;Ll;0;L;;;;;N;;;;; 2C72;LATIN CAPITAL LETTER W WITH HOOK;Lu;0;L;;;;;N;;;;2C73; 2C73;LATIN SMALL LETTER W WITH HOOK;Ll;0;L;;;;;N;;;2C72;;2C72 2C74;LATIN SMALL LETTER V WITH CURL;Ll;0;L;;;;;N;;;;; 2C75;LATIN CAPITAL LETTER HALF H;Lu;0;L;;;;;N;;;;2C76; 2C76;LATIN SMALL LETTER HALF H;Ll;0;L;;;;;N;;;2C75;;2C75 2C77;LATIN SMALL LETTER TAILLESS PHI;Ll;0;L;;;;;N;;;;; 2C78;LATIN SMALL LETTER E WITH NOTCH;Ll;0;L;;;;;N;;;;; 2C79;LATIN SMALL LETTER TURNED R WITH TAIL;Ll;0;L;;;;;N;;;;; 2C7A;LATIN SMALL LETTER O WITH LOW RING INSIDE;Ll;0;L;;;;;N;;;;; 2C7B;LATIN LETTER SMALL CAPITAL TURNED E;Ll;0;L;;;;;N;;;;; 2C7C;LATIN SUBSCRIPT SMALL LETTER J;Lm;0;L; 006A;;;;N;;;;; 2C7D;MODIFIER LETTER CAPITAL V;Lm;0;L; 0056;;;;N;;;;; 2C7E;LATIN CAPITAL LETTER S WITH SWASH TAIL;Lu;0;L;;;;;N;;;;023F; 2C7F;LATIN CAPITAL LETTER Z WITH SWASH TAIL;Lu;0;L;;;;;N;;;;0240; 2C80;COPTIC CAPITAL LETTER ALFA;Lu;0;L;;;;;N;;;;2C81; 2C81;COPTIC SMALL LETTER ALFA;Ll;0;L;;;;;N;;;2C80;;2C80 2C82;COPTIC CAPITAL LETTER VIDA;Lu;0;L;;;;;N;;;;2C83; 2C83;COPTIC SMALL LETTER VIDA;Ll;0;L;;;;;N;;;2C82;;2C82 2C84;COPTIC CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;2C85; 2C85;COPTIC SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;2C84;;2C84 2C86;COPTIC CAPITAL LETTER DALDA;Lu;0;L;;;;;N;;;;2C87; 2C87;COPTIC SMALL LETTER DALDA;Ll;0;L;;;;;N;;;2C86;;2C86 2C88;COPTIC CAPITAL LETTER EIE;Lu;0;L;;;;;N;;;;2C89; 2C89;COPTIC SMALL LETTER EIE;Ll;0;L;;;;;N;;;2C88;;2C88 2C8A;COPTIC CAPITAL LETTER SOU;Lu;0;L;;;;;N;;;;2C8B; 2C8B;COPTIC SMALL LETTER SOU;Ll;0;L;;;;;N;;;2C8A;;2C8A 2C8C;COPTIC CAPITAL LETTER ZATA;Lu;0;L;;;;;N;;;;2C8D; 2C8D;COPTIC SMALL LETTER ZATA;Ll;0;L;;;;;N;;;2C8C;;2C8C 2C8E;COPTIC CAPITAL LETTER HATE;Lu;0;L;;;;;N;;;;2C8F; 2C8F;COPTIC SMALL LETTER HATE;Ll;0;L;;;;;N;;;2C8E;;2C8E 2C90;COPTIC CAPITAL LETTER THETHE;Lu;0;L;;;;;N;;;;2C91; 2C91;COPTIC SMALL LETTER THETHE;Ll;0;L;;;;;N;;;2C90;;2C90 2C92;COPTIC CAPITAL LETTER IAUDA;Lu;0;L;;;;;N;;;;2C93; 2C93;COPTIC SMALL LETTER IAUDA;Ll;0;L;;;;;N;;;2C92;;2C92 2C94;COPTIC CAPITAL LETTER KAPA;Lu;0;L;;;;;N;;;;2C95; 2C95;COPTIC SMALL LETTER KAPA;Ll;0;L;;;;;N;;;2C94;;2C94 2C96;COPTIC CAPITAL LETTER LAULA;Lu;0;L;;;;;N;;;;2C97; 2C97;COPTIC SMALL LETTER LAULA;Ll;0;L;;;;;N;;;2C96;;2C96 2C98;COPTIC CAPITAL LETTER MI;Lu;0;L;;;;;N;;;;2C99; 2C99;COPTIC SMALL LETTER MI;Ll;0;L;;;;;N;;;2C98;;2C98 2C9A;COPTIC CAPITAL LETTER NI;Lu;0;L;;;;;N;;;;2C9B; 2C9B;COPTIC SMALL LETTER NI;Ll;0;L;;;;;N;;;2C9A;;2C9A 2C9C;COPTIC CAPITAL LETTER KSI;Lu;0;L;;;;;N;;;;2C9D; 2C9D;COPTIC SMALL LETTER KSI;Ll;0;L;;;;;N;;;2C9C;;2C9C 2C9E;COPTIC CAPITAL LETTER O;Lu;0;L;;;;;N;;;;2C9F; 2C9F;COPTIC SMALL LETTER O;Ll;0;L;;;;;N;;;2C9E;;2C9E 2CA0;COPTIC CAPITAL LETTER PI;Lu;0;L;;;;;N;;;;2CA1; 2CA1;COPTIC SMALL LETTER PI;Ll;0;L;;;;;N;;;2CA0;;2CA0 2CA2;COPTIC CAPITAL LETTER RO;Lu;0;L;;;;;N;;;;2CA3; 2CA3;COPTIC SMALL LETTER RO;Ll;0;L;;;;;N;;;2CA2;;2CA2 2CA4;COPTIC CAPITAL LETTER SIMA;Lu;0;L;;;;;N;;;;2CA5; 2CA5;COPTIC SMALL LETTER SIMA;Ll;0;L;;;;;N;;;2CA4;;2CA4 2CA6;COPTIC CAPITAL LETTER TAU;Lu;0;L;;;;;N;;;;2CA7; 2CA7;COPTIC SMALL LETTER TAU;Ll;0;L;;;;;N;;;2CA6;;2CA6 2CA8;COPTIC CAPITAL LETTER UA;Lu;0;L;;;;;N;;;;2CA9; 2CA9;COPTIC SMALL LETTER UA;Ll;0;L;;;;;N;;;2CA8;;2CA8 2CAA;COPTIC CAPITAL LETTER FI;Lu;0;L;;;;;N;;;;2CAB; 2CAB;COPTIC SMALL LETTER FI;Ll;0;L;;;;;N;;;2CAA;;2CAA 2CAC;COPTIC CAPITAL LETTER KHI;Lu;0;L;;;;;N;;;;2CAD; 2CAD;COPTIC SMALL LETTER KHI;Ll;0;L;;;;;N;;;2CAC;;2CAC 2CAE;COPTIC CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;2CAF; 2CAF;COPTIC SMALL LETTER PSI;Ll;0;L;;;;;N;;;2CAE;;2CAE 2CB0;COPTIC CAPITAL LETTER OOU;Lu;0;L;;;;;N;;;;2CB1; 2CB1;COPTIC SMALL LETTER OOU;Ll;0;L;;;;;N;;;2CB0;;2CB0 2CB2;COPTIC CAPITAL LETTER DIALECT-P ALEF;Lu;0;L;;;;;N;;;;2CB3; 2CB3;COPTIC SMALL LETTER DIALECT-P ALEF;Ll;0;L;;;;;N;;;2CB2;;2CB2 2CB4;COPTIC CAPITAL LETTER OLD COPTIC AIN;Lu;0;L;;;;;N;;;;2CB5; 2CB5;COPTIC SMALL LETTER OLD COPTIC AIN;Ll;0;L;;;;;N;;;2CB4;;2CB4 2CB6;COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE;Lu;0;L;;;;;N;;;;2CB7; 2CB7;COPTIC SMALL LETTER CRYPTOGRAMMIC EIE;Ll;0;L;;;;;N;;;2CB6;;2CB6 2CB8;COPTIC CAPITAL LETTER DIALECT-P KAPA;Lu;0;L;;;;;N;;;;2CB9; 2CB9;COPTIC SMALL LETTER DIALECT-P KAPA;Ll;0;L;;;;;N;;;2CB8;;2CB8 2CBA;COPTIC CAPITAL LETTER DIALECT-P NI;Lu;0;L;;;;;N;;;;2CBB; 2CBB;COPTIC SMALL LETTER DIALECT-P NI;Ll;0;L;;;;;N;;;2CBA;;2CBA 2CBC;COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI;Lu;0;L;;;;;N;;;;2CBD; 2CBD;COPTIC SMALL LETTER CRYPTOGRAMMIC NI;Ll;0;L;;;;;N;;;2CBC;;2CBC 2CBE;COPTIC CAPITAL LETTER OLD COPTIC OOU;Lu;0;L;;;;;N;;;;2CBF; 2CBF;COPTIC SMALL LETTER OLD COPTIC OOU;Ll;0;L;;;;;N;;;2CBE;;2CBE 2CC0;COPTIC CAPITAL LETTER SAMPI;Lu;0;L;;;;;N;;;;2CC1; 2CC1;COPTIC SMALL LETTER SAMPI;Ll;0;L;;;;;N;;;2CC0;;2CC0 2CC2;COPTIC CAPITAL LETTER CROSSED SHEI;Lu;0;L;;;;;N;;;;2CC3; 2CC3;COPTIC SMALL LETTER CROSSED SHEI;Ll;0;L;;;;;N;;;2CC2;;2CC2 2CC4;COPTIC CAPITAL LETTER OLD COPTIC SHEI;Lu;0;L;;;;;N;;;;2CC5; 2CC5;COPTIC SMALL LETTER OLD COPTIC SHEI;Ll;0;L;;;;;N;;;2CC4;;2CC4 2CC6;COPTIC CAPITAL LETTER OLD COPTIC ESH;Lu;0;L;;;;;N;;;;2CC7; 2CC7;COPTIC SMALL LETTER OLD COPTIC ESH;Ll;0;L;;;;;N;;;2CC6;;2CC6 2CC8;COPTIC CAPITAL LETTER AKHMIMIC KHEI;Lu;0;L;;;;;N;;;;2CC9; 2CC9;COPTIC SMALL LETTER AKHMIMIC KHEI;Ll;0;L;;;;;N;;;2CC8;;2CC8 2CCA;COPTIC CAPITAL LETTER DIALECT-P HORI;Lu;0;L;;;;;N;;;;2CCB; 2CCB;COPTIC SMALL LETTER DIALECT-P HORI;Ll;0;L;;;;;N;;;2CCA;;2CCA 2CCC;COPTIC CAPITAL LETTER OLD COPTIC HORI;Lu;0;L;;;;;N;;;;2CCD; 2CCD;COPTIC SMALL LETTER OLD COPTIC HORI;Ll;0;L;;;;;N;;;2CCC;;2CCC 2CCE;COPTIC CAPITAL LETTER OLD COPTIC HA;Lu;0;L;;;;;N;;;;2CCF; 2CCF;COPTIC SMALL LETTER OLD COPTIC HA;Ll;0;L;;;;;N;;;2CCE;;2CCE 2CD0;COPTIC CAPITAL LETTER L-SHAPED HA;Lu;0;L;;;;;N;;;;2CD1; 2CD1;COPTIC SMALL LETTER L-SHAPED HA;Ll;0;L;;;;;N;;;2CD0;;2CD0 2CD2;COPTIC CAPITAL LETTER OLD COPTIC HEI;Lu;0;L;;;;;N;;;;2CD3; 2CD3;COPTIC SMALL LETTER OLD COPTIC HEI;Ll;0;L;;;;;N;;;2CD2;;2CD2 2CD4;COPTIC CAPITAL LETTER OLD COPTIC HAT;Lu;0;L;;;;;N;;;;2CD5; 2CD5;COPTIC SMALL LETTER OLD COPTIC HAT;Ll;0;L;;;;;N;;;2CD4;;2CD4 2CD6;COPTIC CAPITAL LETTER OLD COPTIC GANGIA;Lu;0;L;;;;;N;;;;2CD7; 2CD7;COPTIC SMALL LETTER OLD COPTIC GANGIA;Ll;0;L;;;;;N;;;2CD6;;2CD6 2CD8;COPTIC CAPITAL LETTER OLD COPTIC DJA;Lu;0;L;;;;;N;;;;2CD9; 2CD9;COPTIC SMALL LETTER OLD COPTIC DJA;Ll;0;L;;;;;N;;;2CD8;;2CD8 2CDA;COPTIC CAPITAL LETTER OLD COPTIC SHIMA;Lu;0;L;;;;;N;;;;2CDB; 2CDB;COPTIC SMALL LETTER OLD COPTIC SHIMA;Ll;0;L;;;;;N;;;2CDA;;2CDA 2CDC;COPTIC CAPITAL LETTER OLD NUBIAN SHIMA;Lu;0;L;;;;;N;;;;2CDD; 2CDD;COPTIC SMALL LETTER OLD NUBIAN SHIMA;Ll;0;L;;;;;N;;;2CDC;;2CDC 2CDE;COPTIC CAPITAL LETTER OLD NUBIAN NGI;Lu;0;L;;;;;N;;;;2CDF; 2CDF;COPTIC SMALL LETTER OLD NUBIAN NGI;Ll;0;L;;;;;N;;;2CDE;;2CDE 2CE0;COPTIC CAPITAL LETTER OLD NUBIAN NYI;Lu;0;L;;;;;N;;;;2CE1; 2CE1;COPTIC SMALL LETTER OLD NUBIAN NYI;Ll;0;L;;;;;N;;;2CE0;;2CE0 2CE2;COPTIC CAPITAL LETTER OLD NUBIAN WAU;Lu;0;L;;;;;N;;;;2CE3; 2CE3;COPTIC SMALL LETTER OLD NUBIAN WAU;Ll;0;L;;;;;N;;;2CE2;;2CE2 2CE4;COPTIC SYMBOL KAI;Ll;0;L;;;;;N;;;;; 2CE5;COPTIC SYMBOL MI RO;So;0;ON;;;;;N;;;;; 2CE6;COPTIC SYMBOL PI RO;So;0;ON;;;;;N;;;;; 2CE7;COPTIC SYMBOL STAUROS;So;0;ON;;;;;N;;;;; 2CE8;COPTIC SYMBOL TAU RO;So;0;ON;;;;;N;;;;; 2CE9;COPTIC SYMBOL KHI RO;So;0;ON;;;;;N;;;;; 2CEA;COPTIC SYMBOL SHIMA SIMA;So;0;ON;;;;;N;;;;; 2CEB;COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI;Lu;0;L;;;;;N;;;;2CEC; 2CEC;COPTIC SMALL LETTER CRYPTOGRAMMIC SHEI;Ll;0;L;;;;;N;;;2CEB;;2CEB 2CED;COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA;Lu;0;L;;;;;N;;;;2CEE; 2CEE;COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA;Ll;0;L;;;;;N;;;2CED;;2CED 2CEF;COPTIC COMBINING NI ABOVE;Mn;230;NSM;;;;;N;;;;; 2CF0;COPTIC COMBINING SPIRITUS ASPER;Mn;230;NSM;;;;;N;;;;; 2CF1;COPTIC COMBINING SPIRITUS LENIS;Mn;230;NSM;;;;;N;;;;; 2CF2;COPTIC CAPITAL LETTER BOHAIRIC KHEI;Lu;0;L;;;;;N;;;;2CF3; 2CF3;COPTIC SMALL LETTER BOHAIRIC KHEI;Ll;0;L;;;;;N;;;2CF2;;2CF2 2CF9;COPTIC OLD NUBIAN FULL STOP;Po;0;ON;;;;;N;;;;; 2CFA;COPTIC OLD NUBIAN DIRECT QUESTION MARK;Po;0;ON;;;;;N;;;;; 2CFB;COPTIC OLD NUBIAN INDIRECT QUESTION MARK;Po;0;ON;;;;;N;;;;; 2CFC;COPTIC OLD NUBIAN VERSE DIVIDER;Po;0;ON;;;;;N;;;;; 2CFD;COPTIC FRACTION ONE HALF;No;0;ON;;;;1/2;N;;;;; 2CFE;COPTIC FULL STOP;Po;0;ON;;;;;N;;;;; 2CFF;COPTIC MORPHOLOGICAL DIVIDER;Po;0;ON;;;;;N;;;;; 2D00;GEORGIAN SMALL LETTER AN;Ll;0;L;;;;;N;;;10A0;;10A0 2D01;GEORGIAN SMALL LETTER BAN;Ll;0;L;;;;;N;;;10A1;;10A1 2D02;GEORGIAN SMALL LETTER GAN;Ll;0;L;;;;;N;;;10A2;;10A2 2D03;GEORGIAN SMALL LETTER DON;Ll;0;L;;;;;N;;;10A3;;10A3 2D04;GEORGIAN SMALL LETTER EN;Ll;0;L;;;;;N;;;10A4;;10A4 2D05;GEORGIAN SMALL LETTER VIN;Ll;0;L;;;;;N;;;10A5;;10A5 2D06;GEORGIAN SMALL LETTER ZEN;Ll;0;L;;;;;N;;;10A6;;10A6 2D07;GEORGIAN SMALL LETTER TAN;Ll;0;L;;;;;N;;;10A7;;10A7 2D08;GEORGIAN SMALL LETTER IN;Ll;0;L;;;;;N;;;10A8;;10A8 2D09;GEORGIAN SMALL LETTER KAN;Ll;0;L;;;;;N;;;10A9;;10A9 2D0A;GEORGIAN SMALL LETTER LAS;Ll;0;L;;;;;N;;;10AA;;10AA 2D0B;GEORGIAN SMALL LETTER MAN;Ll;0;L;;;;;N;;;10AB;;10AB 2D0C;GEORGIAN SMALL LETTER NAR;Ll;0;L;;;;;N;;;10AC;;10AC 2D0D;GEORGIAN SMALL LETTER ON;Ll;0;L;;;;;N;;;10AD;;10AD 2D0E;GEORGIAN SMALL LETTER PAR;Ll;0;L;;;;;N;;;10AE;;10AE 2D0F;GEORGIAN SMALL LETTER ZHAR;Ll;0;L;;;;;N;;;10AF;;10AF 2D10;GEORGIAN SMALL LETTER RAE;Ll;0;L;;;;;N;;;10B0;;10B0 2D11;GEORGIAN SMALL LETTER SAN;Ll;0;L;;;;;N;;;10B1;;10B1 2D12;GEORGIAN SMALL LETTER TAR;Ll;0;L;;;;;N;;;10B2;;10B2 2D13;GEORGIAN SMALL LETTER UN;Ll;0;L;;;;;N;;;10B3;;10B3 2D14;GEORGIAN SMALL LETTER PHAR;Ll;0;L;;;;;N;;;10B4;;10B4 2D15;GEORGIAN SMALL LETTER KHAR;Ll;0;L;;;;;N;;;10B5;;10B5 2D16;GEORGIAN SMALL LETTER GHAN;Ll;0;L;;;;;N;;;10B6;;10B6 2D17;GEORGIAN SMALL LETTER QAR;Ll;0;L;;;;;N;;;10B7;;10B7 2D18;GEORGIAN SMALL LETTER SHIN;Ll;0;L;;;;;N;;;10B8;;10B8 2D19;GEORGIAN SMALL LETTER CHIN;Ll;0;L;;;;;N;;;10B9;;10B9 2D1A;GEORGIAN SMALL LETTER CAN;Ll;0;L;;;;;N;;;10BA;;10BA 2D1B;GEORGIAN SMALL LETTER JIL;Ll;0;L;;;;;N;;;10BB;;10BB 2D1C;GEORGIAN SMALL LETTER CIL;Ll;0;L;;;;;N;;;10BC;;10BC 2D1D;GEORGIAN SMALL LETTER CHAR;Ll;0;L;;;;;N;;;10BD;;10BD 2D1E;GEORGIAN SMALL LETTER XAN;Ll;0;L;;;;;N;;;10BE;;10BE 2D1F;GEORGIAN SMALL LETTER JHAN;Ll;0;L;;;;;N;;;10BF;;10BF 2D20;GEORGIAN SMALL LETTER HAE;Ll;0;L;;;;;N;;;10C0;;10C0 2D21;GEORGIAN SMALL LETTER HE;Ll;0;L;;;;;N;;;10C1;;10C1 2D22;GEORGIAN SMALL LETTER HIE;Ll;0;L;;;;;N;;;10C2;;10C2 2D23;GEORGIAN SMALL LETTER WE;Ll;0;L;;;;;N;;;10C3;;10C3 2D24;GEORGIAN SMALL LETTER HAR;Ll;0;L;;;;;N;;;10C4;;10C4 2D25;GEORGIAN SMALL LETTER HOE;Ll;0;L;;;;;N;;;10C5;;10C5 2D27;GEORGIAN SMALL LETTER YN;Ll;0;L;;;;;N;;;10C7;;10C7 2D2D;GEORGIAN SMALL LETTER AEN;Ll;0;L;;;;;N;;;10CD;;10CD 2D30;TIFINAGH LETTER YA;Lo;0;L;;;;;N;;;;; 2D31;TIFINAGH LETTER YAB;Lo;0;L;;;;;N;;;;; 2D32;TIFINAGH LETTER YABH;Lo;0;L;;;;;N;;;;; 2D33;TIFINAGH LETTER YAG;Lo;0;L;;;;;N;;;;; 2D34;TIFINAGH LETTER YAGHH;Lo;0;L;;;;;N;;;;; 2D35;TIFINAGH LETTER BERBER ACADEMY YAJ;Lo;0;L;;;;;N;;;;; 2D36;TIFINAGH LETTER YAJ;Lo;0;L;;;;;N;;;;; 2D37;TIFINAGH LETTER YAD;Lo;0;L;;;;;N;;;;; 2D38;TIFINAGH LETTER YADH;Lo;0;L;;;;;N;;;;; 2D39;TIFINAGH LETTER YADD;Lo;0;L;;;;;N;;;;; 2D3A;TIFINAGH LETTER YADDH;Lo;0;L;;;;;N;;;;; 2D3B;TIFINAGH LETTER YEY;Lo;0;L;;;;;N;;;;; 2D3C;TIFINAGH LETTER YAF;Lo;0;L;;;;;N;;;;; 2D3D;TIFINAGH LETTER YAK;Lo;0;L;;;;;N;;;;; 2D3E;TIFINAGH LETTER TUAREG YAK;Lo;0;L;;;;;N;;;;; 2D3F;TIFINAGH LETTER YAKHH;Lo;0;L;;;;;N;;;;; 2D40;TIFINAGH LETTER YAH;Lo;0;L;;;;;N;;;;; 2D41;TIFINAGH LETTER BERBER ACADEMY YAH;Lo;0;L;;;;;N;;;;; 2D42;TIFINAGH LETTER TUAREG YAH;Lo;0;L;;;;;N;;;;; 2D43;TIFINAGH LETTER YAHH;Lo;0;L;;;;;N;;;;; 2D44;TIFINAGH LETTER YAA;Lo;0;L;;;;;N;;;;; 2D45;TIFINAGH LETTER YAKH;Lo;0;L;;;;;N;;;;; 2D46;TIFINAGH LETTER TUAREG YAKH;Lo;0;L;;;;;N;;;;; 2D47;TIFINAGH LETTER YAQ;Lo;0;L;;;;;N;;;;; 2D48;TIFINAGH LETTER TUAREG YAQ;Lo;0;L;;;;;N;;;;; 2D49;TIFINAGH LETTER YI;Lo;0;L;;;;;N;;;;; 2D4A;TIFINAGH LETTER YAZH;Lo;0;L;;;;;N;;;;; 2D4B;TIFINAGH LETTER AHAGGAR YAZH;Lo;0;L;;;;;N;;;;; 2D4C;TIFINAGH LETTER TUAREG YAZH;Lo;0;L;;;;;N;;;;; 2D4D;TIFINAGH LETTER YAL;Lo;0;L;;;;;N;;;;; 2D4E;TIFINAGH LETTER YAM;Lo;0;L;;;;;N;;;;; 2D4F;TIFINAGH LETTER YAN;Lo;0;L;;;;;N;;;;; 2D50;TIFINAGH LETTER TUAREG YAGN;Lo;0;L;;;;;N;;;;; 2D51;TIFINAGH LETTER TUAREG YANG;Lo;0;L;;;;;N;;;;; 2D52;TIFINAGH LETTER YAP;Lo;0;L;;;;;N;;;;; 2D53;TIFINAGH LETTER YU;Lo;0;L;;;;;N;;;;; 2D54;TIFINAGH LETTER YAR;Lo;0;L;;;;;N;;;;; 2D55;TIFINAGH LETTER YARR;Lo;0;L;;;;;N;;;;; 2D56;TIFINAGH LETTER YAGH;Lo;0;L;;;;;N;;;;; 2D57;TIFINAGH LETTER TUAREG YAGH;Lo;0;L;;;;;N;;;;; 2D58;TIFINAGH LETTER AYER YAGH;Lo;0;L;;;;;N;;;;; 2D59;TIFINAGH LETTER YAS;Lo;0;L;;;;;N;;;;; 2D5A;TIFINAGH LETTER YASS;Lo;0;L;;;;;N;;;;; 2D5B;TIFINAGH LETTER YASH;Lo;0;L;;;;;N;;;;; 2D5C;TIFINAGH LETTER YAT;Lo;0;L;;;;;N;;;;; 2D5D;TIFINAGH LETTER YATH;Lo;0;L;;;;;N;;;;; 2D5E;TIFINAGH LETTER YACH;Lo;0;L;;;;;N;;;;; 2D5F;TIFINAGH LETTER YATT;Lo;0;L;;;;;N;;;;; 2D60;TIFINAGH LETTER YAV;Lo;0;L;;;;;N;;;;; 2D61;TIFINAGH LETTER YAW;Lo;0;L;;;;;N;;;;; 2D62;TIFINAGH LETTER YAY;Lo;0;L;;;;;N;;;;; 2D63;TIFINAGH LETTER YAZ;Lo;0;L;;;;;N;;;;; 2D64;TIFINAGH LETTER TAWELLEMET YAZ;Lo;0;L;;;;;N;;;;; 2D65;TIFINAGH LETTER YAZZ;Lo;0;L;;;;;N;;;;; 2D66;TIFINAGH LETTER YE;Lo;0;L;;;;;N;;;;; 2D67;TIFINAGH LETTER YO;Lo;0;L;;;;;N;;;;; 2D6F;TIFINAGH MODIFIER LETTER LABIALIZATION MARK;Lm;0;L; 2D61;;;;N;;;;; 2D70;TIFINAGH SEPARATOR MARK;Po;0;L;;;;;N;;;;; 2D7F;TIFINAGH CONSONANT JOINER;Mn;9;NSM;;;;;N;;;;; 2D80;ETHIOPIC SYLLABLE LOA;Lo;0;L;;;;;N;;;;; 2D81;ETHIOPIC SYLLABLE MOA;Lo;0;L;;;;;N;;;;; 2D82;ETHIOPIC SYLLABLE ROA;Lo;0;L;;;;;N;;;;; 2D83;ETHIOPIC SYLLABLE SOA;Lo;0;L;;;;;N;;;;; 2D84;ETHIOPIC SYLLABLE SHOA;Lo;0;L;;;;;N;;;;; 2D85;ETHIOPIC SYLLABLE BOA;Lo;0;L;;;;;N;;;;; 2D86;ETHIOPIC SYLLABLE TOA;Lo;0;L;;;;;N;;;;; 2D87;ETHIOPIC SYLLABLE COA;Lo;0;L;;;;;N;;;;; 2D88;ETHIOPIC SYLLABLE NOA;Lo;0;L;;;;;N;;;;; 2D89;ETHIOPIC SYLLABLE NYOA;Lo;0;L;;;;;N;;;;; 2D8A;ETHIOPIC SYLLABLE GLOTTAL OA;Lo;0;L;;;;;N;;;;; 2D8B;ETHIOPIC SYLLABLE ZOA;Lo;0;L;;;;;N;;;;; 2D8C;ETHIOPIC SYLLABLE DOA;Lo;0;L;;;;;N;;;;; 2D8D;ETHIOPIC SYLLABLE DDOA;Lo;0;L;;;;;N;;;;; 2D8E;ETHIOPIC SYLLABLE JOA;Lo;0;L;;;;;N;;;;; 2D8F;ETHIOPIC SYLLABLE THOA;Lo;0;L;;;;;N;;;;; 2D90;ETHIOPIC SYLLABLE CHOA;Lo;0;L;;;;;N;;;;; 2D91;ETHIOPIC SYLLABLE PHOA;Lo;0;L;;;;;N;;;;; 2D92;ETHIOPIC SYLLABLE POA;Lo;0;L;;;;;N;;;;; 2D93;ETHIOPIC SYLLABLE GGWA;Lo;0;L;;;;;N;;;;; 2D94;ETHIOPIC SYLLABLE GGWI;Lo;0;L;;;;;N;;;;; 2D95;ETHIOPIC SYLLABLE GGWEE;Lo;0;L;;;;;N;;;;; 2D96;ETHIOPIC SYLLABLE GGWE;Lo;0;L;;;;;N;;;;; 2DA0;ETHIOPIC SYLLABLE SSA;Lo;0;L;;;;;N;;;;; 2DA1;ETHIOPIC SYLLABLE SSU;Lo;0;L;;;;;N;;;;; 2DA2;ETHIOPIC SYLLABLE SSI;Lo;0;L;;;;;N;;;;; 2DA3;ETHIOPIC SYLLABLE SSAA;Lo;0;L;;;;;N;;;;; 2DA4;ETHIOPIC SYLLABLE SSEE;Lo;0;L;;;;;N;;;;; 2DA5;ETHIOPIC SYLLABLE SSE;Lo;0;L;;;;;N;;;;; 2DA6;ETHIOPIC SYLLABLE SSO;Lo;0;L;;;;;N;;;;; 2DA8;ETHIOPIC SYLLABLE CCA;Lo;0;L;;;;;N;;;;; 2DA9;ETHIOPIC SYLLABLE CCU;Lo;0;L;;;;;N;;;;; 2DAA;ETHIOPIC SYLLABLE CCI;Lo;0;L;;;;;N;;;;; 2DAB;ETHIOPIC SYLLABLE CCAA;Lo;0;L;;;;;N;;;;; 2DAC;ETHIOPIC SYLLABLE CCEE;Lo;0;L;;;;;N;;;;; 2DAD;ETHIOPIC SYLLABLE CCE;Lo;0;L;;;;;N;;;;; 2DAE;ETHIOPIC SYLLABLE CCO;Lo;0;L;;;;;N;;;;; 2DB0;ETHIOPIC SYLLABLE ZZA;Lo;0;L;;;;;N;;;;; 2DB1;ETHIOPIC SYLLABLE ZZU;Lo;0;L;;;;;N;;;;; 2DB2;ETHIOPIC SYLLABLE ZZI;Lo;0;L;;;;;N;;;;; 2DB3;ETHIOPIC SYLLABLE ZZAA;Lo;0;L;;;;;N;;;;; 2DB4;ETHIOPIC SYLLABLE ZZEE;Lo;0;L;;;;;N;;;;; 2DB5;ETHIOPIC SYLLABLE ZZE;Lo;0;L;;;;;N;;;;; 2DB6;ETHIOPIC SYLLABLE ZZO;Lo;0;L;;;;;N;;;;; 2DB8;ETHIOPIC SYLLABLE CCHA;Lo;0;L;;;;;N;;;;; 2DB9;ETHIOPIC SYLLABLE CCHU;Lo;0;L;;;;;N;;;;; 2DBA;ETHIOPIC SYLLABLE CCHI;Lo;0;L;;;;;N;;;;; 2DBB;ETHIOPIC SYLLABLE CCHAA;Lo;0;L;;;;;N;;;;; 2DBC;ETHIOPIC SYLLABLE CCHEE;Lo;0;L;;;;;N;;;;; 2DBD;ETHIOPIC SYLLABLE CCHE;Lo;0;L;;;;;N;;;;; 2DBE;ETHIOPIC SYLLABLE CCHO;Lo;0;L;;;;;N;;;;; 2DC0;ETHIOPIC SYLLABLE QYA;Lo;0;L;;;;;N;;;;; 2DC1;ETHIOPIC SYLLABLE QYU;Lo;0;L;;;;;N;;;;; 2DC2;ETHIOPIC SYLLABLE QYI;Lo;0;L;;;;;N;;;;; 2DC3;ETHIOPIC SYLLABLE QYAA;Lo;0;L;;;;;N;;;;; 2DC4;ETHIOPIC SYLLABLE QYEE;Lo;0;L;;;;;N;;;;; 2DC5;ETHIOPIC SYLLABLE QYE;Lo;0;L;;;;;N;;;;; 2DC6;ETHIOPIC SYLLABLE QYO;Lo;0;L;;;;;N;;;;; 2DC8;ETHIOPIC SYLLABLE KYA;Lo;0;L;;;;;N;;;;; 2DC9;ETHIOPIC SYLLABLE KYU;Lo;0;L;;;;;N;;;;; 2DCA;ETHIOPIC SYLLABLE KYI;Lo;0;L;;;;;N;;;;; 2DCB;ETHIOPIC SYLLABLE KYAA;Lo;0;L;;;;;N;;;;; 2DCC;ETHIOPIC SYLLABLE KYEE;Lo;0;L;;;;;N;;;;; 2DCD;ETHIOPIC SYLLABLE KYE;Lo;0;L;;;;;N;;;;; 2DCE;ETHIOPIC SYLLABLE KYO;Lo;0;L;;;;;N;;;;; 2DD0;ETHIOPIC SYLLABLE XYA;Lo;0;L;;;;;N;;;;; 2DD1;ETHIOPIC SYLLABLE XYU;Lo;0;L;;;;;N;;;;; 2DD2;ETHIOPIC SYLLABLE XYI;Lo;0;L;;;;;N;;;;; 2DD3;ETHIOPIC SYLLABLE XYAA;Lo;0;L;;;;;N;;;;; 2DD4;ETHIOPIC SYLLABLE XYEE;Lo;0;L;;;;;N;;;;; 2DD5;ETHIOPIC SYLLABLE XYE;Lo;0;L;;;;;N;;;;; 2DD6;ETHIOPIC SYLLABLE XYO;Lo;0;L;;;;;N;;;;; 2DD8;ETHIOPIC SYLLABLE GYA;Lo;0;L;;;;;N;;;;; 2DD9;ETHIOPIC SYLLABLE GYU;Lo;0;L;;;;;N;;;;; 2DDA;ETHIOPIC SYLLABLE GYI;Lo;0;L;;;;;N;;;;; 2DDB;ETHIOPIC SYLLABLE GYAA;Lo;0;L;;;;;N;;;;; 2DDC;ETHIOPIC SYLLABLE GYEE;Lo;0;L;;;;;N;;;;; 2DDD;ETHIOPIC SYLLABLE GYE;Lo;0;L;;;;;N;;;;; 2DDE;ETHIOPIC SYLLABLE GYO;Lo;0;L;;;;;N;;;;; 2DE0;COMBINING CYRILLIC LETTER BE;Mn;230;NSM;;;;;N;;;;; 2DE1;COMBINING CYRILLIC LETTER VE;Mn;230;NSM;;;;;N;;;;; 2DE2;COMBINING CYRILLIC LETTER GHE;Mn;230;NSM;;;;;N;;;;; 2DE3;COMBINING CYRILLIC LETTER DE;Mn;230;NSM;;;;;N;;;;; 2DE4;COMBINING CYRILLIC LETTER ZHE;Mn;230;NSM;;;;;N;;;;; 2DE5;COMBINING CYRILLIC LETTER ZE;Mn;230;NSM;;;;;N;;;;; 2DE6;COMBINING CYRILLIC LETTER KA;Mn;230;NSM;;;;;N;;;;; 2DE7;COMBINING CYRILLIC LETTER EL;Mn;230;NSM;;;;;N;;;;; 2DE8;COMBINING CYRILLIC LETTER EM;Mn;230;NSM;;;;;N;;;;; 2DE9;COMBINING CYRILLIC LETTER EN;Mn;230;NSM;;;;;N;;;;; 2DEA;COMBINING CYRILLIC LETTER O;Mn;230;NSM;;;;;N;;;;; 2DEB;COMBINING CYRILLIC LETTER PE;Mn;230;NSM;;;;;N;;;;; 2DEC;COMBINING CYRILLIC LETTER ER;Mn;230;NSM;;;;;N;;;;; 2DED;COMBINING CYRILLIC LETTER ES;Mn;230;NSM;;;;;N;;;;; 2DEE;COMBINING CYRILLIC LETTER TE;Mn;230;NSM;;;;;N;;;;; 2DEF;COMBINING CYRILLIC LETTER HA;Mn;230;NSM;;;;;N;;;;; 2DF0;COMBINING CYRILLIC LETTER TSE;Mn;230;NSM;;;;;N;;;;; 2DF1;COMBINING CYRILLIC LETTER CHE;Mn;230;NSM;;;;;N;;;;; 2DF2;COMBINING CYRILLIC LETTER SHA;Mn;230;NSM;;;;;N;;;;; 2DF3;COMBINING CYRILLIC LETTER SHCHA;Mn;230;NSM;;;;;N;;;;; 2DF4;COMBINING CYRILLIC LETTER FITA;Mn;230;NSM;;;;;N;;;;; 2DF5;COMBINING CYRILLIC LETTER ES-TE;Mn;230;NSM;;;;;N;;;;; 2DF6;COMBINING CYRILLIC LETTER A;Mn;230;NSM;;;;;N;;;;; 2DF7;COMBINING CYRILLIC LETTER IE;Mn;230;NSM;;;;;N;;;;; 2DF8;COMBINING CYRILLIC LETTER DJERV;Mn;230;NSM;;;;;N;;;;; 2DF9;COMBINING CYRILLIC LETTER MONOGRAPH UK;Mn;230;NSM;;;;;N;;;;; 2DFA;COMBINING CYRILLIC LETTER YAT;Mn;230;NSM;;;;;N;;;;; 2DFB;COMBINING CYRILLIC LETTER YU;Mn;230;NSM;;;;;N;;;;; 2DFC;COMBINING CYRILLIC LETTER IOTIFIED A;Mn;230;NSM;;;;;N;;;;; 2DFD;COMBINING CYRILLIC LETTER LITTLE YUS;Mn;230;NSM;;;;;N;;;;; 2DFE;COMBINING CYRILLIC LETTER BIG YUS;Mn;230;NSM;;;;;N;;;;; 2DFF;COMBINING CYRILLIC LETTER IOTIFIED BIG YUS;Mn;230;NSM;;;;;N;;;;; 2E00;RIGHT ANGLE SUBSTITUTION MARKER;Po;0;ON;;;;;N;;;;; 2E01;RIGHT ANGLE DOTTED SUBSTITUTION MARKER;Po;0;ON;;;;;N;;;;; 2E02;LEFT SUBSTITUTION BRACKET;Pi;0;ON;;;;;Y;;;;; 2E03;RIGHT SUBSTITUTION BRACKET;Pf;0;ON;;;;;Y;;;;; 2E04;LEFT DOTTED SUBSTITUTION BRACKET;Pi;0;ON;;;;;Y;;;;; 2E05;RIGHT DOTTED SUBSTITUTION BRACKET;Pf;0;ON;;;;;Y;;;;; 2E06;RAISED INTERPOLATION MARKER;Po;0;ON;;;;;N;;;;; 2E07;RAISED DOTTED INTERPOLATION MARKER;Po;0;ON;;;;;N;;;;; 2E08;DOTTED TRANSPOSITION MARKER;Po;0;ON;;;;;N;;;;; 2E09;LEFT TRANSPOSITION BRACKET;Pi;0;ON;;;;;Y;;;;; 2E0A;RIGHT TRANSPOSITION BRACKET;Pf;0;ON;;;;;Y;;;;; 2E0B;RAISED SQUARE;Po;0;ON;;;;;N;;;;; 2E0C;LEFT RAISED OMISSION BRACKET;Pi;0;ON;;;;;Y;;;;; 2E0D;RIGHT RAISED OMISSION BRACKET;Pf;0;ON;;;;;Y;;;;; 2E0E;EDITORIAL CORONIS;Po;0;ON;;;;;N;;;;; 2E0F;PARAGRAPHOS;Po;0;ON;;;;;N;;;;; 2E10;FORKED PARAGRAPHOS;Po;0;ON;;;;;N;;;;; 2E11;REVERSED FORKED PARAGRAPHOS;Po;0;ON;;;;;N;;;;; 2E12;HYPODIASTOLE;Po;0;ON;;;;;N;;;;; 2E13;DOTTED OBELOS;Po;0;ON;;;;;N;;;;; 2E14;DOWNWARDS ANCORA;Po;0;ON;;;;;N;;;;; 2E15;UPWARDS ANCORA;Po;0;ON;;;;;N;;;;; 2E16;DOTTED RIGHT-POINTING ANGLE;Po;0;ON;;;;;N;;;;; 2E17;DOUBLE OBLIQUE HYPHEN;Pd;0;ON;;;;;N;;;;; 2E18;INVERTED INTERROBANG;Po;0;ON;;;;;N;;;;; 2E19;PALM BRANCH;Po;0;ON;;;;;N;;;;; 2E1A;HYPHEN WITH DIAERESIS;Pd;0;ON;;;;;N;;;;; 2E1B;TILDE WITH RING ABOVE;Po;0;ON;;;;;N;;;;; 2E1C;LEFT LOW PARAPHRASE BRACKET;Pi;0;ON;;;;;Y;;;;; 2E1D;RIGHT LOW PARAPHRASE BRACKET;Pf;0;ON;;;;;Y;;;;; 2E1E;TILDE WITH DOT ABOVE;Po;0;ON;;;;;N;;;;; 2E1F;TILDE WITH DOT BELOW;Po;0;ON;;;;;N;;;;; 2E20;LEFT VERTICAL BAR WITH QUILL;Pi;0;ON;;;;;Y;;;;; 2E21;RIGHT VERTICAL BAR WITH QUILL;Pf;0;ON;;;;;Y;;;;; 2E22;TOP LEFT HALF BRACKET;Ps;0;ON;;;;;Y;;;;; 2E23;TOP RIGHT HALF BRACKET;Pe;0;ON;;;;;Y;;;;; 2E24;BOTTOM LEFT HALF BRACKET;Ps;0;ON;;;;;Y;;;;; 2E25;BOTTOM RIGHT HALF BRACKET;Pe;0;ON;;;;;Y;;;;; 2E26;LEFT SIDEWAYS U BRACKET;Ps;0;ON;;;;;Y;;;;; 2E27;RIGHT SIDEWAYS U BRACKET;Pe;0;ON;;;;;Y;;;;; 2E28;LEFT DOUBLE PARENTHESIS;Ps;0;ON;;;;;Y;;;;; 2E29;RIGHT DOUBLE PARENTHESIS;Pe;0;ON;;;;;Y;;;;; 2E2A;TWO DOTS OVER ONE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;; 2E2B;ONE DOT OVER TWO DOTS PUNCTUATION;Po;0;ON;;;;;N;;;;; 2E2C;SQUARED FOUR DOT PUNCTUATION;Po;0;ON;;;;;N;;;;; 2E2D;FIVE DOT MARK;Po;0;ON;;;;;N;;;;; 2E2E;REVERSED QUESTION MARK;Po;0;ON;;;;;N;;;;; 2E2F;VERTICAL TILDE;Lm;0;ON;;;;;N;;;;; 2E30;RING POINT;Po;0;ON;;;;;N;;;;; 2E31;WORD SEPARATOR MIDDLE DOT;Po;0;ON;;;;;N;;;;; 2E32;TURNED COMMA;Po;0;ON;;;;;N;;;;; 2E33;RAISED DOT;Po;0;ON;;;;;N;;;;; 2E34;RAISED COMMA;Po;0;ON;;;;;N;;;;; 2E35;TURNED SEMICOLON;Po;0;ON;;;;;N;;;;; 2E36;DAGGER WITH LEFT GUARD;Po;0;ON;;;;;N;;;;; 2E37;DAGGER WITH RIGHT GUARD;Po;0;ON;;;;;N;;;;; 2E38;TURNED DAGGER;Po;0;ON;;;;;N;;;;; 2E39;TOP HALF SECTION SIGN;Po;0;ON;;;;;N;;;;; 2E3A;TWO-EM DASH;Pd;0;ON;;;;;N;;;;; 2E3B;THREE-EM DASH;Pd;0;ON;;;;;N;;;;; 2E3C;STENOGRAPHIC FULL STOP;Po;0;ON;;;;;N;;;;; 2E3D;VERTICAL SIX DOTS;Po;0;ON;;;;;N;;;;; 2E3E;WIGGLY VERTICAL LINE;Po;0;ON;;;;;N;;;;; 2E3F;CAPITULUM;Po;0;ON;;;;;N;;;;; 2E40;DOUBLE HYPHEN;Pd;0;ON;;;;;N;;;;; 2E41;REVERSED COMMA;Po;0;ON;;;;;N;;;;; 2E42;DOUBLE LOW-REVERSED-9 QUOTATION MARK;Ps;0;ON;;;;;N;;;;; 2E43;DASH WITH LEFT UPTURN;Po;0;ON;;;;;N;;;;; 2E44;DOUBLE SUSPENSION MARK;Po;0;ON;;;;;N;;;;; 2E45;INVERTED LOW KAVYKA;Po;0;ON;;;;;N;;;;; 2E46;INVERTED LOW KAVYKA WITH KAVYKA ABOVE;Po;0;ON;;;;;N;;;;; 2E47;LOW KAVYKA;Po;0;ON;;;;;N;;;;; 2E48;LOW KAVYKA WITH DOT;Po;0;ON;;;;;N;;;;; 2E49;DOUBLE STACKED COMMA;Po;0;ON;;;;;N;;;;; 2E4A;DOTTED SOLIDUS;Po;0;ON;;;;;N;;;;; 2E4B;TRIPLE DAGGER;Po;0;ON;;;;;N;;;;; 2E4C;MEDIEVAL COMMA;Po;0;ON;;;;;N;;;;; 2E4D;PARAGRAPHUS MARK;Po;0;ON;;;;;N;;;;; 2E4E;PUNCTUS ELEVATUS MARK;Po;0;ON;;;;;N;;;;; 2E4F;CORNISH VERSE DIVIDER;Po;0;ON;;;;;N;;;;; 2E50;CROSS PATTY WITH RIGHT CROSSBAR;So;0;ON;;;;;N;;;;; 2E51;CROSS PATTY WITH LEFT CROSSBAR;So;0;ON;;;;;N;;;;; 2E52;TIRONIAN SIGN CAPITAL ET;Po;0;ON;;;;;N;;;;; 2E53;MEDIEVAL EXCLAMATION MARK;Po;0;ON;;;;;N;;;;; 2E54;MEDIEVAL QUESTION MARK;Po;0;ON;;;;;N;;;;; 2E55;LEFT SQUARE BRACKET WITH STROKE;Ps;0;ON;;;;;Y;;;;; 2E56;RIGHT SQUARE BRACKET WITH STROKE;Pe;0;ON;;;;;Y;;;;; 2E57;LEFT SQUARE BRACKET WITH DOUBLE STROKE;Ps;0;ON;;;;;Y;;;;; 2E58;RIGHT SQUARE BRACKET WITH DOUBLE STROKE;Pe;0;ON;;;;;Y;;;;; 2E59;TOP HALF LEFT PARENTHESIS;Ps;0;ON;;;;;Y;;;;; 2E5A;TOP HALF RIGHT PARENTHESIS;Pe;0;ON;;;;;Y;;;;; 2E5B;BOTTOM HALF LEFT PARENTHESIS;Ps;0;ON;;;;;Y;;;;; 2E5C;BOTTOM HALF RIGHT PARENTHESIS;Pe;0;ON;;;;;Y;;;;; 2E5D;OBLIQUE HYPHEN;Pd;0;ON;;;;;N;;;;; 2E80;CJK RADICAL REPEAT;So;0;ON;;;;;N;;;;; 2E81;CJK RADICAL CLIFF;So;0;ON;;;;;N;;;;; 2E82;CJK RADICAL SECOND ONE;So;0;ON;;;;;N;;;;; 2E83;CJK RADICAL SECOND TWO;So;0;ON;;;;;N;;;;; 2E84;CJK RADICAL SECOND THREE;So;0;ON;;;;;N;;;;; 2E85;CJK RADICAL PERSON;So;0;ON;;;;;N;;;;; 2E86;CJK RADICAL BOX;So;0;ON;;;;;N;;;;; 2E87;CJK RADICAL TABLE;So;0;ON;;;;;N;;;;; 2E88;CJK RADICAL KNIFE ONE;So;0;ON;;;;;N;;;;; 2E89;CJK RADICAL KNIFE TWO;So;0;ON;;;;;N;;;;; 2E8A;CJK RADICAL DIVINATION;So;0;ON;;;;;N;;;;; 2E8B;CJK RADICAL SEAL;So;0;ON;;;;;N;;;;; 2E8C;CJK RADICAL SMALL ONE;So;0;ON;;;;;N;;;;; 2E8D;CJK RADICAL SMALL TWO;So;0;ON;;;;;N;;;;; 2E8E;CJK RADICAL LAME ONE;So;0;ON;;;;;N;;;;; 2E8F;CJK RADICAL LAME TWO;So;0;ON;;;;;N;;;;; 2E90;CJK RADICAL LAME THREE;So;0;ON;;;;;N;;;;; 2E91;CJK RADICAL LAME FOUR;So;0;ON;;;;;N;;;;; 2E92;CJK RADICAL SNAKE;So;0;ON;;;;;N;;;;; 2E93;CJK RADICAL THREAD;So;0;ON;;;;;N;;;;; 2E94;CJK RADICAL SNOUT ONE;So;0;ON;;;;;N;;;;; 2E95;CJK RADICAL SNOUT TWO;So;0;ON;;;;;N;;;;; 2E96;CJK RADICAL HEART ONE;So;0;ON;;;;;N;;;;; 2E97;CJK RADICAL HEART TWO;So;0;ON;;;;;N;;;;; 2E98;CJK RADICAL HAND;So;0;ON;;;;;N;;;;; 2E99;CJK RADICAL RAP;So;0;ON;;;;;N;;;;; 2E9B;CJK RADICAL CHOKE;So;0;ON;;;;;N;;;;; 2E9C;CJK RADICAL SUN;So;0;ON;;;;;N;;;;; 2E9D;CJK RADICAL MOON;So;0;ON;;;;;N;;;;; 2E9E;CJK RADICAL DEATH;So;0;ON;;;;;N;;;;; 2E9F;CJK RADICAL MOTHER;So;0;ON; 6BCD;;;;N;;;;; 2EA0;CJK RADICAL CIVILIAN;So;0;ON;;;;;N;;;;; 2EA1;CJK RADICAL WATER ONE;So;0;ON;;;;;N;;;;; 2EA2;CJK RADICAL WATER TWO;So;0;ON;;;;;N;;;;; 2EA3;CJK RADICAL FIRE;So;0;ON;;;;;N;;;;; 2EA4;CJK RADICAL PAW ONE;So;0;ON;;;;;N;;;;; 2EA5;CJK RADICAL PAW TWO;So;0;ON;;;;;N;;;;; 2EA6;CJK RADICAL SIMPLIFIED HALF TREE TRUNK;So;0;ON;;;;;N;;;;; 2EA7;CJK RADICAL COW;So;0;ON;;;;;N;;;;; 2EA8;CJK RADICAL DOG;So;0;ON;;;;;N;;;;; 2EA9;CJK RADICAL JADE;So;0;ON;;;;;N;;;;; 2EAA;CJK RADICAL BOLT OF CLOTH;So;0;ON;;;;;N;;;;; 2EAB;CJK RADICAL EYE;So;0;ON;;;;;N;;;;; 2EAC;CJK RADICAL SPIRIT ONE;So;0;ON;;;;;N;;;;; 2EAD;CJK RADICAL SPIRIT TWO;So;0;ON;;;;;N;;;;; 2EAE;CJK RADICAL BAMBOO;So;0;ON;;;;;N;;;;; 2EAF;CJK RADICAL SILK;So;0;ON;;;;;N;;;;; 2EB0;CJK RADICAL C-SIMPLIFIED SILK;So;0;ON;;;;;N;;;;; 2EB1;CJK RADICAL NET ONE;So;0;ON;;;;;N;;;;; 2EB2;CJK RADICAL NET TWO;So;0;ON;;;;;N;;;;; 2EB3;CJK RADICAL NET THREE;So;0;ON;;;;;N;;;;; 2EB4;CJK RADICAL NET FOUR;So;0;ON;;;;;N;;;;; 2EB5;CJK RADICAL MESH;So;0;ON;;;;;N;;;;; 2EB6;CJK RADICAL SHEEP;So;0;ON;;;;;N;;;;; 2EB7;CJK RADICAL RAM;So;0;ON;;;;;N;;;;; 2EB8;CJK RADICAL EWE;So;0;ON;;;;;N;;;;; 2EB9;CJK RADICAL OLD;So;0;ON;;;;;N;;;;; 2EBA;CJK RADICAL BRUSH ONE;So;0;ON;;;;;N;;;;; 2EBB;CJK RADICAL BRUSH TWO;So;0;ON;;;;;N;;;;; 2EBC;CJK RADICAL MEAT;So;0;ON;;;;;N;;;;; 2EBD;CJK RADICAL MORTAR;So;0;ON;;;;;N;;;;; 2EBE;CJK RADICAL GRASS ONE;So;0;ON;;;;;N;;;;; 2EBF;CJK RADICAL GRASS TWO;So;0;ON;;;;;N;;;;; 2EC0;CJK RADICAL GRASS THREE;So;0;ON;;;;;N;;;;; 2EC1;CJK RADICAL TIGER;So;0;ON;;;;;N;;;;; 2EC2;CJK RADICAL CLOTHES;So;0;ON;;;;;N;;;;; 2EC3;CJK RADICAL WEST ONE;So;0;ON;;;;;N;;;;; 2EC4;CJK RADICAL WEST TWO;So;0;ON;;;;;N;;;;; 2EC5;CJK RADICAL C-SIMPLIFIED SEE;So;0;ON;;;;;N;;;;; 2EC6;CJK RADICAL SIMPLIFIED HORN;So;0;ON;;;;;N;;;;; 2EC7;CJK RADICAL HORN;So;0;ON;;;;;N;;;;; 2EC8;CJK RADICAL C-SIMPLIFIED SPEECH;So;0;ON;;;;;N;;;;; 2EC9;CJK RADICAL C-SIMPLIFIED SHELL;So;0;ON;;;;;N;;;;; 2ECA;CJK RADICAL FOOT;So;0;ON;;;;;N;;;;; 2ECB;CJK RADICAL C-SIMPLIFIED CART;So;0;ON;;;;;N;;;;; 2ECC;CJK RADICAL SIMPLIFIED WALK;So;0;ON;;;;;N;;;;; 2ECD;CJK RADICAL WALK ONE;So;0;ON;;;;;N;;;;; 2ECE;CJK RADICAL WALK TWO;So;0;ON;;;;;N;;;;; 2ECF;CJK RADICAL CITY;So;0;ON;;;;;N;;;;; 2ED0;CJK RADICAL C-SIMPLIFIED GOLD;So;0;ON;;;;;N;;;;; 2ED1;CJK RADICAL LONG ONE;So;0;ON;;;;;N;;;;; 2ED2;CJK RADICAL LONG TWO;So;0;ON;;;;;N;;;;; 2ED3;CJK RADICAL C-SIMPLIFIED LONG;So;0;ON;;;;;N;;;;; 2ED4;CJK RADICAL C-SIMPLIFIED GATE;So;0;ON;;;;;N;;;;; 2ED5;CJK RADICAL MOUND ONE;So;0;ON;;;;;N;;;;; 2ED6;CJK RADICAL MOUND TWO;So;0;ON;;;;;N;;;;; 2ED7;CJK RADICAL RAIN;So;0;ON;;;;;N;;;;; 2ED8;CJK RADICAL BLUE;So;0;ON;;;;;N;;;;; 2ED9;CJK RADICAL C-SIMPLIFIED TANNED LEATHER;So;0;ON;;;;;N;;;;; 2EDA;CJK RADICAL C-SIMPLIFIED LEAF;So;0;ON;;;;;N;;;;; 2EDB;CJK RADICAL C-SIMPLIFIED WIND;So;0;ON;;;;;N;;;;; 2EDC;CJK RADICAL C-SIMPLIFIED FLY;So;0;ON;;;;;N;;;;; 2EDD;CJK RADICAL EAT ONE;So;0;ON;;;;;N;;;;; 2EDE;CJK RADICAL EAT TWO;So;0;ON;;;;;N;;;;; 2EDF;CJK RADICAL EAT THREE;So;0;ON;;;;;N;;;;; 2EE0;CJK RADICAL C-SIMPLIFIED EAT;So;0;ON;;;;;N;;;;; 2EE1;CJK RADICAL HEAD;So;0;ON;;;;;N;;;;; 2EE2;CJK RADICAL C-SIMPLIFIED HORSE;So;0;ON;;;;;N;;;;; 2EE3;CJK RADICAL BONE;So;0;ON;;;;;N;;;;; 2EE4;CJK RADICAL GHOST;So;0;ON;;;;;N;;;;; 2EE5;CJK RADICAL C-SIMPLIFIED FISH;So;0;ON;;;;;N;;;;; 2EE6;CJK RADICAL C-SIMPLIFIED BIRD;So;0;ON;;;;;N;;;;; 2EE7;CJK RADICAL C-SIMPLIFIED SALT;So;0;ON;;;;;N;;;;; 2EE8;CJK RADICAL SIMPLIFIED WHEAT;So;0;ON;;;;;N;;;;; 2EE9;CJK RADICAL SIMPLIFIED YELLOW;So;0;ON;;;;;N;;;;; 2EEA;CJK RADICAL C-SIMPLIFIED FROG;So;0;ON;;;;;N;;;;; 2EEB;CJK RADICAL J-SIMPLIFIED EVEN;So;0;ON;;;;;N;;;;; 2EEC;CJK RADICAL C-SIMPLIFIED EVEN;So;0;ON;;;;;N;;;;; 2EED;CJK RADICAL J-SIMPLIFIED TOOTH;So;0;ON;;;;;N;;;;; 2EEE;CJK RADICAL C-SIMPLIFIED TOOTH;So;0;ON;;;;;N;;;;; 2EEF;CJK RADICAL J-SIMPLIFIED DRAGON;So;0;ON;;;;;N;;;;; 2EF0;CJK RADICAL C-SIMPLIFIED DRAGON;So;0;ON;;;;;N;;;;; 2EF1;CJK RADICAL TURTLE;So;0;ON;;;;;N;;;;; 2EF2;CJK RADICAL J-SIMPLIFIED TURTLE;So;0;ON;;;;;N;;;;; 2EF3;CJK RADICAL C-SIMPLIFIED TURTLE;So;0;ON; 9F9F;;;;N;;;;; 2F00;KANGXI RADICAL ONE;So;0;ON; 4E00;;;;N;;;;; 2F01;KANGXI RADICAL LINE;So;0;ON; 4E28;;;;N;;;;; 2F02;KANGXI RADICAL DOT;So;0;ON; 4E36;;;;N;;;;; 2F03;KANGXI RADICAL SLASH;So;0;ON; 4E3F;;;;N;;;;; 2F04;KANGXI RADICAL SECOND;So;0;ON; 4E59;;;;N;;;;; 2F05;KANGXI RADICAL HOOK;So;0;ON; 4E85;;;;N;;;;; 2F06;KANGXI RADICAL TWO;So;0;ON; 4E8C;;;;N;;;;; 2F07;KANGXI RADICAL LID;So;0;ON; 4EA0;;;;N;;;;; 2F08;KANGXI RADICAL MAN;So;0;ON; 4EBA;;;;N;;;;; 2F09;KANGXI RADICAL LEGS;So;0;ON; 513F;;;;N;;;;; 2F0A;KANGXI RADICAL ENTER;So;0;ON; 5165;;;;N;;;;; 2F0B;KANGXI RADICAL EIGHT;So;0;ON; 516B;;;;N;;;;; 2F0C;KANGXI RADICAL DOWN BOX;So;0;ON; 5182;;;;N;;;;; 2F0D;KANGXI RADICAL COVER;So;0;ON; 5196;;;;N;;;;; 2F0E;KANGXI RADICAL ICE;So;0;ON; 51AB;;;;N;;;;; 2F0F;KANGXI RADICAL TABLE;So;0;ON; 51E0;;;;N;;;;; 2F10;KANGXI RADICAL OPEN BOX;So;0;ON; 51F5;;;;N;;;;; 2F11;KANGXI RADICAL KNIFE;So;0;ON; 5200;;;;N;;;;; 2F12;KANGXI RADICAL POWER;So;0;ON; 529B;;;;N;;;;; 2F13;KANGXI RADICAL WRAP;So;0;ON; 52F9;;;;N;;;;; 2F14;KANGXI RADICAL SPOON;So;0;ON; 5315;;;;N;;;;; 2F15;KANGXI RADICAL RIGHT OPEN BOX;So;0;ON; 531A;;;;N;;;;; 2F16;KANGXI RADICAL HIDING ENCLOSURE;So;0;ON; 5338;;;;N;;;;; 2F17;KANGXI RADICAL TEN;So;0;ON; 5341;;;;N;;;;; 2F18;KANGXI RADICAL DIVINATION;So;0;ON; 535C;;;;N;;;;; 2F19;KANGXI RADICAL SEAL;So;0;ON; 5369;;;;N;;;;; 2F1A;KANGXI RADICAL CLIFF;So;0;ON; 5382;;;;N;;;;; 2F1B;KANGXI RADICAL PRIVATE;So;0;ON; 53B6;;;;N;;;;; 2F1C;KANGXI RADICAL AGAIN;So;0;ON; 53C8;;;;N;;;;; 2F1D;KANGXI RADICAL MOUTH;So;0;ON; 53E3;;;;N;;;;; 2F1E;KANGXI RADICAL ENCLOSURE;So;0;ON; 56D7;;;;N;;;;; 2F1F;KANGXI RADICAL EARTH;So;0;ON; 571F;;;;N;;;;; 2F20;KANGXI RADICAL SCHOLAR;So;0;ON; 58EB;;;;N;;;;; 2F21;KANGXI RADICAL GO;So;0;ON; 5902;;;;N;;;;; 2F22;KANGXI RADICAL GO SLOWLY;So;0;ON; 590A;;;;N;;;;; 2F23;KANGXI RADICAL EVENING;So;0;ON; 5915;;;;N;;;;; 2F24;KANGXI RADICAL BIG;So;0;ON; 5927;;;;N;;;;; 2F25;KANGXI RADICAL WOMAN;So;0;ON; 5973;;;;N;;;;; 2F26;KANGXI RADICAL CHILD;So;0;ON; 5B50;;;;N;;;;; 2F27;KANGXI RADICAL ROOF;So;0;ON; 5B80;;;;N;;;;; 2F28;KANGXI RADICAL INCH;So;0;ON; 5BF8;;;;N;;;;; 2F29;KANGXI RADICAL SMALL;So;0;ON; 5C0F;;;;N;;;;; 2F2A;KANGXI RADICAL LAME;So;0;ON; 5C22;;;;N;;;;; 2F2B;KANGXI RADICAL CORPSE;So;0;ON; 5C38;;;;N;;;;; 2F2C;KANGXI RADICAL SPROUT;So;0;ON; 5C6E;;;;N;;;;; 2F2D;KANGXI RADICAL MOUNTAIN;So;0;ON; 5C71;;;;N;;;;; 2F2E;KANGXI RADICAL RIVER;So;0;ON; 5DDB;;;;N;;;;; 2F2F;KANGXI RADICAL WORK;So;0;ON; 5DE5;;;;N;;;;; 2F30;KANGXI RADICAL ONESELF;So;0;ON; 5DF1;;;;N;;;;; 2F31;KANGXI RADICAL TURBAN;So;0;ON; 5DFE;;;;N;;;;; 2F32;KANGXI RADICAL DRY;So;0;ON; 5E72;;;;N;;;;; 2F33;KANGXI RADICAL SHORT THREAD;So;0;ON; 5E7A;;;;N;;;;; 2F34;KANGXI RADICAL DOTTED CLIFF;So;0;ON; 5E7F;;;;N;;;;; 2F35;KANGXI RADICAL LONG STRIDE;So;0;ON; 5EF4;;;;N;;;;; 2F36;KANGXI RADICAL TWO HANDS;So;0;ON; 5EFE;;;;N;;;;; 2F37;KANGXI RADICAL SHOOT;So;0;ON; 5F0B;;;;N;;;;; 2F38;KANGXI RADICAL BOW;So;0;ON; 5F13;;;;N;;;;; 2F39;KANGXI RADICAL SNOUT;So;0;ON; 5F50;;;;N;;;;; 2F3A;KANGXI RADICAL BRISTLE;So;0;ON; 5F61;;;;N;;;;; 2F3B;KANGXI RADICAL STEP;So;0;ON; 5F73;;;;N;;;;; 2F3C;KANGXI RADICAL HEART;So;0;ON; 5FC3;;;;N;;;;; 2F3D;KANGXI RADICAL HALBERD;So;0;ON; 6208;;;;N;;;;; 2F3E;KANGXI RADICAL DOOR;So;0;ON; 6236;;;;N;;;;; 2F3F;KANGXI RADICAL HAND;So;0;ON; 624B;;;;N;;;;; 2F40;KANGXI RADICAL BRANCH;So;0;ON; 652F;;;;N;;;;; 2F41;KANGXI RADICAL RAP;So;0;ON; 6534;;;;N;;;;; 2F42;KANGXI RADICAL SCRIPT;So;0;ON; 6587;;;;N;;;;; 2F43;KANGXI RADICAL DIPPER;So;0;ON; 6597;;;;N;;;;; 2F44;KANGXI RADICAL AXE;So;0;ON; 65A4;;;;N;;;;; 2F45;KANGXI RADICAL SQUARE;So;0;ON; 65B9;;;;N;;;;; 2F46;KANGXI RADICAL NOT;So;0;ON; 65E0;;;;N;;;;; 2F47;KANGXI RADICAL SUN;So;0;ON; 65E5;;;;N;;;;; 2F48;KANGXI RADICAL SAY;So;0;ON; 66F0;;;;N;;;;; 2F49;KANGXI RADICAL MOON;So;0;ON; 6708;;;;N;;;;; 2F4A;KANGXI RADICAL TREE;So;0;ON; 6728;;;;N;;;;; 2F4B;KANGXI RADICAL LACK;So;0;ON; 6B20;;;;N;;;;; 2F4C;KANGXI RADICAL STOP;So;0;ON; 6B62;;;;N;;;;; 2F4D;KANGXI RADICAL DEATH;So;0;ON; 6B79;;;;N;;;;; 2F4E;KANGXI RADICAL WEAPON;So;0;ON; 6BB3;;;;N;;;;; 2F4F;KANGXI RADICAL DO NOT;So;0;ON; 6BCB;;;;N;;;;; 2F50;KANGXI RADICAL COMPARE;So;0;ON; 6BD4;;;;N;;;;; 2F51;KANGXI RADICAL FUR;So;0;ON; 6BDB;;;;N;;;;; 2F52;KANGXI RADICAL CLAN;So;0;ON; 6C0F;;;;N;;;;; 2F53;KANGXI RADICAL STEAM;So;0;ON; 6C14;;;;N;;;;; 2F54;KANGXI RADICAL WATER;So;0;ON; 6C34;;;;N;;;;; 2F55;KANGXI RADICAL FIRE;So;0;ON; 706B;;;;N;;;;; 2F56;KANGXI RADICAL CLAW;So;0;ON; 722A;;;;N;;;;; 2F57;KANGXI RADICAL FATHER;So;0;ON; 7236;;;;N;;;;; 2F58;KANGXI RADICAL DOUBLE X;So;0;ON; 723B;;;;N;;;;; 2F59;KANGXI RADICAL HALF TREE TRUNK;So;0;ON; 723F;;;;N;;;;; 2F5A;KANGXI RADICAL SLICE;So;0;ON; 7247;;;;N;;;;; 2F5B;KANGXI RADICAL FANG;So;0;ON; 7259;;;;N;;;;; 2F5C;KANGXI RADICAL COW;So;0;ON; 725B;;;;N;;;;; 2F5D;KANGXI RADICAL DOG;So;0;ON; 72AC;;;;N;;;;; 2F5E;KANGXI RADICAL PROFOUND;So;0;ON; 7384;;;;N;;;;; 2F5F;KANGXI RADICAL JADE;So;0;ON; 7389;;;;N;;;;; 2F60;KANGXI RADICAL MELON;So;0;ON; 74DC;;;;N;;;;; 2F61;KANGXI RADICAL TILE;So;0;ON; 74E6;;;;N;;;;; 2F62;KANGXI RADICAL SWEET;So;0;ON; 7518;;;;N;;;;; 2F63;KANGXI RADICAL LIFE;So;0;ON; 751F;;;;N;;;;; 2F64;KANGXI RADICAL USE;So;0;ON; 7528;;;;N;;;;; 2F65;KANGXI RADICAL FIELD;So;0;ON; 7530;;;;N;;;;; 2F66;KANGXI RADICAL BOLT OF CLOTH;So;0;ON; 758B;;;;N;;;;; 2F67;KANGXI RADICAL SICKNESS;So;0;ON; 7592;;;;N;;;;; 2F68;KANGXI RADICAL DOTTED TENT;So;0;ON; 7676;;;;N;;;;; 2F69;KANGXI RADICAL WHITE;So;0;ON; 767D;;;;N;;;;; 2F6A;KANGXI RADICAL SKIN;So;0;ON; 76AE;;;;N;;;;; 2F6B;KANGXI RADICAL DISH;So;0;ON; 76BF;;;;N;;;;; 2F6C;KANGXI RADICAL EYE;So;0;ON; 76EE;;;;N;;;;; 2F6D;KANGXI RADICAL SPEAR;So;0;ON; 77DB;;;;N;;;;; 2F6E;KANGXI RADICAL ARROW;So;0;ON; 77E2;;;;N;;;;; 2F6F;KANGXI RADICAL STONE;So;0;ON; 77F3;;;;N;;;;; 2F70;KANGXI RADICAL SPIRIT;So;0;ON; 793A;;;;N;;;;; 2F71;KANGXI RADICAL TRACK;So;0;ON; 79B8;;;;N;;;;; 2F72;KANGXI RADICAL GRAIN;So;0;ON; 79BE;;;;N;;;;; 2F73;KANGXI RADICAL CAVE;So;0;ON; 7A74;;;;N;;;;; 2F74;KANGXI RADICAL STAND;So;0;ON; 7ACB;;;;N;;;;; 2F75;KANGXI RADICAL BAMBOO;So;0;ON; 7AF9;;;;N;;;;; 2F76;KANGXI RADICAL RICE;So;0;ON; 7C73;;;;N;;;;; 2F77;KANGXI RADICAL SILK;So;0;ON; 7CF8;;;;N;;;;; 2F78;KANGXI RADICAL JAR;So;0;ON; 7F36;;;;N;;;;; 2F79;KANGXI RADICAL NET;So;0;ON; 7F51;;;;N;;;;; 2F7A;KANGXI RADICAL SHEEP;So;0;ON; 7F8A;;;;N;;;;; 2F7B;KANGXI RADICAL FEATHER;So;0;ON; 7FBD;;;;N;;;;; 2F7C;KANGXI RADICAL OLD;So;0;ON; 8001;;;;N;;;;; 2F7D;KANGXI RADICAL AND;So;0;ON; 800C;;;;N;;;;; 2F7E;KANGXI RADICAL PLOW;So;0;ON; 8012;;;;N;;;;; 2F7F;KANGXI RADICAL EAR;So;0;ON; 8033;;;;N;;;;; 2F80;KANGXI RADICAL BRUSH;So;0;ON; 807F;;;;N;;;;; 2F81;KANGXI RADICAL MEAT;So;0;ON; 8089;;;;N;;;;; 2F82;KANGXI RADICAL MINISTER;So;0;ON; 81E3;;;;N;;;;; 2F83;KANGXI RADICAL SELF;So;0;ON; 81EA;;;;N;;;;; 2F84;KANGXI RADICAL ARRIVE;So;0;ON; 81F3;;;;N;;;;; 2F85;KANGXI RADICAL MORTAR;So;0;ON; 81FC;;;;N;;;;; 2F86;KANGXI RADICAL TONGUE;So;0;ON; 820C;;;;N;;;;; 2F87;KANGXI RADICAL OPPOSE;So;0;ON; 821B;;;;N;;;;; 2F88;KANGXI RADICAL BOAT;So;0;ON; 821F;;;;N;;;;; 2F89;KANGXI RADICAL STOPPING;So;0;ON; 826E;;;;N;;;;; 2F8A;KANGXI RADICAL COLOR;So;0;ON; 8272;;;;N;;;;; 2F8B;KANGXI RADICAL GRASS;So;0;ON; 8278;;;;N;;;;; 2F8C;KANGXI RADICAL TIGER;So;0;ON; 864D;;;;N;;;;; 2F8D;KANGXI RADICAL INSECT;So;0;ON; 866B;;;;N;;;;; 2F8E;KANGXI RADICAL BLOOD;So;0;ON; 8840;;;;N;;;;; 2F8F;KANGXI RADICAL WALK ENCLOSURE;So;0;ON; 884C;;;;N;;;;; 2F90;KANGXI RADICAL CLOTHES;So;0;ON; 8863;;;;N;;;;; 2F91;KANGXI RADICAL WEST;So;0;ON; 897E;;;;N;;;;; 2F92;KANGXI RADICAL SEE;So;0;ON; 898B;;;;N;;;;; 2F93;KANGXI RADICAL HORN;So;0;ON; 89D2;;;;N;;;;; 2F94;KANGXI RADICAL SPEECH;So;0;ON; 8A00;;;;N;;;;; 2F95;KANGXI RADICAL VALLEY;So;0;ON; 8C37;;;;N;;;;; 2F96;KANGXI RADICAL BEAN;So;0;ON; 8C46;;;;N;;;;; 2F97;KANGXI RADICAL PIG;So;0;ON; 8C55;;;;N;;;;; 2F98;KANGXI RADICAL BADGER;So;0;ON; 8C78;;;;N;;;;; 2F99;KANGXI RADICAL SHELL;So;0;ON; 8C9D;;;;N;;;;; 2F9A;KANGXI RADICAL RED;So;0;ON; 8D64;;;;N;;;;; 2F9B;KANGXI RADICAL RUN;So;0;ON; 8D70;;;;N;;;;; 2F9C;KANGXI RADICAL FOOT;So;0;ON; 8DB3;;;;N;;;;; 2F9D;KANGXI RADICAL BODY;So;0;ON; 8EAB;;;;N;;;;; 2F9E;KANGXI RADICAL CART;So;0;ON; 8ECA;;;;N;;;;; 2F9F;KANGXI RADICAL BITTER;So;0;ON; 8F9B;;;;N;;;;; 2FA0;KANGXI RADICAL MORNING;So;0;ON; 8FB0;;;;N;;;;; 2FA1;KANGXI RADICAL WALK;So;0;ON; 8FB5;;;;N;;;;; 2FA2;KANGXI RADICAL CITY;So;0;ON; 9091;;;;N;;;;; 2FA3;KANGXI RADICAL WINE;So;0;ON; 9149;;;;N;;;;; 2FA4;KANGXI RADICAL DISTINGUISH;So;0;ON; 91C6;;;;N;;;;; 2FA5;KANGXI RADICAL VILLAGE;So;0;ON; 91CC;;;;N;;;;; 2FA6;KANGXI RADICAL GOLD;So;0;ON; 91D1;;;;N;;;;; 2FA7;KANGXI RADICAL LONG;So;0;ON; 9577;;;;N;;;;; 2FA8;KANGXI RADICAL GATE;So;0;ON; 9580;;;;N;;;;; 2FA9;KANGXI RADICAL MOUND;So;0;ON; 961C;;;;N;;;;; 2FAA;KANGXI RADICAL SLAVE;So;0;ON; 96B6;;;;N;;;;; 2FAB;KANGXI RADICAL SHORT TAILED BIRD;So;0;ON; 96B9;;;;N;;;;; 2FAC;KANGXI RADICAL RAIN;So;0;ON; 96E8;;;;N;;;;; 2FAD;KANGXI RADICAL BLUE;So;0;ON; 9751;;;;N;;;;; 2FAE;KANGXI RADICAL WRONG;So;0;ON; 975E;;;;N;;;;; 2FAF;KANGXI RADICAL FACE;So;0;ON; 9762;;;;N;;;;; 2FB0;KANGXI RADICAL LEATHER;So;0;ON; 9769;;;;N;;;;; 2FB1;KANGXI RADICAL TANNED LEATHER;So;0;ON; 97CB;;;;N;;;;; 2FB2;KANGXI RADICAL LEEK;So;0;ON; 97ED;;;;N;;;;; 2FB3;KANGXI RADICAL SOUND;So;0;ON; 97F3;;;;N;;;;; 2FB4;KANGXI RADICAL LEAF;So;0;ON; 9801;;;;N;;;;; 2FB5;KANGXI RADICAL WIND;So;0;ON; 98A8;;;;N;;;;; 2FB6;KANGXI RADICAL FLY;So;0;ON; 98DB;;;;N;;;;; 2FB7;KANGXI RADICAL EAT;So;0;ON; 98DF;;;;N;;;;; 2FB8;KANGXI RADICAL HEAD;So;0;ON; 9996;;;;N;;;;; 2FB9;KANGXI RADICAL FRAGRANT;So;0;ON; 9999;;;;N;;;;; 2FBA;KANGXI RADICAL HORSE;So;0;ON; 99AC;;;;N;;;;; 2FBB;KANGXI RADICAL BONE;So;0;ON; 9AA8;;;;N;;;;; 2FBC;KANGXI RADICAL TALL;So;0;ON; 9AD8;;;;N;;;;; 2FBD;KANGXI RADICAL HAIR;So;0;ON; 9ADF;;;;N;;;;; 2FBE;KANGXI RADICAL FIGHT;So;0;ON; 9B25;;;;N;;;;; 2FBF;KANGXI RADICAL SACRIFICIAL WINE;So;0;ON; 9B2F;;;;N;;;;; 2FC0;KANGXI RADICAL CAULDRON;So;0;ON; 9B32;;;;N;;;;; 2FC1;KANGXI RADICAL GHOST;So;0;ON; 9B3C;;;;N;;;;; 2FC2;KANGXI RADICAL FISH;So;0;ON; 9B5A;;;;N;;;;; 2FC3;KANGXI RADICAL BIRD;So;0;ON; 9CE5;;;;N;;;;; 2FC4;KANGXI RADICAL SALT;So;0;ON; 9E75;;;;N;;;;; 2FC5;KANGXI RADICAL DEER;So;0;ON; 9E7F;;;;N;;;;; 2FC6;KANGXI RADICAL WHEAT;So;0;ON; 9EA5;;;;N;;;;; 2FC7;KANGXI RADICAL HEMP;So;0;ON; 9EBB;;;;N;;;;; 2FC8;KANGXI RADICAL YELLOW;So;0;ON; 9EC3;;;;N;;;;; 2FC9;KANGXI RADICAL MILLET;So;0;ON; 9ECD;;;;N;;;;; 2FCA;KANGXI RADICAL BLACK;So;0;ON; 9ED1;;;;N;;;;; 2FCB;KANGXI RADICAL EMBROIDERY;So;0;ON; 9EF9;;;;N;;;;; 2FCC;KANGXI RADICAL FROG;So;0;ON; 9EFD;;;;N;;;;; 2FCD;KANGXI RADICAL TRIPOD;So;0;ON; 9F0E;;;;N;;;;; 2FCE;KANGXI RADICAL DRUM;So;0;ON; 9F13;;;;N;;;;; 2FCF;KANGXI RADICAL RAT;So;0;ON; 9F20;;;;N;;;;; 2FD0;KANGXI RADICAL NOSE;So;0;ON; 9F3B;;;;N;;;;; 2FD1;KANGXI RADICAL EVEN;So;0;ON; 9F4A;;;;N;;;;; 2FD2;KANGXI RADICAL TOOTH;So;0;ON; 9F52;;;;N;;;;; 2FD3;KANGXI RADICAL DRAGON;So;0;ON; 9F8D;;;;N;;;;; 2FD4;KANGXI RADICAL TURTLE;So;0;ON; 9F9C;;;;N;;;;; 2FD5;KANGXI RADICAL FLUTE;So;0;ON; 9FA0;;;;N;;;;; 2FF0;IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT;So;0;ON;;;;;N;;;;; 2FF1;IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO BELOW;So;0;ON;;;;;N;;;;; 2FF2;IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT;So;0;ON;;;;;N;;;;; 2FF3;IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO MIDDLE AND BELOW;So;0;ON;;;;;N;;;;; 2FF4;IDEOGRAPHIC DESCRIPTION CHARACTER FULL SURROUND;So;0;ON;;;;;N;;;;; 2FF5;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM ABOVE;So;0;ON;;;;;N;;;;; 2FF6;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM BELOW;So;0;ON;;;;;N;;;;; 2FF7;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LEFT;So;0;ON;;;;;N;;;;; 2FF8;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER LEFT;So;0;ON;;;;;N;;;;; 2FF9;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER RIGHT;So;0;ON;;;;;N;;;;; 2FFA;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER LEFT;So;0;ON;;;;;N;;;;; 2FFB;IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID;So;0;ON;;;;;N;;;;; 3000;IDEOGRAPHIC SPACE;Zs;0;WS; 0020;;;;N;;;;; 3001;IDEOGRAPHIC COMMA;Po;0;ON;;;;;N;;;;; 3002;IDEOGRAPHIC FULL STOP;Po;0;ON;;;;;N;IDEOGRAPHIC PERIOD;;;; 3003;DITTO MARK;Po;0;ON;;;;;N;;;;; 3004;JAPANESE INDUSTRIAL STANDARD SYMBOL;So;0;ON;;;;;N;;;;; 3005;IDEOGRAPHIC ITERATION MARK;Lm;0;L;;;;;N;;;;; 3006;IDEOGRAPHIC CLOSING MARK;Lo;0;L;;;;;N;;;;; 3007;IDEOGRAPHIC NUMBER ZERO;Nl;0;L;;;;0;N;;;;; 3008;LEFT ANGLE BRACKET;Ps;0;ON;;;;;Y;OPENING ANGLE BRACKET;;;; 3009;RIGHT ANGLE BRACKET;Pe;0;ON;;;;;Y;CLOSING ANGLE BRACKET;;;; 300A;LEFT DOUBLE ANGLE BRACKET;Ps;0;ON;;;;;Y;OPENING DOUBLE ANGLE BRACKET;;;; 300B;RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON;;;;;Y;CLOSING DOUBLE ANGLE BRACKET;;;; 300C;LEFT CORNER BRACKET;Ps;0;ON;;;;;Y;OPENING CORNER BRACKET;;;; 300D;RIGHT CORNER BRACKET;Pe;0;ON;;;;;Y;CLOSING CORNER BRACKET;;;; 300E;LEFT WHITE CORNER BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE CORNER BRACKET;;;; 300F;RIGHT WHITE CORNER BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE CORNER BRACKET;;;; 3010;LEFT BLACK LENTICULAR BRACKET;Ps;0;ON;;;;;Y;OPENING BLACK LENTICULAR BRACKET;;;; 3011;RIGHT BLACK LENTICULAR BRACKET;Pe;0;ON;;;;;Y;CLOSING BLACK LENTICULAR BRACKET;;;; 3012;POSTAL MARK;So;0;ON;;;;;N;;;;; 3013;GETA MARK;So;0;ON;;;;;N;;;;; 3014;LEFT TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;OPENING TORTOISE SHELL BRACKET;;;; 3015;RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;CLOSING TORTOISE SHELL BRACKET;;;; 3016;LEFT WHITE LENTICULAR BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE LENTICULAR BRACKET;;;; 3017;RIGHT WHITE LENTICULAR BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE LENTICULAR BRACKET;;;; 3018;LEFT WHITE TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE TORTOISE SHELL BRACKET;;;; 3019;RIGHT WHITE TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE TORTOISE SHELL BRACKET;;;; 301A;LEFT WHITE SQUARE BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE SQUARE BRACKET;;;; 301B;RIGHT WHITE SQUARE BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE SQUARE BRACKET;;;; 301C;WAVE DASH;Pd;0;ON;;;;;N;;;;; 301D;REVERSED DOUBLE PRIME QUOTATION MARK;Ps;0;ON;;;;;N;;;;; 301E;DOUBLE PRIME QUOTATION MARK;Pe;0;ON;;;;;N;;;;; 301F;LOW DOUBLE PRIME QUOTATION MARK;Pe;0;ON;;;;;N;;;;; 3020;POSTAL MARK FACE;So;0;ON;;;;;N;;;;; 3021;HANGZHOU NUMERAL ONE;Nl;0;L;;;;1;N;;;;; 3022;HANGZHOU NUMERAL TWO;Nl;0;L;;;;2;N;;;;; 3023;HANGZHOU NUMERAL THREE;Nl;0;L;;;;3;N;;;;; 3024;HANGZHOU NUMERAL FOUR;Nl;0;L;;;;4;N;;;;; 3025;HANGZHOU NUMERAL FIVE;Nl;0;L;;;;5;N;;;;; 3026;HANGZHOU NUMERAL SIX;Nl;0;L;;;;6;N;;;;; 3027;HANGZHOU NUMERAL SEVEN;Nl;0;L;;;;7;N;;;;; 3028;HANGZHOU NUMERAL EIGHT;Nl;0;L;;;;8;N;;;;; 3029;HANGZHOU NUMERAL NINE;Nl;0;L;;;;9;N;;;;; 302A;IDEOGRAPHIC LEVEL TONE MARK;Mn;218;NSM;;;;;N;;;;; 302B;IDEOGRAPHIC RISING TONE MARK;Mn;228;NSM;;;;;N;;;;; 302C;IDEOGRAPHIC DEPARTING TONE MARK;Mn;232;NSM;;;;;N;;;;; 302D;IDEOGRAPHIC ENTERING TONE MARK;Mn;222;NSM;;;;;N;;;;; 302E;HANGUL SINGLE DOT TONE MARK;Mc;224;L;;;;;N;;;;; 302F;HANGUL DOUBLE DOT TONE MARK;Mc;224;L;;;;;N;;;;; 3030;WAVY DASH;Pd;0;ON;;;;;N;;;;; 3031;VERTICAL KANA REPEAT MARK;Lm;0;L;;;;;N;;;;; 3032;VERTICAL KANA REPEAT WITH VOICED SOUND MARK;Lm;0;L;;;;;N;;;;; 3033;VERTICAL KANA REPEAT MARK UPPER HALF;Lm;0;L;;;;;N;;;;; 3034;VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF;Lm;0;L;;;;;N;;;;; 3035;VERTICAL KANA REPEAT MARK LOWER HALF;Lm;0;L;;;;;N;;;;; 3036;CIRCLED POSTAL MARK;So;0;ON; 3012;;;;N;;;;; 3037;IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL;So;0;ON;;;;;N;;;;; 3038;HANGZHOU NUMERAL TEN;Nl;0;L; 5341;;;10;N;;;;; 3039;HANGZHOU NUMERAL TWENTY;Nl;0;L; 5344;;;20;N;;;;; 303A;HANGZHOU NUMERAL THIRTY;Nl;0;L; 5345;;;30;N;;;;; 303B;VERTICAL IDEOGRAPHIC ITERATION MARK;Lm;0;L;;;;;N;;;;; 303C;MASU MARK;Lo;0;L;;;;;N;;;;; 303D;PART ALTERNATION MARK;Po;0;ON;;;;;N;;;;; 303E;IDEOGRAPHIC VARIATION INDICATOR;So;0;ON;;;;;N;;;;; 303F;IDEOGRAPHIC HALF FILL SPACE;So;0;ON;;;;;N;;;;; 3041;HIRAGANA LETTER SMALL A;Lo;0;L;;;;;N;;;;; 3042;HIRAGANA LETTER A;Lo;0;L;;;;;N;;;;; 3043;HIRAGANA LETTER SMALL I;Lo;0;L;;;;;N;;;;; 3044;HIRAGANA LETTER I;Lo;0;L;;;;;N;;;;; 3045;HIRAGANA LETTER SMALL U;Lo;0;L;;;;;N;;;;; 3046;HIRAGANA LETTER U;Lo;0;L;;;;;N;;;;; 3047;HIRAGANA LETTER SMALL E;Lo;0;L;;;;;N;;;;; 3048;HIRAGANA LETTER E;Lo;0;L;;;;;N;;;;; 3049;HIRAGANA LETTER SMALL O;Lo;0;L;;;;;N;;;;; 304A;HIRAGANA LETTER O;Lo;0;L;;;;;N;;;;; 304B;HIRAGANA LETTER KA;Lo;0;L;;;;;N;;;;; 304C;HIRAGANA LETTER GA;Lo;0;L;304B 3099;;;;N;;;;; 304D;HIRAGANA LETTER KI;Lo;0;L;;;;;N;;;;; 304E;HIRAGANA LETTER GI;Lo;0;L;304D 3099;;;;N;;;;; 304F;HIRAGANA LETTER KU;Lo;0;L;;;;;N;;;;; 3050;HIRAGANA LETTER GU;Lo;0;L;304F 3099;;;;N;;;;; 3051;HIRAGANA LETTER KE;Lo;0;L;;;;;N;;;;; 3052;HIRAGANA LETTER GE;Lo;0;L;3051 3099;;;;N;;;;; 3053;HIRAGANA LETTER KO;Lo;0;L;;;;;N;;;;; 3054;HIRAGANA LETTER GO;Lo;0;L;3053 3099;;;;N;;;;; 3055;HIRAGANA LETTER SA;Lo;0;L;;;;;N;;;;; 3056;HIRAGANA LETTER ZA;Lo;0;L;3055 3099;;;;N;;;;; 3057;HIRAGANA LETTER SI;Lo;0;L;;;;;N;;;;; 3058;HIRAGANA LETTER ZI;Lo;0;L;3057 3099;;;;N;;;;; 3059;HIRAGANA LETTER SU;Lo;0;L;;;;;N;;;;; 305A;HIRAGANA LETTER ZU;Lo;0;L;3059 3099;;;;N;;;;; 305B;HIRAGANA LETTER SE;Lo;0;L;;;;;N;;;;; 305C;HIRAGANA LETTER ZE;Lo;0;L;305B 3099;;;;N;;;;; 305D;HIRAGANA LETTER SO;Lo;0;L;;;;;N;;;;; 305E;HIRAGANA LETTER ZO;Lo;0;L;305D 3099;;;;N;;;;; 305F;HIRAGANA LETTER TA;Lo;0;L;;;;;N;;;;; 3060;HIRAGANA LETTER DA;Lo;0;L;305F 3099;;;;N;;;;; 3061;HIRAGANA LETTER TI;Lo;0;L;;;;;N;;;;; 3062;HIRAGANA LETTER DI;Lo;0;L;3061 3099;;;;N;;;;; 3063;HIRAGANA LETTER SMALL TU;Lo;0;L;;;;;N;;;;; 3064;HIRAGANA LETTER TU;Lo;0;L;;;;;N;;;;; 3065;HIRAGANA LETTER DU;Lo;0;L;3064 3099;;;;N;;;;; 3066;HIRAGANA LETTER TE;Lo;0;L;;;;;N;;;;; 3067;HIRAGANA LETTER DE;Lo;0;L;3066 3099;;;;N;;;;; 3068;HIRAGANA LETTER TO;Lo;0;L;;;;;N;;;;; 3069;HIRAGANA LETTER DO;Lo;0;L;3068 3099;;;;N;;;;; 306A;HIRAGANA LETTER NA;Lo;0;L;;;;;N;;;;; 306B;HIRAGANA LETTER NI;Lo;0;L;;;;;N;;;;; 306C;HIRAGANA LETTER NU;Lo;0;L;;;;;N;;;;; 306D;HIRAGANA LETTER NE;Lo;0;L;;;;;N;;;;; 306E;HIRAGANA LETTER NO;Lo;0;L;;;;;N;;;;; 306F;HIRAGANA LETTER HA;Lo;0;L;;;;;N;;;;; 3070;HIRAGANA LETTER BA;Lo;0;L;306F 3099;;;;N;;;;; 3071;HIRAGANA LETTER PA;Lo;0;L;306F 309A;;;;N;;;;; 3072;HIRAGANA LETTER HI;Lo;0;L;;;;;N;;;;; 3073;HIRAGANA LETTER BI;Lo;0;L;3072 3099;;;;N;;;;; 3074;HIRAGANA LETTER PI;Lo;0;L;3072 309A;;;;N;;;;; 3075;HIRAGANA LETTER HU;Lo;0;L;;;;;N;;;;; 3076;HIRAGANA LETTER BU;Lo;0;L;3075 3099;;;;N;;;;; 3077;HIRAGANA LETTER PU;Lo;0;L;3075 309A;;;;N;;;;; 3078;HIRAGANA LETTER HE;Lo;0;L;;;;;N;;;;; 3079;HIRAGANA LETTER BE;Lo;0;L;3078 3099;;;;N;;;;; 307A;HIRAGANA LETTER PE;Lo;0;L;3078 309A;;;;N;;;;; 307B;HIRAGANA LETTER HO;Lo;0;L;;;;;N;;;;; 307C;HIRAGANA LETTER BO;Lo;0;L;307B 3099;;;;N;;;;; 307D;HIRAGANA LETTER PO;Lo;0;L;307B 309A;;;;N;;;;; 307E;HIRAGANA LETTER MA;Lo;0;L;;;;;N;;;;; 307F;HIRAGANA LETTER MI;Lo;0;L;;;;;N;;;;; 3080;HIRAGANA LETTER MU;Lo;0;L;;;;;N;;;;; 3081;HIRAGANA LETTER ME;Lo;0;L;;;;;N;;;;; 3082;HIRAGANA LETTER MO;Lo;0;L;;;;;N;;;;; 3083;HIRAGANA LETTER SMALL YA;Lo;0;L;;;;;N;;;;; 3084;HIRAGANA LETTER YA;Lo;0;L;;;;;N;;;;; 3085;HIRAGANA LETTER SMALL YU;Lo;0;L;;;;;N;;;;; 3086;HIRAGANA LETTER YU;Lo;0;L;;;;;N;;;;; 3087;HIRAGANA LETTER SMALL YO;Lo;0;L;;;;;N;;;;; 3088;HIRAGANA LETTER YO;Lo;0;L;;;;;N;;;;; 3089;HIRAGANA LETTER RA;Lo;0;L;;;;;N;;;;; 308A;HIRAGANA LETTER RI;Lo;0;L;;;;;N;;;;; 308B;HIRAGANA LETTER RU;Lo;0;L;;;;;N;;;;; 308C;HIRAGANA LETTER RE;Lo;0;L;;;;;N;;;;; 308D;HIRAGANA LETTER RO;Lo;0;L;;;;;N;;;;; 308E;HIRAGANA LETTER SMALL WA;Lo;0;L;;;;;N;;;;; 308F;HIRAGANA LETTER WA;Lo;0;L;;;;;N;;;;; 3090;HIRAGANA LETTER WI;Lo;0;L;;;;;N;;;;; 3091;HIRAGANA LETTER WE;Lo;0;L;;;;;N;;;;; 3092;HIRAGANA LETTER WO;Lo;0;L;;;;;N;;;;; 3093;HIRAGANA LETTER N;Lo;0;L;;;;;N;;;;; 3094;HIRAGANA LETTER VU;Lo;0;L;3046 3099;;;;N;;;;; 3095;HIRAGANA LETTER SMALL KA;Lo;0;L;;;;;N;;;;; 3096;HIRAGANA LETTER SMALL KE;Lo;0;L;;;;;N;;;;; 3099;COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK;Mn;8;NSM;;;;;N;NON-SPACING KATAKANA-HIRAGANA VOICED SOUND MARK;;;; 309A;COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;Mn;8;NSM;;;;;N;NON-SPACING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;;;; 309B;KATAKANA-HIRAGANA VOICED SOUND MARK;Sk;0;ON; 0020 3099;;;;N;;;;; 309C;KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;Sk;0;ON; 0020 309A;;;;N;;;;; 309D;HIRAGANA ITERATION MARK;Lm;0;L;;;;;N;;;;; 309E;HIRAGANA VOICED ITERATION MARK;Lm;0;L;309D 3099;;;;N;;;;; 309F;HIRAGANA DIGRAPH YORI;Lo;0;L; 3088 308A;;;;N;;;;; 30A0;KATAKANA-HIRAGANA DOUBLE HYPHEN;Pd;0;ON;;;;;N;;;;; 30A1;KATAKANA LETTER SMALL A;Lo;0;L;;;;;N;;;;; 30A2;KATAKANA LETTER A;Lo;0;L;;;;;N;;;;; 30A3;KATAKANA LETTER SMALL I;Lo;0;L;;;;;N;;;;; 30A4;KATAKANA LETTER I;Lo;0;L;;;;;N;;;;; 30A5;KATAKANA LETTER SMALL U;Lo;0;L;;;;;N;;;;; 30A6;KATAKANA LETTER U;Lo;0;L;;;;;N;;;;; 30A7;KATAKANA LETTER SMALL E;Lo;0;L;;;;;N;;;;; 30A8;KATAKANA LETTER E;Lo;0;L;;;;;N;;;;; 30A9;KATAKANA LETTER SMALL O;Lo;0;L;;;;;N;;;;; 30AA;KATAKANA LETTER O;Lo;0;L;;;;;N;;;;; 30AB;KATAKANA LETTER KA;Lo;0;L;;;;;N;;;;; 30AC;KATAKANA LETTER GA;Lo;0;L;30AB 3099;;;;N;;;;; 30AD;KATAKANA LETTER KI;Lo;0;L;;;;;N;;;;; 30AE;KATAKANA LETTER GI;Lo;0;L;30AD 3099;;;;N;;;;; 30AF;KATAKANA LETTER KU;Lo;0;L;;;;;N;;;;; 30B0;KATAKANA LETTER GU;Lo;0;L;30AF 3099;;;;N;;;;; 30B1;KATAKANA LETTER KE;Lo;0;L;;;;;N;;;;; 30B2;KATAKANA LETTER GE;Lo;0;L;30B1 3099;;;;N;;;;; 30B3;KATAKANA LETTER KO;Lo;0;L;;;;;N;;;;; 30B4;KATAKANA LETTER GO;Lo;0;L;30B3 3099;;;;N;;;;; 30B5;KATAKANA LETTER SA;Lo;0;L;;;;;N;;;;; 30B6;KATAKANA LETTER ZA;Lo;0;L;30B5 3099;;;;N;;;;; 30B7;KATAKANA LETTER SI;Lo;0;L;;;;;N;;;;; 30B8;KATAKANA LETTER ZI;Lo;0;L;30B7 3099;;;;N;;;;; 30B9;KATAKANA LETTER SU;Lo;0;L;;;;;N;;;;; 30BA;KATAKANA LETTER ZU;Lo;0;L;30B9 3099;;;;N;;;;; 30BB;KATAKANA LETTER SE;Lo;0;L;;;;;N;;;;; 30BC;KATAKANA LETTER ZE;Lo;0;L;30BB 3099;;;;N;;;;; 30BD;KATAKANA LETTER SO;Lo;0;L;;;;;N;;;;; 30BE;KATAKANA LETTER ZO;Lo;0;L;30BD 3099;;;;N;;;;; 30BF;KATAKANA LETTER TA;Lo;0;L;;;;;N;;;;; 30C0;KATAKANA LETTER DA;Lo;0;L;30BF 3099;;;;N;;;;; 30C1;KATAKANA LETTER TI;Lo;0;L;;;;;N;;;;; 30C2;KATAKANA LETTER DI;Lo;0;L;30C1 3099;;;;N;;;;; 30C3;KATAKANA LETTER SMALL TU;Lo;0;L;;;;;N;;;;; 30C4;KATAKANA LETTER TU;Lo;0;L;;;;;N;;;;; 30C5;KATAKANA LETTER DU;Lo;0;L;30C4 3099;;;;N;;;;; 30C6;KATAKANA LETTER TE;Lo;0;L;;;;;N;;;;; 30C7;KATAKANA LETTER DE;Lo;0;L;30C6 3099;;;;N;;;;; 30C8;KATAKANA LETTER TO;Lo;0;L;;;;;N;;;;; 30C9;KATAKANA LETTER DO;Lo;0;L;30C8 3099;;;;N;;;;; 30CA;KATAKANA LETTER NA;Lo;0;L;;;;;N;;;;; 30CB;KATAKANA LETTER NI;Lo;0;L;;;;;N;;;;; 30CC;KATAKANA LETTER NU;Lo;0;L;;;;;N;;;;; 30CD;KATAKANA LETTER NE;Lo;0;L;;;;;N;;;;; 30CE;KATAKANA LETTER NO;Lo;0;L;;;;;N;;;;; 30CF;KATAKANA LETTER HA;Lo;0;L;;;;;N;;;;; 30D0;KATAKANA LETTER BA;Lo;0;L;30CF 3099;;;;N;;;;; 30D1;KATAKANA LETTER PA;Lo;0;L;30CF 309A;;;;N;;;;; 30D2;KATAKANA LETTER HI;Lo;0;L;;;;;N;;;;; 30D3;KATAKANA LETTER BI;Lo;0;L;30D2 3099;;;;N;;;;; 30D4;KATAKANA LETTER PI;Lo;0;L;30D2 309A;;;;N;;;;; 30D5;KATAKANA LETTER HU;Lo;0;L;;;;;N;;;;; 30D6;KATAKANA LETTER BU;Lo;0;L;30D5 3099;;;;N;;;;; 30D7;KATAKANA LETTER PU;Lo;0;L;30D5 309A;;;;N;;;;; 30D8;KATAKANA LETTER HE;Lo;0;L;;;;;N;;;;; 30D9;KATAKANA LETTER BE;Lo;0;L;30D8 3099;;;;N;;;;; 30DA;KATAKANA LETTER PE;Lo;0;L;30D8 309A;;;;N;;;;; 30DB;KATAKANA LETTER HO;Lo;0;L;;;;;N;;;;; 30DC;KATAKANA LETTER BO;Lo;0;L;30DB 3099;;;;N;;;;; 30DD;KATAKANA LETTER PO;Lo;0;L;30DB 309A;;;;N;;;;; 30DE;KATAKANA LETTER MA;Lo;0;L;;;;;N;;;;; 30DF;KATAKANA LETTER MI;Lo;0;L;;;;;N;;;;; 30E0;KATAKANA LETTER MU;Lo;0;L;;;;;N;;;;; 30E1;KATAKANA LETTER ME;Lo;0;L;;;;;N;;;;; 30E2;KATAKANA LETTER MO;Lo;0;L;;;;;N;;;;; 30E3;KATAKANA LETTER SMALL YA;Lo;0;L;;;;;N;;;;; 30E4;KATAKANA LETTER YA;Lo;0;L;;;;;N;;;;; 30E5;KATAKANA LETTER SMALL YU;Lo;0;L;;;;;N;;;;; 30E6;KATAKANA LETTER YU;Lo;0;L;;;;;N;;;;; 30E7;KATAKANA LETTER SMALL YO;Lo;0;L;;;;;N;;;;; 30E8;KATAKANA LETTER YO;Lo;0;L;;;;;N;;;;; 30E9;KATAKANA LETTER RA;Lo;0;L;;;;;N;;;;; 30EA;KATAKANA LETTER RI;Lo;0;L;;;;;N;;;;; 30EB;KATAKANA LETTER RU;Lo;0;L;;;;;N;;;;; 30EC;KATAKANA LETTER RE;Lo;0;L;;;;;N;;;;; 30ED;KATAKANA LETTER RO;Lo;0;L;;;;;N;;;;; 30EE;KATAKANA LETTER SMALL WA;Lo;0;L;;;;;N;;;;; 30EF;KATAKANA LETTER WA;Lo;0;L;;;;;N;;;;; 30F0;KATAKANA LETTER WI;Lo;0;L;;;;;N;;;;; 30F1;KATAKANA LETTER WE;Lo;0;L;;;;;N;;;;; 30F2;KATAKANA LETTER WO;Lo;0;L;;;;;N;;;;; 30F3;KATAKANA LETTER N;Lo;0;L;;;;;N;;;;; 30F4;KATAKANA LETTER VU;Lo;0;L;30A6 3099;;;;N;;;;; 30F5;KATAKANA LETTER SMALL KA;Lo;0;L;;;;;N;;;;; 30F6;KATAKANA LETTER SMALL KE;Lo;0;L;;;;;N;;;;; 30F7;KATAKANA LETTER VA;Lo;0;L;30EF 3099;;;;N;;;;; 30F8;KATAKANA LETTER VI;Lo;0;L;30F0 3099;;;;N;;;;; 30F9;KATAKANA LETTER VE;Lo;0;L;30F1 3099;;;;N;;;;; 30FA;KATAKANA LETTER VO;Lo;0;L;30F2 3099;;;;N;;;;; 30FB;KATAKANA MIDDLE DOT;Po;0;ON;;;;;N;;;;; 30FC;KATAKANA-HIRAGANA PROLONGED SOUND MARK;Lm;0;L;;;;;N;;;;; 30FD;KATAKANA ITERATION MARK;Lm;0;L;;;;;N;;;;; 30FE;KATAKANA VOICED ITERATION MARK;Lm;0;L;30FD 3099;;;;N;;;;; 30FF;KATAKANA DIGRAPH KOTO;Lo;0;L; 30B3 30C8;;;;N;;;;; 3105;BOPOMOFO LETTER B;Lo;0;L;;;;;N;;;;; 3106;BOPOMOFO LETTER P;Lo;0;L;;;;;N;;;;; 3107;BOPOMOFO LETTER M;Lo;0;L;;;;;N;;;;; 3108;BOPOMOFO LETTER F;Lo;0;L;;;;;N;;;;; 3109;BOPOMOFO LETTER D;Lo;0;L;;;;;N;;;;; 310A;BOPOMOFO LETTER T;Lo;0;L;;;;;N;;;;; 310B;BOPOMOFO LETTER N;Lo;0;L;;;;;N;;;;; 310C;BOPOMOFO LETTER L;Lo;0;L;;;;;N;;;;; 310D;BOPOMOFO LETTER G;Lo;0;L;;;;;N;;;;; 310E;BOPOMOFO LETTER K;Lo;0;L;;;;;N;;;;; 310F;BOPOMOFO LETTER H;Lo;0;L;;;;;N;;;;; 3110;BOPOMOFO LETTER J;Lo;0;L;;;;;N;;;;; 3111;BOPOMOFO LETTER Q;Lo;0;L;;;;;N;;;;; 3112;BOPOMOFO LETTER X;Lo;0;L;;;;;N;;;;; 3113;BOPOMOFO LETTER ZH;Lo;0;L;;;;;N;;;;; 3114;BOPOMOFO LETTER CH;Lo;0;L;;;;;N;;;;; 3115;BOPOMOFO LETTER SH;Lo;0;L;;;;;N;;;;; 3116;BOPOMOFO LETTER R;Lo;0;L;;;;;N;;;;; 3117;BOPOMOFO LETTER Z;Lo;0;L;;;;;N;;;;; 3118;BOPOMOFO LETTER C;Lo;0;L;;;;;N;;;;; 3119;BOPOMOFO LETTER S;Lo;0;L;;;;;N;;;;; 311A;BOPOMOFO LETTER A;Lo;0;L;;;;;N;;;;; 311B;BOPOMOFO LETTER O;Lo;0;L;;;;;N;;;;; 311C;BOPOMOFO LETTER E;Lo;0;L;;;;;N;;;;; 311D;BOPOMOFO LETTER EH;Lo;0;L;;;;;N;;;;; 311E;BOPOMOFO LETTER AI;Lo;0;L;;;;;N;;;;; 311F;BOPOMOFO LETTER EI;Lo;0;L;;;;;N;;;;; 3120;BOPOMOFO LETTER AU;Lo;0;L;;;;;N;;;;; 3121;BOPOMOFO LETTER OU;Lo;0;L;;;;;N;;;;; 3122;BOPOMOFO LETTER AN;Lo;0;L;;;;;N;;;;; 3123;BOPOMOFO LETTER EN;Lo;0;L;;;;;N;;;;; 3124;BOPOMOFO LETTER ANG;Lo;0;L;;;;;N;;;;; 3125;BOPOMOFO LETTER ENG;Lo;0;L;;;;;N;;;;; 3126;BOPOMOFO LETTER ER;Lo;0;L;;;;;N;;;;; 3127;BOPOMOFO LETTER I;Lo;0;L;;;;;N;;;;; 3128;BOPOMOFO LETTER U;Lo;0;L;;;;;N;;;;; 3129;BOPOMOFO LETTER IU;Lo;0;L;;;;;N;;;;; 312A;BOPOMOFO LETTER V;Lo;0;L;;;;;N;;;;; 312B;BOPOMOFO LETTER NG;Lo;0;L;;;;;N;;;;; 312C;BOPOMOFO LETTER GN;Lo;0;L;;;;;N;;;;; 312D;BOPOMOFO LETTER IH;Lo;0;L;;;;;N;;;;; 312E;BOPOMOFO LETTER O WITH DOT ABOVE;Lo;0;L;;;;;N;;;;; 312F;BOPOMOFO LETTER NN;Lo;0;L;;;;;N;;;;; 3131;HANGUL LETTER KIYEOK;Lo;0;L; 1100;;;;N;HANGUL LETTER GIYEOG;;;; 3132;HANGUL LETTER SSANGKIYEOK;Lo;0;L; 1101;;;;N;HANGUL LETTER SSANG GIYEOG;;;; 3133;HANGUL LETTER KIYEOK-SIOS;Lo;0;L; 11AA;;;;N;HANGUL LETTER GIYEOG SIOS;;;; 3134;HANGUL LETTER NIEUN;Lo;0;L; 1102;;;;N;;;;; 3135;HANGUL LETTER NIEUN-CIEUC;Lo;0;L; 11AC;;;;N;HANGUL LETTER NIEUN JIEUJ;;;; 3136;HANGUL LETTER NIEUN-HIEUH;Lo;0;L; 11AD;;;;N;HANGUL LETTER NIEUN HIEUH;;;; 3137;HANGUL LETTER TIKEUT;Lo;0;L; 1103;;;;N;HANGUL LETTER DIGEUD;;;; 3138;HANGUL LETTER SSANGTIKEUT;Lo;0;L; 1104;;;;N;HANGUL LETTER SSANG DIGEUD;;;; 3139;HANGUL LETTER RIEUL;Lo;0;L; 1105;;;;N;HANGUL LETTER LIEUL;;;; 313A;HANGUL LETTER RIEUL-KIYEOK;Lo;0;L; 11B0;;;;N;HANGUL LETTER LIEUL GIYEOG;;;; 313B;HANGUL LETTER RIEUL-MIEUM;Lo;0;L; 11B1;;;;N;HANGUL LETTER LIEUL MIEUM;;;; 313C;HANGUL LETTER RIEUL-PIEUP;Lo;0;L; 11B2;;;;N;HANGUL LETTER LIEUL BIEUB;;;; 313D;HANGUL LETTER RIEUL-SIOS;Lo;0;L; 11B3;;;;N;HANGUL LETTER LIEUL SIOS;;;; 313E;HANGUL LETTER RIEUL-THIEUTH;Lo;0;L; 11B4;;;;N;HANGUL LETTER LIEUL TIEUT;;;; 313F;HANGUL LETTER RIEUL-PHIEUPH;Lo;0;L; 11B5;;;;N;HANGUL LETTER LIEUL PIEUP;;;; 3140;HANGUL LETTER RIEUL-HIEUH;Lo;0;L; 111A;;;;N;HANGUL LETTER LIEUL HIEUH;;;; 3141;HANGUL LETTER MIEUM;Lo;0;L; 1106;;;;N;;;;; 3142;HANGUL LETTER PIEUP;Lo;0;L; 1107;;;;N;HANGUL LETTER BIEUB;;;; 3143;HANGUL LETTER SSANGPIEUP;Lo;0;L; 1108;;;;N;HANGUL LETTER SSANG BIEUB;;;; 3144;HANGUL LETTER PIEUP-SIOS;Lo;0;L; 1121;;;;N;HANGUL LETTER BIEUB SIOS;;;; 3145;HANGUL LETTER SIOS;Lo;0;L; 1109;;;;N;;;;; 3146;HANGUL LETTER SSANGSIOS;Lo;0;L; 110A;;;;N;HANGUL LETTER SSANG SIOS;;;; 3147;HANGUL LETTER IEUNG;Lo;0;L; 110B;;;;N;;;;; 3148;HANGUL LETTER CIEUC;Lo;0;L; 110C;;;;N;HANGUL LETTER JIEUJ;;;; 3149;HANGUL LETTER SSANGCIEUC;Lo;0;L; 110D;;;;N;HANGUL LETTER SSANG JIEUJ;;;; 314A;HANGUL LETTER CHIEUCH;Lo;0;L; 110E;;;;N;HANGUL LETTER CIEUC;;;; 314B;HANGUL LETTER KHIEUKH;Lo;0;L; 110F;;;;N;HANGUL LETTER KIYEOK;;;; 314C;HANGUL LETTER THIEUTH;Lo;0;L; 1110;;;;N;HANGUL LETTER TIEUT;;;; 314D;HANGUL LETTER PHIEUPH;Lo;0;L; 1111;;;;N;HANGUL LETTER PIEUP;;;; 314E;HANGUL LETTER HIEUH;Lo;0;L; 1112;;;;N;;;;; 314F;HANGUL LETTER A;Lo;0;L; 1161;;;;N;;;;; 3150;HANGUL LETTER AE;Lo;0;L; 1162;;;;N;;;;; 3151;HANGUL LETTER YA;Lo;0;L; 1163;;;;N;;;;; 3152;HANGUL LETTER YAE;Lo;0;L; 1164;;;;N;;;;; 3153;HANGUL LETTER EO;Lo;0;L; 1165;;;;N;;;;; 3154;HANGUL LETTER E;Lo;0;L; 1166;;;;N;;;;; 3155;HANGUL LETTER YEO;Lo;0;L; 1167;;;;N;;;;; 3156;HANGUL LETTER YE;Lo;0;L; 1168;;;;N;;;;; 3157;HANGUL LETTER O;Lo;0;L; 1169;;;;N;;;;; 3158;HANGUL LETTER WA;Lo;0;L; 116A;;;;N;;;;; 3159;HANGUL LETTER WAE;Lo;0;L; 116B;;;;N;;;;; 315A;HANGUL LETTER OE;Lo;0;L; 116C;;;;N;;;;; 315B;HANGUL LETTER YO;Lo;0;L; 116D;;;;N;;;;; 315C;HANGUL LETTER U;Lo;0;L; 116E;;;;N;;;;; 315D;HANGUL LETTER WEO;Lo;0;L; 116F;;;;N;;;;; 315E;HANGUL LETTER WE;Lo;0;L; 1170;;;;N;;;;; 315F;HANGUL LETTER WI;Lo;0;L; 1171;;;;N;;;;; 3160;HANGUL LETTER YU;Lo;0;L; 1172;;;;N;;;;; 3161;HANGUL LETTER EU;Lo;0;L; 1173;;;;N;;;;; 3162;HANGUL LETTER YI;Lo;0;L; 1174;;;;N;;;;; 3163;HANGUL LETTER I;Lo;0;L; 1175;;;;N;;;;; 3164;HANGUL FILLER;Lo;0;L; 1160;;;;N;HANGUL CAE OM;;;; 3165;HANGUL LETTER SSANGNIEUN;Lo;0;L; 1114;;;;N;HANGUL LETTER SSANG NIEUN;;;; 3166;HANGUL LETTER NIEUN-TIKEUT;Lo;0;L; 1115;;;;N;HANGUL LETTER NIEUN DIGEUD;;;; 3167;HANGUL LETTER NIEUN-SIOS;Lo;0;L; 11C7;;;;N;HANGUL LETTER NIEUN SIOS;;;; 3168;HANGUL LETTER NIEUN-PANSIOS;Lo;0;L; 11C8;;;;N;HANGUL LETTER NIEUN BAN CHI EUM;;;; 3169;HANGUL LETTER RIEUL-KIYEOK-SIOS;Lo;0;L; 11CC;;;;N;HANGUL LETTER LIEUL GIYEOG SIOS;;;; 316A;HANGUL LETTER RIEUL-TIKEUT;Lo;0;L; 11CE;;;;N;HANGUL LETTER LIEUL DIGEUD;;;; 316B;HANGUL LETTER RIEUL-PIEUP-SIOS;Lo;0;L; 11D3;;;;N;HANGUL LETTER LIEUL BIEUB SIOS;;;; 316C;HANGUL LETTER RIEUL-PANSIOS;Lo;0;L; 11D7;;;;N;HANGUL LETTER LIEUL BAN CHI EUM;;;; 316D;HANGUL LETTER RIEUL-YEORINHIEUH;Lo;0;L; 11D9;;;;N;HANGUL LETTER LIEUL YEOLIN HIEUH;;;; 316E;HANGUL LETTER MIEUM-PIEUP;Lo;0;L; 111C;;;;N;HANGUL LETTER MIEUM BIEUB;;;; 316F;HANGUL LETTER MIEUM-SIOS;Lo;0;L; 11DD;;;;N;HANGUL LETTER MIEUM SIOS;;;; 3170;HANGUL LETTER MIEUM-PANSIOS;Lo;0;L; 11DF;;;;N;HANGUL LETTER BIEUB BAN CHI EUM;;;; 3171;HANGUL LETTER KAPYEOUNMIEUM;Lo;0;L; 111D;;;;N;HANGUL LETTER MIEUM SUN GYEONG EUM;;;; 3172;HANGUL LETTER PIEUP-KIYEOK;Lo;0;L; 111E;;;;N;HANGUL LETTER BIEUB GIYEOG;;;; 3173;HANGUL LETTER PIEUP-TIKEUT;Lo;0;L; 1120;;;;N;HANGUL LETTER BIEUB DIGEUD;;;; 3174;HANGUL LETTER PIEUP-SIOS-KIYEOK;Lo;0;L; 1122;;;;N;HANGUL LETTER BIEUB SIOS GIYEOG;;;; 3175;HANGUL LETTER PIEUP-SIOS-TIKEUT;Lo;0;L; 1123;;;;N;HANGUL LETTER BIEUB SIOS DIGEUD;;;; 3176;HANGUL LETTER PIEUP-CIEUC;Lo;0;L; 1127;;;;N;HANGUL LETTER BIEUB JIEUJ;;;; 3177;HANGUL LETTER PIEUP-THIEUTH;Lo;0;L; 1129;;;;N;HANGUL LETTER BIEUB TIEUT;;;; 3178;HANGUL LETTER KAPYEOUNPIEUP;Lo;0;L; 112B;;;;N;HANGUL LETTER BIEUB SUN GYEONG EUM;;;; 3179;HANGUL LETTER KAPYEOUNSSANGPIEUP;Lo;0;L; 112C;;;;N;HANGUL LETTER SSANG BIEUB SUN GYEONG EUM;;;; 317A;HANGUL LETTER SIOS-KIYEOK;Lo;0;L; 112D;;;;N;HANGUL LETTER SIOS GIYEOG;;;; 317B;HANGUL LETTER SIOS-NIEUN;Lo;0;L; 112E;;;;N;HANGUL LETTER SIOS NIEUN;;;; 317C;HANGUL LETTER SIOS-TIKEUT;Lo;0;L; 112F;;;;N;HANGUL LETTER SIOS DIGEUD;;;; 317D;HANGUL LETTER SIOS-PIEUP;Lo;0;L; 1132;;;;N;HANGUL LETTER SIOS BIEUB;;;; 317E;HANGUL LETTER SIOS-CIEUC;Lo;0;L; 1136;;;;N;HANGUL LETTER SIOS JIEUJ;;;; 317F;HANGUL LETTER PANSIOS;Lo;0;L; 1140;;;;N;HANGUL LETTER BAN CHI EUM;;;; 3180;HANGUL LETTER SSANGIEUNG;Lo;0;L; 1147;;;;N;HANGUL LETTER SSANG IEUNG;;;; 3181;HANGUL LETTER YESIEUNG;Lo;0;L; 114C;;;;N;HANGUL LETTER NGIEUNG;;;; 3182;HANGUL LETTER YESIEUNG-SIOS;Lo;0;L; 11F1;;;;N;HANGUL LETTER NGIEUNG SIOS;;;; 3183;HANGUL LETTER YESIEUNG-PANSIOS;Lo;0;L; 11F2;;;;N;HANGUL LETTER NGIEUNG BAN CHI EUM;;;; 3184;HANGUL LETTER KAPYEOUNPHIEUPH;Lo;0;L; 1157;;;;N;HANGUL LETTER PIEUP SUN GYEONG EUM;;;; 3185;HANGUL LETTER SSANGHIEUH;Lo;0;L; 1158;;;;N;HANGUL LETTER SSANG HIEUH;;;; 3186;HANGUL LETTER YEORINHIEUH;Lo;0;L; 1159;;;;N;HANGUL LETTER YEOLIN HIEUH;;;; 3187;HANGUL LETTER YO-YA;Lo;0;L; 1184;;;;N;HANGUL LETTER YOYA;;;; 3188;HANGUL LETTER YO-YAE;Lo;0;L; 1185;;;;N;HANGUL LETTER YOYAE;;;; 3189;HANGUL LETTER YO-I;Lo;0;L; 1188;;;;N;HANGUL LETTER YOI;;;; 318A;HANGUL LETTER YU-YEO;Lo;0;L; 1191;;;;N;HANGUL LETTER YUYEO;;;; 318B;HANGUL LETTER YU-YE;Lo;0;L; 1192;;;;N;HANGUL LETTER YUYE;;;; 318C;HANGUL LETTER YU-I;Lo;0;L; 1194;;;;N;HANGUL LETTER YUI;;;; 318D;HANGUL LETTER ARAEA;Lo;0;L; 119E;;;;N;HANGUL LETTER ALAE A;;;; 318E;HANGUL LETTER ARAEAE;Lo;0;L; 11A1;;;;N;HANGUL LETTER ALAE AE;;;; 3190;IDEOGRAPHIC ANNOTATION LINKING MARK;So;0;L;;;;;N;KANBUN TATETEN;;;; 3191;IDEOGRAPHIC ANNOTATION REVERSE MARK;So;0;L;;;;;N;KAERITEN RE;;;; 3192;IDEOGRAPHIC ANNOTATION ONE MARK;No;0;L; 4E00;;;1;N;KAERITEN ITI;;;; 3193;IDEOGRAPHIC ANNOTATION TWO MARK;No;0;L; 4E8C;;;2;N;KAERITEN NI;;;; 3194;IDEOGRAPHIC ANNOTATION THREE MARK;No;0;L; 4E09;;;3;N;KAERITEN SAN;;;; 3195;IDEOGRAPHIC ANNOTATION FOUR MARK;No;0;L; 56DB;;;4;N;KAERITEN SI;;;; 3196;IDEOGRAPHIC ANNOTATION TOP MARK;So;0;L; 4E0A;;;;N;KAERITEN ZYOU;;;; 3197;IDEOGRAPHIC ANNOTATION MIDDLE MARK;So;0;L; 4E2D;;;;N;KAERITEN TYUU;;;; 3198;IDEOGRAPHIC ANNOTATION BOTTOM MARK;So;0;L; 4E0B;;;;N;KAERITEN GE;;;; 3199;IDEOGRAPHIC ANNOTATION FIRST MARK;So;0;L; 7532;;;;N;KAERITEN KOU;;;; 319A;IDEOGRAPHIC ANNOTATION SECOND MARK;So;0;L; 4E59;;;;N;KAERITEN OTU;;;; 319B;IDEOGRAPHIC ANNOTATION THIRD MARK;So;0;L; 4E19;;;;N;KAERITEN HEI;;;; 319C;IDEOGRAPHIC ANNOTATION FOURTH MARK;So;0;L; 4E01;;;;N;KAERITEN TEI;;;; 319D;IDEOGRAPHIC ANNOTATION HEAVEN MARK;So;0;L; 5929;;;;N;KAERITEN TEN;;;; 319E;IDEOGRAPHIC ANNOTATION EARTH MARK;So;0;L; 5730;;;;N;KAERITEN TI;;;; 319F;IDEOGRAPHIC ANNOTATION MAN MARK;So;0;L; 4EBA;;;;N;KAERITEN ZIN;;;; 31A0;BOPOMOFO LETTER BU;Lo;0;L;;;;;N;;;;; 31A1;BOPOMOFO LETTER ZI;Lo;0;L;;;;;N;;;;; 31A2;BOPOMOFO LETTER JI;Lo;0;L;;;;;N;;;;; 31A3;BOPOMOFO LETTER GU;Lo;0;L;;;;;N;;;;; 31A4;BOPOMOFO LETTER EE;Lo;0;L;;;;;N;;;;; 31A5;BOPOMOFO LETTER ENN;Lo;0;L;;;;;N;;;;; 31A6;BOPOMOFO LETTER OO;Lo;0;L;;;;;N;;;;; 31A7;BOPOMOFO LETTER ONN;Lo;0;L;;;;;N;;;;; 31A8;BOPOMOFO LETTER IR;Lo;0;L;;;;;N;;;;; 31A9;BOPOMOFO LETTER ANN;Lo;0;L;;;;;N;;;;; 31AA;BOPOMOFO LETTER INN;Lo;0;L;;;;;N;;;;; 31AB;BOPOMOFO LETTER UNN;Lo;0;L;;;;;N;;;;; 31AC;BOPOMOFO LETTER IM;Lo;0;L;;;;;N;;;;; 31AD;BOPOMOFO LETTER NGG;Lo;0;L;;;;;N;;;;; 31AE;BOPOMOFO LETTER AINN;Lo;0;L;;;;;N;;;;; 31AF;BOPOMOFO LETTER AUNN;Lo;0;L;;;;;N;;;;; 31B0;BOPOMOFO LETTER AM;Lo;0;L;;;;;N;;;;; 31B1;BOPOMOFO LETTER OM;Lo;0;L;;;;;N;;;;; 31B2;BOPOMOFO LETTER ONG;Lo;0;L;;;;;N;;;;; 31B3;BOPOMOFO LETTER INNN;Lo;0;L;;;;;N;;;;; 31B4;BOPOMOFO FINAL LETTER P;Lo;0;L;;;;;N;;;;; 31B5;BOPOMOFO FINAL LETTER T;Lo;0;L;;;;;N;;;;; 31B6;BOPOMOFO FINAL LETTER K;Lo;0;L;;;;;N;;;;; 31B7;BOPOMOFO FINAL LETTER H;Lo;0;L;;;;;N;;;;; 31B8;BOPOMOFO LETTER GH;Lo;0;L;;;;;N;;;;; 31B9;BOPOMOFO LETTER LH;Lo;0;L;;;;;N;;;;; 31BA;BOPOMOFO LETTER ZY;Lo;0;L;;;;;N;;;;; 31BB;BOPOMOFO FINAL LETTER G;Lo;0;L;;;;;N;;;;; 31BC;BOPOMOFO LETTER GW;Lo;0;L;;;;;N;;;;; 31BD;BOPOMOFO LETTER KW;Lo;0;L;;;;;N;;;;; 31BE;BOPOMOFO LETTER OE;Lo;0;L;;;;;N;;;;; 31BF;BOPOMOFO LETTER AH;Lo;0;L;;;;;N;;;;; 31C0;CJK STROKE T;So;0;ON;;;;;N;;;;; 31C1;CJK STROKE WG;So;0;ON;;;;;N;;;;; 31C2;CJK STROKE XG;So;0;ON;;;;;N;;;;; 31C3;CJK STROKE BXG;So;0;ON;;;;;N;;;;; 31C4;CJK STROKE SW;So;0;ON;;;;;N;;;;; 31C5;CJK STROKE HZZ;So;0;ON;;;;;N;;;;; 31C6;CJK STROKE HZG;So;0;ON;;;;;N;;;;; 31C7;CJK STROKE HP;So;0;ON;;;;;N;;;;; 31C8;CJK STROKE HZWG;So;0;ON;;;;;N;;;;; 31C9;CJK STROKE SZWG;So;0;ON;;;;;N;;;;; 31CA;CJK STROKE HZT;So;0;ON;;;;;N;;;;; 31CB;CJK STROKE HZZP;So;0;ON;;;;;N;;;;; 31CC;CJK STROKE HPWG;So;0;ON;;;;;N;;;;; 31CD;CJK STROKE HZW;So;0;ON;;;;;N;;;;; 31CE;CJK STROKE HZZZ;So;0;ON;;;;;N;;;;; 31CF;CJK STROKE N;So;0;ON;;;;;N;;;;; 31D0;CJK STROKE H;So;0;ON;;;;;N;;;;; 31D1;CJK STROKE S;So;0;ON;;;;;N;;;;; 31D2;CJK STROKE P;So;0;ON;;;;;N;;;;; 31D3;CJK STROKE SP;So;0;ON;;;;;N;;;;; 31D4;CJK STROKE D;So;0;ON;;;;;N;;;;; 31D5;CJK STROKE HZ;So;0;ON;;;;;N;;;;; 31D6;CJK STROKE HG;So;0;ON;;;;;N;;;;; 31D7;CJK STROKE SZ;So;0;ON;;;;;N;;;;; 31D8;CJK STROKE SWZ;So;0;ON;;;;;N;;;;; 31D9;CJK STROKE ST;So;0;ON;;;;;N;;;;; 31DA;CJK STROKE SG;So;0;ON;;;;;N;;;;; 31DB;CJK STROKE PD;So;0;ON;;;;;N;;;;; 31DC;CJK STROKE PZ;So;0;ON;;;;;N;;;;; 31DD;CJK STROKE TN;So;0;ON;;;;;N;;;;; 31DE;CJK STROKE SZZ;So;0;ON;;;;;N;;;;; 31DF;CJK STROKE SWG;So;0;ON;;;;;N;;;;; 31E0;CJK STROKE HXWG;So;0;ON;;;;;N;;;;; 31E1;CJK STROKE HZZZG;So;0;ON;;;;;N;;;;; 31E2;CJK STROKE PG;So;0;ON;;;;;N;;;;; 31E3;CJK STROKE Q;So;0;ON;;;;;N;;;;; 31F0;KATAKANA LETTER SMALL KU;Lo;0;L;;;;;N;;;;; 31F1;KATAKANA LETTER SMALL SI;Lo;0;L;;;;;N;;;;; 31F2;KATAKANA LETTER SMALL SU;Lo;0;L;;;;;N;;;;; 31F3;KATAKANA LETTER SMALL TO;Lo;0;L;;;;;N;;;;; 31F4;KATAKANA LETTER SMALL NU;Lo;0;L;;;;;N;;;;; 31F5;KATAKANA LETTER SMALL HA;Lo;0;L;;;;;N;;;;; 31F6;KATAKANA LETTER SMALL HI;Lo;0;L;;;;;N;;;;; 31F7;KATAKANA LETTER SMALL HU;Lo;0;L;;;;;N;;;;; 31F8;KATAKANA LETTER SMALL HE;Lo;0;L;;;;;N;;;;; 31F9;KATAKANA LETTER SMALL HO;Lo;0;L;;;;;N;;;;; 31FA;KATAKANA LETTER SMALL MU;Lo;0;L;;;;;N;;;;; 31FB;KATAKANA LETTER SMALL RA;Lo;0;L;;;;;N;;;;; 31FC;KATAKANA LETTER SMALL RI;Lo;0;L;;;;;N;;;;; 31FD;KATAKANA LETTER SMALL RU;Lo;0;L;;;;;N;;;;; 31FE;KATAKANA LETTER SMALL RE;Lo;0;L;;;;;N;;;;; 31FF;KATAKANA LETTER SMALL RO;Lo;0;L;;;;;N;;;;; 3200;PARENTHESIZED HANGUL KIYEOK;So;0;L; 0028 1100 0029;;;;N;PARENTHESIZED HANGUL GIYEOG;;;; 3201;PARENTHESIZED HANGUL NIEUN;So;0;L; 0028 1102 0029;;;;N;;;;; 3202;PARENTHESIZED HANGUL TIKEUT;So;0;L; 0028 1103 0029;;;;N;PARENTHESIZED HANGUL DIGEUD;;;; 3203;PARENTHESIZED HANGUL RIEUL;So;0;L; 0028 1105 0029;;;;N;PARENTHESIZED HANGUL LIEUL;;;; 3204;PARENTHESIZED HANGUL MIEUM;So;0;L; 0028 1106 0029;;;;N;;;;; 3205;PARENTHESIZED HANGUL PIEUP;So;0;L; 0028 1107 0029;;;;N;PARENTHESIZED HANGUL BIEUB;;;; 3206;PARENTHESIZED HANGUL SIOS;So;0;L; 0028 1109 0029;;;;N;;;;; 3207;PARENTHESIZED HANGUL IEUNG;So;0;L; 0028 110B 0029;;;;N;;;;; 3208;PARENTHESIZED HANGUL CIEUC;So;0;L; 0028 110C 0029;;;;N;PARENTHESIZED HANGUL JIEUJ;;;; 3209;PARENTHESIZED HANGUL CHIEUCH;So;0;L; 0028 110E 0029;;;;N;PARENTHESIZED HANGUL CIEUC;;;; 320A;PARENTHESIZED HANGUL KHIEUKH;So;0;L; 0028 110F 0029;;;;N;PARENTHESIZED HANGUL KIYEOK;;;; 320B;PARENTHESIZED HANGUL THIEUTH;So;0;L; 0028 1110 0029;;;;N;PARENTHESIZED HANGUL TIEUT;;;; 320C;PARENTHESIZED HANGUL PHIEUPH;So;0;L; 0028 1111 0029;;;;N;PARENTHESIZED HANGUL PIEUP;;;; 320D;PARENTHESIZED HANGUL HIEUH;So;0;L; 0028 1112 0029;;;;N;;;;; 320E;PARENTHESIZED HANGUL KIYEOK A;So;0;L; 0028 1100 1161 0029;;;;N;PARENTHESIZED HANGUL GA;;;; 320F;PARENTHESIZED HANGUL NIEUN A;So;0;L; 0028 1102 1161 0029;;;;N;PARENTHESIZED HANGUL NA;;;; 3210;PARENTHESIZED HANGUL TIKEUT A;So;0;L; 0028 1103 1161 0029;;;;N;PARENTHESIZED HANGUL DA;;;; 3211;PARENTHESIZED HANGUL RIEUL A;So;0;L; 0028 1105 1161 0029;;;;N;PARENTHESIZED HANGUL LA;;;; 3212;PARENTHESIZED HANGUL MIEUM A;So;0;L; 0028 1106 1161 0029;;;;N;PARENTHESIZED HANGUL MA;;;; 3213;PARENTHESIZED HANGUL PIEUP A;So;0;L; 0028 1107 1161 0029;;;;N;PARENTHESIZED HANGUL BA;;;; 3214;PARENTHESIZED HANGUL SIOS A;So;0;L; 0028 1109 1161 0029;;;;N;PARENTHESIZED HANGUL SA;;;; 3215;PARENTHESIZED HANGUL IEUNG A;So;0;L; 0028 110B 1161 0029;;;;N;PARENTHESIZED HANGUL A;;;; 3216;PARENTHESIZED HANGUL CIEUC A;So;0;L; 0028 110C 1161 0029;;;;N;PARENTHESIZED HANGUL JA;;;; 3217;PARENTHESIZED HANGUL CHIEUCH A;So;0;L; 0028 110E 1161 0029;;;;N;PARENTHESIZED HANGUL CA;;;; 3218;PARENTHESIZED HANGUL KHIEUKH A;So;0;L; 0028 110F 1161 0029;;;;N;PARENTHESIZED HANGUL KA;;;; 3219;PARENTHESIZED HANGUL THIEUTH A;So;0;L; 0028 1110 1161 0029;;;;N;PARENTHESIZED HANGUL TA;;;; 321A;PARENTHESIZED HANGUL PHIEUPH A;So;0;L; 0028 1111 1161 0029;;;;N;PARENTHESIZED HANGUL PA;;;; 321B;PARENTHESIZED HANGUL HIEUH A;So;0;L; 0028 1112 1161 0029;;;;N;PARENTHESIZED HANGUL HA;;;; 321C;PARENTHESIZED HANGUL CIEUC U;So;0;L; 0028 110C 116E 0029;;;;N;PARENTHESIZED HANGUL JU;;;; 321D;PARENTHESIZED KOREAN CHARACTER OJEON;So;0;ON; 0028 110B 1169 110C 1165 11AB 0029;;;;N;;;;; 321E;PARENTHESIZED KOREAN CHARACTER O HU;So;0;ON; 0028 110B 1169 1112 116E 0029;;;;N;;;;; 3220;PARENTHESIZED IDEOGRAPH ONE;No;0;L; 0028 4E00 0029;;;1;N;;;;; 3221;PARENTHESIZED IDEOGRAPH TWO;No;0;L; 0028 4E8C 0029;;;2;N;;;;; 3222;PARENTHESIZED IDEOGRAPH THREE;No;0;L; 0028 4E09 0029;;;3;N;;;;; 3223;PARENTHESIZED IDEOGRAPH FOUR;No;0;L; 0028 56DB 0029;;;4;N;;;;; 3224;PARENTHESIZED IDEOGRAPH FIVE;No;0;L; 0028 4E94 0029;;;5;N;;;;; 3225;PARENTHESIZED IDEOGRAPH SIX;No;0;L; 0028 516D 0029;;;6;N;;;;; 3226;PARENTHESIZED IDEOGRAPH SEVEN;No;0;L; 0028 4E03 0029;;;7;N;;;;; 3227;PARENTHESIZED IDEOGRAPH EIGHT;No;0;L; 0028 516B 0029;;;8;N;;;;; 3228;PARENTHESIZED IDEOGRAPH NINE;No;0;L; 0028 4E5D 0029;;;9;N;;;;; 3229;PARENTHESIZED IDEOGRAPH TEN;No;0;L; 0028 5341 0029;;;10;N;;;;; 322A;PARENTHESIZED IDEOGRAPH MOON;So;0;L; 0028 6708 0029;;;;N;;;;; 322B;PARENTHESIZED IDEOGRAPH FIRE;So;0;L; 0028 706B 0029;;;;N;;;;; 322C;PARENTHESIZED IDEOGRAPH WATER;So;0;L; 0028 6C34 0029;;;;N;;;;; 322D;PARENTHESIZED IDEOGRAPH WOOD;So;0;L; 0028 6728 0029;;;;N;;;;; 322E;PARENTHESIZED IDEOGRAPH METAL;So;0;L; 0028 91D1 0029;;;;N;;;;; 322F;PARENTHESIZED IDEOGRAPH EARTH;So;0;L; 0028 571F 0029;;;;N;;;;; 3230;PARENTHESIZED IDEOGRAPH SUN;So;0;L; 0028 65E5 0029;;;;N;;;;; 3231;PARENTHESIZED IDEOGRAPH STOCK;So;0;L; 0028 682A 0029;;;;N;;;;; 3232;PARENTHESIZED IDEOGRAPH HAVE;So;0;L; 0028 6709 0029;;;;N;;;;; 3233;PARENTHESIZED IDEOGRAPH SOCIETY;So;0;L; 0028 793E 0029;;;;N;;;;; 3234;PARENTHESIZED IDEOGRAPH NAME;So;0;L; 0028 540D 0029;;;;N;;;;; 3235;PARENTHESIZED IDEOGRAPH SPECIAL;So;0;L; 0028 7279 0029;;;;N;;;;; 3236;PARENTHESIZED IDEOGRAPH FINANCIAL;So;0;L; 0028 8CA1 0029;;;;N;;;;; 3237;PARENTHESIZED IDEOGRAPH CONGRATULATION;So;0;L; 0028 795D 0029;;;;N;;;;; 3238;PARENTHESIZED IDEOGRAPH LABOR;So;0;L; 0028 52B4 0029;;;;N;;;;; 3239;PARENTHESIZED IDEOGRAPH REPRESENT;So;0;L; 0028 4EE3 0029;;;;N;;;;; 323A;PARENTHESIZED IDEOGRAPH CALL;So;0;L; 0028 547C 0029;;;;N;;;;; 323B;PARENTHESIZED IDEOGRAPH STUDY;So;0;L; 0028 5B66 0029;;;;N;;;;; 323C;PARENTHESIZED IDEOGRAPH SUPERVISE;So;0;L; 0028 76E3 0029;;;;N;;;;; 323D;PARENTHESIZED IDEOGRAPH ENTERPRISE;So;0;L; 0028 4F01 0029;;;;N;;;;; 323E;PARENTHESIZED IDEOGRAPH RESOURCE;So;0;L; 0028 8CC7 0029;;;;N;;;;; 323F;PARENTHESIZED IDEOGRAPH ALLIANCE;So;0;L; 0028 5354 0029;;;;N;;;;; 3240;PARENTHESIZED IDEOGRAPH FESTIVAL;So;0;L; 0028 796D 0029;;;;N;;;;; 3241;PARENTHESIZED IDEOGRAPH REST;So;0;L; 0028 4F11 0029;;;;N;;;;; 3242;PARENTHESIZED IDEOGRAPH SELF;So;0;L; 0028 81EA 0029;;;;N;;;;; 3243;PARENTHESIZED IDEOGRAPH REACH;So;0;L; 0028 81F3 0029;;;;N;;;;; 3244;CIRCLED IDEOGRAPH QUESTION;So;0;L; 554F;;;;N;;;;; 3245;CIRCLED IDEOGRAPH KINDERGARTEN;So;0;L; 5E7C;;;;N;;;;; 3246;CIRCLED IDEOGRAPH SCHOOL;So;0;L; 6587;;;;N;;;;; 3247;CIRCLED IDEOGRAPH KOTO;So;0;L; 7B8F;;;;N;;;;; 3248;CIRCLED NUMBER TEN ON BLACK SQUARE;No;0;L;;;;10;N;;;;; 3249;CIRCLED NUMBER TWENTY ON BLACK SQUARE;No;0;L;;;;20;N;;;;; 324A;CIRCLED NUMBER THIRTY ON BLACK SQUARE;No;0;L;;;;30;N;;;;; 324B;CIRCLED NUMBER FORTY ON BLACK SQUARE;No;0;L;;;;40;N;;;;; 324C;CIRCLED NUMBER FIFTY ON BLACK SQUARE;No;0;L;;;;50;N;;;;; 324D;CIRCLED NUMBER SIXTY ON BLACK SQUARE;No;0;L;;;;60;N;;;;; 324E;CIRCLED NUMBER SEVENTY ON BLACK SQUARE;No;0;L;;;;70;N;;;;; 324F;CIRCLED NUMBER EIGHTY ON BLACK SQUARE;No;0;L;;;;80;N;;;;; 3250;PARTNERSHIP SIGN;So;0;ON; 0050 0054 0045;;;;N;;;;; 3251;CIRCLED NUMBER TWENTY ONE;No;0;ON; 0032 0031;;;21;N;;;;; 3252;CIRCLED NUMBER TWENTY TWO;No;0;ON; 0032 0032;;;22;N;;;;; 3253;CIRCLED NUMBER TWENTY THREE;No;0;ON; 0032 0033;;;23;N;;;;; 3254;CIRCLED NUMBER TWENTY FOUR;No;0;ON; 0032 0034;;;24;N;;;;; 3255;CIRCLED NUMBER TWENTY FIVE;No;0;ON; 0032 0035;;;25;N;;;;; 3256;CIRCLED NUMBER TWENTY SIX;No;0;ON; 0032 0036;;;26;N;;;;; 3257;CIRCLED NUMBER TWENTY SEVEN;No;0;ON; 0032 0037;;;27;N;;;;; 3258;CIRCLED NUMBER TWENTY EIGHT;No;0;ON; 0032 0038;;;28;N;;;;; 3259;CIRCLED NUMBER TWENTY NINE;No;0;ON; 0032 0039;;;29;N;;;;; 325A;CIRCLED NUMBER THIRTY;No;0;ON; 0033 0030;;;30;N;;;;; 325B;CIRCLED NUMBER THIRTY ONE;No;0;ON; 0033 0031;;;31;N;;;;; 325C;CIRCLED NUMBER THIRTY TWO;No;0;ON; 0033 0032;;;32;N;;;;; 325D;CIRCLED NUMBER THIRTY THREE;No;0;ON; 0033 0033;;;33;N;;;;; 325E;CIRCLED NUMBER THIRTY FOUR;No;0;ON; 0033 0034;;;34;N;;;;; 325F;CIRCLED NUMBER THIRTY FIVE;No;0;ON; 0033 0035;;;35;N;;;;; 3260;CIRCLED HANGUL KIYEOK;So;0;L; 1100;;;;N;CIRCLED HANGUL GIYEOG;;;; 3261;CIRCLED HANGUL NIEUN;So;0;L; 1102;;;;N;;;;; 3262;CIRCLED HANGUL TIKEUT;So;0;L; 1103;;;;N;CIRCLED HANGUL DIGEUD;;;; 3263;CIRCLED HANGUL RIEUL;So;0;L; 1105;;;;N;CIRCLED HANGUL LIEUL;;;; 3264;CIRCLED HANGUL MIEUM;So;0;L; 1106;;;;N;;;;; 3265;CIRCLED HANGUL PIEUP;So;0;L; 1107;;;;N;CIRCLED HANGUL BIEUB;;;; 3266;CIRCLED HANGUL SIOS;So;0;L; 1109;;;;N;;;;; 3267;CIRCLED HANGUL IEUNG;So;0;L; 110B;;;;N;;;;; 3268;CIRCLED HANGUL CIEUC;So;0;L; 110C;;;;N;CIRCLED HANGUL JIEUJ;;;; 3269;CIRCLED HANGUL CHIEUCH;So;0;L; 110E;;;;N;CIRCLED HANGUL CIEUC;;;; 326A;CIRCLED HANGUL KHIEUKH;So;0;L; 110F;;;;N;CIRCLED HANGUL KIYEOK;;;; 326B;CIRCLED HANGUL THIEUTH;So;0;L; 1110;;;;N;CIRCLED HANGUL TIEUT;;;; 326C;CIRCLED HANGUL PHIEUPH;So;0;L; 1111;;;;N;CIRCLED HANGUL PIEUP;;;; 326D;CIRCLED HANGUL HIEUH;So;0;L; 1112;;;;N;;;;; 326E;CIRCLED HANGUL KIYEOK A;So;0;L; 1100 1161;;;;N;CIRCLED HANGUL GA;;;; 326F;CIRCLED HANGUL NIEUN A;So;0;L; 1102 1161;;;;N;CIRCLED HANGUL NA;;;; 3270;CIRCLED HANGUL TIKEUT A;So;0;L; 1103 1161;;;;N;CIRCLED HANGUL DA;;;; 3271;CIRCLED HANGUL RIEUL A;So;0;L; 1105 1161;;;;N;CIRCLED HANGUL LA;;;; 3272;CIRCLED HANGUL MIEUM A;So;0;L; 1106 1161;;;;N;CIRCLED HANGUL MA;;;; 3273;CIRCLED HANGUL PIEUP A;So;0;L; 1107 1161;;;;N;CIRCLED HANGUL BA;;;; 3274;CIRCLED HANGUL SIOS A;So;0;L; 1109 1161;;;;N;CIRCLED HANGUL SA;;;; 3275;CIRCLED HANGUL IEUNG A;So;0;L; 110B 1161;;;;N;CIRCLED HANGUL A;;;; 3276;CIRCLED HANGUL CIEUC A;So;0;L; 110C 1161;;;;N;CIRCLED HANGUL JA;;;; 3277;CIRCLED HANGUL CHIEUCH A;So;0;L; 110E 1161;;;;N;CIRCLED HANGUL CA;;;; 3278;CIRCLED HANGUL KHIEUKH A;So;0;L; 110F 1161;;;;N;CIRCLED HANGUL KA;;;; 3279;CIRCLED HANGUL THIEUTH A;So;0;L; 1110 1161;;;;N;CIRCLED HANGUL TA;;;; 327A;CIRCLED HANGUL PHIEUPH A;So;0;L; 1111 1161;;;;N;CIRCLED HANGUL PA;;;; 327B;CIRCLED HANGUL HIEUH A;So;0;L; 1112 1161;;;;N;CIRCLED HANGUL HA;;;; 327C;CIRCLED KOREAN CHARACTER CHAMKO;So;0;ON; 110E 1161 11B7 1100 1169;;;;N;;;;; 327D;CIRCLED KOREAN CHARACTER JUEUI;So;0;ON; 110C 116E 110B 1174;;;;N;;;;; 327E;CIRCLED HANGUL IEUNG U;So;0;ON; 110B 116E;;;;N;;;;; 327F;KOREAN STANDARD SYMBOL;So;0;L;;;;;N;;;;; 3280;CIRCLED IDEOGRAPH ONE;No;0;L; 4E00;;;1;N;;;;; 3281;CIRCLED IDEOGRAPH TWO;No;0;L; 4E8C;;;2;N;;;;; 3282;CIRCLED IDEOGRAPH THREE;No;0;L; 4E09;;;3;N;;;;; 3283;CIRCLED IDEOGRAPH FOUR;No;0;L; 56DB;;;4;N;;;;; 3284;CIRCLED IDEOGRAPH FIVE;No;0;L; 4E94;;;5;N;;;;; 3285;CIRCLED IDEOGRAPH SIX;No;0;L; 516D;;;6;N;;;;; 3286;CIRCLED IDEOGRAPH SEVEN;No;0;L; 4E03;;;7;N;;;;; 3287;CIRCLED IDEOGRAPH EIGHT;No;0;L; 516B;;;8;N;;;;; 3288;CIRCLED IDEOGRAPH NINE;No;0;L; 4E5D;;;9;N;;;;; 3289;CIRCLED IDEOGRAPH TEN;No;0;L; 5341;;;10;N;;;;; 328A;CIRCLED IDEOGRAPH MOON;So;0;L; 6708;;;;N;;;;; 328B;CIRCLED IDEOGRAPH FIRE;So;0;L; 706B;;;;N;;;;; 328C;CIRCLED IDEOGRAPH WATER;So;0;L; 6C34;;;;N;;;;; 328D;CIRCLED IDEOGRAPH WOOD;So;0;L; 6728;;;;N;;;;; 328E;CIRCLED IDEOGRAPH METAL;So;0;L; 91D1;;;;N;;;;; 328F;CIRCLED IDEOGRAPH EARTH;So;0;L; 571F;;;;N;;;;; 3290;CIRCLED IDEOGRAPH SUN;So;0;L; 65E5;;;;N;;;;; 3291;CIRCLED IDEOGRAPH STOCK;So;0;L; 682A;;;;N;;;;; 3292;CIRCLED IDEOGRAPH HAVE;So;0;L; 6709;;;;N;;;;; 3293;CIRCLED IDEOGRAPH SOCIETY;So;0;L; 793E;;;;N;;;;; 3294;CIRCLED IDEOGRAPH NAME;So;0;L; 540D;;;;N;;;;; 3295;CIRCLED IDEOGRAPH SPECIAL;So;0;L; 7279;;;;N;;;;; 3296;CIRCLED IDEOGRAPH FINANCIAL;So;0;L; 8CA1;;;;N;;;;; 3297;CIRCLED IDEOGRAPH CONGRATULATION;So;0;L; 795D;;;;N;;;;; 3298;CIRCLED IDEOGRAPH LABOR;So;0;L; 52B4;;;;N;;;;; 3299;CIRCLED IDEOGRAPH SECRET;So;0;L; 79D8;;;;N;;;;; 329A;CIRCLED IDEOGRAPH MALE;So;0;L; 7537;;;;N;;;;; 329B;CIRCLED IDEOGRAPH FEMALE;So;0;L; 5973;;;;N;;;;; 329C;CIRCLED IDEOGRAPH SUITABLE;So;0;L; 9069;;;;N;;;;; 329D;CIRCLED IDEOGRAPH EXCELLENT;So;0;L; 512A;;;;N;;;;; 329E;CIRCLED IDEOGRAPH PRINT;So;0;L; 5370;;;;N;;;;; 329F;CIRCLED IDEOGRAPH ATTENTION;So;0;L; 6CE8;;;;N;;;;; 32A0;CIRCLED IDEOGRAPH ITEM;So;0;L; 9805;;;;N;;;;; 32A1;CIRCLED IDEOGRAPH REST;So;0;L; 4F11;;;;N;;;;; 32A2;CIRCLED IDEOGRAPH COPY;So;0;L; 5199;;;;N;;;;; 32A3;CIRCLED IDEOGRAPH CORRECT;So;0;L; 6B63;;;;N;;;;; 32A4;CIRCLED IDEOGRAPH HIGH;So;0;L; 4E0A;;;;N;;;;; 32A5;CIRCLED IDEOGRAPH CENTRE;So;0;L; 4E2D;;;;N;CIRCLED IDEOGRAPH CENTER;;;; 32A6;CIRCLED IDEOGRAPH LOW;So;0;L; 4E0B;;;;N;;;;; 32A7;CIRCLED IDEOGRAPH LEFT;So;0;L; 5DE6;;;;N;;;;; 32A8;CIRCLED IDEOGRAPH RIGHT;So;0;L; 53F3;;;;N;;;;; 32A9;CIRCLED IDEOGRAPH MEDICINE;So;0;L; 533B;;;;N;;;;; 32AA;CIRCLED IDEOGRAPH RELIGION;So;0;L; 5B97;;;;N;;;;; 32AB;CIRCLED IDEOGRAPH STUDY;So;0;L; 5B66;;;;N;;;;; 32AC;CIRCLED IDEOGRAPH SUPERVISE;So;0;L; 76E3;;;;N;;;;; 32AD;CIRCLED IDEOGRAPH ENTERPRISE;So;0;L; 4F01;;;;N;;;;; 32AE;CIRCLED IDEOGRAPH RESOURCE;So;0;L; 8CC7;;;;N;;;;; 32AF;CIRCLED IDEOGRAPH ALLIANCE;So;0;L; 5354;;;;N;;;;; 32B0;CIRCLED IDEOGRAPH NIGHT;So;0;L; 591C;;;;N;;;;; 32B1;CIRCLED NUMBER THIRTY SIX;No;0;ON; 0033 0036;;;36;N;;;;; 32B2;CIRCLED NUMBER THIRTY SEVEN;No;0;ON; 0033 0037;;;37;N;;;;; 32B3;CIRCLED NUMBER THIRTY EIGHT;No;0;ON; 0033 0038;;;38;N;;;;; 32B4;CIRCLED NUMBER THIRTY NINE;No;0;ON; 0033 0039;;;39;N;;;;; 32B5;CIRCLED NUMBER FORTY;No;0;ON; 0034 0030;;;40;N;;;;; 32B6;CIRCLED NUMBER FORTY ONE;No;0;ON; 0034 0031;;;41;N;;;;; 32B7;CIRCLED NUMBER FORTY TWO;No;0;ON; 0034 0032;;;42;N;;;;; 32B8;CIRCLED NUMBER FORTY THREE;No;0;ON; 0034 0033;;;43;N;;;;; 32B9;CIRCLED NUMBER FORTY FOUR;No;0;ON; 0034 0034;;;44;N;;;;; 32BA;CIRCLED NUMBER FORTY FIVE;No;0;ON; 0034 0035;;;45;N;;;;; 32BB;CIRCLED NUMBER FORTY SIX;No;0;ON; 0034 0036;;;46;N;;;;; 32BC;CIRCLED NUMBER FORTY SEVEN;No;0;ON; 0034 0037;;;47;N;;;;; 32BD;CIRCLED NUMBER FORTY EIGHT;No;0;ON; 0034 0038;;;48;N;;;;; 32BE;CIRCLED NUMBER FORTY NINE;No;0;ON; 0034 0039;;;49;N;;;;; 32BF;CIRCLED NUMBER FIFTY;No;0;ON; 0035 0030;;;50;N;;;;; 32C0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY;So;0;L; 0031 6708;;;;N;;;;; 32C1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY;So;0;L; 0032 6708;;;;N;;;;; 32C2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH;So;0;L; 0033 6708;;;;N;;;;; 32C3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL;So;0;L; 0034 6708;;;;N;;;;; 32C4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY;So;0;L; 0035 6708;;;;N;;;;; 32C5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE;So;0;L; 0036 6708;;;;N;;;;; 32C6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY;So;0;L; 0037 6708;;;;N;;;;; 32C7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST;So;0;L; 0038 6708;;;;N;;;;; 32C8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER;So;0;L; 0039 6708;;;;N;;;;; 32C9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER;So;0;L; 0031 0030 6708;;;;N;;;;; 32CA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER;So;0;L; 0031 0031 6708;;;;N;;;;; 32CB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER;So;0;L; 0031 0032 6708;;;;N;;;;; 32CC;SQUARE HG;So;0;ON; 0048 0067;;;;N;;;;; 32CD;SQUARE ERG;So;0;ON; 0065 0072 0067;;;;N;;;;; 32CE;SQUARE EV;So;0;ON; 0065 0056;;;;N;;;;; 32CF;LIMITED LIABILITY SIGN;So;0;ON; 004C 0054 0044;;;;N;;;;; 32D0;CIRCLED KATAKANA A;So;0;L; 30A2;;;;N;;;;; 32D1;CIRCLED KATAKANA I;So;0;L; 30A4;;;;N;;;;; 32D2;CIRCLED KATAKANA U;So;0;L; 30A6;;;;N;;;;; 32D3;CIRCLED KATAKANA E;So;0;L; 30A8;;;;N;;;;; 32D4;CIRCLED KATAKANA O;So;0;L; 30AA;;;;N;;;;; 32D5;CIRCLED KATAKANA KA;So;0;L; 30AB;;;;N;;;;; 32D6;CIRCLED KATAKANA KI;So;0;L; 30AD;;;;N;;;;; 32D7;CIRCLED KATAKANA KU;So;0;L; 30AF;;;;N;;;;; 32D8;CIRCLED KATAKANA KE;So;0;L; 30B1;;;;N;;;;; 32D9;CIRCLED KATAKANA KO;So;0;L; 30B3;;;;N;;;;; 32DA;CIRCLED KATAKANA SA;So;0;L; 30B5;;;;N;;;;; 32DB;CIRCLED KATAKANA SI;So;0;L; 30B7;;;;N;;;;; 32DC;CIRCLED KATAKANA SU;So;0;L; 30B9;;;;N;;;;; 32DD;CIRCLED KATAKANA SE;So;0;L; 30BB;;;;N;;;;; 32DE;CIRCLED KATAKANA SO;So;0;L; 30BD;;;;N;;;;; 32DF;CIRCLED KATAKANA TA;So;0;L; 30BF;;;;N;;;;; 32E0;CIRCLED KATAKANA TI;So;0;L; 30C1;;;;N;;;;; 32E1;CIRCLED KATAKANA TU;So;0;L; 30C4;;;;N;;;;; 32E2;CIRCLED KATAKANA TE;So;0;L; 30C6;;;;N;;;;; 32E3;CIRCLED KATAKANA TO;So;0;L; 30C8;;;;N;;;;; 32E4;CIRCLED KATAKANA NA;So;0;L; 30CA;;;;N;;;;; 32E5;CIRCLED KATAKANA NI;So;0;L; 30CB;;;;N;;;;; 32E6;CIRCLED KATAKANA NU;So;0;L; 30CC;;;;N;;;;; 32E7;CIRCLED KATAKANA NE;So;0;L; 30CD;;;;N;;;;; 32E8;CIRCLED KATAKANA NO;So;0;L; 30CE;;;;N;;;;; 32E9;CIRCLED KATAKANA HA;So;0;L; 30CF;;;;N;;;;; 32EA;CIRCLED KATAKANA HI;So;0;L; 30D2;;;;N;;;;; 32EB;CIRCLED KATAKANA HU;So;0;L; 30D5;;;;N;;;;; 32EC;CIRCLED KATAKANA HE;So;0;L; 30D8;;;;N;;;;; 32ED;CIRCLED KATAKANA HO;So;0;L; 30DB;;;;N;;;;; 32EE;CIRCLED KATAKANA MA;So;0;L; 30DE;;;;N;;;;; 32EF;CIRCLED KATAKANA MI;So;0;L; 30DF;;;;N;;;;; 32F0;CIRCLED KATAKANA MU;So;0;L; 30E0;;;;N;;;;; 32F1;CIRCLED KATAKANA ME;So;0;L; 30E1;;;;N;;;;; 32F2;CIRCLED KATAKANA MO;So;0;L; 30E2;;;;N;;;;; 32F3;CIRCLED KATAKANA YA;So;0;L; 30E4;;;;N;;;;; 32F4;CIRCLED KATAKANA YU;So;0;L; 30E6;;;;N;;;;; 32F5;CIRCLED KATAKANA YO;So;0;L; 30E8;;;;N;;;;; 32F6;CIRCLED KATAKANA RA;So;0;L; 30E9;;;;N;;;;; 32F7;CIRCLED KATAKANA RI;So;0;L; 30EA;;;;N;;;;; 32F8;CIRCLED KATAKANA RU;So;0;L; 30EB;;;;N;;;;; 32F9;CIRCLED KATAKANA RE;So;0;L; 30EC;;;;N;;;;; 32FA;CIRCLED KATAKANA RO;So;0;L; 30ED;;;;N;;;;; 32FB;CIRCLED KATAKANA WA;So;0;L; 30EF;;;;N;;;;; 32FC;CIRCLED KATAKANA WI;So;0;L; 30F0;;;;N;;;;; 32FD;CIRCLED KATAKANA WE;So;0;L; 30F1;;;;N;;;;; 32FE;CIRCLED KATAKANA WO;So;0;L; 30F2;;;;N;;;;; 32FF;SQUARE ERA NAME REIWA;So;0;L; 4EE4 548C;;;;N;;;;; 3300;SQUARE APAATO;So;0;L; 30A2 30D1 30FC 30C8;;;;N;SQUARED APAATO;;;; 3301;SQUARE ARUHUA;So;0;L; 30A2 30EB 30D5 30A1;;;;N;SQUARED ARUHUA;;;; 3302;SQUARE ANPEA;So;0;L; 30A2 30F3 30DA 30A2;;;;N;SQUARED ANPEA;;;; 3303;SQUARE AARU;So;0;L; 30A2 30FC 30EB;;;;N;SQUARED AARU;;;; 3304;SQUARE ININGU;So;0;L; 30A4 30CB 30F3 30B0;;;;N;SQUARED ININGU;;;; 3305;SQUARE INTI;So;0;L; 30A4 30F3 30C1;;;;N;SQUARED INTI;;;; 3306;SQUARE UON;So;0;L; 30A6 30A9 30F3;;;;N;SQUARED UON;;;; 3307;SQUARE ESUKUUDO;So;0;L; 30A8 30B9 30AF 30FC 30C9;;;;N;SQUARED ESUKUUDO;;;; 3308;SQUARE EEKAA;So;0;L; 30A8 30FC 30AB 30FC;;;;N;SQUARED EEKAA;;;; 3309;SQUARE ONSU;So;0;L; 30AA 30F3 30B9;;;;N;SQUARED ONSU;;;; 330A;SQUARE OOMU;So;0;L; 30AA 30FC 30E0;;;;N;SQUARED OOMU;;;; 330B;SQUARE KAIRI;So;0;L; 30AB 30A4 30EA;;;;N;SQUARED KAIRI;;;; 330C;SQUARE KARATTO;So;0;L; 30AB 30E9 30C3 30C8;;;;N;SQUARED KARATTO;;;; 330D;SQUARE KARORII;So;0;L; 30AB 30ED 30EA 30FC;;;;N;SQUARED KARORII;;;; 330E;SQUARE GARON;So;0;L; 30AC 30ED 30F3;;;;N;SQUARED GARON;;;; 330F;SQUARE GANMA;So;0;L; 30AC 30F3 30DE;;;;N;SQUARED GANMA;;;; 3310;SQUARE GIGA;So;0;L; 30AE 30AC;;;;N;SQUARED GIGA;;;; 3311;SQUARE GINII;So;0;L; 30AE 30CB 30FC;;;;N;SQUARED GINII;;;; 3312;SQUARE KYURII;So;0;L; 30AD 30E5 30EA 30FC;;;;N;SQUARED KYURII;;;; 3313;SQUARE GIRUDAA;So;0;L; 30AE 30EB 30C0 30FC;;;;N;SQUARED GIRUDAA;;;; 3314;SQUARE KIRO;So;0;L; 30AD 30ED;;;;N;SQUARED KIRO;;;; 3315;SQUARE KIROGURAMU;So;0;L; 30AD 30ED 30B0 30E9 30E0;;;;N;SQUARED KIROGURAMU;;;; 3316;SQUARE KIROMEETORU;So;0;L; 30AD 30ED 30E1 30FC 30C8 30EB;;;;N;SQUARED KIROMEETORU;;;; 3317;SQUARE KIROWATTO;So;0;L; 30AD 30ED 30EF 30C3 30C8;;;;N;SQUARED KIROWATTO;;;; 3318;SQUARE GURAMU;So;0;L; 30B0 30E9 30E0;;;;N;SQUARED GURAMU;;;; 3319;SQUARE GURAMUTON;So;0;L; 30B0 30E9 30E0 30C8 30F3;;;;N;SQUARED GURAMUTON;;;; 331A;SQUARE KURUZEIRO;So;0;L; 30AF 30EB 30BC 30A4 30ED;;;;N;SQUARED KURUZEIRO;;;; 331B;SQUARE KUROONE;So;0;L; 30AF 30ED 30FC 30CD;;;;N;SQUARED KUROONE;;;; 331C;SQUARE KEESU;So;0;L; 30B1 30FC 30B9;;;;N;SQUARED KEESU;;;; 331D;SQUARE KORUNA;So;0;L; 30B3 30EB 30CA;;;;N;SQUARED KORUNA;;;; 331E;SQUARE KOOPO;So;0;L; 30B3 30FC 30DD;;;;N;SQUARED KOOPO;;;; 331F;SQUARE SAIKURU;So;0;L; 30B5 30A4 30AF 30EB;;;;N;SQUARED SAIKURU;;;; 3320;SQUARE SANTIIMU;So;0;L; 30B5 30F3 30C1 30FC 30E0;;;;N;SQUARED SANTIIMU;;;; 3321;SQUARE SIRINGU;So;0;L; 30B7 30EA 30F3 30B0;;;;N;SQUARED SIRINGU;;;; 3322;SQUARE SENTI;So;0;L; 30BB 30F3 30C1;;;;N;SQUARED SENTI;;;; 3323;SQUARE SENTO;So;0;L; 30BB 30F3 30C8;;;;N;SQUARED SENTO;;;; 3324;SQUARE DAASU;So;0;L; 30C0 30FC 30B9;;;;N;SQUARED DAASU;;;; 3325;SQUARE DESI;So;0;L; 30C7 30B7;;;;N;SQUARED DESI;;;; 3326;SQUARE DORU;So;0;L; 30C9 30EB;;;;N;SQUARED DORU;;;; 3327;SQUARE TON;So;0;L; 30C8 30F3;;;;N;SQUARED TON;;;; 3328;SQUARE NANO;So;0;L; 30CA 30CE;;;;N;SQUARED NANO;;;; 3329;SQUARE NOTTO;So;0;L; 30CE 30C3 30C8;;;;N;SQUARED NOTTO;;;; 332A;SQUARE HAITU;So;0;L; 30CF 30A4 30C4;;;;N;SQUARED HAITU;;;; 332B;SQUARE PAASENTO;So;0;L; 30D1 30FC 30BB 30F3 30C8;;;;N;SQUARED PAASENTO;;;; 332C;SQUARE PAATU;So;0;L; 30D1 30FC 30C4;;;;N;SQUARED PAATU;;;; 332D;SQUARE BAARERU;So;0;L; 30D0 30FC 30EC 30EB;;;;N;SQUARED BAARERU;;;; 332E;SQUARE PIASUTORU;So;0;L; 30D4 30A2 30B9 30C8 30EB;;;;N;SQUARED PIASUTORU;;;; 332F;SQUARE PIKURU;So;0;L; 30D4 30AF 30EB;;;;N;SQUARED PIKURU;;;; 3330;SQUARE PIKO;So;0;L; 30D4 30B3;;;;N;SQUARED PIKO;;;; 3331;SQUARE BIRU;So;0;L; 30D3 30EB;;;;N;SQUARED BIRU;;;; 3332;SQUARE HUARADDO;So;0;L; 30D5 30A1 30E9 30C3 30C9;;;;N;SQUARED HUARADDO;;;; 3333;SQUARE HUIITO;So;0;L; 30D5 30A3 30FC 30C8;;;;N;SQUARED HUIITO;;;; 3334;SQUARE BUSSYERU;So;0;L; 30D6 30C3 30B7 30A7 30EB;;;;N;SQUARED BUSSYERU;;;; 3335;SQUARE HURAN;So;0;L; 30D5 30E9 30F3;;;;N;SQUARED HURAN;;;; 3336;SQUARE HEKUTAARU;So;0;L; 30D8 30AF 30BF 30FC 30EB;;;;N;SQUARED HEKUTAARU;;;; 3337;SQUARE PESO;So;0;L; 30DA 30BD;;;;N;SQUARED PESO;;;; 3338;SQUARE PENIHI;So;0;L; 30DA 30CB 30D2;;;;N;SQUARED PENIHI;;;; 3339;SQUARE HERUTU;So;0;L; 30D8 30EB 30C4;;;;N;SQUARED HERUTU;;;; 333A;SQUARE PENSU;So;0;L; 30DA 30F3 30B9;;;;N;SQUARED PENSU;;;; 333B;SQUARE PEEZI;So;0;L; 30DA 30FC 30B8;;;;N;SQUARED PEEZI;;;; 333C;SQUARE BEETA;So;0;L; 30D9 30FC 30BF;;;;N;SQUARED BEETA;;;; 333D;SQUARE POINTO;So;0;L; 30DD 30A4 30F3 30C8;;;;N;SQUARED POINTO;;;; 333E;SQUARE BORUTO;So;0;L; 30DC 30EB 30C8;;;;N;SQUARED BORUTO;;;; 333F;SQUARE HON;So;0;L; 30DB 30F3;;;;N;SQUARED HON;;;; 3340;SQUARE PONDO;So;0;L; 30DD 30F3 30C9;;;;N;SQUARED PONDO;;;; 3341;SQUARE HOORU;So;0;L; 30DB 30FC 30EB;;;;N;SQUARED HOORU;;;; 3342;SQUARE HOON;So;0;L; 30DB 30FC 30F3;;;;N;SQUARED HOON;;;; 3343;SQUARE MAIKURO;So;0;L; 30DE 30A4 30AF 30ED;;;;N;SQUARED MAIKURO;;;; 3344;SQUARE MAIRU;So;0;L; 30DE 30A4 30EB;;;;N;SQUARED MAIRU;;;; 3345;SQUARE MAHHA;So;0;L; 30DE 30C3 30CF;;;;N;SQUARED MAHHA;;;; 3346;SQUARE MARUKU;So;0;L; 30DE 30EB 30AF;;;;N;SQUARED MARUKU;;;; 3347;SQUARE MANSYON;So;0;L; 30DE 30F3 30B7 30E7 30F3;;;;N;SQUARED MANSYON;;;; 3348;SQUARE MIKURON;So;0;L; 30DF 30AF 30ED 30F3;;;;N;SQUARED MIKURON;;;; 3349;SQUARE MIRI;So;0;L; 30DF 30EA;;;;N;SQUARED MIRI;;;; 334A;SQUARE MIRIBAARU;So;0;L; 30DF 30EA 30D0 30FC 30EB;;;;N;SQUARED MIRIBAARU;;;; 334B;SQUARE MEGA;So;0;L; 30E1 30AC;;;;N;SQUARED MEGA;;;; 334C;SQUARE MEGATON;So;0;L; 30E1 30AC 30C8 30F3;;;;N;SQUARED MEGATON;;;; 334D;SQUARE MEETORU;So;0;L; 30E1 30FC 30C8 30EB;;;;N;SQUARED MEETORU;;;; 334E;SQUARE YAADO;So;0;L; 30E4 30FC 30C9;;;;N;SQUARED YAADO;;;; 334F;SQUARE YAARU;So;0;L; 30E4 30FC 30EB;;;;N;SQUARED YAARU;;;; 3350;SQUARE YUAN;So;0;L; 30E6 30A2 30F3;;;;N;SQUARED YUAN;;;; 3351;SQUARE RITTORU;So;0;L; 30EA 30C3 30C8 30EB;;;;N;SQUARED RITTORU;;;; 3352;SQUARE RIRA;So;0;L; 30EA 30E9;;;;N;SQUARED RIRA;;;; 3353;SQUARE RUPII;So;0;L; 30EB 30D4 30FC;;;;N;SQUARED RUPII;;;; 3354;SQUARE RUUBURU;So;0;L; 30EB 30FC 30D6 30EB;;;;N;SQUARED RUUBURU;;;; 3355;SQUARE REMU;So;0;L; 30EC 30E0;;;;N;SQUARED REMU;;;; 3356;SQUARE RENTOGEN;So;0;L; 30EC 30F3 30C8 30B2 30F3;;;;N;SQUARED RENTOGEN;;;; 3357;SQUARE WATTO;So;0;L; 30EF 30C3 30C8;;;;N;SQUARED WATTO;;;; 3358;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO;So;0;L; 0030 70B9;;;;N;;;;; 3359;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE;So;0;L; 0031 70B9;;;;N;;;;; 335A;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO;So;0;L; 0032 70B9;;;;N;;;;; 335B;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE;So;0;L; 0033 70B9;;;;N;;;;; 335C;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR;So;0;L; 0034 70B9;;;;N;;;;; 335D;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE;So;0;L; 0035 70B9;;;;N;;;;; 335E;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX;So;0;L; 0036 70B9;;;;N;;;;; 335F;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN;So;0;L; 0037 70B9;;;;N;;;;; 3360;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT;So;0;L; 0038 70B9;;;;N;;;;; 3361;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE;So;0;L; 0039 70B9;;;;N;;;;; 3362;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN;So;0;L; 0031 0030 70B9;;;;N;;;;; 3363;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN;So;0;L; 0031 0031 70B9;;;;N;;;;; 3364;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE;So;0;L; 0031 0032 70B9;;;;N;;;;; 3365;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN;So;0;L; 0031 0033 70B9;;;;N;;;;; 3366;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN;So;0;L; 0031 0034 70B9;;;;N;;;;; 3367;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN;So;0;L; 0031 0035 70B9;;;;N;;;;; 3368;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN;So;0;L; 0031 0036 70B9;;;;N;;;;; 3369;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN;So;0;L; 0031 0037 70B9;;;;N;;;;; 336A;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN;So;0;L; 0031 0038 70B9;;;;N;;;;; 336B;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN;So;0;L; 0031 0039 70B9;;;;N;;;;; 336C;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY;So;0;L; 0032 0030 70B9;;;;N;;;;; 336D;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE;So;0;L; 0032 0031 70B9;;;;N;;;;; 336E;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO;So;0;L; 0032 0032 70B9;;;;N;;;;; 336F;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE;So;0;L; 0032 0033 70B9;;;;N;;;;; 3370;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR;So;0;L; 0032 0034 70B9;;;;N;;;;; 3371;SQUARE HPA;So;0;L; 0068 0050 0061;;;;N;;;;; 3372;SQUARE DA;So;0;L; 0064 0061;;;;N;;;;; 3373;SQUARE AU;So;0;L; 0041 0055;;;;N;;;;; 3374;SQUARE BAR;So;0;L; 0062 0061 0072;;;;N;;;;; 3375;SQUARE OV;So;0;L; 006F 0056;;;;N;;;;; 3376;SQUARE PC;So;0;L; 0070 0063;;;;N;;;;; 3377;SQUARE DM;So;0;ON; 0064 006D;;;;N;;;;; 3378;SQUARE DM SQUARED;So;0;ON; 0064 006D 00B2;;;;N;;;;; 3379;SQUARE DM CUBED;So;0;ON; 0064 006D 00B3;;;;N;;;;; 337A;SQUARE IU;So;0;ON; 0049 0055;;;;N;;;;; 337B;SQUARE ERA NAME HEISEI;So;0;L; 5E73 6210;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME HEISEI;;;; 337C;SQUARE ERA NAME SYOUWA;So;0;L; 662D 548C;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME SYOUWA;;;; 337D;SQUARE ERA NAME TAISYOU;So;0;L; 5927 6B63;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME TAISYOU;;;; 337E;SQUARE ERA NAME MEIZI;So;0;L; 660E 6CBB;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME MEIZI;;;; 337F;SQUARE CORPORATION;So;0;L; 682A 5F0F 4F1A 793E;;;;N;SQUARED FOUR IDEOGRAPHS CORPORATION;;;; 3380;SQUARE PA AMPS;So;0;L; 0070 0041;;;;N;SQUARED PA AMPS;;;; 3381;SQUARE NA;So;0;L; 006E 0041;;;;N;SQUARED NA;;;; 3382;SQUARE MU A;So;0;L; 03BC 0041;;;;N;SQUARED MU A;;;; 3383;SQUARE MA;So;0;L; 006D 0041;;;;N;SQUARED MA;;;; 3384;SQUARE KA;So;0;L; 006B 0041;;;;N;SQUARED KA;;;; 3385;SQUARE KB;So;0;L; 004B 0042;;;;N;SQUARED KB;;;; 3386;SQUARE MB;So;0;L; 004D 0042;;;;N;SQUARED MB;;;; 3387;SQUARE GB;So;0;L; 0047 0042;;;;N;SQUARED GB;;;; 3388;SQUARE CAL;So;0;L; 0063 0061 006C;;;;N;SQUARED CAL;;;; 3389;SQUARE KCAL;So;0;L; 006B 0063 0061 006C;;;;N;SQUARED KCAL;;;; 338A;SQUARE PF;So;0;L; 0070 0046;;;;N;SQUARED PF;;;; 338B;SQUARE NF;So;0;L; 006E 0046;;;;N;SQUARED NF;;;; 338C;SQUARE MU F;So;0;L; 03BC 0046;;;;N;SQUARED MU F;;;; 338D;SQUARE MU G;So;0;L; 03BC 0067;;;;N;SQUARED MU G;;;; 338E;SQUARE MG;So;0;L; 006D 0067;;;;N;SQUARED MG;;;; 338F;SQUARE KG;So;0;L; 006B 0067;;;;N;SQUARED KG;;;; 3390;SQUARE HZ;So;0;L; 0048 007A;;;;N;SQUARED HZ;;;; 3391;SQUARE KHZ;So;0;L; 006B 0048 007A;;;;N;SQUARED KHZ;;;; 3392;SQUARE MHZ;So;0;L; 004D 0048 007A;;;;N;SQUARED MHZ;;;; 3393;SQUARE GHZ;So;0;L; 0047 0048 007A;;;;N;SQUARED GHZ;;;; 3394;SQUARE THZ;So;0;L; 0054 0048 007A;;;;N;SQUARED THZ;;;; 3395;SQUARE MU L;So;0;L; 03BC 2113;;;;N;SQUARED MU L;;;; 3396;SQUARE ML;So;0;L; 006D 2113;;;;N;SQUARED ML;;;; 3397;SQUARE DL;So;0;L; 0064 2113;;;;N;SQUARED DL;;;; 3398;SQUARE KL;So;0;L; 006B 2113;;;;N;SQUARED KL;;;; 3399;SQUARE FM;So;0;L; 0066 006D;;;;N;SQUARED FM;;;; 339A;SQUARE NM;So;0;L; 006E 006D;;;;N;SQUARED NM;;;; 339B;SQUARE MU M;So;0;L; 03BC 006D;;;;N;SQUARED MU M;;;; 339C;SQUARE MM;So;0;L; 006D 006D;;;;N;SQUARED MM;;;; 339D;SQUARE CM;So;0;L; 0063 006D;;;;N;SQUARED CM;;;; 339E;SQUARE KM;So;0;L; 006B 006D;;;;N;SQUARED KM;;;; 339F;SQUARE MM SQUARED;So;0;L; 006D 006D 00B2;;;;N;SQUARED MM SQUARED;;;; 33A0;SQUARE CM SQUARED;So;0;L; 0063 006D 00B2;;;;N;SQUARED CM SQUARED;;;; 33A1;SQUARE M SQUARED;So;0;L; 006D 00B2;;;;N;SQUARED M SQUARED;;;; 33A2;SQUARE KM SQUARED;So;0;L; 006B 006D 00B2;;;;N;SQUARED KM SQUARED;;;; 33A3;SQUARE MM CUBED;So;0;L; 006D 006D 00B3;;;;N;SQUARED MM CUBED;;;; 33A4;SQUARE CM CUBED;So;0;L; 0063 006D 00B3;;;;N;SQUARED CM CUBED;;;; 33A5;SQUARE M CUBED;So;0;L; 006D 00B3;;;;N;SQUARED M CUBED;;;; 33A6;SQUARE KM CUBED;So;0;L; 006B 006D 00B3;;;;N;SQUARED KM CUBED;;;; 33A7;SQUARE M OVER S;So;0;L; 006D 2215 0073;;;;N;SQUARED M OVER S;;;; 33A8;SQUARE M OVER S SQUARED;So;0;L; 006D 2215 0073 00B2;;;;N;SQUARED M OVER S SQUARED;;;; 33A9;SQUARE PA;So;0;L; 0050 0061;;;;N;SQUARED PA;;;; 33AA;SQUARE KPA;So;0;L; 006B 0050 0061;;;;N;SQUARED KPA;;;; 33AB;SQUARE MPA;So;0;L; 004D 0050 0061;;;;N;SQUARED MPA;;;; 33AC;SQUARE GPA;So;0;L; 0047 0050 0061;;;;N;SQUARED GPA;;;; 33AD;SQUARE RAD;So;0;L; 0072 0061 0064;;;;N;SQUARED RAD;;;; 33AE;SQUARE RAD OVER S;So;0;L; 0072 0061 0064 2215 0073;;;;N;SQUARED RAD OVER S;;;; 33AF;SQUARE RAD OVER S SQUARED;So;0;L; 0072 0061 0064 2215 0073 00B2;;;;N;SQUARED RAD OVER S SQUARED;;;; 33B0;SQUARE PS;So;0;L; 0070 0073;;;;N;SQUARED PS;;;; 33B1;SQUARE NS;So;0;L; 006E 0073;;;;N;SQUARED NS;;;; 33B2;SQUARE MU S;So;0;L; 03BC 0073;;;;N;SQUARED MU S;;;; 33B3;SQUARE MS;So;0;L; 006D 0073;;;;N;SQUARED MS;;;; 33B4;SQUARE PV;So;0;L; 0070 0056;;;;N;SQUARED PV;;;; 33B5;SQUARE NV;So;0;L; 006E 0056;;;;N;SQUARED NV;;;; 33B6;SQUARE MU V;So;0;L; 03BC 0056;;;;N;SQUARED MU V;;;; 33B7;SQUARE MV;So;0;L; 006D 0056;;;;N;SQUARED MV;;;; 33B8;SQUARE KV;So;0;L; 006B 0056;;;;N;SQUARED KV;;;; 33B9;SQUARE MV MEGA;So;0;L; 004D 0056;;;;N;SQUARED MV MEGA;;;; 33BA;SQUARE PW;So;0;L; 0070 0057;;;;N;SQUARED PW;;;; 33BB;SQUARE NW;So;0;L; 006E 0057;;;;N;SQUARED NW;;;; 33BC;SQUARE MU W;So;0;L; 03BC 0057;;;;N;SQUARED MU W;;;; 33BD;SQUARE MW;So;0;L; 006D 0057;;;;N;SQUARED MW;;;; 33BE;SQUARE KW;So;0;L; 006B 0057;;;;N;SQUARED KW;;;; 33BF;SQUARE MW MEGA;So;0;L; 004D 0057;;;;N;SQUARED MW MEGA;;;; 33C0;SQUARE K OHM;So;0;L; 006B 03A9;;;;N;SQUARED K OHM;;;; 33C1;SQUARE M OHM;So;0;L; 004D 03A9;;;;N;SQUARED M OHM;;;; 33C2;SQUARE AM;So;0;L; 0061 002E 006D 002E;;;;N;SQUARED AM;;;; 33C3;SQUARE BQ;So;0;L; 0042 0071;;;;N;SQUARED BQ;;;; 33C4;SQUARE CC;So;0;L; 0063 0063;;;;N;SQUARED CC;;;; 33C5;SQUARE CD;So;0;L; 0063 0064;;;;N;SQUARED CD;;;; 33C6;SQUARE C OVER KG;So;0;L; 0043 2215 006B 0067;;;;N;SQUARED C OVER KG;;;; 33C7;SQUARE CO;So;0;L; 0043 006F 002E;;;;N;SQUARED CO;;;; 33C8;SQUARE DB;So;0;L; 0064 0042;;;;N;SQUARED DB;;;; 33C9;SQUARE GY;So;0;L; 0047 0079;;;;N;SQUARED GY;;;; 33CA;SQUARE HA;So;0;L; 0068 0061;;;;N;SQUARED HA;;;; 33CB;SQUARE HP;So;0;L; 0048 0050;;;;N;SQUARED HP;;;; 33CC;SQUARE IN;So;0;L; 0069 006E;;;;N;SQUARED IN;;;; 33CD;SQUARE KK;So;0;L; 004B 004B;;;;N;SQUARED KK;;;; 33CE;SQUARE KM CAPITAL;So;0;L; 004B 004D;;;;N;SQUARED KM CAPITAL;;;; 33CF;SQUARE KT;So;0;L; 006B 0074;;;;N;SQUARED KT;;;; 33D0;SQUARE LM;So;0;L; 006C 006D;;;;N;SQUARED LM;;;; 33D1;SQUARE LN;So;0;L; 006C 006E;;;;N;SQUARED LN;;;; 33D2;SQUARE LOG;So;0;L; 006C 006F 0067;;;;N;SQUARED LOG;;;; 33D3;SQUARE LX;So;0;L; 006C 0078;;;;N;SQUARED LX;;;; 33D4;SQUARE MB SMALL;So;0;L; 006D 0062;;;;N;SQUARED MB SMALL;;;; 33D5;SQUARE MIL;So;0;L; 006D 0069 006C;;;;N;SQUARED MIL;;;; 33D6;SQUARE MOL;So;0;L; 006D 006F 006C;;;;N;SQUARED MOL;;;; 33D7;SQUARE PH;So;0;L; 0050 0048;;;;N;SQUARED PH;;;; 33D8;SQUARE PM;So;0;L; 0070 002E 006D 002E;;;;N;SQUARED PM;;;; 33D9;SQUARE PPM;So;0;L; 0050 0050 004D;;;;N;SQUARED PPM;;;; 33DA;SQUARE PR;So;0;L; 0050 0052;;;;N;SQUARED PR;;;; 33DB;SQUARE SR;So;0;L; 0073 0072;;;;N;SQUARED SR;;;; 33DC;SQUARE SV;So;0;L; 0053 0076;;;;N;SQUARED SV;;;; 33DD;SQUARE WB;So;0;L; 0057 0062;;;;N;SQUARED WB;;;; 33DE;SQUARE V OVER M;So;0;ON; 0056 2215 006D;;;;N;;;;; 33DF;SQUARE A OVER M;So;0;ON; 0041 2215 006D;;;;N;;;;; 33E0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE;So;0;L; 0031 65E5;;;;N;;;;; 33E1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO;So;0;L; 0032 65E5;;;;N;;;;; 33E2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE;So;0;L; 0033 65E5;;;;N;;;;; 33E3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR;So;0;L; 0034 65E5;;;;N;;;;; 33E4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE;So;0;L; 0035 65E5;;;;N;;;;; 33E5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX;So;0;L; 0036 65E5;;;;N;;;;; 33E6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN;So;0;L; 0037 65E5;;;;N;;;;; 33E7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT;So;0;L; 0038 65E5;;;;N;;;;; 33E8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE;So;0;L; 0039 65E5;;;;N;;;;; 33E9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN;So;0;L; 0031 0030 65E5;;;;N;;;;; 33EA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN;So;0;L; 0031 0031 65E5;;;;N;;;;; 33EB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE;So;0;L; 0031 0032 65E5;;;;N;;;;; 33EC;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN;So;0;L; 0031 0033 65E5;;;;N;;;;; 33ED;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN;So;0;L; 0031 0034 65E5;;;;N;;;;; 33EE;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN;So;0;L; 0031 0035 65E5;;;;N;;;;; 33EF;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN;So;0;L; 0031 0036 65E5;;;;N;;;;; 33F0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN;So;0;L; 0031 0037 65E5;;;;N;;;;; 33F1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN;So;0;L; 0031 0038 65E5;;;;N;;;;; 33F2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN;So;0;L; 0031 0039 65E5;;;;N;;;;; 33F3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY;So;0;L; 0032 0030 65E5;;;;N;;;;; 33F4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE;So;0;L; 0032 0031 65E5;;;;N;;;;; 33F5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO;So;0;L; 0032 0032 65E5;;;;N;;;;; 33F6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE;So;0;L; 0032 0033 65E5;;;;N;;;;; 33F7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR;So;0;L; 0032 0034 65E5;;;;N;;;;; 33F8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE;So;0;L; 0032 0035 65E5;;;;N;;;;; 33F9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX;So;0;L; 0032 0036 65E5;;;;N;;;;; 33FA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN;So;0;L; 0032 0037 65E5;;;;N;;;;; 33FB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT;So;0;L; 0032 0038 65E5;;;;N;;;;; 33FC;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE;So;0;L; 0032 0039 65E5;;;;N;;;;; 33FD;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY;So;0;L; 0033 0030 65E5;;;;N;;;;; 33FE;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE;So;0;L; 0033 0031 65E5;;;;N;;;;; 33FF;SQUARE GAL;So;0;ON; 0067 0061 006C;;;;N;;;;; 3400;;Lo;0;L;;;;;N;;;;; 4DBF;;Lo;0;L;;;;;N;;;;; 4DC0;HEXAGRAM FOR THE CREATIVE HEAVEN;So;0;ON;;;;;N;;;;; 4DC1;HEXAGRAM FOR THE RECEPTIVE EARTH;So;0;ON;;;;;N;;;;; 4DC2;HEXAGRAM FOR DIFFICULTY AT THE BEGINNING;So;0;ON;;;;;N;;;;; 4DC3;HEXAGRAM FOR YOUTHFUL FOLLY;So;0;ON;;;;;N;;;;; 4DC4;HEXAGRAM FOR WAITING;So;0;ON;;;;;N;;;;; 4DC5;HEXAGRAM FOR CONFLICT;So;0;ON;;;;;N;;;;; 4DC6;HEXAGRAM FOR THE ARMY;So;0;ON;;;;;N;;;;; 4DC7;HEXAGRAM FOR HOLDING TOGETHER;So;0;ON;;;;;N;;;;; 4DC8;HEXAGRAM FOR SMALL TAMING;So;0;ON;;;;;N;;;;; 4DC9;HEXAGRAM FOR TREADING;So;0;ON;;;;;N;;;;; 4DCA;HEXAGRAM FOR PEACE;So;0;ON;;;;;N;;;;; 4DCB;HEXAGRAM FOR STANDSTILL;So;0;ON;;;;;N;;;;; 4DCC;HEXAGRAM FOR FELLOWSHIP;So;0;ON;;;;;N;;;;; 4DCD;HEXAGRAM FOR GREAT POSSESSION;So;0;ON;;;;;N;;;;; 4DCE;HEXAGRAM FOR MODESTY;So;0;ON;;;;;N;;;;; 4DCF;HEXAGRAM FOR ENTHUSIASM;So;0;ON;;;;;N;;;;; 4DD0;HEXAGRAM FOR FOLLOWING;So;0;ON;;;;;N;;;;; 4DD1;HEXAGRAM FOR WORK ON THE DECAYED;So;0;ON;;;;;N;;;;; 4DD2;HEXAGRAM FOR APPROACH;So;0;ON;;;;;N;;;;; 4DD3;HEXAGRAM FOR CONTEMPLATION;So;0;ON;;;;;N;;;;; 4DD4;HEXAGRAM FOR BITING THROUGH;So;0;ON;;;;;N;;;;; 4DD5;HEXAGRAM FOR GRACE;So;0;ON;;;;;N;;;;; 4DD6;HEXAGRAM FOR SPLITTING APART;So;0;ON;;;;;N;;;;; 4DD7;HEXAGRAM FOR RETURN;So;0;ON;;;;;N;;;;; 4DD8;HEXAGRAM FOR INNOCENCE;So;0;ON;;;;;N;;;;; 4DD9;HEXAGRAM FOR GREAT TAMING;So;0;ON;;;;;N;;;;; 4DDA;HEXAGRAM FOR MOUTH CORNERS;So;0;ON;;;;;N;;;;; 4DDB;HEXAGRAM FOR GREAT PREPONDERANCE;So;0;ON;;;;;N;;;;; 4DDC;HEXAGRAM FOR THE ABYSMAL WATER;So;0;ON;;;;;N;;;;; 4DDD;HEXAGRAM FOR THE CLINGING FIRE;So;0;ON;;;;;N;;;;; 4DDE;HEXAGRAM FOR INFLUENCE;So;0;ON;;;;;N;;;;; 4DDF;HEXAGRAM FOR DURATION;So;0;ON;;;;;N;;;;; 4DE0;HEXAGRAM FOR RETREAT;So;0;ON;;;;;N;;;;; 4DE1;HEXAGRAM FOR GREAT POWER;So;0;ON;;;;;N;;;;; 4DE2;HEXAGRAM FOR PROGRESS;So;0;ON;;;;;N;;;;; 4DE3;HEXAGRAM FOR DARKENING OF THE LIGHT;So;0;ON;;;;;N;;;;; 4DE4;HEXAGRAM FOR THE FAMILY;So;0;ON;;;;;N;;;;; 4DE5;HEXAGRAM FOR OPPOSITION;So;0;ON;;;;;N;;;;; 4DE6;HEXAGRAM FOR OBSTRUCTION;So;0;ON;;;;;N;;;;; 4DE7;HEXAGRAM FOR DELIVERANCE;So;0;ON;;;;;N;;;;; 4DE8;HEXAGRAM FOR DECREASE;So;0;ON;;;;;N;;;;; 4DE9;HEXAGRAM FOR INCREASE;So;0;ON;;;;;N;;;;; 4DEA;HEXAGRAM FOR BREAKTHROUGH;So;0;ON;;;;;N;;;;; 4DEB;HEXAGRAM FOR COMING TO MEET;So;0;ON;;;;;N;;;;; 4DEC;HEXAGRAM FOR GATHERING TOGETHER;So;0;ON;;;;;N;;;;; 4DED;HEXAGRAM FOR PUSHING UPWARD;So;0;ON;;;;;N;;;;; 4DEE;HEXAGRAM FOR OPPRESSION;So;0;ON;;;;;N;;;;; 4DEF;HEXAGRAM FOR THE WELL;So;0;ON;;;;;N;;;;; 4DF0;HEXAGRAM FOR REVOLUTION;So;0;ON;;;;;N;;;;; 4DF1;HEXAGRAM FOR THE CAULDRON;So;0;ON;;;;;N;;;;; 4DF2;HEXAGRAM FOR THE AROUSING THUNDER;So;0;ON;;;;;N;;;;; 4DF3;HEXAGRAM FOR THE KEEPING STILL MOUNTAIN;So;0;ON;;;;;N;;;;; 4DF4;HEXAGRAM FOR DEVELOPMENT;So;0;ON;;;;;N;;;;; 4DF5;HEXAGRAM FOR THE MARRYING MAIDEN;So;0;ON;;;;;N;;;;; 4DF6;HEXAGRAM FOR ABUNDANCE;So;0;ON;;;;;N;;;;; 4DF7;HEXAGRAM FOR THE WANDERER;So;0;ON;;;;;N;;;;; 4DF8;HEXAGRAM FOR THE GENTLE WIND;So;0;ON;;;;;N;;;;; 4DF9;HEXAGRAM FOR THE JOYOUS LAKE;So;0;ON;;;;;N;;;;; 4DFA;HEXAGRAM FOR DISPERSION;So;0;ON;;;;;N;;;;; 4DFB;HEXAGRAM FOR LIMITATION;So;0;ON;;;;;N;;;;; 4DFC;HEXAGRAM FOR INNER TRUTH;So;0;ON;;;;;N;;;;; 4DFD;HEXAGRAM FOR SMALL PREPONDERANCE;So;0;ON;;;;;N;;;;; 4DFE;HEXAGRAM FOR AFTER COMPLETION;So;0;ON;;;;;N;;;;; 4DFF;HEXAGRAM FOR BEFORE COMPLETION;So;0;ON;;;;;N;;;;; 4E00;;Lo;0;L;;;;;N;;;;; 9FFF;;Lo;0;L;;;;;N;;;;; A000;YI SYLLABLE IT;Lo;0;L;;;;;N;;;;; A001;YI SYLLABLE IX;Lo;0;L;;;;;N;;;;; A002;YI SYLLABLE I;Lo;0;L;;;;;N;;;;; A003;YI SYLLABLE IP;Lo;0;L;;;;;N;;;;; A004;YI SYLLABLE IET;Lo;0;L;;;;;N;;;;; A005;YI SYLLABLE IEX;Lo;0;L;;;;;N;;;;; A006;YI SYLLABLE IE;Lo;0;L;;;;;N;;;;; A007;YI SYLLABLE IEP;Lo;0;L;;;;;N;;;;; A008;YI SYLLABLE AT;Lo;0;L;;;;;N;;;;; A009;YI SYLLABLE AX;Lo;0;L;;;;;N;;;;; A00A;YI SYLLABLE A;Lo;0;L;;;;;N;;;;; A00B;YI SYLLABLE AP;Lo;0;L;;;;;N;;;;; A00C;YI SYLLABLE UOX;Lo;0;L;;;;;N;;;;; A00D;YI SYLLABLE UO;Lo;0;L;;;;;N;;;;; A00E;YI SYLLABLE UOP;Lo;0;L;;;;;N;;;;; A00F;YI SYLLABLE OT;Lo;0;L;;;;;N;;;;; A010;YI SYLLABLE OX;Lo;0;L;;;;;N;;;;; A011;YI SYLLABLE O;Lo;0;L;;;;;N;;;;; A012;YI SYLLABLE OP;Lo;0;L;;;;;N;;;;; A013;YI SYLLABLE EX;Lo;0;L;;;;;N;;;;; A014;YI SYLLABLE E;Lo;0;L;;;;;N;;;;; A015;YI SYLLABLE WU;Lm;0;L;;;;;N;;;;; A016;YI SYLLABLE BIT;Lo;0;L;;;;;N;;;;; A017;YI SYLLABLE BIX;Lo;0;L;;;;;N;;;;; A018;YI SYLLABLE BI;Lo;0;L;;;;;N;;;;; A019;YI SYLLABLE BIP;Lo;0;L;;;;;N;;;;; A01A;YI SYLLABLE BIET;Lo;0;L;;;;;N;;;;; A01B;YI SYLLABLE BIEX;Lo;0;L;;;;;N;;;;; A01C;YI SYLLABLE BIE;Lo;0;L;;;;;N;;;;; A01D;YI SYLLABLE BIEP;Lo;0;L;;;;;N;;;;; A01E;YI SYLLABLE BAT;Lo;0;L;;;;;N;;;;; A01F;YI SYLLABLE BAX;Lo;0;L;;;;;N;;;;; A020;YI SYLLABLE BA;Lo;0;L;;;;;N;;;;; A021;YI SYLLABLE BAP;Lo;0;L;;;;;N;;;;; A022;YI SYLLABLE BUOX;Lo;0;L;;;;;N;;;;; A023;YI SYLLABLE BUO;Lo;0;L;;;;;N;;;;; A024;YI SYLLABLE BUOP;Lo;0;L;;;;;N;;;;; A025;YI SYLLABLE BOT;Lo;0;L;;;;;N;;;;; A026;YI SYLLABLE BOX;Lo;0;L;;;;;N;;;;; A027;YI SYLLABLE BO;Lo;0;L;;;;;N;;;;; A028;YI SYLLABLE BOP;Lo;0;L;;;;;N;;;;; A029;YI SYLLABLE BEX;Lo;0;L;;;;;N;;;;; A02A;YI SYLLABLE BE;Lo;0;L;;;;;N;;;;; A02B;YI SYLLABLE BEP;Lo;0;L;;;;;N;;;;; A02C;YI SYLLABLE BUT;Lo;0;L;;;;;N;;;;; A02D;YI SYLLABLE BUX;Lo;0;L;;;;;N;;;;; A02E;YI SYLLABLE BU;Lo;0;L;;;;;N;;;;; A02F;YI SYLLABLE BUP;Lo;0;L;;;;;N;;;;; A030;YI SYLLABLE BURX;Lo;0;L;;;;;N;;;;; A031;YI SYLLABLE BUR;Lo;0;L;;;;;N;;;;; A032;YI SYLLABLE BYT;Lo;0;L;;;;;N;;;;; A033;YI SYLLABLE BYX;Lo;0;L;;;;;N;;;;; A034;YI SYLLABLE BY;Lo;0;L;;;;;N;;;;; A035;YI SYLLABLE BYP;Lo;0;L;;;;;N;;;;; A036;YI SYLLABLE BYRX;Lo;0;L;;;;;N;;;;; A037;YI SYLLABLE BYR;Lo;0;L;;;;;N;;;;; A038;YI SYLLABLE PIT;Lo;0;L;;;;;N;;;;; A039;YI SYLLABLE PIX;Lo;0;L;;;;;N;;;;; A03A;YI SYLLABLE PI;Lo;0;L;;;;;N;;;;; A03B;YI SYLLABLE PIP;Lo;0;L;;;;;N;;;;; A03C;YI SYLLABLE PIEX;Lo;0;L;;;;;N;;;;; A03D;YI SYLLABLE PIE;Lo;0;L;;;;;N;;;;; A03E;YI SYLLABLE PIEP;Lo;0;L;;;;;N;;;;; A03F;YI SYLLABLE PAT;Lo;0;L;;;;;N;;;;; A040;YI SYLLABLE PAX;Lo;0;L;;;;;N;;;;; A041;YI SYLLABLE PA;Lo;0;L;;;;;N;;;;; A042;YI SYLLABLE PAP;Lo;0;L;;;;;N;;;;; A043;YI SYLLABLE PUOX;Lo;0;L;;;;;N;;;;; A044;YI SYLLABLE PUO;Lo;0;L;;;;;N;;;;; A045;YI SYLLABLE PUOP;Lo;0;L;;;;;N;;;;; A046;YI SYLLABLE POT;Lo;0;L;;;;;N;;;;; A047;YI SYLLABLE POX;Lo;0;L;;;;;N;;;;; A048;YI SYLLABLE PO;Lo;0;L;;;;;N;;;;; A049;YI SYLLABLE POP;Lo;0;L;;;;;N;;;;; A04A;YI SYLLABLE PUT;Lo;0;L;;;;;N;;;;; A04B;YI SYLLABLE PUX;Lo;0;L;;;;;N;;;;; A04C;YI SYLLABLE PU;Lo;0;L;;;;;N;;;;; A04D;YI SYLLABLE PUP;Lo;0;L;;;;;N;;;;; A04E;YI SYLLABLE PURX;Lo;0;L;;;;;N;;;;; A04F;YI SYLLABLE PUR;Lo;0;L;;;;;N;;;;; A050;YI SYLLABLE PYT;Lo;0;L;;;;;N;;;;; A051;YI SYLLABLE PYX;Lo;0;L;;;;;N;;;;; A052;YI SYLLABLE PY;Lo;0;L;;;;;N;;;;; A053;YI SYLLABLE PYP;Lo;0;L;;;;;N;;;;; A054;YI SYLLABLE PYRX;Lo;0;L;;;;;N;;;;; A055;YI SYLLABLE PYR;Lo;0;L;;;;;N;;;;; A056;YI SYLLABLE BBIT;Lo;0;L;;;;;N;;;;; A057;YI SYLLABLE BBIX;Lo;0;L;;;;;N;;;;; A058;YI SYLLABLE BBI;Lo;0;L;;;;;N;;;;; A059;YI SYLLABLE BBIP;Lo;0;L;;;;;N;;;;; A05A;YI SYLLABLE BBIET;Lo;0;L;;;;;N;;;;; A05B;YI SYLLABLE BBIEX;Lo;0;L;;;;;N;;;;; A05C;YI SYLLABLE BBIE;Lo;0;L;;;;;N;;;;; A05D;YI SYLLABLE BBIEP;Lo;0;L;;;;;N;;;;; A05E;YI SYLLABLE BBAT;Lo;0;L;;;;;N;;;;; A05F;YI SYLLABLE BBAX;Lo;0;L;;;;;N;;;;; A060;YI SYLLABLE BBA;Lo;0;L;;;;;N;;;;; A061;YI SYLLABLE BBAP;Lo;0;L;;;;;N;;;;; A062;YI SYLLABLE BBUOX;Lo;0;L;;;;;N;;;;; A063;YI SYLLABLE BBUO;Lo;0;L;;;;;N;;;;; A064;YI SYLLABLE BBUOP;Lo;0;L;;;;;N;;;;; A065;YI SYLLABLE BBOT;Lo;0;L;;;;;N;;;;; A066;YI SYLLABLE BBOX;Lo;0;L;;;;;N;;;;; A067;YI SYLLABLE BBO;Lo;0;L;;;;;N;;;;; A068;YI SYLLABLE BBOP;Lo;0;L;;;;;N;;;;; A069;YI SYLLABLE BBEX;Lo;0;L;;;;;N;;;;; A06A;YI SYLLABLE BBE;Lo;0;L;;;;;N;;;;; A06B;YI SYLLABLE BBEP;Lo;0;L;;;;;N;;;;; A06C;YI SYLLABLE BBUT;Lo;0;L;;;;;N;;;;; A06D;YI SYLLABLE BBUX;Lo;0;L;;;;;N;;;;; A06E;YI SYLLABLE BBU;Lo;0;L;;;;;N;;;;; A06F;YI SYLLABLE BBUP;Lo;0;L;;;;;N;;;;; A070;YI SYLLABLE BBURX;Lo;0;L;;;;;N;;;;; A071;YI SYLLABLE BBUR;Lo;0;L;;;;;N;;;;; A072;YI SYLLABLE BBYT;Lo;0;L;;;;;N;;;;; A073;YI SYLLABLE BBYX;Lo;0;L;;;;;N;;;;; A074;YI SYLLABLE BBY;Lo;0;L;;;;;N;;;;; A075;YI SYLLABLE BBYP;Lo;0;L;;;;;N;;;;; A076;YI SYLLABLE NBIT;Lo;0;L;;;;;N;;;;; A077;YI SYLLABLE NBIX;Lo;0;L;;;;;N;;;;; A078;YI SYLLABLE NBI;Lo;0;L;;;;;N;;;;; A079;YI SYLLABLE NBIP;Lo;0;L;;;;;N;;;;; A07A;YI SYLLABLE NBIEX;Lo;0;L;;;;;N;;;;; A07B;YI SYLLABLE NBIE;Lo;0;L;;;;;N;;;;; A07C;YI SYLLABLE NBIEP;Lo;0;L;;;;;N;;;;; A07D;YI SYLLABLE NBAT;Lo;0;L;;;;;N;;;;; A07E;YI SYLLABLE NBAX;Lo;0;L;;;;;N;;;;; A07F;YI SYLLABLE NBA;Lo;0;L;;;;;N;;;;; A080;YI SYLLABLE NBAP;Lo;0;L;;;;;N;;;;; A081;YI SYLLABLE NBOT;Lo;0;L;;;;;N;;;;; A082;YI SYLLABLE NBOX;Lo;0;L;;;;;N;;;;; A083;YI SYLLABLE NBO;Lo;0;L;;;;;N;;;;; A084;YI SYLLABLE NBOP;Lo;0;L;;;;;N;;;;; A085;YI SYLLABLE NBUT;Lo;0;L;;;;;N;;;;; A086;YI SYLLABLE NBUX;Lo;0;L;;;;;N;;;;; A087;YI SYLLABLE NBU;Lo;0;L;;;;;N;;;;; A088;YI SYLLABLE NBUP;Lo;0;L;;;;;N;;;;; A089;YI SYLLABLE NBURX;Lo;0;L;;;;;N;;;;; A08A;YI SYLLABLE NBUR;Lo;0;L;;;;;N;;;;; A08B;YI SYLLABLE NBYT;Lo;0;L;;;;;N;;;;; A08C;YI SYLLABLE NBYX;Lo;0;L;;;;;N;;;;; A08D;YI SYLLABLE NBY;Lo;0;L;;;;;N;;;;; A08E;YI SYLLABLE NBYP;Lo;0;L;;;;;N;;;;; A08F;YI SYLLABLE NBYRX;Lo;0;L;;;;;N;;;;; A090;YI SYLLABLE NBYR;Lo;0;L;;;;;N;;;;; A091;YI SYLLABLE HMIT;Lo;0;L;;;;;N;;;;; A092;YI SYLLABLE HMIX;Lo;0;L;;;;;N;;;;; A093;YI SYLLABLE HMI;Lo;0;L;;;;;N;;;;; A094;YI SYLLABLE HMIP;Lo;0;L;;;;;N;;;;; A095;YI SYLLABLE HMIEX;Lo;0;L;;;;;N;;;;; A096;YI SYLLABLE HMIE;Lo;0;L;;;;;N;;;;; A097;YI SYLLABLE HMIEP;Lo;0;L;;;;;N;;;;; A098;YI SYLLABLE HMAT;Lo;0;L;;;;;N;;;;; A099;YI SYLLABLE HMAX;Lo;0;L;;;;;N;;;;; A09A;YI SYLLABLE HMA;Lo;0;L;;;;;N;;;;; A09B;YI SYLLABLE HMAP;Lo;0;L;;;;;N;;;;; A09C;YI SYLLABLE HMUOX;Lo;0;L;;;;;N;;;;; A09D;YI SYLLABLE HMUO;Lo;0;L;;;;;N;;;;; A09E;YI SYLLABLE HMUOP;Lo;0;L;;;;;N;;;;; A09F;YI SYLLABLE HMOT;Lo;0;L;;;;;N;;;;; A0A0;YI SYLLABLE HMOX;Lo;0;L;;;;;N;;;;; A0A1;YI SYLLABLE HMO;Lo;0;L;;;;;N;;;;; A0A2;YI SYLLABLE HMOP;Lo;0;L;;;;;N;;;;; A0A3;YI SYLLABLE HMUT;Lo;0;L;;;;;N;;;;; A0A4;YI SYLLABLE HMUX;Lo;0;L;;;;;N;;;;; A0A5;YI SYLLABLE HMU;Lo;0;L;;;;;N;;;;; A0A6;YI SYLLABLE HMUP;Lo;0;L;;;;;N;;;;; A0A7;YI SYLLABLE HMURX;Lo;0;L;;;;;N;;;;; A0A8;YI SYLLABLE HMUR;Lo;0;L;;;;;N;;;;; A0A9;YI SYLLABLE HMYX;Lo;0;L;;;;;N;;;;; A0AA;YI SYLLABLE HMY;Lo;0;L;;;;;N;;;;; A0AB;YI SYLLABLE HMYP;Lo;0;L;;;;;N;;;;; A0AC;YI SYLLABLE HMYRX;Lo;0;L;;;;;N;;;;; A0AD;YI SYLLABLE HMYR;Lo;0;L;;;;;N;;;;; A0AE;YI SYLLABLE MIT;Lo;0;L;;;;;N;;;;; A0AF;YI SYLLABLE MIX;Lo;0;L;;;;;N;;;;; A0B0;YI SYLLABLE MI;Lo;0;L;;;;;N;;;;; A0B1;YI SYLLABLE MIP;Lo;0;L;;;;;N;;;;; A0B2;YI SYLLABLE MIEX;Lo;0;L;;;;;N;;;;; A0B3;YI SYLLABLE MIE;Lo;0;L;;;;;N;;;;; A0B4;YI SYLLABLE MIEP;Lo;0;L;;;;;N;;;;; A0B5;YI SYLLABLE MAT;Lo;0;L;;;;;N;;;;; A0B6;YI SYLLABLE MAX;Lo;0;L;;;;;N;;;;; A0B7;YI SYLLABLE MA;Lo;0;L;;;;;N;;;;; A0B8;YI SYLLABLE MAP;Lo;0;L;;;;;N;;;;; A0B9;YI SYLLABLE MUOT;Lo;0;L;;;;;N;;;;; A0BA;YI SYLLABLE MUOX;Lo;0;L;;;;;N;;;;; A0BB;YI SYLLABLE MUO;Lo;0;L;;;;;N;;;;; A0BC;YI SYLLABLE MUOP;Lo;0;L;;;;;N;;;;; A0BD;YI SYLLABLE MOT;Lo;0;L;;;;;N;;;;; A0BE;YI SYLLABLE MOX;Lo;0;L;;;;;N;;;;; A0BF;YI SYLLABLE MO;Lo;0;L;;;;;N;;;;; A0C0;YI SYLLABLE MOP;Lo;0;L;;;;;N;;;;; A0C1;YI SYLLABLE MEX;Lo;0;L;;;;;N;;;;; A0C2;YI SYLLABLE ME;Lo;0;L;;;;;N;;;;; A0C3;YI SYLLABLE MUT;Lo;0;L;;;;;N;;;;; A0C4;YI SYLLABLE MUX;Lo;0;L;;;;;N;;;;; A0C5;YI SYLLABLE MU;Lo;0;L;;;;;N;;;;; A0C6;YI SYLLABLE MUP;Lo;0;L;;;;;N;;;;; A0C7;YI SYLLABLE MURX;Lo;0;L;;;;;N;;;;; A0C8;YI SYLLABLE MUR;Lo;0;L;;;;;N;;;;; A0C9;YI SYLLABLE MYT;Lo;0;L;;;;;N;;;;; A0CA;YI SYLLABLE MYX;Lo;0;L;;;;;N;;;;; A0CB;YI SYLLABLE MY;Lo;0;L;;;;;N;;;;; A0CC;YI SYLLABLE MYP;Lo;0;L;;;;;N;;;;; A0CD;YI SYLLABLE FIT;Lo;0;L;;;;;N;;;;; A0CE;YI SYLLABLE FIX;Lo;0;L;;;;;N;;;;; A0CF;YI SYLLABLE FI;Lo;0;L;;;;;N;;;;; A0D0;YI SYLLABLE FIP;Lo;0;L;;;;;N;;;;; A0D1;YI SYLLABLE FAT;Lo;0;L;;;;;N;;;;; A0D2;YI SYLLABLE FAX;Lo;0;L;;;;;N;;;;; A0D3;YI SYLLABLE FA;Lo;0;L;;;;;N;;;;; A0D4;YI SYLLABLE FAP;Lo;0;L;;;;;N;;;;; A0D5;YI SYLLABLE FOX;Lo;0;L;;;;;N;;;;; A0D6;YI SYLLABLE FO;Lo;0;L;;;;;N;;;;; A0D7;YI SYLLABLE FOP;Lo;0;L;;;;;N;;;;; A0D8;YI SYLLABLE FUT;Lo;0;L;;;;;N;;;;; A0D9;YI SYLLABLE FUX;Lo;0;L;;;;;N;;;;; A0DA;YI SYLLABLE FU;Lo;0;L;;;;;N;;;;; A0DB;YI SYLLABLE FUP;Lo;0;L;;;;;N;;;;; A0DC;YI SYLLABLE FURX;Lo;0;L;;;;;N;;;;; A0DD;YI SYLLABLE FUR;Lo;0;L;;;;;N;;;;; A0DE;YI SYLLABLE FYT;Lo;0;L;;;;;N;;;;; A0DF;YI SYLLABLE FYX;Lo;0;L;;;;;N;;;;; A0E0;YI SYLLABLE FY;Lo;0;L;;;;;N;;;;; A0E1;YI SYLLABLE FYP;Lo;0;L;;;;;N;;;;; A0E2;YI SYLLABLE VIT;Lo;0;L;;;;;N;;;;; A0E3;YI SYLLABLE VIX;Lo;0;L;;;;;N;;;;; A0E4;YI SYLLABLE VI;Lo;0;L;;;;;N;;;;; A0E5;YI SYLLABLE VIP;Lo;0;L;;;;;N;;;;; A0E6;YI SYLLABLE VIET;Lo;0;L;;;;;N;;;;; A0E7;YI SYLLABLE VIEX;Lo;0;L;;;;;N;;;;; A0E8;YI SYLLABLE VIE;Lo;0;L;;;;;N;;;;; A0E9;YI SYLLABLE VIEP;Lo;0;L;;;;;N;;;;; A0EA;YI SYLLABLE VAT;Lo;0;L;;;;;N;;;;; A0EB;YI SYLLABLE VAX;Lo;0;L;;;;;N;;;;; A0EC;YI SYLLABLE VA;Lo;0;L;;;;;N;;;;; A0ED;YI SYLLABLE VAP;Lo;0;L;;;;;N;;;;; A0EE;YI SYLLABLE VOT;Lo;0;L;;;;;N;;;;; A0EF;YI SYLLABLE VOX;Lo;0;L;;;;;N;;;;; A0F0;YI SYLLABLE VO;Lo;0;L;;;;;N;;;;; A0F1;YI SYLLABLE VOP;Lo;0;L;;;;;N;;;;; A0F2;YI SYLLABLE VEX;Lo;0;L;;;;;N;;;;; A0F3;YI SYLLABLE VEP;Lo;0;L;;;;;N;;;;; A0F4;YI SYLLABLE VUT;Lo;0;L;;;;;N;;;;; A0F5;YI SYLLABLE VUX;Lo;0;L;;;;;N;;;;; A0F6;YI SYLLABLE VU;Lo;0;L;;;;;N;;;;; A0F7;YI SYLLABLE VUP;Lo;0;L;;;;;N;;;;; A0F8;YI SYLLABLE VURX;Lo;0;L;;;;;N;;;;; A0F9;YI SYLLABLE VUR;Lo;0;L;;;;;N;;;;; A0FA;YI SYLLABLE VYT;Lo;0;L;;;;;N;;;;; A0FB;YI SYLLABLE VYX;Lo;0;L;;;;;N;;;;; A0FC;YI SYLLABLE VY;Lo;0;L;;;;;N;;;;; A0FD;YI SYLLABLE VYP;Lo;0;L;;;;;N;;;;; A0FE;YI SYLLABLE VYRX;Lo;0;L;;;;;N;;;;; A0FF;YI SYLLABLE VYR;Lo;0;L;;;;;N;;;;; A100;YI SYLLABLE DIT;Lo;0;L;;;;;N;;;;; A101;YI SYLLABLE DIX;Lo;0;L;;;;;N;;;;; A102;YI SYLLABLE DI;Lo;0;L;;;;;N;;;;; A103;YI SYLLABLE DIP;Lo;0;L;;;;;N;;;;; A104;YI SYLLABLE DIEX;Lo;0;L;;;;;N;;;;; A105;YI SYLLABLE DIE;Lo;0;L;;;;;N;;;;; A106;YI SYLLABLE DIEP;Lo;0;L;;;;;N;;;;; A107;YI SYLLABLE DAT;Lo;0;L;;;;;N;;;;; A108;YI SYLLABLE DAX;Lo;0;L;;;;;N;;;;; A109;YI SYLLABLE DA;Lo;0;L;;;;;N;;;;; A10A;YI SYLLABLE DAP;Lo;0;L;;;;;N;;;;; A10B;YI SYLLABLE DUOX;Lo;0;L;;;;;N;;;;; A10C;YI SYLLABLE DUO;Lo;0;L;;;;;N;;;;; A10D;YI SYLLABLE DOT;Lo;0;L;;;;;N;;;;; A10E;YI SYLLABLE DOX;Lo;0;L;;;;;N;;;;; A10F;YI SYLLABLE DO;Lo;0;L;;;;;N;;;;; A110;YI SYLLABLE DOP;Lo;0;L;;;;;N;;;;; A111;YI SYLLABLE DEX;Lo;0;L;;;;;N;;;;; A112;YI SYLLABLE DE;Lo;0;L;;;;;N;;;;; A113;YI SYLLABLE DEP;Lo;0;L;;;;;N;;;;; A114;YI SYLLABLE DUT;Lo;0;L;;;;;N;;;;; A115;YI SYLLABLE DUX;Lo;0;L;;;;;N;;;;; A116;YI SYLLABLE DU;Lo;0;L;;;;;N;;;;; A117;YI SYLLABLE DUP;Lo;0;L;;;;;N;;;;; A118;YI SYLLABLE DURX;Lo;0;L;;;;;N;;;;; A119;YI SYLLABLE DUR;Lo;0;L;;;;;N;;;;; A11A;YI SYLLABLE TIT;Lo;0;L;;;;;N;;;;; A11B;YI SYLLABLE TIX;Lo;0;L;;;;;N;;;;; A11C;YI SYLLABLE TI;Lo;0;L;;;;;N;;;;; A11D;YI SYLLABLE TIP;Lo;0;L;;;;;N;;;;; A11E;YI SYLLABLE TIEX;Lo;0;L;;;;;N;;;;; A11F;YI SYLLABLE TIE;Lo;0;L;;;;;N;;;;; A120;YI SYLLABLE TIEP;Lo;0;L;;;;;N;;;;; A121;YI SYLLABLE TAT;Lo;0;L;;;;;N;;;;; A122;YI SYLLABLE TAX;Lo;0;L;;;;;N;;;;; A123;YI SYLLABLE TA;Lo;0;L;;;;;N;;;;; A124;YI SYLLABLE TAP;Lo;0;L;;;;;N;;;;; A125;YI SYLLABLE TUOT;Lo;0;L;;;;;N;;;;; A126;YI SYLLABLE TUOX;Lo;0;L;;;;;N;;;;; A127;YI SYLLABLE TUO;Lo;0;L;;;;;N;;;;; A128;YI SYLLABLE TUOP;Lo;0;L;;;;;N;;;;; A129;YI SYLLABLE TOT;Lo;0;L;;;;;N;;;;; A12A;YI SYLLABLE TOX;Lo;0;L;;;;;N;;;;; A12B;YI SYLLABLE TO;Lo;0;L;;;;;N;;;;; A12C;YI SYLLABLE TOP;Lo;0;L;;;;;N;;;;; A12D;YI SYLLABLE TEX;Lo;0;L;;;;;N;;;;; A12E;YI SYLLABLE TE;Lo;0;L;;;;;N;;;;; A12F;YI SYLLABLE TEP;Lo;0;L;;;;;N;;;;; A130;YI SYLLABLE TUT;Lo;0;L;;;;;N;;;;; A131;YI SYLLABLE TUX;Lo;0;L;;;;;N;;;;; A132;YI SYLLABLE TU;Lo;0;L;;;;;N;;;;; A133;YI SYLLABLE TUP;Lo;0;L;;;;;N;;;;; A134;YI SYLLABLE TURX;Lo;0;L;;;;;N;;;;; A135;YI SYLLABLE TUR;Lo;0;L;;;;;N;;;;; A136;YI SYLLABLE DDIT;Lo;0;L;;;;;N;;;;; A137;YI SYLLABLE DDIX;Lo;0;L;;;;;N;;;;; A138;YI SYLLABLE DDI;Lo;0;L;;;;;N;;;;; A139;YI SYLLABLE DDIP;Lo;0;L;;;;;N;;;;; A13A;YI SYLLABLE DDIEX;Lo;0;L;;;;;N;;;;; A13B;YI SYLLABLE DDIE;Lo;0;L;;;;;N;;;;; A13C;YI SYLLABLE DDIEP;Lo;0;L;;;;;N;;;;; A13D;YI SYLLABLE DDAT;Lo;0;L;;;;;N;;;;; A13E;YI SYLLABLE DDAX;Lo;0;L;;;;;N;;;;; A13F;YI SYLLABLE DDA;Lo;0;L;;;;;N;;;;; A140;YI SYLLABLE DDAP;Lo;0;L;;;;;N;;;;; A141;YI SYLLABLE DDUOX;Lo;0;L;;;;;N;;;;; A142;YI SYLLABLE DDUO;Lo;0;L;;;;;N;;;;; A143;YI SYLLABLE DDUOP;Lo;0;L;;;;;N;;;;; A144;YI SYLLABLE DDOT;Lo;0;L;;;;;N;;;;; A145;YI SYLLABLE DDOX;Lo;0;L;;;;;N;;;;; A146;YI SYLLABLE DDO;Lo;0;L;;;;;N;;;;; A147;YI SYLLABLE DDOP;Lo;0;L;;;;;N;;;;; A148;YI SYLLABLE DDEX;Lo;0;L;;;;;N;;;;; A149;YI SYLLABLE DDE;Lo;0;L;;;;;N;;;;; A14A;YI SYLLABLE DDEP;Lo;0;L;;;;;N;;;;; A14B;YI SYLLABLE DDUT;Lo;0;L;;;;;N;;;;; A14C;YI SYLLABLE DDUX;Lo;0;L;;;;;N;;;;; A14D;YI SYLLABLE DDU;Lo;0;L;;;;;N;;;;; A14E;YI SYLLABLE DDUP;Lo;0;L;;;;;N;;;;; A14F;YI SYLLABLE DDURX;Lo;0;L;;;;;N;;;;; A150;YI SYLLABLE DDUR;Lo;0;L;;;;;N;;;;; A151;YI SYLLABLE NDIT;Lo;0;L;;;;;N;;;;; A152;YI SYLLABLE NDIX;Lo;0;L;;;;;N;;;;; A153;YI SYLLABLE NDI;Lo;0;L;;;;;N;;;;; A154;YI SYLLABLE NDIP;Lo;0;L;;;;;N;;;;; A155;YI SYLLABLE NDIEX;Lo;0;L;;;;;N;;;;; A156;YI SYLLABLE NDIE;Lo;0;L;;;;;N;;;;; A157;YI SYLLABLE NDAT;Lo;0;L;;;;;N;;;;; A158;YI SYLLABLE NDAX;Lo;0;L;;;;;N;;;;; A159;YI SYLLABLE NDA;Lo;0;L;;;;;N;;;;; A15A;YI SYLLABLE NDAP;Lo;0;L;;;;;N;;;;; A15B;YI SYLLABLE NDOT;Lo;0;L;;;;;N;;;;; A15C;YI SYLLABLE NDOX;Lo;0;L;;;;;N;;;;; A15D;YI SYLLABLE NDO;Lo;0;L;;;;;N;;;;; A15E;YI SYLLABLE NDOP;Lo;0;L;;;;;N;;;;; A15F;YI SYLLABLE NDEX;Lo;0;L;;;;;N;;;;; A160;YI SYLLABLE NDE;Lo;0;L;;;;;N;;;;; A161;YI SYLLABLE NDEP;Lo;0;L;;;;;N;;;;; A162;YI SYLLABLE NDUT;Lo;0;L;;;;;N;;;;; A163;YI SYLLABLE NDUX;Lo;0;L;;;;;N;;;;; A164;YI SYLLABLE NDU;Lo;0;L;;;;;N;;;;; A165;YI SYLLABLE NDUP;Lo;0;L;;;;;N;;;;; A166;YI SYLLABLE NDURX;Lo;0;L;;;;;N;;;;; A167;YI SYLLABLE NDUR;Lo;0;L;;;;;N;;;;; A168;YI SYLLABLE HNIT;Lo;0;L;;;;;N;;;;; A169;YI SYLLABLE HNIX;Lo;0;L;;;;;N;;;;; A16A;YI SYLLABLE HNI;Lo;0;L;;;;;N;;;;; A16B;YI SYLLABLE HNIP;Lo;0;L;;;;;N;;;;; A16C;YI SYLLABLE HNIET;Lo;0;L;;;;;N;;;;; A16D;YI SYLLABLE HNIEX;Lo;0;L;;;;;N;;;;; A16E;YI SYLLABLE HNIE;Lo;0;L;;;;;N;;;;; A16F;YI SYLLABLE HNIEP;Lo;0;L;;;;;N;;;;; A170;YI SYLLABLE HNAT;Lo;0;L;;;;;N;;;;; A171;YI SYLLABLE HNAX;Lo;0;L;;;;;N;;;;; A172;YI SYLLABLE HNA;Lo;0;L;;;;;N;;;;; A173;YI SYLLABLE HNAP;Lo;0;L;;;;;N;;;;; A174;YI SYLLABLE HNUOX;Lo;0;L;;;;;N;;;;; A175;YI SYLLABLE HNUO;Lo;0;L;;;;;N;;;;; A176;YI SYLLABLE HNOT;Lo;0;L;;;;;N;;;;; A177;YI SYLLABLE HNOX;Lo;0;L;;;;;N;;;;; A178;YI SYLLABLE HNOP;Lo;0;L;;;;;N;;;;; A179;YI SYLLABLE HNEX;Lo;0;L;;;;;N;;;;; A17A;YI SYLLABLE HNE;Lo;0;L;;;;;N;;;;; A17B;YI SYLLABLE HNEP;Lo;0;L;;;;;N;;;;; A17C;YI SYLLABLE HNUT;Lo;0;L;;;;;N;;;;; A17D;YI SYLLABLE NIT;Lo;0;L;;;;;N;;;;; A17E;YI SYLLABLE NIX;Lo;0;L;;;;;N;;;;; A17F;YI SYLLABLE NI;Lo;0;L;;;;;N;;;;; A180;YI SYLLABLE NIP;Lo;0;L;;;;;N;;;;; A181;YI SYLLABLE NIEX;Lo;0;L;;;;;N;;;;; A182;YI SYLLABLE NIE;Lo;0;L;;;;;N;;;;; A183;YI SYLLABLE NIEP;Lo;0;L;;;;;N;;;;; A184;YI SYLLABLE NAX;Lo;0;L;;;;;N;;;;; A185;YI SYLLABLE NA;Lo;0;L;;;;;N;;;;; A186;YI SYLLABLE NAP;Lo;0;L;;;;;N;;;;; A187;YI SYLLABLE NUOX;Lo;0;L;;;;;N;;;;; A188;YI SYLLABLE NUO;Lo;0;L;;;;;N;;;;; A189;YI SYLLABLE NUOP;Lo;0;L;;;;;N;;;;; A18A;YI SYLLABLE NOT;Lo;0;L;;;;;N;;;;; A18B;YI SYLLABLE NOX;Lo;0;L;;;;;N;;;;; A18C;YI SYLLABLE NO;Lo;0;L;;;;;N;;;;; A18D;YI SYLLABLE NOP;Lo;0;L;;;;;N;;;;; A18E;YI SYLLABLE NEX;Lo;0;L;;;;;N;;;;; A18F;YI SYLLABLE NE;Lo;0;L;;;;;N;;;;; A190;YI SYLLABLE NEP;Lo;0;L;;;;;N;;;;; A191;YI SYLLABLE NUT;Lo;0;L;;;;;N;;;;; A192;YI SYLLABLE NUX;Lo;0;L;;;;;N;;;;; A193;YI SYLLABLE NU;Lo;0;L;;;;;N;;;;; A194;YI SYLLABLE NUP;Lo;0;L;;;;;N;;;;; A195;YI SYLLABLE NURX;Lo;0;L;;;;;N;;;;; A196;YI SYLLABLE NUR;Lo;0;L;;;;;N;;;;; A197;YI SYLLABLE HLIT;Lo;0;L;;;;;N;;;;; A198;YI SYLLABLE HLIX;Lo;0;L;;;;;N;;;;; A199;YI SYLLABLE HLI;Lo;0;L;;;;;N;;;;; A19A;YI SYLLABLE HLIP;Lo;0;L;;;;;N;;;;; A19B;YI SYLLABLE HLIEX;Lo;0;L;;;;;N;;;;; A19C;YI SYLLABLE HLIE;Lo;0;L;;;;;N;;;;; A19D;YI SYLLABLE HLIEP;Lo;0;L;;;;;N;;;;; A19E;YI SYLLABLE HLAT;Lo;0;L;;;;;N;;;;; A19F;YI SYLLABLE HLAX;Lo;0;L;;;;;N;;;;; A1A0;YI SYLLABLE HLA;Lo;0;L;;;;;N;;;;; A1A1;YI SYLLABLE HLAP;Lo;0;L;;;;;N;;;;; A1A2;YI SYLLABLE HLUOX;Lo;0;L;;;;;N;;;;; A1A3;YI SYLLABLE HLUO;Lo;0;L;;;;;N;;;;; A1A4;YI SYLLABLE HLUOP;Lo;0;L;;;;;N;;;;; A1A5;YI SYLLABLE HLOX;Lo;0;L;;;;;N;;;;; A1A6;YI SYLLABLE HLO;Lo;0;L;;;;;N;;;;; A1A7;YI SYLLABLE HLOP;Lo;0;L;;;;;N;;;;; A1A8;YI SYLLABLE HLEX;Lo;0;L;;;;;N;;;;; A1A9;YI SYLLABLE HLE;Lo;0;L;;;;;N;;;;; A1AA;YI SYLLABLE HLEP;Lo;0;L;;;;;N;;;;; A1AB;YI SYLLABLE HLUT;Lo;0;L;;;;;N;;;;; A1AC;YI SYLLABLE HLUX;Lo;0;L;;;;;N;;;;; A1AD;YI SYLLABLE HLU;Lo;0;L;;;;;N;;;;; A1AE;YI SYLLABLE HLUP;Lo;0;L;;;;;N;;;;; A1AF;YI SYLLABLE HLURX;Lo;0;L;;;;;N;;;;; A1B0;YI SYLLABLE HLUR;Lo;0;L;;;;;N;;;;; A1B1;YI SYLLABLE HLYT;Lo;0;L;;;;;N;;;;; A1B2;YI SYLLABLE HLYX;Lo;0;L;;;;;N;;;;; A1B3;YI SYLLABLE HLY;Lo;0;L;;;;;N;;;;; A1B4;YI SYLLABLE HLYP;Lo;0;L;;;;;N;;;;; A1B5;YI SYLLABLE HLYRX;Lo;0;L;;;;;N;;;;; A1B6;YI SYLLABLE HLYR;Lo;0;L;;;;;N;;;;; A1B7;YI SYLLABLE LIT;Lo;0;L;;;;;N;;;;; A1B8;YI SYLLABLE LIX;Lo;0;L;;;;;N;;;;; A1B9;YI SYLLABLE LI;Lo;0;L;;;;;N;;;;; A1BA;YI SYLLABLE LIP;Lo;0;L;;;;;N;;;;; A1BB;YI SYLLABLE LIET;Lo;0;L;;;;;N;;;;; A1BC;YI SYLLABLE LIEX;Lo;0;L;;;;;N;;;;; A1BD;YI SYLLABLE LIE;Lo;0;L;;;;;N;;;;; A1BE;YI SYLLABLE LIEP;Lo;0;L;;;;;N;;;;; A1BF;YI SYLLABLE LAT;Lo;0;L;;;;;N;;;;; A1C0;YI SYLLABLE LAX;Lo;0;L;;;;;N;;;;; A1C1;YI SYLLABLE LA;Lo;0;L;;;;;N;;;;; A1C2;YI SYLLABLE LAP;Lo;0;L;;;;;N;;;;; A1C3;YI SYLLABLE LUOT;Lo;0;L;;;;;N;;;;; A1C4;YI SYLLABLE LUOX;Lo;0;L;;;;;N;;;;; A1C5;YI SYLLABLE LUO;Lo;0;L;;;;;N;;;;; A1C6;YI SYLLABLE LUOP;Lo;0;L;;;;;N;;;;; A1C7;YI SYLLABLE LOT;Lo;0;L;;;;;N;;;;; A1C8;YI SYLLABLE LOX;Lo;0;L;;;;;N;;;;; A1C9;YI SYLLABLE LO;Lo;0;L;;;;;N;;;;; A1CA;YI SYLLABLE LOP;Lo;0;L;;;;;N;;;;; A1CB;YI SYLLABLE LEX;Lo;0;L;;;;;N;;;;; A1CC;YI SYLLABLE LE;Lo;0;L;;;;;N;;;;; A1CD;YI SYLLABLE LEP;Lo;0;L;;;;;N;;;;; A1CE;YI SYLLABLE LUT;Lo;0;L;;;;;N;;;;; A1CF;YI SYLLABLE LUX;Lo;0;L;;;;;N;;;;; A1D0;YI SYLLABLE LU;Lo;0;L;;;;;N;;;;; A1D1;YI SYLLABLE LUP;Lo;0;L;;;;;N;;;;; A1D2;YI SYLLABLE LURX;Lo;0;L;;;;;N;;;;; A1D3;YI SYLLABLE LUR;Lo;0;L;;;;;N;;;;; A1D4;YI SYLLABLE LYT;Lo;0;L;;;;;N;;;;; A1D5;YI SYLLABLE LYX;Lo;0;L;;;;;N;;;;; A1D6;YI SYLLABLE LY;Lo;0;L;;;;;N;;;;; A1D7;YI SYLLABLE LYP;Lo;0;L;;;;;N;;;;; A1D8;YI SYLLABLE LYRX;Lo;0;L;;;;;N;;;;; A1D9;YI SYLLABLE LYR;Lo;0;L;;;;;N;;;;; A1DA;YI SYLLABLE GIT;Lo;0;L;;;;;N;;;;; A1DB;YI SYLLABLE GIX;Lo;0;L;;;;;N;;;;; A1DC;YI SYLLABLE GI;Lo;0;L;;;;;N;;;;; A1DD;YI SYLLABLE GIP;Lo;0;L;;;;;N;;;;; A1DE;YI SYLLABLE GIET;Lo;0;L;;;;;N;;;;; A1DF;YI SYLLABLE GIEX;Lo;0;L;;;;;N;;;;; A1E0;YI SYLLABLE GIE;Lo;0;L;;;;;N;;;;; A1E1;YI SYLLABLE GIEP;Lo;0;L;;;;;N;;;;; A1E2;YI SYLLABLE GAT;Lo;0;L;;;;;N;;;;; A1E3;YI SYLLABLE GAX;Lo;0;L;;;;;N;;;;; A1E4;YI SYLLABLE GA;Lo;0;L;;;;;N;;;;; A1E5;YI SYLLABLE GAP;Lo;0;L;;;;;N;;;;; A1E6;YI SYLLABLE GUOT;Lo;0;L;;;;;N;;;;; A1E7;YI SYLLABLE GUOX;Lo;0;L;;;;;N;;;;; A1E8;YI SYLLABLE GUO;Lo;0;L;;;;;N;;;;; A1E9;YI SYLLABLE GUOP;Lo;0;L;;;;;N;;;;; A1EA;YI SYLLABLE GOT;Lo;0;L;;;;;N;;;;; A1EB;YI SYLLABLE GOX;Lo;0;L;;;;;N;;;;; A1EC;YI SYLLABLE GO;Lo;0;L;;;;;N;;;;; A1ED;YI SYLLABLE GOP;Lo;0;L;;;;;N;;;;; A1EE;YI SYLLABLE GET;Lo;0;L;;;;;N;;;;; A1EF;YI SYLLABLE GEX;Lo;0;L;;;;;N;;;;; A1F0;YI SYLLABLE GE;Lo;0;L;;;;;N;;;;; A1F1;YI SYLLABLE GEP;Lo;0;L;;;;;N;;;;; A1F2;YI SYLLABLE GUT;Lo;0;L;;;;;N;;;;; A1F3;YI SYLLABLE GUX;Lo;0;L;;;;;N;;;;; A1F4;YI SYLLABLE GU;Lo;0;L;;;;;N;;;;; A1F5;YI SYLLABLE GUP;Lo;0;L;;;;;N;;;;; A1F6;YI SYLLABLE GURX;Lo;0;L;;;;;N;;;;; A1F7;YI SYLLABLE GUR;Lo;0;L;;;;;N;;;;; A1F8;YI SYLLABLE KIT;Lo;0;L;;;;;N;;;;; A1F9;YI SYLLABLE KIX;Lo;0;L;;;;;N;;;;; A1FA;YI SYLLABLE KI;Lo;0;L;;;;;N;;;;; A1FB;YI SYLLABLE KIP;Lo;0;L;;;;;N;;;;; A1FC;YI SYLLABLE KIEX;Lo;0;L;;;;;N;;;;; A1FD;YI SYLLABLE KIE;Lo;0;L;;;;;N;;;;; A1FE;YI SYLLABLE KIEP;Lo;0;L;;;;;N;;;;; A1FF;YI SYLLABLE KAT;Lo;0;L;;;;;N;;;;; A200;YI SYLLABLE KAX;Lo;0;L;;;;;N;;;;; A201;YI SYLLABLE KA;Lo;0;L;;;;;N;;;;; A202;YI SYLLABLE KAP;Lo;0;L;;;;;N;;;;; A203;YI SYLLABLE KUOX;Lo;0;L;;;;;N;;;;; A204;YI SYLLABLE KUO;Lo;0;L;;;;;N;;;;; A205;YI SYLLABLE KUOP;Lo;0;L;;;;;N;;;;; A206;YI SYLLABLE KOT;Lo;0;L;;;;;N;;;;; A207;YI SYLLABLE KOX;Lo;0;L;;;;;N;;;;; A208;YI SYLLABLE KO;Lo;0;L;;;;;N;;;;; A209;YI SYLLABLE KOP;Lo;0;L;;;;;N;;;;; A20A;YI SYLLABLE KET;Lo;0;L;;;;;N;;;;; A20B;YI SYLLABLE KEX;Lo;0;L;;;;;N;;;;; A20C;YI SYLLABLE KE;Lo;0;L;;;;;N;;;;; A20D;YI SYLLABLE KEP;Lo;0;L;;;;;N;;;;; A20E;YI SYLLABLE KUT;Lo;0;L;;;;;N;;;;; A20F;YI SYLLABLE KUX;Lo;0;L;;;;;N;;;;; A210;YI SYLLABLE KU;Lo;0;L;;;;;N;;;;; A211;YI SYLLABLE KUP;Lo;0;L;;;;;N;;;;; A212;YI SYLLABLE KURX;Lo;0;L;;;;;N;;;;; A213;YI SYLLABLE KUR;Lo;0;L;;;;;N;;;;; A214;YI SYLLABLE GGIT;Lo;0;L;;;;;N;;;;; A215;YI SYLLABLE GGIX;Lo;0;L;;;;;N;;;;; A216;YI SYLLABLE GGI;Lo;0;L;;;;;N;;;;; A217;YI SYLLABLE GGIEX;Lo;0;L;;;;;N;;;;; A218;YI SYLLABLE GGIE;Lo;0;L;;;;;N;;;;; A219;YI SYLLABLE GGIEP;Lo;0;L;;;;;N;;;;; A21A;YI SYLLABLE GGAT;Lo;0;L;;;;;N;;;;; A21B;YI SYLLABLE GGAX;Lo;0;L;;;;;N;;;;; A21C;YI SYLLABLE GGA;Lo;0;L;;;;;N;;;;; A21D;YI SYLLABLE GGAP;Lo;0;L;;;;;N;;;;; A21E;YI SYLLABLE GGUOT;Lo;0;L;;;;;N;;;;; A21F;YI SYLLABLE GGUOX;Lo;0;L;;;;;N;;;;; A220;YI SYLLABLE GGUO;Lo;0;L;;;;;N;;;;; A221;YI SYLLABLE GGUOP;Lo;0;L;;;;;N;;;;; A222;YI SYLLABLE GGOT;Lo;0;L;;;;;N;;;;; A223;YI SYLLABLE GGOX;Lo;0;L;;;;;N;;;;; A224;YI SYLLABLE GGO;Lo;0;L;;;;;N;;;;; A225;YI SYLLABLE GGOP;Lo;0;L;;;;;N;;;;; A226;YI SYLLABLE GGET;Lo;0;L;;;;;N;;;;; A227;YI SYLLABLE GGEX;Lo;0;L;;;;;N;;;;; A228;YI SYLLABLE GGE;Lo;0;L;;;;;N;;;;; A229;YI SYLLABLE GGEP;Lo;0;L;;;;;N;;;;; A22A;YI SYLLABLE GGUT;Lo;0;L;;;;;N;;;;; A22B;YI SYLLABLE GGUX;Lo;0;L;;;;;N;;;;; A22C;YI SYLLABLE GGU;Lo;0;L;;;;;N;;;;; A22D;YI SYLLABLE GGUP;Lo;0;L;;;;;N;;;;; A22E;YI SYLLABLE GGURX;Lo;0;L;;;;;N;;;;; A22F;YI SYLLABLE GGUR;Lo;0;L;;;;;N;;;;; A230;YI SYLLABLE MGIEX;Lo;0;L;;;;;N;;;;; A231;YI SYLLABLE MGIE;Lo;0;L;;;;;N;;;;; A232;YI SYLLABLE MGAT;Lo;0;L;;;;;N;;;;; A233;YI SYLLABLE MGAX;Lo;0;L;;;;;N;;;;; A234;YI SYLLABLE MGA;Lo;0;L;;;;;N;;;;; A235;YI SYLLABLE MGAP;Lo;0;L;;;;;N;;;;; A236;YI SYLLABLE MGUOX;Lo;0;L;;;;;N;;;;; A237;YI SYLLABLE MGUO;Lo;0;L;;;;;N;;;;; A238;YI SYLLABLE MGUOP;Lo;0;L;;;;;N;;;;; A239;YI SYLLABLE MGOT;Lo;0;L;;;;;N;;;;; A23A;YI SYLLABLE MGOX;Lo;0;L;;;;;N;;;;; A23B;YI SYLLABLE MGO;Lo;0;L;;;;;N;;;;; A23C;YI SYLLABLE MGOP;Lo;0;L;;;;;N;;;;; A23D;YI SYLLABLE MGEX;Lo;0;L;;;;;N;;;;; A23E;YI SYLLABLE MGE;Lo;0;L;;;;;N;;;;; A23F;YI SYLLABLE MGEP;Lo;0;L;;;;;N;;;;; A240;YI SYLLABLE MGUT;Lo;0;L;;;;;N;;;;; A241;YI SYLLABLE MGUX;Lo;0;L;;;;;N;;;;; A242;YI SYLLABLE MGU;Lo;0;L;;;;;N;;;;; A243;YI SYLLABLE MGUP;Lo;0;L;;;;;N;;;;; A244;YI SYLLABLE MGURX;Lo;0;L;;;;;N;;;;; A245;YI SYLLABLE MGUR;Lo;0;L;;;;;N;;;;; A246;YI SYLLABLE HXIT;Lo;0;L;;;;;N;;;;; A247;YI SYLLABLE HXIX;Lo;0;L;;;;;N;;;;; A248;YI SYLLABLE HXI;Lo;0;L;;;;;N;;;;; A249;YI SYLLABLE HXIP;Lo;0;L;;;;;N;;;;; A24A;YI SYLLABLE HXIET;Lo;0;L;;;;;N;;;;; A24B;YI SYLLABLE HXIEX;Lo;0;L;;;;;N;;;;; A24C;YI SYLLABLE HXIE;Lo;0;L;;;;;N;;;;; A24D;YI SYLLABLE HXIEP;Lo;0;L;;;;;N;;;;; A24E;YI SYLLABLE HXAT;Lo;0;L;;;;;N;;;;; A24F;YI SYLLABLE HXAX;Lo;0;L;;;;;N;;;;; A250;YI SYLLABLE HXA;Lo;0;L;;;;;N;;;;; A251;YI SYLLABLE HXAP;Lo;0;L;;;;;N;;;;; A252;YI SYLLABLE HXUOT;Lo;0;L;;;;;N;;;;; A253;YI SYLLABLE HXUOX;Lo;0;L;;;;;N;;;;; A254;YI SYLLABLE HXUO;Lo;0;L;;;;;N;;;;; A255;YI SYLLABLE HXUOP;Lo;0;L;;;;;N;;;;; A256;YI SYLLABLE HXOT;Lo;0;L;;;;;N;;;;; A257;YI SYLLABLE HXOX;Lo;0;L;;;;;N;;;;; A258;YI SYLLABLE HXO;Lo;0;L;;;;;N;;;;; A259;YI SYLLABLE HXOP;Lo;0;L;;;;;N;;;;; A25A;YI SYLLABLE HXEX;Lo;0;L;;;;;N;;;;; A25B;YI SYLLABLE HXE;Lo;0;L;;;;;N;;;;; A25C;YI SYLLABLE HXEP;Lo;0;L;;;;;N;;;;; A25D;YI SYLLABLE NGIEX;Lo;0;L;;;;;N;;;;; A25E;YI SYLLABLE NGIE;Lo;0;L;;;;;N;;;;; A25F;YI SYLLABLE NGIEP;Lo;0;L;;;;;N;;;;; A260;YI SYLLABLE NGAT;Lo;0;L;;;;;N;;;;; A261;YI SYLLABLE NGAX;Lo;0;L;;;;;N;;;;; A262;YI SYLLABLE NGA;Lo;0;L;;;;;N;;;;; A263;YI SYLLABLE NGAP;Lo;0;L;;;;;N;;;;; A264;YI SYLLABLE NGUOT;Lo;0;L;;;;;N;;;;; A265;YI SYLLABLE NGUOX;Lo;0;L;;;;;N;;;;; A266;YI SYLLABLE NGUO;Lo;0;L;;;;;N;;;;; A267;YI SYLLABLE NGOT;Lo;0;L;;;;;N;;;;; A268;YI SYLLABLE NGOX;Lo;0;L;;;;;N;;;;; A269;YI SYLLABLE NGO;Lo;0;L;;;;;N;;;;; A26A;YI SYLLABLE NGOP;Lo;0;L;;;;;N;;;;; A26B;YI SYLLABLE NGEX;Lo;0;L;;;;;N;;;;; A26C;YI SYLLABLE NGE;Lo;0;L;;;;;N;;;;; A26D;YI SYLLABLE NGEP;Lo;0;L;;;;;N;;;;; A26E;YI SYLLABLE HIT;Lo;0;L;;;;;N;;;;; A26F;YI SYLLABLE HIEX;Lo;0;L;;;;;N;;;;; A270;YI SYLLABLE HIE;Lo;0;L;;;;;N;;;;; A271;YI SYLLABLE HAT;Lo;0;L;;;;;N;;;;; A272;YI SYLLABLE HAX;Lo;0;L;;;;;N;;;;; A273;YI SYLLABLE HA;Lo;0;L;;;;;N;;;;; A274;YI SYLLABLE HAP;Lo;0;L;;;;;N;;;;; A275;YI SYLLABLE HUOT;Lo;0;L;;;;;N;;;;; A276;YI SYLLABLE HUOX;Lo;0;L;;;;;N;;;;; A277;YI SYLLABLE HUO;Lo;0;L;;;;;N;;;;; A278;YI SYLLABLE HUOP;Lo;0;L;;;;;N;;;;; A279;YI SYLLABLE HOT;Lo;0;L;;;;;N;;;;; A27A;YI SYLLABLE HOX;Lo;0;L;;;;;N;;;;; A27B;YI SYLLABLE HO;Lo;0;L;;;;;N;;;;; A27C;YI SYLLABLE HOP;Lo;0;L;;;;;N;;;;; A27D;YI SYLLABLE HEX;Lo;0;L;;;;;N;;;;; A27E;YI SYLLABLE HE;Lo;0;L;;;;;N;;;;; A27F;YI SYLLABLE HEP;Lo;0;L;;;;;N;;;;; A280;YI SYLLABLE WAT;Lo;0;L;;;;;N;;;;; A281;YI SYLLABLE WAX;Lo;0;L;;;;;N;;;;; A282;YI SYLLABLE WA;Lo;0;L;;;;;N;;;;; A283;YI SYLLABLE WAP;Lo;0;L;;;;;N;;;;; A284;YI SYLLABLE WUOX;Lo;0;L;;;;;N;;;;; A285;YI SYLLABLE WUO;Lo;0;L;;;;;N;;;;; A286;YI SYLLABLE WUOP;Lo;0;L;;;;;N;;;;; A287;YI SYLLABLE WOX;Lo;0;L;;;;;N;;;;; A288;YI SYLLABLE WO;Lo;0;L;;;;;N;;;;; A289;YI SYLLABLE WOP;Lo;0;L;;;;;N;;;;; A28A;YI SYLLABLE WEX;Lo;0;L;;;;;N;;;;; A28B;YI SYLLABLE WE;Lo;0;L;;;;;N;;;;; A28C;YI SYLLABLE WEP;Lo;0;L;;;;;N;;;;; A28D;YI SYLLABLE ZIT;Lo;0;L;;;;;N;;;;; A28E;YI SYLLABLE ZIX;Lo;0;L;;;;;N;;;;; A28F;YI SYLLABLE ZI;Lo;0;L;;;;;N;;;;; A290;YI SYLLABLE ZIP;Lo;0;L;;;;;N;;;;; A291;YI SYLLABLE ZIEX;Lo;0;L;;;;;N;;;;; A292;YI SYLLABLE ZIE;Lo;0;L;;;;;N;;;;; A293;YI SYLLABLE ZIEP;Lo;0;L;;;;;N;;;;; A294;YI SYLLABLE ZAT;Lo;0;L;;;;;N;;;;; A295;YI SYLLABLE ZAX;Lo;0;L;;;;;N;;;;; A296;YI SYLLABLE ZA;Lo;0;L;;;;;N;;;;; A297;YI SYLLABLE ZAP;Lo;0;L;;;;;N;;;;; A298;YI SYLLABLE ZUOX;Lo;0;L;;;;;N;;;;; A299;YI SYLLABLE ZUO;Lo;0;L;;;;;N;;;;; A29A;YI SYLLABLE ZUOP;Lo;0;L;;;;;N;;;;; A29B;YI SYLLABLE ZOT;Lo;0;L;;;;;N;;;;; A29C;YI SYLLABLE ZOX;Lo;0;L;;;;;N;;;;; A29D;YI SYLLABLE ZO;Lo;0;L;;;;;N;;;;; A29E;YI SYLLABLE ZOP;Lo;0;L;;;;;N;;;;; A29F;YI SYLLABLE ZEX;Lo;0;L;;;;;N;;;;; A2A0;YI SYLLABLE ZE;Lo;0;L;;;;;N;;;;; A2A1;YI SYLLABLE ZEP;Lo;0;L;;;;;N;;;;; A2A2;YI SYLLABLE ZUT;Lo;0;L;;;;;N;;;;; A2A3;YI SYLLABLE ZUX;Lo;0;L;;;;;N;;;;; A2A4;YI SYLLABLE ZU;Lo;0;L;;;;;N;;;;; A2A5;YI SYLLABLE ZUP;Lo;0;L;;;;;N;;;;; A2A6;YI SYLLABLE ZURX;Lo;0;L;;;;;N;;;;; A2A7;YI SYLLABLE ZUR;Lo;0;L;;;;;N;;;;; A2A8;YI SYLLABLE ZYT;Lo;0;L;;;;;N;;;;; A2A9;YI SYLLABLE ZYX;Lo;0;L;;;;;N;;;;; A2AA;YI SYLLABLE ZY;Lo;0;L;;;;;N;;;;; A2AB;YI SYLLABLE ZYP;Lo;0;L;;;;;N;;;;; A2AC;YI SYLLABLE ZYRX;Lo;0;L;;;;;N;;;;; A2AD;YI SYLLABLE ZYR;Lo;0;L;;;;;N;;;;; A2AE;YI SYLLABLE CIT;Lo;0;L;;;;;N;;;;; A2AF;YI SYLLABLE CIX;Lo;0;L;;;;;N;;;;; A2B0;YI SYLLABLE CI;Lo;0;L;;;;;N;;;;; A2B1;YI SYLLABLE CIP;Lo;0;L;;;;;N;;;;; A2B2;YI SYLLABLE CIET;Lo;0;L;;;;;N;;;;; A2B3;YI SYLLABLE CIEX;Lo;0;L;;;;;N;;;;; A2B4;YI SYLLABLE CIE;Lo;0;L;;;;;N;;;;; A2B5;YI SYLLABLE CIEP;Lo;0;L;;;;;N;;;;; A2B6;YI SYLLABLE CAT;Lo;0;L;;;;;N;;;;; A2B7;YI SYLLABLE CAX;Lo;0;L;;;;;N;;;;; A2B8;YI SYLLABLE CA;Lo;0;L;;;;;N;;;;; A2B9;YI SYLLABLE CAP;Lo;0;L;;;;;N;;;;; A2BA;YI SYLLABLE CUOX;Lo;0;L;;;;;N;;;;; A2BB;YI SYLLABLE CUO;Lo;0;L;;;;;N;;;;; A2BC;YI SYLLABLE CUOP;Lo;0;L;;;;;N;;;;; A2BD;YI SYLLABLE COT;Lo;0;L;;;;;N;;;;; A2BE;YI SYLLABLE COX;Lo;0;L;;;;;N;;;;; A2BF;YI SYLLABLE CO;Lo;0;L;;;;;N;;;;; A2C0;YI SYLLABLE COP;Lo;0;L;;;;;N;;;;; A2C1;YI SYLLABLE CEX;Lo;0;L;;;;;N;;;;; A2C2;YI SYLLABLE CE;Lo;0;L;;;;;N;;;;; A2C3;YI SYLLABLE CEP;Lo;0;L;;;;;N;;;;; A2C4;YI SYLLABLE CUT;Lo;0;L;;;;;N;;;;; A2C5;YI SYLLABLE CUX;Lo;0;L;;;;;N;;;;; A2C6;YI SYLLABLE CU;Lo;0;L;;;;;N;;;;; A2C7;YI SYLLABLE CUP;Lo;0;L;;;;;N;;;;; A2C8;YI SYLLABLE CURX;Lo;0;L;;;;;N;;;;; A2C9;YI SYLLABLE CUR;Lo;0;L;;;;;N;;;;; A2CA;YI SYLLABLE CYT;Lo;0;L;;;;;N;;;;; A2CB;YI SYLLABLE CYX;Lo;0;L;;;;;N;;;;; A2CC;YI SYLLABLE CY;Lo;0;L;;;;;N;;;;; A2CD;YI SYLLABLE CYP;Lo;0;L;;;;;N;;;;; A2CE;YI SYLLABLE CYRX;Lo;0;L;;;;;N;;;;; A2CF;YI SYLLABLE CYR;Lo;0;L;;;;;N;;;;; A2D0;YI SYLLABLE ZZIT;Lo;0;L;;;;;N;;;;; A2D1;YI SYLLABLE ZZIX;Lo;0;L;;;;;N;;;;; A2D2;YI SYLLABLE ZZI;Lo;0;L;;;;;N;;;;; A2D3;YI SYLLABLE ZZIP;Lo;0;L;;;;;N;;;;; A2D4;YI SYLLABLE ZZIET;Lo;0;L;;;;;N;;;;; A2D5;YI SYLLABLE ZZIEX;Lo;0;L;;;;;N;;;;; A2D6;YI SYLLABLE ZZIE;Lo;0;L;;;;;N;;;;; A2D7;YI SYLLABLE ZZIEP;Lo;0;L;;;;;N;;;;; A2D8;YI SYLLABLE ZZAT;Lo;0;L;;;;;N;;;;; A2D9;YI SYLLABLE ZZAX;Lo;0;L;;;;;N;;;;; A2DA;YI SYLLABLE ZZA;Lo;0;L;;;;;N;;;;; A2DB;YI SYLLABLE ZZAP;Lo;0;L;;;;;N;;;;; A2DC;YI SYLLABLE ZZOX;Lo;0;L;;;;;N;;;;; A2DD;YI SYLLABLE ZZO;Lo;0;L;;;;;N;;;;; A2DE;YI SYLLABLE ZZOP;Lo;0;L;;;;;N;;;;; A2DF;YI SYLLABLE ZZEX;Lo;0;L;;;;;N;;;;; A2E0;YI SYLLABLE ZZE;Lo;0;L;;;;;N;;;;; A2E1;YI SYLLABLE ZZEP;Lo;0;L;;;;;N;;;;; A2E2;YI SYLLABLE ZZUX;Lo;0;L;;;;;N;;;;; A2E3;YI SYLLABLE ZZU;Lo;0;L;;;;;N;;;;; A2E4;YI SYLLABLE ZZUP;Lo;0;L;;;;;N;;;;; A2E5;YI SYLLABLE ZZURX;Lo;0;L;;;;;N;;;;; A2E6;YI SYLLABLE ZZUR;Lo;0;L;;;;;N;;;;; A2E7;YI SYLLABLE ZZYT;Lo;0;L;;;;;N;;;;; A2E8;YI SYLLABLE ZZYX;Lo;0;L;;;;;N;;;;; A2E9;YI SYLLABLE ZZY;Lo;0;L;;;;;N;;;;; A2EA;YI SYLLABLE ZZYP;Lo;0;L;;;;;N;;;;; A2EB;YI SYLLABLE ZZYRX;Lo;0;L;;;;;N;;;;; A2EC;YI SYLLABLE ZZYR;Lo;0;L;;;;;N;;;;; A2ED;YI SYLLABLE NZIT;Lo;0;L;;;;;N;;;;; A2EE;YI SYLLABLE NZIX;Lo;0;L;;;;;N;;;;; A2EF;YI SYLLABLE NZI;Lo;0;L;;;;;N;;;;; A2F0;YI SYLLABLE NZIP;Lo;0;L;;;;;N;;;;; A2F1;YI SYLLABLE NZIEX;Lo;0;L;;;;;N;;;;; A2F2;YI SYLLABLE NZIE;Lo;0;L;;;;;N;;;;; A2F3;YI SYLLABLE NZIEP;Lo;0;L;;;;;N;;;;; A2F4;YI SYLLABLE NZAT;Lo;0;L;;;;;N;;;;; A2F5;YI SYLLABLE NZAX;Lo;0;L;;;;;N;;;;; A2F6;YI SYLLABLE NZA;Lo;0;L;;;;;N;;;;; A2F7;YI SYLLABLE NZAP;Lo;0;L;;;;;N;;;;; A2F8;YI SYLLABLE NZUOX;Lo;0;L;;;;;N;;;;; A2F9;YI SYLLABLE NZUO;Lo;0;L;;;;;N;;;;; A2FA;YI SYLLABLE NZOX;Lo;0;L;;;;;N;;;;; A2FB;YI SYLLABLE NZOP;Lo;0;L;;;;;N;;;;; A2FC;YI SYLLABLE NZEX;Lo;0;L;;;;;N;;;;; A2FD;YI SYLLABLE NZE;Lo;0;L;;;;;N;;;;; A2FE;YI SYLLABLE NZUX;Lo;0;L;;;;;N;;;;; A2FF;YI SYLLABLE NZU;Lo;0;L;;;;;N;;;;; A300;YI SYLLABLE NZUP;Lo;0;L;;;;;N;;;;; A301;YI SYLLABLE NZURX;Lo;0;L;;;;;N;;;;; A302;YI SYLLABLE NZUR;Lo;0;L;;;;;N;;;;; A303;YI SYLLABLE NZYT;Lo;0;L;;;;;N;;;;; A304;YI SYLLABLE NZYX;Lo;0;L;;;;;N;;;;; A305;YI SYLLABLE NZY;Lo;0;L;;;;;N;;;;; A306;YI SYLLABLE NZYP;Lo;0;L;;;;;N;;;;; A307;YI SYLLABLE NZYRX;Lo;0;L;;;;;N;;;;; A308;YI SYLLABLE NZYR;Lo;0;L;;;;;N;;;;; A309;YI SYLLABLE SIT;Lo;0;L;;;;;N;;;;; A30A;YI SYLLABLE SIX;Lo;0;L;;;;;N;;;;; A30B;YI SYLLABLE SI;Lo;0;L;;;;;N;;;;; A30C;YI SYLLABLE SIP;Lo;0;L;;;;;N;;;;; A30D;YI SYLLABLE SIEX;Lo;0;L;;;;;N;;;;; A30E;YI SYLLABLE SIE;Lo;0;L;;;;;N;;;;; A30F;YI SYLLABLE SIEP;Lo;0;L;;;;;N;;;;; A310;YI SYLLABLE SAT;Lo;0;L;;;;;N;;;;; A311;YI SYLLABLE SAX;Lo;0;L;;;;;N;;;;; A312;YI SYLLABLE SA;Lo;0;L;;;;;N;;;;; A313;YI SYLLABLE SAP;Lo;0;L;;;;;N;;;;; A314;YI SYLLABLE SUOX;Lo;0;L;;;;;N;;;;; A315;YI SYLLABLE SUO;Lo;0;L;;;;;N;;;;; A316;YI SYLLABLE SUOP;Lo;0;L;;;;;N;;;;; A317;YI SYLLABLE SOT;Lo;0;L;;;;;N;;;;; A318;YI SYLLABLE SOX;Lo;0;L;;;;;N;;;;; A319;YI SYLLABLE SO;Lo;0;L;;;;;N;;;;; A31A;YI SYLLABLE SOP;Lo;0;L;;;;;N;;;;; A31B;YI SYLLABLE SEX;Lo;0;L;;;;;N;;;;; A31C;YI SYLLABLE SE;Lo;0;L;;;;;N;;;;; A31D;YI SYLLABLE SEP;Lo;0;L;;;;;N;;;;; A31E;YI SYLLABLE SUT;Lo;0;L;;;;;N;;;;; A31F;YI SYLLABLE SUX;Lo;0;L;;;;;N;;;;; A320;YI SYLLABLE SU;Lo;0;L;;;;;N;;;;; A321;YI SYLLABLE SUP;Lo;0;L;;;;;N;;;;; A322;YI SYLLABLE SURX;Lo;0;L;;;;;N;;;;; A323;YI SYLLABLE SUR;Lo;0;L;;;;;N;;;;; A324;YI SYLLABLE SYT;Lo;0;L;;;;;N;;;;; A325;YI SYLLABLE SYX;Lo;0;L;;;;;N;;;;; A326;YI SYLLABLE SY;Lo;0;L;;;;;N;;;;; A327;YI SYLLABLE SYP;Lo;0;L;;;;;N;;;;; A328;YI SYLLABLE SYRX;Lo;0;L;;;;;N;;;;; A329;YI SYLLABLE SYR;Lo;0;L;;;;;N;;;;; A32A;YI SYLLABLE SSIT;Lo;0;L;;;;;N;;;;; A32B;YI SYLLABLE SSIX;Lo;0;L;;;;;N;;;;; A32C;YI SYLLABLE SSI;Lo;0;L;;;;;N;;;;; A32D;YI SYLLABLE SSIP;Lo;0;L;;;;;N;;;;; A32E;YI SYLLABLE SSIEX;Lo;0;L;;;;;N;;;;; A32F;YI SYLLABLE SSIE;Lo;0;L;;;;;N;;;;; A330;YI SYLLABLE SSIEP;Lo;0;L;;;;;N;;;;; A331;YI SYLLABLE SSAT;Lo;0;L;;;;;N;;;;; A332;YI SYLLABLE SSAX;Lo;0;L;;;;;N;;;;; A333;YI SYLLABLE SSA;Lo;0;L;;;;;N;;;;; A334;YI SYLLABLE SSAP;Lo;0;L;;;;;N;;;;; A335;YI SYLLABLE SSOT;Lo;0;L;;;;;N;;;;; A336;YI SYLLABLE SSOX;Lo;0;L;;;;;N;;;;; A337;YI SYLLABLE SSO;Lo;0;L;;;;;N;;;;; A338;YI SYLLABLE SSOP;Lo;0;L;;;;;N;;;;; A339;YI SYLLABLE SSEX;Lo;0;L;;;;;N;;;;; A33A;YI SYLLABLE SSE;Lo;0;L;;;;;N;;;;; A33B;YI SYLLABLE SSEP;Lo;0;L;;;;;N;;;;; A33C;YI SYLLABLE SSUT;Lo;0;L;;;;;N;;;;; A33D;YI SYLLABLE SSUX;Lo;0;L;;;;;N;;;;; A33E;YI SYLLABLE SSU;Lo;0;L;;;;;N;;;;; A33F;YI SYLLABLE SSUP;Lo;0;L;;;;;N;;;;; A340;YI SYLLABLE SSYT;Lo;0;L;;;;;N;;;;; A341;YI SYLLABLE SSYX;Lo;0;L;;;;;N;;;;; A342;YI SYLLABLE SSY;Lo;0;L;;;;;N;;;;; A343;YI SYLLABLE SSYP;Lo;0;L;;;;;N;;;;; A344;YI SYLLABLE SSYRX;Lo;0;L;;;;;N;;;;; A345;YI SYLLABLE SSYR;Lo;0;L;;;;;N;;;;; A346;YI SYLLABLE ZHAT;Lo;0;L;;;;;N;;;;; A347;YI SYLLABLE ZHAX;Lo;0;L;;;;;N;;;;; A348;YI SYLLABLE ZHA;Lo;0;L;;;;;N;;;;; A349;YI SYLLABLE ZHAP;Lo;0;L;;;;;N;;;;; A34A;YI SYLLABLE ZHUOX;Lo;0;L;;;;;N;;;;; A34B;YI SYLLABLE ZHUO;Lo;0;L;;;;;N;;;;; A34C;YI SYLLABLE ZHUOP;Lo;0;L;;;;;N;;;;; A34D;YI SYLLABLE ZHOT;Lo;0;L;;;;;N;;;;; A34E;YI SYLLABLE ZHOX;Lo;0;L;;;;;N;;;;; A34F;YI SYLLABLE ZHO;Lo;0;L;;;;;N;;;;; A350;YI SYLLABLE ZHOP;Lo;0;L;;;;;N;;;;; A351;YI SYLLABLE ZHET;Lo;0;L;;;;;N;;;;; A352;YI SYLLABLE ZHEX;Lo;0;L;;;;;N;;;;; A353;YI SYLLABLE ZHE;Lo;0;L;;;;;N;;;;; A354;YI SYLLABLE ZHEP;Lo;0;L;;;;;N;;;;; A355;YI SYLLABLE ZHUT;Lo;0;L;;;;;N;;;;; A356;YI SYLLABLE ZHUX;Lo;0;L;;;;;N;;;;; A357;YI SYLLABLE ZHU;Lo;0;L;;;;;N;;;;; A358;YI SYLLABLE ZHUP;Lo;0;L;;;;;N;;;;; A359;YI SYLLABLE ZHURX;Lo;0;L;;;;;N;;;;; A35A;YI SYLLABLE ZHUR;Lo;0;L;;;;;N;;;;; A35B;YI SYLLABLE ZHYT;Lo;0;L;;;;;N;;;;; A35C;YI SYLLABLE ZHYX;Lo;0;L;;;;;N;;;;; A35D;YI SYLLABLE ZHY;Lo;0;L;;;;;N;;;;; A35E;YI SYLLABLE ZHYP;Lo;0;L;;;;;N;;;;; A35F;YI SYLLABLE ZHYRX;Lo;0;L;;;;;N;;;;; A360;YI SYLLABLE ZHYR;Lo;0;L;;;;;N;;;;; A361;YI SYLLABLE CHAT;Lo;0;L;;;;;N;;;;; A362;YI SYLLABLE CHAX;Lo;0;L;;;;;N;;;;; A363;YI SYLLABLE CHA;Lo;0;L;;;;;N;;;;; A364;YI SYLLABLE CHAP;Lo;0;L;;;;;N;;;;; A365;YI SYLLABLE CHUOT;Lo;0;L;;;;;N;;;;; A366;YI SYLLABLE CHUOX;Lo;0;L;;;;;N;;;;; A367;YI SYLLABLE CHUO;Lo;0;L;;;;;N;;;;; A368;YI SYLLABLE CHUOP;Lo;0;L;;;;;N;;;;; A369;YI SYLLABLE CHOT;Lo;0;L;;;;;N;;;;; A36A;YI SYLLABLE CHOX;Lo;0;L;;;;;N;;;;; A36B;YI SYLLABLE CHO;Lo;0;L;;;;;N;;;;; A36C;YI SYLLABLE CHOP;Lo;0;L;;;;;N;;;;; A36D;YI SYLLABLE CHET;Lo;0;L;;;;;N;;;;; A36E;YI SYLLABLE CHEX;Lo;0;L;;;;;N;;;;; A36F;YI SYLLABLE CHE;Lo;0;L;;;;;N;;;;; A370;YI SYLLABLE CHEP;Lo;0;L;;;;;N;;;;; A371;YI SYLLABLE CHUX;Lo;0;L;;;;;N;;;;; A372;YI SYLLABLE CHU;Lo;0;L;;;;;N;;;;; A373;YI SYLLABLE CHUP;Lo;0;L;;;;;N;;;;; A374;YI SYLLABLE CHURX;Lo;0;L;;;;;N;;;;; A375;YI SYLLABLE CHUR;Lo;0;L;;;;;N;;;;; A376;YI SYLLABLE CHYT;Lo;0;L;;;;;N;;;;; A377;YI SYLLABLE CHYX;Lo;0;L;;;;;N;;;;; A378;YI SYLLABLE CHY;Lo;0;L;;;;;N;;;;; A379;YI SYLLABLE CHYP;Lo;0;L;;;;;N;;;;; A37A;YI SYLLABLE CHYRX;Lo;0;L;;;;;N;;;;; A37B;YI SYLLABLE CHYR;Lo;0;L;;;;;N;;;;; A37C;YI SYLLABLE RRAX;Lo;0;L;;;;;N;;;;; A37D;YI SYLLABLE RRA;Lo;0;L;;;;;N;;;;; A37E;YI SYLLABLE RRUOX;Lo;0;L;;;;;N;;;;; A37F;YI SYLLABLE RRUO;Lo;0;L;;;;;N;;;;; A380;YI SYLLABLE RROT;Lo;0;L;;;;;N;;;;; A381;YI SYLLABLE RROX;Lo;0;L;;;;;N;;;;; A382;YI SYLLABLE RRO;Lo;0;L;;;;;N;;;;; A383;YI SYLLABLE RROP;Lo;0;L;;;;;N;;;;; A384;YI SYLLABLE RRET;Lo;0;L;;;;;N;;;;; A385;YI SYLLABLE RREX;Lo;0;L;;;;;N;;;;; A386;YI SYLLABLE RRE;Lo;0;L;;;;;N;;;;; A387;YI SYLLABLE RREP;Lo;0;L;;;;;N;;;;; A388;YI SYLLABLE RRUT;Lo;0;L;;;;;N;;;;; A389;YI SYLLABLE RRUX;Lo;0;L;;;;;N;;;;; A38A;YI SYLLABLE RRU;Lo;0;L;;;;;N;;;;; A38B;YI SYLLABLE RRUP;Lo;0;L;;;;;N;;;;; A38C;YI SYLLABLE RRURX;Lo;0;L;;;;;N;;;;; A38D;YI SYLLABLE RRUR;Lo;0;L;;;;;N;;;;; A38E;YI SYLLABLE RRYT;Lo;0;L;;;;;N;;;;; A38F;YI SYLLABLE RRYX;Lo;0;L;;;;;N;;;;; A390;YI SYLLABLE RRY;Lo;0;L;;;;;N;;;;; A391;YI SYLLABLE RRYP;Lo;0;L;;;;;N;;;;; A392;YI SYLLABLE RRYRX;Lo;0;L;;;;;N;;;;; A393;YI SYLLABLE RRYR;Lo;0;L;;;;;N;;;;; A394;YI SYLLABLE NRAT;Lo;0;L;;;;;N;;;;; A395;YI SYLLABLE NRAX;Lo;0;L;;;;;N;;;;; A396;YI SYLLABLE NRA;Lo;0;L;;;;;N;;;;; A397;YI SYLLABLE NRAP;Lo;0;L;;;;;N;;;;; A398;YI SYLLABLE NROX;Lo;0;L;;;;;N;;;;; A399;YI SYLLABLE NRO;Lo;0;L;;;;;N;;;;; A39A;YI SYLLABLE NROP;Lo;0;L;;;;;N;;;;; A39B;YI SYLLABLE NRET;Lo;0;L;;;;;N;;;;; A39C;YI SYLLABLE NREX;Lo;0;L;;;;;N;;;;; A39D;YI SYLLABLE NRE;Lo;0;L;;;;;N;;;;; A39E;YI SYLLABLE NREP;Lo;0;L;;;;;N;;;;; A39F;YI SYLLABLE NRUT;Lo;0;L;;;;;N;;;;; A3A0;YI SYLLABLE NRUX;Lo;0;L;;;;;N;;;;; A3A1;YI SYLLABLE NRU;Lo;0;L;;;;;N;;;;; A3A2;YI SYLLABLE NRUP;Lo;0;L;;;;;N;;;;; A3A3;YI SYLLABLE NRURX;Lo;0;L;;;;;N;;;;; A3A4;YI SYLLABLE NRUR;Lo;0;L;;;;;N;;;;; A3A5;YI SYLLABLE NRYT;Lo;0;L;;;;;N;;;;; A3A6;YI SYLLABLE NRYX;Lo;0;L;;;;;N;;;;; A3A7;YI SYLLABLE NRY;Lo;0;L;;;;;N;;;;; A3A8;YI SYLLABLE NRYP;Lo;0;L;;;;;N;;;;; A3A9;YI SYLLABLE NRYRX;Lo;0;L;;;;;N;;;;; A3AA;YI SYLLABLE NRYR;Lo;0;L;;;;;N;;;;; A3AB;YI SYLLABLE SHAT;Lo;0;L;;;;;N;;;;; A3AC;YI SYLLABLE SHAX;Lo;0;L;;;;;N;;;;; A3AD;YI SYLLABLE SHA;Lo;0;L;;;;;N;;;;; A3AE;YI SYLLABLE SHAP;Lo;0;L;;;;;N;;;;; A3AF;YI SYLLABLE SHUOX;Lo;0;L;;;;;N;;;;; A3B0;YI SYLLABLE SHUO;Lo;0;L;;;;;N;;;;; A3B1;YI SYLLABLE SHUOP;Lo;0;L;;;;;N;;;;; A3B2;YI SYLLABLE SHOT;Lo;0;L;;;;;N;;;;; A3B3;YI SYLLABLE SHOX;Lo;0;L;;;;;N;;;;; A3B4;YI SYLLABLE SHO;Lo;0;L;;;;;N;;;;; A3B5;YI SYLLABLE SHOP;Lo;0;L;;;;;N;;;;; A3B6;YI SYLLABLE SHET;Lo;0;L;;;;;N;;;;; A3B7;YI SYLLABLE SHEX;Lo;0;L;;;;;N;;;;; A3B8;YI SYLLABLE SHE;Lo;0;L;;;;;N;;;;; A3B9;YI SYLLABLE SHEP;Lo;0;L;;;;;N;;;;; A3BA;YI SYLLABLE SHUT;Lo;0;L;;;;;N;;;;; A3BB;YI SYLLABLE SHUX;Lo;0;L;;;;;N;;;;; A3BC;YI SYLLABLE SHU;Lo;0;L;;;;;N;;;;; A3BD;YI SYLLABLE SHUP;Lo;0;L;;;;;N;;;;; A3BE;YI SYLLABLE SHURX;Lo;0;L;;;;;N;;;;; A3BF;YI SYLLABLE SHUR;Lo;0;L;;;;;N;;;;; A3C0;YI SYLLABLE SHYT;Lo;0;L;;;;;N;;;;; A3C1;YI SYLLABLE SHYX;Lo;0;L;;;;;N;;;;; A3C2;YI SYLLABLE SHY;Lo;0;L;;;;;N;;;;; A3C3;YI SYLLABLE SHYP;Lo;0;L;;;;;N;;;;; A3C4;YI SYLLABLE SHYRX;Lo;0;L;;;;;N;;;;; A3C5;YI SYLLABLE SHYR;Lo;0;L;;;;;N;;;;; A3C6;YI SYLLABLE RAT;Lo;0;L;;;;;N;;;;; A3C7;YI SYLLABLE RAX;Lo;0;L;;;;;N;;;;; A3C8;YI SYLLABLE RA;Lo;0;L;;;;;N;;;;; A3C9;YI SYLLABLE RAP;Lo;0;L;;;;;N;;;;; A3CA;YI SYLLABLE RUOX;Lo;0;L;;;;;N;;;;; A3CB;YI SYLLABLE RUO;Lo;0;L;;;;;N;;;;; A3CC;YI SYLLABLE RUOP;Lo;0;L;;;;;N;;;;; A3CD;YI SYLLABLE ROT;Lo;0;L;;;;;N;;;;; A3CE;YI SYLLABLE ROX;Lo;0;L;;;;;N;;;;; A3CF;YI SYLLABLE RO;Lo;0;L;;;;;N;;;;; A3D0;YI SYLLABLE ROP;Lo;0;L;;;;;N;;;;; A3D1;YI SYLLABLE REX;Lo;0;L;;;;;N;;;;; A3D2;YI SYLLABLE RE;Lo;0;L;;;;;N;;;;; A3D3;YI SYLLABLE REP;Lo;0;L;;;;;N;;;;; A3D4;YI SYLLABLE RUT;Lo;0;L;;;;;N;;;;; A3D5;YI SYLLABLE RUX;Lo;0;L;;;;;N;;;;; A3D6;YI SYLLABLE RU;Lo;0;L;;;;;N;;;;; A3D7;YI SYLLABLE RUP;Lo;0;L;;;;;N;;;;; A3D8;YI SYLLABLE RURX;Lo;0;L;;;;;N;;;;; A3D9;YI SYLLABLE RUR;Lo;0;L;;;;;N;;;;; A3DA;YI SYLLABLE RYT;Lo;0;L;;;;;N;;;;; A3DB;YI SYLLABLE RYX;Lo;0;L;;;;;N;;;;; A3DC;YI SYLLABLE RY;Lo;0;L;;;;;N;;;;; A3DD;YI SYLLABLE RYP;Lo;0;L;;;;;N;;;;; A3DE;YI SYLLABLE RYRX;Lo;0;L;;;;;N;;;;; A3DF;YI SYLLABLE RYR;Lo;0;L;;;;;N;;;;; A3E0;YI SYLLABLE JIT;Lo;0;L;;;;;N;;;;; A3E1;YI SYLLABLE JIX;Lo;0;L;;;;;N;;;;; A3E2;YI SYLLABLE JI;Lo;0;L;;;;;N;;;;; A3E3;YI SYLLABLE JIP;Lo;0;L;;;;;N;;;;; A3E4;YI SYLLABLE JIET;Lo;0;L;;;;;N;;;;; A3E5;YI SYLLABLE JIEX;Lo;0;L;;;;;N;;;;; A3E6;YI SYLLABLE JIE;Lo;0;L;;;;;N;;;;; A3E7;YI SYLLABLE JIEP;Lo;0;L;;;;;N;;;;; A3E8;YI SYLLABLE JUOT;Lo;0;L;;;;;N;;;;; A3E9;YI SYLLABLE JUOX;Lo;0;L;;;;;N;;;;; A3EA;YI SYLLABLE JUO;Lo;0;L;;;;;N;;;;; A3EB;YI SYLLABLE JUOP;Lo;0;L;;;;;N;;;;; A3EC;YI SYLLABLE JOT;Lo;0;L;;;;;N;;;;; A3ED;YI SYLLABLE JOX;Lo;0;L;;;;;N;;;;; A3EE;YI SYLLABLE JO;Lo;0;L;;;;;N;;;;; A3EF;YI SYLLABLE JOP;Lo;0;L;;;;;N;;;;; A3F0;YI SYLLABLE JUT;Lo;0;L;;;;;N;;;;; A3F1;YI SYLLABLE JUX;Lo;0;L;;;;;N;;;;; A3F2;YI SYLLABLE JU;Lo;0;L;;;;;N;;;;; A3F3;YI SYLLABLE JUP;Lo;0;L;;;;;N;;;;; A3F4;YI SYLLABLE JURX;Lo;0;L;;;;;N;;;;; A3F5;YI SYLLABLE JUR;Lo;0;L;;;;;N;;;;; A3F6;YI SYLLABLE JYT;Lo;0;L;;;;;N;;;;; A3F7;YI SYLLABLE JYX;Lo;0;L;;;;;N;;;;; A3F8;YI SYLLABLE JY;Lo;0;L;;;;;N;;;;; A3F9;YI SYLLABLE JYP;Lo;0;L;;;;;N;;;;; A3FA;YI SYLLABLE JYRX;Lo;0;L;;;;;N;;;;; A3FB;YI SYLLABLE JYR;Lo;0;L;;;;;N;;;;; A3FC;YI SYLLABLE QIT;Lo;0;L;;;;;N;;;;; A3FD;YI SYLLABLE QIX;Lo;0;L;;;;;N;;;;; A3FE;YI SYLLABLE QI;Lo;0;L;;;;;N;;;;; A3FF;YI SYLLABLE QIP;Lo;0;L;;;;;N;;;;; A400;YI SYLLABLE QIET;Lo;0;L;;;;;N;;;;; A401;YI SYLLABLE QIEX;Lo;0;L;;;;;N;;;;; A402;YI SYLLABLE QIE;Lo;0;L;;;;;N;;;;; A403;YI SYLLABLE QIEP;Lo;0;L;;;;;N;;;;; A404;YI SYLLABLE QUOT;Lo;0;L;;;;;N;;;;; A405;YI SYLLABLE QUOX;Lo;0;L;;;;;N;;;;; A406;YI SYLLABLE QUO;Lo;0;L;;;;;N;;;;; A407;YI SYLLABLE QUOP;Lo;0;L;;;;;N;;;;; A408;YI SYLLABLE QOT;Lo;0;L;;;;;N;;;;; A409;YI SYLLABLE QOX;Lo;0;L;;;;;N;;;;; A40A;YI SYLLABLE QO;Lo;0;L;;;;;N;;;;; A40B;YI SYLLABLE QOP;Lo;0;L;;;;;N;;;;; A40C;YI SYLLABLE QUT;Lo;0;L;;;;;N;;;;; A40D;YI SYLLABLE QUX;Lo;0;L;;;;;N;;;;; A40E;YI SYLLABLE QU;Lo;0;L;;;;;N;;;;; A40F;YI SYLLABLE QUP;Lo;0;L;;;;;N;;;;; A410;YI SYLLABLE QURX;Lo;0;L;;;;;N;;;;; A411;YI SYLLABLE QUR;Lo;0;L;;;;;N;;;;; A412;YI SYLLABLE QYT;Lo;0;L;;;;;N;;;;; A413;YI SYLLABLE QYX;Lo;0;L;;;;;N;;;;; A414;YI SYLLABLE QY;Lo;0;L;;;;;N;;;;; A415;YI SYLLABLE QYP;Lo;0;L;;;;;N;;;;; A416;YI SYLLABLE QYRX;Lo;0;L;;;;;N;;;;; A417;YI SYLLABLE QYR;Lo;0;L;;;;;N;;;;; A418;YI SYLLABLE JJIT;Lo;0;L;;;;;N;;;;; A419;YI SYLLABLE JJIX;Lo;0;L;;;;;N;;;;; A41A;YI SYLLABLE JJI;Lo;0;L;;;;;N;;;;; A41B;YI SYLLABLE JJIP;Lo;0;L;;;;;N;;;;; A41C;YI SYLLABLE JJIET;Lo;0;L;;;;;N;;;;; A41D;YI SYLLABLE JJIEX;Lo;0;L;;;;;N;;;;; A41E;YI SYLLABLE JJIE;Lo;0;L;;;;;N;;;;; A41F;YI SYLLABLE JJIEP;Lo;0;L;;;;;N;;;;; A420;YI SYLLABLE JJUOX;Lo;0;L;;;;;N;;;;; A421;YI SYLLABLE JJUO;Lo;0;L;;;;;N;;;;; A422;YI SYLLABLE JJUOP;Lo;0;L;;;;;N;;;;; A423;YI SYLLABLE JJOT;Lo;0;L;;;;;N;;;;; A424;YI SYLLABLE JJOX;Lo;0;L;;;;;N;;;;; A425;YI SYLLABLE JJO;Lo;0;L;;;;;N;;;;; A426;YI SYLLABLE JJOP;Lo;0;L;;;;;N;;;;; A427;YI SYLLABLE JJUT;Lo;0;L;;;;;N;;;;; A428;YI SYLLABLE JJUX;Lo;0;L;;;;;N;;;;; A429;YI SYLLABLE JJU;Lo;0;L;;;;;N;;;;; A42A;YI SYLLABLE JJUP;Lo;0;L;;;;;N;;;;; A42B;YI SYLLABLE JJURX;Lo;0;L;;;;;N;;;;; A42C;YI SYLLABLE JJUR;Lo;0;L;;;;;N;;;;; A42D;YI SYLLABLE JJYT;Lo;0;L;;;;;N;;;;; A42E;YI SYLLABLE JJYX;Lo;0;L;;;;;N;;;;; A42F;YI SYLLABLE JJY;Lo;0;L;;;;;N;;;;; A430;YI SYLLABLE JJYP;Lo;0;L;;;;;N;;;;; A431;YI SYLLABLE NJIT;Lo;0;L;;;;;N;;;;; A432;YI SYLLABLE NJIX;Lo;0;L;;;;;N;;;;; A433;YI SYLLABLE NJI;Lo;0;L;;;;;N;;;;; A434;YI SYLLABLE NJIP;Lo;0;L;;;;;N;;;;; A435;YI SYLLABLE NJIET;Lo;0;L;;;;;N;;;;; A436;YI SYLLABLE NJIEX;Lo;0;L;;;;;N;;;;; A437;YI SYLLABLE NJIE;Lo;0;L;;;;;N;;;;; A438;YI SYLLABLE NJIEP;Lo;0;L;;;;;N;;;;; A439;YI SYLLABLE NJUOX;Lo;0;L;;;;;N;;;;; A43A;YI SYLLABLE NJUO;Lo;0;L;;;;;N;;;;; A43B;YI SYLLABLE NJOT;Lo;0;L;;;;;N;;;;; A43C;YI SYLLABLE NJOX;Lo;0;L;;;;;N;;;;; A43D;YI SYLLABLE NJO;Lo;0;L;;;;;N;;;;; A43E;YI SYLLABLE NJOP;Lo;0;L;;;;;N;;;;; A43F;YI SYLLABLE NJUX;Lo;0;L;;;;;N;;;;; A440;YI SYLLABLE NJU;Lo;0;L;;;;;N;;;;; A441;YI SYLLABLE NJUP;Lo;0;L;;;;;N;;;;; A442;YI SYLLABLE NJURX;Lo;0;L;;;;;N;;;;; A443;YI SYLLABLE NJUR;Lo;0;L;;;;;N;;;;; A444;YI SYLLABLE NJYT;Lo;0;L;;;;;N;;;;; A445;YI SYLLABLE NJYX;Lo;0;L;;;;;N;;;;; A446;YI SYLLABLE NJY;Lo;0;L;;;;;N;;;;; A447;YI SYLLABLE NJYP;Lo;0;L;;;;;N;;;;; A448;YI SYLLABLE NJYRX;Lo;0;L;;;;;N;;;;; A449;YI SYLLABLE NJYR;Lo;0;L;;;;;N;;;;; A44A;YI SYLLABLE NYIT;Lo;0;L;;;;;N;;;;; A44B;YI SYLLABLE NYIX;Lo;0;L;;;;;N;;;;; A44C;YI SYLLABLE NYI;Lo;0;L;;;;;N;;;;; A44D;YI SYLLABLE NYIP;Lo;0;L;;;;;N;;;;; A44E;YI SYLLABLE NYIET;Lo;0;L;;;;;N;;;;; A44F;YI SYLLABLE NYIEX;Lo;0;L;;;;;N;;;;; A450;YI SYLLABLE NYIE;Lo;0;L;;;;;N;;;;; A451;YI SYLLABLE NYIEP;Lo;0;L;;;;;N;;;;; A452;YI SYLLABLE NYUOX;Lo;0;L;;;;;N;;;;; A453;YI SYLLABLE NYUO;Lo;0;L;;;;;N;;;;; A454;YI SYLLABLE NYUOP;Lo;0;L;;;;;N;;;;; A455;YI SYLLABLE NYOT;Lo;0;L;;;;;N;;;;; A456;YI SYLLABLE NYOX;Lo;0;L;;;;;N;;;;; A457;YI SYLLABLE NYO;Lo;0;L;;;;;N;;;;; A458;YI SYLLABLE NYOP;Lo;0;L;;;;;N;;;;; A459;YI SYLLABLE NYUT;Lo;0;L;;;;;N;;;;; A45A;YI SYLLABLE NYUX;Lo;0;L;;;;;N;;;;; A45B;YI SYLLABLE NYU;Lo;0;L;;;;;N;;;;; A45C;YI SYLLABLE NYUP;Lo;0;L;;;;;N;;;;; A45D;YI SYLLABLE XIT;Lo;0;L;;;;;N;;;;; A45E;YI SYLLABLE XIX;Lo;0;L;;;;;N;;;;; A45F;YI SYLLABLE XI;Lo;0;L;;;;;N;;;;; A460;YI SYLLABLE XIP;Lo;0;L;;;;;N;;;;; A461;YI SYLLABLE XIET;Lo;0;L;;;;;N;;;;; A462;YI SYLLABLE XIEX;Lo;0;L;;;;;N;;;;; A463;YI SYLLABLE XIE;Lo;0;L;;;;;N;;;;; A464;YI SYLLABLE XIEP;Lo;0;L;;;;;N;;;;; A465;YI SYLLABLE XUOX;Lo;0;L;;;;;N;;;;; A466;YI SYLLABLE XUO;Lo;0;L;;;;;N;;;;; A467;YI SYLLABLE XOT;Lo;0;L;;;;;N;;;;; A468;YI SYLLABLE XOX;Lo;0;L;;;;;N;;;;; A469;YI SYLLABLE XO;Lo;0;L;;;;;N;;;;; A46A;YI SYLLABLE XOP;Lo;0;L;;;;;N;;;;; A46B;YI SYLLABLE XYT;Lo;0;L;;;;;N;;;;; A46C;YI SYLLABLE XYX;Lo;0;L;;;;;N;;;;; A46D;YI SYLLABLE XY;Lo;0;L;;;;;N;;;;; A46E;YI SYLLABLE XYP;Lo;0;L;;;;;N;;;;; A46F;YI SYLLABLE XYRX;Lo;0;L;;;;;N;;;;; A470;YI SYLLABLE XYR;Lo;0;L;;;;;N;;;;; A471;YI SYLLABLE YIT;Lo;0;L;;;;;N;;;;; A472;YI SYLLABLE YIX;Lo;0;L;;;;;N;;;;; A473;YI SYLLABLE YI;Lo;0;L;;;;;N;;;;; A474;YI SYLLABLE YIP;Lo;0;L;;;;;N;;;;; A475;YI SYLLABLE YIET;Lo;0;L;;;;;N;;;;; A476;YI SYLLABLE YIEX;Lo;0;L;;;;;N;;;;; A477;YI SYLLABLE YIE;Lo;0;L;;;;;N;;;;; A478;YI SYLLABLE YIEP;Lo;0;L;;;;;N;;;;; A479;YI SYLLABLE YUOT;Lo;0;L;;;;;N;;;;; A47A;YI SYLLABLE YUOX;Lo;0;L;;;;;N;;;;; A47B;YI SYLLABLE YUO;Lo;0;L;;;;;N;;;;; A47C;YI SYLLABLE YUOP;Lo;0;L;;;;;N;;;;; A47D;YI SYLLABLE YOT;Lo;0;L;;;;;N;;;;; A47E;YI SYLLABLE YOX;Lo;0;L;;;;;N;;;;; A47F;YI SYLLABLE YO;Lo;0;L;;;;;N;;;;; A480;YI SYLLABLE YOP;Lo;0;L;;;;;N;;;;; A481;YI SYLLABLE YUT;Lo;0;L;;;;;N;;;;; A482;YI SYLLABLE YUX;Lo;0;L;;;;;N;;;;; A483;YI SYLLABLE YU;Lo;0;L;;;;;N;;;;; A484;YI SYLLABLE YUP;Lo;0;L;;;;;N;;;;; A485;YI SYLLABLE YURX;Lo;0;L;;;;;N;;;;; A486;YI SYLLABLE YUR;Lo;0;L;;;;;N;;;;; A487;YI SYLLABLE YYT;Lo;0;L;;;;;N;;;;; A488;YI SYLLABLE YYX;Lo;0;L;;;;;N;;;;; A489;YI SYLLABLE YY;Lo;0;L;;;;;N;;;;; A48A;YI SYLLABLE YYP;Lo;0;L;;;;;N;;;;; A48B;YI SYLLABLE YYRX;Lo;0;L;;;;;N;;;;; A48C;YI SYLLABLE YYR;Lo;0;L;;;;;N;;;;; A490;YI RADICAL QOT;So;0;ON;;;;;N;;;;; A491;YI RADICAL LI;So;0;ON;;;;;N;;;;; A492;YI RADICAL KIT;So;0;ON;;;;;N;;;;; A493;YI RADICAL NYIP;So;0;ON;;;;;N;;;;; A494;YI RADICAL CYP;So;0;ON;;;;;N;;;;; A495;YI RADICAL SSI;So;0;ON;;;;;N;;;;; A496;YI RADICAL GGOP;So;0;ON;;;;;N;;;;; A497;YI RADICAL GEP;So;0;ON;;;;;N;;;;; A498;YI RADICAL MI;So;0;ON;;;;;N;;;;; A499;YI RADICAL HXIT;So;0;ON;;;;;N;;;;; A49A;YI RADICAL LYR;So;0;ON;;;;;N;;;;; A49B;YI RADICAL BBUT;So;0;ON;;;;;N;;;;; A49C;YI RADICAL MOP;So;0;ON;;;;;N;;;;; A49D;YI RADICAL YO;So;0;ON;;;;;N;;;;; A49E;YI RADICAL PUT;So;0;ON;;;;;N;;;;; A49F;YI RADICAL HXUO;So;0;ON;;;;;N;;;;; A4A0;YI RADICAL TAT;So;0;ON;;;;;N;;;;; A4A1;YI RADICAL GA;So;0;ON;;;;;N;;;;; A4A2;YI RADICAL ZUP;So;0;ON;;;;;N;;;;; A4A3;YI RADICAL CYT;So;0;ON;;;;;N;;;;; A4A4;YI RADICAL DDUR;So;0;ON;;;;;N;;;;; A4A5;YI RADICAL BUR;So;0;ON;;;;;N;;;;; A4A6;YI RADICAL GGUO;So;0;ON;;;;;N;;;;; A4A7;YI RADICAL NYOP;So;0;ON;;;;;N;;;;; A4A8;YI RADICAL TU;So;0;ON;;;;;N;;;;; A4A9;YI RADICAL OP;So;0;ON;;;;;N;;;;; A4AA;YI RADICAL JJUT;So;0;ON;;;;;N;;;;; A4AB;YI RADICAL ZOT;So;0;ON;;;;;N;;;;; A4AC;YI RADICAL PYT;So;0;ON;;;;;N;;;;; A4AD;YI RADICAL HMO;So;0;ON;;;;;N;;;;; A4AE;YI RADICAL YIT;So;0;ON;;;;;N;;;;; A4AF;YI RADICAL VUR;So;0;ON;;;;;N;;;;; A4B0;YI RADICAL SHY;So;0;ON;;;;;N;;;;; A4B1;YI RADICAL VEP;So;0;ON;;;;;N;;;;; A4B2;YI RADICAL ZA;So;0;ON;;;;;N;;;;; A4B3;YI RADICAL JO;So;0;ON;;;;;N;;;;; A4B4;YI RADICAL NZUP;So;0;ON;;;;;N;;;;; A4B5;YI RADICAL JJY;So;0;ON;;;;;N;;;;; A4B6;YI RADICAL GOT;So;0;ON;;;;;N;;;;; A4B7;YI RADICAL JJIE;So;0;ON;;;;;N;;;;; A4B8;YI RADICAL WO;So;0;ON;;;;;N;;;;; A4B9;YI RADICAL DU;So;0;ON;;;;;N;;;;; A4BA;YI RADICAL SHUR;So;0;ON;;;;;N;;;;; A4BB;YI RADICAL LIE;So;0;ON;;;;;N;;;;; A4BC;YI RADICAL CY;So;0;ON;;;;;N;;;;; A4BD;YI RADICAL CUOP;So;0;ON;;;;;N;;;;; A4BE;YI RADICAL CIP;So;0;ON;;;;;N;;;;; A4BF;YI RADICAL HXOP;So;0;ON;;;;;N;;;;; A4C0;YI RADICAL SHAT;So;0;ON;;;;;N;;;;; A4C1;YI RADICAL ZUR;So;0;ON;;;;;N;;;;; A4C2;YI RADICAL SHOP;So;0;ON;;;;;N;;;;; A4C3;YI RADICAL CHE;So;0;ON;;;;;N;;;;; A4C4;YI RADICAL ZZIET;So;0;ON;;;;;N;;;;; A4C5;YI RADICAL NBIE;So;0;ON;;;;;N;;;;; A4C6;YI RADICAL KE;So;0;ON;;;;;N;;;;; A4D0;LISU LETTER BA;Lo;0;L;;;;;N;;;;; A4D1;LISU LETTER PA;Lo;0;L;;;;;N;;;;; A4D2;LISU LETTER PHA;Lo;0;L;;;;;N;;;;; A4D3;LISU LETTER DA;Lo;0;L;;;;;N;;;;; A4D4;LISU LETTER TA;Lo;0;L;;;;;N;;;;; A4D5;LISU LETTER THA;Lo;0;L;;;;;N;;;;; A4D6;LISU LETTER GA;Lo;0;L;;;;;N;;;;; A4D7;LISU LETTER KA;Lo;0;L;;;;;N;;;;; A4D8;LISU LETTER KHA;Lo;0;L;;;;;N;;;;; A4D9;LISU LETTER JA;Lo;0;L;;;;;N;;;;; A4DA;LISU LETTER CA;Lo;0;L;;;;;N;;;;; A4DB;LISU LETTER CHA;Lo;0;L;;;;;N;;;;; A4DC;LISU LETTER DZA;Lo;0;L;;;;;N;;;;; A4DD;LISU LETTER TSA;Lo;0;L;;;;;N;;;;; A4DE;LISU LETTER TSHA;Lo;0;L;;;;;N;;;;; A4DF;LISU LETTER MA;Lo;0;L;;;;;N;;;;; A4E0;LISU LETTER NA;Lo;0;L;;;;;N;;;;; A4E1;LISU LETTER LA;Lo;0;L;;;;;N;;;;; A4E2;LISU LETTER SA;Lo;0;L;;;;;N;;;;; A4E3;LISU LETTER ZHA;Lo;0;L;;;;;N;;;;; A4E4;LISU LETTER ZA;Lo;0;L;;;;;N;;;;; A4E5;LISU LETTER NGA;Lo;0;L;;;;;N;;;;; A4E6;LISU LETTER HA;Lo;0;L;;;;;N;;;;; A4E7;LISU LETTER XA;Lo;0;L;;;;;N;;;;; A4E8;LISU LETTER HHA;Lo;0;L;;;;;N;;;;; A4E9;LISU LETTER FA;Lo;0;L;;;;;N;;;;; A4EA;LISU LETTER WA;Lo;0;L;;;;;N;;;;; A4EB;LISU LETTER SHA;Lo;0;L;;;;;N;;;;; A4EC;LISU LETTER YA;Lo;0;L;;;;;N;;;;; A4ED;LISU LETTER GHA;Lo;0;L;;;;;N;;;;; A4EE;LISU LETTER A;Lo;0;L;;;;;N;;;;; A4EF;LISU LETTER AE;Lo;0;L;;;;;N;;;;; A4F0;LISU LETTER E;Lo;0;L;;;;;N;;;;; A4F1;LISU LETTER EU;Lo;0;L;;;;;N;;;;; A4F2;LISU LETTER I;Lo;0;L;;;;;N;;;;; A4F3;LISU LETTER O;Lo;0;L;;;;;N;;;;; A4F4;LISU LETTER U;Lo;0;L;;;;;N;;;;; A4F5;LISU LETTER UE;Lo;0;L;;;;;N;;;;; A4F6;LISU LETTER UH;Lo;0;L;;;;;N;;;;; A4F7;LISU LETTER OE;Lo;0;L;;;;;N;;;;; A4F8;LISU LETTER TONE MYA TI;Lm;0;L;;;;;N;;;;; A4F9;LISU LETTER TONE NA PO;Lm;0;L;;;;;N;;;;; A4FA;LISU LETTER TONE MYA CYA;Lm;0;L;;;;;N;;;;; A4FB;LISU LETTER TONE MYA BO;Lm;0;L;;;;;N;;;;; A4FC;LISU LETTER TONE MYA NA;Lm;0;L;;;;;N;;;;; A4FD;LISU LETTER TONE MYA JEU;Lm;0;L;;;;;N;;;;; A4FE;LISU PUNCTUATION COMMA;Po;0;L;;;;;N;;;;; A4FF;LISU PUNCTUATION FULL STOP;Po;0;L;;;;;N;;;;; A500;VAI SYLLABLE EE;Lo;0;L;;;;;N;;;;; A501;VAI SYLLABLE EEN;Lo;0;L;;;;;N;;;;; A502;VAI SYLLABLE HEE;Lo;0;L;;;;;N;;;;; A503;VAI SYLLABLE WEE;Lo;0;L;;;;;N;;;;; A504;VAI SYLLABLE WEEN;Lo;0;L;;;;;N;;;;; A505;VAI SYLLABLE PEE;Lo;0;L;;;;;N;;;;; A506;VAI SYLLABLE BHEE;Lo;0;L;;;;;N;;;;; A507;VAI SYLLABLE BEE;Lo;0;L;;;;;N;;;;; A508;VAI SYLLABLE MBEE;Lo;0;L;;;;;N;;;;; A509;VAI SYLLABLE KPEE;Lo;0;L;;;;;N;;;;; A50A;VAI SYLLABLE MGBEE;Lo;0;L;;;;;N;;;;; A50B;VAI SYLLABLE GBEE;Lo;0;L;;;;;N;;;;; A50C;VAI SYLLABLE FEE;Lo;0;L;;;;;N;;;;; A50D;VAI SYLLABLE VEE;Lo;0;L;;;;;N;;;;; A50E;VAI SYLLABLE TEE;Lo;0;L;;;;;N;;;;; A50F;VAI SYLLABLE THEE;Lo;0;L;;;;;N;;;;; A510;VAI SYLLABLE DHEE;Lo;0;L;;;;;N;;;;; A511;VAI SYLLABLE DHHEE;Lo;0;L;;;;;N;;;;; A512;VAI SYLLABLE LEE;Lo;0;L;;;;;N;;;;; A513;VAI SYLLABLE REE;Lo;0;L;;;;;N;;;;; A514;VAI SYLLABLE DEE;Lo;0;L;;;;;N;;;;; A515;VAI SYLLABLE NDEE;Lo;0;L;;;;;N;;;;; A516;VAI SYLLABLE SEE;Lo;0;L;;;;;N;;;;; A517;VAI SYLLABLE SHEE;Lo;0;L;;;;;N;;;;; A518;VAI SYLLABLE ZEE;Lo;0;L;;;;;N;;;;; A519;VAI SYLLABLE ZHEE;Lo;0;L;;;;;N;;;;; A51A;VAI SYLLABLE CEE;Lo;0;L;;;;;N;;;;; A51B;VAI SYLLABLE JEE;Lo;0;L;;;;;N;;;;; A51C;VAI SYLLABLE NJEE;Lo;0;L;;;;;N;;;;; A51D;VAI SYLLABLE YEE;Lo;0;L;;;;;N;;;;; A51E;VAI SYLLABLE KEE;Lo;0;L;;;;;N;;;;; A51F;VAI SYLLABLE NGGEE;Lo;0;L;;;;;N;;;;; A520;VAI SYLLABLE GEE;Lo;0;L;;;;;N;;;;; A521;VAI SYLLABLE MEE;Lo;0;L;;;;;N;;;;; A522;VAI SYLLABLE NEE;Lo;0;L;;;;;N;;;;; A523;VAI SYLLABLE NYEE;Lo;0;L;;;;;N;;;;; A524;VAI SYLLABLE I;Lo;0;L;;;;;N;;;;; A525;VAI SYLLABLE IN;Lo;0;L;;;;;N;;;;; A526;VAI SYLLABLE HI;Lo;0;L;;;;;N;;;;; A527;VAI SYLLABLE HIN;Lo;0;L;;;;;N;;;;; A528;VAI SYLLABLE WI;Lo;0;L;;;;;N;;;;; A529;VAI SYLLABLE WIN;Lo;0;L;;;;;N;;;;; A52A;VAI SYLLABLE PI;Lo;0;L;;;;;N;;;;; A52B;VAI SYLLABLE BHI;Lo;0;L;;;;;N;;;;; A52C;VAI SYLLABLE BI;Lo;0;L;;;;;N;;;;; A52D;VAI SYLLABLE MBI;Lo;0;L;;;;;N;;;;; A52E;VAI SYLLABLE KPI;Lo;0;L;;;;;N;;;;; A52F;VAI SYLLABLE MGBI;Lo;0;L;;;;;N;;;;; A530;VAI SYLLABLE GBI;Lo;0;L;;;;;N;;;;; A531;VAI SYLLABLE FI;Lo;0;L;;;;;N;;;;; A532;VAI SYLLABLE VI;Lo;0;L;;;;;N;;;;; A533;VAI SYLLABLE TI;Lo;0;L;;;;;N;;;;; A534;VAI SYLLABLE THI;Lo;0;L;;;;;N;;;;; A535;VAI SYLLABLE DHI;Lo;0;L;;;;;N;;;;; A536;VAI SYLLABLE DHHI;Lo;0;L;;;;;N;;;;; A537;VAI SYLLABLE LI;Lo;0;L;;;;;N;;;;; A538;VAI SYLLABLE RI;Lo;0;L;;;;;N;;;;; A539;VAI SYLLABLE DI;Lo;0;L;;;;;N;;;;; A53A;VAI SYLLABLE NDI;Lo;0;L;;;;;N;;;;; A53B;VAI SYLLABLE SI;Lo;0;L;;;;;N;;;;; A53C;VAI SYLLABLE SHI;Lo;0;L;;;;;N;;;;; A53D;VAI SYLLABLE ZI;Lo;0;L;;;;;N;;;;; A53E;VAI SYLLABLE ZHI;Lo;0;L;;;;;N;;;;; A53F;VAI SYLLABLE CI;Lo;0;L;;;;;N;;;;; A540;VAI SYLLABLE JI;Lo;0;L;;;;;N;;;;; A541;VAI SYLLABLE NJI;Lo;0;L;;;;;N;;;;; A542;VAI SYLLABLE YI;Lo;0;L;;;;;N;;;;; A543;VAI SYLLABLE KI;Lo;0;L;;;;;N;;;;; A544;VAI SYLLABLE NGGI;Lo;0;L;;;;;N;;;;; A545;VAI SYLLABLE GI;Lo;0;L;;;;;N;;;;; A546;VAI SYLLABLE MI;Lo;0;L;;;;;N;;;;; A547;VAI SYLLABLE NI;Lo;0;L;;;;;N;;;;; A548;VAI SYLLABLE NYI;Lo;0;L;;;;;N;;;;; A549;VAI SYLLABLE A;Lo;0;L;;;;;N;;;;; A54A;VAI SYLLABLE AN;Lo;0;L;;;;;N;;;;; A54B;VAI SYLLABLE NGAN;Lo;0;L;;;;;N;;;;; A54C;VAI SYLLABLE HA;Lo;0;L;;;;;N;;;;; A54D;VAI SYLLABLE HAN;Lo;0;L;;;;;N;;;;; A54E;VAI SYLLABLE WA;Lo;0;L;;;;;N;;;;; A54F;VAI SYLLABLE WAN;Lo;0;L;;;;;N;;;;; A550;VAI SYLLABLE PA;Lo;0;L;;;;;N;;;;; A551;VAI SYLLABLE BHA;Lo;0;L;;;;;N;;;;; A552;VAI SYLLABLE BA;Lo;0;L;;;;;N;;;;; A553;VAI SYLLABLE MBA;Lo;0;L;;;;;N;;;;; A554;VAI SYLLABLE KPA;Lo;0;L;;;;;N;;;;; A555;VAI SYLLABLE KPAN;Lo;0;L;;;;;N;;;;; A556;VAI SYLLABLE MGBA;Lo;0;L;;;;;N;;;;; A557;VAI SYLLABLE GBA;Lo;0;L;;;;;N;;;;; A558;VAI SYLLABLE FA;Lo;0;L;;;;;N;;;;; A559;VAI SYLLABLE VA;Lo;0;L;;;;;N;;;;; A55A;VAI SYLLABLE TA;Lo;0;L;;;;;N;;;;; A55B;VAI SYLLABLE THA;Lo;0;L;;;;;N;;;;; A55C;VAI SYLLABLE DHA;Lo;0;L;;;;;N;;;;; A55D;VAI SYLLABLE DHHA;Lo;0;L;;;;;N;;;;; A55E;VAI SYLLABLE LA;Lo;0;L;;;;;N;;;;; A55F;VAI SYLLABLE RA;Lo;0;L;;;;;N;;;;; A560;VAI SYLLABLE DA;Lo;0;L;;;;;N;;;;; A561;VAI SYLLABLE NDA;Lo;0;L;;;;;N;;;;; A562;VAI SYLLABLE SA;Lo;0;L;;;;;N;;;;; A563;VAI SYLLABLE SHA;Lo;0;L;;;;;N;;;;; A564;VAI SYLLABLE ZA;Lo;0;L;;;;;N;;;;; A565;VAI SYLLABLE ZHA;Lo;0;L;;;;;N;;;;; A566;VAI SYLLABLE CA;Lo;0;L;;;;;N;;;;; A567;VAI SYLLABLE JA;Lo;0;L;;;;;N;;;;; A568;VAI SYLLABLE NJA;Lo;0;L;;;;;N;;;;; A569;VAI SYLLABLE YA;Lo;0;L;;;;;N;;;;; A56A;VAI SYLLABLE KA;Lo;0;L;;;;;N;;;;; A56B;VAI SYLLABLE KAN;Lo;0;L;;;;;N;;;;; A56C;VAI SYLLABLE NGGA;Lo;0;L;;;;;N;;;;; A56D;VAI SYLLABLE GA;Lo;0;L;;;;;N;;;;; A56E;VAI SYLLABLE MA;Lo;0;L;;;;;N;;;;; A56F;VAI SYLLABLE NA;Lo;0;L;;;;;N;;;;; A570;VAI SYLLABLE NYA;Lo;0;L;;;;;N;;;;; A571;VAI SYLLABLE OO;Lo;0;L;;;;;N;;;;; A572;VAI SYLLABLE OON;Lo;0;L;;;;;N;;;;; A573;VAI SYLLABLE HOO;Lo;0;L;;;;;N;;;;; A574;VAI SYLLABLE WOO;Lo;0;L;;;;;N;;;;; A575;VAI SYLLABLE WOON;Lo;0;L;;;;;N;;;;; A576;VAI SYLLABLE POO;Lo;0;L;;;;;N;;;;; A577;VAI SYLLABLE BHOO;Lo;0;L;;;;;N;;;;; A578;VAI SYLLABLE BOO;Lo;0;L;;;;;N;;;;; A579;VAI SYLLABLE MBOO;Lo;0;L;;;;;N;;;;; A57A;VAI SYLLABLE KPOO;Lo;0;L;;;;;N;;;;; A57B;VAI SYLLABLE MGBOO;Lo;0;L;;;;;N;;;;; A57C;VAI SYLLABLE GBOO;Lo;0;L;;;;;N;;;;; A57D;VAI SYLLABLE FOO;Lo;0;L;;;;;N;;;;; A57E;VAI SYLLABLE VOO;Lo;0;L;;;;;N;;;;; A57F;VAI SYLLABLE TOO;Lo;0;L;;;;;N;;;;; A580;VAI SYLLABLE THOO;Lo;0;L;;;;;N;;;;; A581;VAI SYLLABLE DHOO;Lo;0;L;;;;;N;;;;; A582;VAI SYLLABLE DHHOO;Lo;0;L;;;;;N;;;;; A583;VAI SYLLABLE LOO;Lo;0;L;;;;;N;;;;; A584;VAI SYLLABLE ROO;Lo;0;L;;;;;N;;;;; A585;VAI SYLLABLE DOO;Lo;0;L;;;;;N;;;;; A586;VAI SYLLABLE NDOO;Lo;0;L;;;;;N;;;;; A587;VAI SYLLABLE SOO;Lo;0;L;;;;;N;;;;; A588;VAI SYLLABLE SHOO;Lo;0;L;;;;;N;;;;; A589;VAI SYLLABLE ZOO;Lo;0;L;;;;;N;;;;; A58A;VAI SYLLABLE ZHOO;Lo;0;L;;;;;N;;;;; A58B;VAI SYLLABLE COO;Lo;0;L;;;;;N;;;;; A58C;VAI SYLLABLE JOO;Lo;0;L;;;;;N;;;;; A58D;VAI SYLLABLE NJOO;Lo;0;L;;;;;N;;;;; A58E;VAI SYLLABLE YOO;Lo;0;L;;;;;N;;;;; A58F;VAI SYLLABLE KOO;Lo;0;L;;;;;N;;;;; A590;VAI SYLLABLE NGGOO;Lo;0;L;;;;;N;;;;; A591;VAI SYLLABLE GOO;Lo;0;L;;;;;N;;;;; A592;VAI SYLLABLE MOO;Lo;0;L;;;;;N;;;;; A593;VAI SYLLABLE NOO;Lo;0;L;;;;;N;;;;; A594;VAI SYLLABLE NYOO;Lo;0;L;;;;;N;;;;; A595;VAI SYLLABLE U;Lo;0;L;;;;;N;;;;; A596;VAI SYLLABLE UN;Lo;0;L;;;;;N;;;;; A597;VAI SYLLABLE HU;Lo;0;L;;;;;N;;;;; A598;VAI SYLLABLE HUN;Lo;0;L;;;;;N;;;;; A599;VAI SYLLABLE WU;Lo;0;L;;;;;N;;;;; A59A;VAI SYLLABLE WUN;Lo;0;L;;;;;N;;;;; A59B;VAI SYLLABLE PU;Lo;0;L;;;;;N;;;;; A59C;VAI SYLLABLE BHU;Lo;0;L;;;;;N;;;;; A59D;VAI SYLLABLE BU;Lo;0;L;;;;;N;;;;; A59E;VAI SYLLABLE MBU;Lo;0;L;;;;;N;;;;; A59F;VAI SYLLABLE KPU;Lo;0;L;;;;;N;;;;; A5A0;VAI SYLLABLE MGBU;Lo;0;L;;;;;N;;;;; A5A1;VAI SYLLABLE GBU;Lo;0;L;;;;;N;;;;; A5A2;VAI SYLLABLE FU;Lo;0;L;;;;;N;;;;; A5A3;VAI SYLLABLE VU;Lo;0;L;;;;;N;;;;; A5A4;VAI SYLLABLE TU;Lo;0;L;;;;;N;;;;; A5A5;VAI SYLLABLE THU;Lo;0;L;;;;;N;;;;; A5A6;VAI SYLLABLE DHU;Lo;0;L;;;;;N;;;;; A5A7;VAI SYLLABLE DHHU;Lo;0;L;;;;;N;;;;; A5A8;VAI SYLLABLE LU;Lo;0;L;;;;;N;;;;; A5A9;VAI SYLLABLE RU;Lo;0;L;;;;;N;;;;; A5AA;VAI SYLLABLE DU;Lo;0;L;;;;;N;;;;; A5AB;VAI SYLLABLE NDU;Lo;0;L;;;;;N;;;;; A5AC;VAI SYLLABLE SU;Lo;0;L;;;;;N;;;;; A5AD;VAI SYLLABLE SHU;Lo;0;L;;;;;N;;;;; A5AE;VAI SYLLABLE ZU;Lo;0;L;;;;;N;;;;; A5AF;VAI SYLLABLE ZHU;Lo;0;L;;;;;N;;;;; A5B0;VAI SYLLABLE CU;Lo;0;L;;;;;N;;;;; A5B1;VAI SYLLABLE JU;Lo;0;L;;;;;N;;;;; A5B2;VAI SYLLABLE NJU;Lo;0;L;;;;;N;;;;; A5B3;VAI SYLLABLE YU;Lo;0;L;;;;;N;;;;; A5B4;VAI SYLLABLE KU;Lo;0;L;;;;;N;;;;; A5B5;VAI SYLLABLE NGGU;Lo;0;L;;;;;N;;;;; A5B6;VAI SYLLABLE GU;Lo;0;L;;;;;N;;;;; A5B7;VAI SYLLABLE MU;Lo;0;L;;;;;N;;;;; A5B8;VAI SYLLABLE NU;Lo;0;L;;;;;N;;;;; A5B9;VAI SYLLABLE NYU;Lo;0;L;;;;;N;;;;; A5BA;VAI SYLLABLE O;Lo;0;L;;;;;N;;;;; A5BB;VAI SYLLABLE ON;Lo;0;L;;;;;N;;;;; A5BC;VAI SYLLABLE NGON;Lo;0;L;;;;;N;;;;; A5BD;VAI SYLLABLE HO;Lo;0;L;;;;;N;;;;; A5BE;VAI SYLLABLE HON;Lo;0;L;;;;;N;;;;; A5BF;VAI SYLLABLE WO;Lo;0;L;;;;;N;;;;; A5C0;VAI SYLLABLE WON;Lo;0;L;;;;;N;;;;; A5C1;VAI SYLLABLE PO;Lo;0;L;;;;;N;;;;; A5C2;VAI SYLLABLE BHO;Lo;0;L;;;;;N;;;;; A5C3;VAI SYLLABLE BO;Lo;0;L;;;;;N;;;;; A5C4;VAI SYLLABLE MBO;Lo;0;L;;;;;N;;;;; A5C5;VAI SYLLABLE KPO;Lo;0;L;;;;;N;;;;; A5C6;VAI SYLLABLE MGBO;Lo;0;L;;;;;N;;;;; A5C7;VAI SYLLABLE GBO;Lo;0;L;;;;;N;;;;; A5C8;VAI SYLLABLE GBON;Lo;0;L;;;;;N;;;;; A5C9;VAI SYLLABLE FO;Lo;0;L;;;;;N;;;;; A5CA;VAI SYLLABLE VO;Lo;0;L;;;;;N;;;;; A5CB;VAI SYLLABLE TO;Lo;0;L;;;;;N;;;;; A5CC;VAI SYLLABLE THO;Lo;0;L;;;;;N;;;;; A5CD;VAI SYLLABLE DHO;Lo;0;L;;;;;N;;;;; A5CE;VAI SYLLABLE DHHO;Lo;0;L;;;;;N;;;;; A5CF;VAI SYLLABLE LO;Lo;0;L;;;;;N;;;;; A5D0;VAI SYLLABLE RO;Lo;0;L;;;;;N;;;;; A5D1;VAI SYLLABLE DO;Lo;0;L;;;;;N;;;;; A5D2;VAI SYLLABLE NDO;Lo;0;L;;;;;N;;;;; A5D3;VAI SYLLABLE SO;Lo;0;L;;;;;N;;;;; A5D4;VAI SYLLABLE SHO;Lo;0;L;;;;;N;;;;; A5D5;VAI SYLLABLE ZO;Lo;0;L;;;;;N;;;;; A5D6;VAI SYLLABLE ZHO;Lo;0;L;;;;;N;;;;; A5D7;VAI SYLLABLE CO;Lo;0;L;;;;;N;;;;; A5D8;VAI SYLLABLE JO;Lo;0;L;;;;;N;;;;; A5D9;VAI SYLLABLE NJO;Lo;0;L;;;;;N;;;;; A5DA;VAI SYLLABLE YO;Lo;0;L;;;;;N;;;;; A5DB;VAI SYLLABLE KO;Lo;0;L;;;;;N;;;;; A5DC;VAI SYLLABLE NGGO;Lo;0;L;;;;;N;;;;; A5DD;VAI SYLLABLE GO;Lo;0;L;;;;;N;;;;; A5DE;VAI SYLLABLE MO;Lo;0;L;;;;;N;;;;; A5DF;VAI SYLLABLE NO;Lo;0;L;;;;;N;;;;; A5E0;VAI SYLLABLE NYO;Lo;0;L;;;;;N;;;;; A5E1;VAI SYLLABLE E;Lo;0;L;;;;;N;;;;; A5E2;VAI SYLLABLE EN;Lo;0;L;;;;;N;;;;; A5E3;VAI SYLLABLE NGEN;Lo;0;L;;;;;N;;;;; A5E4;VAI SYLLABLE HE;Lo;0;L;;;;;N;;;;; A5E5;VAI SYLLABLE HEN;Lo;0;L;;;;;N;;;;; A5E6;VAI SYLLABLE WE;Lo;0;L;;;;;N;;;;; A5E7;VAI SYLLABLE WEN;Lo;0;L;;;;;N;;;;; A5E8;VAI SYLLABLE PE;Lo;0;L;;;;;N;;;;; A5E9;VAI SYLLABLE BHE;Lo;0;L;;;;;N;;;;; A5EA;VAI SYLLABLE BE;Lo;0;L;;;;;N;;;;; A5EB;VAI SYLLABLE MBE;Lo;0;L;;;;;N;;;;; A5EC;VAI SYLLABLE KPE;Lo;0;L;;;;;N;;;;; A5ED;VAI SYLLABLE KPEN;Lo;0;L;;;;;N;;;;; A5EE;VAI SYLLABLE MGBE;Lo;0;L;;;;;N;;;;; A5EF;VAI SYLLABLE GBE;Lo;0;L;;;;;N;;;;; A5F0;VAI SYLLABLE GBEN;Lo;0;L;;;;;N;;;;; A5F1;VAI SYLLABLE FE;Lo;0;L;;;;;N;;;;; A5F2;VAI SYLLABLE VE;Lo;0;L;;;;;N;;;;; A5F3;VAI SYLLABLE TE;Lo;0;L;;;;;N;;;;; A5F4;VAI SYLLABLE THE;Lo;0;L;;;;;N;;;;; A5F5;VAI SYLLABLE DHE;Lo;0;L;;;;;N;;;;; A5F6;VAI SYLLABLE DHHE;Lo;0;L;;;;;N;;;;; A5F7;VAI SYLLABLE LE;Lo;0;L;;;;;N;;;;; A5F8;VAI SYLLABLE RE;Lo;0;L;;;;;N;;;;; A5F9;VAI SYLLABLE DE;Lo;0;L;;;;;N;;;;; A5FA;VAI SYLLABLE NDE;Lo;0;L;;;;;N;;;;; A5FB;VAI SYLLABLE SE;Lo;0;L;;;;;N;;;;; A5FC;VAI SYLLABLE SHE;Lo;0;L;;;;;N;;;;; A5FD;VAI SYLLABLE ZE;Lo;0;L;;;;;N;;;;; A5FE;VAI SYLLABLE ZHE;Lo;0;L;;;;;N;;;;; A5FF;VAI SYLLABLE CE;Lo;0;L;;;;;N;;;;; A600;VAI SYLLABLE JE;Lo;0;L;;;;;N;;;;; A601;VAI SYLLABLE NJE;Lo;0;L;;;;;N;;;;; A602;VAI SYLLABLE YE;Lo;0;L;;;;;N;;;;; A603;VAI SYLLABLE KE;Lo;0;L;;;;;N;;;;; A604;VAI SYLLABLE NGGE;Lo;0;L;;;;;N;;;;; A605;VAI SYLLABLE NGGEN;Lo;0;L;;;;;N;;;;; A606;VAI SYLLABLE GE;Lo;0;L;;;;;N;;;;; A607;VAI SYLLABLE GEN;Lo;0;L;;;;;N;;;;; A608;VAI SYLLABLE ME;Lo;0;L;;;;;N;;;;; A609;VAI SYLLABLE NE;Lo;0;L;;;;;N;;;;; A60A;VAI SYLLABLE NYE;Lo;0;L;;;;;N;;;;; A60B;VAI SYLLABLE NG;Lo;0;L;;;;;N;;;;; A60C;VAI SYLLABLE LENGTHENER;Lm;0;L;;;;;N;;;;; A60D;VAI COMMA;Po;0;ON;;;;;N;;;;; A60E;VAI FULL STOP;Po;0;ON;;;;;N;;;;; A60F;VAI QUESTION MARK;Po;0;ON;;;;;N;;;;; A610;VAI SYLLABLE NDOLE FA;Lo;0;L;;;;;N;;;;; A611;VAI SYLLABLE NDOLE KA;Lo;0;L;;;;;N;;;;; A612;VAI SYLLABLE NDOLE SOO;Lo;0;L;;;;;N;;;;; A613;VAI SYMBOL FEENG;Lo;0;L;;;;;N;;;;; A614;VAI SYMBOL KEENG;Lo;0;L;;;;;N;;;;; A615;VAI SYMBOL TING;Lo;0;L;;;;;N;;;;; A616;VAI SYMBOL NII;Lo;0;L;;;;;N;;;;; A617;VAI SYMBOL BANG;Lo;0;L;;;;;N;;;;; A618;VAI SYMBOL FAA;Lo;0;L;;;;;N;;;;; A619;VAI SYMBOL TAA;Lo;0;L;;;;;N;;;;; A61A;VAI SYMBOL DANG;Lo;0;L;;;;;N;;;;; A61B;VAI SYMBOL DOONG;Lo;0;L;;;;;N;;;;; A61C;VAI SYMBOL KUNG;Lo;0;L;;;;;N;;;;; A61D;VAI SYMBOL TONG;Lo;0;L;;;;;N;;;;; A61E;VAI SYMBOL DO-O;Lo;0;L;;;;;N;;;;; A61F;VAI SYMBOL JONG;Lo;0;L;;;;;N;;;;; A620;VAI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; A621;VAI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; A622;VAI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; A623;VAI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; A624;VAI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; A625;VAI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; A626;VAI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; A627;VAI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; A628;VAI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; A629;VAI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; A62A;VAI SYLLABLE NDOLE MA;Lo;0;L;;;;;N;;;;; A62B;VAI SYLLABLE NDOLE DO;Lo;0;L;;;;;N;;;;; A640;CYRILLIC CAPITAL LETTER ZEMLYA;Lu;0;L;;;;;N;;;;A641; A641;CYRILLIC SMALL LETTER ZEMLYA;Ll;0;L;;;;;N;;;A640;;A640 A642;CYRILLIC CAPITAL LETTER DZELO;Lu;0;L;;;;;N;;;;A643; A643;CYRILLIC SMALL LETTER DZELO;Ll;0;L;;;;;N;;;A642;;A642 A644;CYRILLIC CAPITAL LETTER REVERSED DZE;Lu;0;L;;;;;N;;;;A645; A645;CYRILLIC SMALL LETTER REVERSED DZE;Ll;0;L;;;;;N;;;A644;;A644 A646;CYRILLIC CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;A647; A647;CYRILLIC SMALL LETTER IOTA;Ll;0;L;;;;;N;;;A646;;A646 A648;CYRILLIC CAPITAL LETTER DJERV;Lu;0;L;;;;;N;;;;A649; A649;CYRILLIC SMALL LETTER DJERV;Ll;0;L;;;;;N;;;A648;;A648 A64A;CYRILLIC CAPITAL LETTER MONOGRAPH UK;Lu;0;L;;;;;N;;;;A64B; A64B;CYRILLIC SMALL LETTER MONOGRAPH UK;Ll;0;L;;;;;N;;;A64A;;A64A A64C;CYRILLIC CAPITAL LETTER BROAD OMEGA;Lu;0;L;;;;;N;;;;A64D; A64D;CYRILLIC SMALL LETTER BROAD OMEGA;Ll;0;L;;;;;N;;;A64C;;A64C A64E;CYRILLIC CAPITAL LETTER NEUTRAL YER;Lu;0;L;;;;;N;;;;A64F; A64F;CYRILLIC SMALL LETTER NEUTRAL YER;Ll;0;L;;;;;N;;;A64E;;A64E A650;CYRILLIC CAPITAL LETTER YERU WITH BACK YER;Lu;0;L;;;;;N;;;;A651; A651;CYRILLIC SMALL LETTER YERU WITH BACK YER;Ll;0;L;;;;;N;;;A650;;A650 A652;CYRILLIC CAPITAL LETTER IOTIFIED YAT;Lu;0;L;;;;;N;;;;A653; A653;CYRILLIC SMALL LETTER IOTIFIED YAT;Ll;0;L;;;;;N;;;A652;;A652 A654;CYRILLIC CAPITAL LETTER REVERSED YU;Lu;0;L;;;;;N;;;;A655; A655;CYRILLIC SMALL LETTER REVERSED YU;Ll;0;L;;;;;N;;;A654;;A654 A656;CYRILLIC CAPITAL LETTER IOTIFIED A;Lu;0;L;;;;;N;;;;A657; A657;CYRILLIC SMALL LETTER IOTIFIED A;Ll;0;L;;;;;N;;;A656;;A656 A658;CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS;Lu;0;L;;;;;N;;;;A659; A659;CYRILLIC SMALL LETTER CLOSED LITTLE YUS;Ll;0;L;;;;;N;;;A658;;A658 A65A;CYRILLIC CAPITAL LETTER BLENDED YUS;Lu;0;L;;;;;N;;;;A65B; A65B;CYRILLIC SMALL LETTER BLENDED YUS;Ll;0;L;;;;;N;;;A65A;;A65A A65C;CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS;Lu;0;L;;;;;N;;;;A65D; A65D;CYRILLIC SMALL LETTER IOTIFIED CLOSED LITTLE YUS;Ll;0;L;;;;;N;;;A65C;;A65C A65E;CYRILLIC CAPITAL LETTER YN;Lu;0;L;;;;;N;;;;A65F; A65F;CYRILLIC SMALL LETTER YN;Ll;0;L;;;;;N;;;A65E;;A65E A660;CYRILLIC CAPITAL LETTER REVERSED TSE;Lu;0;L;;;;;N;;;;A661; A661;CYRILLIC SMALL LETTER REVERSED TSE;Ll;0;L;;;;;N;;;A660;;A660 A662;CYRILLIC CAPITAL LETTER SOFT DE;Lu;0;L;;;;;N;;;;A663; A663;CYRILLIC SMALL LETTER SOFT DE;Ll;0;L;;;;;N;;;A662;;A662 A664;CYRILLIC CAPITAL LETTER SOFT EL;Lu;0;L;;;;;N;;;;A665; A665;CYRILLIC SMALL LETTER SOFT EL;Ll;0;L;;;;;N;;;A664;;A664 A666;CYRILLIC CAPITAL LETTER SOFT EM;Lu;0;L;;;;;N;;;;A667; A667;CYRILLIC SMALL LETTER SOFT EM;Ll;0;L;;;;;N;;;A666;;A666 A668;CYRILLIC CAPITAL LETTER MONOCULAR O;Lu;0;L;;;;;N;;;;A669; A669;CYRILLIC SMALL LETTER MONOCULAR O;Ll;0;L;;;;;N;;;A668;;A668 A66A;CYRILLIC CAPITAL LETTER BINOCULAR O;Lu;0;L;;;;;N;;;;A66B; A66B;CYRILLIC SMALL LETTER BINOCULAR O;Ll;0;L;;;;;N;;;A66A;;A66A A66C;CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O;Lu;0;L;;;;;N;;;;A66D; A66D;CYRILLIC SMALL LETTER DOUBLE MONOCULAR O;Ll;0;L;;;;;N;;;A66C;;A66C A66E;CYRILLIC LETTER MULTIOCULAR O;Lo;0;L;;;;;N;;;;; A66F;COMBINING CYRILLIC VZMET;Mn;230;NSM;;;;;N;;;;; A670;COMBINING CYRILLIC TEN MILLIONS SIGN;Me;0;NSM;;;;;N;;;;; A671;COMBINING CYRILLIC HUNDRED MILLIONS SIGN;Me;0;NSM;;;;;N;;;;; A672;COMBINING CYRILLIC THOUSAND MILLIONS SIGN;Me;0;NSM;;;;;N;;;;; A673;SLAVONIC ASTERISK;Po;0;ON;;;;;N;;;;; A674;COMBINING CYRILLIC LETTER UKRAINIAN IE;Mn;230;NSM;;;;;N;;;;; A675;COMBINING CYRILLIC LETTER I;Mn;230;NSM;;;;;N;;;;; A676;COMBINING CYRILLIC LETTER YI;Mn;230;NSM;;;;;N;;;;; A677;COMBINING CYRILLIC LETTER U;Mn;230;NSM;;;;;N;;;;; A678;COMBINING CYRILLIC LETTER HARD SIGN;Mn;230;NSM;;;;;N;;;;; A679;COMBINING CYRILLIC LETTER YERU;Mn;230;NSM;;;;;N;;;;; A67A;COMBINING CYRILLIC LETTER SOFT SIGN;Mn;230;NSM;;;;;N;;;;; A67B;COMBINING CYRILLIC LETTER OMEGA;Mn;230;NSM;;;;;N;;;;; A67C;COMBINING CYRILLIC KAVYKA;Mn;230;NSM;;;;;N;;;;; A67D;COMBINING CYRILLIC PAYEROK;Mn;230;NSM;;;;;N;;;;; A67E;CYRILLIC KAVYKA;Po;0;ON;;;;;N;;;;; A67F;CYRILLIC PAYEROK;Lm;0;ON;;;;;N;;;;; A680;CYRILLIC CAPITAL LETTER DWE;Lu;0;L;;;;;N;;;;A681; A681;CYRILLIC SMALL LETTER DWE;Ll;0;L;;;;;N;;;A680;;A680 A682;CYRILLIC CAPITAL LETTER DZWE;Lu;0;L;;;;;N;;;;A683; A683;CYRILLIC SMALL LETTER DZWE;Ll;0;L;;;;;N;;;A682;;A682 A684;CYRILLIC CAPITAL LETTER ZHWE;Lu;0;L;;;;;N;;;;A685; A685;CYRILLIC SMALL LETTER ZHWE;Ll;0;L;;;;;N;;;A684;;A684 A686;CYRILLIC CAPITAL LETTER CCHE;Lu;0;L;;;;;N;;;;A687; A687;CYRILLIC SMALL LETTER CCHE;Ll;0;L;;;;;N;;;A686;;A686 A688;CYRILLIC CAPITAL LETTER DZZE;Lu;0;L;;;;;N;;;;A689; A689;CYRILLIC SMALL LETTER DZZE;Ll;0;L;;;;;N;;;A688;;A688 A68A;CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK;Lu;0;L;;;;;N;;;;A68B; A68B;CYRILLIC SMALL LETTER TE WITH MIDDLE HOOK;Ll;0;L;;;;;N;;;A68A;;A68A A68C;CYRILLIC CAPITAL LETTER TWE;Lu;0;L;;;;;N;;;;A68D; A68D;CYRILLIC SMALL LETTER TWE;Ll;0;L;;;;;N;;;A68C;;A68C A68E;CYRILLIC CAPITAL LETTER TSWE;Lu;0;L;;;;;N;;;;A68F; A68F;CYRILLIC SMALL LETTER TSWE;Ll;0;L;;;;;N;;;A68E;;A68E A690;CYRILLIC CAPITAL LETTER TSSE;Lu;0;L;;;;;N;;;;A691; A691;CYRILLIC SMALL LETTER TSSE;Ll;0;L;;;;;N;;;A690;;A690 A692;CYRILLIC CAPITAL LETTER TCHE;Lu;0;L;;;;;N;;;;A693; A693;CYRILLIC SMALL LETTER TCHE;Ll;0;L;;;;;N;;;A692;;A692 A694;CYRILLIC CAPITAL LETTER HWE;Lu;0;L;;;;;N;;;;A695; A695;CYRILLIC SMALL LETTER HWE;Ll;0;L;;;;;N;;;A694;;A694 A696;CYRILLIC CAPITAL LETTER SHWE;Lu;0;L;;;;;N;;;;A697; A697;CYRILLIC SMALL LETTER SHWE;Ll;0;L;;;;;N;;;A696;;A696 A698;CYRILLIC CAPITAL LETTER DOUBLE O;Lu;0;L;;;;;N;;;;A699; A699;CYRILLIC SMALL LETTER DOUBLE O;Ll;0;L;;;;;N;;;A698;;A698 A69A;CYRILLIC CAPITAL LETTER CROSSED O;Lu;0;L;;;;;N;;;;A69B; A69B;CYRILLIC SMALL LETTER CROSSED O;Ll;0;L;;;;;N;;;A69A;;A69A A69C;MODIFIER LETTER CYRILLIC HARD SIGN;Lm;0;L; 044A;;;;N;;;;; A69D;MODIFIER LETTER CYRILLIC SOFT SIGN;Lm;0;L; 044C;;;;N;;;;; A69E;COMBINING CYRILLIC LETTER EF;Mn;230;NSM;;;;;N;;;;; A69F;COMBINING CYRILLIC LETTER IOTIFIED E;Mn;230;NSM;;;;;N;;;;; A6A0;BAMUM LETTER A;Lo;0;L;;;;;N;;;;; A6A1;BAMUM LETTER KA;Lo;0;L;;;;;N;;;;; A6A2;BAMUM LETTER U;Lo;0;L;;;;;N;;;;; A6A3;BAMUM LETTER KU;Lo;0;L;;;;;N;;;;; A6A4;BAMUM LETTER EE;Lo;0;L;;;;;N;;;;; A6A5;BAMUM LETTER REE;Lo;0;L;;;;;N;;;;; A6A6;BAMUM LETTER TAE;Lo;0;L;;;;;N;;;;; A6A7;BAMUM LETTER O;Lo;0;L;;;;;N;;;;; A6A8;BAMUM LETTER NYI;Lo;0;L;;;;;N;;;;; A6A9;BAMUM LETTER I;Lo;0;L;;;;;N;;;;; A6AA;BAMUM LETTER LA;Lo;0;L;;;;;N;;;;; A6AB;BAMUM LETTER PA;Lo;0;L;;;;;N;;;;; A6AC;BAMUM LETTER RII;Lo;0;L;;;;;N;;;;; A6AD;BAMUM LETTER RIEE;Lo;0;L;;;;;N;;;;; A6AE;BAMUM LETTER LEEEE;Lo;0;L;;;;;N;;;;; A6AF;BAMUM LETTER MEEEE;Lo;0;L;;;;;N;;;;; A6B0;BAMUM LETTER TAA;Lo;0;L;;;;;N;;;;; A6B1;BAMUM LETTER NDAA;Lo;0;L;;;;;N;;;;; A6B2;BAMUM LETTER NJAEM;Lo;0;L;;;;;N;;;;; A6B3;BAMUM LETTER M;Lo;0;L;;;;;N;;;;; A6B4;BAMUM LETTER SUU;Lo;0;L;;;;;N;;;;; A6B5;BAMUM LETTER MU;Lo;0;L;;;;;N;;;;; A6B6;BAMUM LETTER SHII;Lo;0;L;;;;;N;;;;; A6B7;BAMUM LETTER SI;Lo;0;L;;;;;N;;;;; A6B8;BAMUM LETTER SHEUX;Lo;0;L;;;;;N;;;;; A6B9;BAMUM LETTER SEUX;Lo;0;L;;;;;N;;;;; A6BA;BAMUM LETTER KYEE;Lo;0;L;;;;;N;;;;; A6BB;BAMUM LETTER KET;Lo;0;L;;;;;N;;;;; A6BC;BAMUM LETTER NUAE;Lo;0;L;;;;;N;;;;; A6BD;BAMUM LETTER NU;Lo;0;L;;;;;N;;;;; A6BE;BAMUM LETTER NJUAE;Lo;0;L;;;;;N;;;;; A6BF;BAMUM LETTER YOQ;Lo;0;L;;;;;N;;;;; A6C0;BAMUM LETTER SHU;Lo;0;L;;;;;N;;;;; A6C1;BAMUM LETTER YUQ;Lo;0;L;;;;;N;;;;; A6C2;BAMUM LETTER YA;Lo;0;L;;;;;N;;;;; A6C3;BAMUM LETTER NSHA;Lo;0;L;;;;;N;;;;; A6C4;BAMUM LETTER KEUX;Lo;0;L;;;;;N;;;;; A6C5;BAMUM LETTER PEUX;Lo;0;L;;;;;N;;;;; A6C6;BAMUM LETTER NJEE;Lo;0;L;;;;;N;;;;; A6C7;BAMUM LETTER NTEE;Lo;0;L;;;;;N;;;;; A6C8;BAMUM LETTER PUE;Lo;0;L;;;;;N;;;;; A6C9;BAMUM LETTER WUE;Lo;0;L;;;;;N;;;;; A6CA;BAMUM LETTER PEE;Lo;0;L;;;;;N;;;;; A6CB;BAMUM LETTER FEE;Lo;0;L;;;;;N;;;;; A6CC;BAMUM LETTER RU;Lo;0;L;;;;;N;;;;; A6CD;BAMUM LETTER LU;Lo;0;L;;;;;N;;;;; A6CE;BAMUM LETTER MI;Lo;0;L;;;;;N;;;;; A6CF;BAMUM LETTER NI;Lo;0;L;;;;;N;;;;; A6D0;BAMUM LETTER REUX;Lo;0;L;;;;;N;;;;; A6D1;BAMUM LETTER RAE;Lo;0;L;;;;;N;;;;; A6D2;BAMUM LETTER KEN;Lo;0;L;;;;;N;;;;; A6D3;BAMUM LETTER NGKWAEN;Lo;0;L;;;;;N;;;;; A6D4;BAMUM LETTER NGGA;Lo;0;L;;;;;N;;;;; A6D5;BAMUM LETTER NGA;Lo;0;L;;;;;N;;;;; A6D6;BAMUM LETTER SHO;Lo;0;L;;;;;N;;;;; A6D7;BAMUM LETTER PUAE;Lo;0;L;;;;;N;;;;; A6D8;BAMUM LETTER FU;Lo;0;L;;;;;N;;;;; A6D9;BAMUM LETTER FOM;Lo;0;L;;;;;N;;;;; A6DA;BAMUM LETTER WA;Lo;0;L;;;;;N;;;;; A6DB;BAMUM LETTER NA;Lo;0;L;;;;;N;;;;; A6DC;BAMUM LETTER LI;Lo;0;L;;;;;N;;;;; A6DD;BAMUM LETTER PI;Lo;0;L;;;;;N;;;;; A6DE;BAMUM LETTER LOQ;Lo;0;L;;;;;N;;;;; A6DF;BAMUM LETTER KO;Lo;0;L;;;;;N;;;;; A6E0;BAMUM LETTER MBEN;Lo;0;L;;;;;N;;;;; A6E1;BAMUM LETTER REN;Lo;0;L;;;;;N;;;;; A6E2;BAMUM LETTER MEN;Lo;0;L;;;;;N;;;;; A6E3;BAMUM LETTER MA;Lo;0;L;;;;;N;;;;; A6E4;BAMUM LETTER TI;Lo;0;L;;;;;N;;;;; A6E5;BAMUM LETTER KI;Lo;0;L;;;;;N;;;;; A6E6;BAMUM LETTER MO;Nl;0;L;;;;1;N;;;;; A6E7;BAMUM LETTER MBAA;Nl;0;L;;;;2;N;;;;; A6E8;BAMUM LETTER TET;Nl;0;L;;;;3;N;;;;; A6E9;BAMUM LETTER KPA;Nl;0;L;;;;4;N;;;;; A6EA;BAMUM LETTER TEN;Nl;0;L;;;;5;N;;;;; A6EB;BAMUM LETTER NTUU;Nl;0;L;;;;6;N;;;;; A6EC;BAMUM LETTER SAMBA;Nl;0;L;;;;7;N;;;;; A6ED;BAMUM LETTER FAAMAE;Nl;0;L;;;;8;N;;;;; A6EE;BAMUM LETTER KOVUU;Nl;0;L;;;;9;N;;;;; A6EF;BAMUM LETTER KOGHOM;Nl;0;L;;;;0;N;;;;; A6F0;BAMUM COMBINING MARK KOQNDON;Mn;230;NSM;;;;;N;;;;; A6F1;BAMUM COMBINING MARK TUKWENTIS;Mn;230;NSM;;;;;N;;;;; A6F2;BAMUM NJAEMLI;Po;0;L;;;;;N;;;;; A6F3;BAMUM FULL STOP;Po;0;L;;;;;N;;;;; A6F4;BAMUM COLON;Po;0;L;;;;;N;;;;; A6F5;BAMUM COMMA;Po;0;L;;;;;N;;;;; A6F6;BAMUM SEMICOLON;Po;0;L;;;;;N;;;;; A6F7;BAMUM QUESTION MARK;Po;0;L;;;;;N;;;;; A700;MODIFIER LETTER CHINESE TONE YIN PING;Sk;0;ON;;;;;N;;;;; A701;MODIFIER LETTER CHINESE TONE YANG PING;Sk;0;ON;;;;;N;;;;; A702;MODIFIER LETTER CHINESE TONE YIN SHANG;Sk;0;ON;;;;;N;;;;; A703;MODIFIER LETTER CHINESE TONE YANG SHANG;Sk;0;ON;;;;;N;;;;; A704;MODIFIER LETTER CHINESE TONE YIN QU;Sk;0;ON;;;;;N;;;;; A705;MODIFIER LETTER CHINESE TONE YANG QU;Sk;0;ON;;;;;N;;;;; A706;MODIFIER LETTER CHINESE TONE YIN RU;Sk;0;ON;;;;;N;;;;; A707;MODIFIER LETTER CHINESE TONE YANG RU;Sk;0;ON;;;;;N;;;;; A708;MODIFIER LETTER EXTRA-HIGH DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;; A709;MODIFIER LETTER HIGH DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;; A70A;MODIFIER LETTER MID DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;; A70B;MODIFIER LETTER LOW DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;; A70C;MODIFIER LETTER EXTRA-LOW DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;; A70D;MODIFIER LETTER EXTRA-HIGH DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; A70E;MODIFIER LETTER HIGH DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; A70F;MODIFIER LETTER MID DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; A710;MODIFIER LETTER LOW DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; A711;MODIFIER LETTER EXTRA-LOW DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; A712;MODIFIER LETTER EXTRA-HIGH LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; A713;MODIFIER LETTER HIGH LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; A714;MODIFIER LETTER MID LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; A715;MODIFIER LETTER LOW LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; A716;MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; A717;MODIFIER LETTER DOT VERTICAL BAR;Lm;0;ON;;;;;N;;;;; A718;MODIFIER LETTER DOT SLASH;Lm;0;ON;;;;;N;;;;; A719;MODIFIER LETTER DOT HORIZONTAL BAR;Lm;0;ON;;;;;N;;;;; A71A;MODIFIER LETTER LOWER RIGHT CORNER ANGLE;Lm;0;ON;;;;;N;;;;; A71B;MODIFIER LETTER RAISED UP ARROW;Lm;0;ON;;;;;N;;;;; A71C;MODIFIER LETTER RAISED DOWN ARROW;Lm;0;ON;;;;;N;;;;; A71D;MODIFIER LETTER RAISED EXCLAMATION MARK;Lm;0;ON;;;;;N;;;;; A71E;MODIFIER LETTER RAISED INVERTED EXCLAMATION MARK;Lm;0;ON;;;;;N;;;;; A71F;MODIFIER LETTER LOW INVERTED EXCLAMATION MARK;Lm;0;ON;;;;;N;;;;; A720;MODIFIER LETTER STRESS AND HIGH TONE;Sk;0;ON;;;;;N;;;;; A721;MODIFIER LETTER STRESS AND LOW TONE;Sk;0;ON;;;;;N;;;;; A722;LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF;Lu;0;L;;;;;N;;;;A723; A723;LATIN SMALL LETTER EGYPTOLOGICAL ALEF;Ll;0;L;;;;;N;;;A722;;A722 A724;LATIN CAPITAL LETTER EGYPTOLOGICAL AIN;Lu;0;L;;;;;N;;;;A725; A725;LATIN SMALL LETTER EGYPTOLOGICAL AIN;Ll;0;L;;;;;N;;;A724;;A724 A726;LATIN CAPITAL LETTER HENG;Lu;0;L;;;;;N;;;;A727; A727;LATIN SMALL LETTER HENG;Ll;0;L;;;;;N;;;A726;;A726 A728;LATIN CAPITAL LETTER TZ;Lu;0;L;;;;;N;;;;A729; A729;LATIN SMALL LETTER TZ;Ll;0;L;;;;;N;;;A728;;A728 A72A;LATIN CAPITAL LETTER TRESILLO;Lu;0;L;;;;;N;;;;A72B; A72B;LATIN SMALL LETTER TRESILLO;Ll;0;L;;;;;N;;;A72A;;A72A A72C;LATIN CAPITAL LETTER CUATRILLO;Lu;0;L;;;;;N;;;;A72D; A72D;LATIN SMALL LETTER CUATRILLO;Ll;0;L;;;;;N;;;A72C;;A72C A72E;LATIN CAPITAL LETTER CUATRILLO WITH COMMA;Lu;0;L;;;;;N;;;;A72F; A72F;LATIN SMALL LETTER CUATRILLO WITH COMMA;Ll;0;L;;;;;N;;;A72E;;A72E A730;LATIN LETTER SMALL CAPITAL F;Ll;0;L;;;;;N;;;;; A731;LATIN LETTER SMALL CAPITAL S;Ll;0;L;;;;;N;;;;; A732;LATIN CAPITAL LETTER AA;Lu;0;L;;;;;N;;;;A733; A733;LATIN SMALL LETTER AA;Ll;0;L;;;;;N;;;A732;;A732 A734;LATIN CAPITAL LETTER AO;Lu;0;L;;;;;N;;;;A735; A735;LATIN SMALL LETTER AO;Ll;0;L;;;;;N;;;A734;;A734 A736;LATIN CAPITAL LETTER AU;Lu;0;L;;;;;N;;;;A737; A737;LATIN SMALL LETTER AU;Ll;0;L;;;;;N;;;A736;;A736 A738;LATIN CAPITAL LETTER AV;Lu;0;L;;;;;N;;;;A739; A739;LATIN SMALL LETTER AV;Ll;0;L;;;;;N;;;A738;;A738 A73A;LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR;Lu;0;L;;;;;N;;;;A73B; A73B;LATIN SMALL LETTER AV WITH HORIZONTAL BAR;Ll;0;L;;;;;N;;;A73A;;A73A A73C;LATIN CAPITAL LETTER AY;Lu;0;L;;;;;N;;;;A73D; A73D;LATIN SMALL LETTER AY;Ll;0;L;;;;;N;;;A73C;;A73C A73E;LATIN CAPITAL LETTER REVERSED C WITH DOT;Lu;0;L;;;;;N;;;;A73F; A73F;LATIN SMALL LETTER REVERSED C WITH DOT;Ll;0;L;;;;;N;;;A73E;;A73E A740;LATIN CAPITAL LETTER K WITH STROKE;Lu;0;L;;;;;N;;;;A741; A741;LATIN SMALL LETTER K WITH STROKE;Ll;0;L;;;;;N;;;A740;;A740 A742;LATIN CAPITAL LETTER K WITH DIAGONAL STROKE;Lu;0;L;;;;;N;;;;A743; A743;LATIN SMALL LETTER K WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;A742;;A742 A744;LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE;Lu;0;L;;;;;N;;;;A745; A745;LATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKE;Ll;0;L;;;;;N;;;A744;;A744 A746;LATIN CAPITAL LETTER BROKEN L;Lu;0;L;;;;;N;;;;A747; A747;LATIN SMALL LETTER BROKEN L;Ll;0;L;;;;;N;;;A746;;A746 A748;LATIN CAPITAL LETTER L WITH HIGH STROKE;Lu;0;L;;;;;N;;;;A749; A749;LATIN SMALL LETTER L WITH HIGH STROKE;Ll;0;L;;;;;N;;;A748;;A748 A74A;LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY;Lu;0;L;;;;;N;;;;A74B; A74B;LATIN SMALL LETTER O WITH LONG STROKE OVERLAY;Ll;0;L;;;;;N;;;A74A;;A74A A74C;LATIN CAPITAL LETTER O WITH LOOP;Lu;0;L;;;;;N;;;;A74D; A74D;LATIN SMALL LETTER O WITH LOOP;Ll;0;L;;;;;N;;;A74C;;A74C A74E;LATIN CAPITAL LETTER OO;Lu;0;L;;;;;N;;;;A74F; A74F;LATIN SMALL LETTER OO;Ll;0;L;;;;;N;;;A74E;;A74E A750;LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER;Lu;0;L;;;;;N;;;;A751; A751;LATIN SMALL LETTER P WITH STROKE THROUGH DESCENDER;Ll;0;L;;;;;N;;;A750;;A750 A752;LATIN CAPITAL LETTER P WITH FLOURISH;Lu;0;L;;;;;N;;;;A753; A753;LATIN SMALL LETTER P WITH FLOURISH;Ll;0;L;;;;;N;;;A752;;A752 A754;LATIN CAPITAL LETTER P WITH SQUIRREL TAIL;Lu;0;L;;;;;N;;;;A755; A755;LATIN SMALL LETTER P WITH SQUIRREL TAIL;Ll;0;L;;;;;N;;;A754;;A754 A756;LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER;Lu;0;L;;;;;N;;;;A757; A757;LATIN SMALL LETTER Q WITH STROKE THROUGH DESCENDER;Ll;0;L;;;;;N;;;A756;;A756 A758;LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE;Lu;0;L;;;;;N;;;;A759; A759;LATIN SMALL LETTER Q WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;A758;;A758 A75A;LATIN CAPITAL LETTER R ROTUNDA;Lu;0;L;;;;;N;;;;A75B; A75B;LATIN SMALL LETTER R ROTUNDA;Ll;0;L;;;;;N;;;A75A;;A75A A75C;LATIN CAPITAL LETTER RUM ROTUNDA;Lu;0;L;;;;;N;;;;A75D; A75D;LATIN SMALL LETTER RUM ROTUNDA;Ll;0;L;;;;;N;;;A75C;;A75C A75E;LATIN CAPITAL LETTER V WITH DIAGONAL STROKE;Lu;0;L;;;;;N;;;;A75F; A75F;LATIN SMALL LETTER V WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;A75E;;A75E A760;LATIN CAPITAL LETTER VY;Lu;0;L;;;;;N;;;;A761; A761;LATIN SMALL LETTER VY;Ll;0;L;;;;;N;;;A760;;A760 A762;LATIN CAPITAL LETTER VISIGOTHIC Z;Lu;0;L;;;;;N;;;;A763; A763;LATIN SMALL LETTER VISIGOTHIC Z;Ll;0;L;;;;;N;;;A762;;A762 A764;LATIN CAPITAL LETTER THORN WITH STROKE;Lu;0;L;;;;;N;;;;A765; A765;LATIN SMALL LETTER THORN WITH STROKE;Ll;0;L;;;;;N;;;A764;;A764 A766;LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER;Lu;0;L;;;;;N;;;;A767; A767;LATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDER;Ll;0;L;;;;;N;;;A766;;A766 A768;LATIN CAPITAL LETTER VEND;Lu;0;L;;;;;N;;;;A769; A769;LATIN SMALL LETTER VEND;Ll;0;L;;;;;N;;;A768;;A768 A76A;LATIN CAPITAL LETTER ET;Lu;0;L;;;;;N;;;;A76B; A76B;LATIN SMALL LETTER ET;Ll;0;L;;;;;N;;;A76A;;A76A A76C;LATIN CAPITAL LETTER IS;Lu;0;L;;;;;N;;;;A76D; A76D;LATIN SMALL LETTER IS;Ll;0;L;;;;;N;;;A76C;;A76C A76E;LATIN CAPITAL LETTER CON;Lu;0;L;;;;;N;;;;A76F; A76F;LATIN SMALL LETTER CON;Ll;0;L;;;;;N;;;A76E;;A76E A770;MODIFIER LETTER US;Lm;0;L; A76F;;;;N;;;;; A771;LATIN SMALL LETTER DUM;Ll;0;L;;;;;N;;;;; A772;LATIN SMALL LETTER LUM;Ll;0;L;;;;;N;;;;; A773;LATIN SMALL LETTER MUM;Ll;0;L;;;;;N;;;;; A774;LATIN SMALL LETTER NUM;Ll;0;L;;;;;N;;;;; A775;LATIN SMALL LETTER RUM;Ll;0;L;;;;;N;;;;; A776;LATIN LETTER SMALL CAPITAL RUM;Ll;0;L;;;;;N;;;;; A777;LATIN SMALL LETTER TUM;Ll;0;L;;;;;N;;;;; A778;LATIN SMALL LETTER UM;Ll;0;L;;;;;N;;;;; A779;LATIN CAPITAL LETTER INSULAR D;Lu;0;L;;;;;N;;;;A77A; A77A;LATIN SMALL LETTER INSULAR D;Ll;0;L;;;;;N;;;A779;;A779 A77B;LATIN CAPITAL LETTER INSULAR F;Lu;0;L;;;;;N;;;;A77C; A77C;LATIN SMALL LETTER INSULAR F;Ll;0;L;;;;;N;;;A77B;;A77B A77D;LATIN CAPITAL LETTER INSULAR G;Lu;0;L;;;;;N;;;;1D79; A77E;LATIN CAPITAL LETTER TURNED INSULAR G;Lu;0;L;;;;;N;;;;A77F; A77F;LATIN SMALL LETTER TURNED INSULAR G;Ll;0;L;;;;;N;;;A77E;;A77E A780;LATIN CAPITAL LETTER TURNED L;Lu;0;L;;;;;N;;;;A781; A781;LATIN SMALL LETTER TURNED L;Ll;0;L;;;;;N;;;A780;;A780 A782;LATIN CAPITAL LETTER INSULAR R;Lu;0;L;;;;;N;;;;A783; A783;LATIN SMALL LETTER INSULAR R;Ll;0;L;;;;;N;;;A782;;A782 A784;LATIN CAPITAL LETTER INSULAR S;Lu;0;L;;;;;N;;;;A785; A785;LATIN SMALL LETTER INSULAR S;Ll;0;L;;;;;N;;;A784;;A784 A786;LATIN CAPITAL LETTER INSULAR T;Lu;0;L;;;;;N;;;;A787; A787;LATIN SMALL LETTER INSULAR T;Ll;0;L;;;;;N;;;A786;;A786 A788;MODIFIER LETTER LOW CIRCUMFLEX ACCENT;Lm;0;ON;;;;;N;;;;; A789;MODIFIER LETTER COLON;Sk;0;L;;;;;N;;;;; A78A;MODIFIER LETTER SHORT EQUALS SIGN;Sk;0;L;;;;;N;;;;; A78B;LATIN CAPITAL LETTER SALTILLO;Lu;0;L;;;;;N;;;;A78C; A78C;LATIN SMALL LETTER SALTILLO;Ll;0;L;;;;;N;;;A78B;;A78B A78D;LATIN CAPITAL LETTER TURNED H;Lu;0;L;;;;;N;;;;0265; A78E;LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT;Ll;0;L;;;;;N;;;;; A78F;LATIN LETTER SINOLOGICAL DOT;Lo;0;L;;;;;N;;;;; A790;LATIN CAPITAL LETTER N WITH DESCENDER;Lu;0;L;;;;;N;;;;A791; A791;LATIN SMALL LETTER N WITH DESCENDER;Ll;0;L;;;;;N;;;A790;;A790 A792;LATIN CAPITAL LETTER C WITH BAR;Lu;0;L;;;;;N;;;;A793; A793;LATIN SMALL LETTER C WITH BAR;Ll;0;L;;;;;N;;;A792;;A792 A794;LATIN SMALL LETTER C WITH PALATAL HOOK;Ll;0;L;;;;;N;;;A7C4;;A7C4 A795;LATIN SMALL LETTER H WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; A796;LATIN CAPITAL LETTER B WITH FLOURISH;Lu;0;L;;;;;N;;;;A797; A797;LATIN SMALL LETTER B WITH FLOURISH;Ll;0;L;;;;;N;;;A796;;A796 A798;LATIN CAPITAL LETTER F WITH STROKE;Lu;0;L;;;;;N;;;;A799; A799;LATIN SMALL LETTER F WITH STROKE;Ll;0;L;;;;;N;;;A798;;A798 A79A;LATIN CAPITAL LETTER VOLAPUK AE;Lu;0;L;;;;;N;;;;A79B; A79B;LATIN SMALL LETTER VOLAPUK AE;Ll;0;L;;;;;N;;;A79A;;A79A A79C;LATIN CAPITAL LETTER VOLAPUK OE;Lu;0;L;;;;;N;;;;A79D; A79D;LATIN SMALL LETTER VOLAPUK OE;Ll;0;L;;;;;N;;;A79C;;A79C A79E;LATIN CAPITAL LETTER VOLAPUK UE;Lu;0;L;;;;;N;;;;A79F; A79F;LATIN SMALL LETTER VOLAPUK UE;Ll;0;L;;;;;N;;;A79E;;A79E A7A0;LATIN CAPITAL LETTER G WITH OBLIQUE STROKE;Lu;0;L;;;;;N;;;;A7A1; A7A1;LATIN SMALL LETTER G WITH OBLIQUE STROKE;Ll;0;L;;;;;N;;;A7A0;;A7A0 A7A2;LATIN CAPITAL LETTER K WITH OBLIQUE STROKE;Lu;0;L;;;;;N;;;;A7A3; A7A3;LATIN SMALL LETTER K WITH OBLIQUE STROKE;Ll;0;L;;;;;N;;;A7A2;;A7A2 A7A4;LATIN CAPITAL LETTER N WITH OBLIQUE STROKE;Lu;0;L;;;;;N;;;;A7A5; A7A5;LATIN SMALL LETTER N WITH OBLIQUE STROKE;Ll;0;L;;;;;N;;;A7A4;;A7A4 A7A6;LATIN CAPITAL LETTER R WITH OBLIQUE STROKE;Lu;0;L;;;;;N;;;;A7A7; A7A7;LATIN SMALL LETTER R WITH OBLIQUE STROKE;Ll;0;L;;;;;N;;;A7A6;;A7A6 A7A8;LATIN CAPITAL LETTER S WITH OBLIQUE STROKE;Lu;0;L;;;;;N;;;;A7A9; A7A9;LATIN SMALL LETTER S WITH OBLIQUE STROKE;Ll;0;L;;;;;N;;;A7A8;;A7A8 A7AA;LATIN CAPITAL LETTER H WITH HOOK;Lu;0;L;;;;;N;;;;0266; A7AB;LATIN CAPITAL LETTER REVERSED OPEN E;Lu;0;L;;;;;N;;;;025C; A7AC;LATIN CAPITAL LETTER SCRIPT G;Lu;0;L;;;;;N;;;;0261; A7AD;LATIN CAPITAL LETTER L WITH BELT;Lu;0;L;;;;;N;;;;026C; A7AE;LATIN CAPITAL LETTER SMALL CAPITAL I;Lu;0;L;;;;;N;;;;026A; A7AF;LATIN LETTER SMALL CAPITAL Q;Ll;0;L;;;;;N;;;;; A7B0;LATIN CAPITAL LETTER TURNED K;Lu;0;L;;;;;N;;;;029E; A7B1;LATIN CAPITAL LETTER TURNED T;Lu;0;L;;;;;N;;;;0287; A7B2;LATIN CAPITAL LETTER J WITH CROSSED-TAIL;Lu;0;L;;;;;N;;;;029D; A7B3;LATIN CAPITAL LETTER CHI;Lu;0;L;;;;;N;;;;AB53; A7B4;LATIN CAPITAL LETTER BETA;Lu;0;L;;;;;N;;;;A7B5; A7B5;LATIN SMALL LETTER BETA;Ll;0;L;;;;;N;;;A7B4;;A7B4 A7B6;LATIN CAPITAL LETTER OMEGA;Lu;0;L;;;;;N;;;;A7B7; A7B7;LATIN SMALL LETTER OMEGA;Ll;0;L;;;;;N;;;A7B6;;A7B6 A7B8;LATIN CAPITAL LETTER U WITH STROKE;Lu;0;L;;;;;N;;;;A7B9; A7B9;LATIN SMALL LETTER U WITH STROKE;Ll;0;L;;;;;N;;;A7B8;;A7B8 A7BA;LATIN CAPITAL LETTER GLOTTAL A;Lu;0;L;;;;;N;;;;A7BB; A7BB;LATIN SMALL LETTER GLOTTAL A;Ll;0;L;;;;;N;;;A7BA;;A7BA A7BC;LATIN CAPITAL LETTER GLOTTAL I;Lu;0;L;;;;;N;;;;A7BD; A7BD;LATIN SMALL LETTER GLOTTAL I;Ll;0;L;;;;;N;;;A7BC;;A7BC A7BE;LATIN CAPITAL LETTER GLOTTAL U;Lu;0;L;;;;;N;;;;A7BF; A7BF;LATIN SMALL LETTER GLOTTAL U;Ll;0;L;;;;;N;;;A7BE;;A7BE A7C0;LATIN CAPITAL LETTER OLD POLISH O;Lu;0;L;;;;;N;;;;A7C1; A7C1;LATIN SMALL LETTER OLD POLISH O;Ll;0;L;;;;;N;;;A7C0;;A7C0 A7C2;LATIN CAPITAL LETTER ANGLICANA W;Lu;0;L;;;;;N;;;;A7C3; A7C3;LATIN SMALL LETTER ANGLICANA W;Ll;0;L;;;;;N;;;A7C2;;A7C2 A7C4;LATIN CAPITAL LETTER C WITH PALATAL HOOK;Lu;0;L;;;;;N;;;;A794; A7C5;LATIN CAPITAL LETTER S WITH HOOK;Lu;0;L;;;;;N;;;;0282; A7C6;LATIN CAPITAL LETTER Z WITH PALATAL HOOK;Lu;0;L;;;;;N;;;;1D8E; A7C7;LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY;Lu;0;L;;;;;N;;;;A7C8; A7C8;LATIN SMALL LETTER D WITH SHORT STROKE OVERLAY;Ll;0;L;;;;;N;;;A7C7;;A7C7 A7C9;LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY;Lu;0;L;;;;;N;;;;A7CA; A7CA;LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY;Ll;0;L;;;;;N;;;A7C9;;A7C9 A7D0;LATIN CAPITAL LETTER CLOSED INSULAR G;Lu;0;L;;;;;N;;;;A7D1; A7D1;LATIN SMALL LETTER CLOSED INSULAR G;Ll;0;L;;;;;N;;;A7D0;;A7D0 A7D3;LATIN SMALL LETTER DOUBLE THORN;Ll;0;L;;;;;N;;;;; A7D5;LATIN SMALL LETTER DOUBLE WYNN;Ll;0;L;;;;;N;;;;; A7D6;LATIN CAPITAL LETTER MIDDLE SCOTS S;Lu;0;L;;;;;N;;;;A7D7; A7D7;LATIN SMALL LETTER MIDDLE SCOTS S;Ll;0;L;;;;;N;;;A7D6;;A7D6 A7D8;LATIN CAPITAL LETTER SIGMOID S;Lu;0;L;;;;;N;;;;A7D9; A7D9;LATIN SMALL LETTER SIGMOID S;Ll;0;L;;;;;N;;;A7D8;;A7D8 A7F2;MODIFIER LETTER CAPITAL C;Lm;0;L; 0043;;;;N;;;;; A7F3;MODIFIER LETTER CAPITAL F;Lm;0;L; 0046;;;;N;;;;; A7F4;MODIFIER LETTER CAPITAL Q;Lm;0;L; 0051;;;;N;;;;; A7F5;LATIN CAPITAL LETTER REVERSED HALF H;Lu;0;L;;;;;N;;;;A7F6; A7F6;LATIN SMALL LETTER REVERSED HALF H;Ll;0;L;;;;;N;;;A7F5;;A7F5 A7F7;LATIN EPIGRAPHIC LETTER SIDEWAYS I;Lo;0;L;;;;;N;;;;; A7F8;MODIFIER LETTER CAPITAL H WITH STROKE;Lm;0;L; 0126;;;;N;;;;; A7F9;MODIFIER LETTER SMALL LIGATURE OE;Lm;0;L; 0153;;;;N;;;;; A7FA;LATIN LETTER SMALL CAPITAL TURNED M;Ll;0;L;;;;;N;;;;; A7FB;LATIN EPIGRAPHIC LETTER REVERSED F;Lo;0;L;;;;;N;;;;; A7FC;LATIN EPIGRAPHIC LETTER REVERSED P;Lo;0;L;;;;;N;;;;; A7FD;LATIN EPIGRAPHIC LETTER INVERTED M;Lo;0;L;;;;;N;;;;; A7FE;LATIN EPIGRAPHIC LETTER I LONGA;Lo;0;L;;;;;N;;;;; A7FF;LATIN EPIGRAPHIC LETTER ARCHAIC M;Lo;0;L;;;;;N;;;;; A800;SYLOTI NAGRI LETTER A;Lo;0;L;;;;;N;;;;; A801;SYLOTI NAGRI LETTER I;Lo;0;L;;;;;N;;;;; A802;SYLOTI NAGRI SIGN DVISVARA;Mn;0;NSM;;;;;N;;;;; A803;SYLOTI NAGRI LETTER U;Lo;0;L;;;;;N;;;;; A804;SYLOTI NAGRI LETTER E;Lo;0;L;;;;;N;;;;; A805;SYLOTI NAGRI LETTER O;Lo;0;L;;;;;N;;;;; A806;SYLOTI NAGRI SIGN HASANTA;Mn;9;NSM;;;;;N;;;;; A807;SYLOTI NAGRI LETTER KO;Lo;0;L;;;;;N;;;;; A808;SYLOTI NAGRI LETTER KHO;Lo;0;L;;;;;N;;;;; A809;SYLOTI NAGRI LETTER GO;Lo;0;L;;;;;N;;;;; A80A;SYLOTI NAGRI LETTER GHO;Lo;0;L;;;;;N;;;;; A80B;SYLOTI NAGRI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; A80C;SYLOTI NAGRI LETTER CO;Lo;0;L;;;;;N;;;;; A80D;SYLOTI NAGRI LETTER CHO;Lo;0;L;;;;;N;;;;; A80E;SYLOTI NAGRI LETTER JO;Lo;0;L;;;;;N;;;;; A80F;SYLOTI NAGRI LETTER JHO;Lo;0;L;;;;;N;;;;; A810;SYLOTI NAGRI LETTER TTO;Lo;0;L;;;;;N;;;;; A811;SYLOTI NAGRI LETTER TTHO;Lo;0;L;;;;;N;;;;; A812;SYLOTI NAGRI LETTER DDO;Lo;0;L;;;;;N;;;;; A813;SYLOTI NAGRI LETTER DDHO;Lo;0;L;;;;;N;;;;; A814;SYLOTI NAGRI LETTER TO;Lo;0;L;;;;;N;;;;; A815;SYLOTI NAGRI LETTER THO;Lo;0;L;;;;;N;;;;; A816;SYLOTI NAGRI LETTER DO;Lo;0;L;;;;;N;;;;; A817;SYLOTI NAGRI LETTER DHO;Lo;0;L;;;;;N;;;;; A818;SYLOTI NAGRI LETTER NO;Lo;0;L;;;;;N;;;;; A819;SYLOTI NAGRI LETTER PO;Lo;0;L;;;;;N;;;;; A81A;SYLOTI NAGRI LETTER PHO;Lo;0;L;;;;;N;;;;; A81B;SYLOTI NAGRI LETTER BO;Lo;0;L;;;;;N;;;;; A81C;SYLOTI NAGRI LETTER BHO;Lo;0;L;;;;;N;;;;; A81D;SYLOTI NAGRI LETTER MO;Lo;0;L;;;;;N;;;;; A81E;SYLOTI NAGRI LETTER RO;Lo;0;L;;;;;N;;;;; A81F;SYLOTI NAGRI LETTER LO;Lo;0;L;;;;;N;;;;; A820;SYLOTI NAGRI LETTER RRO;Lo;0;L;;;;;N;;;;; A821;SYLOTI NAGRI LETTER SO;Lo;0;L;;;;;N;;;;; A822;SYLOTI NAGRI LETTER HO;Lo;0;L;;;;;N;;;;; A823;SYLOTI NAGRI VOWEL SIGN A;Mc;0;L;;;;;N;;;;; A824;SYLOTI NAGRI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; A825;SYLOTI NAGRI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; A826;SYLOTI NAGRI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; A827;SYLOTI NAGRI VOWEL SIGN OO;Mc;0;L;;;;;N;;;;; A828;SYLOTI NAGRI POETRY MARK-1;So;0;ON;;;;;N;;;;; A829;SYLOTI NAGRI POETRY MARK-2;So;0;ON;;;;;N;;;;; A82A;SYLOTI NAGRI POETRY MARK-3;So;0;ON;;;;;N;;;;; A82B;SYLOTI NAGRI POETRY MARK-4;So;0;ON;;;;;N;;;;; A82C;SYLOTI NAGRI SIGN ALTERNATE HASANTA;Mn;9;NSM;;;;;N;;;;; A830;NORTH INDIC FRACTION ONE QUARTER;No;0;L;;;;1/4;N;;;;; A831;NORTH INDIC FRACTION ONE HALF;No;0;L;;;;1/2;N;;;;; A832;NORTH INDIC FRACTION THREE QUARTERS;No;0;L;;;;3/4;N;;;;; A833;NORTH INDIC FRACTION ONE SIXTEENTH;No;0;L;;;;1/16;N;;;;; A834;NORTH INDIC FRACTION ONE EIGHTH;No;0;L;;;;1/8;N;;;;; A835;NORTH INDIC FRACTION THREE SIXTEENTHS;No;0;L;;;;3/16;N;;;;; A836;NORTH INDIC QUARTER MARK;So;0;L;;;;;N;;;;; A837;NORTH INDIC PLACEHOLDER MARK;So;0;L;;;;;N;;;;; A838;NORTH INDIC RUPEE MARK;Sc;0;ET;;;;;N;;;;; A839;NORTH INDIC QUANTITY MARK;So;0;ET;;;;;N;;;;; A840;PHAGS-PA LETTER KA;Lo;0;L;;;;;N;;;;; A841;PHAGS-PA LETTER KHA;Lo;0;L;;;;;N;;;;; A842;PHAGS-PA LETTER GA;Lo;0;L;;;;;N;;;;; A843;PHAGS-PA LETTER NGA;Lo;0;L;;;;;N;;;;; A844;PHAGS-PA LETTER CA;Lo;0;L;;;;;N;;;;; A845;PHAGS-PA LETTER CHA;Lo;0;L;;;;;N;;;;; A846;PHAGS-PA LETTER JA;Lo;0;L;;;;;N;;;;; A847;PHAGS-PA LETTER NYA;Lo;0;L;;;;;N;;;;; A848;PHAGS-PA LETTER TA;Lo;0;L;;;;;N;;;;; A849;PHAGS-PA LETTER THA;Lo;0;L;;;;;N;;;;; A84A;PHAGS-PA LETTER DA;Lo;0;L;;;;;N;;;;; A84B;PHAGS-PA LETTER NA;Lo;0;L;;;;;N;;;;; A84C;PHAGS-PA LETTER PA;Lo;0;L;;;;;N;;;;; A84D;PHAGS-PA LETTER PHA;Lo;0;L;;;;;N;;;;; A84E;PHAGS-PA LETTER BA;Lo;0;L;;;;;N;;;;; A84F;PHAGS-PA LETTER MA;Lo;0;L;;;;;N;;;;; A850;PHAGS-PA LETTER TSA;Lo;0;L;;;;;N;;;;; A851;PHAGS-PA LETTER TSHA;Lo;0;L;;;;;N;;;;; A852;PHAGS-PA LETTER DZA;Lo;0;L;;;;;N;;;;; A853;PHAGS-PA LETTER WA;Lo;0;L;;;;;N;;;;; A854;PHAGS-PA LETTER ZHA;Lo;0;L;;;;;N;;;;; A855;PHAGS-PA LETTER ZA;Lo;0;L;;;;;N;;;;; A856;PHAGS-PA LETTER SMALL A;Lo;0;L;;;;;N;;;;; A857;PHAGS-PA LETTER YA;Lo;0;L;;;;;N;;;;; A858;PHAGS-PA LETTER RA;Lo;0;L;;;;;N;;;;; A859;PHAGS-PA LETTER LA;Lo;0;L;;;;;N;;;;; A85A;PHAGS-PA LETTER SHA;Lo;0;L;;;;;N;;;;; A85B;PHAGS-PA LETTER SA;Lo;0;L;;;;;N;;;;; A85C;PHAGS-PA LETTER HA;Lo;0;L;;;;;N;;;;; A85D;PHAGS-PA LETTER A;Lo;0;L;;;;;N;;;;; A85E;PHAGS-PA LETTER I;Lo;0;L;;;;;N;;;;; A85F;PHAGS-PA LETTER U;Lo;0;L;;;;;N;;;;; A860;PHAGS-PA LETTER E;Lo;0;L;;;;;N;;;;; A861;PHAGS-PA LETTER O;Lo;0;L;;;;;N;;;;; A862;PHAGS-PA LETTER QA;Lo;0;L;;;;;N;;;;; A863;PHAGS-PA LETTER XA;Lo;0;L;;;;;N;;;;; A864;PHAGS-PA LETTER FA;Lo;0;L;;;;;N;;;;; A865;PHAGS-PA LETTER GGA;Lo;0;L;;;;;N;;;;; A866;PHAGS-PA LETTER EE;Lo;0;L;;;;;N;;;;; A867;PHAGS-PA SUBJOINED LETTER WA;Lo;0;L;;;;;N;;;;; A868;PHAGS-PA SUBJOINED LETTER YA;Lo;0;L;;;;;N;;;;; A869;PHAGS-PA LETTER TTA;Lo;0;L;;;;;N;;;;; A86A;PHAGS-PA LETTER TTHA;Lo;0;L;;;;;N;;;;; A86B;PHAGS-PA LETTER DDA;Lo;0;L;;;;;N;;;;; A86C;PHAGS-PA LETTER NNA;Lo;0;L;;;;;N;;;;; A86D;PHAGS-PA LETTER ALTERNATE YA;Lo;0;L;;;;;N;;;;; A86E;PHAGS-PA LETTER VOICELESS SHA;Lo;0;L;;;;;N;;;;; A86F;PHAGS-PA LETTER VOICED HA;Lo;0;L;;;;;N;;;;; A870;PHAGS-PA LETTER ASPIRATED FA;Lo;0;L;;;;;N;;;;; A871;PHAGS-PA SUBJOINED LETTER RA;Lo;0;L;;;;;N;;;;; A872;PHAGS-PA SUPERFIXED LETTER RA;Lo;0;L;;;;;N;;;;; A873;PHAGS-PA LETTER CANDRABINDU;Lo;0;L;;;;;N;;;;; A874;PHAGS-PA SINGLE HEAD MARK;Po;0;ON;;;;;N;;;;; A875;PHAGS-PA DOUBLE HEAD MARK;Po;0;ON;;;;;N;;;;; A876;PHAGS-PA MARK SHAD;Po;0;ON;;;;;N;;;;; A877;PHAGS-PA MARK DOUBLE SHAD;Po;0;ON;;;;;N;;;;; A880;SAURASHTRA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;; A881;SAURASHTRA SIGN VISARGA;Mc;0;L;;;;;N;;;;; A882;SAURASHTRA LETTER A;Lo;0;L;;;;;N;;;;; A883;SAURASHTRA LETTER AA;Lo;0;L;;;;;N;;;;; A884;SAURASHTRA LETTER I;Lo;0;L;;;;;N;;;;; A885;SAURASHTRA LETTER II;Lo;0;L;;;;;N;;;;; A886;SAURASHTRA LETTER U;Lo;0;L;;;;;N;;;;; A887;SAURASHTRA LETTER UU;Lo;0;L;;;;;N;;;;; A888;SAURASHTRA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; A889;SAURASHTRA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; A88A;SAURASHTRA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; A88B;SAURASHTRA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; A88C;SAURASHTRA LETTER E;Lo;0;L;;;;;N;;;;; A88D;SAURASHTRA LETTER EE;Lo;0;L;;;;;N;;;;; A88E;SAURASHTRA LETTER AI;Lo;0;L;;;;;N;;;;; A88F;SAURASHTRA LETTER O;Lo;0;L;;;;;N;;;;; A890;SAURASHTRA LETTER OO;Lo;0;L;;;;;N;;;;; A891;SAURASHTRA LETTER AU;Lo;0;L;;;;;N;;;;; A892;SAURASHTRA LETTER KA;Lo;0;L;;;;;N;;;;; A893;SAURASHTRA LETTER KHA;Lo;0;L;;;;;N;;;;; A894;SAURASHTRA LETTER GA;Lo;0;L;;;;;N;;;;; A895;SAURASHTRA LETTER GHA;Lo;0;L;;;;;N;;;;; A896;SAURASHTRA LETTER NGA;Lo;0;L;;;;;N;;;;; A897;SAURASHTRA LETTER CA;Lo;0;L;;;;;N;;;;; A898;SAURASHTRA LETTER CHA;Lo;0;L;;;;;N;;;;; A899;SAURASHTRA LETTER JA;Lo;0;L;;;;;N;;;;; A89A;SAURASHTRA LETTER JHA;Lo;0;L;;;;;N;;;;; A89B;SAURASHTRA LETTER NYA;Lo;0;L;;;;;N;;;;; A89C;SAURASHTRA LETTER TTA;Lo;0;L;;;;;N;;;;; A89D;SAURASHTRA LETTER TTHA;Lo;0;L;;;;;N;;;;; A89E;SAURASHTRA LETTER DDA;Lo;0;L;;;;;N;;;;; A89F;SAURASHTRA LETTER DDHA;Lo;0;L;;;;;N;;;;; A8A0;SAURASHTRA LETTER NNA;Lo;0;L;;;;;N;;;;; A8A1;SAURASHTRA LETTER TA;Lo;0;L;;;;;N;;;;; A8A2;SAURASHTRA LETTER THA;Lo;0;L;;;;;N;;;;; A8A3;SAURASHTRA LETTER DA;Lo;0;L;;;;;N;;;;; A8A4;SAURASHTRA LETTER DHA;Lo;0;L;;;;;N;;;;; A8A5;SAURASHTRA LETTER NA;Lo;0;L;;;;;N;;;;; A8A6;SAURASHTRA LETTER PA;Lo;0;L;;;;;N;;;;; A8A7;SAURASHTRA LETTER PHA;Lo;0;L;;;;;N;;;;; A8A8;SAURASHTRA LETTER BA;Lo;0;L;;;;;N;;;;; A8A9;SAURASHTRA LETTER BHA;Lo;0;L;;;;;N;;;;; A8AA;SAURASHTRA LETTER MA;Lo;0;L;;;;;N;;;;; A8AB;SAURASHTRA LETTER YA;Lo;0;L;;;;;N;;;;; A8AC;SAURASHTRA LETTER RA;Lo;0;L;;;;;N;;;;; A8AD;SAURASHTRA LETTER LA;Lo;0;L;;;;;N;;;;; A8AE;SAURASHTRA LETTER VA;Lo;0;L;;;;;N;;;;; A8AF;SAURASHTRA LETTER SHA;Lo;0;L;;;;;N;;;;; A8B0;SAURASHTRA LETTER SSA;Lo;0;L;;;;;N;;;;; A8B1;SAURASHTRA LETTER SA;Lo;0;L;;;;;N;;;;; A8B2;SAURASHTRA LETTER HA;Lo;0;L;;;;;N;;;;; A8B3;SAURASHTRA LETTER LLA;Lo;0;L;;;;;N;;;;; A8B4;SAURASHTRA CONSONANT SIGN HAARU;Mc;0;L;;;;;N;;;;; A8B5;SAURASHTRA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; A8B6;SAURASHTRA VOWEL SIGN I;Mc;0;L;;;;;N;;;;; A8B7;SAURASHTRA VOWEL SIGN II;Mc;0;L;;;;;N;;;;; A8B8;SAURASHTRA VOWEL SIGN U;Mc;0;L;;;;;N;;;;; A8B9;SAURASHTRA VOWEL SIGN UU;Mc;0;L;;;;;N;;;;; A8BA;SAURASHTRA VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;; A8BB;SAURASHTRA VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;; A8BC;SAURASHTRA VOWEL SIGN VOCALIC L;Mc;0;L;;;;;N;;;;; A8BD;SAURASHTRA VOWEL SIGN VOCALIC LL;Mc;0;L;;;;;N;;;;; A8BE;SAURASHTRA VOWEL SIGN E;Mc;0;L;;;;;N;;;;; A8BF;SAURASHTRA VOWEL SIGN EE;Mc;0;L;;;;;N;;;;; A8C0;SAURASHTRA VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; A8C1;SAURASHTRA VOWEL SIGN O;Mc;0;L;;;;;N;;;;; A8C2;SAURASHTRA VOWEL SIGN OO;Mc;0;L;;;;;N;;;;; A8C3;SAURASHTRA VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; A8C4;SAURASHTRA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; A8C5;SAURASHTRA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; A8CE;SAURASHTRA DANDA;Po;0;L;;;;;N;;;;; A8CF;SAURASHTRA DOUBLE DANDA;Po;0;L;;;;;N;;;;; A8D0;SAURASHTRA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; A8D1;SAURASHTRA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; A8D2;SAURASHTRA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; A8D3;SAURASHTRA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; A8D4;SAURASHTRA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; A8D5;SAURASHTRA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; A8D6;SAURASHTRA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; A8D7;SAURASHTRA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; A8D8;SAURASHTRA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; A8D9;SAURASHTRA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; A8E0;COMBINING DEVANAGARI DIGIT ZERO;Mn;230;NSM;;;;;N;;;;; A8E1;COMBINING DEVANAGARI DIGIT ONE;Mn;230;NSM;;;;;N;;;;; A8E2;COMBINING DEVANAGARI DIGIT TWO;Mn;230;NSM;;;;;N;;;;; A8E3;COMBINING DEVANAGARI DIGIT THREE;Mn;230;NSM;;;;;N;;;;; A8E4;COMBINING DEVANAGARI DIGIT FOUR;Mn;230;NSM;;;;;N;;;;; A8E5;COMBINING DEVANAGARI DIGIT FIVE;Mn;230;NSM;;;;;N;;;;; A8E6;COMBINING DEVANAGARI DIGIT SIX;Mn;230;NSM;;;;;N;;;;; A8E7;COMBINING DEVANAGARI DIGIT SEVEN;Mn;230;NSM;;;;;N;;;;; A8E8;COMBINING DEVANAGARI DIGIT EIGHT;Mn;230;NSM;;;;;N;;;;; A8E9;COMBINING DEVANAGARI DIGIT NINE;Mn;230;NSM;;;;;N;;;;; A8EA;COMBINING DEVANAGARI LETTER A;Mn;230;NSM;;;;;N;;;;; A8EB;COMBINING DEVANAGARI LETTER U;Mn;230;NSM;;;;;N;;;;; A8EC;COMBINING DEVANAGARI LETTER KA;Mn;230;NSM;;;;;N;;;;; A8ED;COMBINING DEVANAGARI LETTER NA;Mn;230;NSM;;;;;N;;;;; A8EE;COMBINING DEVANAGARI LETTER PA;Mn;230;NSM;;;;;N;;;;; A8EF;COMBINING DEVANAGARI LETTER RA;Mn;230;NSM;;;;;N;;;;; A8F0;COMBINING DEVANAGARI LETTER VI;Mn;230;NSM;;;;;N;;;;; A8F1;COMBINING DEVANAGARI SIGN AVAGRAHA;Mn;230;NSM;;;;;N;;;;; A8F2;DEVANAGARI SIGN SPACING CANDRABINDU;Lo;0;L;;;;;N;;;;; A8F3;DEVANAGARI SIGN CANDRABINDU VIRAMA;Lo;0;L;;;;;N;;;;; A8F4;DEVANAGARI SIGN DOUBLE CANDRABINDU VIRAMA;Lo;0;L;;;;;N;;;;; A8F5;DEVANAGARI SIGN CANDRABINDU TWO;Lo;0;L;;;;;N;;;;; A8F6;DEVANAGARI SIGN CANDRABINDU THREE;Lo;0;L;;;;;N;;;;; A8F7;DEVANAGARI SIGN CANDRABINDU AVAGRAHA;Lo;0;L;;;;;N;;;;; A8F8;DEVANAGARI SIGN PUSHPIKA;Po;0;L;;;;;N;;;;; A8F9;DEVANAGARI GAP FILLER;Po;0;L;;;;;N;;;;; A8FA;DEVANAGARI CARET;Po;0;L;;;;;N;;;;; A8FB;DEVANAGARI HEADSTROKE;Lo;0;L;;;;;N;;;;; A8FC;DEVANAGARI SIGN SIDDHAM;Po;0;L;;;;;N;;;;; A8FD;DEVANAGARI JAIN OM;Lo;0;L;;;;;N;;;;; A8FE;DEVANAGARI LETTER AY;Lo;0;L;;;;;N;;;;; A8FF;DEVANAGARI VOWEL SIGN AY;Mn;0;NSM;;;;;N;;;;; A900;KAYAH LI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; A901;KAYAH LI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; A902;KAYAH LI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; A903;KAYAH LI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; A904;KAYAH LI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; A905;KAYAH LI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; A906;KAYAH LI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; A907;KAYAH LI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; A908;KAYAH LI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; A909;KAYAH LI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; A90A;KAYAH LI LETTER KA;Lo;0;L;;;;;N;;;;; A90B;KAYAH LI LETTER KHA;Lo;0;L;;;;;N;;;;; A90C;KAYAH LI LETTER GA;Lo;0;L;;;;;N;;;;; A90D;KAYAH LI LETTER NGA;Lo;0;L;;;;;N;;;;; A90E;KAYAH LI LETTER SA;Lo;0;L;;;;;N;;;;; A90F;KAYAH LI LETTER SHA;Lo;0;L;;;;;N;;;;; A910;KAYAH LI LETTER ZA;Lo;0;L;;;;;N;;;;; A911;KAYAH LI LETTER NYA;Lo;0;L;;;;;N;;;;; A912;KAYAH LI LETTER TA;Lo;0;L;;;;;N;;;;; A913;KAYAH LI LETTER HTA;Lo;0;L;;;;;N;;;;; A914;KAYAH LI LETTER NA;Lo;0;L;;;;;N;;;;; A915;KAYAH LI LETTER PA;Lo;0;L;;;;;N;;;;; A916;KAYAH LI LETTER PHA;Lo;0;L;;;;;N;;;;; A917;KAYAH LI LETTER MA;Lo;0;L;;;;;N;;;;; A918;KAYAH LI LETTER DA;Lo;0;L;;;;;N;;;;; A919;KAYAH LI LETTER BA;Lo;0;L;;;;;N;;;;; A91A;KAYAH LI LETTER RA;Lo;0;L;;;;;N;;;;; A91B;KAYAH LI LETTER YA;Lo;0;L;;;;;N;;;;; A91C;KAYAH LI LETTER LA;Lo;0;L;;;;;N;;;;; A91D;KAYAH LI LETTER WA;Lo;0;L;;;;;N;;;;; A91E;KAYAH LI LETTER THA;Lo;0;L;;;;;N;;;;; A91F;KAYAH LI LETTER HA;Lo;0;L;;;;;N;;;;; A920;KAYAH LI LETTER VA;Lo;0;L;;;;;N;;;;; A921;KAYAH LI LETTER CA;Lo;0;L;;;;;N;;;;; A922;KAYAH LI LETTER A;Lo;0;L;;;;;N;;;;; A923;KAYAH LI LETTER OE;Lo;0;L;;;;;N;;;;; A924;KAYAH LI LETTER I;Lo;0;L;;;;;N;;;;; A925;KAYAH LI LETTER OO;Lo;0;L;;;;;N;;;;; A926;KAYAH LI VOWEL UE;Mn;0;NSM;;;;;N;;;;; A927;KAYAH LI VOWEL E;Mn;0;NSM;;;;;N;;;;; A928;KAYAH LI VOWEL U;Mn;0;NSM;;;;;N;;;;; A929;KAYAH LI VOWEL EE;Mn;0;NSM;;;;;N;;;;; A92A;KAYAH LI VOWEL O;Mn;0;NSM;;;;;N;;;;; A92B;KAYAH LI TONE PLOPHU;Mn;220;NSM;;;;;N;;;;; A92C;KAYAH LI TONE CALYA;Mn;220;NSM;;;;;N;;;;; A92D;KAYAH LI TONE CALYA PLOPHU;Mn;220;NSM;;;;;N;;;;; A92E;KAYAH LI SIGN CWI;Po;0;L;;;;;N;;;;; A92F;KAYAH LI SIGN SHYA;Po;0;L;;;;;N;;;;; A930;REJANG LETTER KA;Lo;0;L;;;;;N;;;;; A931;REJANG LETTER GA;Lo;0;L;;;;;N;;;;; A932;REJANG LETTER NGA;Lo;0;L;;;;;N;;;;; A933;REJANG LETTER TA;Lo;0;L;;;;;N;;;;; A934;REJANG LETTER DA;Lo;0;L;;;;;N;;;;; A935;REJANG LETTER NA;Lo;0;L;;;;;N;;;;; A936;REJANG LETTER PA;Lo;0;L;;;;;N;;;;; A937;REJANG LETTER BA;Lo;0;L;;;;;N;;;;; A938;REJANG LETTER MA;Lo;0;L;;;;;N;;;;; A939;REJANG LETTER CA;Lo;0;L;;;;;N;;;;; A93A;REJANG LETTER JA;Lo;0;L;;;;;N;;;;; A93B;REJANG LETTER NYA;Lo;0;L;;;;;N;;;;; A93C;REJANG LETTER SA;Lo;0;L;;;;;N;;;;; A93D;REJANG LETTER RA;Lo;0;L;;;;;N;;;;; A93E;REJANG LETTER LA;Lo;0;L;;;;;N;;;;; A93F;REJANG LETTER YA;Lo;0;L;;;;;N;;;;; A940;REJANG LETTER WA;Lo;0;L;;;;;N;;;;; A941;REJANG LETTER HA;Lo;0;L;;;;;N;;;;; A942;REJANG LETTER MBA;Lo;0;L;;;;;N;;;;; A943;REJANG LETTER NGGA;Lo;0;L;;;;;N;;;;; A944;REJANG LETTER NDA;Lo;0;L;;;;;N;;;;; A945;REJANG LETTER NYJA;Lo;0;L;;;;;N;;;;; A946;REJANG LETTER A;Lo;0;L;;;;;N;;;;; A947;REJANG VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; A948;REJANG VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; A949;REJANG VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; A94A;REJANG VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; A94B;REJANG VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;; A94C;REJANG VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;; A94D;REJANG VOWEL SIGN EU;Mn;0;NSM;;;;;N;;;;; A94E;REJANG VOWEL SIGN EA;Mn;0;NSM;;;;;N;;;;; A94F;REJANG CONSONANT SIGN NG;Mn;0;NSM;;;;;N;;;;; A950;REJANG CONSONANT SIGN N;Mn;0;NSM;;;;;N;;;;; A951;REJANG CONSONANT SIGN R;Mn;0;NSM;;;;;N;;;;; A952;REJANG CONSONANT SIGN H;Mc;0;L;;;;;N;;;;; A953;REJANG VIRAMA;Mc;9;L;;;;;N;;;;; A95F;REJANG SECTION MARK;Po;0;L;;;;;N;;;;; A960;HANGUL CHOSEONG TIKEUT-MIEUM;Lo;0;L;;;;;N;;;;; A961;HANGUL CHOSEONG TIKEUT-PIEUP;Lo;0;L;;;;;N;;;;; A962;HANGUL CHOSEONG TIKEUT-SIOS;Lo;0;L;;;;;N;;;;; A963;HANGUL CHOSEONG TIKEUT-CIEUC;Lo;0;L;;;;;N;;;;; A964;HANGUL CHOSEONG RIEUL-KIYEOK;Lo;0;L;;;;;N;;;;; A965;HANGUL CHOSEONG RIEUL-SSANGKIYEOK;Lo;0;L;;;;;N;;;;; A966;HANGUL CHOSEONG RIEUL-TIKEUT;Lo;0;L;;;;;N;;;;; A967;HANGUL CHOSEONG RIEUL-SSANGTIKEUT;Lo;0;L;;;;;N;;;;; A968;HANGUL CHOSEONG RIEUL-MIEUM;Lo;0;L;;;;;N;;;;; A969;HANGUL CHOSEONG RIEUL-PIEUP;Lo;0;L;;;;;N;;;;; A96A;HANGUL CHOSEONG RIEUL-SSANGPIEUP;Lo;0;L;;;;;N;;;;; A96B;HANGUL CHOSEONG RIEUL-KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;; A96C;HANGUL CHOSEONG RIEUL-SIOS;Lo;0;L;;;;;N;;;;; A96D;HANGUL CHOSEONG RIEUL-CIEUC;Lo;0;L;;;;;N;;;;; A96E;HANGUL CHOSEONG RIEUL-KHIEUKH;Lo;0;L;;;;;N;;;;; A96F;HANGUL CHOSEONG MIEUM-KIYEOK;Lo;0;L;;;;;N;;;;; A970;HANGUL CHOSEONG MIEUM-TIKEUT;Lo;0;L;;;;;N;;;;; A971;HANGUL CHOSEONG MIEUM-SIOS;Lo;0;L;;;;;N;;;;; A972;HANGUL CHOSEONG PIEUP-SIOS-THIEUTH;Lo;0;L;;;;;N;;;;; A973;HANGUL CHOSEONG PIEUP-KHIEUKH;Lo;0;L;;;;;N;;;;; A974;HANGUL CHOSEONG PIEUP-HIEUH;Lo;0;L;;;;;N;;;;; A975;HANGUL CHOSEONG SSANGSIOS-PIEUP;Lo;0;L;;;;;N;;;;; A976;HANGUL CHOSEONG IEUNG-RIEUL;Lo;0;L;;;;;N;;;;; A977;HANGUL CHOSEONG IEUNG-HIEUH;Lo;0;L;;;;;N;;;;; A978;HANGUL CHOSEONG SSANGCIEUC-HIEUH;Lo;0;L;;;;;N;;;;; A979;HANGUL CHOSEONG SSANGTHIEUTH;Lo;0;L;;;;;N;;;;; A97A;HANGUL CHOSEONG PHIEUPH-HIEUH;Lo;0;L;;;;;N;;;;; A97B;HANGUL CHOSEONG HIEUH-SIOS;Lo;0;L;;;;;N;;;;; A97C;HANGUL CHOSEONG SSANGYEORINHIEUH;Lo;0;L;;;;;N;;;;; A980;JAVANESE SIGN PANYANGGA;Mn;0;NSM;;;;;N;;;;; A981;JAVANESE SIGN CECAK;Mn;0;NSM;;;;;N;;;;; A982;JAVANESE SIGN LAYAR;Mn;0;NSM;;;;;N;;;;; A983;JAVANESE SIGN WIGNYAN;Mc;0;L;;;;;N;;;;; A984;JAVANESE LETTER A;Lo;0;L;;;;;N;;;;; A985;JAVANESE LETTER I KAWI;Lo;0;L;;;;;N;;;;; A986;JAVANESE LETTER I;Lo;0;L;;;;;N;;;;; A987;JAVANESE LETTER II;Lo;0;L;;;;;N;;;;; A988;JAVANESE LETTER U;Lo;0;L;;;;;N;;;;; A989;JAVANESE LETTER PA CEREK;Lo;0;L;;;;;N;;;;; A98A;JAVANESE LETTER NGA LELET;Lo;0;L;;;;;N;;;;; A98B;JAVANESE LETTER NGA LELET RASWADI;Lo;0;L;;;;;N;;;;; A98C;JAVANESE LETTER E;Lo;0;L;;;;;N;;;;; A98D;JAVANESE LETTER AI;Lo;0;L;;;;;N;;;;; A98E;JAVANESE LETTER O;Lo;0;L;;;;;N;;;;; A98F;JAVANESE LETTER KA;Lo;0;L;;;;;N;;;;; A990;JAVANESE LETTER KA SASAK;Lo;0;L;;;;;N;;;;; A991;JAVANESE LETTER KA MURDA;Lo;0;L;;;;;N;;;;; A992;JAVANESE LETTER GA;Lo;0;L;;;;;N;;;;; A993;JAVANESE LETTER GA MURDA;Lo;0;L;;;;;N;;;;; A994;JAVANESE LETTER NGA;Lo;0;L;;;;;N;;;;; A995;JAVANESE LETTER CA;Lo;0;L;;;;;N;;;;; A996;JAVANESE LETTER CA MURDA;Lo;0;L;;;;;N;;;;; A997;JAVANESE LETTER JA;Lo;0;L;;;;;N;;;;; A998;JAVANESE LETTER NYA MURDA;Lo;0;L;;;;;N;;;;; A999;JAVANESE LETTER JA MAHAPRANA;Lo;0;L;;;;;N;;;;; A99A;JAVANESE LETTER NYA;Lo;0;L;;;;;N;;;;; A99B;JAVANESE LETTER TTA;Lo;0;L;;;;;N;;;;; A99C;JAVANESE LETTER TTA MAHAPRANA;Lo;0;L;;;;;N;;;;; A99D;JAVANESE LETTER DDA;Lo;0;L;;;;;N;;;;; A99E;JAVANESE LETTER DDA MAHAPRANA;Lo;0;L;;;;;N;;;;; A99F;JAVANESE LETTER NA MURDA;Lo;0;L;;;;;N;;;;; A9A0;JAVANESE LETTER TA;Lo;0;L;;;;;N;;;;; A9A1;JAVANESE LETTER TA MURDA;Lo;0;L;;;;;N;;;;; A9A2;JAVANESE LETTER DA;Lo;0;L;;;;;N;;;;; A9A3;JAVANESE LETTER DA MAHAPRANA;Lo;0;L;;;;;N;;;;; A9A4;JAVANESE LETTER NA;Lo;0;L;;;;;N;;;;; A9A5;JAVANESE LETTER PA;Lo;0;L;;;;;N;;;;; A9A6;JAVANESE LETTER PA MURDA;Lo;0;L;;;;;N;;;;; A9A7;JAVANESE LETTER BA;Lo;0;L;;;;;N;;;;; A9A8;JAVANESE LETTER BA MURDA;Lo;0;L;;;;;N;;;;; A9A9;JAVANESE LETTER MA;Lo;0;L;;;;;N;;;;; A9AA;JAVANESE LETTER YA;Lo;0;L;;;;;N;;;;; A9AB;JAVANESE LETTER RA;Lo;0;L;;;;;N;;;;; A9AC;JAVANESE LETTER RA AGUNG;Lo;0;L;;;;;N;;;;; A9AD;JAVANESE LETTER LA;Lo;0;L;;;;;N;;;;; A9AE;JAVANESE LETTER WA;Lo;0;L;;;;;N;;;;; A9AF;JAVANESE LETTER SA MURDA;Lo;0;L;;;;;N;;;;; A9B0;JAVANESE LETTER SA MAHAPRANA;Lo;0;L;;;;;N;;;;; A9B1;JAVANESE LETTER SA;Lo;0;L;;;;;N;;;;; A9B2;JAVANESE LETTER HA;Lo;0;L;;;;;N;;;;; A9B3;JAVANESE SIGN CECAK TELU;Mn;7;NSM;;;;;N;;;;; A9B4;JAVANESE VOWEL SIGN TARUNG;Mc;0;L;;;;;N;;;;; A9B5;JAVANESE VOWEL SIGN TOLONG;Mc;0;L;;;;;N;;;;; A9B6;JAVANESE VOWEL SIGN WULU;Mn;0;NSM;;;;;N;;;;; A9B7;JAVANESE VOWEL SIGN WULU MELIK;Mn;0;NSM;;;;;N;;;;; A9B8;JAVANESE VOWEL SIGN SUKU;Mn;0;NSM;;;;;N;;;;; A9B9;JAVANESE VOWEL SIGN SUKU MENDUT;Mn;0;NSM;;;;;N;;;;; A9BA;JAVANESE VOWEL SIGN TALING;Mc;0;L;;;;;N;;;;; A9BB;JAVANESE VOWEL SIGN DIRGA MURE;Mc;0;L;;;;;N;;;;; A9BC;JAVANESE VOWEL SIGN PEPET;Mn;0;NSM;;;;;N;;;;; A9BD;JAVANESE CONSONANT SIGN KERET;Mn;0;NSM;;;;;N;;;;; A9BE;JAVANESE CONSONANT SIGN PENGKAL;Mc;0;L;;;;;N;;;;; A9BF;JAVANESE CONSONANT SIGN CAKRA;Mc;0;L;;;;;N;;;;; A9C0;JAVANESE PANGKON;Mc;9;L;;;;;N;;;;; A9C1;JAVANESE LEFT RERENGGAN;Po;0;L;;;;;N;;;;; A9C2;JAVANESE RIGHT RERENGGAN;Po;0;L;;;;;N;;;;; A9C3;JAVANESE PADA ANDAP;Po;0;L;;;;;N;;;;; A9C4;JAVANESE PADA MADYA;Po;0;L;;;;;N;;;;; A9C5;JAVANESE PADA LUHUR;Po;0;L;;;;;N;;;;; A9C6;JAVANESE PADA WINDU;Po;0;L;;;;;N;;;;; A9C7;JAVANESE PADA PANGKAT;Po;0;L;;;;;N;;;;; A9C8;JAVANESE PADA LINGSA;Po;0;L;;;;;N;;;;; A9C9;JAVANESE PADA LUNGSI;Po;0;L;;;;;N;;;;; A9CA;JAVANESE PADA ADEG;Po;0;L;;;;;N;;;;; A9CB;JAVANESE PADA ADEG ADEG;Po;0;L;;;;;N;;;;; A9CC;JAVANESE PADA PISELEH;Po;0;L;;;;;N;;;;; A9CD;JAVANESE TURNED PADA PISELEH;Po;0;L;;;;;N;;;;; A9CF;JAVANESE PANGRANGKEP;Lm;0;L;;;;;N;;;;; A9D0;JAVANESE DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; A9D1;JAVANESE DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; A9D2;JAVANESE DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; A9D3;JAVANESE DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; A9D4;JAVANESE DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; A9D5;JAVANESE DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; A9D6;JAVANESE DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; A9D7;JAVANESE DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; A9D8;JAVANESE DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; A9D9;JAVANESE DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; A9DE;JAVANESE PADA TIRTA TUMETES;Po;0;L;;;;;N;;;;; A9DF;JAVANESE PADA ISEN-ISEN;Po;0;L;;;;;N;;;;; A9E0;MYANMAR LETTER SHAN GHA;Lo;0;L;;;;;N;;;;; A9E1;MYANMAR LETTER SHAN CHA;Lo;0;L;;;;;N;;;;; A9E2;MYANMAR LETTER SHAN JHA;Lo;0;L;;;;;N;;;;; A9E3;MYANMAR LETTER SHAN NNA;Lo;0;L;;;;;N;;;;; A9E4;MYANMAR LETTER SHAN BHA;Lo;0;L;;;;;N;;;;; A9E5;MYANMAR SIGN SHAN SAW;Mn;0;NSM;;;;;N;;;;; A9E6;MYANMAR MODIFIER LETTER SHAN REDUPLICATION;Lm;0;L;;;;;N;;;;; A9E7;MYANMAR LETTER TAI LAING NYA;Lo;0;L;;;;;N;;;;; A9E8;MYANMAR LETTER TAI LAING FA;Lo;0;L;;;;;N;;;;; A9E9;MYANMAR LETTER TAI LAING GA;Lo;0;L;;;;;N;;;;; A9EA;MYANMAR LETTER TAI LAING GHA;Lo;0;L;;;;;N;;;;; A9EB;MYANMAR LETTER TAI LAING JA;Lo;0;L;;;;;N;;;;; A9EC;MYANMAR LETTER TAI LAING JHA;Lo;0;L;;;;;N;;;;; A9ED;MYANMAR LETTER TAI LAING DDA;Lo;0;L;;;;;N;;;;; A9EE;MYANMAR LETTER TAI LAING DDHA;Lo;0;L;;;;;N;;;;; A9EF;MYANMAR LETTER TAI LAING NNA;Lo;0;L;;;;;N;;;;; A9F0;MYANMAR TAI LAING DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; A9F1;MYANMAR TAI LAING DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; A9F2;MYANMAR TAI LAING DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; A9F3;MYANMAR TAI LAING DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; A9F4;MYANMAR TAI LAING DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; A9F5;MYANMAR TAI LAING DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; A9F6;MYANMAR TAI LAING DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; A9F7;MYANMAR TAI LAING DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; A9F8;MYANMAR TAI LAING DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; A9F9;MYANMAR TAI LAING DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; A9FA;MYANMAR LETTER TAI LAING LLA;Lo;0;L;;;;;N;;;;; A9FB;MYANMAR LETTER TAI LAING DA;Lo;0;L;;;;;N;;;;; A9FC;MYANMAR LETTER TAI LAING DHA;Lo;0;L;;;;;N;;;;; A9FD;MYANMAR LETTER TAI LAING BA;Lo;0;L;;;;;N;;;;; A9FE;MYANMAR LETTER TAI LAING BHA;Lo;0;L;;;;;N;;;;; AA00;CHAM LETTER A;Lo;0;L;;;;;N;;;;; AA01;CHAM LETTER I;Lo;0;L;;;;;N;;;;; AA02;CHAM LETTER U;Lo;0;L;;;;;N;;;;; AA03;CHAM LETTER E;Lo;0;L;;;;;N;;;;; AA04;CHAM LETTER AI;Lo;0;L;;;;;N;;;;; AA05;CHAM LETTER O;Lo;0;L;;;;;N;;;;; AA06;CHAM LETTER KA;Lo;0;L;;;;;N;;;;; AA07;CHAM LETTER KHA;Lo;0;L;;;;;N;;;;; AA08;CHAM LETTER GA;Lo;0;L;;;;;N;;;;; AA09;CHAM LETTER GHA;Lo;0;L;;;;;N;;;;; AA0A;CHAM LETTER NGUE;Lo;0;L;;;;;N;;;;; AA0B;CHAM LETTER NGA;Lo;0;L;;;;;N;;;;; AA0C;CHAM LETTER CHA;Lo;0;L;;;;;N;;;;; AA0D;CHAM LETTER CHHA;Lo;0;L;;;;;N;;;;; AA0E;CHAM LETTER JA;Lo;0;L;;;;;N;;;;; AA0F;CHAM LETTER JHA;Lo;0;L;;;;;N;;;;; AA10;CHAM LETTER NHUE;Lo;0;L;;;;;N;;;;; AA11;CHAM LETTER NHA;Lo;0;L;;;;;N;;;;; AA12;CHAM LETTER NHJA;Lo;0;L;;;;;N;;;;; AA13;CHAM LETTER TA;Lo;0;L;;;;;N;;;;; AA14;CHAM LETTER THA;Lo;0;L;;;;;N;;;;; AA15;CHAM LETTER DA;Lo;0;L;;;;;N;;;;; AA16;CHAM LETTER DHA;Lo;0;L;;;;;N;;;;; AA17;CHAM LETTER NUE;Lo;0;L;;;;;N;;;;; AA18;CHAM LETTER NA;Lo;0;L;;;;;N;;;;; AA19;CHAM LETTER DDA;Lo;0;L;;;;;N;;;;; AA1A;CHAM LETTER PA;Lo;0;L;;;;;N;;;;; AA1B;CHAM LETTER PPA;Lo;0;L;;;;;N;;;;; AA1C;CHAM LETTER PHA;Lo;0;L;;;;;N;;;;; AA1D;CHAM LETTER BA;Lo;0;L;;;;;N;;;;; AA1E;CHAM LETTER BHA;Lo;0;L;;;;;N;;;;; AA1F;CHAM LETTER MUE;Lo;0;L;;;;;N;;;;; AA20;CHAM LETTER MA;Lo;0;L;;;;;N;;;;; AA21;CHAM LETTER BBA;Lo;0;L;;;;;N;;;;; AA22;CHAM LETTER YA;Lo;0;L;;;;;N;;;;; AA23;CHAM LETTER RA;Lo;0;L;;;;;N;;;;; AA24;CHAM LETTER LA;Lo;0;L;;;;;N;;;;; AA25;CHAM LETTER VA;Lo;0;L;;;;;N;;;;; AA26;CHAM LETTER SSA;Lo;0;L;;;;;N;;;;; AA27;CHAM LETTER SA;Lo;0;L;;;;;N;;;;; AA28;CHAM LETTER HA;Lo;0;L;;;;;N;;;;; AA29;CHAM VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;; AA2A;CHAM VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; AA2B;CHAM VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; AA2C;CHAM VOWEL SIGN EI;Mn;0;NSM;;;;;N;;;;; AA2D;CHAM VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; AA2E;CHAM VOWEL SIGN OE;Mn;0;NSM;;;;;N;;;;; AA2F;CHAM VOWEL SIGN O;Mc;0;L;;;;;N;;;;; AA30;CHAM VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; AA31;CHAM VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;; AA32;CHAM VOWEL SIGN UE;Mn;0;NSM;;;;;N;;;;; AA33;CHAM CONSONANT SIGN YA;Mc;0;L;;;;;N;;;;; AA34;CHAM CONSONANT SIGN RA;Mc;0;L;;;;;N;;;;; AA35;CHAM CONSONANT SIGN LA;Mn;0;NSM;;;;;N;;;;; AA36;CHAM CONSONANT SIGN WA;Mn;0;NSM;;;;;N;;;;; AA40;CHAM LETTER FINAL K;Lo;0;L;;;;;N;;;;; AA41;CHAM LETTER FINAL G;Lo;0;L;;;;;N;;;;; AA42;CHAM LETTER FINAL NG;Lo;0;L;;;;;N;;;;; AA43;CHAM CONSONANT SIGN FINAL NG;Mn;0;NSM;;;;;N;;;;; AA44;CHAM LETTER FINAL CH;Lo;0;L;;;;;N;;;;; AA45;CHAM LETTER FINAL T;Lo;0;L;;;;;N;;;;; AA46;CHAM LETTER FINAL N;Lo;0;L;;;;;N;;;;; AA47;CHAM LETTER FINAL P;Lo;0;L;;;;;N;;;;; AA48;CHAM LETTER FINAL Y;Lo;0;L;;;;;N;;;;; AA49;CHAM LETTER FINAL R;Lo;0;L;;;;;N;;;;; AA4A;CHAM LETTER FINAL L;Lo;0;L;;;;;N;;;;; AA4B;CHAM LETTER FINAL SS;Lo;0;L;;;;;N;;;;; AA4C;CHAM CONSONANT SIGN FINAL M;Mn;0;NSM;;;;;N;;;;; AA4D;CHAM CONSONANT SIGN FINAL H;Mc;0;L;;;;;N;;;;; AA50;CHAM DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; AA51;CHAM DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; AA52;CHAM DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; AA53;CHAM DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; AA54;CHAM DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; AA55;CHAM DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; AA56;CHAM DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; AA57;CHAM DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; AA58;CHAM DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; AA59;CHAM DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; AA5C;CHAM PUNCTUATION SPIRAL;Po;0;L;;;;;N;;;;; AA5D;CHAM PUNCTUATION DANDA;Po;0;L;;;;;N;;;;; AA5E;CHAM PUNCTUATION DOUBLE DANDA;Po;0;L;;;;;N;;;;; AA5F;CHAM PUNCTUATION TRIPLE DANDA;Po;0;L;;;;;N;;;;; AA60;MYANMAR LETTER KHAMTI GA;Lo;0;L;;;;;N;;;;; AA61;MYANMAR LETTER KHAMTI CA;Lo;0;L;;;;;N;;;;; AA62;MYANMAR LETTER KHAMTI CHA;Lo;0;L;;;;;N;;;;; AA63;MYANMAR LETTER KHAMTI JA;Lo;0;L;;;;;N;;;;; AA64;MYANMAR LETTER KHAMTI JHA;Lo;0;L;;;;;N;;;;; AA65;MYANMAR LETTER KHAMTI NYA;Lo;0;L;;;;;N;;;;; AA66;MYANMAR LETTER KHAMTI TTA;Lo;0;L;;;;;N;;;;; AA67;MYANMAR LETTER KHAMTI TTHA;Lo;0;L;;;;;N;;;;; AA68;MYANMAR LETTER KHAMTI DDA;Lo;0;L;;;;;N;;;;; AA69;MYANMAR LETTER KHAMTI DDHA;Lo;0;L;;;;;N;;;;; AA6A;MYANMAR LETTER KHAMTI DHA;Lo;0;L;;;;;N;;;;; AA6B;MYANMAR LETTER KHAMTI NA;Lo;0;L;;;;;N;;;;; AA6C;MYANMAR LETTER KHAMTI SA;Lo;0;L;;;;;N;;;;; AA6D;MYANMAR LETTER KHAMTI HA;Lo;0;L;;;;;N;;;;; AA6E;MYANMAR LETTER KHAMTI HHA;Lo;0;L;;;;;N;;;;; AA6F;MYANMAR LETTER KHAMTI FA;Lo;0;L;;;;;N;;;;; AA70;MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION;Lm;0;L;;;;;N;;;;; AA71;MYANMAR LETTER KHAMTI XA;Lo;0;L;;;;;N;;;;; AA72;MYANMAR LETTER KHAMTI ZA;Lo;0;L;;;;;N;;;;; AA73;MYANMAR LETTER KHAMTI RA;Lo;0;L;;;;;N;;;;; AA74;MYANMAR LOGOGRAM KHAMTI OAY;Lo;0;L;;;;;N;;;;; AA75;MYANMAR LOGOGRAM KHAMTI QN;Lo;0;L;;;;;N;;;;; AA76;MYANMAR LOGOGRAM KHAMTI HM;Lo;0;L;;;;;N;;;;; AA77;MYANMAR SYMBOL AITON EXCLAMATION;So;0;L;;;;;N;;;;; AA78;MYANMAR SYMBOL AITON ONE;So;0;L;;;;;N;;;;; AA79;MYANMAR SYMBOL AITON TWO;So;0;L;;;;;N;;;;; AA7A;MYANMAR LETTER AITON RA;Lo;0;L;;;;;N;;;;; AA7B;MYANMAR SIGN PAO KAREN TONE;Mc;0;L;;;;;N;;;;; AA7C;MYANMAR SIGN TAI LAING TONE-2;Mn;0;NSM;;;;;N;;;;; AA7D;MYANMAR SIGN TAI LAING TONE-5;Mc;0;L;;;;;N;;;;; AA7E;MYANMAR LETTER SHWE PALAUNG CHA;Lo;0;L;;;;;N;;;;; AA7F;MYANMAR LETTER SHWE PALAUNG SHA;Lo;0;L;;;;;N;;;;; AA80;TAI VIET LETTER LOW KO;Lo;0;L;;;;;N;;;;; AA81;TAI VIET LETTER HIGH KO;Lo;0;L;;;;;N;;;;; AA82;TAI VIET LETTER LOW KHO;Lo;0;L;;;;;N;;;;; AA83;TAI VIET LETTER HIGH KHO;Lo;0;L;;;;;N;;;;; AA84;TAI VIET LETTER LOW KHHO;Lo;0;L;;;;;N;;;;; AA85;TAI VIET LETTER HIGH KHHO;Lo;0;L;;;;;N;;;;; AA86;TAI VIET LETTER LOW GO;Lo;0;L;;;;;N;;;;; AA87;TAI VIET LETTER HIGH GO;Lo;0;L;;;;;N;;;;; AA88;TAI VIET LETTER LOW NGO;Lo;0;L;;;;;N;;;;; AA89;TAI VIET LETTER HIGH NGO;Lo;0;L;;;;;N;;;;; AA8A;TAI VIET LETTER LOW CO;Lo;0;L;;;;;N;;;;; AA8B;TAI VIET LETTER HIGH CO;Lo;0;L;;;;;N;;;;; AA8C;TAI VIET LETTER LOW CHO;Lo;0;L;;;;;N;;;;; AA8D;TAI VIET LETTER HIGH CHO;Lo;0;L;;;;;N;;;;; AA8E;TAI VIET LETTER LOW SO;Lo;0;L;;;;;N;;;;; AA8F;TAI VIET LETTER HIGH SO;Lo;0;L;;;;;N;;;;; AA90;TAI VIET LETTER LOW NYO;Lo;0;L;;;;;N;;;;; AA91;TAI VIET LETTER HIGH NYO;Lo;0;L;;;;;N;;;;; AA92;TAI VIET LETTER LOW DO;Lo;0;L;;;;;N;;;;; AA93;TAI VIET LETTER HIGH DO;Lo;0;L;;;;;N;;;;; AA94;TAI VIET LETTER LOW TO;Lo;0;L;;;;;N;;;;; AA95;TAI VIET LETTER HIGH TO;Lo;0;L;;;;;N;;;;; AA96;TAI VIET LETTER LOW THO;Lo;0;L;;;;;N;;;;; AA97;TAI VIET LETTER HIGH THO;Lo;0;L;;;;;N;;;;; AA98;TAI VIET LETTER LOW NO;Lo;0;L;;;;;N;;;;; AA99;TAI VIET LETTER HIGH NO;Lo;0;L;;;;;N;;;;; AA9A;TAI VIET LETTER LOW BO;Lo;0;L;;;;;N;;;;; AA9B;TAI VIET LETTER HIGH BO;Lo;0;L;;;;;N;;;;; AA9C;TAI VIET LETTER LOW PO;Lo;0;L;;;;;N;;;;; AA9D;TAI VIET LETTER HIGH PO;Lo;0;L;;;;;N;;;;; AA9E;TAI VIET LETTER LOW PHO;Lo;0;L;;;;;N;;;;; AA9F;TAI VIET LETTER HIGH PHO;Lo;0;L;;;;;N;;;;; AAA0;TAI VIET LETTER LOW FO;Lo;0;L;;;;;N;;;;; AAA1;TAI VIET LETTER HIGH FO;Lo;0;L;;;;;N;;;;; AAA2;TAI VIET LETTER LOW MO;Lo;0;L;;;;;N;;;;; AAA3;TAI VIET LETTER HIGH MO;Lo;0;L;;;;;N;;;;; AAA4;TAI VIET LETTER LOW YO;Lo;0;L;;;;;N;;;;; AAA5;TAI VIET LETTER HIGH YO;Lo;0;L;;;;;N;;;;; AAA6;TAI VIET LETTER LOW RO;Lo;0;L;;;;;N;;;;; AAA7;TAI VIET LETTER HIGH RO;Lo;0;L;;;;;N;;;;; AAA8;TAI VIET LETTER LOW LO;Lo;0;L;;;;;N;;;;; AAA9;TAI VIET LETTER HIGH LO;Lo;0;L;;;;;N;;;;; AAAA;TAI VIET LETTER LOW VO;Lo;0;L;;;;;N;;;;; AAAB;TAI VIET LETTER HIGH VO;Lo;0;L;;;;;N;;;;; AAAC;TAI VIET LETTER LOW HO;Lo;0;L;;;;;N;;;;; AAAD;TAI VIET LETTER HIGH HO;Lo;0;L;;;;;N;;;;; AAAE;TAI VIET LETTER LOW O;Lo;0;L;;;;;N;;;;; AAAF;TAI VIET LETTER HIGH O;Lo;0;L;;;;;N;;;;; AAB0;TAI VIET MAI KANG;Mn;230;NSM;;;;;N;;;;; AAB1;TAI VIET VOWEL AA;Lo;0;L;;;;;N;;;;; AAB2;TAI VIET VOWEL I;Mn;230;NSM;;;;;N;;;;; AAB3;TAI VIET VOWEL UE;Mn;230;NSM;;;;;N;;;;; AAB4;TAI VIET VOWEL U;Mn;220;NSM;;;;;N;;;;; AAB5;TAI VIET VOWEL E;Lo;0;L;;;;;N;;;;; AAB6;TAI VIET VOWEL O;Lo;0;L;;;;;N;;;;; AAB7;TAI VIET MAI KHIT;Mn;230;NSM;;;;;N;;;;; AAB8;TAI VIET VOWEL IA;Mn;230;NSM;;;;;N;;;;; AAB9;TAI VIET VOWEL UEA;Lo;0;L;;;;;N;;;;; AABA;TAI VIET VOWEL UA;Lo;0;L;;;;;N;;;;; AABB;TAI VIET VOWEL AUE;Lo;0;L;;;;;N;;;;; AABC;TAI VIET VOWEL AY;Lo;0;L;;;;;N;;;;; AABD;TAI VIET VOWEL AN;Lo;0;L;;;;;N;;;;; AABE;TAI VIET VOWEL AM;Mn;230;NSM;;;;;N;;;;; AABF;TAI VIET TONE MAI EK;Mn;230;NSM;;;;;N;;;;; AAC0;TAI VIET TONE MAI NUENG;Lo;0;L;;;;;N;;;;; AAC1;TAI VIET TONE MAI THO;Mn;230;NSM;;;;;N;;;;; AAC2;TAI VIET TONE MAI SONG;Lo;0;L;;;;;N;;;;; AADB;TAI VIET SYMBOL KON;Lo;0;L;;;;;N;;;;; AADC;TAI VIET SYMBOL NUENG;Lo;0;L;;;;;N;;;;; AADD;TAI VIET SYMBOL SAM;Lm;0;L;;;;;N;;;;; AADE;TAI VIET SYMBOL HO HOI;Po;0;L;;;;;N;;;;; AADF;TAI VIET SYMBOL KOI KOI;Po;0;L;;;;;N;;;;; AAE0;MEETEI MAYEK LETTER E;Lo;0;L;;;;;N;;;;; AAE1;MEETEI MAYEK LETTER O;Lo;0;L;;;;;N;;;;; AAE2;MEETEI MAYEK LETTER CHA;Lo;0;L;;;;;N;;;;; AAE3;MEETEI MAYEK LETTER NYA;Lo;0;L;;;;;N;;;;; AAE4;MEETEI MAYEK LETTER TTA;Lo;0;L;;;;;N;;;;; AAE5;MEETEI MAYEK LETTER TTHA;Lo;0;L;;;;;N;;;;; AAE6;MEETEI MAYEK LETTER DDA;Lo;0;L;;;;;N;;;;; AAE7;MEETEI MAYEK LETTER DDHA;Lo;0;L;;;;;N;;;;; AAE8;MEETEI MAYEK LETTER NNA;Lo;0;L;;;;;N;;;;; AAE9;MEETEI MAYEK LETTER SHA;Lo;0;L;;;;;N;;;;; AAEA;MEETEI MAYEK LETTER SSA;Lo;0;L;;;;;N;;;;; AAEB;MEETEI MAYEK VOWEL SIGN II;Mc;0;L;;;;;N;;;;; AAEC;MEETEI MAYEK VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; AAED;MEETEI MAYEK VOWEL SIGN AAI;Mn;0;NSM;;;;;N;;;;; AAEE;MEETEI MAYEK VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; AAEF;MEETEI MAYEK VOWEL SIGN AAU;Mc;0;L;;;;;N;;;;; AAF0;MEETEI MAYEK CHEIKHAN;Po;0;L;;;;;N;;;;; AAF1;MEETEI MAYEK AHANG KHUDAM;Po;0;L;;;;;N;;;;; AAF2;MEETEI MAYEK ANJI;Lo;0;L;;;;;N;;;;; AAF3;MEETEI MAYEK SYLLABLE REPETITION MARK;Lm;0;L;;;;;N;;;;; AAF4;MEETEI MAYEK WORD REPETITION MARK;Lm;0;L;;;;;N;;;;; AAF5;MEETEI MAYEK VOWEL SIGN VISARGA;Mc;0;L;;;;;N;;;;; AAF6;MEETEI MAYEK VIRAMA;Mn;9;NSM;;;;;N;;;;; AB01;ETHIOPIC SYLLABLE TTHU;Lo;0;L;;;;;N;;;;; AB02;ETHIOPIC SYLLABLE TTHI;Lo;0;L;;;;;N;;;;; AB03;ETHIOPIC SYLLABLE TTHAA;Lo;0;L;;;;;N;;;;; AB04;ETHIOPIC SYLLABLE TTHEE;Lo;0;L;;;;;N;;;;; AB05;ETHIOPIC SYLLABLE TTHE;Lo;0;L;;;;;N;;;;; AB06;ETHIOPIC SYLLABLE TTHO;Lo;0;L;;;;;N;;;;; AB09;ETHIOPIC SYLLABLE DDHU;Lo;0;L;;;;;N;;;;; AB0A;ETHIOPIC SYLLABLE DDHI;Lo;0;L;;;;;N;;;;; AB0B;ETHIOPIC SYLLABLE DDHAA;Lo;0;L;;;;;N;;;;; AB0C;ETHIOPIC SYLLABLE DDHEE;Lo;0;L;;;;;N;;;;; AB0D;ETHIOPIC SYLLABLE DDHE;Lo;0;L;;;;;N;;;;; AB0E;ETHIOPIC SYLLABLE DDHO;Lo;0;L;;;;;N;;;;; AB11;ETHIOPIC SYLLABLE DZU;Lo;0;L;;;;;N;;;;; AB12;ETHIOPIC SYLLABLE DZI;Lo;0;L;;;;;N;;;;; AB13;ETHIOPIC SYLLABLE DZAA;Lo;0;L;;;;;N;;;;; AB14;ETHIOPIC SYLLABLE DZEE;Lo;0;L;;;;;N;;;;; AB15;ETHIOPIC SYLLABLE DZE;Lo;0;L;;;;;N;;;;; AB16;ETHIOPIC SYLLABLE DZO;Lo;0;L;;;;;N;;;;; AB20;ETHIOPIC SYLLABLE CCHHA;Lo;0;L;;;;;N;;;;; AB21;ETHIOPIC SYLLABLE CCHHU;Lo;0;L;;;;;N;;;;; AB22;ETHIOPIC SYLLABLE CCHHI;Lo;0;L;;;;;N;;;;; AB23;ETHIOPIC SYLLABLE CCHHAA;Lo;0;L;;;;;N;;;;; AB24;ETHIOPIC SYLLABLE CCHHEE;Lo;0;L;;;;;N;;;;; AB25;ETHIOPIC SYLLABLE CCHHE;Lo;0;L;;;;;N;;;;; AB26;ETHIOPIC SYLLABLE CCHHO;Lo;0;L;;;;;N;;;;; AB28;ETHIOPIC SYLLABLE BBA;Lo;0;L;;;;;N;;;;; AB29;ETHIOPIC SYLLABLE BBU;Lo;0;L;;;;;N;;;;; AB2A;ETHIOPIC SYLLABLE BBI;Lo;0;L;;;;;N;;;;; AB2B;ETHIOPIC SYLLABLE BBAA;Lo;0;L;;;;;N;;;;; AB2C;ETHIOPIC SYLLABLE BBEE;Lo;0;L;;;;;N;;;;; AB2D;ETHIOPIC SYLLABLE BBE;Lo;0;L;;;;;N;;;;; AB2E;ETHIOPIC SYLLABLE BBO;Lo;0;L;;;;;N;;;;; AB30;LATIN SMALL LETTER BARRED ALPHA;Ll;0;L;;;;;N;;;;; AB31;LATIN SMALL LETTER A REVERSED-SCHWA;Ll;0;L;;;;;N;;;;; AB32;LATIN SMALL LETTER BLACKLETTER E;Ll;0;L;;;;;N;;;;; AB33;LATIN SMALL LETTER BARRED E;Ll;0;L;;;;;N;;;;; AB34;LATIN SMALL LETTER E WITH FLOURISH;Ll;0;L;;;;;N;;;;; AB35;LATIN SMALL LETTER LENIS F;Ll;0;L;;;;;N;;;;; AB36;LATIN SMALL LETTER SCRIPT G WITH CROSSED-TAIL;Ll;0;L;;;;;N;;;;; AB37;LATIN SMALL LETTER L WITH INVERTED LAZY S;Ll;0;L;;;;;N;;;;; AB38;LATIN SMALL LETTER L WITH DOUBLE MIDDLE TILDE;Ll;0;L;;;;;N;;;;; AB39;LATIN SMALL LETTER L WITH MIDDLE RING;Ll;0;L;;;;;N;;;;; AB3A;LATIN SMALL LETTER M WITH CROSSED-TAIL;Ll;0;L;;;;;N;;;;; AB3B;LATIN SMALL LETTER N WITH CROSSED-TAIL;Ll;0;L;;;;;N;;;;; AB3C;LATIN SMALL LETTER ENG WITH CROSSED-TAIL;Ll;0;L;;;;;N;;;;; AB3D;LATIN SMALL LETTER BLACKLETTER O;Ll;0;L;;;;;N;;;;; AB3E;LATIN SMALL LETTER BLACKLETTER O WITH STROKE;Ll;0;L;;;;;N;;;;; AB3F;LATIN SMALL LETTER OPEN O WITH STROKE;Ll;0;L;;;;;N;;;;; AB40;LATIN SMALL LETTER INVERTED OE;Ll;0;L;;;;;N;;;;; AB41;LATIN SMALL LETTER TURNED OE WITH STROKE;Ll;0;L;;;;;N;;;;; AB42;LATIN SMALL LETTER TURNED OE WITH HORIZONTAL STROKE;Ll;0;L;;;;;N;;;;; AB43;LATIN SMALL LETTER TURNED O OPEN-O;Ll;0;L;;;;;N;;;;; AB44;LATIN SMALL LETTER TURNED O OPEN-O WITH STROKE;Ll;0;L;;;;;N;;;;; AB45;LATIN SMALL LETTER STIRRUP R;Ll;0;L;;;;;N;;;;; AB46;LATIN LETTER SMALL CAPITAL R WITH RIGHT LEG;Ll;0;L;;;;;N;;;;; AB47;LATIN SMALL LETTER R WITHOUT HANDLE;Ll;0;L;;;;;N;;;;; AB48;LATIN SMALL LETTER DOUBLE R;Ll;0;L;;;;;N;;;;; AB49;LATIN SMALL LETTER R WITH CROSSED-TAIL;Ll;0;L;;;;;N;;;;; AB4A;LATIN SMALL LETTER DOUBLE R WITH CROSSED-TAIL;Ll;0;L;;;;;N;;;;; AB4B;LATIN SMALL LETTER SCRIPT R;Ll;0;L;;;;;N;;;;; AB4C;LATIN SMALL LETTER SCRIPT R WITH RING;Ll;0;L;;;;;N;;;;; AB4D;LATIN SMALL LETTER BASELINE ESH;Ll;0;L;;;;;N;;;;; AB4E;LATIN SMALL LETTER U WITH SHORT RIGHT LEG;Ll;0;L;;;;;N;;;;; AB4F;LATIN SMALL LETTER U BAR WITH SHORT RIGHT LEG;Ll;0;L;;;;;N;;;;; AB50;LATIN SMALL LETTER UI;Ll;0;L;;;;;N;;;;; AB51;LATIN SMALL LETTER TURNED UI;Ll;0;L;;;;;N;;;;; AB52;LATIN SMALL LETTER U WITH LEFT HOOK;Ll;0;L;;;;;N;;;;; AB53;LATIN SMALL LETTER CHI;Ll;0;L;;;;;N;;;A7B3;;A7B3 AB54;LATIN SMALL LETTER CHI WITH LOW RIGHT RING;Ll;0;L;;;;;N;;;;; AB55;LATIN SMALL LETTER CHI WITH LOW LEFT SERIF;Ll;0;L;;;;;N;;;;; AB56;LATIN SMALL LETTER X WITH LOW RIGHT RING;Ll;0;L;;;;;N;;;;; AB57;LATIN SMALL LETTER X WITH LONG LEFT LEG;Ll;0;L;;;;;N;;;;; AB58;LATIN SMALL LETTER X WITH LONG LEFT LEG AND LOW RIGHT RING;Ll;0;L;;;;;N;;;;; AB59;LATIN SMALL LETTER X WITH LONG LEFT LEG WITH SERIF;Ll;0;L;;;;;N;;;;; AB5A;LATIN SMALL LETTER Y WITH SHORT RIGHT LEG;Ll;0;L;;;;;N;;;;; AB5B;MODIFIER BREVE WITH INVERTED BREVE;Sk;0;L;;;;;N;;;;; AB5C;MODIFIER LETTER SMALL HENG;Lm;0;L; A727;;;;N;;;;; AB5D;MODIFIER LETTER SMALL L WITH INVERTED LAZY S;Lm;0;L; AB37;;;;N;;;;; AB5E;MODIFIER LETTER SMALL L WITH MIDDLE TILDE;Lm;0;L; 026B;;;;N;;;;; AB5F;MODIFIER LETTER SMALL U WITH LEFT HOOK;Lm;0;L; AB52;;;;N;;;;; AB60;LATIN SMALL LETTER SAKHA YAT;Ll;0;L;;;;;N;;;;; AB61;LATIN SMALL LETTER IOTIFIED E;Ll;0;L;;;;;N;;;;; AB62;LATIN SMALL LETTER OPEN OE;Ll;0;L;;;;;N;;;;; AB63;LATIN SMALL LETTER UO;Ll;0;L;;;;;N;;;;; AB64;LATIN SMALL LETTER INVERTED ALPHA;Ll;0;L;;;;;N;;;;; AB65;GREEK LETTER SMALL CAPITAL OMEGA;Ll;0;L;;;;;N;;;;; AB66;LATIN SMALL LETTER DZ DIGRAPH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; AB67;LATIN SMALL LETTER TS DIGRAPH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; AB68;LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; AB69;MODIFIER LETTER SMALL TURNED W;Lm;0;L; 028D;;;;N;;;;; AB6A;MODIFIER LETTER LEFT TACK;Sk;0;ON;;;;;N;;;;; AB6B;MODIFIER LETTER RIGHT TACK;Sk;0;ON;;;;;N;;;;; AB70;CHEROKEE SMALL LETTER A;Ll;0;L;;;;;N;;;13A0;;13A0 AB71;CHEROKEE SMALL LETTER E;Ll;0;L;;;;;N;;;13A1;;13A1 AB72;CHEROKEE SMALL LETTER I;Ll;0;L;;;;;N;;;13A2;;13A2 AB73;CHEROKEE SMALL LETTER O;Ll;0;L;;;;;N;;;13A3;;13A3 AB74;CHEROKEE SMALL LETTER U;Ll;0;L;;;;;N;;;13A4;;13A4 AB75;CHEROKEE SMALL LETTER V;Ll;0;L;;;;;N;;;13A5;;13A5 AB76;CHEROKEE SMALL LETTER GA;Ll;0;L;;;;;N;;;13A6;;13A6 AB77;CHEROKEE SMALL LETTER KA;Ll;0;L;;;;;N;;;13A7;;13A7 AB78;CHEROKEE SMALL LETTER GE;Ll;0;L;;;;;N;;;13A8;;13A8 AB79;CHEROKEE SMALL LETTER GI;Ll;0;L;;;;;N;;;13A9;;13A9 AB7A;CHEROKEE SMALL LETTER GO;Ll;0;L;;;;;N;;;13AA;;13AA AB7B;CHEROKEE SMALL LETTER GU;Ll;0;L;;;;;N;;;13AB;;13AB AB7C;CHEROKEE SMALL LETTER GV;Ll;0;L;;;;;N;;;13AC;;13AC AB7D;CHEROKEE SMALL LETTER HA;Ll;0;L;;;;;N;;;13AD;;13AD AB7E;CHEROKEE SMALL LETTER HE;Ll;0;L;;;;;N;;;13AE;;13AE AB7F;CHEROKEE SMALL LETTER HI;Ll;0;L;;;;;N;;;13AF;;13AF AB80;CHEROKEE SMALL LETTER HO;Ll;0;L;;;;;N;;;13B0;;13B0 AB81;CHEROKEE SMALL LETTER HU;Ll;0;L;;;;;N;;;13B1;;13B1 AB82;CHEROKEE SMALL LETTER HV;Ll;0;L;;;;;N;;;13B2;;13B2 AB83;CHEROKEE SMALL LETTER LA;Ll;0;L;;;;;N;;;13B3;;13B3 AB84;CHEROKEE SMALL LETTER LE;Ll;0;L;;;;;N;;;13B4;;13B4 AB85;CHEROKEE SMALL LETTER LI;Ll;0;L;;;;;N;;;13B5;;13B5 AB86;CHEROKEE SMALL LETTER LO;Ll;0;L;;;;;N;;;13B6;;13B6 AB87;CHEROKEE SMALL LETTER LU;Ll;0;L;;;;;N;;;13B7;;13B7 AB88;CHEROKEE SMALL LETTER LV;Ll;0;L;;;;;N;;;13B8;;13B8 AB89;CHEROKEE SMALL LETTER MA;Ll;0;L;;;;;N;;;13B9;;13B9 AB8A;CHEROKEE SMALL LETTER ME;Ll;0;L;;;;;N;;;13BA;;13BA AB8B;CHEROKEE SMALL LETTER MI;Ll;0;L;;;;;N;;;13BB;;13BB AB8C;CHEROKEE SMALL LETTER MO;Ll;0;L;;;;;N;;;13BC;;13BC AB8D;CHEROKEE SMALL LETTER MU;Ll;0;L;;;;;N;;;13BD;;13BD AB8E;CHEROKEE SMALL LETTER NA;Ll;0;L;;;;;N;;;13BE;;13BE AB8F;CHEROKEE SMALL LETTER HNA;Ll;0;L;;;;;N;;;13BF;;13BF AB90;CHEROKEE SMALL LETTER NAH;Ll;0;L;;;;;N;;;13C0;;13C0 AB91;CHEROKEE SMALL LETTER NE;Ll;0;L;;;;;N;;;13C1;;13C1 AB92;CHEROKEE SMALL LETTER NI;Ll;0;L;;;;;N;;;13C2;;13C2 AB93;CHEROKEE SMALL LETTER NO;Ll;0;L;;;;;N;;;13C3;;13C3 AB94;CHEROKEE SMALL LETTER NU;Ll;0;L;;;;;N;;;13C4;;13C4 AB95;CHEROKEE SMALL LETTER NV;Ll;0;L;;;;;N;;;13C5;;13C5 AB96;CHEROKEE SMALL LETTER QUA;Ll;0;L;;;;;N;;;13C6;;13C6 AB97;CHEROKEE SMALL LETTER QUE;Ll;0;L;;;;;N;;;13C7;;13C7 AB98;CHEROKEE SMALL LETTER QUI;Ll;0;L;;;;;N;;;13C8;;13C8 AB99;CHEROKEE SMALL LETTER QUO;Ll;0;L;;;;;N;;;13C9;;13C9 AB9A;CHEROKEE SMALL LETTER QUU;Ll;0;L;;;;;N;;;13CA;;13CA AB9B;CHEROKEE SMALL LETTER QUV;Ll;0;L;;;;;N;;;13CB;;13CB AB9C;CHEROKEE SMALL LETTER SA;Ll;0;L;;;;;N;;;13CC;;13CC AB9D;CHEROKEE SMALL LETTER S;Ll;0;L;;;;;N;;;13CD;;13CD AB9E;CHEROKEE SMALL LETTER SE;Ll;0;L;;;;;N;;;13CE;;13CE AB9F;CHEROKEE SMALL LETTER SI;Ll;0;L;;;;;N;;;13CF;;13CF ABA0;CHEROKEE SMALL LETTER SO;Ll;0;L;;;;;N;;;13D0;;13D0 ABA1;CHEROKEE SMALL LETTER SU;Ll;0;L;;;;;N;;;13D1;;13D1 ABA2;CHEROKEE SMALL LETTER SV;Ll;0;L;;;;;N;;;13D2;;13D2 ABA3;CHEROKEE SMALL LETTER DA;Ll;0;L;;;;;N;;;13D3;;13D3 ABA4;CHEROKEE SMALL LETTER TA;Ll;0;L;;;;;N;;;13D4;;13D4 ABA5;CHEROKEE SMALL LETTER DE;Ll;0;L;;;;;N;;;13D5;;13D5 ABA6;CHEROKEE SMALL LETTER TE;Ll;0;L;;;;;N;;;13D6;;13D6 ABA7;CHEROKEE SMALL LETTER DI;Ll;0;L;;;;;N;;;13D7;;13D7 ABA8;CHEROKEE SMALL LETTER TI;Ll;0;L;;;;;N;;;13D8;;13D8 ABA9;CHEROKEE SMALL LETTER DO;Ll;0;L;;;;;N;;;13D9;;13D9 ABAA;CHEROKEE SMALL LETTER DU;Ll;0;L;;;;;N;;;13DA;;13DA ABAB;CHEROKEE SMALL LETTER DV;Ll;0;L;;;;;N;;;13DB;;13DB ABAC;CHEROKEE SMALL LETTER DLA;Ll;0;L;;;;;N;;;13DC;;13DC ABAD;CHEROKEE SMALL LETTER TLA;Ll;0;L;;;;;N;;;13DD;;13DD ABAE;CHEROKEE SMALL LETTER TLE;Ll;0;L;;;;;N;;;13DE;;13DE ABAF;CHEROKEE SMALL LETTER TLI;Ll;0;L;;;;;N;;;13DF;;13DF ABB0;CHEROKEE SMALL LETTER TLO;Ll;0;L;;;;;N;;;13E0;;13E0 ABB1;CHEROKEE SMALL LETTER TLU;Ll;0;L;;;;;N;;;13E1;;13E1 ABB2;CHEROKEE SMALL LETTER TLV;Ll;0;L;;;;;N;;;13E2;;13E2 ABB3;CHEROKEE SMALL LETTER TSA;Ll;0;L;;;;;N;;;13E3;;13E3 ABB4;CHEROKEE SMALL LETTER TSE;Ll;0;L;;;;;N;;;13E4;;13E4 ABB5;CHEROKEE SMALL LETTER TSI;Ll;0;L;;;;;N;;;13E5;;13E5 ABB6;CHEROKEE SMALL LETTER TSO;Ll;0;L;;;;;N;;;13E6;;13E6 ABB7;CHEROKEE SMALL LETTER TSU;Ll;0;L;;;;;N;;;13E7;;13E7 ABB8;CHEROKEE SMALL LETTER TSV;Ll;0;L;;;;;N;;;13E8;;13E8 ABB9;CHEROKEE SMALL LETTER WA;Ll;0;L;;;;;N;;;13E9;;13E9 ABBA;CHEROKEE SMALL LETTER WE;Ll;0;L;;;;;N;;;13EA;;13EA ABBB;CHEROKEE SMALL LETTER WI;Ll;0;L;;;;;N;;;13EB;;13EB ABBC;CHEROKEE SMALL LETTER WO;Ll;0;L;;;;;N;;;13EC;;13EC ABBD;CHEROKEE SMALL LETTER WU;Ll;0;L;;;;;N;;;13ED;;13ED ABBE;CHEROKEE SMALL LETTER WV;Ll;0;L;;;;;N;;;13EE;;13EE ABBF;CHEROKEE SMALL LETTER YA;Ll;0;L;;;;;N;;;13EF;;13EF ABC0;MEETEI MAYEK LETTER KOK;Lo;0;L;;;;;N;;;;; ABC1;MEETEI MAYEK LETTER SAM;Lo;0;L;;;;;N;;;;; ABC2;MEETEI MAYEK LETTER LAI;Lo;0;L;;;;;N;;;;; ABC3;MEETEI MAYEK LETTER MIT;Lo;0;L;;;;;N;;;;; ABC4;MEETEI MAYEK LETTER PA;Lo;0;L;;;;;N;;;;; ABC5;MEETEI MAYEK LETTER NA;Lo;0;L;;;;;N;;;;; ABC6;MEETEI MAYEK LETTER CHIL;Lo;0;L;;;;;N;;;;; ABC7;MEETEI MAYEK LETTER TIL;Lo;0;L;;;;;N;;;;; ABC8;MEETEI MAYEK LETTER KHOU;Lo;0;L;;;;;N;;;;; ABC9;MEETEI MAYEK LETTER NGOU;Lo;0;L;;;;;N;;;;; ABCA;MEETEI MAYEK LETTER THOU;Lo;0;L;;;;;N;;;;; ABCB;MEETEI MAYEK LETTER WAI;Lo;0;L;;;;;N;;;;; ABCC;MEETEI MAYEK LETTER YANG;Lo;0;L;;;;;N;;;;; ABCD;MEETEI MAYEK LETTER HUK;Lo;0;L;;;;;N;;;;; ABCE;MEETEI MAYEK LETTER UN;Lo;0;L;;;;;N;;;;; ABCF;MEETEI MAYEK LETTER I;Lo;0;L;;;;;N;;;;; ABD0;MEETEI MAYEK LETTER PHAM;Lo;0;L;;;;;N;;;;; ABD1;MEETEI MAYEK LETTER ATIYA;Lo;0;L;;;;;N;;;;; ABD2;MEETEI MAYEK LETTER GOK;Lo;0;L;;;;;N;;;;; ABD3;MEETEI MAYEK LETTER JHAM;Lo;0;L;;;;;N;;;;; ABD4;MEETEI MAYEK LETTER RAI;Lo;0;L;;;;;N;;;;; ABD5;MEETEI MAYEK LETTER BA;Lo;0;L;;;;;N;;;;; ABD6;MEETEI MAYEK LETTER JIL;Lo;0;L;;;;;N;;;;; ABD7;MEETEI MAYEK LETTER DIL;Lo;0;L;;;;;N;;;;; ABD8;MEETEI MAYEK LETTER GHOU;Lo;0;L;;;;;N;;;;; ABD9;MEETEI MAYEK LETTER DHOU;Lo;0;L;;;;;N;;;;; ABDA;MEETEI MAYEK LETTER BHAM;Lo;0;L;;;;;N;;;;; ABDB;MEETEI MAYEK LETTER KOK LONSUM;Lo;0;L;;;;;N;;;;; ABDC;MEETEI MAYEK LETTER LAI LONSUM;Lo;0;L;;;;;N;;;;; ABDD;MEETEI MAYEK LETTER MIT LONSUM;Lo;0;L;;;;;N;;;;; ABDE;MEETEI MAYEK LETTER PA LONSUM;Lo;0;L;;;;;N;;;;; ABDF;MEETEI MAYEK LETTER NA LONSUM;Lo;0;L;;;;;N;;;;; ABE0;MEETEI MAYEK LETTER TIL LONSUM;Lo;0;L;;;;;N;;;;; ABE1;MEETEI MAYEK LETTER NGOU LONSUM;Lo;0;L;;;;;N;;;;; ABE2;MEETEI MAYEK LETTER I LONSUM;Lo;0;L;;;;;N;;;;; ABE3;MEETEI MAYEK VOWEL SIGN ONAP;Mc;0;L;;;;;N;;;;; ABE4;MEETEI MAYEK VOWEL SIGN INAP;Mc;0;L;;;;;N;;;;; ABE5;MEETEI MAYEK VOWEL SIGN ANAP;Mn;0;NSM;;;;;N;;;;; ABE6;MEETEI MAYEK VOWEL SIGN YENAP;Mc;0;L;;;;;N;;;;; ABE7;MEETEI MAYEK VOWEL SIGN SOUNAP;Mc;0;L;;;;;N;;;;; ABE8;MEETEI MAYEK VOWEL SIGN UNAP;Mn;0;NSM;;;;;N;;;;; ABE9;MEETEI MAYEK VOWEL SIGN CHEINAP;Mc;0;L;;;;;N;;;;; ABEA;MEETEI MAYEK VOWEL SIGN NUNG;Mc;0;L;;;;;N;;;;; ABEB;MEETEI MAYEK CHEIKHEI;Po;0;L;;;;;N;;;;; ABEC;MEETEI MAYEK LUM IYEK;Mc;0;L;;;;;N;;;;; ABED;MEETEI MAYEK APUN IYEK;Mn;9;NSM;;;;;N;;;;; ABF0;MEETEI MAYEK DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; ABF1;MEETEI MAYEK DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; ABF2;MEETEI MAYEK DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; ABF3;MEETEI MAYEK DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; ABF4;MEETEI MAYEK DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; ABF5;MEETEI MAYEK DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; ABF6;MEETEI MAYEK DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; ABF7;MEETEI MAYEK DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; ABF8;MEETEI MAYEK DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; ABF9;MEETEI MAYEK DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; AC00;;Lo;0;L;;;;;N;;;;; D7A3;;Lo;0;L;;;;;N;;;;; D7B0;HANGUL JUNGSEONG O-YEO;Lo;0;L;;;;;N;;;;; D7B1;HANGUL JUNGSEONG O-O-I;Lo;0;L;;;;;N;;;;; D7B2;HANGUL JUNGSEONG YO-A;Lo;0;L;;;;;N;;;;; D7B3;HANGUL JUNGSEONG YO-AE;Lo;0;L;;;;;N;;;;; D7B4;HANGUL JUNGSEONG YO-EO;Lo;0;L;;;;;N;;;;; D7B5;HANGUL JUNGSEONG U-YEO;Lo;0;L;;;;;N;;;;; D7B6;HANGUL JUNGSEONG U-I-I;Lo;0;L;;;;;N;;;;; D7B7;HANGUL JUNGSEONG YU-AE;Lo;0;L;;;;;N;;;;; D7B8;HANGUL JUNGSEONG YU-O;Lo;0;L;;;;;N;;;;; D7B9;HANGUL JUNGSEONG EU-A;Lo;0;L;;;;;N;;;;; D7BA;HANGUL JUNGSEONG EU-EO;Lo;0;L;;;;;N;;;;; D7BB;HANGUL JUNGSEONG EU-E;Lo;0;L;;;;;N;;;;; D7BC;HANGUL JUNGSEONG EU-O;Lo;0;L;;;;;N;;;;; D7BD;HANGUL JUNGSEONG I-YA-O;Lo;0;L;;;;;N;;;;; D7BE;HANGUL JUNGSEONG I-YAE;Lo;0;L;;;;;N;;;;; D7BF;HANGUL JUNGSEONG I-YEO;Lo;0;L;;;;;N;;;;; D7C0;HANGUL JUNGSEONG I-YE;Lo;0;L;;;;;N;;;;; D7C1;HANGUL JUNGSEONG I-O-I;Lo;0;L;;;;;N;;;;; D7C2;HANGUL JUNGSEONG I-YO;Lo;0;L;;;;;N;;;;; D7C3;HANGUL JUNGSEONG I-YU;Lo;0;L;;;;;N;;;;; D7C4;HANGUL JUNGSEONG I-I;Lo;0;L;;;;;N;;;;; D7C5;HANGUL JUNGSEONG ARAEA-A;Lo;0;L;;;;;N;;;;; D7C6;HANGUL JUNGSEONG ARAEA-E;Lo;0;L;;;;;N;;;;; D7CB;HANGUL JONGSEONG NIEUN-RIEUL;Lo;0;L;;;;;N;;;;; D7CC;HANGUL JONGSEONG NIEUN-CHIEUCH;Lo;0;L;;;;;N;;;;; D7CD;HANGUL JONGSEONG SSANGTIKEUT;Lo;0;L;;;;;N;;;;; D7CE;HANGUL JONGSEONG SSANGTIKEUT-PIEUP;Lo;0;L;;;;;N;;;;; D7CF;HANGUL JONGSEONG TIKEUT-PIEUP;Lo;0;L;;;;;N;;;;; D7D0;HANGUL JONGSEONG TIKEUT-SIOS;Lo;0;L;;;;;N;;;;; D7D1;HANGUL JONGSEONG TIKEUT-SIOS-KIYEOK;Lo;0;L;;;;;N;;;;; D7D2;HANGUL JONGSEONG TIKEUT-CIEUC;Lo;0;L;;;;;N;;;;; D7D3;HANGUL JONGSEONG TIKEUT-CHIEUCH;Lo;0;L;;;;;N;;;;; D7D4;HANGUL JONGSEONG TIKEUT-THIEUTH;Lo;0;L;;;;;N;;;;; D7D5;HANGUL JONGSEONG RIEUL-SSANGKIYEOK;Lo;0;L;;;;;N;;;;; D7D6;HANGUL JONGSEONG RIEUL-KIYEOK-HIEUH;Lo;0;L;;;;;N;;;;; D7D7;HANGUL JONGSEONG SSANGRIEUL-KHIEUKH;Lo;0;L;;;;;N;;;;; D7D8;HANGUL JONGSEONG RIEUL-MIEUM-HIEUH;Lo;0;L;;;;;N;;;;; D7D9;HANGUL JONGSEONG RIEUL-PIEUP-TIKEUT;Lo;0;L;;;;;N;;;;; D7DA;HANGUL JONGSEONG RIEUL-PIEUP-PHIEUPH;Lo;0;L;;;;;N;;;;; D7DB;HANGUL JONGSEONG RIEUL-YESIEUNG;Lo;0;L;;;;;N;;;;; D7DC;HANGUL JONGSEONG RIEUL-YEORINHIEUH-HIEUH;Lo;0;L;;;;;N;;;;; D7DD;HANGUL JONGSEONG KAPYEOUNRIEUL;Lo;0;L;;;;;N;;;;; D7DE;HANGUL JONGSEONG MIEUM-NIEUN;Lo;0;L;;;;;N;;;;; D7DF;HANGUL JONGSEONG MIEUM-SSANGNIEUN;Lo;0;L;;;;;N;;;;; D7E0;HANGUL JONGSEONG SSANGMIEUM;Lo;0;L;;;;;N;;;;; D7E1;HANGUL JONGSEONG MIEUM-PIEUP-SIOS;Lo;0;L;;;;;N;;;;; D7E2;HANGUL JONGSEONG MIEUM-CIEUC;Lo;0;L;;;;;N;;;;; D7E3;HANGUL JONGSEONG PIEUP-TIKEUT;Lo;0;L;;;;;N;;;;; D7E4;HANGUL JONGSEONG PIEUP-RIEUL-PHIEUPH;Lo;0;L;;;;;N;;;;; D7E5;HANGUL JONGSEONG PIEUP-MIEUM;Lo;0;L;;;;;N;;;;; D7E6;HANGUL JONGSEONG SSANGPIEUP;Lo;0;L;;;;;N;;;;; D7E7;HANGUL JONGSEONG PIEUP-SIOS-TIKEUT;Lo;0;L;;;;;N;;;;; D7E8;HANGUL JONGSEONG PIEUP-CIEUC;Lo;0;L;;;;;N;;;;; D7E9;HANGUL JONGSEONG PIEUP-CHIEUCH;Lo;0;L;;;;;N;;;;; D7EA;HANGUL JONGSEONG SIOS-MIEUM;Lo;0;L;;;;;N;;;;; D7EB;HANGUL JONGSEONG SIOS-KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;; D7EC;HANGUL JONGSEONG SSANGSIOS-KIYEOK;Lo;0;L;;;;;N;;;;; D7ED;HANGUL JONGSEONG SSANGSIOS-TIKEUT;Lo;0;L;;;;;N;;;;; D7EE;HANGUL JONGSEONG SIOS-PANSIOS;Lo;0;L;;;;;N;;;;; D7EF;HANGUL JONGSEONG SIOS-CIEUC;Lo;0;L;;;;;N;;;;; D7F0;HANGUL JONGSEONG SIOS-CHIEUCH;Lo;0;L;;;;;N;;;;; D7F1;HANGUL JONGSEONG SIOS-THIEUTH;Lo;0;L;;;;;N;;;;; D7F2;HANGUL JONGSEONG SIOS-HIEUH;Lo;0;L;;;;;N;;;;; D7F3;HANGUL JONGSEONG PANSIOS-PIEUP;Lo;0;L;;;;;N;;;;; D7F4;HANGUL JONGSEONG PANSIOS-KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;; D7F5;HANGUL JONGSEONG YESIEUNG-MIEUM;Lo;0;L;;;;;N;;;;; D7F6;HANGUL JONGSEONG YESIEUNG-HIEUH;Lo;0;L;;;;;N;;;;; D7F7;HANGUL JONGSEONG CIEUC-PIEUP;Lo;0;L;;;;;N;;;;; D7F8;HANGUL JONGSEONG CIEUC-SSANGPIEUP;Lo;0;L;;;;;N;;;;; D7F9;HANGUL JONGSEONG SSANGCIEUC;Lo;0;L;;;;;N;;;;; D7FA;HANGUL JONGSEONG PHIEUPH-SIOS;Lo;0;L;;;;;N;;;;; D7FB;HANGUL JONGSEONG PHIEUPH-THIEUTH;Lo;0;L;;;;;N;;;;; D800;;Cs;0;L;;;;;N;;;;; DB7F;;Cs;0;L;;;;;N;;;;; DB80;;Cs;0;L;;;;;N;;;;; DBFF;;Cs;0;L;;;;;N;;;;; DC00;;Cs;0;L;;;;;N;;;;; DFFF;;Cs;0;L;;;;;N;;;;; E000;;Co;0;L;;;;;N;;;;; F8FF;;Co;0;L;;;;;N;;;;; F900;CJK COMPATIBILITY IDEOGRAPH-F900;Lo;0;L;8C48;;;;N;;;;; F901;CJK COMPATIBILITY IDEOGRAPH-F901;Lo;0;L;66F4;;;;N;;;;; F902;CJK COMPATIBILITY IDEOGRAPH-F902;Lo;0;L;8ECA;;;;N;;;;; F903;CJK COMPATIBILITY IDEOGRAPH-F903;Lo;0;L;8CC8;;;;N;;;;; F904;CJK COMPATIBILITY IDEOGRAPH-F904;Lo;0;L;6ED1;;;;N;;;;; F905;CJK COMPATIBILITY IDEOGRAPH-F905;Lo;0;L;4E32;;;;N;;;;; F906;CJK COMPATIBILITY IDEOGRAPH-F906;Lo;0;L;53E5;;;;N;;;;; F907;CJK COMPATIBILITY IDEOGRAPH-F907;Lo;0;L;9F9C;;;;N;;;;; F908;CJK COMPATIBILITY IDEOGRAPH-F908;Lo;0;L;9F9C;;;;N;;;;; F909;CJK COMPATIBILITY IDEOGRAPH-F909;Lo;0;L;5951;;;;N;;;;; F90A;CJK COMPATIBILITY IDEOGRAPH-F90A;Lo;0;L;91D1;;;;N;;;;; F90B;CJK COMPATIBILITY IDEOGRAPH-F90B;Lo;0;L;5587;;;;N;;;;; F90C;CJK COMPATIBILITY IDEOGRAPH-F90C;Lo;0;L;5948;;;;N;;;;; F90D;CJK COMPATIBILITY IDEOGRAPH-F90D;Lo;0;L;61F6;;;;N;;;;; F90E;CJK COMPATIBILITY IDEOGRAPH-F90E;Lo;0;L;7669;;;;N;;;;; F90F;CJK COMPATIBILITY IDEOGRAPH-F90F;Lo;0;L;7F85;;;;N;;;;; F910;CJK COMPATIBILITY IDEOGRAPH-F910;Lo;0;L;863F;;;;N;;;;; F911;CJK COMPATIBILITY IDEOGRAPH-F911;Lo;0;L;87BA;;;;N;;;;; F912;CJK COMPATIBILITY IDEOGRAPH-F912;Lo;0;L;88F8;;;;N;;;;; F913;CJK COMPATIBILITY IDEOGRAPH-F913;Lo;0;L;908F;;;;N;;;;; F914;CJK COMPATIBILITY IDEOGRAPH-F914;Lo;0;L;6A02;;;;N;;;;; F915;CJK COMPATIBILITY IDEOGRAPH-F915;Lo;0;L;6D1B;;;;N;;;;; F916;CJK COMPATIBILITY IDEOGRAPH-F916;Lo;0;L;70D9;;;;N;;;;; F917;CJK COMPATIBILITY IDEOGRAPH-F917;Lo;0;L;73DE;;;;N;;;;; F918;CJK COMPATIBILITY IDEOGRAPH-F918;Lo;0;L;843D;;;;N;;;;; F919;CJK COMPATIBILITY IDEOGRAPH-F919;Lo;0;L;916A;;;;N;;;;; F91A;CJK COMPATIBILITY IDEOGRAPH-F91A;Lo;0;L;99F1;;;;N;;;;; F91B;CJK COMPATIBILITY IDEOGRAPH-F91B;Lo;0;L;4E82;;;;N;;;;; F91C;CJK COMPATIBILITY IDEOGRAPH-F91C;Lo;0;L;5375;;;;N;;;;; F91D;CJK COMPATIBILITY IDEOGRAPH-F91D;Lo;0;L;6B04;;;;N;;;;; F91E;CJK COMPATIBILITY IDEOGRAPH-F91E;Lo;0;L;721B;;;;N;;;;; F91F;CJK COMPATIBILITY IDEOGRAPH-F91F;Lo;0;L;862D;;;;N;;;;; F920;CJK COMPATIBILITY IDEOGRAPH-F920;Lo;0;L;9E1E;;;;N;;;;; F921;CJK COMPATIBILITY IDEOGRAPH-F921;Lo;0;L;5D50;;;;N;;;;; F922;CJK COMPATIBILITY IDEOGRAPH-F922;Lo;0;L;6FEB;;;;N;;;;; F923;CJK COMPATIBILITY IDEOGRAPH-F923;Lo;0;L;85CD;;;;N;;;;; F924;CJK COMPATIBILITY IDEOGRAPH-F924;Lo;0;L;8964;;;;N;;;;; F925;CJK COMPATIBILITY IDEOGRAPH-F925;Lo;0;L;62C9;;;;N;;;;; F926;CJK COMPATIBILITY IDEOGRAPH-F926;Lo;0;L;81D8;;;;N;;;;; F927;CJK COMPATIBILITY IDEOGRAPH-F927;Lo;0;L;881F;;;;N;;;;; F928;CJK COMPATIBILITY IDEOGRAPH-F928;Lo;0;L;5ECA;;;;N;;;;; F929;CJK COMPATIBILITY IDEOGRAPH-F929;Lo;0;L;6717;;;;N;;;;; F92A;CJK COMPATIBILITY IDEOGRAPH-F92A;Lo;0;L;6D6A;;;;N;;;;; F92B;CJK COMPATIBILITY IDEOGRAPH-F92B;Lo;0;L;72FC;;;;N;;;;; F92C;CJK COMPATIBILITY IDEOGRAPH-F92C;Lo;0;L;90CE;;;;N;;;;; F92D;CJK COMPATIBILITY IDEOGRAPH-F92D;Lo;0;L;4F86;;;;N;;;;; F92E;CJK COMPATIBILITY IDEOGRAPH-F92E;Lo;0;L;51B7;;;;N;;;;; F92F;CJK COMPATIBILITY IDEOGRAPH-F92F;Lo;0;L;52DE;;;;N;;;;; F930;CJK COMPATIBILITY IDEOGRAPH-F930;Lo;0;L;64C4;;;;N;;;;; F931;CJK COMPATIBILITY IDEOGRAPH-F931;Lo;0;L;6AD3;;;;N;;;;; F932;CJK COMPATIBILITY IDEOGRAPH-F932;Lo;0;L;7210;;;;N;;;;; F933;CJK COMPATIBILITY IDEOGRAPH-F933;Lo;0;L;76E7;;;;N;;;;; F934;CJK COMPATIBILITY IDEOGRAPH-F934;Lo;0;L;8001;;;;N;;;;; F935;CJK COMPATIBILITY IDEOGRAPH-F935;Lo;0;L;8606;;;;N;;;;; F936;CJK COMPATIBILITY IDEOGRAPH-F936;Lo;0;L;865C;;;;N;;;;; F937;CJK COMPATIBILITY IDEOGRAPH-F937;Lo;0;L;8DEF;;;;N;;;;; F938;CJK COMPATIBILITY IDEOGRAPH-F938;Lo;0;L;9732;;;;N;;;;; F939;CJK COMPATIBILITY IDEOGRAPH-F939;Lo;0;L;9B6F;;;;N;;;;; F93A;CJK COMPATIBILITY IDEOGRAPH-F93A;Lo;0;L;9DFA;;;;N;;;;; F93B;CJK COMPATIBILITY IDEOGRAPH-F93B;Lo;0;L;788C;;;;N;;;;; F93C;CJK COMPATIBILITY IDEOGRAPH-F93C;Lo;0;L;797F;;;;N;;;;; F93D;CJK COMPATIBILITY IDEOGRAPH-F93D;Lo;0;L;7DA0;;;;N;;;;; F93E;CJK COMPATIBILITY IDEOGRAPH-F93E;Lo;0;L;83C9;;;;N;;;;; F93F;CJK COMPATIBILITY IDEOGRAPH-F93F;Lo;0;L;9304;;;;N;;;;; F940;CJK COMPATIBILITY IDEOGRAPH-F940;Lo;0;L;9E7F;;;;N;;;;; F941;CJK COMPATIBILITY IDEOGRAPH-F941;Lo;0;L;8AD6;;;;N;;;;; F942;CJK COMPATIBILITY IDEOGRAPH-F942;Lo;0;L;58DF;;;;N;;;;; F943;CJK COMPATIBILITY IDEOGRAPH-F943;Lo;0;L;5F04;;;;N;;;;; F944;CJK COMPATIBILITY IDEOGRAPH-F944;Lo;0;L;7C60;;;;N;;;;; F945;CJK COMPATIBILITY IDEOGRAPH-F945;Lo;0;L;807E;;;;N;;;;; F946;CJK COMPATIBILITY IDEOGRAPH-F946;Lo;0;L;7262;;;;N;;;;; F947;CJK COMPATIBILITY IDEOGRAPH-F947;Lo;0;L;78CA;;;;N;;;;; F948;CJK COMPATIBILITY IDEOGRAPH-F948;Lo;0;L;8CC2;;;;N;;;;; F949;CJK COMPATIBILITY IDEOGRAPH-F949;Lo;0;L;96F7;;;;N;;;;; F94A;CJK COMPATIBILITY IDEOGRAPH-F94A;Lo;0;L;58D8;;;;N;;;;; F94B;CJK COMPATIBILITY IDEOGRAPH-F94B;Lo;0;L;5C62;;;;N;;;;; F94C;CJK COMPATIBILITY IDEOGRAPH-F94C;Lo;0;L;6A13;;;;N;;;;; F94D;CJK COMPATIBILITY IDEOGRAPH-F94D;Lo;0;L;6DDA;;;;N;;;;; F94E;CJK COMPATIBILITY IDEOGRAPH-F94E;Lo;0;L;6F0F;;;;N;;;;; F94F;CJK COMPATIBILITY IDEOGRAPH-F94F;Lo;0;L;7D2F;;;;N;;;;; F950;CJK COMPATIBILITY IDEOGRAPH-F950;Lo;0;L;7E37;;;;N;;;;; F951;CJK COMPATIBILITY IDEOGRAPH-F951;Lo;0;L;964B;;;;N;;;;; F952;CJK COMPATIBILITY IDEOGRAPH-F952;Lo;0;L;52D2;;;;N;;;;; F953;CJK COMPATIBILITY IDEOGRAPH-F953;Lo;0;L;808B;;;;N;;;;; F954;CJK COMPATIBILITY IDEOGRAPH-F954;Lo;0;L;51DC;;;;N;;;;; F955;CJK COMPATIBILITY IDEOGRAPH-F955;Lo;0;L;51CC;;;;N;;;;; F956;CJK COMPATIBILITY IDEOGRAPH-F956;Lo;0;L;7A1C;;;;N;;;;; F957;CJK COMPATIBILITY IDEOGRAPH-F957;Lo;0;L;7DBE;;;;N;;;;; F958;CJK COMPATIBILITY IDEOGRAPH-F958;Lo;0;L;83F1;;;;N;;;;; F959;CJK COMPATIBILITY IDEOGRAPH-F959;Lo;0;L;9675;;;;N;;;;; F95A;CJK COMPATIBILITY IDEOGRAPH-F95A;Lo;0;L;8B80;;;;N;;;;; F95B;CJK COMPATIBILITY IDEOGRAPH-F95B;Lo;0;L;62CF;;;;N;;;;; F95C;CJK COMPATIBILITY IDEOGRAPH-F95C;Lo;0;L;6A02;;;;N;;;;; F95D;CJK COMPATIBILITY IDEOGRAPH-F95D;Lo;0;L;8AFE;;;;N;;;;; F95E;CJK COMPATIBILITY IDEOGRAPH-F95E;Lo;0;L;4E39;;;;N;;;;; F95F;CJK COMPATIBILITY IDEOGRAPH-F95F;Lo;0;L;5BE7;;;;N;;;;; F960;CJK COMPATIBILITY IDEOGRAPH-F960;Lo;0;L;6012;;;;N;;;;; F961;CJK COMPATIBILITY IDEOGRAPH-F961;Lo;0;L;7387;;;;N;;;;; F962;CJK COMPATIBILITY IDEOGRAPH-F962;Lo;0;L;7570;;;;N;;;;; F963;CJK COMPATIBILITY IDEOGRAPH-F963;Lo;0;L;5317;;;;N;;;;; F964;CJK COMPATIBILITY IDEOGRAPH-F964;Lo;0;L;78FB;;;;N;;;;; F965;CJK COMPATIBILITY IDEOGRAPH-F965;Lo;0;L;4FBF;;;;N;;;;; F966;CJK COMPATIBILITY IDEOGRAPH-F966;Lo;0;L;5FA9;;;;N;;;;; F967;CJK COMPATIBILITY IDEOGRAPH-F967;Lo;0;L;4E0D;;;;N;;;;; F968;CJK COMPATIBILITY IDEOGRAPH-F968;Lo;0;L;6CCC;;;;N;;;;; F969;CJK COMPATIBILITY IDEOGRAPH-F969;Lo;0;L;6578;;;;N;;;;; F96A;CJK COMPATIBILITY IDEOGRAPH-F96A;Lo;0;L;7D22;;;;N;;;;; F96B;CJK COMPATIBILITY IDEOGRAPH-F96B;Lo;0;L;53C3;;;3;N;;;;; F96C;CJK COMPATIBILITY IDEOGRAPH-F96C;Lo;0;L;585E;;;;N;;;;; F96D;CJK COMPATIBILITY IDEOGRAPH-F96D;Lo;0;L;7701;;;;N;;;;; F96E;CJK COMPATIBILITY IDEOGRAPH-F96E;Lo;0;L;8449;;;;N;;;;; F96F;CJK COMPATIBILITY IDEOGRAPH-F96F;Lo;0;L;8AAA;;;;N;;;;; F970;CJK COMPATIBILITY IDEOGRAPH-F970;Lo;0;L;6BBA;;;;N;;;;; F971;CJK COMPATIBILITY IDEOGRAPH-F971;Lo;0;L;8FB0;;;;N;;;;; F972;CJK COMPATIBILITY IDEOGRAPH-F972;Lo;0;L;6C88;;;;N;;;;; F973;CJK COMPATIBILITY IDEOGRAPH-F973;Lo;0;L;62FE;;;10;N;;;;; F974;CJK COMPATIBILITY IDEOGRAPH-F974;Lo;0;L;82E5;;;;N;;;;; F975;CJK COMPATIBILITY IDEOGRAPH-F975;Lo;0;L;63A0;;;;N;;;;; F976;CJK COMPATIBILITY IDEOGRAPH-F976;Lo;0;L;7565;;;;N;;;;; F977;CJK COMPATIBILITY IDEOGRAPH-F977;Lo;0;L;4EAE;;;;N;;;;; F978;CJK COMPATIBILITY IDEOGRAPH-F978;Lo;0;L;5169;;;2;N;;;;; F979;CJK COMPATIBILITY IDEOGRAPH-F979;Lo;0;L;51C9;;;;N;;;;; F97A;CJK COMPATIBILITY IDEOGRAPH-F97A;Lo;0;L;6881;;;;N;;;;; F97B;CJK COMPATIBILITY IDEOGRAPH-F97B;Lo;0;L;7CE7;;;;N;;;;; F97C;CJK COMPATIBILITY IDEOGRAPH-F97C;Lo;0;L;826F;;;;N;;;;; F97D;CJK COMPATIBILITY IDEOGRAPH-F97D;Lo;0;L;8AD2;;;;N;;;;; F97E;CJK COMPATIBILITY IDEOGRAPH-F97E;Lo;0;L;91CF;;;;N;;;;; F97F;CJK COMPATIBILITY IDEOGRAPH-F97F;Lo;0;L;52F5;;;;N;;;;; F980;CJK COMPATIBILITY IDEOGRAPH-F980;Lo;0;L;5442;;;;N;;;;; F981;CJK COMPATIBILITY IDEOGRAPH-F981;Lo;0;L;5973;;;;N;;;;; F982;CJK COMPATIBILITY IDEOGRAPH-F982;Lo;0;L;5EEC;;;;N;;;;; F983;CJK COMPATIBILITY IDEOGRAPH-F983;Lo;0;L;65C5;;;;N;;;;; F984;CJK COMPATIBILITY IDEOGRAPH-F984;Lo;0;L;6FFE;;;;N;;;;; F985;CJK COMPATIBILITY IDEOGRAPH-F985;Lo;0;L;792A;;;;N;;;;; F986;CJK COMPATIBILITY IDEOGRAPH-F986;Lo;0;L;95AD;;;;N;;;;; F987;CJK COMPATIBILITY IDEOGRAPH-F987;Lo;0;L;9A6A;;;;N;;;;; F988;CJK COMPATIBILITY IDEOGRAPH-F988;Lo;0;L;9E97;;;;N;;;;; F989;CJK COMPATIBILITY IDEOGRAPH-F989;Lo;0;L;9ECE;;;;N;;;;; F98A;CJK COMPATIBILITY IDEOGRAPH-F98A;Lo;0;L;529B;;;;N;;;;; F98B;CJK COMPATIBILITY IDEOGRAPH-F98B;Lo;0;L;66C6;;;;N;;;;; F98C;CJK COMPATIBILITY IDEOGRAPH-F98C;Lo;0;L;6B77;;;;N;;;;; F98D;CJK COMPATIBILITY IDEOGRAPH-F98D;Lo;0;L;8F62;;;;N;;;;; F98E;CJK COMPATIBILITY IDEOGRAPH-F98E;Lo;0;L;5E74;;;;N;;;;; F98F;CJK COMPATIBILITY IDEOGRAPH-F98F;Lo;0;L;6190;;;;N;;;;; F990;CJK COMPATIBILITY IDEOGRAPH-F990;Lo;0;L;6200;;;;N;;;;; F991;CJK COMPATIBILITY IDEOGRAPH-F991;Lo;0;L;649A;;;;N;;;;; F992;CJK COMPATIBILITY IDEOGRAPH-F992;Lo;0;L;6F23;;;;N;;;;; F993;CJK COMPATIBILITY IDEOGRAPH-F993;Lo;0;L;7149;;;;N;;;;; F994;CJK COMPATIBILITY IDEOGRAPH-F994;Lo;0;L;7489;;;;N;;;;; F995;CJK COMPATIBILITY IDEOGRAPH-F995;Lo;0;L;79CA;;;;N;;;;; F996;CJK COMPATIBILITY IDEOGRAPH-F996;Lo;0;L;7DF4;;;;N;;;;; F997;CJK COMPATIBILITY IDEOGRAPH-F997;Lo;0;L;806F;;;;N;;;;; F998;CJK COMPATIBILITY IDEOGRAPH-F998;Lo;0;L;8F26;;;;N;;;;; F999;CJK COMPATIBILITY IDEOGRAPH-F999;Lo;0;L;84EE;;;;N;;;;; F99A;CJK COMPATIBILITY IDEOGRAPH-F99A;Lo;0;L;9023;;;;N;;;;; F99B;CJK COMPATIBILITY IDEOGRAPH-F99B;Lo;0;L;934A;;;;N;;;;; F99C;CJK COMPATIBILITY IDEOGRAPH-F99C;Lo;0;L;5217;;;;N;;;;; F99D;CJK COMPATIBILITY IDEOGRAPH-F99D;Lo;0;L;52A3;;;;N;;;;; F99E;CJK COMPATIBILITY IDEOGRAPH-F99E;Lo;0;L;54BD;;;;N;;;;; F99F;CJK COMPATIBILITY IDEOGRAPH-F99F;Lo;0;L;70C8;;;;N;;;;; F9A0;CJK COMPATIBILITY IDEOGRAPH-F9A0;Lo;0;L;88C2;;;;N;;;;; F9A1;CJK COMPATIBILITY IDEOGRAPH-F9A1;Lo;0;L;8AAA;;;;N;;;;; F9A2;CJK COMPATIBILITY IDEOGRAPH-F9A2;Lo;0;L;5EC9;;;;N;;;;; F9A3;CJK COMPATIBILITY IDEOGRAPH-F9A3;Lo;0;L;5FF5;;;;N;;;;; F9A4;CJK COMPATIBILITY IDEOGRAPH-F9A4;Lo;0;L;637B;;;;N;;;;; F9A5;CJK COMPATIBILITY IDEOGRAPH-F9A5;Lo;0;L;6BAE;;;;N;;;;; F9A6;CJK COMPATIBILITY IDEOGRAPH-F9A6;Lo;0;L;7C3E;;;;N;;;;; F9A7;CJK COMPATIBILITY IDEOGRAPH-F9A7;Lo;0;L;7375;;;;N;;;;; F9A8;CJK COMPATIBILITY IDEOGRAPH-F9A8;Lo;0;L;4EE4;;;;N;;;;; F9A9;CJK COMPATIBILITY IDEOGRAPH-F9A9;Lo;0;L;56F9;;;;N;;;;; F9AA;CJK COMPATIBILITY IDEOGRAPH-F9AA;Lo;0;L;5BE7;;;;N;;;;; F9AB;CJK COMPATIBILITY IDEOGRAPH-F9AB;Lo;0;L;5DBA;;;;N;;;;; F9AC;CJK COMPATIBILITY IDEOGRAPH-F9AC;Lo;0;L;601C;;;;N;;;;; F9AD;CJK COMPATIBILITY IDEOGRAPH-F9AD;Lo;0;L;73B2;;;;N;;;;; F9AE;CJK COMPATIBILITY IDEOGRAPH-F9AE;Lo;0;L;7469;;;;N;;;;; F9AF;CJK COMPATIBILITY IDEOGRAPH-F9AF;Lo;0;L;7F9A;;;;N;;;;; F9B0;CJK COMPATIBILITY IDEOGRAPH-F9B0;Lo;0;L;8046;;;;N;;;;; F9B1;CJK COMPATIBILITY IDEOGRAPH-F9B1;Lo;0;L;9234;;;;N;;;;; F9B2;CJK COMPATIBILITY IDEOGRAPH-F9B2;Lo;0;L;96F6;;;0;N;;;;; F9B3;CJK COMPATIBILITY IDEOGRAPH-F9B3;Lo;0;L;9748;;;;N;;;;; F9B4;CJK COMPATIBILITY IDEOGRAPH-F9B4;Lo;0;L;9818;;;;N;;;;; F9B5;CJK COMPATIBILITY IDEOGRAPH-F9B5;Lo;0;L;4F8B;;;;N;;;;; F9B6;CJK COMPATIBILITY IDEOGRAPH-F9B6;Lo;0;L;79AE;;;;N;;;;; F9B7;CJK COMPATIBILITY IDEOGRAPH-F9B7;Lo;0;L;91B4;;;;N;;;;; F9B8;CJK COMPATIBILITY IDEOGRAPH-F9B8;Lo;0;L;96B8;;;;N;;;;; F9B9;CJK COMPATIBILITY IDEOGRAPH-F9B9;Lo;0;L;60E1;;;;N;;;;; F9BA;CJK COMPATIBILITY IDEOGRAPH-F9BA;Lo;0;L;4E86;;;;N;;;;; F9BB;CJK COMPATIBILITY IDEOGRAPH-F9BB;Lo;0;L;50DA;;;;N;;;;; F9BC;CJK COMPATIBILITY IDEOGRAPH-F9BC;Lo;0;L;5BEE;;;;N;;;;; F9BD;CJK COMPATIBILITY IDEOGRAPH-F9BD;Lo;0;L;5C3F;;;;N;;;;; F9BE;CJK COMPATIBILITY IDEOGRAPH-F9BE;Lo;0;L;6599;;;;N;;;;; F9BF;CJK COMPATIBILITY IDEOGRAPH-F9BF;Lo;0;L;6A02;;;;N;;;;; F9C0;CJK COMPATIBILITY IDEOGRAPH-F9C0;Lo;0;L;71CE;;;;N;;;;; F9C1;CJK COMPATIBILITY IDEOGRAPH-F9C1;Lo;0;L;7642;;;;N;;;;; F9C2;CJK COMPATIBILITY IDEOGRAPH-F9C2;Lo;0;L;84FC;;;;N;;;;; F9C3;CJK COMPATIBILITY IDEOGRAPH-F9C3;Lo;0;L;907C;;;;N;;;;; F9C4;CJK COMPATIBILITY IDEOGRAPH-F9C4;Lo;0;L;9F8D;;;;N;;;;; F9C5;CJK COMPATIBILITY IDEOGRAPH-F9C5;Lo;0;L;6688;;;;N;;;;; F9C6;CJK COMPATIBILITY IDEOGRAPH-F9C6;Lo;0;L;962E;;;;N;;;;; F9C7;CJK COMPATIBILITY IDEOGRAPH-F9C7;Lo;0;L;5289;;;;N;;;;; F9C8;CJK COMPATIBILITY IDEOGRAPH-F9C8;Lo;0;L;677B;;;;N;;;;; F9C9;CJK COMPATIBILITY IDEOGRAPH-F9C9;Lo;0;L;67F3;;;;N;;;;; F9CA;CJK COMPATIBILITY IDEOGRAPH-F9CA;Lo;0;L;6D41;;;;N;;;;; F9CB;CJK COMPATIBILITY IDEOGRAPH-F9CB;Lo;0;L;6E9C;;;;N;;;;; F9CC;CJK COMPATIBILITY IDEOGRAPH-F9CC;Lo;0;L;7409;;;;N;;;;; F9CD;CJK COMPATIBILITY IDEOGRAPH-F9CD;Lo;0;L;7559;;;;N;;;;; F9CE;CJK COMPATIBILITY IDEOGRAPH-F9CE;Lo;0;L;786B;;;;N;;;;; F9CF;CJK COMPATIBILITY IDEOGRAPH-F9CF;Lo;0;L;7D10;;;;N;;;;; F9D0;CJK COMPATIBILITY IDEOGRAPH-F9D0;Lo;0;L;985E;;;;N;;;;; F9D1;CJK COMPATIBILITY IDEOGRAPH-F9D1;Lo;0;L;516D;;;6;N;;;;; F9D2;CJK COMPATIBILITY IDEOGRAPH-F9D2;Lo;0;L;622E;;;;N;;;;; F9D3;CJK COMPATIBILITY IDEOGRAPH-F9D3;Lo;0;L;9678;;;6;N;;;;; F9D4;CJK COMPATIBILITY IDEOGRAPH-F9D4;Lo;0;L;502B;;;;N;;;;; F9D5;CJK COMPATIBILITY IDEOGRAPH-F9D5;Lo;0;L;5D19;;;;N;;;;; F9D6;CJK COMPATIBILITY IDEOGRAPH-F9D6;Lo;0;L;6DEA;;;;N;;;;; F9D7;CJK COMPATIBILITY IDEOGRAPH-F9D7;Lo;0;L;8F2A;;;;N;;;;; F9D8;CJK COMPATIBILITY IDEOGRAPH-F9D8;Lo;0;L;5F8B;;;;N;;;;; F9D9;CJK COMPATIBILITY IDEOGRAPH-F9D9;Lo;0;L;6144;;;;N;;;;; F9DA;CJK COMPATIBILITY IDEOGRAPH-F9DA;Lo;0;L;6817;;;;N;;;;; F9DB;CJK COMPATIBILITY IDEOGRAPH-F9DB;Lo;0;L;7387;;;;N;;;;; F9DC;CJK COMPATIBILITY IDEOGRAPH-F9DC;Lo;0;L;9686;;;;N;;;;; F9DD;CJK COMPATIBILITY IDEOGRAPH-F9DD;Lo;0;L;5229;;;;N;;;;; F9DE;CJK COMPATIBILITY IDEOGRAPH-F9DE;Lo;0;L;540F;;;;N;;;;; F9DF;CJK COMPATIBILITY IDEOGRAPH-F9DF;Lo;0;L;5C65;;;;N;;;;; F9E0;CJK COMPATIBILITY IDEOGRAPH-F9E0;Lo;0;L;6613;;;;N;;;;; F9E1;CJK COMPATIBILITY IDEOGRAPH-F9E1;Lo;0;L;674E;;;;N;;;;; F9E2;CJK COMPATIBILITY IDEOGRAPH-F9E2;Lo;0;L;68A8;;;;N;;;;; F9E3;CJK COMPATIBILITY IDEOGRAPH-F9E3;Lo;0;L;6CE5;;;;N;;;;; F9E4;CJK COMPATIBILITY IDEOGRAPH-F9E4;Lo;0;L;7406;;;;N;;;;; F9E5;CJK COMPATIBILITY IDEOGRAPH-F9E5;Lo;0;L;75E2;;;;N;;;;; F9E6;CJK COMPATIBILITY IDEOGRAPH-F9E6;Lo;0;L;7F79;;;;N;;;;; F9E7;CJK COMPATIBILITY IDEOGRAPH-F9E7;Lo;0;L;88CF;;;;N;;;;; F9E8;CJK COMPATIBILITY IDEOGRAPH-F9E8;Lo;0;L;88E1;;;;N;;;;; F9E9;CJK COMPATIBILITY IDEOGRAPH-F9E9;Lo;0;L;91CC;;;;N;;;;; F9EA;CJK COMPATIBILITY IDEOGRAPH-F9EA;Lo;0;L;96E2;;;;N;;;;; F9EB;CJK COMPATIBILITY IDEOGRAPH-F9EB;Lo;0;L;533F;;;;N;;;;; F9EC;CJK COMPATIBILITY IDEOGRAPH-F9EC;Lo;0;L;6EBA;;;;N;;;;; F9ED;CJK COMPATIBILITY IDEOGRAPH-F9ED;Lo;0;L;541D;;;;N;;;;; F9EE;CJK COMPATIBILITY IDEOGRAPH-F9EE;Lo;0;L;71D0;;;;N;;;;; F9EF;CJK COMPATIBILITY IDEOGRAPH-F9EF;Lo;0;L;7498;;;;N;;;;; F9F0;CJK COMPATIBILITY IDEOGRAPH-F9F0;Lo;0;L;85FA;;;;N;;;;; F9F1;CJK COMPATIBILITY IDEOGRAPH-F9F1;Lo;0;L;96A3;;;;N;;;;; F9F2;CJK COMPATIBILITY IDEOGRAPH-F9F2;Lo;0;L;9C57;;;;N;;;;; F9F3;CJK COMPATIBILITY IDEOGRAPH-F9F3;Lo;0;L;9E9F;;;;N;;;;; F9F4;CJK COMPATIBILITY IDEOGRAPH-F9F4;Lo;0;L;6797;;;;N;;;;; F9F5;CJK COMPATIBILITY IDEOGRAPH-F9F5;Lo;0;L;6DCB;;;;N;;;;; F9F6;CJK COMPATIBILITY IDEOGRAPH-F9F6;Lo;0;L;81E8;;;;N;;;;; F9F7;CJK COMPATIBILITY IDEOGRAPH-F9F7;Lo;0;L;7ACB;;;;N;;;;; F9F8;CJK COMPATIBILITY IDEOGRAPH-F9F8;Lo;0;L;7B20;;;;N;;;;; F9F9;CJK COMPATIBILITY IDEOGRAPH-F9F9;Lo;0;L;7C92;;;;N;;;;; F9FA;CJK COMPATIBILITY IDEOGRAPH-F9FA;Lo;0;L;72C0;;;;N;;;;; F9FB;CJK COMPATIBILITY IDEOGRAPH-F9FB;Lo;0;L;7099;;;;N;;;;; F9FC;CJK COMPATIBILITY IDEOGRAPH-F9FC;Lo;0;L;8B58;;;;N;;;;; F9FD;CJK COMPATIBILITY IDEOGRAPH-F9FD;Lo;0;L;4EC0;;;10;N;;;;; F9FE;CJK COMPATIBILITY IDEOGRAPH-F9FE;Lo;0;L;8336;;;;N;;;;; F9FF;CJK COMPATIBILITY IDEOGRAPH-F9FF;Lo;0;L;523A;;;;N;;;;; FA00;CJK COMPATIBILITY IDEOGRAPH-FA00;Lo;0;L;5207;;;;N;;;;; FA01;CJK COMPATIBILITY IDEOGRAPH-FA01;Lo;0;L;5EA6;;;;N;;;;; FA02;CJK COMPATIBILITY IDEOGRAPH-FA02;Lo;0;L;62D3;;;;N;;;;; FA03;CJK COMPATIBILITY IDEOGRAPH-FA03;Lo;0;L;7CD6;;;;N;;;;; FA04;CJK COMPATIBILITY IDEOGRAPH-FA04;Lo;0;L;5B85;;;;N;;;;; FA05;CJK COMPATIBILITY IDEOGRAPH-FA05;Lo;0;L;6D1E;;;;N;;;;; FA06;CJK COMPATIBILITY IDEOGRAPH-FA06;Lo;0;L;66B4;;;;N;;;;; FA07;CJK COMPATIBILITY IDEOGRAPH-FA07;Lo;0;L;8F3B;;;;N;;;;; FA08;CJK COMPATIBILITY IDEOGRAPH-FA08;Lo;0;L;884C;;;;N;;;;; FA09;CJK COMPATIBILITY IDEOGRAPH-FA09;Lo;0;L;964D;;;;N;;;;; FA0A;CJK COMPATIBILITY IDEOGRAPH-FA0A;Lo;0;L;898B;;;;N;;;;; FA0B;CJK COMPATIBILITY IDEOGRAPH-FA0B;Lo;0;L;5ED3;;;;N;;;;; FA0C;CJK COMPATIBILITY IDEOGRAPH-FA0C;Lo;0;L;5140;;;;N;;;;; FA0D;CJK COMPATIBILITY IDEOGRAPH-FA0D;Lo;0;L;55C0;;;;N;;;;; FA0E;CJK COMPATIBILITY IDEOGRAPH-FA0E;Lo;0;L;;;;;N;;;;; FA0F;CJK COMPATIBILITY IDEOGRAPH-FA0F;Lo;0;L;;;;;N;;;;; FA10;CJK COMPATIBILITY IDEOGRAPH-FA10;Lo;0;L;585A;;;;N;;;;; FA11;CJK COMPATIBILITY IDEOGRAPH-FA11;Lo;0;L;;;;;N;;;;; FA12;CJK COMPATIBILITY IDEOGRAPH-FA12;Lo;0;L;6674;;;;N;;;;; FA13;CJK COMPATIBILITY IDEOGRAPH-FA13;Lo;0;L;;;;;N;;;;; FA14;CJK COMPATIBILITY IDEOGRAPH-FA14;Lo;0;L;;;;;N;;;;; FA15;CJK COMPATIBILITY IDEOGRAPH-FA15;Lo;0;L;51DE;;;;N;;;;; FA16;CJK COMPATIBILITY IDEOGRAPH-FA16;Lo;0;L;732A;;;;N;;;;; FA17;CJK COMPATIBILITY IDEOGRAPH-FA17;Lo;0;L;76CA;;;;N;;;;; FA18;CJK COMPATIBILITY IDEOGRAPH-FA18;Lo;0;L;793C;;;;N;;;;; FA19;CJK COMPATIBILITY IDEOGRAPH-FA19;Lo;0;L;795E;;;;N;;;;; FA1A;CJK COMPATIBILITY IDEOGRAPH-FA1A;Lo;0;L;7965;;;;N;;;;; FA1B;CJK COMPATIBILITY IDEOGRAPH-FA1B;Lo;0;L;798F;;;;N;;;;; FA1C;CJK COMPATIBILITY IDEOGRAPH-FA1C;Lo;0;L;9756;;;;N;;;;; FA1D;CJK COMPATIBILITY IDEOGRAPH-FA1D;Lo;0;L;7CBE;;;;N;;;;; FA1E;CJK COMPATIBILITY IDEOGRAPH-FA1E;Lo;0;L;7FBD;;;;N;;;;; FA1F;CJK COMPATIBILITY IDEOGRAPH-FA1F;Lo;0;L;;;;;N;;;;; FA20;CJK COMPATIBILITY IDEOGRAPH-FA20;Lo;0;L;8612;;;;N;;;;; FA21;CJK COMPATIBILITY IDEOGRAPH-FA21;Lo;0;L;;;;;N;;;;; FA22;CJK COMPATIBILITY IDEOGRAPH-FA22;Lo;0;L;8AF8;;;;N;;;;; FA23;CJK COMPATIBILITY IDEOGRAPH-FA23;Lo;0;L;;;;;N;;;;; FA24;CJK COMPATIBILITY IDEOGRAPH-FA24;Lo;0;L;;;;;N;;;;; FA25;CJK COMPATIBILITY IDEOGRAPH-FA25;Lo;0;L;9038;;;;N;;;;; FA26;CJK COMPATIBILITY IDEOGRAPH-FA26;Lo;0;L;90FD;;;;N;;;;; FA27;CJK COMPATIBILITY IDEOGRAPH-FA27;Lo;0;L;;;;;N;;;;; FA28;CJK COMPATIBILITY IDEOGRAPH-FA28;Lo;0;L;;;;;N;;;;; FA29;CJK COMPATIBILITY IDEOGRAPH-FA29;Lo;0;L;;;;;N;;;;; FA2A;CJK COMPATIBILITY IDEOGRAPH-FA2A;Lo;0;L;98EF;;;;N;;;;; FA2B;CJK COMPATIBILITY IDEOGRAPH-FA2B;Lo;0;L;98FC;;;;N;;;;; FA2C;CJK COMPATIBILITY IDEOGRAPH-FA2C;Lo;0;L;9928;;;;N;;;;; FA2D;CJK COMPATIBILITY IDEOGRAPH-FA2D;Lo;0;L;9DB4;;;;N;;;;; FA2E;CJK COMPATIBILITY IDEOGRAPH-FA2E;Lo;0;L;90DE;;;;N;;;;; FA2F;CJK COMPATIBILITY IDEOGRAPH-FA2F;Lo;0;L;96B7;;;;N;;;;; FA30;CJK COMPATIBILITY IDEOGRAPH-FA30;Lo;0;L;4FAE;;;;N;;;;; FA31;CJK COMPATIBILITY IDEOGRAPH-FA31;Lo;0;L;50E7;;;;N;;;;; FA32;CJK COMPATIBILITY IDEOGRAPH-FA32;Lo;0;L;514D;;;;N;;;;; FA33;CJK COMPATIBILITY IDEOGRAPH-FA33;Lo;0;L;52C9;;;;N;;;;; FA34;CJK COMPATIBILITY IDEOGRAPH-FA34;Lo;0;L;52E4;;;;N;;;;; FA35;CJK COMPATIBILITY IDEOGRAPH-FA35;Lo;0;L;5351;;;;N;;;;; FA36;CJK COMPATIBILITY IDEOGRAPH-FA36;Lo;0;L;559D;;;;N;;;;; FA37;CJK COMPATIBILITY IDEOGRAPH-FA37;Lo;0;L;5606;;;;N;;;;; FA38;CJK COMPATIBILITY IDEOGRAPH-FA38;Lo;0;L;5668;;;;N;;;;; FA39;CJK COMPATIBILITY IDEOGRAPH-FA39;Lo;0;L;5840;;;;N;;;;; FA3A;CJK COMPATIBILITY IDEOGRAPH-FA3A;Lo;0;L;58A8;;;;N;;;;; FA3B;CJK COMPATIBILITY IDEOGRAPH-FA3B;Lo;0;L;5C64;;;;N;;;;; FA3C;CJK COMPATIBILITY IDEOGRAPH-FA3C;Lo;0;L;5C6E;;;;N;;;;; FA3D;CJK COMPATIBILITY IDEOGRAPH-FA3D;Lo;0;L;6094;;;;N;;;;; FA3E;CJK COMPATIBILITY IDEOGRAPH-FA3E;Lo;0;L;6168;;;;N;;;;; FA3F;CJK COMPATIBILITY IDEOGRAPH-FA3F;Lo;0;L;618E;;;;N;;;;; FA40;CJK COMPATIBILITY IDEOGRAPH-FA40;Lo;0;L;61F2;;;;N;;;;; FA41;CJK COMPATIBILITY IDEOGRAPH-FA41;Lo;0;L;654F;;;;N;;;;; FA42;CJK COMPATIBILITY IDEOGRAPH-FA42;Lo;0;L;65E2;;;;N;;;;; FA43;CJK COMPATIBILITY IDEOGRAPH-FA43;Lo;0;L;6691;;;;N;;;;; FA44;CJK COMPATIBILITY IDEOGRAPH-FA44;Lo;0;L;6885;;;;N;;;;; FA45;CJK COMPATIBILITY IDEOGRAPH-FA45;Lo;0;L;6D77;;;;N;;;;; FA46;CJK COMPATIBILITY IDEOGRAPH-FA46;Lo;0;L;6E1A;;;;N;;;;; FA47;CJK COMPATIBILITY IDEOGRAPH-FA47;Lo;0;L;6F22;;;;N;;;;; FA48;CJK COMPATIBILITY IDEOGRAPH-FA48;Lo;0;L;716E;;;;N;;;;; FA49;CJK COMPATIBILITY IDEOGRAPH-FA49;Lo;0;L;722B;;;;N;;;;; FA4A;CJK COMPATIBILITY IDEOGRAPH-FA4A;Lo;0;L;7422;;;;N;;;;; FA4B;CJK COMPATIBILITY IDEOGRAPH-FA4B;Lo;0;L;7891;;;;N;;;;; FA4C;CJK COMPATIBILITY IDEOGRAPH-FA4C;Lo;0;L;793E;;;;N;;;;; FA4D;CJK COMPATIBILITY IDEOGRAPH-FA4D;Lo;0;L;7949;;;;N;;;;; FA4E;CJK COMPATIBILITY IDEOGRAPH-FA4E;Lo;0;L;7948;;;;N;;;;; FA4F;CJK COMPATIBILITY IDEOGRAPH-FA4F;Lo;0;L;7950;;;;N;;;;; FA50;CJK COMPATIBILITY IDEOGRAPH-FA50;Lo;0;L;7956;;;;N;;;;; FA51;CJK COMPATIBILITY IDEOGRAPH-FA51;Lo;0;L;795D;;;;N;;;;; FA52;CJK COMPATIBILITY IDEOGRAPH-FA52;Lo;0;L;798D;;;;N;;;;; FA53;CJK COMPATIBILITY IDEOGRAPH-FA53;Lo;0;L;798E;;;;N;;;;; FA54;CJK COMPATIBILITY IDEOGRAPH-FA54;Lo;0;L;7A40;;;;N;;;;; FA55;CJK COMPATIBILITY IDEOGRAPH-FA55;Lo;0;L;7A81;;;;N;;;;; FA56;CJK COMPATIBILITY IDEOGRAPH-FA56;Lo;0;L;7BC0;;;;N;;;;; FA57;CJK COMPATIBILITY IDEOGRAPH-FA57;Lo;0;L;7DF4;;;;N;;;;; FA58;CJK COMPATIBILITY IDEOGRAPH-FA58;Lo;0;L;7E09;;;;N;;;;; FA59;CJK COMPATIBILITY IDEOGRAPH-FA59;Lo;0;L;7E41;;;;N;;;;; FA5A;CJK COMPATIBILITY IDEOGRAPH-FA5A;Lo;0;L;7F72;;;;N;;;;; FA5B;CJK COMPATIBILITY IDEOGRAPH-FA5B;Lo;0;L;8005;;;;N;;;;; FA5C;CJK COMPATIBILITY IDEOGRAPH-FA5C;Lo;0;L;81ED;;;;N;;;;; FA5D;CJK COMPATIBILITY IDEOGRAPH-FA5D;Lo;0;L;8279;;;;N;;;;; FA5E;CJK COMPATIBILITY IDEOGRAPH-FA5E;Lo;0;L;8279;;;;N;;;;; FA5F;CJK COMPATIBILITY IDEOGRAPH-FA5F;Lo;0;L;8457;;;;N;;;;; FA60;CJK COMPATIBILITY IDEOGRAPH-FA60;Lo;0;L;8910;;;;N;;;;; FA61;CJK COMPATIBILITY IDEOGRAPH-FA61;Lo;0;L;8996;;;;N;;;;; FA62;CJK COMPATIBILITY IDEOGRAPH-FA62;Lo;0;L;8B01;;;;N;;;;; FA63;CJK COMPATIBILITY IDEOGRAPH-FA63;Lo;0;L;8B39;;;;N;;;;; FA64;CJK COMPATIBILITY IDEOGRAPH-FA64;Lo;0;L;8CD3;;;;N;;;;; FA65;CJK COMPATIBILITY IDEOGRAPH-FA65;Lo;0;L;8D08;;;;N;;;;; FA66;CJK COMPATIBILITY IDEOGRAPH-FA66;Lo;0;L;8FB6;;;;N;;;;; FA67;CJK COMPATIBILITY IDEOGRAPH-FA67;Lo;0;L;9038;;;;N;;;;; FA68;CJK COMPATIBILITY IDEOGRAPH-FA68;Lo;0;L;96E3;;;;N;;;;; FA69;CJK COMPATIBILITY IDEOGRAPH-FA69;Lo;0;L;97FF;;;;N;;;;; FA6A;CJK COMPATIBILITY IDEOGRAPH-FA6A;Lo;0;L;983B;;;;N;;;;; FA6B;CJK COMPATIBILITY IDEOGRAPH-FA6B;Lo;0;L;6075;;;;N;;;;; FA6C;CJK COMPATIBILITY IDEOGRAPH-FA6C;Lo;0;L;242EE;;;;N;;;;; FA6D;CJK COMPATIBILITY IDEOGRAPH-FA6D;Lo;0;L;8218;;;;N;;;;; FA70;CJK COMPATIBILITY IDEOGRAPH-FA70;Lo;0;L;4E26;;;;N;;;;; FA71;CJK COMPATIBILITY IDEOGRAPH-FA71;Lo;0;L;51B5;;;;N;;;;; FA72;CJK COMPATIBILITY IDEOGRAPH-FA72;Lo;0;L;5168;;;;N;;;;; FA73;CJK COMPATIBILITY IDEOGRAPH-FA73;Lo;0;L;4F80;;;;N;;;;; FA74;CJK COMPATIBILITY IDEOGRAPH-FA74;Lo;0;L;5145;;;;N;;;;; FA75;CJK COMPATIBILITY IDEOGRAPH-FA75;Lo;0;L;5180;;;;N;;;;; FA76;CJK COMPATIBILITY IDEOGRAPH-FA76;Lo;0;L;52C7;;;;N;;;;; FA77;CJK COMPATIBILITY IDEOGRAPH-FA77;Lo;0;L;52FA;;;;N;;;;; FA78;CJK COMPATIBILITY IDEOGRAPH-FA78;Lo;0;L;559D;;;;N;;;;; FA79;CJK COMPATIBILITY IDEOGRAPH-FA79;Lo;0;L;5555;;;;N;;;;; FA7A;CJK COMPATIBILITY IDEOGRAPH-FA7A;Lo;0;L;5599;;;;N;;;;; FA7B;CJK COMPATIBILITY IDEOGRAPH-FA7B;Lo;0;L;55E2;;;;N;;;;; FA7C;CJK COMPATIBILITY IDEOGRAPH-FA7C;Lo;0;L;585A;;;;N;;;;; FA7D;CJK COMPATIBILITY IDEOGRAPH-FA7D;Lo;0;L;58B3;;;;N;;;;; FA7E;CJK COMPATIBILITY IDEOGRAPH-FA7E;Lo;0;L;5944;;;;N;;;;; FA7F;CJK COMPATIBILITY IDEOGRAPH-FA7F;Lo;0;L;5954;;;;N;;;;; FA80;CJK COMPATIBILITY IDEOGRAPH-FA80;Lo;0;L;5A62;;;;N;;;;; FA81;CJK COMPATIBILITY IDEOGRAPH-FA81;Lo;0;L;5B28;;;;N;;;;; FA82;CJK COMPATIBILITY IDEOGRAPH-FA82;Lo;0;L;5ED2;;;;N;;;;; FA83;CJK COMPATIBILITY IDEOGRAPH-FA83;Lo;0;L;5ED9;;;;N;;;;; FA84;CJK COMPATIBILITY IDEOGRAPH-FA84;Lo;0;L;5F69;;;;N;;;;; FA85;CJK COMPATIBILITY IDEOGRAPH-FA85;Lo;0;L;5FAD;;;;N;;;;; FA86;CJK COMPATIBILITY IDEOGRAPH-FA86;Lo;0;L;60D8;;;;N;;;;; FA87;CJK COMPATIBILITY IDEOGRAPH-FA87;Lo;0;L;614E;;;;N;;;;; FA88;CJK COMPATIBILITY IDEOGRAPH-FA88;Lo;0;L;6108;;;;N;;;;; FA89;CJK COMPATIBILITY IDEOGRAPH-FA89;Lo;0;L;618E;;;;N;;;;; FA8A;CJK COMPATIBILITY IDEOGRAPH-FA8A;Lo;0;L;6160;;;;N;;;;; FA8B;CJK COMPATIBILITY IDEOGRAPH-FA8B;Lo;0;L;61F2;;;;N;;;;; FA8C;CJK COMPATIBILITY IDEOGRAPH-FA8C;Lo;0;L;6234;;;;N;;;;; FA8D;CJK COMPATIBILITY IDEOGRAPH-FA8D;Lo;0;L;63C4;;;;N;;;;; FA8E;CJK COMPATIBILITY IDEOGRAPH-FA8E;Lo;0;L;641C;;;;N;;;;; FA8F;CJK COMPATIBILITY IDEOGRAPH-FA8F;Lo;0;L;6452;;;;N;;;;; FA90;CJK COMPATIBILITY IDEOGRAPH-FA90;Lo;0;L;6556;;;;N;;;;; FA91;CJK COMPATIBILITY IDEOGRAPH-FA91;Lo;0;L;6674;;;;N;;;;; FA92;CJK COMPATIBILITY IDEOGRAPH-FA92;Lo;0;L;6717;;;;N;;;;; FA93;CJK COMPATIBILITY IDEOGRAPH-FA93;Lo;0;L;671B;;;;N;;;;; FA94;CJK COMPATIBILITY IDEOGRAPH-FA94;Lo;0;L;6756;;;;N;;;;; FA95;CJK COMPATIBILITY IDEOGRAPH-FA95;Lo;0;L;6B79;;;;N;;;;; FA96;CJK COMPATIBILITY IDEOGRAPH-FA96;Lo;0;L;6BBA;;;;N;;;;; FA97;CJK COMPATIBILITY IDEOGRAPH-FA97;Lo;0;L;6D41;;;;N;;;;; FA98;CJK COMPATIBILITY IDEOGRAPH-FA98;Lo;0;L;6EDB;;;;N;;;;; FA99;CJK COMPATIBILITY IDEOGRAPH-FA99;Lo;0;L;6ECB;;;;N;;;;; FA9A;CJK COMPATIBILITY IDEOGRAPH-FA9A;Lo;0;L;6F22;;;;N;;;;; FA9B;CJK COMPATIBILITY IDEOGRAPH-FA9B;Lo;0;L;701E;;;;N;;;;; FA9C;CJK COMPATIBILITY IDEOGRAPH-FA9C;Lo;0;L;716E;;;;N;;;;; FA9D;CJK COMPATIBILITY IDEOGRAPH-FA9D;Lo;0;L;77A7;;;;N;;;;; FA9E;CJK COMPATIBILITY IDEOGRAPH-FA9E;Lo;0;L;7235;;;;N;;;;; FA9F;CJK COMPATIBILITY IDEOGRAPH-FA9F;Lo;0;L;72AF;;;;N;;;;; FAA0;CJK COMPATIBILITY IDEOGRAPH-FAA0;Lo;0;L;732A;;;;N;;;;; FAA1;CJK COMPATIBILITY IDEOGRAPH-FAA1;Lo;0;L;7471;;;;N;;;;; FAA2;CJK COMPATIBILITY IDEOGRAPH-FAA2;Lo;0;L;7506;;;;N;;;;; FAA3;CJK COMPATIBILITY IDEOGRAPH-FAA3;Lo;0;L;753B;;;;N;;;;; FAA4;CJK COMPATIBILITY IDEOGRAPH-FAA4;Lo;0;L;761D;;;;N;;;;; FAA5;CJK COMPATIBILITY IDEOGRAPH-FAA5;Lo;0;L;761F;;;;N;;;;; FAA6;CJK COMPATIBILITY IDEOGRAPH-FAA6;Lo;0;L;76CA;;;;N;;;;; FAA7;CJK COMPATIBILITY IDEOGRAPH-FAA7;Lo;0;L;76DB;;;;N;;;;; FAA8;CJK COMPATIBILITY IDEOGRAPH-FAA8;Lo;0;L;76F4;;;;N;;;;; FAA9;CJK COMPATIBILITY IDEOGRAPH-FAA9;Lo;0;L;774A;;;;N;;;;; FAAA;CJK COMPATIBILITY IDEOGRAPH-FAAA;Lo;0;L;7740;;;;N;;;;; FAAB;CJK COMPATIBILITY IDEOGRAPH-FAAB;Lo;0;L;78CC;;;;N;;;;; FAAC;CJK COMPATIBILITY IDEOGRAPH-FAAC;Lo;0;L;7AB1;;;;N;;;;; FAAD;CJK COMPATIBILITY IDEOGRAPH-FAAD;Lo;0;L;7BC0;;;;N;;;;; FAAE;CJK COMPATIBILITY IDEOGRAPH-FAAE;Lo;0;L;7C7B;;;;N;;;;; FAAF;CJK COMPATIBILITY IDEOGRAPH-FAAF;Lo;0;L;7D5B;;;;N;;;;; FAB0;CJK COMPATIBILITY IDEOGRAPH-FAB0;Lo;0;L;7DF4;;;;N;;;;; FAB1;CJK COMPATIBILITY IDEOGRAPH-FAB1;Lo;0;L;7F3E;;;;N;;;;; FAB2;CJK COMPATIBILITY IDEOGRAPH-FAB2;Lo;0;L;8005;;;;N;;;;; FAB3;CJK COMPATIBILITY IDEOGRAPH-FAB3;Lo;0;L;8352;;;;N;;;;; FAB4;CJK COMPATIBILITY IDEOGRAPH-FAB4;Lo;0;L;83EF;;;;N;;;;; FAB5;CJK COMPATIBILITY IDEOGRAPH-FAB5;Lo;0;L;8779;;;;N;;;;; FAB6;CJK COMPATIBILITY IDEOGRAPH-FAB6;Lo;0;L;8941;;;;N;;;;; FAB7;CJK COMPATIBILITY IDEOGRAPH-FAB7;Lo;0;L;8986;;;;N;;;;; FAB8;CJK COMPATIBILITY IDEOGRAPH-FAB8;Lo;0;L;8996;;;;N;;;;; FAB9;CJK COMPATIBILITY IDEOGRAPH-FAB9;Lo;0;L;8ABF;;;;N;;;;; FABA;CJK COMPATIBILITY IDEOGRAPH-FABA;Lo;0;L;8AF8;;;;N;;;;; FABB;CJK COMPATIBILITY IDEOGRAPH-FABB;Lo;0;L;8ACB;;;;N;;;;; FABC;CJK COMPATIBILITY IDEOGRAPH-FABC;Lo;0;L;8B01;;;;N;;;;; FABD;CJK COMPATIBILITY IDEOGRAPH-FABD;Lo;0;L;8AFE;;;;N;;;;; FABE;CJK COMPATIBILITY IDEOGRAPH-FABE;Lo;0;L;8AED;;;;N;;;;; FABF;CJK COMPATIBILITY IDEOGRAPH-FABF;Lo;0;L;8B39;;;;N;;;;; FAC0;CJK COMPATIBILITY IDEOGRAPH-FAC0;Lo;0;L;8B8A;;;;N;;;;; FAC1;CJK COMPATIBILITY IDEOGRAPH-FAC1;Lo;0;L;8D08;;;;N;;;;; FAC2;CJK COMPATIBILITY IDEOGRAPH-FAC2;Lo;0;L;8F38;;;;N;;;;; FAC3;CJK COMPATIBILITY IDEOGRAPH-FAC3;Lo;0;L;9072;;;;N;;;;; FAC4;CJK COMPATIBILITY IDEOGRAPH-FAC4;Lo;0;L;9199;;;;N;;;;; FAC5;CJK COMPATIBILITY IDEOGRAPH-FAC5;Lo;0;L;9276;;;;N;;;;; FAC6;CJK COMPATIBILITY IDEOGRAPH-FAC6;Lo;0;L;967C;;;;N;;;;; FAC7;CJK COMPATIBILITY IDEOGRAPH-FAC7;Lo;0;L;96E3;;;;N;;;;; FAC8;CJK COMPATIBILITY IDEOGRAPH-FAC8;Lo;0;L;9756;;;;N;;;;; FAC9;CJK COMPATIBILITY IDEOGRAPH-FAC9;Lo;0;L;97DB;;;;N;;;;; FACA;CJK COMPATIBILITY IDEOGRAPH-FACA;Lo;0;L;97FF;;;;N;;;;; FACB;CJK COMPATIBILITY IDEOGRAPH-FACB;Lo;0;L;980B;;;;N;;;;; FACC;CJK COMPATIBILITY IDEOGRAPH-FACC;Lo;0;L;983B;;;;N;;;;; FACD;CJK COMPATIBILITY IDEOGRAPH-FACD;Lo;0;L;9B12;;;;N;;;;; FACE;CJK COMPATIBILITY IDEOGRAPH-FACE;Lo;0;L;9F9C;;;;N;;;;; FACF;CJK COMPATIBILITY IDEOGRAPH-FACF;Lo;0;L;2284A;;;;N;;;;; FAD0;CJK COMPATIBILITY IDEOGRAPH-FAD0;Lo;0;L;22844;;;;N;;;;; FAD1;CJK COMPATIBILITY IDEOGRAPH-FAD1;Lo;0;L;233D5;;;;N;;;;; FAD2;CJK COMPATIBILITY IDEOGRAPH-FAD2;Lo;0;L;3B9D;;;;N;;;;; FAD3;CJK COMPATIBILITY IDEOGRAPH-FAD3;Lo;0;L;4018;;;;N;;;;; FAD4;CJK COMPATIBILITY IDEOGRAPH-FAD4;Lo;0;L;4039;;;;N;;;;; FAD5;CJK COMPATIBILITY IDEOGRAPH-FAD5;Lo;0;L;25249;;;;N;;;;; FAD6;CJK COMPATIBILITY IDEOGRAPH-FAD6;Lo;0;L;25CD0;;;;N;;;;; FAD7;CJK COMPATIBILITY IDEOGRAPH-FAD7;Lo;0;L;27ED3;;;;N;;;;; FAD8;CJK COMPATIBILITY IDEOGRAPH-FAD8;Lo;0;L;9F43;;;;N;;;;; FAD9;CJK COMPATIBILITY IDEOGRAPH-FAD9;Lo;0;L;9F8E;;;;N;;;;; FB00;LATIN SMALL LIGATURE FF;Ll;0;L; 0066 0066;;;;N;;;;; FB01;LATIN SMALL LIGATURE FI;Ll;0;L; 0066 0069;;;;N;;;;; FB02;LATIN SMALL LIGATURE FL;Ll;0;L; 0066 006C;;;;N;;;;; FB03;LATIN SMALL LIGATURE FFI;Ll;0;L; 0066 0066 0069;;;;N;;;;; FB04;LATIN SMALL LIGATURE FFL;Ll;0;L; 0066 0066 006C;;;;N;;;;; FB05;LATIN SMALL LIGATURE LONG S T;Ll;0;L; 017F 0074;;;;N;;;;; FB06;LATIN SMALL LIGATURE ST;Ll;0;L; 0073 0074;;;;N;;;;; FB13;ARMENIAN SMALL LIGATURE MEN NOW;Ll;0;L; 0574 0576;;;;N;;;;; FB14;ARMENIAN SMALL LIGATURE MEN ECH;Ll;0;L; 0574 0565;;;;N;;;;; FB15;ARMENIAN SMALL LIGATURE MEN INI;Ll;0;L; 0574 056B;;;;N;;;;; FB16;ARMENIAN SMALL LIGATURE VEW NOW;Ll;0;L; 057E 0576;;;;N;;;;; FB17;ARMENIAN SMALL LIGATURE MEN XEH;Ll;0;L; 0574 056D;;;;N;;;;; FB1D;HEBREW LETTER YOD WITH HIRIQ;Lo;0;R;05D9 05B4;;;;N;;;;; FB1E;HEBREW POINT JUDEO-SPANISH VARIKA;Mn;26;NSM;;;;;N;HEBREW POINT VARIKA;;;; FB1F;HEBREW LIGATURE YIDDISH YOD YOD PATAH;Lo;0;R;05F2 05B7;;;;N;;;;; FB20;HEBREW LETTER ALTERNATIVE AYIN;Lo;0;R; 05E2;;;;N;;;;; FB21;HEBREW LETTER WIDE ALEF;Lo;0;R; 05D0;;;;N;;;;; FB22;HEBREW LETTER WIDE DALET;Lo;0;R; 05D3;;;;N;;;;; FB23;HEBREW LETTER WIDE HE;Lo;0;R; 05D4;;;;N;;;;; FB24;HEBREW LETTER WIDE KAF;Lo;0;R; 05DB;;;;N;;;;; FB25;HEBREW LETTER WIDE LAMED;Lo;0;R; 05DC;;;;N;;;;; FB26;HEBREW LETTER WIDE FINAL MEM;Lo;0;R; 05DD;;;;N;;;;; FB27;HEBREW LETTER WIDE RESH;Lo;0;R; 05E8;;;;N;;;;; FB28;HEBREW LETTER WIDE TAV;Lo;0;R; 05EA;;;;N;;;;; FB29;HEBREW LETTER ALTERNATIVE PLUS SIGN;Sm;0;ES; 002B;;;;N;;;;; FB2A;HEBREW LETTER SHIN WITH SHIN DOT;Lo;0;R;05E9 05C1;;;;N;;;;; FB2B;HEBREW LETTER SHIN WITH SIN DOT;Lo;0;R;05E9 05C2;;;;N;;;;; FB2C;HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT;Lo;0;R;FB49 05C1;;;;N;;;;; FB2D;HEBREW LETTER SHIN WITH DAGESH AND SIN DOT;Lo;0;R;FB49 05C2;;;;N;;;;; FB2E;HEBREW LETTER ALEF WITH PATAH;Lo;0;R;05D0 05B7;;;;N;;;;; FB2F;HEBREW LETTER ALEF WITH QAMATS;Lo;0;R;05D0 05B8;;;;N;;;;; FB30;HEBREW LETTER ALEF WITH MAPIQ;Lo;0;R;05D0 05BC;;;;N;;;;; FB31;HEBREW LETTER BET WITH DAGESH;Lo;0;R;05D1 05BC;;;;N;;;;; FB32;HEBREW LETTER GIMEL WITH DAGESH;Lo;0;R;05D2 05BC;;;;N;;;;; FB33;HEBREW LETTER DALET WITH DAGESH;Lo;0;R;05D3 05BC;;;;N;;;;; FB34;HEBREW LETTER HE WITH MAPIQ;Lo;0;R;05D4 05BC;;;;N;;;;; FB35;HEBREW LETTER VAV WITH DAGESH;Lo;0;R;05D5 05BC;;;;N;;;;; FB36;HEBREW LETTER ZAYIN WITH DAGESH;Lo;0;R;05D6 05BC;;;;N;;;;; FB38;HEBREW LETTER TET WITH DAGESH;Lo;0;R;05D8 05BC;;;;N;;;;; FB39;HEBREW LETTER YOD WITH DAGESH;Lo;0;R;05D9 05BC;;;;N;;;;; FB3A;HEBREW LETTER FINAL KAF WITH DAGESH;Lo;0;R;05DA 05BC;;;;N;;;;; FB3B;HEBREW LETTER KAF WITH DAGESH;Lo;0;R;05DB 05BC;;;;N;;;;; FB3C;HEBREW LETTER LAMED WITH DAGESH;Lo;0;R;05DC 05BC;;;;N;;;;; FB3E;HEBREW LETTER MEM WITH DAGESH;Lo;0;R;05DE 05BC;;;;N;;;;; FB40;HEBREW LETTER NUN WITH DAGESH;Lo;0;R;05E0 05BC;;;;N;;;;; FB41;HEBREW LETTER SAMEKH WITH DAGESH;Lo;0;R;05E1 05BC;;;;N;;;;; FB43;HEBREW LETTER FINAL PE WITH DAGESH;Lo;0;R;05E3 05BC;;;;N;;;;; FB44;HEBREW LETTER PE WITH DAGESH;Lo;0;R;05E4 05BC;;;;N;;;;; FB46;HEBREW LETTER TSADI WITH DAGESH;Lo;0;R;05E6 05BC;;;;N;;;;; FB47;HEBREW LETTER QOF WITH DAGESH;Lo;0;R;05E7 05BC;;;;N;;;;; FB48;HEBREW LETTER RESH WITH DAGESH;Lo;0;R;05E8 05BC;;;;N;;;;; FB49;HEBREW LETTER SHIN WITH DAGESH;Lo;0;R;05E9 05BC;;;;N;;;;; FB4A;HEBREW LETTER TAV WITH DAGESH;Lo;0;R;05EA 05BC;;;;N;;;;; FB4B;HEBREW LETTER VAV WITH HOLAM;Lo;0;R;05D5 05B9;;;;N;;;;; FB4C;HEBREW LETTER BET WITH RAFE;Lo;0;R;05D1 05BF;;;;N;;;;; FB4D;HEBREW LETTER KAF WITH RAFE;Lo;0;R;05DB 05BF;;;;N;;;;; FB4E;HEBREW LETTER PE WITH RAFE;Lo;0;R;05E4 05BF;;;;N;;;;; FB4F;HEBREW LIGATURE ALEF LAMED;Lo;0;R; 05D0 05DC;;;;N;;;;; FB50;ARABIC LETTER ALEF WASLA ISOLATED FORM;Lo;0;AL; 0671;;;;N;;;;; FB51;ARABIC LETTER ALEF WASLA FINAL FORM;Lo;0;AL; 0671;;;;N;;;;; FB52;ARABIC LETTER BEEH ISOLATED FORM;Lo;0;AL; 067B;;;;N;;;;; FB53;ARABIC LETTER BEEH FINAL FORM;Lo;0;AL; 067B;;;;N;;;;; FB54;ARABIC LETTER BEEH INITIAL FORM;Lo;0;AL; 067B;;;;N;;;;; FB55;ARABIC LETTER BEEH MEDIAL FORM;Lo;0;AL; 067B;;;;N;;;;; FB56;ARABIC LETTER PEH ISOLATED FORM;Lo;0;AL; 067E;;;;N;;;;; FB57;ARABIC LETTER PEH FINAL FORM;Lo;0;AL; 067E;;;;N;;;;; FB58;ARABIC LETTER PEH INITIAL FORM;Lo;0;AL; 067E;;;;N;;;;; FB59;ARABIC LETTER PEH MEDIAL FORM;Lo;0;AL; 067E;;;;N;;;;; FB5A;ARABIC LETTER BEHEH ISOLATED FORM;Lo;0;AL; 0680;;;;N;;;;; FB5B;ARABIC LETTER BEHEH FINAL FORM;Lo;0;AL; 0680;;;;N;;;;; FB5C;ARABIC LETTER BEHEH INITIAL FORM;Lo;0;AL; 0680;;;;N;;;;; FB5D;ARABIC LETTER BEHEH MEDIAL FORM;Lo;0;AL; 0680;;;;N;;;;; FB5E;ARABIC LETTER TTEHEH ISOLATED FORM;Lo;0;AL; 067A;;;;N;;;;; FB5F;ARABIC LETTER TTEHEH FINAL FORM;Lo;0;AL; 067A;;;;N;;;;; FB60;ARABIC LETTER TTEHEH INITIAL FORM;Lo;0;AL; 067A;;;;N;;;;; FB61;ARABIC LETTER TTEHEH MEDIAL FORM;Lo;0;AL; 067A;;;;N;;;;; FB62;ARABIC LETTER TEHEH ISOLATED FORM;Lo;0;AL; 067F;;;;N;;;;; FB63;ARABIC LETTER TEHEH FINAL FORM;Lo;0;AL; 067F;;;;N;;;;; FB64;ARABIC LETTER TEHEH INITIAL FORM;Lo;0;AL; 067F;;;;N;;;;; FB65;ARABIC LETTER TEHEH MEDIAL FORM;Lo;0;AL; 067F;;;;N;;;;; FB66;ARABIC LETTER TTEH ISOLATED FORM;Lo;0;AL; 0679;;;;N;;;;; FB67;ARABIC LETTER TTEH FINAL FORM;Lo;0;AL; 0679;;;;N;;;;; FB68;ARABIC LETTER TTEH INITIAL FORM;Lo;0;AL; 0679;;;;N;;;;; FB69;ARABIC LETTER TTEH MEDIAL FORM;Lo;0;AL; 0679;;;;N;;;;; FB6A;ARABIC LETTER VEH ISOLATED FORM;Lo;0;AL; 06A4;;;;N;;;;; FB6B;ARABIC LETTER VEH FINAL FORM;Lo;0;AL; 06A4;;;;N;;;;; FB6C;ARABIC LETTER VEH INITIAL FORM;Lo;0;AL; 06A4;;;;N;;;;; FB6D;ARABIC LETTER VEH MEDIAL FORM;Lo;0;AL; 06A4;;;;N;;;;; FB6E;ARABIC LETTER PEHEH ISOLATED FORM;Lo;0;AL; 06A6;;;;N;;;;; FB6F;ARABIC LETTER PEHEH FINAL FORM;Lo;0;AL; 06A6;;;;N;;;;; FB70;ARABIC LETTER PEHEH INITIAL FORM;Lo;0;AL; 06A6;;;;N;;;;; FB71;ARABIC LETTER PEHEH MEDIAL FORM;Lo;0;AL; 06A6;;;;N;;;;; FB72;ARABIC LETTER DYEH ISOLATED FORM;Lo;0;AL; 0684;;;;N;;;;; FB73;ARABIC LETTER DYEH FINAL FORM;Lo;0;AL; 0684;;;;N;;;;; FB74;ARABIC LETTER DYEH INITIAL FORM;Lo;0;AL; 0684;;;;N;;;;; FB75;ARABIC LETTER DYEH MEDIAL FORM;Lo;0;AL; 0684;;;;N;;;;; FB76;ARABIC LETTER NYEH ISOLATED FORM;Lo;0;AL; 0683;;;;N;;;;; FB77;ARABIC LETTER NYEH FINAL FORM;Lo;0;AL; 0683;;;;N;;;;; FB78;ARABIC LETTER NYEH INITIAL FORM;Lo;0;AL; 0683;;;;N;;;;; FB79;ARABIC LETTER NYEH MEDIAL FORM;Lo;0;AL; 0683;;;;N;;;;; FB7A;ARABIC LETTER TCHEH ISOLATED FORM;Lo;0;AL; 0686;;;;N;;;;; FB7B;ARABIC LETTER TCHEH FINAL FORM;Lo;0;AL; 0686;;;;N;;;;; FB7C;ARABIC LETTER TCHEH INITIAL FORM;Lo;0;AL; 0686;;;;N;;;;; FB7D;ARABIC LETTER TCHEH MEDIAL FORM;Lo;0;AL; 0686;;;;N;;;;; FB7E;ARABIC LETTER TCHEHEH ISOLATED FORM;Lo;0;AL; 0687;;;;N;;;;; FB7F;ARABIC LETTER TCHEHEH FINAL FORM;Lo;0;AL; 0687;;;;N;;;;; FB80;ARABIC LETTER TCHEHEH INITIAL FORM;Lo;0;AL; 0687;;;;N;;;;; FB81;ARABIC LETTER TCHEHEH MEDIAL FORM;Lo;0;AL; 0687;;;;N;;;;; FB82;ARABIC LETTER DDAHAL ISOLATED FORM;Lo;0;AL; 068D;;;;N;;;;; FB83;ARABIC LETTER DDAHAL FINAL FORM;Lo;0;AL; 068D;;;;N;;;;; FB84;ARABIC LETTER DAHAL ISOLATED FORM;Lo;0;AL; 068C;;;;N;;;;; FB85;ARABIC LETTER DAHAL FINAL FORM;Lo;0;AL; 068C;;;;N;;;;; FB86;ARABIC LETTER DUL ISOLATED FORM;Lo;0;AL; 068E;;;;N;;;;; FB87;ARABIC LETTER DUL FINAL FORM;Lo;0;AL; 068E;;;;N;;;;; FB88;ARABIC LETTER DDAL ISOLATED FORM;Lo;0;AL; 0688;;;;N;;;;; FB89;ARABIC LETTER DDAL FINAL FORM;Lo;0;AL; 0688;;;;N;;;;; FB8A;ARABIC LETTER JEH ISOLATED FORM;Lo;0;AL; 0698;;;;N;;;;; FB8B;ARABIC LETTER JEH FINAL FORM;Lo;0;AL; 0698;;;;N;;;;; FB8C;ARABIC LETTER RREH ISOLATED FORM;Lo;0;AL; 0691;;;;N;;;;; FB8D;ARABIC LETTER RREH FINAL FORM;Lo;0;AL; 0691;;;;N;;;;; FB8E;ARABIC LETTER KEHEH ISOLATED FORM;Lo;0;AL; 06A9;;;;N;;;;; FB8F;ARABIC LETTER KEHEH FINAL FORM;Lo;0;AL; 06A9;;;;N;;;;; FB90;ARABIC LETTER KEHEH INITIAL FORM;Lo;0;AL; 06A9;;;;N;;;;; FB91;ARABIC LETTER KEHEH MEDIAL FORM;Lo;0;AL; 06A9;;;;N;;;;; FB92;ARABIC LETTER GAF ISOLATED FORM;Lo;0;AL; 06AF;;;;N;;;;; FB93;ARABIC LETTER GAF FINAL FORM;Lo;0;AL; 06AF;;;;N;;;;; FB94;ARABIC LETTER GAF INITIAL FORM;Lo;0;AL; 06AF;;;;N;;;;; FB95;ARABIC LETTER GAF MEDIAL FORM;Lo;0;AL; 06AF;;;;N;;;;; FB96;ARABIC LETTER GUEH ISOLATED FORM;Lo;0;AL; 06B3;;;;N;;;;; FB97;ARABIC LETTER GUEH FINAL FORM;Lo;0;AL; 06B3;;;;N;;;;; FB98;ARABIC LETTER GUEH INITIAL FORM;Lo;0;AL; 06B3;;;;N;;;;; FB99;ARABIC LETTER GUEH MEDIAL FORM;Lo;0;AL; 06B3;;;;N;;;;; FB9A;ARABIC LETTER NGOEH ISOLATED FORM;Lo;0;AL; 06B1;;;;N;;;;; FB9B;ARABIC LETTER NGOEH FINAL FORM;Lo;0;AL; 06B1;;;;N;;;;; FB9C;ARABIC LETTER NGOEH INITIAL FORM;Lo;0;AL; 06B1;;;;N;;;;; FB9D;ARABIC LETTER NGOEH MEDIAL FORM;Lo;0;AL; 06B1;;;;N;;;;; FB9E;ARABIC LETTER NOON GHUNNA ISOLATED FORM;Lo;0;AL; 06BA;;;;N;;;;; FB9F;ARABIC LETTER NOON GHUNNA FINAL FORM;Lo;0;AL; 06BA;;;;N;;;;; FBA0;ARABIC LETTER RNOON ISOLATED FORM;Lo;0;AL; 06BB;;;;N;;;;; FBA1;ARABIC LETTER RNOON FINAL FORM;Lo;0;AL; 06BB;;;;N;;;;; FBA2;ARABIC LETTER RNOON INITIAL FORM;Lo;0;AL; 06BB;;;;N;;;;; FBA3;ARABIC LETTER RNOON MEDIAL FORM;Lo;0;AL; 06BB;;;;N;;;;; FBA4;ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM;Lo;0;AL; 06C0;;;;N;;;;; FBA5;ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM;Lo;0;AL; 06C0;;;;N;;;;; FBA6;ARABIC LETTER HEH GOAL ISOLATED FORM;Lo;0;AL; 06C1;;;;N;;;;; FBA7;ARABIC LETTER HEH GOAL FINAL FORM;Lo;0;AL; 06C1;;;;N;;;;; FBA8;ARABIC LETTER HEH GOAL INITIAL FORM;Lo;0;AL; 06C1;;;;N;;;;; FBA9;ARABIC LETTER HEH GOAL MEDIAL FORM;Lo;0;AL; 06C1;;;;N;;;;; FBAA;ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM;Lo;0;AL; 06BE;;;;N;;;;; FBAB;ARABIC LETTER HEH DOACHASHMEE FINAL FORM;Lo;0;AL; 06BE;;;;N;;;;; FBAC;ARABIC LETTER HEH DOACHASHMEE INITIAL FORM;Lo;0;AL; 06BE;;;;N;;;;; FBAD;ARABIC LETTER HEH DOACHASHMEE MEDIAL FORM;Lo;0;AL; 06BE;;;;N;;;;; FBAE;ARABIC LETTER YEH BARREE ISOLATED FORM;Lo;0;AL; 06D2;;;;N;;;;; FBAF;ARABIC LETTER YEH BARREE FINAL FORM;Lo;0;AL; 06D2;;;;N;;;;; FBB0;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL; 06D3;;;;N;;;;; FBB1;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM;Lo;0;AL; 06D3;;;;N;;;;; FBB2;ARABIC SYMBOL DOT ABOVE;Sk;0;AL;;;;;N;;;;; FBB3;ARABIC SYMBOL DOT BELOW;Sk;0;AL;;;;;N;;;;; FBB4;ARABIC SYMBOL TWO DOTS ABOVE;Sk;0;AL;;;;;N;;;;; FBB5;ARABIC SYMBOL TWO DOTS BELOW;Sk;0;AL;;;;;N;;;;; FBB6;ARABIC SYMBOL THREE DOTS ABOVE;Sk;0;AL;;;;;N;;;;; FBB7;ARABIC SYMBOL THREE DOTS BELOW;Sk;0;AL;;;;;N;;;;; FBB8;ARABIC SYMBOL THREE DOTS POINTING DOWNWARDS ABOVE;Sk;0;AL;;;;;N;;;;; FBB9;ARABIC SYMBOL THREE DOTS POINTING DOWNWARDS BELOW;Sk;0;AL;;;;;N;;;;; FBBA;ARABIC SYMBOL FOUR DOTS ABOVE;Sk;0;AL;;;;;N;;;;; FBBB;ARABIC SYMBOL FOUR DOTS BELOW;Sk;0;AL;;;;;N;;;;; FBBC;ARABIC SYMBOL DOUBLE VERTICAL BAR BELOW;Sk;0;AL;;;;;N;;;;; FBBD;ARABIC SYMBOL TWO DOTS VERTICALLY ABOVE;Sk;0;AL;;;;;N;;;;; FBBE;ARABIC SYMBOL TWO DOTS VERTICALLY BELOW;Sk;0;AL;;;;;N;;;;; FBBF;ARABIC SYMBOL RING;Sk;0;AL;;;;;N;;;;; FBC0;ARABIC SYMBOL SMALL TAH ABOVE;Sk;0;AL;;;;;N;;;;; FBC1;ARABIC SYMBOL SMALL TAH BELOW;Sk;0;AL;;;;;N;;;;; FBC2;ARABIC SYMBOL WASLA ABOVE;Sk;0;AL;;;;;N;;;;; FBD3;ARABIC LETTER NG ISOLATED FORM;Lo;0;AL; 06AD;;;;N;;;;; FBD4;ARABIC LETTER NG FINAL FORM;Lo;0;AL; 06AD;;;;N;;;;; FBD5;ARABIC LETTER NG INITIAL FORM;Lo;0;AL; 06AD;;;;N;;;;; FBD6;ARABIC LETTER NG MEDIAL FORM;Lo;0;AL; 06AD;;;;N;;;;; FBD7;ARABIC LETTER U ISOLATED FORM;Lo;0;AL; 06C7;;;;N;;;;; FBD8;ARABIC LETTER U FINAL FORM;Lo;0;AL; 06C7;;;;N;;;;; FBD9;ARABIC LETTER OE ISOLATED FORM;Lo;0;AL; 06C6;;;;N;;;;; FBDA;ARABIC LETTER OE FINAL FORM;Lo;0;AL; 06C6;;;;N;;;;; FBDB;ARABIC LETTER YU ISOLATED FORM;Lo;0;AL; 06C8;;;;N;;;;; FBDC;ARABIC LETTER YU FINAL FORM;Lo;0;AL; 06C8;;;;N;;;;; FBDD;ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL; 0677;;;;N;;;;; FBDE;ARABIC LETTER VE ISOLATED FORM;Lo;0;AL; 06CB;;;;N;;;;; FBDF;ARABIC LETTER VE FINAL FORM;Lo;0;AL; 06CB;;;;N;;;;; FBE0;ARABIC LETTER KIRGHIZ OE ISOLATED FORM;Lo;0;AL; 06C5;;;;N;;;;; FBE1;ARABIC LETTER KIRGHIZ OE FINAL FORM;Lo;0;AL; 06C5;;;;N;;;;; FBE2;ARABIC LETTER KIRGHIZ YU ISOLATED FORM;Lo;0;AL; 06C9;;;;N;;;;; FBE3;ARABIC LETTER KIRGHIZ YU FINAL FORM;Lo;0;AL; 06C9;;;;N;;;;; FBE4;ARABIC LETTER E ISOLATED FORM;Lo;0;AL; 06D0;;;;N;;;;; FBE5;ARABIC LETTER E FINAL FORM;Lo;0;AL; 06D0;;;;N;;;;; FBE6;ARABIC LETTER E INITIAL FORM;Lo;0;AL; 06D0;;;;N;;;;; FBE7;ARABIC LETTER E MEDIAL FORM;Lo;0;AL; 06D0;;;;N;;;;; FBE8;ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM;Lo;0;AL; 0649;;;;N;;;;; FBE9;ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM;Lo;0;AL; 0649;;;;N;;;;; FBEA;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM;Lo;0;AL; 0626 0627;;;;N;;;;; FBEB;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORM;Lo;0;AL; 0626 0627;;;;N;;;;; FBEC;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORM;Lo;0;AL; 0626 06D5;;;;N;;;;; FBED;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE FINAL FORM;Lo;0;AL; 0626 06D5;;;;N;;;;; FBEE;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED FORM;Lo;0;AL; 0626 0648;;;;N;;;;; FBEF;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORM;Lo;0;AL; 0626 0648;;;;N;;;;; FBF0;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATED FORM;Lo;0;AL; 0626 06C7;;;;N;;;;; FBF1;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORM;Lo;0;AL; 0626 06C7;;;;N;;;;; FBF2;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE ISOLATED FORM;Lo;0;AL; 0626 06C6;;;;N;;;;; FBF3;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORM;Lo;0;AL; 0626 06C6;;;;N;;;;; FBF4;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORM;Lo;0;AL; 0626 06C8;;;;N;;;;; FBF5;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORM;Lo;0;AL; 0626 06C8;;;;N;;;;; FBF6;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORM;Lo;0;AL; 0626 06D0;;;;N;;;;; FBF7;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E FINAL FORM;Lo;0;AL; 0626 06D0;;;;N;;;;; FBF8;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORM;Lo;0;AL; 0626 06D0;;;;N;;;;; FBF9;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0626 0649;;;;N;;;;; FBFA;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0626 0649;;;;N;;;;; FBFB;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM;Lo;0;AL; 0626 0649;;;;N;;;;; FBFC;ARABIC LETTER FARSI YEH ISOLATED FORM;Lo;0;AL; 06CC;;;;N;;;;; FBFD;ARABIC LETTER FARSI YEH FINAL FORM;Lo;0;AL; 06CC;;;;N;;;;; FBFE;ARABIC LETTER FARSI YEH INITIAL FORM;Lo;0;AL; 06CC;;;;N;;;;; FBFF;ARABIC LETTER FARSI YEH MEDIAL FORM;Lo;0;AL; 06CC;;;;N;;;;; FC00;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM;Lo;0;AL; 0626 062C;;;;N;;;;; FC01;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH ISOLATED FORM;Lo;0;AL; 0626 062D;;;;N;;;;; FC02;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED FORM;Lo;0;AL; 0626 0645;;;;N;;;;; FC03;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0626 0649;;;;N;;;;; FC04;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH ISOLATED FORM;Lo;0;AL; 0626 064A;;;;N;;;;; FC05;ARABIC LIGATURE BEH WITH JEEM ISOLATED FORM;Lo;0;AL; 0628 062C;;;;N;;;;; FC06;ARABIC LIGATURE BEH WITH HAH ISOLATED FORM;Lo;0;AL; 0628 062D;;;;N;;;;; FC07;ARABIC LIGATURE BEH WITH KHAH ISOLATED FORM;Lo;0;AL; 0628 062E;;;;N;;;;; FC08;ARABIC LIGATURE BEH WITH MEEM ISOLATED FORM;Lo;0;AL; 0628 0645;;;;N;;;;; FC09;ARABIC LIGATURE BEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0628 0649;;;;N;;;;; FC0A;ARABIC LIGATURE BEH WITH YEH ISOLATED FORM;Lo;0;AL; 0628 064A;;;;N;;;;; FC0B;ARABIC LIGATURE TEH WITH JEEM ISOLATED FORM;Lo;0;AL; 062A 062C;;;;N;;;;; FC0C;ARABIC LIGATURE TEH WITH HAH ISOLATED FORM;Lo;0;AL; 062A 062D;;;;N;;;;; FC0D;ARABIC LIGATURE TEH WITH KHAH ISOLATED FORM;Lo;0;AL; 062A 062E;;;;N;;;;; FC0E;ARABIC LIGATURE TEH WITH MEEM ISOLATED FORM;Lo;0;AL; 062A 0645;;;;N;;;;; FC0F;ARABIC LIGATURE TEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 062A 0649;;;;N;;;;; FC10;ARABIC LIGATURE TEH WITH YEH ISOLATED FORM;Lo;0;AL; 062A 064A;;;;N;;;;; FC11;ARABIC LIGATURE THEH WITH JEEM ISOLATED FORM;Lo;0;AL; 062B 062C;;;;N;;;;; FC12;ARABIC LIGATURE THEH WITH MEEM ISOLATED FORM;Lo;0;AL; 062B 0645;;;;N;;;;; FC13;ARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 062B 0649;;;;N;;;;; FC14;ARABIC LIGATURE THEH WITH YEH ISOLATED FORM;Lo;0;AL; 062B 064A;;;;N;;;;; FC15;ARABIC LIGATURE JEEM WITH HAH ISOLATED FORM;Lo;0;AL; 062C 062D;;;;N;;;;; FC16;ARABIC LIGATURE JEEM WITH MEEM ISOLATED FORM;Lo;0;AL; 062C 0645;;;;N;;;;; FC17;ARABIC LIGATURE HAH WITH JEEM ISOLATED FORM;Lo;0;AL; 062D 062C;;;;N;;;;; FC18;ARABIC LIGATURE HAH WITH MEEM ISOLATED FORM;Lo;0;AL; 062D 0645;;;;N;;;;; FC19;ARABIC LIGATURE KHAH WITH JEEM ISOLATED FORM;Lo;0;AL; 062E 062C;;;;N;;;;; FC1A;ARABIC LIGATURE KHAH WITH HAH ISOLATED FORM;Lo;0;AL; 062E 062D;;;;N;;;;; FC1B;ARABIC LIGATURE KHAH WITH MEEM ISOLATED FORM;Lo;0;AL; 062E 0645;;;;N;;;;; FC1C;ARABIC LIGATURE SEEN WITH JEEM ISOLATED FORM;Lo;0;AL; 0633 062C;;;;N;;;;; FC1D;ARABIC LIGATURE SEEN WITH HAH ISOLATED FORM;Lo;0;AL; 0633 062D;;;;N;;;;; FC1E;ARABIC LIGATURE SEEN WITH KHAH ISOLATED FORM;Lo;0;AL; 0633 062E;;;;N;;;;; FC1F;ARABIC LIGATURE SEEN WITH MEEM ISOLATED FORM;Lo;0;AL; 0633 0645;;;;N;;;;; FC20;ARABIC LIGATURE SAD WITH HAH ISOLATED FORM;Lo;0;AL; 0635 062D;;;;N;;;;; FC21;ARABIC LIGATURE SAD WITH MEEM ISOLATED FORM;Lo;0;AL; 0635 0645;;;;N;;;;; FC22;ARABIC LIGATURE DAD WITH JEEM ISOLATED FORM;Lo;0;AL; 0636 062C;;;;N;;;;; FC23;ARABIC LIGATURE DAD WITH HAH ISOLATED FORM;Lo;0;AL; 0636 062D;;;;N;;;;; FC24;ARABIC LIGATURE DAD WITH KHAH ISOLATED FORM;Lo;0;AL; 0636 062E;;;;N;;;;; FC25;ARABIC LIGATURE DAD WITH MEEM ISOLATED FORM;Lo;0;AL; 0636 0645;;;;N;;;;; FC26;ARABIC LIGATURE TAH WITH HAH ISOLATED FORM;Lo;0;AL; 0637 062D;;;;N;;;;; FC27;ARABIC LIGATURE TAH WITH MEEM ISOLATED FORM;Lo;0;AL; 0637 0645;;;;N;;;;; FC28;ARABIC LIGATURE ZAH WITH MEEM ISOLATED FORM;Lo;0;AL; 0638 0645;;;;N;;;;; FC29;ARABIC LIGATURE AIN WITH JEEM ISOLATED FORM;Lo;0;AL; 0639 062C;;;;N;;;;; FC2A;ARABIC LIGATURE AIN WITH MEEM ISOLATED FORM;Lo;0;AL; 0639 0645;;;;N;;;;; FC2B;ARABIC LIGATURE GHAIN WITH JEEM ISOLATED FORM;Lo;0;AL; 063A 062C;;;;N;;;;; FC2C;ARABIC LIGATURE GHAIN WITH MEEM ISOLATED FORM;Lo;0;AL; 063A 0645;;;;N;;;;; FC2D;ARABIC LIGATURE FEH WITH JEEM ISOLATED FORM;Lo;0;AL; 0641 062C;;;;N;;;;; FC2E;ARABIC LIGATURE FEH WITH HAH ISOLATED FORM;Lo;0;AL; 0641 062D;;;;N;;;;; FC2F;ARABIC LIGATURE FEH WITH KHAH ISOLATED FORM;Lo;0;AL; 0641 062E;;;;N;;;;; FC30;ARABIC LIGATURE FEH WITH MEEM ISOLATED FORM;Lo;0;AL; 0641 0645;;;;N;;;;; FC31;ARABIC LIGATURE FEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0641 0649;;;;N;;;;; FC32;ARABIC LIGATURE FEH WITH YEH ISOLATED FORM;Lo;0;AL; 0641 064A;;;;N;;;;; FC33;ARABIC LIGATURE QAF WITH HAH ISOLATED FORM;Lo;0;AL; 0642 062D;;;;N;;;;; FC34;ARABIC LIGATURE QAF WITH MEEM ISOLATED FORM;Lo;0;AL; 0642 0645;;;;N;;;;; FC35;ARABIC LIGATURE QAF WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0642 0649;;;;N;;;;; FC36;ARABIC LIGATURE QAF WITH YEH ISOLATED FORM;Lo;0;AL; 0642 064A;;;;N;;;;; FC37;ARABIC LIGATURE KAF WITH ALEF ISOLATED FORM;Lo;0;AL; 0643 0627;;;;N;;;;; FC38;ARABIC LIGATURE KAF WITH JEEM ISOLATED FORM;Lo;0;AL; 0643 062C;;;;N;;;;; FC39;ARABIC LIGATURE KAF WITH HAH ISOLATED FORM;Lo;0;AL; 0643 062D;;;;N;;;;; FC3A;ARABIC LIGATURE KAF WITH KHAH ISOLATED FORM;Lo;0;AL; 0643 062E;;;;N;;;;; FC3B;ARABIC LIGATURE KAF WITH LAM ISOLATED FORM;Lo;0;AL; 0643 0644;;;;N;;;;; FC3C;ARABIC LIGATURE KAF WITH MEEM ISOLATED FORM;Lo;0;AL; 0643 0645;;;;N;;;;; FC3D;ARABIC LIGATURE KAF WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0643 0649;;;;N;;;;; FC3E;ARABIC LIGATURE KAF WITH YEH ISOLATED FORM;Lo;0;AL; 0643 064A;;;;N;;;;; FC3F;ARABIC LIGATURE LAM WITH JEEM ISOLATED FORM;Lo;0;AL; 0644 062C;;;;N;;;;; FC40;ARABIC LIGATURE LAM WITH HAH ISOLATED FORM;Lo;0;AL; 0644 062D;;;;N;;;;; FC41;ARABIC LIGATURE LAM WITH KHAH ISOLATED FORM;Lo;0;AL; 0644 062E;;;;N;;;;; FC42;ARABIC LIGATURE LAM WITH MEEM ISOLATED FORM;Lo;0;AL; 0644 0645;;;;N;;;;; FC43;ARABIC LIGATURE LAM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0644 0649;;;;N;;;;; FC44;ARABIC LIGATURE LAM WITH YEH ISOLATED FORM;Lo;0;AL; 0644 064A;;;;N;;;;; FC45;ARABIC LIGATURE MEEM WITH JEEM ISOLATED FORM;Lo;0;AL; 0645 062C;;;;N;;;;; FC46;ARABIC LIGATURE MEEM WITH HAH ISOLATED FORM;Lo;0;AL; 0645 062D;;;;N;;;;; FC47;ARABIC LIGATURE MEEM WITH KHAH ISOLATED FORM;Lo;0;AL; 0645 062E;;;;N;;;;; FC48;ARABIC LIGATURE MEEM WITH MEEM ISOLATED FORM;Lo;0;AL; 0645 0645;;;;N;;;;; FC49;ARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0645 0649;;;;N;;;;; FC4A;ARABIC LIGATURE MEEM WITH YEH ISOLATED FORM;Lo;0;AL; 0645 064A;;;;N;;;;; FC4B;ARABIC LIGATURE NOON WITH JEEM ISOLATED FORM;Lo;0;AL; 0646 062C;;;;N;;;;; FC4C;ARABIC LIGATURE NOON WITH HAH ISOLATED FORM;Lo;0;AL; 0646 062D;;;;N;;;;; FC4D;ARABIC LIGATURE NOON WITH KHAH ISOLATED FORM;Lo;0;AL; 0646 062E;;;;N;;;;; FC4E;ARABIC LIGATURE NOON WITH MEEM ISOLATED FORM;Lo;0;AL; 0646 0645;;;;N;;;;; FC4F;ARABIC LIGATURE NOON WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0646 0649;;;;N;;;;; FC50;ARABIC LIGATURE NOON WITH YEH ISOLATED FORM;Lo;0;AL; 0646 064A;;;;N;;;;; FC51;ARABIC LIGATURE HEH WITH JEEM ISOLATED FORM;Lo;0;AL; 0647 062C;;;;N;;;;; FC52;ARABIC LIGATURE HEH WITH MEEM ISOLATED FORM;Lo;0;AL; 0647 0645;;;;N;;;;; FC53;ARABIC LIGATURE HEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0647 0649;;;;N;;;;; FC54;ARABIC LIGATURE HEH WITH YEH ISOLATED FORM;Lo;0;AL; 0647 064A;;;;N;;;;; FC55;ARABIC LIGATURE YEH WITH JEEM ISOLATED FORM;Lo;0;AL; 064A 062C;;;;N;;;;; FC56;ARABIC LIGATURE YEH WITH HAH ISOLATED FORM;Lo;0;AL; 064A 062D;;;;N;;;;; FC57;ARABIC LIGATURE YEH WITH KHAH ISOLATED FORM;Lo;0;AL; 064A 062E;;;;N;;;;; FC58;ARABIC LIGATURE YEH WITH MEEM ISOLATED FORM;Lo;0;AL; 064A 0645;;;;N;;;;; FC59;ARABIC LIGATURE YEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 064A 0649;;;;N;;;;; FC5A;ARABIC LIGATURE YEH WITH YEH ISOLATED FORM;Lo;0;AL; 064A 064A;;;;N;;;;; FC5B;ARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL; 0630 0670;;;;N;;;;; FC5C;ARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL; 0631 0670;;;;N;;;;; FC5D;ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL; 0649 0670;;;;N;;;;; FC5E;ARABIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORM;Lo;0;AL; 0020 064C 0651;;;;N;;;;; FC5F;ARABIC LIGATURE SHADDA WITH KASRATAN ISOLATED FORM;Lo;0;AL; 0020 064D 0651;;;;N;;;;; FC60;ARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORM;Lo;0;AL; 0020 064E 0651;;;;N;;;;; FC61;ARABIC LIGATURE SHADDA WITH DAMMA ISOLATED FORM;Lo;0;AL; 0020 064F 0651;;;;N;;;;; FC62;ARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORM;Lo;0;AL; 0020 0650 0651;;;;N;;;;; FC63;ARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL; 0020 0651 0670;;;;N;;;;; FC64;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM;Lo;0;AL; 0626 0631;;;;N;;;;; FC65;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ZAIN FINAL FORM;Lo;0;AL; 0626 0632;;;;N;;;;; FC66;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM FINAL FORM;Lo;0;AL; 0626 0645;;;;N;;;;; FC67;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON FINAL FORM;Lo;0;AL; 0626 0646;;;;N;;;;; FC68;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0626 0649;;;;N;;;;; FC69;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH FINAL FORM;Lo;0;AL; 0626 064A;;;;N;;;;; FC6A;ARABIC LIGATURE BEH WITH REH FINAL FORM;Lo;0;AL; 0628 0631;;;;N;;;;; FC6B;ARABIC LIGATURE BEH WITH ZAIN FINAL FORM;Lo;0;AL; 0628 0632;;;;N;;;;; FC6C;ARABIC LIGATURE BEH WITH MEEM FINAL FORM;Lo;0;AL; 0628 0645;;;;N;;;;; FC6D;ARABIC LIGATURE BEH WITH NOON FINAL FORM;Lo;0;AL; 0628 0646;;;;N;;;;; FC6E;ARABIC LIGATURE BEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0628 0649;;;;N;;;;; FC6F;ARABIC LIGATURE BEH WITH YEH FINAL FORM;Lo;0;AL; 0628 064A;;;;N;;;;; FC70;ARABIC LIGATURE TEH WITH REH FINAL FORM;Lo;0;AL; 062A 0631;;;;N;;;;; FC71;ARABIC LIGATURE TEH WITH ZAIN FINAL FORM;Lo;0;AL; 062A 0632;;;;N;;;;; FC72;ARABIC LIGATURE TEH WITH MEEM FINAL FORM;Lo;0;AL; 062A 0645;;;;N;;;;; FC73;ARABIC LIGATURE TEH WITH NOON FINAL FORM;Lo;0;AL; 062A 0646;;;;N;;;;; FC74;ARABIC LIGATURE TEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 062A 0649;;;;N;;;;; FC75;ARABIC LIGATURE TEH WITH YEH FINAL FORM;Lo;0;AL; 062A 064A;;;;N;;;;; FC76;ARABIC LIGATURE THEH WITH REH FINAL FORM;Lo;0;AL; 062B 0631;;;;N;;;;; FC77;ARABIC LIGATURE THEH WITH ZAIN FINAL FORM;Lo;0;AL; 062B 0632;;;;N;;;;; FC78;ARABIC LIGATURE THEH WITH MEEM FINAL FORM;Lo;0;AL; 062B 0645;;;;N;;;;; FC79;ARABIC LIGATURE THEH WITH NOON FINAL FORM;Lo;0;AL; 062B 0646;;;;N;;;;; FC7A;ARABIC LIGATURE THEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 062B 0649;;;;N;;;;; FC7B;ARABIC LIGATURE THEH WITH YEH FINAL FORM;Lo;0;AL; 062B 064A;;;;N;;;;; FC7C;ARABIC LIGATURE FEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0641 0649;;;;N;;;;; FC7D;ARABIC LIGATURE FEH WITH YEH FINAL FORM;Lo;0;AL; 0641 064A;;;;N;;;;; FC7E;ARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0642 0649;;;;N;;;;; FC7F;ARABIC LIGATURE QAF WITH YEH FINAL FORM;Lo;0;AL; 0642 064A;;;;N;;;;; FC80;ARABIC LIGATURE KAF WITH ALEF FINAL FORM;Lo;0;AL; 0643 0627;;;;N;;;;; FC81;ARABIC LIGATURE KAF WITH LAM FINAL FORM;Lo;0;AL; 0643 0644;;;;N;;;;; FC82;ARABIC LIGATURE KAF WITH MEEM FINAL FORM;Lo;0;AL; 0643 0645;;;;N;;;;; FC83;ARABIC LIGATURE KAF WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0643 0649;;;;N;;;;; FC84;ARABIC LIGATURE KAF WITH YEH FINAL FORM;Lo;0;AL; 0643 064A;;;;N;;;;; FC85;ARABIC LIGATURE LAM WITH MEEM FINAL FORM;Lo;0;AL; 0644 0645;;;;N;;;;; FC86;ARABIC LIGATURE LAM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0644 0649;;;;N;;;;; FC87;ARABIC LIGATURE LAM WITH YEH FINAL FORM;Lo;0;AL; 0644 064A;;;;N;;;;; FC88;ARABIC LIGATURE MEEM WITH ALEF FINAL FORM;Lo;0;AL; 0645 0627;;;;N;;;;; FC89;ARABIC LIGATURE MEEM WITH MEEM FINAL FORM;Lo;0;AL; 0645 0645;;;;N;;;;; FC8A;ARABIC LIGATURE NOON WITH REH FINAL FORM;Lo;0;AL; 0646 0631;;;;N;;;;; FC8B;ARABIC LIGATURE NOON WITH ZAIN FINAL FORM;Lo;0;AL; 0646 0632;;;;N;;;;; FC8C;ARABIC LIGATURE NOON WITH MEEM FINAL FORM;Lo;0;AL; 0646 0645;;;;N;;;;; FC8D;ARABIC LIGATURE NOON WITH NOON FINAL FORM;Lo;0;AL; 0646 0646;;;;N;;;;; FC8E;ARABIC LIGATURE NOON WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0646 0649;;;;N;;;;; FC8F;ARABIC LIGATURE NOON WITH YEH FINAL FORM;Lo;0;AL; 0646 064A;;;;N;;;;; FC90;ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM;Lo;0;AL; 0649 0670;;;;N;;;;; FC91;ARABIC LIGATURE YEH WITH REH FINAL FORM;Lo;0;AL; 064A 0631;;;;N;;;;; FC92;ARABIC LIGATURE YEH WITH ZAIN FINAL FORM;Lo;0;AL; 064A 0632;;;;N;;;;; FC93;ARABIC LIGATURE YEH WITH MEEM FINAL FORM;Lo;0;AL; 064A 0645;;;;N;;;;; FC94;ARABIC LIGATURE YEH WITH NOON FINAL FORM;Lo;0;AL; 064A 0646;;;;N;;;;; FC95;ARABIC LIGATURE YEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 064A 0649;;;;N;;;;; FC96;ARABIC LIGATURE YEH WITH YEH FINAL FORM;Lo;0;AL; 064A 064A;;;;N;;;;; FC97;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL FORM;Lo;0;AL; 0626 062C;;;;N;;;;; FC98;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH INITIAL FORM;Lo;0;AL; 0626 062D;;;;N;;;;; FC99;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH KHAH INITIAL FORM;Lo;0;AL; 0626 062E;;;;N;;;;; FC9A;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM INITIAL FORM;Lo;0;AL; 0626 0645;;;;N;;;;; FC9B;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH INITIAL FORM;Lo;0;AL; 0626 0647;;;;N;;;;; FC9C;ARABIC LIGATURE BEH WITH JEEM INITIAL FORM;Lo;0;AL; 0628 062C;;;;N;;;;; FC9D;ARABIC LIGATURE BEH WITH HAH INITIAL FORM;Lo;0;AL; 0628 062D;;;;N;;;;; FC9E;ARABIC LIGATURE BEH WITH KHAH INITIAL FORM;Lo;0;AL; 0628 062E;;;;N;;;;; FC9F;ARABIC LIGATURE BEH WITH MEEM INITIAL FORM;Lo;0;AL; 0628 0645;;;;N;;;;; FCA0;ARABIC LIGATURE BEH WITH HEH INITIAL FORM;Lo;0;AL; 0628 0647;;;;N;;;;; FCA1;ARABIC LIGATURE TEH WITH JEEM INITIAL FORM;Lo;0;AL; 062A 062C;;;;N;;;;; FCA2;ARABIC LIGATURE TEH WITH HAH INITIAL FORM;Lo;0;AL; 062A 062D;;;;N;;;;; FCA3;ARABIC LIGATURE TEH WITH KHAH INITIAL FORM;Lo;0;AL; 062A 062E;;;;N;;;;; FCA4;ARABIC LIGATURE TEH WITH MEEM INITIAL FORM;Lo;0;AL; 062A 0645;;;;N;;;;; FCA5;ARABIC LIGATURE TEH WITH HEH INITIAL FORM;Lo;0;AL; 062A 0647;;;;N;;;;; FCA6;ARABIC LIGATURE THEH WITH MEEM INITIAL FORM;Lo;0;AL; 062B 0645;;;;N;;;;; FCA7;ARABIC LIGATURE JEEM WITH HAH INITIAL FORM;Lo;0;AL; 062C 062D;;;;N;;;;; FCA8;ARABIC LIGATURE JEEM WITH MEEM INITIAL FORM;Lo;0;AL; 062C 0645;;;;N;;;;; FCA9;ARABIC LIGATURE HAH WITH JEEM INITIAL FORM;Lo;0;AL; 062D 062C;;;;N;;;;; FCAA;ARABIC LIGATURE HAH WITH MEEM INITIAL FORM;Lo;0;AL; 062D 0645;;;;N;;;;; FCAB;ARABIC LIGATURE KHAH WITH JEEM INITIAL FORM;Lo;0;AL; 062E 062C;;;;N;;;;; FCAC;ARABIC LIGATURE KHAH WITH MEEM INITIAL FORM;Lo;0;AL; 062E 0645;;;;N;;;;; FCAD;ARABIC LIGATURE SEEN WITH JEEM INITIAL FORM;Lo;0;AL; 0633 062C;;;;N;;;;; FCAE;ARABIC LIGATURE SEEN WITH HAH INITIAL FORM;Lo;0;AL; 0633 062D;;;;N;;;;; FCAF;ARABIC LIGATURE SEEN WITH KHAH INITIAL FORM;Lo;0;AL; 0633 062E;;;;N;;;;; FCB0;ARABIC LIGATURE SEEN WITH MEEM INITIAL FORM;Lo;0;AL; 0633 0645;;;;N;;;;; FCB1;ARABIC LIGATURE SAD WITH HAH INITIAL FORM;Lo;0;AL; 0635 062D;;;;N;;;;; FCB2;ARABIC LIGATURE SAD WITH KHAH INITIAL FORM;Lo;0;AL; 0635 062E;;;;N;;;;; FCB3;ARABIC LIGATURE SAD WITH MEEM INITIAL FORM;Lo;0;AL; 0635 0645;;;;N;;;;; FCB4;ARABIC LIGATURE DAD WITH JEEM INITIAL FORM;Lo;0;AL; 0636 062C;;;;N;;;;; FCB5;ARABIC LIGATURE DAD WITH HAH INITIAL FORM;Lo;0;AL; 0636 062D;;;;N;;;;; FCB6;ARABIC LIGATURE DAD WITH KHAH INITIAL FORM;Lo;0;AL; 0636 062E;;;;N;;;;; FCB7;ARABIC LIGATURE DAD WITH MEEM INITIAL FORM;Lo;0;AL; 0636 0645;;;;N;;;;; FCB8;ARABIC LIGATURE TAH WITH HAH INITIAL FORM;Lo;0;AL; 0637 062D;;;;N;;;;; FCB9;ARABIC LIGATURE ZAH WITH MEEM INITIAL FORM;Lo;0;AL; 0638 0645;;;;N;;;;; FCBA;ARABIC LIGATURE AIN WITH JEEM INITIAL FORM;Lo;0;AL; 0639 062C;;;;N;;;;; FCBB;ARABIC LIGATURE AIN WITH MEEM INITIAL FORM;Lo;0;AL; 0639 0645;;;;N;;;;; FCBC;ARABIC LIGATURE GHAIN WITH JEEM INITIAL FORM;Lo;0;AL; 063A 062C;;;;N;;;;; FCBD;ARABIC LIGATURE GHAIN WITH MEEM INITIAL FORM;Lo;0;AL; 063A 0645;;;;N;;;;; FCBE;ARABIC LIGATURE FEH WITH JEEM INITIAL FORM;Lo;0;AL; 0641 062C;;;;N;;;;; FCBF;ARABIC LIGATURE FEH WITH HAH INITIAL FORM;Lo;0;AL; 0641 062D;;;;N;;;;; FCC0;ARABIC LIGATURE FEH WITH KHAH INITIAL FORM;Lo;0;AL; 0641 062E;;;;N;;;;; FCC1;ARABIC LIGATURE FEH WITH MEEM INITIAL FORM;Lo;0;AL; 0641 0645;;;;N;;;;; FCC2;ARABIC LIGATURE QAF WITH HAH INITIAL FORM;Lo;0;AL; 0642 062D;;;;N;;;;; FCC3;ARABIC LIGATURE QAF WITH MEEM INITIAL FORM;Lo;0;AL; 0642 0645;;;;N;;;;; FCC4;ARABIC LIGATURE KAF WITH JEEM INITIAL FORM;Lo;0;AL; 0643 062C;;;;N;;;;; FCC5;ARABIC LIGATURE KAF WITH HAH INITIAL FORM;Lo;0;AL; 0643 062D;;;;N;;;;; FCC6;ARABIC LIGATURE KAF WITH KHAH INITIAL FORM;Lo;0;AL; 0643 062E;;;;N;;;;; FCC7;ARABIC LIGATURE KAF WITH LAM INITIAL FORM;Lo;0;AL; 0643 0644;;;;N;;;;; FCC8;ARABIC LIGATURE KAF WITH MEEM INITIAL FORM;Lo;0;AL; 0643 0645;;;;N;;;;; FCC9;ARABIC LIGATURE LAM WITH JEEM INITIAL FORM;Lo;0;AL; 0644 062C;;;;N;;;;; FCCA;ARABIC LIGATURE LAM WITH HAH INITIAL FORM;Lo;0;AL; 0644 062D;;;;N;;;;; FCCB;ARABIC LIGATURE LAM WITH KHAH INITIAL FORM;Lo;0;AL; 0644 062E;;;;N;;;;; FCCC;ARABIC LIGATURE LAM WITH MEEM INITIAL FORM;Lo;0;AL; 0644 0645;;;;N;;;;; FCCD;ARABIC LIGATURE LAM WITH HEH INITIAL FORM;Lo;0;AL; 0644 0647;;;;N;;;;; FCCE;ARABIC LIGATURE MEEM WITH JEEM INITIAL FORM;Lo;0;AL; 0645 062C;;;;N;;;;; FCCF;ARABIC LIGATURE MEEM WITH HAH INITIAL FORM;Lo;0;AL; 0645 062D;;;;N;;;;; FCD0;ARABIC LIGATURE MEEM WITH KHAH INITIAL FORM;Lo;0;AL; 0645 062E;;;;N;;;;; FCD1;ARABIC LIGATURE MEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0645 0645;;;;N;;;;; FCD2;ARABIC LIGATURE NOON WITH JEEM INITIAL FORM;Lo;0;AL; 0646 062C;;;;N;;;;; FCD3;ARABIC LIGATURE NOON WITH HAH INITIAL FORM;Lo;0;AL; 0646 062D;;;;N;;;;; FCD4;ARABIC LIGATURE NOON WITH KHAH INITIAL FORM;Lo;0;AL; 0646 062E;;;;N;;;;; FCD5;ARABIC LIGATURE NOON WITH MEEM INITIAL FORM;Lo;0;AL; 0646 0645;;;;N;;;;; FCD6;ARABIC LIGATURE NOON WITH HEH INITIAL FORM;Lo;0;AL; 0646 0647;;;;N;;;;; FCD7;ARABIC LIGATURE HEH WITH JEEM INITIAL FORM;Lo;0;AL; 0647 062C;;;;N;;;;; FCD8;ARABIC LIGATURE HEH WITH MEEM INITIAL FORM;Lo;0;AL; 0647 0645;;;;N;;;;; FCD9;ARABIC LIGATURE HEH WITH SUPERSCRIPT ALEF INITIAL FORM;Lo;0;AL; 0647 0670;;;;N;;;;; FCDA;ARABIC LIGATURE YEH WITH JEEM INITIAL FORM;Lo;0;AL; 064A 062C;;;;N;;;;; FCDB;ARABIC LIGATURE YEH WITH HAH INITIAL FORM;Lo;0;AL; 064A 062D;;;;N;;;;; FCDC;ARABIC LIGATURE YEH WITH KHAH INITIAL FORM;Lo;0;AL; 064A 062E;;;;N;;;;; FCDD;ARABIC LIGATURE YEH WITH MEEM INITIAL FORM;Lo;0;AL; 064A 0645;;;;N;;;;; FCDE;ARABIC LIGATURE YEH WITH HEH INITIAL FORM;Lo;0;AL; 064A 0647;;;;N;;;;; FCDF;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORM;Lo;0;AL; 0626 0645;;;;N;;;;; FCE0;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL FORM;Lo;0;AL; 0626 0647;;;;N;;;;; FCE1;ARABIC LIGATURE BEH WITH MEEM MEDIAL FORM;Lo;0;AL; 0628 0645;;;;N;;;;; FCE2;ARABIC LIGATURE BEH WITH HEH MEDIAL FORM;Lo;0;AL; 0628 0647;;;;N;;;;; FCE3;ARABIC LIGATURE TEH WITH MEEM MEDIAL FORM;Lo;0;AL; 062A 0645;;;;N;;;;; FCE4;ARABIC LIGATURE TEH WITH HEH MEDIAL FORM;Lo;0;AL; 062A 0647;;;;N;;;;; FCE5;ARABIC LIGATURE THEH WITH MEEM MEDIAL FORM;Lo;0;AL; 062B 0645;;;;N;;;;; FCE6;ARABIC LIGATURE THEH WITH HEH MEDIAL FORM;Lo;0;AL; 062B 0647;;;;N;;;;; FCE7;ARABIC LIGATURE SEEN WITH MEEM MEDIAL FORM;Lo;0;AL; 0633 0645;;;;N;;;;; FCE8;ARABIC LIGATURE SEEN WITH HEH MEDIAL FORM;Lo;0;AL; 0633 0647;;;;N;;;;; FCE9;ARABIC LIGATURE SHEEN WITH MEEM MEDIAL FORM;Lo;0;AL; 0634 0645;;;;N;;;;; FCEA;ARABIC LIGATURE SHEEN WITH HEH MEDIAL FORM;Lo;0;AL; 0634 0647;;;;N;;;;; FCEB;ARABIC LIGATURE KAF WITH LAM MEDIAL FORM;Lo;0;AL; 0643 0644;;;;N;;;;; FCEC;ARABIC LIGATURE KAF WITH MEEM MEDIAL FORM;Lo;0;AL; 0643 0645;;;;N;;;;; FCED;ARABIC LIGATURE LAM WITH MEEM MEDIAL FORM;Lo;0;AL; 0644 0645;;;;N;;;;; FCEE;ARABIC LIGATURE NOON WITH MEEM MEDIAL FORM;Lo;0;AL; 0646 0645;;;;N;;;;; FCEF;ARABIC LIGATURE NOON WITH HEH MEDIAL FORM;Lo;0;AL; 0646 0647;;;;N;;;;; FCF0;ARABIC LIGATURE YEH WITH MEEM MEDIAL FORM;Lo;0;AL; 064A 0645;;;;N;;;;; FCF1;ARABIC LIGATURE YEH WITH HEH MEDIAL FORM;Lo;0;AL; 064A 0647;;;;N;;;;; FCF2;ARABIC LIGATURE SHADDA WITH FATHA MEDIAL FORM;Lo;0;AL; 0640 064E 0651;;;;N;;;;; FCF3;ARABIC LIGATURE SHADDA WITH DAMMA MEDIAL FORM;Lo;0;AL; 0640 064F 0651;;;;N;;;;; FCF4;ARABIC LIGATURE SHADDA WITH KASRA MEDIAL FORM;Lo;0;AL; 0640 0650 0651;;;;N;;;;; FCF5;ARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0637 0649;;;;N;;;;; FCF6;ARABIC LIGATURE TAH WITH YEH ISOLATED FORM;Lo;0;AL; 0637 064A;;;;N;;;;; FCF7;ARABIC LIGATURE AIN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0639 0649;;;;N;;;;; FCF8;ARABIC LIGATURE AIN WITH YEH ISOLATED FORM;Lo;0;AL; 0639 064A;;;;N;;;;; FCF9;ARABIC LIGATURE GHAIN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 063A 0649;;;;N;;;;; FCFA;ARABIC LIGATURE GHAIN WITH YEH ISOLATED FORM;Lo;0;AL; 063A 064A;;;;N;;;;; FCFB;ARABIC LIGATURE SEEN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0633 0649;;;;N;;;;; FCFC;ARABIC LIGATURE SEEN WITH YEH ISOLATED FORM;Lo;0;AL; 0633 064A;;;;N;;;;; FCFD;ARABIC LIGATURE SHEEN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0634 0649;;;;N;;;;; FCFE;ARABIC LIGATURE SHEEN WITH YEH ISOLATED FORM;Lo;0;AL; 0634 064A;;;;N;;;;; FCFF;ARABIC LIGATURE HAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 062D 0649;;;;N;;;;; FD00;ARABIC LIGATURE HAH WITH YEH ISOLATED FORM;Lo;0;AL; 062D 064A;;;;N;;;;; FD01;ARABIC LIGATURE JEEM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 062C 0649;;;;N;;;;; FD02;ARABIC LIGATURE JEEM WITH YEH ISOLATED FORM;Lo;0;AL; 062C 064A;;;;N;;;;; FD03;ARABIC LIGATURE KHAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 062E 0649;;;;N;;;;; FD04;ARABIC LIGATURE KHAH WITH YEH ISOLATED FORM;Lo;0;AL; 062E 064A;;;;N;;;;; FD05;ARABIC LIGATURE SAD WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0635 0649;;;;N;;;;; FD06;ARABIC LIGATURE SAD WITH YEH ISOLATED FORM;Lo;0;AL; 0635 064A;;;;N;;;;; FD07;ARABIC LIGATURE DAD WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0636 0649;;;;N;;;;; FD08;ARABIC LIGATURE DAD WITH YEH ISOLATED FORM;Lo;0;AL; 0636 064A;;;;N;;;;; FD09;ARABIC LIGATURE SHEEN WITH JEEM ISOLATED FORM;Lo;0;AL; 0634 062C;;;;N;;;;; FD0A;ARABIC LIGATURE SHEEN WITH HAH ISOLATED FORM;Lo;0;AL; 0634 062D;;;;N;;;;; FD0B;ARABIC LIGATURE SHEEN WITH KHAH ISOLATED FORM;Lo;0;AL; 0634 062E;;;;N;;;;; FD0C;ARABIC LIGATURE SHEEN WITH MEEM ISOLATED FORM;Lo;0;AL; 0634 0645;;;;N;;;;; FD0D;ARABIC LIGATURE SHEEN WITH REH ISOLATED FORM;Lo;0;AL; 0634 0631;;;;N;;;;; FD0E;ARABIC LIGATURE SEEN WITH REH ISOLATED FORM;Lo;0;AL; 0633 0631;;;;N;;;;; FD0F;ARABIC LIGATURE SAD WITH REH ISOLATED FORM;Lo;0;AL; 0635 0631;;;;N;;;;; FD10;ARABIC LIGATURE DAD WITH REH ISOLATED FORM;Lo;0;AL; 0636 0631;;;;N;;;;; FD11;ARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0637 0649;;;;N;;;;; FD12;ARABIC LIGATURE TAH WITH YEH FINAL FORM;Lo;0;AL; 0637 064A;;;;N;;;;; FD13;ARABIC LIGATURE AIN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0639 0649;;;;N;;;;; FD14;ARABIC LIGATURE AIN WITH YEH FINAL FORM;Lo;0;AL; 0639 064A;;;;N;;;;; FD15;ARABIC LIGATURE GHAIN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 063A 0649;;;;N;;;;; FD16;ARABIC LIGATURE GHAIN WITH YEH FINAL FORM;Lo;0;AL; 063A 064A;;;;N;;;;; FD17;ARABIC LIGATURE SEEN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0633 0649;;;;N;;;;; FD18;ARABIC LIGATURE SEEN WITH YEH FINAL FORM;Lo;0;AL; 0633 064A;;;;N;;;;; FD19;ARABIC LIGATURE SHEEN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0634 0649;;;;N;;;;; FD1A;ARABIC LIGATURE SHEEN WITH YEH FINAL FORM;Lo;0;AL; 0634 064A;;;;N;;;;; FD1B;ARABIC LIGATURE HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 062D 0649;;;;N;;;;; FD1C;ARABIC LIGATURE HAH WITH YEH FINAL FORM;Lo;0;AL; 062D 064A;;;;N;;;;; FD1D;ARABIC LIGATURE JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 062C 0649;;;;N;;;;; FD1E;ARABIC LIGATURE JEEM WITH YEH FINAL FORM;Lo;0;AL; 062C 064A;;;;N;;;;; FD1F;ARABIC LIGATURE KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 062E 0649;;;;N;;;;; FD20;ARABIC LIGATURE KHAH WITH YEH FINAL FORM;Lo;0;AL; 062E 064A;;;;N;;;;; FD21;ARABIC LIGATURE SAD WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0635 0649;;;;N;;;;; FD22;ARABIC LIGATURE SAD WITH YEH FINAL FORM;Lo;0;AL; 0635 064A;;;;N;;;;; FD23;ARABIC LIGATURE DAD WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0636 0649;;;;N;;;;; FD24;ARABIC LIGATURE DAD WITH YEH FINAL FORM;Lo;0;AL; 0636 064A;;;;N;;;;; FD25;ARABIC LIGATURE SHEEN WITH JEEM FINAL FORM;Lo;0;AL; 0634 062C;;;;N;;;;; FD26;ARABIC LIGATURE SHEEN WITH HAH FINAL FORM;Lo;0;AL; 0634 062D;;;;N;;;;; FD27;ARABIC LIGATURE SHEEN WITH KHAH FINAL FORM;Lo;0;AL; 0634 062E;;;;N;;;;; FD28;ARABIC LIGATURE SHEEN WITH MEEM FINAL FORM;Lo;0;AL; 0634 0645;;;;N;;;;; FD29;ARABIC LIGATURE SHEEN WITH REH FINAL FORM;Lo;0;AL; 0634 0631;;;;N;;;;; FD2A;ARABIC LIGATURE SEEN WITH REH FINAL FORM;Lo;0;AL; 0633 0631;;;;N;;;;; FD2B;ARABIC LIGATURE SAD WITH REH FINAL FORM;Lo;0;AL; 0635 0631;;;;N;;;;; FD2C;ARABIC LIGATURE DAD WITH REH FINAL FORM;Lo;0;AL; 0636 0631;;;;N;;;;; FD2D;ARABIC LIGATURE SHEEN WITH JEEM INITIAL FORM;Lo;0;AL; 0634 062C;;;;N;;;;; FD2E;ARABIC LIGATURE SHEEN WITH HAH INITIAL FORM;Lo;0;AL; 0634 062D;;;;N;;;;; FD2F;ARABIC LIGATURE SHEEN WITH KHAH INITIAL FORM;Lo;0;AL; 0634 062E;;;;N;;;;; FD30;ARABIC LIGATURE SHEEN WITH MEEM INITIAL FORM;Lo;0;AL; 0634 0645;;;;N;;;;; FD31;ARABIC LIGATURE SEEN WITH HEH INITIAL FORM;Lo;0;AL; 0633 0647;;;;N;;;;; FD32;ARABIC LIGATURE SHEEN WITH HEH INITIAL FORM;Lo;0;AL; 0634 0647;;;;N;;;;; FD33;ARABIC LIGATURE TAH WITH MEEM INITIAL FORM;Lo;0;AL; 0637 0645;;;;N;;;;; FD34;ARABIC LIGATURE SEEN WITH JEEM MEDIAL FORM;Lo;0;AL; 0633 062C;;;;N;;;;; FD35;ARABIC LIGATURE SEEN WITH HAH MEDIAL FORM;Lo;0;AL; 0633 062D;;;;N;;;;; FD36;ARABIC LIGATURE SEEN WITH KHAH MEDIAL FORM;Lo;0;AL; 0633 062E;;;;N;;;;; FD37;ARABIC LIGATURE SHEEN WITH JEEM MEDIAL FORM;Lo;0;AL; 0634 062C;;;;N;;;;; FD38;ARABIC LIGATURE SHEEN WITH HAH MEDIAL FORM;Lo;0;AL; 0634 062D;;;;N;;;;; FD39;ARABIC LIGATURE SHEEN WITH KHAH MEDIAL FORM;Lo;0;AL; 0634 062E;;;;N;;;;; FD3A;ARABIC LIGATURE TAH WITH MEEM MEDIAL FORM;Lo;0;AL; 0637 0645;;;;N;;;;; FD3B;ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM;Lo;0;AL; 0638 0645;;;;N;;;;; FD3C;ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM;Lo;0;AL; 0627 064B;;;;N;;;;; FD3D;ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM;Lo;0;AL; 0627 064B;;;;N;;;;; FD3E;ORNATE LEFT PARENTHESIS;Pe;0;ON;;;;;N;;;;; FD3F;ORNATE RIGHT PARENTHESIS;Ps;0;ON;;;;;N;;;;; FD40;ARABIC LIGATURE RAHIMAHU ALLAAH;So;0;ON;;;;;N;;;;; FD41;ARABIC LIGATURE RADI ALLAAHU ANH;So;0;ON;;;;;N;;;;; FD42;ARABIC LIGATURE RADI ALLAAHU ANHAA;So;0;ON;;;;;N;;;;; FD43;ARABIC LIGATURE RADI ALLAAHU ANHUM;So;0;ON;;;;;N;;;;; FD44;ARABIC LIGATURE RADI ALLAAHU ANHUMAA;So;0;ON;;;;;N;;;;; FD45;ARABIC LIGATURE RADI ALLAAHU ANHUNNA;So;0;ON;;;;;N;;;;; FD46;ARABIC LIGATURE SALLALLAAHU ALAYHI WA-AALIH;So;0;ON;;;;;N;;;;; FD47;ARABIC LIGATURE ALAYHI AS-SALAAM;So;0;ON;;;;;N;;;;; FD48;ARABIC LIGATURE ALAYHIM AS-SALAAM;So;0;ON;;;;;N;;;;; FD49;ARABIC LIGATURE ALAYHIMAA AS-SALAAM;So;0;ON;;;;;N;;;;; FD4A;ARABIC LIGATURE ALAYHI AS-SALAATU WAS-SALAAM;So;0;ON;;;;;N;;;;; FD4B;ARABIC LIGATURE QUDDISA SIRRAH;So;0;ON;;;;;N;;;;; FD4C;ARABIC LIGATURE SALLALLAHU ALAYHI WAAALIHEE WA-SALLAM;So;0;ON;;;;;N;;;;; FD4D;ARABIC LIGATURE ALAYHAA AS-SALAAM;So;0;ON;;;;;N;;;;; FD4E;ARABIC LIGATURE TABAARAKA WA-TAAALAA;So;0;ON;;;;;N;;;;; FD4F;ARABIC LIGATURE RAHIMAHUM ALLAAH;So;0;ON;;;;;N;;;;; FD50;ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL; 062A 062C 0645;;;;N;;;;; FD51;ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM;Lo;0;AL; 062A 062D 062C;;;;N;;;;; FD52;ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL; 062A 062D 062C;;;;N;;;;; FD53;ARABIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL; 062A 062D 0645;;;;N;;;;; FD54;ARABIC LIGATURE TEH WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL; 062A 062E 0645;;;;N;;;;; FD55;ARABIC LIGATURE TEH WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL; 062A 0645 062C;;;;N;;;;; FD56;ARABIC LIGATURE TEH WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL; 062A 0645 062D;;;;N;;;;; FD57;ARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FORM;Lo;0;AL; 062A 0645 062E;;;;N;;;;; FD58;ARABIC LIGATURE JEEM WITH MEEM WITH HAH FINAL FORM;Lo;0;AL; 062C 0645 062D;;;;N;;;;; FD59;ARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL; 062C 0645 062D;;;;N;;;;; FD5A;ARABIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 062D 0645 064A;;;;N;;;;; FD5B;ARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 062D 0645 0649;;;;N;;;;; FD5C;ARABIC LIGATURE SEEN WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL; 0633 062D 062C;;;;N;;;;; FD5D;ARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL; 0633 062C 062D;;;;N;;;;; FD5E;ARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0633 062C 0649;;;;N;;;;; FD5F;ARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORM;Lo;0;AL; 0633 0645 062D;;;;N;;;;; FD60;ARABIC LIGATURE SEEN WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL; 0633 0645 062D;;;;N;;;;; FD61;ARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL; 0633 0645 062C;;;;N;;;;; FD62;ARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL; 0633 0645 0645;;;;N;;;;; FD63;ARABIC LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0633 0645 0645;;;;N;;;;; FD64;ARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORM;Lo;0;AL; 0635 062D 062D;;;;N;;;;; FD65;ARABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORM;Lo;0;AL; 0635 062D 062D;;;;N;;;;; FD66;ARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL; 0635 0645 0645;;;;N;;;;; FD67;ARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL FORM;Lo;0;AL; 0634 062D 0645;;;;N;;;;; FD68;ARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL; 0634 062D 0645;;;;N;;;;; FD69;ARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORM;Lo;0;AL; 0634 062C 064A;;;;N;;;;; FD6A;ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH FINAL FORM;Lo;0;AL; 0634 0645 062E;;;;N;;;;; FD6B;ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORM;Lo;0;AL; 0634 0645 062E;;;;N;;;;; FD6C;ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL; 0634 0645 0645;;;;N;;;;; FD6D;ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0634 0645 0645;;;;N;;;;; FD6E;ARABIC LIGATURE DAD WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0636 062D 0649;;;;N;;;;; FD6F;ARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL; 0636 062E 0645;;;;N;;;;; FD70;ARABIC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL; 0636 062E 0645;;;;N;;;;; FD71;ARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORM;Lo;0;AL; 0637 0645 062D;;;;N;;;;; FD72;ARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL; 0637 0645 062D;;;;N;;;;; FD73;ARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0637 0645 0645;;;;N;;;;; FD74;ARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 0637 0645 064A;;;;N;;;;; FD75;ARABIC LIGATURE AIN WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL; 0639 062C 0645;;;;N;;;;; FD76;ARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL; 0639 0645 0645;;;;N;;;;; FD77;ARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0639 0645 0645;;;;N;;;;; FD78;ARABIC LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0639 0645 0649;;;;N;;;;; FD79;ARABIC LIGATURE GHAIN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL; 063A 0645 0645;;;;N;;;;; FD7A;ARABIC LIGATURE GHAIN WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 063A 0645 064A;;;;N;;;;; FD7B;ARABIC LIGATURE GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 063A 0645 0649;;;;N;;;;; FD7C;ARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL; 0641 062E 0645;;;;N;;;;; FD7D;ARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL; 0641 062E 0645;;;;N;;;;; FD7E;ARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORM;Lo;0;AL; 0642 0645 062D;;;;N;;;;; FD7F;ARABIC LIGATURE QAF WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL; 0642 0645 0645;;;;N;;;;; FD80;ARABIC LIGATURE LAM WITH HAH WITH MEEM FINAL FORM;Lo;0;AL; 0644 062D 0645;;;;N;;;;; FD81;ARABIC LIGATURE LAM WITH HAH WITH YEH FINAL FORM;Lo;0;AL; 0644 062D 064A;;;;N;;;;; FD82;ARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0644 062D 0649;;;;N;;;;; FD83;ARABIC LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORM;Lo;0;AL; 0644 062C 062C;;;;N;;;;; FD84;ARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORM;Lo;0;AL; 0644 062C 062C;;;;N;;;;; FD85;ARABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL; 0644 062E 0645;;;;N;;;;; FD86;ARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL; 0644 062E 0645;;;;N;;;;; FD87;ARABIC LIGATURE LAM WITH MEEM WITH HAH FINAL FORM;Lo;0;AL; 0644 0645 062D;;;;N;;;;; FD88;ARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL; 0644 0645 062D;;;;N;;;;; FD89;ARABIC LIGATURE MEEM WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL; 0645 062D 062C;;;;N;;;;; FD8A;ARABIC LIGATURE MEEM WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL; 0645 062D 0645;;;;N;;;;; FD8B;ARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORM;Lo;0;AL; 0645 062D 064A;;;;N;;;;; FD8C;ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL; 0645 062C 062D;;;;N;;;;; FD8D;ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0645 062C 0645;;;;N;;;;; FD8E;ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM;Lo;0;AL; 0645 062E 062C;;;;N;;;;; FD8F;ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL; 0645 062E 0645;;;;N;;;;; FD92;ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM;Lo;0;AL; 0645 062C 062E;;;;N;;;;; FD93;ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL; 0647 0645 062C;;;;N;;;;; FD94;ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0647 0645 0645;;;;N;;;;; FD95;ARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL; 0646 062D 0645;;;;N;;;;; FD96;ARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0646 062D 0649;;;;N;;;;; FD97;ARABIC LIGATURE NOON WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL; 0646 062C 0645;;;;N;;;;; FD98;ARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0646 062C 0645;;;;N;;;;; FD99;ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0646 062C 0649;;;;N;;;;; FD9A;ARABIC LIGATURE NOON WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 0646 0645 064A;;;;N;;;;; FD9B;ARABIC LIGATURE NOON WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0646 0645 0649;;;;N;;;;; FD9C;ARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL; 064A 0645 0645;;;;N;;;;; FD9D;ARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL; 064A 0645 0645;;;;N;;;;; FD9E;ARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORM;Lo;0;AL; 0628 062E 064A;;;;N;;;;; FD9F;ARABIC LIGATURE TEH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL; 062A 062C 064A;;;;N;;;;; FDA0;ARABIC LIGATURE TEH WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 062A 062C 0649;;;;N;;;;; FDA1;ARABIC LIGATURE TEH WITH KHAH WITH YEH FINAL FORM;Lo;0;AL; 062A 062E 064A;;;;N;;;;; FDA2;ARABIC LIGATURE TEH WITH KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 062A 062E 0649;;;;N;;;;; FDA3;ARABIC LIGATURE TEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 062A 0645 064A;;;;N;;;;; FDA4;ARABIC LIGATURE TEH WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 062A 0645 0649;;;;N;;;;; FDA5;ARABIC LIGATURE JEEM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 062C 0645 064A;;;;N;;;;; FDA6;ARABIC LIGATURE JEEM WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 062C 062D 0649;;;;N;;;;; FDA7;ARABIC LIGATURE JEEM WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 062C 0645 0649;;;;N;;;;; FDA8;ARABIC LIGATURE SEEN WITH KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0633 062E 0649;;;;N;;;;; FDA9;ARABIC LIGATURE SAD WITH HAH WITH YEH FINAL FORM;Lo;0;AL; 0635 062D 064A;;;;N;;;;; FDAA;ARABIC LIGATURE SHEEN WITH HAH WITH YEH FINAL FORM;Lo;0;AL; 0634 062D 064A;;;;N;;;;; FDAB;ARABIC LIGATURE DAD WITH HAH WITH YEH FINAL FORM;Lo;0;AL; 0636 062D 064A;;;;N;;;;; FDAC;ARABIC LIGATURE LAM WITH JEEM WITH YEH FINAL FORM;Lo;0;AL; 0644 062C 064A;;;;N;;;;; FDAD;ARABIC LIGATURE LAM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 0644 0645 064A;;;;N;;;;; FDAE;ARABIC LIGATURE YEH WITH HAH WITH YEH FINAL FORM;Lo;0;AL; 064A 062D 064A;;;;N;;;;; FDAF;ARABIC LIGATURE YEH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL; 064A 062C 064A;;;;N;;;;; FDB0;ARABIC LIGATURE YEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 064A 0645 064A;;;;N;;;;; FDB1;ARABIC LIGATURE MEEM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 0645 0645 064A;;;;N;;;;; FDB2;ARABIC LIGATURE QAF WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 0642 0645 064A;;;;N;;;;; FDB3;ARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORM;Lo;0;AL; 0646 062D 064A;;;;N;;;;; FDB4;ARABIC LIGATURE QAF WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL; 0642 0645 062D;;;;N;;;;; FDB5;ARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL; 0644 062D 0645;;;;N;;;;; FDB6;ARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 0639 0645 064A;;;;N;;;;; FDB7;ARABIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 0643 0645 064A;;;;N;;;;; FDB8;ARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL; 0646 062C 062D;;;;N;;;;; FDB9;ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORM;Lo;0;AL; 0645 062E 064A;;;;N;;;;; FDBA;ARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0644 062C 0645;;;;N;;;;; FDBB;ARABIC LIGATURE KAF WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL; 0643 0645 0645;;;;N;;;;; FDBC;ARABIC LIGATURE LAM WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL; 0644 062C 0645;;;;N;;;;; FDBD;ARABIC LIGATURE NOON WITH JEEM WITH HAH FINAL FORM;Lo;0;AL; 0646 062C 062D;;;;N;;;;; FDBE;ARABIC LIGATURE JEEM WITH HAH WITH YEH FINAL FORM;Lo;0;AL; 062C 062D 064A;;;;N;;;;; FDBF;ARABIC LIGATURE HAH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL; 062D 062C 064A;;;;N;;;;; FDC0;ARABIC LIGATURE MEEM WITH JEEM WITH YEH FINAL FORM;Lo;0;AL; 0645 062C 064A;;;;N;;;;; FDC1;ARABIC LIGATURE FEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 0641 0645 064A;;;;N;;;;; FDC2;ARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORM;Lo;0;AL; 0628 062D 064A;;;;N;;;;; FDC3;ARABIC LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0643 0645 0645;;;;N;;;;; FDC4;ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0639 062C 0645;;;;N;;;;; FDC5;ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0635 0645 0645;;;;N;;;;; FDC6;ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM;Lo;0;AL; 0633 062E 064A;;;;N;;;;; FDC7;ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM;Lo;0;AL; 0646 062C 064A;;;;N;;;;; FDCF;ARABIC LIGATURE SALAAMUHU ALAYNAA;So;0;ON;;;;;N;;;;; FDF0;ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;AL; 0635 0644 06D2;;;;N;;;;; FDF1;ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;AL; 0642 0644 06D2;;;;N;;;;; FDF2;ARABIC LIGATURE ALLAH ISOLATED FORM;Lo;0;AL; 0627 0644 0644 0647;;;;N;;;;; FDF3;ARABIC LIGATURE AKBAR ISOLATED FORM;Lo;0;AL; 0627 0643 0628 0631;;;;N;;;;; FDF4;ARABIC LIGATURE MOHAMMAD ISOLATED FORM;Lo;0;AL; 0645 062D 0645 062F;;;;N;;;;; FDF5;ARABIC LIGATURE SALAM ISOLATED FORM;Lo;0;AL; 0635 0644 0639 0645;;;;N;;;;; FDF6;ARABIC LIGATURE RASOUL ISOLATED FORM;Lo;0;AL; 0631 0633 0648 0644;;;;N;;;;; FDF7;ARABIC LIGATURE ALAYHE ISOLATED FORM;Lo;0;AL; 0639 0644 064A 0647;;;;N;;;;; FDF8;ARABIC LIGATURE WASALLAM ISOLATED FORM;Lo;0;AL; 0648 0633 0644 0645;;;;N;;;;; FDF9;ARABIC LIGATURE SALLA ISOLATED FORM;Lo;0;AL; 0635 0644 0649;;;;N;;;;; FDFA;ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM;Lo;0;AL; 0635 0644 0649 0020 0627 0644 0644 0647 0020 0639 0644 064A 0647 0020 0648 0633 0644 0645;;;;N;ARABIC LETTER SALLALLAHOU ALAYHE WASALLAM;;;; FDFB;ARABIC LIGATURE JALLAJALALOUHOU;Lo;0;AL; 062C 0644 0020 062C 0644 0627 0644 0647;;;;N;ARABIC LETTER JALLAJALALOUHOU;;;; FDFC;RIAL SIGN;Sc;0;AL; 0631 06CC 0627 0644;;;;N;;;;; FDFD;ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM;So;0;ON;;;;;N;;;;; FDFE;ARABIC LIGATURE SUBHAANAHU WA TAAALAA;So;0;ON;;;;;N;;;;; FDFF;ARABIC LIGATURE AZZA WA JALL;So;0;ON;;;;;N;;;;; FE00;VARIATION SELECTOR-1;Mn;0;NSM;;;;;N;;;;; FE01;VARIATION SELECTOR-2;Mn;0;NSM;;;;;N;;;;; FE02;VARIATION SELECTOR-3;Mn;0;NSM;;;;;N;;;;; FE03;VARIATION SELECTOR-4;Mn;0;NSM;;;;;N;;;;; FE04;VARIATION SELECTOR-5;Mn;0;NSM;;;;;N;;;;; FE05;VARIATION SELECTOR-6;Mn;0;NSM;;;;;N;;;;; FE06;VARIATION SELECTOR-7;Mn;0;NSM;;;;;N;;;;; FE07;VARIATION SELECTOR-8;Mn;0;NSM;;;;;N;;;;; FE08;VARIATION SELECTOR-9;Mn;0;NSM;;;;;N;;;;; FE09;VARIATION SELECTOR-10;Mn;0;NSM;;;;;N;;;;; FE0A;VARIATION SELECTOR-11;Mn;0;NSM;;;;;N;;;;; FE0B;VARIATION SELECTOR-12;Mn;0;NSM;;;;;N;;;;; FE0C;VARIATION SELECTOR-13;Mn;0;NSM;;;;;N;;;;; FE0D;VARIATION SELECTOR-14;Mn;0;NSM;;;;;N;;;;; FE0E;VARIATION SELECTOR-15;Mn;0;NSM;;;;;N;;;;; FE0F;VARIATION SELECTOR-16;Mn;0;NSM;;;;;N;;;;; FE10;PRESENTATION FORM FOR VERTICAL COMMA;Po;0;ON; 002C;;;;N;;;;; FE11;PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC COMMA;Po;0;ON; 3001;;;;N;;;;; FE12;PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC FULL STOP;Po;0;ON; 3002;;;;N;;;;; FE13;PRESENTATION FORM FOR VERTICAL COLON;Po;0;ON; 003A;;;;N;;;;; FE14;PRESENTATION FORM FOR VERTICAL SEMICOLON;Po;0;ON; 003B;;;;N;;;;; FE15;PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK;Po;0;ON; 0021;;;;N;;;;; FE16;PRESENTATION FORM FOR VERTICAL QUESTION MARK;Po;0;ON; 003F;;;;N;;;;; FE17;PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET;Ps;0;ON; 3016;;;;N;;;;; FE18;PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET;Pe;0;ON; 3017;;;;N;;;;; FE19;PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS;Po;0;ON; 2026;;;;N;;;;; FE20;COMBINING LIGATURE LEFT HALF;Mn;230;NSM;;;;;N;;;;; FE21;COMBINING LIGATURE RIGHT HALF;Mn;230;NSM;;;;;N;;;;; FE22;COMBINING DOUBLE TILDE LEFT HALF;Mn;230;NSM;;;;;N;;;;; FE23;COMBINING DOUBLE TILDE RIGHT HALF;Mn;230;NSM;;;;;N;;;;; FE24;COMBINING MACRON LEFT HALF;Mn;230;NSM;;;;;N;;;;; FE25;COMBINING MACRON RIGHT HALF;Mn;230;NSM;;;;;N;;;;; FE26;COMBINING CONJOINING MACRON;Mn;230;NSM;;;;;N;;;;; FE27;COMBINING LIGATURE LEFT HALF BELOW;Mn;220;NSM;;;;;N;;;;; FE28;COMBINING LIGATURE RIGHT HALF BELOW;Mn;220;NSM;;;;;N;;;;; FE29;COMBINING TILDE LEFT HALF BELOW;Mn;220;NSM;;;;;N;;;;; FE2A;COMBINING TILDE RIGHT HALF BELOW;Mn;220;NSM;;;;;N;;;;; FE2B;COMBINING MACRON LEFT HALF BELOW;Mn;220;NSM;;;;;N;;;;; FE2C;COMBINING MACRON RIGHT HALF BELOW;Mn;220;NSM;;;;;N;;;;; FE2D;COMBINING CONJOINING MACRON BELOW;Mn;220;NSM;;;;;N;;;;; FE2E;COMBINING CYRILLIC TITLO LEFT HALF;Mn;230;NSM;;;;;N;;;;; FE2F;COMBINING CYRILLIC TITLO RIGHT HALF;Mn;230;NSM;;;;;N;;;;; FE30;PRESENTATION FORM FOR VERTICAL TWO DOT LEADER;Po;0;ON; 2025;;;;N;GLYPH FOR VERTICAL TWO DOT LEADER;;;; FE31;PRESENTATION FORM FOR VERTICAL EM DASH;Pd;0;ON; 2014;;;;N;GLYPH FOR VERTICAL EM DASH;;;; FE32;PRESENTATION FORM FOR VERTICAL EN DASH;Pd;0;ON; 2013;;;;N;GLYPH FOR VERTICAL EN DASH;;;; FE33;PRESENTATION FORM FOR VERTICAL LOW LINE;Pc;0;ON; 005F;;;;N;GLYPH FOR VERTICAL SPACING UNDERSCORE;;;; FE34;PRESENTATION FORM FOR VERTICAL WAVY LOW LINE;Pc;0;ON; 005F;;;;N;GLYPH FOR VERTICAL SPACING WAVY UNDERSCORE;;;; FE35;PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS;Ps;0;ON; 0028;;;;N;GLYPH FOR VERTICAL OPENING PARENTHESIS;;;; FE36;PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS;Pe;0;ON; 0029;;;;N;GLYPH FOR VERTICAL CLOSING PARENTHESIS;;;; FE37;PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET;Ps;0;ON; 007B;;;;N;GLYPH FOR VERTICAL OPENING CURLY BRACKET;;;; FE38;PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET;Pe;0;ON; 007D;;;;N;GLYPH FOR VERTICAL CLOSING CURLY BRACKET;;;; FE39;PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET;Ps;0;ON; 3014;;;;N;GLYPH FOR VERTICAL OPENING TORTOISE SHELL BRACKET;;;; FE3A;PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON; 3015;;;;N;GLYPH FOR VERTICAL CLOSING TORTOISE SHELL BRACKET;;;; FE3B;PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET;Ps;0;ON; 3010;;;;N;GLYPH FOR VERTICAL OPENING BLACK LENTICULAR BRACKET;;;; FE3C;PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET;Pe;0;ON; 3011;;;;N;GLYPH FOR VERTICAL CLOSING BLACK LENTICULAR BRACKET;;;; FE3D;PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET;Ps;0;ON; 300A;;;;N;GLYPH FOR VERTICAL OPENING DOUBLE ANGLE BRACKET;;;; FE3E;PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON; 300B;;;;N;GLYPH FOR VERTICAL CLOSING DOUBLE ANGLE BRACKET;;;; FE3F;PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET;Ps;0;ON; 3008;;;;N;GLYPH FOR VERTICAL OPENING ANGLE BRACKET;;;; FE40;PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET;Pe;0;ON; 3009;;;;N;GLYPH FOR VERTICAL CLOSING ANGLE BRACKET;;;; FE41;PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET;Ps;0;ON; 300C;;;;N;GLYPH FOR VERTICAL OPENING CORNER BRACKET;;;; FE42;PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET;Pe;0;ON; 300D;;;;N;GLYPH FOR VERTICAL CLOSING CORNER BRACKET;;;; FE43;PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET;Ps;0;ON; 300E;;;;N;GLYPH FOR VERTICAL OPENING WHITE CORNER BRACKET;;;; FE44;PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET;Pe;0;ON; 300F;;;;N;GLYPH FOR VERTICAL CLOSING WHITE CORNER BRACKET;;;; FE45;SESAME DOT;Po;0;ON;;;;;N;;;;; FE46;WHITE SESAME DOT;Po;0;ON;;;;;N;;;;; FE47;PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET;Ps;0;ON; 005B;;;;N;;;;; FE48;PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET;Pe;0;ON; 005D;;;;N;;;;; FE49;DASHED OVERLINE;Po;0;ON; 203E;;;;N;SPACING DASHED OVERSCORE;;;; FE4A;CENTRELINE OVERLINE;Po;0;ON; 203E;;;;N;SPACING CENTERLINE OVERSCORE;;;; FE4B;WAVY OVERLINE;Po;0;ON; 203E;;;;N;SPACING WAVY OVERSCORE;;;; FE4C;DOUBLE WAVY OVERLINE;Po;0;ON; 203E;;;;N;SPACING DOUBLE WAVY OVERSCORE;;;; FE4D;DASHED LOW LINE;Pc;0;ON; 005F;;;;N;SPACING DASHED UNDERSCORE;;;; FE4E;CENTRELINE LOW LINE;Pc;0;ON; 005F;;;;N;SPACING CENTERLINE UNDERSCORE;;;; FE4F;WAVY LOW LINE;Pc;0;ON; 005F;;;;N;SPACING WAVY UNDERSCORE;;;; FE50;SMALL COMMA;Po;0;CS; 002C;;;;N;;;;; FE51;SMALL IDEOGRAPHIC COMMA;Po;0;ON; 3001;;;;N;;;;; FE52;SMALL FULL STOP;Po;0;CS; 002E;;;;N;SMALL PERIOD;;;; FE54;SMALL SEMICOLON;Po;0;ON; 003B;;;;N;;;;; FE55;SMALL COLON;Po;0;CS; 003A;;;;N;;;;; FE56;SMALL QUESTION MARK;Po;0;ON; 003F;;;;N;;;;; FE57;SMALL EXCLAMATION MARK;Po;0;ON; 0021;;;;N;;;;; FE58;SMALL EM DASH;Pd;0;ON; 2014;;;;N;;;;; FE59;SMALL LEFT PARENTHESIS;Ps;0;ON; 0028;;;;Y;SMALL OPENING PARENTHESIS;;;; FE5A;SMALL RIGHT PARENTHESIS;Pe;0;ON; 0029;;;;Y;SMALL CLOSING PARENTHESIS;;;; FE5B;SMALL LEFT CURLY BRACKET;Ps;0;ON; 007B;;;;Y;SMALL OPENING CURLY BRACKET;;;; FE5C;SMALL RIGHT CURLY BRACKET;Pe;0;ON; 007D;;;;Y;SMALL CLOSING CURLY BRACKET;;;; FE5D;SMALL LEFT TORTOISE SHELL BRACKET;Ps;0;ON; 3014;;;;Y;SMALL OPENING TORTOISE SHELL BRACKET;;;; FE5E;SMALL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON; 3015;;;;Y;SMALL CLOSING TORTOISE SHELL BRACKET;;;; FE5F;SMALL NUMBER SIGN;Po;0;ET; 0023;;;;N;;;;; FE60;SMALL AMPERSAND;Po;0;ON; 0026;;;;N;;;;; FE61;SMALL ASTERISK;Po;0;ON; 002A;;;;N;;;;; FE62;SMALL PLUS SIGN;Sm;0;ES; 002B;;;;N;;;;; FE63;SMALL HYPHEN-MINUS;Pd;0;ES; 002D;;;;N;;;;; FE64;SMALL LESS-THAN SIGN;Sm;0;ON; 003C;;;;Y;;;;; FE65;SMALL GREATER-THAN SIGN;Sm;0;ON; 003E;;;;Y;;;;; FE66;SMALL EQUALS SIGN;Sm;0;ON; 003D;;;;N;;;;; FE68;SMALL REVERSE SOLIDUS;Po;0;ON; 005C;;;;N;SMALL BACKSLASH;;;; FE69;SMALL DOLLAR SIGN;Sc;0;ET; 0024;;;;N;;;;; FE6A;SMALL PERCENT SIGN;Po;0;ET; 0025;;;;N;;;;; FE6B;SMALL COMMERCIAL AT;Po;0;ON; 0040;;;;N;;;;; FE70;ARABIC FATHATAN ISOLATED FORM;Lo;0;AL; 0020 064B;;;;N;ARABIC SPACING FATHATAN;;;; FE71;ARABIC TATWEEL WITH FATHATAN ABOVE;Lo;0;AL; 0640 064B;;;;N;ARABIC FATHATAN ON TATWEEL;;;; FE72;ARABIC DAMMATAN ISOLATED FORM;Lo;0;AL; 0020 064C;;;;N;ARABIC SPACING DAMMATAN;;;; FE73;ARABIC TAIL FRAGMENT;Lo;0;AL;;;;;N;;;;; FE74;ARABIC KASRATAN ISOLATED FORM;Lo;0;AL; 0020 064D;;;;N;ARABIC SPACING KASRATAN;;;; FE76;ARABIC FATHA ISOLATED FORM;Lo;0;AL; 0020 064E;;;;N;ARABIC SPACING FATHAH;;;; FE77;ARABIC FATHA MEDIAL FORM;Lo;0;AL; 0640 064E;;;;N;ARABIC FATHAH ON TATWEEL;;;; FE78;ARABIC DAMMA ISOLATED FORM;Lo;0;AL; 0020 064F;;;;N;ARABIC SPACING DAMMAH;;;; FE79;ARABIC DAMMA MEDIAL FORM;Lo;0;AL; 0640 064F;;;;N;ARABIC DAMMAH ON TATWEEL;;;; FE7A;ARABIC KASRA ISOLATED FORM;Lo;0;AL; 0020 0650;;;;N;ARABIC SPACING KASRAH;;;; FE7B;ARABIC KASRA MEDIAL FORM;Lo;0;AL; 0640 0650;;;;N;ARABIC KASRAH ON TATWEEL;;;; FE7C;ARABIC SHADDA ISOLATED FORM;Lo;0;AL; 0020 0651;;;;N;ARABIC SPACING SHADDAH;;;; FE7D;ARABIC SHADDA MEDIAL FORM;Lo;0;AL; 0640 0651;;;;N;ARABIC SHADDAH ON TATWEEL;;;; FE7E;ARABIC SUKUN ISOLATED FORM;Lo;0;AL; 0020 0652;;;;N;ARABIC SPACING SUKUN;;;; FE7F;ARABIC SUKUN MEDIAL FORM;Lo;0;AL; 0640 0652;;;;N;ARABIC SUKUN ON TATWEEL;;;; FE80;ARABIC LETTER HAMZA ISOLATED FORM;Lo;0;AL; 0621;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH;;;; FE81;ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM;Lo;0;AL; 0622;;;;N;GLYPH FOR ISOLATE ARABIC MADDAH ON ALEF;;;; FE82;ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM;Lo;0;AL; 0622;;;;N;GLYPH FOR FINAL ARABIC MADDAH ON ALEF;;;; FE83;ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL; 0623;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON ALEF;;;; FE84;ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM;Lo;0;AL; 0623;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON ALEF;;;; FE85;ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL; 0624;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON WAW;;;; FE86;ARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORM;Lo;0;AL; 0624;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON WAW;;;; FE87;ARABIC LETTER ALEF WITH HAMZA BELOW ISOLATED FORM;Lo;0;AL; 0625;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH UNDER ALEF;;;; FE88;ARABIC LETTER ALEF WITH HAMZA BELOW FINAL FORM;Lo;0;AL; 0625;;;;N;GLYPH FOR FINAL ARABIC HAMZAH UNDER ALEF;;;; FE89;ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL; 0626;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON YA;;;; FE8A;ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM;Lo;0;AL; 0626;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON YA;;;; FE8B;ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM;Lo;0;AL; 0626;;;;N;GLYPH FOR INITIAL ARABIC HAMZAH ON YA;;;; FE8C;ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM;Lo;0;AL; 0626;;;;N;GLYPH FOR MEDIAL ARABIC HAMZAH ON YA;;;; FE8D;ARABIC LETTER ALEF ISOLATED FORM;Lo;0;AL; 0627;;;;N;GLYPH FOR ISOLATE ARABIC ALEF;;;; FE8E;ARABIC LETTER ALEF FINAL FORM;Lo;0;AL; 0627;;;;N;GLYPH FOR FINAL ARABIC ALEF;;;; FE8F;ARABIC LETTER BEH ISOLATED FORM;Lo;0;AL; 0628;;;;N;GLYPH FOR ISOLATE ARABIC BAA;;;; FE90;ARABIC LETTER BEH FINAL FORM;Lo;0;AL; 0628;;;;N;GLYPH FOR FINAL ARABIC BAA;;;; FE91;ARABIC LETTER BEH INITIAL FORM;Lo;0;AL; 0628;;;;N;GLYPH FOR INITIAL ARABIC BAA;;;; FE92;ARABIC LETTER BEH MEDIAL FORM;Lo;0;AL; 0628;;;;N;GLYPH FOR MEDIAL ARABIC BAA;;;; FE93;ARABIC LETTER TEH MARBUTA ISOLATED FORM;Lo;0;AL; 0629;;;;N;GLYPH FOR ISOLATE ARABIC TAA MARBUTAH;;;; FE94;ARABIC LETTER TEH MARBUTA FINAL FORM;Lo;0;AL; 0629;;;;N;GLYPH FOR FINAL ARABIC TAA MARBUTAH;;;; FE95;ARABIC LETTER TEH ISOLATED FORM;Lo;0;AL; 062A;;;;N;GLYPH FOR ISOLATE ARABIC TAA;;;; FE96;ARABIC LETTER TEH FINAL FORM;Lo;0;AL; 062A;;;;N;GLYPH FOR FINAL ARABIC TAA;;;; FE97;ARABIC LETTER TEH INITIAL FORM;Lo;0;AL; 062A;;;;N;GLYPH FOR INITIAL ARABIC TAA;;;; FE98;ARABIC LETTER TEH MEDIAL FORM;Lo;0;AL; 062A;;;;N;GLYPH FOR MEDIAL ARABIC TAA;;;; FE99;ARABIC LETTER THEH ISOLATED FORM;Lo;0;AL; 062B;;;;N;GLYPH FOR ISOLATE ARABIC THAA;;;; FE9A;ARABIC LETTER THEH FINAL FORM;Lo;0;AL; 062B;;;;N;GLYPH FOR FINAL ARABIC THAA;;;; FE9B;ARABIC LETTER THEH INITIAL FORM;Lo;0;AL; 062B;;;;N;GLYPH FOR INITIAL ARABIC THAA;;;; FE9C;ARABIC LETTER THEH MEDIAL FORM;Lo;0;AL; 062B;;;;N;GLYPH FOR MEDIAL ARABIC THAA;;;; FE9D;ARABIC LETTER JEEM ISOLATED FORM;Lo;0;AL; 062C;;;;N;GLYPH FOR ISOLATE ARABIC JEEM;;;; FE9E;ARABIC LETTER JEEM FINAL FORM;Lo;0;AL; 062C;;;;N;GLYPH FOR FINAL ARABIC JEEM;;;; FE9F;ARABIC LETTER JEEM INITIAL FORM;Lo;0;AL; 062C;;;;N;GLYPH FOR INITIAL ARABIC JEEM;;;; FEA0;ARABIC LETTER JEEM MEDIAL FORM;Lo;0;AL; 062C;;;;N;GLYPH FOR MEDIAL ARABIC JEEM;;;; FEA1;ARABIC LETTER HAH ISOLATED FORM;Lo;0;AL; 062D;;;;N;GLYPH FOR ISOLATE ARABIC HAA;;;; FEA2;ARABIC LETTER HAH FINAL FORM;Lo;0;AL; 062D;;;;N;GLYPH FOR FINAL ARABIC HAA;;;; FEA3;ARABIC LETTER HAH INITIAL FORM;Lo;0;AL; 062D;;;;N;GLYPH FOR INITIAL ARABIC HAA;;;; FEA4;ARABIC LETTER HAH MEDIAL FORM;Lo;0;AL; 062D;;;;N;GLYPH FOR MEDIAL ARABIC HAA;;;; FEA5;ARABIC LETTER KHAH ISOLATED FORM;Lo;0;AL; 062E;;;;N;GLYPH FOR ISOLATE ARABIC KHAA;;;; FEA6;ARABIC LETTER KHAH FINAL FORM;Lo;0;AL; 062E;;;;N;GLYPH FOR FINAL ARABIC KHAA;;;; FEA7;ARABIC LETTER KHAH INITIAL FORM;Lo;0;AL; 062E;;;;N;GLYPH FOR INITIAL ARABIC KHAA;;;; FEA8;ARABIC LETTER KHAH MEDIAL FORM;Lo;0;AL; 062E;;;;N;GLYPH FOR MEDIAL ARABIC KHAA;;;; FEA9;ARABIC LETTER DAL ISOLATED FORM;Lo;0;AL; 062F;;;;N;GLYPH FOR ISOLATE ARABIC DAL;;;; FEAA;ARABIC LETTER DAL FINAL FORM;Lo;0;AL; 062F;;;;N;GLYPH FOR FINAL ARABIC DAL;;;; FEAB;ARABIC LETTER THAL ISOLATED FORM;Lo;0;AL; 0630;;;;N;GLYPH FOR ISOLATE ARABIC THAL;;;; FEAC;ARABIC LETTER THAL FINAL FORM;Lo;0;AL; 0630;;;;N;GLYPH FOR FINAL ARABIC THAL;;;; FEAD;ARABIC LETTER REH ISOLATED FORM;Lo;0;AL; 0631;;;;N;GLYPH FOR ISOLATE ARABIC RA;;;; FEAE;ARABIC LETTER REH FINAL FORM;Lo;0;AL; 0631;;;;N;GLYPH FOR FINAL ARABIC RA;;;; FEAF;ARABIC LETTER ZAIN ISOLATED FORM;Lo;0;AL; 0632;;;;N;GLYPH FOR ISOLATE ARABIC ZAIN;;;; FEB0;ARABIC LETTER ZAIN FINAL FORM;Lo;0;AL; 0632;;;;N;GLYPH FOR FINAL ARABIC ZAIN;;;; FEB1;ARABIC LETTER SEEN ISOLATED FORM;Lo;0;AL; 0633;;;;N;GLYPH FOR ISOLATE ARABIC SEEN;;;; FEB2;ARABIC LETTER SEEN FINAL FORM;Lo;0;AL; 0633;;;;N;GLYPH FOR FINAL ARABIC SEEN;;;; FEB3;ARABIC LETTER SEEN INITIAL FORM;Lo;0;AL; 0633;;;;N;GLYPH FOR INITIAL ARABIC SEEN;;;; FEB4;ARABIC LETTER SEEN MEDIAL FORM;Lo;0;AL; 0633;;;;N;GLYPH FOR MEDIAL ARABIC SEEN;;;; FEB5;ARABIC LETTER SHEEN ISOLATED FORM;Lo;0;AL; 0634;;;;N;GLYPH FOR ISOLATE ARABIC SHEEN;;;; FEB6;ARABIC LETTER SHEEN FINAL FORM;Lo;0;AL; 0634;;;;N;GLYPH FOR FINAL ARABIC SHEEN;;;; FEB7;ARABIC LETTER SHEEN INITIAL FORM;Lo;0;AL; 0634;;;;N;GLYPH FOR INITIAL ARABIC SHEEN;;;; FEB8;ARABIC LETTER SHEEN MEDIAL FORM;Lo;0;AL; 0634;;;;N;GLYPH FOR MEDIAL ARABIC SHEEN;;;; FEB9;ARABIC LETTER SAD ISOLATED FORM;Lo;0;AL; 0635;;;;N;GLYPH FOR ISOLATE ARABIC SAD;;;; FEBA;ARABIC LETTER SAD FINAL FORM;Lo;0;AL; 0635;;;;N;GLYPH FOR FINAL ARABIC SAD;;;; FEBB;ARABIC LETTER SAD INITIAL FORM;Lo;0;AL; 0635;;;;N;GLYPH FOR INITIAL ARABIC SAD;;;; FEBC;ARABIC LETTER SAD MEDIAL FORM;Lo;0;AL; 0635;;;;N;GLYPH FOR MEDIAL ARABIC SAD;;;; FEBD;ARABIC LETTER DAD ISOLATED FORM;Lo;0;AL; 0636;;;;N;GLYPH FOR ISOLATE ARABIC DAD;;;; FEBE;ARABIC LETTER DAD FINAL FORM;Lo;0;AL; 0636;;;;N;GLYPH FOR FINAL ARABIC DAD;;;; FEBF;ARABIC LETTER DAD INITIAL FORM;Lo;0;AL; 0636;;;;N;GLYPH FOR INITIAL ARABIC DAD;;;; FEC0;ARABIC LETTER DAD MEDIAL FORM;Lo;0;AL; 0636;;;;N;GLYPH FOR MEDIAL ARABIC DAD;;;; FEC1;ARABIC LETTER TAH ISOLATED FORM;Lo;0;AL; 0637;;;;N;GLYPH FOR ISOLATE ARABIC TAH;;;; FEC2;ARABIC LETTER TAH FINAL FORM;Lo;0;AL; 0637;;;;N;GLYPH FOR FINAL ARABIC TAH;;;; FEC3;ARABIC LETTER TAH INITIAL FORM;Lo;0;AL; 0637;;;;N;GLYPH FOR INITIAL ARABIC TAH;;;; FEC4;ARABIC LETTER TAH MEDIAL FORM;Lo;0;AL; 0637;;;;N;GLYPH FOR MEDIAL ARABIC TAH;;;; FEC5;ARABIC LETTER ZAH ISOLATED FORM;Lo;0;AL; 0638;;;;N;GLYPH FOR ISOLATE ARABIC DHAH;;;; FEC6;ARABIC LETTER ZAH FINAL FORM;Lo;0;AL; 0638;;;;N;GLYPH FOR FINAL ARABIC DHAH;;;; FEC7;ARABIC LETTER ZAH INITIAL FORM;Lo;0;AL; 0638;;;;N;GLYPH FOR INITIAL ARABIC DHAH;;;; FEC8;ARABIC LETTER ZAH MEDIAL FORM;Lo;0;AL; 0638;;;;N;GLYPH FOR MEDIAL ARABIC DHAH;;;; FEC9;ARABIC LETTER AIN ISOLATED FORM;Lo;0;AL; 0639;;;;N;GLYPH FOR ISOLATE ARABIC AIN;;;; FECA;ARABIC LETTER AIN FINAL FORM;Lo;0;AL; 0639;;;;N;GLYPH FOR FINAL ARABIC AIN;;;; FECB;ARABIC LETTER AIN INITIAL FORM;Lo;0;AL; 0639;;;;N;GLYPH FOR INITIAL ARABIC AIN;;;; FECC;ARABIC LETTER AIN MEDIAL FORM;Lo;0;AL; 0639;;;;N;GLYPH FOR MEDIAL ARABIC AIN;;;; FECD;ARABIC LETTER GHAIN ISOLATED FORM;Lo;0;AL; 063A;;;;N;GLYPH FOR ISOLATE ARABIC GHAIN;;;; FECE;ARABIC LETTER GHAIN FINAL FORM;Lo;0;AL; 063A;;;;N;GLYPH FOR FINAL ARABIC GHAIN;;;; FECF;ARABIC LETTER GHAIN INITIAL FORM;Lo;0;AL; 063A;;;;N;GLYPH FOR INITIAL ARABIC GHAIN;;;; FED0;ARABIC LETTER GHAIN MEDIAL FORM;Lo;0;AL; 063A;;;;N;GLYPH FOR MEDIAL ARABIC GHAIN;;;; FED1;ARABIC LETTER FEH ISOLATED FORM;Lo;0;AL; 0641;;;;N;GLYPH FOR ISOLATE ARABIC FA;;;; FED2;ARABIC LETTER FEH FINAL FORM;Lo;0;AL; 0641;;;;N;GLYPH FOR FINAL ARABIC FA;;;; FED3;ARABIC LETTER FEH INITIAL FORM;Lo;0;AL; 0641;;;;N;GLYPH FOR INITIAL ARABIC FA;;;; FED4;ARABIC LETTER FEH MEDIAL FORM;Lo;0;AL; 0641;;;;N;GLYPH FOR MEDIAL ARABIC FA;;;; FED5;ARABIC LETTER QAF ISOLATED FORM;Lo;0;AL; 0642;;;;N;GLYPH FOR ISOLATE ARABIC QAF;;;; FED6;ARABIC LETTER QAF FINAL FORM;Lo;0;AL; 0642;;;;N;GLYPH FOR FINAL ARABIC QAF;;;; FED7;ARABIC LETTER QAF INITIAL FORM;Lo;0;AL; 0642;;;;N;GLYPH FOR INITIAL ARABIC QAF;;;; FED8;ARABIC LETTER QAF MEDIAL FORM;Lo;0;AL; 0642;;;;N;GLYPH FOR MEDIAL ARABIC QAF;;;; FED9;ARABIC LETTER KAF ISOLATED FORM;Lo;0;AL; 0643;;;;N;GLYPH FOR ISOLATE ARABIC CAF;;;; FEDA;ARABIC LETTER KAF FINAL FORM;Lo;0;AL; 0643;;;;N;GLYPH FOR FINAL ARABIC CAF;;;; FEDB;ARABIC LETTER KAF INITIAL FORM;Lo;0;AL; 0643;;;;N;GLYPH FOR INITIAL ARABIC CAF;;;; FEDC;ARABIC LETTER KAF MEDIAL FORM;Lo;0;AL; 0643;;;;N;GLYPH FOR MEDIAL ARABIC CAF;;;; FEDD;ARABIC LETTER LAM ISOLATED FORM;Lo;0;AL; 0644;;;;N;GLYPH FOR ISOLATE ARABIC LAM;;;; FEDE;ARABIC LETTER LAM FINAL FORM;Lo;0;AL; 0644;;;;N;GLYPH FOR FINAL ARABIC LAM;;;; FEDF;ARABIC LETTER LAM INITIAL FORM;Lo;0;AL; 0644;;;;N;GLYPH FOR INITIAL ARABIC LAM;;;; FEE0;ARABIC LETTER LAM MEDIAL FORM;Lo;0;AL; 0644;;;;N;GLYPH FOR MEDIAL ARABIC LAM;;;; FEE1;ARABIC LETTER MEEM ISOLATED FORM;Lo;0;AL; 0645;;;;N;GLYPH FOR ISOLATE ARABIC MEEM;;;; FEE2;ARABIC LETTER MEEM FINAL FORM;Lo;0;AL; 0645;;;;N;GLYPH FOR FINAL ARABIC MEEM;;;; FEE3;ARABIC LETTER MEEM INITIAL FORM;Lo;0;AL; 0645;;;;N;GLYPH FOR INITIAL ARABIC MEEM;;;; FEE4;ARABIC LETTER MEEM MEDIAL FORM;Lo;0;AL; 0645;;;;N;GLYPH FOR MEDIAL ARABIC MEEM;;;; FEE5;ARABIC LETTER NOON ISOLATED FORM;Lo;0;AL; 0646;;;;N;GLYPH FOR ISOLATE ARABIC NOON;;;; FEE6;ARABIC LETTER NOON FINAL FORM;Lo;0;AL; 0646;;;;N;GLYPH FOR FINAL ARABIC NOON;;;; FEE7;ARABIC LETTER NOON INITIAL FORM;Lo;0;AL; 0646;;;;N;GLYPH FOR INITIAL ARABIC NOON;;;; FEE8;ARABIC LETTER NOON MEDIAL FORM;Lo;0;AL; 0646;;;;N;GLYPH FOR MEDIAL ARABIC NOON;;;; FEE9;ARABIC LETTER HEH ISOLATED FORM;Lo;0;AL; 0647;;;;N;GLYPH FOR ISOLATE ARABIC HA;;;; FEEA;ARABIC LETTER HEH FINAL FORM;Lo;0;AL; 0647;;;;N;GLYPH FOR FINAL ARABIC HA;;;; FEEB;ARABIC LETTER HEH INITIAL FORM;Lo;0;AL; 0647;;;;N;GLYPH FOR INITIAL ARABIC HA;;;; FEEC;ARABIC LETTER HEH MEDIAL FORM;Lo;0;AL; 0647;;;;N;GLYPH FOR MEDIAL ARABIC HA;;;; FEED;ARABIC LETTER WAW ISOLATED FORM;Lo;0;AL; 0648;;;;N;GLYPH FOR ISOLATE ARABIC WAW;;;; FEEE;ARABIC LETTER WAW FINAL FORM;Lo;0;AL; 0648;;;;N;GLYPH FOR FINAL ARABIC WAW;;;; FEEF;ARABIC LETTER ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0649;;;;N;GLYPH FOR ISOLATE ARABIC ALEF MAQSURAH;;;; FEF0;ARABIC LETTER ALEF MAKSURA FINAL FORM;Lo;0;AL; 0649;;;;N;GLYPH FOR FINAL ARABIC ALEF MAQSURAH;;;; FEF1;ARABIC LETTER YEH ISOLATED FORM;Lo;0;AL; 064A;;;;N;GLYPH FOR ISOLATE ARABIC YA;;;; FEF2;ARABIC LETTER YEH FINAL FORM;Lo;0;AL; 064A;;;;N;GLYPH FOR FINAL ARABIC YA;;;; FEF3;ARABIC LETTER YEH INITIAL FORM;Lo;0;AL; 064A;;;;N;GLYPH FOR INITIAL ARABIC YA;;;; FEF4;ARABIC LETTER YEH MEDIAL FORM;Lo;0;AL; 064A;;;;N;GLYPH FOR MEDIAL ARABIC YA;;;; FEF5;ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM;Lo;0;AL; 0644 0622;;;;N;GLYPH FOR ISOLATE ARABIC MADDAH ON LIGATURE LAM ALEF;;;; FEF6;ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM;Lo;0;AL; 0644 0622;;;;N;GLYPH FOR FINAL ARABIC MADDAH ON LIGATURE LAM ALEF;;;; FEF7;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL; 0644 0623;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON LIGATURE LAM ALEF;;;; FEF8;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM;Lo;0;AL; 0644 0623;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON LIGATURE LAM ALEF;;;; FEF9;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM;Lo;0;AL; 0644 0625;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH UNDER LIGATURE LAM ALEF;;;; FEFA;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM;Lo;0;AL; 0644 0625;;;;N;GLYPH FOR FINAL ARABIC HAMZAH UNDER LIGATURE LAM ALEF;;;; FEFB;ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM;Lo;0;AL; 0644 0627;;;;N;GLYPH FOR ISOLATE ARABIC LIGATURE LAM ALEF;;;; FEFC;ARABIC LIGATURE LAM WITH ALEF FINAL FORM;Lo;0;AL; 0644 0627;;;;N;GLYPH FOR FINAL ARABIC LIGATURE LAM ALEF;;;; FEFF;ZERO WIDTH NO-BREAK SPACE;Cf;0;BN;;;;;N;BYTE ORDER MARK;;;; FF01;FULLWIDTH EXCLAMATION MARK;Po;0;ON; 0021;;;;N;;;;; FF02;FULLWIDTH QUOTATION MARK;Po;0;ON; 0022;;;;N;;;;; FF03;FULLWIDTH NUMBER SIGN;Po;0;ET; 0023;;;;N;;;;; FF04;FULLWIDTH DOLLAR SIGN;Sc;0;ET; 0024;;;;N;;;;; FF05;FULLWIDTH PERCENT SIGN;Po;0;ET; 0025;;;;N;;;;; FF06;FULLWIDTH AMPERSAND;Po;0;ON; 0026;;;;N;;;;; FF07;FULLWIDTH APOSTROPHE;Po;0;ON; 0027;;;;N;;;;; FF08;FULLWIDTH LEFT PARENTHESIS;Ps;0;ON; 0028;;;;Y;FULLWIDTH OPENING PARENTHESIS;;;; FF09;FULLWIDTH RIGHT PARENTHESIS;Pe;0;ON; 0029;;;;Y;FULLWIDTH CLOSING PARENTHESIS;;;; FF0A;FULLWIDTH ASTERISK;Po;0;ON; 002A;;;;N;;;;; FF0B;FULLWIDTH PLUS SIGN;Sm;0;ES; 002B;;;;N;;;;; FF0C;FULLWIDTH COMMA;Po;0;CS; 002C;;;;N;;;;; FF0D;FULLWIDTH HYPHEN-MINUS;Pd;0;ES; 002D;;;;N;;;;; FF0E;FULLWIDTH FULL STOP;Po;0;CS; 002E;;;;N;FULLWIDTH PERIOD;;;; FF0F;FULLWIDTH SOLIDUS;Po;0;CS; 002F;;;;N;FULLWIDTH SLASH;;;; FF10;FULLWIDTH DIGIT ZERO;Nd;0;EN; 0030;0;0;0;N;;;;; FF11;FULLWIDTH DIGIT ONE;Nd;0;EN; 0031;1;1;1;N;;;;; FF12;FULLWIDTH DIGIT TWO;Nd;0;EN; 0032;2;2;2;N;;;;; FF13;FULLWIDTH DIGIT THREE;Nd;0;EN; 0033;3;3;3;N;;;;; FF14;FULLWIDTH DIGIT FOUR;Nd;0;EN; 0034;4;4;4;N;;;;; FF15;FULLWIDTH DIGIT FIVE;Nd;0;EN; 0035;5;5;5;N;;;;; FF16;FULLWIDTH DIGIT SIX;Nd;0;EN; 0036;6;6;6;N;;;;; FF17;FULLWIDTH DIGIT SEVEN;Nd;0;EN; 0037;7;7;7;N;;;;; FF18;FULLWIDTH DIGIT EIGHT;Nd;0;EN; 0038;8;8;8;N;;;;; FF19;FULLWIDTH DIGIT NINE;Nd;0;EN; 0039;9;9;9;N;;;;; FF1A;FULLWIDTH COLON;Po;0;CS; 003A;;;;N;;;;; FF1B;FULLWIDTH SEMICOLON;Po;0;ON; 003B;;;;N;;;;; FF1C;FULLWIDTH LESS-THAN SIGN;Sm;0;ON; 003C;;;;Y;;;;; FF1D;FULLWIDTH EQUALS SIGN;Sm;0;ON; 003D;;;;N;;;;; FF1E;FULLWIDTH GREATER-THAN SIGN;Sm;0;ON; 003E;;;;Y;;;;; FF1F;FULLWIDTH QUESTION MARK;Po;0;ON; 003F;;;;N;;;;; FF20;FULLWIDTH COMMERCIAL AT;Po;0;ON; 0040;;;;N;;;;; FF21;FULLWIDTH LATIN CAPITAL LETTER A;Lu;0;L; 0041;;;;N;;;;FF41; FF22;FULLWIDTH LATIN CAPITAL LETTER B;Lu;0;L; 0042;;;;N;;;;FF42; FF23;FULLWIDTH LATIN CAPITAL LETTER C;Lu;0;L; 0043;;;;N;;;;FF43; FF24;FULLWIDTH LATIN CAPITAL LETTER D;Lu;0;L; 0044;;;;N;;;;FF44; FF25;FULLWIDTH LATIN CAPITAL LETTER E;Lu;0;L; 0045;;;;N;;;;FF45; FF26;FULLWIDTH LATIN CAPITAL LETTER F;Lu;0;L; 0046;;;;N;;;;FF46; FF27;FULLWIDTH LATIN CAPITAL LETTER G;Lu;0;L; 0047;;;;N;;;;FF47; FF28;FULLWIDTH LATIN CAPITAL LETTER H;Lu;0;L; 0048;;;;N;;;;FF48; FF29;FULLWIDTH LATIN CAPITAL LETTER I;Lu;0;L; 0049;;;;N;;;;FF49; FF2A;FULLWIDTH LATIN CAPITAL LETTER J;Lu;0;L; 004A;;;;N;;;;FF4A; FF2B;FULLWIDTH LATIN CAPITAL LETTER K;Lu;0;L; 004B;;;;N;;;;FF4B; FF2C;FULLWIDTH LATIN CAPITAL LETTER L;Lu;0;L; 004C;;;;N;;;;FF4C; FF2D;FULLWIDTH LATIN CAPITAL LETTER M;Lu;0;L; 004D;;;;N;;;;FF4D; FF2E;FULLWIDTH LATIN CAPITAL LETTER N;Lu;0;L; 004E;;;;N;;;;FF4E; FF2F;FULLWIDTH LATIN CAPITAL LETTER O;Lu;0;L; 004F;;;;N;;;;FF4F; FF30;FULLWIDTH LATIN CAPITAL LETTER P;Lu;0;L; 0050;;;;N;;;;FF50; FF31;FULLWIDTH LATIN CAPITAL LETTER Q;Lu;0;L; 0051;;;;N;;;;FF51; FF32;FULLWIDTH LATIN CAPITAL LETTER R;Lu;0;L; 0052;;;;N;;;;FF52; FF33;FULLWIDTH LATIN CAPITAL LETTER S;Lu;0;L; 0053;;;;N;;;;FF53; FF34;FULLWIDTH LATIN CAPITAL LETTER T;Lu;0;L; 0054;;;;N;;;;FF54; FF35;FULLWIDTH LATIN CAPITAL LETTER U;Lu;0;L; 0055;;;;N;;;;FF55; FF36;FULLWIDTH LATIN CAPITAL LETTER V;Lu;0;L; 0056;;;;N;;;;FF56; FF37;FULLWIDTH LATIN CAPITAL LETTER W;Lu;0;L; 0057;;;;N;;;;FF57; FF38;FULLWIDTH LATIN CAPITAL LETTER X;Lu;0;L; 0058;;;;N;;;;FF58; FF39;FULLWIDTH LATIN CAPITAL LETTER Y;Lu;0;L; 0059;;;;N;;;;FF59; FF3A;FULLWIDTH LATIN CAPITAL LETTER Z;Lu;0;L; 005A;;;;N;;;;FF5A; FF3B;FULLWIDTH LEFT SQUARE BRACKET;Ps;0;ON; 005B;;;;Y;FULLWIDTH OPENING SQUARE BRACKET;;;; FF3C;FULLWIDTH REVERSE SOLIDUS;Po;0;ON; 005C;;;;N;FULLWIDTH BACKSLASH;;;; FF3D;FULLWIDTH RIGHT SQUARE BRACKET;Pe;0;ON; 005D;;;;Y;FULLWIDTH CLOSING SQUARE BRACKET;;;; FF3E;FULLWIDTH CIRCUMFLEX ACCENT;Sk;0;ON; 005E;;;;N;FULLWIDTH SPACING CIRCUMFLEX;;;; FF3F;FULLWIDTH LOW LINE;Pc;0;ON; 005F;;;;N;FULLWIDTH SPACING UNDERSCORE;;;; FF40;FULLWIDTH GRAVE ACCENT;Sk;0;ON; 0060;;;;N;FULLWIDTH SPACING GRAVE;;;; FF41;FULLWIDTH LATIN SMALL LETTER A;Ll;0;L; 0061;;;;N;;;FF21;;FF21 FF42;FULLWIDTH LATIN SMALL LETTER B;Ll;0;L; 0062;;;;N;;;FF22;;FF22 FF43;FULLWIDTH LATIN SMALL LETTER C;Ll;0;L; 0063;;;;N;;;FF23;;FF23 FF44;FULLWIDTH LATIN SMALL LETTER D;Ll;0;L; 0064;;;;N;;;FF24;;FF24 FF45;FULLWIDTH LATIN SMALL LETTER E;Ll;0;L; 0065;;;;N;;;FF25;;FF25 FF46;FULLWIDTH LATIN SMALL LETTER F;Ll;0;L; 0066;;;;N;;;FF26;;FF26 FF47;FULLWIDTH LATIN SMALL LETTER G;Ll;0;L; 0067;;;;N;;;FF27;;FF27 FF48;FULLWIDTH LATIN SMALL LETTER H;Ll;0;L; 0068;;;;N;;;FF28;;FF28 FF49;FULLWIDTH LATIN SMALL LETTER I;Ll;0;L; 0069;;;;N;;;FF29;;FF29 FF4A;FULLWIDTH LATIN SMALL LETTER J;Ll;0;L; 006A;;;;N;;;FF2A;;FF2A FF4B;FULLWIDTH LATIN SMALL LETTER K;Ll;0;L; 006B;;;;N;;;FF2B;;FF2B FF4C;FULLWIDTH LATIN SMALL LETTER L;Ll;0;L; 006C;;;;N;;;FF2C;;FF2C FF4D;FULLWIDTH LATIN SMALL LETTER M;Ll;0;L; 006D;;;;N;;;FF2D;;FF2D FF4E;FULLWIDTH LATIN SMALL LETTER N;Ll;0;L; 006E;;;;N;;;FF2E;;FF2E FF4F;FULLWIDTH LATIN SMALL LETTER O;Ll;0;L; 006F;;;;N;;;FF2F;;FF2F FF50;FULLWIDTH LATIN SMALL LETTER P;Ll;0;L; 0070;;;;N;;;FF30;;FF30 FF51;FULLWIDTH LATIN SMALL LETTER Q;Ll;0;L; 0071;;;;N;;;FF31;;FF31 FF52;FULLWIDTH LATIN SMALL LETTER R;Ll;0;L; 0072;;;;N;;;FF32;;FF32 FF53;FULLWIDTH LATIN SMALL LETTER S;Ll;0;L; 0073;;;;N;;;FF33;;FF33 FF54;FULLWIDTH LATIN SMALL LETTER T;Ll;0;L; 0074;;;;N;;;FF34;;FF34 FF55;FULLWIDTH LATIN SMALL LETTER U;Ll;0;L; 0075;;;;N;;;FF35;;FF35 FF56;FULLWIDTH LATIN SMALL LETTER V;Ll;0;L; 0076;;;;N;;;FF36;;FF36 FF57;FULLWIDTH LATIN SMALL LETTER W;Ll;0;L; 0077;;;;N;;;FF37;;FF37 FF58;FULLWIDTH LATIN SMALL LETTER X;Ll;0;L; 0078;;;;N;;;FF38;;FF38 FF59;FULLWIDTH LATIN SMALL LETTER Y;Ll;0;L; 0079;;;;N;;;FF39;;FF39 FF5A;FULLWIDTH LATIN SMALL LETTER Z;Ll;0;L; 007A;;;;N;;;FF3A;;FF3A FF5B;FULLWIDTH LEFT CURLY BRACKET;Ps;0;ON; 007B;;;;Y;FULLWIDTH OPENING CURLY BRACKET;;;; FF5C;FULLWIDTH VERTICAL LINE;Sm;0;ON; 007C;;;;N;FULLWIDTH VERTICAL BAR;;;; FF5D;FULLWIDTH RIGHT CURLY BRACKET;Pe;0;ON; 007D;;;;Y;FULLWIDTH CLOSING CURLY BRACKET;;;; FF5E;FULLWIDTH TILDE;Sm;0;ON; 007E;;;;N;FULLWIDTH SPACING TILDE;;;; FF5F;FULLWIDTH LEFT WHITE PARENTHESIS;Ps;0;ON; 2985;;;;Y;;;;; FF60;FULLWIDTH RIGHT WHITE PARENTHESIS;Pe;0;ON; 2986;;;;Y;;;;; FF61;HALFWIDTH IDEOGRAPHIC FULL STOP;Po;0;ON; 3002;;;;N;HALFWIDTH IDEOGRAPHIC PERIOD;;;; FF62;HALFWIDTH LEFT CORNER BRACKET;Ps;0;ON; 300C;;;;Y;HALFWIDTH OPENING CORNER BRACKET;;;; FF63;HALFWIDTH RIGHT CORNER BRACKET;Pe;0;ON; 300D;;;;Y;HALFWIDTH CLOSING CORNER BRACKET;;;; FF64;HALFWIDTH IDEOGRAPHIC COMMA;Po;0;ON; 3001;;;;N;;;;; FF65;HALFWIDTH KATAKANA MIDDLE DOT;Po;0;ON; 30FB;;;;N;;;;; FF66;HALFWIDTH KATAKANA LETTER WO;Lo;0;L; 30F2;;;;N;;;;; FF67;HALFWIDTH KATAKANA LETTER SMALL A;Lo;0;L; 30A1;;;;N;;;;; FF68;HALFWIDTH KATAKANA LETTER SMALL I;Lo;0;L; 30A3;;;;N;;;;; FF69;HALFWIDTH KATAKANA LETTER SMALL U;Lo;0;L; 30A5;;;;N;;;;; FF6A;HALFWIDTH KATAKANA LETTER SMALL E;Lo;0;L; 30A7;;;;N;;;;; FF6B;HALFWIDTH KATAKANA LETTER SMALL O;Lo;0;L; 30A9;;;;N;;;;; FF6C;HALFWIDTH KATAKANA LETTER SMALL YA;Lo;0;L; 30E3;;;;N;;;;; FF6D;HALFWIDTH KATAKANA LETTER SMALL YU;Lo;0;L; 30E5;;;;N;;;;; FF6E;HALFWIDTH KATAKANA LETTER SMALL YO;Lo;0;L; 30E7;;;;N;;;;; FF6F;HALFWIDTH KATAKANA LETTER SMALL TU;Lo;0;L; 30C3;;;;N;;;;; FF70;HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK;Lm;0;L; 30FC;;;;N;;;;; FF71;HALFWIDTH KATAKANA LETTER A;Lo;0;L; 30A2;;;;N;;;;; FF72;HALFWIDTH KATAKANA LETTER I;Lo;0;L; 30A4;;;;N;;;;; FF73;HALFWIDTH KATAKANA LETTER U;Lo;0;L; 30A6;;;;N;;;;; FF74;HALFWIDTH KATAKANA LETTER E;Lo;0;L; 30A8;;;;N;;;;; FF75;HALFWIDTH KATAKANA LETTER O;Lo;0;L; 30AA;;;;N;;;;; FF76;HALFWIDTH KATAKANA LETTER KA;Lo;0;L; 30AB;;;;N;;;;; FF77;HALFWIDTH KATAKANA LETTER KI;Lo;0;L; 30AD;;;;N;;;;; FF78;HALFWIDTH KATAKANA LETTER KU;Lo;0;L; 30AF;;;;N;;;;; FF79;HALFWIDTH KATAKANA LETTER KE;Lo;0;L; 30B1;;;;N;;;;; FF7A;HALFWIDTH KATAKANA LETTER KO;Lo;0;L; 30B3;;;;N;;;;; FF7B;HALFWIDTH KATAKANA LETTER SA;Lo;0;L; 30B5;;;;N;;;;; FF7C;HALFWIDTH KATAKANA LETTER SI;Lo;0;L; 30B7;;;;N;;;;; FF7D;HALFWIDTH KATAKANA LETTER SU;Lo;0;L; 30B9;;;;N;;;;; FF7E;HALFWIDTH KATAKANA LETTER SE;Lo;0;L; 30BB;;;;N;;;;; FF7F;HALFWIDTH KATAKANA LETTER SO;Lo;0;L; 30BD;;;;N;;;;; FF80;HALFWIDTH KATAKANA LETTER TA;Lo;0;L; 30BF;;;;N;;;;; FF81;HALFWIDTH KATAKANA LETTER TI;Lo;0;L; 30C1;;;;N;;;;; FF82;HALFWIDTH KATAKANA LETTER TU;Lo;0;L; 30C4;;;;N;;;;; FF83;HALFWIDTH KATAKANA LETTER TE;Lo;0;L; 30C6;;;;N;;;;; FF84;HALFWIDTH KATAKANA LETTER TO;Lo;0;L; 30C8;;;;N;;;;; FF85;HALFWIDTH KATAKANA LETTER NA;Lo;0;L; 30CA;;;;N;;;;; FF86;HALFWIDTH KATAKANA LETTER NI;Lo;0;L; 30CB;;;;N;;;;; FF87;HALFWIDTH KATAKANA LETTER NU;Lo;0;L; 30CC;;;;N;;;;; FF88;HALFWIDTH KATAKANA LETTER NE;Lo;0;L; 30CD;;;;N;;;;; FF89;HALFWIDTH KATAKANA LETTER NO;Lo;0;L; 30CE;;;;N;;;;; FF8A;HALFWIDTH KATAKANA LETTER HA;Lo;0;L; 30CF;;;;N;;;;; FF8B;HALFWIDTH KATAKANA LETTER HI;Lo;0;L; 30D2;;;;N;;;;; FF8C;HALFWIDTH KATAKANA LETTER HU;Lo;0;L; 30D5;;;;N;;;;; FF8D;HALFWIDTH KATAKANA LETTER HE;Lo;0;L; 30D8;;;;N;;;;; FF8E;HALFWIDTH KATAKANA LETTER HO;Lo;0;L; 30DB;;;;N;;;;; FF8F;HALFWIDTH KATAKANA LETTER MA;Lo;0;L; 30DE;;;;N;;;;; FF90;HALFWIDTH KATAKANA LETTER MI;Lo;0;L; 30DF;;;;N;;;;; FF91;HALFWIDTH KATAKANA LETTER MU;Lo;0;L; 30E0;;;;N;;;;; FF92;HALFWIDTH KATAKANA LETTER ME;Lo;0;L; 30E1;;;;N;;;;; FF93;HALFWIDTH KATAKANA LETTER MO;Lo;0;L; 30E2;;;;N;;;;; FF94;HALFWIDTH KATAKANA LETTER YA;Lo;0;L; 30E4;;;;N;;;;; FF95;HALFWIDTH KATAKANA LETTER YU;Lo;0;L; 30E6;;;;N;;;;; FF96;HALFWIDTH KATAKANA LETTER YO;Lo;0;L; 30E8;;;;N;;;;; FF97;HALFWIDTH KATAKANA LETTER RA;Lo;0;L; 30E9;;;;N;;;;; FF98;HALFWIDTH KATAKANA LETTER RI;Lo;0;L; 30EA;;;;N;;;;; FF99;HALFWIDTH KATAKANA LETTER RU;Lo;0;L; 30EB;;;;N;;;;; FF9A;HALFWIDTH KATAKANA LETTER RE;Lo;0;L; 30EC;;;;N;;;;; FF9B;HALFWIDTH KATAKANA LETTER RO;Lo;0;L; 30ED;;;;N;;;;; FF9C;HALFWIDTH KATAKANA LETTER WA;Lo;0;L; 30EF;;;;N;;;;; FF9D;HALFWIDTH KATAKANA LETTER N;Lo;0;L; 30F3;;;;N;;;;; FF9E;HALFWIDTH KATAKANA VOICED SOUND MARK;Lm;0;L; 3099;;;;N;;;;; FF9F;HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK;Lm;0;L; 309A;;;;N;;;;; FFA0;HALFWIDTH HANGUL FILLER;Lo;0;L; 3164;;;;N;HALFWIDTH HANGUL CAE OM;;;; FFA1;HALFWIDTH HANGUL LETTER KIYEOK;Lo;0;L; 3131;;;;N;HALFWIDTH HANGUL LETTER GIYEOG;;;; FFA2;HALFWIDTH HANGUL LETTER SSANGKIYEOK;Lo;0;L; 3132;;;;N;HALFWIDTH HANGUL LETTER SSANG GIYEOG;;;; FFA3;HALFWIDTH HANGUL LETTER KIYEOK-SIOS;Lo;0;L; 3133;;;;N;HALFWIDTH HANGUL LETTER GIYEOG SIOS;;;; FFA4;HALFWIDTH HANGUL LETTER NIEUN;Lo;0;L; 3134;;;;N;;;;; FFA5;HALFWIDTH HANGUL LETTER NIEUN-CIEUC;Lo;0;L; 3135;;;;N;HALFWIDTH HANGUL LETTER NIEUN JIEUJ;;;; FFA6;HALFWIDTH HANGUL LETTER NIEUN-HIEUH;Lo;0;L; 3136;;;;N;HALFWIDTH HANGUL LETTER NIEUN HIEUH;;;; FFA7;HALFWIDTH HANGUL LETTER TIKEUT;Lo;0;L; 3137;;;;N;HALFWIDTH HANGUL LETTER DIGEUD;;;; FFA8;HALFWIDTH HANGUL LETTER SSANGTIKEUT;Lo;0;L; 3138;;;;N;HALFWIDTH HANGUL LETTER SSANG DIGEUD;;;; FFA9;HALFWIDTH HANGUL LETTER RIEUL;Lo;0;L; 3139;;;;N;HALFWIDTH HANGUL LETTER LIEUL;;;; FFAA;HALFWIDTH HANGUL LETTER RIEUL-KIYEOK;Lo;0;L; 313A;;;;N;HALFWIDTH HANGUL LETTER LIEUL GIYEOG;;;; FFAB;HALFWIDTH HANGUL LETTER RIEUL-MIEUM;Lo;0;L; 313B;;;;N;HALFWIDTH HANGUL LETTER LIEUL MIEUM;;;; FFAC;HALFWIDTH HANGUL LETTER RIEUL-PIEUP;Lo;0;L; 313C;;;;N;HALFWIDTH HANGUL LETTER LIEUL BIEUB;;;; FFAD;HALFWIDTH HANGUL LETTER RIEUL-SIOS;Lo;0;L; 313D;;;;N;HALFWIDTH HANGUL LETTER LIEUL SIOS;;;; FFAE;HALFWIDTH HANGUL LETTER RIEUL-THIEUTH;Lo;0;L; 313E;;;;N;HALFWIDTH HANGUL LETTER LIEUL TIEUT;;;; FFAF;HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH;Lo;0;L; 313F;;;;N;HALFWIDTH HANGUL LETTER LIEUL PIEUP;;;; FFB0;HALFWIDTH HANGUL LETTER RIEUL-HIEUH;Lo;0;L; 3140;;;;N;HALFWIDTH HANGUL LETTER LIEUL HIEUH;;;; FFB1;HALFWIDTH HANGUL LETTER MIEUM;Lo;0;L; 3141;;;;N;;;;; FFB2;HALFWIDTH HANGUL LETTER PIEUP;Lo;0;L; 3142;;;;N;HALFWIDTH HANGUL LETTER BIEUB;;;; FFB3;HALFWIDTH HANGUL LETTER SSANGPIEUP;Lo;0;L; 3143;;;;N;HALFWIDTH HANGUL LETTER SSANG BIEUB;;;; FFB4;HALFWIDTH HANGUL LETTER PIEUP-SIOS;Lo;0;L; 3144;;;;N;HALFWIDTH HANGUL LETTER BIEUB SIOS;;;; FFB5;HALFWIDTH HANGUL LETTER SIOS;Lo;0;L; 3145;;;;N;;;;; FFB6;HALFWIDTH HANGUL LETTER SSANGSIOS;Lo;0;L; 3146;;;;N;HALFWIDTH HANGUL LETTER SSANG SIOS;;;; FFB7;HALFWIDTH HANGUL LETTER IEUNG;Lo;0;L; 3147;;;;N;;;;; FFB8;HALFWIDTH HANGUL LETTER CIEUC;Lo;0;L; 3148;;;;N;HALFWIDTH HANGUL LETTER JIEUJ;;;; FFB9;HALFWIDTH HANGUL LETTER SSANGCIEUC;Lo;0;L; 3149;;;;N;HALFWIDTH HANGUL LETTER SSANG JIEUJ;;;; FFBA;HALFWIDTH HANGUL LETTER CHIEUCH;Lo;0;L; 314A;;;;N;HALFWIDTH HANGUL LETTER CIEUC;;;; FFBB;HALFWIDTH HANGUL LETTER KHIEUKH;Lo;0;L; 314B;;;;N;HALFWIDTH HANGUL LETTER KIYEOK;;;; FFBC;HALFWIDTH HANGUL LETTER THIEUTH;Lo;0;L; 314C;;;;N;HALFWIDTH HANGUL LETTER TIEUT;;;; FFBD;HALFWIDTH HANGUL LETTER PHIEUPH;Lo;0;L; 314D;;;;N;HALFWIDTH HANGUL LETTER PIEUP;;;; FFBE;HALFWIDTH HANGUL LETTER HIEUH;Lo;0;L; 314E;;;;N;;;;; FFC2;HALFWIDTH HANGUL LETTER A;Lo;0;L; 314F;;;;N;;;;; FFC3;HALFWIDTH HANGUL LETTER AE;Lo;0;L; 3150;;;;N;;;;; FFC4;HALFWIDTH HANGUL LETTER YA;Lo;0;L; 3151;;;;N;;;;; FFC5;HALFWIDTH HANGUL LETTER YAE;Lo;0;L; 3152;;;;N;;;;; FFC6;HALFWIDTH HANGUL LETTER EO;Lo;0;L; 3153;;;;N;;;;; FFC7;HALFWIDTH HANGUL LETTER E;Lo;0;L; 3154;;;;N;;;;; FFCA;HALFWIDTH HANGUL LETTER YEO;Lo;0;L; 3155;;;;N;;;;; FFCB;HALFWIDTH HANGUL LETTER YE;Lo;0;L; 3156;;;;N;;;;; FFCC;HALFWIDTH HANGUL LETTER O;Lo;0;L; 3157;;;;N;;;;; FFCD;HALFWIDTH HANGUL LETTER WA;Lo;0;L; 3158;;;;N;;;;; FFCE;HALFWIDTH HANGUL LETTER WAE;Lo;0;L; 3159;;;;N;;;;; FFCF;HALFWIDTH HANGUL LETTER OE;Lo;0;L; 315A;;;;N;;;;; FFD2;HALFWIDTH HANGUL LETTER YO;Lo;0;L; 315B;;;;N;;;;; FFD3;HALFWIDTH HANGUL LETTER U;Lo;0;L; 315C;;;;N;;;;; FFD4;HALFWIDTH HANGUL LETTER WEO;Lo;0;L; 315D;;;;N;;;;; FFD5;HALFWIDTH HANGUL LETTER WE;Lo;0;L; 315E;;;;N;;;;; FFD6;HALFWIDTH HANGUL LETTER WI;Lo;0;L; 315F;;;;N;;;;; FFD7;HALFWIDTH HANGUL LETTER YU;Lo;0;L; 3160;;;;N;;;;; FFDA;HALFWIDTH HANGUL LETTER EU;Lo;0;L; 3161;;;;N;;;;; FFDB;HALFWIDTH HANGUL LETTER YI;Lo;0;L; 3162;;;;N;;;;; FFDC;HALFWIDTH HANGUL LETTER I;Lo;0;L; 3163;;;;N;;;;; FFE0;FULLWIDTH CENT SIGN;Sc;0;ET; 00A2;;;;N;;;;; FFE1;FULLWIDTH POUND SIGN;Sc;0;ET; 00A3;;;;N;;;;; FFE2;FULLWIDTH NOT SIGN;Sm;0;ON; 00AC;;;;N;;;;; FFE3;FULLWIDTH MACRON;Sk;0;ON; 00AF;;;;N;FULLWIDTH SPACING MACRON;;;; FFE4;FULLWIDTH BROKEN BAR;So;0;ON; 00A6;;;;N;FULLWIDTH BROKEN VERTICAL BAR;;;; FFE5;FULLWIDTH YEN SIGN;Sc;0;ET; 00A5;;;;N;;;;; FFE6;FULLWIDTH WON SIGN;Sc;0;ET; 20A9;;;;N;;;;; FFE8;HALFWIDTH FORMS LIGHT VERTICAL;So;0;ON; 2502;;;;N;;;;; FFE9;HALFWIDTH LEFTWARDS ARROW;Sm;0;ON; 2190;;;;N;;;;; FFEA;HALFWIDTH UPWARDS ARROW;Sm;0;ON; 2191;;;;N;;;;; FFEB;HALFWIDTH RIGHTWARDS ARROW;Sm;0;ON; 2192;;;;N;;;;; FFEC;HALFWIDTH DOWNWARDS ARROW;Sm;0;ON; 2193;;;;N;;;;; FFED;HALFWIDTH BLACK SQUARE;So;0;ON; 25A0;;;;N;;;;; FFEE;HALFWIDTH WHITE CIRCLE;So;0;ON; 25CB;;;;N;;;;; FFF9;INTERLINEAR ANNOTATION ANCHOR;Cf;0;ON;;;;;N;;;;; FFFA;INTERLINEAR ANNOTATION SEPARATOR;Cf;0;ON;;;;;N;;;;; FFFB;INTERLINEAR ANNOTATION TERMINATOR;Cf;0;ON;;;;;N;;;;; FFFC;OBJECT REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 10000;LINEAR B SYLLABLE B008 A;Lo;0;L;;;;;N;;;;; 10001;LINEAR B SYLLABLE B038 E;Lo;0;L;;;;;N;;;;; 10002;LINEAR B SYLLABLE B028 I;Lo;0;L;;;;;N;;;;; 10003;LINEAR B SYLLABLE B061 O;Lo;0;L;;;;;N;;;;; 10004;LINEAR B SYLLABLE B010 U;Lo;0;L;;;;;N;;;;; 10005;LINEAR B SYLLABLE B001 DA;Lo;0;L;;;;;N;;;;; 10006;LINEAR B SYLLABLE B045 DE;Lo;0;L;;;;;N;;;;; 10007;LINEAR B SYLLABLE B007 DI;Lo;0;L;;;;;N;;;;; 10008;LINEAR B SYLLABLE B014 DO;Lo;0;L;;;;;N;;;;; 10009;LINEAR B SYLLABLE B051 DU;Lo;0;L;;;;;N;;;;; 1000A;LINEAR B SYLLABLE B057 JA;Lo;0;L;;;;;N;;;;; 1000B;LINEAR B SYLLABLE B046 JE;Lo;0;L;;;;;N;;;;; 1000D;LINEAR B SYLLABLE B036 JO;Lo;0;L;;;;;N;;;;; 1000E;LINEAR B SYLLABLE B065 JU;Lo;0;L;;;;;N;;;;; 1000F;LINEAR B SYLLABLE B077 KA;Lo;0;L;;;;;N;;;;; 10010;LINEAR B SYLLABLE B044 KE;Lo;0;L;;;;;N;;;;; 10011;LINEAR B SYLLABLE B067 KI;Lo;0;L;;;;;N;;;;; 10012;LINEAR B SYLLABLE B070 KO;Lo;0;L;;;;;N;;;;; 10013;LINEAR B SYLLABLE B081 KU;Lo;0;L;;;;;N;;;;; 10014;LINEAR B SYLLABLE B080 MA;Lo;0;L;;;;;N;;;;; 10015;LINEAR B SYLLABLE B013 ME;Lo;0;L;;;;;N;;;;; 10016;LINEAR B SYLLABLE B073 MI;Lo;0;L;;;;;N;;;;; 10017;LINEAR B SYLLABLE B015 MO;Lo;0;L;;;;;N;;;;; 10018;LINEAR B SYLLABLE B023 MU;Lo;0;L;;;;;N;;;;; 10019;LINEAR B SYLLABLE B006 NA;Lo;0;L;;;;;N;;;;; 1001A;LINEAR B SYLLABLE B024 NE;Lo;0;L;;;;;N;;;;; 1001B;LINEAR B SYLLABLE B030 NI;Lo;0;L;;;;;N;;;;; 1001C;LINEAR B SYLLABLE B052 NO;Lo;0;L;;;;;N;;;;; 1001D;LINEAR B SYLLABLE B055 NU;Lo;0;L;;;;;N;;;;; 1001E;LINEAR B SYLLABLE B003 PA;Lo;0;L;;;;;N;;;;; 1001F;LINEAR B SYLLABLE B072 PE;Lo;0;L;;;;;N;;;;; 10020;LINEAR B SYLLABLE B039 PI;Lo;0;L;;;;;N;;;;; 10021;LINEAR B SYLLABLE B011 PO;Lo;0;L;;;;;N;;;;; 10022;LINEAR B SYLLABLE B050 PU;Lo;0;L;;;;;N;;;;; 10023;LINEAR B SYLLABLE B016 QA;Lo;0;L;;;;;N;;;;; 10024;LINEAR B SYLLABLE B078 QE;Lo;0;L;;;;;N;;;;; 10025;LINEAR B SYLLABLE B021 QI;Lo;0;L;;;;;N;;;;; 10026;LINEAR B SYLLABLE B032 QO;Lo;0;L;;;;;N;;;;; 10028;LINEAR B SYLLABLE B060 RA;Lo;0;L;;;;;N;;;;; 10029;LINEAR B SYLLABLE B027 RE;Lo;0;L;;;;;N;;;;; 1002A;LINEAR B SYLLABLE B053 RI;Lo;0;L;;;;;N;;;;; 1002B;LINEAR B SYLLABLE B002 RO;Lo;0;L;;;;;N;;;;; 1002C;LINEAR B SYLLABLE B026 RU;Lo;0;L;;;;;N;;;;; 1002D;LINEAR B SYLLABLE B031 SA;Lo;0;L;;;;;N;;;;; 1002E;LINEAR B SYLLABLE B009 SE;Lo;0;L;;;;;N;;;;; 1002F;LINEAR B SYLLABLE B041 SI;Lo;0;L;;;;;N;;;;; 10030;LINEAR B SYLLABLE B012 SO;Lo;0;L;;;;;N;;;;; 10031;LINEAR B SYLLABLE B058 SU;Lo;0;L;;;;;N;;;;; 10032;LINEAR B SYLLABLE B059 TA;Lo;0;L;;;;;N;;;;; 10033;LINEAR B SYLLABLE B004 TE;Lo;0;L;;;;;N;;;;; 10034;LINEAR B SYLLABLE B037 TI;Lo;0;L;;;;;N;;;;; 10035;LINEAR B SYLLABLE B005 TO;Lo;0;L;;;;;N;;;;; 10036;LINEAR B SYLLABLE B069 TU;Lo;0;L;;;;;N;;;;; 10037;LINEAR B SYLLABLE B054 WA;Lo;0;L;;;;;N;;;;; 10038;LINEAR B SYLLABLE B075 WE;Lo;0;L;;;;;N;;;;; 10039;LINEAR B SYLLABLE B040 WI;Lo;0;L;;;;;N;;;;; 1003A;LINEAR B SYLLABLE B042 WO;Lo;0;L;;;;;N;;;;; 1003C;LINEAR B SYLLABLE B017 ZA;Lo;0;L;;;;;N;;;;; 1003D;LINEAR B SYLLABLE B074 ZE;Lo;0;L;;;;;N;;;;; 1003F;LINEAR B SYLLABLE B020 ZO;Lo;0;L;;;;;N;;;;; 10040;LINEAR B SYLLABLE B025 A2;Lo;0;L;;;;;N;;;;; 10041;LINEAR B SYLLABLE B043 A3;Lo;0;L;;;;;N;;;;; 10042;LINEAR B SYLLABLE B085 AU;Lo;0;L;;;;;N;;;;; 10043;LINEAR B SYLLABLE B071 DWE;Lo;0;L;;;;;N;;;;; 10044;LINEAR B SYLLABLE B090 DWO;Lo;0;L;;;;;N;;;;; 10045;LINEAR B SYLLABLE B048 NWA;Lo;0;L;;;;;N;;;;; 10046;LINEAR B SYLLABLE B029 PU2;Lo;0;L;;;;;N;;;;; 10047;LINEAR B SYLLABLE B062 PTE;Lo;0;L;;;;;N;;;;; 10048;LINEAR B SYLLABLE B076 RA2;Lo;0;L;;;;;N;;;;; 10049;LINEAR B SYLLABLE B033 RA3;Lo;0;L;;;;;N;;;;; 1004A;LINEAR B SYLLABLE B068 RO2;Lo;0;L;;;;;N;;;;; 1004B;LINEAR B SYLLABLE B066 TA2;Lo;0;L;;;;;N;;;;; 1004C;LINEAR B SYLLABLE B087 TWE;Lo;0;L;;;;;N;;;;; 1004D;LINEAR B SYLLABLE B091 TWO;Lo;0;L;;;;;N;;;;; 10050;LINEAR B SYMBOL B018;Lo;0;L;;;;;N;;;;; 10051;LINEAR B SYMBOL B019;Lo;0;L;;;;;N;;;;; 10052;LINEAR B SYMBOL B022;Lo;0;L;;;;;N;;;;; 10053;LINEAR B SYMBOL B034;Lo;0;L;;;;;N;;;;; 10054;LINEAR B SYMBOL B047;Lo;0;L;;;;;N;;;;; 10055;LINEAR B SYMBOL B049;Lo;0;L;;;;;N;;;;; 10056;LINEAR B SYMBOL B056;Lo;0;L;;;;;N;;;;; 10057;LINEAR B SYMBOL B063;Lo;0;L;;;;;N;;;;; 10058;LINEAR B SYMBOL B064;Lo;0;L;;;;;N;;;;; 10059;LINEAR B SYMBOL B079;Lo;0;L;;;;;N;;;;; 1005A;LINEAR B SYMBOL B082;Lo;0;L;;;;;N;;;;; 1005B;LINEAR B SYMBOL B083;Lo;0;L;;;;;N;;;;; 1005C;LINEAR B SYMBOL B086;Lo;0;L;;;;;N;;;;; 1005D;LINEAR B SYMBOL B089;Lo;0;L;;;;;N;;;;; 10080;LINEAR B IDEOGRAM B100 MAN;Lo;0;L;;;;;N;;;;; 10081;LINEAR B IDEOGRAM B102 WOMAN;Lo;0;L;;;;;N;;;;; 10082;LINEAR B IDEOGRAM B104 DEER;Lo;0;L;;;;;N;;;;; 10083;LINEAR B IDEOGRAM B105 EQUID;Lo;0;L;;;;;N;;;;; 10084;LINEAR B IDEOGRAM B105F MARE;Lo;0;L;;;;;N;;;;; 10085;LINEAR B IDEOGRAM B105M STALLION;Lo;0;L;;;;;N;;;;; 10086;LINEAR B IDEOGRAM B106F EWE;Lo;0;L;;;;;N;;;;; 10087;LINEAR B IDEOGRAM B106M RAM;Lo;0;L;;;;;N;;;;; 10088;LINEAR B IDEOGRAM B107F SHE-GOAT;Lo;0;L;;;;;N;;;;; 10089;LINEAR B IDEOGRAM B107M HE-GOAT;Lo;0;L;;;;;N;;;;; 1008A;LINEAR B IDEOGRAM B108F SOW;Lo;0;L;;;;;N;;;;; 1008B;LINEAR B IDEOGRAM B108M BOAR;Lo;0;L;;;;;N;;;;; 1008C;LINEAR B IDEOGRAM B109F COW;Lo;0;L;;;;;N;;;;; 1008D;LINEAR B IDEOGRAM B109M BULL;Lo;0;L;;;;;N;;;;; 1008E;LINEAR B IDEOGRAM B120 WHEAT;Lo;0;L;;;;;N;;;;; 1008F;LINEAR B IDEOGRAM B121 BARLEY;Lo;0;L;;;;;N;;;;; 10090;LINEAR B IDEOGRAM B122 OLIVE;Lo;0;L;;;;;N;;;;; 10091;LINEAR B IDEOGRAM B123 SPICE;Lo;0;L;;;;;N;;;;; 10092;LINEAR B IDEOGRAM B125 CYPERUS;Lo;0;L;;;;;N;;;;; 10093;LINEAR B MONOGRAM B127 KAPO;Lo;0;L;;;;;N;;;;; 10094;LINEAR B MONOGRAM B128 KANAKO;Lo;0;L;;;;;N;;;;; 10095;LINEAR B IDEOGRAM B130 OIL;Lo;0;L;;;;;N;;;;; 10096;LINEAR B IDEOGRAM B131 WINE;Lo;0;L;;;;;N;;;;; 10097;LINEAR B IDEOGRAM B132;Lo;0;L;;;;;N;;;;; 10098;LINEAR B MONOGRAM B133 AREPA;Lo;0;L;;;;;N;;;;; 10099;LINEAR B MONOGRAM B135 MERI;Lo;0;L;;;;;N;;;;; 1009A;LINEAR B IDEOGRAM B140 BRONZE;Lo;0;L;;;;;N;;;;; 1009B;LINEAR B IDEOGRAM B141 GOLD;Lo;0;L;;;;;N;;;;; 1009C;LINEAR B IDEOGRAM B142;Lo;0;L;;;;;N;;;;; 1009D;LINEAR B IDEOGRAM B145 WOOL;Lo;0;L;;;;;N;;;;; 1009E;LINEAR B IDEOGRAM B146;Lo;0;L;;;;;N;;;;; 1009F;LINEAR B IDEOGRAM B150;Lo;0;L;;;;;N;;;;; 100A0;LINEAR B IDEOGRAM B151 HORN;Lo;0;L;;;;;N;;;;; 100A1;LINEAR B IDEOGRAM B152;Lo;0;L;;;;;N;;;;; 100A2;LINEAR B IDEOGRAM B153;Lo;0;L;;;;;N;;;;; 100A3;LINEAR B IDEOGRAM B154;Lo;0;L;;;;;N;;;;; 100A4;LINEAR B MONOGRAM B156 TURO2;Lo;0;L;;;;;N;;;;; 100A5;LINEAR B IDEOGRAM B157;Lo;0;L;;;;;N;;;;; 100A6;LINEAR B IDEOGRAM B158;Lo;0;L;;;;;N;;;;; 100A7;LINEAR B IDEOGRAM B159 CLOTH;Lo;0;L;;;;;N;;;;; 100A8;LINEAR B IDEOGRAM B160;Lo;0;L;;;;;N;;;;; 100A9;LINEAR B IDEOGRAM B161;Lo;0;L;;;;;N;;;;; 100AA;LINEAR B IDEOGRAM B162 GARMENT;Lo;0;L;;;;;N;;;;; 100AB;LINEAR B IDEOGRAM B163 ARMOUR;Lo;0;L;;;;;N;;;;; 100AC;LINEAR B IDEOGRAM B164;Lo;0;L;;;;;N;;;;; 100AD;LINEAR B IDEOGRAM B165;Lo;0;L;;;;;N;;;;; 100AE;LINEAR B IDEOGRAM B166;Lo;0;L;;;;;N;;;;; 100AF;LINEAR B IDEOGRAM B167;Lo;0;L;;;;;N;;;;; 100B0;LINEAR B IDEOGRAM B168;Lo;0;L;;;;;N;;;;; 100B1;LINEAR B IDEOGRAM B169;Lo;0;L;;;;;N;;;;; 100B2;LINEAR B IDEOGRAM B170;Lo;0;L;;;;;N;;;;; 100B3;LINEAR B IDEOGRAM B171;Lo;0;L;;;;;N;;;;; 100B4;LINEAR B IDEOGRAM B172;Lo;0;L;;;;;N;;;;; 100B5;LINEAR B IDEOGRAM B173 MONTH;Lo;0;L;;;;;N;;;;; 100B6;LINEAR B IDEOGRAM B174;Lo;0;L;;;;;N;;;;; 100B7;LINEAR B IDEOGRAM B176 TREE;Lo;0;L;;;;;N;;;;; 100B8;LINEAR B IDEOGRAM B177;Lo;0;L;;;;;N;;;;; 100B9;LINEAR B IDEOGRAM B178;Lo;0;L;;;;;N;;;;; 100BA;LINEAR B IDEOGRAM B179;Lo;0;L;;;;;N;;;;; 100BB;LINEAR B IDEOGRAM B180;Lo;0;L;;;;;N;;;;; 100BC;LINEAR B IDEOGRAM B181;Lo;0;L;;;;;N;;;;; 100BD;LINEAR B IDEOGRAM B182;Lo;0;L;;;;;N;;;;; 100BE;LINEAR B IDEOGRAM B183;Lo;0;L;;;;;N;;;;; 100BF;LINEAR B IDEOGRAM B184;Lo;0;L;;;;;N;;;;; 100C0;LINEAR B IDEOGRAM B185;Lo;0;L;;;;;N;;;;; 100C1;LINEAR B IDEOGRAM B189;Lo;0;L;;;;;N;;;;; 100C2;LINEAR B IDEOGRAM B190;Lo;0;L;;;;;N;;;;; 100C3;LINEAR B IDEOGRAM B191 HELMET;Lo;0;L;;;;;N;;;;; 100C4;LINEAR B IDEOGRAM B220 FOOTSTOOL;Lo;0;L;;;;;N;;;;; 100C5;LINEAR B IDEOGRAM B225 BATHTUB;Lo;0;L;;;;;N;;;;; 100C6;LINEAR B IDEOGRAM B230 SPEAR;Lo;0;L;;;;;N;;;;; 100C7;LINEAR B IDEOGRAM B231 ARROW;Lo;0;L;;;;;N;;;;; 100C8;LINEAR B IDEOGRAM B232;Lo;0;L;;;;;N;;;;; 100C9;LINEAR B IDEOGRAM B233 SWORD;Lo;0;L;;;;;N;;;;; 100CA;LINEAR B IDEOGRAM B234;Lo;0;L;;;;;N;;;;; 100CB;LINEAR B IDEOGRAM B236;Lo;0;L;;;;;N;;;;; 100CC;LINEAR B IDEOGRAM B240 WHEELED CHARIOT;Lo;0;L;;;;;N;;;;; 100CD;LINEAR B IDEOGRAM B241 CHARIOT;Lo;0;L;;;;;N;;;;; 100CE;LINEAR B IDEOGRAM B242 CHARIOT FRAME;Lo;0;L;;;;;N;;;;; 100CF;LINEAR B IDEOGRAM B243 WHEEL;Lo;0;L;;;;;N;;;;; 100D0;LINEAR B IDEOGRAM B245;Lo;0;L;;;;;N;;;;; 100D1;LINEAR B IDEOGRAM B246;Lo;0;L;;;;;N;;;;; 100D2;LINEAR B MONOGRAM B247 DIPTE;Lo;0;L;;;;;N;;;;; 100D3;LINEAR B IDEOGRAM B248;Lo;0;L;;;;;N;;;;; 100D4;LINEAR B IDEOGRAM B249;Lo;0;L;;;;;N;;;;; 100D5;LINEAR B IDEOGRAM B251;Lo;0;L;;;;;N;;;;; 100D6;LINEAR B IDEOGRAM B252;Lo;0;L;;;;;N;;;;; 100D7;LINEAR B IDEOGRAM B253;Lo;0;L;;;;;N;;;;; 100D8;LINEAR B IDEOGRAM B254 DART;Lo;0;L;;;;;N;;;;; 100D9;LINEAR B IDEOGRAM B255;Lo;0;L;;;;;N;;;;; 100DA;LINEAR B IDEOGRAM B256;Lo;0;L;;;;;N;;;;; 100DB;LINEAR B IDEOGRAM B257;Lo;0;L;;;;;N;;;;; 100DC;LINEAR B IDEOGRAM B258;Lo;0;L;;;;;N;;;;; 100DD;LINEAR B IDEOGRAM B259;Lo;0;L;;;;;N;;;;; 100DE;LINEAR B IDEOGRAM VESSEL B155;Lo;0;L;;;;;N;;;;; 100DF;LINEAR B IDEOGRAM VESSEL B200;Lo;0;L;;;;;N;;;;; 100E0;LINEAR B IDEOGRAM VESSEL B201;Lo;0;L;;;;;N;;;;; 100E1;LINEAR B IDEOGRAM VESSEL B202;Lo;0;L;;;;;N;;;;; 100E2;LINEAR B IDEOGRAM VESSEL B203;Lo;0;L;;;;;N;;;;; 100E3;LINEAR B IDEOGRAM VESSEL B204;Lo;0;L;;;;;N;;;;; 100E4;LINEAR B IDEOGRAM VESSEL B205;Lo;0;L;;;;;N;;;;; 100E5;LINEAR B IDEOGRAM VESSEL B206;Lo;0;L;;;;;N;;;;; 100E6;LINEAR B IDEOGRAM VESSEL B207;Lo;0;L;;;;;N;;;;; 100E7;LINEAR B IDEOGRAM VESSEL B208;Lo;0;L;;;;;N;;;;; 100E8;LINEAR B IDEOGRAM VESSEL B209;Lo;0;L;;;;;N;;;;; 100E9;LINEAR B IDEOGRAM VESSEL B210;Lo;0;L;;;;;N;;;;; 100EA;LINEAR B IDEOGRAM VESSEL B211;Lo;0;L;;;;;N;;;;; 100EB;LINEAR B IDEOGRAM VESSEL B212;Lo;0;L;;;;;N;;;;; 100EC;LINEAR B IDEOGRAM VESSEL B213;Lo;0;L;;;;;N;;;;; 100ED;LINEAR B IDEOGRAM VESSEL B214;Lo;0;L;;;;;N;;;;; 100EE;LINEAR B IDEOGRAM VESSEL B215;Lo;0;L;;;;;N;;;;; 100EF;LINEAR B IDEOGRAM VESSEL B216;Lo;0;L;;;;;N;;;;; 100F0;LINEAR B IDEOGRAM VESSEL B217;Lo;0;L;;;;;N;;;;; 100F1;LINEAR B IDEOGRAM VESSEL B218;Lo;0;L;;;;;N;;;;; 100F2;LINEAR B IDEOGRAM VESSEL B219;Lo;0;L;;;;;N;;;;; 100F3;LINEAR B IDEOGRAM VESSEL B221;Lo;0;L;;;;;N;;;;; 100F4;LINEAR B IDEOGRAM VESSEL B222;Lo;0;L;;;;;N;;;;; 100F5;LINEAR B IDEOGRAM VESSEL B226;Lo;0;L;;;;;N;;;;; 100F6;LINEAR B IDEOGRAM VESSEL B227;Lo;0;L;;;;;N;;;;; 100F7;LINEAR B IDEOGRAM VESSEL B228;Lo;0;L;;;;;N;;;;; 100F8;LINEAR B IDEOGRAM VESSEL B229;Lo;0;L;;;;;N;;;;; 100F9;LINEAR B IDEOGRAM VESSEL B250;Lo;0;L;;;;;N;;;;; 100FA;LINEAR B IDEOGRAM VESSEL B305;Lo;0;L;;;;;N;;;;; 10100;AEGEAN WORD SEPARATOR LINE;Po;0;L;;;;;N;;;;; 10101;AEGEAN WORD SEPARATOR DOT;Po;0;ON;;;;;N;;;;; 10102;AEGEAN CHECK MARK;Po;0;L;;;;;N;;;;; 10107;AEGEAN NUMBER ONE;No;0;L;;;;1;N;;;;; 10108;AEGEAN NUMBER TWO;No;0;L;;;;2;N;;;;; 10109;AEGEAN NUMBER THREE;No;0;L;;;;3;N;;;;; 1010A;AEGEAN NUMBER FOUR;No;0;L;;;;4;N;;;;; 1010B;AEGEAN NUMBER FIVE;No;0;L;;;;5;N;;;;; 1010C;AEGEAN NUMBER SIX;No;0;L;;;;6;N;;;;; 1010D;AEGEAN NUMBER SEVEN;No;0;L;;;;7;N;;;;; 1010E;AEGEAN NUMBER EIGHT;No;0;L;;;;8;N;;;;; 1010F;AEGEAN NUMBER NINE;No;0;L;;;;9;N;;;;; 10110;AEGEAN NUMBER TEN;No;0;L;;;;10;N;;;;; 10111;AEGEAN NUMBER TWENTY;No;0;L;;;;20;N;;;;; 10112;AEGEAN NUMBER THIRTY;No;0;L;;;;30;N;;;;; 10113;AEGEAN NUMBER FORTY;No;0;L;;;;40;N;;;;; 10114;AEGEAN NUMBER FIFTY;No;0;L;;;;50;N;;;;; 10115;AEGEAN NUMBER SIXTY;No;0;L;;;;60;N;;;;; 10116;AEGEAN NUMBER SEVENTY;No;0;L;;;;70;N;;;;; 10117;AEGEAN NUMBER EIGHTY;No;0;L;;;;80;N;;;;; 10118;AEGEAN NUMBER NINETY;No;0;L;;;;90;N;;;;; 10119;AEGEAN NUMBER ONE HUNDRED;No;0;L;;;;100;N;;;;; 1011A;AEGEAN NUMBER TWO HUNDRED;No;0;L;;;;200;N;;;;; 1011B;AEGEAN NUMBER THREE HUNDRED;No;0;L;;;;300;N;;;;; 1011C;AEGEAN NUMBER FOUR HUNDRED;No;0;L;;;;400;N;;;;; 1011D;AEGEAN NUMBER FIVE HUNDRED;No;0;L;;;;500;N;;;;; 1011E;AEGEAN NUMBER SIX HUNDRED;No;0;L;;;;600;N;;;;; 1011F;AEGEAN NUMBER SEVEN HUNDRED;No;0;L;;;;700;N;;;;; 10120;AEGEAN NUMBER EIGHT HUNDRED;No;0;L;;;;800;N;;;;; 10121;AEGEAN NUMBER NINE HUNDRED;No;0;L;;;;900;N;;;;; 10122;AEGEAN NUMBER ONE THOUSAND;No;0;L;;;;1000;N;;;;; 10123;AEGEAN NUMBER TWO THOUSAND;No;0;L;;;;2000;N;;;;; 10124;AEGEAN NUMBER THREE THOUSAND;No;0;L;;;;3000;N;;;;; 10125;AEGEAN NUMBER FOUR THOUSAND;No;0;L;;;;4000;N;;;;; 10126;AEGEAN NUMBER FIVE THOUSAND;No;0;L;;;;5000;N;;;;; 10127;AEGEAN NUMBER SIX THOUSAND;No;0;L;;;;6000;N;;;;; 10128;AEGEAN NUMBER SEVEN THOUSAND;No;0;L;;;;7000;N;;;;; 10129;AEGEAN NUMBER EIGHT THOUSAND;No;0;L;;;;8000;N;;;;; 1012A;AEGEAN NUMBER NINE THOUSAND;No;0;L;;;;9000;N;;;;; 1012B;AEGEAN NUMBER TEN THOUSAND;No;0;L;;;;10000;N;;;;; 1012C;AEGEAN NUMBER TWENTY THOUSAND;No;0;L;;;;20000;N;;;;; 1012D;AEGEAN NUMBER THIRTY THOUSAND;No;0;L;;;;30000;N;;;;; 1012E;AEGEAN NUMBER FORTY THOUSAND;No;0;L;;;;40000;N;;;;; 1012F;AEGEAN NUMBER FIFTY THOUSAND;No;0;L;;;;50000;N;;;;; 10130;AEGEAN NUMBER SIXTY THOUSAND;No;0;L;;;;60000;N;;;;; 10131;AEGEAN NUMBER SEVENTY THOUSAND;No;0;L;;;;70000;N;;;;; 10132;AEGEAN NUMBER EIGHTY THOUSAND;No;0;L;;;;80000;N;;;;; 10133;AEGEAN NUMBER NINETY THOUSAND;No;0;L;;;;90000;N;;;;; 10137;AEGEAN WEIGHT BASE UNIT;So;0;L;;;;;N;;;;; 10138;AEGEAN WEIGHT FIRST SUBUNIT;So;0;L;;;;;N;;;;; 10139;AEGEAN WEIGHT SECOND SUBUNIT;So;0;L;;;;;N;;;;; 1013A;AEGEAN WEIGHT THIRD SUBUNIT;So;0;L;;;;;N;;;;; 1013B;AEGEAN WEIGHT FOURTH SUBUNIT;So;0;L;;;;;N;;;;; 1013C;AEGEAN DRY MEASURE FIRST SUBUNIT;So;0;L;;;;;N;;;;; 1013D;AEGEAN LIQUID MEASURE FIRST SUBUNIT;So;0;L;;;;;N;;;;; 1013E;AEGEAN MEASURE SECOND SUBUNIT;So;0;L;;;;;N;;;;; 1013F;AEGEAN MEASURE THIRD SUBUNIT;So;0;L;;;;;N;;;;; 10140;GREEK ACROPHONIC ATTIC ONE QUARTER;Nl;0;ON;;;;1/4;N;;;;; 10141;GREEK ACROPHONIC ATTIC ONE HALF;Nl;0;ON;;;;1/2;N;;;;; 10142;GREEK ACROPHONIC ATTIC ONE DRACHMA;Nl;0;ON;;;;1;N;;;;; 10143;GREEK ACROPHONIC ATTIC FIVE;Nl;0;ON;;;;5;N;;;;; 10144;GREEK ACROPHONIC ATTIC FIFTY;Nl;0;ON;;;;50;N;;;;; 10145;GREEK ACROPHONIC ATTIC FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;; 10146;GREEK ACROPHONIC ATTIC FIVE THOUSAND;Nl;0;ON;;;;5000;N;;;;; 10147;GREEK ACROPHONIC ATTIC FIFTY THOUSAND;Nl;0;ON;;;;50000;N;;;;; 10148;GREEK ACROPHONIC ATTIC FIVE TALENTS;Nl;0;ON;;;;5;N;;;;; 10149;GREEK ACROPHONIC ATTIC TEN TALENTS;Nl;0;ON;;;;10;N;;;;; 1014A;GREEK ACROPHONIC ATTIC FIFTY TALENTS;Nl;0;ON;;;;50;N;;;;; 1014B;GREEK ACROPHONIC ATTIC ONE HUNDRED TALENTS;Nl;0;ON;;;;100;N;;;;; 1014C;GREEK ACROPHONIC ATTIC FIVE HUNDRED TALENTS;Nl;0;ON;;;;500;N;;;;; 1014D;GREEK ACROPHONIC ATTIC ONE THOUSAND TALENTS;Nl;0;ON;;;;1000;N;;;;; 1014E;GREEK ACROPHONIC ATTIC FIVE THOUSAND TALENTS;Nl;0;ON;;;;5000;N;;;;; 1014F;GREEK ACROPHONIC ATTIC FIVE STATERS;Nl;0;ON;;;;5;N;;;;; 10150;GREEK ACROPHONIC ATTIC TEN STATERS;Nl;0;ON;;;;10;N;;;;; 10151;GREEK ACROPHONIC ATTIC FIFTY STATERS;Nl;0;ON;;;;50;N;;;;; 10152;GREEK ACROPHONIC ATTIC ONE HUNDRED STATERS;Nl;0;ON;;;;100;N;;;;; 10153;GREEK ACROPHONIC ATTIC FIVE HUNDRED STATERS;Nl;0;ON;;;;500;N;;;;; 10154;GREEK ACROPHONIC ATTIC ONE THOUSAND STATERS;Nl;0;ON;;;;1000;N;;;;; 10155;GREEK ACROPHONIC ATTIC TEN THOUSAND STATERS;Nl;0;ON;;;;10000;N;;;;; 10156;GREEK ACROPHONIC ATTIC FIFTY THOUSAND STATERS;Nl;0;ON;;;;50000;N;;;;; 10157;GREEK ACROPHONIC ATTIC TEN MNAS;Nl;0;ON;;;;10;N;;;;; 10158;GREEK ACROPHONIC HERAEUM ONE PLETHRON;Nl;0;ON;;;;1;N;;;;; 10159;GREEK ACROPHONIC THESPIAN ONE;Nl;0;ON;;;;1;N;;;;; 1015A;GREEK ACROPHONIC HERMIONIAN ONE;Nl;0;ON;;;;1;N;;;;; 1015B;GREEK ACROPHONIC EPIDAUREAN TWO;Nl;0;ON;;;;2;N;;;;; 1015C;GREEK ACROPHONIC THESPIAN TWO;Nl;0;ON;;;;2;N;;;;; 1015D;GREEK ACROPHONIC CYRENAIC TWO DRACHMAS;Nl;0;ON;;;;2;N;;;;; 1015E;GREEK ACROPHONIC EPIDAUREAN TWO DRACHMAS;Nl;0;ON;;;;2;N;;;;; 1015F;GREEK ACROPHONIC TROEZENIAN FIVE;Nl;0;ON;;;;5;N;;;;; 10160;GREEK ACROPHONIC TROEZENIAN TEN;Nl;0;ON;;;;10;N;;;;; 10161;GREEK ACROPHONIC TROEZENIAN TEN ALTERNATE FORM;Nl;0;ON;;;;10;N;;;;; 10162;GREEK ACROPHONIC HERMIONIAN TEN;Nl;0;ON;;;;10;N;;;;; 10163;GREEK ACROPHONIC MESSENIAN TEN;Nl;0;ON;;;;10;N;;;;; 10164;GREEK ACROPHONIC THESPIAN TEN;Nl;0;ON;;;;10;N;;;;; 10165;GREEK ACROPHONIC THESPIAN THIRTY;Nl;0;ON;;;;30;N;;;;; 10166;GREEK ACROPHONIC TROEZENIAN FIFTY;Nl;0;ON;;;;50;N;;;;; 10167;GREEK ACROPHONIC TROEZENIAN FIFTY ALTERNATE FORM;Nl;0;ON;;;;50;N;;;;; 10168;GREEK ACROPHONIC HERMIONIAN FIFTY;Nl;0;ON;;;;50;N;;;;; 10169;GREEK ACROPHONIC THESPIAN FIFTY;Nl;0;ON;;;;50;N;;;;; 1016A;GREEK ACROPHONIC THESPIAN ONE HUNDRED;Nl;0;ON;;;;100;N;;;;; 1016B;GREEK ACROPHONIC THESPIAN THREE HUNDRED;Nl;0;ON;;;;300;N;;;;; 1016C;GREEK ACROPHONIC EPIDAUREAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;; 1016D;GREEK ACROPHONIC TROEZENIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;; 1016E;GREEK ACROPHONIC THESPIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;; 1016F;GREEK ACROPHONIC CARYSTIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;; 10170;GREEK ACROPHONIC NAXIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;; 10171;GREEK ACROPHONIC THESPIAN ONE THOUSAND;Nl;0;ON;;;;1000;N;;;;; 10172;GREEK ACROPHONIC THESPIAN FIVE THOUSAND;Nl;0;ON;;;;5000;N;;;;; 10173;GREEK ACROPHONIC DELPHIC FIVE MNAS;Nl;0;ON;;;;5;N;;;;; 10174;GREEK ACROPHONIC STRATIAN FIFTY MNAS;Nl;0;ON;;;;50;N;;;;; 10175;GREEK ONE HALF SIGN;No;0;ON;;;;1/2;N;;;;; 10176;GREEK ONE HALF SIGN ALTERNATE FORM;No;0;ON;;;;1/2;N;;;;; 10177;GREEK TWO THIRDS SIGN;No;0;ON;;;;2/3;N;;;;; 10178;GREEK THREE QUARTERS SIGN;No;0;ON;;;;3/4;N;;;;; 10179;GREEK YEAR SIGN;So;0;ON;;;;;N;;;;; 1017A;GREEK TALENT SIGN;So;0;ON;;;;;N;;;;; 1017B;GREEK DRACHMA SIGN;So;0;ON;;;;;N;;;;; 1017C;GREEK OBOL SIGN;So;0;ON;;;;;N;;;;; 1017D;GREEK TWO OBOLS SIGN;So;0;ON;;;;;N;;;;; 1017E;GREEK THREE OBOLS SIGN;So;0;ON;;;;;N;;;;; 1017F;GREEK FOUR OBOLS SIGN;So;0;ON;;;;;N;;;;; 10180;GREEK FIVE OBOLS SIGN;So;0;ON;;;;;N;;;;; 10181;GREEK METRETES SIGN;So;0;ON;;;;;N;;;;; 10182;GREEK KYATHOS BASE SIGN;So;0;ON;;;;;N;;;;; 10183;GREEK LITRA SIGN;So;0;ON;;;;;N;;;;; 10184;GREEK OUNKIA SIGN;So;0;ON;;;;;N;;;;; 10185;GREEK XESTES SIGN;So;0;ON;;;;;N;;;;; 10186;GREEK ARTABE SIGN;So;0;ON;;;;;N;;;;; 10187;GREEK AROURA SIGN;So;0;ON;;;;;N;;;;; 10188;GREEK GRAMMA SIGN;So;0;ON;;;;;N;;;;; 10189;GREEK TRYBLION BASE SIGN;So;0;ON;;;;;N;;;;; 1018A;GREEK ZERO SIGN;No;0;ON;;;;0;N;;;;; 1018B;GREEK ONE QUARTER SIGN;No;0;ON;;;;1/4;N;;;;; 1018C;GREEK SINUSOID SIGN;So;0;ON;;;;;N;;;;; 1018D;GREEK INDICTION SIGN;So;0;L;;;;;N;;;;; 1018E;NOMISMA SIGN;So;0;L;;;;;N;;;;; 10190;ROMAN SEXTANS SIGN;So;0;ON;;;;;N;;;;; 10191;ROMAN UNCIA SIGN;So;0;ON;;;;;N;;;;; 10192;ROMAN SEMUNCIA SIGN;So;0;ON;;;;;N;;;;; 10193;ROMAN SEXTULA SIGN;So;0;ON;;;;;N;;;;; 10194;ROMAN DIMIDIA SEXTULA SIGN;So;0;ON;;;;;N;;;;; 10195;ROMAN SILIQUA SIGN;So;0;ON;;;;;N;;;;; 10196;ROMAN DENARIUS SIGN;So;0;ON;;;;;N;;;;; 10197;ROMAN QUINARIUS SIGN;So;0;ON;;;;;N;;;;; 10198;ROMAN SESTERTIUS SIGN;So;0;ON;;;;;N;;;;; 10199;ROMAN DUPONDIUS SIGN;So;0;ON;;;;;N;;;;; 1019A;ROMAN AS SIGN;So;0;ON;;;;;N;;;;; 1019B;ROMAN CENTURIAL SIGN;So;0;ON;;;;;N;;;;; 1019C;ASCIA SYMBOL;So;0;ON;;;;;N;;;;; 101A0;GREEK SYMBOL TAU RHO;So;0;ON;;;;;N;;;;; 101D0;PHAISTOS DISC SIGN PEDESTRIAN;So;0;L;;;;;N;;;;; 101D1;PHAISTOS DISC SIGN PLUMED HEAD;So;0;L;;;;;N;;;;; 101D2;PHAISTOS DISC SIGN TATTOOED HEAD;So;0;L;;;;;N;;;;; 101D3;PHAISTOS DISC SIGN CAPTIVE;So;0;L;;;;;N;;;;; 101D4;PHAISTOS DISC SIGN CHILD;So;0;L;;;;;N;;;;; 101D5;PHAISTOS DISC SIGN WOMAN;So;0;L;;;;;N;;;;; 101D6;PHAISTOS DISC SIGN HELMET;So;0;L;;;;;N;;;;; 101D7;PHAISTOS DISC SIGN GAUNTLET;So;0;L;;;;;N;;;;; 101D8;PHAISTOS DISC SIGN TIARA;So;0;L;;;;;N;;;;; 101D9;PHAISTOS DISC SIGN ARROW;So;0;L;;;;;N;;;;; 101DA;PHAISTOS DISC SIGN BOW;So;0;L;;;;;N;;;;; 101DB;PHAISTOS DISC SIGN SHIELD;So;0;L;;;;;N;;;;; 101DC;PHAISTOS DISC SIGN CLUB;So;0;L;;;;;N;;;;; 101DD;PHAISTOS DISC SIGN MANACLES;So;0;L;;;;;N;;;;; 101DE;PHAISTOS DISC SIGN MATTOCK;So;0;L;;;;;N;;;;; 101DF;PHAISTOS DISC SIGN SAW;So;0;L;;;;;N;;;;; 101E0;PHAISTOS DISC SIGN LID;So;0;L;;;;;N;;;;; 101E1;PHAISTOS DISC SIGN BOOMERANG;So;0;L;;;;;N;;;;; 101E2;PHAISTOS DISC SIGN CARPENTRY PLANE;So;0;L;;;;;N;;;;; 101E3;PHAISTOS DISC SIGN DOLIUM;So;0;L;;;;;N;;;;; 101E4;PHAISTOS DISC SIGN COMB;So;0;L;;;;;N;;;;; 101E5;PHAISTOS DISC SIGN SLING;So;0;L;;;;;N;;;;; 101E6;PHAISTOS DISC SIGN COLUMN;So;0;L;;;;;N;;;;; 101E7;PHAISTOS DISC SIGN BEEHIVE;So;0;L;;;;;N;;;;; 101E8;PHAISTOS DISC SIGN SHIP;So;0;L;;;;;N;;;;; 101E9;PHAISTOS DISC SIGN HORN;So;0;L;;;;;N;;;;; 101EA;PHAISTOS DISC SIGN HIDE;So;0;L;;;;;N;;;;; 101EB;PHAISTOS DISC SIGN BULLS LEG;So;0;L;;;;;N;;;;; 101EC;PHAISTOS DISC SIGN CAT;So;0;L;;;;;N;;;;; 101ED;PHAISTOS DISC SIGN RAM;So;0;L;;;;;N;;;;; 101EE;PHAISTOS DISC SIGN EAGLE;So;0;L;;;;;N;;;;; 101EF;PHAISTOS DISC SIGN DOVE;So;0;L;;;;;N;;;;; 101F0;PHAISTOS DISC SIGN TUNNY;So;0;L;;;;;N;;;;; 101F1;PHAISTOS DISC SIGN BEE;So;0;L;;;;;N;;;;; 101F2;PHAISTOS DISC SIGN PLANE TREE;So;0;L;;;;;N;;;;; 101F3;PHAISTOS DISC SIGN VINE;So;0;L;;;;;N;;;;; 101F4;PHAISTOS DISC SIGN PAPYRUS;So;0;L;;;;;N;;;;; 101F5;PHAISTOS DISC SIGN ROSETTE;So;0;L;;;;;N;;;;; 101F6;PHAISTOS DISC SIGN LILY;So;0;L;;;;;N;;;;; 101F7;PHAISTOS DISC SIGN OX BACK;So;0;L;;;;;N;;;;; 101F8;PHAISTOS DISC SIGN FLUTE;So;0;L;;;;;N;;;;; 101F9;PHAISTOS DISC SIGN GRATER;So;0;L;;;;;N;;;;; 101FA;PHAISTOS DISC SIGN STRAINER;So;0;L;;;;;N;;;;; 101FB;PHAISTOS DISC SIGN SMALL AXE;So;0;L;;;;;N;;;;; 101FC;PHAISTOS DISC SIGN WAVY BAND;So;0;L;;;;;N;;;;; 101FD;PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE;Mn;220;NSM;;;;;N;;;;; 10280;LYCIAN LETTER A;Lo;0;L;;;;;N;;;;; 10281;LYCIAN LETTER E;Lo;0;L;;;;;N;;;;; 10282;LYCIAN LETTER B;Lo;0;L;;;;;N;;;;; 10283;LYCIAN LETTER BH;Lo;0;L;;;;;N;;;;; 10284;LYCIAN LETTER G;Lo;0;L;;;;;N;;;;; 10285;LYCIAN LETTER D;Lo;0;L;;;;;N;;;;; 10286;LYCIAN LETTER I;Lo;0;L;;;;;N;;;;; 10287;LYCIAN LETTER W;Lo;0;L;;;;;N;;;;; 10288;LYCIAN LETTER Z;Lo;0;L;;;;;N;;;;; 10289;LYCIAN LETTER TH;Lo;0;L;;;;;N;;;;; 1028A;LYCIAN LETTER J;Lo;0;L;;;;;N;;;;; 1028B;LYCIAN LETTER K;Lo;0;L;;;;;N;;;;; 1028C;LYCIAN LETTER Q;Lo;0;L;;;;;N;;;;; 1028D;LYCIAN LETTER L;Lo;0;L;;;;;N;;;;; 1028E;LYCIAN LETTER M;Lo;0;L;;;;;N;;;;; 1028F;LYCIAN LETTER N;Lo;0;L;;;;;N;;;;; 10290;LYCIAN LETTER MM;Lo;0;L;;;;;N;;;;; 10291;LYCIAN LETTER NN;Lo;0;L;;;;;N;;;;; 10292;LYCIAN LETTER U;Lo;0;L;;;;;N;;;;; 10293;LYCIAN LETTER P;Lo;0;L;;;;;N;;;;; 10294;LYCIAN LETTER KK;Lo;0;L;;;;;N;;;;; 10295;LYCIAN LETTER R;Lo;0;L;;;;;N;;;;; 10296;LYCIAN LETTER S;Lo;0;L;;;;;N;;;;; 10297;LYCIAN LETTER T;Lo;0;L;;;;;N;;;;; 10298;LYCIAN LETTER TT;Lo;0;L;;;;;N;;;;; 10299;LYCIAN LETTER AN;Lo;0;L;;;;;N;;;;; 1029A;LYCIAN LETTER EN;Lo;0;L;;;;;N;;;;; 1029B;LYCIAN LETTER H;Lo;0;L;;;;;N;;;;; 1029C;LYCIAN LETTER X;Lo;0;L;;;;;N;;;;; 102A0;CARIAN LETTER A;Lo;0;L;;;;;N;;;;; 102A1;CARIAN LETTER P2;Lo;0;L;;;;;N;;;;; 102A2;CARIAN LETTER D;Lo;0;L;;;;;N;;;;; 102A3;CARIAN LETTER L;Lo;0;L;;;;;N;;;;; 102A4;CARIAN LETTER UUU;Lo;0;L;;;;;N;;;;; 102A5;CARIAN LETTER R;Lo;0;L;;;;;N;;;;; 102A6;CARIAN LETTER LD;Lo;0;L;;;;;N;;;;; 102A7;CARIAN LETTER A2;Lo;0;L;;;;;N;;;;; 102A8;CARIAN LETTER Q;Lo;0;L;;;;;N;;;;; 102A9;CARIAN LETTER B;Lo;0;L;;;;;N;;;;; 102AA;CARIAN LETTER M;Lo;0;L;;;;;N;;;;; 102AB;CARIAN LETTER O;Lo;0;L;;;;;N;;;;; 102AC;CARIAN LETTER D2;Lo;0;L;;;;;N;;;;; 102AD;CARIAN LETTER T;Lo;0;L;;;;;N;;;;; 102AE;CARIAN LETTER SH;Lo;0;L;;;;;N;;;;; 102AF;CARIAN LETTER SH2;Lo;0;L;;;;;N;;;;; 102B0;CARIAN LETTER S;Lo;0;L;;;;;N;;;;; 102B1;CARIAN LETTER C-18;Lo;0;L;;;;;N;;;;; 102B2;CARIAN LETTER U;Lo;0;L;;;;;N;;;;; 102B3;CARIAN LETTER NN;Lo;0;L;;;;;N;;;;; 102B4;CARIAN LETTER X;Lo;0;L;;;;;N;;;;; 102B5;CARIAN LETTER N;Lo;0;L;;;;;N;;;;; 102B6;CARIAN LETTER TT2;Lo;0;L;;;;;N;;;;; 102B7;CARIAN LETTER P;Lo;0;L;;;;;N;;;;; 102B8;CARIAN LETTER SS;Lo;0;L;;;;;N;;;;; 102B9;CARIAN LETTER I;Lo;0;L;;;;;N;;;;; 102BA;CARIAN LETTER E;Lo;0;L;;;;;N;;;;; 102BB;CARIAN LETTER UUUU;Lo;0;L;;;;;N;;;;; 102BC;CARIAN LETTER K;Lo;0;L;;;;;N;;;;; 102BD;CARIAN LETTER K2;Lo;0;L;;;;;N;;;;; 102BE;CARIAN LETTER ND;Lo;0;L;;;;;N;;;;; 102BF;CARIAN LETTER UU;Lo;0;L;;;;;N;;;;; 102C0;CARIAN LETTER G;Lo;0;L;;;;;N;;;;; 102C1;CARIAN LETTER G2;Lo;0;L;;;;;N;;;;; 102C2;CARIAN LETTER ST;Lo;0;L;;;;;N;;;;; 102C3;CARIAN LETTER ST2;Lo;0;L;;;;;N;;;;; 102C4;CARIAN LETTER NG;Lo;0;L;;;;;N;;;;; 102C5;CARIAN LETTER II;Lo;0;L;;;;;N;;;;; 102C6;CARIAN LETTER C-39;Lo;0;L;;;;;N;;;;; 102C7;CARIAN LETTER TT;Lo;0;L;;;;;N;;;;; 102C8;CARIAN LETTER UUU2;Lo;0;L;;;;;N;;;;; 102C9;CARIAN LETTER RR;Lo;0;L;;;;;N;;;;; 102CA;CARIAN LETTER MB;Lo;0;L;;;;;N;;;;; 102CB;CARIAN LETTER MB2;Lo;0;L;;;;;N;;;;; 102CC;CARIAN LETTER MB3;Lo;0;L;;;;;N;;;;; 102CD;CARIAN LETTER MB4;Lo;0;L;;;;;N;;;;; 102CE;CARIAN LETTER LD2;Lo;0;L;;;;;N;;;;; 102CF;CARIAN LETTER E2;Lo;0;L;;;;;N;;;;; 102D0;CARIAN LETTER UUU3;Lo;0;L;;;;;N;;;;; 102E0;COPTIC EPACT THOUSANDS MARK;Mn;220;NSM;;;;;N;;;;; 102E1;COPTIC EPACT DIGIT ONE;No;0;EN;;;;1;N;;;;; 102E2;COPTIC EPACT DIGIT TWO;No;0;EN;;;;2;N;;;;; 102E3;COPTIC EPACT DIGIT THREE;No;0;EN;;;;3;N;;;;; 102E4;COPTIC EPACT DIGIT FOUR;No;0;EN;;;;4;N;;;;; 102E5;COPTIC EPACT DIGIT FIVE;No;0;EN;;;;5;N;;;;; 102E6;COPTIC EPACT DIGIT SIX;No;0;EN;;;;6;N;;;;; 102E7;COPTIC EPACT DIGIT SEVEN;No;0;EN;;;;7;N;;;;; 102E8;COPTIC EPACT DIGIT EIGHT;No;0;EN;;;;8;N;;;;; 102E9;COPTIC EPACT DIGIT NINE;No;0;EN;;;;9;N;;;;; 102EA;COPTIC EPACT NUMBER TEN;No;0;EN;;;;10;N;;;;; 102EB;COPTIC EPACT NUMBER TWENTY;No;0;EN;;;;20;N;;;;; 102EC;COPTIC EPACT NUMBER THIRTY;No;0;EN;;;;30;N;;;;; 102ED;COPTIC EPACT NUMBER FORTY;No;0;EN;;;;40;N;;;;; 102EE;COPTIC EPACT NUMBER FIFTY;No;0;EN;;;;50;N;;;;; 102EF;COPTIC EPACT NUMBER SIXTY;No;0;EN;;;;60;N;;;;; 102F0;COPTIC EPACT NUMBER SEVENTY;No;0;EN;;;;70;N;;;;; 102F1;COPTIC EPACT NUMBER EIGHTY;No;0;EN;;;;80;N;;;;; 102F2;COPTIC EPACT NUMBER NINETY;No;0;EN;;;;90;N;;;;; 102F3;COPTIC EPACT NUMBER ONE HUNDRED;No;0;EN;;;;100;N;;;;; 102F4;COPTIC EPACT NUMBER TWO HUNDRED;No;0;EN;;;;200;N;;;;; 102F5;COPTIC EPACT NUMBER THREE HUNDRED;No;0;EN;;;;300;N;;;;; 102F6;COPTIC EPACT NUMBER FOUR HUNDRED;No;0;EN;;;;400;N;;;;; 102F7;COPTIC EPACT NUMBER FIVE HUNDRED;No;0;EN;;;;500;N;;;;; 102F8;COPTIC EPACT NUMBER SIX HUNDRED;No;0;EN;;;;600;N;;;;; 102F9;COPTIC EPACT NUMBER SEVEN HUNDRED;No;0;EN;;;;700;N;;;;; 102FA;COPTIC EPACT NUMBER EIGHT HUNDRED;No;0;EN;;;;800;N;;;;; 102FB;COPTIC EPACT NUMBER NINE HUNDRED;No;0;EN;;;;900;N;;;;; 10300;OLD ITALIC LETTER A;Lo;0;L;;;;;N;;;;; 10301;OLD ITALIC LETTER BE;Lo;0;L;;;;;N;;;;; 10302;OLD ITALIC LETTER KE;Lo;0;L;;;;;N;;;;; 10303;OLD ITALIC LETTER DE;Lo;0;L;;;;;N;;;;; 10304;OLD ITALIC LETTER E;Lo;0;L;;;;;N;;;;; 10305;OLD ITALIC LETTER VE;Lo;0;L;;;;;N;;;;; 10306;OLD ITALIC LETTER ZE;Lo;0;L;;;;;N;;;;; 10307;OLD ITALIC LETTER HE;Lo;0;L;;;;;N;;;;; 10308;OLD ITALIC LETTER THE;Lo;0;L;;;;;N;;;;; 10309;OLD ITALIC LETTER I;Lo;0;L;;;;;N;;;;; 1030A;OLD ITALIC LETTER KA;Lo;0;L;;;;;N;;;;; 1030B;OLD ITALIC LETTER EL;Lo;0;L;;;;;N;;;;; 1030C;OLD ITALIC LETTER EM;Lo;0;L;;;;;N;;;;; 1030D;OLD ITALIC LETTER EN;Lo;0;L;;;;;N;;;;; 1030E;OLD ITALIC LETTER ESH;Lo;0;L;;;;;N;;;;; 1030F;OLD ITALIC LETTER O;Lo;0;L;;;;;N;;;;; 10310;OLD ITALIC LETTER PE;Lo;0;L;;;;;N;;;;; 10311;OLD ITALIC LETTER SHE;Lo;0;L;;;;;N;;;;; 10312;OLD ITALIC LETTER KU;Lo;0;L;;;;;N;;;;; 10313;OLD ITALIC LETTER ER;Lo;0;L;;;;;N;;;;; 10314;OLD ITALIC LETTER ES;Lo;0;L;;;;;N;;;;; 10315;OLD ITALIC LETTER TE;Lo;0;L;;;;;N;;;;; 10316;OLD ITALIC LETTER U;Lo;0;L;;;;;N;;;;; 10317;OLD ITALIC LETTER EKS;Lo;0;L;;;;;N;;;;; 10318;OLD ITALIC LETTER PHE;Lo;0;L;;;;;N;;;;; 10319;OLD ITALIC LETTER KHE;Lo;0;L;;;;;N;;;;; 1031A;OLD ITALIC LETTER EF;Lo;0;L;;;;;N;;;;; 1031B;OLD ITALIC LETTER ERS;Lo;0;L;;;;;N;;;;; 1031C;OLD ITALIC LETTER CHE;Lo;0;L;;;;;N;;;;; 1031D;OLD ITALIC LETTER II;Lo;0;L;;;;;N;;;;; 1031E;OLD ITALIC LETTER UU;Lo;0;L;;;;;N;;;;; 1031F;OLD ITALIC LETTER ESS;Lo;0;L;;;;;N;;;;; 10320;OLD ITALIC NUMERAL ONE;No;0;L;;;;1;N;;;;; 10321;OLD ITALIC NUMERAL FIVE;No;0;L;;;;5;N;;;;; 10322;OLD ITALIC NUMERAL TEN;No;0;L;;;;10;N;;;;; 10323;OLD ITALIC NUMERAL FIFTY;No;0;L;;;;50;N;;;;; 1032D;OLD ITALIC LETTER YE;Lo;0;L;;;;;N;;;;; 1032E;OLD ITALIC LETTER NORTHERN TSE;Lo;0;L;;;;;N;;;;; 1032F;OLD ITALIC LETTER SOUTHERN TSE;Lo;0;L;;;;;N;;;;; 10330;GOTHIC LETTER AHSA;Lo;0;L;;;;;N;;;;; 10331;GOTHIC LETTER BAIRKAN;Lo;0;L;;;;;N;;;;; 10332;GOTHIC LETTER GIBA;Lo;0;L;;;;;N;;;;; 10333;GOTHIC LETTER DAGS;Lo;0;L;;;;;N;;;;; 10334;GOTHIC LETTER AIHVUS;Lo;0;L;;;;;N;;;;; 10335;GOTHIC LETTER QAIRTHRA;Lo;0;L;;;;;N;;;;; 10336;GOTHIC LETTER IUJA;Lo;0;L;;;;;N;;;;; 10337;GOTHIC LETTER HAGL;Lo;0;L;;;;;N;;;;; 10338;GOTHIC LETTER THIUTH;Lo;0;L;;;;;N;;;;; 10339;GOTHIC LETTER EIS;Lo;0;L;;;;;N;;;;; 1033A;GOTHIC LETTER KUSMA;Lo;0;L;;;;;N;;;;; 1033B;GOTHIC LETTER LAGUS;Lo;0;L;;;;;N;;;;; 1033C;GOTHIC LETTER MANNA;Lo;0;L;;;;;N;;;;; 1033D;GOTHIC LETTER NAUTHS;Lo;0;L;;;;;N;;;;; 1033E;GOTHIC LETTER JER;Lo;0;L;;;;;N;;;;; 1033F;GOTHIC LETTER URUS;Lo;0;L;;;;;N;;;;; 10340;GOTHIC LETTER PAIRTHRA;Lo;0;L;;;;;N;;;;; 10341;GOTHIC LETTER NINETY;Nl;0;L;;;;90;N;;;;; 10342;GOTHIC LETTER RAIDA;Lo;0;L;;;;;N;;;;; 10343;GOTHIC LETTER SAUIL;Lo;0;L;;;;;N;;;;; 10344;GOTHIC LETTER TEIWS;Lo;0;L;;;;;N;;;;; 10345;GOTHIC LETTER WINJA;Lo;0;L;;;;;N;;;;; 10346;GOTHIC LETTER FAIHU;Lo;0;L;;;;;N;;;;; 10347;GOTHIC LETTER IGGWS;Lo;0;L;;;;;N;;;;; 10348;GOTHIC LETTER HWAIR;Lo;0;L;;;;;N;;;;; 10349;GOTHIC LETTER OTHAL;Lo;0;L;;;;;N;;;;; 1034A;GOTHIC LETTER NINE HUNDRED;Nl;0;L;;;;900;N;;;;; 10350;OLD PERMIC LETTER AN;Lo;0;L;;;;;N;;;;; 10351;OLD PERMIC LETTER BUR;Lo;0;L;;;;;N;;;;; 10352;OLD PERMIC LETTER GAI;Lo;0;L;;;;;N;;;;; 10353;OLD PERMIC LETTER DOI;Lo;0;L;;;;;N;;;;; 10354;OLD PERMIC LETTER E;Lo;0;L;;;;;N;;;;; 10355;OLD PERMIC LETTER ZHOI;Lo;0;L;;;;;N;;;;; 10356;OLD PERMIC LETTER DZHOI;Lo;0;L;;;;;N;;;;; 10357;OLD PERMIC LETTER ZATA;Lo;0;L;;;;;N;;;;; 10358;OLD PERMIC LETTER DZITA;Lo;0;L;;;;;N;;;;; 10359;OLD PERMIC LETTER I;Lo;0;L;;;;;N;;;;; 1035A;OLD PERMIC LETTER KOKE;Lo;0;L;;;;;N;;;;; 1035B;OLD PERMIC LETTER LEI;Lo;0;L;;;;;N;;;;; 1035C;OLD PERMIC LETTER MENOE;Lo;0;L;;;;;N;;;;; 1035D;OLD PERMIC LETTER NENOE;Lo;0;L;;;;;N;;;;; 1035E;OLD PERMIC LETTER VOOI;Lo;0;L;;;;;N;;;;; 1035F;OLD PERMIC LETTER PEEI;Lo;0;L;;;;;N;;;;; 10360;OLD PERMIC LETTER REI;Lo;0;L;;;;;N;;;;; 10361;OLD PERMIC LETTER SII;Lo;0;L;;;;;N;;;;; 10362;OLD PERMIC LETTER TAI;Lo;0;L;;;;;N;;;;; 10363;OLD PERMIC LETTER U;Lo;0;L;;;;;N;;;;; 10364;OLD PERMIC LETTER CHERY;Lo;0;L;;;;;N;;;;; 10365;OLD PERMIC LETTER SHOOI;Lo;0;L;;;;;N;;;;; 10366;OLD PERMIC LETTER SHCHOOI;Lo;0;L;;;;;N;;;;; 10367;OLD PERMIC LETTER YRY;Lo;0;L;;;;;N;;;;; 10368;OLD PERMIC LETTER YERU;Lo;0;L;;;;;N;;;;; 10369;OLD PERMIC LETTER O;Lo;0;L;;;;;N;;;;; 1036A;OLD PERMIC LETTER OO;Lo;0;L;;;;;N;;;;; 1036B;OLD PERMIC LETTER EF;Lo;0;L;;;;;N;;;;; 1036C;OLD PERMIC LETTER HA;Lo;0;L;;;;;N;;;;; 1036D;OLD PERMIC LETTER TSIU;Lo;0;L;;;;;N;;;;; 1036E;OLD PERMIC LETTER VER;Lo;0;L;;;;;N;;;;; 1036F;OLD PERMIC LETTER YER;Lo;0;L;;;;;N;;;;; 10370;OLD PERMIC LETTER YERI;Lo;0;L;;;;;N;;;;; 10371;OLD PERMIC LETTER YAT;Lo;0;L;;;;;N;;;;; 10372;OLD PERMIC LETTER IE;Lo;0;L;;;;;N;;;;; 10373;OLD PERMIC LETTER YU;Lo;0;L;;;;;N;;;;; 10374;OLD PERMIC LETTER YA;Lo;0;L;;;;;N;;;;; 10375;OLD PERMIC LETTER IA;Lo;0;L;;;;;N;;;;; 10376;COMBINING OLD PERMIC LETTER AN;Mn;230;NSM;;;;;N;;;;; 10377;COMBINING OLD PERMIC LETTER DOI;Mn;230;NSM;;;;;N;;;;; 10378;COMBINING OLD PERMIC LETTER ZATA;Mn;230;NSM;;;;;N;;;;; 10379;COMBINING OLD PERMIC LETTER NENOE;Mn;230;NSM;;;;;N;;;;; 1037A;COMBINING OLD PERMIC LETTER SII;Mn;230;NSM;;;;;N;;;;; 10380;UGARITIC LETTER ALPA;Lo;0;L;;;;;N;;;;; 10381;UGARITIC LETTER BETA;Lo;0;L;;;;;N;;;;; 10382;UGARITIC LETTER GAMLA;Lo;0;L;;;;;N;;;;; 10383;UGARITIC LETTER KHA;Lo;0;L;;;;;N;;;;; 10384;UGARITIC LETTER DELTA;Lo;0;L;;;;;N;;;;; 10385;UGARITIC LETTER HO;Lo;0;L;;;;;N;;;;; 10386;UGARITIC LETTER WO;Lo;0;L;;;;;N;;;;; 10387;UGARITIC LETTER ZETA;Lo;0;L;;;;;N;;;;; 10388;UGARITIC LETTER HOTA;Lo;0;L;;;;;N;;;;; 10389;UGARITIC LETTER TET;Lo;0;L;;;;;N;;;;; 1038A;UGARITIC LETTER YOD;Lo;0;L;;;;;N;;;;; 1038B;UGARITIC LETTER KAF;Lo;0;L;;;;;N;;;;; 1038C;UGARITIC LETTER SHIN;Lo;0;L;;;;;N;;;;; 1038D;UGARITIC LETTER LAMDA;Lo;0;L;;;;;N;;;;; 1038E;UGARITIC LETTER MEM;Lo;0;L;;;;;N;;;;; 1038F;UGARITIC LETTER DHAL;Lo;0;L;;;;;N;;;;; 10390;UGARITIC LETTER NUN;Lo;0;L;;;;;N;;;;; 10391;UGARITIC LETTER ZU;Lo;0;L;;;;;N;;;;; 10392;UGARITIC LETTER SAMKA;Lo;0;L;;;;;N;;;;; 10393;UGARITIC LETTER AIN;Lo;0;L;;;;;N;;;;; 10394;UGARITIC LETTER PU;Lo;0;L;;;;;N;;;;; 10395;UGARITIC LETTER SADE;Lo;0;L;;;;;N;;;;; 10396;UGARITIC LETTER QOPA;Lo;0;L;;;;;N;;;;; 10397;UGARITIC LETTER RASHA;Lo;0;L;;;;;N;;;;; 10398;UGARITIC LETTER THANNA;Lo;0;L;;;;;N;;;;; 10399;UGARITIC LETTER GHAIN;Lo;0;L;;;;;N;;;;; 1039A;UGARITIC LETTER TO;Lo;0;L;;;;;N;;;;; 1039B;UGARITIC LETTER I;Lo;0;L;;;;;N;;;;; 1039C;UGARITIC LETTER U;Lo;0;L;;;;;N;;;;; 1039D;UGARITIC LETTER SSU;Lo;0;L;;;;;N;;;;; 1039F;UGARITIC WORD DIVIDER;Po;0;L;;;;;N;;;;; 103A0;OLD PERSIAN SIGN A;Lo;0;L;;;;;N;;;;; 103A1;OLD PERSIAN SIGN I;Lo;0;L;;;;;N;;;;; 103A2;OLD PERSIAN SIGN U;Lo;0;L;;;;;N;;;;; 103A3;OLD PERSIAN SIGN KA;Lo;0;L;;;;;N;;;;; 103A4;OLD PERSIAN SIGN KU;Lo;0;L;;;;;N;;;;; 103A5;OLD PERSIAN SIGN GA;Lo;0;L;;;;;N;;;;; 103A6;OLD PERSIAN SIGN GU;Lo;0;L;;;;;N;;;;; 103A7;OLD PERSIAN SIGN XA;Lo;0;L;;;;;N;;;;; 103A8;OLD PERSIAN SIGN CA;Lo;0;L;;;;;N;;;;; 103A9;OLD PERSIAN SIGN JA;Lo;0;L;;;;;N;;;;; 103AA;OLD PERSIAN SIGN JI;Lo;0;L;;;;;N;;;;; 103AB;OLD PERSIAN SIGN TA;Lo;0;L;;;;;N;;;;; 103AC;OLD PERSIAN SIGN TU;Lo;0;L;;;;;N;;;;; 103AD;OLD PERSIAN SIGN DA;Lo;0;L;;;;;N;;;;; 103AE;OLD PERSIAN SIGN DI;Lo;0;L;;;;;N;;;;; 103AF;OLD PERSIAN SIGN DU;Lo;0;L;;;;;N;;;;; 103B0;OLD PERSIAN SIGN THA;Lo;0;L;;;;;N;;;;; 103B1;OLD PERSIAN SIGN PA;Lo;0;L;;;;;N;;;;; 103B2;OLD PERSIAN SIGN BA;Lo;0;L;;;;;N;;;;; 103B3;OLD PERSIAN SIGN FA;Lo;0;L;;;;;N;;;;; 103B4;OLD PERSIAN SIGN NA;Lo;0;L;;;;;N;;;;; 103B5;OLD PERSIAN SIGN NU;Lo;0;L;;;;;N;;;;; 103B6;OLD PERSIAN SIGN MA;Lo;0;L;;;;;N;;;;; 103B7;OLD PERSIAN SIGN MI;Lo;0;L;;;;;N;;;;; 103B8;OLD PERSIAN SIGN MU;Lo;0;L;;;;;N;;;;; 103B9;OLD PERSIAN SIGN YA;Lo;0;L;;;;;N;;;;; 103BA;OLD PERSIAN SIGN VA;Lo;0;L;;;;;N;;;;; 103BB;OLD PERSIAN SIGN VI;Lo;0;L;;;;;N;;;;; 103BC;OLD PERSIAN SIGN RA;Lo;0;L;;;;;N;;;;; 103BD;OLD PERSIAN SIGN RU;Lo;0;L;;;;;N;;;;; 103BE;OLD PERSIAN SIGN LA;Lo;0;L;;;;;N;;;;; 103BF;OLD PERSIAN SIGN SA;Lo;0;L;;;;;N;;;;; 103C0;OLD PERSIAN SIGN ZA;Lo;0;L;;;;;N;;;;; 103C1;OLD PERSIAN SIGN SHA;Lo;0;L;;;;;N;;;;; 103C2;OLD PERSIAN SIGN SSA;Lo;0;L;;;;;N;;;;; 103C3;OLD PERSIAN SIGN HA;Lo;0;L;;;;;N;;;;; 103C8;OLD PERSIAN SIGN AURAMAZDAA;Lo;0;L;;;;;N;;;;; 103C9;OLD PERSIAN SIGN AURAMAZDAA-2;Lo;0;L;;;;;N;;;;; 103CA;OLD PERSIAN SIGN AURAMAZDAAHA;Lo;0;L;;;;;N;;;;; 103CB;OLD PERSIAN SIGN XSHAAYATHIYA;Lo;0;L;;;;;N;;;;; 103CC;OLD PERSIAN SIGN DAHYAAUSH;Lo;0;L;;;;;N;;;;; 103CD;OLD PERSIAN SIGN DAHYAAUSH-2;Lo;0;L;;;;;N;;;;; 103CE;OLD PERSIAN SIGN BAGA;Lo;0;L;;;;;N;;;;; 103CF;OLD PERSIAN SIGN BUUMISH;Lo;0;L;;;;;N;;;;; 103D0;OLD PERSIAN WORD DIVIDER;Po;0;L;;;;;N;;;;; 103D1;OLD PERSIAN NUMBER ONE;Nl;0;L;;;;1;N;;;;; 103D2;OLD PERSIAN NUMBER TWO;Nl;0;L;;;;2;N;;;;; 103D3;OLD PERSIAN NUMBER TEN;Nl;0;L;;;;10;N;;;;; 103D4;OLD PERSIAN NUMBER TWENTY;Nl;0;L;;;;20;N;;;;; 103D5;OLD PERSIAN NUMBER HUNDRED;Nl;0;L;;;;100;N;;;;; 10400;DESERET CAPITAL LETTER LONG I;Lu;0;L;;;;;N;;;;10428; 10401;DESERET CAPITAL LETTER LONG E;Lu;0;L;;;;;N;;;;10429; 10402;DESERET CAPITAL LETTER LONG A;Lu;0;L;;;;;N;;;;1042A; 10403;DESERET CAPITAL LETTER LONG AH;Lu;0;L;;;;;N;;;;1042B; 10404;DESERET CAPITAL LETTER LONG O;Lu;0;L;;;;;N;;;;1042C; 10405;DESERET CAPITAL LETTER LONG OO;Lu;0;L;;;;;N;;;;1042D; 10406;DESERET CAPITAL LETTER SHORT I;Lu;0;L;;;;;N;;;;1042E; 10407;DESERET CAPITAL LETTER SHORT E;Lu;0;L;;;;;N;;;;1042F; 10408;DESERET CAPITAL LETTER SHORT A;Lu;0;L;;;;;N;;;;10430; 10409;DESERET CAPITAL LETTER SHORT AH;Lu;0;L;;;;;N;;;;10431; 1040A;DESERET CAPITAL LETTER SHORT O;Lu;0;L;;;;;N;;;;10432; 1040B;DESERET CAPITAL LETTER SHORT OO;Lu;0;L;;;;;N;;;;10433; 1040C;DESERET CAPITAL LETTER AY;Lu;0;L;;;;;N;;;;10434; 1040D;DESERET CAPITAL LETTER OW;Lu;0;L;;;;;N;;;;10435; 1040E;DESERET CAPITAL LETTER WU;Lu;0;L;;;;;N;;;;10436; 1040F;DESERET CAPITAL LETTER YEE;Lu;0;L;;;;;N;;;;10437; 10410;DESERET CAPITAL LETTER H;Lu;0;L;;;;;N;;;;10438; 10411;DESERET CAPITAL LETTER PEE;Lu;0;L;;;;;N;;;;10439; 10412;DESERET CAPITAL LETTER BEE;Lu;0;L;;;;;N;;;;1043A; 10413;DESERET CAPITAL LETTER TEE;Lu;0;L;;;;;N;;;;1043B; 10414;DESERET CAPITAL LETTER DEE;Lu;0;L;;;;;N;;;;1043C; 10415;DESERET CAPITAL LETTER CHEE;Lu;0;L;;;;;N;;;;1043D; 10416;DESERET CAPITAL LETTER JEE;Lu;0;L;;;;;N;;;;1043E; 10417;DESERET CAPITAL LETTER KAY;Lu;0;L;;;;;N;;;;1043F; 10418;DESERET CAPITAL LETTER GAY;Lu;0;L;;;;;N;;;;10440; 10419;DESERET CAPITAL LETTER EF;Lu;0;L;;;;;N;;;;10441; 1041A;DESERET CAPITAL LETTER VEE;Lu;0;L;;;;;N;;;;10442; 1041B;DESERET CAPITAL LETTER ETH;Lu;0;L;;;;;N;;;;10443; 1041C;DESERET CAPITAL LETTER THEE;Lu;0;L;;;;;N;;;;10444; 1041D;DESERET CAPITAL LETTER ES;Lu;0;L;;;;;N;;;;10445; 1041E;DESERET CAPITAL LETTER ZEE;Lu;0;L;;;;;N;;;;10446; 1041F;DESERET CAPITAL LETTER ESH;Lu;0;L;;;;;N;;;;10447; 10420;DESERET CAPITAL LETTER ZHEE;Lu;0;L;;;;;N;;;;10448; 10421;DESERET CAPITAL LETTER ER;Lu;0;L;;;;;N;;;;10449; 10422;DESERET CAPITAL LETTER EL;Lu;0;L;;;;;N;;;;1044A; 10423;DESERET CAPITAL LETTER EM;Lu;0;L;;;;;N;;;;1044B; 10424;DESERET CAPITAL LETTER EN;Lu;0;L;;;;;N;;;;1044C; 10425;DESERET CAPITAL LETTER ENG;Lu;0;L;;;;;N;;;;1044D; 10426;DESERET CAPITAL LETTER OI;Lu;0;L;;;;;N;;;;1044E; 10427;DESERET CAPITAL LETTER EW;Lu;0;L;;;;;N;;;;1044F; 10428;DESERET SMALL LETTER LONG I;Ll;0;L;;;;;N;;;10400;;10400 10429;DESERET SMALL LETTER LONG E;Ll;0;L;;;;;N;;;10401;;10401 1042A;DESERET SMALL LETTER LONG A;Ll;0;L;;;;;N;;;10402;;10402 1042B;DESERET SMALL LETTER LONG AH;Ll;0;L;;;;;N;;;10403;;10403 1042C;DESERET SMALL LETTER LONG O;Ll;0;L;;;;;N;;;10404;;10404 1042D;DESERET SMALL LETTER LONG OO;Ll;0;L;;;;;N;;;10405;;10405 1042E;DESERET SMALL LETTER SHORT I;Ll;0;L;;;;;N;;;10406;;10406 1042F;DESERET SMALL LETTER SHORT E;Ll;0;L;;;;;N;;;10407;;10407 10430;DESERET SMALL LETTER SHORT A;Ll;0;L;;;;;N;;;10408;;10408 10431;DESERET SMALL LETTER SHORT AH;Ll;0;L;;;;;N;;;10409;;10409 10432;DESERET SMALL LETTER SHORT O;Ll;0;L;;;;;N;;;1040A;;1040A 10433;DESERET SMALL LETTER SHORT OO;Ll;0;L;;;;;N;;;1040B;;1040B 10434;DESERET SMALL LETTER AY;Ll;0;L;;;;;N;;;1040C;;1040C 10435;DESERET SMALL LETTER OW;Ll;0;L;;;;;N;;;1040D;;1040D 10436;DESERET SMALL LETTER WU;Ll;0;L;;;;;N;;;1040E;;1040E 10437;DESERET SMALL LETTER YEE;Ll;0;L;;;;;N;;;1040F;;1040F 10438;DESERET SMALL LETTER H;Ll;0;L;;;;;N;;;10410;;10410 10439;DESERET SMALL LETTER PEE;Ll;0;L;;;;;N;;;10411;;10411 1043A;DESERET SMALL LETTER BEE;Ll;0;L;;;;;N;;;10412;;10412 1043B;DESERET SMALL LETTER TEE;Ll;0;L;;;;;N;;;10413;;10413 1043C;DESERET SMALL LETTER DEE;Ll;0;L;;;;;N;;;10414;;10414 1043D;DESERET SMALL LETTER CHEE;Ll;0;L;;;;;N;;;10415;;10415 1043E;DESERET SMALL LETTER JEE;Ll;0;L;;;;;N;;;10416;;10416 1043F;DESERET SMALL LETTER KAY;Ll;0;L;;;;;N;;;10417;;10417 10440;DESERET SMALL LETTER GAY;Ll;0;L;;;;;N;;;10418;;10418 10441;DESERET SMALL LETTER EF;Ll;0;L;;;;;N;;;10419;;10419 10442;DESERET SMALL LETTER VEE;Ll;0;L;;;;;N;;;1041A;;1041A 10443;DESERET SMALL LETTER ETH;Ll;0;L;;;;;N;;;1041B;;1041B 10444;DESERET SMALL LETTER THEE;Ll;0;L;;;;;N;;;1041C;;1041C 10445;DESERET SMALL LETTER ES;Ll;0;L;;;;;N;;;1041D;;1041D 10446;DESERET SMALL LETTER ZEE;Ll;0;L;;;;;N;;;1041E;;1041E 10447;DESERET SMALL LETTER ESH;Ll;0;L;;;;;N;;;1041F;;1041F 10448;DESERET SMALL LETTER ZHEE;Ll;0;L;;;;;N;;;10420;;10420 10449;DESERET SMALL LETTER ER;Ll;0;L;;;;;N;;;10421;;10421 1044A;DESERET SMALL LETTER EL;Ll;0;L;;;;;N;;;10422;;10422 1044B;DESERET SMALL LETTER EM;Ll;0;L;;;;;N;;;10423;;10423 1044C;DESERET SMALL LETTER EN;Ll;0;L;;;;;N;;;10424;;10424 1044D;DESERET SMALL LETTER ENG;Ll;0;L;;;;;N;;;10425;;10425 1044E;DESERET SMALL LETTER OI;Ll;0;L;;;;;N;;;10426;;10426 1044F;DESERET SMALL LETTER EW;Ll;0;L;;;;;N;;;10427;;10427 10450;SHAVIAN LETTER PEEP;Lo;0;L;;;;;N;;;;; 10451;SHAVIAN LETTER TOT;Lo;0;L;;;;;N;;;;; 10452;SHAVIAN LETTER KICK;Lo;0;L;;;;;N;;;;; 10453;SHAVIAN LETTER FEE;Lo;0;L;;;;;N;;;;; 10454;SHAVIAN LETTER THIGH;Lo;0;L;;;;;N;;;;; 10455;SHAVIAN LETTER SO;Lo;0;L;;;;;N;;;;; 10456;SHAVIAN LETTER SURE;Lo;0;L;;;;;N;;;;; 10457;SHAVIAN LETTER CHURCH;Lo;0;L;;;;;N;;;;; 10458;SHAVIAN LETTER YEA;Lo;0;L;;;;;N;;;;; 10459;SHAVIAN LETTER HUNG;Lo;0;L;;;;;N;;;;; 1045A;SHAVIAN LETTER BIB;Lo;0;L;;;;;N;;;;; 1045B;SHAVIAN LETTER DEAD;Lo;0;L;;;;;N;;;;; 1045C;SHAVIAN LETTER GAG;Lo;0;L;;;;;N;;;;; 1045D;SHAVIAN LETTER VOW;Lo;0;L;;;;;N;;;;; 1045E;SHAVIAN LETTER THEY;Lo;0;L;;;;;N;;;;; 1045F;SHAVIAN LETTER ZOO;Lo;0;L;;;;;N;;;;; 10460;SHAVIAN LETTER MEASURE;Lo;0;L;;;;;N;;;;; 10461;SHAVIAN LETTER JUDGE;Lo;0;L;;;;;N;;;;; 10462;SHAVIAN LETTER WOE;Lo;0;L;;;;;N;;;;; 10463;SHAVIAN LETTER HA-HA;Lo;0;L;;;;;N;;;;; 10464;SHAVIAN LETTER LOLL;Lo;0;L;;;;;N;;;;; 10465;SHAVIAN LETTER MIME;Lo;0;L;;;;;N;;;;; 10466;SHAVIAN LETTER IF;Lo;0;L;;;;;N;;;;; 10467;SHAVIAN LETTER EGG;Lo;0;L;;;;;N;;;;; 10468;SHAVIAN LETTER ASH;Lo;0;L;;;;;N;;;;; 10469;SHAVIAN LETTER ADO;Lo;0;L;;;;;N;;;;; 1046A;SHAVIAN LETTER ON;Lo;0;L;;;;;N;;;;; 1046B;SHAVIAN LETTER WOOL;Lo;0;L;;;;;N;;;;; 1046C;SHAVIAN LETTER OUT;Lo;0;L;;;;;N;;;;; 1046D;SHAVIAN LETTER AH;Lo;0;L;;;;;N;;;;; 1046E;SHAVIAN LETTER ROAR;Lo;0;L;;;;;N;;;;; 1046F;SHAVIAN LETTER NUN;Lo;0;L;;;;;N;;;;; 10470;SHAVIAN LETTER EAT;Lo;0;L;;;;;N;;;;; 10471;SHAVIAN LETTER AGE;Lo;0;L;;;;;N;;;;; 10472;SHAVIAN LETTER ICE;Lo;0;L;;;;;N;;;;; 10473;SHAVIAN LETTER UP;Lo;0;L;;;;;N;;;;; 10474;SHAVIAN LETTER OAK;Lo;0;L;;;;;N;;;;; 10475;SHAVIAN LETTER OOZE;Lo;0;L;;;;;N;;;;; 10476;SHAVIAN LETTER OIL;Lo;0;L;;;;;N;;;;; 10477;SHAVIAN LETTER AWE;Lo;0;L;;;;;N;;;;; 10478;SHAVIAN LETTER ARE;Lo;0;L;;;;;N;;;;; 10479;SHAVIAN LETTER OR;Lo;0;L;;;;;N;;;;; 1047A;SHAVIAN LETTER AIR;Lo;0;L;;;;;N;;;;; 1047B;SHAVIAN LETTER ERR;Lo;0;L;;;;;N;;;;; 1047C;SHAVIAN LETTER ARRAY;Lo;0;L;;;;;N;;;;; 1047D;SHAVIAN LETTER EAR;Lo;0;L;;;;;N;;;;; 1047E;SHAVIAN LETTER IAN;Lo;0;L;;;;;N;;;;; 1047F;SHAVIAN LETTER YEW;Lo;0;L;;;;;N;;;;; 10480;OSMANYA LETTER ALEF;Lo;0;L;;;;;N;;;;; 10481;OSMANYA LETTER BA;Lo;0;L;;;;;N;;;;; 10482;OSMANYA LETTER TA;Lo;0;L;;;;;N;;;;; 10483;OSMANYA LETTER JA;Lo;0;L;;;;;N;;;;; 10484;OSMANYA LETTER XA;Lo;0;L;;;;;N;;;;; 10485;OSMANYA LETTER KHA;Lo;0;L;;;;;N;;;;; 10486;OSMANYA LETTER DEEL;Lo;0;L;;;;;N;;;;; 10487;OSMANYA LETTER RA;Lo;0;L;;;;;N;;;;; 10488;OSMANYA LETTER SA;Lo;0;L;;;;;N;;;;; 10489;OSMANYA LETTER SHIIN;Lo;0;L;;;;;N;;;;; 1048A;OSMANYA LETTER DHA;Lo;0;L;;;;;N;;;;; 1048B;OSMANYA LETTER CAYN;Lo;0;L;;;;;N;;;;; 1048C;OSMANYA LETTER GA;Lo;0;L;;;;;N;;;;; 1048D;OSMANYA LETTER FA;Lo;0;L;;;;;N;;;;; 1048E;OSMANYA LETTER QAAF;Lo;0;L;;;;;N;;;;; 1048F;OSMANYA LETTER KAAF;Lo;0;L;;;;;N;;;;; 10490;OSMANYA LETTER LAAN;Lo;0;L;;;;;N;;;;; 10491;OSMANYA LETTER MIIN;Lo;0;L;;;;;N;;;;; 10492;OSMANYA LETTER NUUN;Lo;0;L;;;;;N;;;;; 10493;OSMANYA LETTER WAW;Lo;0;L;;;;;N;;;;; 10494;OSMANYA LETTER HA;Lo;0;L;;;;;N;;;;; 10495;OSMANYA LETTER YA;Lo;0;L;;;;;N;;;;; 10496;OSMANYA LETTER A;Lo;0;L;;;;;N;;;;; 10497;OSMANYA LETTER E;Lo;0;L;;;;;N;;;;; 10498;OSMANYA LETTER I;Lo;0;L;;;;;N;;;;; 10499;OSMANYA LETTER O;Lo;0;L;;;;;N;;;;; 1049A;OSMANYA LETTER U;Lo;0;L;;;;;N;;;;; 1049B;OSMANYA LETTER AA;Lo;0;L;;;;;N;;;;; 1049C;OSMANYA LETTER EE;Lo;0;L;;;;;N;;;;; 1049D;OSMANYA LETTER OO;Lo;0;L;;;;;N;;;;; 104A0;OSMANYA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 104A1;OSMANYA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 104A2;OSMANYA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 104A3;OSMANYA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 104A4;OSMANYA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 104A5;OSMANYA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 104A6;OSMANYA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 104A7;OSMANYA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 104A8;OSMANYA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 104A9;OSMANYA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 104B0;OSAGE CAPITAL LETTER A;Lu;0;L;;;;;N;;;;104D8; 104B1;OSAGE CAPITAL LETTER AI;Lu;0;L;;;;;N;;;;104D9; 104B2;OSAGE CAPITAL LETTER AIN;Lu;0;L;;;;;N;;;;104DA; 104B3;OSAGE CAPITAL LETTER AH;Lu;0;L;;;;;N;;;;104DB; 104B4;OSAGE CAPITAL LETTER BRA;Lu;0;L;;;;;N;;;;104DC; 104B5;OSAGE CAPITAL LETTER CHA;Lu;0;L;;;;;N;;;;104DD; 104B6;OSAGE CAPITAL LETTER EHCHA;Lu;0;L;;;;;N;;;;104DE; 104B7;OSAGE CAPITAL LETTER E;Lu;0;L;;;;;N;;;;104DF; 104B8;OSAGE CAPITAL LETTER EIN;Lu;0;L;;;;;N;;;;104E0; 104B9;OSAGE CAPITAL LETTER HA;Lu;0;L;;;;;N;;;;104E1; 104BA;OSAGE CAPITAL LETTER HYA;Lu;0;L;;;;;N;;;;104E2; 104BB;OSAGE CAPITAL LETTER I;Lu;0;L;;;;;N;;;;104E3; 104BC;OSAGE CAPITAL LETTER KA;Lu;0;L;;;;;N;;;;104E4; 104BD;OSAGE CAPITAL LETTER EHKA;Lu;0;L;;;;;N;;;;104E5; 104BE;OSAGE CAPITAL LETTER KYA;Lu;0;L;;;;;N;;;;104E6; 104BF;OSAGE CAPITAL LETTER LA;Lu;0;L;;;;;N;;;;104E7; 104C0;OSAGE CAPITAL LETTER MA;Lu;0;L;;;;;N;;;;104E8; 104C1;OSAGE CAPITAL LETTER NA;Lu;0;L;;;;;N;;;;104E9; 104C2;OSAGE CAPITAL LETTER O;Lu;0;L;;;;;N;;;;104EA; 104C3;OSAGE CAPITAL LETTER OIN;Lu;0;L;;;;;N;;;;104EB; 104C4;OSAGE CAPITAL LETTER PA;Lu;0;L;;;;;N;;;;104EC; 104C5;OSAGE CAPITAL LETTER EHPA;Lu;0;L;;;;;N;;;;104ED; 104C6;OSAGE CAPITAL LETTER SA;Lu;0;L;;;;;N;;;;104EE; 104C7;OSAGE CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;104EF; 104C8;OSAGE CAPITAL LETTER TA;Lu;0;L;;;;;N;;;;104F0; 104C9;OSAGE CAPITAL LETTER EHTA;Lu;0;L;;;;;N;;;;104F1; 104CA;OSAGE CAPITAL LETTER TSA;Lu;0;L;;;;;N;;;;104F2; 104CB;OSAGE CAPITAL LETTER EHTSA;Lu;0;L;;;;;N;;;;104F3; 104CC;OSAGE CAPITAL LETTER TSHA;Lu;0;L;;;;;N;;;;104F4; 104CD;OSAGE CAPITAL LETTER DHA;Lu;0;L;;;;;N;;;;104F5; 104CE;OSAGE CAPITAL LETTER U;Lu;0;L;;;;;N;;;;104F6; 104CF;OSAGE CAPITAL LETTER WA;Lu;0;L;;;;;N;;;;104F7; 104D0;OSAGE CAPITAL LETTER KHA;Lu;0;L;;;;;N;;;;104F8; 104D1;OSAGE CAPITAL LETTER GHA;Lu;0;L;;;;;N;;;;104F9; 104D2;OSAGE CAPITAL LETTER ZA;Lu;0;L;;;;;N;;;;104FA; 104D3;OSAGE CAPITAL LETTER ZHA;Lu;0;L;;;;;N;;;;104FB; 104D8;OSAGE SMALL LETTER A;Ll;0;L;;;;;N;;;104B0;;104B0 104D9;OSAGE SMALL LETTER AI;Ll;0;L;;;;;N;;;104B1;;104B1 104DA;OSAGE SMALL LETTER AIN;Ll;0;L;;;;;N;;;104B2;;104B2 104DB;OSAGE SMALL LETTER AH;Ll;0;L;;;;;N;;;104B3;;104B3 104DC;OSAGE SMALL LETTER BRA;Ll;0;L;;;;;N;;;104B4;;104B4 104DD;OSAGE SMALL LETTER CHA;Ll;0;L;;;;;N;;;104B5;;104B5 104DE;OSAGE SMALL LETTER EHCHA;Ll;0;L;;;;;N;;;104B6;;104B6 104DF;OSAGE SMALL LETTER E;Ll;0;L;;;;;N;;;104B7;;104B7 104E0;OSAGE SMALL LETTER EIN;Ll;0;L;;;;;N;;;104B8;;104B8 104E1;OSAGE SMALL LETTER HA;Ll;0;L;;;;;N;;;104B9;;104B9 104E2;OSAGE SMALL LETTER HYA;Ll;0;L;;;;;N;;;104BA;;104BA 104E3;OSAGE SMALL LETTER I;Ll;0;L;;;;;N;;;104BB;;104BB 104E4;OSAGE SMALL LETTER KA;Ll;0;L;;;;;N;;;104BC;;104BC 104E5;OSAGE SMALL LETTER EHKA;Ll;0;L;;;;;N;;;104BD;;104BD 104E6;OSAGE SMALL LETTER KYA;Ll;0;L;;;;;N;;;104BE;;104BE 104E7;OSAGE SMALL LETTER LA;Ll;0;L;;;;;N;;;104BF;;104BF 104E8;OSAGE SMALL LETTER MA;Ll;0;L;;;;;N;;;104C0;;104C0 104E9;OSAGE SMALL LETTER NA;Ll;0;L;;;;;N;;;104C1;;104C1 104EA;OSAGE SMALL LETTER O;Ll;0;L;;;;;N;;;104C2;;104C2 104EB;OSAGE SMALL LETTER OIN;Ll;0;L;;;;;N;;;104C3;;104C3 104EC;OSAGE SMALL LETTER PA;Ll;0;L;;;;;N;;;104C4;;104C4 104ED;OSAGE SMALL LETTER EHPA;Ll;0;L;;;;;N;;;104C5;;104C5 104EE;OSAGE SMALL LETTER SA;Ll;0;L;;;;;N;;;104C6;;104C6 104EF;OSAGE SMALL LETTER SHA;Ll;0;L;;;;;N;;;104C7;;104C7 104F0;OSAGE SMALL LETTER TA;Ll;0;L;;;;;N;;;104C8;;104C8 104F1;OSAGE SMALL LETTER EHTA;Ll;0;L;;;;;N;;;104C9;;104C9 104F2;OSAGE SMALL LETTER TSA;Ll;0;L;;;;;N;;;104CA;;104CA 104F3;OSAGE SMALL LETTER EHTSA;Ll;0;L;;;;;N;;;104CB;;104CB 104F4;OSAGE SMALL LETTER TSHA;Ll;0;L;;;;;N;;;104CC;;104CC 104F5;OSAGE SMALL LETTER DHA;Ll;0;L;;;;;N;;;104CD;;104CD 104F6;OSAGE SMALL LETTER U;Ll;0;L;;;;;N;;;104CE;;104CE 104F7;OSAGE SMALL LETTER WA;Ll;0;L;;;;;N;;;104CF;;104CF 104F8;OSAGE SMALL LETTER KHA;Ll;0;L;;;;;N;;;104D0;;104D0 104F9;OSAGE SMALL LETTER GHA;Ll;0;L;;;;;N;;;104D1;;104D1 104FA;OSAGE SMALL LETTER ZA;Ll;0;L;;;;;N;;;104D2;;104D2 104FB;OSAGE SMALL LETTER ZHA;Ll;0;L;;;;;N;;;104D3;;104D3 10500;ELBASAN LETTER A;Lo;0;L;;;;;N;;;;; 10501;ELBASAN LETTER BE;Lo;0;L;;;;;N;;;;; 10502;ELBASAN LETTER CE;Lo;0;L;;;;;N;;;;; 10503;ELBASAN LETTER CHE;Lo;0;L;;;;;N;;;;; 10504;ELBASAN LETTER DE;Lo;0;L;;;;;N;;;;; 10505;ELBASAN LETTER NDE;Lo;0;L;;;;;N;;;;; 10506;ELBASAN LETTER DHE;Lo;0;L;;;;;N;;;;; 10507;ELBASAN LETTER EI;Lo;0;L;;;;;N;;;;; 10508;ELBASAN LETTER E;Lo;0;L;;;;;N;;;;; 10509;ELBASAN LETTER FE;Lo;0;L;;;;;N;;;;; 1050A;ELBASAN LETTER GE;Lo;0;L;;;;;N;;;;; 1050B;ELBASAN LETTER GJE;Lo;0;L;;;;;N;;;;; 1050C;ELBASAN LETTER HE;Lo;0;L;;;;;N;;;;; 1050D;ELBASAN LETTER I;Lo;0;L;;;;;N;;;;; 1050E;ELBASAN LETTER JE;Lo;0;L;;;;;N;;;;; 1050F;ELBASAN LETTER KE;Lo;0;L;;;;;N;;;;; 10510;ELBASAN LETTER LE;Lo;0;L;;;;;N;;;;; 10511;ELBASAN LETTER LLE;Lo;0;L;;;;;N;;;;; 10512;ELBASAN LETTER ME;Lo;0;L;;;;;N;;;;; 10513;ELBASAN LETTER NE;Lo;0;L;;;;;N;;;;; 10514;ELBASAN LETTER NA;Lo;0;L;;;;;N;;;;; 10515;ELBASAN LETTER NJE;Lo;0;L;;;;;N;;;;; 10516;ELBASAN LETTER O;Lo;0;L;;;;;N;;;;; 10517;ELBASAN LETTER PE;Lo;0;L;;;;;N;;;;; 10518;ELBASAN LETTER QE;Lo;0;L;;;;;N;;;;; 10519;ELBASAN LETTER RE;Lo;0;L;;;;;N;;;;; 1051A;ELBASAN LETTER RRE;Lo;0;L;;;;;N;;;;; 1051B;ELBASAN LETTER SE;Lo;0;L;;;;;N;;;;; 1051C;ELBASAN LETTER SHE;Lo;0;L;;;;;N;;;;; 1051D;ELBASAN LETTER TE;Lo;0;L;;;;;N;;;;; 1051E;ELBASAN LETTER THE;Lo;0;L;;;;;N;;;;; 1051F;ELBASAN LETTER U;Lo;0;L;;;;;N;;;;; 10520;ELBASAN LETTER VE;Lo;0;L;;;;;N;;;;; 10521;ELBASAN LETTER XE;Lo;0;L;;;;;N;;;;; 10522;ELBASAN LETTER Y;Lo;0;L;;;;;N;;;;; 10523;ELBASAN LETTER ZE;Lo;0;L;;;;;N;;;;; 10524;ELBASAN LETTER ZHE;Lo;0;L;;;;;N;;;;; 10525;ELBASAN LETTER GHE;Lo;0;L;;;;;N;;;;; 10526;ELBASAN LETTER GHAMMA;Lo;0;L;;;;;N;;;;; 10527;ELBASAN LETTER KHE;Lo;0;L;;;;;N;;;;; 10530;CAUCASIAN ALBANIAN LETTER ALT;Lo;0;L;;;;;N;;;;; 10531;CAUCASIAN ALBANIAN LETTER BET;Lo;0;L;;;;;N;;;;; 10532;CAUCASIAN ALBANIAN LETTER GIM;Lo;0;L;;;;;N;;;;; 10533;CAUCASIAN ALBANIAN LETTER DAT;Lo;0;L;;;;;N;;;;; 10534;CAUCASIAN ALBANIAN LETTER EB;Lo;0;L;;;;;N;;;;; 10535;CAUCASIAN ALBANIAN LETTER ZARL;Lo;0;L;;;;;N;;;;; 10536;CAUCASIAN ALBANIAN LETTER EYN;Lo;0;L;;;;;N;;;;; 10537;CAUCASIAN ALBANIAN LETTER ZHIL;Lo;0;L;;;;;N;;;;; 10538;CAUCASIAN ALBANIAN LETTER TAS;Lo;0;L;;;;;N;;;;; 10539;CAUCASIAN ALBANIAN LETTER CHA;Lo;0;L;;;;;N;;;;; 1053A;CAUCASIAN ALBANIAN LETTER YOWD;Lo;0;L;;;;;N;;;;; 1053B;CAUCASIAN ALBANIAN LETTER ZHA;Lo;0;L;;;;;N;;;;; 1053C;CAUCASIAN ALBANIAN LETTER IRB;Lo;0;L;;;;;N;;;;; 1053D;CAUCASIAN ALBANIAN LETTER SHA;Lo;0;L;;;;;N;;;;; 1053E;CAUCASIAN ALBANIAN LETTER LAN;Lo;0;L;;;;;N;;;;; 1053F;CAUCASIAN ALBANIAN LETTER INYA;Lo;0;L;;;;;N;;;;; 10540;CAUCASIAN ALBANIAN LETTER XEYN;Lo;0;L;;;;;N;;;;; 10541;CAUCASIAN ALBANIAN LETTER DYAN;Lo;0;L;;;;;N;;;;; 10542;CAUCASIAN ALBANIAN LETTER CAR;Lo;0;L;;;;;N;;;;; 10543;CAUCASIAN ALBANIAN LETTER JHOX;Lo;0;L;;;;;N;;;;; 10544;CAUCASIAN ALBANIAN LETTER KAR;Lo;0;L;;;;;N;;;;; 10545;CAUCASIAN ALBANIAN LETTER LYIT;Lo;0;L;;;;;N;;;;; 10546;CAUCASIAN ALBANIAN LETTER HEYT;Lo;0;L;;;;;N;;;;; 10547;CAUCASIAN ALBANIAN LETTER QAY;Lo;0;L;;;;;N;;;;; 10548;CAUCASIAN ALBANIAN LETTER AOR;Lo;0;L;;;;;N;;;;; 10549;CAUCASIAN ALBANIAN LETTER CHOY;Lo;0;L;;;;;N;;;;; 1054A;CAUCASIAN ALBANIAN LETTER CHI;Lo;0;L;;;;;N;;;;; 1054B;CAUCASIAN ALBANIAN LETTER CYAY;Lo;0;L;;;;;N;;;;; 1054C;CAUCASIAN ALBANIAN LETTER MAQ;Lo;0;L;;;;;N;;;;; 1054D;CAUCASIAN ALBANIAN LETTER QAR;Lo;0;L;;;;;N;;;;; 1054E;CAUCASIAN ALBANIAN LETTER NOWC;Lo;0;L;;;;;N;;;;; 1054F;CAUCASIAN ALBANIAN LETTER DZYAY;Lo;0;L;;;;;N;;;;; 10550;CAUCASIAN ALBANIAN LETTER SHAK;Lo;0;L;;;;;N;;;;; 10551;CAUCASIAN ALBANIAN LETTER JAYN;Lo;0;L;;;;;N;;;;; 10552;CAUCASIAN ALBANIAN LETTER ON;Lo;0;L;;;;;N;;;;; 10553;CAUCASIAN ALBANIAN LETTER TYAY;Lo;0;L;;;;;N;;;;; 10554;CAUCASIAN ALBANIAN LETTER FAM;Lo;0;L;;;;;N;;;;; 10555;CAUCASIAN ALBANIAN LETTER DZAY;Lo;0;L;;;;;N;;;;; 10556;CAUCASIAN ALBANIAN LETTER CHAT;Lo;0;L;;;;;N;;;;; 10557;CAUCASIAN ALBANIAN LETTER PEN;Lo;0;L;;;;;N;;;;; 10558;CAUCASIAN ALBANIAN LETTER GHEYS;Lo;0;L;;;;;N;;;;; 10559;CAUCASIAN ALBANIAN LETTER RAT;Lo;0;L;;;;;N;;;;; 1055A;CAUCASIAN ALBANIAN LETTER SEYK;Lo;0;L;;;;;N;;;;; 1055B;CAUCASIAN ALBANIAN LETTER VEYZ;Lo;0;L;;;;;N;;;;; 1055C;CAUCASIAN ALBANIAN LETTER TIWR;Lo;0;L;;;;;N;;;;; 1055D;CAUCASIAN ALBANIAN LETTER SHOY;Lo;0;L;;;;;N;;;;; 1055E;CAUCASIAN ALBANIAN LETTER IWN;Lo;0;L;;;;;N;;;;; 1055F;CAUCASIAN ALBANIAN LETTER CYAW;Lo;0;L;;;;;N;;;;; 10560;CAUCASIAN ALBANIAN LETTER CAYN;Lo;0;L;;;;;N;;;;; 10561;CAUCASIAN ALBANIAN LETTER YAYD;Lo;0;L;;;;;N;;;;; 10562;CAUCASIAN ALBANIAN LETTER PIWR;Lo;0;L;;;;;N;;;;; 10563;CAUCASIAN ALBANIAN LETTER KIW;Lo;0;L;;;;;N;;;;; 1056F;CAUCASIAN ALBANIAN CITATION MARK;Po;0;L;;;;;N;;;;; 10570;VITHKUQI CAPITAL LETTER A;Lu;0;L;;;;;N;;;;10597; 10571;VITHKUQI CAPITAL LETTER BBE;Lu;0;L;;;;;N;;;;10598; 10572;VITHKUQI CAPITAL LETTER BE;Lu;0;L;;;;;N;;;;10599; 10573;VITHKUQI CAPITAL LETTER CE;Lu;0;L;;;;;N;;;;1059A; 10574;VITHKUQI CAPITAL LETTER CHE;Lu;0;L;;;;;N;;;;1059B; 10575;VITHKUQI CAPITAL LETTER DE;Lu;0;L;;;;;N;;;;1059C; 10576;VITHKUQI CAPITAL LETTER DHE;Lu;0;L;;;;;N;;;;1059D; 10577;VITHKUQI CAPITAL LETTER EI;Lu;0;L;;;;;N;;;;1059E; 10578;VITHKUQI CAPITAL LETTER E;Lu;0;L;;;;;N;;;;1059F; 10579;VITHKUQI CAPITAL LETTER FE;Lu;0;L;;;;;N;;;;105A0; 1057A;VITHKUQI CAPITAL LETTER GA;Lu;0;L;;;;;N;;;;105A1; 1057C;VITHKUQI CAPITAL LETTER HA;Lu;0;L;;;;;N;;;;105A3; 1057D;VITHKUQI CAPITAL LETTER HHA;Lu;0;L;;;;;N;;;;105A4; 1057E;VITHKUQI CAPITAL LETTER I;Lu;0;L;;;;;N;;;;105A5; 1057F;VITHKUQI CAPITAL LETTER IJE;Lu;0;L;;;;;N;;;;105A6; 10580;VITHKUQI CAPITAL LETTER JE;Lu;0;L;;;;;N;;;;105A7; 10581;VITHKUQI CAPITAL LETTER KA;Lu;0;L;;;;;N;;;;105A8; 10582;VITHKUQI CAPITAL LETTER LA;Lu;0;L;;;;;N;;;;105A9; 10583;VITHKUQI CAPITAL LETTER LLA;Lu;0;L;;;;;N;;;;105AA; 10584;VITHKUQI CAPITAL LETTER ME;Lu;0;L;;;;;N;;;;105AB; 10585;VITHKUQI CAPITAL LETTER NE;Lu;0;L;;;;;N;;;;105AC; 10586;VITHKUQI CAPITAL LETTER NJE;Lu;0;L;;;;;N;;;;105AD; 10587;VITHKUQI CAPITAL LETTER O;Lu;0;L;;;;;N;;;;105AE; 10588;VITHKUQI CAPITAL LETTER PE;Lu;0;L;;;;;N;;;;105AF; 10589;VITHKUQI CAPITAL LETTER QA;Lu;0;L;;;;;N;;;;105B0; 1058A;VITHKUQI CAPITAL LETTER RE;Lu;0;L;;;;;N;;;;105B1; 1058C;VITHKUQI CAPITAL LETTER SE;Lu;0;L;;;;;N;;;;105B3; 1058D;VITHKUQI CAPITAL LETTER SHE;Lu;0;L;;;;;N;;;;105B4; 1058E;VITHKUQI CAPITAL LETTER TE;Lu;0;L;;;;;N;;;;105B5; 1058F;VITHKUQI CAPITAL LETTER THE;Lu;0;L;;;;;N;;;;105B6; 10590;VITHKUQI CAPITAL LETTER U;Lu;0;L;;;;;N;;;;105B7; 10591;VITHKUQI CAPITAL LETTER VE;Lu;0;L;;;;;N;;;;105B8; 10592;VITHKUQI CAPITAL LETTER XE;Lu;0;L;;;;;N;;;;105B9; 10594;VITHKUQI CAPITAL LETTER Y;Lu;0;L;;;;;N;;;;105BB; 10595;VITHKUQI CAPITAL LETTER ZE;Lu;0;L;;;;;N;;;;105BC; 10597;VITHKUQI SMALL LETTER A;Ll;0;L;;;;;N;;;10570;;10570 10598;VITHKUQI SMALL LETTER BBE;Ll;0;L;;;;;N;;;10571;;10571 10599;VITHKUQI SMALL LETTER BE;Ll;0;L;;;;;N;;;10572;;10572 1059A;VITHKUQI SMALL LETTER CE;Ll;0;L;;;;;N;;;10573;;10573 1059B;VITHKUQI SMALL LETTER CHE;Ll;0;L;;;;;N;;;10574;;10574 1059C;VITHKUQI SMALL LETTER DE;Ll;0;L;;;;;N;;;10575;;10575 1059D;VITHKUQI SMALL LETTER DHE;Ll;0;L;;;;;N;;;10576;;10576 1059E;VITHKUQI SMALL LETTER EI;Ll;0;L;;;;;N;;;10577;;10577 1059F;VITHKUQI SMALL LETTER E;Ll;0;L;;;;;N;;;10578;;10578 105A0;VITHKUQI SMALL LETTER FE;Ll;0;L;;;;;N;;;10579;;10579 105A1;VITHKUQI SMALL LETTER GA;Ll;0;L;;;;;N;;;1057A;;1057A 105A3;VITHKUQI SMALL LETTER HA;Ll;0;L;;;;;N;;;1057C;;1057C 105A4;VITHKUQI SMALL LETTER HHA;Ll;0;L;;;;;N;;;1057D;;1057D 105A5;VITHKUQI SMALL LETTER I;Ll;0;L;;;;;N;;;1057E;;1057E 105A6;VITHKUQI SMALL LETTER IJE;Ll;0;L;;;;;N;;;1057F;;1057F 105A7;VITHKUQI SMALL LETTER JE;Ll;0;L;;;;;N;;;10580;;10580 105A8;VITHKUQI SMALL LETTER KA;Ll;0;L;;;;;N;;;10581;;10581 105A9;VITHKUQI SMALL LETTER LA;Ll;0;L;;;;;N;;;10582;;10582 105AA;VITHKUQI SMALL LETTER LLA;Ll;0;L;;;;;N;;;10583;;10583 105AB;VITHKUQI SMALL LETTER ME;Ll;0;L;;;;;N;;;10584;;10584 105AC;VITHKUQI SMALL LETTER NE;Ll;0;L;;;;;N;;;10585;;10585 105AD;VITHKUQI SMALL LETTER NJE;Ll;0;L;;;;;N;;;10586;;10586 105AE;VITHKUQI SMALL LETTER O;Ll;0;L;;;;;N;;;10587;;10587 105AF;VITHKUQI SMALL LETTER PE;Ll;0;L;;;;;N;;;10588;;10588 105B0;VITHKUQI SMALL LETTER QA;Ll;0;L;;;;;N;;;10589;;10589 105B1;VITHKUQI SMALL LETTER RE;Ll;0;L;;;;;N;;;1058A;;1058A 105B3;VITHKUQI SMALL LETTER SE;Ll;0;L;;;;;N;;;1058C;;1058C 105B4;VITHKUQI SMALL LETTER SHE;Ll;0;L;;;;;N;;;1058D;;1058D 105B5;VITHKUQI SMALL LETTER TE;Ll;0;L;;;;;N;;;1058E;;1058E 105B6;VITHKUQI SMALL LETTER THE;Ll;0;L;;;;;N;;;1058F;;1058F 105B7;VITHKUQI SMALL LETTER U;Ll;0;L;;;;;N;;;10590;;10590 105B8;VITHKUQI SMALL LETTER VE;Ll;0;L;;;;;N;;;10591;;10591 105B9;VITHKUQI SMALL LETTER XE;Ll;0;L;;;;;N;;;10592;;10592 105BB;VITHKUQI SMALL LETTER Y;Ll;0;L;;;;;N;;;10594;;10594 105BC;VITHKUQI SMALL LETTER ZE;Ll;0;L;;;;;N;;;10595;;10595 10600;LINEAR A SIGN AB001;Lo;0;L;;;;;N;;;;; 10601;LINEAR A SIGN AB002;Lo;0;L;;;;;N;;;;; 10602;LINEAR A SIGN AB003;Lo;0;L;;;;;N;;;;; 10603;LINEAR A SIGN AB004;Lo;0;L;;;;;N;;;;; 10604;LINEAR A SIGN AB005;Lo;0;L;;;;;N;;;;; 10605;LINEAR A SIGN AB006;Lo;0;L;;;;;N;;;;; 10606;LINEAR A SIGN AB007;Lo;0;L;;;;;N;;;;; 10607;LINEAR A SIGN AB008;Lo;0;L;;;;;N;;;;; 10608;LINEAR A SIGN AB009;Lo;0;L;;;;;N;;;;; 10609;LINEAR A SIGN AB010;Lo;0;L;;;;;N;;;;; 1060A;LINEAR A SIGN AB011;Lo;0;L;;;;;N;;;;; 1060B;LINEAR A SIGN AB013;Lo;0;L;;;;;N;;;;; 1060C;LINEAR A SIGN AB016;Lo;0;L;;;;;N;;;;; 1060D;LINEAR A SIGN AB017;Lo;0;L;;;;;N;;;;; 1060E;LINEAR A SIGN AB020;Lo;0;L;;;;;N;;;;; 1060F;LINEAR A SIGN AB021;Lo;0;L;;;;;N;;;;; 10610;LINEAR A SIGN AB021F;Lo;0;L;;;;;N;;;;; 10611;LINEAR A SIGN AB021M;Lo;0;L;;;;;N;;;;; 10612;LINEAR A SIGN AB022;Lo;0;L;;;;;N;;;;; 10613;LINEAR A SIGN AB022F;Lo;0;L;;;;;N;;;;; 10614;LINEAR A SIGN AB022M;Lo;0;L;;;;;N;;;;; 10615;LINEAR A SIGN AB023;Lo;0;L;;;;;N;;;;; 10616;LINEAR A SIGN AB023M;Lo;0;L;;;;;N;;;;; 10617;LINEAR A SIGN AB024;Lo;0;L;;;;;N;;;;; 10618;LINEAR A SIGN AB026;Lo;0;L;;;;;N;;;;; 10619;LINEAR A SIGN AB027;Lo;0;L;;;;;N;;;;; 1061A;LINEAR A SIGN AB028;Lo;0;L;;;;;N;;;;; 1061B;LINEAR A SIGN A028B;Lo;0;L;;;;;N;;;;; 1061C;LINEAR A SIGN AB029;Lo;0;L;;;;;N;;;;; 1061D;LINEAR A SIGN AB030;Lo;0;L;;;;;N;;;;; 1061E;LINEAR A SIGN AB031;Lo;0;L;;;;;N;;;;; 1061F;LINEAR A SIGN AB034;Lo;0;L;;;;;N;;;;; 10620;LINEAR A SIGN AB037;Lo;0;L;;;;;N;;;;; 10621;LINEAR A SIGN AB038;Lo;0;L;;;;;N;;;;; 10622;LINEAR A SIGN AB039;Lo;0;L;;;;;N;;;;; 10623;LINEAR A SIGN AB040;Lo;0;L;;;;;N;;;;; 10624;LINEAR A SIGN AB041;Lo;0;L;;;;;N;;;;; 10625;LINEAR A SIGN AB044;Lo;0;L;;;;;N;;;;; 10626;LINEAR A SIGN AB045;Lo;0;L;;;;;N;;;;; 10627;LINEAR A SIGN AB046;Lo;0;L;;;;;N;;;;; 10628;LINEAR A SIGN AB047;Lo;0;L;;;;;N;;;;; 10629;LINEAR A SIGN AB048;Lo;0;L;;;;;N;;;;; 1062A;LINEAR A SIGN AB049;Lo;0;L;;;;;N;;;;; 1062B;LINEAR A SIGN AB050;Lo;0;L;;;;;N;;;;; 1062C;LINEAR A SIGN AB051;Lo;0;L;;;;;N;;;;; 1062D;LINEAR A SIGN AB053;Lo;0;L;;;;;N;;;;; 1062E;LINEAR A SIGN AB054;Lo;0;L;;;;;N;;;;; 1062F;LINEAR A SIGN AB055;Lo;0;L;;;;;N;;;;; 10630;LINEAR A SIGN AB056;Lo;0;L;;;;;N;;;;; 10631;LINEAR A SIGN AB057;Lo;0;L;;;;;N;;;;; 10632;LINEAR A SIGN AB058;Lo;0;L;;;;;N;;;;; 10633;LINEAR A SIGN AB059;Lo;0;L;;;;;N;;;;; 10634;LINEAR A SIGN AB060;Lo;0;L;;;;;N;;;;; 10635;LINEAR A SIGN AB061;Lo;0;L;;;;;N;;;;; 10636;LINEAR A SIGN AB065;Lo;0;L;;;;;N;;;;; 10637;LINEAR A SIGN AB066;Lo;0;L;;;;;N;;;;; 10638;LINEAR A SIGN AB067;Lo;0;L;;;;;N;;;;; 10639;LINEAR A SIGN AB069;Lo;0;L;;;;;N;;;;; 1063A;LINEAR A SIGN AB070;Lo;0;L;;;;;N;;;;; 1063B;LINEAR A SIGN AB073;Lo;0;L;;;;;N;;;;; 1063C;LINEAR A SIGN AB074;Lo;0;L;;;;;N;;;;; 1063D;LINEAR A SIGN AB076;Lo;0;L;;;;;N;;;;; 1063E;LINEAR A SIGN AB077;Lo;0;L;;;;;N;;;;; 1063F;LINEAR A SIGN AB078;Lo;0;L;;;;;N;;;;; 10640;LINEAR A SIGN AB079;Lo;0;L;;;;;N;;;;; 10641;LINEAR A SIGN AB080;Lo;0;L;;;;;N;;;;; 10642;LINEAR A SIGN AB081;Lo;0;L;;;;;N;;;;; 10643;LINEAR A SIGN AB082;Lo;0;L;;;;;N;;;;; 10644;LINEAR A SIGN AB085;Lo;0;L;;;;;N;;;;; 10645;LINEAR A SIGN AB086;Lo;0;L;;;;;N;;;;; 10646;LINEAR A SIGN AB087;Lo;0;L;;;;;N;;;;; 10647;LINEAR A SIGN A100-102;Lo;0;L;;;;;N;;;;; 10648;LINEAR A SIGN AB118;Lo;0;L;;;;;N;;;;; 10649;LINEAR A SIGN AB120;Lo;0;L;;;;;N;;;;; 1064A;LINEAR A SIGN A120B;Lo;0;L;;;;;N;;;;; 1064B;LINEAR A SIGN AB122;Lo;0;L;;;;;N;;;;; 1064C;LINEAR A SIGN AB123;Lo;0;L;;;;;N;;;;; 1064D;LINEAR A SIGN AB131A;Lo;0;L;;;;;N;;;;; 1064E;LINEAR A SIGN AB131B;Lo;0;L;;;;;N;;;;; 1064F;LINEAR A SIGN A131C;Lo;0;L;;;;;N;;;;; 10650;LINEAR A SIGN AB164;Lo;0;L;;;;;N;;;;; 10651;LINEAR A SIGN AB171;Lo;0;L;;;;;N;;;;; 10652;LINEAR A SIGN AB180;Lo;0;L;;;;;N;;;;; 10653;LINEAR A SIGN AB188;Lo;0;L;;;;;N;;;;; 10654;LINEAR A SIGN AB191;Lo;0;L;;;;;N;;;;; 10655;LINEAR A SIGN A301;Lo;0;L;;;;;N;;;;; 10656;LINEAR A SIGN A302;Lo;0;L;;;;;N;;;;; 10657;LINEAR A SIGN A303;Lo;0;L;;;;;N;;;;; 10658;LINEAR A SIGN A304;Lo;0;L;;;;;N;;;;; 10659;LINEAR A SIGN A305;Lo;0;L;;;;;N;;;;; 1065A;LINEAR A SIGN A306;Lo;0;L;;;;;N;;;;; 1065B;LINEAR A SIGN A307;Lo;0;L;;;;;N;;;;; 1065C;LINEAR A SIGN A308;Lo;0;L;;;;;N;;;;; 1065D;LINEAR A SIGN A309A;Lo;0;L;;;;;N;;;;; 1065E;LINEAR A SIGN A309B;Lo;0;L;;;;;N;;;;; 1065F;LINEAR A SIGN A309C;Lo;0;L;;;;;N;;;;; 10660;LINEAR A SIGN A310;Lo;0;L;;;;;N;;;;; 10661;LINEAR A SIGN A311;Lo;0;L;;;;;N;;;;; 10662;LINEAR A SIGN A312;Lo;0;L;;;;;N;;;;; 10663;LINEAR A SIGN A313A;Lo;0;L;;;;;N;;;;; 10664;LINEAR A SIGN A313B;Lo;0;L;;;;;N;;;;; 10665;LINEAR A SIGN A313C;Lo;0;L;;;;;N;;;;; 10666;LINEAR A SIGN A314;Lo;0;L;;;;;N;;;;; 10667;LINEAR A SIGN A315;Lo;0;L;;;;;N;;;;; 10668;LINEAR A SIGN A316;Lo;0;L;;;;;N;;;;; 10669;LINEAR A SIGN A317;Lo;0;L;;;;;N;;;;; 1066A;LINEAR A SIGN A318;Lo;0;L;;;;;N;;;;; 1066B;LINEAR A SIGN A319;Lo;0;L;;;;;N;;;;; 1066C;LINEAR A SIGN A320;Lo;0;L;;;;;N;;;;; 1066D;LINEAR A SIGN A321;Lo;0;L;;;;;N;;;;; 1066E;LINEAR A SIGN A322;Lo;0;L;;;;;N;;;;; 1066F;LINEAR A SIGN A323;Lo;0;L;;;;;N;;;;; 10670;LINEAR A SIGN A324;Lo;0;L;;;;;N;;;;; 10671;LINEAR A SIGN A325;Lo;0;L;;;;;N;;;;; 10672;LINEAR A SIGN A326;Lo;0;L;;;;;N;;;;; 10673;LINEAR A SIGN A327;Lo;0;L;;;;;N;;;;; 10674;LINEAR A SIGN A328;Lo;0;L;;;;;N;;;;; 10675;LINEAR A SIGN A329;Lo;0;L;;;;;N;;;;; 10676;LINEAR A SIGN A330;Lo;0;L;;;;;N;;;;; 10677;LINEAR A SIGN A331;Lo;0;L;;;;;N;;;;; 10678;LINEAR A SIGN A332;Lo;0;L;;;;;N;;;;; 10679;LINEAR A SIGN A333;Lo;0;L;;;;;N;;;;; 1067A;LINEAR A SIGN A334;Lo;0;L;;;;;N;;;;; 1067B;LINEAR A SIGN A335;Lo;0;L;;;;;N;;;;; 1067C;LINEAR A SIGN A336;Lo;0;L;;;;;N;;;;; 1067D;LINEAR A SIGN A337;Lo;0;L;;;;;N;;;;; 1067E;LINEAR A SIGN A338;Lo;0;L;;;;;N;;;;; 1067F;LINEAR A SIGN A339;Lo;0;L;;;;;N;;;;; 10680;LINEAR A SIGN A340;Lo;0;L;;;;;N;;;;; 10681;LINEAR A SIGN A341;Lo;0;L;;;;;N;;;;; 10682;LINEAR A SIGN A342;Lo;0;L;;;;;N;;;;; 10683;LINEAR A SIGN A343;Lo;0;L;;;;;N;;;;; 10684;LINEAR A SIGN A344;Lo;0;L;;;;;N;;;;; 10685;LINEAR A SIGN A345;Lo;0;L;;;;;N;;;;; 10686;LINEAR A SIGN A346;Lo;0;L;;;;;N;;;;; 10687;LINEAR A SIGN A347;Lo;0;L;;;;;N;;;;; 10688;LINEAR A SIGN A348;Lo;0;L;;;;;N;;;;; 10689;LINEAR A SIGN A349;Lo;0;L;;;;;N;;;;; 1068A;LINEAR A SIGN A350;Lo;0;L;;;;;N;;;;; 1068B;LINEAR A SIGN A351;Lo;0;L;;;;;N;;;;; 1068C;LINEAR A SIGN A352;Lo;0;L;;;;;N;;;;; 1068D;LINEAR A SIGN A353;Lo;0;L;;;;;N;;;;; 1068E;LINEAR A SIGN A354;Lo;0;L;;;;;N;;;;; 1068F;LINEAR A SIGN A355;Lo;0;L;;;;;N;;;;; 10690;LINEAR A SIGN A356;Lo;0;L;;;;;N;;;;; 10691;LINEAR A SIGN A357;Lo;0;L;;;;;N;;;;; 10692;LINEAR A SIGN A358;Lo;0;L;;;;;N;;;;; 10693;LINEAR A SIGN A359;Lo;0;L;;;;;N;;;;; 10694;LINEAR A SIGN A360;Lo;0;L;;;;;N;;;;; 10695;LINEAR A SIGN A361;Lo;0;L;;;;;N;;;;; 10696;LINEAR A SIGN A362;Lo;0;L;;;;;N;;;;; 10697;LINEAR A SIGN A363;Lo;0;L;;;;;N;;;;; 10698;LINEAR A SIGN A364;Lo;0;L;;;;;N;;;;; 10699;LINEAR A SIGN A365;Lo;0;L;;;;;N;;;;; 1069A;LINEAR A SIGN A366;Lo;0;L;;;;;N;;;;; 1069B;LINEAR A SIGN A367;Lo;0;L;;;;;N;;;;; 1069C;LINEAR A SIGN A368;Lo;0;L;;;;;N;;;;; 1069D;LINEAR A SIGN A369;Lo;0;L;;;;;N;;;;; 1069E;LINEAR A SIGN A370;Lo;0;L;;;;;N;;;;; 1069F;LINEAR A SIGN A371;Lo;0;L;;;;;N;;;;; 106A0;LINEAR A SIGN A400-VAS;Lo;0;L;;;;;N;;;;; 106A1;LINEAR A SIGN A401-VAS;Lo;0;L;;;;;N;;;;; 106A2;LINEAR A SIGN A402-VAS;Lo;0;L;;;;;N;;;;; 106A3;LINEAR A SIGN A403-VAS;Lo;0;L;;;;;N;;;;; 106A4;LINEAR A SIGN A404-VAS;Lo;0;L;;;;;N;;;;; 106A5;LINEAR A SIGN A405-VAS;Lo;0;L;;;;;N;;;;; 106A6;LINEAR A SIGN A406-VAS;Lo;0;L;;;;;N;;;;; 106A7;LINEAR A SIGN A407-VAS;Lo;0;L;;;;;N;;;;; 106A8;LINEAR A SIGN A408-VAS;Lo;0;L;;;;;N;;;;; 106A9;LINEAR A SIGN A409-VAS;Lo;0;L;;;;;N;;;;; 106AA;LINEAR A SIGN A410-VAS;Lo;0;L;;;;;N;;;;; 106AB;LINEAR A SIGN A411-VAS;Lo;0;L;;;;;N;;;;; 106AC;LINEAR A SIGN A412-VAS;Lo;0;L;;;;;N;;;;; 106AD;LINEAR A SIGN A413-VAS;Lo;0;L;;;;;N;;;;; 106AE;LINEAR A SIGN A414-VAS;Lo;0;L;;;;;N;;;;; 106AF;LINEAR A SIGN A415-VAS;Lo;0;L;;;;;N;;;;; 106B0;LINEAR A SIGN A416-VAS;Lo;0;L;;;;;N;;;;; 106B1;LINEAR A SIGN A417-VAS;Lo;0;L;;;;;N;;;;; 106B2;LINEAR A SIGN A418-VAS;Lo;0;L;;;;;N;;;;; 106B3;LINEAR A SIGN A501;Lo;0;L;;;;;N;;;;; 106B4;LINEAR A SIGN A502;Lo;0;L;;;;;N;;;;; 106B5;LINEAR A SIGN A503;Lo;0;L;;;;;N;;;;; 106B6;LINEAR A SIGN A504;Lo;0;L;;;;;N;;;;; 106B7;LINEAR A SIGN A505;Lo;0;L;;;;;N;;;;; 106B8;LINEAR A SIGN A506;Lo;0;L;;;;;N;;;;; 106B9;LINEAR A SIGN A508;Lo;0;L;;;;;N;;;;; 106BA;LINEAR A SIGN A509;Lo;0;L;;;;;N;;;;; 106BB;LINEAR A SIGN A510;Lo;0;L;;;;;N;;;;; 106BC;LINEAR A SIGN A511;Lo;0;L;;;;;N;;;;; 106BD;LINEAR A SIGN A512;Lo;0;L;;;;;N;;;;; 106BE;LINEAR A SIGN A513;Lo;0;L;;;;;N;;;;; 106BF;LINEAR A SIGN A515;Lo;0;L;;;;;N;;;;; 106C0;LINEAR A SIGN A516;Lo;0;L;;;;;N;;;;; 106C1;LINEAR A SIGN A520;Lo;0;L;;;;;N;;;;; 106C2;LINEAR A SIGN A521;Lo;0;L;;;;;N;;;;; 106C3;LINEAR A SIGN A523;Lo;0;L;;;;;N;;;;; 106C4;LINEAR A SIGN A524;Lo;0;L;;;;;N;;;;; 106C5;LINEAR A SIGN A525;Lo;0;L;;;;;N;;;;; 106C6;LINEAR A SIGN A526;Lo;0;L;;;;;N;;;;; 106C7;LINEAR A SIGN A527;Lo;0;L;;;;;N;;;;; 106C8;LINEAR A SIGN A528;Lo;0;L;;;;;N;;;;; 106C9;LINEAR A SIGN A529;Lo;0;L;;;;;N;;;;; 106CA;LINEAR A SIGN A530;Lo;0;L;;;;;N;;;;; 106CB;LINEAR A SIGN A531;Lo;0;L;;;;;N;;;;; 106CC;LINEAR A SIGN A532;Lo;0;L;;;;;N;;;;; 106CD;LINEAR A SIGN A534;Lo;0;L;;;;;N;;;;; 106CE;LINEAR A SIGN A535;Lo;0;L;;;;;N;;;;; 106CF;LINEAR A SIGN A536;Lo;0;L;;;;;N;;;;; 106D0;LINEAR A SIGN A537;Lo;0;L;;;;;N;;;;; 106D1;LINEAR A SIGN A538;Lo;0;L;;;;;N;;;;; 106D2;LINEAR A SIGN A539;Lo;0;L;;;;;N;;;;; 106D3;LINEAR A SIGN A540;Lo;0;L;;;;;N;;;;; 106D4;LINEAR A SIGN A541;Lo;0;L;;;;;N;;;;; 106D5;LINEAR A SIGN A542;Lo;0;L;;;;;N;;;;; 106D6;LINEAR A SIGN A545;Lo;0;L;;;;;N;;;;; 106D7;LINEAR A SIGN A547;Lo;0;L;;;;;N;;;;; 106D8;LINEAR A SIGN A548;Lo;0;L;;;;;N;;;;; 106D9;LINEAR A SIGN A549;Lo;0;L;;;;;N;;;;; 106DA;LINEAR A SIGN A550;Lo;0;L;;;;;N;;;;; 106DB;LINEAR A SIGN A551;Lo;0;L;;;;;N;;;;; 106DC;LINEAR A SIGN A552;Lo;0;L;;;;;N;;;;; 106DD;LINEAR A SIGN A553;Lo;0;L;;;;;N;;;;; 106DE;LINEAR A SIGN A554;Lo;0;L;;;;;N;;;;; 106DF;LINEAR A SIGN A555;Lo;0;L;;;;;N;;;;; 106E0;LINEAR A SIGN A556;Lo;0;L;;;;;N;;;;; 106E1;LINEAR A SIGN A557;Lo;0;L;;;;;N;;;;; 106E2;LINEAR A SIGN A559;Lo;0;L;;;;;N;;;;; 106E3;LINEAR A SIGN A563;Lo;0;L;;;;;N;;;;; 106E4;LINEAR A SIGN A564;Lo;0;L;;;;;N;;;;; 106E5;LINEAR A SIGN A565;Lo;0;L;;;;;N;;;;; 106E6;LINEAR A SIGN A566;Lo;0;L;;;;;N;;;;; 106E7;LINEAR A SIGN A568;Lo;0;L;;;;;N;;;;; 106E8;LINEAR A SIGN A569;Lo;0;L;;;;;N;;;;; 106E9;LINEAR A SIGN A570;Lo;0;L;;;;;N;;;;; 106EA;LINEAR A SIGN A571;Lo;0;L;;;;;N;;;;; 106EB;LINEAR A SIGN A572;Lo;0;L;;;;;N;;;;; 106EC;LINEAR A SIGN A573;Lo;0;L;;;;;N;;;;; 106ED;LINEAR A SIGN A574;Lo;0;L;;;;;N;;;;; 106EE;LINEAR A SIGN A575;Lo;0;L;;;;;N;;;;; 106EF;LINEAR A SIGN A576;Lo;0;L;;;;;N;;;;; 106F0;LINEAR A SIGN A577;Lo;0;L;;;;;N;;;;; 106F1;LINEAR A SIGN A578;Lo;0;L;;;;;N;;;;; 106F2;LINEAR A SIGN A579;Lo;0;L;;;;;N;;;;; 106F3;LINEAR A SIGN A580;Lo;0;L;;;;;N;;;;; 106F4;LINEAR A SIGN A581;Lo;0;L;;;;;N;;;;; 106F5;LINEAR A SIGN A582;Lo;0;L;;;;;N;;;;; 106F6;LINEAR A SIGN A583;Lo;0;L;;;;;N;;;;; 106F7;LINEAR A SIGN A584;Lo;0;L;;;;;N;;;;; 106F8;LINEAR A SIGN A585;Lo;0;L;;;;;N;;;;; 106F9;LINEAR A SIGN A586;Lo;0;L;;;;;N;;;;; 106FA;LINEAR A SIGN A587;Lo;0;L;;;;;N;;;;; 106FB;LINEAR A SIGN A588;Lo;0;L;;;;;N;;;;; 106FC;LINEAR A SIGN A589;Lo;0;L;;;;;N;;;;; 106FD;LINEAR A SIGN A591;Lo;0;L;;;;;N;;;;; 106FE;LINEAR A SIGN A592;Lo;0;L;;;;;N;;;;; 106FF;LINEAR A SIGN A594;Lo;0;L;;;;;N;;;;; 10700;LINEAR A SIGN A595;Lo;0;L;;;;;N;;;;; 10701;LINEAR A SIGN A596;Lo;0;L;;;;;N;;;;; 10702;LINEAR A SIGN A598;Lo;0;L;;;;;N;;;;; 10703;LINEAR A SIGN A600;Lo;0;L;;;;;N;;;;; 10704;LINEAR A SIGN A601;Lo;0;L;;;;;N;;;;; 10705;LINEAR A SIGN A602;Lo;0;L;;;;;N;;;;; 10706;LINEAR A SIGN A603;Lo;0;L;;;;;N;;;;; 10707;LINEAR A SIGN A604;Lo;0;L;;;;;N;;;;; 10708;LINEAR A SIGN A606;Lo;0;L;;;;;N;;;;; 10709;LINEAR A SIGN A608;Lo;0;L;;;;;N;;;;; 1070A;LINEAR A SIGN A609;Lo;0;L;;;;;N;;;;; 1070B;LINEAR A SIGN A610;Lo;0;L;;;;;N;;;;; 1070C;LINEAR A SIGN A611;Lo;0;L;;;;;N;;;;; 1070D;LINEAR A SIGN A612;Lo;0;L;;;;;N;;;;; 1070E;LINEAR A SIGN A613;Lo;0;L;;;;;N;;;;; 1070F;LINEAR A SIGN A614;Lo;0;L;;;;;N;;;;; 10710;LINEAR A SIGN A615;Lo;0;L;;;;;N;;;;; 10711;LINEAR A SIGN A616;Lo;0;L;;;;;N;;;;; 10712;LINEAR A SIGN A617;Lo;0;L;;;;;N;;;;; 10713;LINEAR A SIGN A618;Lo;0;L;;;;;N;;;;; 10714;LINEAR A SIGN A619;Lo;0;L;;;;;N;;;;; 10715;LINEAR A SIGN A620;Lo;0;L;;;;;N;;;;; 10716;LINEAR A SIGN A621;Lo;0;L;;;;;N;;;;; 10717;LINEAR A SIGN A622;Lo;0;L;;;;;N;;;;; 10718;LINEAR A SIGN A623;Lo;0;L;;;;;N;;;;; 10719;LINEAR A SIGN A624;Lo;0;L;;;;;N;;;;; 1071A;LINEAR A SIGN A626;Lo;0;L;;;;;N;;;;; 1071B;LINEAR A SIGN A627;Lo;0;L;;;;;N;;;;; 1071C;LINEAR A SIGN A628;Lo;0;L;;;;;N;;;;; 1071D;LINEAR A SIGN A629;Lo;0;L;;;;;N;;;;; 1071E;LINEAR A SIGN A634;Lo;0;L;;;;;N;;;;; 1071F;LINEAR A SIGN A637;Lo;0;L;;;;;N;;;;; 10720;LINEAR A SIGN A638;Lo;0;L;;;;;N;;;;; 10721;LINEAR A SIGN A640;Lo;0;L;;;;;N;;;;; 10722;LINEAR A SIGN A642;Lo;0;L;;;;;N;;;;; 10723;LINEAR A SIGN A643;Lo;0;L;;;;;N;;;;; 10724;LINEAR A SIGN A644;Lo;0;L;;;;;N;;;;; 10725;LINEAR A SIGN A645;Lo;0;L;;;;;N;;;;; 10726;LINEAR A SIGN A646;Lo;0;L;;;;;N;;;;; 10727;LINEAR A SIGN A648;Lo;0;L;;;;;N;;;;; 10728;LINEAR A SIGN A649;Lo;0;L;;;;;N;;;;; 10729;LINEAR A SIGN A651;Lo;0;L;;;;;N;;;;; 1072A;LINEAR A SIGN A652;Lo;0;L;;;;;N;;;;; 1072B;LINEAR A SIGN A653;Lo;0;L;;;;;N;;;;; 1072C;LINEAR A SIGN A654;Lo;0;L;;;;;N;;;;; 1072D;LINEAR A SIGN A655;Lo;0;L;;;;;N;;;;; 1072E;LINEAR A SIGN A656;Lo;0;L;;;;;N;;;;; 1072F;LINEAR A SIGN A657;Lo;0;L;;;;;N;;;;; 10730;LINEAR A SIGN A658;Lo;0;L;;;;;N;;;;; 10731;LINEAR A SIGN A659;Lo;0;L;;;;;N;;;;; 10732;LINEAR A SIGN A660;Lo;0;L;;;;;N;;;;; 10733;LINEAR A SIGN A661;Lo;0;L;;;;;N;;;;; 10734;LINEAR A SIGN A662;Lo;0;L;;;;;N;;;;; 10735;LINEAR A SIGN A663;Lo;0;L;;;;;N;;;;; 10736;LINEAR A SIGN A664;Lo;0;L;;;;;N;;;;; 10740;LINEAR A SIGN A701 A;Lo;0;L;;;;;N;;;;; 10741;LINEAR A SIGN A702 B;Lo;0;L;;;;;N;;;;; 10742;LINEAR A SIGN A703 D;Lo;0;L;;;;;N;;;;; 10743;LINEAR A SIGN A704 E;Lo;0;L;;;;;N;;;;; 10744;LINEAR A SIGN A705 F;Lo;0;L;;;;;N;;;;; 10745;LINEAR A SIGN A706 H;Lo;0;L;;;;;N;;;;; 10746;LINEAR A SIGN A707 J;Lo;0;L;;;;;N;;;;; 10747;LINEAR A SIGN A708 K;Lo;0;L;;;;;N;;;;; 10748;LINEAR A SIGN A709 L;Lo;0;L;;;;;N;;;;; 10749;LINEAR A SIGN A709-2 L2;Lo;0;L;;;;;N;;;;; 1074A;LINEAR A SIGN A709-3 L3;Lo;0;L;;;;;N;;;;; 1074B;LINEAR A SIGN A709-4 L4;Lo;0;L;;;;;N;;;;; 1074C;LINEAR A SIGN A709-6 L6;Lo;0;L;;;;;N;;;;; 1074D;LINEAR A SIGN A710 W;Lo;0;L;;;;;N;;;;; 1074E;LINEAR A SIGN A711 X;Lo;0;L;;;;;N;;;;; 1074F;LINEAR A SIGN A712 Y;Lo;0;L;;;;;N;;;;; 10750;LINEAR A SIGN A713 OMEGA;Lo;0;L;;;;;N;;;;; 10751;LINEAR A SIGN A714 ABB;Lo;0;L;;;;;N;;;;; 10752;LINEAR A SIGN A715 BB;Lo;0;L;;;;;N;;;;; 10753;LINEAR A SIGN A717 DD;Lo;0;L;;;;;N;;;;; 10754;LINEAR A SIGN A726 EYYY;Lo;0;L;;;;;N;;;;; 10755;LINEAR A SIGN A732 JE;Lo;0;L;;;;;N;;;;; 10760;LINEAR A SIGN A800;Lo;0;L;;;;;N;;;;; 10761;LINEAR A SIGN A801;Lo;0;L;;;;;N;;;;; 10762;LINEAR A SIGN A802;Lo;0;L;;;;;N;;;;; 10763;LINEAR A SIGN A803;Lo;0;L;;;;;N;;;;; 10764;LINEAR A SIGN A804;Lo;0;L;;;;;N;;;;; 10765;LINEAR A SIGN A805;Lo;0;L;;;;;N;;;;; 10766;LINEAR A SIGN A806;Lo;0;L;;;;;N;;;;; 10767;LINEAR A SIGN A807;Lo;0;L;;;;;N;;;;; 10780;MODIFIER LETTER SMALL CAPITAL AA;Lm;0;L;;;;;N;;;;; 10781;MODIFIER LETTER SUPERSCRIPT TRIANGULAR COLON;Lm;0;L; 02D0;;;;N;;;;; 10782;MODIFIER LETTER SUPERSCRIPT HALF TRIANGULAR COLON;Lm;0;L; 02D1;;;;N;;;;; 10783;MODIFIER LETTER SMALL AE;Lm;0;L; 00E6;;;;N;;;;; 10784;MODIFIER LETTER SMALL CAPITAL B;Lm;0;L; 0299;;;;N;;;;; 10785;MODIFIER LETTER SMALL B WITH HOOK;Lm;0;L; 0253;;;;N;;;;; 10787;MODIFIER LETTER SMALL DZ DIGRAPH;Lm;0;L; 02A3;;;;N;;;;; 10788;MODIFIER LETTER SMALL DZ DIGRAPH WITH RETROFLEX HOOK;Lm;0;L; AB66;;;;N;;;;; 10789;MODIFIER LETTER SMALL DZ DIGRAPH WITH CURL;Lm;0;L; 02A5;;;;N;;;;; 1078A;MODIFIER LETTER SMALL DEZH DIGRAPH;Lm;0;L; 02A4;;;;N;;;;; 1078B;MODIFIER LETTER SMALL D WITH TAIL;Lm;0;L; 0256;;;;N;;;;; 1078C;MODIFIER LETTER SMALL D WITH HOOK;Lm;0;L; 0257;;;;N;;;;; 1078D;MODIFIER LETTER SMALL D WITH HOOK AND TAIL;Lm;0;L; 1D91;;;;N;;;;; 1078E;MODIFIER LETTER SMALL REVERSED E;Lm;0;L; 0258;;;;N;;;;; 1078F;MODIFIER LETTER SMALL CLOSED REVERSED OPEN E;Lm;0;L; 025E;;;;N;;;;; 10790;MODIFIER LETTER SMALL FENG DIGRAPH;Lm;0;L; 02A9;;;;N;;;;; 10791;MODIFIER LETTER SMALL RAMS HORN;Lm;0;L; 0264;;;;N;;;;; 10792;MODIFIER LETTER SMALL CAPITAL G;Lm;0;L; 0262;;;;N;;;;; 10793;MODIFIER LETTER SMALL G WITH HOOK;Lm;0;L; 0260;;;;N;;;;; 10794;MODIFIER LETTER SMALL CAPITAL G WITH HOOK;Lm;0;L; 029B;;;;N;;;;; 10795;MODIFIER LETTER SMALL H WITH STROKE;Lm;0;L; 0127;;;;N;;;;; 10796;MODIFIER LETTER SMALL CAPITAL H;Lm;0;L; 029C;;;;N;;;;; 10797;MODIFIER LETTER SMALL HENG WITH HOOK;Lm;0;L; 0267;;;;N;;;;; 10798;MODIFIER LETTER SMALL DOTLESS J WITH STROKE AND HOOK;Lm;0;L; 0284;;;;N;;;;; 10799;MODIFIER LETTER SMALL LS DIGRAPH;Lm;0;L; 02AA;;;;N;;;;; 1079A;MODIFIER LETTER SMALL LZ DIGRAPH;Lm;0;L; 02AB;;;;N;;;;; 1079B;MODIFIER LETTER SMALL L WITH BELT;Lm;0;L; 026C;;;;N;;;;; 1079C;MODIFIER LETTER SMALL CAPITAL L WITH BELT;Lm;0;L; 1DF04;;;;N;;;;; 1079D;MODIFIER LETTER SMALL L WITH RETROFLEX HOOK AND BELT;Lm;0;L; A78E;;;;N;;;;; 1079E;MODIFIER LETTER SMALL LEZH;Lm;0;L; 026E;;;;N;;;;; 1079F;MODIFIER LETTER SMALL LEZH WITH RETROFLEX HOOK;Lm;0;L; 1DF05;;;;N;;;;; 107A0;MODIFIER LETTER SMALL TURNED Y;Lm;0;L; 028E;;;;N;;;;; 107A1;MODIFIER LETTER SMALL TURNED Y WITH BELT;Lm;0;L; 1DF06;;;;N;;;;; 107A2;MODIFIER LETTER SMALL O WITH STROKE;Lm;0;L; 00F8;;;;N;;;;; 107A3;MODIFIER LETTER SMALL CAPITAL OE;Lm;0;L; 0276;;;;N;;;;; 107A4;MODIFIER LETTER SMALL CLOSED OMEGA;Lm;0;L; 0277;;;;N;;;;; 107A5;MODIFIER LETTER SMALL Q;Lm;0;L; 0071;;;;N;;;;; 107A6;MODIFIER LETTER SMALL TURNED R WITH LONG LEG;Lm;0;L; 027A;;;;N;;;;; 107A7;MODIFIER LETTER SMALL TURNED R WITH LONG LEG AND RETROFLEX HOOK;Lm;0;L; 1DF08;;;;N;;;;; 107A8;MODIFIER LETTER SMALL R WITH TAIL;Lm;0;L; 027D;;;;N;;;;; 107A9;MODIFIER LETTER SMALL R WITH FISHHOOK;Lm;0;L; 027E;;;;N;;;;; 107AA;MODIFIER LETTER SMALL CAPITAL R;Lm;0;L; 0280;;;;N;;;;; 107AB;MODIFIER LETTER SMALL TC DIGRAPH WITH CURL;Lm;0;L; 02A8;;;;N;;;;; 107AC;MODIFIER LETTER SMALL TS DIGRAPH;Lm;0;L; 02A6;;;;N;;;;; 107AD;MODIFIER LETTER SMALL TS DIGRAPH WITH RETROFLEX HOOK;Lm;0;L; AB67;;;;N;;;;; 107AE;MODIFIER LETTER SMALL TESH DIGRAPH;Lm;0;L; 02A7;;;;N;;;;; 107AF;MODIFIER LETTER SMALL T WITH RETROFLEX HOOK;Lm;0;L; 0288;;;;N;;;;; 107B0;MODIFIER LETTER SMALL V WITH RIGHT HOOK;Lm;0;L; 2C71;;;;N;;;;; 107B2;MODIFIER LETTER SMALL CAPITAL Y;Lm;0;L; 028F;;;;N;;;;; 107B3;MODIFIER LETTER GLOTTAL STOP WITH STROKE;Lm;0;L; 02A1;;;;N;;;;; 107B4;MODIFIER LETTER REVERSED GLOTTAL STOP WITH STROKE;Lm;0;L; 02A2;;;;N;;;;; 107B5;MODIFIER LETTER BILABIAL CLICK;Lm;0;L; 0298;;;;N;;;;; 107B6;MODIFIER LETTER DENTAL CLICK;Lm;0;L; 01C0;;;;N;;;;; 107B7;MODIFIER LETTER LATERAL CLICK;Lm;0;L; 01C1;;;;N;;;;; 107B8;MODIFIER LETTER ALVEOLAR CLICK;Lm;0;L; 01C2;;;;N;;;;; 107B9;MODIFIER LETTER RETROFLEX CLICK WITH RETROFLEX HOOK;Lm;0;L; 1DF0A;;;;N;;;;; 107BA;MODIFIER LETTER SMALL S WITH CURL;Lm;0;L; 1DF1E;;;;N;;;;; 10800;CYPRIOT SYLLABLE A;Lo;0;R;;;;;N;;;;; 10801;CYPRIOT SYLLABLE E;Lo;0;R;;;;;N;;;;; 10802;CYPRIOT SYLLABLE I;Lo;0;R;;;;;N;;;;; 10803;CYPRIOT SYLLABLE O;Lo;0;R;;;;;N;;;;; 10804;CYPRIOT SYLLABLE U;Lo;0;R;;;;;N;;;;; 10805;CYPRIOT SYLLABLE JA;Lo;0;R;;;;;N;;;;; 10808;CYPRIOT SYLLABLE JO;Lo;0;R;;;;;N;;;;; 1080A;CYPRIOT SYLLABLE KA;Lo;0;R;;;;;N;;;;; 1080B;CYPRIOT SYLLABLE KE;Lo;0;R;;;;;N;;;;; 1080C;CYPRIOT SYLLABLE KI;Lo;0;R;;;;;N;;;;; 1080D;CYPRIOT SYLLABLE KO;Lo;0;R;;;;;N;;;;; 1080E;CYPRIOT SYLLABLE KU;Lo;0;R;;;;;N;;;;; 1080F;CYPRIOT SYLLABLE LA;Lo;0;R;;;;;N;;;;; 10810;CYPRIOT SYLLABLE LE;Lo;0;R;;;;;N;;;;; 10811;CYPRIOT SYLLABLE LI;Lo;0;R;;;;;N;;;;; 10812;CYPRIOT SYLLABLE LO;Lo;0;R;;;;;N;;;;; 10813;CYPRIOT SYLLABLE LU;Lo;0;R;;;;;N;;;;; 10814;CYPRIOT SYLLABLE MA;Lo;0;R;;;;;N;;;;; 10815;CYPRIOT SYLLABLE ME;Lo;0;R;;;;;N;;;;; 10816;CYPRIOT SYLLABLE MI;Lo;0;R;;;;;N;;;;; 10817;CYPRIOT SYLLABLE MO;Lo;0;R;;;;;N;;;;; 10818;CYPRIOT SYLLABLE MU;Lo;0;R;;;;;N;;;;; 10819;CYPRIOT SYLLABLE NA;Lo;0;R;;;;;N;;;;; 1081A;CYPRIOT SYLLABLE NE;Lo;0;R;;;;;N;;;;; 1081B;CYPRIOT SYLLABLE NI;Lo;0;R;;;;;N;;;;; 1081C;CYPRIOT SYLLABLE NO;Lo;0;R;;;;;N;;;;; 1081D;CYPRIOT SYLLABLE NU;Lo;0;R;;;;;N;;;;; 1081E;CYPRIOT SYLLABLE PA;Lo;0;R;;;;;N;;;;; 1081F;CYPRIOT SYLLABLE PE;Lo;0;R;;;;;N;;;;; 10820;CYPRIOT SYLLABLE PI;Lo;0;R;;;;;N;;;;; 10821;CYPRIOT SYLLABLE PO;Lo;0;R;;;;;N;;;;; 10822;CYPRIOT SYLLABLE PU;Lo;0;R;;;;;N;;;;; 10823;CYPRIOT SYLLABLE RA;Lo;0;R;;;;;N;;;;; 10824;CYPRIOT SYLLABLE RE;Lo;0;R;;;;;N;;;;; 10825;CYPRIOT SYLLABLE RI;Lo;0;R;;;;;N;;;;; 10826;CYPRIOT SYLLABLE RO;Lo;0;R;;;;;N;;;;; 10827;CYPRIOT SYLLABLE RU;Lo;0;R;;;;;N;;;;; 10828;CYPRIOT SYLLABLE SA;Lo;0;R;;;;;N;;;;; 10829;CYPRIOT SYLLABLE SE;Lo;0;R;;;;;N;;;;; 1082A;CYPRIOT SYLLABLE SI;Lo;0;R;;;;;N;;;;; 1082B;CYPRIOT SYLLABLE SO;Lo;0;R;;;;;N;;;;; 1082C;CYPRIOT SYLLABLE SU;Lo;0;R;;;;;N;;;;; 1082D;CYPRIOT SYLLABLE TA;Lo;0;R;;;;;N;;;;; 1082E;CYPRIOT SYLLABLE TE;Lo;0;R;;;;;N;;;;; 1082F;CYPRIOT SYLLABLE TI;Lo;0;R;;;;;N;;;;; 10830;CYPRIOT SYLLABLE TO;Lo;0;R;;;;;N;;;;; 10831;CYPRIOT SYLLABLE TU;Lo;0;R;;;;;N;;;;; 10832;CYPRIOT SYLLABLE WA;Lo;0;R;;;;;N;;;;; 10833;CYPRIOT SYLLABLE WE;Lo;0;R;;;;;N;;;;; 10834;CYPRIOT SYLLABLE WI;Lo;0;R;;;;;N;;;;; 10835;CYPRIOT SYLLABLE WO;Lo;0;R;;;;;N;;;;; 10837;CYPRIOT SYLLABLE XA;Lo;0;R;;;;;N;;;;; 10838;CYPRIOT SYLLABLE XE;Lo;0;R;;;;;N;;;;; 1083C;CYPRIOT SYLLABLE ZA;Lo;0;R;;;;;N;;;;; 1083F;CYPRIOT SYLLABLE ZO;Lo;0;R;;;;;N;;;;; 10840;IMPERIAL ARAMAIC LETTER ALEPH;Lo;0;R;;;;;N;;;;; 10841;IMPERIAL ARAMAIC LETTER BETH;Lo;0;R;;;;;N;;;;; 10842;IMPERIAL ARAMAIC LETTER GIMEL;Lo;0;R;;;;;N;;;;; 10843;IMPERIAL ARAMAIC LETTER DALETH;Lo;0;R;;;;;N;;;;; 10844;IMPERIAL ARAMAIC LETTER HE;Lo;0;R;;;;;N;;;;; 10845;IMPERIAL ARAMAIC LETTER WAW;Lo;0;R;;;;;N;;;;; 10846;IMPERIAL ARAMAIC LETTER ZAYIN;Lo;0;R;;;;;N;;;;; 10847;IMPERIAL ARAMAIC LETTER HETH;Lo;0;R;;;;;N;;;;; 10848;IMPERIAL ARAMAIC LETTER TETH;Lo;0;R;;;;;N;;;;; 10849;IMPERIAL ARAMAIC LETTER YODH;Lo;0;R;;;;;N;;;;; 1084A;IMPERIAL ARAMAIC LETTER KAPH;Lo;0;R;;;;;N;;;;; 1084B;IMPERIAL ARAMAIC LETTER LAMEDH;Lo;0;R;;;;;N;;;;; 1084C;IMPERIAL ARAMAIC LETTER MEM;Lo;0;R;;;;;N;;;;; 1084D;IMPERIAL ARAMAIC LETTER NUN;Lo;0;R;;;;;N;;;;; 1084E;IMPERIAL ARAMAIC LETTER SAMEKH;Lo;0;R;;;;;N;;;;; 1084F;IMPERIAL ARAMAIC LETTER AYIN;Lo;0;R;;;;;N;;;;; 10850;IMPERIAL ARAMAIC LETTER PE;Lo;0;R;;;;;N;;;;; 10851;IMPERIAL ARAMAIC LETTER SADHE;Lo;0;R;;;;;N;;;;; 10852;IMPERIAL ARAMAIC LETTER QOPH;Lo;0;R;;;;;N;;;;; 10853;IMPERIAL ARAMAIC LETTER RESH;Lo;0;R;;;;;N;;;;; 10854;IMPERIAL ARAMAIC LETTER SHIN;Lo;0;R;;;;;N;;;;; 10855;IMPERIAL ARAMAIC LETTER TAW;Lo;0;R;;;;;N;;;;; 10857;IMPERIAL ARAMAIC SECTION SIGN;Po;0;R;;;;;N;;;;; 10858;IMPERIAL ARAMAIC NUMBER ONE;No;0;R;;;;1;N;;;;; 10859;IMPERIAL ARAMAIC NUMBER TWO;No;0;R;;;;2;N;;;;; 1085A;IMPERIAL ARAMAIC NUMBER THREE;No;0;R;;;;3;N;;;;; 1085B;IMPERIAL ARAMAIC NUMBER TEN;No;0;R;;;;10;N;;;;; 1085C;IMPERIAL ARAMAIC NUMBER TWENTY;No;0;R;;;;20;N;;;;; 1085D;IMPERIAL ARAMAIC NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;; 1085E;IMPERIAL ARAMAIC NUMBER ONE THOUSAND;No;0;R;;;;1000;N;;;;; 1085F;IMPERIAL ARAMAIC NUMBER TEN THOUSAND;No;0;R;;;;10000;N;;;;; 10860;PALMYRENE LETTER ALEPH;Lo;0;R;;;;;N;;;;; 10861;PALMYRENE LETTER BETH;Lo;0;R;;;;;N;;;;; 10862;PALMYRENE LETTER GIMEL;Lo;0;R;;;;;N;;;;; 10863;PALMYRENE LETTER DALETH;Lo;0;R;;;;;N;;;;; 10864;PALMYRENE LETTER HE;Lo;0;R;;;;;N;;;;; 10865;PALMYRENE LETTER WAW;Lo;0;R;;;;;N;;;;; 10866;PALMYRENE LETTER ZAYIN;Lo;0;R;;;;;N;;;;; 10867;PALMYRENE LETTER HETH;Lo;0;R;;;;;N;;;;; 10868;PALMYRENE LETTER TETH;Lo;0;R;;;;;N;;;;; 10869;PALMYRENE LETTER YODH;Lo;0;R;;;;;N;;;;; 1086A;PALMYRENE LETTER KAPH;Lo;0;R;;;;;N;;;;; 1086B;PALMYRENE LETTER LAMEDH;Lo;0;R;;;;;N;;;;; 1086C;PALMYRENE LETTER MEM;Lo;0;R;;;;;N;;;;; 1086D;PALMYRENE LETTER FINAL NUN;Lo;0;R;;;;;N;;;;; 1086E;PALMYRENE LETTER NUN;Lo;0;R;;;;;N;;;;; 1086F;PALMYRENE LETTER SAMEKH;Lo;0;R;;;;;N;;;;; 10870;PALMYRENE LETTER AYIN;Lo;0;R;;;;;N;;;;; 10871;PALMYRENE LETTER PE;Lo;0;R;;;;;N;;;;; 10872;PALMYRENE LETTER SADHE;Lo;0;R;;;;;N;;;;; 10873;PALMYRENE LETTER QOPH;Lo;0;R;;;;;N;;;;; 10874;PALMYRENE LETTER RESH;Lo;0;R;;;;;N;;;;; 10875;PALMYRENE LETTER SHIN;Lo;0;R;;;;;N;;;;; 10876;PALMYRENE LETTER TAW;Lo;0;R;;;;;N;;;;; 10877;PALMYRENE LEFT-POINTING FLEURON;So;0;R;;;;;N;;;;; 10878;PALMYRENE RIGHT-POINTING FLEURON;So;0;R;;;;;N;;;;; 10879;PALMYRENE NUMBER ONE;No;0;R;;;;1;N;;;;; 1087A;PALMYRENE NUMBER TWO;No;0;R;;;;2;N;;;;; 1087B;PALMYRENE NUMBER THREE;No;0;R;;;;3;N;;;;; 1087C;PALMYRENE NUMBER FOUR;No;0;R;;;;4;N;;;;; 1087D;PALMYRENE NUMBER FIVE;No;0;R;;;;5;N;;;;; 1087E;PALMYRENE NUMBER TEN;No;0;R;;;;10;N;;;;; 1087F;PALMYRENE NUMBER TWENTY;No;0;R;;;;20;N;;;;; 10880;NABATAEAN LETTER FINAL ALEPH;Lo;0;R;;;;;N;;;;; 10881;NABATAEAN LETTER ALEPH;Lo;0;R;;;;;N;;;;; 10882;NABATAEAN LETTER FINAL BETH;Lo;0;R;;;;;N;;;;; 10883;NABATAEAN LETTER BETH;Lo;0;R;;;;;N;;;;; 10884;NABATAEAN LETTER GIMEL;Lo;0;R;;;;;N;;;;; 10885;NABATAEAN LETTER DALETH;Lo;0;R;;;;;N;;;;; 10886;NABATAEAN LETTER FINAL HE;Lo;0;R;;;;;N;;;;; 10887;NABATAEAN LETTER HE;Lo;0;R;;;;;N;;;;; 10888;NABATAEAN LETTER WAW;Lo;0;R;;;;;N;;;;; 10889;NABATAEAN LETTER ZAYIN;Lo;0;R;;;;;N;;;;; 1088A;NABATAEAN LETTER HETH;Lo;0;R;;;;;N;;;;; 1088B;NABATAEAN LETTER TETH;Lo;0;R;;;;;N;;;;; 1088C;NABATAEAN LETTER FINAL YODH;Lo;0;R;;;;;N;;;;; 1088D;NABATAEAN LETTER YODH;Lo;0;R;;;;;N;;;;; 1088E;NABATAEAN LETTER FINAL KAPH;Lo;0;R;;;;;N;;;;; 1088F;NABATAEAN LETTER KAPH;Lo;0;R;;;;;N;;;;; 10890;NABATAEAN LETTER FINAL LAMEDH;Lo;0;R;;;;;N;;;;; 10891;NABATAEAN LETTER LAMEDH;Lo;0;R;;;;;N;;;;; 10892;NABATAEAN LETTER FINAL MEM;Lo;0;R;;;;;N;;;;; 10893;NABATAEAN LETTER MEM;Lo;0;R;;;;;N;;;;; 10894;NABATAEAN LETTER FINAL NUN;Lo;0;R;;;;;N;;;;; 10895;NABATAEAN LETTER NUN;Lo;0;R;;;;;N;;;;; 10896;NABATAEAN LETTER SAMEKH;Lo;0;R;;;;;N;;;;; 10897;NABATAEAN LETTER AYIN;Lo;0;R;;;;;N;;;;; 10898;NABATAEAN LETTER PE;Lo;0;R;;;;;N;;;;; 10899;NABATAEAN LETTER SADHE;Lo;0;R;;;;;N;;;;; 1089A;NABATAEAN LETTER QOPH;Lo;0;R;;;;;N;;;;; 1089B;NABATAEAN LETTER RESH;Lo;0;R;;;;;N;;;;; 1089C;NABATAEAN LETTER FINAL SHIN;Lo;0;R;;;;;N;;;;; 1089D;NABATAEAN LETTER SHIN;Lo;0;R;;;;;N;;;;; 1089E;NABATAEAN LETTER TAW;Lo;0;R;;;;;N;;;;; 108A7;NABATAEAN NUMBER ONE;No;0;R;;;;1;N;;;;; 108A8;NABATAEAN NUMBER TWO;No;0;R;;;;2;N;;;;; 108A9;NABATAEAN NUMBER THREE;No;0;R;;;;3;N;;;;; 108AA;NABATAEAN NUMBER FOUR;No;0;R;;;;4;N;;;;; 108AB;NABATAEAN CRUCIFORM NUMBER FOUR;No;0;R;;;;4;N;;;;; 108AC;NABATAEAN NUMBER FIVE;No;0;R;;;;5;N;;;;; 108AD;NABATAEAN NUMBER TEN;No;0;R;;;;10;N;;;;; 108AE;NABATAEAN NUMBER TWENTY;No;0;R;;;;20;N;;;;; 108AF;NABATAEAN NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;; 108E0;HATRAN LETTER ALEPH;Lo;0;R;;;;;N;;;;; 108E1;HATRAN LETTER BETH;Lo;0;R;;;;;N;;;;; 108E2;HATRAN LETTER GIMEL;Lo;0;R;;;;;N;;;;; 108E3;HATRAN LETTER DALETH-RESH;Lo;0;R;;;;;N;;;;; 108E4;HATRAN LETTER HE;Lo;0;R;;;;;N;;;;; 108E5;HATRAN LETTER WAW;Lo;0;R;;;;;N;;;;; 108E6;HATRAN LETTER ZAYN;Lo;0;R;;;;;N;;;;; 108E7;HATRAN LETTER HETH;Lo;0;R;;;;;N;;;;; 108E8;HATRAN LETTER TETH;Lo;0;R;;;;;N;;;;; 108E9;HATRAN LETTER YODH;Lo;0;R;;;;;N;;;;; 108EA;HATRAN LETTER KAPH;Lo;0;R;;;;;N;;;;; 108EB;HATRAN LETTER LAMEDH;Lo;0;R;;;;;N;;;;; 108EC;HATRAN LETTER MEM;Lo;0;R;;;;;N;;;;; 108ED;HATRAN LETTER NUN;Lo;0;R;;;;;N;;;;; 108EE;HATRAN LETTER SAMEKH;Lo;0;R;;;;;N;;;;; 108EF;HATRAN LETTER AYN;Lo;0;R;;;;;N;;;;; 108F0;HATRAN LETTER PE;Lo;0;R;;;;;N;;;;; 108F1;HATRAN LETTER SADHE;Lo;0;R;;;;;N;;;;; 108F2;HATRAN LETTER QOPH;Lo;0;R;;;;;N;;;;; 108F4;HATRAN LETTER SHIN;Lo;0;R;;;;;N;;;;; 108F5;HATRAN LETTER TAW;Lo;0;R;;;;;N;;;;; 108FB;HATRAN NUMBER ONE;No;0;R;;;;1;N;;;;; 108FC;HATRAN NUMBER FIVE;No;0;R;;;;5;N;;;;; 108FD;HATRAN NUMBER TEN;No;0;R;;;;10;N;;;;; 108FE;HATRAN NUMBER TWENTY;No;0;R;;;;20;N;;;;; 108FF;HATRAN NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;; 10900;PHOENICIAN LETTER ALF;Lo;0;R;;;;;N;;;;; 10901;PHOENICIAN LETTER BET;Lo;0;R;;;;;N;;;;; 10902;PHOENICIAN LETTER GAML;Lo;0;R;;;;;N;;;;; 10903;PHOENICIAN LETTER DELT;Lo;0;R;;;;;N;;;;; 10904;PHOENICIAN LETTER HE;Lo;0;R;;;;;N;;;;; 10905;PHOENICIAN LETTER WAU;Lo;0;R;;;;;N;;;;; 10906;PHOENICIAN LETTER ZAI;Lo;0;R;;;;;N;;;;; 10907;PHOENICIAN LETTER HET;Lo;0;R;;;;;N;;;;; 10908;PHOENICIAN LETTER TET;Lo;0;R;;;;;N;;;;; 10909;PHOENICIAN LETTER YOD;Lo;0;R;;;;;N;;;;; 1090A;PHOENICIAN LETTER KAF;Lo;0;R;;;;;N;;;;; 1090B;PHOENICIAN LETTER LAMD;Lo;0;R;;;;;N;;;;; 1090C;PHOENICIAN LETTER MEM;Lo;0;R;;;;;N;;;;; 1090D;PHOENICIAN LETTER NUN;Lo;0;R;;;;;N;;;;; 1090E;PHOENICIAN LETTER SEMK;Lo;0;R;;;;;N;;;;; 1090F;PHOENICIAN LETTER AIN;Lo;0;R;;;;;N;;;;; 10910;PHOENICIAN LETTER PE;Lo;0;R;;;;;N;;;;; 10911;PHOENICIAN LETTER SADE;Lo;0;R;;;;;N;;;;; 10912;PHOENICIAN LETTER QOF;Lo;0;R;;;;;N;;;;; 10913;PHOENICIAN LETTER ROSH;Lo;0;R;;;;;N;;;;; 10914;PHOENICIAN LETTER SHIN;Lo;0;R;;;;;N;;;;; 10915;PHOENICIAN LETTER TAU;Lo;0;R;;;;;N;;;;; 10916;PHOENICIAN NUMBER ONE;No;0;R;;;;1;N;;;;; 10917;PHOENICIAN NUMBER TEN;No;0;R;;;;10;N;;;;; 10918;PHOENICIAN NUMBER TWENTY;No;0;R;;;;20;N;;;;; 10919;PHOENICIAN NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;; 1091A;PHOENICIAN NUMBER TWO;No;0;R;;;;2;N;;;;; 1091B;PHOENICIAN NUMBER THREE;No;0;R;;;;3;N;;;;; 1091F;PHOENICIAN WORD SEPARATOR;Po;0;ON;;;;;N;;;;; 10920;LYDIAN LETTER A;Lo;0;R;;;;;N;;;;; 10921;LYDIAN LETTER B;Lo;0;R;;;;;N;;;;; 10922;LYDIAN LETTER G;Lo;0;R;;;;;N;;;;; 10923;LYDIAN LETTER D;Lo;0;R;;;;;N;;;;; 10924;LYDIAN LETTER E;Lo;0;R;;;;;N;;;;; 10925;LYDIAN LETTER V;Lo;0;R;;;;;N;;;;; 10926;LYDIAN LETTER I;Lo;0;R;;;;;N;;;;; 10927;LYDIAN LETTER Y;Lo;0;R;;;;;N;;;;; 10928;LYDIAN LETTER K;Lo;0;R;;;;;N;;;;; 10929;LYDIAN LETTER L;Lo;0;R;;;;;N;;;;; 1092A;LYDIAN LETTER M;Lo;0;R;;;;;N;;;;; 1092B;LYDIAN LETTER N;Lo;0;R;;;;;N;;;;; 1092C;LYDIAN LETTER O;Lo;0;R;;;;;N;;;;; 1092D;LYDIAN LETTER R;Lo;0;R;;;;;N;;;;; 1092E;LYDIAN LETTER SS;Lo;0;R;;;;;N;;;;; 1092F;LYDIAN LETTER T;Lo;0;R;;;;;N;;;;; 10930;LYDIAN LETTER U;Lo;0;R;;;;;N;;;;; 10931;LYDIAN LETTER F;Lo;0;R;;;;;N;;;;; 10932;LYDIAN LETTER Q;Lo;0;R;;;;;N;;;;; 10933;LYDIAN LETTER S;Lo;0;R;;;;;N;;;;; 10934;LYDIAN LETTER TT;Lo;0;R;;;;;N;;;;; 10935;LYDIAN LETTER AN;Lo;0;R;;;;;N;;;;; 10936;LYDIAN LETTER EN;Lo;0;R;;;;;N;;;;; 10937;LYDIAN LETTER LY;Lo;0;R;;;;;N;;;;; 10938;LYDIAN LETTER NN;Lo;0;R;;;;;N;;;;; 10939;LYDIAN LETTER C;Lo;0;R;;;;;N;;;;; 1093F;LYDIAN TRIANGULAR MARK;Po;0;R;;;;;N;;;;; 10980;MEROITIC HIEROGLYPHIC LETTER A;Lo;0;R;;;;;N;;;;; 10981;MEROITIC HIEROGLYPHIC LETTER E;Lo;0;R;;;;;N;;;;; 10982;MEROITIC HIEROGLYPHIC LETTER I;Lo;0;R;;;;;N;;;;; 10983;MEROITIC HIEROGLYPHIC LETTER O;Lo;0;R;;;;;N;;;;; 10984;MEROITIC HIEROGLYPHIC LETTER YA;Lo;0;R;;;;;N;;;;; 10985;MEROITIC HIEROGLYPHIC LETTER WA;Lo;0;R;;;;;N;;;;; 10986;MEROITIC HIEROGLYPHIC LETTER BA;Lo;0;R;;;;;N;;;;; 10987;MEROITIC HIEROGLYPHIC LETTER BA-2;Lo;0;R;;;;;N;;;;; 10988;MEROITIC HIEROGLYPHIC LETTER PA;Lo;0;R;;;;;N;;;;; 10989;MEROITIC HIEROGLYPHIC LETTER MA;Lo;0;R;;;;;N;;;;; 1098A;MEROITIC HIEROGLYPHIC LETTER NA;Lo;0;R;;;;;N;;;;; 1098B;MEROITIC HIEROGLYPHIC LETTER NA-2;Lo;0;R;;;;;N;;;;; 1098C;MEROITIC HIEROGLYPHIC LETTER NE;Lo;0;R;;;;;N;;;;; 1098D;MEROITIC HIEROGLYPHIC LETTER NE-2;Lo;0;R;;;;;N;;;;; 1098E;MEROITIC HIEROGLYPHIC LETTER RA;Lo;0;R;;;;;N;;;;; 1098F;MEROITIC HIEROGLYPHIC LETTER RA-2;Lo;0;R;;;;;N;;;;; 10990;MEROITIC HIEROGLYPHIC LETTER LA;Lo;0;R;;;;;N;;;;; 10991;MEROITIC HIEROGLYPHIC LETTER KHA;Lo;0;R;;;;;N;;;;; 10992;MEROITIC HIEROGLYPHIC LETTER HHA;Lo;0;R;;;;;N;;;;; 10993;MEROITIC HIEROGLYPHIC LETTER SA;Lo;0;R;;;;;N;;;;; 10994;MEROITIC HIEROGLYPHIC LETTER SA-2;Lo;0;R;;;;;N;;;;; 10995;MEROITIC HIEROGLYPHIC LETTER SE;Lo;0;R;;;;;N;;;;; 10996;MEROITIC HIEROGLYPHIC LETTER KA;Lo;0;R;;;;;N;;;;; 10997;MEROITIC HIEROGLYPHIC LETTER QA;Lo;0;R;;;;;N;;;;; 10998;MEROITIC HIEROGLYPHIC LETTER TA;Lo;0;R;;;;;N;;;;; 10999;MEROITIC HIEROGLYPHIC LETTER TA-2;Lo;0;R;;;;;N;;;;; 1099A;MEROITIC HIEROGLYPHIC LETTER TE;Lo;0;R;;;;;N;;;;; 1099B;MEROITIC HIEROGLYPHIC LETTER TE-2;Lo;0;R;;;;;N;;;;; 1099C;MEROITIC HIEROGLYPHIC LETTER TO;Lo;0;R;;;;;N;;;;; 1099D;MEROITIC HIEROGLYPHIC LETTER DA;Lo;0;R;;;;;N;;;;; 1099E;MEROITIC HIEROGLYPHIC SYMBOL VIDJ;Lo;0;R;;;;;N;;;;; 1099F;MEROITIC HIEROGLYPHIC SYMBOL VIDJ-2;Lo;0;R;;;;;N;;;;; 109A0;MEROITIC CURSIVE LETTER A;Lo;0;R;;;;;N;;;;; 109A1;MEROITIC CURSIVE LETTER E;Lo;0;R;;;;;N;;;;; 109A2;MEROITIC CURSIVE LETTER I;Lo;0;R;;;;;N;;;;; 109A3;MEROITIC CURSIVE LETTER O;Lo;0;R;;;;;N;;;;; 109A4;MEROITIC CURSIVE LETTER YA;Lo;0;R;;;;;N;;;;; 109A5;MEROITIC CURSIVE LETTER WA;Lo;0;R;;;;;N;;;;; 109A6;MEROITIC CURSIVE LETTER BA;Lo;0;R;;;;;N;;;;; 109A7;MEROITIC CURSIVE LETTER PA;Lo;0;R;;;;;N;;;;; 109A8;MEROITIC CURSIVE LETTER MA;Lo;0;R;;;;;N;;;;; 109A9;MEROITIC CURSIVE LETTER NA;Lo;0;R;;;;;N;;;;; 109AA;MEROITIC CURSIVE LETTER NE;Lo;0;R;;;;;N;;;;; 109AB;MEROITIC CURSIVE LETTER RA;Lo;0;R;;;;;N;;;;; 109AC;MEROITIC CURSIVE LETTER LA;Lo;0;R;;;;;N;;;;; 109AD;MEROITIC CURSIVE LETTER KHA;Lo;0;R;;;;;N;;;;; 109AE;MEROITIC CURSIVE LETTER HHA;Lo;0;R;;;;;N;;;;; 109AF;MEROITIC CURSIVE LETTER SA;Lo;0;R;;;;;N;;;;; 109B0;MEROITIC CURSIVE LETTER ARCHAIC SA;Lo;0;R;;;;;N;;;;; 109B1;MEROITIC CURSIVE LETTER SE;Lo;0;R;;;;;N;;;;; 109B2;MEROITIC CURSIVE LETTER KA;Lo;0;R;;;;;N;;;;; 109B3;MEROITIC CURSIVE LETTER QA;Lo;0;R;;;;;N;;;;; 109B4;MEROITIC CURSIVE LETTER TA;Lo;0;R;;;;;N;;;;; 109B5;MEROITIC CURSIVE LETTER TE;Lo;0;R;;;;;N;;;;; 109B6;MEROITIC CURSIVE LETTER TO;Lo;0;R;;;;;N;;;;; 109B7;MEROITIC CURSIVE LETTER DA;Lo;0;R;;;;;N;;;;; 109BC;MEROITIC CURSIVE FRACTION ELEVEN TWELFTHS;No;0;R;;;;11/12;N;;;;; 109BD;MEROITIC CURSIVE FRACTION ONE HALF;No;0;R;;;;1/2;N;;;;; 109BE;MEROITIC CURSIVE LOGOGRAM RMT;Lo;0;R;;;;;N;;;;; 109BF;MEROITIC CURSIVE LOGOGRAM IMN;Lo;0;R;;;;;N;;;;; 109C0;MEROITIC CURSIVE NUMBER ONE;No;0;R;;;;1;N;;;;; 109C1;MEROITIC CURSIVE NUMBER TWO;No;0;R;;;;2;N;;;;; 109C2;MEROITIC CURSIVE NUMBER THREE;No;0;R;;;;3;N;;;;; 109C3;MEROITIC CURSIVE NUMBER FOUR;No;0;R;;;;4;N;;;;; 109C4;MEROITIC CURSIVE NUMBER FIVE;No;0;R;;;;5;N;;;;; 109C5;MEROITIC CURSIVE NUMBER SIX;No;0;R;;;;6;N;;;;; 109C6;MEROITIC CURSIVE NUMBER SEVEN;No;0;R;;;;7;N;;;;; 109C7;MEROITIC CURSIVE NUMBER EIGHT;No;0;R;;;;8;N;;;;; 109C8;MEROITIC CURSIVE NUMBER NINE;No;0;R;;;;9;N;;;;; 109C9;MEROITIC CURSIVE NUMBER TEN;No;0;R;;;;10;N;;;;; 109CA;MEROITIC CURSIVE NUMBER TWENTY;No;0;R;;;;20;N;;;;; 109CB;MEROITIC CURSIVE NUMBER THIRTY;No;0;R;;;;30;N;;;;; 109CC;MEROITIC CURSIVE NUMBER FORTY;No;0;R;;;;40;N;;;;; 109CD;MEROITIC CURSIVE NUMBER FIFTY;No;0;R;;;;50;N;;;;; 109CE;MEROITIC CURSIVE NUMBER SIXTY;No;0;R;;;;60;N;;;;; 109CF;MEROITIC CURSIVE NUMBER SEVENTY;No;0;R;;;;70;N;;;;; 109D2;MEROITIC CURSIVE NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;; 109D3;MEROITIC CURSIVE NUMBER TWO HUNDRED;No;0;R;;;;200;N;;;;; 109D4;MEROITIC CURSIVE NUMBER THREE HUNDRED;No;0;R;;;;300;N;;;;; 109D5;MEROITIC CURSIVE NUMBER FOUR HUNDRED;No;0;R;;;;400;N;;;;; 109D6;MEROITIC CURSIVE NUMBER FIVE HUNDRED;No;0;R;;;;500;N;;;;; 109D7;MEROITIC CURSIVE NUMBER SIX HUNDRED;No;0;R;;;;600;N;;;;; 109D8;MEROITIC CURSIVE NUMBER SEVEN HUNDRED;No;0;R;;;;700;N;;;;; 109D9;MEROITIC CURSIVE NUMBER EIGHT HUNDRED;No;0;R;;;;800;N;;;;; 109DA;MEROITIC CURSIVE NUMBER NINE HUNDRED;No;0;R;;;;900;N;;;;; 109DB;MEROITIC CURSIVE NUMBER ONE THOUSAND;No;0;R;;;;1000;N;;;;; 109DC;MEROITIC CURSIVE NUMBER TWO THOUSAND;No;0;R;;;;2000;N;;;;; 109DD;MEROITIC CURSIVE NUMBER THREE THOUSAND;No;0;R;;;;3000;N;;;;; 109DE;MEROITIC CURSIVE NUMBER FOUR THOUSAND;No;0;R;;;;4000;N;;;;; 109DF;MEROITIC CURSIVE NUMBER FIVE THOUSAND;No;0;R;;;;5000;N;;;;; 109E0;MEROITIC CURSIVE NUMBER SIX THOUSAND;No;0;R;;;;6000;N;;;;; 109E1;MEROITIC CURSIVE NUMBER SEVEN THOUSAND;No;0;R;;;;7000;N;;;;; 109E2;MEROITIC CURSIVE NUMBER EIGHT THOUSAND;No;0;R;;;;8000;N;;;;; 109E3;MEROITIC CURSIVE NUMBER NINE THOUSAND;No;0;R;;;;9000;N;;;;; 109E4;MEROITIC CURSIVE NUMBER TEN THOUSAND;No;0;R;;;;10000;N;;;;; 109E5;MEROITIC CURSIVE NUMBER TWENTY THOUSAND;No;0;R;;;;20000;N;;;;; 109E6;MEROITIC CURSIVE NUMBER THIRTY THOUSAND;No;0;R;;;;30000;N;;;;; 109E7;MEROITIC CURSIVE NUMBER FORTY THOUSAND;No;0;R;;;;40000;N;;;;; 109E8;MEROITIC CURSIVE NUMBER FIFTY THOUSAND;No;0;R;;;;50000;N;;;;; 109E9;MEROITIC CURSIVE NUMBER SIXTY THOUSAND;No;0;R;;;;60000;N;;;;; 109EA;MEROITIC CURSIVE NUMBER SEVENTY THOUSAND;No;0;R;;;;70000;N;;;;; 109EB;MEROITIC CURSIVE NUMBER EIGHTY THOUSAND;No;0;R;;;;80000;N;;;;; 109EC;MEROITIC CURSIVE NUMBER NINETY THOUSAND;No;0;R;;;;90000;N;;;;; 109ED;MEROITIC CURSIVE NUMBER ONE HUNDRED THOUSAND;No;0;R;;;;100000;N;;;;; 109EE;MEROITIC CURSIVE NUMBER TWO HUNDRED THOUSAND;No;0;R;;;;200000;N;;;;; 109EF;MEROITIC CURSIVE NUMBER THREE HUNDRED THOUSAND;No;0;R;;;;300000;N;;;;; 109F0;MEROITIC CURSIVE NUMBER FOUR HUNDRED THOUSAND;No;0;R;;;;400000;N;;;;; 109F1;MEROITIC CURSIVE NUMBER FIVE HUNDRED THOUSAND;No;0;R;;;;500000;N;;;;; 109F2;MEROITIC CURSIVE NUMBER SIX HUNDRED THOUSAND;No;0;R;;;;600000;N;;;;; 109F3;MEROITIC CURSIVE NUMBER SEVEN HUNDRED THOUSAND;No;0;R;;;;700000;N;;;;; 109F4;MEROITIC CURSIVE NUMBER EIGHT HUNDRED THOUSAND;No;0;R;;;;800000;N;;;;; 109F5;MEROITIC CURSIVE NUMBER NINE HUNDRED THOUSAND;No;0;R;;;;900000;N;;;;; 109F6;MEROITIC CURSIVE FRACTION ONE TWELFTH;No;0;R;;;;1/12;N;;;;; 109F7;MEROITIC CURSIVE FRACTION TWO TWELFTHS;No;0;R;;;;2/12;N;;;;; 109F8;MEROITIC CURSIVE FRACTION THREE TWELFTHS;No;0;R;;;;3/12;N;;;;; 109F9;MEROITIC CURSIVE FRACTION FOUR TWELFTHS;No;0;R;;;;4/12;N;;;;; 109FA;MEROITIC CURSIVE FRACTION FIVE TWELFTHS;No;0;R;;;;5/12;N;;;;; 109FB;MEROITIC CURSIVE FRACTION SIX TWELFTHS;No;0;R;;;;6/12;N;;;;; 109FC;MEROITIC CURSIVE FRACTION SEVEN TWELFTHS;No;0;R;;;;7/12;N;;;;; 109FD;MEROITIC CURSIVE FRACTION EIGHT TWELFTHS;No;0;R;;;;8/12;N;;;;; 109FE;MEROITIC CURSIVE FRACTION NINE TWELFTHS;No;0;R;;;;9/12;N;;;;; 109FF;MEROITIC CURSIVE FRACTION TEN TWELFTHS;No;0;R;;;;10/12;N;;;;; 10A00;KHAROSHTHI LETTER A;Lo;0;R;;;;;N;;;;; 10A01;KHAROSHTHI VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 10A02;KHAROSHTHI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 10A03;KHAROSHTHI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; 10A05;KHAROSHTHI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 10A06;KHAROSHTHI VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;; 10A0C;KHAROSHTHI VOWEL LENGTH MARK;Mn;0;NSM;;;;;N;;;;; 10A0D;KHAROSHTHI SIGN DOUBLE RING BELOW;Mn;220;NSM;;;;;N;;;;; 10A0E;KHAROSHTHI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 10A0F;KHAROSHTHI SIGN VISARGA;Mn;230;NSM;;;;;N;;;;; 10A10;KHAROSHTHI LETTER KA;Lo;0;R;;;;;N;;;;; 10A11;KHAROSHTHI LETTER KHA;Lo;0;R;;;;;N;;;;; 10A12;KHAROSHTHI LETTER GA;Lo;0;R;;;;;N;;;;; 10A13;KHAROSHTHI LETTER GHA;Lo;0;R;;;;;N;;;;; 10A15;KHAROSHTHI LETTER CA;Lo;0;R;;;;;N;;;;; 10A16;KHAROSHTHI LETTER CHA;Lo;0;R;;;;;N;;;;; 10A17;KHAROSHTHI LETTER JA;Lo;0;R;;;;;N;;;;; 10A19;KHAROSHTHI LETTER NYA;Lo;0;R;;;;;N;;;;; 10A1A;KHAROSHTHI LETTER TTA;Lo;0;R;;;;;N;;;;; 10A1B;KHAROSHTHI LETTER TTHA;Lo;0;R;;;;;N;;;;; 10A1C;KHAROSHTHI LETTER DDA;Lo;0;R;;;;;N;;;;; 10A1D;KHAROSHTHI LETTER DDHA;Lo;0;R;;;;;N;;;;; 10A1E;KHAROSHTHI LETTER NNA;Lo;0;R;;;;;N;;;;; 10A1F;KHAROSHTHI LETTER TA;Lo;0;R;;;;;N;;;;; 10A20;KHAROSHTHI LETTER THA;Lo;0;R;;;;;N;;;;; 10A21;KHAROSHTHI LETTER DA;Lo;0;R;;;;;N;;;;; 10A22;KHAROSHTHI LETTER DHA;Lo;0;R;;;;;N;;;;; 10A23;KHAROSHTHI LETTER NA;Lo;0;R;;;;;N;;;;; 10A24;KHAROSHTHI LETTER PA;Lo;0;R;;;;;N;;;;; 10A25;KHAROSHTHI LETTER PHA;Lo;0;R;;;;;N;;;;; 10A26;KHAROSHTHI LETTER BA;Lo;0;R;;;;;N;;;;; 10A27;KHAROSHTHI LETTER BHA;Lo;0;R;;;;;N;;;;; 10A28;KHAROSHTHI LETTER MA;Lo;0;R;;;;;N;;;;; 10A29;KHAROSHTHI LETTER YA;Lo;0;R;;;;;N;;;;; 10A2A;KHAROSHTHI LETTER RA;Lo;0;R;;;;;N;;;;; 10A2B;KHAROSHTHI LETTER LA;Lo;0;R;;;;;N;;;;; 10A2C;KHAROSHTHI LETTER VA;Lo;0;R;;;;;N;;;;; 10A2D;KHAROSHTHI LETTER SHA;Lo;0;R;;;;;N;;;;; 10A2E;KHAROSHTHI LETTER SSA;Lo;0;R;;;;;N;;;;; 10A2F;KHAROSHTHI LETTER SA;Lo;0;R;;;;;N;;;;; 10A30;KHAROSHTHI LETTER ZA;Lo;0;R;;;;;N;;;;; 10A31;KHAROSHTHI LETTER HA;Lo;0;R;;;;;N;;;;; 10A32;KHAROSHTHI LETTER KKA;Lo;0;R;;;;;N;;;;; 10A33;KHAROSHTHI LETTER TTTHA;Lo;0;R;;;;;N;;;;; 10A34;KHAROSHTHI LETTER TTTA;Lo;0;R;;;;;N;;;;; 10A35;KHAROSHTHI LETTER VHA;Lo;0;R;;;;;N;;;;; 10A38;KHAROSHTHI SIGN BAR ABOVE;Mn;230;NSM;;;;;N;;;;; 10A39;KHAROSHTHI SIGN CAUDA;Mn;1;NSM;;;;;N;;;;; 10A3A;KHAROSHTHI SIGN DOT BELOW;Mn;220;NSM;;;;;N;;;;; 10A3F;KHAROSHTHI VIRAMA;Mn;9;NSM;;;;;N;;;;; 10A40;KHAROSHTHI DIGIT ONE;No;0;R;;;1;1;N;;;;; 10A41;KHAROSHTHI DIGIT TWO;No;0;R;;;2;2;N;;;;; 10A42;KHAROSHTHI DIGIT THREE;No;0;R;;;3;3;N;;;;; 10A43;KHAROSHTHI DIGIT FOUR;No;0;R;;;4;4;N;;;;; 10A44;KHAROSHTHI NUMBER TEN;No;0;R;;;;10;N;;;;; 10A45;KHAROSHTHI NUMBER TWENTY;No;0;R;;;;20;N;;;;; 10A46;KHAROSHTHI NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;; 10A47;KHAROSHTHI NUMBER ONE THOUSAND;No;0;R;;;;1000;N;;;;; 10A48;KHAROSHTHI FRACTION ONE HALF;No;0;R;;;;1/2;N;;;;; 10A50;KHAROSHTHI PUNCTUATION DOT;Po;0;R;;;;;N;;;;; 10A51;KHAROSHTHI PUNCTUATION SMALL CIRCLE;Po;0;R;;;;;N;;;;; 10A52;KHAROSHTHI PUNCTUATION CIRCLE;Po;0;R;;;;;N;;;;; 10A53;KHAROSHTHI PUNCTUATION CRESCENT BAR;Po;0;R;;;;;N;;;;; 10A54;KHAROSHTHI PUNCTUATION MANGALAM;Po;0;R;;;;;N;;;;; 10A55;KHAROSHTHI PUNCTUATION LOTUS;Po;0;R;;;;;N;;;;; 10A56;KHAROSHTHI PUNCTUATION DANDA;Po;0;R;;;;;N;;;;; 10A57;KHAROSHTHI PUNCTUATION DOUBLE DANDA;Po;0;R;;;;;N;;;;; 10A58;KHAROSHTHI PUNCTUATION LINES;Po;0;R;;;;;N;;;;; 10A60;OLD SOUTH ARABIAN LETTER HE;Lo;0;R;;;;;N;;;;; 10A61;OLD SOUTH ARABIAN LETTER LAMEDH;Lo;0;R;;;;;N;;;;; 10A62;OLD SOUTH ARABIAN LETTER HETH;Lo;0;R;;;;;N;;;;; 10A63;OLD SOUTH ARABIAN LETTER MEM;Lo;0;R;;;;;N;;;;; 10A64;OLD SOUTH ARABIAN LETTER QOPH;Lo;0;R;;;;;N;;;;; 10A65;OLD SOUTH ARABIAN LETTER WAW;Lo;0;R;;;;;N;;;;; 10A66;OLD SOUTH ARABIAN LETTER SHIN;Lo;0;R;;;;;N;;;;; 10A67;OLD SOUTH ARABIAN LETTER RESH;Lo;0;R;;;;;N;;;;; 10A68;OLD SOUTH ARABIAN LETTER BETH;Lo;0;R;;;;;N;;;;; 10A69;OLD SOUTH ARABIAN LETTER TAW;Lo;0;R;;;;;N;;;;; 10A6A;OLD SOUTH ARABIAN LETTER SAT;Lo;0;R;;;;;N;;;;; 10A6B;OLD SOUTH ARABIAN LETTER KAPH;Lo;0;R;;;;;N;;;;; 10A6C;OLD SOUTH ARABIAN LETTER NUN;Lo;0;R;;;;;N;;;;; 10A6D;OLD SOUTH ARABIAN LETTER KHETH;Lo;0;R;;;;;N;;;;; 10A6E;OLD SOUTH ARABIAN LETTER SADHE;Lo;0;R;;;;;N;;;;; 10A6F;OLD SOUTH ARABIAN LETTER SAMEKH;Lo;0;R;;;;;N;;;;; 10A70;OLD SOUTH ARABIAN LETTER FE;Lo;0;R;;;;;N;;;;; 10A71;OLD SOUTH ARABIAN LETTER ALEF;Lo;0;R;;;;;N;;;;; 10A72;OLD SOUTH ARABIAN LETTER AYN;Lo;0;R;;;;;N;;;;; 10A73;OLD SOUTH ARABIAN LETTER DHADHE;Lo;0;R;;;;;N;;;;; 10A74;OLD SOUTH ARABIAN LETTER GIMEL;Lo;0;R;;;;;N;;;;; 10A75;OLD SOUTH ARABIAN LETTER DALETH;Lo;0;R;;;;;N;;;;; 10A76;OLD SOUTH ARABIAN LETTER GHAYN;Lo;0;R;;;;;N;;;;; 10A77;OLD SOUTH ARABIAN LETTER TETH;Lo;0;R;;;;;N;;;;; 10A78;OLD SOUTH ARABIAN LETTER ZAYN;Lo;0;R;;;;;N;;;;; 10A79;OLD SOUTH ARABIAN LETTER DHALETH;Lo;0;R;;;;;N;;;;; 10A7A;OLD SOUTH ARABIAN LETTER YODH;Lo;0;R;;;;;N;;;;; 10A7B;OLD SOUTH ARABIAN LETTER THAW;Lo;0;R;;;;;N;;;;; 10A7C;OLD SOUTH ARABIAN LETTER THETH;Lo;0;R;;;;;N;;;;; 10A7D;OLD SOUTH ARABIAN NUMBER ONE;No;0;R;;;;1;N;;;;; 10A7E;OLD SOUTH ARABIAN NUMBER FIFTY;No;0;R;;;;50;N;;;;; 10A7F;OLD SOUTH ARABIAN NUMERIC INDICATOR;Po;0;R;;;;;N;;;;; 10A80;OLD NORTH ARABIAN LETTER HEH;Lo;0;R;;;;;N;;;;; 10A81;OLD NORTH ARABIAN LETTER LAM;Lo;0;R;;;;;N;;;;; 10A82;OLD NORTH ARABIAN LETTER HAH;Lo;0;R;;;;;N;;;;; 10A83;OLD NORTH ARABIAN LETTER MEEM;Lo;0;R;;;;;N;;;;; 10A84;OLD NORTH ARABIAN LETTER QAF;Lo;0;R;;;;;N;;;;; 10A85;OLD NORTH ARABIAN LETTER WAW;Lo;0;R;;;;;N;;;;; 10A86;OLD NORTH ARABIAN LETTER ES-2;Lo;0;R;;;;;N;;;;; 10A87;OLD NORTH ARABIAN LETTER REH;Lo;0;R;;;;;N;;;;; 10A88;OLD NORTH ARABIAN LETTER BEH;Lo;0;R;;;;;N;;;;; 10A89;OLD NORTH ARABIAN LETTER TEH;Lo;0;R;;;;;N;;;;; 10A8A;OLD NORTH ARABIAN LETTER ES-1;Lo;0;R;;;;;N;;;;; 10A8B;OLD NORTH ARABIAN LETTER KAF;Lo;0;R;;;;;N;;;;; 10A8C;OLD NORTH ARABIAN LETTER NOON;Lo;0;R;;;;;N;;;;; 10A8D;OLD NORTH ARABIAN LETTER KHAH;Lo;0;R;;;;;N;;;;; 10A8E;OLD NORTH ARABIAN LETTER SAD;Lo;0;R;;;;;N;;;;; 10A8F;OLD NORTH ARABIAN LETTER ES-3;Lo;0;R;;;;;N;;;;; 10A90;OLD NORTH ARABIAN LETTER FEH;Lo;0;R;;;;;N;;;;; 10A91;OLD NORTH ARABIAN LETTER ALEF;Lo;0;R;;;;;N;;;;; 10A92;OLD NORTH ARABIAN LETTER AIN;Lo;0;R;;;;;N;;;;; 10A93;OLD NORTH ARABIAN LETTER DAD;Lo;0;R;;;;;N;;;;; 10A94;OLD NORTH ARABIAN LETTER GEEM;Lo;0;R;;;;;N;;;;; 10A95;OLD NORTH ARABIAN LETTER DAL;Lo;0;R;;;;;N;;;;; 10A96;OLD NORTH ARABIAN LETTER GHAIN;Lo;0;R;;;;;N;;;;; 10A97;OLD NORTH ARABIAN LETTER TAH;Lo;0;R;;;;;N;;;;; 10A98;OLD NORTH ARABIAN LETTER ZAIN;Lo;0;R;;;;;N;;;;; 10A99;OLD NORTH ARABIAN LETTER THAL;Lo;0;R;;;;;N;;;;; 10A9A;OLD NORTH ARABIAN LETTER YEH;Lo;0;R;;;;;N;;;;; 10A9B;OLD NORTH ARABIAN LETTER THEH;Lo;0;R;;;;;N;;;;; 10A9C;OLD NORTH ARABIAN LETTER ZAH;Lo;0;R;;;;;N;;;;; 10A9D;OLD NORTH ARABIAN NUMBER ONE;No;0;R;;;;1;N;;;;; 10A9E;OLD NORTH ARABIAN NUMBER TEN;No;0;R;;;;10;N;;;;; 10A9F;OLD NORTH ARABIAN NUMBER TWENTY;No;0;R;;;;20;N;;;;; 10AC0;MANICHAEAN LETTER ALEPH;Lo;0;R;;;;;N;;;;; 10AC1;MANICHAEAN LETTER BETH;Lo;0;R;;;;;N;;;;; 10AC2;MANICHAEAN LETTER BHETH;Lo;0;R;;;;;N;;;;; 10AC3;MANICHAEAN LETTER GIMEL;Lo;0;R;;;;;N;;;;; 10AC4;MANICHAEAN LETTER GHIMEL;Lo;0;R;;;;;N;;;;; 10AC5;MANICHAEAN LETTER DALETH;Lo;0;R;;;;;N;;;;; 10AC6;MANICHAEAN LETTER HE;Lo;0;R;;;;;N;;;;; 10AC7;MANICHAEAN LETTER WAW;Lo;0;R;;;;;N;;;;; 10AC8;MANICHAEAN SIGN UD;So;0;R;;;;;N;;;;; 10AC9;MANICHAEAN LETTER ZAYIN;Lo;0;R;;;;;N;;;;; 10ACA;MANICHAEAN LETTER ZHAYIN;Lo;0;R;;;;;N;;;;; 10ACB;MANICHAEAN LETTER JAYIN;Lo;0;R;;;;;N;;;;; 10ACC;MANICHAEAN LETTER JHAYIN;Lo;0;R;;;;;N;;;;; 10ACD;MANICHAEAN LETTER HETH;Lo;0;R;;;;;N;;;;; 10ACE;MANICHAEAN LETTER TETH;Lo;0;R;;;;;N;;;;; 10ACF;MANICHAEAN LETTER YODH;Lo;0;R;;;;;N;;;;; 10AD0;MANICHAEAN LETTER KAPH;Lo;0;R;;;;;N;;;;; 10AD1;MANICHAEAN LETTER XAPH;Lo;0;R;;;;;N;;;;; 10AD2;MANICHAEAN LETTER KHAPH;Lo;0;R;;;;;N;;;;; 10AD3;MANICHAEAN LETTER LAMEDH;Lo;0;R;;;;;N;;;;; 10AD4;MANICHAEAN LETTER DHAMEDH;Lo;0;R;;;;;N;;;;; 10AD5;MANICHAEAN LETTER THAMEDH;Lo;0;R;;;;;N;;;;; 10AD6;MANICHAEAN LETTER MEM;Lo;0;R;;;;;N;;;;; 10AD7;MANICHAEAN LETTER NUN;Lo;0;R;;;;;N;;;;; 10AD8;MANICHAEAN LETTER SAMEKH;Lo;0;R;;;;;N;;;;; 10AD9;MANICHAEAN LETTER AYIN;Lo;0;R;;;;;N;;;;; 10ADA;MANICHAEAN LETTER AAYIN;Lo;0;R;;;;;N;;;;; 10ADB;MANICHAEAN LETTER PE;Lo;0;R;;;;;N;;;;; 10ADC;MANICHAEAN LETTER FE;Lo;0;R;;;;;N;;;;; 10ADD;MANICHAEAN LETTER SADHE;Lo;0;R;;;;;N;;;;; 10ADE;MANICHAEAN LETTER QOPH;Lo;0;R;;;;;N;;;;; 10ADF;MANICHAEAN LETTER XOPH;Lo;0;R;;;;;N;;;;; 10AE0;MANICHAEAN LETTER QHOPH;Lo;0;R;;;;;N;;;;; 10AE1;MANICHAEAN LETTER RESH;Lo;0;R;;;;;N;;;;; 10AE2;MANICHAEAN LETTER SHIN;Lo;0;R;;;;;N;;;;; 10AE3;MANICHAEAN LETTER SSHIN;Lo;0;R;;;;;N;;;;; 10AE4;MANICHAEAN LETTER TAW;Lo;0;R;;;;;N;;;;; 10AE5;MANICHAEAN ABBREVIATION MARK ABOVE;Mn;230;NSM;;;;;N;;;;; 10AE6;MANICHAEAN ABBREVIATION MARK BELOW;Mn;220;NSM;;;;;N;;;;; 10AEB;MANICHAEAN NUMBER ONE;No;0;R;;;;1;N;;;;; 10AEC;MANICHAEAN NUMBER FIVE;No;0;R;;;;5;N;;;;; 10AED;MANICHAEAN NUMBER TEN;No;0;R;;;;10;N;;;;; 10AEE;MANICHAEAN NUMBER TWENTY;No;0;R;;;;20;N;;;;; 10AEF;MANICHAEAN NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;; 10AF0;MANICHAEAN PUNCTUATION STAR;Po;0;R;;;;;N;;;;; 10AF1;MANICHAEAN PUNCTUATION FLEURON;Po;0;R;;;;;N;;;;; 10AF2;MANICHAEAN PUNCTUATION DOUBLE DOT WITHIN DOT;Po;0;R;;;;;N;;;;; 10AF3;MANICHAEAN PUNCTUATION DOT WITHIN DOT;Po;0;R;;;;;N;;;;; 10AF4;MANICHAEAN PUNCTUATION DOT;Po;0;R;;;;;N;;;;; 10AF5;MANICHAEAN PUNCTUATION TWO DOTS;Po;0;R;;;;;N;;;;; 10AF6;MANICHAEAN PUNCTUATION LINE FILLER;Po;0;R;;;;;N;;;;; 10B00;AVESTAN LETTER A;Lo;0;R;;;;;N;;;;; 10B01;AVESTAN LETTER AA;Lo;0;R;;;;;N;;;;; 10B02;AVESTAN LETTER AO;Lo;0;R;;;;;N;;;;; 10B03;AVESTAN LETTER AAO;Lo;0;R;;;;;N;;;;; 10B04;AVESTAN LETTER AN;Lo;0;R;;;;;N;;;;; 10B05;AVESTAN LETTER AAN;Lo;0;R;;;;;N;;;;; 10B06;AVESTAN LETTER AE;Lo;0;R;;;;;N;;;;; 10B07;AVESTAN LETTER AEE;Lo;0;R;;;;;N;;;;; 10B08;AVESTAN LETTER E;Lo;0;R;;;;;N;;;;; 10B09;AVESTAN LETTER EE;Lo;0;R;;;;;N;;;;; 10B0A;AVESTAN LETTER O;Lo;0;R;;;;;N;;;;; 10B0B;AVESTAN LETTER OO;Lo;0;R;;;;;N;;;;; 10B0C;AVESTAN LETTER I;Lo;0;R;;;;;N;;;;; 10B0D;AVESTAN LETTER II;Lo;0;R;;;;;N;;;;; 10B0E;AVESTAN LETTER U;Lo;0;R;;;;;N;;;;; 10B0F;AVESTAN LETTER UU;Lo;0;R;;;;;N;;;;; 10B10;AVESTAN LETTER KE;Lo;0;R;;;;;N;;;;; 10B11;AVESTAN LETTER XE;Lo;0;R;;;;;N;;;;; 10B12;AVESTAN LETTER XYE;Lo;0;R;;;;;N;;;;; 10B13;AVESTAN LETTER XVE;Lo;0;R;;;;;N;;;;; 10B14;AVESTAN LETTER GE;Lo;0;R;;;;;N;;;;; 10B15;AVESTAN LETTER GGE;Lo;0;R;;;;;N;;;;; 10B16;AVESTAN LETTER GHE;Lo;0;R;;;;;N;;;;; 10B17;AVESTAN LETTER CE;Lo;0;R;;;;;N;;;;; 10B18;AVESTAN LETTER JE;Lo;0;R;;;;;N;;;;; 10B19;AVESTAN LETTER TE;Lo;0;R;;;;;N;;;;; 10B1A;AVESTAN LETTER THE;Lo;0;R;;;;;N;;;;; 10B1B;AVESTAN LETTER DE;Lo;0;R;;;;;N;;;;; 10B1C;AVESTAN LETTER DHE;Lo;0;R;;;;;N;;;;; 10B1D;AVESTAN LETTER TTE;Lo;0;R;;;;;N;;;;; 10B1E;AVESTAN LETTER PE;Lo;0;R;;;;;N;;;;; 10B1F;AVESTAN LETTER FE;Lo;0;R;;;;;N;;;;; 10B20;AVESTAN LETTER BE;Lo;0;R;;;;;N;;;;; 10B21;AVESTAN LETTER BHE;Lo;0;R;;;;;N;;;;; 10B22;AVESTAN LETTER NGE;Lo;0;R;;;;;N;;;;; 10B23;AVESTAN LETTER NGYE;Lo;0;R;;;;;N;;;;; 10B24;AVESTAN LETTER NGVE;Lo;0;R;;;;;N;;;;; 10B25;AVESTAN LETTER NE;Lo;0;R;;;;;N;;;;; 10B26;AVESTAN LETTER NYE;Lo;0;R;;;;;N;;;;; 10B27;AVESTAN LETTER NNE;Lo;0;R;;;;;N;;;;; 10B28;AVESTAN LETTER ME;Lo;0;R;;;;;N;;;;; 10B29;AVESTAN LETTER HME;Lo;0;R;;;;;N;;;;; 10B2A;AVESTAN LETTER YYE;Lo;0;R;;;;;N;;;;; 10B2B;AVESTAN LETTER YE;Lo;0;R;;;;;N;;;;; 10B2C;AVESTAN LETTER VE;Lo;0;R;;;;;N;;;;; 10B2D;AVESTAN LETTER RE;Lo;0;R;;;;;N;;;;; 10B2E;AVESTAN LETTER LE;Lo;0;R;;;;;N;;;;; 10B2F;AVESTAN LETTER SE;Lo;0;R;;;;;N;;;;; 10B30;AVESTAN LETTER ZE;Lo;0;R;;;;;N;;;;; 10B31;AVESTAN LETTER SHE;Lo;0;R;;;;;N;;;;; 10B32;AVESTAN LETTER ZHE;Lo;0;R;;;;;N;;;;; 10B33;AVESTAN LETTER SHYE;Lo;0;R;;;;;N;;;;; 10B34;AVESTAN LETTER SSHE;Lo;0;R;;;;;N;;;;; 10B35;AVESTAN LETTER HE;Lo;0;R;;;;;N;;;;; 10B39;AVESTAN ABBREVIATION MARK;Po;0;ON;;;;;N;;;;; 10B3A;TINY TWO DOTS OVER ONE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;; 10B3B;SMALL TWO DOTS OVER ONE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;; 10B3C;LARGE TWO DOTS OVER ONE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;; 10B3D;LARGE ONE DOT OVER TWO DOTS PUNCTUATION;Po;0;ON;;;;;N;;;;; 10B3E;LARGE TWO RINGS OVER ONE RING PUNCTUATION;Po;0;ON;;;;;N;;;;; 10B3F;LARGE ONE RING OVER TWO RINGS PUNCTUATION;Po;0;ON;;;;;N;;;;; 10B40;INSCRIPTIONAL PARTHIAN LETTER ALEPH;Lo;0;R;;;;;N;;;;; 10B41;INSCRIPTIONAL PARTHIAN LETTER BETH;Lo;0;R;;;;;N;;;;; 10B42;INSCRIPTIONAL PARTHIAN LETTER GIMEL;Lo;0;R;;;;;N;;;;; 10B43;INSCRIPTIONAL PARTHIAN LETTER DALETH;Lo;0;R;;;;;N;;;;; 10B44;INSCRIPTIONAL PARTHIAN LETTER HE;Lo;0;R;;;;;N;;;;; 10B45;INSCRIPTIONAL PARTHIAN LETTER WAW;Lo;0;R;;;;;N;;;;; 10B46;INSCRIPTIONAL PARTHIAN LETTER ZAYIN;Lo;0;R;;;;;N;;;;; 10B47;INSCRIPTIONAL PARTHIAN LETTER HETH;Lo;0;R;;;;;N;;;;; 10B48;INSCRIPTIONAL PARTHIAN LETTER TETH;Lo;0;R;;;;;N;;;;; 10B49;INSCRIPTIONAL PARTHIAN LETTER YODH;Lo;0;R;;;;;N;;;;; 10B4A;INSCRIPTIONAL PARTHIAN LETTER KAPH;Lo;0;R;;;;;N;;;;; 10B4B;INSCRIPTIONAL PARTHIAN LETTER LAMEDH;Lo;0;R;;;;;N;;;;; 10B4C;INSCRIPTIONAL PARTHIAN LETTER MEM;Lo;0;R;;;;;N;;;;; 10B4D;INSCRIPTIONAL PARTHIAN LETTER NUN;Lo;0;R;;;;;N;;;;; 10B4E;INSCRIPTIONAL PARTHIAN LETTER SAMEKH;Lo;0;R;;;;;N;;;;; 10B4F;INSCRIPTIONAL PARTHIAN LETTER AYIN;Lo;0;R;;;;;N;;;;; 10B50;INSCRIPTIONAL PARTHIAN LETTER PE;Lo;0;R;;;;;N;;;;; 10B51;INSCRIPTIONAL PARTHIAN LETTER SADHE;Lo;0;R;;;;;N;;;;; 10B52;INSCRIPTIONAL PARTHIAN LETTER QOPH;Lo;0;R;;;;;N;;;;; 10B53;INSCRIPTIONAL PARTHIAN LETTER RESH;Lo;0;R;;;;;N;;;;; 10B54;INSCRIPTIONAL PARTHIAN LETTER SHIN;Lo;0;R;;;;;N;;;;; 10B55;INSCRIPTIONAL PARTHIAN LETTER TAW;Lo;0;R;;;;;N;;;;; 10B58;INSCRIPTIONAL PARTHIAN NUMBER ONE;No;0;R;;;;1;N;;;;; 10B59;INSCRIPTIONAL PARTHIAN NUMBER TWO;No;0;R;;;;2;N;;;;; 10B5A;INSCRIPTIONAL PARTHIAN NUMBER THREE;No;0;R;;;;3;N;;;;; 10B5B;INSCRIPTIONAL PARTHIAN NUMBER FOUR;No;0;R;;;;4;N;;;;; 10B5C;INSCRIPTIONAL PARTHIAN NUMBER TEN;No;0;R;;;;10;N;;;;; 10B5D;INSCRIPTIONAL PARTHIAN NUMBER TWENTY;No;0;R;;;;20;N;;;;; 10B5E;INSCRIPTIONAL PARTHIAN NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;; 10B5F;INSCRIPTIONAL PARTHIAN NUMBER ONE THOUSAND;No;0;R;;;;1000;N;;;;; 10B60;INSCRIPTIONAL PAHLAVI LETTER ALEPH;Lo;0;R;;;;;N;;;;; 10B61;INSCRIPTIONAL PAHLAVI LETTER BETH;Lo;0;R;;;;;N;;;;; 10B62;INSCRIPTIONAL PAHLAVI LETTER GIMEL;Lo;0;R;;;;;N;;;;; 10B63;INSCRIPTIONAL PAHLAVI LETTER DALETH;Lo;0;R;;;;;N;;;;; 10B64;INSCRIPTIONAL PAHLAVI LETTER HE;Lo;0;R;;;;;N;;;;; 10B65;INSCRIPTIONAL PAHLAVI LETTER WAW-AYIN-RESH;Lo;0;R;;;;;N;;;;; 10B66;INSCRIPTIONAL PAHLAVI LETTER ZAYIN;Lo;0;R;;;;;N;;;;; 10B67;INSCRIPTIONAL PAHLAVI LETTER HETH;Lo;0;R;;;;;N;;;;; 10B68;INSCRIPTIONAL PAHLAVI LETTER TETH;Lo;0;R;;;;;N;;;;; 10B69;INSCRIPTIONAL PAHLAVI LETTER YODH;Lo;0;R;;;;;N;;;;; 10B6A;INSCRIPTIONAL PAHLAVI LETTER KAPH;Lo;0;R;;;;;N;;;;; 10B6B;INSCRIPTIONAL PAHLAVI LETTER LAMEDH;Lo;0;R;;;;;N;;;;; 10B6C;INSCRIPTIONAL PAHLAVI LETTER MEM-QOPH;Lo;0;R;;;;;N;;;;; 10B6D;INSCRIPTIONAL PAHLAVI LETTER NUN;Lo;0;R;;;;;N;;;;; 10B6E;INSCRIPTIONAL PAHLAVI LETTER SAMEKH;Lo;0;R;;;;;N;;;;; 10B6F;INSCRIPTIONAL PAHLAVI LETTER PE;Lo;0;R;;;;;N;;;;; 10B70;INSCRIPTIONAL PAHLAVI LETTER SADHE;Lo;0;R;;;;;N;;;;; 10B71;INSCRIPTIONAL PAHLAVI LETTER SHIN;Lo;0;R;;;;;N;;;;; 10B72;INSCRIPTIONAL PAHLAVI LETTER TAW;Lo;0;R;;;;;N;;;;; 10B78;INSCRIPTIONAL PAHLAVI NUMBER ONE;No;0;R;;;;1;N;;;;; 10B79;INSCRIPTIONAL PAHLAVI NUMBER TWO;No;0;R;;;;2;N;;;;; 10B7A;INSCRIPTIONAL PAHLAVI NUMBER THREE;No;0;R;;;;3;N;;;;; 10B7B;INSCRIPTIONAL PAHLAVI NUMBER FOUR;No;0;R;;;;4;N;;;;; 10B7C;INSCRIPTIONAL PAHLAVI NUMBER TEN;No;0;R;;;;10;N;;;;; 10B7D;INSCRIPTIONAL PAHLAVI NUMBER TWENTY;No;0;R;;;;20;N;;;;; 10B7E;INSCRIPTIONAL PAHLAVI NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;; 10B7F;INSCRIPTIONAL PAHLAVI NUMBER ONE THOUSAND;No;0;R;;;;1000;N;;;;; 10B80;PSALTER PAHLAVI LETTER ALEPH;Lo;0;R;;;;;N;;;;; 10B81;PSALTER PAHLAVI LETTER BETH;Lo;0;R;;;;;N;;;;; 10B82;PSALTER PAHLAVI LETTER GIMEL;Lo;0;R;;;;;N;;;;; 10B83;PSALTER PAHLAVI LETTER DALETH;Lo;0;R;;;;;N;;;;; 10B84;PSALTER PAHLAVI LETTER HE;Lo;0;R;;;;;N;;;;; 10B85;PSALTER PAHLAVI LETTER WAW-AYIN-RESH;Lo;0;R;;;;;N;;;;; 10B86;PSALTER PAHLAVI LETTER ZAYIN;Lo;0;R;;;;;N;;;;; 10B87;PSALTER PAHLAVI LETTER HETH;Lo;0;R;;;;;N;;;;; 10B88;PSALTER PAHLAVI LETTER YODH;Lo;0;R;;;;;N;;;;; 10B89;PSALTER PAHLAVI LETTER KAPH;Lo;0;R;;;;;N;;;;; 10B8A;PSALTER PAHLAVI LETTER LAMEDH;Lo;0;R;;;;;N;;;;; 10B8B;PSALTER PAHLAVI LETTER MEM-QOPH;Lo;0;R;;;;;N;;;;; 10B8C;PSALTER PAHLAVI LETTER NUN;Lo;0;R;;;;;N;;;;; 10B8D;PSALTER PAHLAVI LETTER SAMEKH;Lo;0;R;;;;;N;;;;; 10B8E;PSALTER PAHLAVI LETTER PE;Lo;0;R;;;;;N;;;;; 10B8F;PSALTER PAHLAVI LETTER SADHE;Lo;0;R;;;;;N;;;;; 10B90;PSALTER PAHLAVI LETTER SHIN;Lo;0;R;;;;;N;;;;; 10B91;PSALTER PAHLAVI LETTER TAW;Lo;0;R;;;;;N;;;;; 10B99;PSALTER PAHLAVI SECTION MARK;Po;0;R;;;;;N;;;;; 10B9A;PSALTER PAHLAVI TURNED SECTION MARK;Po;0;R;;;;;N;;;;; 10B9B;PSALTER PAHLAVI FOUR DOTS WITH CROSS;Po;0;R;;;;;N;;;;; 10B9C;PSALTER PAHLAVI FOUR DOTS WITH DOT;Po;0;R;;;;;N;;;;; 10BA9;PSALTER PAHLAVI NUMBER ONE;No;0;R;;;;1;N;;;;; 10BAA;PSALTER PAHLAVI NUMBER TWO;No;0;R;;;;2;N;;;;; 10BAB;PSALTER PAHLAVI NUMBER THREE;No;0;R;;;;3;N;;;;; 10BAC;PSALTER PAHLAVI NUMBER FOUR;No;0;R;;;;4;N;;;;; 10BAD;PSALTER PAHLAVI NUMBER TEN;No;0;R;;;;10;N;;;;; 10BAE;PSALTER PAHLAVI NUMBER TWENTY;No;0;R;;;;20;N;;;;; 10BAF;PSALTER PAHLAVI NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;; 10C00;OLD TURKIC LETTER ORKHON A;Lo;0;R;;;;;N;;;;; 10C01;OLD TURKIC LETTER YENISEI A;Lo;0;R;;;;;N;;;;; 10C02;OLD TURKIC LETTER YENISEI AE;Lo;0;R;;;;;N;;;;; 10C03;OLD TURKIC LETTER ORKHON I;Lo;0;R;;;;;N;;;;; 10C04;OLD TURKIC LETTER YENISEI I;Lo;0;R;;;;;N;;;;; 10C05;OLD TURKIC LETTER YENISEI E;Lo;0;R;;;;;N;;;;; 10C06;OLD TURKIC LETTER ORKHON O;Lo;0;R;;;;;N;;;;; 10C07;OLD TURKIC LETTER ORKHON OE;Lo;0;R;;;;;N;;;;; 10C08;OLD TURKIC LETTER YENISEI OE;Lo;0;R;;;;;N;;;;; 10C09;OLD TURKIC LETTER ORKHON AB;Lo;0;R;;;;;N;;;;; 10C0A;OLD TURKIC LETTER YENISEI AB;Lo;0;R;;;;;N;;;;; 10C0B;OLD TURKIC LETTER ORKHON AEB;Lo;0;R;;;;;N;;;;; 10C0C;OLD TURKIC LETTER YENISEI AEB;Lo;0;R;;;;;N;;;;; 10C0D;OLD TURKIC LETTER ORKHON AG;Lo;0;R;;;;;N;;;;; 10C0E;OLD TURKIC LETTER YENISEI AG;Lo;0;R;;;;;N;;;;; 10C0F;OLD TURKIC LETTER ORKHON AEG;Lo;0;R;;;;;N;;;;; 10C10;OLD TURKIC LETTER YENISEI AEG;Lo;0;R;;;;;N;;;;; 10C11;OLD TURKIC LETTER ORKHON AD;Lo;0;R;;;;;N;;;;; 10C12;OLD TURKIC LETTER YENISEI AD;Lo;0;R;;;;;N;;;;; 10C13;OLD TURKIC LETTER ORKHON AED;Lo;0;R;;;;;N;;;;; 10C14;OLD TURKIC LETTER ORKHON EZ;Lo;0;R;;;;;N;;;;; 10C15;OLD TURKIC LETTER YENISEI EZ;Lo;0;R;;;;;N;;;;; 10C16;OLD TURKIC LETTER ORKHON AY;Lo;0;R;;;;;N;;;;; 10C17;OLD TURKIC LETTER YENISEI AY;Lo;0;R;;;;;N;;;;; 10C18;OLD TURKIC LETTER ORKHON AEY;Lo;0;R;;;;;N;;;;; 10C19;OLD TURKIC LETTER YENISEI AEY;Lo;0;R;;;;;N;;;;; 10C1A;OLD TURKIC LETTER ORKHON AEK;Lo;0;R;;;;;N;;;;; 10C1B;OLD TURKIC LETTER YENISEI AEK;Lo;0;R;;;;;N;;;;; 10C1C;OLD TURKIC LETTER ORKHON OEK;Lo;0;R;;;;;N;;;;; 10C1D;OLD TURKIC LETTER YENISEI OEK;Lo;0;R;;;;;N;;;;; 10C1E;OLD TURKIC LETTER ORKHON AL;Lo;0;R;;;;;N;;;;; 10C1F;OLD TURKIC LETTER YENISEI AL;Lo;0;R;;;;;N;;;;; 10C20;OLD TURKIC LETTER ORKHON AEL;Lo;0;R;;;;;N;;;;; 10C21;OLD TURKIC LETTER ORKHON ELT;Lo;0;R;;;;;N;;;;; 10C22;OLD TURKIC LETTER ORKHON EM;Lo;0;R;;;;;N;;;;; 10C23;OLD TURKIC LETTER ORKHON AN;Lo;0;R;;;;;N;;;;; 10C24;OLD TURKIC LETTER ORKHON AEN;Lo;0;R;;;;;N;;;;; 10C25;OLD TURKIC LETTER YENISEI AEN;Lo;0;R;;;;;N;;;;; 10C26;OLD TURKIC LETTER ORKHON ENT;Lo;0;R;;;;;N;;;;; 10C27;OLD TURKIC LETTER YENISEI ENT;Lo;0;R;;;;;N;;;;; 10C28;OLD TURKIC LETTER ORKHON ENC;Lo;0;R;;;;;N;;;;; 10C29;OLD TURKIC LETTER YENISEI ENC;Lo;0;R;;;;;N;;;;; 10C2A;OLD TURKIC LETTER ORKHON ENY;Lo;0;R;;;;;N;;;;; 10C2B;OLD TURKIC LETTER YENISEI ENY;Lo;0;R;;;;;N;;;;; 10C2C;OLD TURKIC LETTER YENISEI ANG;Lo;0;R;;;;;N;;;;; 10C2D;OLD TURKIC LETTER ORKHON ENG;Lo;0;R;;;;;N;;;;; 10C2E;OLD TURKIC LETTER YENISEI AENG;Lo;0;R;;;;;N;;;;; 10C2F;OLD TURKIC LETTER ORKHON EP;Lo;0;R;;;;;N;;;;; 10C30;OLD TURKIC LETTER ORKHON OP;Lo;0;R;;;;;N;;;;; 10C31;OLD TURKIC LETTER ORKHON IC;Lo;0;R;;;;;N;;;;; 10C32;OLD TURKIC LETTER ORKHON EC;Lo;0;R;;;;;N;;;;; 10C33;OLD TURKIC LETTER YENISEI EC;Lo;0;R;;;;;N;;;;; 10C34;OLD TURKIC LETTER ORKHON AQ;Lo;0;R;;;;;N;;;;; 10C35;OLD TURKIC LETTER YENISEI AQ;Lo;0;R;;;;;N;;;;; 10C36;OLD TURKIC LETTER ORKHON IQ;Lo;0;R;;;;;N;;;;; 10C37;OLD TURKIC LETTER YENISEI IQ;Lo;0;R;;;;;N;;;;; 10C38;OLD TURKIC LETTER ORKHON OQ;Lo;0;R;;;;;N;;;;; 10C39;OLD TURKIC LETTER YENISEI OQ;Lo;0;R;;;;;N;;;;; 10C3A;OLD TURKIC LETTER ORKHON AR;Lo;0;R;;;;;N;;;;; 10C3B;OLD TURKIC LETTER YENISEI AR;Lo;0;R;;;;;N;;;;; 10C3C;OLD TURKIC LETTER ORKHON AER;Lo;0;R;;;;;N;;;;; 10C3D;OLD TURKIC LETTER ORKHON AS;Lo;0;R;;;;;N;;;;; 10C3E;OLD TURKIC LETTER ORKHON AES;Lo;0;R;;;;;N;;;;; 10C3F;OLD TURKIC LETTER ORKHON ASH;Lo;0;R;;;;;N;;;;; 10C40;OLD TURKIC LETTER YENISEI ASH;Lo;0;R;;;;;N;;;;; 10C41;OLD TURKIC LETTER ORKHON ESH;Lo;0;R;;;;;N;;;;; 10C42;OLD TURKIC LETTER YENISEI ESH;Lo;0;R;;;;;N;;;;; 10C43;OLD TURKIC LETTER ORKHON AT;Lo;0;R;;;;;N;;;;; 10C44;OLD TURKIC LETTER YENISEI AT;Lo;0;R;;;;;N;;;;; 10C45;OLD TURKIC LETTER ORKHON AET;Lo;0;R;;;;;N;;;;; 10C46;OLD TURKIC LETTER YENISEI AET;Lo;0;R;;;;;N;;;;; 10C47;OLD TURKIC LETTER ORKHON OT;Lo;0;R;;;;;N;;;;; 10C48;OLD TURKIC LETTER ORKHON BASH;Lo;0;R;;;;;N;;;;; 10C80;OLD HUNGARIAN CAPITAL LETTER A;Lu;0;R;;;;;N;;;;10CC0; 10C81;OLD HUNGARIAN CAPITAL LETTER AA;Lu;0;R;;;;;N;;;;10CC1; 10C82;OLD HUNGARIAN CAPITAL LETTER EB;Lu;0;R;;;;;N;;;;10CC2; 10C83;OLD HUNGARIAN CAPITAL LETTER AMB;Lu;0;R;;;;;N;;;;10CC3; 10C84;OLD HUNGARIAN CAPITAL LETTER EC;Lu;0;R;;;;;N;;;;10CC4; 10C85;OLD HUNGARIAN CAPITAL LETTER ENC;Lu;0;R;;;;;N;;;;10CC5; 10C86;OLD HUNGARIAN CAPITAL LETTER ECS;Lu;0;R;;;;;N;;;;10CC6; 10C87;OLD HUNGARIAN CAPITAL LETTER ED;Lu;0;R;;;;;N;;;;10CC7; 10C88;OLD HUNGARIAN CAPITAL LETTER AND;Lu;0;R;;;;;N;;;;10CC8; 10C89;OLD HUNGARIAN CAPITAL LETTER E;Lu;0;R;;;;;N;;;;10CC9; 10C8A;OLD HUNGARIAN CAPITAL LETTER CLOSE E;Lu;0;R;;;;;N;;;;10CCA; 10C8B;OLD HUNGARIAN CAPITAL LETTER EE;Lu;0;R;;;;;N;;;;10CCB; 10C8C;OLD HUNGARIAN CAPITAL LETTER EF;Lu;0;R;;;;;N;;;;10CCC; 10C8D;OLD HUNGARIAN CAPITAL LETTER EG;Lu;0;R;;;;;N;;;;10CCD; 10C8E;OLD HUNGARIAN CAPITAL LETTER EGY;Lu;0;R;;;;;N;;;;10CCE; 10C8F;OLD HUNGARIAN CAPITAL LETTER EH;Lu;0;R;;;;;N;;;;10CCF; 10C90;OLD HUNGARIAN CAPITAL LETTER I;Lu;0;R;;;;;N;;;;10CD0; 10C91;OLD HUNGARIAN CAPITAL LETTER II;Lu;0;R;;;;;N;;;;10CD1; 10C92;OLD HUNGARIAN CAPITAL LETTER EJ;Lu;0;R;;;;;N;;;;10CD2; 10C93;OLD HUNGARIAN CAPITAL LETTER EK;Lu;0;R;;;;;N;;;;10CD3; 10C94;OLD HUNGARIAN CAPITAL LETTER AK;Lu;0;R;;;;;N;;;;10CD4; 10C95;OLD HUNGARIAN CAPITAL LETTER UNK;Lu;0;R;;;;;N;;;;10CD5; 10C96;OLD HUNGARIAN CAPITAL LETTER EL;Lu;0;R;;;;;N;;;;10CD6; 10C97;OLD HUNGARIAN CAPITAL LETTER ELY;Lu;0;R;;;;;N;;;;10CD7; 10C98;OLD HUNGARIAN CAPITAL LETTER EM;Lu;0;R;;;;;N;;;;10CD8; 10C99;OLD HUNGARIAN CAPITAL LETTER EN;Lu;0;R;;;;;N;;;;10CD9; 10C9A;OLD HUNGARIAN CAPITAL LETTER ENY;Lu;0;R;;;;;N;;;;10CDA; 10C9B;OLD HUNGARIAN CAPITAL LETTER O;Lu;0;R;;;;;N;;;;10CDB; 10C9C;OLD HUNGARIAN CAPITAL LETTER OO;Lu;0;R;;;;;N;;;;10CDC; 10C9D;OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG OE;Lu;0;R;;;;;N;;;;10CDD; 10C9E;OLD HUNGARIAN CAPITAL LETTER RUDIMENTA OE;Lu;0;R;;;;;N;;;;10CDE; 10C9F;OLD HUNGARIAN CAPITAL LETTER OEE;Lu;0;R;;;;;N;;;;10CDF; 10CA0;OLD HUNGARIAN CAPITAL LETTER EP;Lu;0;R;;;;;N;;;;10CE0; 10CA1;OLD HUNGARIAN CAPITAL LETTER EMP;Lu;0;R;;;;;N;;;;10CE1; 10CA2;OLD HUNGARIAN CAPITAL LETTER ER;Lu;0;R;;;;;N;;;;10CE2; 10CA3;OLD HUNGARIAN CAPITAL LETTER SHORT ER;Lu;0;R;;;;;N;;;;10CE3; 10CA4;OLD HUNGARIAN CAPITAL LETTER ES;Lu;0;R;;;;;N;;;;10CE4; 10CA5;OLD HUNGARIAN CAPITAL LETTER ESZ;Lu;0;R;;;;;N;;;;10CE5; 10CA6;OLD HUNGARIAN CAPITAL LETTER ET;Lu;0;R;;;;;N;;;;10CE6; 10CA7;OLD HUNGARIAN CAPITAL LETTER ENT;Lu;0;R;;;;;N;;;;10CE7; 10CA8;OLD HUNGARIAN CAPITAL LETTER ETY;Lu;0;R;;;;;N;;;;10CE8; 10CA9;OLD HUNGARIAN CAPITAL LETTER ECH;Lu;0;R;;;;;N;;;;10CE9; 10CAA;OLD HUNGARIAN CAPITAL LETTER U;Lu;0;R;;;;;N;;;;10CEA; 10CAB;OLD HUNGARIAN CAPITAL LETTER UU;Lu;0;R;;;;;N;;;;10CEB; 10CAC;OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG UE;Lu;0;R;;;;;N;;;;10CEC; 10CAD;OLD HUNGARIAN CAPITAL LETTER RUDIMENTA UE;Lu;0;R;;;;;N;;;;10CED; 10CAE;OLD HUNGARIAN CAPITAL LETTER EV;Lu;0;R;;;;;N;;;;10CEE; 10CAF;OLD HUNGARIAN CAPITAL LETTER EZ;Lu;0;R;;;;;N;;;;10CEF; 10CB0;OLD HUNGARIAN CAPITAL LETTER EZS;Lu;0;R;;;;;N;;;;10CF0; 10CB1;OLD HUNGARIAN CAPITAL LETTER ENT-SHAPED SIGN;Lu;0;R;;;;;N;;;;10CF1; 10CB2;OLD HUNGARIAN CAPITAL LETTER US;Lu;0;R;;;;;N;;;;10CF2; 10CC0;OLD HUNGARIAN SMALL LETTER A;Ll;0;R;;;;;N;;;10C80;;10C80 10CC1;OLD HUNGARIAN SMALL LETTER AA;Ll;0;R;;;;;N;;;10C81;;10C81 10CC2;OLD HUNGARIAN SMALL LETTER EB;Ll;0;R;;;;;N;;;10C82;;10C82 10CC3;OLD HUNGARIAN SMALL LETTER AMB;Ll;0;R;;;;;N;;;10C83;;10C83 10CC4;OLD HUNGARIAN SMALL LETTER EC;Ll;0;R;;;;;N;;;10C84;;10C84 10CC5;OLD HUNGARIAN SMALL LETTER ENC;Ll;0;R;;;;;N;;;10C85;;10C85 10CC6;OLD HUNGARIAN SMALL LETTER ECS;Ll;0;R;;;;;N;;;10C86;;10C86 10CC7;OLD HUNGARIAN SMALL LETTER ED;Ll;0;R;;;;;N;;;10C87;;10C87 10CC8;OLD HUNGARIAN SMALL LETTER AND;Ll;0;R;;;;;N;;;10C88;;10C88 10CC9;OLD HUNGARIAN SMALL LETTER E;Ll;0;R;;;;;N;;;10C89;;10C89 10CCA;OLD HUNGARIAN SMALL LETTER CLOSE E;Ll;0;R;;;;;N;;;10C8A;;10C8A 10CCB;OLD HUNGARIAN SMALL LETTER EE;Ll;0;R;;;;;N;;;10C8B;;10C8B 10CCC;OLD HUNGARIAN SMALL LETTER EF;Ll;0;R;;;;;N;;;10C8C;;10C8C 10CCD;OLD HUNGARIAN SMALL LETTER EG;Ll;0;R;;;;;N;;;10C8D;;10C8D 10CCE;OLD HUNGARIAN SMALL LETTER EGY;Ll;0;R;;;;;N;;;10C8E;;10C8E 10CCF;OLD HUNGARIAN SMALL LETTER EH;Ll;0;R;;;;;N;;;10C8F;;10C8F 10CD0;OLD HUNGARIAN SMALL LETTER I;Ll;0;R;;;;;N;;;10C90;;10C90 10CD1;OLD HUNGARIAN SMALL LETTER II;Ll;0;R;;;;;N;;;10C91;;10C91 10CD2;OLD HUNGARIAN SMALL LETTER EJ;Ll;0;R;;;;;N;;;10C92;;10C92 10CD3;OLD HUNGARIAN SMALL LETTER EK;Ll;0;R;;;;;N;;;10C93;;10C93 10CD4;OLD HUNGARIAN SMALL LETTER AK;Ll;0;R;;;;;N;;;10C94;;10C94 10CD5;OLD HUNGARIAN SMALL LETTER UNK;Ll;0;R;;;;;N;;;10C95;;10C95 10CD6;OLD HUNGARIAN SMALL LETTER EL;Ll;0;R;;;;;N;;;10C96;;10C96 10CD7;OLD HUNGARIAN SMALL LETTER ELY;Ll;0;R;;;;;N;;;10C97;;10C97 10CD8;OLD HUNGARIAN SMALL LETTER EM;Ll;0;R;;;;;N;;;10C98;;10C98 10CD9;OLD HUNGARIAN SMALL LETTER EN;Ll;0;R;;;;;N;;;10C99;;10C99 10CDA;OLD HUNGARIAN SMALL LETTER ENY;Ll;0;R;;;;;N;;;10C9A;;10C9A 10CDB;OLD HUNGARIAN SMALL LETTER O;Ll;0;R;;;;;N;;;10C9B;;10C9B 10CDC;OLD HUNGARIAN SMALL LETTER OO;Ll;0;R;;;;;N;;;10C9C;;10C9C 10CDD;OLD HUNGARIAN SMALL LETTER NIKOLSBURG OE;Ll;0;R;;;;;N;;;10C9D;;10C9D 10CDE;OLD HUNGARIAN SMALL LETTER RUDIMENTA OE;Ll;0;R;;;;;N;;;10C9E;;10C9E 10CDF;OLD HUNGARIAN SMALL LETTER OEE;Ll;0;R;;;;;N;;;10C9F;;10C9F 10CE0;OLD HUNGARIAN SMALL LETTER EP;Ll;0;R;;;;;N;;;10CA0;;10CA0 10CE1;OLD HUNGARIAN SMALL LETTER EMP;Ll;0;R;;;;;N;;;10CA1;;10CA1 10CE2;OLD HUNGARIAN SMALL LETTER ER;Ll;0;R;;;;;N;;;10CA2;;10CA2 10CE3;OLD HUNGARIAN SMALL LETTER SHORT ER;Ll;0;R;;;;;N;;;10CA3;;10CA3 10CE4;OLD HUNGARIAN SMALL LETTER ES;Ll;0;R;;;;;N;;;10CA4;;10CA4 10CE5;OLD HUNGARIAN SMALL LETTER ESZ;Ll;0;R;;;;;N;;;10CA5;;10CA5 10CE6;OLD HUNGARIAN SMALL LETTER ET;Ll;0;R;;;;;N;;;10CA6;;10CA6 10CE7;OLD HUNGARIAN SMALL LETTER ENT;Ll;0;R;;;;;N;;;10CA7;;10CA7 10CE8;OLD HUNGARIAN SMALL LETTER ETY;Ll;0;R;;;;;N;;;10CA8;;10CA8 10CE9;OLD HUNGARIAN SMALL LETTER ECH;Ll;0;R;;;;;N;;;10CA9;;10CA9 10CEA;OLD HUNGARIAN SMALL LETTER U;Ll;0;R;;;;;N;;;10CAA;;10CAA 10CEB;OLD HUNGARIAN SMALL LETTER UU;Ll;0;R;;;;;N;;;10CAB;;10CAB 10CEC;OLD HUNGARIAN SMALL LETTER NIKOLSBURG UE;Ll;0;R;;;;;N;;;10CAC;;10CAC 10CED;OLD HUNGARIAN SMALL LETTER RUDIMENTA UE;Ll;0;R;;;;;N;;;10CAD;;10CAD 10CEE;OLD HUNGARIAN SMALL LETTER EV;Ll;0;R;;;;;N;;;10CAE;;10CAE 10CEF;OLD HUNGARIAN SMALL LETTER EZ;Ll;0;R;;;;;N;;;10CAF;;10CAF 10CF0;OLD HUNGARIAN SMALL LETTER EZS;Ll;0;R;;;;;N;;;10CB0;;10CB0 10CF1;OLD HUNGARIAN SMALL LETTER ENT-SHAPED SIGN;Ll;0;R;;;;;N;;;10CB1;;10CB1 10CF2;OLD HUNGARIAN SMALL LETTER US;Ll;0;R;;;;;N;;;10CB2;;10CB2 10CFA;OLD HUNGARIAN NUMBER ONE;No;0;R;;;;1;N;;;;; 10CFB;OLD HUNGARIAN NUMBER FIVE;No;0;R;;;;5;N;;;;; 10CFC;OLD HUNGARIAN NUMBER TEN;No;0;R;;;;10;N;;;;; 10CFD;OLD HUNGARIAN NUMBER FIFTY;No;0;R;;;;50;N;;;;; 10CFE;OLD HUNGARIAN NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;; 10CFF;OLD HUNGARIAN NUMBER ONE THOUSAND;No;0;R;;;;1000;N;;;;; 10D00;HANIFI ROHINGYA LETTER A;Lo;0;AL;;;;;N;;;;; 10D01;HANIFI ROHINGYA LETTER BA;Lo;0;AL;;;;;N;;;;; 10D02;HANIFI ROHINGYA LETTER PA;Lo;0;AL;;;;;N;;;;; 10D03;HANIFI ROHINGYA LETTER TA;Lo;0;AL;;;;;N;;;;; 10D04;HANIFI ROHINGYA LETTER TTA;Lo;0;AL;;;;;N;;;;; 10D05;HANIFI ROHINGYA LETTER JA;Lo;0;AL;;;;;N;;;;; 10D06;HANIFI ROHINGYA LETTER CA;Lo;0;AL;;;;;N;;;;; 10D07;HANIFI ROHINGYA LETTER HA;Lo;0;AL;;;;;N;;;;; 10D08;HANIFI ROHINGYA LETTER KHA;Lo;0;AL;;;;;N;;;;; 10D09;HANIFI ROHINGYA LETTER FA;Lo;0;AL;;;;;N;;;;; 10D0A;HANIFI ROHINGYA LETTER DA;Lo;0;AL;;;;;N;;;;; 10D0B;HANIFI ROHINGYA LETTER DDA;Lo;0;AL;;;;;N;;;;; 10D0C;HANIFI ROHINGYA LETTER RA;Lo;0;AL;;;;;N;;;;; 10D0D;HANIFI ROHINGYA LETTER RRA;Lo;0;AL;;;;;N;;;;; 10D0E;HANIFI ROHINGYA LETTER ZA;Lo;0;AL;;;;;N;;;;; 10D0F;HANIFI ROHINGYA LETTER SA;Lo;0;AL;;;;;N;;;;; 10D10;HANIFI ROHINGYA LETTER SHA;Lo;0;AL;;;;;N;;;;; 10D11;HANIFI ROHINGYA LETTER KA;Lo;0;AL;;;;;N;;;;; 10D12;HANIFI ROHINGYA LETTER GA;Lo;0;AL;;;;;N;;;;; 10D13;HANIFI ROHINGYA LETTER LA;Lo;0;AL;;;;;N;;;;; 10D14;HANIFI ROHINGYA LETTER MA;Lo;0;AL;;;;;N;;;;; 10D15;HANIFI ROHINGYA LETTER NA;Lo;0;AL;;;;;N;;;;; 10D16;HANIFI ROHINGYA LETTER WA;Lo;0;AL;;;;;N;;;;; 10D17;HANIFI ROHINGYA LETTER KINNA WA;Lo;0;AL;;;;;N;;;;; 10D18;HANIFI ROHINGYA LETTER YA;Lo;0;AL;;;;;N;;;;; 10D19;HANIFI ROHINGYA LETTER KINNA YA;Lo;0;AL;;;;;N;;;;; 10D1A;HANIFI ROHINGYA LETTER NGA;Lo;0;AL;;;;;N;;;;; 10D1B;HANIFI ROHINGYA LETTER NYA;Lo;0;AL;;;;;N;;;;; 10D1C;HANIFI ROHINGYA LETTER VA;Lo;0;AL;;;;;N;;;;; 10D1D;HANIFI ROHINGYA VOWEL A;Lo;0;AL;;;;;N;;;;; 10D1E;HANIFI ROHINGYA VOWEL I;Lo;0;AL;;;;;N;;;;; 10D1F;HANIFI ROHINGYA VOWEL U;Lo;0;AL;;;;;N;;;;; 10D20;HANIFI ROHINGYA VOWEL E;Lo;0;AL;;;;;N;;;;; 10D21;HANIFI ROHINGYA VOWEL O;Lo;0;AL;;;;;N;;;;; 10D22;HANIFI ROHINGYA MARK SAKIN;Lo;0;AL;;;;;N;;;;; 10D23;HANIFI ROHINGYA MARK NA KHONNA;Lo;0;AL;;;;;N;;;;; 10D24;HANIFI ROHINGYA SIGN HARBAHAY;Mn;230;NSM;;;;;N;;;;; 10D25;HANIFI ROHINGYA SIGN TAHALA;Mn;230;NSM;;;;;N;;;;; 10D26;HANIFI ROHINGYA SIGN TANA;Mn;230;NSM;;;;;N;;;;; 10D27;HANIFI ROHINGYA SIGN TASSI;Mn;230;NSM;;;;;N;;;;; 10D30;HANIFI ROHINGYA DIGIT ZERO;Nd;0;AN;;0;0;0;N;;;;; 10D31;HANIFI ROHINGYA DIGIT ONE;Nd;0;AN;;1;1;1;N;;;;; 10D32;HANIFI ROHINGYA DIGIT TWO;Nd;0;AN;;2;2;2;N;;;;; 10D33;HANIFI ROHINGYA DIGIT THREE;Nd;0;AN;;3;3;3;N;;;;; 10D34;HANIFI ROHINGYA DIGIT FOUR;Nd;0;AN;;4;4;4;N;;;;; 10D35;HANIFI ROHINGYA DIGIT FIVE;Nd;0;AN;;5;5;5;N;;;;; 10D36;HANIFI ROHINGYA DIGIT SIX;Nd;0;AN;;6;6;6;N;;;;; 10D37;HANIFI ROHINGYA DIGIT SEVEN;Nd;0;AN;;7;7;7;N;;;;; 10D38;HANIFI ROHINGYA DIGIT EIGHT;Nd;0;AN;;8;8;8;N;;;;; 10D39;HANIFI ROHINGYA DIGIT NINE;Nd;0;AN;;9;9;9;N;;;;; 10E60;RUMI DIGIT ONE;No;0;AN;;;1;1;N;;;;; 10E61;RUMI DIGIT TWO;No;0;AN;;;2;2;N;;;;; 10E62;RUMI DIGIT THREE;No;0;AN;;;3;3;N;;;;; 10E63;RUMI DIGIT FOUR;No;0;AN;;;4;4;N;;;;; 10E64;RUMI DIGIT FIVE;No;0;AN;;;5;5;N;;;;; 10E65;RUMI DIGIT SIX;No;0;AN;;;6;6;N;;;;; 10E66;RUMI DIGIT SEVEN;No;0;AN;;;7;7;N;;;;; 10E67;RUMI DIGIT EIGHT;No;0;AN;;;8;8;N;;;;; 10E68;RUMI DIGIT NINE;No;0;AN;;;9;9;N;;;;; 10E69;RUMI NUMBER TEN;No;0;AN;;;;10;N;;;;; 10E6A;RUMI NUMBER TWENTY;No;0;AN;;;;20;N;;;;; 10E6B;RUMI NUMBER THIRTY;No;0;AN;;;;30;N;;;;; 10E6C;RUMI NUMBER FORTY;No;0;AN;;;;40;N;;;;; 10E6D;RUMI NUMBER FIFTY;No;0;AN;;;;50;N;;;;; 10E6E;RUMI NUMBER SIXTY;No;0;AN;;;;60;N;;;;; 10E6F;RUMI NUMBER SEVENTY;No;0;AN;;;;70;N;;;;; 10E70;RUMI NUMBER EIGHTY;No;0;AN;;;;80;N;;;;; 10E71;RUMI NUMBER NINETY;No;0;AN;;;;90;N;;;;; 10E72;RUMI NUMBER ONE HUNDRED;No;0;AN;;;;100;N;;;;; 10E73;RUMI NUMBER TWO HUNDRED;No;0;AN;;;;200;N;;;;; 10E74;RUMI NUMBER THREE HUNDRED;No;0;AN;;;;300;N;;;;; 10E75;RUMI NUMBER FOUR HUNDRED;No;0;AN;;;;400;N;;;;; 10E76;RUMI NUMBER FIVE HUNDRED;No;0;AN;;;;500;N;;;;; 10E77;RUMI NUMBER SIX HUNDRED;No;0;AN;;;;600;N;;;;; 10E78;RUMI NUMBER SEVEN HUNDRED;No;0;AN;;;;700;N;;;;; 10E79;RUMI NUMBER EIGHT HUNDRED;No;0;AN;;;;800;N;;;;; 10E7A;RUMI NUMBER NINE HUNDRED;No;0;AN;;;;900;N;;;;; 10E7B;RUMI FRACTION ONE HALF;No;0;AN;;;;1/2;N;;;;; 10E7C;RUMI FRACTION ONE QUARTER;No;0;AN;;;;1/4;N;;;;; 10E7D;RUMI FRACTION ONE THIRD;No;0;AN;;;;1/3;N;;;;; 10E7E;RUMI FRACTION TWO THIRDS;No;0;AN;;;;2/3;N;;;;; 10E80;YEZIDI LETTER ELIF;Lo;0;R;;;;;N;;;;; 10E81;YEZIDI LETTER BE;Lo;0;R;;;;;N;;;;; 10E82;YEZIDI LETTER PE;Lo;0;R;;;;;N;;;;; 10E83;YEZIDI LETTER PHE;Lo;0;R;;;;;N;;;;; 10E84;YEZIDI LETTER THE;Lo;0;R;;;;;N;;;;; 10E85;YEZIDI LETTER SE;Lo;0;R;;;;;N;;;;; 10E86;YEZIDI LETTER CIM;Lo;0;R;;;;;N;;;;; 10E87;YEZIDI LETTER CHIM;Lo;0;R;;;;;N;;;;; 10E88;YEZIDI LETTER CHHIM;Lo;0;R;;;;;N;;;;; 10E89;YEZIDI LETTER HHA;Lo;0;R;;;;;N;;;;; 10E8A;YEZIDI LETTER XA;Lo;0;R;;;;;N;;;;; 10E8B;YEZIDI LETTER DAL;Lo;0;R;;;;;N;;;;; 10E8C;YEZIDI LETTER ZAL;Lo;0;R;;;;;N;;;;; 10E8D;YEZIDI LETTER RA;Lo;0;R;;;;;N;;;;; 10E8E;YEZIDI LETTER RHA;Lo;0;R;;;;;N;;;;; 10E8F;YEZIDI LETTER ZA;Lo;0;R;;;;;N;;;;; 10E90;YEZIDI LETTER JA;Lo;0;R;;;;;N;;;;; 10E91;YEZIDI LETTER SIN;Lo;0;R;;;;;N;;;;; 10E92;YEZIDI LETTER SHIN;Lo;0;R;;;;;N;;;;; 10E93;YEZIDI LETTER SAD;Lo;0;R;;;;;N;;;;; 10E94;YEZIDI LETTER DAD;Lo;0;R;;;;;N;;;;; 10E95;YEZIDI LETTER TA;Lo;0;R;;;;;N;;;;; 10E96;YEZIDI LETTER ZE;Lo;0;R;;;;;N;;;;; 10E97;YEZIDI LETTER EYN;Lo;0;R;;;;;N;;;;; 10E98;YEZIDI LETTER XHEYN;Lo;0;R;;;;;N;;;;; 10E99;YEZIDI LETTER FA;Lo;0;R;;;;;N;;;;; 10E9A;YEZIDI LETTER VA;Lo;0;R;;;;;N;;;;; 10E9B;YEZIDI LETTER VA ALTERNATE FORM;Lo;0;R;;;;;N;;;;; 10E9C;YEZIDI LETTER QAF;Lo;0;R;;;;;N;;;;; 10E9D;YEZIDI LETTER KAF;Lo;0;R;;;;;N;;;;; 10E9E;YEZIDI LETTER KHAF;Lo;0;R;;;;;N;;;;; 10E9F;YEZIDI LETTER GAF;Lo;0;R;;;;;N;;;;; 10EA0;YEZIDI LETTER LAM;Lo;0;R;;;;;N;;;;; 10EA1;YEZIDI LETTER MIM;Lo;0;R;;;;;N;;;;; 10EA2;YEZIDI LETTER NUN;Lo;0;R;;;;;N;;;;; 10EA3;YEZIDI LETTER UM;Lo;0;R;;;;;N;;;;; 10EA4;YEZIDI LETTER WAW;Lo;0;R;;;;;N;;;;; 10EA5;YEZIDI LETTER OW;Lo;0;R;;;;;N;;;;; 10EA6;YEZIDI LETTER EW;Lo;0;R;;;;;N;;;;; 10EA7;YEZIDI LETTER HAY;Lo;0;R;;;;;N;;;;; 10EA8;YEZIDI LETTER YOT;Lo;0;R;;;;;N;;;;; 10EA9;YEZIDI LETTER ET;Lo;0;R;;;;;N;;;;; 10EAB;YEZIDI COMBINING HAMZA MARK;Mn;230;NSM;;;;;N;;;;; 10EAC;YEZIDI COMBINING MADDA MARK;Mn;230;NSM;;;;;N;;;;; 10EAD;YEZIDI HYPHENATION MARK;Pd;0;R;;;;;N;;;;; 10EB0;YEZIDI LETTER LAM WITH DOT ABOVE;Lo;0;R;;;;;N;;;;; 10EB1;YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE;Lo;0;R;;;;;N;;;;; 10F00;OLD SOGDIAN LETTER ALEPH;Lo;0;R;;;;;N;;;;; 10F01;OLD SOGDIAN LETTER FINAL ALEPH;Lo;0;R;;;;;N;;;;; 10F02;OLD SOGDIAN LETTER BETH;Lo;0;R;;;;;N;;;;; 10F03;OLD SOGDIAN LETTER FINAL BETH;Lo;0;R;;;;;N;;;;; 10F04;OLD SOGDIAN LETTER GIMEL;Lo;0;R;;;;;N;;;;; 10F05;OLD SOGDIAN LETTER HE;Lo;0;R;;;;;N;;;;; 10F06;OLD SOGDIAN LETTER FINAL HE;Lo;0;R;;;;;N;;;;; 10F07;OLD SOGDIAN LETTER WAW;Lo;0;R;;;;;N;;;;; 10F08;OLD SOGDIAN LETTER ZAYIN;Lo;0;R;;;;;N;;;;; 10F09;OLD SOGDIAN LETTER HETH;Lo;0;R;;;;;N;;;;; 10F0A;OLD SOGDIAN LETTER YODH;Lo;0;R;;;;;N;;;;; 10F0B;OLD SOGDIAN LETTER KAPH;Lo;0;R;;;;;N;;;;; 10F0C;OLD SOGDIAN LETTER LAMEDH;Lo;0;R;;;;;N;;;;; 10F0D;OLD SOGDIAN LETTER MEM;Lo;0;R;;;;;N;;;;; 10F0E;OLD SOGDIAN LETTER NUN;Lo;0;R;;;;;N;;;;; 10F0F;OLD SOGDIAN LETTER FINAL NUN;Lo;0;R;;;;;N;;;;; 10F10;OLD SOGDIAN LETTER FINAL NUN WITH VERTICAL TAIL;Lo;0;R;;;;;N;;;;; 10F11;OLD SOGDIAN LETTER SAMEKH;Lo;0;R;;;;;N;;;;; 10F12;OLD SOGDIAN LETTER AYIN;Lo;0;R;;;;;N;;;;; 10F13;OLD SOGDIAN LETTER ALTERNATE AYIN;Lo;0;R;;;;;N;;;;; 10F14;OLD SOGDIAN LETTER PE;Lo;0;R;;;;;N;;;;; 10F15;OLD SOGDIAN LETTER SADHE;Lo;0;R;;;;;N;;;;; 10F16;OLD SOGDIAN LETTER FINAL SADHE;Lo;0;R;;;;;N;;;;; 10F17;OLD SOGDIAN LETTER FINAL SADHE WITH VERTICAL TAIL;Lo;0;R;;;;;N;;;;; 10F18;OLD SOGDIAN LETTER RESH-AYIN-DALETH;Lo;0;R;;;;;N;;;;; 10F19;OLD SOGDIAN LETTER SHIN;Lo;0;R;;;;;N;;;;; 10F1A;OLD SOGDIAN LETTER TAW;Lo;0;R;;;;;N;;;;; 10F1B;OLD SOGDIAN LETTER FINAL TAW;Lo;0;R;;;;;N;;;;; 10F1C;OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL;Lo;0;R;;;;;N;;;;; 10F1D;OLD SOGDIAN NUMBER ONE;No;0;R;;;;1;N;;;;; 10F1E;OLD SOGDIAN NUMBER TWO;No;0;R;;;;2;N;;;;; 10F1F;OLD SOGDIAN NUMBER THREE;No;0;R;;;;3;N;;;;; 10F20;OLD SOGDIAN NUMBER FOUR;No;0;R;;;;4;N;;;;; 10F21;OLD SOGDIAN NUMBER FIVE;No;0;R;;;;5;N;;;;; 10F22;OLD SOGDIAN NUMBER TEN;No;0;R;;;;10;N;;;;; 10F23;OLD SOGDIAN NUMBER TWENTY;No;0;R;;;;20;N;;;;; 10F24;OLD SOGDIAN NUMBER THIRTY;No;0;R;;;;30;N;;;;; 10F25;OLD SOGDIAN NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;; 10F26;OLD SOGDIAN FRACTION ONE HALF;No;0;R;;;;1/2;N;;;;; 10F27;OLD SOGDIAN LIGATURE AYIN-DALETH;Lo;0;R;;;;;N;;;;; 10F30;SOGDIAN LETTER ALEPH;Lo;0;AL;;;;;N;;;;; 10F31;SOGDIAN LETTER BETH;Lo;0;AL;;;;;N;;;;; 10F32;SOGDIAN LETTER GIMEL;Lo;0;AL;;;;;N;;;;; 10F33;SOGDIAN LETTER HE;Lo;0;AL;;;;;N;;;;; 10F34;SOGDIAN LETTER WAW;Lo;0;AL;;;;;N;;;;; 10F35;SOGDIAN LETTER ZAYIN;Lo;0;AL;;;;;N;;;;; 10F36;SOGDIAN LETTER HETH;Lo;0;AL;;;;;N;;;;; 10F37;SOGDIAN LETTER YODH;Lo;0;AL;;;;;N;;;;; 10F38;SOGDIAN LETTER KAPH;Lo;0;AL;;;;;N;;;;; 10F39;SOGDIAN LETTER LAMEDH;Lo;0;AL;;;;;N;;;;; 10F3A;SOGDIAN LETTER MEM;Lo;0;AL;;;;;N;;;;; 10F3B;SOGDIAN LETTER NUN;Lo;0;AL;;;;;N;;;;; 10F3C;SOGDIAN LETTER SAMEKH;Lo;0;AL;;;;;N;;;;; 10F3D;SOGDIAN LETTER AYIN;Lo;0;AL;;;;;N;;;;; 10F3E;SOGDIAN LETTER PE;Lo;0;AL;;;;;N;;;;; 10F3F;SOGDIAN LETTER SADHE;Lo;0;AL;;;;;N;;;;; 10F40;SOGDIAN LETTER RESH-AYIN;Lo;0;AL;;;;;N;;;;; 10F41;SOGDIAN LETTER SHIN;Lo;0;AL;;;;;N;;;;; 10F42;SOGDIAN LETTER TAW;Lo;0;AL;;;;;N;;;;; 10F43;SOGDIAN LETTER FETH;Lo;0;AL;;;;;N;;;;; 10F44;SOGDIAN LETTER LESH;Lo;0;AL;;;;;N;;;;; 10F45;SOGDIAN INDEPENDENT SHIN;Lo;0;AL;;;;;N;;;;; 10F46;SOGDIAN COMBINING DOT BELOW;Mn;220;NSM;;;;;N;;;;; 10F47;SOGDIAN COMBINING TWO DOTS BELOW;Mn;220;NSM;;;;;N;;;;; 10F48;SOGDIAN COMBINING DOT ABOVE;Mn;230;NSM;;;;;N;;;;; 10F49;SOGDIAN COMBINING TWO DOTS ABOVE;Mn;230;NSM;;;;;N;;;;; 10F4A;SOGDIAN COMBINING CURVE ABOVE;Mn;230;NSM;;;;;N;;;;; 10F4B;SOGDIAN COMBINING CURVE BELOW;Mn;220;NSM;;;;;N;;;;; 10F4C;SOGDIAN COMBINING HOOK ABOVE;Mn;230;NSM;;;;;N;;;;; 10F4D;SOGDIAN COMBINING HOOK BELOW;Mn;220;NSM;;;;;N;;;;; 10F4E;SOGDIAN COMBINING LONG HOOK BELOW;Mn;220;NSM;;;;;N;;;;; 10F4F;SOGDIAN COMBINING RESH BELOW;Mn;220;NSM;;;;;N;;;;; 10F50;SOGDIAN COMBINING STROKE BELOW;Mn;220;NSM;;;;;N;;;;; 10F51;SOGDIAN NUMBER ONE;No;0;AL;;;;1;N;;;;; 10F52;SOGDIAN NUMBER TEN;No;0;AL;;;;10;N;;;;; 10F53;SOGDIAN NUMBER TWENTY;No;0;AL;;;;20;N;;;;; 10F54;SOGDIAN NUMBER ONE HUNDRED;No;0;AL;;;;100;N;;;;; 10F55;SOGDIAN PUNCTUATION TWO VERTICAL BARS;Po;0;AL;;;;;N;;;;; 10F56;SOGDIAN PUNCTUATION TWO VERTICAL BARS WITH DOTS;Po;0;AL;;;;;N;;;;; 10F57;SOGDIAN PUNCTUATION CIRCLE WITH DOT;Po;0;AL;;;;;N;;;;; 10F58;SOGDIAN PUNCTUATION TWO CIRCLES WITH DOTS;Po;0;AL;;;;;N;;;;; 10F59;SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT;Po;0;AL;;;;;N;;;;; 10F70;OLD UYGHUR LETTER ALEPH;Lo;0;R;;;;;N;;;;; 10F71;OLD UYGHUR LETTER BETH;Lo;0;R;;;;;N;;;;; 10F72;OLD UYGHUR LETTER GIMEL-HETH;Lo;0;R;;;;;N;;;;; 10F73;OLD UYGHUR LETTER WAW;Lo;0;R;;;;;N;;;;; 10F74;OLD UYGHUR LETTER ZAYIN;Lo;0;R;;;;;N;;;;; 10F75;OLD UYGHUR LETTER FINAL HETH;Lo;0;R;;;;;N;;;;; 10F76;OLD UYGHUR LETTER YODH;Lo;0;R;;;;;N;;;;; 10F77;OLD UYGHUR LETTER KAPH;Lo;0;R;;;;;N;;;;; 10F78;OLD UYGHUR LETTER LAMEDH;Lo;0;R;;;;;N;;;;; 10F79;OLD UYGHUR LETTER MEM;Lo;0;R;;;;;N;;;;; 10F7A;OLD UYGHUR LETTER NUN;Lo;0;R;;;;;N;;;;; 10F7B;OLD UYGHUR LETTER SAMEKH;Lo;0;R;;;;;N;;;;; 10F7C;OLD UYGHUR LETTER PE;Lo;0;R;;;;;N;;;;; 10F7D;OLD UYGHUR LETTER SADHE;Lo;0;R;;;;;N;;;;; 10F7E;OLD UYGHUR LETTER RESH;Lo;0;R;;;;;N;;;;; 10F7F;OLD UYGHUR LETTER SHIN;Lo;0;R;;;;;N;;;;; 10F80;OLD UYGHUR LETTER TAW;Lo;0;R;;;;;N;;;;; 10F81;OLD UYGHUR LETTER LESH;Lo;0;R;;;;;N;;;;; 10F82;OLD UYGHUR COMBINING DOT ABOVE;Mn;230;NSM;;;;;N;;;;; 10F83;OLD UYGHUR COMBINING DOT BELOW;Mn;220;NSM;;;;;N;;;;; 10F84;OLD UYGHUR COMBINING TWO DOTS ABOVE;Mn;230;NSM;;;;;N;;;;; 10F85;OLD UYGHUR COMBINING TWO DOTS BELOW;Mn;220;NSM;;;;;N;;;;; 10F86;OLD UYGHUR PUNCTUATION BAR;Po;0;R;;;;;N;;;;; 10F87;OLD UYGHUR PUNCTUATION TWO BARS;Po;0;R;;;;;N;;;;; 10F88;OLD UYGHUR PUNCTUATION TWO DOTS;Po;0;R;;;;;N;;;;; 10F89;OLD UYGHUR PUNCTUATION FOUR DOTS;Po;0;R;;;;;N;;;;; 10FB0;CHORASMIAN LETTER ALEPH;Lo;0;R;;;;;N;;;;; 10FB1;CHORASMIAN LETTER SMALL ALEPH;Lo;0;R;;;;;N;;;;; 10FB2;CHORASMIAN LETTER BETH;Lo;0;R;;;;;N;;;;; 10FB3;CHORASMIAN LETTER GIMEL;Lo;0;R;;;;;N;;;;; 10FB4;CHORASMIAN LETTER DALETH;Lo;0;R;;;;;N;;;;; 10FB5;CHORASMIAN LETTER HE;Lo;0;R;;;;;N;;;;; 10FB6;CHORASMIAN LETTER WAW;Lo;0;R;;;;;N;;;;; 10FB7;CHORASMIAN LETTER CURLED WAW;Lo;0;R;;;;;N;;;;; 10FB8;CHORASMIAN LETTER ZAYIN;Lo;0;R;;;;;N;;;;; 10FB9;CHORASMIAN LETTER HETH;Lo;0;R;;;;;N;;;;; 10FBA;CHORASMIAN LETTER YODH;Lo;0;R;;;;;N;;;;; 10FBB;CHORASMIAN LETTER KAPH;Lo;0;R;;;;;N;;;;; 10FBC;CHORASMIAN LETTER LAMEDH;Lo;0;R;;;;;N;;;;; 10FBD;CHORASMIAN LETTER MEM;Lo;0;R;;;;;N;;;;; 10FBE;CHORASMIAN LETTER NUN;Lo;0;R;;;;;N;;;;; 10FBF;CHORASMIAN LETTER SAMEKH;Lo;0;R;;;;;N;;;;; 10FC0;CHORASMIAN LETTER AYIN;Lo;0;R;;;;;N;;;;; 10FC1;CHORASMIAN LETTER PE;Lo;0;R;;;;;N;;;;; 10FC2;CHORASMIAN LETTER RESH;Lo;0;R;;;;;N;;;;; 10FC3;CHORASMIAN LETTER SHIN;Lo;0;R;;;;;N;;;;; 10FC4;CHORASMIAN LETTER TAW;Lo;0;R;;;;;N;;;;; 10FC5;CHORASMIAN NUMBER ONE;No;0;R;;;;1;N;;;;; 10FC6;CHORASMIAN NUMBER TWO;No;0;R;;;;2;N;;;;; 10FC7;CHORASMIAN NUMBER THREE;No;0;R;;;;3;N;;;;; 10FC8;CHORASMIAN NUMBER FOUR;No;0;R;;;;4;N;;;;; 10FC9;CHORASMIAN NUMBER TEN;No;0;R;;;;10;N;;;;; 10FCA;CHORASMIAN NUMBER TWENTY;No;0;R;;;;20;N;;;;; 10FCB;CHORASMIAN NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;; 10FE0;ELYMAIC LETTER ALEPH;Lo;0;R;;;;;N;;;;; 10FE1;ELYMAIC LETTER BETH;Lo;0;R;;;;;N;;;;; 10FE2;ELYMAIC LETTER GIMEL;Lo;0;R;;;;;N;;;;; 10FE3;ELYMAIC LETTER DALETH;Lo;0;R;;;;;N;;;;; 10FE4;ELYMAIC LETTER HE;Lo;0;R;;;;;N;;;;; 10FE5;ELYMAIC LETTER WAW;Lo;0;R;;;;;N;;;;; 10FE6;ELYMAIC LETTER ZAYIN;Lo;0;R;;;;;N;;;;; 10FE7;ELYMAIC LETTER HETH;Lo;0;R;;;;;N;;;;; 10FE8;ELYMAIC LETTER TETH;Lo;0;R;;;;;N;;;;; 10FE9;ELYMAIC LETTER YODH;Lo;0;R;;;;;N;;;;; 10FEA;ELYMAIC LETTER KAPH;Lo;0;R;;;;;N;;;;; 10FEB;ELYMAIC LETTER LAMEDH;Lo;0;R;;;;;N;;;;; 10FEC;ELYMAIC LETTER MEM;Lo;0;R;;;;;N;;;;; 10FED;ELYMAIC LETTER NUN;Lo;0;R;;;;;N;;;;; 10FEE;ELYMAIC LETTER SAMEKH;Lo;0;R;;;;;N;;;;; 10FEF;ELYMAIC LETTER AYIN;Lo;0;R;;;;;N;;;;; 10FF0;ELYMAIC LETTER PE;Lo;0;R;;;;;N;;;;; 10FF1;ELYMAIC LETTER SADHE;Lo;0;R;;;;;N;;;;; 10FF2;ELYMAIC LETTER QOPH;Lo;0;R;;;;;N;;;;; 10FF3;ELYMAIC LETTER RESH;Lo;0;R;;;;;N;;;;; 10FF4;ELYMAIC LETTER SHIN;Lo;0;R;;;;;N;;;;; 10FF5;ELYMAIC LETTER TAW;Lo;0;R;;;;;N;;;;; 10FF6;ELYMAIC LIGATURE ZAYIN-YODH;Lo;0;R;;;;;N;;;;; 11000;BRAHMI SIGN CANDRABINDU;Mc;0;L;;;;;N;;;;; 11001;BRAHMI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 11002;BRAHMI SIGN VISARGA;Mc;0;L;;;;;N;;;;; 11003;BRAHMI SIGN JIHVAMULIYA;Lo;0;L;;;;;N;;;;; 11004;BRAHMI SIGN UPADHMANIYA;Lo;0;L;;;;;N;;;;; 11005;BRAHMI LETTER A;Lo;0;L;;;;;N;;;;; 11006;BRAHMI LETTER AA;Lo;0;L;;;;;N;;;;; 11007;BRAHMI LETTER I;Lo;0;L;;;;;N;;;;; 11008;BRAHMI LETTER II;Lo;0;L;;;;;N;;;;; 11009;BRAHMI LETTER U;Lo;0;L;;;;;N;;;;; 1100A;BRAHMI LETTER UU;Lo;0;L;;;;;N;;;;; 1100B;BRAHMI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 1100C;BRAHMI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 1100D;BRAHMI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 1100E;BRAHMI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 1100F;BRAHMI LETTER E;Lo;0;L;;;;;N;;;;; 11010;BRAHMI LETTER AI;Lo;0;L;;;;;N;;;;; 11011;BRAHMI LETTER O;Lo;0;L;;;;;N;;;;; 11012;BRAHMI LETTER AU;Lo;0;L;;;;;N;;;;; 11013;BRAHMI LETTER KA;Lo;0;L;;;;;N;;;;; 11014;BRAHMI LETTER KHA;Lo;0;L;;;;;N;;;;; 11015;BRAHMI LETTER GA;Lo;0;L;;;;;N;;;;; 11016;BRAHMI LETTER GHA;Lo;0;L;;;;;N;;;;; 11017;BRAHMI LETTER NGA;Lo;0;L;;;;;N;;;;; 11018;BRAHMI LETTER CA;Lo;0;L;;;;;N;;;;; 11019;BRAHMI LETTER CHA;Lo;0;L;;;;;N;;;;; 1101A;BRAHMI LETTER JA;Lo;0;L;;;;;N;;;;; 1101B;BRAHMI LETTER JHA;Lo;0;L;;;;;N;;;;; 1101C;BRAHMI LETTER NYA;Lo;0;L;;;;;N;;;;; 1101D;BRAHMI LETTER TTA;Lo;0;L;;;;;N;;;;; 1101E;BRAHMI LETTER TTHA;Lo;0;L;;;;;N;;;;; 1101F;BRAHMI LETTER DDA;Lo;0;L;;;;;N;;;;; 11020;BRAHMI LETTER DDHA;Lo;0;L;;;;;N;;;;; 11021;BRAHMI LETTER NNA;Lo;0;L;;;;;N;;;;; 11022;BRAHMI LETTER TA;Lo;0;L;;;;;N;;;;; 11023;BRAHMI LETTER THA;Lo;0;L;;;;;N;;;;; 11024;BRAHMI LETTER DA;Lo;0;L;;;;;N;;;;; 11025;BRAHMI LETTER DHA;Lo;0;L;;;;;N;;;;; 11026;BRAHMI LETTER NA;Lo;0;L;;;;;N;;;;; 11027;BRAHMI LETTER PA;Lo;0;L;;;;;N;;;;; 11028;BRAHMI LETTER PHA;Lo;0;L;;;;;N;;;;; 11029;BRAHMI LETTER BA;Lo;0;L;;;;;N;;;;; 1102A;BRAHMI LETTER BHA;Lo;0;L;;;;;N;;;;; 1102B;BRAHMI LETTER MA;Lo;0;L;;;;;N;;;;; 1102C;BRAHMI LETTER YA;Lo;0;L;;;;;N;;;;; 1102D;BRAHMI LETTER RA;Lo;0;L;;;;;N;;;;; 1102E;BRAHMI LETTER LA;Lo;0;L;;;;;N;;;;; 1102F;BRAHMI LETTER VA;Lo;0;L;;;;;N;;;;; 11030;BRAHMI LETTER SHA;Lo;0;L;;;;;N;;;;; 11031;BRAHMI LETTER SSA;Lo;0;L;;;;;N;;;;; 11032;BRAHMI LETTER SA;Lo;0;L;;;;;N;;;;; 11033;BRAHMI LETTER HA;Lo;0;L;;;;;N;;;;; 11034;BRAHMI LETTER LLA;Lo;0;L;;;;;N;;;;; 11035;BRAHMI LETTER OLD TAMIL LLLA;Lo;0;L;;;;;N;;;;; 11036;BRAHMI LETTER OLD TAMIL RRA;Lo;0;L;;;;;N;;;;; 11037;BRAHMI LETTER OLD TAMIL NNNA;Lo;0;L;;;;;N;;;;; 11038;BRAHMI VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;; 11039;BRAHMI VOWEL SIGN BHATTIPROLU AA;Mn;0;NSM;;;;;N;;;;; 1103A;BRAHMI VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 1103B;BRAHMI VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; 1103C;BRAHMI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 1103D;BRAHMI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 1103E;BRAHMI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; 1103F;BRAHMI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;; 11040;BRAHMI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; 11041;BRAHMI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; 11042;BRAHMI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 11043;BRAHMI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; 11044;BRAHMI VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;; 11045;BRAHMI VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;; 11046;BRAHMI VIRAMA;Mn;9;NSM;;;;;N;;;;; 11047;BRAHMI DANDA;Po;0;L;;;;;N;;;;; 11048;BRAHMI DOUBLE DANDA;Po;0;L;;;;;N;;;;; 11049;BRAHMI PUNCTUATION DOT;Po;0;L;;;;;N;;;;; 1104A;BRAHMI PUNCTUATION DOUBLE DOT;Po;0;L;;;;;N;;;;; 1104B;BRAHMI PUNCTUATION LINE;Po;0;L;;;;;N;;;;; 1104C;BRAHMI PUNCTUATION CRESCENT BAR;Po;0;L;;;;;N;;;;; 1104D;BRAHMI PUNCTUATION LOTUS;Po;0;L;;;;;N;;;;; 11052;BRAHMI NUMBER ONE;No;0;ON;;;1;1;N;;;;; 11053;BRAHMI NUMBER TWO;No;0;ON;;;2;2;N;;;;; 11054;BRAHMI NUMBER THREE;No;0;ON;;;3;3;N;;;;; 11055;BRAHMI NUMBER FOUR;No;0;ON;;;4;4;N;;;;; 11056;BRAHMI NUMBER FIVE;No;0;ON;;;5;5;N;;;;; 11057;BRAHMI NUMBER SIX;No;0;ON;;;6;6;N;;;;; 11058;BRAHMI NUMBER SEVEN;No;0;ON;;;7;7;N;;;;; 11059;BRAHMI NUMBER EIGHT;No;0;ON;;;8;8;N;;;;; 1105A;BRAHMI NUMBER NINE;No;0;ON;;;9;9;N;;;;; 1105B;BRAHMI NUMBER TEN;No;0;ON;;;;10;N;;;;; 1105C;BRAHMI NUMBER TWENTY;No;0;ON;;;;20;N;;;;; 1105D;BRAHMI NUMBER THIRTY;No;0;ON;;;;30;N;;;;; 1105E;BRAHMI NUMBER FORTY;No;0;ON;;;;40;N;;;;; 1105F;BRAHMI NUMBER FIFTY;No;0;ON;;;;50;N;;;;; 11060;BRAHMI NUMBER SIXTY;No;0;ON;;;;60;N;;;;; 11061;BRAHMI NUMBER SEVENTY;No;0;ON;;;;70;N;;;;; 11062;BRAHMI NUMBER EIGHTY;No;0;ON;;;;80;N;;;;; 11063;BRAHMI NUMBER NINETY;No;0;ON;;;;90;N;;;;; 11064;BRAHMI NUMBER ONE HUNDRED;No;0;ON;;;;100;N;;;;; 11065;BRAHMI NUMBER ONE THOUSAND;No;0;ON;;;;1000;N;;;;; 11066;BRAHMI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 11067;BRAHMI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 11068;BRAHMI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 11069;BRAHMI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 1106A;BRAHMI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 1106B;BRAHMI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 1106C;BRAHMI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 1106D;BRAHMI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 1106E;BRAHMI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 1106F;BRAHMI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 11070;BRAHMI SIGN OLD TAMIL VIRAMA;Mn;9;NSM;;;;;N;;;;; 11071;BRAHMI LETTER OLD TAMIL SHORT E;Lo;0;L;;;;;N;;;;; 11072;BRAHMI LETTER OLD TAMIL SHORT O;Lo;0;L;;;;;N;;;;; 11073;BRAHMI VOWEL SIGN OLD TAMIL SHORT E;Mn;0;NSM;;;;;N;;;;; 11074;BRAHMI VOWEL SIGN OLD TAMIL SHORT O;Mn;0;NSM;;;;;N;;;;; 11075;BRAHMI LETTER OLD TAMIL LLA;Lo;0;L;;;;;N;;;;; 1107F;BRAHMI NUMBER JOINER;Mn;9;NSM;;;;;N;;;;; 11080;KAITHI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 11081;KAITHI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 11082;KAITHI SIGN VISARGA;Mc;0;L;;;;;N;;;;; 11083;KAITHI LETTER A;Lo;0;L;;;;;N;;;;; 11084;KAITHI LETTER AA;Lo;0;L;;;;;N;;;;; 11085;KAITHI LETTER I;Lo;0;L;;;;;N;;;;; 11086;KAITHI LETTER II;Lo;0;L;;;;;N;;;;; 11087;KAITHI LETTER U;Lo;0;L;;;;;N;;;;; 11088;KAITHI LETTER UU;Lo;0;L;;;;;N;;;;; 11089;KAITHI LETTER E;Lo;0;L;;;;;N;;;;; 1108A;KAITHI LETTER AI;Lo;0;L;;;;;N;;;;; 1108B;KAITHI LETTER O;Lo;0;L;;;;;N;;;;; 1108C;KAITHI LETTER AU;Lo;0;L;;;;;N;;;;; 1108D;KAITHI LETTER KA;Lo;0;L;;;;;N;;;;; 1108E;KAITHI LETTER KHA;Lo;0;L;;;;;N;;;;; 1108F;KAITHI LETTER GA;Lo;0;L;;;;;N;;;;; 11090;KAITHI LETTER GHA;Lo;0;L;;;;;N;;;;; 11091;KAITHI LETTER NGA;Lo;0;L;;;;;N;;;;; 11092;KAITHI LETTER CA;Lo;0;L;;;;;N;;;;; 11093;KAITHI LETTER CHA;Lo;0;L;;;;;N;;;;; 11094;KAITHI LETTER JA;Lo;0;L;;;;;N;;;;; 11095;KAITHI LETTER JHA;Lo;0;L;;;;;N;;;;; 11096;KAITHI LETTER NYA;Lo;0;L;;;;;N;;;;; 11097;KAITHI LETTER TTA;Lo;0;L;;;;;N;;;;; 11098;KAITHI LETTER TTHA;Lo;0;L;;;;;N;;;;; 11099;KAITHI LETTER DDA;Lo;0;L;;;;;N;;;;; 1109A;KAITHI LETTER DDDHA;Lo;0;L;11099 110BA;;;;N;;;;; 1109B;KAITHI LETTER DDHA;Lo;0;L;;;;;N;;;;; 1109C;KAITHI LETTER RHA;Lo;0;L;1109B 110BA;;;;N;;;;; 1109D;KAITHI LETTER NNA;Lo;0;L;;;;;N;;;;; 1109E;KAITHI LETTER TA;Lo;0;L;;;;;N;;;;; 1109F;KAITHI LETTER THA;Lo;0;L;;;;;N;;;;; 110A0;KAITHI LETTER DA;Lo;0;L;;;;;N;;;;; 110A1;KAITHI LETTER DHA;Lo;0;L;;;;;N;;;;; 110A2;KAITHI LETTER NA;Lo;0;L;;;;;N;;;;; 110A3;KAITHI LETTER PA;Lo;0;L;;;;;N;;;;; 110A4;KAITHI LETTER PHA;Lo;0;L;;;;;N;;;;; 110A5;KAITHI LETTER BA;Lo;0;L;;;;;N;;;;; 110A6;KAITHI LETTER BHA;Lo;0;L;;;;;N;;;;; 110A7;KAITHI LETTER MA;Lo;0;L;;;;;N;;;;; 110A8;KAITHI LETTER YA;Lo;0;L;;;;;N;;;;; 110A9;KAITHI LETTER RA;Lo;0;L;;;;;N;;;;; 110AA;KAITHI LETTER LA;Lo;0;L;;;;;N;;;;; 110AB;KAITHI LETTER VA;Lo;0;L;110A5 110BA;;;;N;;;;; 110AC;KAITHI LETTER SHA;Lo;0;L;;;;;N;;;;; 110AD;KAITHI LETTER SSA;Lo;0;L;;;;;N;;;;; 110AE;KAITHI LETTER SA;Lo;0;L;;;;;N;;;;; 110AF;KAITHI LETTER HA;Lo;0;L;;;;;N;;;;; 110B0;KAITHI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 110B1;KAITHI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 110B2;KAITHI VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 110B3;KAITHI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 110B4;KAITHI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 110B5;KAITHI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 110B6;KAITHI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; 110B7;KAITHI VOWEL SIGN O;Mc;0;L;;;;;N;;;;; 110B8;KAITHI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; 110B9;KAITHI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 110BA;KAITHI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 110BB;KAITHI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;; 110BC;KAITHI ENUMERATION SIGN;Po;0;L;;;;;N;;;;; 110BD;KAITHI NUMBER SIGN;Cf;0;L;;;;;N;;;;; 110BE;KAITHI SECTION MARK;Po;0;L;;;;;N;;;;; 110BF;KAITHI DOUBLE SECTION MARK;Po;0;L;;;;;N;;;;; 110C0;KAITHI DANDA;Po;0;L;;;;;N;;;;; 110C1;KAITHI DOUBLE DANDA;Po;0;L;;;;;N;;;;; 110C2;KAITHI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; 110CD;KAITHI NUMBER SIGN ABOVE;Cf;0;L;;;;;N;;;;; 110D0;SORA SOMPENG LETTER SAH;Lo;0;L;;;;;N;;;;; 110D1;SORA SOMPENG LETTER TAH;Lo;0;L;;;;;N;;;;; 110D2;SORA SOMPENG LETTER BAH;Lo;0;L;;;;;N;;;;; 110D3;SORA SOMPENG LETTER CAH;Lo;0;L;;;;;N;;;;; 110D4;SORA SOMPENG LETTER DAH;Lo;0;L;;;;;N;;;;; 110D5;SORA SOMPENG LETTER GAH;Lo;0;L;;;;;N;;;;; 110D6;SORA SOMPENG LETTER MAH;Lo;0;L;;;;;N;;;;; 110D7;SORA SOMPENG LETTER NGAH;Lo;0;L;;;;;N;;;;; 110D8;SORA SOMPENG LETTER LAH;Lo;0;L;;;;;N;;;;; 110D9;SORA SOMPENG LETTER NAH;Lo;0;L;;;;;N;;;;; 110DA;SORA SOMPENG LETTER VAH;Lo;0;L;;;;;N;;;;; 110DB;SORA SOMPENG LETTER PAH;Lo;0;L;;;;;N;;;;; 110DC;SORA SOMPENG LETTER YAH;Lo;0;L;;;;;N;;;;; 110DD;SORA SOMPENG LETTER RAH;Lo;0;L;;;;;N;;;;; 110DE;SORA SOMPENG LETTER HAH;Lo;0;L;;;;;N;;;;; 110DF;SORA SOMPENG LETTER KAH;Lo;0;L;;;;;N;;;;; 110E0;SORA SOMPENG LETTER JAH;Lo;0;L;;;;;N;;;;; 110E1;SORA SOMPENG LETTER NYAH;Lo;0;L;;;;;N;;;;; 110E2;SORA SOMPENG LETTER AH;Lo;0;L;;;;;N;;;;; 110E3;SORA SOMPENG LETTER EEH;Lo;0;L;;;;;N;;;;; 110E4;SORA SOMPENG LETTER IH;Lo;0;L;;;;;N;;;;; 110E5;SORA SOMPENG LETTER UH;Lo;0;L;;;;;N;;;;; 110E6;SORA SOMPENG LETTER OH;Lo;0;L;;;;;N;;;;; 110E7;SORA SOMPENG LETTER EH;Lo;0;L;;;;;N;;;;; 110E8;SORA SOMPENG LETTER MAE;Lo;0;L;;;;;N;;;;; 110F0;SORA SOMPENG DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 110F1;SORA SOMPENG DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 110F2;SORA SOMPENG DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 110F3;SORA SOMPENG DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 110F4;SORA SOMPENG DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 110F5;SORA SOMPENG DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 110F6;SORA SOMPENG DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 110F7;SORA SOMPENG DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 110F8;SORA SOMPENG DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 110F9;SORA SOMPENG DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 11100;CHAKMA SIGN CANDRABINDU;Mn;230;NSM;;;;;N;;;;; 11101;CHAKMA SIGN ANUSVARA;Mn;230;NSM;;;;;N;;;;; 11102;CHAKMA SIGN VISARGA;Mn;230;NSM;;;;;N;;;;; 11103;CHAKMA LETTER AA;Lo;0;L;;;;;N;;;;; 11104;CHAKMA LETTER I;Lo;0;L;;;;;N;;;;; 11105;CHAKMA LETTER U;Lo;0;L;;;;;N;;;;; 11106;CHAKMA LETTER E;Lo;0;L;;;;;N;;;;; 11107;CHAKMA LETTER KAA;Lo;0;L;;;;;N;;;;; 11108;CHAKMA LETTER KHAA;Lo;0;L;;;;;N;;;;; 11109;CHAKMA LETTER GAA;Lo;0;L;;;;;N;;;;; 1110A;CHAKMA LETTER GHAA;Lo;0;L;;;;;N;;;;; 1110B;CHAKMA LETTER NGAA;Lo;0;L;;;;;N;;;;; 1110C;CHAKMA LETTER CAA;Lo;0;L;;;;;N;;;;; 1110D;CHAKMA LETTER CHAA;Lo;0;L;;;;;N;;;;; 1110E;CHAKMA LETTER JAA;Lo;0;L;;;;;N;;;;; 1110F;CHAKMA LETTER JHAA;Lo;0;L;;;;;N;;;;; 11110;CHAKMA LETTER NYAA;Lo;0;L;;;;;N;;;;; 11111;CHAKMA LETTER TTAA;Lo;0;L;;;;;N;;;;; 11112;CHAKMA LETTER TTHAA;Lo;0;L;;;;;N;;;;; 11113;CHAKMA LETTER DDAA;Lo;0;L;;;;;N;;;;; 11114;CHAKMA LETTER DDHAA;Lo;0;L;;;;;N;;;;; 11115;CHAKMA LETTER NNAA;Lo;0;L;;;;;N;;;;; 11116;CHAKMA LETTER TAA;Lo;0;L;;;;;N;;;;; 11117;CHAKMA LETTER THAA;Lo;0;L;;;;;N;;;;; 11118;CHAKMA LETTER DAA;Lo;0;L;;;;;N;;;;; 11119;CHAKMA LETTER DHAA;Lo;0;L;;;;;N;;;;; 1111A;CHAKMA LETTER NAA;Lo;0;L;;;;;N;;;;; 1111B;CHAKMA LETTER PAA;Lo;0;L;;;;;N;;;;; 1111C;CHAKMA LETTER PHAA;Lo;0;L;;;;;N;;;;; 1111D;CHAKMA LETTER BAA;Lo;0;L;;;;;N;;;;; 1111E;CHAKMA LETTER BHAA;Lo;0;L;;;;;N;;;;; 1111F;CHAKMA LETTER MAA;Lo;0;L;;;;;N;;;;; 11120;CHAKMA LETTER YYAA;Lo;0;L;;;;;N;;;;; 11121;CHAKMA LETTER YAA;Lo;0;L;;;;;N;;;;; 11122;CHAKMA LETTER RAA;Lo;0;L;;;;;N;;;;; 11123;CHAKMA LETTER LAA;Lo;0;L;;;;;N;;;;; 11124;CHAKMA LETTER WAA;Lo;0;L;;;;;N;;;;; 11125;CHAKMA LETTER SAA;Lo;0;L;;;;;N;;;;; 11126;CHAKMA LETTER HAA;Lo;0;L;;;;;N;;;;; 11127;CHAKMA VOWEL SIGN A;Mn;0;NSM;;;;;N;;;;; 11128;CHAKMA VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 11129;CHAKMA VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; 1112A;CHAKMA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 1112B;CHAKMA VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 1112C;CHAKMA VOWEL SIGN E;Mc;0;L;;;;;N;;;;; 1112D;CHAKMA VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; 1112E;CHAKMA VOWEL SIGN O;Mn;0;NSM;11131 11127;;;;N;;;;; 1112F;CHAKMA VOWEL SIGN AU;Mn;0;NSM;11132 11127;;;;N;;;;; 11130;CHAKMA VOWEL SIGN OI;Mn;0;NSM;;;;;N;;;;; 11131;CHAKMA O MARK;Mn;0;NSM;;;;;N;;;;; 11132;CHAKMA AU MARK;Mn;0;NSM;;;;;N;;;;; 11133;CHAKMA VIRAMA;Mn;9;NSM;;;;;N;;;;; 11134;CHAKMA MAAYYAA;Mn;9;NSM;;;;;N;;;;; 11136;CHAKMA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 11137;CHAKMA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 11138;CHAKMA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 11139;CHAKMA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 1113A;CHAKMA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 1113B;CHAKMA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 1113C;CHAKMA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 1113D;CHAKMA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 1113E;CHAKMA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 1113F;CHAKMA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 11140;CHAKMA SECTION MARK;Po;0;L;;;;;N;;;;; 11141;CHAKMA DANDA;Po;0;L;;;;;N;;;;; 11142;CHAKMA DOUBLE DANDA;Po;0;L;;;;;N;;;;; 11143;CHAKMA QUESTION MARK;Po;0;L;;;;;N;;;;; 11144;CHAKMA LETTER LHAA;Lo;0;L;;;;;N;;;;; 11145;CHAKMA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 11146;CHAKMA VOWEL SIGN EI;Mc;0;L;;;;;N;;;;; 11147;CHAKMA LETTER VAA;Lo;0;L;;;;;N;;;;; 11150;MAHAJANI LETTER A;Lo;0;L;;;;;N;;;;; 11151;MAHAJANI LETTER I;Lo;0;L;;;;;N;;;;; 11152;MAHAJANI LETTER U;Lo;0;L;;;;;N;;;;; 11153;MAHAJANI LETTER E;Lo;0;L;;;;;N;;;;; 11154;MAHAJANI LETTER O;Lo;0;L;;;;;N;;;;; 11155;MAHAJANI LETTER KA;Lo;0;L;;;;;N;;;;; 11156;MAHAJANI LETTER KHA;Lo;0;L;;;;;N;;;;; 11157;MAHAJANI LETTER GA;Lo;0;L;;;;;N;;;;; 11158;MAHAJANI LETTER GHA;Lo;0;L;;;;;N;;;;; 11159;MAHAJANI LETTER CA;Lo;0;L;;;;;N;;;;; 1115A;MAHAJANI LETTER CHA;Lo;0;L;;;;;N;;;;; 1115B;MAHAJANI LETTER JA;Lo;0;L;;;;;N;;;;; 1115C;MAHAJANI LETTER JHA;Lo;0;L;;;;;N;;;;; 1115D;MAHAJANI LETTER NYA;Lo;0;L;;;;;N;;;;; 1115E;MAHAJANI LETTER TTA;Lo;0;L;;;;;N;;;;; 1115F;MAHAJANI LETTER TTHA;Lo;0;L;;;;;N;;;;; 11160;MAHAJANI LETTER DDA;Lo;0;L;;;;;N;;;;; 11161;MAHAJANI LETTER DDHA;Lo;0;L;;;;;N;;;;; 11162;MAHAJANI LETTER NNA;Lo;0;L;;;;;N;;;;; 11163;MAHAJANI LETTER TA;Lo;0;L;;;;;N;;;;; 11164;MAHAJANI LETTER THA;Lo;0;L;;;;;N;;;;; 11165;MAHAJANI LETTER DA;Lo;0;L;;;;;N;;;;; 11166;MAHAJANI LETTER DHA;Lo;0;L;;;;;N;;;;; 11167;MAHAJANI LETTER NA;Lo;0;L;;;;;N;;;;; 11168;MAHAJANI LETTER PA;Lo;0;L;;;;;N;;;;; 11169;MAHAJANI LETTER PHA;Lo;0;L;;;;;N;;;;; 1116A;MAHAJANI LETTER BA;Lo;0;L;;;;;N;;;;; 1116B;MAHAJANI LETTER BHA;Lo;0;L;;;;;N;;;;; 1116C;MAHAJANI LETTER MA;Lo;0;L;;;;;N;;;;; 1116D;MAHAJANI LETTER RA;Lo;0;L;;;;;N;;;;; 1116E;MAHAJANI LETTER LA;Lo;0;L;;;;;N;;;;; 1116F;MAHAJANI LETTER VA;Lo;0;L;;;;;N;;;;; 11170;MAHAJANI LETTER SA;Lo;0;L;;;;;N;;;;; 11171;MAHAJANI LETTER HA;Lo;0;L;;;;;N;;;;; 11172;MAHAJANI LETTER RRA;Lo;0;L;;;;;N;;;;; 11173;MAHAJANI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 11174;MAHAJANI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;; 11175;MAHAJANI SECTION MARK;Po;0;L;;;;;N;;;;; 11176;MAHAJANI LIGATURE SHRI;Lo;0;L;;;;;N;;;;; 11180;SHARADA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 11181;SHARADA SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 11182;SHARADA SIGN VISARGA;Mc;0;L;;;;;N;;;;; 11183;SHARADA LETTER A;Lo;0;L;;;;;N;;;;; 11184;SHARADA LETTER AA;Lo;0;L;;;;;N;;;;; 11185;SHARADA LETTER I;Lo;0;L;;;;;N;;;;; 11186;SHARADA LETTER II;Lo;0;L;;;;;N;;;;; 11187;SHARADA LETTER U;Lo;0;L;;;;;N;;;;; 11188;SHARADA LETTER UU;Lo;0;L;;;;;N;;;;; 11189;SHARADA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 1118A;SHARADA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 1118B;SHARADA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 1118C;SHARADA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 1118D;SHARADA LETTER E;Lo;0;L;;;;;N;;;;; 1118E;SHARADA LETTER AI;Lo;0;L;;;;;N;;;;; 1118F;SHARADA LETTER O;Lo;0;L;;;;;N;;;;; 11190;SHARADA LETTER AU;Lo;0;L;;;;;N;;;;; 11191;SHARADA LETTER KA;Lo;0;L;;;;;N;;;;; 11192;SHARADA LETTER KHA;Lo;0;L;;;;;N;;;;; 11193;SHARADA LETTER GA;Lo;0;L;;;;;N;;;;; 11194;SHARADA LETTER GHA;Lo;0;L;;;;;N;;;;; 11195;SHARADA LETTER NGA;Lo;0;L;;;;;N;;;;; 11196;SHARADA LETTER CA;Lo;0;L;;;;;N;;;;; 11197;SHARADA LETTER CHA;Lo;0;L;;;;;N;;;;; 11198;SHARADA LETTER JA;Lo;0;L;;;;;N;;;;; 11199;SHARADA LETTER JHA;Lo;0;L;;;;;N;;;;; 1119A;SHARADA LETTER NYA;Lo;0;L;;;;;N;;;;; 1119B;SHARADA LETTER TTA;Lo;0;L;;;;;N;;;;; 1119C;SHARADA LETTER TTHA;Lo;0;L;;;;;N;;;;; 1119D;SHARADA LETTER DDA;Lo;0;L;;;;;N;;;;; 1119E;SHARADA LETTER DDHA;Lo;0;L;;;;;N;;;;; 1119F;SHARADA LETTER NNA;Lo;0;L;;;;;N;;;;; 111A0;SHARADA LETTER TA;Lo;0;L;;;;;N;;;;; 111A1;SHARADA LETTER THA;Lo;0;L;;;;;N;;;;; 111A2;SHARADA LETTER DA;Lo;0;L;;;;;N;;;;; 111A3;SHARADA LETTER DHA;Lo;0;L;;;;;N;;;;; 111A4;SHARADA LETTER NA;Lo;0;L;;;;;N;;;;; 111A5;SHARADA LETTER PA;Lo;0;L;;;;;N;;;;; 111A6;SHARADA LETTER PHA;Lo;0;L;;;;;N;;;;; 111A7;SHARADA LETTER BA;Lo;0;L;;;;;N;;;;; 111A8;SHARADA LETTER BHA;Lo;0;L;;;;;N;;;;; 111A9;SHARADA LETTER MA;Lo;0;L;;;;;N;;;;; 111AA;SHARADA LETTER YA;Lo;0;L;;;;;N;;;;; 111AB;SHARADA LETTER RA;Lo;0;L;;;;;N;;;;; 111AC;SHARADA LETTER LA;Lo;0;L;;;;;N;;;;; 111AD;SHARADA LETTER LLA;Lo;0;L;;;;;N;;;;; 111AE;SHARADA LETTER VA;Lo;0;L;;;;;N;;;;; 111AF;SHARADA LETTER SHA;Lo;0;L;;;;;N;;;;; 111B0;SHARADA LETTER SSA;Lo;0;L;;;;;N;;;;; 111B1;SHARADA LETTER SA;Lo;0;L;;;;;N;;;;; 111B2;SHARADA LETTER HA;Lo;0;L;;;;;N;;;;; 111B3;SHARADA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 111B4;SHARADA VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 111B5;SHARADA VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 111B6;SHARADA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 111B7;SHARADA VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 111B8;SHARADA VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; 111B9;SHARADA VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;; 111BA;SHARADA VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; 111BB;SHARADA VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; 111BC;SHARADA VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 111BD;SHARADA VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; 111BE;SHARADA VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;; 111BF;SHARADA VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; 111C0;SHARADA SIGN VIRAMA;Mc;9;L;;;;;N;;;;; 111C1;SHARADA SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; 111C2;SHARADA SIGN JIHVAMULIYA;Lo;0;L;;;;;N;;;;; 111C3;SHARADA SIGN UPADHMANIYA;Lo;0;L;;;;;N;;;;; 111C4;SHARADA OM;Lo;0;L;;;;;N;;;;; 111C5;SHARADA DANDA;Po;0;L;;;;;N;;;;; 111C6;SHARADA DOUBLE DANDA;Po;0;L;;;;;N;;;;; 111C7;SHARADA ABBREVIATION SIGN;Po;0;L;;;;;N;;;;; 111C8;SHARADA SEPARATOR;Po;0;L;;;;;N;;;;; 111C9;SHARADA SANDHI MARK;Mn;0;NSM;;;;;N;;;;; 111CA;SHARADA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 111CB;SHARADA VOWEL MODIFIER MARK;Mn;0;NSM;;;;;N;;;;; 111CC;SHARADA EXTRA SHORT VOWEL MARK;Mn;0;NSM;;;;;N;;;;; 111CD;SHARADA SUTRA MARK;Po;0;L;;;;;N;;;;; 111CE;SHARADA VOWEL SIGN PRISHTHAMATRA E;Mc;0;L;;;;;N;;;;; 111CF;SHARADA SIGN INVERTED CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 111D0;SHARADA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 111D1;SHARADA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 111D2;SHARADA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 111D3;SHARADA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 111D4;SHARADA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 111D5;SHARADA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 111D6;SHARADA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 111D7;SHARADA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 111D8;SHARADA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 111D9;SHARADA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 111DA;SHARADA EKAM;Lo;0;L;;;;;N;;;;; 111DB;SHARADA SIGN SIDDHAM;Po;0;L;;;;;N;;;;; 111DC;SHARADA HEADSTROKE;Lo;0;L;;;;;N;;;;; 111DD;SHARADA CONTINUATION SIGN;Po;0;L;;;;;N;;;;; 111DE;SHARADA SECTION MARK-1;Po;0;L;;;;;N;;;;; 111DF;SHARADA SECTION MARK-2;Po;0;L;;;;;N;;;;; 111E1;SINHALA ARCHAIC DIGIT ONE;No;0;L;;;;1;N;;;;; 111E2;SINHALA ARCHAIC DIGIT TWO;No;0;L;;;;2;N;;;;; 111E3;SINHALA ARCHAIC DIGIT THREE;No;0;L;;;;3;N;;;;; 111E4;SINHALA ARCHAIC DIGIT FOUR;No;0;L;;;;4;N;;;;; 111E5;SINHALA ARCHAIC DIGIT FIVE;No;0;L;;;;5;N;;;;; 111E6;SINHALA ARCHAIC DIGIT SIX;No;0;L;;;;6;N;;;;; 111E7;SINHALA ARCHAIC DIGIT SEVEN;No;0;L;;;;7;N;;;;; 111E8;SINHALA ARCHAIC DIGIT EIGHT;No;0;L;;;;8;N;;;;; 111E9;SINHALA ARCHAIC DIGIT NINE;No;0;L;;;;9;N;;;;; 111EA;SINHALA ARCHAIC NUMBER TEN;No;0;L;;;;10;N;;;;; 111EB;SINHALA ARCHAIC NUMBER TWENTY;No;0;L;;;;20;N;;;;; 111EC;SINHALA ARCHAIC NUMBER THIRTY;No;0;L;;;;30;N;;;;; 111ED;SINHALA ARCHAIC NUMBER FORTY;No;0;L;;;;40;N;;;;; 111EE;SINHALA ARCHAIC NUMBER FIFTY;No;0;L;;;;50;N;;;;; 111EF;SINHALA ARCHAIC NUMBER SIXTY;No;0;L;;;;60;N;;;;; 111F0;SINHALA ARCHAIC NUMBER SEVENTY;No;0;L;;;;70;N;;;;; 111F1;SINHALA ARCHAIC NUMBER EIGHTY;No;0;L;;;;80;N;;;;; 111F2;SINHALA ARCHAIC NUMBER NINETY;No;0;L;;;;90;N;;;;; 111F3;SINHALA ARCHAIC NUMBER ONE HUNDRED;No;0;L;;;;100;N;;;;; 111F4;SINHALA ARCHAIC NUMBER ONE THOUSAND;No;0;L;;;;1000;N;;;;; 11200;KHOJKI LETTER A;Lo;0;L;;;;;N;;;;; 11201;KHOJKI LETTER AA;Lo;0;L;;;;;N;;;;; 11202;KHOJKI LETTER I;Lo;0;L;;;;;N;;;;; 11203;KHOJKI LETTER U;Lo;0;L;;;;;N;;;;; 11204;KHOJKI LETTER E;Lo;0;L;;;;;N;;;;; 11205;KHOJKI LETTER AI;Lo;0;L;;;;;N;;;;; 11206;KHOJKI LETTER O;Lo;0;L;;;;;N;;;;; 11207;KHOJKI LETTER AU;Lo;0;L;;;;;N;;;;; 11208;KHOJKI LETTER KA;Lo;0;L;;;;;N;;;;; 11209;KHOJKI LETTER KHA;Lo;0;L;;;;;N;;;;; 1120A;KHOJKI LETTER GA;Lo;0;L;;;;;N;;;;; 1120B;KHOJKI LETTER GGA;Lo;0;L;;;;;N;;;;; 1120C;KHOJKI LETTER GHA;Lo;0;L;;;;;N;;;;; 1120D;KHOJKI LETTER NGA;Lo;0;L;;;;;N;;;;; 1120E;KHOJKI LETTER CA;Lo;0;L;;;;;N;;;;; 1120F;KHOJKI LETTER CHA;Lo;0;L;;;;;N;;;;; 11210;KHOJKI LETTER JA;Lo;0;L;;;;;N;;;;; 11211;KHOJKI LETTER JJA;Lo;0;L;;;;;N;;;;; 11213;KHOJKI LETTER NYA;Lo;0;L;;;;;N;;;;; 11214;KHOJKI LETTER TTA;Lo;0;L;;;;;N;;;;; 11215;KHOJKI LETTER TTHA;Lo;0;L;;;;;N;;;;; 11216;KHOJKI LETTER DDA;Lo;0;L;;;;;N;;;;; 11217;KHOJKI LETTER DDHA;Lo;0;L;;;;;N;;;;; 11218;KHOJKI LETTER NNA;Lo;0;L;;;;;N;;;;; 11219;KHOJKI LETTER TA;Lo;0;L;;;;;N;;;;; 1121A;KHOJKI LETTER THA;Lo;0;L;;;;;N;;;;; 1121B;KHOJKI LETTER DA;Lo;0;L;;;;;N;;;;; 1121C;KHOJKI LETTER DDDA;Lo;0;L;;;;;N;;;;; 1121D;KHOJKI LETTER DHA;Lo;0;L;;;;;N;;;;; 1121E;KHOJKI LETTER NA;Lo;0;L;;;;;N;;;;; 1121F;KHOJKI LETTER PA;Lo;0;L;;;;;N;;;;; 11220;KHOJKI LETTER PHA;Lo;0;L;;;;;N;;;;; 11221;KHOJKI LETTER BA;Lo;0;L;;;;;N;;;;; 11222;KHOJKI LETTER BBA;Lo;0;L;;;;;N;;;;; 11223;KHOJKI LETTER BHA;Lo;0;L;;;;;N;;;;; 11224;KHOJKI LETTER MA;Lo;0;L;;;;;N;;;;; 11225;KHOJKI LETTER YA;Lo;0;L;;;;;N;;;;; 11226;KHOJKI LETTER RA;Lo;0;L;;;;;N;;;;; 11227;KHOJKI LETTER LA;Lo;0;L;;;;;N;;;;; 11228;KHOJKI LETTER VA;Lo;0;L;;;;;N;;;;; 11229;KHOJKI LETTER SA;Lo;0;L;;;;;N;;;;; 1122A;KHOJKI LETTER HA;Lo;0;L;;;;;N;;;;; 1122B;KHOJKI LETTER LLA;Lo;0;L;;;;;N;;;;; 1122C;KHOJKI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 1122D;KHOJKI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 1122E;KHOJKI VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 1122F;KHOJKI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 11230;KHOJKI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 11231;KHOJKI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; 11232;KHOJKI VOWEL SIGN O;Mc;0;L;;;;;N;;;;; 11233;KHOJKI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; 11234;KHOJKI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 11235;KHOJKI SIGN VIRAMA;Mc;9;L;;;;;N;;;;; 11236;KHOJKI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 11237;KHOJKI SIGN SHADDA;Mn;0;NSM;;;;;N;;;;; 11238;KHOJKI DANDA;Po;0;L;;;;;N;;;;; 11239;KHOJKI DOUBLE DANDA;Po;0;L;;;;;N;;;;; 1123A;KHOJKI WORD SEPARATOR;Po;0;L;;;;;N;;;;; 1123B;KHOJKI SECTION MARK;Po;0;L;;;;;N;;;;; 1123C;KHOJKI DOUBLE SECTION MARK;Po;0;L;;;;;N;;;;; 1123D;KHOJKI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;; 1123E;KHOJKI SIGN SUKUN;Mn;0;NSM;;;;;N;;;;; 11280;MULTANI LETTER A;Lo;0;L;;;;;N;;;;; 11281;MULTANI LETTER I;Lo;0;L;;;;;N;;;;; 11282;MULTANI LETTER U;Lo;0;L;;;;;N;;;;; 11283;MULTANI LETTER E;Lo;0;L;;;;;N;;;;; 11284;MULTANI LETTER KA;Lo;0;L;;;;;N;;;;; 11285;MULTANI LETTER KHA;Lo;0;L;;;;;N;;;;; 11286;MULTANI LETTER GA;Lo;0;L;;;;;N;;;;; 11288;MULTANI LETTER GHA;Lo;0;L;;;;;N;;;;; 1128A;MULTANI LETTER CA;Lo;0;L;;;;;N;;;;; 1128B;MULTANI LETTER CHA;Lo;0;L;;;;;N;;;;; 1128C;MULTANI LETTER JA;Lo;0;L;;;;;N;;;;; 1128D;MULTANI LETTER JJA;Lo;0;L;;;;;N;;;;; 1128F;MULTANI LETTER NYA;Lo;0;L;;;;;N;;;;; 11290;MULTANI LETTER TTA;Lo;0;L;;;;;N;;;;; 11291;MULTANI LETTER TTHA;Lo;0;L;;;;;N;;;;; 11292;MULTANI LETTER DDA;Lo;0;L;;;;;N;;;;; 11293;MULTANI LETTER DDDA;Lo;0;L;;;;;N;;;;; 11294;MULTANI LETTER DDHA;Lo;0;L;;;;;N;;;;; 11295;MULTANI LETTER NNA;Lo;0;L;;;;;N;;;;; 11296;MULTANI LETTER TA;Lo;0;L;;;;;N;;;;; 11297;MULTANI LETTER THA;Lo;0;L;;;;;N;;;;; 11298;MULTANI LETTER DA;Lo;0;L;;;;;N;;;;; 11299;MULTANI LETTER DHA;Lo;0;L;;;;;N;;;;; 1129A;MULTANI LETTER NA;Lo;0;L;;;;;N;;;;; 1129B;MULTANI LETTER PA;Lo;0;L;;;;;N;;;;; 1129C;MULTANI LETTER PHA;Lo;0;L;;;;;N;;;;; 1129D;MULTANI LETTER BA;Lo;0;L;;;;;N;;;;; 1129F;MULTANI LETTER BHA;Lo;0;L;;;;;N;;;;; 112A0;MULTANI LETTER MA;Lo;0;L;;;;;N;;;;; 112A1;MULTANI LETTER YA;Lo;0;L;;;;;N;;;;; 112A2;MULTANI LETTER RA;Lo;0;L;;;;;N;;;;; 112A3;MULTANI LETTER LA;Lo;0;L;;;;;N;;;;; 112A4;MULTANI LETTER VA;Lo;0;L;;;;;N;;;;; 112A5;MULTANI LETTER SA;Lo;0;L;;;;;N;;;;; 112A6;MULTANI LETTER HA;Lo;0;L;;;;;N;;;;; 112A7;MULTANI LETTER RRA;Lo;0;L;;;;;N;;;;; 112A8;MULTANI LETTER RHA;Lo;0;L;;;;;N;;;;; 112A9;MULTANI SECTION MARK;Po;0;L;;;;;N;;;;; 112B0;KHUDAWADI LETTER A;Lo;0;L;;;;;N;;;;; 112B1;KHUDAWADI LETTER AA;Lo;0;L;;;;;N;;;;; 112B2;KHUDAWADI LETTER I;Lo;0;L;;;;;N;;;;; 112B3;KHUDAWADI LETTER II;Lo;0;L;;;;;N;;;;; 112B4;KHUDAWADI LETTER U;Lo;0;L;;;;;N;;;;; 112B5;KHUDAWADI LETTER UU;Lo;0;L;;;;;N;;;;; 112B6;KHUDAWADI LETTER E;Lo;0;L;;;;;N;;;;; 112B7;KHUDAWADI LETTER AI;Lo;0;L;;;;;N;;;;; 112B8;KHUDAWADI LETTER O;Lo;0;L;;;;;N;;;;; 112B9;KHUDAWADI LETTER AU;Lo;0;L;;;;;N;;;;; 112BA;KHUDAWADI LETTER KA;Lo;0;L;;;;;N;;;;; 112BB;KHUDAWADI LETTER KHA;Lo;0;L;;;;;N;;;;; 112BC;KHUDAWADI LETTER GA;Lo;0;L;;;;;N;;;;; 112BD;KHUDAWADI LETTER GGA;Lo;0;L;;;;;N;;;;; 112BE;KHUDAWADI LETTER GHA;Lo;0;L;;;;;N;;;;; 112BF;KHUDAWADI LETTER NGA;Lo;0;L;;;;;N;;;;; 112C0;KHUDAWADI LETTER CA;Lo;0;L;;;;;N;;;;; 112C1;KHUDAWADI LETTER CHA;Lo;0;L;;;;;N;;;;; 112C2;KHUDAWADI LETTER JA;Lo;0;L;;;;;N;;;;; 112C3;KHUDAWADI LETTER JJA;Lo;0;L;;;;;N;;;;; 112C4;KHUDAWADI LETTER JHA;Lo;0;L;;;;;N;;;;; 112C5;KHUDAWADI LETTER NYA;Lo;0;L;;;;;N;;;;; 112C6;KHUDAWADI LETTER TTA;Lo;0;L;;;;;N;;;;; 112C7;KHUDAWADI LETTER TTHA;Lo;0;L;;;;;N;;;;; 112C8;KHUDAWADI LETTER DDA;Lo;0;L;;;;;N;;;;; 112C9;KHUDAWADI LETTER DDDA;Lo;0;L;;;;;N;;;;; 112CA;KHUDAWADI LETTER RRA;Lo;0;L;;;;;N;;;;; 112CB;KHUDAWADI LETTER DDHA;Lo;0;L;;;;;N;;;;; 112CC;KHUDAWADI LETTER NNA;Lo;0;L;;;;;N;;;;; 112CD;KHUDAWADI LETTER TA;Lo;0;L;;;;;N;;;;; 112CE;KHUDAWADI LETTER THA;Lo;0;L;;;;;N;;;;; 112CF;KHUDAWADI LETTER DA;Lo;0;L;;;;;N;;;;; 112D0;KHUDAWADI LETTER DHA;Lo;0;L;;;;;N;;;;; 112D1;KHUDAWADI LETTER NA;Lo;0;L;;;;;N;;;;; 112D2;KHUDAWADI LETTER PA;Lo;0;L;;;;;N;;;;; 112D3;KHUDAWADI LETTER PHA;Lo;0;L;;;;;N;;;;; 112D4;KHUDAWADI LETTER BA;Lo;0;L;;;;;N;;;;; 112D5;KHUDAWADI LETTER BBA;Lo;0;L;;;;;N;;;;; 112D6;KHUDAWADI LETTER BHA;Lo;0;L;;;;;N;;;;; 112D7;KHUDAWADI LETTER MA;Lo;0;L;;;;;N;;;;; 112D8;KHUDAWADI LETTER YA;Lo;0;L;;;;;N;;;;; 112D9;KHUDAWADI LETTER RA;Lo;0;L;;;;;N;;;;; 112DA;KHUDAWADI LETTER LA;Lo;0;L;;;;;N;;;;; 112DB;KHUDAWADI LETTER VA;Lo;0;L;;;;;N;;;;; 112DC;KHUDAWADI LETTER SHA;Lo;0;L;;;;;N;;;;; 112DD;KHUDAWADI LETTER SA;Lo;0;L;;;;;N;;;;; 112DE;KHUDAWADI LETTER HA;Lo;0;L;;;;;N;;;;; 112DF;KHUDAWADI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 112E0;KHUDAWADI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 112E1;KHUDAWADI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 112E2;KHUDAWADI VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 112E3;KHUDAWADI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 112E4;KHUDAWADI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 112E5;KHUDAWADI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 112E6;KHUDAWADI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; 112E7;KHUDAWADI VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;; 112E8;KHUDAWADI VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;; 112E9;KHUDAWADI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 112EA;KHUDAWADI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 112F0;KHUDAWADI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 112F1;KHUDAWADI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 112F2;KHUDAWADI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 112F3;KHUDAWADI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 112F4;KHUDAWADI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 112F5;KHUDAWADI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 112F6;KHUDAWADI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 112F7;KHUDAWADI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 112F8;KHUDAWADI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 112F9;KHUDAWADI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 11300;GRANTHA SIGN COMBINING ANUSVARA ABOVE;Mn;0;NSM;;;;;N;;;;; 11301;GRANTHA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 11302;GRANTHA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;; 11303;GRANTHA SIGN VISARGA;Mc;0;L;;;;;N;;;;; 11305;GRANTHA LETTER A;Lo;0;L;;;;;N;;;;; 11306;GRANTHA LETTER AA;Lo;0;L;;;;;N;;;;; 11307;GRANTHA LETTER I;Lo;0;L;;;;;N;;;;; 11308;GRANTHA LETTER II;Lo;0;L;;;;;N;;;;; 11309;GRANTHA LETTER U;Lo;0;L;;;;;N;;;;; 1130A;GRANTHA LETTER UU;Lo;0;L;;;;;N;;;;; 1130B;GRANTHA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 1130C;GRANTHA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 1130F;GRANTHA LETTER EE;Lo;0;L;;;;;N;;;;; 11310;GRANTHA LETTER AI;Lo;0;L;;;;;N;;;;; 11313;GRANTHA LETTER OO;Lo;0;L;;;;;N;;;;; 11314;GRANTHA LETTER AU;Lo;0;L;;;;;N;;;;; 11315;GRANTHA LETTER KA;Lo;0;L;;;;;N;;;;; 11316;GRANTHA LETTER KHA;Lo;0;L;;;;;N;;;;; 11317;GRANTHA LETTER GA;Lo;0;L;;;;;N;;;;; 11318;GRANTHA LETTER GHA;Lo;0;L;;;;;N;;;;; 11319;GRANTHA LETTER NGA;Lo;0;L;;;;;N;;;;; 1131A;GRANTHA LETTER CA;Lo;0;L;;;;;N;;;;; 1131B;GRANTHA LETTER CHA;Lo;0;L;;;;;N;;;;; 1131C;GRANTHA LETTER JA;Lo;0;L;;;;;N;;;;; 1131D;GRANTHA LETTER JHA;Lo;0;L;;;;;N;;;;; 1131E;GRANTHA LETTER NYA;Lo;0;L;;;;;N;;;;; 1131F;GRANTHA LETTER TTA;Lo;0;L;;;;;N;;;;; 11320;GRANTHA LETTER TTHA;Lo;0;L;;;;;N;;;;; 11321;GRANTHA LETTER DDA;Lo;0;L;;;;;N;;;;; 11322;GRANTHA LETTER DDHA;Lo;0;L;;;;;N;;;;; 11323;GRANTHA LETTER NNA;Lo;0;L;;;;;N;;;;; 11324;GRANTHA LETTER TA;Lo;0;L;;;;;N;;;;; 11325;GRANTHA LETTER THA;Lo;0;L;;;;;N;;;;; 11326;GRANTHA LETTER DA;Lo;0;L;;;;;N;;;;; 11327;GRANTHA LETTER DHA;Lo;0;L;;;;;N;;;;; 11328;GRANTHA LETTER NA;Lo;0;L;;;;;N;;;;; 1132A;GRANTHA LETTER PA;Lo;0;L;;;;;N;;;;; 1132B;GRANTHA LETTER PHA;Lo;0;L;;;;;N;;;;; 1132C;GRANTHA LETTER BA;Lo;0;L;;;;;N;;;;; 1132D;GRANTHA LETTER BHA;Lo;0;L;;;;;N;;;;; 1132E;GRANTHA LETTER MA;Lo;0;L;;;;;N;;;;; 1132F;GRANTHA LETTER YA;Lo;0;L;;;;;N;;;;; 11330;GRANTHA LETTER RA;Lo;0;L;;;;;N;;;;; 11332;GRANTHA LETTER LA;Lo;0;L;;;;;N;;;;; 11333;GRANTHA LETTER LLA;Lo;0;L;;;;;N;;;;; 11335;GRANTHA LETTER VA;Lo;0;L;;;;;N;;;;; 11336;GRANTHA LETTER SHA;Lo;0;L;;;;;N;;;;; 11337;GRANTHA LETTER SSA;Lo;0;L;;;;;N;;;;; 11338;GRANTHA LETTER SA;Lo;0;L;;;;;N;;;;; 11339;GRANTHA LETTER HA;Lo;0;L;;;;;N;;;;; 1133B;COMBINING BINDU BELOW;Mn;7;NSM;;;;;N;;;;; 1133C;GRANTHA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 1133D;GRANTHA SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; 1133E;GRANTHA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 1133F;GRANTHA VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 11340;GRANTHA VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; 11341;GRANTHA VOWEL SIGN U;Mc;0;L;;;;;N;;;;; 11342;GRANTHA VOWEL SIGN UU;Mc;0;L;;;;;N;;;;; 11343;GRANTHA VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;; 11344;GRANTHA VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;; 11347;GRANTHA VOWEL SIGN EE;Mc;0;L;;;;;N;;;;; 11348;GRANTHA VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; 1134B;GRANTHA VOWEL SIGN OO;Mc;0;L;11347 1133E;;;;N;;;;; 1134C;GRANTHA VOWEL SIGN AU;Mc;0;L;11347 11357;;;;N;;;;; 1134D;GRANTHA SIGN VIRAMA;Mc;9;L;;;;;N;;;;; 11350;GRANTHA OM;Lo;0;L;;;;;N;;;;; 11357;GRANTHA AU LENGTH MARK;Mc;0;L;;;;;N;;;;; 1135D;GRANTHA SIGN PLUTA;Lo;0;L;;;;;N;;;;; 1135E;GRANTHA LETTER VEDIC ANUSVARA;Lo;0;L;;;;;N;;;;; 1135F;GRANTHA LETTER VEDIC DOUBLE ANUSVARA;Lo;0;L;;;;;N;;;;; 11360;GRANTHA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 11361;GRANTHA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 11362;GRANTHA VOWEL SIGN VOCALIC L;Mc;0;L;;;;;N;;;;; 11363;GRANTHA VOWEL SIGN VOCALIC LL;Mc;0;L;;;;;N;;;;; 11366;COMBINING GRANTHA DIGIT ZERO;Mn;230;NSM;;;;;N;;;;; 11367;COMBINING GRANTHA DIGIT ONE;Mn;230;NSM;;;;;N;;;;; 11368;COMBINING GRANTHA DIGIT TWO;Mn;230;NSM;;;;;N;;;;; 11369;COMBINING GRANTHA DIGIT THREE;Mn;230;NSM;;;;;N;;;;; 1136A;COMBINING GRANTHA DIGIT FOUR;Mn;230;NSM;;;;;N;;;;; 1136B;COMBINING GRANTHA DIGIT FIVE;Mn;230;NSM;;;;;N;;;;; 1136C;COMBINING GRANTHA DIGIT SIX;Mn;230;NSM;;;;;N;;;;; 11370;COMBINING GRANTHA LETTER A;Mn;230;NSM;;;;;N;;;;; 11371;COMBINING GRANTHA LETTER KA;Mn;230;NSM;;;;;N;;;;; 11372;COMBINING GRANTHA LETTER NA;Mn;230;NSM;;;;;N;;;;; 11373;COMBINING GRANTHA LETTER VI;Mn;230;NSM;;;;;N;;;;; 11374;COMBINING GRANTHA LETTER PA;Mn;230;NSM;;;;;N;;;;; 11400;NEWA LETTER A;Lo;0;L;;;;;N;;;;; 11401;NEWA LETTER AA;Lo;0;L;;;;;N;;;;; 11402;NEWA LETTER I;Lo;0;L;;;;;N;;;;; 11403;NEWA LETTER II;Lo;0;L;;;;;N;;;;; 11404;NEWA LETTER U;Lo;0;L;;;;;N;;;;; 11405;NEWA LETTER UU;Lo;0;L;;;;;N;;;;; 11406;NEWA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 11407;NEWA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 11408;NEWA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 11409;NEWA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 1140A;NEWA LETTER E;Lo;0;L;;;;;N;;;;; 1140B;NEWA LETTER AI;Lo;0;L;;;;;N;;;;; 1140C;NEWA LETTER O;Lo;0;L;;;;;N;;;;; 1140D;NEWA LETTER AU;Lo;0;L;;;;;N;;;;; 1140E;NEWA LETTER KA;Lo;0;L;;;;;N;;;;; 1140F;NEWA LETTER KHA;Lo;0;L;;;;;N;;;;; 11410;NEWA LETTER GA;Lo;0;L;;;;;N;;;;; 11411;NEWA LETTER GHA;Lo;0;L;;;;;N;;;;; 11412;NEWA LETTER NGA;Lo;0;L;;;;;N;;;;; 11413;NEWA LETTER NGHA;Lo;0;L;;;;;N;;;;; 11414;NEWA LETTER CA;Lo;0;L;;;;;N;;;;; 11415;NEWA LETTER CHA;Lo;0;L;;;;;N;;;;; 11416;NEWA LETTER JA;Lo;0;L;;;;;N;;;;; 11417;NEWA LETTER JHA;Lo;0;L;;;;;N;;;;; 11418;NEWA LETTER NYA;Lo;0;L;;;;;N;;;;; 11419;NEWA LETTER NYHA;Lo;0;L;;;;;N;;;;; 1141A;NEWA LETTER TTA;Lo;0;L;;;;;N;;;;; 1141B;NEWA LETTER TTHA;Lo;0;L;;;;;N;;;;; 1141C;NEWA LETTER DDA;Lo;0;L;;;;;N;;;;; 1141D;NEWA LETTER DDHA;Lo;0;L;;;;;N;;;;; 1141E;NEWA LETTER NNA;Lo;0;L;;;;;N;;;;; 1141F;NEWA LETTER TA;Lo;0;L;;;;;N;;;;; 11420;NEWA LETTER THA;Lo;0;L;;;;;N;;;;; 11421;NEWA LETTER DA;Lo;0;L;;;;;N;;;;; 11422;NEWA LETTER DHA;Lo;0;L;;;;;N;;;;; 11423;NEWA LETTER NA;Lo;0;L;;;;;N;;;;; 11424;NEWA LETTER NHA;Lo;0;L;;;;;N;;;;; 11425;NEWA LETTER PA;Lo;0;L;;;;;N;;;;; 11426;NEWA LETTER PHA;Lo;0;L;;;;;N;;;;; 11427;NEWA LETTER BA;Lo;0;L;;;;;N;;;;; 11428;NEWA LETTER BHA;Lo;0;L;;;;;N;;;;; 11429;NEWA LETTER MA;Lo;0;L;;;;;N;;;;; 1142A;NEWA LETTER MHA;Lo;0;L;;;;;N;;;;; 1142B;NEWA LETTER YA;Lo;0;L;;;;;N;;;;; 1142C;NEWA LETTER RA;Lo;0;L;;;;;N;;;;; 1142D;NEWA LETTER RHA;Lo;0;L;;;;;N;;;;; 1142E;NEWA LETTER LA;Lo;0;L;;;;;N;;;;; 1142F;NEWA LETTER LHA;Lo;0;L;;;;;N;;;;; 11430;NEWA LETTER WA;Lo;0;L;;;;;N;;;;; 11431;NEWA LETTER SHA;Lo;0;L;;;;;N;;;;; 11432;NEWA LETTER SSA;Lo;0;L;;;;;N;;;;; 11433;NEWA LETTER SA;Lo;0;L;;;;;N;;;;; 11434;NEWA LETTER HA;Lo;0;L;;;;;N;;;;; 11435;NEWA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 11436;NEWA VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 11437;NEWA VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 11438;NEWA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 11439;NEWA VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 1143A;NEWA VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; 1143B;NEWA VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;; 1143C;NEWA VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; 1143D;NEWA VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; 1143E;NEWA VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 1143F;NEWA VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; 11440;NEWA VOWEL SIGN O;Mc;0;L;;;;;N;;;;; 11441;NEWA VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; 11442;NEWA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 11443;NEWA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 11444;NEWA SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 11445;NEWA SIGN VISARGA;Mc;0;L;;;;;N;;;;; 11446;NEWA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 11447;NEWA SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; 11448;NEWA SIGN FINAL ANUSVARA;Lo;0;L;;;;;N;;;;; 11449;NEWA OM;Lo;0;L;;;;;N;;;;; 1144A;NEWA SIDDHI;Lo;0;L;;;;;N;;;;; 1144B;NEWA DANDA;Po;0;L;;;;;N;;;;; 1144C;NEWA DOUBLE DANDA;Po;0;L;;;;;N;;;;; 1144D;NEWA COMMA;Po;0;L;;;;;N;;;;; 1144E;NEWA GAP FILLER;Po;0;L;;;;;N;;;;; 1144F;NEWA ABBREVIATION SIGN;Po;0;L;;;;;N;;;;; 11450;NEWA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 11451;NEWA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 11452;NEWA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 11453;NEWA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 11454;NEWA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 11455;NEWA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 11456;NEWA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 11457;NEWA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 11458;NEWA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 11459;NEWA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 1145A;NEWA DOUBLE COMMA;Po;0;L;;;;;N;;;;; 1145B;NEWA PLACEHOLDER MARK;Po;0;L;;;;;N;;;;; 1145D;NEWA INSERTION SIGN;Po;0;L;;;;;N;;;;; 1145E;NEWA SANDHI MARK;Mn;230;NSM;;;;;N;;;;; 1145F;NEWA LETTER VEDIC ANUSVARA;Lo;0;L;;;;;N;;;;; 11460;NEWA SIGN JIHVAMULIYA;Lo;0;L;;;;;N;;;;; 11461;NEWA SIGN UPADHMANIYA;Lo;0;L;;;;;N;;;;; 11480;TIRHUTA ANJI;Lo;0;L;;;;;N;;;;; 11481;TIRHUTA LETTER A;Lo;0;L;;;;;N;;;;; 11482;TIRHUTA LETTER AA;Lo;0;L;;;;;N;;;;; 11483;TIRHUTA LETTER I;Lo;0;L;;;;;N;;;;; 11484;TIRHUTA LETTER II;Lo;0;L;;;;;N;;;;; 11485;TIRHUTA LETTER U;Lo;0;L;;;;;N;;;;; 11486;TIRHUTA LETTER UU;Lo;0;L;;;;;N;;;;; 11487;TIRHUTA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 11488;TIRHUTA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 11489;TIRHUTA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 1148A;TIRHUTA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 1148B;TIRHUTA LETTER E;Lo;0;L;;;;;N;;;;; 1148C;TIRHUTA LETTER AI;Lo;0;L;;;;;N;;;;; 1148D;TIRHUTA LETTER O;Lo;0;L;;;;;N;;;;; 1148E;TIRHUTA LETTER AU;Lo;0;L;;;;;N;;;;; 1148F;TIRHUTA LETTER KA;Lo;0;L;;;;;N;;;;; 11490;TIRHUTA LETTER KHA;Lo;0;L;;;;;N;;;;; 11491;TIRHUTA LETTER GA;Lo;0;L;;;;;N;;;;; 11492;TIRHUTA LETTER GHA;Lo;0;L;;;;;N;;;;; 11493;TIRHUTA LETTER NGA;Lo;0;L;;;;;N;;;;; 11494;TIRHUTA LETTER CA;Lo;0;L;;;;;N;;;;; 11495;TIRHUTA LETTER CHA;Lo;0;L;;;;;N;;;;; 11496;TIRHUTA LETTER JA;Lo;0;L;;;;;N;;;;; 11497;TIRHUTA LETTER JHA;Lo;0;L;;;;;N;;;;; 11498;TIRHUTA LETTER NYA;Lo;0;L;;;;;N;;;;; 11499;TIRHUTA LETTER TTA;Lo;0;L;;;;;N;;;;; 1149A;TIRHUTA LETTER TTHA;Lo;0;L;;;;;N;;;;; 1149B;TIRHUTA LETTER DDA;Lo;0;L;;;;;N;;;;; 1149C;TIRHUTA LETTER DDHA;Lo;0;L;;;;;N;;;;; 1149D;TIRHUTA LETTER NNA;Lo;0;L;;;;;N;;;;; 1149E;TIRHUTA LETTER TA;Lo;0;L;;;;;N;;;;; 1149F;TIRHUTA LETTER THA;Lo;0;L;;;;;N;;;;; 114A0;TIRHUTA LETTER DA;Lo;0;L;;;;;N;;;;; 114A1;TIRHUTA LETTER DHA;Lo;0;L;;;;;N;;;;; 114A2;TIRHUTA LETTER NA;Lo;0;L;;;;;N;;;;; 114A3;TIRHUTA LETTER PA;Lo;0;L;;;;;N;;;;; 114A4;TIRHUTA LETTER PHA;Lo;0;L;;;;;N;;;;; 114A5;TIRHUTA LETTER BA;Lo;0;L;;;;;N;;;;; 114A6;TIRHUTA LETTER BHA;Lo;0;L;;;;;N;;;;; 114A7;TIRHUTA LETTER MA;Lo;0;L;;;;;N;;;;; 114A8;TIRHUTA LETTER YA;Lo;0;L;;;;;N;;;;; 114A9;TIRHUTA LETTER RA;Lo;0;L;;;;;N;;;;; 114AA;TIRHUTA LETTER LA;Lo;0;L;;;;;N;;;;; 114AB;TIRHUTA LETTER VA;Lo;0;L;;;;;N;;;;; 114AC;TIRHUTA LETTER SHA;Lo;0;L;;;;;N;;;;; 114AD;TIRHUTA LETTER SSA;Lo;0;L;;;;;N;;;;; 114AE;TIRHUTA LETTER SA;Lo;0;L;;;;;N;;;;; 114AF;TIRHUTA LETTER HA;Lo;0;L;;;;;N;;;;; 114B0;TIRHUTA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 114B1;TIRHUTA VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 114B2;TIRHUTA VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 114B3;TIRHUTA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 114B4;TIRHUTA VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 114B5;TIRHUTA VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; 114B6;TIRHUTA VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;; 114B7;TIRHUTA VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; 114B8;TIRHUTA VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; 114B9;TIRHUTA VOWEL SIGN E;Mc;0;L;;;;;N;;;;; 114BA;TIRHUTA VOWEL SIGN SHORT E;Mn;0;NSM;;;;;N;;;;; 114BB;TIRHUTA VOWEL SIGN AI;Mc;0;L;114B9 114BA;;;;N;;;;; 114BC;TIRHUTA VOWEL SIGN O;Mc;0;L;114B9 114B0;;;;N;;;;; 114BD;TIRHUTA VOWEL SIGN SHORT O;Mc;0;L;;;;;N;;;;; 114BE;TIRHUTA VOWEL SIGN AU;Mc;0;L;114B9 114BD;;;;N;;;;; 114BF;TIRHUTA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 114C0;TIRHUTA SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 114C1;TIRHUTA SIGN VISARGA;Mc;0;L;;;;;N;;;;; 114C2;TIRHUTA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 114C3;TIRHUTA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 114C4;TIRHUTA SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; 114C5;TIRHUTA GVANG;Lo;0;L;;;;;N;;;;; 114C6;TIRHUTA ABBREVIATION SIGN;Po;0;L;;;;;N;;;;; 114C7;TIRHUTA OM;Lo;0;L;;;;;N;;;;; 114D0;TIRHUTA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 114D1;TIRHUTA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 114D2;TIRHUTA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 114D3;TIRHUTA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 114D4;TIRHUTA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 114D5;TIRHUTA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 114D6;TIRHUTA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 114D7;TIRHUTA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 114D8;TIRHUTA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 114D9;TIRHUTA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 11580;SIDDHAM LETTER A;Lo;0;L;;;;;N;;;;; 11581;SIDDHAM LETTER AA;Lo;0;L;;;;;N;;;;; 11582;SIDDHAM LETTER I;Lo;0;L;;;;;N;;;;; 11583;SIDDHAM LETTER II;Lo;0;L;;;;;N;;;;; 11584;SIDDHAM LETTER U;Lo;0;L;;;;;N;;;;; 11585;SIDDHAM LETTER UU;Lo;0;L;;;;;N;;;;; 11586;SIDDHAM LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 11587;SIDDHAM LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 11588;SIDDHAM LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 11589;SIDDHAM LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 1158A;SIDDHAM LETTER E;Lo;0;L;;;;;N;;;;; 1158B;SIDDHAM LETTER AI;Lo;0;L;;;;;N;;;;; 1158C;SIDDHAM LETTER O;Lo;0;L;;;;;N;;;;; 1158D;SIDDHAM LETTER AU;Lo;0;L;;;;;N;;;;; 1158E;SIDDHAM LETTER KA;Lo;0;L;;;;;N;;;;; 1158F;SIDDHAM LETTER KHA;Lo;0;L;;;;;N;;;;; 11590;SIDDHAM LETTER GA;Lo;0;L;;;;;N;;;;; 11591;SIDDHAM LETTER GHA;Lo;0;L;;;;;N;;;;; 11592;SIDDHAM LETTER NGA;Lo;0;L;;;;;N;;;;; 11593;SIDDHAM LETTER CA;Lo;0;L;;;;;N;;;;; 11594;SIDDHAM LETTER CHA;Lo;0;L;;;;;N;;;;; 11595;SIDDHAM LETTER JA;Lo;0;L;;;;;N;;;;; 11596;SIDDHAM LETTER JHA;Lo;0;L;;;;;N;;;;; 11597;SIDDHAM LETTER NYA;Lo;0;L;;;;;N;;;;; 11598;SIDDHAM LETTER TTA;Lo;0;L;;;;;N;;;;; 11599;SIDDHAM LETTER TTHA;Lo;0;L;;;;;N;;;;; 1159A;SIDDHAM LETTER DDA;Lo;0;L;;;;;N;;;;; 1159B;SIDDHAM LETTER DDHA;Lo;0;L;;;;;N;;;;; 1159C;SIDDHAM LETTER NNA;Lo;0;L;;;;;N;;;;; 1159D;SIDDHAM LETTER TA;Lo;0;L;;;;;N;;;;; 1159E;SIDDHAM LETTER THA;Lo;0;L;;;;;N;;;;; 1159F;SIDDHAM LETTER DA;Lo;0;L;;;;;N;;;;; 115A0;SIDDHAM LETTER DHA;Lo;0;L;;;;;N;;;;; 115A1;SIDDHAM LETTER NA;Lo;0;L;;;;;N;;;;; 115A2;SIDDHAM LETTER PA;Lo;0;L;;;;;N;;;;; 115A3;SIDDHAM LETTER PHA;Lo;0;L;;;;;N;;;;; 115A4;SIDDHAM LETTER BA;Lo;0;L;;;;;N;;;;; 115A5;SIDDHAM LETTER BHA;Lo;0;L;;;;;N;;;;; 115A6;SIDDHAM LETTER MA;Lo;0;L;;;;;N;;;;; 115A7;SIDDHAM LETTER YA;Lo;0;L;;;;;N;;;;; 115A8;SIDDHAM LETTER RA;Lo;0;L;;;;;N;;;;; 115A9;SIDDHAM LETTER LA;Lo;0;L;;;;;N;;;;; 115AA;SIDDHAM LETTER VA;Lo;0;L;;;;;N;;;;; 115AB;SIDDHAM LETTER SHA;Lo;0;L;;;;;N;;;;; 115AC;SIDDHAM LETTER SSA;Lo;0;L;;;;;N;;;;; 115AD;SIDDHAM LETTER SA;Lo;0;L;;;;;N;;;;; 115AE;SIDDHAM LETTER HA;Lo;0;L;;;;;N;;;;; 115AF;SIDDHAM VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 115B0;SIDDHAM VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 115B1;SIDDHAM VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 115B2;SIDDHAM VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 115B3;SIDDHAM VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 115B4;SIDDHAM VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; 115B5;SIDDHAM VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;; 115B8;SIDDHAM VOWEL SIGN E;Mc;0;L;;;;;N;;;;; 115B9;SIDDHAM VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; 115BA;SIDDHAM VOWEL SIGN O;Mc;0;L;115B8 115AF;;;;N;;;;; 115BB;SIDDHAM VOWEL SIGN AU;Mc;0;L;115B9 115AF;;;;N;;;;; 115BC;SIDDHAM SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 115BD;SIDDHAM SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 115BE;SIDDHAM SIGN VISARGA;Mc;0;L;;;;;N;;;;; 115BF;SIDDHAM SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 115C0;SIDDHAM SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 115C1;SIDDHAM SIGN SIDDHAM;Po;0;L;;;;;N;;;;; 115C2;SIDDHAM DANDA;Po;0;L;;;;;N;;;;; 115C3;SIDDHAM DOUBLE DANDA;Po;0;L;;;;;N;;;;; 115C4;SIDDHAM SEPARATOR DOT;Po;0;L;;;;;N;;;;; 115C5;SIDDHAM SEPARATOR BAR;Po;0;L;;;;;N;;;;; 115C6;SIDDHAM REPETITION MARK-1;Po;0;L;;;;;N;;;;; 115C7;SIDDHAM REPETITION MARK-2;Po;0;L;;;;;N;;;;; 115C8;SIDDHAM REPETITION MARK-3;Po;0;L;;;;;N;;;;; 115C9;SIDDHAM END OF TEXT MARK;Po;0;L;;;;;N;;;;; 115CA;SIDDHAM SECTION MARK WITH TRIDENT AND U-SHAPED ORNAMENTS;Po;0;L;;;;;N;;;;; 115CB;SIDDHAM SECTION MARK WITH TRIDENT AND DOTTED CRESCENTS;Po;0;L;;;;;N;;;;; 115CC;SIDDHAM SECTION MARK WITH RAYS AND DOTTED CRESCENTS;Po;0;L;;;;;N;;;;; 115CD;SIDDHAM SECTION MARK WITH RAYS AND DOTTED DOUBLE CRESCENTS;Po;0;L;;;;;N;;;;; 115CE;SIDDHAM SECTION MARK WITH RAYS AND DOTTED TRIPLE CRESCENTS;Po;0;L;;;;;N;;;;; 115CF;SIDDHAM SECTION MARK DOUBLE RING;Po;0;L;;;;;N;;;;; 115D0;SIDDHAM SECTION MARK DOUBLE RING WITH RAYS;Po;0;L;;;;;N;;;;; 115D1;SIDDHAM SECTION MARK WITH DOUBLE CRESCENTS;Po;0;L;;;;;N;;;;; 115D2;SIDDHAM SECTION MARK WITH TRIPLE CRESCENTS;Po;0;L;;;;;N;;;;; 115D3;SIDDHAM SECTION MARK WITH QUADRUPLE CRESCENTS;Po;0;L;;;;;N;;;;; 115D4;SIDDHAM SECTION MARK WITH SEPTUPLE CRESCENTS;Po;0;L;;;;;N;;;;; 115D5;SIDDHAM SECTION MARK WITH CIRCLES AND RAYS;Po;0;L;;;;;N;;;;; 115D6;SIDDHAM SECTION MARK WITH CIRCLES AND TWO ENCLOSURES;Po;0;L;;;;;N;;;;; 115D7;SIDDHAM SECTION MARK WITH CIRCLES AND FOUR ENCLOSURES;Po;0;L;;;;;N;;;;; 115D8;SIDDHAM LETTER THREE-CIRCLE ALTERNATE I;Lo;0;L;;;;;N;;;;; 115D9;SIDDHAM LETTER TWO-CIRCLE ALTERNATE I;Lo;0;L;;;;;N;;;;; 115DA;SIDDHAM LETTER TWO-CIRCLE ALTERNATE II;Lo;0;L;;;;;N;;;;; 115DB;SIDDHAM LETTER ALTERNATE U;Lo;0;L;;;;;N;;;;; 115DC;SIDDHAM VOWEL SIGN ALTERNATE U;Mn;0;NSM;;;;;N;;;;; 115DD;SIDDHAM VOWEL SIGN ALTERNATE UU;Mn;0;NSM;;;;;N;;;;; 11600;MODI LETTER A;Lo;0;L;;;;;N;;;;; 11601;MODI LETTER AA;Lo;0;L;;;;;N;;;;; 11602;MODI LETTER I;Lo;0;L;;;;;N;;;;; 11603;MODI LETTER II;Lo;0;L;;;;;N;;;;; 11604;MODI LETTER U;Lo;0;L;;;;;N;;;;; 11605;MODI LETTER UU;Lo;0;L;;;;;N;;;;; 11606;MODI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 11607;MODI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 11608;MODI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 11609;MODI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 1160A;MODI LETTER E;Lo;0;L;;;;;N;;;;; 1160B;MODI LETTER AI;Lo;0;L;;;;;N;;;;; 1160C;MODI LETTER O;Lo;0;L;;;;;N;;;;; 1160D;MODI LETTER AU;Lo;0;L;;;;;N;;;;; 1160E;MODI LETTER KA;Lo;0;L;;;;;N;;;;; 1160F;MODI LETTER KHA;Lo;0;L;;;;;N;;;;; 11610;MODI LETTER GA;Lo;0;L;;;;;N;;;;; 11611;MODI LETTER GHA;Lo;0;L;;;;;N;;;;; 11612;MODI LETTER NGA;Lo;0;L;;;;;N;;;;; 11613;MODI LETTER CA;Lo;0;L;;;;;N;;;;; 11614;MODI LETTER CHA;Lo;0;L;;;;;N;;;;; 11615;MODI LETTER JA;Lo;0;L;;;;;N;;;;; 11616;MODI LETTER JHA;Lo;0;L;;;;;N;;;;; 11617;MODI LETTER NYA;Lo;0;L;;;;;N;;;;; 11618;MODI LETTER TTA;Lo;0;L;;;;;N;;;;; 11619;MODI LETTER TTHA;Lo;0;L;;;;;N;;;;; 1161A;MODI LETTER DDA;Lo;0;L;;;;;N;;;;; 1161B;MODI LETTER DDHA;Lo;0;L;;;;;N;;;;; 1161C;MODI LETTER NNA;Lo;0;L;;;;;N;;;;; 1161D;MODI LETTER TA;Lo;0;L;;;;;N;;;;; 1161E;MODI LETTER THA;Lo;0;L;;;;;N;;;;; 1161F;MODI LETTER DA;Lo;0;L;;;;;N;;;;; 11620;MODI LETTER DHA;Lo;0;L;;;;;N;;;;; 11621;MODI LETTER NA;Lo;0;L;;;;;N;;;;; 11622;MODI LETTER PA;Lo;0;L;;;;;N;;;;; 11623;MODI LETTER PHA;Lo;0;L;;;;;N;;;;; 11624;MODI LETTER BA;Lo;0;L;;;;;N;;;;; 11625;MODI LETTER BHA;Lo;0;L;;;;;N;;;;; 11626;MODI LETTER MA;Lo;0;L;;;;;N;;;;; 11627;MODI LETTER YA;Lo;0;L;;;;;N;;;;; 11628;MODI LETTER RA;Lo;0;L;;;;;N;;;;; 11629;MODI LETTER LA;Lo;0;L;;;;;N;;;;; 1162A;MODI LETTER VA;Lo;0;L;;;;;N;;;;; 1162B;MODI LETTER SHA;Lo;0;L;;;;;N;;;;; 1162C;MODI LETTER SSA;Lo;0;L;;;;;N;;;;; 1162D;MODI LETTER SA;Lo;0;L;;;;;N;;;;; 1162E;MODI LETTER HA;Lo;0;L;;;;;N;;;;; 1162F;MODI LETTER LLA;Lo;0;L;;;;;N;;;;; 11630;MODI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 11631;MODI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 11632;MODI VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 11633;MODI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 11634;MODI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 11635;MODI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; 11636;MODI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;; 11637;MODI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; 11638;MODI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; 11639;MODI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 1163A;MODI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; 1163B;MODI VOWEL SIGN O;Mc;0;L;;;;;N;;;;; 1163C;MODI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; 1163D;MODI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 1163E;MODI SIGN VISARGA;Mc;0;L;;;;;N;;;;; 1163F;MODI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 11640;MODI SIGN ARDHACANDRA;Mn;0;NSM;;;;;N;;;;; 11641;MODI DANDA;Po;0;L;;;;;N;;;;; 11642;MODI DOUBLE DANDA;Po;0;L;;;;;N;;;;; 11643;MODI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;; 11644;MODI SIGN HUVA;Lo;0;L;;;;;N;;;;; 11650;MODI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 11651;MODI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 11652;MODI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 11653;MODI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 11654;MODI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 11655;MODI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 11656;MODI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 11657;MODI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 11658;MODI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 11659;MODI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 11660;MONGOLIAN BIRGA WITH ORNAMENT;Po;0;ON;;;;;N;;;;; 11661;MONGOLIAN ROTATED BIRGA;Po;0;ON;;;;;N;;;;; 11662;MONGOLIAN DOUBLE BIRGA WITH ORNAMENT;Po;0;ON;;;;;N;;;;; 11663;MONGOLIAN TRIPLE BIRGA WITH ORNAMENT;Po;0;ON;;;;;N;;;;; 11664;MONGOLIAN BIRGA WITH DOUBLE ORNAMENT;Po;0;ON;;;;;N;;;;; 11665;MONGOLIAN ROTATED BIRGA WITH ORNAMENT;Po;0;ON;;;;;N;;;;; 11666;MONGOLIAN ROTATED BIRGA WITH DOUBLE ORNAMENT;Po;0;ON;;;;;N;;;;; 11667;MONGOLIAN INVERTED BIRGA;Po;0;ON;;;;;N;;;;; 11668;MONGOLIAN INVERTED BIRGA WITH DOUBLE ORNAMENT;Po;0;ON;;;;;N;;;;; 11669;MONGOLIAN SWIRL BIRGA;Po;0;ON;;;;;N;;;;; 1166A;MONGOLIAN SWIRL BIRGA WITH ORNAMENT;Po;0;ON;;;;;N;;;;; 1166B;MONGOLIAN SWIRL BIRGA WITH DOUBLE ORNAMENT;Po;0;ON;;;;;N;;;;; 1166C;MONGOLIAN TURNED SWIRL BIRGA WITH DOUBLE ORNAMENT;Po;0;ON;;;;;N;;;;; 11680;TAKRI LETTER A;Lo;0;L;;;;;N;;;;; 11681;TAKRI LETTER AA;Lo;0;L;;;;;N;;;;; 11682;TAKRI LETTER I;Lo;0;L;;;;;N;;;;; 11683;TAKRI LETTER II;Lo;0;L;;;;;N;;;;; 11684;TAKRI LETTER U;Lo;0;L;;;;;N;;;;; 11685;TAKRI LETTER UU;Lo;0;L;;;;;N;;;;; 11686;TAKRI LETTER E;Lo;0;L;;;;;N;;;;; 11687;TAKRI LETTER AI;Lo;0;L;;;;;N;;;;; 11688;TAKRI LETTER O;Lo;0;L;;;;;N;;;;; 11689;TAKRI LETTER AU;Lo;0;L;;;;;N;;;;; 1168A;TAKRI LETTER KA;Lo;0;L;;;;;N;;;;; 1168B;TAKRI LETTER KHA;Lo;0;L;;;;;N;;;;; 1168C;TAKRI LETTER GA;Lo;0;L;;;;;N;;;;; 1168D;TAKRI LETTER GHA;Lo;0;L;;;;;N;;;;; 1168E;TAKRI LETTER NGA;Lo;0;L;;;;;N;;;;; 1168F;TAKRI LETTER CA;Lo;0;L;;;;;N;;;;; 11690;TAKRI LETTER CHA;Lo;0;L;;;;;N;;;;; 11691;TAKRI LETTER JA;Lo;0;L;;;;;N;;;;; 11692;TAKRI LETTER JHA;Lo;0;L;;;;;N;;;;; 11693;TAKRI LETTER NYA;Lo;0;L;;;;;N;;;;; 11694;TAKRI LETTER TTA;Lo;0;L;;;;;N;;;;; 11695;TAKRI LETTER TTHA;Lo;0;L;;;;;N;;;;; 11696;TAKRI LETTER DDA;Lo;0;L;;;;;N;;;;; 11697;TAKRI LETTER DDHA;Lo;0;L;;;;;N;;;;; 11698;TAKRI LETTER NNA;Lo;0;L;;;;;N;;;;; 11699;TAKRI LETTER TA;Lo;0;L;;;;;N;;;;; 1169A;TAKRI LETTER THA;Lo;0;L;;;;;N;;;;; 1169B;TAKRI LETTER DA;Lo;0;L;;;;;N;;;;; 1169C;TAKRI LETTER DHA;Lo;0;L;;;;;N;;;;; 1169D;TAKRI LETTER NA;Lo;0;L;;;;;N;;;;; 1169E;TAKRI LETTER PA;Lo;0;L;;;;;N;;;;; 1169F;TAKRI LETTER PHA;Lo;0;L;;;;;N;;;;; 116A0;TAKRI LETTER BA;Lo;0;L;;;;;N;;;;; 116A1;TAKRI LETTER BHA;Lo;0;L;;;;;N;;;;; 116A2;TAKRI LETTER MA;Lo;0;L;;;;;N;;;;; 116A3;TAKRI LETTER YA;Lo;0;L;;;;;N;;;;; 116A4;TAKRI LETTER RA;Lo;0;L;;;;;N;;;;; 116A5;TAKRI LETTER LA;Lo;0;L;;;;;N;;;;; 116A6;TAKRI LETTER VA;Lo;0;L;;;;;N;;;;; 116A7;TAKRI LETTER SHA;Lo;0;L;;;;;N;;;;; 116A8;TAKRI LETTER SA;Lo;0;L;;;;;N;;;;; 116A9;TAKRI LETTER HA;Lo;0;L;;;;;N;;;;; 116AA;TAKRI LETTER RRA;Lo;0;L;;;;;N;;;;; 116AB;TAKRI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 116AC;TAKRI SIGN VISARGA;Mc;0;L;;;;;N;;;;; 116AD;TAKRI VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;; 116AE;TAKRI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 116AF;TAKRI VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 116B0;TAKRI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 116B1;TAKRI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 116B2;TAKRI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 116B3;TAKRI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; 116B4;TAKRI VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;; 116B5;TAKRI VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;; 116B6;TAKRI SIGN VIRAMA;Mc;9;L;;;;;N;;;;; 116B7;TAKRI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 116B8;TAKRI LETTER ARCHAIC KHA;Lo;0;L;;;;;N;;;;; 116B9;TAKRI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;; 116C0;TAKRI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 116C1;TAKRI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 116C2;TAKRI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 116C3;TAKRI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 116C4;TAKRI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 116C5;TAKRI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 116C6;TAKRI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 116C7;TAKRI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 116C8;TAKRI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 116C9;TAKRI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 11700;AHOM LETTER KA;Lo;0;L;;;;;N;;;;; 11701;AHOM LETTER KHA;Lo;0;L;;;;;N;;;;; 11702;AHOM LETTER NGA;Lo;0;L;;;;;N;;;;; 11703;AHOM LETTER NA;Lo;0;L;;;;;N;;;;; 11704;AHOM LETTER TA;Lo;0;L;;;;;N;;;;; 11705;AHOM LETTER ALTERNATE TA;Lo;0;L;;;;;N;;;;; 11706;AHOM LETTER PA;Lo;0;L;;;;;N;;;;; 11707;AHOM LETTER PHA;Lo;0;L;;;;;N;;;;; 11708;AHOM LETTER BA;Lo;0;L;;;;;N;;;;; 11709;AHOM LETTER MA;Lo;0;L;;;;;N;;;;; 1170A;AHOM LETTER JA;Lo;0;L;;;;;N;;;;; 1170B;AHOM LETTER CHA;Lo;0;L;;;;;N;;;;; 1170C;AHOM LETTER THA;Lo;0;L;;;;;N;;;;; 1170D;AHOM LETTER RA;Lo;0;L;;;;;N;;;;; 1170E;AHOM LETTER LA;Lo;0;L;;;;;N;;;;; 1170F;AHOM LETTER SA;Lo;0;L;;;;;N;;;;; 11710;AHOM LETTER NYA;Lo;0;L;;;;;N;;;;; 11711;AHOM LETTER HA;Lo;0;L;;;;;N;;;;; 11712;AHOM LETTER A;Lo;0;L;;;;;N;;;;; 11713;AHOM LETTER DA;Lo;0;L;;;;;N;;;;; 11714;AHOM LETTER DHA;Lo;0;L;;;;;N;;;;; 11715;AHOM LETTER GA;Lo;0;L;;;;;N;;;;; 11716;AHOM LETTER ALTERNATE GA;Lo;0;L;;;;;N;;;;; 11717;AHOM LETTER GHA;Lo;0;L;;;;;N;;;;; 11718;AHOM LETTER BHA;Lo;0;L;;;;;N;;;;; 11719;AHOM LETTER JHA;Lo;0;L;;;;;N;;;;; 1171A;AHOM LETTER ALTERNATE BA;Lo;0;L;;;;;N;;;;; 1171D;AHOM CONSONANT SIGN MEDIAL LA;Mn;0;NSM;;;;;N;;;;; 1171E;AHOM CONSONANT SIGN MEDIAL RA;Mn;0;NSM;;;;;N;;;;; 1171F;AHOM CONSONANT SIGN MEDIAL LIGATING RA;Mn;0;NSM;;;;;N;;;;; 11720;AHOM VOWEL SIGN A;Mc;0;L;;;;;N;;;;; 11721;AHOM VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 11722;AHOM VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 11723;AHOM VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; 11724;AHOM VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 11725;AHOM VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 11726;AHOM VOWEL SIGN E;Mc;0;L;;;;;N;;;;; 11727;AHOM VOWEL SIGN AW;Mn;0;NSM;;;;;N;;;;; 11728;AHOM VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;; 11729;AHOM VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; 1172A;AHOM VOWEL SIGN AM;Mn;0;NSM;;;;;N;;;;; 1172B;AHOM SIGN KILLER;Mn;9;NSM;;;;;N;;;;; 11730;AHOM DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 11731;AHOM DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 11732;AHOM DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 11733;AHOM DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 11734;AHOM DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 11735;AHOM DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 11736;AHOM DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 11737;AHOM DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 11738;AHOM DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 11739;AHOM DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 1173A;AHOM NUMBER TEN;No;0;L;;;;10;N;;;;; 1173B;AHOM NUMBER TWENTY;No;0;L;;;;20;N;;;;; 1173C;AHOM SIGN SMALL SECTION;Po;0;L;;;;;N;;;;; 1173D;AHOM SIGN SECTION;Po;0;L;;;;;N;;;;; 1173E;AHOM SIGN RULAI;Po;0;L;;;;;N;;;;; 1173F;AHOM SYMBOL VI;So;0;L;;;;;N;;;;; 11740;AHOM LETTER CA;Lo;0;L;;;;;N;;;;; 11741;AHOM LETTER TTA;Lo;0;L;;;;;N;;;;; 11742;AHOM LETTER TTHA;Lo;0;L;;;;;N;;;;; 11743;AHOM LETTER DDA;Lo;0;L;;;;;N;;;;; 11744;AHOM LETTER DDHA;Lo;0;L;;;;;N;;;;; 11745;AHOM LETTER NNA;Lo;0;L;;;;;N;;;;; 11746;AHOM LETTER LLA;Lo;0;L;;;;;N;;;;; 11800;DOGRA LETTER A;Lo;0;L;;;;;N;;;;; 11801;DOGRA LETTER AA;Lo;0;L;;;;;N;;;;; 11802;DOGRA LETTER I;Lo;0;L;;;;;N;;;;; 11803;DOGRA LETTER II;Lo;0;L;;;;;N;;;;; 11804;DOGRA LETTER U;Lo;0;L;;;;;N;;;;; 11805;DOGRA LETTER UU;Lo;0;L;;;;;N;;;;; 11806;DOGRA LETTER E;Lo;0;L;;;;;N;;;;; 11807;DOGRA LETTER AI;Lo;0;L;;;;;N;;;;; 11808;DOGRA LETTER O;Lo;0;L;;;;;N;;;;; 11809;DOGRA LETTER AU;Lo;0;L;;;;;N;;;;; 1180A;DOGRA LETTER KA;Lo;0;L;;;;;N;;;;; 1180B;DOGRA LETTER KHA;Lo;0;L;;;;;N;;;;; 1180C;DOGRA LETTER GA;Lo;0;L;;;;;N;;;;; 1180D;DOGRA LETTER GHA;Lo;0;L;;;;;N;;;;; 1180E;DOGRA LETTER NGA;Lo;0;L;;;;;N;;;;; 1180F;DOGRA LETTER CA;Lo;0;L;;;;;N;;;;; 11810;DOGRA LETTER CHA;Lo;0;L;;;;;N;;;;; 11811;DOGRA LETTER JA;Lo;0;L;;;;;N;;;;; 11812;DOGRA LETTER JHA;Lo;0;L;;;;;N;;;;; 11813;DOGRA LETTER NYA;Lo;0;L;;;;;N;;;;; 11814;DOGRA LETTER TTA;Lo;0;L;;;;;N;;;;; 11815;DOGRA LETTER TTHA;Lo;0;L;;;;;N;;;;; 11816;DOGRA LETTER DDA;Lo;0;L;;;;;N;;;;; 11817;DOGRA LETTER DDHA;Lo;0;L;;;;;N;;;;; 11818;DOGRA LETTER NNA;Lo;0;L;;;;;N;;;;; 11819;DOGRA LETTER TA;Lo;0;L;;;;;N;;;;; 1181A;DOGRA LETTER THA;Lo;0;L;;;;;N;;;;; 1181B;DOGRA LETTER DA;Lo;0;L;;;;;N;;;;; 1181C;DOGRA LETTER DHA;Lo;0;L;;;;;N;;;;; 1181D;DOGRA LETTER NA;Lo;0;L;;;;;N;;;;; 1181E;DOGRA LETTER PA;Lo;0;L;;;;;N;;;;; 1181F;DOGRA LETTER PHA;Lo;0;L;;;;;N;;;;; 11820;DOGRA LETTER BA;Lo;0;L;;;;;N;;;;; 11821;DOGRA LETTER BHA;Lo;0;L;;;;;N;;;;; 11822;DOGRA LETTER MA;Lo;0;L;;;;;N;;;;; 11823;DOGRA LETTER YA;Lo;0;L;;;;;N;;;;; 11824;DOGRA LETTER RA;Lo;0;L;;;;;N;;;;; 11825;DOGRA LETTER LA;Lo;0;L;;;;;N;;;;; 11826;DOGRA LETTER VA;Lo;0;L;;;;;N;;;;; 11827;DOGRA LETTER SHA;Lo;0;L;;;;;N;;;;; 11828;DOGRA LETTER SSA;Lo;0;L;;;;;N;;;;; 11829;DOGRA LETTER SA;Lo;0;L;;;;;N;;;;; 1182A;DOGRA LETTER HA;Lo;0;L;;;;;N;;;;; 1182B;DOGRA LETTER RRA;Lo;0;L;;;;;N;;;;; 1182C;DOGRA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 1182D;DOGRA VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 1182E;DOGRA VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 1182F;DOGRA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 11830;DOGRA VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 11831;DOGRA VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; 11832;DOGRA VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;; 11833;DOGRA VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 11834;DOGRA VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; 11835;DOGRA VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;; 11836;DOGRA VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;; 11837;DOGRA SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 11838;DOGRA SIGN VISARGA;Mc;0;L;;;;;N;;;;; 11839;DOGRA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 1183A;DOGRA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 1183B;DOGRA ABBREVIATION SIGN;Po;0;L;;;;;N;;;;; 118A0;WARANG CITI CAPITAL LETTER NGAA;Lu;0;L;;;;;N;;;;118C0; 118A1;WARANG CITI CAPITAL LETTER A;Lu;0;L;;;;;N;;;;118C1; 118A2;WARANG CITI CAPITAL LETTER WI;Lu;0;L;;;;;N;;;;118C2; 118A3;WARANG CITI CAPITAL LETTER YU;Lu;0;L;;;;;N;;;;118C3; 118A4;WARANG CITI CAPITAL LETTER YA;Lu;0;L;;;;;N;;;;118C4; 118A5;WARANG CITI CAPITAL LETTER YO;Lu;0;L;;;;;N;;;;118C5; 118A6;WARANG CITI CAPITAL LETTER II;Lu;0;L;;;;;N;;;;118C6; 118A7;WARANG CITI CAPITAL LETTER UU;Lu;0;L;;;;;N;;;;118C7; 118A8;WARANG CITI CAPITAL LETTER E;Lu;0;L;;;;;N;;;;118C8; 118A9;WARANG CITI CAPITAL LETTER O;Lu;0;L;;;;;N;;;;118C9; 118AA;WARANG CITI CAPITAL LETTER ANG;Lu;0;L;;;;;N;;;;118CA; 118AB;WARANG CITI CAPITAL LETTER GA;Lu;0;L;;;;;N;;;;118CB; 118AC;WARANG CITI CAPITAL LETTER KO;Lu;0;L;;;;;N;;;;118CC; 118AD;WARANG CITI CAPITAL LETTER ENY;Lu;0;L;;;;;N;;;;118CD; 118AE;WARANG CITI CAPITAL LETTER YUJ;Lu;0;L;;;;;N;;;;118CE; 118AF;WARANG CITI CAPITAL LETTER UC;Lu;0;L;;;;;N;;;;118CF; 118B0;WARANG CITI CAPITAL LETTER ENN;Lu;0;L;;;;;N;;;;118D0; 118B1;WARANG CITI CAPITAL LETTER ODD;Lu;0;L;;;;;N;;;;118D1; 118B2;WARANG CITI CAPITAL LETTER TTE;Lu;0;L;;;;;N;;;;118D2; 118B3;WARANG CITI CAPITAL LETTER NUNG;Lu;0;L;;;;;N;;;;118D3; 118B4;WARANG CITI CAPITAL LETTER DA;Lu;0;L;;;;;N;;;;118D4; 118B5;WARANG CITI CAPITAL LETTER AT;Lu;0;L;;;;;N;;;;118D5; 118B6;WARANG CITI CAPITAL LETTER AM;Lu;0;L;;;;;N;;;;118D6; 118B7;WARANG CITI CAPITAL LETTER BU;Lu;0;L;;;;;N;;;;118D7; 118B8;WARANG CITI CAPITAL LETTER PU;Lu;0;L;;;;;N;;;;118D8; 118B9;WARANG CITI CAPITAL LETTER HIYO;Lu;0;L;;;;;N;;;;118D9; 118BA;WARANG CITI CAPITAL LETTER HOLO;Lu;0;L;;;;;N;;;;118DA; 118BB;WARANG CITI CAPITAL LETTER HORR;Lu;0;L;;;;;N;;;;118DB; 118BC;WARANG CITI CAPITAL LETTER HAR;Lu;0;L;;;;;N;;;;118DC; 118BD;WARANG CITI CAPITAL LETTER SSUU;Lu;0;L;;;;;N;;;;118DD; 118BE;WARANG CITI CAPITAL LETTER SII;Lu;0;L;;;;;N;;;;118DE; 118BF;WARANG CITI CAPITAL LETTER VIYO;Lu;0;L;;;;;N;;;;118DF; 118C0;WARANG CITI SMALL LETTER NGAA;Ll;0;L;;;;;N;;;118A0;;118A0 118C1;WARANG CITI SMALL LETTER A;Ll;0;L;;;;;N;;;118A1;;118A1 118C2;WARANG CITI SMALL LETTER WI;Ll;0;L;;;;;N;;;118A2;;118A2 118C3;WARANG CITI SMALL LETTER YU;Ll;0;L;;;;;N;;;118A3;;118A3 118C4;WARANG CITI SMALL LETTER YA;Ll;0;L;;;;;N;;;118A4;;118A4 118C5;WARANG CITI SMALL LETTER YO;Ll;0;L;;;;;N;;;118A5;;118A5 118C6;WARANG CITI SMALL LETTER II;Ll;0;L;;;;;N;;;118A6;;118A6 118C7;WARANG CITI SMALL LETTER UU;Ll;0;L;;;;;N;;;118A7;;118A7 118C8;WARANG CITI SMALL LETTER E;Ll;0;L;;;;;N;;;118A8;;118A8 118C9;WARANG CITI SMALL LETTER O;Ll;0;L;;;;;N;;;118A9;;118A9 118CA;WARANG CITI SMALL LETTER ANG;Ll;0;L;;;;;N;;;118AA;;118AA 118CB;WARANG CITI SMALL LETTER GA;Ll;0;L;;;;;N;;;118AB;;118AB 118CC;WARANG CITI SMALL LETTER KO;Ll;0;L;;;;;N;;;118AC;;118AC 118CD;WARANG CITI SMALL LETTER ENY;Ll;0;L;;;;;N;;;118AD;;118AD 118CE;WARANG CITI SMALL LETTER YUJ;Ll;0;L;;;;;N;;;118AE;;118AE 118CF;WARANG CITI SMALL LETTER UC;Ll;0;L;;;;;N;;;118AF;;118AF 118D0;WARANG CITI SMALL LETTER ENN;Ll;0;L;;;;;N;;;118B0;;118B0 118D1;WARANG CITI SMALL LETTER ODD;Ll;0;L;;;;;N;;;118B1;;118B1 118D2;WARANG CITI SMALL LETTER TTE;Ll;0;L;;;;;N;;;118B2;;118B2 118D3;WARANG CITI SMALL LETTER NUNG;Ll;0;L;;;;;N;;;118B3;;118B3 118D4;WARANG CITI SMALL LETTER DA;Ll;0;L;;;;;N;;;118B4;;118B4 118D5;WARANG CITI SMALL LETTER AT;Ll;0;L;;;;;N;;;118B5;;118B5 118D6;WARANG CITI SMALL LETTER AM;Ll;0;L;;;;;N;;;118B6;;118B6 118D7;WARANG CITI SMALL LETTER BU;Ll;0;L;;;;;N;;;118B7;;118B7 118D8;WARANG CITI SMALL LETTER PU;Ll;0;L;;;;;N;;;118B8;;118B8 118D9;WARANG CITI SMALL LETTER HIYO;Ll;0;L;;;;;N;;;118B9;;118B9 118DA;WARANG CITI SMALL LETTER HOLO;Ll;0;L;;;;;N;;;118BA;;118BA 118DB;WARANG CITI SMALL LETTER HORR;Ll;0;L;;;;;N;;;118BB;;118BB 118DC;WARANG CITI SMALL LETTER HAR;Ll;0;L;;;;;N;;;118BC;;118BC 118DD;WARANG CITI SMALL LETTER SSUU;Ll;0;L;;;;;N;;;118BD;;118BD 118DE;WARANG CITI SMALL LETTER SII;Ll;0;L;;;;;N;;;118BE;;118BE 118DF;WARANG CITI SMALL LETTER VIYO;Ll;0;L;;;;;N;;;118BF;;118BF 118E0;WARANG CITI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 118E1;WARANG CITI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 118E2;WARANG CITI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 118E3;WARANG CITI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 118E4;WARANG CITI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 118E5;WARANG CITI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 118E6;WARANG CITI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 118E7;WARANG CITI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 118E8;WARANG CITI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 118E9;WARANG CITI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 118EA;WARANG CITI NUMBER TEN;No;0;L;;;;10;N;;;;; 118EB;WARANG CITI NUMBER TWENTY;No;0;L;;;;20;N;;;;; 118EC;WARANG CITI NUMBER THIRTY;No;0;L;;;;30;N;;;;; 118ED;WARANG CITI NUMBER FORTY;No;0;L;;;;40;N;;;;; 118EE;WARANG CITI NUMBER FIFTY;No;0;L;;;;50;N;;;;; 118EF;WARANG CITI NUMBER SIXTY;No;0;L;;;;60;N;;;;; 118F0;WARANG CITI NUMBER SEVENTY;No;0;L;;;;70;N;;;;; 118F1;WARANG CITI NUMBER EIGHTY;No;0;L;;;;80;N;;;;; 118F2;WARANG CITI NUMBER NINETY;No;0;L;;;;90;N;;;;; 118FF;WARANG CITI OM;Lo;0;L;;;;;N;;;;; 11900;DIVES AKURU LETTER A;Lo;0;L;;;;;N;;;;; 11901;DIVES AKURU LETTER AA;Lo;0;L;;;;;N;;;;; 11902;DIVES AKURU LETTER I;Lo;0;L;;;;;N;;;;; 11903;DIVES AKURU LETTER II;Lo;0;L;;;;;N;;;;; 11904;DIVES AKURU LETTER U;Lo;0;L;;;;;N;;;;; 11905;DIVES AKURU LETTER UU;Lo;0;L;;;;;N;;;;; 11906;DIVES AKURU LETTER E;Lo;0;L;;;;;N;;;;; 11909;DIVES AKURU LETTER O;Lo;0;L;;;;;N;;;;; 1190C;DIVES AKURU LETTER KA;Lo;0;L;;;;;N;;;;; 1190D;DIVES AKURU LETTER KHA;Lo;0;L;;;;;N;;;;; 1190E;DIVES AKURU LETTER GA;Lo;0;L;;;;;N;;;;; 1190F;DIVES AKURU LETTER GHA;Lo;0;L;;;;;N;;;;; 11910;DIVES AKURU LETTER NGA;Lo;0;L;;;;;N;;;;; 11911;DIVES AKURU LETTER CA;Lo;0;L;;;;;N;;;;; 11912;DIVES AKURU LETTER CHA;Lo;0;L;;;;;N;;;;; 11913;DIVES AKURU LETTER JA;Lo;0;L;;;;;N;;;;; 11915;DIVES AKURU LETTER NYA;Lo;0;L;;;;;N;;;;; 11916;DIVES AKURU LETTER TTA;Lo;0;L;;;;;N;;;;; 11918;DIVES AKURU LETTER DDA;Lo;0;L;;;;;N;;;;; 11919;DIVES AKURU LETTER DDHA;Lo;0;L;;;;;N;;;;; 1191A;DIVES AKURU LETTER NNA;Lo;0;L;;;;;N;;;;; 1191B;DIVES AKURU LETTER TA;Lo;0;L;;;;;N;;;;; 1191C;DIVES AKURU LETTER THA;Lo;0;L;;;;;N;;;;; 1191D;DIVES AKURU LETTER DA;Lo;0;L;;;;;N;;;;; 1191E;DIVES AKURU LETTER DHA;Lo;0;L;;;;;N;;;;; 1191F;DIVES AKURU LETTER NA;Lo;0;L;;;;;N;;;;; 11920;DIVES AKURU LETTER PA;Lo;0;L;;;;;N;;;;; 11921;DIVES AKURU LETTER PHA;Lo;0;L;;;;;N;;;;; 11922;DIVES AKURU LETTER BA;Lo;0;L;;;;;N;;;;; 11923;DIVES AKURU LETTER BHA;Lo;0;L;;;;;N;;;;; 11924;DIVES AKURU LETTER MA;Lo;0;L;;;;;N;;;;; 11925;DIVES AKURU LETTER YA;Lo;0;L;;;;;N;;;;; 11926;DIVES AKURU LETTER YYA;Lo;0;L;;;;;N;;;;; 11927;DIVES AKURU LETTER RA;Lo;0;L;;;;;N;;;;; 11928;DIVES AKURU LETTER LA;Lo;0;L;;;;;N;;;;; 11929;DIVES AKURU LETTER VA;Lo;0;L;;;;;N;;;;; 1192A;DIVES AKURU LETTER SHA;Lo;0;L;;;;;N;;;;; 1192B;DIVES AKURU LETTER SSA;Lo;0;L;;;;;N;;;;; 1192C;DIVES AKURU LETTER SA;Lo;0;L;;;;;N;;;;; 1192D;DIVES AKURU LETTER HA;Lo;0;L;;;;;N;;;;; 1192E;DIVES AKURU LETTER LLA;Lo;0;L;;;;;N;;;;; 1192F;DIVES AKURU LETTER ZA;Lo;0;L;;;;;N;;;;; 11930;DIVES AKURU VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 11931;DIVES AKURU VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 11932;DIVES AKURU VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 11933;DIVES AKURU VOWEL SIGN U;Mc;0;L;;;;;N;;;;; 11934;DIVES AKURU VOWEL SIGN UU;Mc;0;L;;;;;N;;;;; 11935;DIVES AKURU VOWEL SIGN E;Mc;0;L;;;;;N;;;;; 11937;DIVES AKURU VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; 11938;DIVES AKURU VOWEL SIGN O;Mc;0;L;11935 11930;;;;N;;;;; 1193B;DIVES AKURU SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 1193C;DIVES AKURU SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 1193D;DIVES AKURU SIGN HALANTA;Mc;9;L;;;;;N;;;;; 1193E;DIVES AKURU VIRAMA;Mn;9;NSM;;;;;N;;;;; 1193F;DIVES AKURU PREFIXED NASAL SIGN;Lo;0;L;;;;;N;;;;; 11940;DIVES AKURU MEDIAL YA;Mc;0;L;;;;;N;;;;; 11941;DIVES AKURU INITIAL RA;Lo;0;L;;;;;N;;;;; 11942;DIVES AKURU MEDIAL RA;Mc;0;L;;;;;N;;;;; 11943;DIVES AKURU SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 11944;DIVES AKURU DOUBLE DANDA;Po;0;L;;;;;N;;;;; 11945;DIVES AKURU GAP FILLER;Po;0;L;;;;;N;;;;; 11946;DIVES AKURU END OF TEXT MARK;Po;0;L;;;;;N;;;;; 11950;DIVES AKURU DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 11951;DIVES AKURU DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 11952;DIVES AKURU DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 11953;DIVES AKURU DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 11954;DIVES AKURU DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 11955;DIVES AKURU DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 11956;DIVES AKURU DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 11957;DIVES AKURU DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 11958;DIVES AKURU DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 11959;DIVES AKURU DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 119A0;NANDINAGARI LETTER A;Lo;0;L;;;;;N;;;;; 119A1;NANDINAGARI LETTER AA;Lo;0;L;;;;;N;;;;; 119A2;NANDINAGARI LETTER I;Lo;0;L;;;;;N;;;;; 119A3;NANDINAGARI LETTER II;Lo;0;L;;;;;N;;;;; 119A4;NANDINAGARI LETTER U;Lo;0;L;;;;;N;;;;; 119A5;NANDINAGARI LETTER UU;Lo;0;L;;;;;N;;;;; 119A6;NANDINAGARI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 119A7;NANDINAGARI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 119AA;NANDINAGARI LETTER E;Lo;0;L;;;;;N;;;;; 119AB;NANDINAGARI LETTER AI;Lo;0;L;;;;;N;;;;; 119AC;NANDINAGARI LETTER O;Lo;0;L;;;;;N;;;;; 119AD;NANDINAGARI LETTER AU;Lo;0;L;;;;;N;;;;; 119AE;NANDINAGARI LETTER KA;Lo;0;L;;;;;N;;;;; 119AF;NANDINAGARI LETTER KHA;Lo;0;L;;;;;N;;;;; 119B0;NANDINAGARI LETTER GA;Lo;0;L;;;;;N;;;;; 119B1;NANDINAGARI LETTER GHA;Lo;0;L;;;;;N;;;;; 119B2;NANDINAGARI LETTER NGA;Lo;0;L;;;;;N;;;;; 119B3;NANDINAGARI LETTER CA;Lo;0;L;;;;;N;;;;; 119B4;NANDINAGARI LETTER CHA;Lo;0;L;;;;;N;;;;; 119B5;NANDINAGARI LETTER JA;Lo;0;L;;;;;N;;;;; 119B6;NANDINAGARI LETTER JHA;Lo;0;L;;;;;N;;;;; 119B7;NANDINAGARI LETTER NYA;Lo;0;L;;;;;N;;;;; 119B8;NANDINAGARI LETTER TTA;Lo;0;L;;;;;N;;;;; 119B9;NANDINAGARI LETTER TTHA;Lo;0;L;;;;;N;;;;; 119BA;NANDINAGARI LETTER DDA;Lo;0;L;;;;;N;;;;; 119BB;NANDINAGARI LETTER DDHA;Lo;0;L;;;;;N;;;;; 119BC;NANDINAGARI LETTER NNA;Lo;0;L;;;;;N;;;;; 119BD;NANDINAGARI LETTER TA;Lo;0;L;;;;;N;;;;; 119BE;NANDINAGARI LETTER THA;Lo;0;L;;;;;N;;;;; 119BF;NANDINAGARI LETTER DA;Lo;0;L;;;;;N;;;;; 119C0;NANDINAGARI LETTER DHA;Lo;0;L;;;;;N;;;;; 119C1;NANDINAGARI LETTER NA;Lo;0;L;;;;;N;;;;; 119C2;NANDINAGARI LETTER PA;Lo;0;L;;;;;N;;;;; 119C3;NANDINAGARI LETTER PHA;Lo;0;L;;;;;N;;;;; 119C4;NANDINAGARI LETTER BA;Lo;0;L;;;;;N;;;;; 119C5;NANDINAGARI LETTER BHA;Lo;0;L;;;;;N;;;;; 119C6;NANDINAGARI LETTER MA;Lo;0;L;;;;;N;;;;; 119C7;NANDINAGARI LETTER YA;Lo;0;L;;;;;N;;;;; 119C8;NANDINAGARI LETTER RA;Lo;0;L;;;;;N;;;;; 119C9;NANDINAGARI LETTER LA;Lo;0;L;;;;;N;;;;; 119CA;NANDINAGARI LETTER VA;Lo;0;L;;;;;N;;;;; 119CB;NANDINAGARI LETTER SHA;Lo;0;L;;;;;N;;;;; 119CC;NANDINAGARI LETTER SSA;Lo;0;L;;;;;N;;;;; 119CD;NANDINAGARI LETTER SA;Lo;0;L;;;;;N;;;;; 119CE;NANDINAGARI LETTER HA;Lo;0;L;;;;;N;;;;; 119CF;NANDINAGARI LETTER LLA;Lo;0;L;;;;;N;;;;; 119D0;NANDINAGARI LETTER RRA;Lo;0;L;;;;;N;;;;; 119D1;NANDINAGARI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 119D2;NANDINAGARI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 119D3;NANDINAGARI VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 119D4;NANDINAGARI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 119D5;NANDINAGARI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 119D6;NANDINAGARI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; 119D7;NANDINAGARI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;; 119DA;NANDINAGARI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 119DB;NANDINAGARI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; 119DC;NANDINAGARI VOWEL SIGN O;Mc;0;L;;;;;N;;;;; 119DD;NANDINAGARI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; 119DE;NANDINAGARI SIGN ANUSVARA;Mc;0;L;;;;;N;;;;; 119DF;NANDINAGARI SIGN VISARGA;Mc;0;L;;;;;N;;;;; 119E0;NANDINAGARI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 119E1;NANDINAGARI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; 119E2;NANDINAGARI SIGN SIDDHAM;Po;0;L;;;;;N;;;;; 119E3;NANDINAGARI HEADSTROKE;Lo;0;L;;;;;N;;;;; 119E4;NANDINAGARI VOWEL SIGN PRISHTHAMATRA E;Mc;0;L;;;;;N;;;;; 11A00;ZANABAZAR SQUARE LETTER A;Lo;0;L;;;;;N;;;;; 11A01;ZANABAZAR SQUARE VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 11A02;ZANABAZAR SQUARE VOWEL SIGN UE;Mn;0;NSM;;;;;N;;;;; 11A03;ZANABAZAR SQUARE VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 11A04;ZANABAZAR SQUARE VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 11A05;ZANABAZAR SQUARE VOWEL SIGN OE;Mn;0;NSM;;;;;N;;;;; 11A06;ZANABAZAR SQUARE VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;; 11A07;ZANABAZAR SQUARE VOWEL SIGN AI;Mn;0;L;;;;;N;;;;; 11A08;ZANABAZAR SQUARE VOWEL SIGN AU;Mn;0;L;;;;;N;;;;; 11A09;ZANABAZAR SQUARE VOWEL SIGN REVERSED I;Mn;0;NSM;;;;;N;;;;; 11A0A;ZANABAZAR SQUARE VOWEL LENGTH MARK;Mn;0;NSM;;;;;N;;;;; 11A0B;ZANABAZAR SQUARE LETTER KA;Lo;0;L;;;;;N;;;;; 11A0C;ZANABAZAR SQUARE LETTER KHA;Lo;0;L;;;;;N;;;;; 11A0D;ZANABAZAR SQUARE LETTER GA;Lo;0;L;;;;;N;;;;; 11A0E;ZANABAZAR SQUARE LETTER GHA;Lo;0;L;;;;;N;;;;; 11A0F;ZANABAZAR SQUARE LETTER NGA;Lo;0;L;;;;;N;;;;; 11A10;ZANABAZAR SQUARE LETTER CA;Lo;0;L;;;;;N;;;;; 11A11;ZANABAZAR SQUARE LETTER CHA;Lo;0;L;;;;;N;;;;; 11A12;ZANABAZAR SQUARE LETTER JA;Lo;0;L;;;;;N;;;;; 11A13;ZANABAZAR SQUARE LETTER NYA;Lo;0;L;;;;;N;;;;; 11A14;ZANABAZAR SQUARE LETTER TTA;Lo;0;L;;;;;N;;;;; 11A15;ZANABAZAR SQUARE LETTER TTHA;Lo;0;L;;;;;N;;;;; 11A16;ZANABAZAR SQUARE LETTER DDA;Lo;0;L;;;;;N;;;;; 11A17;ZANABAZAR SQUARE LETTER DDHA;Lo;0;L;;;;;N;;;;; 11A18;ZANABAZAR SQUARE LETTER NNA;Lo;0;L;;;;;N;;;;; 11A19;ZANABAZAR SQUARE LETTER TA;Lo;0;L;;;;;N;;;;; 11A1A;ZANABAZAR SQUARE LETTER THA;Lo;0;L;;;;;N;;;;; 11A1B;ZANABAZAR SQUARE LETTER DA;Lo;0;L;;;;;N;;;;; 11A1C;ZANABAZAR SQUARE LETTER DHA;Lo;0;L;;;;;N;;;;; 11A1D;ZANABAZAR SQUARE LETTER NA;Lo;0;L;;;;;N;;;;; 11A1E;ZANABAZAR SQUARE LETTER PA;Lo;0;L;;;;;N;;;;; 11A1F;ZANABAZAR SQUARE LETTER PHA;Lo;0;L;;;;;N;;;;; 11A20;ZANABAZAR SQUARE LETTER BA;Lo;0;L;;;;;N;;;;; 11A21;ZANABAZAR SQUARE LETTER BHA;Lo;0;L;;;;;N;;;;; 11A22;ZANABAZAR SQUARE LETTER MA;Lo;0;L;;;;;N;;;;; 11A23;ZANABAZAR SQUARE LETTER TSA;Lo;0;L;;;;;N;;;;; 11A24;ZANABAZAR SQUARE LETTER TSHA;Lo;0;L;;;;;N;;;;; 11A25;ZANABAZAR SQUARE LETTER DZA;Lo;0;L;;;;;N;;;;; 11A26;ZANABAZAR SQUARE LETTER DZHA;Lo;0;L;;;;;N;;;;; 11A27;ZANABAZAR SQUARE LETTER ZHA;Lo;0;L;;;;;N;;;;; 11A28;ZANABAZAR SQUARE LETTER ZA;Lo;0;L;;;;;N;;;;; 11A29;ZANABAZAR SQUARE LETTER -A;Lo;0;L;;;;;N;;;;; 11A2A;ZANABAZAR SQUARE LETTER YA;Lo;0;L;;;;;N;;;;; 11A2B;ZANABAZAR SQUARE LETTER RA;Lo;0;L;;;;;N;;;;; 11A2C;ZANABAZAR SQUARE LETTER LA;Lo;0;L;;;;;N;;;;; 11A2D;ZANABAZAR SQUARE LETTER VA;Lo;0;L;;;;;N;;;;; 11A2E;ZANABAZAR SQUARE LETTER SHA;Lo;0;L;;;;;N;;;;; 11A2F;ZANABAZAR SQUARE LETTER SSA;Lo;0;L;;;;;N;;;;; 11A30;ZANABAZAR SQUARE LETTER SA;Lo;0;L;;;;;N;;;;; 11A31;ZANABAZAR SQUARE LETTER HA;Lo;0;L;;;;;N;;;;; 11A32;ZANABAZAR SQUARE LETTER KSSA;Lo;0;L;;;;;N;;;;; 11A33;ZANABAZAR SQUARE FINAL CONSONANT MARK;Mn;0;NSM;;;;;N;;;;; 11A34;ZANABAZAR SQUARE SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 11A35;ZANABAZAR SQUARE SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 11A36;ZANABAZAR SQUARE SIGN CANDRABINDU WITH ORNAMENT;Mn;0;NSM;;;;;N;;;;; 11A37;ZANABAZAR SQUARE SIGN CANDRA WITH ORNAMENT;Mn;0;NSM;;;;;N;;;;; 11A38;ZANABAZAR SQUARE SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 11A39;ZANABAZAR SQUARE SIGN VISARGA;Mc;0;L;;;;;N;;;;; 11A3A;ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA;Lo;0;L;;;;;N;;;;; 11A3B;ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA;Mn;0;NSM;;;;;N;;;;; 11A3C;ZANABAZAR SQUARE CLUSTER-FINAL LETTER RA;Mn;0;NSM;;;;;N;;;;; 11A3D;ZANABAZAR SQUARE CLUSTER-FINAL LETTER LA;Mn;0;NSM;;;;;N;;;;; 11A3E;ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA;Mn;0;NSM;;;;;N;;;;; 11A3F;ZANABAZAR SQUARE INITIAL HEAD MARK;Po;0;L;;;;;N;;;;; 11A40;ZANABAZAR SQUARE CLOSING HEAD MARK;Po;0;L;;;;;N;;;;; 11A41;ZANABAZAR SQUARE MARK TSHEG;Po;0;L;;;;;N;;;;; 11A42;ZANABAZAR SQUARE MARK SHAD;Po;0;L;;;;;N;;;;; 11A43;ZANABAZAR SQUARE MARK DOUBLE SHAD;Po;0;L;;;;;N;;;;; 11A44;ZANABAZAR SQUARE MARK LONG TSHEG;Po;0;L;;;;;N;;;;; 11A45;ZANABAZAR SQUARE INITIAL DOUBLE-LINED HEAD MARK;Po;0;L;;;;;N;;;;; 11A46;ZANABAZAR SQUARE CLOSING DOUBLE-LINED HEAD MARK;Po;0;L;;;;;N;;;;; 11A47;ZANABAZAR SQUARE SUBJOINER;Mn;9;NSM;;;;;N;;;;; 11A50;SOYOMBO LETTER A;Lo;0;L;;;;;N;;;;; 11A51;SOYOMBO VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 11A52;SOYOMBO VOWEL SIGN UE;Mn;0;NSM;;;;;N;;;;; 11A53;SOYOMBO VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 11A54;SOYOMBO VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 11A55;SOYOMBO VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;; 11A56;SOYOMBO VOWEL SIGN OE;Mn;0;NSM;;;;;N;;;;; 11A57;SOYOMBO VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; 11A58;SOYOMBO VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; 11A59;SOYOMBO VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; 11A5A;SOYOMBO VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; 11A5B;SOYOMBO VOWEL LENGTH MARK;Mn;0;NSM;;;;;N;;;;; 11A5C;SOYOMBO LETTER KA;Lo;0;L;;;;;N;;;;; 11A5D;SOYOMBO LETTER KHA;Lo;0;L;;;;;N;;;;; 11A5E;SOYOMBO LETTER GA;Lo;0;L;;;;;N;;;;; 11A5F;SOYOMBO LETTER GHA;Lo;0;L;;;;;N;;;;; 11A60;SOYOMBO LETTER NGA;Lo;0;L;;;;;N;;;;; 11A61;SOYOMBO LETTER CA;Lo;0;L;;;;;N;;;;; 11A62;SOYOMBO LETTER CHA;Lo;0;L;;;;;N;;;;; 11A63;SOYOMBO LETTER JA;Lo;0;L;;;;;N;;;;; 11A64;SOYOMBO LETTER JHA;Lo;0;L;;;;;N;;;;; 11A65;SOYOMBO LETTER NYA;Lo;0;L;;;;;N;;;;; 11A66;SOYOMBO LETTER TTA;Lo;0;L;;;;;N;;;;; 11A67;SOYOMBO LETTER TTHA;Lo;0;L;;;;;N;;;;; 11A68;SOYOMBO LETTER DDA;Lo;0;L;;;;;N;;;;; 11A69;SOYOMBO LETTER DDHA;Lo;0;L;;;;;N;;;;; 11A6A;SOYOMBO LETTER NNA;Lo;0;L;;;;;N;;;;; 11A6B;SOYOMBO LETTER TA;Lo;0;L;;;;;N;;;;; 11A6C;SOYOMBO LETTER THA;Lo;0;L;;;;;N;;;;; 11A6D;SOYOMBO LETTER DA;Lo;0;L;;;;;N;;;;; 11A6E;SOYOMBO LETTER DHA;Lo;0;L;;;;;N;;;;; 11A6F;SOYOMBO LETTER NA;Lo;0;L;;;;;N;;;;; 11A70;SOYOMBO LETTER PA;Lo;0;L;;;;;N;;;;; 11A71;SOYOMBO LETTER PHA;Lo;0;L;;;;;N;;;;; 11A72;SOYOMBO LETTER BA;Lo;0;L;;;;;N;;;;; 11A73;SOYOMBO LETTER BHA;Lo;0;L;;;;;N;;;;; 11A74;SOYOMBO LETTER MA;Lo;0;L;;;;;N;;;;; 11A75;SOYOMBO LETTER TSA;Lo;0;L;;;;;N;;;;; 11A76;SOYOMBO LETTER TSHA;Lo;0;L;;;;;N;;;;; 11A77;SOYOMBO LETTER DZA;Lo;0;L;;;;;N;;;;; 11A78;SOYOMBO LETTER ZHA;Lo;0;L;;;;;N;;;;; 11A79;SOYOMBO LETTER ZA;Lo;0;L;;;;;N;;;;; 11A7A;SOYOMBO LETTER -A;Lo;0;L;;;;;N;;;;; 11A7B;SOYOMBO LETTER YA;Lo;0;L;;;;;N;;;;; 11A7C;SOYOMBO LETTER RA;Lo;0;L;;;;;N;;;;; 11A7D;SOYOMBO LETTER LA;Lo;0;L;;;;;N;;;;; 11A7E;SOYOMBO LETTER VA;Lo;0;L;;;;;N;;;;; 11A7F;SOYOMBO LETTER SHA;Lo;0;L;;;;;N;;;;; 11A80;SOYOMBO LETTER SSA;Lo;0;L;;;;;N;;;;; 11A81;SOYOMBO LETTER SA;Lo;0;L;;;;;N;;;;; 11A82;SOYOMBO LETTER HA;Lo;0;L;;;;;N;;;;; 11A83;SOYOMBO LETTER KSSA;Lo;0;L;;;;;N;;;;; 11A84;SOYOMBO SIGN JIHVAMULIYA;Lo;0;L;;;;;N;;;;; 11A85;SOYOMBO SIGN UPADHMANIYA;Lo;0;L;;;;;N;;;;; 11A86;SOYOMBO CLUSTER-INITIAL LETTER RA;Lo;0;L;;;;;N;;;;; 11A87;SOYOMBO CLUSTER-INITIAL LETTER LA;Lo;0;L;;;;;N;;;;; 11A88;SOYOMBO CLUSTER-INITIAL LETTER SHA;Lo;0;L;;;;;N;;;;; 11A89;SOYOMBO CLUSTER-INITIAL LETTER SA;Lo;0;L;;;;;N;;;;; 11A8A;SOYOMBO FINAL CONSONANT SIGN G;Mn;0;NSM;;;;;N;;;;; 11A8B;SOYOMBO FINAL CONSONANT SIGN K;Mn;0;NSM;;;;;N;;;;; 11A8C;SOYOMBO FINAL CONSONANT SIGN NG;Mn;0;NSM;;;;;N;;;;; 11A8D;SOYOMBO FINAL CONSONANT SIGN D;Mn;0;NSM;;;;;N;;;;; 11A8E;SOYOMBO FINAL CONSONANT SIGN N;Mn;0;NSM;;;;;N;;;;; 11A8F;SOYOMBO FINAL CONSONANT SIGN B;Mn;0;NSM;;;;;N;;;;; 11A90;SOYOMBO FINAL CONSONANT SIGN M;Mn;0;NSM;;;;;N;;;;; 11A91;SOYOMBO FINAL CONSONANT SIGN R;Mn;0;NSM;;;;;N;;;;; 11A92;SOYOMBO FINAL CONSONANT SIGN L;Mn;0;NSM;;;;;N;;;;; 11A93;SOYOMBO FINAL CONSONANT SIGN SH;Mn;0;NSM;;;;;N;;;;; 11A94;SOYOMBO FINAL CONSONANT SIGN S;Mn;0;NSM;;;;;N;;;;; 11A95;SOYOMBO FINAL CONSONANT SIGN -A;Mn;0;NSM;;;;;N;;;;; 11A96;SOYOMBO SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 11A97;SOYOMBO SIGN VISARGA;Mc;0;L;;;;;N;;;;; 11A98;SOYOMBO GEMINATION MARK;Mn;0;NSM;;;;;N;;;;; 11A99;SOYOMBO SUBJOINER;Mn;9;NSM;;;;;N;;;;; 11A9A;SOYOMBO MARK TSHEG;Po;0;L;;;;;N;;;;; 11A9B;SOYOMBO MARK SHAD;Po;0;L;;;;;N;;;;; 11A9C;SOYOMBO MARK DOUBLE SHAD;Po;0;L;;;;;N;;;;; 11A9D;SOYOMBO MARK PLUTA;Lo;0;L;;;;;N;;;;; 11A9E;SOYOMBO HEAD MARK WITH MOON AND SUN AND TRIPLE FLAME;Po;0;L;;;;;N;;;;; 11A9F;SOYOMBO HEAD MARK WITH MOON AND SUN AND FLAME;Po;0;L;;;;;N;;;;; 11AA0;SOYOMBO HEAD MARK WITH MOON AND SUN;Po;0;L;;;;;N;;;;; 11AA1;SOYOMBO TERMINAL MARK-1;Po;0;L;;;;;N;;;;; 11AA2;SOYOMBO TERMINAL MARK-2;Po;0;L;;;;;N;;;;; 11AB0;CANADIAN SYLLABICS NATTILIK HI;Lo;0;L;;;;;N;;;;; 11AB1;CANADIAN SYLLABICS NATTILIK HII;Lo;0;L;;;;;N;;;;; 11AB2;CANADIAN SYLLABICS NATTILIK HO;Lo;0;L;;;;;N;;;;; 11AB3;CANADIAN SYLLABICS NATTILIK HOO;Lo;0;L;;;;;N;;;;; 11AB4;CANADIAN SYLLABICS NATTILIK HA;Lo;0;L;;;;;N;;;;; 11AB5;CANADIAN SYLLABICS NATTILIK HAA;Lo;0;L;;;;;N;;;;; 11AB6;CANADIAN SYLLABICS NATTILIK SHRI;Lo;0;L;;;;;N;;;;; 11AB7;CANADIAN SYLLABICS NATTILIK SHRII;Lo;0;L;;;;;N;;;;; 11AB8;CANADIAN SYLLABICS NATTILIK SHRO;Lo;0;L;;;;;N;;;;; 11AB9;CANADIAN SYLLABICS NATTILIK SHROO;Lo;0;L;;;;;N;;;;; 11ABA;CANADIAN SYLLABICS NATTILIK SHRA;Lo;0;L;;;;;N;;;;; 11ABB;CANADIAN SYLLABICS NATTILIK SHRAA;Lo;0;L;;;;;N;;;;; 11ABC;CANADIAN SYLLABICS SPE;Lo;0;L;;;;;N;;;;; 11ABD;CANADIAN SYLLABICS SPI;Lo;0;L;;;;;N;;;;; 11ABE;CANADIAN SYLLABICS SPO;Lo;0;L;;;;;N;;;;; 11ABF;CANADIAN SYLLABICS SPA;Lo;0;L;;;;;N;;;;; 11AC0;PAU CIN HAU LETTER PA;Lo;0;L;;;;;N;;;;; 11AC1;PAU CIN HAU LETTER KA;Lo;0;L;;;;;N;;;;; 11AC2;PAU CIN HAU LETTER LA;Lo;0;L;;;;;N;;;;; 11AC3;PAU CIN HAU LETTER MA;Lo;0;L;;;;;N;;;;; 11AC4;PAU CIN HAU LETTER DA;Lo;0;L;;;;;N;;;;; 11AC5;PAU CIN HAU LETTER ZA;Lo;0;L;;;;;N;;;;; 11AC6;PAU CIN HAU LETTER VA;Lo;0;L;;;;;N;;;;; 11AC7;PAU CIN HAU LETTER NGA;Lo;0;L;;;;;N;;;;; 11AC8;PAU CIN HAU LETTER HA;Lo;0;L;;;;;N;;;;; 11AC9;PAU CIN HAU LETTER GA;Lo;0;L;;;;;N;;;;; 11ACA;PAU CIN HAU LETTER KHA;Lo;0;L;;;;;N;;;;; 11ACB;PAU CIN HAU LETTER SA;Lo;0;L;;;;;N;;;;; 11ACC;PAU CIN HAU LETTER BA;Lo;0;L;;;;;N;;;;; 11ACD;PAU CIN HAU LETTER CA;Lo;0;L;;;;;N;;;;; 11ACE;PAU CIN HAU LETTER TA;Lo;0;L;;;;;N;;;;; 11ACF;PAU CIN HAU LETTER THA;Lo;0;L;;;;;N;;;;; 11AD0;PAU CIN HAU LETTER NA;Lo;0;L;;;;;N;;;;; 11AD1;PAU CIN HAU LETTER PHA;Lo;0;L;;;;;N;;;;; 11AD2;PAU CIN HAU LETTER RA;Lo;0;L;;;;;N;;;;; 11AD3;PAU CIN HAU LETTER FA;Lo;0;L;;;;;N;;;;; 11AD4;PAU CIN HAU LETTER CHA;Lo;0;L;;;;;N;;;;; 11AD5;PAU CIN HAU LETTER A;Lo;0;L;;;;;N;;;;; 11AD6;PAU CIN HAU LETTER E;Lo;0;L;;;;;N;;;;; 11AD7;PAU CIN HAU LETTER I;Lo;0;L;;;;;N;;;;; 11AD8;PAU CIN HAU LETTER O;Lo;0;L;;;;;N;;;;; 11AD9;PAU CIN HAU LETTER U;Lo;0;L;;;;;N;;;;; 11ADA;PAU CIN HAU LETTER UA;Lo;0;L;;;;;N;;;;; 11ADB;PAU CIN HAU LETTER IA;Lo;0;L;;;;;N;;;;; 11ADC;PAU CIN HAU LETTER FINAL P;Lo;0;L;;;;;N;;;;; 11ADD;PAU CIN HAU LETTER FINAL K;Lo;0;L;;;;;N;;;;; 11ADE;PAU CIN HAU LETTER FINAL T;Lo;0;L;;;;;N;;;;; 11ADF;PAU CIN HAU LETTER FINAL M;Lo;0;L;;;;;N;;;;; 11AE0;PAU CIN HAU LETTER FINAL N;Lo;0;L;;;;;N;;;;; 11AE1;PAU CIN HAU LETTER FINAL L;Lo;0;L;;;;;N;;;;; 11AE2;PAU CIN HAU LETTER FINAL W;Lo;0;L;;;;;N;;;;; 11AE3;PAU CIN HAU LETTER FINAL NG;Lo;0;L;;;;;N;;;;; 11AE4;PAU CIN HAU LETTER FINAL Y;Lo;0;L;;;;;N;;;;; 11AE5;PAU CIN HAU RISING TONE LONG;Lo;0;L;;;;;N;;;;; 11AE6;PAU CIN HAU RISING TONE;Lo;0;L;;;;;N;;;;; 11AE7;PAU CIN HAU SANDHI GLOTTAL STOP;Lo;0;L;;;;;N;;;;; 11AE8;PAU CIN HAU RISING TONE LONG FINAL;Lo;0;L;;;;;N;;;;; 11AE9;PAU CIN HAU RISING TONE FINAL;Lo;0;L;;;;;N;;;;; 11AEA;PAU CIN HAU SANDHI GLOTTAL STOP FINAL;Lo;0;L;;;;;N;;;;; 11AEB;PAU CIN HAU SANDHI TONE LONG;Lo;0;L;;;;;N;;;;; 11AEC;PAU CIN HAU SANDHI TONE;Lo;0;L;;;;;N;;;;; 11AED;PAU CIN HAU SANDHI TONE LONG FINAL;Lo;0;L;;;;;N;;;;; 11AEE;PAU CIN HAU SANDHI TONE FINAL;Lo;0;L;;;;;N;;;;; 11AEF;PAU CIN HAU MID-LEVEL TONE;Lo;0;L;;;;;N;;;;; 11AF0;PAU CIN HAU GLOTTAL STOP VARIANT;Lo;0;L;;;;;N;;;;; 11AF1;PAU CIN HAU MID-LEVEL TONE LONG FINAL;Lo;0;L;;;;;N;;;;; 11AF2;PAU CIN HAU MID-LEVEL TONE FINAL;Lo;0;L;;;;;N;;;;; 11AF3;PAU CIN HAU LOW-FALLING TONE LONG;Lo;0;L;;;;;N;;;;; 11AF4;PAU CIN HAU LOW-FALLING TONE;Lo;0;L;;;;;N;;;;; 11AF5;PAU CIN HAU GLOTTAL STOP;Lo;0;L;;;;;N;;;;; 11AF6;PAU CIN HAU LOW-FALLING TONE LONG FINAL;Lo;0;L;;;;;N;;;;; 11AF7;PAU CIN HAU LOW-FALLING TONE FINAL;Lo;0;L;;;;;N;;;;; 11AF8;PAU CIN HAU GLOTTAL STOP FINAL;Lo;0;L;;;;;N;;;;; 11C00;BHAIKSUKI LETTER A;Lo;0;L;;;;;N;;;;; 11C01;BHAIKSUKI LETTER AA;Lo;0;L;;;;;N;;;;; 11C02;BHAIKSUKI LETTER I;Lo;0;L;;;;;N;;;;; 11C03;BHAIKSUKI LETTER II;Lo;0;L;;;;;N;;;;; 11C04;BHAIKSUKI LETTER U;Lo;0;L;;;;;N;;;;; 11C05;BHAIKSUKI LETTER UU;Lo;0;L;;;;;N;;;;; 11C06;BHAIKSUKI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 11C07;BHAIKSUKI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 11C08;BHAIKSUKI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 11C0A;BHAIKSUKI LETTER E;Lo;0;L;;;;;N;;;;; 11C0B;BHAIKSUKI LETTER AI;Lo;0;L;;;;;N;;;;; 11C0C;BHAIKSUKI LETTER O;Lo;0;L;;;;;N;;;;; 11C0D;BHAIKSUKI LETTER AU;Lo;0;L;;;;;N;;;;; 11C0E;BHAIKSUKI LETTER KA;Lo;0;L;;;;;N;;;;; 11C0F;BHAIKSUKI LETTER KHA;Lo;0;L;;;;;N;;;;; 11C10;BHAIKSUKI LETTER GA;Lo;0;L;;;;;N;;;;; 11C11;BHAIKSUKI LETTER GHA;Lo;0;L;;;;;N;;;;; 11C12;BHAIKSUKI LETTER NGA;Lo;0;L;;;;;N;;;;; 11C13;BHAIKSUKI LETTER CA;Lo;0;L;;;;;N;;;;; 11C14;BHAIKSUKI LETTER CHA;Lo;0;L;;;;;N;;;;; 11C15;BHAIKSUKI LETTER JA;Lo;0;L;;;;;N;;;;; 11C16;BHAIKSUKI LETTER JHA;Lo;0;L;;;;;N;;;;; 11C17;BHAIKSUKI LETTER NYA;Lo;0;L;;;;;N;;;;; 11C18;BHAIKSUKI LETTER TTA;Lo;0;L;;;;;N;;;;; 11C19;BHAIKSUKI LETTER TTHA;Lo;0;L;;;;;N;;;;; 11C1A;BHAIKSUKI LETTER DDA;Lo;0;L;;;;;N;;;;; 11C1B;BHAIKSUKI LETTER DDHA;Lo;0;L;;;;;N;;;;; 11C1C;BHAIKSUKI LETTER NNA;Lo;0;L;;;;;N;;;;; 11C1D;BHAIKSUKI LETTER TA;Lo;0;L;;;;;N;;;;; 11C1E;BHAIKSUKI LETTER THA;Lo;0;L;;;;;N;;;;; 11C1F;BHAIKSUKI LETTER DA;Lo;0;L;;;;;N;;;;; 11C20;BHAIKSUKI LETTER DHA;Lo;0;L;;;;;N;;;;; 11C21;BHAIKSUKI LETTER NA;Lo;0;L;;;;;N;;;;; 11C22;BHAIKSUKI LETTER PA;Lo;0;L;;;;;N;;;;; 11C23;BHAIKSUKI LETTER PHA;Lo;0;L;;;;;N;;;;; 11C24;BHAIKSUKI LETTER BA;Lo;0;L;;;;;N;;;;; 11C25;BHAIKSUKI LETTER BHA;Lo;0;L;;;;;N;;;;; 11C26;BHAIKSUKI LETTER MA;Lo;0;L;;;;;N;;;;; 11C27;BHAIKSUKI LETTER YA;Lo;0;L;;;;;N;;;;; 11C28;BHAIKSUKI LETTER RA;Lo;0;L;;;;;N;;;;; 11C29;BHAIKSUKI LETTER LA;Lo;0;L;;;;;N;;;;; 11C2A;BHAIKSUKI LETTER VA;Lo;0;L;;;;;N;;;;; 11C2B;BHAIKSUKI LETTER SHA;Lo;0;L;;;;;N;;;;; 11C2C;BHAIKSUKI LETTER SSA;Lo;0;L;;;;;N;;;;; 11C2D;BHAIKSUKI LETTER SA;Lo;0;L;;;;;N;;;;; 11C2E;BHAIKSUKI LETTER HA;Lo;0;L;;;;;N;;;;; 11C2F;BHAIKSUKI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 11C30;BHAIKSUKI VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 11C31;BHAIKSUKI VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; 11C32;BHAIKSUKI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 11C33;BHAIKSUKI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 11C34;BHAIKSUKI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; 11C35;BHAIKSUKI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;; 11C36;BHAIKSUKI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; 11C38;BHAIKSUKI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 11C39;BHAIKSUKI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; 11C3A;BHAIKSUKI VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;; 11C3B;BHAIKSUKI VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;; 11C3C;BHAIKSUKI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 11C3D;BHAIKSUKI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 11C3E;BHAIKSUKI SIGN VISARGA;Mc;0;L;;;;;N;;;;; 11C3F;BHAIKSUKI SIGN VIRAMA;Mn;9;L;;;;;N;;;;; 11C40;BHAIKSUKI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; 11C41;BHAIKSUKI DANDA;Po;0;L;;;;;N;;;;; 11C42;BHAIKSUKI DOUBLE DANDA;Po;0;L;;;;;N;;;;; 11C43;BHAIKSUKI WORD SEPARATOR;Po;0;L;;;;;N;;;;; 11C44;BHAIKSUKI GAP FILLER-1;Po;0;L;;;;;N;;;;; 11C45;BHAIKSUKI GAP FILLER-2;Po;0;L;;;;;N;;;;; 11C50;BHAIKSUKI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 11C51;BHAIKSUKI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 11C52;BHAIKSUKI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 11C53;BHAIKSUKI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 11C54;BHAIKSUKI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 11C55;BHAIKSUKI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 11C56;BHAIKSUKI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 11C57;BHAIKSUKI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 11C58;BHAIKSUKI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 11C59;BHAIKSUKI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 11C5A;BHAIKSUKI NUMBER ONE;No;0;L;;;;1;N;;;;; 11C5B;BHAIKSUKI NUMBER TWO;No;0;L;;;;2;N;;;;; 11C5C;BHAIKSUKI NUMBER THREE;No;0;L;;;;3;N;;;;; 11C5D;BHAIKSUKI NUMBER FOUR;No;0;L;;;;4;N;;;;; 11C5E;BHAIKSUKI NUMBER FIVE;No;0;L;;;;5;N;;;;; 11C5F;BHAIKSUKI NUMBER SIX;No;0;L;;;;6;N;;;;; 11C60;BHAIKSUKI NUMBER SEVEN;No;0;L;;;;7;N;;;;; 11C61;BHAIKSUKI NUMBER EIGHT;No;0;L;;;;8;N;;;;; 11C62;BHAIKSUKI NUMBER NINE;No;0;L;;;;9;N;;;;; 11C63;BHAIKSUKI NUMBER TEN;No;0;L;;;;10;N;;;;; 11C64;BHAIKSUKI NUMBER TWENTY;No;0;L;;;;20;N;;;;; 11C65;BHAIKSUKI NUMBER THIRTY;No;0;L;;;;30;N;;;;; 11C66;BHAIKSUKI NUMBER FORTY;No;0;L;;;;40;N;;;;; 11C67;BHAIKSUKI NUMBER FIFTY;No;0;L;;;;50;N;;;;; 11C68;BHAIKSUKI NUMBER SIXTY;No;0;L;;;;60;N;;;;; 11C69;BHAIKSUKI NUMBER SEVENTY;No;0;L;;;;70;N;;;;; 11C6A;BHAIKSUKI NUMBER EIGHTY;No;0;L;;;;80;N;;;;; 11C6B;BHAIKSUKI NUMBER NINETY;No;0;L;;;;90;N;;;;; 11C6C;BHAIKSUKI HUNDREDS UNIT MARK;No;0;L;;;;100;N;;;;; 11C70;MARCHEN HEAD MARK;Po;0;L;;;;;N;;;;; 11C71;MARCHEN MARK SHAD;Po;0;L;;;;;N;;;;; 11C72;MARCHEN LETTER KA;Lo;0;L;;;;;N;;;;; 11C73;MARCHEN LETTER KHA;Lo;0;L;;;;;N;;;;; 11C74;MARCHEN LETTER GA;Lo;0;L;;;;;N;;;;; 11C75;MARCHEN LETTER NGA;Lo;0;L;;;;;N;;;;; 11C76;MARCHEN LETTER CA;Lo;0;L;;;;;N;;;;; 11C77;MARCHEN LETTER CHA;Lo;0;L;;;;;N;;;;; 11C78;MARCHEN LETTER JA;Lo;0;L;;;;;N;;;;; 11C79;MARCHEN LETTER NYA;Lo;0;L;;;;;N;;;;; 11C7A;MARCHEN LETTER TA;Lo;0;L;;;;;N;;;;; 11C7B;MARCHEN LETTER THA;Lo;0;L;;;;;N;;;;; 11C7C;MARCHEN LETTER DA;Lo;0;L;;;;;N;;;;; 11C7D;MARCHEN LETTER NA;Lo;0;L;;;;;N;;;;; 11C7E;MARCHEN LETTER PA;Lo;0;L;;;;;N;;;;; 11C7F;MARCHEN LETTER PHA;Lo;0;L;;;;;N;;;;; 11C80;MARCHEN LETTER BA;Lo;0;L;;;;;N;;;;; 11C81;MARCHEN LETTER MA;Lo;0;L;;;;;N;;;;; 11C82;MARCHEN LETTER TSA;Lo;0;L;;;;;N;;;;; 11C83;MARCHEN LETTER TSHA;Lo;0;L;;;;;N;;;;; 11C84;MARCHEN LETTER DZA;Lo;0;L;;;;;N;;;;; 11C85;MARCHEN LETTER WA;Lo;0;L;;;;;N;;;;; 11C86;MARCHEN LETTER ZHA;Lo;0;L;;;;;N;;;;; 11C87;MARCHEN LETTER ZA;Lo;0;L;;;;;N;;;;; 11C88;MARCHEN LETTER -A;Lo;0;L;;;;;N;;;;; 11C89;MARCHEN LETTER YA;Lo;0;L;;;;;N;;;;; 11C8A;MARCHEN LETTER RA;Lo;0;L;;;;;N;;;;; 11C8B;MARCHEN LETTER LA;Lo;0;L;;;;;N;;;;; 11C8C;MARCHEN LETTER SHA;Lo;0;L;;;;;N;;;;; 11C8D;MARCHEN LETTER SA;Lo;0;L;;;;;N;;;;; 11C8E;MARCHEN LETTER HA;Lo;0;L;;;;;N;;;;; 11C8F;MARCHEN LETTER A;Lo;0;L;;;;;N;;;;; 11C92;MARCHEN SUBJOINED LETTER KA;Mn;0;NSM;;;;;N;;;;; 11C93;MARCHEN SUBJOINED LETTER KHA;Mn;0;NSM;;;;;N;;;;; 11C94;MARCHEN SUBJOINED LETTER GA;Mn;0;NSM;;;;;N;;;;; 11C95;MARCHEN SUBJOINED LETTER NGA;Mn;0;NSM;;;;;N;;;;; 11C96;MARCHEN SUBJOINED LETTER CA;Mn;0;NSM;;;;;N;;;;; 11C97;MARCHEN SUBJOINED LETTER CHA;Mn;0;NSM;;;;;N;;;;; 11C98;MARCHEN SUBJOINED LETTER JA;Mn;0;NSM;;;;;N;;;;; 11C99;MARCHEN SUBJOINED LETTER NYA;Mn;0;NSM;;;;;N;;;;; 11C9A;MARCHEN SUBJOINED LETTER TA;Mn;0;NSM;;;;;N;;;;; 11C9B;MARCHEN SUBJOINED LETTER THA;Mn;0;NSM;;;;;N;;;;; 11C9C;MARCHEN SUBJOINED LETTER DA;Mn;0;NSM;;;;;N;;;;; 11C9D;MARCHEN SUBJOINED LETTER NA;Mn;0;NSM;;;;;N;;;;; 11C9E;MARCHEN SUBJOINED LETTER PA;Mn;0;NSM;;;;;N;;;;; 11C9F;MARCHEN SUBJOINED LETTER PHA;Mn;0;NSM;;;;;N;;;;; 11CA0;MARCHEN SUBJOINED LETTER BA;Mn;0;NSM;;;;;N;;;;; 11CA1;MARCHEN SUBJOINED LETTER MA;Mn;0;NSM;;;;;N;;;;; 11CA2;MARCHEN SUBJOINED LETTER TSA;Mn;0;NSM;;;;;N;;;;; 11CA3;MARCHEN SUBJOINED LETTER TSHA;Mn;0;NSM;;;;;N;;;;; 11CA4;MARCHEN SUBJOINED LETTER DZA;Mn;0;NSM;;;;;N;;;;; 11CA5;MARCHEN SUBJOINED LETTER WA;Mn;0;NSM;;;;;N;;;;; 11CA6;MARCHEN SUBJOINED LETTER ZHA;Mn;0;NSM;;;;;N;;;;; 11CA7;MARCHEN SUBJOINED LETTER ZA;Mn;0;NSM;;;;;N;;;;; 11CA9;MARCHEN SUBJOINED LETTER YA;Mc;0;L;;;;;N;;;;; 11CAA;MARCHEN SUBJOINED LETTER RA;Mn;0;NSM;;;;;N;;;;; 11CAB;MARCHEN SUBJOINED LETTER LA;Mn;0;NSM;;;;;N;;;;; 11CAC;MARCHEN SUBJOINED LETTER SHA;Mn;0;NSM;;;;;N;;;;; 11CAD;MARCHEN SUBJOINED LETTER SA;Mn;0;NSM;;;;;N;;;;; 11CAE;MARCHEN SUBJOINED LETTER HA;Mn;0;NSM;;;;;N;;;;; 11CAF;MARCHEN SUBJOINED LETTER A;Mn;0;NSM;;;;;N;;;;; 11CB0;MARCHEN VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;; 11CB1;MARCHEN VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 11CB2;MARCHEN VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 11CB3;MARCHEN VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 11CB4;MARCHEN VOWEL SIGN O;Mc;0;L;;;;;N;;;;; 11CB5;MARCHEN SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 11CB6;MARCHEN SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 11D00;MASARAM GONDI LETTER A;Lo;0;L;;;;;N;;;;; 11D01;MASARAM GONDI LETTER AA;Lo;0;L;;;;;N;;;;; 11D02;MASARAM GONDI LETTER I;Lo;0;L;;;;;N;;;;; 11D03;MASARAM GONDI LETTER II;Lo;0;L;;;;;N;;;;; 11D04;MASARAM GONDI LETTER U;Lo;0;L;;;;;N;;;;; 11D05;MASARAM GONDI LETTER UU;Lo;0;L;;;;;N;;;;; 11D06;MASARAM GONDI LETTER E;Lo;0;L;;;;;N;;;;; 11D08;MASARAM GONDI LETTER AI;Lo;0;L;;;;;N;;;;; 11D09;MASARAM GONDI LETTER O;Lo;0;L;;;;;N;;;;; 11D0B;MASARAM GONDI LETTER AU;Lo;0;L;;;;;N;;;;; 11D0C;MASARAM GONDI LETTER KA;Lo;0;L;;;;;N;;;;; 11D0D;MASARAM GONDI LETTER KHA;Lo;0;L;;;;;N;;;;; 11D0E;MASARAM GONDI LETTER GA;Lo;0;L;;;;;N;;;;; 11D0F;MASARAM GONDI LETTER GHA;Lo;0;L;;;;;N;;;;; 11D10;MASARAM GONDI LETTER NGA;Lo;0;L;;;;;N;;;;; 11D11;MASARAM GONDI LETTER CA;Lo;0;L;;;;;N;;;;; 11D12;MASARAM GONDI LETTER CHA;Lo;0;L;;;;;N;;;;; 11D13;MASARAM GONDI LETTER JA;Lo;0;L;;;;;N;;;;; 11D14;MASARAM GONDI LETTER JHA;Lo;0;L;;;;;N;;;;; 11D15;MASARAM GONDI LETTER NYA;Lo;0;L;;;;;N;;;;; 11D16;MASARAM GONDI LETTER TTA;Lo;0;L;;;;;N;;;;; 11D17;MASARAM GONDI LETTER TTHA;Lo;0;L;;;;;N;;;;; 11D18;MASARAM GONDI LETTER DDA;Lo;0;L;;;;;N;;;;; 11D19;MASARAM GONDI LETTER DDHA;Lo;0;L;;;;;N;;;;; 11D1A;MASARAM GONDI LETTER NNA;Lo;0;L;;;;;N;;;;; 11D1B;MASARAM GONDI LETTER TA;Lo;0;L;;;;;N;;;;; 11D1C;MASARAM GONDI LETTER THA;Lo;0;L;;;;;N;;;;; 11D1D;MASARAM GONDI LETTER DA;Lo;0;L;;;;;N;;;;; 11D1E;MASARAM GONDI LETTER DHA;Lo;0;L;;;;;N;;;;; 11D1F;MASARAM GONDI LETTER NA;Lo;0;L;;;;;N;;;;; 11D20;MASARAM GONDI LETTER PA;Lo;0;L;;;;;N;;;;; 11D21;MASARAM GONDI LETTER PHA;Lo;0;L;;;;;N;;;;; 11D22;MASARAM GONDI LETTER BA;Lo;0;L;;;;;N;;;;; 11D23;MASARAM GONDI LETTER BHA;Lo;0;L;;;;;N;;;;; 11D24;MASARAM GONDI LETTER MA;Lo;0;L;;;;;N;;;;; 11D25;MASARAM GONDI LETTER YA;Lo;0;L;;;;;N;;;;; 11D26;MASARAM GONDI LETTER RA;Lo;0;L;;;;;N;;;;; 11D27;MASARAM GONDI LETTER LA;Lo;0;L;;;;;N;;;;; 11D28;MASARAM GONDI LETTER VA;Lo;0;L;;;;;N;;;;; 11D29;MASARAM GONDI LETTER SHA;Lo;0;L;;;;;N;;;;; 11D2A;MASARAM GONDI LETTER SSA;Lo;0;L;;;;;N;;;;; 11D2B;MASARAM GONDI LETTER SA;Lo;0;L;;;;;N;;;;; 11D2C;MASARAM GONDI LETTER HA;Lo;0;L;;;;;N;;;;; 11D2D;MASARAM GONDI LETTER LLA;Lo;0;L;;;;;N;;;;; 11D2E;MASARAM GONDI LETTER KSSA;Lo;0;L;;;;;N;;;;; 11D2F;MASARAM GONDI LETTER JNYA;Lo;0;L;;;;;N;;;;; 11D30;MASARAM GONDI LETTER TRA;Lo;0;L;;;;;N;;;;; 11D31;MASARAM GONDI VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;; 11D32;MASARAM GONDI VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 11D33;MASARAM GONDI VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; 11D34;MASARAM GONDI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 11D35;MASARAM GONDI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 11D36;MASARAM GONDI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; 11D3A;MASARAM GONDI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 11D3C;MASARAM GONDI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; 11D3D;MASARAM GONDI VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;; 11D3F;MASARAM GONDI VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;; 11D40;MASARAM GONDI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 11D41;MASARAM GONDI SIGN VISARGA;Mn;0;NSM;;;;;N;;;;; 11D42;MASARAM GONDI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 11D43;MASARAM GONDI SIGN CANDRA;Mn;0;NSM;;;;;N;;;;; 11D44;MASARAM GONDI SIGN HALANTA;Mn;9;NSM;;;;;N;;;;; 11D45;MASARAM GONDI VIRAMA;Mn;9;NSM;;;;;N;;;;; 11D46;MASARAM GONDI REPHA;Lo;0;L;;;;;N;;;;; 11D47;MASARAM GONDI RA-KARA;Mn;0;NSM;;;;;N;;;;; 11D50;MASARAM GONDI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 11D51;MASARAM GONDI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 11D52;MASARAM GONDI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 11D53;MASARAM GONDI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 11D54;MASARAM GONDI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 11D55;MASARAM GONDI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 11D56;MASARAM GONDI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 11D57;MASARAM GONDI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 11D58;MASARAM GONDI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 11D59;MASARAM GONDI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 11D60;GUNJALA GONDI LETTER A;Lo;0;L;;;;;N;;;;; 11D61;GUNJALA GONDI LETTER AA;Lo;0;L;;;;;N;;;;; 11D62;GUNJALA GONDI LETTER I;Lo;0;L;;;;;N;;;;; 11D63;GUNJALA GONDI LETTER II;Lo;0;L;;;;;N;;;;; 11D64;GUNJALA GONDI LETTER U;Lo;0;L;;;;;N;;;;; 11D65;GUNJALA GONDI LETTER UU;Lo;0;L;;;;;N;;;;; 11D67;GUNJALA GONDI LETTER EE;Lo;0;L;;;;;N;;;;; 11D68;GUNJALA GONDI LETTER AI;Lo;0;L;;;;;N;;;;; 11D6A;GUNJALA GONDI LETTER OO;Lo;0;L;;;;;N;;;;; 11D6B;GUNJALA GONDI LETTER AU;Lo;0;L;;;;;N;;;;; 11D6C;GUNJALA GONDI LETTER YA;Lo;0;L;;;;;N;;;;; 11D6D;GUNJALA GONDI LETTER VA;Lo;0;L;;;;;N;;;;; 11D6E;GUNJALA GONDI LETTER BA;Lo;0;L;;;;;N;;;;; 11D6F;GUNJALA GONDI LETTER BHA;Lo;0;L;;;;;N;;;;; 11D70;GUNJALA GONDI LETTER MA;Lo;0;L;;;;;N;;;;; 11D71;GUNJALA GONDI LETTER KA;Lo;0;L;;;;;N;;;;; 11D72;GUNJALA GONDI LETTER KHA;Lo;0;L;;;;;N;;;;; 11D73;GUNJALA GONDI LETTER TA;Lo;0;L;;;;;N;;;;; 11D74;GUNJALA GONDI LETTER THA;Lo;0;L;;;;;N;;;;; 11D75;GUNJALA GONDI LETTER LA;Lo;0;L;;;;;N;;;;; 11D76;GUNJALA GONDI LETTER GA;Lo;0;L;;;;;N;;;;; 11D77;GUNJALA GONDI LETTER GHA;Lo;0;L;;;;;N;;;;; 11D78;GUNJALA GONDI LETTER DA;Lo;0;L;;;;;N;;;;; 11D79;GUNJALA GONDI LETTER DHA;Lo;0;L;;;;;N;;;;; 11D7A;GUNJALA GONDI LETTER NA;Lo;0;L;;;;;N;;;;; 11D7B;GUNJALA GONDI LETTER CA;Lo;0;L;;;;;N;;;;; 11D7C;GUNJALA GONDI LETTER CHA;Lo;0;L;;;;;N;;;;; 11D7D;GUNJALA GONDI LETTER TTA;Lo;0;L;;;;;N;;;;; 11D7E;GUNJALA GONDI LETTER TTHA;Lo;0;L;;;;;N;;;;; 11D7F;GUNJALA GONDI LETTER LLA;Lo;0;L;;;;;N;;;;; 11D80;GUNJALA GONDI LETTER JA;Lo;0;L;;;;;N;;;;; 11D81;GUNJALA GONDI LETTER JHA;Lo;0;L;;;;;N;;;;; 11D82;GUNJALA GONDI LETTER DDA;Lo;0;L;;;;;N;;;;; 11D83;GUNJALA GONDI LETTER DDHA;Lo;0;L;;;;;N;;;;; 11D84;GUNJALA GONDI LETTER NGA;Lo;0;L;;;;;N;;;;; 11D85;GUNJALA GONDI LETTER PA;Lo;0;L;;;;;N;;;;; 11D86;GUNJALA GONDI LETTER PHA;Lo;0;L;;;;;N;;;;; 11D87;GUNJALA GONDI LETTER HA;Lo;0;L;;;;;N;;;;; 11D88;GUNJALA GONDI LETTER RA;Lo;0;L;;;;;N;;;;; 11D89;GUNJALA GONDI LETTER SA;Lo;0;L;;;;;N;;;;; 11D8A;GUNJALA GONDI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 11D8B;GUNJALA GONDI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 11D8C;GUNJALA GONDI VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 11D8D;GUNJALA GONDI VOWEL SIGN U;Mc;0;L;;;;;N;;;;; 11D8E;GUNJALA GONDI VOWEL SIGN UU;Mc;0;L;;;;;N;;;;; 11D90;GUNJALA GONDI VOWEL SIGN EE;Mn;0;NSM;;;;;N;;;;; 11D91;GUNJALA GONDI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; 11D93;GUNJALA GONDI VOWEL SIGN OO;Mc;0;L;;;;;N;;;;; 11D94;GUNJALA GONDI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; 11D95;GUNJALA GONDI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 11D96;GUNJALA GONDI SIGN VISARGA;Mc;0;L;;;;;N;;;;; 11D97;GUNJALA GONDI VIRAMA;Mn;9;NSM;;;;;N;;;;; 11D98;GUNJALA GONDI OM;Lo;0;L;;;;;N;;;;; 11DA0;GUNJALA GONDI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 11DA1;GUNJALA GONDI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 11DA2;GUNJALA GONDI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 11DA3;GUNJALA GONDI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 11DA4;GUNJALA GONDI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 11DA5;GUNJALA GONDI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 11DA6;GUNJALA GONDI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 11DA7;GUNJALA GONDI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 11DA8;GUNJALA GONDI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 11DA9;GUNJALA GONDI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 11EE0;MAKASAR LETTER KA;Lo;0;L;;;;;N;;;;; 11EE1;MAKASAR LETTER GA;Lo;0;L;;;;;N;;;;; 11EE2;MAKASAR LETTER NGA;Lo;0;L;;;;;N;;;;; 11EE3;MAKASAR LETTER PA;Lo;0;L;;;;;N;;;;; 11EE4;MAKASAR LETTER BA;Lo;0;L;;;;;N;;;;; 11EE5;MAKASAR LETTER MA;Lo;0;L;;;;;N;;;;; 11EE6;MAKASAR LETTER TA;Lo;0;L;;;;;N;;;;; 11EE7;MAKASAR LETTER DA;Lo;0;L;;;;;N;;;;; 11EE8;MAKASAR LETTER NA;Lo;0;L;;;;;N;;;;; 11EE9;MAKASAR LETTER CA;Lo;0;L;;;;;N;;;;; 11EEA;MAKASAR LETTER JA;Lo;0;L;;;;;N;;;;; 11EEB;MAKASAR LETTER NYA;Lo;0;L;;;;;N;;;;; 11EEC;MAKASAR LETTER YA;Lo;0;L;;;;;N;;;;; 11EED;MAKASAR LETTER RA;Lo;0;L;;;;;N;;;;; 11EEE;MAKASAR LETTER LA;Lo;0;L;;;;;N;;;;; 11EEF;MAKASAR LETTER VA;Lo;0;L;;;;;N;;;;; 11EF0;MAKASAR LETTER SA;Lo;0;L;;;;;N;;;;; 11EF1;MAKASAR LETTER A;Lo;0;L;;;;;N;;;;; 11EF2;MAKASAR ANGKA;Lo;0;L;;;;;N;;;;; 11EF3;MAKASAR VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 11EF4;MAKASAR VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 11EF5;MAKASAR VOWEL SIGN E;Mc;0;L;;;;;N;;;;; 11EF6;MAKASAR VOWEL SIGN O;Mc;0;L;;;;;N;;;;; 11EF7;MAKASAR PASSIMBANG;Po;0;L;;;;;N;;;;; 11EF8;MAKASAR END OF SECTION;Po;0;L;;;;;N;;;;; 11FB0;LISU LETTER YHA;Lo;0;L;;;;;N;;;;; 11FC0;TAMIL FRACTION ONE THREE-HUNDRED-AND-TWENTIETH;No;0;L;;;;1/320;N;;;;; 11FC1;TAMIL FRACTION ONE ONE-HUNDRED-AND-SIXTIETH;No;0;L;;;;1/160;N;;;;; 11FC2;TAMIL FRACTION ONE EIGHTIETH;No;0;L;;;;1/80;N;;;;; 11FC3;TAMIL FRACTION ONE SIXTY-FOURTH;No;0;L;;;;1/64;N;;;;; 11FC4;TAMIL FRACTION ONE FORTIETH;No;0;L;;;;1/40;N;;;;; 11FC5;TAMIL FRACTION ONE THIRTY-SECOND;No;0;L;;;;1/32;N;;;;; 11FC6;TAMIL FRACTION THREE EIGHTIETHS;No;0;L;;;;3/80;N;;;;; 11FC7;TAMIL FRACTION THREE SIXTY-FOURTHS;No;0;L;;;;3/64;N;;;;; 11FC8;TAMIL FRACTION ONE TWENTIETH;No;0;L;;;;1/20;N;;;;; 11FC9;TAMIL FRACTION ONE SIXTEENTH-1;No;0;L;;;;1/16;N;;;;; 11FCA;TAMIL FRACTION ONE SIXTEENTH-2;No;0;L;;;;1/16;N;;;;; 11FCB;TAMIL FRACTION ONE TENTH;No;0;L;;;;1/10;N;;;;; 11FCC;TAMIL FRACTION ONE EIGHTH;No;0;L;;;;1/8;N;;;;; 11FCD;TAMIL FRACTION THREE TWENTIETHS;No;0;L;;;;3/20;N;;;;; 11FCE;TAMIL FRACTION THREE SIXTEENTHS;No;0;L;;;;3/16;N;;;;; 11FCF;TAMIL FRACTION ONE FIFTH;No;0;L;;;;1/5;N;;;;; 11FD0;TAMIL FRACTION ONE QUARTER;No;0;L;;;;1/4;N;;;;; 11FD1;TAMIL FRACTION ONE HALF-1;No;0;L;;;;1/2;N;;;;; 11FD2;TAMIL FRACTION ONE HALF-2;No;0;L;;;;1/2;N;;;;; 11FD3;TAMIL FRACTION THREE QUARTERS;No;0;L;;;;3/4;N;;;;; 11FD4;TAMIL FRACTION DOWNSCALING FACTOR KIIZH;No;0;L;;;;1/320;N;;;;; 11FD5;TAMIL SIGN NEL;So;0;ON;;;;;N;;;;; 11FD6;TAMIL SIGN CEVITU;So;0;ON;;;;;N;;;;; 11FD7;TAMIL SIGN AAZHAAKKU;So;0;ON;;;;;N;;;;; 11FD8;TAMIL SIGN UZHAKKU;So;0;ON;;;;;N;;;;; 11FD9;TAMIL SIGN MUUVUZHAKKU;So;0;ON;;;;;N;;;;; 11FDA;TAMIL SIGN KURUNI;So;0;ON;;;;;N;;;;; 11FDB;TAMIL SIGN PATHAKKU;So;0;ON;;;;;N;;;;; 11FDC;TAMIL SIGN MUKKURUNI;So;0;ON;;;;;N;;;;; 11FDD;TAMIL SIGN KAACU;Sc;0;ET;;;;;N;;;;; 11FDE;TAMIL SIGN PANAM;Sc;0;ET;;;;;N;;;;; 11FDF;TAMIL SIGN PON;Sc;0;ET;;;;;N;;;;; 11FE0;TAMIL SIGN VARAAKAN;Sc;0;ET;;;;;N;;;;; 11FE1;TAMIL SIGN PAARAM;So;0;ON;;;;;N;;;;; 11FE2;TAMIL SIGN KUZHI;So;0;ON;;;;;N;;;;; 11FE3;TAMIL SIGN VELI;So;0;ON;;;;;N;;;;; 11FE4;TAMIL WET CULTIVATION SIGN;So;0;ON;;;;;N;;;;; 11FE5;TAMIL DRY CULTIVATION SIGN;So;0;ON;;;;;N;;;;; 11FE6;TAMIL LAND SIGN;So;0;ON;;;;;N;;;;; 11FE7;TAMIL SALT PAN SIGN;So;0;ON;;;;;N;;;;; 11FE8;TAMIL TRADITIONAL CREDIT SIGN;So;0;ON;;;;;N;;;;; 11FE9;TAMIL TRADITIONAL NUMBER SIGN;So;0;ON;;;;;N;;;;; 11FEA;TAMIL CURRENT SIGN;So;0;ON;;;;;N;;;;; 11FEB;TAMIL AND ODD SIGN;So;0;ON;;;;;N;;;;; 11FEC;TAMIL SPENT SIGN;So;0;ON;;;;;N;;;;; 11FED;TAMIL TOTAL SIGN;So;0;ON;;;;;N;;;;; 11FEE;TAMIL IN POSSESSION SIGN;So;0;ON;;;;;N;;;;; 11FEF;TAMIL STARTING FROM SIGN;So;0;ON;;;;;N;;;;; 11FF0;TAMIL SIGN MUTHALIYA;So;0;ON;;;;;N;;;;; 11FF1;TAMIL SIGN VAKAIYARAA;So;0;ON;;;;;N;;;;; 11FFF;TAMIL PUNCTUATION END OF TEXT;Po;0;L;;;;;N;;;;; 12000;CUNEIFORM SIGN A;Lo;0;L;;;;;N;;;;; 12001;CUNEIFORM SIGN A TIMES A;Lo;0;L;;;;;N;;;;; 12002;CUNEIFORM SIGN A TIMES BAD;Lo;0;L;;;;;N;;;;; 12003;CUNEIFORM SIGN A TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; 12004;CUNEIFORM SIGN A TIMES HA;Lo;0;L;;;;;N;;;;; 12005;CUNEIFORM SIGN A TIMES IGI;Lo;0;L;;;;;N;;;;; 12006;CUNEIFORM SIGN A TIMES LAGAR GUNU;Lo;0;L;;;;;N;;;;; 12007;CUNEIFORM SIGN A TIMES MUSH;Lo;0;L;;;;;N;;;;; 12008;CUNEIFORM SIGN A TIMES SAG;Lo;0;L;;;;;N;;;;; 12009;CUNEIFORM SIGN A2;Lo;0;L;;;;;N;;;;; 1200A;CUNEIFORM SIGN AB;Lo;0;L;;;;;N;;;;; 1200B;CUNEIFORM SIGN AB TIMES ASH2;Lo;0;L;;;;;N;;;;; 1200C;CUNEIFORM SIGN AB TIMES DUN3 GUNU;Lo;0;L;;;;;N;;;;; 1200D;CUNEIFORM SIGN AB TIMES GAL;Lo;0;L;;;;;N;;;;; 1200E;CUNEIFORM SIGN AB TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; 1200F;CUNEIFORM SIGN AB TIMES HA;Lo;0;L;;;;;N;;;;; 12010;CUNEIFORM SIGN AB TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; 12011;CUNEIFORM SIGN AB TIMES IMIN;Lo;0;L;;;;;N;;;;; 12012;CUNEIFORM SIGN AB TIMES LAGAB;Lo;0;L;;;;;N;;;;; 12013;CUNEIFORM SIGN AB TIMES SHESH;Lo;0;L;;;;;N;;;;; 12014;CUNEIFORM SIGN AB TIMES U PLUS U PLUS U;Lo;0;L;;;;;N;;;;; 12015;CUNEIFORM SIGN AB GUNU;Lo;0;L;;;;;N;;;;; 12016;CUNEIFORM SIGN AB2;Lo;0;L;;;;;N;;;;; 12017;CUNEIFORM SIGN AB2 TIMES BALAG;Lo;0;L;;;;;N;;;;; 12018;CUNEIFORM SIGN AB2 TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; 12019;CUNEIFORM SIGN AB2 TIMES ME PLUS EN;Lo;0;L;;;;;N;;;;; 1201A;CUNEIFORM SIGN AB2 TIMES SHA3;Lo;0;L;;;;;N;;;;; 1201B;CUNEIFORM SIGN AB2 TIMES TAK4;Lo;0;L;;;;;N;;;;; 1201C;CUNEIFORM SIGN AD;Lo;0;L;;;;;N;;;;; 1201D;CUNEIFORM SIGN AK;Lo;0;L;;;;;N;;;;; 1201E;CUNEIFORM SIGN AK TIMES ERIN2;Lo;0;L;;;;;N;;;;; 1201F;CUNEIFORM SIGN AK TIMES SHITA PLUS GISH;Lo;0;L;;;;;N;;;;; 12020;CUNEIFORM SIGN AL;Lo;0;L;;;;;N;;;;; 12021;CUNEIFORM SIGN AL TIMES AL;Lo;0;L;;;;;N;;;;; 12022;CUNEIFORM SIGN AL TIMES DIM2;Lo;0;L;;;;;N;;;;; 12023;CUNEIFORM SIGN AL TIMES GISH;Lo;0;L;;;;;N;;;;; 12024;CUNEIFORM SIGN AL TIMES HA;Lo;0;L;;;;;N;;;;; 12025;CUNEIFORM SIGN AL TIMES KAD3;Lo;0;L;;;;;N;;;;; 12026;CUNEIFORM SIGN AL TIMES KI;Lo;0;L;;;;;N;;;;; 12027;CUNEIFORM SIGN AL TIMES SHE;Lo;0;L;;;;;N;;;;; 12028;CUNEIFORM SIGN AL TIMES USH;Lo;0;L;;;;;N;;;;; 12029;CUNEIFORM SIGN ALAN;Lo;0;L;;;;;N;;;;; 1202A;CUNEIFORM SIGN ALEPH;Lo;0;L;;;;;N;;;;; 1202B;CUNEIFORM SIGN AMAR;Lo;0;L;;;;;N;;;;; 1202C;CUNEIFORM SIGN AMAR TIMES SHE;Lo;0;L;;;;;N;;;;; 1202D;CUNEIFORM SIGN AN;Lo;0;L;;;;;N;;;;; 1202E;CUNEIFORM SIGN AN OVER AN;Lo;0;L;;;;;N;;;;; 1202F;CUNEIFORM SIGN AN THREE TIMES;Lo;0;L;;;;;N;;;;; 12030;CUNEIFORM SIGN AN PLUS NAGA OPPOSING AN PLUS NAGA;Lo;0;L;;;;;N;;;;; 12031;CUNEIFORM SIGN AN PLUS NAGA SQUARED;Lo;0;L;;;;;N;;;;; 12032;CUNEIFORM SIGN ANSHE;Lo;0;L;;;;;N;;;;; 12033;CUNEIFORM SIGN APIN;Lo;0;L;;;;;N;;;;; 12034;CUNEIFORM SIGN ARAD;Lo;0;L;;;;;N;;;;; 12035;CUNEIFORM SIGN ARAD TIMES KUR;Lo;0;L;;;;;N;;;;; 12036;CUNEIFORM SIGN ARKAB;Lo;0;L;;;;;N;;;;; 12037;CUNEIFORM SIGN ASAL2;Lo;0;L;;;;;N;;;;; 12038;CUNEIFORM SIGN ASH;Lo;0;L;;;;;N;;;;; 12039;CUNEIFORM SIGN ASH ZIDA TENU;Lo;0;L;;;;;N;;;;; 1203A;CUNEIFORM SIGN ASH KABA TENU;Lo;0;L;;;;;N;;;;; 1203B;CUNEIFORM SIGN ASH OVER ASH TUG2 OVER TUG2 TUG2 OVER TUG2 PAP;Lo;0;L;;;;;N;;;;; 1203C;CUNEIFORM SIGN ASH OVER ASH OVER ASH;Lo;0;L;;;;;N;;;;; 1203D;CUNEIFORM SIGN ASH OVER ASH OVER ASH CROSSING ASH OVER ASH OVER ASH;Lo;0;L;;;;;N;;;;; 1203E;CUNEIFORM SIGN ASH2;Lo;0;L;;;;;N;;;;; 1203F;CUNEIFORM SIGN ASHGAB;Lo;0;L;;;;;N;;;;; 12040;CUNEIFORM SIGN BA;Lo;0;L;;;;;N;;;;; 12041;CUNEIFORM SIGN BAD;Lo;0;L;;;;;N;;;;; 12042;CUNEIFORM SIGN BAG3;Lo;0;L;;;;;N;;;;; 12043;CUNEIFORM SIGN BAHAR2;Lo;0;L;;;;;N;;;;; 12044;CUNEIFORM SIGN BAL;Lo;0;L;;;;;N;;;;; 12045;CUNEIFORM SIGN BAL OVER BAL;Lo;0;L;;;;;N;;;;; 12046;CUNEIFORM SIGN BALAG;Lo;0;L;;;;;N;;;;; 12047;CUNEIFORM SIGN BAR;Lo;0;L;;;;;N;;;;; 12048;CUNEIFORM SIGN BARA2;Lo;0;L;;;;;N;;;;; 12049;CUNEIFORM SIGN BI;Lo;0;L;;;;;N;;;;; 1204A;CUNEIFORM SIGN BI TIMES A;Lo;0;L;;;;;N;;;;; 1204B;CUNEIFORM SIGN BI TIMES GAR;Lo;0;L;;;;;N;;;;; 1204C;CUNEIFORM SIGN BI TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; 1204D;CUNEIFORM SIGN BU;Lo;0;L;;;;;N;;;;; 1204E;CUNEIFORM SIGN BU OVER BU AB;Lo;0;L;;;;;N;;;;; 1204F;CUNEIFORM SIGN BU OVER BU UN;Lo;0;L;;;;;N;;;;; 12050;CUNEIFORM SIGN BU CROSSING BU;Lo;0;L;;;;;N;;;;; 12051;CUNEIFORM SIGN BULUG;Lo;0;L;;;;;N;;;;; 12052;CUNEIFORM SIGN BULUG OVER BULUG;Lo;0;L;;;;;N;;;;; 12053;CUNEIFORM SIGN BUR;Lo;0;L;;;;;N;;;;; 12054;CUNEIFORM SIGN BUR2;Lo;0;L;;;;;N;;;;; 12055;CUNEIFORM SIGN DA;Lo;0;L;;;;;N;;;;; 12056;CUNEIFORM SIGN DAG;Lo;0;L;;;;;N;;;;; 12057;CUNEIFORM SIGN DAG KISIM5 TIMES A PLUS MASH;Lo;0;L;;;;;N;;;;; 12058;CUNEIFORM SIGN DAG KISIM5 TIMES AMAR;Lo;0;L;;;;;N;;;;; 12059;CUNEIFORM SIGN DAG KISIM5 TIMES BALAG;Lo;0;L;;;;;N;;;;; 1205A;CUNEIFORM SIGN DAG KISIM5 TIMES BI;Lo;0;L;;;;;N;;;;; 1205B;CUNEIFORM SIGN DAG KISIM5 TIMES GA;Lo;0;L;;;;;N;;;;; 1205C;CUNEIFORM SIGN DAG KISIM5 TIMES GA PLUS MASH;Lo;0;L;;;;;N;;;;; 1205D;CUNEIFORM SIGN DAG KISIM5 TIMES GI;Lo;0;L;;;;;N;;;;; 1205E;CUNEIFORM SIGN DAG KISIM5 TIMES GIR2;Lo;0;L;;;;;N;;;;; 1205F;CUNEIFORM SIGN DAG KISIM5 TIMES GUD;Lo;0;L;;;;;N;;;;; 12060;CUNEIFORM SIGN DAG KISIM5 TIMES HA;Lo;0;L;;;;;N;;;;; 12061;CUNEIFORM SIGN DAG KISIM5 TIMES IR;Lo;0;L;;;;;N;;;;; 12062;CUNEIFORM SIGN DAG KISIM5 TIMES IR PLUS LU;Lo;0;L;;;;;N;;;;; 12063;CUNEIFORM SIGN DAG KISIM5 TIMES KAK;Lo;0;L;;;;;N;;;;; 12064;CUNEIFORM SIGN DAG KISIM5 TIMES LA;Lo;0;L;;;;;N;;;;; 12065;CUNEIFORM SIGN DAG KISIM5 TIMES LU;Lo;0;L;;;;;N;;;;; 12066;CUNEIFORM SIGN DAG KISIM5 TIMES LU PLUS MASH2;Lo;0;L;;;;;N;;;;; 12067;CUNEIFORM SIGN DAG KISIM5 TIMES LUM;Lo;0;L;;;;;N;;;;; 12068;CUNEIFORM SIGN DAG KISIM5 TIMES NE;Lo;0;L;;;;;N;;;;; 12069;CUNEIFORM SIGN DAG KISIM5 TIMES PAP PLUS PAP;Lo;0;L;;;;;N;;;;; 1206A;CUNEIFORM SIGN DAG KISIM5 TIMES SI;Lo;0;L;;;;;N;;;;; 1206B;CUNEIFORM SIGN DAG KISIM5 TIMES TAK4;Lo;0;L;;;;;N;;;;; 1206C;CUNEIFORM SIGN DAG KISIM5 TIMES U2 PLUS GIR2;Lo;0;L;;;;;N;;;;; 1206D;CUNEIFORM SIGN DAG KISIM5 TIMES USH;Lo;0;L;;;;;N;;;;; 1206E;CUNEIFORM SIGN DAM;Lo;0;L;;;;;N;;;;; 1206F;CUNEIFORM SIGN DAR;Lo;0;L;;;;;N;;;;; 12070;CUNEIFORM SIGN DARA3;Lo;0;L;;;;;N;;;;; 12071;CUNEIFORM SIGN DARA4;Lo;0;L;;;;;N;;;;; 12072;CUNEIFORM SIGN DI;Lo;0;L;;;;;N;;;;; 12073;CUNEIFORM SIGN DIB;Lo;0;L;;;;;N;;;;; 12074;CUNEIFORM SIGN DIM;Lo;0;L;;;;;N;;;;; 12075;CUNEIFORM SIGN DIM TIMES SHE;Lo;0;L;;;;;N;;;;; 12076;CUNEIFORM SIGN DIM2;Lo;0;L;;;;;N;;;;; 12077;CUNEIFORM SIGN DIN;Lo;0;L;;;;;N;;;;; 12078;CUNEIFORM SIGN DIN KASKAL U GUNU DISH;Lo;0;L;;;;;N;;;;; 12079;CUNEIFORM SIGN DISH;Lo;0;L;;;;;N;;;;; 1207A;CUNEIFORM SIGN DU;Lo;0;L;;;;;N;;;;; 1207B;CUNEIFORM SIGN DU OVER DU;Lo;0;L;;;;;N;;;;; 1207C;CUNEIFORM SIGN DU GUNU;Lo;0;L;;;;;N;;;;; 1207D;CUNEIFORM SIGN DU SHESHIG;Lo;0;L;;;;;N;;;;; 1207E;CUNEIFORM SIGN DUB;Lo;0;L;;;;;N;;;;; 1207F;CUNEIFORM SIGN DUB TIMES ESH2;Lo;0;L;;;;;N;;;;; 12080;CUNEIFORM SIGN DUB2;Lo;0;L;;;;;N;;;;; 12081;CUNEIFORM SIGN DUG;Lo;0;L;;;;;N;;;;; 12082;CUNEIFORM SIGN DUGUD;Lo;0;L;;;;;N;;;;; 12083;CUNEIFORM SIGN DUH;Lo;0;L;;;;;N;;;;; 12084;CUNEIFORM SIGN DUN;Lo;0;L;;;;;N;;;;; 12085;CUNEIFORM SIGN DUN3;Lo;0;L;;;;;N;;;;; 12086;CUNEIFORM SIGN DUN3 GUNU;Lo;0;L;;;;;N;;;;; 12087;CUNEIFORM SIGN DUN3 GUNU GUNU;Lo;0;L;;;;;N;;;;; 12088;CUNEIFORM SIGN DUN4;Lo;0;L;;;;;N;;;;; 12089;CUNEIFORM SIGN DUR2;Lo;0;L;;;;;N;;;;; 1208A;CUNEIFORM SIGN E;Lo;0;L;;;;;N;;;;; 1208B;CUNEIFORM SIGN E TIMES PAP;Lo;0;L;;;;;N;;;;; 1208C;CUNEIFORM SIGN E OVER E NUN OVER NUN;Lo;0;L;;;;;N;;;;; 1208D;CUNEIFORM SIGN E2;Lo;0;L;;;;;N;;;;; 1208E;CUNEIFORM SIGN E2 TIMES A PLUS HA PLUS DA;Lo;0;L;;;;;N;;;;; 1208F;CUNEIFORM SIGN E2 TIMES GAR;Lo;0;L;;;;;N;;;;; 12090;CUNEIFORM SIGN E2 TIMES MI;Lo;0;L;;;;;N;;;;; 12091;CUNEIFORM SIGN E2 TIMES SAL;Lo;0;L;;;;;N;;;;; 12092;CUNEIFORM SIGN E2 TIMES SHE;Lo;0;L;;;;;N;;;;; 12093;CUNEIFORM SIGN E2 TIMES U;Lo;0;L;;;;;N;;;;; 12094;CUNEIFORM SIGN EDIN;Lo;0;L;;;;;N;;;;; 12095;CUNEIFORM SIGN EGIR;Lo;0;L;;;;;N;;;;; 12096;CUNEIFORM SIGN EL;Lo;0;L;;;;;N;;;;; 12097;CUNEIFORM SIGN EN;Lo;0;L;;;;;N;;;;; 12098;CUNEIFORM SIGN EN TIMES GAN2;Lo;0;L;;;;;N;;;;; 12099;CUNEIFORM SIGN EN TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; 1209A;CUNEIFORM SIGN EN TIMES ME;Lo;0;L;;;;;N;;;;; 1209B;CUNEIFORM SIGN EN CROSSING EN;Lo;0;L;;;;;N;;;;; 1209C;CUNEIFORM SIGN EN OPPOSING EN;Lo;0;L;;;;;N;;;;; 1209D;CUNEIFORM SIGN EN SQUARED;Lo;0;L;;;;;N;;;;; 1209E;CUNEIFORM SIGN EREN;Lo;0;L;;;;;N;;;;; 1209F;CUNEIFORM SIGN ERIN2;Lo;0;L;;;;;N;;;;; 120A0;CUNEIFORM SIGN ESH2;Lo;0;L;;;;;N;;;;; 120A1;CUNEIFORM SIGN EZEN;Lo;0;L;;;;;N;;;;; 120A2;CUNEIFORM SIGN EZEN TIMES A;Lo;0;L;;;;;N;;;;; 120A3;CUNEIFORM SIGN EZEN TIMES A PLUS LAL;Lo;0;L;;;;;N;;;;; 120A4;CUNEIFORM SIGN EZEN TIMES A PLUS LAL TIMES LAL;Lo;0;L;;;;;N;;;;; 120A5;CUNEIFORM SIGN EZEN TIMES AN;Lo;0;L;;;;;N;;;;; 120A6;CUNEIFORM SIGN EZEN TIMES BAD;Lo;0;L;;;;;N;;;;; 120A7;CUNEIFORM SIGN EZEN TIMES DUN3 GUNU;Lo;0;L;;;;;N;;;;; 120A8;CUNEIFORM SIGN EZEN TIMES DUN3 GUNU GUNU;Lo;0;L;;;;;N;;;;; 120A9;CUNEIFORM SIGN EZEN TIMES HA;Lo;0;L;;;;;N;;;;; 120AA;CUNEIFORM SIGN EZEN TIMES HA GUNU;Lo;0;L;;;;;N;;;;; 120AB;CUNEIFORM SIGN EZEN TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; 120AC;CUNEIFORM SIGN EZEN TIMES KASKAL;Lo;0;L;;;;;N;;;;; 120AD;CUNEIFORM SIGN EZEN TIMES KASKAL SQUARED;Lo;0;L;;;;;N;;;;; 120AE;CUNEIFORM SIGN EZEN TIMES KU3;Lo;0;L;;;;;N;;;;; 120AF;CUNEIFORM SIGN EZEN TIMES LA;Lo;0;L;;;;;N;;;;; 120B0;CUNEIFORM SIGN EZEN TIMES LAL TIMES LAL;Lo;0;L;;;;;N;;;;; 120B1;CUNEIFORM SIGN EZEN TIMES LI;Lo;0;L;;;;;N;;;;; 120B2;CUNEIFORM SIGN EZEN TIMES LU;Lo;0;L;;;;;N;;;;; 120B3;CUNEIFORM SIGN EZEN TIMES U2;Lo;0;L;;;;;N;;;;; 120B4;CUNEIFORM SIGN EZEN TIMES UD;Lo;0;L;;;;;N;;;;; 120B5;CUNEIFORM SIGN GA;Lo;0;L;;;;;N;;;;; 120B6;CUNEIFORM SIGN GA GUNU;Lo;0;L;;;;;N;;;;; 120B7;CUNEIFORM SIGN GA2;Lo;0;L;;;;;N;;;;; 120B8;CUNEIFORM SIGN GA2 TIMES A PLUS DA PLUS HA;Lo;0;L;;;;;N;;;;; 120B9;CUNEIFORM SIGN GA2 TIMES A PLUS HA;Lo;0;L;;;;;N;;;;; 120BA;CUNEIFORM SIGN GA2 TIMES A PLUS IGI;Lo;0;L;;;;;N;;;;; 120BB;CUNEIFORM SIGN GA2 TIMES AB2 TENU PLUS TAB;Lo;0;L;;;;;N;;;;; 120BC;CUNEIFORM SIGN GA2 TIMES AN;Lo;0;L;;;;;N;;;;; 120BD;CUNEIFORM SIGN GA2 TIMES ASH;Lo;0;L;;;;;N;;;;; 120BE;CUNEIFORM SIGN GA2 TIMES ASH2 PLUS GAL;Lo;0;L;;;;;N;;;;; 120BF;CUNEIFORM SIGN GA2 TIMES BAD;Lo;0;L;;;;;N;;;;; 120C0;CUNEIFORM SIGN GA2 TIMES BAR PLUS RA;Lo;0;L;;;;;N;;;;; 120C1;CUNEIFORM SIGN GA2 TIMES BUR;Lo;0;L;;;;;N;;;;; 120C2;CUNEIFORM SIGN GA2 TIMES BUR PLUS RA;Lo;0;L;;;;;N;;;;; 120C3;CUNEIFORM SIGN GA2 TIMES DA;Lo;0;L;;;;;N;;;;; 120C4;CUNEIFORM SIGN GA2 TIMES DI;Lo;0;L;;;;;N;;;;; 120C5;CUNEIFORM SIGN GA2 TIMES DIM TIMES SHE;Lo;0;L;;;;;N;;;;; 120C6;CUNEIFORM SIGN GA2 TIMES DUB;Lo;0;L;;;;;N;;;;; 120C7;CUNEIFORM SIGN GA2 TIMES EL;Lo;0;L;;;;;N;;;;; 120C8;CUNEIFORM SIGN GA2 TIMES EL PLUS LA;Lo;0;L;;;;;N;;;;; 120C9;CUNEIFORM SIGN GA2 TIMES EN;Lo;0;L;;;;;N;;;;; 120CA;CUNEIFORM SIGN GA2 TIMES EN TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; 120CB;CUNEIFORM SIGN GA2 TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; 120CC;CUNEIFORM SIGN GA2 TIMES GAR;Lo;0;L;;;;;N;;;;; 120CD;CUNEIFORM SIGN GA2 TIMES GI;Lo;0;L;;;;;N;;;;; 120CE;CUNEIFORM SIGN GA2 TIMES GI4;Lo;0;L;;;;;N;;;;; 120CF;CUNEIFORM SIGN GA2 TIMES GI4 PLUS A;Lo;0;L;;;;;N;;;;; 120D0;CUNEIFORM SIGN GA2 TIMES GIR2 PLUS SU;Lo;0;L;;;;;N;;;;; 120D1;CUNEIFORM SIGN GA2 TIMES HA PLUS LU PLUS ESH2;Lo;0;L;;;;;N;;;;; 120D2;CUNEIFORM SIGN GA2 TIMES HAL;Lo;0;L;;;;;N;;;;; 120D3;CUNEIFORM SIGN GA2 TIMES HAL PLUS LA;Lo;0;L;;;;;N;;;;; 120D4;CUNEIFORM SIGN GA2 TIMES HI PLUS LI;Lo;0;L;;;;;N;;;;; 120D5;CUNEIFORM SIGN GA2 TIMES HUB2;Lo;0;L;;;;;N;;;;; 120D6;CUNEIFORM SIGN GA2 TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; 120D7;CUNEIFORM SIGN GA2 TIMES ISH PLUS HU PLUS ASH;Lo;0;L;;;;;N;;;;; 120D8;CUNEIFORM SIGN GA2 TIMES KAK;Lo;0;L;;;;;N;;;;; 120D9;CUNEIFORM SIGN GA2 TIMES KASKAL;Lo;0;L;;;;;N;;;;; 120DA;CUNEIFORM SIGN GA2 TIMES KID;Lo;0;L;;;;;N;;;;; 120DB;CUNEIFORM SIGN GA2 TIMES KID PLUS LAL;Lo;0;L;;;;;N;;;;; 120DC;CUNEIFORM SIGN GA2 TIMES KU3 PLUS AN;Lo;0;L;;;;;N;;;;; 120DD;CUNEIFORM SIGN GA2 TIMES LA;Lo;0;L;;;;;N;;;;; 120DE;CUNEIFORM SIGN GA2 TIMES ME PLUS EN;Lo;0;L;;;;;N;;;;; 120DF;CUNEIFORM SIGN GA2 TIMES MI;Lo;0;L;;;;;N;;;;; 120E0;CUNEIFORM SIGN GA2 TIMES NUN;Lo;0;L;;;;;N;;;;; 120E1;CUNEIFORM SIGN GA2 TIMES NUN OVER NUN;Lo;0;L;;;;;N;;;;; 120E2;CUNEIFORM SIGN GA2 TIMES PA;Lo;0;L;;;;;N;;;;; 120E3;CUNEIFORM SIGN GA2 TIMES SAL;Lo;0;L;;;;;N;;;;; 120E4;CUNEIFORM SIGN GA2 TIMES SAR;Lo;0;L;;;;;N;;;;; 120E5;CUNEIFORM SIGN GA2 TIMES SHE;Lo;0;L;;;;;N;;;;; 120E6;CUNEIFORM SIGN GA2 TIMES SHE PLUS TUR;Lo;0;L;;;;;N;;;;; 120E7;CUNEIFORM SIGN GA2 TIMES SHID;Lo;0;L;;;;;N;;;;; 120E8;CUNEIFORM SIGN GA2 TIMES SUM;Lo;0;L;;;;;N;;;;; 120E9;CUNEIFORM SIGN GA2 TIMES TAK4;Lo;0;L;;;;;N;;;;; 120EA;CUNEIFORM SIGN GA2 TIMES U;Lo;0;L;;;;;N;;;;; 120EB;CUNEIFORM SIGN GA2 TIMES UD;Lo;0;L;;;;;N;;;;; 120EC;CUNEIFORM SIGN GA2 TIMES UD PLUS DU;Lo;0;L;;;;;N;;;;; 120ED;CUNEIFORM SIGN GA2 OVER GA2;Lo;0;L;;;;;N;;;;; 120EE;CUNEIFORM SIGN GABA;Lo;0;L;;;;;N;;;;; 120EF;CUNEIFORM SIGN GABA CROSSING GABA;Lo;0;L;;;;;N;;;;; 120F0;CUNEIFORM SIGN GAD;Lo;0;L;;;;;N;;;;; 120F1;CUNEIFORM SIGN GAD OVER GAD GAR OVER GAR;Lo;0;L;;;;;N;;;;; 120F2;CUNEIFORM SIGN GAL;Lo;0;L;;;;;N;;;;; 120F3;CUNEIFORM SIGN GAL GAD OVER GAD GAR OVER GAR;Lo;0;L;;;;;N;;;;; 120F4;CUNEIFORM SIGN GALAM;Lo;0;L;;;;;N;;;;; 120F5;CUNEIFORM SIGN GAM;Lo;0;L;;;;;N;;;;; 120F6;CUNEIFORM SIGN GAN;Lo;0;L;;;;;N;;;;; 120F7;CUNEIFORM SIGN GAN2;Lo;0;L;;;;;N;;;;; 120F8;CUNEIFORM SIGN GAN2 TENU;Lo;0;L;;;;;N;;;;; 120F9;CUNEIFORM SIGN GAN2 OVER GAN2;Lo;0;L;;;;;N;;;;; 120FA;CUNEIFORM SIGN GAN2 CROSSING GAN2;Lo;0;L;;;;;N;;;;; 120FB;CUNEIFORM SIGN GAR;Lo;0;L;;;;;N;;;;; 120FC;CUNEIFORM SIGN GAR3;Lo;0;L;;;;;N;;;;; 120FD;CUNEIFORM SIGN GASHAN;Lo;0;L;;;;;N;;;;; 120FE;CUNEIFORM SIGN GESHTIN;Lo;0;L;;;;;N;;;;; 120FF;CUNEIFORM SIGN GESHTIN TIMES KUR;Lo;0;L;;;;;N;;;;; 12100;CUNEIFORM SIGN GI;Lo;0;L;;;;;N;;;;; 12101;CUNEIFORM SIGN GI TIMES E;Lo;0;L;;;;;N;;;;; 12102;CUNEIFORM SIGN GI TIMES U;Lo;0;L;;;;;N;;;;; 12103;CUNEIFORM SIGN GI CROSSING GI;Lo;0;L;;;;;N;;;;; 12104;CUNEIFORM SIGN GI4;Lo;0;L;;;;;N;;;;; 12105;CUNEIFORM SIGN GI4 OVER GI4;Lo;0;L;;;;;N;;;;; 12106;CUNEIFORM SIGN GI4 CROSSING GI4;Lo;0;L;;;;;N;;;;; 12107;CUNEIFORM SIGN GIDIM;Lo;0;L;;;;;N;;;;; 12108;CUNEIFORM SIGN GIR2;Lo;0;L;;;;;N;;;;; 12109;CUNEIFORM SIGN GIR2 GUNU;Lo;0;L;;;;;N;;;;; 1210A;CUNEIFORM SIGN GIR3;Lo;0;L;;;;;N;;;;; 1210B;CUNEIFORM SIGN GIR3 TIMES A PLUS IGI;Lo;0;L;;;;;N;;;;; 1210C;CUNEIFORM SIGN GIR3 TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; 1210D;CUNEIFORM SIGN GIR3 TIMES IGI;Lo;0;L;;;;;N;;;;; 1210E;CUNEIFORM SIGN GIR3 TIMES LU PLUS IGI;Lo;0;L;;;;;N;;;;; 1210F;CUNEIFORM SIGN GIR3 TIMES PA;Lo;0;L;;;;;N;;;;; 12110;CUNEIFORM SIGN GISAL;Lo;0;L;;;;;N;;;;; 12111;CUNEIFORM SIGN GISH;Lo;0;L;;;;;N;;;;; 12112;CUNEIFORM SIGN GISH CROSSING GISH;Lo;0;L;;;;;N;;;;; 12113;CUNEIFORM SIGN GISH TIMES BAD;Lo;0;L;;;;;N;;;;; 12114;CUNEIFORM SIGN GISH TIMES TAK4;Lo;0;L;;;;;N;;;;; 12115;CUNEIFORM SIGN GISH TENU;Lo;0;L;;;;;N;;;;; 12116;CUNEIFORM SIGN GU;Lo;0;L;;;;;N;;;;; 12117;CUNEIFORM SIGN GU CROSSING GU;Lo;0;L;;;;;N;;;;; 12118;CUNEIFORM SIGN GU2;Lo;0;L;;;;;N;;;;; 12119;CUNEIFORM SIGN GU2 TIMES KAK;Lo;0;L;;;;;N;;;;; 1211A;CUNEIFORM SIGN GU2 TIMES KAK TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; 1211B;CUNEIFORM SIGN GU2 TIMES NUN;Lo;0;L;;;;;N;;;;; 1211C;CUNEIFORM SIGN GU2 TIMES SAL PLUS TUG2;Lo;0;L;;;;;N;;;;; 1211D;CUNEIFORM SIGN GU2 GUNU;Lo;0;L;;;;;N;;;;; 1211E;CUNEIFORM SIGN GUD;Lo;0;L;;;;;N;;;;; 1211F;CUNEIFORM SIGN GUD TIMES A PLUS KUR;Lo;0;L;;;;;N;;;;; 12120;CUNEIFORM SIGN GUD TIMES KUR;Lo;0;L;;;;;N;;;;; 12121;CUNEIFORM SIGN GUD OVER GUD LUGAL;Lo;0;L;;;;;N;;;;; 12122;CUNEIFORM SIGN GUL;Lo;0;L;;;;;N;;;;; 12123;CUNEIFORM SIGN GUM;Lo;0;L;;;;;N;;;;; 12124;CUNEIFORM SIGN GUM TIMES SHE;Lo;0;L;;;;;N;;;;; 12125;CUNEIFORM SIGN GUR;Lo;0;L;;;;;N;;;;; 12126;CUNEIFORM SIGN GUR7;Lo;0;L;;;;;N;;;;; 12127;CUNEIFORM SIGN GURUN;Lo;0;L;;;;;N;;;;; 12128;CUNEIFORM SIGN GURUSH;Lo;0;L;;;;;N;;;;; 12129;CUNEIFORM SIGN HA;Lo;0;L;;;;;N;;;;; 1212A;CUNEIFORM SIGN HA TENU;Lo;0;L;;;;;N;;;;; 1212B;CUNEIFORM SIGN HA GUNU;Lo;0;L;;;;;N;;;;; 1212C;CUNEIFORM SIGN HAL;Lo;0;L;;;;;N;;;;; 1212D;CUNEIFORM SIGN HI;Lo;0;L;;;;;N;;;;; 1212E;CUNEIFORM SIGN HI TIMES ASH;Lo;0;L;;;;;N;;;;; 1212F;CUNEIFORM SIGN HI TIMES ASH2;Lo;0;L;;;;;N;;;;; 12130;CUNEIFORM SIGN HI TIMES BAD;Lo;0;L;;;;;N;;;;; 12131;CUNEIFORM SIGN HI TIMES DISH;Lo;0;L;;;;;N;;;;; 12132;CUNEIFORM SIGN HI TIMES GAD;Lo;0;L;;;;;N;;;;; 12133;CUNEIFORM SIGN HI TIMES KIN;Lo;0;L;;;;;N;;;;; 12134;CUNEIFORM SIGN HI TIMES NUN;Lo;0;L;;;;;N;;;;; 12135;CUNEIFORM SIGN HI TIMES SHE;Lo;0;L;;;;;N;;;;; 12136;CUNEIFORM SIGN HI TIMES U;Lo;0;L;;;;;N;;;;; 12137;CUNEIFORM SIGN HU;Lo;0;L;;;;;N;;;;; 12138;CUNEIFORM SIGN HUB2;Lo;0;L;;;;;N;;;;; 12139;CUNEIFORM SIGN HUB2 TIMES AN;Lo;0;L;;;;;N;;;;; 1213A;CUNEIFORM SIGN HUB2 TIMES HAL;Lo;0;L;;;;;N;;;;; 1213B;CUNEIFORM SIGN HUB2 TIMES KASKAL;Lo;0;L;;;;;N;;;;; 1213C;CUNEIFORM SIGN HUB2 TIMES LISH;Lo;0;L;;;;;N;;;;; 1213D;CUNEIFORM SIGN HUB2 TIMES UD;Lo;0;L;;;;;N;;;;; 1213E;CUNEIFORM SIGN HUL2;Lo;0;L;;;;;N;;;;; 1213F;CUNEIFORM SIGN I;Lo;0;L;;;;;N;;;;; 12140;CUNEIFORM SIGN I A;Lo;0;L;;;;;N;;;;; 12141;CUNEIFORM SIGN IB;Lo;0;L;;;;;N;;;;; 12142;CUNEIFORM SIGN IDIM;Lo;0;L;;;;;N;;;;; 12143;CUNEIFORM SIGN IDIM OVER IDIM BUR;Lo;0;L;;;;;N;;;;; 12144;CUNEIFORM SIGN IDIM OVER IDIM SQUARED;Lo;0;L;;;;;N;;;;; 12145;CUNEIFORM SIGN IG;Lo;0;L;;;;;N;;;;; 12146;CUNEIFORM SIGN IGI;Lo;0;L;;;;;N;;;;; 12147;CUNEIFORM SIGN IGI DIB;Lo;0;L;;;;;N;;;;; 12148;CUNEIFORM SIGN IGI RI;Lo;0;L;;;;;N;;;;; 12149;CUNEIFORM SIGN IGI OVER IGI SHIR OVER SHIR UD OVER UD;Lo;0;L;;;;;N;;;;; 1214A;CUNEIFORM SIGN IGI GUNU;Lo;0;L;;;;;N;;;;; 1214B;CUNEIFORM SIGN IL;Lo;0;L;;;;;N;;;;; 1214C;CUNEIFORM SIGN IL TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; 1214D;CUNEIFORM SIGN IL2;Lo;0;L;;;;;N;;;;; 1214E;CUNEIFORM SIGN IM;Lo;0;L;;;;;N;;;;; 1214F;CUNEIFORM SIGN IM TIMES TAK4;Lo;0;L;;;;;N;;;;; 12150;CUNEIFORM SIGN IM CROSSING IM;Lo;0;L;;;;;N;;;;; 12151;CUNEIFORM SIGN IM OPPOSING IM;Lo;0;L;;;;;N;;;;; 12152;CUNEIFORM SIGN IM SQUARED;Lo;0;L;;;;;N;;;;; 12153;CUNEIFORM SIGN IMIN;Lo;0;L;;;;;N;;;;; 12154;CUNEIFORM SIGN IN;Lo;0;L;;;;;N;;;;; 12155;CUNEIFORM SIGN IR;Lo;0;L;;;;;N;;;;; 12156;CUNEIFORM SIGN ISH;Lo;0;L;;;;;N;;;;; 12157;CUNEIFORM SIGN KA;Lo;0;L;;;;;N;;;;; 12158;CUNEIFORM SIGN KA TIMES A;Lo;0;L;;;;;N;;;;; 12159;CUNEIFORM SIGN KA TIMES AD;Lo;0;L;;;;;N;;;;; 1215A;CUNEIFORM SIGN KA TIMES AD PLUS KU3;Lo;0;L;;;;;N;;;;; 1215B;CUNEIFORM SIGN KA TIMES ASH2;Lo;0;L;;;;;N;;;;; 1215C;CUNEIFORM SIGN KA TIMES BAD;Lo;0;L;;;;;N;;;;; 1215D;CUNEIFORM SIGN KA TIMES BALAG;Lo;0;L;;;;;N;;;;; 1215E;CUNEIFORM SIGN KA TIMES BAR;Lo;0;L;;;;;N;;;;; 1215F;CUNEIFORM SIGN KA TIMES BI;Lo;0;L;;;;;N;;;;; 12160;CUNEIFORM SIGN KA TIMES ERIN2;Lo;0;L;;;;;N;;;;; 12161;CUNEIFORM SIGN KA TIMES ESH2;Lo;0;L;;;;;N;;;;; 12162;CUNEIFORM SIGN KA TIMES GA;Lo;0;L;;;;;N;;;;; 12163;CUNEIFORM SIGN KA TIMES GAL;Lo;0;L;;;;;N;;;;; 12164;CUNEIFORM SIGN KA TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; 12165;CUNEIFORM SIGN KA TIMES GAR;Lo;0;L;;;;;N;;;;; 12166;CUNEIFORM SIGN KA TIMES GAR PLUS SHA3 PLUS A;Lo;0;L;;;;;N;;;;; 12167;CUNEIFORM SIGN KA TIMES GI;Lo;0;L;;;;;N;;;;; 12168;CUNEIFORM SIGN KA TIMES GIR2;Lo;0;L;;;;;N;;;;; 12169;CUNEIFORM SIGN KA TIMES GISH PLUS SAR;Lo;0;L;;;;;N;;;;; 1216A;CUNEIFORM SIGN KA TIMES GISH CROSSING GISH;Lo;0;L;;;;;N;;;;; 1216B;CUNEIFORM SIGN KA TIMES GU;Lo;0;L;;;;;N;;;;; 1216C;CUNEIFORM SIGN KA TIMES GUR7;Lo;0;L;;;;;N;;;;; 1216D;CUNEIFORM SIGN KA TIMES IGI;Lo;0;L;;;;;N;;;;; 1216E;CUNEIFORM SIGN KA TIMES IM;Lo;0;L;;;;;N;;;;; 1216F;CUNEIFORM SIGN KA TIMES KAK;Lo;0;L;;;;;N;;;;; 12170;CUNEIFORM SIGN KA TIMES KI;Lo;0;L;;;;;N;;;;; 12171;CUNEIFORM SIGN KA TIMES KID;Lo;0;L;;;;;N;;;;; 12172;CUNEIFORM SIGN KA TIMES LI;Lo;0;L;;;;;N;;;;; 12173;CUNEIFORM SIGN KA TIMES LU;Lo;0;L;;;;;N;;;;; 12174;CUNEIFORM SIGN KA TIMES ME;Lo;0;L;;;;;N;;;;; 12175;CUNEIFORM SIGN KA TIMES ME PLUS DU;Lo;0;L;;;;;N;;;;; 12176;CUNEIFORM SIGN KA TIMES ME PLUS GI;Lo;0;L;;;;;N;;;;; 12177;CUNEIFORM SIGN KA TIMES ME PLUS TE;Lo;0;L;;;;;N;;;;; 12178;CUNEIFORM SIGN KA TIMES MI;Lo;0;L;;;;;N;;;;; 12179;CUNEIFORM SIGN KA TIMES MI PLUS NUNUZ;Lo;0;L;;;;;N;;;;; 1217A;CUNEIFORM SIGN KA TIMES NE;Lo;0;L;;;;;N;;;;; 1217B;CUNEIFORM SIGN KA TIMES NUN;Lo;0;L;;;;;N;;;;; 1217C;CUNEIFORM SIGN KA TIMES PI;Lo;0;L;;;;;N;;;;; 1217D;CUNEIFORM SIGN KA TIMES RU;Lo;0;L;;;;;N;;;;; 1217E;CUNEIFORM SIGN KA TIMES SA;Lo;0;L;;;;;N;;;;; 1217F;CUNEIFORM SIGN KA TIMES SAR;Lo;0;L;;;;;N;;;;; 12180;CUNEIFORM SIGN KA TIMES SHA;Lo;0;L;;;;;N;;;;; 12181;CUNEIFORM SIGN KA TIMES SHE;Lo;0;L;;;;;N;;;;; 12182;CUNEIFORM SIGN KA TIMES SHID;Lo;0;L;;;;;N;;;;; 12183;CUNEIFORM SIGN KA TIMES SHU;Lo;0;L;;;;;N;;;;; 12184;CUNEIFORM SIGN KA TIMES SIG;Lo;0;L;;;;;N;;;;; 12185;CUNEIFORM SIGN KA TIMES SUHUR;Lo;0;L;;;;;N;;;;; 12186;CUNEIFORM SIGN KA TIMES TAR;Lo;0;L;;;;;N;;;;; 12187;CUNEIFORM SIGN KA TIMES U;Lo;0;L;;;;;N;;;;; 12188;CUNEIFORM SIGN KA TIMES U2;Lo;0;L;;;;;N;;;;; 12189;CUNEIFORM SIGN KA TIMES UD;Lo;0;L;;;;;N;;;;; 1218A;CUNEIFORM SIGN KA TIMES UMUM TIMES PA;Lo;0;L;;;;;N;;;;; 1218B;CUNEIFORM SIGN KA TIMES USH;Lo;0;L;;;;;N;;;;; 1218C;CUNEIFORM SIGN KA TIMES ZI;Lo;0;L;;;;;N;;;;; 1218D;CUNEIFORM SIGN KA2;Lo;0;L;;;;;N;;;;; 1218E;CUNEIFORM SIGN KA2 CROSSING KA2;Lo;0;L;;;;;N;;;;; 1218F;CUNEIFORM SIGN KAB;Lo;0;L;;;;;N;;;;; 12190;CUNEIFORM SIGN KAD2;Lo;0;L;;;;;N;;;;; 12191;CUNEIFORM SIGN KAD3;Lo;0;L;;;;;N;;;;; 12192;CUNEIFORM SIGN KAD4;Lo;0;L;;;;;N;;;;; 12193;CUNEIFORM SIGN KAD5;Lo;0;L;;;;;N;;;;; 12194;CUNEIFORM SIGN KAD5 OVER KAD5;Lo;0;L;;;;;N;;;;; 12195;CUNEIFORM SIGN KAK;Lo;0;L;;;;;N;;;;; 12196;CUNEIFORM SIGN KAK TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; 12197;CUNEIFORM SIGN KAL;Lo;0;L;;;;;N;;;;; 12198;CUNEIFORM SIGN KAL TIMES BAD;Lo;0;L;;;;;N;;;;; 12199;CUNEIFORM SIGN KAL CROSSING KAL;Lo;0;L;;;;;N;;;;; 1219A;CUNEIFORM SIGN KAM2;Lo;0;L;;;;;N;;;;; 1219B;CUNEIFORM SIGN KAM4;Lo;0;L;;;;;N;;;;; 1219C;CUNEIFORM SIGN KASKAL;Lo;0;L;;;;;N;;;;; 1219D;CUNEIFORM SIGN KASKAL LAGAB TIMES U OVER LAGAB TIMES U;Lo;0;L;;;;;N;;;;; 1219E;CUNEIFORM SIGN KASKAL OVER KASKAL LAGAB TIMES U OVER LAGAB TIMES U;Lo;0;L;;;;;N;;;;; 1219F;CUNEIFORM SIGN KESH2;Lo;0;L;;;;;N;;;;; 121A0;CUNEIFORM SIGN KI;Lo;0;L;;;;;N;;;;; 121A1;CUNEIFORM SIGN KI TIMES BAD;Lo;0;L;;;;;N;;;;; 121A2;CUNEIFORM SIGN KI TIMES U;Lo;0;L;;;;;N;;;;; 121A3;CUNEIFORM SIGN KI TIMES UD;Lo;0;L;;;;;N;;;;; 121A4;CUNEIFORM SIGN KID;Lo;0;L;;;;;N;;;;; 121A5;CUNEIFORM SIGN KIN;Lo;0;L;;;;;N;;;;; 121A6;CUNEIFORM SIGN KISAL;Lo;0;L;;;;;N;;;;; 121A7;CUNEIFORM SIGN KISH;Lo;0;L;;;;;N;;;;; 121A8;CUNEIFORM SIGN KISIM5;Lo;0;L;;;;;N;;;;; 121A9;CUNEIFORM SIGN KISIM5 OVER KISIM5;Lo;0;L;;;;;N;;;;; 121AA;CUNEIFORM SIGN KU;Lo;0;L;;;;;N;;;;; 121AB;CUNEIFORM SIGN KU OVER HI TIMES ASH2 KU OVER HI TIMES ASH2;Lo;0;L;;;;;N;;;;; 121AC;CUNEIFORM SIGN KU3;Lo;0;L;;;;;N;;;;; 121AD;CUNEIFORM SIGN KU4;Lo;0;L;;;;;N;;;;; 121AE;CUNEIFORM SIGN KU4 VARIANT FORM;Lo;0;L;;;;;N;;;;; 121AF;CUNEIFORM SIGN KU7;Lo;0;L;;;;;N;;;;; 121B0;CUNEIFORM SIGN KUL;Lo;0;L;;;;;N;;;;; 121B1;CUNEIFORM SIGN KUL GUNU;Lo;0;L;;;;;N;;;;; 121B2;CUNEIFORM SIGN KUN;Lo;0;L;;;;;N;;;;; 121B3;CUNEIFORM SIGN KUR;Lo;0;L;;;;;N;;;;; 121B4;CUNEIFORM SIGN KUR OPPOSING KUR;Lo;0;L;;;;;N;;;;; 121B5;CUNEIFORM SIGN KUSHU2;Lo;0;L;;;;;N;;;;; 121B6;CUNEIFORM SIGN KWU318;Lo;0;L;;;;;N;;;;; 121B7;CUNEIFORM SIGN LA;Lo;0;L;;;;;N;;;;; 121B8;CUNEIFORM SIGN LAGAB;Lo;0;L;;;;;N;;;;; 121B9;CUNEIFORM SIGN LAGAB TIMES A;Lo;0;L;;;;;N;;;;; 121BA;CUNEIFORM SIGN LAGAB TIMES A PLUS DA PLUS HA;Lo;0;L;;;;;N;;;;; 121BB;CUNEIFORM SIGN LAGAB TIMES A PLUS GAR;Lo;0;L;;;;;N;;;;; 121BC;CUNEIFORM SIGN LAGAB TIMES A PLUS LAL;Lo;0;L;;;;;N;;;;; 121BD;CUNEIFORM SIGN LAGAB TIMES AL;Lo;0;L;;;;;N;;;;; 121BE;CUNEIFORM SIGN LAGAB TIMES AN;Lo;0;L;;;;;N;;;;; 121BF;CUNEIFORM SIGN LAGAB TIMES ASH ZIDA TENU;Lo;0;L;;;;;N;;;;; 121C0;CUNEIFORM SIGN LAGAB TIMES BAD;Lo;0;L;;;;;N;;;;; 121C1;CUNEIFORM SIGN LAGAB TIMES BI;Lo;0;L;;;;;N;;;;; 121C2;CUNEIFORM SIGN LAGAB TIMES DAR;Lo;0;L;;;;;N;;;;; 121C3;CUNEIFORM SIGN LAGAB TIMES EN;Lo;0;L;;;;;N;;;;; 121C4;CUNEIFORM SIGN LAGAB TIMES GA;Lo;0;L;;;;;N;;;;; 121C5;CUNEIFORM SIGN LAGAB TIMES GAR;Lo;0;L;;;;;N;;;;; 121C6;CUNEIFORM SIGN LAGAB TIMES GUD;Lo;0;L;;;;;N;;;;; 121C7;CUNEIFORM SIGN LAGAB TIMES GUD PLUS GUD;Lo;0;L;;;;;N;;;;; 121C8;CUNEIFORM SIGN LAGAB TIMES HA;Lo;0;L;;;;;N;;;;; 121C9;CUNEIFORM SIGN LAGAB TIMES HAL;Lo;0;L;;;;;N;;;;; 121CA;CUNEIFORM SIGN LAGAB TIMES HI TIMES NUN;Lo;0;L;;;;;N;;;;; 121CB;CUNEIFORM SIGN LAGAB TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; 121CC;CUNEIFORM SIGN LAGAB TIMES IM;Lo;0;L;;;;;N;;;;; 121CD;CUNEIFORM SIGN LAGAB TIMES IM PLUS HA;Lo;0;L;;;;;N;;;;; 121CE;CUNEIFORM SIGN LAGAB TIMES IM PLUS LU;Lo;0;L;;;;;N;;;;; 121CF;CUNEIFORM SIGN LAGAB TIMES KI;Lo;0;L;;;;;N;;;;; 121D0;CUNEIFORM SIGN LAGAB TIMES KIN;Lo;0;L;;;;;N;;;;; 121D1;CUNEIFORM SIGN LAGAB TIMES KU3;Lo;0;L;;;;;N;;;;; 121D2;CUNEIFORM SIGN LAGAB TIMES KUL;Lo;0;L;;;;;N;;;;; 121D3;CUNEIFORM SIGN LAGAB TIMES KUL PLUS HI PLUS A;Lo;0;L;;;;;N;;;;; 121D4;CUNEIFORM SIGN LAGAB TIMES LAGAB;Lo;0;L;;;;;N;;;;; 121D5;CUNEIFORM SIGN LAGAB TIMES LISH;Lo;0;L;;;;;N;;;;; 121D6;CUNEIFORM SIGN LAGAB TIMES LU;Lo;0;L;;;;;N;;;;; 121D7;CUNEIFORM SIGN LAGAB TIMES LUL;Lo;0;L;;;;;N;;;;; 121D8;CUNEIFORM SIGN LAGAB TIMES ME;Lo;0;L;;;;;N;;;;; 121D9;CUNEIFORM SIGN LAGAB TIMES ME PLUS EN;Lo;0;L;;;;;N;;;;; 121DA;CUNEIFORM SIGN LAGAB TIMES MUSH;Lo;0;L;;;;;N;;;;; 121DB;CUNEIFORM SIGN LAGAB TIMES NE;Lo;0;L;;;;;N;;;;; 121DC;CUNEIFORM SIGN LAGAB TIMES SHE PLUS SUM;Lo;0;L;;;;;N;;;;; 121DD;CUNEIFORM SIGN LAGAB TIMES SHITA PLUS GISH PLUS ERIN2;Lo;0;L;;;;;N;;;;; 121DE;CUNEIFORM SIGN LAGAB TIMES SHITA PLUS GISH TENU;Lo;0;L;;;;;N;;;;; 121DF;CUNEIFORM SIGN LAGAB TIMES SHU2;Lo;0;L;;;;;N;;;;; 121E0;CUNEIFORM SIGN LAGAB TIMES SHU2 PLUS SHU2;Lo;0;L;;;;;N;;;;; 121E1;CUNEIFORM SIGN LAGAB TIMES SUM;Lo;0;L;;;;;N;;;;; 121E2;CUNEIFORM SIGN LAGAB TIMES TAG;Lo;0;L;;;;;N;;;;; 121E3;CUNEIFORM SIGN LAGAB TIMES TAK4;Lo;0;L;;;;;N;;;;; 121E4;CUNEIFORM SIGN LAGAB TIMES TE PLUS A PLUS SU PLUS NA;Lo;0;L;;;;;N;;;;; 121E5;CUNEIFORM SIGN LAGAB TIMES U;Lo;0;L;;;;;N;;;;; 121E6;CUNEIFORM SIGN LAGAB TIMES U PLUS A;Lo;0;L;;;;;N;;;;; 121E7;CUNEIFORM SIGN LAGAB TIMES U PLUS U PLUS U;Lo;0;L;;;;;N;;;;; 121E8;CUNEIFORM SIGN LAGAB TIMES U2 PLUS ASH;Lo;0;L;;;;;N;;;;; 121E9;CUNEIFORM SIGN LAGAB TIMES UD;Lo;0;L;;;;;N;;;;; 121EA;CUNEIFORM SIGN LAGAB TIMES USH;Lo;0;L;;;;;N;;;;; 121EB;CUNEIFORM SIGN LAGAB SQUARED;Lo;0;L;;;;;N;;;;; 121EC;CUNEIFORM SIGN LAGAR;Lo;0;L;;;;;N;;;;; 121ED;CUNEIFORM SIGN LAGAR TIMES SHE;Lo;0;L;;;;;N;;;;; 121EE;CUNEIFORM SIGN LAGAR TIMES SHE PLUS SUM;Lo;0;L;;;;;N;;;;; 121EF;CUNEIFORM SIGN LAGAR GUNU;Lo;0;L;;;;;N;;;;; 121F0;CUNEIFORM SIGN LAGAR GUNU OVER LAGAR GUNU SHE;Lo;0;L;;;;;N;;;;; 121F1;CUNEIFORM SIGN LAHSHU;Lo;0;L;;;;;N;;;;; 121F2;CUNEIFORM SIGN LAL;Lo;0;L;;;;;N;;;;; 121F3;CUNEIFORM SIGN LAL TIMES LAL;Lo;0;L;;;;;N;;;;; 121F4;CUNEIFORM SIGN LAM;Lo;0;L;;;;;N;;;;; 121F5;CUNEIFORM SIGN LAM TIMES KUR;Lo;0;L;;;;;N;;;;; 121F6;CUNEIFORM SIGN LAM TIMES KUR PLUS RU;Lo;0;L;;;;;N;;;;; 121F7;CUNEIFORM SIGN LI;Lo;0;L;;;;;N;;;;; 121F8;CUNEIFORM SIGN LIL;Lo;0;L;;;;;N;;;;; 121F9;CUNEIFORM SIGN LIMMU2;Lo;0;L;;;;;N;;;;; 121FA;CUNEIFORM SIGN LISH;Lo;0;L;;;;;N;;;;; 121FB;CUNEIFORM SIGN LU;Lo;0;L;;;;;N;;;;; 121FC;CUNEIFORM SIGN LU TIMES BAD;Lo;0;L;;;;;N;;;;; 121FD;CUNEIFORM SIGN LU2;Lo;0;L;;;;;N;;;;; 121FE;CUNEIFORM SIGN LU2 TIMES AL;Lo;0;L;;;;;N;;;;; 121FF;CUNEIFORM SIGN LU2 TIMES BAD;Lo;0;L;;;;;N;;;;; 12200;CUNEIFORM SIGN LU2 TIMES ESH2;Lo;0;L;;;;;N;;;;; 12201;CUNEIFORM SIGN LU2 TIMES ESH2 TENU;Lo;0;L;;;;;N;;;;; 12202;CUNEIFORM SIGN LU2 TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; 12203;CUNEIFORM SIGN LU2 TIMES HI TIMES BAD;Lo;0;L;;;;;N;;;;; 12204;CUNEIFORM SIGN LU2 TIMES IM;Lo;0;L;;;;;N;;;;; 12205;CUNEIFORM SIGN LU2 TIMES KAD2;Lo;0;L;;;;;N;;;;; 12206;CUNEIFORM SIGN LU2 TIMES KAD3;Lo;0;L;;;;;N;;;;; 12207;CUNEIFORM SIGN LU2 TIMES KAD3 PLUS ASH;Lo;0;L;;;;;N;;;;; 12208;CUNEIFORM SIGN LU2 TIMES KI;Lo;0;L;;;;;N;;;;; 12209;CUNEIFORM SIGN LU2 TIMES LA PLUS ASH;Lo;0;L;;;;;N;;;;; 1220A;CUNEIFORM SIGN LU2 TIMES LAGAB;Lo;0;L;;;;;N;;;;; 1220B;CUNEIFORM SIGN LU2 TIMES ME PLUS EN;Lo;0;L;;;;;N;;;;; 1220C;CUNEIFORM SIGN LU2 TIMES NE;Lo;0;L;;;;;N;;;;; 1220D;CUNEIFORM SIGN LU2 TIMES NU;Lo;0;L;;;;;N;;;;; 1220E;CUNEIFORM SIGN LU2 TIMES SI PLUS ASH;Lo;0;L;;;;;N;;;;; 1220F;CUNEIFORM SIGN LU2 TIMES SIK2 PLUS BU;Lo;0;L;;;;;N;;;;; 12210;CUNEIFORM SIGN LU2 TIMES TUG2;Lo;0;L;;;;;N;;;;; 12211;CUNEIFORM SIGN LU2 TENU;Lo;0;L;;;;;N;;;;; 12212;CUNEIFORM SIGN LU2 CROSSING LU2;Lo;0;L;;;;;N;;;;; 12213;CUNEIFORM SIGN LU2 OPPOSING LU2;Lo;0;L;;;;;N;;;;; 12214;CUNEIFORM SIGN LU2 SQUARED;Lo;0;L;;;;;N;;;;; 12215;CUNEIFORM SIGN LU2 SHESHIG;Lo;0;L;;;;;N;;;;; 12216;CUNEIFORM SIGN LU3;Lo;0;L;;;;;N;;;;; 12217;CUNEIFORM SIGN LUGAL;Lo;0;L;;;;;N;;;;; 12218;CUNEIFORM SIGN LUGAL OVER LUGAL;Lo;0;L;;;;;N;;;;; 12219;CUNEIFORM SIGN LUGAL OPPOSING LUGAL;Lo;0;L;;;;;N;;;;; 1221A;CUNEIFORM SIGN LUGAL SHESHIG;Lo;0;L;;;;;N;;;;; 1221B;CUNEIFORM SIGN LUH;Lo;0;L;;;;;N;;;;; 1221C;CUNEIFORM SIGN LUL;Lo;0;L;;;;;N;;;;; 1221D;CUNEIFORM SIGN LUM;Lo;0;L;;;;;N;;;;; 1221E;CUNEIFORM SIGN LUM OVER LUM;Lo;0;L;;;;;N;;;;; 1221F;CUNEIFORM SIGN LUM OVER LUM GAR OVER GAR;Lo;0;L;;;;;N;;;;; 12220;CUNEIFORM SIGN MA;Lo;0;L;;;;;N;;;;; 12221;CUNEIFORM SIGN MA TIMES TAK4;Lo;0;L;;;;;N;;;;; 12222;CUNEIFORM SIGN MA GUNU;Lo;0;L;;;;;N;;;;; 12223;CUNEIFORM SIGN MA2;Lo;0;L;;;;;N;;;;; 12224;CUNEIFORM SIGN MAH;Lo;0;L;;;;;N;;;;; 12225;CUNEIFORM SIGN MAR;Lo;0;L;;;;;N;;;;; 12226;CUNEIFORM SIGN MASH;Lo;0;L;;;;;N;;;;; 12227;CUNEIFORM SIGN MASH2;Lo;0;L;;;;;N;;;;; 12228;CUNEIFORM SIGN ME;Lo;0;L;;;;;N;;;;; 12229;CUNEIFORM SIGN MES;Lo;0;L;;;;;N;;;;; 1222A;CUNEIFORM SIGN MI;Lo;0;L;;;;;N;;;;; 1222B;CUNEIFORM SIGN MIN;Lo;0;L;;;;;N;;;;; 1222C;CUNEIFORM SIGN MU;Lo;0;L;;;;;N;;;;; 1222D;CUNEIFORM SIGN MU OVER MU;Lo;0;L;;;;;N;;;;; 1222E;CUNEIFORM SIGN MUG;Lo;0;L;;;;;N;;;;; 1222F;CUNEIFORM SIGN MUG GUNU;Lo;0;L;;;;;N;;;;; 12230;CUNEIFORM SIGN MUNSUB;Lo;0;L;;;;;N;;;;; 12231;CUNEIFORM SIGN MURGU2;Lo;0;L;;;;;N;;;;; 12232;CUNEIFORM SIGN MUSH;Lo;0;L;;;;;N;;;;; 12233;CUNEIFORM SIGN MUSH TIMES A;Lo;0;L;;;;;N;;;;; 12234;CUNEIFORM SIGN MUSH TIMES KUR;Lo;0;L;;;;;N;;;;; 12235;CUNEIFORM SIGN MUSH TIMES ZA;Lo;0;L;;;;;N;;;;; 12236;CUNEIFORM SIGN MUSH OVER MUSH;Lo;0;L;;;;;N;;;;; 12237;CUNEIFORM SIGN MUSH OVER MUSH TIMES A PLUS NA;Lo;0;L;;;;;N;;;;; 12238;CUNEIFORM SIGN MUSH CROSSING MUSH;Lo;0;L;;;;;N;;;;; 12239;CUNEIFORM SIGN MUSH3;Lo;0;L;;;;;N;;;;; 1223A;CUNEIFORM SIGN MUSH3 TIMES A;Lo;0;L;;;;;N;;;;; 1223B;CUNEIFORM SIGN MUSH3 TIMES A PLUS DI;Lo;0;L;;;;;N;;;;; 1223C;CUNEIFORM SIGN MUSH3 TIMES DI;Lo;0;L;;;;;N;;;;; 1223D;CUNEIFORM SIGN MUSH3 GUNU;Lo;0;L;;;;;N;;;;; 1223E;CUNEIFORM SIGN NA;Lo;0;L;;;;;N;;;;; 1223F;CUNEIFORM SIGN NA2;Lo;0;L;;;;;N;;;;; 12240;CUNEIFORM SIGN NAGA;Lo;0;L;;;;;N;;;;; 12241;CUNEIFORM SIGN NAGA INVERTED;Lo;0;L;;;;;N;;;;; 12242;CUNEIFORM SIGN NAGA TIMES SHU TENU;Lo;0;L;;;;;N;;;;; 12243;CUNEIFORM SIGN NAGA OPPOSING NAGA;Lo;0;L;;;;;N;;;;; 12244;CUNEIFORM SIGN NAGAR;Lo;0;L;;;;;N;;;;; 12245;CUNEIFORM SIGN NAM NUTILLU;Lo;0;L;;;;;N;;;;; 12246;CUNEIFORM SIGN NAM;Lo;0;L;;;;;N;;;;; 12247;CUNEIFORM SIGN NAM2;Lo;0;L;;;;;N;;;;; 12248;CUNEIFORM SIGN NE;Lo;0;L;;;;;N;;;;; 12249;CUNEIFORM SIGN NE TIMES A;Lo;0;L;;;;;N;;;;; 1224A;CUNEIFORM SIGN NE TIMES UD;Lo;0;L;;;;;N;;;;; 1224B;CUNEIFORM SIGN NE SHESHIG;Lo;0;L;;;;;N;;;;; 1224C;CUNEIFORM SIGN NI;Lo;0;L;;;;;N;;;;; 1224D;CUNEIFORM SIGN NI TIMES E;Lo;0;L;;;;;N;;;;; 1224E;CUNEIFORM SIGN NI2;Lo;0;L;;;;;N;;;;; 1224F;CUNEIFORM SIGN NIM;Lo;0;L;;;;;N;;;;; 12250;CUNEIFORM SIGN NIM TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; 12251;CUNEIFORM SIGN NIM TIMES GAR PLUS GAN2 TENU;Lo;0;L;;;;;N;;;;; 12252;CUNEIFORM SIGN NINDA2;Lo;0;L;;;;;N;;;;; 12253;CUNEIFORM SIGN NINDA2 TIMES AN;Lo;0;L;;;;;N;;;;; 12254;CUNEIFORM SIGN NINDA2 TIMES ASH;Lo;0;L;;;;;N;;;;; 12255;CUNEIFORM SIGN NINDA2 TIMES ASH PLUS ASH;Lo;0;L;;;;;N;;;;; 12256;CUNEIFORM SIGN NINDA2 TIMES GUD;Lo;0;L;;;;;N;;;;; 12257;CUNEIFORM SIGN NINDA2 TIMES ME PLUS GAN2 TENU;Lo;0;L;;;;;N;;;;; 12258;CUNEIFORM SIGN NINDA2 TIMES NE;Lo;0;L;;;;;N;;;;; 12259;CUNEIFORM SIGN NINDA2 TIMES NUN;Lo;0;L;;;;;N;;;;; 1225A;CUNEIFORM SIGN NINDA2 TIMES SHE;Lo;0;L;;;;;N;;;;; 1225B;CUNEIFORM SIGN NINDA2 TIMES SHE PLUS A AN;Lo;0;L;;;;;N;;;;; 1225C;CUNEIFORM SIGN NINDA2 TIMES SHE PLUS ASH;Lo;0;L;;;;;N;;;;; 1225D;CUNEIFORM SIGN NINDA2 TIMES SHE PLUS ASH PLUS ASH;Lo;0;L;;;;;N;;;;; 1225E;CUNEIFORM SIGN NINDA2 TIMES U2 PLUS ASH;Lo;0;L;;;;;N;;;;; 1225F;CUNEIFORM SIGN NINDA2 TIMES USH;Lo;0;L;;;;;N;;;;; 12260;CUNEIFORM SIGN NISAG;Lo;0;L;;;;;N;;;;; 12261;CUNEIFORM SIGN NU;Lo;0;L;;;;;N;;;;; 12262;CUNEIFORM SIGN NU11;Lo;0;L;;;;;N;;;;; 12263;CUNEIFORM SIGN NUN;Lo;0;L;;;;;N;;;;; 12264;CUNEIFORM SIGN NUN LAGAR TIMES GAR;Lo;0;L;;;;;N;;;;; 12265;CUNEIFORM SIGN NUN LAGAR TIMES MASH;Lo;0;L;;;;;N;;;;; 12266;CUNEIFORM SIGN NUN LAGAR TIMES SAL;Lo;0;L;;;;;N;;;;; 12267;CUNEIFORM SIGN NUN LAGAR TIMES SAL OVER NUN LAGAR TIMES SAL;Lo;0;L;;;;;N;;;;; 12268;CUNEIFORM SIGN NUN LAGAR TIMES USH;Lo;0;L;;;;;N;;;;; 12269;CUNEIFORM SIGN NUN TENU;Lo;0;L;;;;;N;;;;; 1226A;CUNEIFORM SIGN NUN OVER NUN;Lo;0;L;;;;;N;;;;; 1226B;CUNEIFORM SIGN NUN CROSSING NUN;Lo;0;L;;;;;N;;;;; 1226C;CUNEIFORM SIGN NUN CROSSING NUN LAGAR OVER LAGAR;Lo;0;L;;;;;N;;;;; 1226D;CUNEIFORM SIGN NUNUZ;Lo;0;L;;;;;N;;;;; 1226E;CUNEIFORM SIGN NUNUZ AB2 TIMES ASHGAB;Lo;0;L;;;;;N;;;;; 1226F;CUNEIFORM SIGN NUNUZ AB2 TIMES BI;Lo;0;L;;;;;N;;;;; 12270;CUNEIFORM SIGN NUNUZ AB2 TIMES DUG;Lo;0;L;;;;;N;;;;; 12271;CUNEIFORM SIGN NUNUZ AB2 TIMES GUD;Lo;0;L;;;;;N;;;;; 12272;CUNEIFORM SIGN NUNUZ AB2 TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; 12273;CUNEIFORM SIGN NUNUZ AB2 TIMES KAD3;Lo;0;L;;;;;N;;;;; 12274;CUNEIFORM SIGN NUNUZ AB2 TIMES LA;Lo;0;L;;;;;N;;;;; 12275;CUNEIFORM SIGN NUNUZ AB2 TIMES NE;Lo;0;L;;;;;N;;;;; 12276;CUNEIFORM SIGN NUNUZ AB2 TIMES SILA3;Lo;0;L;;;;;N;;;;; 12277;CUNEIFORM SIGN NUNUZ AB2 TIMES U2;Lo;0;L;;;;;N;;;;; 12278;CUNEIFORM SIGN NUNUZ KISIM5 TIMES BI;Lo;0;L;;;;;N;;;;; 12279;CUNEIFORM SIGN NUNUZ KISIM5 TIMES BI U;Lo;0;L;;;;;N;;;;; 1227A;CUNEIFORM SIGN PA;Lo;0;L;;;;;N;;;;; 1227B;CUNEIFORM SIGN PAD;Lo;0;L;;;;;N;;;;; 1227C;CUNEIFORM SIGN PAN;Lo;0;L;;;;;N;;;;; 1227D;CUNEIFORM SIGN PAP;Lo;0;L;;;;;N;;;;; 1227E;CUNEIFORM SIGN PESH2;Lo;0;L;;;;;N;;;;; 1227F;CUNEIFORM SIGN PI;Lo;0;L;;;;;N;;;;; 12280;CUNEIFORM SIGN PI TIMES A;Lo;0;L;;;;;N;;;;; 12281;CUNEIFORM SIGN PI TIMES AB;Lo;0;L;;;;;N;;;;; 12282;CUNEIFORM SIGN PI TIMES BI;Lo;0;L;;;;;N;;;;; 12283;CUNEIFORM SIGN PI TIMES BU;Lo;0;L;;;;;N;;;;; 12284;CUNEIFORM SIGN PI TIMES E;Lo;0;L;;;;;N;;;;; 12285;CUNEIFORM SIGN PI TIMES I;Lo;0;L;;;;;N;;;;; 12286;CUNEIFORM SIGN PI TIMES IB;Lo;0;L;;;;;N;;;;; 12287;CUNEIFORM SIGN PI TIMES U;Lo;0;L;;;;;N;;;;; 12288;CUNEIFORM SIGN PI TIMES U2;Lo;0;L;;;;;N;;;;; 12289;CUNEIFORM SIGN PI CROSSING PI;Lo;0;L;;;;;N;;;;; 1228A;CUNEIFORM SIGN PIRIG;Lo;0;L;;;;;N;;;;; 1228B;CUNEIFORM SIGN PIRIG TIMES KAL;Lo;0;L;;;;;N;;;;; 1228C;CUNEIFORM SIGN PIRIG TIMES UD;Lo;0;L;;;;;N;;;;; 1228D;CUNEIFORM SIGN PIRIG TIMES ZA;Lo;0;L;;;;;N;;;;; 1228E;CUNEIFORM SIGN PIRIG OPPOSING PIRIG;Lo;0;L;;;;;N;;;;; 1228F;CUNEIFORM SIGN RA;Lo;0;L;;;;;N;;;;; 12290;CUNEIFORM SIGN RAB;Lo;0;L;;;;;N;;;;; 12291;CUNEIFORM SIGN RI;Lo;0;L;;;;;N;;;;; 12292;CUNEIFORM SIGN RU;Lo;0;L;;;;;N;;;;; 12293;CUNEIFORM SIGN SA;Lo;0;L;;;;;N;;;;; 12294;CUNEIFORM SIGN SAG NUTILLU;Lo;0;L;;;;;N;;;;; 12295;CUNEIFORM SIGN SAG;Lo;0;L;;;;;N;;;;; 12296;CUNEIFORM SIGN SAG TIMES A;Lo;0;L;;;;;N;;;;; 12297;CUNEIFORM SIGN SAG TIMES DU;Lo;0;L;;;;;N;;;;; 12298;CUNEIFORM SIGN SAG TIMES DUB;Lo;0;L;;;;;N;;;;; 12299;CUNEIFORM SIGN SAG TIMES HA;Lo;0;L;;;;;N;;;;; 1229A;CUNEIFORM SIGN SAG TIMES KAK;Lo;0;L;;;;;N;;;;; 1229B;CUNEIFORM SIGN SAG TIMES KUR;Lo;0;L;;;;;N;;;;; 1229C;CUNEIFORM SIGN SAG TIMES LUM;Lo;0;L;;;;;N;;;;; 1229D;CUNEIFORM SIGN SAG TIMES MI;Lo;0;L;;;;;N;;;;; 1229E;CUNEIFORM SIGN SAG TIMES NUN;Lo;0;L;;;;;N;;;;; 1229F;CUNEIFORM SIGN SAG TIMES SAL;Lo;0;L;;;;;N;;;;; 122A0;CUNEIFORM SIGN SAG TIMES SHID;Lo;0;L;;;;;N;;;;; 122A1;CUNEIFORM SIGN SAG TIMES TAB;Lo;0;L;;;;;N;;;;; 122A2;CUNEIFORM SIGN SAG TIMES U2;Lo;0;L;;;;;N;;;;; 122A3;CUNEIFORM SIGN SAG TIMES UB;Lo;0;L;;;;;N;;;;; 122A4;CUNEIFORM SIGN SAG TIMES UM;Lo;0;L;;;;;N;;;;; 122A5;CUNEIFORM SIGN SAG TIMES UR;Lo;0;L;;;;;N;;;;; 122A6;CUNEIFORM SIGN SAG TIMES USH;Lo;0;L;;;;;N;;;;; 122A7;CUNEIFORM SIGN SAG OVER SAG;Lo;0;L;;;;;N;;;;; 122A8;CUNEIFORM SIGN SAG GUNU;Lo;0;L;;;;;N;;;;; 122A9;CUNEIFORM SIGN SAL;Lo;0;L;;;;;N;;;;; 122AA;CUNEIFORM SIGN SAL LAGAB TIMES ASH2;Lo;0;L;;;;;N;;;;; 122AB;CUNEIFORM SIGN SANGA2;Lo;0;L;;;;;N;;;;; 122AC;CUNEIFORM SIGN SAR;Lo;0;L;;;;;N;;;;; 122AD;CUNEIFORM SIGN SHA;Lo;0;L;;;;;N;;;;; 122AE;CUNEIFORM SIGN SHA3;Lo;0;L;;;;;N;;;;; 122AF;CUNEIFORM SIGN SHA3 TIMES A;Lo;0;L;;;;;N;;;;; 122B0;CUNEIFORM SIGN SHA3 TIMES BAD;Lo;0;L;;;;;N;;;;; 122B1;CUNEIFORM SIGN SHA3 TIMES GISH;Lo;0;L;;;;;N;;;;; 122B2;CUNEIFORM SIGN SHA3 TIMES NE;Lo;0;L;;;;;N;;;;; 122B3;CUNEIFORM SIGN SHA3 TIMES SHU2;Lo;0;L;;;;;N;;;;; 122B4;CUNEIFORM SIGN SHA3 TIMES TUR;Lo;0;L;;;;;N;;;;; 122B5;CUNEIFORM SIGN SHA3 TIMES U;Lo;0;L;;;;;N;;;;; 122B6;CUNEIFORM SIGN SHA3 TIMES U PLUS A;Lo;0;L;;;;;N;;;;; 122B7;CUNEIFORM SIGN SHA6;Lo;0;L;;;;;N;;;;; 122B8;CUNEIFORM SIGN SHAB6;Lo;0;L;;;;;N;;;;; 122B9;CUNEIFORM SIGN SHAR2;Lo;0;L;;;;;N;;;;; 122BA;CUNEIFORM SIGN SHE;Lo;0;L;;;;;N;;;;; 122BB;CUNEIFORM SIGN SHE HU;Lo;0;L;;;;;N;;;;; 122BC;CUNEIFORM SIGN SHE OVER SHE GAD OVER GAD GAR OVER GAR;Lo;0;L;;;;;N;;;;; 122BD;CUNEIFORM SIGN SHE OVER SHE TAB OVER TAB GAR OVER GAR;Lo;0;L;;;;;N;;;;; 122BE;CUNEIFORM SIGN SHEG9;Lo;0;L;;;;;N;;;;; 122BF;CUNEIFORM SIGN SHEN;Lo;0;L;;;;;N;;;;; 122C0;CUNEIFORM SIGN SHESH;Lo;0;L;;;;;N;;;;; 122C1;CUNEIFORM SIGN SHESH2;Lo;0;L;;;;;N;;;;; 122C2;CUNEIFORM SIGN SHESHLAM;Lo;0;L;;;;;N;;;;; 122C3;CUNEIFORM SIGN SHID;Lo;0;L;;;;;N;;;;; 122C4;CUNEIFORM SIGN SHID TIMES A;Lo;0;L;;;;;N;;;;; 122C5;CUNEIFORM SIGN SHID TIMES IM;Lo;0;L;;;;;N;;;;; 122C6;CUNEIFORM SIGN SHIM;Lo;0;L;;;;;N;;;;; 122C7;CUNEIFORM SIGN SHIM TIMES A;Lo;0;L;;;;;N;;;;; 122C8;CUNEIFORM SIGN SHIM TIMES BAL;Lo;0;L;;;;;N;;;;; 122C9;CUNEIFORM SIGN SHIM TIMES BULUG;Lo;0;L;;;;;N;;;;; 122CA;CUNEIFORM SIGN SHIM TIMES DIN;Lo;0;L;;;;;N;;;;; 122CB;CUNEIFORM SIGN SHIM TIMES GAR;Lo;0;L;;;;;N;;;;; 122CC;CUNEIFORM SIGN SHIM TIMES IGI;Lo;0;L;;;;;N;;;;; 122CD;CUNEIFORM SIGN SHIM TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; 122CE;CUNEIFORM SIGN SHIM TIMES KUSHU2;Lo;0;L;;;;;N;;;;; 122CF;CUNEIFORM SIGN SHIM TIMES LUL;Lo;0;L;;;;;N;;;;; 122D0;CUNEIFORM SIGN SHIM TIMES MUG;Lo;0;L;;;;;N;;;;; 122D1;CUNEIFORM SIGN SHIM TIMES SAL;Lo;0;L;;;;;N;;;;; 122D2;CUNEIFORM SIGN SHINIG;Lo;0;L;;;;;N;;;;; 122D3;CUNEIFORM SIGN SHIR;Lo;0;L;;;;;N;;;;; 122D4;CUNEIFORM SIGN SHIR TENU;Lo;0;L;;;;;N;;;;; 122D5;CUNEIFORM SIGN SHIR OVER SHIR BUR OVER BUR;Lo;0;L;;;;;N;;;;; 122D6;CUNEIFORM SIGN SHITA;Lo;0;L;;;;;N;;;;; 122D7;CUNEIFORM SIGN SHU;Lo;0;L;;;;;N;;;;; 122D8;CUNEIFORM SIGN SHU OVER INVERTED SHU;Lo;0;L;;;;;N;;;;; 122D9;CUNEIFORM SIGN SHU2;Lo;0;L;;;;;N;;;;; 122DA;CUNEIFORM SIGN SHUBUR;Lo;0;L;;;;;N;;;;; 122DB;CUNEIFORM SIGN SI;Lo;0;L;;;;;N;;;;; 122DC;CUNEIFORM SIGN SI GUNU;Lo;0;L;;;;;N;;;;; 122DD;CUNEIFORM SIGN SIG;Lo;0;L;;;;;N;;;;; 122DE;CUNEIFORM SIGN SIG4;Lo;0;L;;;;;N;;;;; 122DF;CUNEIFORM SIGN SIG4 OVER SIG4 SHU2;Lo;0;L;;;;;N;;;;; 122E0;CUNEIFORM SIGN SIK2;Lo;0;L;;;;;N;;;;; 122E1;CUNEIFORM SIGN SILA3;Lo;0;L;;;;;N;;;;; 122E2;CUNEIFORM SIGN SU;Lo;0;L;;;;;N;;;;; 122E3;CUNEIFORM SIGN SU OVER SU;Lo;0;L;;;;;N;;;;; 122E4;CUNEIFORM SIGN SUD;Lo;0;L;;;;;N;;;;; 122E5;CUNEIFORM SIGN SUD2;Lo;0;L;;;;;N;;;;; 122E6;CUNEIFORM SIGN SUHUR;Lo;0;L;;;;;N;;;;; 122E7;CUNEIFORM SIGN SUM;Lo;0;L;;;;;N;;;;; 122E8;CUNEIFORM SIGN SUMASH;Lo;0;L;;;;;N;;;;; 122E9;CUNEIFORM SIGN SUR;Lo;0;L;;;;;N;;;;; 122EA;CUNEIFORM SIGN SUR9;Lo;0;L;;;;;N;;;;; 122EB;CUNEIFORM SIGN TA;Lo;0;L;;;;;N;;;;; 122EC;CUNEIFORM SIGN TA ASTERISK;Lo;0;L;;;;;N;;;;; 122ED;CUNEIFORM SIGN TA TIMES HI;Lo;0;L;;;;;N;;;;; 122EE;CUNEIFORM SIGN TA TIMES MI;Lo;0;L;;;;;N;;;;; 122EF;CUNEIFORM SIGN TA GUNU;Lo;0;L;;;;;N;;;;; 122F0;CUNEIFORM SIGN TAB;Lo;0;L;;;;;N;;;;; 122F1;CUNEIFORM SIGN TAB OVER TAB NI OVER NI DISH OVER DISH;Lo;0;L;;;;;N;;;;; 122F2;CUNEIFORM SIGN TAB SQUARED;Lo;0;L;;;;;N;;;;; 122F3;CUNEIFORM SIGN TAG;Lo;0;L;;;;;N;;;;; 122F4;CUNEIFORM SIGN TAG TIMES BI;Lo;0;L;;;;;N;;;;; 122F5;CUNEIFORM SIGN TAG TIMES GUD;Lo;0;L;;;;;N;;;;; 122F6;CUNEIFORM SIGN TAG TIMES SHE;Lo;0;L;;;;;N;;;;; 122F7;CUNEIFORM SIGN TAG TIMES SHU;Lo;0;L;;;;;N;;;;; 122F8;CUNEIFORM SIGN TAG TIMES TUG2;Lo;0;L;;;;;N;;;;; 122F9;CUNEIFORM SIGN TAG TIMES UD;Lo;0;L;;;;;N;;;;; 122FA;CUNEIFORM SIGN TAK4;Lo;0;L;;;;;N;;;;; 122FB;CUNEIFORM SIGN TAR;Lo;0;L;;;;;N;;;;; 122FC;CUNEIFORM SIGN TE;Lo;0;L;;;;;N;;;;; 122FD;CUNEIFORM SIGN TE GUNU;Lo;0;L;;;;;N;;;;; 122FE;CUNEIFORM SIGN TI;Lo;0;L;;;;;N;;;;; 122FF;CUNEIFORM SIGN TI TENU;Lo;0;L;;;;;N;;;;; 12300;CUNEIFORM SIGN TIL;Lo;0;L;;;;;N;;;;; 12301;CUNEIFORM SIGN TIR;Lo;0;L;;;;;N;;;;; 12302;CUNEIFORM SIGN TIR TIMES TAK4;Lo;0;L;;;;;N;;;;; 12303;CUNEIFORM SIGN TIR OVER TIR;Lo;0;L;;;;;N;;;;; 12304;CUNEIFORM SIGN TIR OVER TIR GAD OVER GAD GAR OVER GAR;Lo;0;L;;;;;N;;;;; 12305;CUNEIFORM SIGN TU;Lo;0;L;;;;;N;;;;; 12306;CUNEIFORM SIGN TUG2;Lo;0;L;;;;;N;;;;; 12307;CUNEIFORM SIGN TUK;Lo;0;L;;;;;N;;;;; 12308;CUNEIFORM SIGN TUM;Lo;0;L;;;;;N;;;;; 12309;CUNEIFORM SIGN TUR;Lo;0;L;;;;;N;;;;; 1230A;CUNEIFORM SIGN TUR OVER TUR ZA OVER ZA;Lo;0;L;;;;;N;;;;; 1230B;CUNEIFORM SIGN U;Lo;0;L;;;;;N;;;;; 1230C;CUNEIFORM SIGN U GUD;Lo;0;L;;;;;N;;;;; 1230D;CUNEIFORM SIGN U U U;Lo;0;L;;;;;N;;;;; 1230E;CUNEIFORM SIGN U OVER U PA OVER PA GAR OVER GAR;Lo;0;L;;;;;N;;;;; 1230F;CUNEIFORM SIGN U OVER U SUR OVER SUR;Lo;0;L;;;;;N;;;;; 12310;CUNEIFORM SIGN U OVER U U REVERSED OVER U REVERSED;Lo;0;L;;;;;N;;;;; 12311;CUNEIFORM SIGN U2;Lo;0;L;;;;;N;;;;; 12312;CUNEIFORM SIGN UB;Lo;0;L;;;;;N;;;;; 12313;CUNEIFORM SIGN UD;Lo;0;L;;;;;N;;;;; 12314;CUNEIFORM SIGN UD KUSHU2;Lo;0;L;;;;;N;;;;; 12315;CUNEIFORM SIGN UD TIMES BAD;Lo;0;L;;;;;N;;;;; 12316;CUNEIFORM SIGN UD TIMES MI;Lo;0;L;;;;;N;;;;; 12317;CUNEIFORM SIGN UD TIMES U PLUS U PLUS U;Lo;0;L;;;;;N;;;;; 12318;CUNEIFORM SIGN UD TIMES U PLUS U PLUS U GUNU;Lo;0;L;;;;;N;;;;; 12319;CUNEIFORM SIGN UD GUNU;Lo;0;L;;;;;N;;;;; 1231A;CUNEIFORM SIGN UD SHESHIG;Lo;0;L;;;;;N;;;;; 1231B;CUNEIFORM SIGN UD SHESHIG TIMES BAD;Lo;0;L;;;;;N;;;;; 1231C;CUNEIFORM SIGN UDUG;Lo;0;L;;;;;N;;;;; 1231D;CUNEIFORM SIGN UM;Lo;0;L;;;;;N;;;;; 1231E;CUNEIFORM SIGN UM TIMES LAGAB;Lo;0;L;;;;;N;;;;; 1231F;CUNEIFORM SIGN UM TIMES ME PLUS DA;Lo;0;L;;;;;N;;;;; 12320;CUNEIFORM SIGN UM TIMES SHA3;Lo;0;L;;;;;N;;;;; 12321;CUNEIFORM SIGN UM TIMES U;Lo;0;L;;;;;N;;;;; 12322;CUNEIFORM SIGN UMBIN;Lo;0;L;;;;;N;;;;; 12323;CUNEIFORM SIGN UMUM;Lo;0;L;;;;;N;;;;; 12324;CUNEIFORM SIGN UMUM TIMES KASKAL;Lo;0;L;;;;;N;;;;; 12325;CUNEIFORM SIGN UMUM TIMES PA;Lo;0;L;;;;;N;;;;; 12326;CUNEIFORM SIGN UN;Lo;0;L;;;;;N;;;;; 12327;CUNEIFORM SIGN UN GUNU;Lo;0;L;;;;;N;;;;; 12328;CUNEIFORM SIGN UR;Lo;0;L;;;;;N;;;;; 12329;CUNEIFORM SIGN UR CROSSING UR;Lo;0;L;;;;;N;;;;; 1232A;CUNEIFORM SIGN UR SHESHIG;Lo;0;L;;;;;N;;;;; 1232B;CUNEIFORM SIGN UR2;Lo;0;L;;;;;N;;;;; 1232C;CUNEIFORM SIGN UR2 TIMES A PLUS HA;Lo;0;L;;;;;N;;;;; 1232D;CUNEIFORM SIGN UR2 TIMES A PLUS NA;Lo;0;L;;;;;N;;;;; 1232E;CUNEIFORM SIGN UR2 TIMES AL;Lo;0;L;;;;;N;;;;; 1232F;CUNEIFORM SIGN UR2 TIMES HA;Lo;0;L;;;;;N;;;;; 12330;CUNEIFORM SIGN UR2 TIMES NUN;Lo;0;L;;;;;N;;;;; 12331;CUNEIFORM SIGN UR2 TIMES U2;Lo;0;L;;;;;N;;;;; 12332;CUNEIFORM SIGN UR2 TIMES U2 PLUS ASH;Lo;0;L;;;;;N;;;;; 12333;CUNEIFORM SIGN UR2 TIMES U2 PLUS BI;Lo;0;L;;;;;N;;;;; 12334;CUNEIFORM SIGN UR4;Lo;0;L;;;;;N;;;;; 12335;CUNEIFORM SIGN URI;Lo;0;L;;;;;N;;;;; 12336;CUNEIFORM SIGN URI3;Lo;0;L;;;;;N;;;;; 12337;CUNEIFORM SIGN URU;Lo;0;L;;;;;N;;;;; 12338;CUNEIFORM SIGN URU TIMES A;Lo;0;L;;;;;N;;;;; 12339;CUNEIFORM SIGN URU TIMES ASHGAB;Lo;0;L;;;;;N;;;;; 1233A;CUNEIFORM SIGN URU TIMES BAR;Lo;0;L;;;;;N;;;;; 1233B;CUNEIFORM SIGN URU TIMES DUN;Lo;0;L;;;;;N;;;;; 1233C;CUNEIFORM SIGN URU TIMES GA;Lo;0;L;;;;;N;;;;; 1233D;CUNEIFORM SIGN URU TIMES GAL;Lo;0;L;;;;;N;;;;; 1233E;CUNEIFORM SIGN URU TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; 1233F;CUNEIFORM SIGN URU TIMES GAR;Lo;0;L;;;;;N;;;;; 12340;CUNEIFORM SIGN URU TIMES GU;Lo;0;L;;;;;N;;;;; 12341;CUNEIFORM SIGN URU TIMES HA;Lo;0;L;;;;;N;;;;; 12342;CUNEIFORM SIGN URU TIMES IGI;Lo;0;L;;;;;N;;;;; 12343;CUNEIFORM SIGN URU TIMES IM;Lo;0;L;;;;;N;;;;; 12344;CUNEIFORM SIGN URU TIMES ISH;Lo;0;L;;;;;N;;;;; 12345;CUNEIFORM SIGN URU TIMES KI;Lo;0;L;;;;;N;;;;; 12346;CUNEIFORM SIGN URU TIMES LUM;Lo;0;L;;;;;N;;;;; 12347;CUNEIFORM SIGN URU TIMES MIN;Lo;0;L;;;;;N;;;;; 12348;CUNEIFORM SIGN URU TIMES PA;Lo;0;L;;;;;N;;;;; 12349;CUNEIFORM SIGN URU TIMES SHE;Lo;0;L;;;;;N;;;;; 1234A;CUNEIFORM SIGN URU TIMES SIG4;Lo;0;L;;;;;N;;;;; 1234B;CUNEIFORM SIGN URU TIMES TU;Lo;0;L;;;;;N;;;;; 1234C;CUNEIFORM SIGN URU TIMES U PLUS GUD;Lo;0;L;;;;;N;;;;; 1234D;CUNEIFORM SIGN URU TIMES UD;Lo;0;L;;;;;N;;;;; 1234E;CUNEIFORM SIGN URU TIMES URUDA;Lo;0;L;;;;;N;;;;; 1234F;CUNEIFORM SIGN URUDA;Lo;0;L;;;;;N;;;;; 12350;CUNEIFORM SIGN URUDA TIMES U;Lo;0;L;;;;;N;;;;; 12351;CUNEIFORM SIGN USH;Lo;0;L;;;;;N;;;;; 12352;CUNEIFORM SIGN USH TIMES A;Lo;0;L;;;;;N;;;;; 12353;CUNEIFORM SIGN USH TIMES KU;Lo;0;L;;;;;N;;;;; 12354;CUNEIFORM SIGN USH TIMES KUR;Lo;0;L;;;;;N;;;;; 12355;CUNEIFORM SIGN USH TIMES TAK4;Lo;0;L;;;;;N;;;;; 12356;CUNEIFORM SIGN USHX;Lo;0;L;;;;;N;;;;; 12357;CUNEIFORM SIGN USH2;Lo;0;L;;;;;N;;;;; 12358;CUNEIFORM SIGN USHUMX;Lo;0;L;;;;;N;;;;; 12359;CUNEIFORM SIGN UTUKI;Lo;0;L;;;;;N;;;;; 1235A;CUNEIFORM SIGN UZ3;Lo;0;L;;;;;N;;;;; 1235B;CUNEIFORM SIGN UZ3 TIMES KASKAL;Lo;0;L;;;;;N;;;;; 1235C;CUNEIFORM SIGN UZU;Lo;0;L;;;;;N;;;;; 1235D;CUNEIFORM SIGN ZA;Lo;0;L;;;;;N;;;;; 1235E;CUNEIFORM SIGN ZA TENU;Lo;0;L;;;;;N;;;;; 1235F;CUNEIFORM SIGN ZA SQUARED TIMES KUR;Lo;0;L;;;;;N;;;;; 12360;CUNEIFORM SIGN ZAG;Lo;0;L;;;;;N;;;;; 12361;CUNEIFORM SIGN ZAMX;Lo;0;L;;;;;N;;;;; 12362;CUNEIFORM SIGN ZE2;Lo;0;L;;;;;N;;;;; 12363;CUNEIFORM SIGN ZI;Lo;0;L;;;;;N;;;;; 12364;CUNEIFORM SIGN ZI OVER ZI;Lo;0;L;;;;;N;;;;; 12365;CUNEIFORM SIGN ZI3;Lo;0;L;;;;;N;;;;; 12366;CUNEIFORM SIGN ZIB;Lo;0;L;;;;;N;;;;; 12367;CUNEIFORM SIGN ZIB KABA TENU;Lo;0;L;;;;;N;;;;; 12368;CUNEIFORM SIGN ZIG;Lo;0;L;;;;;N;;;;; 12369;CUNEIFORM SIGN ZIZ2;Lo;0;L;;;;;N;;;;; 1236A;CUNEIFORM SIGN ZU;Lo;0;L;;;;;N;;;;; 1236B;CUNEIFORM SIGN ZU5;Lo;0;L;;;;;N;;;;; 1236C;CUNEIFORM SIGN ZU5 TIMES A;Lo;0;L;;;;;N;;;;; 1236D;CUNEIFORM SIGN ZUBUR;Lo;0;L;;;;;N;;;;; 1236E;CUNEIFORM SIGN ZUM;Lo;0;L;;;;;N;;;;; 1236F;CUNEIFORM SIGN KAP ELAMITE;Lo;0;L;;;;;N;;;;; 12370;CUNEIFORM SIGN AB TIMES NUN;Lo;0;L;;;;;N;;;;; 12371;CUNEIFORM SIGN AB2 TIMES A;Lo;0;L;;;;;N;;;;; 12372;CUNEIFORM SIGN AMAR TIMES KUG;Lo;0;L;;;;;N;;;;; 12373;CUNEIFORM SIGN DAG KISIM5 TIMES U2 PLUS MASH;Lo;0;L;;;;;N;;;;; 12374;CUNEIFORM SIGN DAG3;Lo;0;L;;;;;N;;;;; 12375;CUNEIFORM SIGN DISH PLUS SHU;Lo;0;L;;;;;N;;;;; 12376;CUNEIFORM SIGN DUB TIMES SHE;Lo;0;L;;;;;N;;;;; 12377;CUNEIFORM SIGN EZEN TIMES GUD;Lo;0;L;;;;;N;;;;; 12378;CUNEIFORM SIGN EZEN TIMES SHE;Lo;0;L;;;;;N;;;;; 12379;CUNEIFORM SIGN GA2 TIMES AN PLUS KAK PLUS A;Lo;0;L;;;;;N;;;;; 1237A;CUNEIFORM SIGN GA2 TIMES ASH2;Lo;0;L;;;;;N;;;;; 1237B;CUNEIFORM SIGN GE22;Lo;0;L;;;;;N;;;;; 1237C;CUNEIFORM SIGN GIG;Lo;0;L;;;;;N;;;;; 1237D;CUNEIFORM SIGN HUSH;Lo;0;L;;;;;N;;;;; 1237E;CUNEIFORM SIGN KA TIMES ANSHE;Lo;0;L;;;;;N;;;;; 1237F;CUNEIFORM SIGN KA TIMES ASH3;Lo;0;L;;;;;N;;;;; 12380;CUNEIFORM SIGN KA TIMES GISH;Lo;0;L;;;;;N;;;;; 12381;CUNEIFORM SIGN KA TIMES GUD;Lo;0;L;;;;;N;;;;; 12382;CUNEIFORM SIGN KA TIMES HI TIMES ASH2;Lo;0;L;;;;;N;;;;; 12383;CUNEIFORM SIGN KA TIMES LUM;Lo;0;L;;;;;N;;;;; 12384;CUNEIFORM SIGN KA TIMES PA;Lo;0;L;;;;;N;;;;; 12385;CUNEIFORM SIGN KA TIMES SHUL;Lo;0;L;;;;;N;;;;; 12386;CUNEIFORM SIGN KA TIMES TU;Lo;0;L;;;;;N;;;;; 12387;CUNEIFORM SIGN KA TIMES UR2;Lo;0;L;;;;;N;;;;; 12388;CUNEIFORM SIGN LAGAB TIMES GI;Lo;0;L;;;;;N;;;;; 12389;CUNEIFORM SIGN LU2 SHESHIG TIMES BAD;Lo;0;L;;;;;N;;;;; 1238A;CUNEIFORM SIGN LU2 TIMES ESH2 PLUS LAL;Lo;0;L;;;;;N;;;;; 1238B;CUNEIFORM SIGN LU2 TIMES SHU;Lo;0;L;;;;;N;;;;; 1238C;CUNEIFORM SIGN MESH;Lo;0;L;;;;;N;;;;; 1238D;CUNEIFORM SIGN MUSH3 TIMES ZA;Lo;0;L;;;;;N;;;;; 1238E;CUNEIFORM SIGN NA4;Lo;0;L;;;;;N;;;;; 1238F;CUNEIFORM SIGN NIN;Lo;0;L;;;;;N;;;;; 12390;CUNEIFORM SIGN NIN9;Lo;0;L;;;;;N;;;;; 12391;CUNEIFORM SIGN NINDA2 TIMES BAL;Lo;0;L;;;;;N;;;;; 12392;CUNEIFORM SIGN NINDA2 TIMES GI;Lo;0;L;;;;;N;;;;; 12393;CUNEIFORM SIGN NU11 ROTATED NINETY DEGREES;Lo;0;L;;;;;N;;;;; 12394;CUNEIFORM SIGN PESH2 ASTERISK;Lo;0;L;;;;;N;;;;; 12395;CUNEIFORM SIGN PIR2;Lo;0;L;;;;;N;;;;; 12396;CUNEIFORM SIGN SAG TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; 12397;CUNEIFORM SIGN TI2;Lo;0;L;;;;;N;;;;; 12398;CUNEIFORM SIGN UM TIMES ME;Lo;0;L;;;;;N;;;;; 12399;CUNEIFORM SIGN U U;Lo;0;L;;;;;N;;;;; 12400;CUNEIFORM NUMERIC SIGN TWO ASH;Nl;0;L;;;;2;N;;;;; 12401;CUNEIFORM NUMERIC SIGN THREE ASH;Nl;0;L;;;;3;N;;;;; 12402;CUNEIFORM NUMERIC SIGN FOUR ASH;Nl;0;L;;;;4;N;;;;; 12403;CUNEIFORM NUMERIC SIGN FIVE ASH;Nl;0;L;;;;5;N;;;;; 12404;CUNEIFORM NUMERIC SIGN SIX ASH;Nl;0;L;;;;6;N;;;;; 12405;CUNEIFORM NUMERIC SIGN SEVEN ASH;Nl;0;L;;;;7;N;;;;; 12406;CUNEIFORM NUMERIC SIGN EIGHT ASH;Nl;0;L;;;;8;N;;;;; 12407;CUNEIFORM NUMERIC SIGN NINE ASH;Nl;0;L;;;;9;N;;;;; 12408;CUNEIFORM NUMERIC SIGN THREE DISH;Nl;0;L;;;;3;N;;;;; 12409;CUNEIFORM NUMERIC SIGN FOUR DISH;Nl;0;L;;;;4;N;;;;; 1240A;CUNEIFORM NUMERIC SIGN FIVE DISH;Nl;0;L;;;;5;N;;;;; 1240B;CUNEIFORM NUMERIC SIGN SIX DISH;Nl;0;L;;;;6;N;;;;; 1240C;CUNEIFORM NUMERIC SIGN SEVEN DISH;Nl;0;L;;;;7;N;;;;; 1240D;CUNEIFORM NUMERIC SIGN EIGHT DISH;Nl;0;L;;;;8;N;;;;; 1240E;CUNEIFORM NUMERIC SIGN NINE DISH;Nl;0;L;;;;9;N;;;;; 1240F;CUNEIFORM NUMERIC SIGN FOUR U;Nl;0;L;;;;4;N;;;;; 12410;CUNEIFORM NUMERIC SIGN FIVE U;Nl;0;L;;;;5;N;;;;; 12411;CUNEIFORM NUMERIC SIGN SIX U;Nl;0;L;;;;6;N;;;;; 12412;CUNEIFORM NUMERIC SIGN SEVEN U;Nl;0;L;;;;7;N;;;;; 12413;CUNEIFORM NUMERIC SIGN EIGHT U;Nl;0;L;;;;8;N;;;;; 12414;CUNEIFORM NUMERIC SIGN NINE U;Nl;0;L;;;;9;N;;;;; 12415;CUNEIFORM NUMERIC SIGN ONE GESH2;Nl;0;L;;;;1;N;;;;; 12416;CUNEIFORM NUMERIC SIGN TWO GESH2;Nl;0;L;;;;2;N;;;;; 12417;CUNEIFORM NUMERIC SIGN THREE GESH2;Nl;0;L;;;;3;N;;;;; 12418;CUNEIFORM NUMERIC SIGN FOUR GESH2;Nl;0;L;;;;4;N;;;;; 12419;CUNEIFORM NUMERIC SIGN FIVE GESH2;Nl;0;L;;;;5;N;;;;; 1241A;CUNEIFORM NUMERIC SIGN SIX GESH2;Nl;0;L;;;;6;N;;;;; 1241B;CUNEIFORM NUMERIC SIGN SEVEN GESH2;Nl;0;L;;;;7;N;;;;; 1241C;CUNEIFORM NUMERIC SIGN EIGHT GESH2;Nl;0;L;;;;8;N;;;;; 1241D;CUNEIFORM NUMERIC SIGN NINE GESH2;Nl;0;L;;;;9;N;;;;; 1241E;CUNEIFORM NUMERIC SIGN ONE GESHU;Nl;0;L;;;;1;N;;;;; 1241F;CUNEIFORM NUMERIC SIGN TWO GESHU;Nl;0;L;;;;2;N;;;;; 12420;CUNEIFORM NUMERIC SIGN THREE GESHU;Nl;0;L;;;;3;N;;;;; 12421;CUNEIFORM NUMERIC SIGN FOUR GESHU;Nl;0;L;;;;4;N;;;;; 12422;CUNEIFORM NUMERIC SIGN FIVE GESHU;Nl;0;L;;;;5;N;;;;; 12423;CUNEIFORM NUMERIC SIGN TWO SHAR2;Nl;0;L;;;;2;N;;;;; 12424;CUNEIFORM NUMERIC SIGN THREE SHAR2;Nl;0;L;;;;3;N;;;;; 12425;CUNEIFORM NUMERIC SIGN THREE SHAR2 VARIANT FORM;Nl;0;L;;;;3;N;;;;; 12426;CUNEIFORM NUMERIC SIGN FOUR SHAR2;Nl;0;L;;;;4;N;;;;; 12427;CUNEIFORM NUMERIC SIGN FIVE SHAR2;Nl;0;L;;;;5;N;;;;; 12428;CUNEIFORM NUMERIC SIGN SIX SHAR2;Nl;0;L;;;;6;N;;;;; 12429;CUNEIFORM NUMERIC SIGN SEVEN SHAR2;Nl;0;L;;;;7;N;;;;; 1242A;CUNEIFORM NUMERIC SIGN EIGHT SHAR2;Nl;0;L;;;;8;N;;;;; 1242B;CUNEIFORM NUMERIC SIGN NINE SHAR2;Nl;0;L;;;;9;N;;;;; 1242C;CUNEIFORM NUMERIC SIGN ONE SHARU;Nl;0;L;;;;1;N;;;;; 1242D;CUNEIFORM NUMERIC SIGN TWO SHARU;Nl;0;L;;;;2;N;;;;; 1242E;CUNEIFORM NUMERIC SIGN THREE SHARU;Nl;0;L;;;;3;N;;;;; 1242F;CUNEIFORM NUMERIC SIGN THREE SHARU VARIANT FORM;Nl;0;L;;;;3;N;;;;; 12430;CUNEIFORM NUMERIC SIGN FOUR SHARU;Nl;0;L;;;;4;N;;;;; 12431;CUNEIFORM NUMERIC SIGN FIVE SHARU;Nl;0;L;;;;5;N;;;;; 12432;CUNEIFORM NUMERIC SIGN SHAR2 TIMES GAL PLUS DISH;Nl;0;L;;;;216000;N;;;;; 12433;CUNEIFORM NUMERIC SIGN SHAR2 TIMES GAL PLUS MIN;Nl;0;L;;;;432000;N;;;;; 12434;CUNEIFORM NUMERIC SIGN ONE BURU;Nl;0;L;;;;1;N;;;;; 12435;CUNEIFORM NUMERIC SIGN TWO BURU;Nl;0;L;;;;2;N;;;;; 12436;CUNEIFORM NUMERIC SIGN THREE BURU;Nl;0;L;;;;3;N;;;;; 12437;CUNEIFORM NUMERIC SIGN THREE BURU VARIANT FORM;Nl;0;L;;;;3;N;;;;; 12438;CUNEIFORM NUMERIC SIGN FOUR BURU;Nl;0;L;;;;4;N;;;;; 12439;CUNEIFORM NUMERIC SIGN FIVE BURU;Nl;0;L;;;;5;N;;;;; 1243A;CUNEIFORM NUMERIC SIGN THREE VARIANT FORM ESH16;Nl;0;L;;;;3;N;;;;; 1243B;CUNEIFORM NUMERIC SIGN THREE VARIANT FORM ESH21;Nl;0;L;;;;3;N;;;;; 1243C;CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU;Nl;0;L;;;;4;N;;;;; 1243D;CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU4;Nl;0;L;;;;4;N;;;;; 1243E;CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU A;Nl;0;L;;;;4;N;;;;; 1243F;CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU B;Nl;0;L;;;;4;N;;;;; 12440;CUNEIFORM NUMERIC SIGN SIX VARIANT FORM ASH9;Nl;0;L;;;;6;N;;;;; 12441;CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN3;Nl;0;L;;;;7;N;;;;; 12442;CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN A;Nl;0;L;;;;7;N;;;;; 12443;CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN B;Nl;0;L;;;;7;N;;;;; 12444;CUNEIFORM NUMERIC SIGN EIGHT VARIANT FORM USSU;Nl;0;L;;;;8;N;;;;; 12445;CUNEIFORM NUMERIC SIGN EIGHT VARIANT FORM USSU3;Nl;0;L;;;;8;N;;;;; 12446;CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU;Nl;0;L;;;;9;N;;;;; 12447;CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU3;Nl;0;L;;;;9;N;;;;; 12448;CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU4;Nl;0;L;;;;9;N;;;;; 12449;CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU A;Nl;0;L;;;;9;N;;;;; 1244A;CUNEIFORM NUMERIC SIGN TWO ASH TENU;Nl;0;L;;;;2;N;;;;; 1244B;CUNEIFORM NUMERIC SIGN THREE ASH TENU;Nl;0;L;;;;3;N;;;;; 1244C;CUNEIFORM NUMERIC SIGN FOUR ASH TENU;Nl;0;L;;;;4;N;;;;; 1244D;CUNEIFORM NUMERIC SIGN FIVE ASH TENU;Nl;0;L;;;;5;N;;;;; 1244E;CUNEIFORM NUMERIC SIGN SIX ASH TENU;Nl;0;L;;;;6;N;;;;; 1244F;CUNEIFORM NUMERIC SIGN ONE BAN2;Nl;0;L;;;;1;N;;;;; 12450;CUNEIFORM NUMERIC SIGN TWO BAN2;Nl;0;L;;;;2;N;;;;; 12451;CUNEIFORM NUMERIC SIGN THREE BAN2;Nl;0;L;;;;3;N;;;;; 12452;CUNEIFORM NUMERIC SIGN FOUR BAN2;Nl;0;L;;;;4;N;;;;; 12453;CUNEIFORM NUMERIC SIGN FOUR BAN2 VARIANT FORM;Nl;0;L;;;;4;N;;;;; 12454;CUNEIFORM NUMERIC SIGN FIVE BAN2;Nl;0;L;;;;5;N;;;;; 12455;CUNEIFORM NUMERIC SIGN FIVE BAN2 VARIANT FORM;Nl;0;L;;;;5;N;;;;; 12456;CUNEIFORM NUMERIC SIGN NIGIDAMIN;Nl;0;L;;;;2;N;;;;; 12457;CUNEIFORM NUMERIC SIGN NIGIDAESH;Nl;0;L;;;;3;N;;;;; 12458;CUNEIFORM NUMERIC SIGN ONE ESHE3;Nl;0;L;;;;1;N;;;;; 12459;CUNEIFORM NUMERIC SIGN TWO ESHE3;Nl;0;L;;;;2;N;;;;; 1245A;CUNEIFORM NUMERIC SIGN ONE THIRD DISH;Nl;0;L;;;;1/3;N;;;;; 1245B;CUNEIFORM NUMERIC SIGN TWO THIRDS DISH;Nl;0;L;;;;2/3;N;;;;; 1245C;CUNEIFORM NUMERIC SIGN FIVE SIXTHS DISH;Nl;0;L;;;;5/6;N;;;;; 1245D;CUNEIFORM NUMERIC SIGN ONE THIRD VARIANT FORM A;Nl;0;L;;;;1/3;N;;;;; 1245E;CUNEIFORM NUMERIC SIGN TWO THIRDS VARIANT FORM A;Nl;0;L;;;;2/3;N;;;;; 1245F;CUNEIFORM NUMERIC SIGN ONE EIGHTH ASH;Nl;0;L;;;;1/8;N;;;;; 12460;CUNEIFORM NUMERIC SIGN ONE QUARTER ASH;Nl;0;L;;;;1/4;N;;;;; 12461;CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE SIXTH;Nl;0;L;;;;1/6;N;;;;; 12462;CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE QUARTER;Nl;0;L;;;;1/4;N;;;;; 12463;CUNEIFORM NUMERIC SIGN ONE QUARTER GUR;Nl;0;L;;;;1/4;N;;;;; 12464;CUNEIFORM NUMERIC SIGN ONE HALF GUR;Nl;0;L;;;;1/2;N;;;;; 12465;CUNEIFORM NUMERIC SIGN ELAMITE ONE THIRD;Nl;0;L;;;;1/3;N;;;;; 12466;CUNEIFORM NUMERIC SIGN ELAMITE TWO THIRDS;Nl;0;L;;;;2/3;N;;;;; 12467;CUNEIFORM NUMERIC SIGN ELAMITE FORTY;Nl;0;L;;;;40;N;;;;; 12468;CUNEIFORM NUMERIC SIGN ELAMITE FIFTY;Nl;0;L;;;;50;N;;;;; 12469;CUNEIFORM NUMERIC SIGN FOUR U VARIANT FORM;Nl;0;L;;;;4;N;;;;; 1246A;CUNEIFORM NUMERIC SIGN FIVE U VARIANT FORM;Nl;0;L;;;;5;N;;;;; 1246B;CUNEIFORM NUMERIC SIGN SIX U VARIANT FORM;Nl;0;L;;;;6;N;;;;; 1246C;CUNEIFORM NUMERIC SIGN SEVEN U VARIANT FORM;Nl;0;L;;;;7;N;;;;; 1246D;CUNEIFORM NUMERIC SIGN EIGHT U VARIANT FORM;Nl;0;L;;;;8;N;;;;; 1246E;CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM;Nl;0;L;;;;9;N;;;;; 12470;CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER;Po;0;L;;;;;N;;;;; 12471;CUNEIFORM PUNCTUATION SIGN VERTICAL COLON;Po;0;L;;;;;N;;;;; 12472;CUNEIFORM PUNCTUATION SIGN DIAGONAL COLON;Po;0;L;;;;;N;;;;; 12473;CUNEIFORM PUNCTUATION SIGN DIAGONAL TRICOLON;Po;0;L;;;;;N;;;;; 12474;CUNEIFORM PUNCTUATION SIGN DIAGONAL QUADCOLON;Po;0;L;;;;;N;;;;; 12480;CUNEIFORM SIGN AB TIMES NUN TENU;Lo;0;L;;;;;N;;;;; 12481;CUNEIFORM SIGN AB TIMES SHU2;Lo;0;L;;;;;N;;;;; 12482;CUNEIFORM SIGN AD TIMES ESH2;Lo;0;L;;;;;N;;;;; 12483;CUNEIFORM SIGN BAD TIMES DISH TENU;Lo;0;L;;;;;N;;;;; 12484;CUNEIFORM SIGN BAHAR2 TIMES AB2;Lo;0;L;;;;;N;;;;; 12485;CUNEIFORM SIGN BAHAR2 TIMES NI;Lo;0;L;;;;;N;;;;; 12486;CUNEIFORM SIGN BAHAR2 TIMES ZA;Lo;0;L;;;;;N;;;;; 12487;CUNEIFORM SIGN BU OVER BU TIMES NA2;Lo;0;L;;;;;N;;;;; 12488;CUNEIFORM SIGN DA TIMES TAK4;Lo;0;L;;;;;N;;;;; 12489;CUNEIFORM SIGN DAG TIMES KUR;Lo;0;L;;;;;N;;;;; 1248A;CUNEIFORM SIGN DIM TIMES IGI;Lo;0;L;;;;;N;;;;; 1248B;CUNEIFORM SIGN DIM TIMES U U U;Lo;0;L;;;;;N;;;;; 1248C;CUNEIFORM SIGN DIM2 TIMES UD;Lo;0;L;;;;;N;;;;; 1248D;CUNEIFORM SIGN DUG TIMES ANSHE;Lo;0;L;;;;;N;;;;; 1248E;CUNEIFORM SIGN DUG TIMES ASH;Lo;0;L;;;;;N;;;;; 1248F;CUNEIFORM SIGN DUG TIMES ASH AT LEFT;Lo;0;L;;;;;N;;;;; 12490;CUNEIFORM SIGN DUG TIMES DIN;Lo;0;L;;;;;N;;;;; 12491;CUNEIFORM SIGN DUG TIMES DUN;Lo;0;L;;;;;N;;;;; 12492;CUNEIFORM SIGN DUG TIMES ERIN2;Lo;0;L;;;;;N;;;;; 12493;CUNEIFORM SIGN DUG TIMES GA;Lo;0;L;;;;;N;;;;; 12494;CUNEIFORM SIGN DUG TIMES GI;Lo;0;L;;;;;N;;;;; 12495;CUNEIFORM SIGN DUG TIMES GIR2 GUNU;Lo;0;L;;;;;N;;;;; 12496;CUNEIFORM SIGN DUG TIMES GISH;Lo;0;L;;;;;N;;;;; 12497;CUNEIFORM SIGN DUG TIMES HA;Lo;0;L;;;;;N;;;;; 12498;CUNEIFORM SIGN DUG TIMES HI;Lo;0;L;;;;;N;;;;; 12499;CUNEIFORM SIGN DUG TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; 1249A;CUNEIFORM SIGN DUG TIMES KASKAL;Lo;0;L;;;;;N;;;;; 1249B;CUNEIFORM SIGN DUG TIMES KUR;Lo;0;L;;;;;N;;;;; 1249C;CUNEIFORM SIGN DUG TIMES KUSHU2;Lo;0;L;;;;;N;;;;; 1249D;CUNEIFORM SIGN DUG TIMES KUSHU2 PLUS KASKAL;Lo;0;L;;;;;N;;;;; 1249E;CUNEIFORM SIGN DUG TIMES LAK-020;Lo;0;L;;;;;N;;;;; 1249F;CUNEIFORM SIGN DUG TIMES LAM;Lo;0;L;;;;;N;;;;; 124A0;CUNEIFORM SIGN DUG TIMES LAM TIMES KUR;Lo;0;L;;;;;N;;;;; 124A1;CUNEIFORM SIGN DUG TIMES LUH PLUS GISH;Lo;0;L;;;;;N;;;;; 124A2;CUNEIFORM SIGN DUG TIMES MASH;Lo;0;L;;;;;N;;;;; 124A3;CUNEIFORM SIGN DUG TIMES MES;Lo;0;L;;;;;N;;;;; 124A4;CUNEIFORM SIGN DUG TIMES MI;Lo;0;L;;;;;N;;;;; 124A5;CUNEIFORM SIGN DUG TIMES NI;Lo;0;L;;;;;N;;;;; 124A6;CUNEIFORM SIGN DUG TIMES PI;Lo;0;L;;;;;N;;;;; 124A7;CUNEIFORM SIGN DUG TIMES SHE;Lo;0;L;;;;;N;;;;; 124A8;CUNEIFORM SIGN DUG TIMES SI GUNU;Lo;0;L;;;;;N;;;;; 124A9;CUNEIFORM SIGN E2 TIMES KUR;Lo;0;L;;;;;N;;;;; 124AA;CUNEIFORM SIGN E2 TIMES PAP;Lo;0;L;;;;;N;;;;; 124AB;CUNEIFORM SIGN ERIN2 X;Lo;0;L;;;;;N;;;;; 124AC;CUNEIFORM SIGN ESH2 CROSSING ESH2;Lo;0;L;;;;;N;;;;; 124AD;CUNEIFORM SIGN EZEN SHESHIG TIMES ASH;Lo;0;L;;;;;N;;;;; 124AE;CUNEIFORM SIGN EZEN SHESHIG TIMES HI;Lo;0;L;;;;;N;;;;; 124AF;CUNEIFORM SIGN EZEN SHESHIG TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; 124B0;CUNEIFORM SIGN EZEN SHESHIG TIMES LA;Lo;0;L;;;;;N;;;;; 124B1;CUNEIFORM SIGN EZEN SHESHIG TIMES LAL;Lo;0;L;;;;;N;;;;; 124B2;CUNEIFORM SIGN EZEN SHESHIG TIMES ME;Lo;0;L;;;;;N;;;;; 124B3;CUNEIFORM SIGN EZEN SHESHIG TIMES MES;Lo;0;L;;;;;N;;;;; 124B4;CUNEIFORM SIGN EZEN SHESHIG TIMES SU;Lo;0;L;;;;;N;;;;; 124B5;CUNEIFORM SIGN EZEN TIMES SU;Lo;0;L;;;;;N;;;;; 124B6;CUNEIFORM SIGN GA2 TIMES BAHAR2;Lo;0;L;;;;;N;;;;; 124B7;CUNEIFORM SIGN GA2 TIMES DIM GUNU;Lo;0;L;;;;;N;;;;; 124B8;CUNEIFORM SIGN GA2 TIMES DUG TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; 124B9;CUNEIFORM SIGN GA2 TIMES DUG TIMES KASKAL;Lo;0;L;;;;;N;;;;; 124BA;CUNEIFORM SIGN GA2 TIMES EREN;Lo;0;L;;;;;N;;;;; 124BB;CUNEIFORM SIGN GA2 TIMES GA;Lo;0;L;;;;;N;;;;; 124BC;CUNEIFORM SIGN GA2 TIMES GAR PLUS DI;Lo;0;L;;;;;N;;;;; 124BD;CUNEIFORM SIGN GA2 TIMES GAR PLUS NE;Lo;0;L;;;;;N;;;;; 124BE;CUNEIFORM SIGN GA2 TIMES HA PLUS A;Lo;0;L;;;;;N;;;;; 124BF;CUNEIFORM SIGN GA2 TIMES KUSHU2 PLUS KASKAL;Lo;0;L;;;;;N;;;;; 124C0;CUNEIFORM SIGN GA2 TIMES LAM;Lo;0;L;;;;;N;;;;; 124C1;CUNEIFORM SIGN GA2 TIMES LAM TIMES KUR;Lo;0;L;;;;;N;;;;; 124C2;CUNEIFORM SIGN GA2 TIMES LUH;Lo;0;L;;;;;N;;;;; 124C3;CUNEIFORM SIGN GA2 TIMES MUSH;Lo;0;L;;;;;N;;;;; 124C4;CUNEIFORM SIGN GA2 TIMES NE;Lo;0;L;;;;;N;;;;; 124C5;CUNEIFORM SIGN GA2 TIMES NE PLUS E2;Lo;0;L;;;;;N;;;;; 124C6;CUNEIFORM SIGN GA2 TIMES NE PLUS GI;Lo;0;L;;;;;N;;;;; 124C7;CUNEIFORM SIGN GA2 TIMES SHIM;Lo;0;L;;;;;N;;;;; 124C8;CUNEIFORM SIGN GA2 TIMES ZIZ2;Lo;0;L;;;;;N;;;;; 124C9;CUNEIFORM SIGN GABA ROTATED NINETY DEGREES;Lo;0;L;;;;;N;;;;; 124CA;CUNEIFORM SIGN GESHTIN TIMES U;Lo;0;L;;;;;N;;;;; 124CB;CUNEIFORM SIGN GISH TIMES GISH CROSSING GISH;Lo;0;L;;;;;N;;;;; 124CC;CUNEIFORM SIGN GU2 TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; 124CD;CUNEIFORM SIGN GUD PLUS GISH TIMES TAK4;Lo;0;L;;;;;N;;;;; 124CE;CUNEIFORM SIGN HA TENU GUNU;Lo;0;L;;;;;N;;;;; 124CF;CUNEIFORM SIGN HI TIMES ASH OVER HI TIMES ASH;Lo;0;L;;;;;N;;;;; 124D0;CUNEIFORM SIGN KA TIMES BU;Lo;0;L;;;;;N;;;;; 124D1;CUNEIFORM SIGN KA TIMES KA;Lo;0;L;;;;;N;;;;; 124D2;CUNEIFORM SIGN KA TIMES U U U;Lo;0;L;;;;;N;;;;; 124D3;CUNEIFORM SIGN KA TIMES UR;Lo;0;L;;;;;N;;;;; 124D4;CUNEIFORM SIGN LAGAB TIMES ZU OVER ZU;Lo;0;L;;;;;N;;;;; 124D5;CUNEIFORM SIGN LAK-003;Lo;0;L;;;;;N;;;;; 124D6;CUNEIFORM SIGN LAK-021;Lo;0;L;;;;;N;;;;; 124D7;CUNEIFORM SIGN LAK-025;Lo;0;L;;;;;N;;;;; 124D8;CUNEIFORM SIGN LAK-030;Lo;0;L;;;;;N;;;;; 124D9;CUNEIFORM SIGN LAK-050;Lo;0;L;;;;;N;;;;; 124DA;CUNEIFORM SIGN LAK-051;Lo;0;L;;;;;N;;;;; 124DB;CUNEIFORM SIGN LAK-062;Lo;0;L;;;;;N;;;;; 124DC;CUNEIFORM SIGN LAK-079 OVER LAK-079 GUNU;Lo;0;L;;;;;N;;;;; 124DD;CUNEIFORM SIGN LAK-080;Lo;0;L;;;;;N;;;;; 124DE;CUNEIFORM SIGN LAK-081 OVER LAK-081;Lo;0;L;;;;;N;;;;; 124DF;CUNEIFORM SIGN LAK-092;Lo;0;L;;;;;N;;;;; 124E0;CUNEIFORM SIGN LAK-130;Lo;0;L;;;;;N;;;;; 124E1;CUNEIFORM SIGN LAK-142;Lo;0;L;;;;;N;;;;; 124E2;CUNEIFORM SIGN LAK-210;Lo;0;L;;;;;N;;;;; 124E3;CUNEIFORM SIGN LAK-219;Lo;0;L;;;;;N;;;;; 124E4;CUNEIFORM SIGN LAK-220;Lo;0;L;;;;;N;;;;; 124E5;CUNEIFORM SIGN LAK-225;Lo;0;L;;;;;N;;;;; 124E6;CUNEIFORM SIGN LAK-228;Lo;0;L;;;;;N;;;;; 124E7;CUNEIFORM SIGN LAK-238;Lo;0;L;;;;;N;;;;; 124E8;CUNEIFORM SIGN LAK-265;Lo;0;L;;;;;N;;;;; 124E9;CUNEIFORM SIGN LAK-266;Lo;0;L;;;;;N;;;;; 124EA;CUNEIFORM SIGN LAK-343;Lo;0;L;;;;;N;;;;; 124EB;CUNEIFORM SIGN LAK-347;Lo;0;L;;;;;N;;;;; 124EC;CUNEIFORM SIGN LAK-348;Lo;0;L;;;;;N;;;;; 124ED;CUNEIFORM SIGN LAK-383;Lo;0;L;;;;;N;;;;; 124EE;CUNEIFORM SIGN LAK-384;Lo;0;L;;;;;N;;;;; 124EF;CUNEIFORM SIGN LAK-390;Lo;0;L;;;;;N;;;;; 124F0;CUNEIFORM SIGN LAK-441;Lo;0;L;;;;;N;;;;; 124F1;CUNEIFORM SIGN LAK-449;Lo;0;L;;;;;N;;;;; 124F2;CUNEIFORM SIGN LAK-449 TIMES GU;Lo;0;L;;;;;N;;;;; 124F3;CUNEIFORM SIGN LAK-449 TIMES IGI;Lo;0;L;;;;;N;;;;; 124F4;CUNEIFORM SIGN LAK-449 TIMES PAP PLUS LU3;Lo;0;L;;;;;N;;;;; 124F5;CUNEIFORM SIGN LAK-449 TIMES PAP PLUS PAP PLUS LU3;Lo;0;L;;;;;N;;;;; 124F6;CUNEIFORM SIGN LAK-449 TIMES U2 PLUS BA;Lo;0;L;;;;;N;;;;; 124F7;CUNEIFORM SIGN LAK-450;Lo;0;L;;;;;N;;;;; 124F8;CUNEIFORM SIGN LAK-457;Lo;0;L;;;;;N;;;;; 124F9;CUNEIFORM SIGN LAK-470;Lo;0;L;;;;;N;;;;; 124FA;CUNEIFORM SIGN LAK-483;Lo;0;L;;;;;N;;;;; 124FB;CUNEIFORM SIGN LAK-490;Lo;0;L;;;;;N;;;;; 124FC;CUNEIFORM SIGN LAK-492;Lo;0;L;;;;;N;;;;; 124FD;CUNEIFORM SIGN LAK-493;Lo;0;L;;;;;N;;;;; 124FE;CUNEIFORM SIGN LAK-495;Lo;0;L;;;;;N;;;;; 124FF;CUNEIFORM SIGN LAK-550;Lo;0;L;;;;;N;;;;; 12500;CUNEIFORM SIGN LAK-608;Lo;0;L;;;;;N;;;;; 12501;CUNEIFORM SIGN LAK-617;Lo;0;L;;;;;N;;;;; 12502;CUNEIFORM SIGN LAK-617 TIMES ASH;Lo;0;L;;;;;N;;;;; 12503;CUNEIFORM SIGN LAK-617 TIMES BAD;Lo;0;L;;;;;N;;;;; 12504;CUNEIFORM SIGN LAK-617 TIMES DUN3 GUNU GUNU;Lo;0;L;;;;;N;;;;; 12505;CUNEIFORM SIGN LAK-617 TIMES KU3;Lo;0;L;;;;;N;;;;; 12506;CUNEIFORM SIGN LAK-617 TIMES LA;Lo;0;L;;;;;N;;;;; 12507;CUNEIFORM SIGN LAK-617 TIMES TAR;Lo;0;L;;;;;N;;;;; 12508;CUNEIFORM SIGN LAK-617 TIMES TE;Lo;0;L;;;;;N;;;;; 12509;CUNEIFORM SIGN LAK-617 TIMES U2;Lo;0;L;;;;;N;;;;; 1250A;CUNEIFORM SIGN LAK-617 TIMES UD;Lo;0;L;;;;;N;;;;; 1250B;CUNEIFORM SIGN LAK-617 TIMES URUDA;Lo;0;L;;;;;N;;;;; 1250C;CUNEIFORM SIGN LAK-636;Lo;0;L;;;;;N;;;;; 1250D;CUNEIFORM SIGN LAK-648;Lo;0;L;;;;;N;;;;; 1250E;CUNEIFORM SIGN LAK-648 TIMES DUB;Lo;0;L;;;;;N;;;;; 1250F;CUNEIFORM SIGN LAK-648 TIMES GA;Lo;0;L;;;;;N;;;;; 12510;CUNEIFORM SIGN LAK-648 TIMES IGI;Lo;0;L;;;;;N;;;;; 12511;CUNEIFORM SIGN LAK-648 TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; 12512;CUNEIFORM SIGN LAK-648 TIMES NI;Lo;0;L;;;;;N;;;;; 12513;CUNEIFORM SIGN LAK-648 TIMES PAP PLUS PAP PLUS LU3;Lo;0;L;;;;;N;;;;; 12514;CUNEIFORM SIGN LAK-648 TIMES SHESH PLUS KI;Lo;0;L;;;;;N;;;;; 12515;CUNEIFORM SIGN LAK-648 TIMES UD;Lo;0;L;;;;;N;;;;; 12516;CUNEIFORM SIGN LAK-648 TIMES URUDA;Lo;0;L;;;;;N;;;;; 12517;CUNEIFORM SIGN LAK-724;Lo;0;L;;;;;N;;;;; 12518;CUNEIFORM SIGN LAK-749;Lo;0;L;;;;;N;;;;; 12519;CUNEIFORM SIGN LU2 GUNU TIMES ASH;Lo;0;L;;;;;N;;;;; 1251A;CUNEIFORM SIGN LU2 TIMES DISH;Lo;0;L;;;;;N;;;;; 1251B;CUNEIFORM SIGN LU2 TIMES HAL;Lo;0;L;;;;;N;;;;; 1251C;CUNEIFORM SIGN LU2 TIMES PAP;Lo;0;L;;;;;N;;;;; 1251D;CUNEIFORM SIGN LU2 TIMES PAP PLUS PAP PLUS LU3;Lo;0;L;;;;;N;;;;; 1251E;CUNEIFORM SIGN LU2 TIMES TAK4;Lo;0;L;;;;;N;;;;; 1251F;CUNEIFORM SIGN MI PLUS ZA7;Lo;0;L;;;;;N;;;;; 12520;CUNEIFORM SIGN MUSH OVER MUSH TIMES GA;Lo;0;L;;;;;N;;;;; 12521;CUNEIFORM SIGN MUSH OVER MUSH TIMES KAK;Lo;0;L;;;;;N;;;;; 12522;CUNEIFORM SIGN NINDA2 TIMES DIM GUNU;Lo;0;L;;;;;N;;;;; 12523;CUNEIFORM SIGN NINDA2 TIMES GISH;Lo;0;L;;;;;N;;;;; 12524;CUNEIFORM SIGN NINDA2 TIMES GUL;Lo;0;L;;;;;N;;;;; 12525;CUNEIFORM SIGN NINDA2 TIMES HI;Lo;0;L;;;;;N;;;;; 12526;CUNEIFORM SIGN NINDA2 TIMES KESH2;Lo;0;L;;;;;N;;;;; 12527;CUNEIFORM SIGN NINDA2 TIMES LAK-050;Lo;0;L;;;;;N;;;;; 12528;CUNEIFORM SIGN NINDA2 TIMES MASH;Lo;0;L;;;;;N;;;;; 12529;CUNEIFORM SIGN NINDA2 TIMES PAP PLUS PAP;Lo;0;L;;;;;N;;;;; 1252A;CUNEIFORM SIGN NINDA2 TIMES U;Lo;0;L;;;;;N;;;;; 1252B;CUNEIFORM SIGN NINDA2 TIMES U PLUS U;Lo;0;L;;;;;N;;;;; 1252C;CUNEIFORM SIGN NINDA2 TIMES URUDA;Lo;0;L;;;;;N;;;;; 1252D;CUNEIFORM SIGN SAG GUNU TIMES HA;Lo;0;L;;;;;N;;;;; 1252E;CUNEIFORM SIGN SAG TIMES EN;Lo;0;L;;;;;N;;;;; 1252F;CUNEIFORM SIGN SAG TIMES SHE AT LEFT;Lo;0;L;;;;;N;;;;; 12530;CUNEIFORM SIGN SAG TIMES TAK4;Lo;0;L;;;;;N;;;;; 12531;CUNEIFORM SIGN SHA6 TENU;Lo;0;L;;;;;N;;;;; 12532;CUNEIFORM SIGN SHE OVER SHE;Lo;0;L;;;;;N;;;;; 12533;CUNEIFORM SIGN SHE PLUS HUB2;Lo;0;L;;;;;N;;;;; 12534;CUNEIFORM SIGN SHE PLUS NAM2;Lo;0;L;;;;;N;;;;; 12535;CUNEIFORM SIGN SHE PLUS SAR;Lo;0;L;;;;;N;;;;; 12536;CUNEIFORM SIGN SHU2 PLUS DUG TIMES NI;Lo;0;L;;;;;N;;;;; 12537;CUNEIFORM SIGN SHU2 PLUS E2 TIMES AN;Lo;0;L;;;;;N;;;;; 12538;CUNEIFORM SIGN SI TIMES TAK4;Lo;0;L;;;;;N;;;;; 12539;CUNEIFORM SIGN TAK4 PLUS SAG;Lo;0;L;;;;;N;;;;; 1253A;CUNEIFORM SIGN TUM TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; 1253B;CUNEIFORM SIGN TUM TIMES THREE DISH;Lo;0;L;;;;;N;;;;; 1253C;CUNEIFORM SIGN UR2 INVERTED;Lo;0;L;;;;;N;;;;; 1253D;CUNEIFORM SIGN UR2 TIMES UD;Lo;0;L;;;;;N;;;;; 1253E;CUNEIFORM SIGN URU TIMES DARA3;Lo;0;L;;;;;N;;;;; 1253F;CUNEIFORM SIGN URU TIMES LAK-668;Lo;0;L;;;;;N;;;;; 12540;CUNEIFORM SIGN URU TIMES LU3;Lo;0;L;;;;;N;;;;; 12541;CUNEIFORM SIGN ZA7;Lo;0;L;;;;;N;;;;; 12542;CUNEIFORM SIGN ZU OVER ZU PLUS SAR;Lo;0;L;;;;;N;;;;; 12543;CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU;Lo;0;L;;;;;N;;;;; 12F90;CYPRO-MINOAN SIGN CM001;Lo;0;L;;;;;N;;;;; 12F91;CYPRO-MINOAN SIGN CM002;Lo;0;L;;;;;N;;;;; 12F92;CYPRO-MINOAN SIGN CM004;Lo;0;L;;;;;N;;;;; 12F93;CYPRO-MINOAN SIGN CM005;Lo;0;L;;;;;N;;;;; 12F94;CYPRO-MINOAN SIGN CM006;Lo;0;L;;;;;N;;;;; 12F95;CYPRO-MINOAN SIGN CM007;Lo;0;L;;;;;N;;;;; 12F96;CYPRO-MINOAN SIGN CM008;Lo;0;L;;;;;N;;;;; 12F97;CYPRO-MINOAN SIGN CM009;Lo;0;L;;;;;N;;;;; 12F98;CYPRO-MINOAN SIGN CM010;Lo;0;L;;;;;N;;;;; 12F99;CYPRO-MINOAN SIGN CM011;Lo;0;L;;;;;N;;;;; 12F9A;CYPRO-MINOAN SIGN CM012;Lo;0;L;;;;;N;;;;; 12F9B;CYPRO-MINOAN SIGN CM012B;Lo;0;L;;;;;N;;;;; 12F9C;CYPRO-MINOAN SIGN CM013;Lo;0;L;;;;;N;;;;; 12F9D;CYPRO-MINOAN SIGN CM015;Lo;0;L;;;;;N;;;;; 12F9E;CYPRO-MINOAN SIGN CM017;Lo;0;L;;;;;N;;;;; 12F9F;CYPRO-MINOAN SIGN CM019;Lo;0;L;;;;;N;;;;; 12FA0;CYPRO-MINOAN SIGN CM021;Lo;0;L;;;;;N;;;;; 12FA1;CYPRO-MINOAN SIGN CM023;Lo;0;L;;;;;N;;;;; 12FA2;CYPRO-MINOAN SIGN CM024;Lo;0;L;;;;;N;;;;; 12FA3;CYPRO-MINOAN SIGN CM025;Lo;0;L;;;;;N;;;;; 12FA4;CYPRO-MINOAN SIGN CM026;Lo;0;L;;;;;N;;;;; 12FA5;CYPRO-MINOAN SIGN CM027;Lo;0;L;;;;;N;;;;; 12FA6;CYPRO-MINOAN SIGN CM028;Lo;0;L;;;;;N;;;;; 12FA7;CYPRO-MINOAN SIGN CM029;Lo;0;L;;;;;N;;;;; 12FA8;CYPRO-MINOAN SIGN CM030;Lo;0;L;;;;;N;;;;; 12FA9;CYPRO-MINOAN SIGN CM033;Lo;0;L;;;;;N;;;;; 12FAA;CYPRO-MINOAN SIGN CM034;Lo;0;L;;;;;N;;;;; 12FAB;CYPRO-MINOAN SIGN CM035;Lo;0;L;;;;;N;;;;; 12FAC;CYPRO-MINOAN SIGN CM036;Lo;0;L;;;;;N;;;;; 12FAD;CYPRO-MINOAN SIGN CM037;Lo;0;L;;;;;N;;;;; 12FAE;CYPRO-MINOAN SIGN CM038;Lo;0;L;;;;;N;;;;; 12FAF;CYPRO-MINOAN SIGN CM039;Lo;0;L;;;;;N;;;;; 12FB0;CYPRO-MINOAN SIGN CM040;Lo;0;L;;;;;N;;;;; 12FB1;CYPRO-MINOAN SIGN CM041;Lo;0;L;;;;;N;;;;; 12FB2;CYPRO-MINOAN SIGN CM044;Lo;0;L;;;;;N;;;;; 12FB3;CYPRO-MINOAN SIGN CM046;Lo;0;L;;;;;N;;;;; 12FB4;CYPRO-MINOAN SIGN CM047;Lo;0;L;;;;;N;;;;; 12FB5;CYPRO-MINOAN SIGN CM049;Lo;0;L;;;;;N;;;;; 12FB6;CYPRO-MINOAN SIGN CM050;Lo;0;L;;;;;N;;;;; 12FB7;CYPRO-MINOAN SIGN CM051;Lo;0;L;;;;;N;;;;; 12FB8;CYPRO-MINOAN SIGN CM052;Lo;0;L;;;;;N;;;;; 12FB9;CYPRO-MINOAN SIGN CM053;Lo;0;L;;;;;N;;;;; 12FBA;CYPRO-MINOAN SIGN CM054;Lo;0;L;;;;;N;;;;; 12FBB;CYPRO-MINOAN SIGN CM055;Lo;0;L;;;;;N;;;;; 12FBC;CYPRO-MINOAN SIGN CM056;Lo;0;L;;;;;N;;;;; 12FBD;CYPRO-MINOAN SIGN CM058;Lo;0;L;;;;;N;;;;; 12FBE;CYPRO-MINOAN SIGN CM059;Lo;0;L;;;;;N;;;;; 12FBF;CYPRO-MINOAN SIGN CM060;Lo;0;L;;;;;N;;;;; 12FC0;CYPRO-MINOAN SIGN CM061;Lo;0;L;;;;;N;;;;; 12FC1;CYPRO-MINOAN SIGN CM062;Lo;0;L;;;;;N;;;;; 12FC2;CYPRO-MINOAN SIGN CM063;Lo;0;L;;;;;N;;;;; 12FC3;CYPRO-MINOAN SIGN CM064;Lo;0;L;;;;;N;;;;; 12FC4;CYPRO-MINOAN SIGN CM066;Lo;0;L;;;;;N;;;;; 12FC5;CYPRO-MINOAN SIGN CM067;Lo;0;L;;;;;N;;;;; 12FC6;CYPRO-MINOAN SIGN CM068;Lo;0;L;;;;;N;;;;; 12FC7;CYPRO-MINOAN SIGN CM069;Lo;0;L;;;;;N;;;;; 12FC8;CYPRO-MINOAN SIGN CM070;Lo;0;L;;;;;N;;;;; 12FC9;CYPRO-MINOAN SIGN CM071;Lo;0;L;;;;;N;;;;; 12FCA;CYPRO-MINOAN SIGN CM072;Lo;0;L;;;;;N;;;;; 12FCB;CYPRO-MINOAN SIGN CM073;Lo;0;L;;;;;N;;;;; 12FCC;CYPRO-MINOAN SIGN CM074;Lo;0;L;;;;;N;;;;; 12FCD;CYPRO-MINOAN SIGN CM075;Lo;0;L;;;;;N;;;;; 12FCE;CYPRO-MINOAN SIGN CM075B;Lo;0;L;;;;;N;;;;; 12FCF;CYPRO-MINOAN SIGN CM076;Lo;0;L;;;;;N;;;;; 12FD0;CYPRO-MINOAN SIGN CM078;Lo;0;L;;;;;N;;;;; 12FD1;CYPRO-MINOAN SIGN CM079;Lo;0;L;;;;;N;;;;; 12FD2;CYPRO-MINOAN SIGN CM080;Lo;0;L;;;;;N;;;;; 12FD3;CYPRO-MINOAN SIGN CM081;Lo;0;L;;;;;N;;;;; 12FD4;CYPRO-MINOAN SIGN CM082;Lo;0;L;;;;;N;;;;; 12FD5;CYPRO-MINOAN SIGN CM083;Lo;0;L;;;;;N;;;;; 12FD6;CYPRO-MINOAN SIGN CM084;Lo;0;L;;;;;N;;;;; 12FD7;CYPRO-MINOAN SIGN CM085;Lo;0;L;;;;;N;;;;; 12FD8;CYPRO-MINOAN SIGN CM086;Lo;0;L;;;;;N;;;;; 12FD9;CYPRO-MINOAN SIGN CM087;Lo;0;L;;;;;N;;;;; 12FDA;CYPRO-MINOAN SIGN CM088;Lo;0;L;;;;;N;;;;; 12FDB;CYPRO-MINOAN SIGN CM089;Lo;0;L;;;;;N;;;;; 12FDC;CYPRO-MINOAN SIGN CM090;Lo;0;L;;;;;N;;;;; 12FDD;CYPRO-MINOAN SIGN CM091;Lo;0;L;;;;;N;;;;; 12FDE;CYPRO-MINOAN SIGN CM092;Lo;0;L;;;;;N;;;;; 12FDF;CYPRO-MINOAN SIGN CM094;Lo;0;L;;;;;N;;;;; 12FE0;CYPRO-MINOAN SIGN CM095;Lo;0;L;;;;;N;;;;; 12FE1;CYPRO-MINOAN SIGN CM096;Lo;0;L;;;;;N;;;;; 12FE2;CYPRO-MINOAN SIGN CM097;Lo;0;L;;;;;N;;;;; 12FE3;CYPRO-MINOAN SIGN CM098;Lo;0;L;;;;;N;;;;; 12FE4;CYPRO-MINOAN SIGN CM099;Lo;0;L;;;;;N;;;;; 12FE5;CYPRO-MINOAN SIGN CM100;Lo;0;L;;;;;N;;;;; 12FE6;CYPRO-MINOAN SIGN CM101;Lo;0;L;;;;;N;;;;; 12FE7;CYPRO-MINOAN SIGN CM102;Lo;0;L;;;;;N;;;;; 12FE8;CYPRO-MINOAN SIGN CM103;Lo;0;L;;;;;N;;;;; 12FE9;CYPRO-MINOAN SIGN CM104;Lo;0;L;;;;;N;;;;; 12FEA;CYPRO-MINOAN SIGN CM105;Lo;0;L;;;;;N;;;;; 12FEB;CYPRO-MINOAN SIGN CM107;Lo;0;L;;;;;N;;;;; 12FEC;CYPRO-MINOAN SIGN CM108;Lo;0;L;;;;;N;;;;; 12FED;CYPRO-MINOAN SIGN CM109;Lo;0;L;;;;;N;;;;; 12FEE;CYPRO-MINOAN SIGN CM110;Lo;0;L;;;;;N;;;;; 12FEF;CYPRO-MINOAN SIGN CM112;Lo;0;L;;;;;N;;;;; 12FF0;CYPRO-MINOAN SIGN CM114;Lo;0;L;;;;;N;;;;; 12FF1;CYPRO-MINOAN SIGN CM301;Po;0;L;;;;;N;;;;; 12FF2;CYPRO-MINOAN SIGN CM302;Po;0;L;;;;;N;;;;; 13000;EGYPTIAN HIEROGLYPH A001;Lo;0;L;;;;;N;;;;; 13001;EGYPTIAN HIEROGLYPH A002;Lo;0;L;;;;;N;;;;; 13002;EGYPTIAN HIEROGLYPH A003;Lo;0;L;;;;;N;;;;; 13003;EGYPTIAN HIEROGLYPH A004;Lo;0;L;;;;;N;;;;; 13004;EGYPTIAN HIEROGLYPH A005;Lo;0;L;;;;;N;;;;; 13005;EGYPTIAN HIEROGLYPH A005A;Lo;0;L;;;;;N;;;;; 13006;EGYPTIAN HIEROGLYPH A006;Lo;0;L;;;;;N;;;;; 13007;EGYPTIAN HIEROGLYPH A006A;Lo;0;L;;;;;N;;;;; 13008;EGYPTIAN HIEROGLYPH A006B;Lo;0;L;;;;;N;;;;; 13009;EGYPTIAN HIEROGLYPH A007;Lo;0;L;;;;;N;;;;; 1300A;EGYPTIAN HIEROGLYPH A008;Lo;0;L;;;;;N;;;;; 1300B;EGYPTIAN HIEROGLYPH A009;Lo;0;L;;;;;N;;;;; 1300C;EGYPTIAN HIEROGLYPH A010;Lo;0;L;;;;;N;;;;; 1300D;EGYPTIAN HIEROGLYPH A011;Lo;0;L;;;;;N;;;;; 1300E;EGYPTIAN HIEROGLYPH A012;Lo;0;L;;;;;N;;;;; 1300F;EGYPTIAN HIEROGLYPH A013;Lo;0;L;;;;;N;;;;; 13010;EGYPTIAN HIEROGLYPH A014;Lo;0;L;;;;;N;;;;; 13011;EGYPTIAN HIEROGLYPH A014A;Lo;0;L;;;;;N;;;;; 13012;EGYPTIAN HIEROGLYPH A015;Lo;0;L;;;;;N;;;;; 13013;EGYPTIAN HIEROGLYPH A016;Lo;0;L;;;;;N;;;;; 13014;EGYPTIAN HIEROGLYPH A017;Lo;0;L;;;;;N;;;;; 13015;EGYPTIAN HIEROGLYPH A017A;Lo;0;L;;;;;N;;;;; 13016;EGYPTIAN HIEROGLYPH A018;Lo;0;L;;;;;N;;;;; 13017;EGYPTIAN HIEROGLYPH A019;Lo;0;L;;;;;N;;;;; 13018;EGYPTIAN HIEROGLYPH A020;Lo;0;L;;;;;N;;;;; 13019;EGYPTIAN HIEROGLYPH A021;Lo;0;L;;;;;N;;;;; 1301A;EGYPTIAN HIEROGLYPH A022;Lo;0;L;;;;;N;;;;; 1301B;EGYPTIAN HIEROGLYPH A023;Lo;0;L;;;;;N;;;;; 1301C;EGYPTIAN HIEROGLYPH A024;Lo;0;L;;;;;N;;;;; 1301D;EGYPTIAN HIEROGLYPH A025;Lo;0;L;;;;;N;;;;; 1301E;EGYPTIAN HIEROGLYPH A026;Lo;0;L;;;;;N;;;;; 1301F;EGYPTIAN HIEROGLYPH A027;Lo;0;L;;;;;N;;;;; 13020;EGYPTIAN HIEROGLYPH A028;Lo;0;L;;;;;N;;;;; 13021;EGYPTIAN HIEROGLYPH A029;Lo;0;L;;;;;N;;;;; 13022;EGYPTIAN HIEROGLYPH A030;Lo;0;L;;;;;N;;;;; 13023;EGYPTIAN HIEROGLYPH A031;Lo;0;L;;;;;N;;;;; 13024;EGYPTIAN HIEROGLYPH A032;Lo;0;L;;;;;N;;;;; 13025;EGYPTIAN HIEROGLYPH A032A;Lo;0;L;;;;;N;;;;; 13026;EGYPTIAN HIEROGLYPH A033;Lo;0;L;;;;;N;;;;; 13027;EGYPTIAN HIEROGLYPH A034;Lo;0;L;;;;;N;;;;; 13028;EGYPTIAN HIEROGLYPH A035;Lo;0;L;;;;;N;;;;; 13029;EGYPTIAN HIEROGLYPH A036;Lo;0;L;;;;;N;;;;; 1302A;EGYPTIAN HIEROGLYPH A037;Lo;0;L;;;;;N;;;;; 1302B;EGYPTIAN HIEROGLYPH A038;Lo;0;L;;;;;N;;;;; 1302C;EGYPTIAN HIEROGLYPH A039;Lo;0;L;;;;;N;;;;; 1302D;EGYPTIAN HIEROGLYPH A040;Lo;0;L;;;;;N;;;;; 1302E;EGYPTIAN HIEROGLYPH A040A;Lo;0;L;;;;;N;;;;; 1302F;EGYPTIAN HIEROGLYPH A041;Lo;0;L;;;;;N;;;;; 13030;EGYPTIAN HIEROGLYPH A042;Lo;0;L;;;;;N;;;;; 13031;EGYPTIAN HIEROGLYPH A042A;Lo;0;L;;;;;N;;;;; 13032;EGYPTIAN HIEROGLYPH A043;Lo;0;L;;;;;N;;;;; 13033;EGYPTIAN HIEROGLYPH A043A;Lo;0;L;;;;;N;;;;; 13034;EGYPTIAN HIEROGLYPH A044;Lo;0;L;;;;;N;;;;; 13035;EGYPTIAN HIEROGLYPH A045;Lo;0;L;;;;;N;;;;; 13036;EGYPTIAN HIEROGLYPH A045A;Lo;0;L;;;;;N;;;;; 13037;EGYPTIAN HIEROGLYPH A046;Lo;0;L;;;;;N;;;;; 13038;EGYPTIAN HIEROGLYPH A047;Lo;0;L;;;;;N;;;;; 13039;EGYPTIAN HIEROGLYPH A048;Lo;0;L;;;;;N;;;;; 1303A;EGYPTIAN HIEROGLYPH A049;Lo;0;L;;;;;N;;;;; 1303B;EGYPTIAN HIEROGLYPH A050;Lo;0;L;;;;;N;;;;; 1303C;EGYPTIAN HIEROGLYPH A051;Lo;0;L;;;;;N;;;;; 1303D;EGYPTIAN HIEROGLYPH A052;Lo;0;L;;;;;N;;;;; 1303E;EGYPTIAN HIEROGLYPH A053;Lo;0;L;;;;;N;;;;; 1303F;EGYPTIAN HIEROGLYPH A054;Lo;0;L;;;;;N;;;;; 13040;EGYPTIAN HIEROGLYPH A055;Lo;0;L;;;;;N;;;;; 13041;EGYPTIAN HIEROGLYPH A056;Lo;0;L;;;;;N;;;;; 13042;EGYPTIAN HIEROGLYPH A057;Lo;0;L;;;;;N;;;;; 13043;EGYPTIAN HIEROGLYPH A058;Lo;0;L;;;;;N;;;;; 13044;EGYPTIAN HIEROGLYPH A059;Lo;0;L;;;;;N;;;;; 13045;EGYPTIAN HIEROGLYPH A060;Lo;0;L;;;;;N;;;;; 13046;EGYPTIAN HIEROGLYPH A061;Lo;0;L;;;;;N;;;;; 13047;EGYPTIAN HIEROGLYPH A062;Lo;0;L;;;;;N;;;;; 13048;EGYPTIAN HIEROGLYPH A063;Lo;0;L;;;;;N;;;;; 13049;EGYPTIAN HIEROGLYPH A064;Lo;0;L;;;;;N;;;;; 1304A;EGYPTIAN HIEROGLYPH A065;Lo;0;L;;;;;N;;;;; 1304B;EGYPTIAN HIEROGLYPH A066;Lo;0;L;;;;;N;;;;; 1304C;EGYPTIAN HIEROGLYPH A067;Lo;0;L;;;;;N;;;;; 1304D;EGYPTIAN HIEROGLYPH A068;Lo;0;L;;;;;N;;;;; 1304E;EGYPTIAN HIEROGLYPH A069;Lo;0;L;;;;;N;;;;; 1304F;EGYPTIAN HIEROGLYPH A070;Lo;0;L;;;;;N;;;;; 13050;EGYPTIAN HIEROGLYPH B001;Lo;0;L;;;;;N;;;;; 13051;EGYPTIAN HIEROGLYPH B002;Lo;0;L;;;;;N;;;;; 13052;EGYPTIAN HIEROGLYPH B003;Lo;0;L;;;;;N;;;;; 13053;EGYPTIAN HIEROGLYPH B004;Lo;0;L;;;;;N;;;;; 13054;EGYPTIAN HIEROGLYPH B005;Lo;0;L;;;;;N;;;;; 13055;EGYPTIAN HIEROGLYPH B005A;Lo;0;L;;;;;N;;;;; 13056;EGYPTIAN HIEROGLYPH B006;Lo;0;L;;;;;N;;;;; 13057;EGYPTIAN HIEROGLYPH B007;Lo;0;L;;;;;N;;;;; 13058;EGYPTIAN HIEROGLYPH B008;Lo;0;L;;;;;N;;;;; 13059;EGYPTIAN HIEROGLYPH B009;Lo;0;L;;;;;N;;;;; 1305A;EGYPTIAN HIEROGLYPH C001;Lo;0;L;;;;;N;;;;; 1305B;EGYPTIAN HIEROGLYPH C002;Lo;0;L;;;;;N;;;;; 1305C;EGYPTIAN HIEROGLYPH C002A;Lo;0;L;;;;;N;;;;; 1305D;EGYPTIAN HIEROGLYPH C002B;Lo;0;L;;;;;N;;;;; 1305E;EGYPTIAN HIEROGLYPH C002C;Lo;0;L;;;;;N;;;;; 1305F;EGYPTIAN HIEROGLYPH C003;Lo;0;L;;;;;N;;;;; 13060;EGYPTIAN HIEROGLYPH C004;Lo;0;L;;;;;N;;;;; 13061;EGYPTIAN HIEROGLYPH C005;Lo;0;L;;;;;N;;;;; 13062;EGYPTIAN HIEROGLYPH C006;Lo;0;L;;;;;N;;;;; 13063;EGYPTIAN HIEROGLYPH C007;Lo;0;L;;;;;N;;;;; 13064;EGYPTIAN HIEROGLYPH C008;Lo;0;L;;;;;N;;;;; 13065;EGYPTIAN HIEROGLYPH C009;Lo;0;L;;;;;N;;;;; 13066;EGYPTIAN HIEROGLYPH C010;Lo;0;L;;;;;N;;;;; 13067;EGYPTIAN HIEROGLYPH C010A;Lo;0;L;;;;;N;;;;; 13068;EGYPTIAN HIEROGLYPH C011;Lo;0;L;;;;;N;;;;; 13069;EGYPTIAN HIEROGLYPH C012;Lo;0;L;;;;;N;;;;; 1306A;EGYPTIAN HIEROGLYPH C013;Lo;0;L;;;;;N;;;;; 1306B;EGYPTIAN HIEROGLYPH C014;Lo;0;L;;;;;N;;;;; 1306C;EGYPTIAN HIEROGLYPH C015;Lo;0;L;;;;;N;;;;; 1306D;EGYPTIAN HIEROGLYPH C016;Lo;0;L;;;;;N;;;;; 1306E;EGYPTIAN HIEROGLYPH C017;Lo;0;L;;;;;N;;;;; 1306F;EGYPTIAN HIEROGLYPH C018;Lo;0;L;;;;;N;;;;; 13070;EGYPTIAN HIEROGLYPH C019;Lo;0;L;;;;;N;;;;; 13071;EGYPTIAN HIEROGLYPH C020;Lo;0;L;;;;;N;;;;; 13072;EGYPTIAN HIEROGLYPH C021;Lo;0;L;;;;;N;;;;; 13073;EGYPTIAN HIEROGLYPH C022;Lo;0;L;;;;;N;;;;; 13074;EGYPTIAN HIEROGLYPH C023;Lo;0;L;;;;;N;;;;; 13075;EGYPTIAN HIEROGLYPH C024;Lo;0;L;;;;;N;;;;; 13076;EGYPTIAN HIEROGLYPH D001;Lo;0;L;;;;;N;;;;; 13077;EGYPTIAN HIEROGLYPH D002;Lo;0;L;;;;;N;;;;; 13078;EGYPTIAN HIEROGLYPH D003;Lo;0;L;;;;;N;;;;; 13079;EGYPTIAN HIEROGLYPH D004;Lo;0;L;;;;;N;;;;; 1307A;EGYPTIAN HIEROGLYPH D005;Lo;0;L;;;;;N;;;;; 1307B;EGYPTIAN HIEROGLYPH D006;Lo;0;L;;;;;N;;;;; 1307C;EGYPTIAN HIEROGLYPH D007;Lo;0;L;;;;;N;;;;; 1307D;EGYPTIAN HIEROGLYPH D008;Lo;0;L;;;;;N;;;;; 1307E;EGYPTIAN HIEROGLYPH D008A;Lo;0;L;;;;;N;;;;; 1307F;EGYPTIAN HIEROGLYPH D009;Lo;0;L;;;;;N;;;;; 13080;EGYPTIAN HIEROGLYPH D010;Lo;0;L;;;;;N;;;;; 13081;EGYPTIAN HIEROGLYPH D011;Lo;0;L;;;;;N;;;;; 13082;EGYPTIAN HIEROGLYPH D012;Lo;0;L;;;;;N;;;;; 13083;EGYPTIAN HIEROGLYPH D013;Lo;0;L;;;;;N;;;;; 13084;EGYPTIAN HIEROGLYPH D014;Lo;0;L;;;;;N;;;;; 13085;EGYPTIAN HIEROGLYPH D015;Lo;0;L;;;;;N;;;;; 13086;EGYPTIAN HIEROGLYPH D016;Lo;0;L;;;;;N;;;;; 13087;EGYPTIAN HIEROGLYPH D017;Lo;0;L;;;;;N;;;;; 13088;EGYPTIAN HIEROGLYPH D018;Lo;0;L;;;;;N;;;;; 13089;EGYPTIAN HIEROGLYPH D019;Lo;0;L;;;;;N;;;;; 1308A;EGYPTIAN HIEROGLYPH D020;Lo;0;L;;;;;N;;;;; 1308B;EGYPTIAN HIEROGLYPH D021;Lo;0;L;;;;;N;;;;; 1308C;EGYPTIAN HIEROGLYPH D022;Lo;0;L;;;;;N;;;;; 1308D;EGYPTIAN HIEROGLYPH D023;Lo;0;L;;;;;N;;;;; 1308E;EGYPTIAN HIEROGLYPH D024;Lo;0;L;;;;;N;;;;; 1308F;EGYPTIAN HIEROGLYPH D025;Lo;0;L;;;;;N;;;;; 13090;EGYPTIAN HIEROGLYPH D026;Lo;0;L;;;;;N;;;;; 13091;EGYPTIAN HIEROGLYPH D027;Lo;0;L;;;;;N;;;;; 13092;EGYPTIAN HIEROGLYPH D027A;Lo;0;L;;;;;N;;;;; 13093;EGYPTIAN HIEROGLYPH D028;Lo;0;L;;;;;N;;;;; 13094;EGYPTIAN HIEROGLYPH D029;Lo;0;L;;;;;N;;;;; 13095;EGYPTIAN HIEROGLYPH D030;Lo;0;L;;;;;N;;;;; 13096;EGYPTIAN HIEROGLYPH D031;Lo;0;L;;;;;N;;;;; 13097;EGYPTIAN HIEROGLYPH D031A;Lo;0;L;;;;;N;;;;; 13098;EGYPTIAN HIEROGLYPH D032;Lo;0;L;;;;;N;;;;; 13099;EGYPTIAN HIEROGLYPH D033;Lo;0;L;;;;;N;;;;; 1309A;EGYPTIAN HIEROGLYPH D034;Lo;0;L;;;;;N;;;;; 1309B;EGYPTIAN HIEROGLYPH D034A;Lo;0;L;;;;;N;;;;; 1309C;EGYPTIAN HIEROGLYPH D035;Lo;0;L;;;;;N;;;;; 1309D;EGYPTIAN HIEROGLYPH D036;Lo;0;L;;;;;N;;;;; 1309E;EGYPTIAN HIEROGLYPH D037;Lo;0;L;;;;;N;;;;; 1309F;EGYPTIAN HIEROGLYPH D038;Lo;0;L;;;;;N;;;;; 130A0;EGYPTIAN HIEROGLYPH D039;Lo;0;L;;;;;N;;;;; 130A1;EGYPTIAN HIEROGLYPH D040;Lo;0;L;;;;;N;;;;; 130A2;EGYPTIAN HIEROGLYPH D041;Lo;0;L;;;;;N;;;;; 130A3;EGYPTIAN HIEROGLYPH D042;Lo;0;L;;;;;N;;;;; 130A4;EGYPTIAN HIEROGLYPH D043;Lo;0;L;;;;;N;;;;; 130A5;EGYPTIAN HIEROGLYPH D044;Lo;0;L;;;;;N;;;;; 130A6;EGYPTIAN HIEROGLYPH D045;Lo;0;L;;;;;N;;;;; 130A7;EGYPTIAN HIEROGLYPH D046;Lo;0;L;;;;;N;;;;; 130A8;EGYPTIAN HIEROGLYPH D046A;Lo;0;L;;;;;N;;;;; 130A9;EGYPTIAN HIEROGLYPH D047;Lo;0;L;;;;;N;;;;; 130AA;EGYPTIAN HIEROGLYPH D048;Lo;0;L;;;;;N;;;;; 130AB;EGYPTIAN HIEROGLYPH D048A;Lo;0;L;;;;;N;;;;; 130AC;EGYPTIAN HIEROGLYPH D049;Lo;0;L;;;;;N;;;;; 130AD;EGYPTIAN HIEROGLYPH D050;Lo;0;L;;;;;N;;;;; 130AE;EGYPTIAN HIEROGLYPH D050A;Lo;0;L;;;;;N;;;;; 130AF;EGYPTIAN HIEROGLYPH D050B;Lo;0;L;;;;;N;;;;; 130B0;EGYPTIAN HIEROGLYPH D050C;Lo;0;L;;;;;N;;;;; 130B1;EGYPTIAN HIEROGLYPH D050D;Lo;0;L;;;;;N;;;;; 130B2;EGYPTIAN HIEROGLYPH D050E;Lo;0;L;;;;;N;;;;; 130B3;EGYPTIAN HIEROGLYPH D050F;Lo;0;L;;;;;N;;;;; 130B4;EGYPTIAN HIEROGLYPH D050G;Lo;0;L;;;;;N;;;;; 130B5;EGYPTIAN HIEROGLYPH D050H;Lo;0;L;;;;;N;;;;; 130B6;EGYPTIAN HIEROGLYPH D050I;Lo;0;L;;;;;N;;;;; 130B7;EGYPTIAN HIEROGLYPH D051;Lo;0;L;;;;;N;;;;; 130B8;EGYPTIAN HIEROGLYPH D052;Lo;0;L;;;;;N;;;;; 130B9;EGYPTIAN HIEROGLYPH D052A;Lo;0;L;;;;;N;;;;; 130BA;EGYPTIAN HIEROGLYPH D053;Lo;0;L;;;;;N;;;;; 130BB;EGYPTIAN HIEROGLYPH D054;Lo;0;L;;;;;N;;;;; 130BC;EGYPTIAN HIEROGLYPH D054A;Lo;0;L;;;;;N;;;;; 130BD;EGYPTIAN HIEROGLYPH D055;Lo;0;L;;;;;N;;;;; 130BE;EGYPTIAN HIEROGLYPH D056;Lo;0;L;;;;;N;;;;; 130BF;EGYPTIAN HIEROGLYPH D057;Lo;0;L;;;;;N;;;;; 130C0;EGYPTIAN HIEROGLYPH D058;Lo;0;L;;;;;N;;;;; 130C1;EGYPTIAN HIEROGLYPH D059;Lo;0;L;;;;;N;;;;; 130C2;EGYPTIAN HIEROGLYPH D060;Lo;0;L;;;;;N;;;;; 130C3;EGYPTIAN HIEROGLYPH D061;Lo;0;L;;;;;N;;;;; 130C4;EGYPTIAN HIEROGLYPH D062;Lo;0;L;;;;;N;;;;; 130C5;EGYPTIAN HIEROGLYPH D063;Lo;0;L;;;;;N;;;;; 130C6;EGYPTIAN HIEROGLYPH D064;Lo;0;L;;;;;N;;;;; 130C7;EGYPTIAN HIEROGLYPH D065;Lo;0;L;;;;;N;;;;; 130C8;EGYPTIAN HIEROGLYPH D066;Lo;0;L;;;;;N;;;;; 130C9;EGYPTIAN HIEROGLYPH D067;Lo;0;L;;;;;N;;;;; 130CA;EGYPTIAN HIEROGLYPH D067A;Lo;0;L;;;;;N;;;;; 130CB;EGYPTIAN HIEROGLYPH D067B;Lo;0;L;;;;;N;;;;; 130CC;EGYPTIAN HIEROGLYPH D067C;Lo;0;L;;;;;N;;;;; 130CD;EGYPTIAN HIEROGLYPH D067D;Lo;0;L;;;;;N;;;;; 130CE;EGYPTIAN HIEROGLYPH D067E;Lo;0;L;;;;;N;;;;; 130CF;EGYPTIAN HIEROGLYPH D067F;Lo;0;L;;;;;N;;;;; 130D0;EGYPTIAN HIEROGLYPH D067G;Lo;0;L;;;;;N;;;;; 130D1;EGYPTIAN HIEROGLYPH D067H;Lo;0;L;;;;;N;;;;; 130D2;EGYPTIAN HIEROGLYPH E001;Lo;0;L;;;;;N;;;;; 130D3;EGYPTIAN HIEROGLYPH E002;Lo;0;L;;;;;N;;;;; 130D4;EGYPTIAN HIEROGLYPH E003;Lo;0;L;;;;;N;;;;; 130D5;EGYPTIAN HIEROGLYPH E004;Lo;0;L;;;;;N;;;;; 130D6;EGYPTIAN HIEROGLYPH E005;Lo;0;L;;;;;N;;;;; 130D7;EGYPTIAN HIEROGLYPH E006;Lo;0;L;;;;;N;;;;; 130D8;EGYPTIAN HIEROGLYPH E007;Lo;0;L;;;;;N;;;;; 130D9;EGYPTIAN HIEROGLYPH E008;Lo;0;L;;;;;N;;;;; 130DA;EGYPTIAN HIEROGLYPH E008A;Lo;0;L;;;;;N;;;;; 130DB;EGYPTIAN HIEROGLYPH E009;Lo;0;L;;;;;N;;;;; 130DC;EGYPTIAN HIEROGLYPH E009A;Lo;0;L;;;;;N;;;;; 130DD;EGYPTIAN HIEROGLYPH E010;Lo;0;L;;;;;N;;;;; 130DE;EGYPTIAN HIEROGLYPH E011;Lo;0;L;;;;;N;;;;; 130DF;EGYPTIAN HIEROGLYPH E012;Lo;0;L;;;;;N;;;;; 130E0;EGYPTIAN HIEROGLYPH E013;Lo;0;L;;;;;N;;;;; 130E1;EGYPTIAN HIEROGLYPH E014;Lo;0;L;;;;;N;;;;; 130E2;EGYPTIAN HIEROGLYPH E015;Lo;0;L;;;;;N;;;;; 130E3;EGYPTIAN HIEROGLYPH E016;Lo;0;L;;;;;N;;;;; 130E4;EGYPTIAN HIEROGLYPH E016A;Lo;0;L;;;;;N;;;;; 130E5;EGYPTIAN HIEROGLYPH E017;Lo;0;L;;;;;N;;;;; 130E6;EGYPTIAN HIEROGLYPH E017A;Lo;0;L;;;;;N;;;;; 130E7;EGYPTIAN HIEROGLYPH E018;Lo;0;L;;;;;N;;;;; 130E8;EGYPTIAN HIEROGLYPH E019;Lo;0;L;;;;;N;;;;; 130E9;EGYPTIAN HIEROGLYPH E020;Lo;0;L;;;;;N;;;;; 130EA;EGYPTIAN HIEROGLYPH E020A;Lo;0;L;;;;;N;;;;; 130EB;EGYPTIAN HIEROGLYPH E021;Lo;0;L;;;;;N;;;;; 130EC;EGYPTIAN HIEROGLYPH E022;Lo;0;L;;;;;N;;;;; 130ED;EGYPTIAN HIEROGLYPH E023;Lo;0;L;;;;;N;;;;; 130EE;EGYPTIAN HIEROGLYPH E024;Lo;0;L;;;;;N;;;;; 130EF;EGYPTIAN HIEROGLYPH E025;Lo;0;L;;;;;N;;;;; 130F0;EGYPTIAN HIEROGLYPH E026;Lo;0;L;;;;;N;;;;; 130F1;EGYPTIAN HIEROGLYPH E027;Lo;0;L;;;;;N;;;;; 130F2;EGYPTIAN HIEROGLYPH E028;Lo;0;L;;;;;N;;;;; 130F3;EGYPTIAN HIEROGLYPH E028A;Lo;0;L;;;;;N;;;;; 130F4;EGYPTIAN HIEROGLYPH E029;Lo;0;L;;;;;N;;;;; 130F5;EGYPTIAN HIEROGLYPH E030;Lo;0;L;;;;;N;;;;; 130F6;EGYPTIAN HIEROGLYPH E031;Lo;0;L;;;;;N;;;;; 130F7;EGYPTIAN HIEROGLYPH E032;Lo;0;L;;;;;N;;;;; 130F8;EGYPTIAN HIEROGLYPH E033;Lo;0;L;;;;;N;;;;; 130F9;EGYPTIAN HIEROGLYPH E034;Lo;0;L;;;;;N;;;;; 130FA;EGYPTIAN HIEROGLYPH E034A;Lo;0;L;;;;;N;;;;; 130FB;EGYPTIAN HIEROGLYPH E036;Lo;0;L;;;;;N;;;;; 130FC;EGYPTIAN HIEROGLYPH E037;Lo;0;L;;;;;N;;;;; 130FD;EGYPTIAN HIEROGLYPH E038;Lo;0;L;;;;;N;;;;; 130FE;EGYPTIAN HIEROGLYPH F001;Lo;0;L;;;;;N;;;;; 130FF;EGYPTIAN HIEROGLYPH F001A;Lo;0;L;;;;;N;;;;; 13100;EGYPTIAN HIEROGLYPH F002;Lo;0;L;;;;;N;;;;; 13101;EGYPTIAN HIEROGLYPH F003;Lo;0;L;;;;;N;;;;; 13102;EGYPTIAN HIEROGLYPH F004;Lo;0;L;;;;;N;;;;; 13103;EGYPTIAN HIEROGLYPH F005;Lo;0;L;;;;;N;;;;; 13104;EGYPTIAN HIEROGLYPH F006;Lo;0;L;;;;;N;;;;; 13105;EGYPTIAN HIEROGLYPH F007;Lo;0;L;;;;;N;;;;; 13106;EGYPTIAN HIEROGLYPH F008;Lo;0;L;;;;;N;;;;; 13107;EGYPTIAN HIEROGLYPH F009;Lo;0;L;;;;;N;;;;; 13108;EGYPTIAN HIEROGLYPH F010;Lo;0;L;;;;;N;;;;; 13109;EGYPTIAN HIEROGLYPH F011;Lo;0;L;;;;;N;;;;; 1310A;EGYPTIAN HIEROGLYPH F012;Lo;0;L;;;;;N;;;;; 1310B;EGYPTIAN HIEROGLYPH F013;Lo;0;L;;;;;N;;;;; 1310C;EGYPTIAN HIEROGLYPH F013A;Lo;0;L;;;;;N;;;;; 1310D;EGYPTIAN HIEROGLYPH F014;Lo;0;L;;;;;N;;;;; 1310E;EGYPTIAN HIEROGLYPH F015;Lo;0;L;;;;;N;;;;; 1310F;EGYPTIAN HIEROGLYPH F016;Lo;0;L;;;;;N;;;;; 13110;EGYPTIAN HIEROGLYPH F017;Lo;0;L;;;;;N;;;;; 13111;EGYPTIAN HIEROGLYPH F018;Lo;0;L;;;;;N;;;;; 13112;EGYPTIAN HIEROGLYPH F019;Lo;0;L;;;;;N;;;;; 13113;EGYPTIAN HIEROGLYPH F020;Lo;0;L;;;;;N;;;;; 13114;EGYPTIAN HIEROGLYPH F021;Lo;0;L;;;;;N;;;;; 13115;EGYPTIAN HIEROGLYPH F021A;Lo;0;L;;;;;N;;;;; 13116;EGYPTIAN HIEROGLYPH F022;Lo;0;L;;;;;N;;;;; 13117;EGYPTIAN HIEROGLYPH F023;Lo;0;L;;;;;N;;;;; 13118;EGYPTIAN HIEROGLYPH F024;Lo;0;L;;;;;N;;;;; 13119;EGYPTIAN HIEROGLYPH F025;Lo;0;L;;;;;N;;;;; 1311A;EGYPTIAN HIEROGLYPH F026;Lo;0;L;;;;;N;;;;; 1311B;EGYPTIAN HIEROGLYPH F027;Lo;0;L;;;;;N;;;;; 1311C;EGYPTIAN HIEROGLYPH F028;Lo;0;L;;;;;N;;;;; 1311D;EGYPTIAN HIEROGLYPH F029;Lo;0;L;;;;;N;;;;; 1311E;EGYPTIAN HIEROGLYPH F030;Lo;0;L;;;;;N;;;;; 1311F;EGYPTIAN HIEROGLYPH F031;Lo;0;L;;;;;N;;;;; 13120;EGYPTIAN HIEROGLYPH F031A;Lo;0;L;;;;;N;;;;; 13121;EGYPTIAN HIEROGLYPH F032;Lo;0;L;;;;;N;;;;; 13122;EGYPTIAN HIEROGLYPH F033;Lo;0;L;;;;;N;;;;; 13123;EGYPTIAN HIEROGLYPH F034;Lo;0;L;;;;;N;;;;; 13124;EGYPTIAN HIEROGLYPH F035;Lo;0;L;;;;;N;;;;; 13125;EGYPTIAN HIEROGLYPH F036;Lo;0;L;;;;;N;;;;; 13126;EGYPTIAN HIEROGLYPH F037;Lo;0;L;;;;;N;;;;; 13127;EGYPTIAN HIEROGLYPH F037A;Lo;0;L;;;;;N;;;;; 13128;EGYPTIAN HIEROGLYPH F038;Lo;0;L;;;;;N;;;;; 13129;EGYPTIAN HIEROGLYPH F038A;Lo;0;L;;;;;N;;;;; 1312A;EGYPTIAN HIEROGLYPH F039;Lo;0;L;;;;;N;;;;; 1312B;EGYPTIAN HIEROGLYPH F040;Lo;0;L;;;;;N;;;;; 1312C;EGYPTIAN HIEROGLYPH F041;Lo;0;L;;;;;N;;;;; 1312D;EGYPTIAN HIEROGLYPH F042;Lo;0;L;;;;;N;;;;; 1312E;EGYPTIAN HIEROGLYPH F043;Lo;0;L;;;;;N;;;;; 1312F;EGYPTIAN HIEROGLYPH F044;Lo;0;L;;;;;N;;;;; 13130;EGYPTIAN HIEROGLYPH F045;Lo;0;L;;;;;N;;;;; 13131;EGYPTIAN HIEROGLYPH F045A;Lo;0;L;;;;;N;;;;; 13132;EGYPTIAN HIEROGLYPH F046;Lo;0;L;;;;;N;;;;; 13133;EGYPTIAN HIEROGLYPH F046A;Lo;0;L;;;;;N;;;;; 13134;EGYPTIAN HIEROGLYPH F047;Lo;0;L;;;;;N;;;;; 13135;EGYPTIAN HIEROGLYPH F047A;Lo;0;L;;;;;N;;;;; 13136;EGYPTIAN HIEROGLYPH F048;Lo;0;L;;;;;N;;;;; 13137;EGYPTIAN HIEROGLYPH F049;Lo;0;L;;;;;N;;;;; 13138;EGYPTIAN HIEROGLYPH F050;Lo;0;L;;;;;N;;;;; 13139;EGYPTIAN HIEROGLYPH F051;Lo;0;L;;;;;N;;;;; 1313A;EGYPTIAN HIEROGLYPH F051A;Lo;0;L;;;;;N;;;;; 1313B;EGYPTIAN HIEROGLYPH F051B;Lo;0;L;;;;;N;;;;; 1313C;EGYPTIAN HIEROGLYPH F051C;Lo;0;L;;;;;N;;;;; 1313D;EGYPTIAN HIEROGLYPH F052;Lo;0;L;;;;;N;;;;; 1313E;EGYPTIAN HIEROGLYPH F053;Lo;0;L;;;;;N;;;;; 1313F;EGYPTIAN HIEROGLYPH G001;Lo;0;L;;;;;N;;;;; 13140;EGYPTIAN HIEROGLYPH G002;Lo;0;L;;;;;N;;;;; 13141;EGYPTIAN HIEROGLYPH G003;Lo;0;L;;;;;N;;;;; 13142;EGYPTIAN HIEROGLYPH G004;Lo;0;L;;;;;N;;;;; 13143;EGYPTIAN HIEROGLYPH G005;Lo;0;L;;;;;N;;;;; 13144;EGYPTIAN HIEROGLYPH G006;Lo;0;L;;;;;N;;;;; 13145;EGYPTIAN HIEROGLYPH G006A;Lo;0;L;;;;;N;;;;; 13146;EGYPTIAN HIEROGLYPH G007;Lo;0;L;;;;;N;;;;; 13147;EGYPTIAN HIEROGLYPH G007A;Lo;0;L;;;;;N;;;;; 13148;EGYPTIAN HIEROGLYPH G007B;Lo;0;L;;;;;N;;;;; 13149;EGYPTIAN HIEROGLYPH G008;Lo;0;L;;;;;N;;;;; 1314A;EGYPTIAN HIEROGLYPH G009;Lo;0;L;;;;;N;;;;; 1314B;EGYPTIAN HIEROGLYPH G010;Lo;0;L;;;;;N;;;;; 1314C;EGYPTIAN HIEROGLYPH G011;Lo;0;L;;;;;N;;;;; 1314D;EGYPTIAN HIEROGLYPH G011A;Lo;0;L;;;;;N;;;;; 1314E;EGYPTIAN HIEROGLYPH G012;Lo;0;L;;;;;N;;;;; 1314F;EGYPTIAN HIEROGLYPH G013;Lo;0;L;;;;;N;;;;; 13150;EGYPTIAN HIEROGLYPH G014;Lo;0;L;;;;;N;;;;; 13151;EGYPTIAN HIEROGLYPH G015;Lo;0;L;;;;;N;;;;; 13152;EGYPTIAN HIEROGLYPH G016;Lo;0;L;;;;;N;;;;; 13153;EGYPTIAN HIEROGLYPH G017;Lo;0;L;;;;;N;;;;; 13154;EGYPTIAN HIEROGLYPH G018;Lo;0;L;;;;;N;;;;; 13155;EGYPTIAN HIEROGLYPH G019;Lo;0;L;;;;;N;;;;; 13156;EGYPTIAN HIEROGLYPH G020;Lo;0;L;;;;;N;;;;; 13157;EGYPTIAN HIEROGLYPH G020A;Lo;0;L;;;;;N;;;;; 13158;EGYPTIAN HIEROGLYPH G021;Lo;0;L;;;;;N;;;;; 13159;EGYPTIAN HIEROGLYPH G022;Lo;0;L;;;;;N;;;;; 1315A;EGYPTIAN HIEROGLYPH G023;Lo;0;L;;;;;N;;;;; 1315B;EGYPTIAN HIEROGLYPH G024;Lo;0;L;;;;;N;;;;; 1315C;EGYPTIAN HIEROGLYPH G025;Lo;0;L;;;;;N;;;;; 1315D;EGYPTIAN HIEROGLYPH G026;Lo;0;L;;;;;N;;;;; 1315E;EGYPTIAN HIEROGLYPH G026A;Lo;0;L;;;;;N;;;;; 1315F;EGYPTIAN HIEROGLYPH G027;Lo;0;L;;;;;N;;;;; 13160;EGYPTIAN HIEROGLYPH G028;Lo;0;L;;;;;N;;;;; 13161;EGYPTIAN HIEROGLYPH G029;Lo;0;L;;;;;N;;;;; 13162;EGYPTIAN HIEROGLYPH G030;Lo;0;L;;;;;N;;;;; 13163;EGYPTIAN HIEROGLYPH G031;Lo;0;L;;;;;N;;;;; 13164;EGYPTIAN HIEROGLYPH G032;Lo;0;L;;;;;N;;;;; 13165;EGYPTIAN HIEROGLYPH G033;Lo;0;L;;;;;N;;;;; 13166;EGYPTIAN HIEROGLYPH G034;Lo;0;L;;;;;N;;;;; 13167;EGYPTIAN HIEROGLYPH G035;Lo;0;L;;;;;N;;;;; 13168;EGYPTIAN HIEROGLYPH G036;Lo;0;L;;;;;N;;;;; 13169;EGYPTIAN HIEROGLYPH G036A;Lo;0;L;;;;;N;;;;; 1316A;EGYPTIAN HIEROGLYPH G037;Lo;0;L;;;;;N;;;;; 1316B;EGYPTIAN HIEROGLYPH G037A;Lo;0;L;;;;;N;;;;; 1316C;EGYPTIAN HIEROGLYPH G038;Lo;0;L;;;;;N;;;;; 1316D;EGYPTIAN HIEROGLYPH G039;Lo;0;L;;;;;N;;;;; 1316E;EGYPTIAN HIEROGLYPH G040;Lo;0;L;;;;;N;;;;; 1316F;EGYPTIAN HIEROGLYPH G041;Lo;0;L;;;;;N;;;;; 13170;EGYPTIAN HIEROGLYPH G042;Lo;0;L;;;;;N;;;;; 13171;EGYPTIAN HIEROGLYPH G043;Lo;0;L;;;;;N;;;;; 13172;EGYPTIAN HIEROGLYPH G043A;Lo;0;L;;;;;N;;;;; 13173;EGYPTIAN HIEROGLYPH G044;Lo;0;L;;;;;N;;;;; 13174;EGYPTIAN HIEROGLYPH G045;Lo;0;L;;;;;N;;;;; 13175;EGYPTIAN HIEROGLYPH G045A;Lo;0;L;;;;;N;;;;; 13176;EGYPTIAN HIEROGLYPH G046;Lo;0;L;;;;;N;;;;; 13177;EGYPTIAN HIEROGLYPH G047;Lo;0;L;;;;;N;;;;; 13178;EGYPTIAN HIEROGLYPH G048;Lo;0;L;;;;;N;;;;; 13179;EGYPTIAN HIEROGLYPH G049;Lo;0;L;;;;;N;;;;; 1317A;EGYPTIAN HIEROGLYPH G050;Lo;0;L;;;;;N;;;;; 1317B;EGYPTIAN HIEROGLYPH G051;Lo;0;L;;;;;N;;;;; 1317C;EGYPTIAN HIEROGLYPH G052;Lo;0;L;;;;;N;;;;; 1317D;EGYPTIAN HIEROGLYPH G053;Lo;0;L;;;;;N;;;;; 1317E;EGYPTIAN HIEROGLYPH G054;Lo;0;L;;;;;N;;;;; 1317F;EGYPTIAN HIEROGLYPH H001;Lo;0;L;;;;;N;;;;; 13180;EGYPTIAN HIEROGLYPH H002;Lo;0;L;;;;;N;;;;; 13181;EGYPTIAN HIEROGLYPH H003;Lo;0;L;;;;;N;;;;; 13182;EGYPTIAN HIEROGLYPH H004;Lo;0;L;;;;;N;;;;; 13183;EGYPTIAN HIEROGLYPH H005;Lo;0;L;;;;;N;;;;; 13184;EGYPTIAN HIEROGLYPH H006;Lo;0;L;;;;;N;;;;; 13185;EGYPTIAN HIEROGLYPH H006A;Lo;0;L;;;;;N;;;;; 13186;EGYPTIAN HIEROGLYPH H007;Lo;0;L;;;;;N;;;;; 13187;EGYPTIAN HIEROGLYPH H008;Lo;0;L;;;;;N;;;;; 13188;EGYPTIAN HIEROGLYPH I001;Lo;0;L;;;;;N;;;;; 13189;EGYPTIAN HIEROGLYPH I002;Lo;0;L;;;;;N;;;;; 1318A;EGYPTIAN HIEROGLYPH I003;Lo;0;L;;;;;N;;;;; 1318B;EGYPTIAN HIEROGLYPH I004;Lo;0;L;;;;;N;;;;; 1318C;EGYPTIAN HIEROGLYPH I005;Lo;0;L;;;;;N;;;;; 1318D;EGYPTIAN HIEROGLYPH I005A;Lo;0;L;;;;;N;;;;; 1318E;EGYPTIAN HIEROGLYPH I006;Lo;0;L;;;;;N;;;;; 1318F;EGYPTIAN HIEROGLYPH I007;Lo;0;L;;;;;N;;;;; 13190;EGYPTIAN HIEROGLYPH I008;Lo;0;L;;;;;N;;;;; 13191;EGYPTIAN HIEROGLYPH I009;Lo;0;L;;;;;N;;;;; 13192;EGYPTIAN HIEROGLYPH I009A;Lo;0;L;;;;;N;;;;; 13193;EGYPTIAN HIEROGLYPH I010;Lo;0;L;;;;;N;;;;; 13194;EGYPTIAN HIEROGLYPH I010A;Lo;0;L;;;;;N;;;;; 13195;EGYPTIAN HIEROGLYPH I011;Lo;0;L;;;;;N;;;;; 13196;EGYPTIAN HIEROGLYPH I011A;Lo;0;L;;;;;N;;;;; 13197;EGYPTIAN HIEROGLYPH I012;Lo;0;L;;;;;N;;;;; 13198;EGYPTIAN HIEROGLYPH I013;Lo;0;L;;;;;N;;;;; 13199;EGYPTIAN HIEROGLYPH I014;Lo;0;L;;;;;N;;;;; 1319A;EGYPTIAN HIEROGLYPH I015;Lo;0;L;;;;;N;;;;; 1319B;EGYPTIAN HIEROGLYPH K001;Lo;0;L;;;;;N;;;;; 1319C;EGYPTIAN HIEROGLYPH K002;Lo;0;L;;;;;N;;;;; 1319D;EGYPTIAN HIEROGLYPH K003;Lo;0;L;;;;;N;;;;; 1319E;EGYPTIAN HIEROGLYPH K004;Lo;0;L;;;;;N;;;;; 1319F;EGYPTIAN HIEROGLYPH K005;Lo;0;L;;;;;N;;;;; 131A0;EGYPTIAN HIEROGLYPH K006;Lo;0;L;;;;;N;;;;; 131A1;EGYPTIAN HIEROGLYPH K007;Lo;0;L;;;;;N;;;;; 131A2;EGYPTIAN HIEROGLYPH K008;Lo;0;L;;;;;N;;;;; 131A3;EGYPTIAN HIEROGLYPH L001;Lo;0;L;;;;;N;;;;; 131A4;EGYPTIAN HIEROGLYPH L002;Lo;0;L;;;;;N;;;;; 131A5;EGYPTIAN HIEROGLYPH L002A;Lo;0;L;;;;;N;;;;; 131A6;EGYPTIAN HIEROGLYPH L003;Lo;0;L;;;;;N;;;;; 131A7;EGYPTIAN HIEROGLYPH L004;Lo;0;L;;;;;N;;;;; 131A8;EGYPTIAN HIEROGLYPH L005;Lo;0;L;;;;;N;;;;; 131A9;EGYPTIAN HIEROGLYPH L006;Lo;0;L;;;;;N;;;;; 131AA;EGYPTIAN HIEROGLYPH L006A;Lo;0;L;;;;;N;;;;; 131AB;EGYPTIAN HIEROGLYPH L007;Lo;0;L;;;;;N;;;;; 131AC;EGYPTIAN HIEROGLYPH L008;Lo;0;L;;;;;N;;;;; 131AD;EGYPTIAN HIEROGLYPH M001;Lo;0;L;;;;;N;;;;; 131AE;EGYPTIAN HIEROGLYPH M001A;Lo;0;L;;;;;N;;;;; 131AF;EGYPTIAN HIEROGLYPH M001B;Lo;0;L;;;;;N;;;;; 131B0;EGYPTIAN HIEROGLYPH M002;Lo;0;L;;;;;N;;;;; 131B1;EGYPTIAN HIEROGLYPH M003;Lo;0;L;;;;;N;;;;; 131B2;EGYPTIAN HIEROGLYPH M003A;Lo;0;L;;;;;N;;;;; 131B3;EGYPTIAN HIEROGLYPH M004;Lo;0;L;;;;;N;;;;; 131B4;EGYPTIAN HIEROGLYPH M005;Lo;0;L;;;;;N;;;;; 131B5;EGYPTIAN HIEROGLYPH M006;Lo;0;L;;;;;N;;;;; 131B6;EGYPTIAN HIEROGLYPH M007;Lo;0;L;;;;;N;;;;; 131B7;EGYPTIAN HIEROGLYPH M008;Lo;0;L;;;;;N;;;;; 131B8;EGYPTIAN HIEROGLYPH M009;Lo;0;L;;;;;N;;;;; 131B9;EGYPTIAN HIEROGLYPH M010;Lo;0;L;;;;;N;;;;; 131BA;EGYPTIAN HIEROGLYPH M010A;Lo;0;L;;;;;N;;;;; 131BB;EGYPTIAN HIEROGLYPH M011;Lo;0;L;;;;;N;;;;; 131BC;EGYPTIAN HIEROGLYPH M012;Lo;0;L;;;;;N;;;;; 131BD;EGYPTIAN HIEROGLYPH M012A;Lo;0;L;;;;;N;;;;; 131BE;EGYPTIAN HIEROGLYPH M012B;Lo;0;L;;;;;N;;;;; 131BF;EGYPTIAN HIEROGLYPH M012C;Lo;0;L;;;;;N;;;;; 131C0;EGYPTIAN HIEROGLYPH M012D;Lo;0;L;;;;;N;;;;; 131C1;EGYPTIAN HIEROGLYPH M012E;Lo;0;L;;;;;N;;;;; 131C2;EGYPTIAN HIEROGLYPH M012F;Lo;0;L;;;;;N;;;;; 131C3;EGYPTIAN HIEROGLYPH M012G;Lo;0;L;;;;;N;;;;; 131C4;EGYPTIAN HIEROGLYPH M012H;Lo;0;L;;;;;N;;;;; 131C5;EGYPTIAN HIEROGLYPH M013;Lo;0;L;;;;;N;;;;; 131C6;EGYPTIAN HIEROGLYPH M014;Lo;0;L;;;;;N;;;;; 131C7;EGYPTIAN HIEROGLYPH M015;Lo;0;L;;;;;N;;;;; 131C8;EGYPTIAN HIEROGLYPH M015A;Lo;0;L;;;;;N;;;;; 131C9;EGYPTIAN HIEROGLYPH M016;Lo;0;L;;;;;N;;;;; 131CA;EGYPTIAN HIEROGLYPH M016A;Lo;0;L;;;;;N;;;;; 131CB;EGYPTIAN HIEROGLYPH M017;Lo;0;L;;;;;N;;;;; 131CC;EGYPTIAN HIEROGLYPH M017A;Lo;0;L;;;;;N;;;;; 131CD;EGYPTIAN HIEROGLYPH M018;Lo;0;L;;;;;N;;;;; 131CE;EGYPTIAN HIEROGLYPH M019;Lo;0;L;;;;;N;;;;; 131CF;EGYPTIAN HIEROGLYPH M020;Lo;0;L;;;;;N;;;;; 131D0;EGYPTIAN HIEROGLYPH M021;Lo;0;L;;;;;N;;;;; 131D1;EGYPTIAN HIEROGLYPH M022;Lo;0;L;;;;;N;;;;; 131D2;EGYPTIAN HIEROGLYPH M022A;Lo;0;L;;;;;N;;;;; 131D3;EGYPTIAN HIEROGLYPH M023;Lo;0;L;;;;;N;;;;; 131D4;EGYPTIAN HIEROGLYPH M024;Lo;0;L;;;;;N;;;;; 131D5;EGYPTIAN HIEROGLYPH M024A;Lo;0;L;;;;;N;;;;; 131D6;EGYPTIAN HIEROGLYPH M025;Lo;0;L;;;;;N;;;;; 131D7;EGYPTIAN HIEROGLYPH M026;Lo;0;L;;;;;N;;;;; 131D8;EGYPTIAN HIEROGLYPH M027;Lo;0;L;;;;;N;;;;; 131D9;EGYPTIAN HIEROGLYPH M028;Lo;0;L;;;;;N;;;;; 131DA;EGYPTIAN HIEROGLYPH M028A;Lo;0;L;;;;;N;;;;; 131DB;EGYPTIAN HIEROGLYPH M029;Lo;0;L;;;;;N;;;;; 131DC;EGYPTIAN HIEROGLYPH M030;Lo;0;L;;;;;N;;;;; 131DD;EGYPTIAN HIEROGLYPH M031;Lo;0;L;;;;;N;;;;; 131DE;EGYPTIAN HIEROGLYPH M031A;Lo;0;L;;;;;N;;;;; 131DF;EGYPTIAN HIEROGLYPH M032;Lo;0;L;;;;;N;;;;; 131E0;EGYPTIAN HIEROGLYPH M033;Lo;0;L;;;;;N;;;;; 131E1;EGYPTIAN HIEROGLYPH M033A;Lo;0;L;;;;;N;;;;; 131E2;EGYPTIAN HIEROGLYPH M033B;Lo;0;L;;;;;N;;;;; 131E3;EGYPTIAN HIEROGLYPH M034;Lo;0;L;;;;;N;;;;; 131E4;EGYPTIAN HIEROGLYPH M035;Lo;0;L;;;;;N;;;;; 131E5;EGYPTIAN HIEROGLYPH M036;Lo;0;L;;;;;N;;;;; 131E6;EGYPTIAN HIEROGLYPH M037;Lo;0;L;;;;;N;;;;; 131E7;EGYPTIAN HIEROGLYPH M038;Lo;0;L;;;;;N;;;;; 131E8;EGYPTIAN HIEROGLYPH M039;Lo;0;L;;;;;N;;;;; 131E9;EGYPTIAN HIEROGLYPH M040;Lo;0;L;;;;;N;;;;; 131EA;EGYPTIAN HIEROGLYPH M040A;Lo;0;L;;;;;N;;;;; 131EB;EGYPTIAN HIEROGLYPH M041;Lo;0;L;;;;;N;;;;; 131EC;EGYPTIAN HIEROGLYPH M042;Lo;0;L;;;;;N;;;;; 131ED;EGYPTIAN HIEROGLYPH M043;Lo;0;L;;;;;N;;;;; 131EE;EGYPTIAN HIEROGLYPH M044;Lo;0;L;;;;;N;;;;; 131EF;EGYPTIAN HIEROGLYPH N001;Lo;0;L;;;;;N;;;;; 131F0;EGYPTIAN HIEROGLYPH N002;Lo;0;L;;;;;N;;;;; 131F1;EGYPTIAN HIEROGLYPH N003;Lo;0;L;;;;;N;;;;; 131F2;EGYPTIAN HIEROGLYPH N004;Lo;0;L;;;;;N;;;;; 131F3;EGYPTIAN HIEROGLYPH N005;Lo;0;L;;;;;N;;;;; 131F4;EGYPTIAN HIEROGLYPH N006;Lo;0;L;;;;;N;;;;; 131F5;EGYPTIAN HIEROGLYPH N007;Lo;0;L;;;;;N;;;;; 131F6;EGYPTIAN HIEROGLYPH N008;Lo;0;L;;;;;N;;;;; 131F7;EGYPTIAN HIEROGLYPH N009;Lo;0;L;;;;;N;;;;; 131F8;EGYPTIAN HIEROGLYPH N010;Lo;0;L;;;;;N;;;;; 131F9;EGYPTIAN HIEROGLYPH N011;Lo;0;L;;;;;N;;;;; 131FA;EGYPTIAN HIEROGLYPH N012;Lo;0;L;;;;;N;;;;; 131FB;EGYPTIAN HIEROGLYPH N013;Lo;0;L;;;;;N;;;;; 131FC;EGYPTIAN HIEROGLYPH N014;Lo;0;L;;;;;N;;;;; 131FD;EGYPTIAN HIEROGLYPH N015;Lo;0;L;;;;;N;;;;; 131FE;EGYPTIAN HIEROGLYPH N016;Lo;0;L;;;;;N;;;;; 131FF;EGYPTIAN HIEROGLYPH N017;Lo;0;L;;;;;N;;;;; 13200;EGYPTIAN HIEROGLYPH N018;Lo;0;L;;;;;N;;;;; 13201;EGYPTIAN HIEROGLYPH N018A;Lo;0;L;;;;;N;;;;; 13202;EGYPTIAN HIEROGLYPH N018B;Lo;0;L;;;;;N;;;;; 13203;EGYPTIAN HIEROGLYPH N019;Lo;0;L;;;;;N;;;;; 13204;EGYPTIAN HIEROGLYPH N020;Lo;0;L;;;;;N;;;;; 13205;EGYPTIAN HIEROGLYPH N021;Lo;0;L;;;;;N;;;;; 13206;EGYPTIAN HIEROGLYPH N022;Lo;0;L;;;;;N;;;;; 13207;EGYPTIAN HIEROGLYPH N023;Lo;0;L;;;;;N;;;;; 13208;EGYPTIAN HIEROGLYPH N024;Lo;0;L;;;;;N;;;;; 13209;EGYPTIAN HIEROGLYPH N025;Lo;0;L;;;;;N;;;;; 1320A;EGYPTIAN HIEROGLYPH N025A;Lo;0;L;;;;;N;;;;; 1320B;EGYPTIAN HIEROGLYPH N026;Lo;0;L;;;;;N;;;;; 1320C;EGYPTIAN HIEROGLYPH N027;Lo;0;L;;;;;N;;;;; 1320D;EGYPTIAN HIEROGLYPH N028;Lo;0;L;;;;;N;;;;; 1320E;EGYPTIAN HIEROGLYPH N029;Lo;0;L;;;;;N;;;;; 1320F;EGYPTIAN HIEROGLYPH N030;Lo;0;L;;;;;N;;;;; 13210;EGYPTIAN HIEROGLYPH N031;Lo;0;L;;;;;N;;;;; 13211;EGYPTIAN HIEROGLYPH N032;Lo;0;L;;;;;N;;;;; 13212;EGYPTIAN HIEROGLYPH N033;Lo;0;L;;;;;N;;;;; 13213;EGYPTIAN HIEROGLYPH N033A;Lo;0;L;;;;;N;;;;; 13214;EGYPTIAN HIEROGLYPH N034;Lo;0;L;;;;;N;;;;; 13215;EGYPTIAN HIEROGLYPH N034A;Lo;0;L;;;;;N;;;;; 13216;EGYPTIAN HIEROGLYPH N035;Lo;0;L;;;;;N;;;;; 13217;EGYPTIAN HIEROGLYPH N035A;Lo;0;L;;;;;N;;;;; 13218;EGYPTIAN HIEROGLYPH N036;Lo;0;L;;;;;N;;;;; 13219;EGYPTIAN HIEROGLYPH N037;Lo;0;L;;;;;N;;;;; 1321A;EGYPTIAN HIEROGLYPH N037A;Lo;0;L;;;;;N;;;;; 1321B;EGYPTIAN HIEROGLYPH N038;Lo;0;L;;;;;N;;;;; 1321C;EGYPTIAN HIEROGLYPH N039;Lo;0;L;;;;;N;;;;; 1321D;EGYPTIAN HIEROGLYPH N040;Lo;0;L;;;;;N;;;;; 1321E;EGYPTIAN HIEROGLYPH N041;Lo;0;L;;;;;N;;;;; 1321F;EGYPTIAN HIEROGLYPH N042;Lo;0;L;;;;;N;;;;; 13220;EGYPTIAN HIEROGLYPH NL001;Lo;0;L;;;;;N;;;;; 13221;EGYPTIAN HIEROGLYPH NL002;Lo;0;L;;;;;N;;;;; 13222;EGYPTIAN HIEROGLYPH NL003;Lo;0;L;;;;;N;;;;; 13223;EGYPTIAN HIEROGLYPH NL004;Lo;0;L;;;;;N;;;;; 13224;EGYPTIAN HIEROGLYPH NL005;Lo;0;L;;;;;N;;;;; 13225;EGYPTIAN HIEROGLYPH NL005A;Lo;0;L;;;;;N;;;;; 13226;EGYPTIAN HIEROGLYPH NL006;Lo;0;L;;;;;N;;;;; 13227;EGYPTIAN HIEROGLYPH NL007;Lo;0;L;;;;;N;;;;; 13228;EGYPTIAN HIEROGLYPH NL008;Lo;0;L;;;;;N;;;;; 13229;EGYPTIAN HIEROGLYPH NL009;Lo;0;L;;;;;N;;;;; 1322A;EGYPTIAN HIEROGLYPH NL010;Lo;0;L;;;;;N;;;;; 1322B;EGYPTIAN HIEROGLYPH NL011;Lo;0;L;;;;;N;;;;; 1322C;EGYPTIAN HIEROGLYPH NL012;Lo;0;L;;;;;N;;;;; 1322D;EGYPTIAN HIEROGLYPH NL013;Lo;0;L;;;;;N;;;;; 1322E;EGYPTIAN HIEROGLYPH NL014;Lo;0;L;;;;;N;;;;; 1322F;EGYPTIAN HIEROGLYPH NL015;Lo;0;L;;;;;N;;;;; 13230;EGYPTIAN HIEROGLYPH NL016;Lo;0;L;;;;;N;;;;; 13231;EGYPTIAN HIEROGLYPH NL017;Lo;0;L;;;;;N;;;;; 13232;EGYPTIAN HIEROGLYPH NL017A;Lo;0;L;;;;;N;;;;; 13233;EGYPTIAN HIEROGLYPH NL018;Lo;0;L;;;;;N;;;;; 13234;EGYPTIAN HIEROGLYPH NL019;Lo;0;L;;;;;N;;;;; 13235;EGYPTIAN HIEROGLYPH NL020;Lo;0;L;;;;;N;;;;; 13236;EGYPTIAN HIEROGLYPH NU001;Lo;0;L;;;;;N;;;;; 13237;EGYPTIAN HIEROGLYPH NU002;Lo;0;L;;;;;N;;;;; 13238;EGYPTIAN HIEROGLYPH NU003;Lo;0;L;;;;;N;;;;; 13239;EGYPTIAN HIEROGLYPH NU004;Lo;0;L;;;;;N;;;;; 1323A;EGYPTIAN HIEROGLYPH NU005;Lo;0;L;;;;;N;;;;; 1323B;EGYPTIAN HIEROGLYPH NU006;Lo;0;L;;;;;N;;;;; 1323C;EGYPTIAN HIEROGLYPH NU007;Lo;0;L;;;;;N;;;;; 1323D;EGYPTIAN HIEROGLYPH NU008;Lo;0;L;;;;;N;;;;; 1323E;EGYPTIAN HIEROGLYPH NU009;Lo;0;L;;;;;N;;;;; 1323F;EGYPTIAN HIEROGLYPH NU010;Lo;0;L;;;;;N;;;;; 13240;EGYPTIAN HIEROGLYPH NU010A;Lo;0;L;;;;;N;;;;; 13241;EGYPTIAN HIEROGLYPH NU011;Lo;0;L;;;;;N;;;;; 13242;EGYPTIAN HIEROGLYPH NU011A;Lo;0;L;;;;;N;;;;; 13243;EGYPTIAN HIEROGLYPH NU012;Lo;0;L;;;;;N;;;;; 13244;EGYPTIAN HIEROGLYPH NU013;Lo;0;L;;;;;N;;;;; 13245;EGYPTIAN HIEROGLYPH NU014;Lo;0;L;;;;;N;;;;; 13246;EGYPTIAN HIEROGLYPH NU015;Lo;0;L;;;;;N;;;;; 13247;EGYPTIAN HIEROGLYPH NU016;Lo;0;L;;;;;N;;;;; 13248;EGYPTIAN HIEROGLYPH NU017;Lo;0;L;;;;;N;;;;; 13249;EGYPTIAN HIEROGLYPH NU018;Lo;0;L;;;;;N;;;;; 1324A;EGYPTIAN HIEROGLYPH NU018A;Lo;0;L;;;;;N;;;;; 1324B;EGYPTIAN HIEROGLYPH NU019;Lo;0;L;;;;;N;;;;; 1324C;EGYPTIAN HIEROGLYPH NU020;Lo;0;L;;;;;N;;;;; 1324D;EGYPTIAN HIEROGLYPH NU021;Lo;0;L;;;;;N;;;;; 1324E;EGYPTIAN HIEROGLYPH NU022;Lo;0;L;;;;;N;;;;; 1324F;EGYPTIAN HIEROGLYPH NU022A;Lo;0;L;;;;;N;;;;; 13250;EGYPTIAN HIEROGLYPH O001;Lo;0;L;;;;;N;;;;; 13251;EGYPTIAN HIEROGLYPH O001A;Lo;0;L;;;;;N;;;;; 13252;EGYPTIAN HIEROGLYPH O002;Lo;0;L;;;;;N;;;;; 13253;EGYPTIAN HIEROGLYPH O003;Lo;0;L;;;;;N;;;;; 13254;EGYPTIAN HIEROGLYPH O004;Lo;0;L;;;;;N;;;;; 13255;EGYPTIAN HIEROGLYPH O005;Lo;0;L;;;;;N;;;;; 13256;EGYPTIAN HIEROGLYPH O005A;Lo;0;L;;;;;N;;;;; 13257;EGYPTIAN HIEROGLYPH O006;Lo;0;L;;;;;N;;;;; 13258;EGYPTIAN HIEROGLYPH O006A;Lo;0;L;;;;;N;;;;; 13259;EGYPTIAN HIEROGLYPH O006B;Lo;0;L;;;;;N;;;;; 1325A;EGYPTIAN HIEROGLYPH O006C;Lo;0;L;;;;;N;;;;; 1325B;EGYPTIAN HIEROGLYPH O006D;Lo;0;L;;;;;N;;;;; 1325C;EGYPTIAN HIEROGLYPH O006E;Lo;0;L;;;;;N;;;;; 1325D;EGYPTIAN HIEROGLYPH O006F;Lo;0;L;;;;;N;;;;; 1325E;EGYPTIAN HIEROGLYPH O007;Lo;0;L;;;;;N;;;;; 1325F;EGYPTIAN HIEROGLYPH O008;Lo;0;L;;;;;N;;;;; 13260;EGYPTIAN HIEROGLYPH O009;Lo;0;L;;;;;N;;;;; 13261;EGYPTIAN HIEROGLYPH O010;Lo;0;L;;;;;N;;;;; 13262;EGYPTIAN HIEROGLYPH O010A;Lo;0;L;;;;;N;;;;; 13263;EGYPTIAN HIEROGLYPH O010B;Lo;0;L;;;;;N;;;;; 13264;EGYPTIAN HIEROGLYPH O010C;Lo;0;L;;;;;N;;;;; 13265;EGYPTIAN HIEROGLYPH O011;Lo;0;L;;;;;N;;;;; 13266;EGYPTIAN HIEROGLYPH O012;Lo;0;L;;;;;N;;;;; 13267;EGYPTIAN HIEROGLYPH O013;Lo;0;L;;;;;N;;;;; 13268;EGYPTIAN HIEROGLYPH O014;Lo;0;L;;;;;N;;;;; 13269;EGYPTIAN HIEROGLYPH O015;Lo;0;L;;;;;N;;;;; 1326A;EGYPTIAN HIEROGLYPH O016;Lo;0;L;;;;;N;;;;; 1326B;EGYPTIAN HIEROGLYPH O017;Lo;0;L;;;;;N;;;;; 1326C;EGYPTIAN HIEROGLYPH O018;Lo;0;L;;;;;N;;;;; 1326D;EGYPTIAN HIEROGLYPH O019;Lo;0;L;;;;;N;;;;; 1326E;EGYPTIAN HIEROGLYPH O019A;Lo;0;L;;;;;N;;;;; 1326F;EGYPTIAN HIEROGLYPH O020;Lo;0;L;;;;;N;;;;; 13270;EGYPTIAN HIEROGLYPH O020A;Lo;0;L;;;;;N;;;;; 13271;EGYPTIAN HIEROGLYPH O021;Lo;0;L;;;;;N;;;;; 13272;EGYPTIAN HIEROGLYPH O022;Lo;0;L;;;;;N;;;;; 13273;EGYPTIAN HIEROGLYPH O023;Lo;0;L;;;;;N;;;;; 13274;EGYPTIAN HIEROGLYPH O024;Lo;0;L;;;;;N;;;;; 13275;EGYPTIAN HIEROGLYPH O024A;Lo;0;L;;;;;N;;;;; 13276;EGYPTIAN HIEROGLYPH O025;Lo;0;L;;;;;N;;;;; 13277;EGYPTIAN HIEROGLYPH O025A;Lo;0;L;;;;;N;;;;; 13278;EGYPTIAN HIEROGLYPH O026;Lo;0;L;;;;;N;;;;; 13279;EGYPTIAN HIEROGLYPH O027;Lo;0;L;;;;;N;;;;; 1327A;EGYPTIAN HIEROGLYPH O028;Lo;0;L;;;;;N;;;;; 1327B;EGYPTIAN HIEROGLYPH O029;Lo;0;L;;;;;N;;;;; 1327C;EGYPTIAN HIEROGLYPH O029A;Lo;0;L;;;;;N;;;;; 1327D;EGYPTIAN HIEROGLYPH O030;Lo;0;L;;;;;N;;;;; 1327E;EGYPTIAN HIEROGLYPH O030A;Lo;0;L;;;;;N;;;;; 1327F;EGYPTIAN HIEROGLYPH O031;Lo;0;L;;;;;N;;;;; 13280;EGYPTIAN HIEROGLYPH O032;Lo;0;L;;;;;N;;;;; 13281;EGYPTIAN HIEROGLYPH O033;Lo;0;L;;;;;N;;;;; 13282;EGYPTIAN HIEROGLYPH O033A;Lo;0;L;;;;;N;;;;; 13283;EGYPTIAN HIEROGLYPH O034;Lo;0;L;;;;;N;;;;; 13284;EGYPTIAN HIEROGLYPH O035;Lo;0;L;;;;;N;;;;; 13285;EGYPTIAN HIEROGLYPH O036;Lo;0;L;;;;;N;;;;; 13286;EGYPTIAN HIEROGLYPH O036A;Lo;0;L;;;;;N;;;;; 13287;EGYPTIAN HIEROGLYPH O036B;Lo;0;L;;;;;N;;;;; 13288;EGYPTIAN HIEROGLYPH O036C;Lo;0;L;;;;;N;;;;; 13289;EGYPTIAN HIEROGLYPH O036D;Lo;0;L;;;;;N;;;;; 1328A;EGYPTIAN HIEROGLYPH O037;Lo;0;L;;;;;N;;;;; 1328B;EGYPTIAN HIEROGLYPH O038;Lo;0;L;;;;;N;;;;; 1328C;EGYPTIAN HIEROGLYPH O039;Lo;0;L;;;;;N;;;;; 1328D;EGYPTIAN HIEROGLYPH O040;Lo;0;L;;;;;N;;;;; 1328E;EGYPTIAN HIEROGLYPH O041;Lo;0;L;;;;;N;;;;; 1328F;EGYPTIAN HIEROGLYPH O042;Lo;0;L;;;;;N;;;;; 13290;EGYPTIAN HIEROGLYPH O043;Lo;0;L;;;;;N;;;;; 13291;EGYPTIAN HIEROGLYPH O044;Lo;0;L;;;;;N;;;;; 13292;EGYPTIAN HIEROGLYPH O045;Lo;0;L;;;;;N;;;;; 13293;EGYPTIAN HIEROGLYPH O046;Lo;0;L;;;;;N;;;;; 13294;EGYPTIAN HIEROGLYPH O047;Lo;0;L;;;;;N;;;;; 13295;EGYPTIAN HIEROGLYPH O048;Lo;0;L;;;;;N;;;;; 13296;EGYPTIAN HIEROGLYPH O049;Lo;0;L;;;;;N;;;;; 13297;EGYPTIAN HIEROGLYPH O050;Lo;0;L;;;;;N;;;;; 13298;EGYPTIAN HIEROGLYPH O050A;Lo;0;L;;;;;N;;;;; 13299;EGYPTIAN HIEROGLYPH O050B;Lo;0;L;;;;;N;;;;; 1329A;EGYPTIAN HIEROGLYPH O051;Lo;0;L;;;;;N;;;;; 1329B;EGYPTIAN HIEROGLYPH P001;Lo;0;L;;;;;N;;;;; 1329C;EGYPTIAN HIEROGLYPH P001A;Lo;0;L;;;;;N;;;;; 1329D;EGYPTIAN HIEROGLYPH P002;Lo;0;L;;;;;N;;;;; 1329E;EGYPTIAN HIEROGLYPH P003;Lo;0;L;;;;;N;;;;; 1329F;EGYPTIAN HIEROGLYPH P003A;Lo;0;L;;;;;N;;;;; 132A0;EGYPTIAN HIEROGLYPH P004;Lo;0;L;;;;;N;;;;; 132A1;EGYPTIAN HIEROGLYPH P005;Lo;0;L;;;;;N;;;;; 132A2;EGYPTIAN HIEROGLYPH P006;Lo;0;L;;;;;N;;;;; 132A3;EGYPTIAN HIEROGLYPH P007;Lo;0;L;;;;;N;;;;; 132A4;EGYPTIAN HIEROGLYPH P008;Lo;0;L;;;;;N;;;;; 132A5;EGYPTIAN HIEROGLYPH P009;Lo;0;L;;;;;N;;;;; 132A6;EGYPTIAN HIEROGLYPH P010;Lo;0;L;;;;;N;;;;; 132A7;EGYPTIAN HIEROGLYPH P011;Lo;0;L;;;;;N;;;;; 132A8;EGYPTIAN HIEROGLYPH Q001;Lo;0;L;;;;;N;;;;; 132A9;EGYPTIAN HIEROGLYPH Q002;Lo;0;L;;;;;N;;;;; 132AA;EGYPTIAN HIEROGLYPH Q003;Lo;0;L;;;;;N;;;;; 132AB;EGYPTIAN HIEROGLYPH Q004;Lo;0;L;;;;;N;;;;; 132AC;EGYPTIAN HIEROGLYPH Q005;Lo;0;L;;;;;N;;;;; 132AD;EGYPTIAN HIEROGLYPH Q006;Lo;0;L;;;;;N;;;;; 132AE;EGYPTIAN HIEROGLYPH Q007;Lo;0;L;;;;;N;;;;; 132AF;EGYPTIAN HIEROGLYPH R001;Lo;0;L;;;;;N;;;;; 132B0;EGYPTIAN HIEROGLYPH R002;Lo;0;L;;;;;N;;;;; 132B1;EGYPTIAN HIEROGLYPH R002A;Lo;0;L;;;;;N;;;;; 132B2;EGYPTIAN HIEROGLYPH R003;Lo;0;L;;;;;N;;;;; 132B3;EGYPTIAN HIEROGLYPH R003A;Lo;0;L;;;;;N;;;;; 132B4;EGYPTIAN HIEROGLYPH R003B;Lo;0;L;;;;;N;;;;; 132B5;EGYPTIAN HIEROGLYPH R004;Lo;0;L;;;;;N;;;;; 132B6;EGYPTIAN HIEROGLYPH R005;Lo;0;L;;;;;N;;;;; 132B7;EGYPTIAN HIEROGLYPH R006;Lo;0;L;;;;;N;;;;; 132B8;EGYPTIAN HIEROGLYPH R007;Lo;0;L;;;;;N;;;;; 132B9;EGYPTIAN HIEROGLYPH R008;Lo;0;L;;;;;N;;;;; 132BA;EGYPTIAN HIEROGLYPH R009;Lo;0;L;;;;;N;;;;; 132BB;EGYPTIAN HIEROGLYPH R010;Lo;0;L;;;;;N;;;;; 132BC;EGYPTIAN HIEROGLYPH R010A;Lo;0;L;;;;;N;;;;; 132BD;EGYPTIAN HIEROGLYPH R011;Lo;0;L;;;;;N;;;;; 132BE;EGYPTIAN HIEROGLYPH R012;Lo;0;L;;;;;N;;;;; 132BF;EGYPTIAN HIEROGLYPH R013;Lo;0;L;;;;;N;;;;; 132C0;EGYPTIAN HIEROGLYPH R014;Lo;0;L;;;;;N;;;;; 132C1;EGYPTIAN HIEROGLYPH R015;Lo;0;L;;;;;N;;;;; 132C2;EGYPTIAN HIEROGLYPH R016;Lo;0;L;;;;;N;;;;; 132C3;EGYPTIAN HIEROGLYPH R016A;Lo;0;L;;;;;N;;;;; 132C4;EGYPTIAN HIEROGLYPH R017;Lo;0;L;;;;;N;;;;; 132C5;EGYPTIAN HIEROGLYPH R018;Lo;0;L;;;;;N;;;;; 132C6;EGYPTIAN HIEROGLYPH R019;Lo;0;L;;;;;N;;;;; 132C7;EGYPTIAN HIEROGLYPH R020;Lo;0;L;;;;;N;;;;; 132C8;EGYPTIAN HIEROGLYPH R021;Lo;0;L;;;;;N;;;;; 132C9;EGYPTIAN HIEROGLYPH R022;Lo;0;L;;;;;N;;;;; 132CA;EGYPTIAN HIEROGLYPH R023;Lo;0;L;;;;;N;;;;; 132CB;EGYPTIAN HIEROGLYPH R024;Lo;0;L;;;;;N;;;;; 132CC;EGYPTIAN HIEROGLYPH R025;Lo;0;L;;;;;N;;;;; 132CD;EGYPTIAN HIEROGLYPH R026;Lo;0;L;;;;;N;;;;; 132CE;EGYPTIAN HIEROGLYPH R027;Lo;0;L;;;;;N;;;;; 132CF;EGYPTIAN HIEROGLYPH R028;Lo;0;L;;;;;N;;;;; 132D0;EGYPTIAN HIEROGLYPH R029;Lo;0;L;;;;;N;;;;; 132D1;EGYPTIAN HIEROGLYPH S001;Lo;0;L;;;;;N;;;;; 132D2;EGYPTIAN HIEROGLYPH S002;Lo;0;L;;;;;N;;;;; 132D3;EGYPTIAN HIEROGLYPH S002A;Lo;0;L;;;;;N;;;;; 132D4;EGYPTIAN HIEROGLYPH S003;Lo;0;L;;;;;N;;;;; 132D5;EGYPTIAN HIEROGLYPH S004;Lo;0;L;;;;;N;;;;; 132D6;EGYPTIAN HIEROGLYPH S005;Lo;0;L;;;;;N;;;;; 132D7;EGYPTIAN HIEROGLYPH S006;Lo;0;L;;;;;N;;;;; 132D8;EGYPTIAN HIEROGLYPH S006A;Lo;0;L;;;;;N;;;;; 132D9;EGYPTIAN HIEROGLYPH S007;Lo;0;L;;;;;N;;;;; 132DA;EGYPTIAN HIEROGLYPH S008;Lo;0;L;;;;;N;;;;; 132DB;EGYPTIAN HIEROGLYPH S009;Lo;0;L;;;;;N;;;;; 132DC;EGYPTIAN HIEROGLYPH S010;Lo;0;L;;;;;N;;;;; 132DD;EGYPTIAN HIEROGLYPH S011;Lo;0;L;;;;;N;;;;; 132DE;EGYPTIAN HIEROGLYPH S012;Lo;0;L;;;;;N;;;;; 132DF;EGYPTIAN HIEROGLYPH S013;Lo;0;L;;;;;N;;;;; 132E0;EGYPTIAN HIEROGLYPH S014;Lo;0;L;;;;;N;;;;; 132E1;EGYPTIAN HIEROGLYPH S014A;Lo;0;L;;;;;N;;;;; 132E2;EGYPTIAN HIEROGLYPH S014B;Lo;0;L;;;;;N;;;;; 132E3;EGYPTIAN HIEROGLYPH S015;Lo;0;L;;;;;N;;;;; 132E4;EGYPTIAN HIEROGLYPH S016;Lo;0;L;;;;;N;;;;; 132E5;EGYPTIAN HIEROGLYPH S017;Lo;0;L;;;;;N;;;;; 132E6;EGYPTIAN HIEROGLYPH S017A;Lo;0;L;;;;;N;;;;; 132E7;EGYPTIAN HIEROGLYPH S018;Lo;0;L;;;;;N;;;;; 132E8;EGYPTIAN HIEROGLYPH S019;Lo;0;L;;;;;N;;;;; 132E9;EGYPTIAN HIEROGLYPH S020;Lo;0;L;;;;;N;;;;; 132EA;EGYPTIAN HIEROGLYPH S021;Lo;0;L;;;;;N;;;;; 132EB;EGYPTIAN HIEROGLYPH S022;Lo;0;L;;;;;N;;;;; 132EC;EGYPTIAN HIEROGLYPH S023;Lo;0;L;;;;;N;;;;; 132ED;EGYPTIAN HIEROGLYPH S024;Lo;0;L;;;;;N;;;;; 132EE;EGYPTIAN HIEROGLYPH S025;Lo;0;L;;;;;N;;;;; 132EF;EGYPTIAN HIEROGLYPH S026;Lo;0;L;;;;;N;;;;; 132F0;EGYPTIAN HIEROGLYPH S026A;Lo;0;L;;;;;N;;;;; 132F1;EGYPTIAN HIEROGLYPH S026B;Lo;0;L;;;;;N;;;;; 132F2;EGYPTIAN HIEROGLYPH S027;Lo;0;L;;;;;N;;;;; 132F3;EGYPTIAN HIEROGLYPH S028;Lo;0;L;;;;;N;;;;; 132F4;EGYPTIAN HIEROGLYPH S029;Lo;0;L;;;;;N;;;;; 132F5;EGYPTIAN HIEROGLYPH S030;Lo;0;L;;;;;N;;;;; 132F6;EGYPTIAN HIEROGLYPH S031;Lo;0;L;;;;;N;;;;; 132F7;EGYPTIAN HIEROGLYPH S032;Lo;0;L;;;;;N;;;;; 132F8;EGYPTIAN HIEROGLYPH S033;Lo;0;L;;;;;N;;;;; 132F9;EGYPTIAN HIEROGLYPH S034;Lo;0;L;;;;;N;;;;; 132FA;EGYPTIAN HIEROGLYPH S035;Lo;0;L;;;;;N;;;;; 132FB;EGYPTIAN HIEROGLYPH S035A;Lo;0;L;;;;;N;;;;; 132FC;EGYPTIAN HIEROGLYPH S036;Lo;0;L;;;;;N;;;;; 132FD;EGYPTIAN HIEROGLYPH S037;Lo;0;L;;;;;N;;;;; 132FE;EGYPTIAN HIEROGLYPH S038;Lo;0;L;;;;;N;;;;; 132FF;EGYPTIAN HIEROGLYPH S039;Lo;0;L;;;;;N;;;;; 13300;EGYPTIAN HIEROGLYPH S040;Lo;0;L;;;;;N;;;;; 13301;EGYPTIAN HIEROGLYPH S041;Lo;0;L;;;;;N;;;;; 13302;EGYPTIAN HIEROGLYPH S042;Lo;0;L;;;;;N;;;;; 13303;EGYPTIAN HIEROGLYPH S043;Lo;0;L;;;;;N;;;;; 13304;EGYPTIAN HIEROGLYPH S044;Lo;0;L;;;;;N;;;;; 13305;EGYPTIAN HIEROGLYPH S045;Lo;0;L;;;;;N;;;;; 13306;EGYPTIAN HIEROGLYPH S046;Lo;0;L;;;;;N;;;;; 13307;EGYPTIAN HIEROGLYPH T001;Lo;0;L;;;;;N;;;;; 13308;EGYPTIAN HIEROGLYPH T002;Lo;0;L;;;;;N;;;;; 13309;EGYPTIAN HIEROGLYPH T003;Lo;0;L;;;;;N;;;;; 1330A;EGYPTIAN HIEROGLYPH T003A;Lo;0;L;;;;;N;;;;; 1330B;EGYPTIAN HIEROGLYPH T004;Lo;0;L;;;;;N;;;;; 1330C;EGYPTIAN HIEROGLYPH T005;Lo;0;L;;;;;N;;;;; 1330D;EGYPTIAN HIEROGLYPH T006;Lo;0;L;;;;;N;;;;; 1330E;EGYPTIAN HIEROGLYPH T007;Lo;0;L;;;;;N;;;;; 1330F;EGYPTIAN HIEROGLYPH T007A;Lo;0;L;;;;;N;;;;; 13310;EGYPTIAN HIEROGLYPH T008;Lo;0;L;;;;;N;;;;; 13311;EGYPTIAN HIEROGLYPH T008A;Lo;0;L;;;;;N;;;;; 13312;EGYPTIAN HIEROGLYPH T009;Lo;0;L;;;;;N;;;;; 13313;EGYPTIAN HIEROGLYPH T009A;Lo;0;L;;;;;N;;;;; 13314;EGYPTIAN HIEROGLYPH T010;Lo;0;L;;;;;N;;;;; 13315;EGYPTIAN HIEROGLYPH T011;Lo;0;L;;;;;N;;;;; 13316;EGYPTIAN HIEROGLYPH T011A;Lo;0;L;;;;;N;;;;; 13317;EGYPTIAN HIEROGLYPH T012;Lo;0;L;;;;;N;;;;; 13318;EGYPTIAN HIEROGLYPH T013;Lo;0;L;;;;;N;;;;; 13319;EGYPTIAN HIEROGLYPH T014;Lo;0;L;;;;;N;;;;; 1331A;EGYPTIAN HIEROGLYPH T015;Lo;0;L;;;;;N;;;;; 1331B;EGYPTIAN HIEROGLYPH T016;Lo;0;L;;;;;N;;;;; 1331C;EGYPTIAN HIEROGLYPH T016A;Lo;0;L;;;;;N;;;;; 1331D;EGYPTIAN HIEROGLYPH T017;Lo;0;L;;;;;N;;;;; 1331E;EGYPTIAN HIEROGLYPH T018;Lo;0;L;;;;;N;;;;; 1331F;EGYPTIAN HIEROGLYPH T019;Lo;0;L;;;;;N;;;;; 13320;EGYPTIAN HIEROGLYPH T020;Lo;0;L;;;;;N;;;;; 13321;EGYPTIAN HIEROGLYPH T021;Lo;0;L;;;;;N;;;;; 13322;EGYPTIAN HIEROGLYPH T022;Lo;0;L;;;;;N;;;;; 13323;EGYPTIAN HIEROGLYPH T023;Lo;0;L;;;;;N;;;;; 13324;EGYPTIAN HIEROGLYPH T024;Lo;0;L;;;;;N;;;;; 13325;EGYPTIAN HIEROGLYPH T025;Lo;0;L;;;;;N;;;;; 13326;EGYPTIAN HIEROGLYPH T026;Lo;0;L;;;;;N;;;;; 13327;EGYPTIAN HIEROGLYPH T027;Lo;0;L;;;;;N;;;;; 13328;EGYPTIAN HIEROGLYPH T028;Lo;0;L;;;;;N;;;;; 13329;EGYPTIAN HIEROGLYPH T029;Lo;0;L;;;;;N;;;;; 1332A;EGYPTIAN HIEROGLYPH T030;Lo;0;L;;;;;N;;;;; 1332B;EGYPTIAN HIEROGLYPH T031;Lo;0;L;;;;;N;;;;; 1332C;EGYPTIAN HIEROGLYPH T032;Lo;0;L;;;;;N;;;;; 1332D;EGYPTIAN HIEROGLYPH T032A;Lo;0;L;;;;;N;;;;; 1332E;EGYPTIAN HIEROGLYPH T033;Lo;0;L;;;;;N;;;;; 1332F;EGYPTIAN HIEROGLYPH T033A;Lo;0;L;;;;;N;;;;; 13330;EGYPTIAN HIEROGLYPH T034;Lo;0;L;;;;;N;;;;; 13331;EGYPTIAN HIEROGLYPH T035;Lo;0;L;;;;;N;;;;; 13332;EGYPTIAN HIEROGLYPH T036;Lo;0;L;;;;;N;;;;; 13333;EGYPTIAN HIEROGLYPH U001;Lo;0;L;;;;;N;;;;; 13334;EGYPTIAN HIEROGLYPH U002;Lo;0;L;;;;;N;;;;; 13335;EGYPTIAN HIEROGLYPH U003;Lo;0;L;;;;;N;;;;; 13336;EGYPTIAN HIEROGLYPH U004;Lo;0;L;;;;;N;;;;; 13337;EGYPTIAN HIEROGLYPH U005;Lo;0;L;;;;;N;;;;; 13338;EGYPTIAN HIEROGLYPH U006;Lo;0;L;;;;;N;;;;; 13339;EGYPTIAN HIEROGLYPH U006A;Lo;0;L;;;;;N;;;;; 1333A;EGYPTIAN HIEROGLYPH U006B;Lo;0;L;;;;;N;;;;; 1333B;EGYPTIAN HIEROGLYPH U007;Lo;0;L;;;;;N;;;;; 1333C;EGYPTIAN HIEROGLYPH U008;Lo;0;L;;;;;N;;;;; 1333D;EGYPTIAN HIEROGLYPH U009;Lo;0;L;;;;;N;;;;; 1333E;EGYPTIAN HIEROGLYPH U010;Lo;0;L;;;;;N;;;;; 1333F;EGYPTIAN HIEROGLYPH U011;Lo;0;L;;;;;N;;;;; 13340;EGYPTIAN HIEROGLYPH U012;Lo;0;L;;;;;N;;;;; 13341;EGYPTIAN HIEROGLYPH U013;Lo;0;L;;;;;N;;;;; 13342;EGYPTIAN HIEROGLYPH U014;Lo;0;L;;;;;N;;;;; 13343;EGYPTIAN HIEROGLYPH U015;Lo;0;L;;;;;N;;;;; 13344;EGYPTIAN HIEROGLYPH U016;Lo;0;L;;;;;N;;;;; 13345;EGYPTIAN HIEROGLYPH U017;Lo;0;L;;;;;N;;;;; 13346;EGYPTIAN HIEROGLYPH U018;Lo;0;L;;;;;N;;;;; 13347;EGYPTIAN HIEROGLYPH U019;Lo;0;L;;;;;N;;;;; 13348;EGYPTIAN HIEROGLYPH U020;Lo;0;L;;;;;N;;;;; 13349;EGYPTIAN HIEROGLYPH U021;Lo;0;L;;;;;N;;;;; 1334A;EGYPTIAN HIEROGLYPH U022;Lo;0;L;;;;;N;;;;; 1334B;EGYPTIAN HIEROGLYPH U023;Lo;0;L;;;;;N;;;;; 1334C;EGYPTIAN HIEROGLYPH U023A;Lo;0;L;;;;;N;;;;; 1334D;EGYPTIAN HIEROGLYPH U024;Lo;0;L;;;;;N;;;;; 1334E;EGYPTIAN HIEROGLYPH U025;Lo;0;L;;;;;N;;;;; 1334F;EGYPTIAN HIEROGLYPH U026;Lo;0;L;;;;;N;;;;; 13350;EGYPTIAN HIEROGLYPH U027;Lo;0;L;;;;;N;;;;; 13351;EGYPTIAN HIEROGLYPH U028;Lo;0;L;;;;;N;;;;; 13352;EGYPTIAN HIEROGLYPH U029;Lo;0;L;;;;;N;;;;; 13353;EGYPTIAN HIEROGLYPH U029A;Lo;0;L;;;;;N;;;;; 13354;EGYPTIAN HIEROGLYPH U030;Lo;0;L;;;;;N;;;;; 13355;EGYPTIAN HIEROGLYPH U031;Lo;0;L;;;;;N;;;;; 13356;EGYPTIAN HIEROGLYPH U032;Lo;0;L;;;;;N;;;;; 13357;EGYPTIAN HIEROGLYPH U032A;Lo;0;L;;;;;N;;;;; 13358;EGYPTIAN HIEROGLYPH U033;Lo;0;L;;;;;N;;;;; 13359;EGYPTIAN HIEROGLYPH U034;Lo;0;L;;;;;N;;;;; 1335A;EGYPTIAN HIEROGLYPH U035;Lo;0;L;;;;;N;;;;; 1335B;EGYPTIAN HIEROGLYPH U036;Lo;0;L;;;;;N;;;;; 1335C;EGYPTIAN HIEROGLYPH U037;Lo;0;L;;;;;N;;;;; 1335D;EGYPTIAN HIEROGLYPH U038;Lo;0;L;;;;;N;;;;; 1335E;EGYPTIAN HIEROGLYPH U039;Lo;0;L;;;;;N;;;;; 1335F;EGYPTIAN HIEROGLYPH U040;Lo;0;L;;;;;N;;;;; 13360;EGYPTIAN HIEROGLYPH U041;Lo;0;L;;;;;N;;;;; 13361;EGYPTIAN HIEROGLYPH U042;Lo;0;L;;;;;N;;;;; 13362;EGYPTIAN HIEROGLYPH V001;Lo;0;L;;;;;N;;;;; 13363;EGYPTIAN HIEROGLYPH V001A;Lo;0;L;;;;;N;;;;; 13364;EGYPTIAN HIEROGLYPH V001B;Lo;0;L;;;;;N;;;;; 13365;EGYPTIAN HIEROGLYPH V001C;Lo;0;L;;;;;N;;;;; 13366;EGYPTIAN HIEROGLYPH V001D;Lo;0;L;;;;;N;;;;; 13367;EGYPTIAN HIEROGLYPH V001E;Lo;0;L;;;;;N;;;;; 13368;EGYPTIAN HIEROGLYPH V001F;Lo;0;L;;;;;N;;;;; 13369;EGYPTIAN HIEROGLYPH V001G;Lo;0;L;;;;;N;;;;; 1336A;EGYPTIAN HIEROGLYPH V001H;Lo;0;L;;;;;N;;;;; 1336B;EGYPTIAN HIEROGLYPH V001I;Lo;0;L;;;;;N;;;;; 1336C;EGYPTIAN HIEROGLYPH V002;Lo;0;L;;;;;N;;;;; 1336D;EGYPTIAN HIEROGLYPH V002A;Lo;0;L;;;;;N;;;;; 1336E;EGYPTIAN HIEROGLYPH V003;Lo;0;L;;;;;N;;;;; 1336F;EGYPTIAN HIEROGLYPH V004;Lo;0;L;;;;;N;;;;; 13370;EGYPTIAN HIEROGLYPH V005;Lo;0;L;;;;;N;;;;; 13371;EGYPTIAN HIEROGLYPH V006;Lo;0;L;;;;;N;;;;; 13372;EGYPTIAN HIEROGLYPH V007;Lo;0;L;;;;;N;;;;; 13373;EGYPTIAN HIEROGLYPH V007A;Lo;0;L;;;;;N;;;;; 13374;EGYPTIAN HIEROGLYPH V007B;Lo;0;L;;;;;N;;;;; 13375;EGYPTIAN HIEROGLYPH V008;Lo;0;L;;;;;N;;;;; 13376;EGYPTIAN HIEROGLYPH V009;Lo;0;L;;;;;N;;;;; 13377;EGYPTIAN HIEROGLYPH V010;Lo;0;L;;;;;N;;;;; 13378;EGYPTIAN HIEROGLYPH V011;Lo;0;L;;;;;N;;;;; 13379;EGYPTIAN HIEROGLYPH V011A;Lo;0;L;;;;;N;;;;; 1337A;EGYPTIAN HIEROGLYPH V011B;Lo;0;L;;;;;N;;;;; 1337B;EGYPTIAN HIEROGLYPH V011C;Lo;0;L;;;;;N;;;;; 1337C;EGYPTIAN HIEROGLYPH V012;Lo;0;L;;;;;N;;;;; 1337D;EGYPTIAN HIEROGLYPH V012A;Lo;0;L;;;;;N;;;;; 1337E;EGYPTIAN HIEROGLYPH V012B;Lo;0;L;;;;;N;;;;; 1337F;EGYPTIAN HIEROGLYPH V013;Lo;0;L;;;;;N;;;;; 13380;EGYPTIAN HIEROGLYPH V014;Lo;0;L;;;;;N;;;;; 13381;EGYPTIAN HIEROGLYPH V015;Lo;0;L;;;;;N;;;;; 13382;EGYPTIAN HIEROGLYPH V016;Lo;0;L;;;;;N;;;;; 13383;EGYPTIAN HIEROGLYPH V017;Lo;0;L;;;;;N;;;;; 13384;EGYPTIAN HIEROGLYPH V018;Lo;0;L;;;;;N;;;;; 13385;EGYPTIAN HIEROGLYPH V019;Lo;0;L;;;;;N;;;;; 13386;EGYPTIAN HIEROGLYPH V020;Lo;0;L;;;;;N;;;;; 13387;EGYPTIAN HIEROGLYPH V020A;Lo;0;L;;;;;N;;;;; 13388;EGYPTIAN HIEROGLYPH V020B;Lo;0;L;;;;;N;;;;; 13389;EGYPTIAN HIEROGLYPH V020C;Lo;0;L;;;;;N;;;;; 1338A;EGYPTIAN HIEROGLYPH V020D;Lo;0;L;;;;;N;;;;; 1338B;EGYPTIAN HIEROGLYPH V020E;Lo;0;L;;;;;N;;;;; 1338C;EGYPTIAN HIEROGLYPH V020F;Lo;0;L;;;;;N;;;;; 1338D;EGYPTIAN HIEROGLYPH V020G;Lo;0;L;;;;;N;;;;; 1338E;EGYPTIAN HIEROGLYPH V020H;Lo;0;L;;;;;N;;;;; 1338F;EGYPTIAN HIEROGLYPH V020I;Lo;0;L;;;;;N;;;;; 13390;EGYPTIAN HIEROGLYPH V020J;Lo;0;L;;;;;N;;;;; 13391;EGYPTIAN HIEROGLYPH V020K;Lo;0;L;;;;;N;;;;; 13392;EGYPTIAN HIEROGLYPH V020L;Lo;0;L;;;;;N;;;;; 13393;EGYPTIAN HIEROGLYPH V021;Lo;0;L;;;;;N;;;;; 13394;EGYPTIAN HIEROGLYPH V022;Lo;0;L;;;;;N;;;;; 13395;EGYPTIAN HIEROGLYPH V023;Lo;0;L;;;;;N;;;;; 13396;EGYPTIAN HIEROGLYPH V023A;Lo;0;L;;;;;N;;;;; 13397;EGYPTIAN HIEROGLYPH V024;Lo;0;L;;;;;N;;;;; 13398;EGYPTIAN HIEROGLYPH V025;Lo;0;L;;;;;N;;;;; 13399;EGYPTIAN HIEROGLYPH V026;Lo;0;L;;;;;N;;;;; 1339A;EGYPTIAN HIEROGLYPH V027;Lo;0;L;;;;;N;;;;; 1339B;EGYPTIAN HIEROGLYPH V028;Lo;0;L;;;;;N;;;;; 1339C;EGYPTIAN HIEROGLYPH V028A;Lo;0;L;;;;;N;;;;; 1339D;EGYPTIAN HIEROGLYPH V029;Lo;0;L;;;;;N;;;;; 1339E;EGYPTIAN HIEROGLYPH V029A;Lo;0;L;;;;;N;;;;; 1339F;EGYPTIAN HIEROGLYPH V030;Lo;0;L;;;;;N;;;;; 133A0;EGYPTIAN HIEROGLYPH V030A;Lo;0;L;;;;;N;;;;; 133A1;EGYPTIAN HIEROGLYPH V031;Lo;0;L;;;;;N;;;;; 133A2;EGYPTIAN HIEROGLYPH V031A;Lo;0;L;;;;;N;;;;; 133A3;EGYPTIAN HIEROGLYPH V032;Lo;0;L;;;;;N;;;;; 133A4;EGYPTIAN HIEROGLYPH V033;Lo;0;L;;;;;N;;;;; 133A5;EGYPTIAN HIEROGLYPH V033A;Lo;0;L;;;;;N;;;;; 133A6;EGYPTIAN HIEROGLYPH V034;Lo;0;L;;;;;N;;;;; 133A7;EGYPTIAN HIEROGLYPH V035;Lo;0;L;;;;;N;;;;; 133A8;EGYPTIAN HIEROGLYPH V036;Lo;0;L;;;;;N;;;;; 133A9;EGYPTIAN HIEROGLYPH V037;Lo;0;L;;;;;N;;;;; 133AA;EGYPTIAN HIEROGLYPH V037A;Lo;0;L;;;;;N;;;;; 133AB;EGYPTIAN HIEROGLYPH V038;Lo;0;L;;;;;N;;;;; 133AC;EGYPTIAN HIEROGLYPH V039;Lo;0;L;;;;;N;;;;; 133AD;EGYPTIAN HIEROGLYPH V040;Lo;0;L;;;;;N;;;;; 133AE;EGYPTIAN HIEROGLYPH V040A;Lo;0;L;;;;;N;;;;; 133AF;EGYPTIAN HIEROGLYPH W001;Lo;0;L;;;;;N;;;;; 133B0;EGYPTIAN HIEROGLYPH W002;Lo;0;L;;;;;N;;;;; 133B1;EGYPTIAN HIEROGLYPH W003;Lo;0;L;;;;;N;;;;; 133B2;EGYPTIAN HIEROGLYPH W003A;Lo;0;L;;;;;N;;;;; 133B3;EGYPTIAN HIEROGLYPH W004;Lo;0;L;;;;;N;;;;; 133B4;EGYPTIAN HIEROGLYPH W005;Lo;0;L;;;;;N;;;;; 133B5;EGYPTIAN HIEROGLYPH W006;Lo;0;L;;;;;N;;;;; 133B6;EGYPTIAN HIEROGLYPH W007;Lo;0;L;;;;;N;;;;; 133B7;EGYPTIAN HIEROGLYPH W008;Lo;0;L;;;;;N;;;;; 133B8;EGYPTIAN HIEROGLYPH W009;Lo;0;L;;;;;N;;;;; 133B9;EGYPTIAN HIEROGLYPH W009A;Lo;0;L;;;;;N;;;;; 133BA;EGYPTIAN HIEROGLYPH W010;Lo;0;L;;;;;N;;;;; 133BB;EGYPTIAN HIEROGLYPH W010A;Lo;0;L;;;;;N;;;;; 133BC;EGYPTIAN HIEROGLYPH W011;Lo;0;L;;;;;N;;;;; 133BD;EGYPTIAN HIEROGLYPH W012;Lo;0;L;;;;;N;;;;; 133BE;EGYPTIAN HIEROGLYPH W013;Lo;0;L;;;;;N;;;;; 133BF;EGYPTIAN HIEROGLYPH W014;Lo;0;L;;;;;N;;;;; 133C0;EGYPTIAN HIEROGLYPH W014A;Lo;0;L;;;;;N;;;;; 133C1;EGYPTIAN HIEROGLYPH W015;Lo;0;L;;;;;N;;;;; 133C2;EGYPTIAN HIEROGLYPH W016;Lo;0;L;;;;;N;;;;; 133C3;EGYPTIAN HIEROGLYPH W017;Lo;0;L;;;;;N;;;;; 133C4;EGYPTIAN HIEROGLYPH W017A;Lo;0;L;;;;;N;;;;; 133C5;EGYPTIAN HIEROGLYPH W018;Lo;0;L;;;;;N;;;;; 133C6;EGYPTIAN HIEROGLYPH W018A;Lo;0;L;;;;;N;;;;; 133C7;EGYPTIAN HIEROGLYPH W019;Lo;0;L;;;;;N;;;;; 133C8;EGYPTIAN HIEROGLYPH W020;Lo;0;L;;;;;N;;;;; 133C9;EGYPTIAN HIEROGLYPH W021;Lo;0;L;;;;;N;;;;; 133CA;EGYPTIAN HIEROGLYPH W022;Lo;0;L;;;;;N;;;;; 133CB;EGYPTIAN HIEROGLYPH W023;Lo;0;L;;;;;N;;;;; 133CC;EGYPTIAN HIEROGLYPH W024;Lo;0;L;;;;;N;;;;; 133CD;EGYPTIAN HIEROGLYPH W024A;Lo;0;L;;;;;N;;;;; 133CE;EGYPTIAN HIEROGLYPH W025;Lo;0;L;;;;;N;;;;; 133CF;EGYPTIAN HIEROGLYPH X001;Lo;0;L;;;;;N;;;;; 133D0;EGYPTIAN HIEROGLYPH X002;Lo;0;L;;;;;N;;;;; 133D1;EGYPTIAN HIEROGLYPH X003;Lo;0;L;;;;;N;;;;; 133D2;EGYPTIAN HIEROGLYPH X004;Lo;0;L;;;;;N;;;;; 133D3;EGYPTIAN HIEROGLYPH X004A;Lo;0;L;;;;;N;;;;; 133D4;EGYPTIAN HIEROGLYPH X004B;Lo;0;L;;;;;N;;;;; 133D5;EGYPTIAN HIEROGLYPH X005;Lo;0;L;;;;;N;;;;; 133D6;EGYPTIAN HIEROGLYPH X006;Lo;0;L;;;;;N;;;;; 133D7;EGYPTIAN HIEROGLYPH X006A;Lo;0;L;;;;;N;;;;; 133D8;EGYPTIAN HIEROGLYPH X007;Lo;0;L;;;;;N;;;;; 133D9;EGYPTIAN HIEROGLYPH X008;Lo;0;L;;;;;N;;;;; 133DA;EGYPTIAN HIEROGLYPH X008A;Lo;0;L;;;;;N;;;;; 133DB;EGYPTIAN HIEROGLYPH Y001;Lo;0;L;;;;;N;;;;; 133DC;EGYPTIAN HIEROGLYPH Y001A;Lo;0;L;;;;;N;;;;; 133DD;EGYPTIAN HIEROGLYPH Y002;Lo;0;L;;;;;N;;;;; 133DE;EGYPTIAN HIEROGLYPH Y003;Lo;0;L;;;;;N;;;;; 133DF;EGYPTIAN HIEROGLYPH Y004;Lo;0;L;;;;;N;;;;; 133E0;EGYPTIAN HIEROGLYPH Y005;Lo;0;L;;;;;N;;;;; 133E1;EGYPTIAN HIEROGLYPH Y006;Lo;0;L;;;;;N;;;;; 133E2;EGYPTIAN HIEROGLYPH Y007;Lo;0;L;;;;;N;;;;; 133E3;EGYPTIAN HIEROGLYPH Y008;Lo;0;L;;;;;N;;;;; 133E4;EGYPTIAN HIEROGLYPH Z001;Lo;0;L;;;;;N;;;;; 133E5;EGYPTIAN HIEROGLYPH Z002;Lo;0;L;;;;;N;;;;; 133E6;EGYPTIAN HIEROGLYPH Z002A;Lo;0;L;;;;;N;;;;; 133E7;EGYPTIAN HIEROGLYPH Z002B;Lo;0;L;;;;;N;;;;; 133E8;EGYPTIAN HIEROGLYPH Z002C;Lo;0;L;;;;;N;;;;; 133E9;EGYPTIAN HIEROGLYPH Z002D;Lo;0;L;;;;;N;;;;; 133EA;EGYPTIAN HIEROGLYPH Z003;Lo;0;L;;;;;N;;;;; 133EB;EGYPTIAN HIEROGLYPH Z003A;Lo;0;L;;;;;N;;;;; 133EC;EGYPTIAN HIEROGLYPH Z003B;Lo;0;L;;;;;N;;;;; 133ED;EGYPTIAN HIEROGLYPH Z004;Lo;0;L;;;;;N;;;;; 133EE;EGYPTIAN HIEROGLYPH Z004A;Lo;0;L;;;;;N;;;;; 133EF;EGYPTIAN HIEROGLYPH Z005;Lo;0;L;;;;;N;;;;; 133F0;EGYPTIAN HIEROGLYPH Z005A;Lo;0;L;;;;;N;;;;; 133F1;EGYPTIAN HIEROGLYPH Z006;Lo;0;L;;;;;N;;;;; 133F2;EGYPTIAN HIEROGLYPH Z007;Lo;0;L;;;;;N;;;;; 133F3;EGYPTIAN HIEROGLYPH Z008;Lo;0;L;;;;;N;;;;; 133F4;EGYPTIAN HIEROGLYPH Z009;Lo;0;L;;;;;N;;;;; 133F5;EGYPTIAN HIEROGLYPH Z010;Lo;0;L;;;;;N;;;;; 133F6;EGYPTIAN HIEROGLYPH Z011;Lo;0;L;;;;;N;;;;; 133F7;EGYPTIAN HIEROGLYPH Z012;Lo;0;L;;;;;N;;;;; 133F8;EGYPTIAN HIEROGLYPH Z013;Lo;0;L;;;;;N;;;;; 133F9;EGYPTIAN HIEROGLYPH Z014;Lo;0;L;;;;;N;;;;; 133FA;EGYPTIAN HIEROGLYPH Z015;Lo;0;L;;;;;N;;;;; 133FB;EGYPTIAN HIEROGLYPH Z015A;Lo;0;L;;;;;N;;;;; 133FC;EGYPTIAN HIEROGLYPH Z015B;Lo;0;L;;;;;N;;;;; 133FD;EGYPTIAN HIEROGLYPH Z015C;Lo;0;L;;;;;N;;;;; 133FE;EGYPTIAN HIEROGLYPH Z015D;Lo;0;L;;;;;N;;;;; 133FF;EGYPTIAN HIEROGLYPH Z015E;Lo;0;L;;;;;N;;;;; 13400;EGYPTIAN HIEROGLYPH Z015F;Lo;0;L;;;;;N;;;;; 13401;EGYPTIAN HIEROGLYPH Z015G;Lo;0;L;;;;;N;;;;; 13402;EGYPTIAN HIEROGLYPH Z015H;Lo;0;L;;;;;N;;;;; 13403;EGYPTIAN HIEROGLYPH Z015I;Lo;0;L;;;;;N;;;;; 13404;EGYPTIAN HIEROGLYPH Z016;Lo;0;L;;;;;N;;;;; 13405;EGYPTIAN HIEROGLYPH Z016A;Lo;0;L;;;;;N;;;;; 13406;EGYPTIAN HIEROGLYPH Z016B;Lo;0;L;;;;;N;;;;; 13407;EGYPTIAN HIEROGLYPH Z016C;Lo;0;L;;;;;N;;;;; 13408;EGYPTIAN HIEROGLYPH Z016D;Lo;0;L;;;;;N;;;;; 13409;EGYPTIAN HIEROGLYPH Z016E;Lo;0;L;;;;;N;;;;; 1340A;EGYPTIAN HIEROGLYPH Z016F;Lo;0;L;;;;;N;;;;; 1340B;EGYPTIAN HIEROGLYPH Z016G;Lo;0;L;;;;;N;;;;; 1340C;EGYPTIAN HIEROGLYPH Z016H;Lo;0;L;;;;;N;;;;; 1340D;EGYPTIAN HIEROGLYPH AA001;Lo;0;L;;;;;N;;;;; 1340E;EGYPTIAN HIEROGLYPH AA002;Lo;0;L;;;;;N;;;;; 1340F;EGYPTIAN HIEROGLYPH AA003;Lo;0;L;;;;;N;;;;; 13410;EGYPTIAN HIEROGLYPH AA004;Lo;0;L;;;;;N;;;;; 13411;EGYPTIAN HIEROGLYPH AA005;Lo;0;L;;;;;N;;;;; 13412;EGYPTIAN HIEROGLYPH AA006;Lo;0;L;;;;;N;;;;; 13413;EGYPTIAN HIEROGLYPH AA007;Lo;0;L;;;;;N;;;;; 13414;EGYPTIAN HIEROGLYPH AA007A;Lo;0;L;;;;;N;;;;; 13415;EGYPTIAN HIEROGLYPH AA007B;Lo;0;L;;;;;N;;;;; 13416;EGYPTIAN HIEROGLYPH AA008;Lo;0;L;;;;;N;;;;; 13417;EGYPTIAN HIEROGLYPH AA009;Lo;0;L;;;;;N;;;;; 13418;EGYPTIAN HIEROGLYPH AA010;Lo;0;L;;;;;N;;;;; 13419;EGYPTIAN HIEROGLYPH AA011;Lo;0;L;;;;;N;;;;; 1341A;EGYPTIAN HIEROGLYPH AA012;Lo;0;L;;;;;N;;;;; 1341B;EGYPTIAN HIEROGLYPH AA013;Lo;0;L;;;;;N;;;;; 1341C;EGYPTIAN HIEROGLYPH AA014;Lo;0;L;;;;;N;;;;; 1341D;EGYPTIAN HIEROGLYPH AA015;Lo;0;L;;;;;N;;;;; 1341E;EGYPTIAN HIEROGLYPH AA016;Lo;0;L;;;;;N;;;;; 1341F;EGYPTIAN HIEROGLYPH AA017;Lo;0;L;;;;;N;;;;; 13420;EGYPTIAN HIEROGLYPH AA018;Lo;0;L;;;;;N;;;;; 13421;EGYPTIAN HIEROGLYPH AA019;Lo;0;L;;;;;N;;;;; 13422;EGYPTIAN HIEROGLYPH AA020;Lo;0;L;;;;;N;;;;; 13423;EGYPTIAN HIEROGLYPH AA021;Lo;0;L;;;;;N;;;;; 13424;EGYPTIAN HIEROGLYPH AA022;Lo;0;L;;;;;N;;;;; 13425;EGYPTIAN HIEROGLYPH AA023;Lo;0;L;;;;;N;;;;; 13426;EGYPTIAN HIEROGLYPH AA024;Lo;0;L;;;;;N;;;;; 13427;EGYPTIAN HIEROGLYPH AA025;Lo;0;L;;;;;N;;;;; 13428;EGYPTIAN HIEROGLYPH AA026;Lo;0;L;;;;;N;;;;; 13429;EGYPTIAN HIEROGLYPH AA027;Lo;0;L;;;;;N;;;;; 1342A;EGYPTIAN HIEROGLYPH AA028;Lo;0;L;;;;;N;;;;; 1342B;EGYPTIAN HIEROGLYPH AA029;Lo;0;L;;;;;N;;;;; 1342C;EGYPTIAN HIEROGLYPH AA030;Lo;0;L;;;;;N;;;;; 1342D;EGYPTIAN HIEROGLYPH AA031;Lo;0;L;;;;;N;;;;; 1342E;EGYPTIAN HIEROGLYPH AA032;Lo;0;L;;;;;N;;;;; 13430;EGYPTIAN HIEROGLYPH VERTICAL JOINER;Cf;0;L;;;;;N;;;;; 13431;EGYPTIAN HIEROGLYPH HORIZONTAL JOINER;Cf;0;L;;;;;N;;;;; 13432;EGYPTIAN HIEROGLYPH INSERT AT TOP START;Cf;0;L;;;;;N;;;;; 13433;EGYPTIAN HIEROGLYPH INSERT AT BOTTOM START;Cf;0;L;;;;;N;;;;; 13434;EGYPTIAN HIEROGLYPH INSERT AT TOP END;Cf;0;L;;;;;N;;;;; 13435;EGYPTIAN HIEROGLYPH INSERT AT BOTTOM END;Cf;0;L;;;;;N;;;;; 13436;EGYPTIAN HIEROGLYPH OVERLAY MIDDLE;Cf;0;L;;;;;N;;;;; 13437;EGYPTIAN HIEROGLYPH BEGIN SEGMENT;Cf;0;L;;;;;N;;;;; 13438;EGYPTIAN HIEROGLYPH END SEGMENT;Cf;0;L;;;;;N;;;;; 14400;ANATOLIAN HIEROGLYPH A001;Lo;0;L;;;;;N;;;;; 14401;ANATOLIAN HIEROGLYPH A002;Lo;0;L;;;;;N;;;;; 14402;ANATOLIAN HIEROGLYPH A003;Lo;0;L;;;;;N;;;;; 14403;ANATOLIAN HIEROGLYPH A004;Lo;0;L;;;;;N;;;;; 14404;ANATOLIAN HIEROGLYPH A005;Lo;0;L;;;;;N;;;;; 14405;ANATOLIAN HIEROGLYPH A006;Lo;0;L;;;;;N;;;;; 14406;ANATOLIAN HIEROGLYPH A007;Lo;0;L;;;;;N;;;;; 14407;ANATOLIAN HIEROGLYPH A008;Lo;0;L;;;;;N;;;;; 14408;ANATOLIAN HIEROGLYPH A009;Lo;0;L;;;;;N;;;;; 14409;ANATOLIAN HIEROGLYPH A010;Lo;0;L;;;;;N;;;;; 1440A;ANATOLIAN HIEROGLYPH A010A;Lo;0;L;;;;;N;;;;; 1440B;ANATOLIAN HIEROGLYPH A011;Lo;0;L;;;;;N;;;;; 1440C;ANATOLIAN HIEROGLYPH A012;Lo;0;L;;;;;N;;;;; 1440D;ANATOLIAN HIEROGLYPH A013;Lo;0;L;;;;;N;;;;; 1440E;ANATOLIAN HIEROGLYPH A014;Lo;0;L;;;;;N;;;;; 1440F;ANATOLIAN HIEROGLYPH A015;Lo;0;L;;;;;N;;;;; 14410;ANATOLIAN HIEROGLYPH A016;Lo;0;L;;;;;N;;;;; 14411;ANATOLIAN HIEROGLYPH A017;Lo;0;L;;;;;N;;;;; 14412;ANATOLIAN HIEROGLYPH A018;Lo;0;L;;;;;N;;;;; 14413;ANATOLIAN HIEROGLYPH A019;Lo;0;L;;;;;N;;;;; 14414;ANATOLIAN HIEROGLYPH A020;Lo;0;L;;;;;N;;;;; 14415;ANATOLIAN HIEROGLYPH A021;Lo;0;L;;;;;N;;;;; 14416;ANATOLIAN HIEROGLYPH A022;Lo;0;L;;;;;N;;;;; 14417;ANATOLIAN HIEROGLYPH A023;Lo;0;L;;;;;N;;;;; 14418;ANATOLIAN HIEROGLYPH A024;Lo;0;L;;;;;N;;;;; 14419;ANATOLIAN HIEROGLYPH A025;Lo;0;L;;;;;N;;;;; 1441A;ANATOLIAN HIEROGLYPH A026;Lo;0;L;;;;;N;;;;; 1441B;ANATOLIAN HIEROGLYPH A026A;Lo;0;L;;;;;N;;;;; 1441C;ANATOLIAN HIEROGLYPH A027;Lo;0;L;;;;;N;;;;; 1441D;ANATOLIAN HIEROGLYPH A028;Lo;0;L;;;;;N;;;;; 1441E;ANATOLIAN HIEROGLYPH A029;Lo;0;L;;;;;N;;;;; 1441F;ANATOLIAN HIEROGLYPH A030;Lo;0;L;;;;;N;;;;; 14420;ANATOLIAN HIEROGLYPH A031;Lo;0;L;;;;;N;;;;; 14421;ANATOLIAN HIEROGLYPH A032;Lo;0;L;;;;;N;;;;; 14422;ANATOLIAN HIEROGLYPH A033;Lo;0;L;;;;;N;;;;; 14423;ANATOLIAN HIEROGLYPH A034;Lo;0;L;;;;;N;;;;; 14424;ANATOLIAN HIEROGLYPH A035;Lo;0;L;;;;;N;;;;; 14425;ANATOLIAN HIEROGLYPH A036;Lo;0;L;;;;;N;;;;; 14426;ANATOLIAN HIEROGLYPH A037;Lo;0;L;;;;;N;;;;; 14427;ANATOLIAN HIEROGLYPH A038;Lo;0;L;;;;;N;;;;; 14428;ANATOLIAN HIEROGLYPH A039;Lo;0;L;;;;;N;;;;; 14429;ANATOLIAN HIEROGLYPH A039A;Lo;0;L;;;;;N;;;;; 1442A;ANATOLIAN HIEROGLYPH A040;Lo;0;L;;;;;N;;;;; 1442B;ANATOLIAN HIEROGLYPH A041;Lo;0;L;;;;;N;;;;; 1442C;ANATOLIAN HIEROGLYPH A041A;Lo;0;L;;;;;N;;;;; 1442D;ANATOLIAN HIEROGLYPH A042;Lo;0;L;;;;;N;;;;; 1442E;ANATOLIAN HIEROGLYPH A043;Lo;0;L;;;;;N;;;;; 1442F;ANATOLIAN HIEROGLYPH A044;Lo;0;L;;;;;N;;;;; 14430;ANATOLIAN HIEROGLYPH A045;Lo;0;L;;;;;N;;;;; 14431;ANATOLIAN HIEROGLYPH A045A;Lo;0;L;;;;;N;;;;; 14432;ANATOLIAN HIEROGLYPH A046;Lo;0;L;;;;;N;;;;; 14433;ANATOLIAN HIEROGLYPH A046A;Lo;0;L;;;;;N;;;;; 14434;ANATOLIAN HIEROGLYPH A046B;Lo;0;L;;;;;N;;;;; 14435;ANATOLIAN HIEROGLYPH A047;Lo;0;L;;;;;N;;;;; 14436;ANATOLIAN HIEROGLYPH A048;Lo;0;L;;;;;N;;;;; 14437;ANATOLIAN HIEROGLYPH A049;Lo;0;L;;;;;N;;;;; 14438;ANATOLIAN HIEROGLYPH A050;Lo;0;L;;;;;N;;;;; 14439;ANATOLIAN HIEROGLYPH A051;Lo;0;L;;;;;N;;;;; 1443A;ANATOLIAN HIEROGLYPH A052;Lo;0;L;;;;;N;;;;; 1443B;ANATOLIAN HIEROGLYPH A053;Lo;0;L;;;;;N;;;;; 1443C;ANATOLIAN HIEROGLYPH A054;Lo;0;L;;;;;N;;;;; 1443D;ANATOLIAN HIEROGLYPH A055;Lo;0;L;;;;;N;;;;; 1443E;ANATOLIAN HIEROGLYPH A056;Lo;0;L;;;;;N;;;;; 1443F;ANATOLIAN HIEROGLYPH A057;Lo;0;L;;;;;N;;;;; 14440;ANATOLIAN HIEROGLYPH A058;Lo;0;L;;;;;N;;;;; 14441;ANATOLIAN HIEROGLYPH A059;Lo;0;L;;;;;N;;;;; 14442;ANATOLIAN HIEROGLYPH A060;Lo;0;L;;;;;N;;;;; 14443;ANATOLIAN HIEROGLYPH A061;Lo;0;L;;;;;N;;;;; 14444;ANATOLIAN HIEROGLYPH A062;Lo;0;L;;;;;N;;;;; 14445;ANATOLIAN HIEROGLYPH A063;Lo;0;L;;;;;N;;;;; 14446;ANATOLIAN HIEROGLYPH A064;Lo;0;L;;;;;N;;;;; 14447;ANATOLIAN HIEROGLYPH A065;Lo;0;L;;;;;N;;;;; 14448;ANATOLIAN HIEROGLYPH A066;Lo;0;L;;;;;N;;;;; 14449;ANATOLIAN HIEROGLYPH A066A;Lo;0;L;;;;;N;;;;; 1444A;ANATOLIAN HIEROGLYPH A066B;Lo;0;L;;;;;N;;;;; 1444B;ANATOLIAN HIEROGLYPH A066C;Lo;0;L;;;;;N;;;;; 1444C;ANATOLIAN HIEROGLYPH A067;Lo;0;L;;;;;N;;;;; 1444D;ANATOLIAN HIEROGLYPH A068;Lo;0;L;;;;;N;;;;; 1444E;ANATOLIAN HIEROGLYPH A069;Lo;0;L;;;;;N;;;;; 1444F;ANATOLIAN HIEROGLYPH A070;Lo;0;L;;;;;N;;;;; 14450;ANATOLIAN HIEROGLYPH A071;Lo;0;L;;;;;N;;;;; 14451;ANATOLIAN HIEROGLYPH A072;Lo;0;L;;;;;N;;;;; 14452;ANATOLIAN HIEROGLYPH A073;Lo;0;L;;;;;N;;;;; 14453;ANATOLIAN HIEROGLYPH A074;Lo;0;L;;;;;N;;;;; 14454;ANATOLIAN HIEROGLYPH A075;Lo;0;L;;;;;N;;;;; 14455;ANATOLIAN HIEROGLYPH A076;Lo;0;L;;;;;N;;;;; 14456;ANATOLIAN HIEROGLYPH A077;Lo;0;L;;;;;N;;;;; 14457;ANATOLIAN HIEROGLYPH A078;Lo;0;L;;;;;N;;;;; 14458;ANATOLIAN HIEROGLYPH A079;Lo;0;L;;;;;N;;;;; 14459;ANATOLIAN HIEROGLYPH A080;Lo;0;L;;;;;N;;;;; 1445A;ANATOLIAN HIEROGLYPH A081;Lo;0;L;;;;;N;;;;; 1445B;ANATOLIAN HIEROGLYPH A082;Lo;0;L;;;;;N;;;;; 1445C;ANATOLIAN HIEROGLYPH A083;Lo;0;L;;;;;N;;;;; 1445D;ANATOLIAN HIEROGLYPH A084;Lo;0;L;;;;;N;;;;; 1445E;ANATOLIAN HIEROGLYPH A085;Lo;0;L;;;;;N;;;;; 1445F;ANATOLIAN HIEROGLYPH A086;Lo;0;L;;;;;N;;;;; 14460;ANATOLIAN HIEROGLYPH A087;Lo;0;L;;;;;N;;;;; 14461;ANATOLIAN HIEROGLYPH A088;Lo;0;L;;;;;N;;;;; 14462;ANATOLIAN HIEROGLYPH A089;Lo;0;L;;;;;N;;;;; 14463;ANATOLIAN HIEROGLYPH A090;Lo;0;L;;;;;N;;;;; 14464;ANATOLIAN HIEROGLYPH A091;Lo;0;L;;;;;N;;;;; 14465;ANATOLIAN HIEROGLYPH A092;Lo;0;L;;;;;N;;;;; 14466;ANATOLIAN HIEROGLYPH A093;Lo;0;L;;;;;N;;;;; 14467;ANATOLIAN HIEROGLYPH A094;Lo;0;L;;;;;N;;;;; 14468;ANATOLIAN HIEROGLYPH A095;Lo;0;L;;;;;N;;;;; 14469;ANATOLIAN HIEROGLYPH A096;Lo;0;L;;;;;N;;;;; 1446A;ANATOLIAN HIEROGLYPH A097;Lo;0;L;;;;;N;;;;; 1446B;ANATOLIAN HIEROGLYPH A097A;Lo;0;L;;;;;N;;;;; 1446C;ANATOLIAN HIEROGLYPH A098;Lo;0;L;;;;;N;;;;; 1446D;ANATOLIAN HIEROGLYPH A098A;Lo;0;L;;;;;N;;;;; 1446E;ANATOLIAN HIEROGLYPH A099;Lo;0;L;;;;;N;;;;; 1446F;ANATOLIAN HIEROGLYPH A100;Lo;0;L;;;;;N;;;;; 14470;ANATOLIAN HIEROGLYPH A100A;Lo;0;L;;;;;N;;;;; 14471;ANATOLIAN HIEROGLYPH A101;Lo;0;L;;;;;N;;;;; 14472;ANATOLIAN HIEROGLYPH A101A;Lo;0;L;;;;;N;;;;; 14473;ANATOLIAN HIEROGLYPH A102;Lo;0;L;;;;;N;;;;; 14474;ANATOLIAN HIEROGLYPH A102A;Lo;0;L;;;;;N;;;;; 14475;ANATOLIAN HIEROGLYPH A103;Lo;0;L;;;;;N;;;;; 14476;ANATOLIAN HIEROGLYPH A104;Lo;0;L;;;;;N;;;;; 14477;ANATOLIAN HIEROGLYPH A104A;Lo;0;L;;;;;N;;;;; 14478;ANATOLIAN HIEROGLYPH A104B;Lo;0;L;;;;;N;;;;; 14479;ANATOLIAN HIEROGLYPH A104C;Lo;0;L;;;;;N;;;;; 1447A;ANATOLIAN HIEROGLYPH A105;Lo;0;L;;;;;N;;;;; 1447B;ANATOLIAN HIEROGLYPH A105A;Lo;0;L;;;;;N;;;;; 1447C;ANATOLIAN HIEROGLYPH A105B;Lo;0;L;;;;;N;;;;; 1447D;ANATOLIAN HIEROGLYPH A106;Lo;0;L;;;;;N;;;;; 1447E;ANATOLIAN HIEROGLYPH A107;Lo;0;L;;;;;N;;;;; 1447F;ANATOLIAN HIEROGLYPH A107A;Lo;0;L;;;;;N;;;;; 14480;ANATOLIAN HIEROGLYPH A107B;Lo;0;L;;;;;N;;;;; 14481;ANATOLIAN HIEROGLYPH A107C;Lo;0;L;;;;;N;;;;; 14482;ANATOLIAN HIEROGLYPH A108;Lo;0;L;;;;;N;;;;; 14483;ANATOLIAN HIEROGLYPH A109;Lo;0;L;;;;;N;;;;; 14484;ANATOLIAN HIEROGLYPH A110;Lo;0;L;;;;;N;;;;; 14485;ANATOLIAN HIEROGLYPH A110A;Lo;0;L;;;;;N;;;;; 14486;ANATOLIAN HIEROGLYPH A110B;Lo;0;L;;;;;N;;;;; 14487;ANATOLIAN HIEROGLYPH A111;Lo;0;L;;;;;N;;;;; 14488;ANATOLIAN HIEROGLYPH A112;Lo;0;L;;;;;N;;;;; 14489;ANATOLIAN HIEROGLYPH A113;Lo;0;L;;;;;N;;;;; 1448A;ANATOLIAN HIEROGLYPH A114;Lo;0;L;;;;;N;;;;; 1448B;ANATOLIAN HIEROGLYPH A115;Lo;0;L;;;;;N;;;;; 1448C;ANATOLIAN HIEROGLYPH A115A;Lo;0;L;;;;;N;;;;; 1448D;ANATOLIAN HIEROGLYPH A116;Lo;0;L;;;;;N;;;;; 1448E;ANATOLIAN HIEROGLYPH A117;Lo;0;L;;;;;N;;;;; 1448F;ANATOLIAN HIEROGLYPH A118;Lo;0;L;;;;;N;;;;; 14490;ANATOLIAN HIEROGLYPH A119;Lo;0;L;;;;;N;;;;; 14491;ANATOLIAN HIEROGLYPH A120;Lo;0;L;;;;;N;;;;; 14492;ANATOLIAN HIEROGLYPH A121;Lo;0;L;;;;;N;;;;; 14493;ANATOLIAN HIEROGLYPH A122;Lo;0;L;;;;;N;;;;; 14494;ANATOLIAN HIEROGLYPH A123;Lo;0;L;;;;;N;;;;; 14495;ANATOLIAN HIEROGLYPH A124;Lo;0;L;;;;;N;;;;; 14496;ANATOLIAN HIEROGLYPH A125;Lo;0;L;;;;;N;;;;; 14497;ANATOLIAN HIEROGLYPH A125A;Lo;0;L;;;;;N;;;;; 14498;ANATOLIAN HIEROGLYPH A126;Lo;0;L;;;;;N;;;;; 14499;ANATOLIAN HIEROGLYPH A127;Lo;0;L;;;;;N;;;;; 1449A;ANATOLIAN HIEROGLYPH A128;Lo;0;L;;;;;N;;;;; 1449B;ANATOLIAN HIEROGLYPH A129;Lo;0;L;;;;;N;;;;; 1449C;ANATOLIAN HIEROGLYPH A130;Lo;0;L;;;;;N;;;;; 1449D;ANATOLIAN HIEROGLYPH A131;Lo;0;L;;;;;N;;;;; 1449E;ANATOLIAN HIEROGLYPH A132;Lo;0;L;;;;;N;;;;; 1449F;ANATOLIAN HIEROGLYPH A133;Lo;0;L;;;;;N;;;;; 144A0;ANATOLIAN HIEROGLYPH A134;Lo;0;L;;;;;N;;;;; 144A1;ANATOLIAN HIEROGLYPH A135;Lo;0;L;;;;;N;;;;; 144A2;ANATOLIAN HIEROGLYPH A135A;Lo;0;L;;;;;N;;;;; 144A3;ANATOLIAN HIEROGLYPH A136;Lo;0;L;;;;;N;;;;; 144A4;ANATOLIAN HIEROGLYPH A137;Lo;0;L;;;;;N;;;;; 144A5;ANATOLIAN HIEROGLYPH A138;Lo;0;L;;;;;N;;;;; 144A6;ANATOLIAN HIEROGLYPH A139;Lo;0;L;;;;;N;;;;; 144A7;ANATOLIAN HIEROGLYPH A140;Lo;0;L;;;;;N;;;;; 144A8;ANATOLIAN HIEROGLYPH A141;Lo;0;L;;;;;N;;;;; 144A9;ANATOLIAN HIEROGLYPH A142;Lo;0;L;;;;;N;;;;; 144AA;ANATOLIAN HIEROGLYPH A143;Lo;0;L;;;;;N;;;;; 144AB;ANATOLIAN HIEROGLYPH A144;Lo;0;L;;;;;N;;;;; 144AC;ANATOLIAN HIEROGLYPH A145;Lo;0;L;;;;;N;;;;; 144AD;ANATOLIAN HIEROGLYPH A146;Lo;0;L;;;;;N;;;;; 144AE;ANATOLIAN HIEROGLYPH A147;Lo;0;L;;;;;N;;;;; 144AF;ANATOLIAN HIEROGLYPH A148;Lo;0;L;;;;;N;;;;; 144B0;ANATOLIAN HIEROGLYPH A149;Lo;0;L;;;;;N;;;;; 144B1;ANATOLIAN HIEROGLYPH A150;Lo;0;L;;;;;N;;;;; 144B2;ANATOLIAN HIEROGLYPH A151;Lo;0;L;;;;;N;;;;; 144B3;ANATOLIAN HIEROGLYPH A152;Lo;0;L;;;;;N;;;;; 144B4;ANATOLIAN HIEROGLYPH A153;Lo;0;L;;;;;N;;;;; 144B5;ANATOLIAN HIEROGLYPH A154;Lo;0;L;;;;;N;;;;; 144B6;ANATOLIAN HIEROGLYPH A155;Lo;0;L;;;;;N;;;;; 144B7;ANATOLIAN HIEROGLYPH A156;Lo;0;L;;;;;N;;;;; 144B8;ANATOLIAN HIEROGLYPH A157;Lo;0;L;;;;;N;;;;; 144B9;ANATOLIAN HIEROGLYPH A158;Lo;0;L;;;;;N;;;;; 144BA;ANATOLIAN HIEROGLYPH A159;Lo;0;L;;;;;N;;;;; 144BB;ANATOLIAN HIEROGLYPH A160;Lo;0;L;;;;;N;;;;; 144BC;ANATOLIAN HIEROGLYPH A161;Lo;0;L;;;;;N;;;;; 144BD;ANATOLIAN HIEROGLYPH A162;Lo;0;L;;;;;N;;;;; 144BE;ANATOLIAN HIEROGLYPH A163;Lo;0;L;;;;;N;;;;; 144BF;ANATOLIAN HIEROGLYPH A164;Lo;0;L;;;;;N;;;;; 144C0;ANATOLIAN HIEROGLYPH A165;Lo;0;L;;;;;N;;;;; 144C1;ANATOLIAN HIEROGLYPH A166;Lo;0;L;;;;;N;;;;; 144C2;ANATOLIAN HIEROGLYPH A167;Lo;0;L;;;;;N;;;;; 144C3;ANATOLIAN HIEROGLYPH A168;Lo;0;L;;;;;N;;;;; 144C4;ANATOLIAN HIEROGLYPH A169;Lo;0;L;;;;;N;;;;; 144C5;ANATOLIAN HIEROGLYPH A170;Lo;0;L;;;;;N;;;;; 144C6;ANATOLIAN HIEROGLYPH A171;Lo;0;L;;;;;N;;;;; 144C7;ANATOLIAN HIEROGLYPH A172;Lo;0;L;;;;;N;;;;; 144C8;ANATOLIAN HIEROGLYPH A173;Lo;0;L;;;;;N;;;;; 144C9;ANATOLIAN HIEROGLYPH A174;Lo;0;L;;;;;N;;;;; 144CA;ANATOLIAN HIEROGLYPH A175;Lo;0;L;;;;;N;;;;; 144CB;ANATOLIAN HIEROGLYPH A176;Lo;0;L;;;;;N;;;;; 144CC;ANATOLIAN HIEROGLYPH A177;Lo;0;L;;;;;N;;;;; 144CD;ANATOLIAN HIEROGLYPH A178;Lo;0;L;;;;;N;;;;; 144CE;ANATOLIAN HIEROGLYPH A179;Lo;0;L;;;;;N;;;;; 144CF;ANATOLIAN HIEROGLYPH A180;Lo;0;L;;;;;N;;;;; 144D0;ANATOLIAN HIEROGLYPH A181;Lo;0;L;;;;;N;;;;; 144D1;ANATOLIAN HIEROGLYPH A182;Lo;0;L;;;;;N;;;;; 144D2;ANATOLIAN HIEROGLYPH A183;Lo;0;L;;;;;N;;;;; 144D3;ANATOLIAN HIEROGLYPH A184;Lo;0;L;;;;;N;;;;; 144D4;ANATOLIAN HIEROGLYPH A185;Lo;0;L;;;;;N;;;;; 144D5;ANATOLIAN HIEROGLYPH A186;Lo;0;L;;;;;N;;;;; 144D6;ANATOLIAN HIEROGLYPH A187;Lo;0;L;;;;;N;;;;; 144D7;ANATOLIAN HIEROGLYPH A188;Lo;0;L;;;;;N;;;;; 144D8;ANATOLIAN HIEROGLYPH A189;Lo;0;L;;;;;N;;;;; 144D9;ANATOLIAN HIEROGLYPH A190;Lo;0;L;;;;;N;;;;; 144DA;ANATOLIAN HIEROGLYPH A191;Lo;0;L;;;;;N;;;;; 144DB;ANATOLIAN HIEROGLYPH A192;Lo;0;L;;;;;N;;;;; 144DC;ANATOLIAN HIEROGLYPH A193;Lo;0;L;;;;;N;;;;; 144DD;ANATOLIAN HIEROGLYPH A194;Lo;0;L;;;;;N;;;;; 144DE;ANATOLIAN HIEROGLYPH A195;Lo;0;L;;;;;N;;;;; 144DF;ANATOLIAN HIEROGLYPH A196;Lo;0;L;;;;;N;;;;; 144E0;ANATOLIAN HIEROGLYPH A197;Lo;0;L;;;;;N;;;;; 144E1;ANATOLIAN HIEROGLYPH A198;Lo;0;L;;;;;N;;;;; 144E2;ANATOLIAN HIEROGLYPH A199;Lo;0;L;;;;;N;;;;; 144E3;ANATOLIAN HIEROGLYPH A200;Lo;0;L;;;;;N;;;;; 144E4;ANATOLIAN HIEROGLYPH A201;Lo;0;L;;;;;N;;;;; 144E5;ANATOLIAN HIEROGLYPH A202;Lo;0;L;;;;;N;;;;; 144E6;ANATOLIAN HIEROGLYPH A202A;Lo;0;L;;;;;N;;;;; 144E7;ANATOLIAN HIEROGLYPH A202B;Lo;0;L;;;;;N;;;;; 144E8;ANATOLIAN HIEROGLYPH A203;Lo;0;L;;;;;N;;;;; 144E9;ANATOLIAN HIEROGLYPH A204;Lo;0;L;;;;;N;;;;; 144EA;ANATOLIAN HIEROGLYPH A205;Lo;0;L;;;;;N;;;;; 144EB;ANATOLIAN HIEROGLYPH A206;Lo;0;L;;;;;N;;;;; 144EC;ANATOLIAN HIEROGLYPH A207;Lo;0;L;;;;;N;;;;; 144ED;ANATOLIAN HIEROGLYPH A207A;Lo;0;L;;;;;N;;;;; 144EE;ANATOLIAN HIEROGLYPH A208;Lo;0;L;;;;;N;;;;; 144EF;ANATOLIAN HIEROGLYPH A209;Lo;0;L;;;;;N;;;;; 144F0;ANATOLIAN HIEROGLYPH A209A;Lo;0;L;;;;;N;;;;; 144F1;ANATOLIAN HIEROGLYPH A210;Lo;0;L;;;;;N;;;;; 144F2;ANATOLIAN HIEROGLYPH A211;Lo;0;L;;;;;N;;;;; 144F3;ANATOLIAN HIEROGLYPH A212;Lo;0;L;;;;;N;;;;; 144F4;ANATOLIAN HIEROGLYPH A213;Lo;0;L;;;;;N;;;;; 144F5;ANATOLIAN HIEROGLYPH A214;Lo;0;L;;;;;N;;;;; 144F6;ANATOLIAN HIEROGLYPH A215;Lo;0;L;;;;;N;;;;; 144F7;ANATOLIAN HIEROGLYPH A215A;Lo;0;L;;;;;N;;;;; 144F8;ANATOLIAN HIEROGLYPH A216;Lo;0;L;;;;;N;;;;; 144F9;ANATOLIAN HIEROGLYPH A216A;Lo;0;L;;;;;N;;;;; 144FA;ANATOLIAN HIEROGLYPH A217;Lo;0;L;;;;;N;;;;; 144FB;ANATOLIAN HIEROGLYPH A218;Lo;0;L;;;;;N;;;;; 144FC;ANATOLIAN HIEROGLYPH A219;Lo;0;L;;;;;N;;;;; 144FD;ANATOLIAN HIEROGLYPH A220;Lo;0;L;;;;;N;;;;; 144FE;ANATOLIAN HIEROGLYPH A221;Lo;0;L;;;;;N;;;;; 144FF;ANATOLIAN HIEROGLYPH A222;Lo;0;L;;;;;N;;;;; 14500;ANATOLIAN HIEROGLYPH A223;Lo;0;L;;;;;N;;;;; 14501;ANATOLIAN HIEROGLYPH A224;Lo;0;L;;;;;N;;;;; 14502;ANATOLIAN HIEROGLYPH A225;Lo;0;L;;;;;N;;;;; 14503;ANATOLIAN HIEROGLYPH A226;Lo;0;L;;;;;N;;;;; 14504;ANATOLIAN HIEROGLYPH A227;Lo;0;L;;;;;N;;;;; 14505;ANATOLIAN HIEROGLYPH A227A;Lo;0;L;;;;;N;;;;; 14506;ANATOLIAN HIEROGLYPH A228;Lo;0;L;;;;;N;;;;; 14507;ANATOLIAN HIEROGLYPH A229;Lo;0;L;;;;;N;;;;; 14508;ANATOLIAN HIEROGLYPH A230;Lo;0;L;;;;;N;;;;; 14509;ANATOLIAN HIEROGLYPH A231;Lo;0;L;;;;;N;;;;; 1450A;ANATOLIAN HIEROGLYPH A232;Lo;0;L;;;;;N;;;;; 1450B;ANATOLIAN HIEROGLYPH A233;Lo;0;L;;;;;N;;;;; 1450C;ANATOLIAN HIEROGLYPH A234;Lo;0;L;;;;;N;;;;; 1450D;ANATOLIAN HIEROGLYPH A235;Lo;0;L;;;;;N;;;;; 1450E;ANATOLIAN HIEROGLYPH A236;Lo;0;L;;;;;N;;;;; 1450F;ANATOLIAN HIEROGLYPH A237;Lo;0;L;;;;;N;;;;; 14510;ANATOLIAN HIEROGLYPH A238;Lo;0;L;;;;;N;;;;; 14511;ANATOLIAN HIEROGLYPH A239;Lo;0;L;;;;;N;;;;; 14512;ANATOLIAN HIEROGLYPH A240;Lo;0;L;;;;;N;;;;; 14513;ANATOLIAN HIEROGLYPH A241;Lo;0;L;;;;;N;;;;; 14514;ANATOLIAN HIEROGLYPH A242;Lo;0;L;;;;;N;;;;; 14515;ANATOLIAN HIEROGLYPH A243;Lo;0;L;;;;;N;;;;; 14516;ANATOLIAN HIEROGLYPH A244;Lo;0;L;;;;;N;;;;; 14517;ANATOLIAN HIEROGLYPH A245;Lo;0;L;;;;;N;;;;; 14518;ANATOLIAN HIEROGLYPH A246;Lo;0;L;;;;;N;;;;; 14519;ANATOLIAN HIEROGLYPH A247;Lo;0;L;;;;;N;;;;; 1451A;ANATOLIAN HIEROGLYPH A248;Lo;0;L;;;;;N;;;;; 1451B;ANATOLIAN HIEROGLYPH A249;Lo;0;L;;;;;N;;;;; 1451C;ANATOLIAN HIEROGLYPH A250;Lo;0;L;;;;;N;;;;; 1451D;ANATOLIAN HIEROGLYPH A251;Lo;0;L;;;;;N;;;;; 1451E;ANATOLIAN HIEROGLYPH A252;Lo;0;L;;;;;N;;;;; 1451F;ANATOLIAN HIEROGLYPH A253;Lo;0;L;;;;;N;;;;; 14520;ANATOLIAN HIEROGLYPH A254;Lo;0;L;;;;;N;;;;; 14521;ANATOLIAN HIEROGLYPH A255;Lo;0;L;;;;;N;;;;; 14522;ANATOLIAN HIEROGLYPH A256;Lo;0;L;;;;;N;;;;; 14523;ANATOLIAN HIEROGLYPH A257;Lo;0;L;;;;;N;;;;; 14524;ANATOLIAN HIEROGLYPH A258;Lo;0;L;;;;;N;;;;; 14525;ANATOLIAN HIEROGLYPH A259;Lo;0;L;;;;;N;;;;; 14526;ANATOLIAN HIEROGLYPH A260;Lo;0;L;;;;;N;;;;; 14527;ANATOLIAN HIEROGLYPH A261;Lo;0;L;;;;;N;;;;; 14528;ANATOLIAN HIEROGLYPH A262;Lo;0;L;;;;;N;;;;; 14529;ANATOLIAN HIEROGLYPH A263;Lo;0;L;;;;;N;;;;; 1452A;ANATOLIAN HIEROGLYPH A264;Lo;0;L;;;;;N;;;;; 1452B;ANATOLIAN HIEROGLYPH A265;Lo;0;L;;;;;N;;;;; 1452C;ANATOLIAN HIEROGLYPH A266;Lo;0;L;;;;;N;;;;; 1452D;ANATOLIAN HIEROGLYPH A267;Lo;0;L;;;;;N;;;;; 1452E;ANATOLIAN HIEROGLYPH A267A;Lo;0;L;;;;;N;;;;; 1452F;ANATOLIAN HIEROGLYPH A268;Lo;0;L;;;;;N;;;;; 14530;ANATOLIAN HIEROGLYPH A269;Lo;0;L;;;;;N;;;;; 14531;ANATOLIAN HIEROGLYPH A270;Lo;0;L;;;;;N;;;;; 14532;ANATOLIAN HIEROGLYPH A271;Lo;0;L;;;;;N;;;;; 14533;ANATOLIAN HIEROGLYPH A272;Lo;0;L;;;;;N;;;;; 14534;ANATOLIAN HIEROGLYPH A273;Lo;0;L;;;;;N;;;;; 14535;ANATOLIAN HIEROGLYPH A274;Lo;0;L;;;;;N;;;;; 14536;ANATOLIAN HIEROGLYPH A275;Lo;0;L;;;;;N;;;;; 14537;ANATOLIAN HIEROGLYPH A276;Lo;0;L;;;;;N;;;;; 14538;ANATOLIAN HIEROGLYPH A277;Lo;0;L;;;;;N;;;;; 14539;ANATOLIAN HIEROGLYPH A278;Lo;0;L;;;;;N;;;;; 1453A;ANATOLIAN HIEROGLYPH A279;Lo;0;L;;;;;N;;;;; 1453B;ANATOLIAN HIEROGLYPH A280;Lo;0;L;;;;;N;;;;; 1453C;ANATOLIAN HIEROGLYPH A281;Lo;0;L;;;;;N;;;;; 1453D;ANATOLIAN HIEROGLYPH A282;Lo;0;L;;;;;N;;;;; 1453E;ANATOLIAN HIEROGLYPH A283;Lo;0;L;;;;;N;;;;; 1453F;ANATOLIAN HIEROGLYPH A284;Lo;0;L;;;;;N;;;;; 14540;ANATOLIAN HIEROGLYPH A285;Lo;0;L;;;;;N;;;;; 14541;ANATOLIAN HIEROGLYPH A286;Lo;0;L;;;;;N;;;;; 14542;ANATOLIAN HIEROGLYPH A287;Lo;0;L;;;;;N;;;;; 14543;ANATOLIAN HIEROGLYPH A288;Lo;0;L;;;;;N;;;;; 14544;ANATOLIAN HIEROGLYPH A289;Lo;0;L;;;;;N;;;;; 14545;ANATOLIAN HIEROGLYPH A289A;Lo;0;L;;;;;N;;;;; 14546;ANATOLIAN HIEROGLYPH A290;Lo;0;L;;;;;N;;;;; 14547;ANATOLIAN HIEROGLYPH A291;Lo;0;L;;;;;N;;;;; 14548;ANATOLIAN HIEROGLYPH A292;Lo;0;L;;;;;N;;;;; 14549;ANATOLIAN HIEROGLYPH A293;Lo;0;L;;;;;N;;;;; 1454A;ANATOLIAN HIEROGLYPH A294;Lo;0;L;;;;;N;;;;; 1454B;ANATOLIAN HIEROGLYPH A294A;Lo;0;L;;;;;N;;;;; 1454C;ANATOLIAN HIEROGLYPH A295;Lo;0;L;;;;;N;;;;; 1454D;ANATOLIAN HIEROGLYPH A296;Lo;0;L;;;;;N;;;;; 1454E;ANATOLIAN HIEROGLYPH A297;Lo;0;L;;;;;N;;;;; 1454F;ANATOLIAN HIEROGLYPH A298;Lo;0;L;;;;;N;;;;; 14550;ANATOLIAN HIEROGLYPH A299;Lo;0;L;;;;;N;;;;; 14551;ANATOLIAN HIEROGLYPH A299A;Lo;0;L;;;;;N;;;;; 14552;ANATOLIAN HIEROGLYPH A300;Lo;0;L;;;;;N;;;;; 14553;ANATOLIAN HIEROGLYPH A301;Lo;0;L;;;;;N;;;;; 14554;ANATOLIAN HIEROGLYPH A302;Lo;0;L;;;;;N;;;;; 14555;ANATOLIAN HIEROGLYPH A303;Lo;0;L;;;;;N;;;;; 14556;ANATOLIAN HIEROGLYPH A304;Lo;0;L;;;;;N;;;;; 14557;ANATOLIAN HIEROGLYPH A305;Lo;0;L;;;;;N;;;;; 14558;ANATOLIAN HIEROGLYPH A306;Lo;0;L;;;;;N;;;;; 14559;ANATOLIAN HIEROGLYPH A307;Lo;0;L;;;;;N;;;;; 1455A;ANATOLIAN HIEROGLYPH A308;Lo;0;L;;;;;N;;;;; 1455B;ANATOLIAN HIEROGLYPH A309;Lo;0;L;;;;;N;;;;; 1455C;ANATOLIAN HIEROGLYPH A309A;Lo;0;L;;;;;N;;;;; 1455D;ANATOLIAN HIEROGLYPH A310;Lo;0;L;;;;;N;;;;; 1455E;ANATOLIAN HIEROGLYPH A311;Lo;0;L;;;;;N;;;;; 1455F;ANATOLIAN HIEROGLYPH A312;Lo;0;L;;;;;N;;;;; 14560;ANATOLIAN HIEROGLYPH A313;Lo;0;L;;;;;N;;;;; 14561;ANATOLIAN HIEROGLYPH A314;Lo;0;L;;;;;N;;;;; 14562;ANATOLIAN HIEROGLYPH A315;Lo;0;L;;;;;N;;;;; 14563;ANATOLIAN HIEROGLYPH A316;Lo;0;L;;;;;N;;;;; 14564;ANATOLIAN HIEROGLYPH A317;Lo;0;L;;;;;N;;;;; 14565;ANATOLIAN HIEROGLYPH A318;Lo;0;L;;;;;N;;;;; 14566;ANATOLIAN HIEROGLYPH A319;Lo;0;L;;;;;N;;;;; 14567;ANATOLIAN HIEROGLYPH A320;Lo;0;L;;;;;N;;;;; 14568;ANATOLIAN HIEROGLYPH A321;Lo;0;L;;;;;N;;;;; 14569;ANATOLIAN HIEROGLYPH A322;Lo;0;L;;;;;N;;;;; 1456A;ANATOLIAN HIEROGLYPH A323;Lo;0;L;;;;;N;;;;; 1456B;ANATOLIAN HIEROGLYPH A324;Lo;0;L;;;;;N;;;;; 1456C;ANATOLIAN HIEROGLYPH A325;Lo;0;L;;;;;N;;;;; 1456D;ANATOLIAN HIEROGLYPH A326;Lo;0;L;;;;;N;;;;; 1456E;ANATOLIAN HIEROGLYPH A327;Lo;0;L;;;;;N;;;;; 1456F;ANATOLIAN HIEROGLYPH A328;Lo;0;L;;;;;N;;;;; 14570;ANATOLIAN HIEROGLYPH A329;Lo;0;L;;;;;N;;;;; 14571;ANATOLIAN HIEROGLYPH A329A;Lo;0;L;;;;;N;;;;; 14572;ANATOLIAN HIEROGLYPH A330;Lo;0;L;;;;;N;;;;; 14573;ANATOLIAN HIEROGLYPH A331;Lo;0;L;;;;;N;;;;; 14574;ANATOLIAN HIEROGLYPH A332A;Lo;0;L;;;;;N;;;;; 14575;ANATOLIAN HIEROGLYPH A332B;Lo;0;L;;;;;N;;;;; 14576;ANATOLIAN HIEROGLYPH A332C;Lo;0;L;;;;;N;;;;; 14577;ANATOLIAN HIEROGLYPH A333;Lo;0;L;;;;;N;;;;; 14578;ANATOLIAN HIEROGLYPH A334;Lo;0;L;;;;;N;;;;; 14579;ANATOLIAN HIEROGLYPH A335;Lo;0;L;;;;;N;;;;; 1457A;ANATOLIAN HIEROGLYPH A336;Lo;0;L;;;;;N;;;;; 1457B;ANATOLIAN HIEROGLYPH A336A;Lo;0;L;;;;;N;;;;; 1457C;ANATOLIAN HIEROGLYPH A336B;Lo;0;L;;;;;N;;;;; 1457D;ANATOLIAN HIEROGLYPH A336C;Lo;0;L;;;;;N;;;;; 1457E;ANATOLIAN HIEROGLYPH A337;Lo;0;L;;;;;N;;;;; 1457F;ANATOLIAN HIEROGLYPH A338;Lo;0;L;;;;;N;;;;; 14580;ANATOLIAN HIEROGLYPH A339;Lo;0;L;;;;;N;;;;; 14581;ANATOLIAN HIEROGLYPH A340;Lo;0;L;;;;;N;;;;; 14582;ANATOLIAN HIEROGLYPH A341;Lo;0;L;;;;;N;;;;; 14583;ANATOLIAN HIEROGLYPH A342;Lo;0;L;;;;;N;;;;; 14584;ANATOLIAN HIEROGLYPH A343;Lo;0;L;;;;;N;;;;; 14585;ANATOLIAN HIEROGLYPH A344;Lo;0;L;;;;;N;;;;; 14586;ANATOLIAN HIEROGLYPH A345;Lo;0;L;;;;;N;;;;; 14587;ANATOLIAN HIEROGLYPH A346;Lo;0;L;;;;;N;;;;; 14588;ANATOLIAN HIEROGLYPH A347;Lo;0;L;;;;;N;;;;; 14589;ANATOLIAN HIEROGLYPH A348;Lo;0;L;;;;;N;;;;; 1458A;ANATOLIAN HIEROGLYPH A349;Lo;0;L;;;;;N;;;;; 1458B;ANATOLIAN HIEROGLYPH A350;Lo;0;L;;;;;N;;;;; 1458C;ANATOLIAN HIEROGLYPH A351;Lo;0;L;;;;;N;;;;; 1458D;ANATOLIAN HIEROGLYPH A352;Lo;0;L;;;;;N;;;;; 1458E;ANATOLIAN HIEROGLYPH A353;Lo;0;L;;;;;N;;;;; 1458F;ANATOLIAN HIEROGLYPH A354;Lo;0;L;;;;;N;;;;; 14590;ANATOLIAN HIEROGLYPH A355;Lo;0;L;;;;;N;;;;; 14591;ANATOLIAN HIEROGLYPH A356;Lo;0;L;;;;;N;;;;; 14592;ANATOLIAN HIEROGLYPH A357;Lo;0;L;;;;;N;;;;; 14593;ANATOLIAN HIEROGLYPH A358;Lo;0;L;;;;;N;;;;; 14594;ANATOLIAN HIEROGLYPH A359;Lo;0;L;;;;;N;;;;; 14595;ANATOLIAN HIEROGLYPH A359A;Lo;0;L;;;;;N;;;;; 14596;ANATOLIAN HIEROGLYPH A360;Lo;0;L;;;;;N;;;;; 14597;ANATOLIAN HIEROGLYPH A361;Lo;0;L;;;;;N;;;;; 14598;ANATOLIAN HIEROGLYPH A362;Lo;0;L;;;;;N;;;;; 14599;ANATOLIAN HIEROGLYPH A363;Lo;0;L;;;;;N;;;;; 1459A;ANATOLIAN HIEROGLYPH A364;Lo;0;L;;;;;N;;;;; 1459B;ANATOLIAN HIEROGLYPH A364A;Lo;0;L;;;;;N;;;;; 1459C;ANATOLIAN HIEROGLYPH A365;Lo;0;L;;;;;N;;;;; 1459D;ANATOLIAN HIEROGLYPH A366;Lo;0;L;;;;;N;;;;; 1459E;ANATOLIAN HIEROGLYPH A367;Lo;0;L;;;;;N;;;;; 1459F;ANATOLIAN HIEROGLYPH A368;Lo;0;L;;;;;N;;;;; 145A0;ANATOLIAN HIEROGLYPH A368A;Lo;0;L;;;;;N;;;;; 145A1;ANATOLIAN HIEROGLYPH A369;Lo;0;L;;;;;N;;;;; 145A2;ANATOLIAN HIEROGLYPH A370;Lo;0;L;;;;;N;;;;; 145A3;ANATOLIAN HIEROGLYPH A371;Lo;0;L;;;;;N;;;;; 145A4;ANATOLIAN HIEROGLYPH A371A;Lo;0;L;;;;;N;;;;; 145A5;ANATOLIAN HIEROGLYPH A372;Lo;0;L;;;;;N;;;;; 145A6;ANATOLIAN HIEROGLYPH A373;Lo;0;L;;;;;N;;;;; 145A7;ANATOLIAN HIEROGLYPH A374;Lo;0;L;;;;;N;;;;; 145A8;ANATOLIAN HIEROGLYPH A375;Lo;0;L;;;;;N;;;;; 145A9;ANATOLIAN HIEROGLYPH A376;Lo;0;L;;;;;N;;;;; 145AA;ANATOLIAN HIEROGLYPH A377;Lo;0;L;;;;;N;;;;; 145AB;ANATOLIAN HIEROGLYPH A378;Lo;0;L;;;;;N;;;;; 145AC;ANATOLIAN HIEROGLYPH A379;Lo;0;L;;;;;N;;;;; 145AD;ANATOLIAN HIEROGLYPH A380;Lo;0;L;;;;;N;;;;; 145AE;ANATOLIAN HIEROGLYPH A381;Lo;0;L;;;;;N;;;;; 145AF;ANATOLIAN HIEROGLYPH A381A;Lo;0;L;;;;;N;;;;; 145B0;ANATOLIAN HIEROGLYPH A382;Lo;0;L;;;;;N;;;;; 145B1;ANATOLIAN HIEROGLYPH A383 RA OR RI;Lo;0;L;;;;;N;;;;; 145B2;ANATOLIAN HIEROGLYPH A383A;Lo;0;L;;;;;N;;;;; 145B3;ANATOLIAN HIEROGLYPH A384;Lo;0;L;;;;;N;;;;; 145B4;ANATOLIAN HIEROGLYPH A385;Lo;0;L;;;;;N;;;;; 145B5;ANATOLIAN HIEROGLYPH A386;Lo;0;L;;;;;N;;;;; 145B6;ANATOLIAN HIEROGLYPH A386A;Lo;0;L;;;;;N;;;;; 145B7;ANATOLIAN HIEROGLYPH A387;Lo;0;L;;;;;N;;;;; 145B8;ANATOLIAN HIEROGLYPH A388;Lo;0;L;;;;;N;;;;; 145B9;ANATOLIAN HIEROGLYPH A389;Lo;0;L;;;;;N;;;;; 145BA;ANATOLIAN HIEROGLYPH A390;Lo;0;L;;;;;N;;;;; 145BB;ANATOLIAN HIEROGLYPH A391;Lo;0;L;;;;;N;;;;; 145BC;ANATOLIAN HIEROGLYPH A392;Lo;0;L;;;;;N;;;;; 145BD;ANATOLIAN HIEROGLYPH A393 EIGHT;Lo;0;L;;;;;N;;;;; 145BE;ANATOLIAN HIEROGLYPH A394;Lo;0;L;;;;;N;;;;; 145BF;ANATOLIAN HIEROGLYPH A395;Lo;0;L;;;;;N;;;;; 145C0;ANATOLIAN HIEROGLYPH A396;Lo;0;L;;;;;N;;;;; 145C1;ANATOLIAN HIEROGLYPH A397;Lo;0;L;;;;;N;;;;; 145C2;ANATOLIAN HIEROGLYPH A398;Lo;0;L;;;;;N;;;;; 145C3;ANATOLIAN HIEROGLYPH A399;Lo;0;L;;;;;N;;;;; 145C4;ANATOLIAN HIEROGLYPH A400;Lo;0;L;;;;;N;;;;; 145C5;ANATOLIAN HIEROGLYPH A401;Lo;0;L;;;;;N;;;;; 145C6;ANATOLIAN HIEROGLYPH A402;Lo;0;L;;;;;N;;;;; 145C7;ANATOLIAN HIEROGLYPH A403;Lo;0;L;;;;;N;;;;; 145C8;ANATOLIAN HIEROGLYPH A404;Lo;0;L;;;;;N;;;;; 145C9;ANATOLIAN HIEROGLYPH A405;Lo;0;L;;;;;N;;;;; 145CA;ANATOLIAN HIEROGLYPH A406;Lo;0;L;;;;;N;;;;; 145CB;ANATOLIAN HIEROGLYPH A407;Lo;0;L;;;;;N;;;;; 145CC;ANATOLIAN HIEROGLYPH A408;Lo;0;L;;;;;N;;;;; 145CD;ANATOLIAN HIEROGLYPH A409;Lo;0;L;;;;;N;;;;; 145CE;ANATOLIAN HIEROGLYPH A410 BEGIN LOGOGRAM MARK;Lo;0;L;;;;;N;;;;; 145CF;ANATOLIAN HIEROGLYPH A410A END LOGOGRAM MARK;Lo;0;L;;;;;N;;;;; 145D0;ANATOLIAN HIEROGLYPH A411;Lo;0;L;;;;;N;;;;; 145D1;ANATOLIAN HIEROGLYPH A412;Lo;0;L;;;;;N;;;;; 145D2;ANATOLIAN HIEROGLYPH A413;Lo;0;L;;;;;N;;;;; 145D3;ANATOLIAN HIEROGLYPH A414;Lo;0;L;;;;;N;;;;; 145D4;ANATOLIAN HIEROGLYPH A415;Lo;0;L;;;;;N;;;;; 145D5;ANATOLIAN HIEROGLYPH A416;Lo;0;L;;;;;N;;;;; 145D6;ANATOLIAN HIEROGLYPH A417;Lo;0;L;;;;;N;;;;; 145D7;ANATOLIAN HIEROGLYPH A418;Lo;0;L;;;;;N;;;;; 145D8;ANATOLIAN HIEROGLYPH A419;Lo;0;L;;;;;N;;;;; 145D9;ANATOLIAN HIEROGLYPH A420;Lo;0;L;;;;;N;;;;; 145DA;ANATOLIAN HIEROGLYPH A421;Lo;0;L;;;;;N;;;;; 145DB;ANATOLIAN HIEROGLYPH A422;Lo;0;L;;;;;N;;;;; 145DC;ANATOLIAN HIEROGLYPH A423;Lo;0;L;;;;;N;;;;; 145DD;ANATOLIAN HIEROGLYPH A424;Lo;0;L;;;;;N;;;;; 145DE;ANATOLIAN HIEROGLYPH A425;Lo;0;L;;;;;N;;;;; 145DF;ANATOLIAN HIEROGLYPH A426;Lo;0;L;;;;;N;;;;; 145E0;ANATOLIAN HIEROGLYPH A427;Lo;0;L;;;;;N;;;;; 145E1;ANATOLIAN HIEROGLYPH A428;Lo;0;L;;;;;N;;;;; 145E2;ANATOLIAN HIEROGLYPH A429;Lo;0;L;;;;;N;;;;; 145E3;ANATOLIAN HIEROGLYPH A430;Lo;0;L;;;;;N;;;;; 145E4;ANATOLIAN HIEROGLYPH A431;Lo;0;L;;;;;N;;;;; 145E5;ANATOLIAN HIEROGLYPH A432;Lo;0;L;;;;;N;;;;; 145E6;ANATOLIAN HIEROGLYPH A433;Lo;0;L;;;;;N;;;;; 145E7;ANATOLIAN HIEROGLYPH A434;Lo;0;L;;;;;N;;;;; 145E8;ANATOLIAN HIEROGLYPH A435;Lo;0;L;;;;;N;;;;; 145E9;ANATOLIAN HIEROGLYPH A436;Lo;0;L;;;;;N;;;;; 145EA;ANATOLIAN HIEROGLYPH A437;Lo;0;L;;;;;N;;;;; 145EB;ANATOLIAN HIEROGLYPH A438;Lo;0;L;;;;;N;;;;; 145EC;ANATOLIAN HIEROGLYPH A439;Lo;0;L;;;;;N;;;;; 145ED;ANATOLIAN HIEROGLYPH A440;Lo;0;L;;;;;N;;;;; 145EE;ANATOLIAN HIEROGLYPH A441;Lo;0;L;;;;;N;;;;; 145EF;ANATOLIAN HIEROGLYPH A442;Lo;0;L;;;;;N;;;;; 145F0;ANATOLIAN HIEROGLYPH A443;Lo;0;L;;;;;N;;;;; 145F1;ANATOLIAN HIEROGLYPH A444;Lo;0;L;;;;;N;;;;; 145F2;ANATOLIAN HIEROGLYPH A445;Lo;0;L;;;;;N;;;;; 145F3;ANATOLIAN HIEROGLYPH A446;Lo;0;L;;;;;N;;;;; 145F4;ANATOLIAN HIEROGLYPH A447;Lo;0;L;;;;;N;;;;; 145F5;ANATOLIAN HIEROGLYPH A448;Lo;0;L;;;;;N;;;;; 145F6;ANATOLIAN HIEROGLYPH A449;Lo;0;L;;;;;N;;;;; 145F7;ANATOLIAN HIEROGLYPH A450;Lo;0;L;;;;;N;;;;; 145F8;ANATOLIAN HIEROGLYPH A450A;Lo;0;L;;;;;N;;;;; 145F9;ANATOLIAN HIEROGLYPH A451;Lo;0;L;;;;;N;;;;; 145FA;ANATOLIAN HIEROGLYPH A452;Lo;0;L;;;;;N;;;;; 145FB;ANATOLIAN HIEROGLYPH A453;Lo;0;L;;;;;N;;;;; 145FC;ANATOLIAN HIEROGLYPH A454;Lo;0;L;;;;;N;;;;; 145FD;ANATOLIAN HIEROGLYPH A455;Lo;0;L;;;;;N;;;;; 145FE;ANATOLIAN HIEROGLYPH A456;Lo;0;L;;;;;N;;;;; 145FF;ANATOLIAN HIEROGLYPH A457;Lo;0;L;;;;;N;;;;; 14600;ANATOLIAN HIEROGLYPH A457A;Lo;0;L;;;;;N;;;;; 14601;ANATOLIAN HIEROGLYPH A458;Lo;0;L;;;;;N;;;;; 14602;ANATOLIAN HIEROGLYPH A459;Lo;0;L;;;;;N;;;;; 14603;ANATOLIAN HIEROGLYPH A460;Lo;0;L;;;;;N;;;;; 14604;ANATOLIAN HIEROGLYPH A461;Lo;0;L;;;;;N;;;;; 14605;ANATOLIAN HIEROGLYPH A462;Lo;0;L;;;;;N;;;;; 14606;ANATOLIAN HIEROGLYPH A463;Lo;0;L;;;;;N;;;;; 14607;ANATOLIAN HIEROGLYPH A464;Lo;0;L;;;;;N;;;;; 14608;ANATOLIAN HIEROGLYPH A465;Lo;0;L;;;;;N;;;;; 14609;ANATOLIAN HIEROGLYPH A466;Lo;0;L;;;;;N;;;;; 1460A;ANATOLIAN HIEROGLYPH A467;Lo;0;L;;;;;N;;;;; 1460B;ANATOLIAN HIEROGLYPH A468;Lo;0;L;;;;;N;;;;; 1460C;ANATOLIAN HIEROGLYPH A469;Lo;0;L;;;;;N;;;;; 1460D;ANATOLIAN HIEROGLYPH A470;Lo;0;L;;;;;N;;;;; 1460E;ANATOLIAN HIEROGLYPH A471;Lo;0;L;;;;;N;;;;; 1460F;ANATOLIAN HIEROGLYPH A472;Lo;0;L;;;;;N;;;;; 14610;ANATOLIAN HIEROGLYPH A473;Lo;0;L;;;;;N;;;;; 14611;ANATOLIAN HIEROGLYPH A474;Lo;0;L;;;;;N;;;;; 14612;ANATOLIAN HIEROGLYPH A475;Lo;0;L;;;;;N;;;;; 14613;ANATOLIAN HIEROGLYPH A476;Lo;0;L;;;;;N;;;;; 14614;ANATOLIAN HIEROGLYPH A477;Lo;0;L;;;;;N;;;;; 14615;ANATOLIAN HIEROGLYPH A478;Lo;0;L;;;;;N;;;;; 14616;ANATOLIAN HIEROGLYPH A479;Lo;0;L;;;;;N;;;;; 14617;ANATOLIAN HIEROGLYPH A480;Lo;0;L;;;;;N;;;;; 14618;ANATOLIAN HIEROGLYPH A481;Lo;0;L;;;;;N;;;;; 14619;ANATOLIAN HIEROGLYPH A482;Lo;0;L;;;;;N;;;;; 1461A;ANATOLIAN HIEROGLYPH A483;Lo;0;L;;;;;N;;;;; 1461B;ANATOLIAN HIEROGLYPH A484;Lo;0;L;;;;;N;;;;; 1461C;ANATOLIAN HIEROGLYPH A485;Lo;0;L;;;;;N;;;;; 1461D;ANATOLIAN HIEROGLYPH A486;Lo;0;L;;;;;N;;;;; 1461E;ANATOLIAN HIEROGLYPH A487;Lo;0;L;;;;;N;;;;; 1461F;ANATOLIAN HIEROGLYPH A488;Lo;0;L;;;;;N;;;;; 14620;ANATOLIAN HIEROGLYPH A489;Lo;0;L;;;;;N;;;;; 14621;ANATOLIAN HIEROGLYPH A490;Lo;0;L;;;;;N;;;;; 14622;ANATOLIAN HIEROGLYPH A491;Lo;0;L;;;;;N;;;;; 14623;ANATOLIAN HIEROGLYPH A492;Lo;0;L;;;;;N;;;;; 14624;ANATOLIAN HIEROGLYPH A493;Lo;0;L;;;;;N;;;;; 14625;ANATOLIAN HIEROGLYPH A494;Lo;0;L;;;;;N;;;;; 14626;ANATOLIAN HIEROGLYPH A495;Lo;0;L;;;;;N;;;;; 14627;ANATOLIAN HIEROGLYPH A496;Lo;0;L;;;;;N;;;;; 14628;ANATOLIAN HIEROGLYPH A497;Lo;0;L;;;;;N;;;;; 14629;ANATOLIAN HIEROGLYPH A501;Lo;0;L;;;;;N;;;;; 1462A;ANATOLIAN HIEROGLYPH A502;Lo;0;L;;;;;N;;;;; 1462B;ANATOLIAN HIEROGLYPH A503;Lo;0;L;;;;;N;;;;; 1462C;ANATOLIAN HIEROGLYPH A504;Lo;0;L;;;;;N;;;;; 1462D;ANATOLIAN HIEROGLYPH A505;Lo;0;L;;;;;N;;;;; 1462E;ANATOLIAN HIEROGLYPH A506;Lo;0;L;;;;;N;;;;; 1462F;ANATOLIAN HIEROGLYPH A507;Lo;0;L;;;;;N;;;;; 14630;ANATOLIAN HIEROGLYPH A508;Lo;0;L;;;;;N;;;;; 14631;ANATOLIAN HIEROGLYPH A509;Lo;0;L;;;;;N;;;;; 14632;ANATOLIAN HIEROGLYPH A510;Lo;0;L;;;;;N;;;;; 14633;ANATOLIAN HIEROGLYPH A511;Lo;0;L;;;;;N;;;;; 14634;ANATOLIAN HIEROGLYPH A512;Lo;0;L;;;;;N;;;;; 14635;ANATOLIAN HIEROGLYPH A513;Lo;0;L;;;;;N;;;;; 14636;ANATOLIAN HIEROGLYPH A514;Lo;0;L;;;;;N;;;;; 14637;ANATOLIAN HIEROGLYPH A515;Lo;0;L;;;;;N;;;;; 14638;ANATOLIAN HIEROGLYPH A516;Lo;0;L;;;;;N;;;;; 14639;ANATOLIAN HIEROGLYPH A517;Lo;0;L;;;;;N;;;;; 1463A;ANATOLIAN HIEROGLYPH A518;Lo;0;L;;;;;N;;;;; 1463B;ANATOLIAN HIEROGLYPH A519;Lo;0;L;;;;;N;;;;; 1463C;ANATOLIAN HIEROGLYPH A520;Lo;0;L;;;;;N;;;;; 1463D;ANATOLIAN HIEROGLYPH A521;Lo;0;L;;;;;N;;;;; 1463E;ANATOLIAN HIEROGLYPH A522;Lo;0;L;;;;;N;;;;; 1463F;ANATOLIAN HIEROGLYPH A523;Lo;0;L;;;;;N;;;;; 14640;ANATOLIAN HIEROGLYPH A524;Lo;0;L;;;;;N;;;;; 14641;ANATOLIAN HIEROGLYPH A525;Lo;0;L;;;;;N;;;;; 14642;ANATOLIAN HIEROGLYPH A526;Lo;0;L;;;;;N;;;;; 14643;ANATOLIAN HIEROGLYPH A527;Lo;0;L;;;;;N;;;;; 14644;ANATOLIAN HIEROGLYPH A528;Lo;0;L;;;;;N;;;;; 14645;ANATOLIAN HIEROGLYPH A529;Lo;0;L;;;;;N;;;;; 14646;ANATOLIAN HIEROGLYPH A530;Lo;0;L;;;;;N;;;;; 16800;BAMUM LETTER PHASE-A NGKUE MFON;Lo;0;L;;;;;N;;;;; 16801;BAMUM LETTER PHASE-A GBIEE FON;Lo;0;L;;;;;N;;;;; 16802;BAMUM LETTER PHASE-A PON MFON PIPAEMGBIEE;Lo;0;L;;;;;N;;;;; 16803;BAMUM LETTER PHASE-A PON MFON PIPAEMBA;Lo;0;L;;;;;N;;;;; 16804;BAMUM LETTER PHASE-A NAA MFON;Lo;0;L;;;;;N;;;;; 16805;BAMUM LETTER PHASE-A SHUENSHUET;Lo;0;L;;;;;N;;;;; 16806;BAMUM LETTER PHASE-A TITA MFON;Lo;0;L;;;;;N;;;;; 16807;BAMUM LETTER PHASE-A NZA MFON;Lo;0;L;;;;;N;;;;; 16808;BAMUM LETTER PHASE-A SHINDA PA NJI;Lo;0;L;;;;;N;;;;; 16809;BAMUM LETTER PHASE-A PON PA NJI PIPAEMGBIEE;Lo;0;L;;;;;N;;;;; 1680A;BAMUM LETTER PHASE-A PON PA NJI PIPAEMBA;Lo;0;L;;;;;N;;;;; 1680B;BAMUM LETTER PHASE-A MAEMBGBIEE;Lo;0;L;;;;;N;;;;; 1680C;BAMUM LETTER PHASE-A TU MAEMBA;Lo;0;L;;;;;N;;;;; 1680D;BAMUM LETTER PHASE-A NGANGU;Lo;0;L;;;;;N;;;;; 1680E;BAMUM LETTER PHASE-A MAEMVEUX;Lo;0;L;;;;;N;;;;; 1680F;BAMUM LETTER PHASE-A MANSUAE;Lo;0;L;;;;;N;;;;; 16810;BAMUM LETTER PHASE-A MVEUAENGAM;Lo;0;L;;;;;N;;;;; 16811;BAMUM LETTER PHASE-A SEUNYAM;Lo;0;L;;;;;N;;;;; 16812;BAMUM LETTER PHASE-A NTOQPEN;Lo;0;L;;;;;N;;;;; 16813;BAMUM LETTER PHASE-A KEUKEUTNDA;Lo;0;L;;;;;N;;;;; 16814;BAMUM LETTER PHASE-A NKINDI;Lo;0;L;;;;;N;;;;; 16815;BAMUM LETTER PHASE-A SUU;Lo;0;L;;;;;N;;;;; 16816;BAMUM LETTER PHASE-A NGKUENZEUM;Lo;0;L;;;;;N;;;;; 16817;BAMUM LETTER PHASE-A LAPAQ;Lo;0;L;;;;;N;;;;; 16818;BAMUM LETTER PHASE-A LET KUT;Lo;0;L;;;;;N;;;;; 16819;BAMUM LETTER PHASE-A NTAP MFAA;Lo;0;L;;;;;N;;;;; 1681A;BAMUM LETTER PHASE-A MAEKEUP;Lo;0;L;;;;;N;;;;; 1681B;BAMUM LETTER PHASE-A PASHAE;Lo;0;L;;;;;N;;;;; 1681C;BAMUM LETTER PHASE-A GHEUAERAE;Lo;0;L;;;;;N;;;;; 1681D;BAMUM LETTER PHASE-A PAMSHAE;Lo;0;L;;;;;N;;;;; 1681E;BAMUM LETTER PHASE-A MON NGGEUAET;Lo;0;L;;;;;N;;;;; 1681F;BAMUM LETTER PHASE-A NZUN MEUT;Lo;0;L;;;;;N;;;;; 16820;BAMUM LETTER PHASE-A U YUQ NAE;Lo;0;L;;;;;N;;;;; 16821;BAMUM LETTER PHASE-A GHEUAEGHEUAE;Lo;0;L;;;;;N;;;;; 16822;BAMUM LETTER PHASE-A NTAP NTAA;Lo;0;L;;;;;N;;;;; 16823;BAMUM LETTER PHASE-A SISA;Lo;0;L;;;;;N;;;;; 16824;BAMUM LETTER PHASE-A MGBASA;Lo;0;L;;;;;N;;;;; 16825;BAMUM LETTER PHASE-A MEUNJOMNDEUQ;Lo;0;L;;;;;N;;;;; 16826;BAMUM LETTER PHASE-A MOOMPUQ;Lo;0;L;;;;;N;;;;; 16827;BAMUM LETTER PHASE-A KAFA;Lo;0;L;;;;;N;;;;; 16828;BAMUM LETTER PHASE-A PA LEERAEWA;Lo;0;L;;;;;N;;;;; 16829;BAMUM LETTER PHASE-A NDA LEERAEWA;Lo;0;L;;;;;N;;;;; 1682A;BAMUM LETTER PHASE-A PET;Lo;0;L;;;;;N;;;;; 1682B;BAMUM LETTER PHASE-A MAEMKPEN;Lo;0;L;;;;;N;;;;; 1682C;BAMUM LETTER PHASE-A NIKA;Lo;0;L;;;;;N;;;;; 1682D;BAMUM LETTER PHASE-A PUP;Lo;0;L;;;;;N;;;;; 1682E;BAMUM LETTER PHASE-A TUAEP;Lo;0;L;;;;;N;;;;; 1682F;BAMUM LETTER PHASE-A LUAEP;Lo;0;L;;;;;N;;;;; 16830;BAMUM LETTER PHASE-A SONJAM;Lo;0;L;;;;;N;;;;; 16831;BAMUM LETTER PHASE-A TEUTEUWEN;Lo;0;L;;;;;N;;;;; 16832;BAMUM LETTER PHASE-A MAENYI;Lo;0;L;;;;;N;;;;; 16833;BAMUM LETTER PHASE-A KET;Lo;0;L;;;;;N;;;;; 16834;BAMUM LETTER PHASE-A NDAANGGEUAET;Lo;0;L;;;;;N;;;;; 16835;BAMUM LETTER PHASE-A KUOQ;Lo;0;L;;;;;N;;;;; 16836;BAMUM LETTER PHASE-A MOOMEUT;Lo;0;L;;;;;N;;;;; 16837;BAMUM LETTER PHASE-A SHUM;Lo;0;L;;;;;N;;;;; 16838;BAMUM LETTER PHASE-A LOMMAE;Lo;0;L;;;;;N;;;;; 16839;BAMUM LETTER PHASE-A FIRI;Lo;0;L;;;;;N;;;;; 1683A;BAMUM LETTER PHASE-A ROM;Lo;0;L;;;;;N;;;;; 1683B;BAMUM LETTER PHASE-A KPOQ;Lo;0;L;;;;;N;;;;; 1683C;BAMUM LETTER PHASE-A SOQ;Lo;0;L;;;;;N;;;;; 1683D;BAMUM LETTER PHASE-A MAP PIEET;Lo;0;L;;;;;N;;;;; 1683E;BAMUM LETTER PHASE-A SHIRAE;Lo;0;L;;;;;N;;;;; 1683F;BAMUM LETTER PHASE-A NTAP;Lo;0;L;;;;;N;;;;; 16840;BAMUM LETTER PHASE-A SHOQ NSHUT YUM;Lo;0;L;;;;;N;;;;; 16841;BAMUM LETTER PHASE-A NYIT MONGKEUAEQ;Lo;0;L;;;;;N;;;;; 16842;BAMUM LETTER PHASE-A PAARAE;Lo;0;L;;;;;N;;;;; 16843;BAMUM LETTER PHASE-A NKAARAE;Lo;0;L;;;;;N;;;;; 16844;BAMUM LETTER PHASE-A UNKNOWN;Lo;0;L;;;;;N;;;;; 16845;BAMUM LETTER PHASE-A NGGEN;Lo;0;L;;;;;N;;;;; 16846;BAMUM LETTER PHASE-A MAESI;Lo;0;L;;;;;N;;;;; 16847;BAMUM LETTER PHASE-A NJAM;Lo;0;L;;;;;N;;;;; 16848;BAMUM LETTER PHASE-A MBANYI;Lo;0;L;;;;;N;;;;; 16849;BAMUM LETTER PHASE-A NYET;Lo;0;L;;;;;N;;;;; 1684A;BAMUM LETTER PHASE-A TEUAEN;Lo;0;L;;;;;N;;;;; 1684B;BAMUM LETTER PHASE-A SOT;Lo;0;L;;;;;N;;;;; 1684C;BAMUM LETTER PHASE-A PAAM;Lo;0;L;;;;;N;;;;; 1684D;BAMUM LETTER PHASE-A NSHIEE;Lo;0;L;;;;;N;;;;; 1684E;BAMUM LETTER PHASE-A MAEM;Lo;0;L;;;;;N;;;;; 1684F;BAMUM LETTER PHASE-A NYI;Lo;0;L;;;;;N;;;;; 16850;BAMUM LETTER PHASE-A KAQ;Lo;0;L;;;;;N;;;;; 16851;BAMUM LETTER PHASE-A NSHA;Lo;0;L;;;;;N;;;;; 16852;BAMUM LETTER PHASE-A VEE;Lo;0;L;;;;;N;;;;; 16853;BAMUM LETTER PHASE-A LU;Lo;0;L;;;;;N;;;;; 16854;BAMUM LETTER PHASE-A NEN;Lo;0;L;;;;;N;;;;; 16855;BAMUM LETTER PHASE-A NAQ;Lo;0;L;;;;;N;;;;; 16856;BAMUM LETTER PHASE-A MBAQ;Lo;0;L;;;;;N;;;;; 16857;BAMUM LETTER PHASE-B NSHUET;Lo;0;L;;;;;N;;;;; 16858;BAMUM LETTER PHASE-B TU MAEMGBIEE;Lo;0;L;;;;;N;;;;; 16859;BAMUM LETTER PHASE-B SIEE;Lo;0;L;;;;;N;;;;; 1685A;BAMUM LETTER PHASE-B SET TU;Lo;0;L;;;;;N;;;;; 1685B;BAMUM LETTER PHASE-B LOM NTEUM;Lo;0;L;;;;;N;;;;; 1685C;BAMUM LETTER PHASE-B MBA MAELEE;Lo;0;L;;;;;N;;;;; 1685D;BAMUM LETTER PHASE-B KIEEM;Lo;0;L;;;;;N;;;;; 1685E;BAMUM LETTER PHASE-B YEURAE;Lo;0;L;;;;;N;;;;; 1685F;BAMUM LETTER PHASE-B MBAARAE;Lo;0;L;;;;;N;;;;; 16860;BAMUM LETTER PHASE-B KAM;Lo;0;L;;;;;N;;;;; 16861;BAMUM LETTER PHASE-B PEESHI;Lo;0;L;;;;;N;;;;; 16862;BAMUM LETTER PHASE-B YAFU LEERAEWA;Lo;0;L;;;;;N;;;;; 16863;BAMUM LETTER PHASE-B LAM NSHUT NYAM;Lo;0;L;;;;;N;;;;; 16864;BAMUM LETTER PHASE-B NTIEE SHEUOQ;Lo;0;L;;;;;N;;;;; 16865;BAMUM LETTER PHASE-B NDU NJAA;Lo;0;L;;;;;N;;;;; 16866;BAMUM LETTER PHASE-B GHEUGHEUAEM;Lo;0;L;;;;;N;;;;; 16867;BAMUM LETTER PHASE-B PIT;Lo;0;L;;;;;N;;;;; 16868;BAMUM LETTER PHASE-B TU NSIEE;Lo;0;L;;;;;N;;;;; 16869;BAMUM LETTER PHASE-B SHET NJAQ;Lo;0;L;;;;;N;;;;; 1686A;BAMUM LETTER PHASE-B SHEUAEQTU;Lo;0;L;;;;;N;;;;; 1686B;BAMUM LETTER PHASE-B MFON TEUAEQ;Lo;0;L;;;;;N;;;;; 1686C;BAMUM LETTER PHASE-B MBIT MBAAKET;Lo;0;L;;;;;N;;;;; 1686D;BAMUM LETTER PHASE-B NYI NTEUM;Lo;0;L;;;;;N;;;;; 1686E;BAMUM LETTER PHASE-B KEUPUQ;Lo;0;L;;;;;N;;;;; 1686F;BAMUM LETTER PHASE-B GHEUGHEN;Lo;0;L;;;;;N;;;;; 16870;BAMUM LETTER PHASE-B KEUYEUX;Lo;0;L;;;;;N;;;;; 16871;BAMUM LETTER PHASE-B LAANAE;Lo;0;L;;;;;N;;;;; 16872;BAMUM LETTER PHASE-B PARUM;Lo;0;L;;;;;N;;;;; 16873;BAMUM LETTER PHASE-B VEUM;Lo;0;L;;;;;N;;;;; 16874;BAMUM LETTER PHASE-B NGKINDI MVOP;Lo;0;L;;;;;N;;;;; 16875;BAMUM LETTER PHASE-B NGGEU MBU;Lo;0;L;;;;;N;;;;; 16876;BAMUM LETTER PHASE-B WUAET;Lo;0;L;;;;;N;;;;; 16877;BAMUM LETTER PHASE-B SAKEUAE;Lo;0;L;;;;;N;;;;; 16878;BAMUM LETTER PHASE-B TAAM;Lo;0;L;;;;;N;;;;; 16879;BAMUM LETTER PHASE-B MEUQ;Lo;0;L;;;;;N;;;;; 1687A;BAMUM LETTER PHASE-B NGGUOQ;Lo;0;L;;;;;N;;;;; 1687B;BAMUM LETTER PHASE-B NGGUOQ LARGE;Lo;0;L;;;;;N;;;;; 1687C;BAMUM LETTER PHASE-B MFIYAQ;Lo;0;L;;;;;N;;;;; 1687D;BAMUM LETTER PHASE-B SUE;Lo;0;L;;;;;N;;;;; 1687E;BAMUM LETTER PHASE-B MBEURI;Lo;0;L;;;;;N;;;;; 1687F;BAMUM LETTER PHASE-B MONTIEEN;Lo;0;L;;;;;N;;;;; 16880;BAMUM LETTER PHASE-B NYAEMAE;Lo;0;L;;;;;N;;;;; 16881;BAMUM LETTER PHASE-B PUNGAAM;Lo;0;L;;;;;N;;;;; 16882;BAMUM LETTER PHASE-B MEUT NGGEET;Lo;0;L;;;;;N;;;;; 16883;BAMUM LETTER PHASE-B FEUX;Lo;0;L;;;;;N;;;;; 16884;BAMUM LETTER PHASE-B MBUOQ;Lo;0;L;;;;;N;;;;; 16885;BAMUM LETTER PHASE-B FEE;Lo;0;L;;;;;N;;;;; 16886;BAMUM LETTER PHASE-B KEUAEM;Lo;0;L;;;;;N;;;;; 16887;BAMUM LETTER PHASE-B MA NJEUAENA;Lo;0;L;;;;;N;;;;; 16888;BAMUM LETTER PHASE-B MA NJUQA;Lo;0;L;;;;;N;;;;; 16889;BAMUM LETTER PHASE-B LET;Lo;0;L;;;;;N;;;;; 1688A;BAMUM LETTER PHASE-B NGGAAM;Lo;0;L;;;;;N;;;;; 1688B;BAMUM LETTER PHASE-B NSEN;Lo;0;L;;;;;N;;;;; 1688C;BAMUM LETTER PHASE-B MA;Lo;0;L;;;;;N;;;;; 1688D;BAMUM LETTER PHASE-B KIQ;Lo;0;L;;;;;N;;;;; 1688E;BAMUM LETTER PHASE-B NGOM;Lo;0;L;;;;;N;;;;; 1688F;BAMUM LETTER PHASE-C NGKUE MAEMBA;Lo;0;L;;;;;N;;;;; 16890;BAMUM LETTER PHASE-C NZA;Lo;0;L;;;;;N;;;;; 16891;BAMUM LETTER PHASE-C YUM;Lo;0;L;;;;;N;;;;; 16892;BAMUM LETTER PHASE-C WANGKUOQ;Lo;0;L;;;;;N;;;;; 16893;BAMUM LETTER PHASE-C NGGEN;Lo;0;L;;;;;N;;;;; 16894;BAMUM LETTER PHASE-C NDEUAEREE;Lo;0;L;;;;;N;;;;; 16895;BAMUM LETTER PHASE-C NGKAQ;Lo;0;L;;;;;N;;;;; 16896;BAMUM LETTER PHASE-C GHARAE;Lo;0;L;;;;;N;;;;; 16897;BAMUM LETTER PHASE-C MBEEKEET;Lo;0;L;;;;;N;;;;; 16898;BAMUM LETTER PHASE-C GBAYI;Lo;0;L;;;;;N;;;;; 16899;BAMUM LETTER PHASE-C NYIR MKPARAQ MEUN;Lo;0;L;;;;;N;;;;; 1689A;BAMUM LETTER PHASE-C NTU MBIT;Lo;0;L;;;;;N;;;;; 1689B;BAMUM LETTER PHASE-C MBEUM;Lo;0;L;;;;;N;;;;; 1689C;BAMUM LETTER PHASE-C PIRIEEN;Lo;0;L;;;;;N;;;;; 1689D;BAMUM LETTER PHASE-C NDOMBU;Lo;0;L;;;;;N;;;;; 1689E;BAMUM LETTER PHASE-C MBAA CABBAGE-TREE;Lo;0;L;;;;;N;;;;; 1689F;BAMUM LETTER PHASE-C KEUSHEUAEP;Lo;0;L;;;;;N;;;;; 168A0;BAMUM LETTER PHASE-C GHAP;Lo;0;L;;;;;N;;;;; 168A1;BAMUM LETTER PHASE-C KEUKAQ;Lo;0;L;;;;;N;;;;; 168A2;BAMUM LETTER PHASE-C YU MUOMAE;Lo;0;L;;;;;N;;;;; 168A3;BAMUM LETTER PHASE-C NZEUM;Lo;0;L;;;;;N;;;;; 168A4;BAMUM LETTER PHASE-C MBUE;Lo;0;L;;;;;N;;;;; 168A5;BAMUM LETTER PHASE-C NSEUAEN;Lo;0;L;;;;;N;;;;; 168A6;BAMUM LETTER PHASE-C MBIT;Lo;0;L;;;;;N;;;;; 168A7;BAMUM LETTER PHASE-C YEUQ;Lo;0;L;;;;;N;;;;; 168A8;BAMUM LETTER PHASE-C KPARAQ;Lo;0;L;;;;;N;;;;; 168A9;BAMUM LETTER PHASE-C KAA;Lo;0;L;;;;;N;;;;; 168AA;BAMUM LETTER PHASE-C SEUX;Lo;0;L;;;;;N;;;;; 168AB;BAMUM LETTER PHASE-C NDIDA;Lo;0;L;;;;;N;;;;; 168AC;BAMUM LETTER PHASE-C TAASHAE;Lo;0;L;;;;;N;;;;; 168AD;BAMUM LETTER PHASE-C NJUEQ;Lo;0;L;;;;;N;;;;; 168AE;BAMUM LETTER PHASE-C TITA YUE;Lo;0;L;;;;;N;;;;; 168AF;BAMUM LETTER PHASE-C SUAET;Lo;0;L;;;;;N;;;;; 168B0;BAMUM LETTER PHASE-C NGGUAEN NYAM;Lo;0;L;;;;;N;;;;; 168B1;BAMUM LETTER PHASE-C VEUX;Lo;0;L;;;;;N;;;;; 168B2;BAMUM LETTER PHASE-C NANSANAQ;Lo;0;L;;;;;N;;;;; 168B3;BAMUM LETTER PHASE-C MA KEUAERI;Lo;0;L;;;;;N;;;;; 168B4;BAMUM LETTER PHASE-C NTAA;Lo;0;L;;;;;N;;;;; 168B5;BAMUM LETTER PHASE-C NGGUON;Lo;0;L;;;;;N;;;;; 168B6;BAMUM LETTER PHASE-C LAP;Lo;0;L;;;;;N;;;;; 168B7;BAMUM LETTER PHASE-C MBIRIEEN;Lo;0;L;;;;;N;;;;; 168B8;BAMUM LETTER PHASE-C MGBASAQ;Lo;0;L;;;;;N;;;;; 168B9;BAMUM LETTER PHASE-C NTEUNGBA;Lo;0;L;;;;;N;;;;; 168BA;BAMUM LETTER PHASE-C TEUTEUX;Lo;0;L;;;;;N;;;;; 168BB;BAMUM LETTER PHASE-C NGGUM;Lo;0;L;;;;;N;;;;; 168BC;BAMUM LETTER PHASE-C FUE;Lo;0;L;;;;;N;;;;; 168BD;BAMUM LETTER PHASE-C NDEUT;Lo;0;L;;;;;N;;;;; 168BE;BAMUM LETTER PHASE-C NSA;Lo;0;L;;;;;N;;;;; 168BF;BAMUM LETTER PHASE-C NSHAQ;Lo;0;L;;;;;N;;;;; 168C0;BAMUM LETTER PHASE-C BUNG;Lo;0;L;;;;;N;;;;; 168C1;BAMUM LETTER PHASE-C VEUAEPEN;Lo;0;L;;;;;N;;;;; 168C2;BAMUM LETTER PHASE-C MBERAE;Lo;0;L;;;;;N;;;;; 168C3;BAMUM LETTER PHASE-C RU;Lo;0;L;;;;;N;;;;; 168C4;BAMUM LETTER PHASE-C NJAEM;Lo;0;L;;;;;N;;;;; 168C5;BAMUM LETTER PHASE-C LAM;Lo;0;L;;;;;N;;;;; 168C6;BAMUM LETTER PHASE-C TITUAEP;Lo;0;L;;;;;N;;;;; 168C7;BAMUM LETTER PHASE-C NSUOT NGOM;Lo;0;L;;;;;N;;;;; 168C8;BAMUM LETTER PHASE-C NJEEEE;Lo;0;L;;;;;N;;;;; 168C9;BAMUM LETTER PHASE-C KET;Lo;0;L;;;;;N;;;;; 168CA;BAMUM LETTER PHASE-C NGGU;Lo;0;L;;;;;N;;;;; 168CB;BAMUM LETTER PHASE-C MAESI;Lo;0;L;;;;;N;;;;; 168CC;BAMUM LETTER PHASE-C MBUAEM;Lo;0;L;;;;;N;;;;; 168CD;BAMUM LETTER PHASE-C LU;Lo;0;L;;;;;N;;;;; 168CE;BAMUM LETTER PHASE-C KUT;Lo;0;L;;;;;N;;;;; 168CF;BAMUM LETTER PHASE-C NJAM;Lo;0;L;;;;;N;;;;; 168D0;BAMUM LETTER PHASE-C NGOM;Lo;0;L;;;;;N;;;;; 168D1;BAMUM LETTER PHASE-C WUP;Lo;0;L;;;;;N;;;;; 168D2;BAMUM LETTER PHASE-C NGGUEET;Lo;0;L;;;;;N;;;;; 168D3;BAMUM LETTER PHASE-C NSOM;Lo;0;L;;;;;N;;;;; 168D4;BAMUM LETTER PHASE-C NTEN;Lo;0;L;;;;;N;;;;; 168D5;BAMUM LETTER PHASE-C KUOP NKAARAE;Lo;0;L;;;;;N;;;;; 168D6;BAMUM LETTER PHASE-C NSUN;Lo;0;L;;;;;N;;;;; 168D7;BAMUM LETTER PHASE-C NDAM;Lo;0;L;;;;;N;;;;; 168D8;BAMUM LETTER PHASE-C MA NSIEE;Lo;0;L;;;;;N;;;;; 168D9;BAMUM LETTER PHASE-C YAA;Lo;0;L;;;;;N;;;;; 168DA;BAMUM LETTER PHASE-C NDAP;Lo;0;L;;;;;N;;;;; 168DB;BAMUM LETTER PHASE-C SHUEQ;Lo;0;L;;;;;N;;;;; 168DC;BAMUM LETTER PHASE-C SETFON;Lo;0;L;;;;;N;;;;; 168DD;BAMUM LETTER PHASE-C MBI;Lo;0;L;;;;;N;;;;; 168DE;BAMUM LETTER PHASE-C MAEMBA;Lo;0;L;;;;;N;;;;; 168DF;BAMUM LETTER PHASE-C MBANYI;Lo;0;L;;;;;N;;;;; 168E0;BAMUM LETTER PHASE-C KEUSEUX;Lo;0;L;;;;;N;;;;; 168E1;BAMUM LETTER PHASE-C MBEUX;Lo;0;L;;;;;N;;;;; 168E2;BAMUM LETTER PHASE-C KEUM;Lo;0;L;;;;;N;;;;; 168E3;BAMUM LETTER PHASE-C MBAA PICKET;Lo;0;L;;;;;N;;;;; 168E4;BAMUM LETTER PHASE-C YUWOQ;Lo;0;L;;;;;N;;;;; 168E5;BAMUM LETTER PHASE-C NJEUX;Lo;0;L;;;;;N;;;;; 168E6;BAMUM LETTER PHASE-C MIEE;Lo;0;L;;;;;N;;;;; 168E7;BAMUM LETTER PHASE-C MUAE;Lo;0;L;;;;;N;;;;; 168E8;BAMUM LETTER PHASE-C SHIQ;Lo;0;L;;;;;N;;;;; 168E9;BAMUM LETTER PHASE-C KEN LAW;Lo;0;L;;;;;N;;;;; 168EA;BAMUM LETTER PHASE-C KEN FATIGUE;Lo;0;L;;;;;N;;;;; 168EB;BAMUM LETTER PHASE-C NGAQ;Lo;0;L;;;;;N;;;;; 168EC;BAMUM LETTER PHASE-C NAQ;Lo;0;L;;;;;N;;;;; 168ED;BAMUM LETTER PHASE-C LIQ;Lo;0;L;;;;;N;;;;; 168EE;BAMUM LETTER PHASE-C PIN;Lo;0;L;;;;;N;;;;; 168EF;BAMUM LETTER PHASE-C PEN;Lo;0;L;;;;;N;;;;; 168F0;BAMUM LETTER PHASE-C TET;Lo;0;L;;;;;N;;;;; 168F1;BAMUM LETTER PHASE-D MBUO;Lo;0;L;;;;;N;;;;; 168F2;BAMUM LETTER PHASE-D WAP;Lo;0;L;;;;;N;;;;; 168F3;BAMUM LETTER PHASE-D NJI;Lo;0;L;;;;;N;;;;; 168F4;BAMUM LETTER PHASE-D MFON;Lo;0;L;;;;;N;;;;; 168F5;BAMUM LETTER PHASE-D NJIEE;Lo;0;L;;;;;N;;;;; 168F6;BAMUM LETTER PHASE-D LIEE;Lo;0;L;;;;;N;;;;; 168F7;BAMUM LETTER PHASE-D NJEUT;Lo;0;L;;;;;N;;;;; 168F8;BAMUM LETTER PHASE-D NSHEE;Lo;0;L;;;;;N;;;;; 168F9;BAMUM LETTER PHASE-D NGGAAMAE;Lo;0;L;;;;;N;;;;; 168FA;BAMUM LETTER PHASE-D NYAM;Lo;0;L;;;;;N;;;;; 168FB;BAMUM LETTER PHASE-D WUAEN;Lo;0;L;;;;;N;;;;; 168FC;BAMUM LETTER PHASE-D NGKUN;Lo;0;L;;;;;N;;;;; 168FD;BAMUM LETTER PHASE-D SHEE;Lo;0;L;;;;;N;;;;; 168FE;BAMUM LETTER PHASE-D NGKAP;Lo;0;L;;;;;N;;;;; 168FF;BAMUM LETTER PHASE-D KEUAETMEUN;Lo;0;L;;;;;N;;;;; 16900;BAMUM LETTER PHASE-D TEUT;Lo;0;L;;;;;N;;;;; 16901;BAMUM LETTER PHASE-D SHEUAE;Lo;0;L;;;;;N;;;;; 16902;BAMUM LETTER PHASE-D NJAP;Lo;0;L;;;;;N;;;;; 16903;BAMUM LETTER PHASE-D SUE;Lo;0;L;;;;;N;;;;; 16904;BAMUM LETTER PHASE-D KET;Lo;0;L;;;;;N;;;;; 16905;BAMUM LETTER PHASE-D YAEMMAE;Lo;0;L;;;;;N;;;;; 16906;BAMUM LETTER PHASE-D KUOM;Lo;0;L;;;;;N;;;;; 16907;BAMUM LETTER PHASE-D SAP;Lo;0;L;;;;;N;;;;; 16908;BAMUM LETTER PHASE-D MFEUT;Lo;0;L;;;;;N;;;;; 16909;BAMUM LETTER PHASE-D NDEUX;Lo;0;L;;;;;N;;;;; 1690A;BAMUM LETTER PHASE-D MALEERI;Lo;0;L;;;;;N;;;;; 1690B;BAMUM LETTER PHASE-D MEUT;Lo;0;L;;;;;N;;;;; 1690C;BAMUM LETTER PHASE-D SEUAEQ;Lo;0;L;;;;;N;;;;; 1690D;BAMUM LETTER PHASE-D YEN;Lo;0;L;;;;;N;;;;; 1690E;BAMUM LETTER PHASE-D NJEUAEM;Lo;0;L;;;;;N;;;;; 1690F;BAMUM LETTER PHASE-D KEUOT MBUAE;Lo;0;L;;;;;N;;;;; 16910;BAMUM LETTER PHASE-D NGKEURI;Lo;0;L;;;;;N;;;;; 16911;BAMUM LETTER PHASE-D TU;Lo;0;L;;;;;N;;;;; 16912;BAMUM LETTER PHASE-D GHAA;Lo;0;L;;;;;N;;;;; 16913;BAMUM LETTER PHASE-D NGKYEE;Lo;0;L;;;;;N;;;;; 16914;BAMUM LETTER PHASE-D FEUFEUAET;Lo;0;L;;;;;N;;;;; 16915;BAMUM LETTER PHASE-D NDEE;Lo;0;L;;;;;N;;;;; 16916;BAMUM LETTER PHASE-D MGBOFUM;Lo;0;L;;;;;N;;;;; 16917;BAMUM LETTER PHASE-D LEUAEP;Lo;0;L;;;;;N;;;;; 16918;BAMUM LETTER PHASE-D NDON;Lo;0;L;;;;;N;;;;; 16919;BAMUM LETTER PHASE-D MONI;Lo;0;L;;;;;N;;;;; 1691A;BAMUM LETTER PHASE-D MGBEUN;Lo;0;L;;;;;N;;;;; 1691B;BAMUM LETTER PHASE-D PUUT;Lo;0;L;;;;;N;;;;; 1691C;BAMUM LETTER PHASE-D MGBIEE;Lo;0;L;;;;;N;;;;; 1691D;BAMUM LETTER PHASE-D MFO;Lo;0;L;;;;;N;;;;; 1691E;BAMUM LETTER PHASE-D LUM;Lo;0;L;;;;;N;;;;; 1691F;BAMUM LETTER PHASE-D NSIEEP;Lo;0;L;;;;;N;;;;; 16920;BAMUM LETTER PHASE-D MBAA;Lo;0;L;;;;;N;;;;; 16921;BAMUM LETTER PHASE-D KWAET;Lo;0;L;;;;;N;;;;; 16922;BAMUM LETTER PHASE-D NYET;Lo;0;L;;;;;N;;;;; 16923;BAMUM LETTER PHASE-D TEUAEN;Lo;0;L;;;;;N;;;;; 16924;BAMUM LETTER PHASE-D SOT;Lo;0;L;;;;;N;;;;; 16925;BAMUM LETTER PHASE-D YUWOQ;Lo;0;L;;;;;N;;;;; 16926;BAMUM LETTER PHASE-D KEUM;Lo;0;L;;;;;N;;;;; 16927;BAMUM LETTER PHASE-D RAEM;Lo;0;L;;;;;N;;;;; 16928;BAMUM LETTER PHASE-D TEEEE;Lo;0;L;;;;;N;;;;; 16929;BAMUM LETTER PHASE-D NGKEUAEQ;Lo;0;L;;;;;N;;;;; 1692A;BAMUM LETTER PHASE-D MFEUAE;Lo;0;L;;;;;N;;;;; 1692B;BAMUM LETTER PHASE-D NSIEET;Lo;0;L;;;;;N;;;;; 1692C;BAMUM LETTER PHASE-D KEUP;Lo;0;L;;;;;N;;;;; 1692D;BAMUM LETTER PHASE-D PIP;Lo;0;L;;;;;N;;;;; 1692E;BAMUM LETTER PHASE-D PEUTAE;Lo;0;L;;;;;N;;;;; 1692F;BAMUM LETTER PHASE-D NYUE;Lo;0;L;;;;;N;;;;; 16930;BAMUM LETTER PHASE-D LET;Lo;0;L;;;;;N;;;;; 16931;BAMUM LETTER PHASE-D NGGAAM;Lo;0;L;;;;;N;;;;; 16932;BAMUM LETTER PHASE-D MFIEE;Lo;0;L;;;;;N;;;;; 16933;BAMUM LETTER PHASE-D NGGWAEN;Lo;0;L;;;;;N;;;;; 16934;BAMUM LETTER PHASE-D YUOM;Lo;0;L;;;;;N;;;;; 16935;BAMUM LETTER PHASE-D PAP;Lo;0;L;;;;;N;;;;; 16936;BAMUM LETTER PHASE-D YUOP;Lo;0;L;;;;;N;;;;; 16937;BAMUM LETTER PHASE-D NDAM;Lo;0;L;;;;;N;;;;; 16938;BAMUM LETTER PHASE-D NTEUM;Lo;0;L;;;;;N;;;;; 16939;BAMUM LETTER PHASE-D SUAE;Lo;0;L;;;;;N;;;;; 1693A;BAMUM LETTER PHASE-D KUN;Lo;0;L;;;;;N;;;;; 1693B;BAMUM LETTER PHASE-D NGGEUX;Lo;0;L;;;;;N;;;;; 1693C;BAMUM LETTER PHASE-D NGKIEE;Lo;0;L;;;;;N;;;;; 1693D;BAMUM LETTER PHASE-D TUOT;Lo;0;L;;;;;N;;;;; 1693E;BAMUM LETTER PHASE-D MEUN;Lo;0;L;;;;;N;;;;; 1693F;BAMUM LETTER PHASE-D KUQ;Lo;0;L;;;;;N;;;;; 16940;BAMUM LETTER PHASE-D NSUM;Lo;0;L;;;;;N;;;;; 16941;BAMUM LETTER PHASE-D TEUN;Lo;0;L;;;;;N;;;;; 16942;BAMUM LETTER PHASE-D MAENJET;Lo;0;L;;;;;N;;;;; 16943;BAMUM LETTER PHASE-D NGGAP;Lo;0;L;;;;;N;;;;; 16944;BAMUM LETTER PHASE-D LEUM;Lo;0;L;;;;;N;;;;; 16945;BAMUM LETTER PHASE-D NGGUOM;Lo;0;L;;;;;N;;;;; 16946;BAMUM LETTER PHASE-D NSHUT;Lo;0;L;;;;;N;;;;; 16947;BAMUM LETTER PHASE-D NJUEQ;Lo;0;L;;;;;N;;;;; 16948;BAMUM LETTER PHASE-D GHEUAE;Lo;0;L;;;;;N;;;;; 16949;BAMUM LETTER PHASE-D KU;Lo;0;L;;;;;N;;;;; 1694A;BAMUM LETTER PHASE-D REN OLD;Lo;0;L;;;;;N;;;;; 1694B;BAMUM LETTER PHASE-D TAE;Lo;0;L;;;;;N;;;;; 1694C;BAMUM LETTER PHASE-D TOQ;Lo;0;L;;;;;N;;;;; 1694D;BAMUM LETTER PHASE-D NYI;Lo;0;L;;;;;N;;;;; 1694E;BAMUM LETTER PHASE-D RII;Lo;0;L;;;;;N;;;;; 1694F;BAMUM LETTER PHASE-D LEEEE;Lo;0;L;;;;;N;;;;; 16950;BAMUM LETTER PHASE-D MEEEE;Lo;0;L;;;;;N;;;;; 16951;BAMUM LETTER PHASE-D M;Lo;0;L;;;;;N;;;;; 16952;BAMUM LETTER PHASE-D SUU;Lo;0;L;;;;;N;;;;; 16953;BAMUM LETTER PHASE-D MU;Lo;0;L;;;;;N;;;;; 16954;BAMUM LETTER PHASE-D SHII;Lo;0;L;;;;;N;;;;; 16955;BAMUM LETTER PHASE-D SHEUX;Lo;0;L;;;;;N;;;;; 16956;BAMUM LETTER PHASE-D KYEE;Lo;0;L;;;;;N;;;;; 16957;BAMUM LETTER PHASE-D NU;Lo;0;L;;;;;N;;;;; 16958;BAMUM LETTER PHASE-D SHU;Lo;0;L;;;;;N;;;;; 16959;BAMUM LETTER PHASE-D NTEE;Lo;0;L;;;;;N;;;;; 1695A;BAMUM LETTER PHASE-D PEE;Lo;0;L;;;;;N;;;;; 1695B;BAMUM LETTER PHASE-D NI;Lo;0;L;;;;;N;;;;; 1695C;BAMUM LETTER PHASE-D SHOQ;Lo;0;L;;;;;N;;;;; 1695D;BAMUM LETTER PHASE-D PUQ;Lo;0;L;;;;;N;;;;; 1695E;BAMUM LETTER PHASE-D MVOP;Lo;0;L;;;;;N;;;;; 1695F;BAMUM LETTER PHASE-D LOQ;Lo;0;L;;;;;N;;;;; 16960;BAMUM LETTER PHASE-D REN MUCH;Lo;0;L;;;;;N;;;;; 16961;BAMUM LETTER PHASE-D TI;Lo;0;L;;;;;N;;;;; 16962;BAMUM LETTER PHASE-D NTUU;Lo;0;L;;;;;N;;;;; 16963;BAMUM LETTER PHASE-D MBAA SEVEN;Lo;0;L;;;;;N;;;;; 16964;BAMUM LETTER PHASE-D SAQ;Lo;0;L;;;;;N;;;;; 16965;BAMUM LETTER PHASE-D FAA;Lo;0;L;;;;;N;;;;; 16966;BAMUM LETTER PHASE-E NDAP;Lo;0;L;;;;;N;;;;; 16967;BAMUM LETTER PHASE-E TOON;Lo;0;L;;;;;N;;;;; 16968;BAMUM LETTER PHASE-E MBEUM;Lo;0;L;;;;;N;;;;; 16969;BAMUM LETTER PHASE-E LAP;Lo;0;L;;;;;N;;;;; 1696A;BAMUM LETTER PHASE-E VOM;Lo;0;L;;;;;N;;;;; 1696B;BAMUM LETTER PHASE-E LOON;Lo;0;L;;;;;N;;;;; 1696C;BAMUM LETTER PHASE-E PAA;Lo;0;L;;;;;N;;;;; 1696D;BAMUM LETTER PHASE-E SOM;Lo;0;L;;;;;N;;;;; 1696E;BAMUM LETTER PHASE-E RAQ;Lo;0;L;;;;;N;;;;; 1696F;BAMUM LETTER PHASE-E NSHUOP;Lo;0;L;;;;;N;;;;; 16970;BAMUM LETTER PHASE-E NDUN;Lo;0;L;;;;;N;;;;; 16971;BAMUM LETTER PHASE-E PUAE;Lo;0;L;;;;;N;;;;; 16972;BAMUM LETTER PHASE-E TAM;Lo;0;L;;;;;N;;;;; 16973;BAMUM LETTER PHASE-E NGKA;Lo;0;L;;;;;N;;;;; 16974;BAMUM LETTER PHASE-E KPEUX;Lo;0;L;;;;;N;;;;; 16975;BAMUM LETTER PHASE-E WUO;Lo;0;L;;;;;N;;;;; 16976;BAMUM LETTER PHASE-E SEE;Lo;0;L;;;;;N;;;;; 16977;BAMUM LETTER PHASE-E NGGEUAET;Lo;0;L;;;;;N;;;;; 16978;BAMUM LETTER PHASE-E PAAM;Lo;0;L;;;;;N;;;;; 16979;BAMUM LETTER PHASE-E TOO;Lo;0;L;;;;;N;;;;; 1697A;BAMUM LETTER PHASE-E KUOP;Lo;0;L;;;;;N;;;;; 1697B;BAMUM LETTER PHASE-E LOM;Lo;0;L;;;;;N;;;;; 1697C;BAMUM LETTER PHASE-E NSHIEE;Lo;0;L;;;;;N;;;;; 1697D;BAMUM LETTER PHASE-E NGOP;Lo;0;L;;;;;N;;;;; 1697E;BAMUM LETTER PHASE-E MAEM;Lo;0;L;;;;;N;;;;; 1697F;BAMUM LETTER PHASE-E NGKEUX;Lo;0;L;;;;;N;;;;; 16980;BAMUM LETTER PHASE-E NGOQ;Lo;0;L;;;;;N;;;;; 16981;BAMUM LETTER PHASE-E NSHUE;Lo;0;L;;;;;N;;;;; 16982;BAMUM LETTER PHASE-E RIMGBA;Lo;0;L;;;;;N;;;;; 16983;BAMUM LETTER PHASE-E NJEUX;Lo;0;L;;;;;N;;;;; 16984;BAMUM LETTER PHASE-E PEEM;Lo;0;L;;;;;N;;;;; 16985;BAMUM LETTER PHASE-E SAA;Lo;0;L;;;;;N;;;;; 16986;BAMUM LETTER PHASE-E NGGURAE;Lo;0;L;;;;;N;;;;; 16987;BAMUM LETTER PHASE-E MGBA;Lo;0;L;;;;;N;;;;; 16988;BAMUM LETTER PHASE-E GHEUX;Lo;0;L;;;;;N;;;;; 16989;BAMUM LETTER PHASE-E NGKEUAEM;Lo;0;L;;;;;N;;;;; 1698A;BAMUM LETTER PHASE-E NJAEMLI;Lo;0;L;;;;;N;;;;; 1698B;BAMUM LETTER PHASE-E MAP;Lo;0;L;;;;;N;;;;; 1698C;BAMUM LETTER PHASE-E LOOT;Lo;0;L;;;;;N;;;;; 1698D;BAMUM LETTER PHASE-E NGGEEEE;Lo;0;L;;;;;N;;;;; 1698E;BAMUM LETTER PHASE-E NDIQ;Lo;0;L;;;;;N;;;;; 1698F;BAMUM LETTER PHASE-E TAEN NTEUM;Lo;0;L;;;;;N;;;;; 16990;BAMUM LETTER PHASE-E SET;Lo;0;L;;;;;N;;;;; 16991;BAMUM LETTER PHASE-E PUM;Lo;0;L;;;;;N;;;;; 16992;BAMUM LETTER PHASE-E NDAA SOFTNESS;Lo;0;L;;;;;N;;;;; 16993;BAMUM LETTER PHASE-E NGGUAESHAE NYAM;Lo;0;L;;;;;N;;;;; 16994;BAMUM LETTER PHASE-E YIEE;Lo;0;L;;;;;N;;;;; 16995;BAMUM LETTER PHASE-E GHEUN;Lo;0;L;;;;;N;;;;; 16996;BAMUM LETTER PHASE-E TUAE;Lo;0;L;;;;;N;;;;; 16997;BAMUM LETTER PHASE-E YEUAE;Lo;0;L;;;;;N;;;;; 16998;BAMUM LETTER PHASE-E PO;Lo;0;L;;;;;N;;;;; 16999;BAMUM LETTER PHASE-E TUMAE;Lo;0;L;;;;;N;;;;; 1699A;BAMUM LETTER PHASE-E KEUAE;Lo;0;L;;;;;N;;;;; 1699B;BAMUM LETTER PHASE-E SUAEN;Lo;0;L;;;;;N;;;;; 1699C;BAMUM LETTER PHASE-E TEUAEQ;Lo;0;L;;;;;N;;;;; 1699D;BAMUM LETTER PHASE-E VEUAE;Lo;0;L;;;;;N;;;;; 1699E;BAMUM LETTER PHASE-E WEUX;Lo;0;L;;;;;N;;;;; 1699F;BAMUM LETTER PHASE-E LAAM;Lo;0;L;;;;;N;;;;; 169A0;BAMUM LETTER PHASE-E PU;Lo;0;L;;;;;N;;;;; 169A1;BAMUM LETTER PHASE-E TAAQ;Lo;0;L;;;;;N;;;;; 169A2;BAMUM LETTER PHASE-E GHAAMAE;Lo;0;L;;;;;N;;;;; 169A3;BAMUM LETTER PHASE-E NGEUREUT;Lo;0;L;;;;;N;;;;; 169A4;BAMUM LETTER PHASE-E SHEUAEQ;Lo;0;L;;;;;N;;;;; 169A5;BAMUM LETTER PHASE-E MGBEN;Lo;0;L;;;;;N;;;;; 169A6;BAMUM LETTER PHASE-E MBEE;Lo;0;L;;;;;N;;;;; 169A7;BAMUM LETTER PHASE-E NZAQ;Lo;0;L;;;;;N;;;;; 169A8;BAMUM LETTER PHASE-E NKOM;Lo;0;L;;;;;N;;;;; 169A9;BAMUM LETTER PHASE-E GBET;Lo;0;L;;;;;N;;;;; 169AA;BAMUM LETTER PHASE-E TUM;Lo;0;L;;;;;N;;;;; 169AB;BAMUM LETTER PHASE-E KUET;Lo;0;L;;;;;N;;;;; 169AC;BAMUM LETTER PHASE-E YAP;Lo;0;L;;;;;N;;;;; 169AD;BAMUM LETTER PHASE-E NYI CLEAVER;Lo;0;L;;;;;N;;;;; 169AE;BAMUM LETTER PHASE-E YIT;Lo;0;L;;;;;N;;;;; 169AF;BAMUM LETTER PHASE-E MFEUQ;Lo;0;L;;;;;N;;;;; 169B0;BAMUM LETTER PHASE-E NDIAQ;Lo;0;L;;;;;N;;;;; 169B1;BAMUM LETTER PHASE-E PIEEQ;Lo;0;L;;;;;N;;;;; 169B2;BAMUM LETTER PHASE-E YUEQ;Lo;0;L;;;;;N;;;;; 169B3;BAMUM LETTER PHASE-E LEUAEM;Lo;0;L;;;;;N;;;;; 169B4;BAMUM LETTER PHASE-E FUE;Lo;0;L;;;;;N;;;;; 169B5;BAMUM LETTER PHASE-E GBEUX;Lo;0;L;;;;;N;;;;; 169B6;BAMUM LETTER PHASE-E NGKUP;Lo;0;L;;;;;N;;;;; 169B7;BAMUM LETTER PHASE-E KET;Lo;0;L;;;;;N;;;;; 169B8;BAMUM LETTER PHASE-E MAE;Lo;0;L;;;;;N;;;;; 169B9;BAMUM LETTER PHASE-E NGKAAMI;Lo;0;L;;;;;N;;;;; 169BA;BAMUM LETTER PHASE-E GHET;Lo;0;L;;;;;N;;;;; 169BB;BAMUM LETTER PHASE-E FA;Lo;0;L;;;;;N;;;;; 169BC;BAMUM LETTER PHASE-E NTUM;Lo;0;L;;;;;N;;;;; 169BD;BAMUM LETTER PHASE-E PEUT;Lo;0;L;;;;;N;;;;; 169BE;BAMUM LETTER PHASE-E YEUM;Lo;0;L;;;;;N;;;;; 169BF;BAMUM LETTER PHASE-E NGGEUAE;Lo;0;L;;;;;N;;;;; 169C0;BAMUM LETTER PHASE-E NYI BETWEEN;Lo;0;L;;;;;N;;;;; 169C1;BAMUM LETTER PHASE-E NZUQ;Lo;0;L;;;;;N;;;;; 169C2;BAMUM LETTER PHASE-E POON;Lo;0;L;;;;;N;;;;; 169C3;BAMUM LETTER PHASE-E MIEE;Lo;0;L;;;;;N;;;;; 169C4;BAMUM LETTER PHASE-E FUET;Lo;0;L;;;;;N;;;;; 169C5;BAMUM LETTER PHASE-E NAE;Lo;0;L;;;;;N;;;;; 169C6;BAMUM LETTER PHASE-E MUAE;Lo;0;L;;;;;N;;;;; 169C7;BAMUM LETTER PHASE-E GHEUAE;Lo;0;L;;;;;N;;;;; 169C8;BAMUM LETTER PHASE-E FU I;Lo;0;L;;;;;N;;;;; 169C9;BAMUM LETTER PHASE-E MVI;Lo;0;L;;;;;N;;;;; 169CA;BAMUM LETTER PHASE-E PUAQ;Lo;0;L;;;;;N;;;;; 169CB;BAMUM LETTER PHASE-E NGKUM;Lo;0;L;;;;;N;;;;; 169CC;BAMUM LETTER PHASE-E KUT;Lo;0;L;;;;;N;;;;; 169CD;BAMUM LETTER PHASE-E PIET;Lo;0;L;;;;;N;;;;; 169CE;BAMUM LETTER PHASE-E NTAP;Lo;0;L;;;;;N;;;;; 169CF;BAMUM LETTER PHASE-E YEUAET;Lo;0;L;;;;;N;;;;; 169D0;BAMUM LETTER PHASE-E NGGUP;Lo;0;L;;;;;N;;;;; 169D1;BAMUM LETTER PHASE-E PA PEOPLE;Lo;0;L;;;;;N;;;;; 169D2;BAMUM LETTER PHASE-E FU CALL;Lo;0;L;;;;;N;;;;; 169D3;BAMUM LETTER PHASE-E FOM;Lo;0;L;;;;;N;;;;; 169D4;BAMUM LETTER PHASE-E NJEE;Lo;0;L;;;;;N;;;;; 169D5;BAMUM LETTER PHASE-E A;Lo;0;L;;;;;N;;;;; 169D6;BAMUM LETTER PHASE-E TOQ;Lo;0;L;;;;;N;;;;; 169D7;BAMUM LETTER PHASE-E O;Lo;0;L;;;;;N;;;;; 169D8;BAMUM LETTER PHASE-E I;Lo;0;L;;;;;N;;;;; 169D9;BAMUM LETTER PHASE-E LAQ;Lo;0;L;;;;;N;;;;; 169DA;BAMUM LETTER PHASE-E PA PLURAL;Lo;0;L;;;;;N;;;;; 169DB;BAMUM LETTER PHASE-E TAA;Lo;0;L;;;;;N;;;;; 169DC;BAMUM LETTER PHASE-E TAQ;Lo;0;L;;;;;N;;;;; 169DD;BAMUM LETTER PHASE-E NDAA MY HOUSE;Lo;0;L;;;;;N;;;;; 169DE;BAMUM LETTER PHASE-E SHIQ;Lo;0;L;;;;;N;;;;; 169DF;BAMUM LETTER PHASE-E YEUX;Lo;0;L;;;;;N;;;;; 169E0;BAMUM LETTER PHASE-E NGUAE;Lo;0;L;;;;;N;;;;; 169E1;BAMUM LETTER PHASE-E YUAEN;Lo;0;L;;;;;N;;;;; 169E2;BAMUM LETTER PHASE-E YOQ SWIMMING;Lo;0;L;;;;;N;;;;; 169E3;BAMUM LETTER PHASE-E YOQ COVER;Lo;0;L;;;;;N;;;;; 169E4;BAMUM LETTER PHASE-E YUQ;Lo;0;L;;;;;N;;;;; 169E5;BAMUM LETTER PHASE-E YUN;Lo;0;L;;;;;N;;;;; 169E6;BAMUM LETTER PHASE-E KEUX;Lo;0;L;;;;;N;;;;; 169E7;BAMUM LETTER PHASE-E PEUX;Lo;0;L;;;;;N;;;;; 169E8;BAMUM LETTER PHASE-E NJEE EPOCH;Lo;0;L;;;;;N;;;;; 169E9;BAMUM LETTER PHASE-E PUE;Lo;0;L;;;;;N;;;;; 169EA;BAMUM LETTER PHASE-E WUE;Lo;0;L;;;;;N;;;;; 169EB;BAMUM LETTER PHASE-E FEE;Lo;0;L;;;;;N;;;;; 169EC;BAMUM LETTER PHASE-E VEE;Lo;0;L;;;;;N;;;;; 169ED;BAMUM LETTER PHASE-E LU;Lo;0;L;;;;;N;;;;; 169EE;BAMUM LETTER PHASE-E MI;Lo;0;L;;;;;N;;;;; 169EF;BAMUM LETTER PHASE-E REUX;Lo;0;L;;;;;N;;;;; 169F0;BAMUM LETTER PHASE-E RAE;Lo;0;L;;;;;N;;;;; 169F1;BAMUM LETTER PHASE-E NGUAET;Lo;0;L;;;;;N;;;;; 169F2;BAMUM LETTER PHASE-E NGA;Lo;0;L;;;;;N;;;;; 169F3;BAMUM LETTER PHASE-E SHO;Lo;0;L;;;;;N;;;;; 169F4;BAMUM LETTER PHASE-E SHOQ;Lo;0;L;;;;;N;;;;; 169F5;BAMUM LETTER PHASE-E FU REMEDY;Lo;0;L;;;;;N;;;;; 169F6;BAMUM LETTER PHASE-E NA;Lo;0;L;;;;;N;;;;; 169F7;BAMUM LETTER PHASE-E PI;Lo;0;L;;;;;N;;;;; 169F8;BAMUM LETTER PHASE-E LOQ;Lo;0;L;;;;;N;;;;; 169F9;BAMUM LETTER PHASE-E KO;Lo;0;L;;;;;N;;;;; 169FA;BAMUM LETTER PHASE-E MEN;Lo;0;L;;;;;N;;;;; 169FB;BAMUM LETTER PHASE-E MA;Lo;0;L;;;;;N;;;;; 169FC;BAMUM LETTER PHASE-E MAQ;Lo;0;L;;;;;N;;;;; 169FD;BAMUM LETTER PHASE-E TEU;Lo;0;L;;;;;N;;;;; 169FE;BAMUM LETTER PHASE-E KI;Lo;0;L;;;;;N;;;;; 169FF;BAMUM LETTER PHASE-E MON;Lo;0;L;;;;;N;;;;; 16A00;BAMUM LETTER PHASE-E TEN;Lo;0;L;;;;;N;;;;; 16A01;BAMUM LETTER PHASE-E FAQ;Lo;0;L;;;;;N;;;;; 16A02;BAMUM LETTER PHASE-E GHOM;Lo;0;L;;;;;N;;;;; 16A03;BAMUM LETTER PHASE-F KA;Lo;0;L;;;;;N;;;;; 16A04;BAMUM LETTER PHASE-F U;Lo;0;L;;;;;N;;;;; 16A05;BAMUM LETTER PHASE-F KU;Lo;0;L;;;;;N;;;;; 16A06;BAMUM LETTER PHASE-F EE;Lo;0;L;;;;;N;;;;; 16A07;BAMUM LETTER PHASE-F REE;Lo;0;L;;;;;N;;;;; 16A08;BAMUM LETTER PHASE-F TAE;Lo;0;L;;;;;N;;;;; 16A09;BAMUM LETTER PHASE-F NYI;Lo;0;L;;;;;N;;;;; 16A0A;BAMUM LETTER PHASE-F LA;Lo;0;L;;;;;N;;;;; 16A0B;BAMUM LETTER PHASE-F RII;Lo;0;L;;;;;N;;;;; 16A0C;BAMUM LETTER PHASE-F RIEE;Lo;0;L;;;;;N;;;;; 16A0D;BAMUM LETTER PHASE-F MEEEE;Lo;0;L;;;;;N;;;;; 16A0E;BAMUM LETTER PHASE-F TAA;Lo;0;L;;;;;N;;;;; 16A0F;BAMUM LETTER PHASE-F NDAA;Lo;0;L;;;;;N;;;;; 16A10;BAMUM LETTER PHASE-F NJAEM;Lo;0;L;;;;;N;;;;; 16A11;BAMUM LETTER PHASE-F M;Lo;0;L;;;;;N;;;;; 16A12;BAMUM LETTER PHASE-F SUU;Lo;0;L;;;;;N;;;;; 16A13;BAMUM LETTER PHASE-F SHII;Lo;0;L;;;;;N;;;;; 16A14;BAMUM LETTER PHASE-F SI;Lo;0;L;;;;;N;;;;; 16A15;BAMUM LETTER PHASE-F SEUX;Lo;0;L;;;;;N;;;;; 16A16;BAMUM LETTER PHASE-F KYEE;Lo;0;L;;;;;N;;;;; 16A17;BAMUM LETTER PHASE-F KET;Lo;0;L;;;;;N;;;;; 16A18;BAMUM LETTER PHASE-F NUAE;Lo;0;L;;;;;N;;;;; 16A19;BAMUM LETTER PHASE-F NU;Lo;0;L;;;;;N;;;;; 16A1A;BAMUM LETTER PHASE-F NJUAE;Lo;0;L;;;;;N;;;;; 16A1B;BAMUM LETTER PHASE-F YOQ;Lo;0;L;;;;;N;;;;; 16A1C;BAMUM LETTER PHASE-F SHU;Lo;0;L;;;;;N;;;;; 16A1D;BAMUM LETTER PHASE-F YA;Lo;0;L;;;;;N;;;;; 16A1E;BAMUM LETTER PHASE-F NSHA;Lo;0;L;;;;;N;;;;; 16A1F;BAMUM LETTER PHASE-F PEUX;Lo;0;L;;;;;N;;;;; 16A20;BAMUM LETTER PHASE-F NTEE;Lo;0;L;;;;;N;;;;; 16A21;BAMUM LETTER PHASE-F WUE;Lo;0;L;;;;;N;;;;; 16A22;BAMUM LETTER PHASE-F PEE;Lo;0;L;;;;;N;;;;; 16A23;BAMUM LETTER PHASE-F RU;Lo;0;L;;;;;N;;;;; 16A24;BAMUM LETTER PHASE-F NI;Lo;0;L;;;;;N;;;;; 16A25;BAMUM LETTER PHASE-F REUX;Lo;0;L;;;;;N;;;;; 16A26;BAMUM LETTER PHASE-F KEN;Lo;0;L;;;;;N;;;;; 16A27;BAMUM LETTER PHASE-F NGKWAEN;Lo;0;L;;;;;N;;;;; 16A28;BAMUM LETTER PHASE-F NGGA;Lo;0;L;;;;;N;;;;; 16A29;BAMUM LETTER PHASE-F SHO;Lo;0;L;;;;;N;;;;; 16A2A;BAMUM LETTER PHASE-F PUAE;Lo;0;L;;;;;N;;;;; 16A2B;BAMUM LETTER PHASE-F FOM;Lo;0;L;;;;;N;;;;; 16A2C;BAMUM LETTER PHASE-F WA;Lo;0;L;;;;;N;;;;; 16A2D;BAMUM LETTER PHASE-F LI;Lo;0;L;;;;;N;;;;; 16A2E;BAMUM LETTER PHASE-F LOQ;Lo;0;L;;;;;N;;;;; 16A2F;BAMUM LETTER PHASE-F KO;Lo;0;L;;;;;N;;;;; 16A30;BAMUM LETTER PHASE-F MBEN;Lo;0;L;;;;;N;;;;; 16A31;BAMUM LETTER PHASE-F REN;Lo;0;L;;;;;N;;;;; 16A32;BAMUM LETTER PHASE-F MA;Lo;0;L;;;;;N;;;;; 16A33;BAMUM LETTER PHASE-F MO;Lo;0;L;;;;;N;;;;; 16A34;BAMUM LETTER PHASE-F MBAA;Lo;0;L;;;;;N;;;;; 16A35;BAMUM LETTER PHASE-F TET;Lo;0;L;;;;;N;;;;; 16A36;BAMUM LETTER PHASE-F KPA;Lo;0;L;;;;;N;;;;; 16A37;BAMUM LETTER PHASE-F SAMBA;Lo;0;L;;;;;N;;;;; 16A38;BAMUM LETTER PHASE-F VUEQ;Lo;0;L;;;;;N;;;;; 16A40;MRO LETTER TA;Lo;0;L;;;;;N;;;;; 16A41;MRO LETTER NGI;Lo;0;L;;;;;N;;;;; 16A42;MRO LETTER YO;Lo;0;L;;;;;N;;;;; 16A43;MRO LETTER MIM;Lo;0;L;;;;;N;;;;; 16A44;MRO LETTER BA;Lo;0;L;;;;;N;;;;; 16A45;MRO LETTER DA;Lo;0;L;;;;;N;;;;; 16A46;MRO LETTER A;Lo;0;L;;;;;N;;;;; 16A47;MRO LETTER PHI;Lo;0;L;;;;;N;;;;; 16A48;MRO LETTER KHAI;Lo;0;L;;;;;N;;;;; 16A49;MRO LETTER HAO;Lo;0;L;;;;;N;;;;; 16A4A;MRO LETTER DAI;Lo;0;L;;;;;N;;;;; 16A4B;MRO LETTER CHU;Lo;0;L;;;;;N;;;;; 16A4C;MRO LETTER KEAAE;Lo;0;L;;;;;N;;;;; 16A4D;MRO LETTER OL;Lo;0;L;;;;;N;;;;; 16A4E;MRO LETTER MAEM;Lo;0;L;;;;;N;;;;; 16A4F;MRO LETTER NIN;Lo;0;L;;;;;N;;;;; 16A50;MRO LETTER PA;Lo;0;L;;;;;N;;;;; 16A51;MRO LETTER OO;Lo;0;L;;;;;N;;;;; 16A52;MRO LETTER O;Lo;0;L;;;;;N;;;;; 16A53;MRO LETTER RO;Lo;0;L;;;;;N;;;;; 16A54;MRO LETTER SHI;Lo;0;L;;;;;N;;;;; 16A55;MRO LETTER THEA;Lo;0;L;;;;;N;;;;; 16A56;MRO LETTER EA;Lo;0;L;;;;;N;;;;; 16A57;MRO LETTER WA;Lo;0;L;;;;;N;;;;; 16A58;MRO LETTER E;Lo;0;L;;;;;N;;;;; 16A59;MRO LETTER KO;Lo;0;L;;;;;N;;;;; 16A5A;MRO LETTER LAN;Lo;0;L;;;;;N;;;;; 16A5B;MRO LETTER LA;Lo;0;L;;;;;N;;;;; 16A5C;MRO LETTER HAI;Lo;0;L;;;;;N;;;;; 16A5D;MRO LETTER RI;Lo;0;L;;;;;N;;;;; 16A5E;MRO LETTER TEK;Lo;0;L;;;;;N;;;;; 16A60;MRO DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 16A61;MRO DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 16A62;MRO DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 16A63;MRO DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 16A64;MRO DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 16A65;MRO DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 16A66;MRO DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 16A67;MRO DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 16A68;MRO DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 16A69;MRO DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 16A6E;MRO DANDA;Po;0;L;;;;;N;;;;; 16A6F;MRO DOUBLE DANDA;Po;0;L;;;;;N;;;;; 16A70;TANGSA LETTER OZ;Lo;0;L;;;;;N;;;;; 16A71;TANGSA LETTER OC;Lo;0;L;;;;;N;;;;; 16A72;TANGSA LETTER OQ;Lo;0;L;;;;;N;;;;; 16A73;TANGSA LETTER OX;Lo;0;L;;;;;N;;;;; 16A74;TANGSA LETTER AZ;Lo;0;L;;;;;N;;;;; 16A75;TANGSA LETTER AC;Lo;0;L;;;;;N;;;;; 16A76;TANGSA LETTER AQ;Lo;0;L;;;;;N;;;;; 16A77;TANGSA LETTER AX;Lo;0;L;;;;;N;;;;; 16A78;TANGSA LETTER VZ;Lo;0;L;;;;;N;;;;; 16A79;TANGSA LETTER VC;Lo;0;L;;;;;N;;;;; 16A7A;TANGSA LETTER VQ;Lo;0;L;;;;;N;;;;; 16A7B;TANGSA LETTER VX;Lo;0;L;;;;;N;;;;; 16A7C;TANGSA LETTER EZ;Lo;0;L;;;;;N;;;;; 16A7D;TANGSA LETTER EC;Lo;0;L;;;;;N;;;;; 16A7E;TANGSA LETTER EQ;Lo;0;L;;;;;N;;;;; 16A7F;TANGSA LETTER EX;Lo;0;L;;;;;N;;;;; 16A80;TANGSA LETTER IZ;Lo;0;L;;;;;N;;;;; 16A81;TANGSA LETTER IC;Lo;0;L;;;;;N;;;;; 16A82;TANGSA LETTER IQ;Lo;0;L;;;;;N;;;;; 16A83;TANGSA LETTER IX;Lo;0;L;;;;;N;;;;; 16A84;TANGSA LETTER UZ;Lo;0;L;;;;;N;;;;; 16A85;TANGSA LETTER UC;Lo;0;L;;;;;N;;;;; 16A86;TANGSA LETTER UQ;Lo;0;L;;;;;N;;;;; 16A87;TANGSA LETTER UX;Lo;0;L;;;;;N;;;;; 16A88;TANGSA LETTER AWZ;Lo;0;L;;;;;N;;;;; 16A89;TANGSA LETTER AWC;Lo;0;L;;;;;N;;;;; 16A8A;TANGSA LETTER AWQ;Lo;0;L;;;;;N;;;;; 16A8B;TANGSA LETTER AWX;Lo;0;L;;;;;N;;;;; 16A8C;TANGSA LETTER UIZ;Lo;0;L;;;;;N;;;;; 16A8D;TANGSA LETTER UIC;Lo;0;L;;;;;N;;;;; 16A8E;TANGSA LETTER UIQ;Lo;0;L;;;;;N;;;;; 16A8F;TANGSA LETTER UIX;Lo;0;L;;;;;N;;;;; 16A90;TANGSA LETTER FINAL NG;Lo;0;L;;;;;N;;;;; 16A91;TANGSA LETTER LONG UEX;Lo;0;L;;;;;N;;;;; 16A92;TANGSA LETTER SHORT UEZ;Lo;0;L;;;;;N;;;;; 16A93;TANGSA LETTER SHORT AWX;Lo;0;L;;;;;N;;;;; 16A94;TANGSA LETTER UEC;Lo;0;L;;;;;N;;;;; 16A95;TANGSA LETTER UEZ;Lo;0;L;;;;;N;;;;; 16A96;TANGSA LETTER UEQ;Lo;0;L;;;;;N;;;;; 16A97;TANGSA LETTER UEX;Lo;0;L;;;;;N;;;;; 16A98;TANGSA LETTER UIUZ;Lo;0;L;;;;;N;;;;; 16A99;TANGSA LETTER UIUC;Lo;0;L;;;;;N;;;;; 16A9A;TANGSA LETTER UIUQ;Lo;0;L;;;;;N;;;;; 16A9B;TANGSA LETTER UIUX;Lo;0;L;;;;;N;;;;; 16A9C;TANGSA LETTER MZ;Lo;0;L;;;;;N;;;;; 16A9D;TANGSA LETTER MC;Lo;0;L;;;;;N;;;;; 16A9E;TANGSA LETTER MQ;Lo;0;L;;;;;N;;;;; 16A9F;TANGSA LETTER MX;Lo;0;L;;;;;N;;;;; 16AA0;TANGSA LETTER KA;Lo;0;L;;;;;N;;;;; 16AA1;TANGSA LETTER KHA;Lo;0;L;;;;;N;;;;; 16AA2;TANGSA LETTER GA;Lo;0;L;;;;;N;;;;; 16AA3;TANGSA LETTER NGA;Lo;0;L;;;;;N;;;;; 16AA4;TANGSA LETTER SA;Lo;0;L;;;;;N;;;;; 16AA5;TANGSA LETTER YA;Lo;0;L;;;;;N;;;;; 16AA6;TANGSA LETTER WA;Lo;0;L;;;;;N;;;;; 16AA7;TANGSA LETTER PA;Lo;0;L;;;;;N;;;;; 16AA8;TANGSA LETTER NYA;Lo;0;L;;;;;N;;;;; 16AA9;TANGSA LETTER PHA;Lo;0;L;;;;;N;;;;; 16AAA;TANGSA LETTER BA;Lo;0;L;;;;;N;;;;; 16AAB;TANGSA LETTER MA;Lo;0;L;;;;;N;;;;; 16AAC;TANGSA LETTER NA;Lo;0;L;;;;;N;;;;; 16AAD;TANGSA LETTER HA;Lo;0;L;;;;;N;;;;; 16AAE;TANGSA LETTER LA;Lo;0;L;;;;;N;;;;; 16AAF;TANGSA LETTER HTA;Lo;0;L;;;;;N;;;;; 16AB0;TANGSA LETTER TA;Lo;0;L;;;;;N;;;;; 16AB1;TANGSA LETTER DA;Lo;0;L;;;;;N;;;;; 16AB2;TANGSA LETTER RA;Lo;0;L;;;;;N;;;;; 16AB3;TANGSA LETTER NHA;Lo;0;L;;;;;N;;;;; 16AB4;TANGSA LETTER SHA;Lo;0;L;;;;;N;;;;; 16AB5;TANGSA LETTER CA;Lo;0;L;;;;;N;;;;; 16AB6;TANGSA LETTER TSA;Lo;0;L;;;;;N;;;;; 16AB7;TANGSA LETTER GHA;Lo;0;L;;;;;N;;;;; 16AB8;TANGSA LETTER HTTA;Lo;0;L;;;;;N;;;;; 16AB9;TANGSA LETTER THA;Lo;0;L;;;;;N;;;;; 16ABA;TANGSA LETTER XA;Lo;0;L;;;;;N;;;;; 16ABB;TANGSA LETTER FA;Lo;0;L;;;;;N;;;;; 16ABC;TANGSA LETTER DHA;Lo;0;L;;;;;N;;;;; 16ABD;TANGSA LETTER CHA;Lo;0;L;;;;;N;;;;; 16ABE;TANGSA LETTER ZA;Lo;0;L;;;;;N;;;;; 16AC0;TANGSA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 16AC1;TANGSA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 16AC2;TANGSA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 16AC3;TANGSA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 16AC4;TANGSA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 16AC5;TANGSA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 16AC6;TANGSA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 16AC7;TANGSA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 16AC8;TANGSA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 16AC9;TANGSA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 16AD0;BASSA VAH LETTER ENNI;Lo;0;L;;;;;N;;;;; 16AD1;BASSA VAH LETTER KA;Lo;0;L;;;;;N;;;;; 16AD2;BASSA VAH LETTER SE;Lo;0;L;;;;;N;;;;; 16AD3;BASSA VAH LETTER FA;Lo;0;L;;;;;N;;;;; 16AD4;BASSA VAH LETTER MBE;Lo;0;L;;;;;N;;;;; 16AD5;BASSA VAH LETTER YIE;Lo;0;L;;;;;N;;;;; 16AD6;BASSA VAH LETTER GAH;Lo;0;L;;;;;N;;;;; 16AD7;BASSA VAH LETTER DHII;Lo;0;L;;;;;N;;;;; 16AD8;BASSA VAH LETTER KPAH;Lo;0;L;;;;;N;;;;; 16AD9;BASSA VAH LETTER JO;Lo;0;L;;;;;N;;;;; 16ADA;BASSA VAH LETTER HWAH;Lo;0;L;;;;;N;;;;; 16ADB;BASSA VAH LETTER WA;Lo;0;L;;;;;N;;;;; 16ADC;BASSA VAH LETTER ZO;Lo;0;L;;;;;N;;;;; 16ADD;BASSA VAH LETTER GBU;Lo;0;L;;;;;N;;;;; 16ADE;BASSA VAH LETTER DO;Lo;0;L;;;;;N;;;;; 16ADF;BASSA VAH LETTER CE;Lo;0;L;;;;;N;;;;; 16AE0;BASSA VAH LETTER UWU;Lo;0;L;;;;;N;;;;; 16AE1;BASSA VAH LETTER TO;Lo;0;L;;;;;N;;;;; 16AE2;BASSA VAH LETTER BA;Lo;0;L;;;;;N;;;;; 16AE3;BASSA VAH LETTER VU;Lo;0;L;;;;;N;;;;; 16AE4;BASSA VAH LETTER YEIN;Lo;0;L;;;;;N;;;;; 16AE5;BASSA VAH LETTER PA;Lo;0;L;;;;;N;;;;; 16AE6;BASSA VAH LETTER WADDA;Lo;0;L;;;;;N;;;;; 16AE7;BASSA VAH LETTER A;Lo;0;L;;;;;N;;;;; 16AE8;BASSA VAH LETTER O;Lo;0;L;;;;;N;;;;; 16AE9;BASSA VAH LETTER OO;Lo;0;L;;;;;N;;;;; 16AEA;BASSA VAH LETTER U;Lo;0;L;;;;;N;;;;; 16AEB;BASSA VAH LETTER EE;Lo;0;L;;;;;N;;;;; 16AEC;BASSA VAH LETTER E;Lo;0;L;;;;;N;;;;; 16AED;BASSA VAH LETTER I;Lo;0;L;;;;;N;;;;; 16AF0;BASSA VAH COMBINING HIGH TONE;Mn;1;NSM;;;;;N;;;;; 16AF1;BASSA VAH COMBINING LOW TONE;Mn;1;NSM;;;;;N;;;;; 16AF2;BASSA VAH COMBINING MID TONE;Mn;1;NSM;;;;;N;;;;; 16AF3;BASSA VAH COMBINING LOW-MID TONE;Mn;1;NSM;;;;;N;;;;; 16AF4;BASSA VAH COMBINING HIGH-LOW TONE;Mn;1;NSM;;;;;N;;;;; 16AF5;BASSA VAH FULL STOP;Po;0;L;;;;;N;;;;; 16B00;PAHAWH HMONG VOWEL KEEB;Lo;0;L;;;;;N;;;;; 16B01;PAHAWH HMONG VOWEL KEEV;Lo;0;L;;;;;N;;;;; 16B02;PAHAWH HMONG VOWEL KIB;Lo;0;L;;;;;N;;;;; 16B03;PAHAWH HMONG VOWEL KIV;Lo;0;L;;;;;N;;;;; 16B04;PAHAWH HMONG VOWEL KAUB;Lo;0;L;;;;;N;;;;; 16B05;PAHAWH HMONG VOWEL KAUV;Lo;0;L;;;;;N;;;;; 16B06;PAHAWH HMONG VOWEL KUB;Lo;0;L;;;;;N;;;;; 16B07;PAHAWH HMONG VOWEL KUV;Lo;0;L;;;;;N;;;;; 16B08;PAHAWH HMONG VOWEL KEB;Lo;0;L;;;;;N;;;;; 16B09;PAHAWH HMONG VOWEL KEV;Lo;0;L;;;;;N;;;;; 16B0A;PAHAWH HMONG VOWEL KAIB;Lo;0;L;;;;;N;;;;; 16B0B;PAHAWH HMONG VOWEL KAIV;Lo;0;L;;;;;N;;;;; 16B0C;PAHAWH HMONG VOWEL KOOB;Lo;0;L;;;;;N;;;;; 16B0D;PAHAWH HMONG VOWEL KOOV;Lo;0;L;;;;;N;;;;; 16B0E;PAHAWH HMONG VOWEL KAWB;Lo;0;L;;;;;N;;;;; 16B0F;PAHAWH HMONG VOWEL KAWV;Lo;0;L;;;;;N;;;;; 16B10;PAHAWH HMONG VOWEL KUAB;Lo;0;L;;;;;N;;;;; 16B11;PAHAWH HMONG VOWEL KUAV;Lo;0;L;;;;;N;;;;; 16B12;PAHAWH HMONG VOWEL KOB;Lo;0;L;;;;;N;;;;; 16B13;PAHAWH HMONG VOWEL KOV;Lo;0;L;;;;;N;;;;; 16B14;PAHAWH HMONG VOWEL KIAB;Lo;0;L;;;;;N;;;;; 16B15;PAHAWH HMONG VOWEL KIAV;Lo;0;L;;;;;N;;;;; 16B16;PAHAWH HMONG VOWEL KAB;Lo;0;L;;;;;N;;;;; 16B17;PAHAWH HMONG VOWEL KAV;Lo;0;L;;;;;N;;;;; 16B18;PAHAWH HMONG VOWEL KWB;Lo;0;L;;;;;N;;;;; 16B19;PAHAWH HMONG VOWEL KWV;Lo;0;L;;;;;N;;;;; 16B1A;PAHAWH HMONG VOWEL KAAB;Lo;0;L;;;;;N;;;;; 16B1B;PAHAWH HMONG VOWEL KAAV;Lo;0;L;;;;;N;;;;; 16B1C;PAHAWH HMONG CONSONANT VAU;Lo;0;L;;;;;N;;;;; 16B1D;PAHAWH HMONG CONSONANT NTSAU;Lo;0;L;;;;;N;;;;; 16B1E;PAHAWH HMONG CONSONANT LAU;Lo;0;L;;;;;N;;;;; 16B1F;PAHAWH HMONG CONSONANT HAU;Lo;0;L;;;;;N;;;;; 16B20;PAHAWH HMONG CONSONANT NLAU;Lo;0;L;;;;;N;;;;; 16B21;PAHAWH HMONG CONSONANT RAU;Lo;0;L;;;;;N;;;;; 16B22;PAHAWH HMONG CONSONANT NKAU;Lo;0;L;;;;;N;;;;; 16B23;PAHAWH HMONG CONSONANT QHAU;Lo;0;L;;;;;N;;;;; 16B24;PAHAWH HMONG CONSONANT YAU;Lo;0;L;;;;;N;;;;; 16B25;PAHAWH HMONG CONSONANT HLAU;Lo;0;L;;;;;N;;;;; 16B26;PAHAWH HMONG CONSONANT MAU;Lo;0;L;;;;;N;;;;; 16B27;PAHAWH HMONG CONSONANT CHAU;Lo;0;L;;;;;N;;;;; 16B28;PAHAWH HMONG CONSONANT NCHAU;Lo;0;L;;;;;N;;;;; 16B29;PAHAWH HMONG CONSONANT HNAU;Lo;0;L;;;;;N;;;;; 16B2A;PAHAWH HMONG CONSONANT PLHAU;Lo;0;L;;;;;N;;;;; 16B2B;PAHAWH HMONG CONSONANT NTHAU;Lo;0;L;;;;;N;;;;; 16B2C;PAHAWH HMONG CONSONANT NAU;Lo;0;L;;;;;N;;;;; 16B2D;PAHAWH HMONG CONSONANT AU;Lo;0;L;;;;;N;;;;; 16B2E;PAHAWH HMONG CONSONANT XAU;Lo;0;L;;;;;N;;;;; 16B2F;PAHAWH HMONG CONSONANT CAU;Lo;0;L;;;;;N;;;;; 16B30;PAHAWH HMONG MARK CIM TUB;Mn;230;NSM;;;;;N;;;;; 16B31;PAHAWH HMONG MARK CIM SO;Mn;230;NSM;;;;;N;;;;; 16B32;PAHAWH HMONG MARK CIM KES;Mn;230;NSM;;;;;N;;;;; 16B33;PAHAWH HMONG MARK CIM KHAV;Mn;230;NSM;;;;;N;;;;; 16B34;PAHAWH HMONG MARK CIM SUAM;Mn;230;NSM;;;;;N;;;;; 16B35;PAHAWH HMONG MARK CIM HOM;Mn;230;NSM;;;;;N;;;;; 16B36;PAHAWH HMONG MARK CIM TAUM;Mn;230;NSM;;;;;N;;;;; 16B37;PAHAWH HMONG SIGN VOS THOM;Po;0;L;;;;;N;;;;; 16B38;PAHAWH HMONG SIGN VOS TSHAB CEEB;Po;0;L;;;;;N;;;;; 16B39;PAHAWH HMONG SIGN CIM CHEEM;Po;0;L;;;;;N;;;;; 16B3A;PAHAWH HMONG SIGN VOS THIAB;Po;0;L;;;;;N;;;;; 16B3B;PAHAWH HMONG SIGN VOS FEEM;Po;0;L;;;;;N;;;;; 16B3C;PAHAWH HMONG SIGN XYEEM NTXIV;So;0;L;;;;;N;;;;; 16B3D;PAHAWH HMONG SIGN XYEEM RHO;So;0;L;;;;;N;;;;; 16B3E;PAHAWH HMONG SIGN XYEEM TOV;So;0;L;;;;;N;;;;; 16B3F;PAHAWH HMONG SIGN XYEEM FAIB;So;0;L;;;;;N;;;;; 16B40;PAHAWH HMONG SIGN VOS SEEV;Lm;0;L;;;;;N;;;;; 16B41;PAHAWH HMONG SIGN MEEJ SUAB;Lm;0;L;;;;;N;;;;; 16B42;PAHAWH HMONG SIGN VOS NRUA;Lm;0;L;;;;;N;;;;; 16B43;PAHAWH HMONG SIGN IB YAM;Lm;0;L;;;;;N;;;;; 16B44;PAHAWH HMONG SIGN XAUS;Po;0;L;;;;;N;;;;; 16B45;PAHAWH HMONG SIGN CIM TSOV ROG;So;0;L;;;;;N;;;;; 16B50;PAHAWH HMONG DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 16B51;PAHAWH HMONG DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 16B52;PAHAWH HMONG DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 16B53;PAHAWH HMONG DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 16B54;PAHAWH HMONG DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 16B55;PAHAWH HMONG DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 16B56;PAHAWH HMONG DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 16B57;PAHAWH HMONG DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 16B58;PAHAWH HMONG DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 16B59;PAHAWH HMONG DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 16B5B;PAHAWH HMONG NUMBER TENS;No;0;L;;;;10;N;;;;; 16B5C;PAHAWH HMONG NUMBER HUNDREDS;No;0;L;;;;100;N;;;;; 16B5D;PAHAWH HMONG NUMBER TEN THOUSANDS;No;0;L;;;;10000;N;;;;; 16B5E;PAHAWH HMONG NUMBER MILLIONS;No;0;L;;;;1000000;N;;;;; 16B5F;PAHAWH HMONG NUMBER HUNDRED MILLIONS;No;0;L;;;;100000000;N;;;;; 16B60;PAHAWH HMONG NUMBER TEN BILLIONS;No;0;L;;;;10000000000;N;;;;; 16B61;PAHAWH HMONG NUMBER TRILLIONS;No;0;L;;;;1000000000000;N;;;;; 16B63;PAHAWH HMONG SIGN VOS LUB;Lo;0;L;;;;;N;;;;; 16B64;PAHAWH HMONG SIGN XYOO;Lo;0;L;;;;;N;;;;; 16B65;PAHAWH HMONG SIGN HLI;Lo;0;L;;;;;N;;;;; 16B66;PAHAWH HMONG SIGN THIRD-STAGE HLI;Lo;0;L;;;;;N;;;;; 16B67;PAHAWH HMONG SIGN ZWJ THAJ;Lo;0;L;;;;;N;;;;; 16B68;PAHAWH HMONG SIGN HNUB;Lo;0;L;;;;;N;;;;; 16B69;PAHAWH HMONG SIGN NQIG;Lo;0;L;;;;;N;;;;; 16B6A;PAHAWH HMONG SIGN XIAB;Lo;0;L;;;;;N;;;;; 16B6B;PAHAWH HMONG SIGN NTUJ;Lo;0;L;;;;;N;;;;; 16B6C;PAHAWH HMONG SIGN AV;Lo;0;L;;;;;N;;;;; 16B6D;PAHAWH HMONG SIGN TXHEEJ CEEV;Lo;0;L;;;;;N;;;;; 16B6E;PAHAWH HMONG SIGN MEEJ TSEEB;Lo;0;L;;;;;N;;;;; 16B6F;PAHAWH HMONG SIGN TAU;Lo;0;L;;;;;N;;;;; 16B70;PAHAWH HMONG SIGN LOS;Lo;0;L;;;;;N;;;;; 16B71;PAHAWH HMONG SIGN MUS;Lo;0;L;;;;;N;;;;; 16B72;PAHAWH HMONG SIGN CIM HAIS LUS NTOG NTOG;Lo;0;L;;;;;N;;;;; 16B73;PAHAWH HMONG SIGN CIM CUAM TSHOOJ;Lo;0;L;;;;;N;;;;; 16B74;PAHAWH HMONG SIGN CIM TXWV;Lo;0;L;;;;;N;;;;; 16B75;PAHAWH HMONG SIGN CIM TXWV CHWV;Lo;0;L;;;;;N;;;;; 16B76;PAHAWH HMONG SIGN CIM PUB DAWB;Lo;0;L;;;;;N;;;;; 16B77;PAHAWH HMONG SIGN CIM NRES TOS;Lo;0;L;;;;;N;;;;; 16B7D;PAHAWH HMONG CLAN SIGN TSHEEJ;Lo;0;L;;;;;N;;;;; 16B7E;PAHAWH HMONG CLAN SIGN YEEG;Lo;0;L;;;;;N;;;;; 16B7F;PAHAWH HMONG CLAN SIGN LIS;Lo;0;L;;;;;N;;;;; 16B80;PAHAWH HMONG CLAN SIGN LAUJ;Lo;0;L;;;;;N;;;;; 16B81;PAHAWH HMONG CLAN SIGN XYOOJ;Lo;0;L;;;;;N;;;;; 16B82;PAHAWH HMONG CLAN SIGN KOO;Lo;0;L;;;;;N;;;;; 16B83;PAHAWH HMONG CLAN SIGN HAWJ;Lo;0;L;;;;;N;;;;; 16B84;PAHAWH HMONG CLAN SIGN MUAS;Lo;0;L;;;;;N;;;;; 16B85;PAHAWH HMONG CLAN SIGN THOJ;Lo;0;L;;;;;N;;;;; 16B86;PAHAWH HMONG CLAN SIGN TSAB;Lo;0;L;;;;;N;;;;; 16B87;PAHAWH HMONG CLAN SIGN PHAB;Lo;0;L;;;;;N;;;;; 16B88;PAHAWH HMONG CLAN SIGN KHAB;Lo;0;L;;;;;N;;;;; 16B89;PAHAWH HMONG CLAN SIGN HAM;Lo;0;L;;;;;N;;;;; 16B8A;PAHAWH HMONG CLAN SIGN VAJ;Lo;0;L;;;;;N;;;;; 16B8B;PAHAWH HMONG CLAN SIGN FAJ;Lo;0;L;;;;;N;;;;; 16B8C;PAHAWH HMONG CLAN SIGN YAJ;Lo;0;L;;;;;N;;;;; 16B8D;PAHAWH HMONG CLAN SIGN TSWB;Lo;0;L;;;;;N;;;;; 16B8E;PAHAWH HMONG CLAN SIGN KWM;Lo;0;L;;;;;N;;;;; 16B8F;PAHAWH HMONG CLAN SIGN VWJ;Lo;0;L;;;;;N;;;;; 16E40;MEDEFAIDRIN CAPITAL LETTER M;Lu;0;L;;;;;N;;;;16E60; 16E41;MEDEFAIDRIN CAPITAL LETTER S;Lu;0;L;;;;;N;;;;16E61; 16E42;MEDEFAIDRIN CAPITAL LETTER V;Lu;0;L;;;;;N;;;;16E62; 16E43;MEDEFAIDRIN CAPITAL LETTER W;Lu;0;L;;;;;N;;;;16E63; 16E44;MEDEFAIDRIN CAPITAL LETTER ATIU;Lu;0;L;;;;;N;;;;16E64; 16E45;MEDEFAIDRIN CAPITAL LETTER Z;Lu;0;L;;;;;N;;;;16E65; 16E46;MEDEFAIDRIN CAPITAL LETTER KP;Lu;0;L;;;;;N;;;;16E66; 16E47;MEDEFAIDRIN CAPITAL LETTER P;Lu;0;L;;;;;N;;;;16E67; 16E48;MEDEFAIDRIN CAPITAL LETTER T;Lu;0;L;;;;;N;;;;16E68; 16E49;MEDEFAIDRIN CAPITAL LETTER G;Lu;0;L;;;;;N;;;;16E69; 16E4A;MEDEFAIDRIN CAPITAL LETTER F;Lu;0;L;;;;;N;;;;16E6A; 16E4B;MEDEFAIDRIN CAPITAL LETTER I;Lu;0;L;;;;;N;;;;16E6B; 16E4C;MEDEFAIDRIN CAPITAL LETTER K;Lu;0;L;;;;;N;;;;16E6C; 16E4D;MEDEFAIDRIN CAPITAL LETTER A;Lu;0;L;;;;;N;;;;16E6D; 16E4E;MEDEFAIDRIN CAPITAL LETTER J;Lu;0;L;;;;;N;;;;16E6E; 16E4F;MEDEFAIDRIN CAPITAL LETTER E;Lu;0;L;;;;;N;;;;16E6F; 16E50;MEDEFAIDRIN CAPITAL LETTER B;Lu;0;L;;;;;N;;;;16E70; 16E51;MEDEFAIDRIN CAPITAL LETTER C;Lu;0;L;;;;;N;;;;16E71; 16E52;MEDEFAIDRIN CAPITAL LETTER U;Lu;0;L;;;;;N;;;;16E72; 16E53;MEDEFAIDRIN CAPITAL LETTER YU;Lu;0;L;;;;;N;;;;16E73; 16E54;MEDEFAIDRIN CAPITAL LETTER L;Lu;0;L;;;;;N;;;;16E74; 16E55;MEDEFAIDRIN CAPITAL LETTER Q;Lu;0;L;;;;;N;;;;16E75; 16E56;MEDEFAIDRIN CAPITAL LETTER HP;Lu;0;L;;;;;N;;;;16E76; 16E57;MEDEFAIDRIN CAPITAL LETTER NY;Lu;0;L;;;;;N;;;;16E77; 16E58;MEDEFAIDRIN CAPITAL LETTER X;Lu;0;L;;;;;N;;;;16E78; 16E59;MEDEFAIDRIN CAPITAL LETTER D;Lu;0;L;;;;;N;;;;16E79; 16E5A;MEDEFAIDRIN CAPITAL LETTER OE;Lu;0;L;;;;;N;;;;16E7A; 16E5B;MEDEFAIDRIN CAPITAL LETTER N;Lu;0;L;;;;;N;;;;16E7B; 16E5C;MEDEFAIDRIN CAPITAL LETTER R;Lu;0;L;;;;;N;;;;16E7C; 16E5D;MEDEFAIDRIN CAPITAL LETTER O;Lu;0;L;;;;;N;;;;16E7D; 16E5E;MEDEFAIDRIN CAPITAL LETTER AI;Lu;0;L;;;;;N;;;;16E7E; 16E5F;MEDEFAIDRIN CAPITAL LETTER Y;Lu;0;L;;;;;N;;;;16E7F; 16E60;MEDEFAIDRIN SMALL LETTER M;Ll;0;L;;;;;N;;;16E40;;16E40 16E61;MEDEFAIDRIN SMALL LETTER S;Ll;0;L;;;;;N;;;16E41;;16E41 16E62;MEDEFAIDRIN SMALL LETTER V;Ll;0;L;;;;;N;;;16E42;;16E42 16E63;MEDEFAIDRIN SMALL LETTER W;Ll;0;L;;;;;N;;;16E43;;16E43 16E64;MEDEFAIDRIN SMALL LETTER ATIU;Ll;0;L;;;;;N;;;16E44;;16E44 16E65;MEDEFAIDRIN SMALL LETTER Z;Ll;0;L;;;;;N;;;16E45;;16E45 16E66;MEDEFAIDRIN SMALL LETTER KP;Ll;0;L;;;;;N;;;16E46;;16E46 16E67;MEDEFAIDRIN SMALL LETTER P;Ll;0;L;;;;;N;;;16E47;;16E47 16E68;MEDEFAIDRIN SMALL LETTER T;Ll;0;L;;;;;N;;;16E48;;16E48 16E69;MEDEFAIDRIN SMALL LETTER G;Ll;0;L;;;;;N;;;16E49;;16E49 16E6A;MEDEFAIDRIN SMALL LETTER F;Ll;0;L;;;;;N;;;16E4A;;16E4A 16E6B;MEDEFAIDRIN SMALL LETTER I;Ll;0;L;;;;;N;;;16E4B;;16E4B 16E6C;MEDEFAIDRIN SMALL LETTER K;Ll;0;L;;;;;N;;;16E4C;;16E4C 16E6D;MEDEFAIDRIN SMALL LETTER A;Ll;0;L;;;;;N;;;16E4D;;16E4D 16E6E;MEDEFAIDRIN SMALL LETTER J;Ll;0;L;;;;;N;;;16E4E;;16E4E 16E6F;MEDEFAIDRIN SMALL LETTER E;Ll;0;L;;;;;N;;;16E4F;;16E4F 16E70;MEDEFAIDRIN SMALL LETTER B;Ll;0;L;;;;;N;;;16E50;;16E50 16E71;MEDEFAIDRIN SMALL LETTER C;Ll;0;L;;;;;N;;;16E51;;16E51 16E72;MEDEFAIDRIN SMALL LETTER U;Ll;0;L;;;;;N;;;16E52;;16E52 16E73;MEDEFAIDRIN SMALL LETTER YU;Ll;0;L;;;;;N;;;16E53;;16E53 16E74;MEDEFAIDRIN SMALL LETTER L;Ll;0;L;;;;;N;;;16E54;;16E54 16E75;MEDEFAIDRIN SMALL LETTER Q;Ll;0;L;;;;;N;;;16E55;;16E55 16E76;MEDEFAIDRIN SMALL LETTER HP;Ll;0;L;;;;;N;;;16E56;;16E56 16E77;MEDEFAIDRIN SMALL LETTER NY;Ll;0;L;;;;;N;;;16E57;;16E57 16E78;MEDEFAIDRIN SMALL LETTER X;Ll;0;L;;;;;N;;;16E58;;16E58 16E79;MEDEFAIDRIN SMALL LETTER D;Ll;0;L;;;;;N;;;16E59;;16E59 16E7A;MEDEFAIDRIN SMALL LETTER OE;Ll;0;L;;;;;N;;;16E5A;;16E5A 16E7B;MEDEFAIDRIN SMALL LETTER N;Ll;0;L;;;;;N;;;16E5B;;16E5B 16E7C;MEDEFAIDRIN SMALL LETTER R;Ll;0;L;;;;;N;;;16E5C;;16E5C 16E7D;MEDEFAIDRIN SMALL LETTER O;Ll;0;L;;;;;N;;;16E5D;;16E5D 16E7E;MEDEFAIDRIN SMALL LETTER AI;Ll;0;L;;;;;N;;;16E5E;;16E5E 16E7F;MEDEFAIDRIN SMALL LETTER Y;Ll;0;L;;;;;N;;;16E5F;;16E5F 16E80;MEDEFAIDRIN DIGIT ZERO;No;0;L;;;;0;N;;;;; 16E81;MEDEFAIDRIN DIGIT ONE;No;0;L;;;;1;N;;;;; 16E82;MEDEFAIDRIN DIGIT TWO;No;0;L;;;;2;N;;;;; 16E83;MEDEFAIDRIN DIGIT THREE;No;0;L;;;;3;N;;;;; 16E84;MEDEFAIDRIN DIGIT FOUR;No;0;L;;;;4;N;;;;; 16E85;MEDEFAIDRIN DIGIT FIVE;No;0;L;;;;5;N;;;;; 16E86;MEDEFAIDRIN DIGIT SIX;No;0;L;;;;6;N;;;;; 16E87;MEDEFAIDRIN DIGIT SEVEN;No;0;L;;;;7;N;;;;; 16E88;MEDEFAIDRIN DIGIT EIGHT;No;0;L;;;;8;N;;;;; 16E89;MEDEFAIDRIN DIGIT NINE;No;0;L;;;;9;N;;;;; 16E8A;MEDEFAIDRIN NUMBER TEN;No;0;L;;;;10;N;;;;; 16E8B;MEDEFAIDRIN NUMBER ELEVEN;No;0;L;;;;11;N;;;;; 16E8C;MEDEFAIDRIN NUMBER TWELVE;No;0;L;;;;12;N;;;;; 16E8D;MEDEFAIDRIN NUMBER THIRTEEN;No;0;L;;;;13;N;;;;; 16E8E;MEDEFAIDRIN NUMBER FOURTEEN;No;0;L;;;;14;N;;;;; 16E8F;MEDEFAIDRIN NUMBER FIFTEEN;No;0;L;;;;15;N;;;;; 16E90;MEDEFAIDRIN NUMBER SIXTEEN;No;0;L;;;;16;N;;;;; 16E91;MEDEFAIDRIN NUMBER SEVENTEEN;No;0;L;;;;17;N;;;;; 16E92;MEDEFAIDRIN NUMBER EIGHTEEN;No;0;L;;;;18;N;;;;; 16E93;MEDEFAIDRIN NUMBER NINETEEN;No;0;L;;;;19;N;;;;; 16E94;MEDEFAIDRIN DIGIT ONE ALTERNATE FORM;No;0;L;;;;1;N;;;;; 16E95;MEDEFAIDRIN DIGIT TWO ALTERNATE FORM;No;0;L;;;;2;N;;;;; 16E96;MEDEFAIDRIN DIGIT THREE ALTERNATE FORM;No;0;L;;;;3;N;;;;; 16E97;MEDEFAIDRIN COMMA;Po;0;L;;;;;N;;;;; 16E98;MEDEFAIDRIN FULL STOP;Po;0;L;;;;;N;;;;; 16E99;MEDEFAIDRIN SYMBOL AIVA;Po;0;L;;;;;N;;;;; 16E9A;MEDEFAIDRIN EXCLAMATION OH;Po;0;L;;;;;N;;;;; 16F00;MIAO LETTER PA;Lo;0;L;;;;;N;;;;; 16F01;MIAO LETTER BA;Lo;0;L;;;;;N;;;;; 16F02;MIAO LETTER YI PA;Lo;0;L;;;;;N;;;;; 16F03;MIAO LETTER PLA;Lo;0;L;;;;;N;;;;; 16F04;MIAO LETTER MA;Lo;0;L;;;;;N;;;;; 16F05;MIAO LETTER MHA;Lo;0;L;;;;;N;;;;; 16F06;MIAO LETTER ARCHAIC MA;Lo;0;L;;;;;N;;;;; 16F07;MIAO LETTER FA;Lo;0;L;;;;;N;;;;; 16F08;MIAO LETTER VA;Lo;0;L;;;;;N;;;;; 16F09;MIAO LETTER VFA;Lo;0;L;;;;;N;;;;; 16F0A;MIAO LETTER TA;Lo;0;L;;;;;N;;;;; 16F0B;MIAO LETTER DA;Lo;0;L;;;;;N;;;;; 16F0C;MIAO LETTER YI TTA;Lo;0;L;;;;;N;;;;; 16F0D;MIAO LETTER YI TA;Lo;0;L;;;;;N;;;;; 16F0E;MIAO LETTER TTA;Lo;0;L;;;;;N;;;;; 16F0F;MIAO LETTER DDA;Lo;0;L;;;;;N;;;;; 16F10;MIAO LETTER NA;Lo;0;L;;;;;N;;;;; 16F11;MIAO LETTER NHA;Lo;0;L;;;;;N;;;;; 16F12;MIAO LETTER YI NNA;Lo;0;L;;;;;N;;;;; 16F13;MIAO LETTER ARCHAIC NA;Lo;0;L;;;;;N;;;;; 16F14;MIAO LETTER NNA;Lo;0;L;;;;;N;;;;; 16F15;MIAO LETTER NNHA;Lo;0;L;;;;;N;;;;; 16F16;MIAO LETTER LA;Lo;0;L;;;;;N;;;;; 16F17;MIAO LETTER LYA;Lo;0;L;;;;;N;;;;; 16F18;MIAO LETTER LHA;Lo;0;L;;;;;N;;;;; 16F19;MIAO LETTER LHYA;Lo;0;L;;;;;N;;;;; 16F1A;MIAO LETTER TLHA;Lo;0;L;;;;;N;;;;; 16F1B;MIAO LETTER DLHA;Lo;0;L;;;;;N;;;;; 16F1C;MIAO LETTER TLHYA;Lo;0;L;;;;;N;;;;; 16F1D;MIAO LETTER DLHYA;Lo;0;L;;;;;N;;;;; 16F1E;MIAO LETTER KA;Lo;0;L;;;;;N;;;;; 16F1F;MIAO LETTER GA;Lo;0;L;;;;;N;;;;; 16F20;MIAO LETTER YI KA;Lo;0;L;;;;;N;;;;; 16F21;MIAO LETTER QA;Lo;0;L;;;;;N;;;;; 16F22;MIAO LETTER QGA;Lo;0;L;;;;;N;;;;; 16F23;MIAO LETTER NGA;Lo;0;L;;;;;N;;;;; 16F24;MIAO LETTER NGHA;Lo;0;L;;;;;N;;;;; 16F25;MIAO LETTER ARCHAIC NGA;Lo;0;L;;;;;N;;;;; 16F26;MIAO LETTER HA;Lo;0;L;;;;;N;;;;; 16F27;MIAO LETTER XA;Lo;0;L;;;;;N;;;;; 16F28;MIAO LETTER GHA;Lo;0;L;;;;;N;;;;; 16F29;MIAO LETTER GHHA;Lo;0;L;;;;;N;;;;; 16F2A;MIAO LETTER TSSA;Lo;0;L;;;;;N;;;;; 16F2B;MIAO LETTER DZZA;Lo;0;L;;;;;N;;;;; 16F2C;MIAO LETTER NYA;Lo;0;L;;;;;N;;;;; 16F2D;MIAO LETTER NYHA;Lo;0;L;;;;;N;;;;; 16F2E;MIAO LETTER TSHA;Lo;0;L;;;;;N;;;;; 16F2F;MIAO LETTER DZHA;Lo;0;L;;;;;N;;;;; 16F30;MIAO LETTER YI TSHA;Lo;0;L;;;;;N;;;;; 16F31;MIAO LETTER YI DZHA;Lo;0;L;;;;;N;;;;; 16F32;MIAO LETTER REFORMED TSHA;Lo;0;L;;;;;N;;;;; 16F33;MIAO LETTER SHA;Lo;0;L;;;;;N;;;;; 16F34;MIAO LETTER SSA;Lo;0;L;;;;;N;;;;; 16F35;MIAO LETTER ZHA;Lo;0;L;;;;;N;;;;; 16F36;MIAO LETTER ZSHA;Lo;0;L;;;;;N;;;;; 16F37;MIAO LETTER TSA;Lo;0;L;;;;;N;;;;; 16F38;MIAO LETTER DZA;Lo;0;L;;;;;N;;;;; 16F39;MIAO LETTER YI TSA;Lo;0;L;;;;;N;;;;; 16F3A;MIAO LETTER SA;Lo;0;L;;;;;N;;;;; 16F3B;MIAO LETTER ZA;Lo;0;L;;;;;N;;;;; 16F3C;MIAO LETTER ZSA;Lo;0;L;;;;;N;;;;; 16F3D;MIAO LETTER ZZA;Lo;0;L;;;;;N;;;;; 16F3E;MIAO LETTER ZZSA;Lo;0;L;;;;;N;;;;; 16F3F;MIAO LETTER ARCHAIC ZZA;Lo;0;L;;;;;N;;;;; 16F40;MIAO LETTER ZZYA;Lo;0;L;;;;;N;;;;; 16F41;MIAO LETTER ZZSYA;Lo;0;L;;;;;N;;;;; 16F42;MIAO LETTER WA;Lo;0;L;;;;;N;;;;; 16F43;MIAO LETTER AH;Lo;0;L;;;;;N;;;;; 16F44;MIAO LETTER HHA;Lo;0;L;;;;;N;;;;; 16F45;MIAO LETTER BRI;Lo;0;L;;;;;N;;;;; 16F46;MIAO LETTER SYI;Lo;0;L;;;;;N;;;;; 16F47;MIAO LETTER DZYI;Lo;0;L;;;;;N;;;;; 16F48;MIAO LETTER TE;Lo;0;L;;;;;N;;;;; 16F49;MIAO LETTER TSE;Lo;0;L;;;;;N;;;;; 16F4A;MIAO LETTER RTE;Lo;0;L;;;;;N;;;;; 16F4F;MIAO SIGN CONSONANT MODIFIER BAR;Mn;0;NSM;;;;;N;;;;; 16F50;MIAO LETTER NASALIZATION;Lo;0;L;;;;;N;;;;; 16F51;MIAO SIGN ASPIRATION;Mc;0;L;;;;;N;;;;; 16F52;MIAO SIGN REFORMED VOICING;Mc;0;L;;;;;N;;;;; 16F53;MIAO SIGN REFORMED ASPIRATION;Mc;0;L;;;;;N;;;;; 16F54;MIAO VOWEL SIGN A;Mc;0;L;;;;;N;;;;; 16F55;MIAO VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 16F56;MIAO VOWEL SIGN AHH;Mc;0;L;;;;;N;;;;; 16F57;MIAO VOWEL SIGN AN;Mc;0;L;;;;;N;;;;; 16F58;MIAO VOWEL SIGN ANG;Mc;0;L;;;;;N;;;;; 16F59;MIAO VOWEL SIGN O;Mc;0;L;;;;;N;;;;; 16F5A;MIAO VOWEL SIGN OO;Mc;0;L;;;;;N;;;;; 16F5B;MIAO VOWEL SIGN WO;Mc;0;L;;;;;N;;;;; 16F5C;MIAO VOWEL SIGN W;Mc;0;L;;;;;N;;;;; 16F5D;MIAO VOWEL SIGN E;Mc;0;L;;;;;N;;;;; 16F5E;MIAO VOWEL SIGN EN;Mc;0;L;;;;;N;;;;; 16F5F;MIAO VOWEL SIGN ENG;Mc;0;L;;;;;N;;;;; 16F60;MIAO VOWEL SIGN OEY;Mc;0;L;;;;;N;;;;; 16F61;MIAO VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 16F62;MIAO VOWEL SIGN IA;Mc;0;L;;;;;N;;;;; 16F63;MIAO VOWEL SIGN IAN;Mc;0;L;;;;;N;;;;; 16F64;MIAO VOWEL SIGN IANG;Mc;0;L;;;;;N;;;;; 16F65;MIAO VOWEL SIGN IO;Mc;0;L;;;;;N;;;;; 16F66;MIAO VOWEL SIGN IE;Mc;0;L;;;;;N;;;;; 16F67;MIAO VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 16F68;MIAO VOWEL SIGN IU;Mc;0;L;;;;;N;;;;; 16F69;MIAO VOWEL SIGN ING;Mc;0;L;;;;;N;;;;; 16F6A;MIAO VOWEL SIGN U;Mc;0;L;;;;;N;;;;; 16F6B;MIAO VOWEL SIGN UA;Mc;0;L;;;;;N;;;;; 16F6C;MIAO VOWEL SIGN UAN;Mc;0;L;;;;;N;;;;; 16F6D;MIAO VOWEL SIGN UANG;Mc;0;L;;;;;N;;;;; 16F6E;MIAO VOWEL SIGN UU;Mc;0;L;;;;;N;;;;; 16F6F;MIAO VOWEL SIGN UEI;Mc;0;L;;;;;N;;;;; 16F70;MIAO VOWEL SIGN UNG;Mc;0;L;;;;;N;;;;; 16F71;MIAO VOWEL SIGN Y;Mc;0;L;;;;;N;;;;; 16F72;MIAO VOWEL SIGN YI;Mc;0;L;;;;;N;;;;; 16F73;MIAO VOWEL SIGN AE;Mc;0;L;;;;;N;;;;; 16F74;MIAO VOWEL SIGN AEE;Mc;0;L;;;;;N;;;;; 16F75;MIAO VOWEL SIGN ERR;Mc;0;L;;;;;N;;;;; 16F76;MIAO VOWEL SIGN ROUNDED ERR;Mc;0;L;;;;;N;;;;; 16F77;MIAO VOWEL SIGN ER;Mc;0;L;;;;;N;;;;; 16F78;MIAO VOWEL SIGN ROUNDED ER;Mc;0;L;;;;;N;;;;; 16F79;MIAO VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; 16F7A;MIAO VOWEL SIGN EI;Mc;0;L;;;;;N;;;;; 16F7B;MIAO VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; 16F7C;MIAO VOWEL SIGN OU;Mc;0;L;;;;;N;;;;; 16F7D;MIAO VOWEL SIGN N;Mc;0;L;;;;;N;;;;; 16F7E;MIAO VOWEL SIGN NG;Mc;0;L;;;;;N;;;;; 16F7F;MIAO VOWEL SIGN UOG;Mc;0;L;;;;;N;;;;; 16F80;MIAO VOWEL SIGN YUI;Mc;0;L;;;;;N;;;;; 16F81;MIAO VOWEL SIGN OG;Mc;0;L;;;;;N;;;;; 16F82;MIAO VOWEL SIGN OER;Mc;0;L;;;;;N;;;;; 16F83;MIAO VOWEL SIGN VW;Mc;0;L;;;;;N;;;;; 16F84;MIAO VOWEL SIGN IG;Mc;0;L;;;;;N;;;;; 16F85;MIAO VOWEL SIGN EA;Mc;0;L;;;;;N;;;;; 16F86;MIAO VOWEL SIGN IONG;Mc;0;L;;;;;N;;;;; 16F87;MIAO VOWEL SIGN UI;Mc;0;L;;;;;N;;;;; 16F8F;MIAO TONE RIGHT;Mn;0;NSM;;;;;N;;;;; 16F90;MIAO TONE TOP RIGHT;Mn;0;NSM;;;;;N;;;;; 16F91;MIAO TONE ABOVE;Mn;0;NSM;;;;;N;;;;; 16F92;MIAO TONE BELOW;Mn;0;NSM;;;;;N;;;;; 16F93;MIAO LETTER TONE-2;Lm;0;L;;;;;N;;;;; 16F94;MIAO LETTER TONE-3;Lm;0;L;;;;;N;;;;; 16F95;MIAO LETTER TONE-4;Lm;0;L;;;;;N;;;;; 16F96;MIAO LETTER TONE-5;Lm;0;L;;;;;N;;;;; 16F97;MIAO LETTER TONE-6;Lm;0;L;;;;;N;;;;; 16F98;MIAO LETTER TONE-7;Lm;0;L;;;;;N;;;;; 16F99;MIAO LETTER TONE-8;Lm;0;L;;;;;N;;;;; 16F9A;MIAO LETTER REFORMED TONE-1;Lm;0;L;;;;;N;;;;; 16F9B;MIAO LETTER REFORMED TONE-2;Lm;0;L;;;;;N;;;;; 16F9C;MIAO LETTER REFORMED TONE-4;Lm;0;L;;;;;N;;;;; 16F9D;MIAO LETTER REFORMED TONE-5;Lm;0;L;;;;;N;;;;; 16F9E;MIAO LETTER REFORMED TONE-6;Lm;0;L;;;;;N;;;;; 16F9F;MIAO LETTER REFORMED TONE-8;Lm;0;L;;;;;N;;;;; 16FE0;TANGUT ITERATION MARK;Lm;0;L;;;;;N;;;;; 16FE1;NUSHU ITERATION MARK;Lm;0;L;;;;;N;;;;; 16FE2;OLD CHINESE HOOK MARK;Po;0;ON;;;;;N;;;;; 16FE3;OLD CHINESE ITERATION MARK;Lm;0;L;;;;;N;;;;; 16FE4;KHITAN SMALL SCRIPT FILLER;Mn;0;NSM;;;;;N;;;;; 16FF0;VIETNAMESE ALTERNATE READING MARK CA;Mc;6;L;;;;;N;;;;; 16FF1;VIETNAMESE ALTERNATE READING MARK NHAY;Mc;6;L;;;;;N;;;;; 17000;;Lo;0;L;;;;;N;;;;; 187F7;;Lo;0;L;;;;;N;;;;; 18800;TANGUT COMPONENT-001;Lo;0;L;;;;;N;;;;; 18801;TANGUT COMPONENT-002;Lo;0;L;;;;;N;;;;; 18802;TANGUT COMPONENT-003;Lo;0;L;;;;;N;;;;; 18803;TANGUT COMPONENT-004;Lo;0;L;;;;;N;;;;; 18804;TANGUT COMPONENT-005;Lo;0;L;;;;;N;;;;; 18805;TANGUT COMPONENT-006;Lo;0;L;;;;;N;;;;; 18806;TANGUT COMPONENT-007;Lo;0;L;;;;;N;;;;; 18807;TANGUT COMPONENT-008;Lo;0;L;;;;;N;;;;; 18808;TANGUT COMPONENT-009;Lo;0;L;;;;;N;;;;; 18809;TANGUT COMPONENT-010;Lo;0;L;;;;;N;;;;; 1880A;TANGUT COMPONENT-011;Lo;0;L;;;;;N;;;;; 1880B;TANGUT COMPONENT-012;Lo;0;L;;;;;N;;;;; 1880C;TANGUT COMPONENT-013;Lo;0;L;;;;;N;;;;; 1880D;TANGUT COMPONENT-014;Lo;0;L;;;;;N;;;;; 1880E;TANGUT COMPONENT-015;Lo;0;L;;;;;N;;;;; 1880F;TANGUT COMPONENT-016;Lo;0;L;;;;;N;;;;; 18810;TANGUT COMPONENT-017;Lo;0;L;;;;;N;;;;; 18811;TANGUT COMPONENT-018;Lo;0;L;;;;;N;;;;; 18812;TANGUT COMPONENT-019;Lo;0;L;;;;;N;;;;; 18813;TANGUT COMPONENT-020;Lo;0;L;;;;;N;;;;; 18814;TANGUT COMPONENT-021;Lo;0;L;;;;;N;;;;; 18815;TANGUT COMPONENT-022;Lo;0;L;;;;;N;;;;; 18816;TANGUT COMPONENT-023;Lo;0;L;;;;;N;;;;; 18817;TANGUT COMPONENT-024;Lo;0;L;;;;;N;;;;; 18818;TANGUT COMPONENT-025;Lo;0;L;;;;;N;;;;; 18819;TANGUT COMPONENT-026;Lo;0;L;;;;;N;;;;; 1881A;TANGUT COMPONENT-027;Lo;0;L;;;;;N;;;;; 1881B;TANGUT COMPONENT-028;Lo;0;L;;;;;N;;;;; 1881C;TANGUT COMPONENT-029;Lo;0;L;;;;;N;;;;; 1881D;TANGUT COMPONENT-030;Lo;0;L;;;;;N;;;;; 1881E;TANGUT COMPONENT-031;Lo;0;L;;;;;N;;;;; 1881F;TANGUT COMPONENT-032;Lo;0;L;;;;;N;;;;; 18820;TANGUT COMPONENT-033;Lo;0;L;;;;;N;;;;; 18821;TANGUT COMPONENT-034;Lo;0;L;;;;;N;;;;; 18822;TANGUT COMPONENT-035;Lo;0;L;;;;;N;;;;; 18823;TANGUT COMPONENT-036;Lo;0;L;;;;;N;;;;; 18824;TANGUT COMPONENT-037;Lo;0;L;;;;;N;;;;; 18825;TANGUT COMPONENT-038;Lo;0;L;;;;;N;;;;; 18826;TANGUT COMPONENT-039;Lo;0;L;;;;;N;;;;; 18827;TANGUT COMPONENT-040;Lo;0;L;;;;;N;;;;; 18828;TANGUT COMPONENT-041;Lo;0;L;;;;;N;;;;; 18829;TANGUT COMPONENT-042;Lo;0;L;;;;;N;;;;; 1882A;TANGUT COMPONENT-043;Lo;0;L;;;;;N;;;;; 1882B;TANGUT COMPONENT-044;Lo;0;L;;;;;N;;;;; 1882C;TANGUT COMPONENT-045;Lo;0;L;;;;;N;;;;; 1882D;TANGUT COMPONENT-046;Lo;0;L;;;;;N;;;;; 1882E;TANGUT COMPONENT-047;Lo;0;L;;;;;N;;;;; 1882F;TANGUT COMPONENT-048;Lo;0;L;;;;;N;;;;; 18830;TANGUT COMPONENT-049;Lo;0;L;;;;;N;;;;; 18831;TANGUT COMPONENT-050;Lo;0;L;;;;;N;;;;; 18832;TANGUT COMPONENT-051;Lo;0;L;;;;;N;;;;; 18833;TANGUT COMPONENT-052;Lo;0;L;;;;;N;;;;; 18834;TANGUT COMPONENT-053;Lo;0;L;;;;;N;;;;; 18835;TANGUT COMPONENT-054;Lo;0;L;;;;;N;;;;; 18836;TANGUT COMPONENT-055;Lo;0;L;;;;;N;;;;; 18837;TANGUT COMPONENT-056;Lo;0;L;;;;;N;;;;; 18838;TANGUT COMPONENT-057;Lo;0;L;;;;;N;;;;; 18839;TANGUT COMPONENT-058;Lo;0;L;;;;;N;;;;; 1883A;TANGUT COMPONENT-059;Lo;0;L;;;;;N;;;;; 1883B;TANGUT COMPONENT-060;Lo;0;L;;;;;N;;;;; 1883C;TANGUT COMPONENT-061;Lo;0;L;;;;;N;;;;; 1883D;TANGUT COMPONENT-062;Lo;0;L;;;;;N;;;;; 1883E;TANGUT COMPONENT-063;Lo;0;L;;;;;N;;;;; 1883F;TANGUT COMPONENT-064;Lo;0;L;;;;;N;;;;; 18840;TANGUT COMPONENT-065;Lo;0;L;;;;;N;;;;; 18841;TANGUT COMPONENT-066;Lo;0;L;;;;;N;;;;; 18842;TANGUT COMPONENT-067;Lo;0;L;;;;;N;;;;; 18843;TANGUT COMPONENT-068;Lo;0;L;;;;;N;;;;; 18844;TANGUT COMPONENT-069;Lo;0;L;;;;;N;;;;; 18845;TANGUT COMPONENT-070;Lo;0;L;;;;;N;;;;; 18846;TANGUT COMPONENT-071;Lo;0;L;;;;;N;;;;; 18847;TANGUT COMPONENT-072;Lo;0;L;;;;;N;;;;; 18848;TANGUT COMPONENT-073;Lo;0;L;;;;;N;;;;; 18849;TANGUT COMPONENT-074;Lo;0;L;;;;;N;;;;; 1884A;TANGUT COMPONENT-075;Lo;0;L;;;;;N;;;;; 1884B;TANGUT COMPONENT-076;Lo;0;L;;;;;N;;;;; 1884C;TANGUT COMPONENT-077;Lo;0;L;;;;;N;;;;; 1884D;TANGUT COMPONENT-078;Lo;0;L;;;;;N;;;;; 1884E;TANGUT COMPONENT-079;Lo;0;L;;;;;N;;;;; 1884F;TANGUT COMPONENT-080;Lo;0;L;;;;;N;;;;; 18850;TANGUT COMPONENT-081;Lo;0;L;;;;;N;;;;; 18851;TANGUT COMPONENT-082;Lo;0;L;;;;;N;;;;; 18852;TANGUT COMPONENT-083;Lo;0;L;;;;;N;;;;; 18853;TANGUT COMPONENT-084;Lo;0;L;;;;;N;;;;; 18854;TANGUT COMPONENT-085;Lo;0;L;;;;;N;;;;; 18855;TANGUT COMPONENT-086;Lo;0;L;;;;;N;;;;; 18856;TANGUT COMPONENT-087;Lo;0;L;;;;;N;;;;; 18857;TANGUT COMPONENT-088;Lo;0;L;;;;;N;;;;; 18858;TANGUT COMPONENT-089;Lo;0;L;;;;;N;;;;; 18859;TANGUT COMPONENT-090;Lo;0;L;;;;;N;;;;; 1885A;TANGUT COMPONENT-091;Lo;0;L;;;;;N;;;;; 1885B;TANGUT COMPONENT-092;Lo;0;L;;;;;N;;;;; 1885C;TANGUT COMPONENT-093;Lo;0;L;;;;;N;;;;; 1885D;TANGUT COMPONENT-094;Lo;0;L;;;;;N;;;;; 1885E;TANGUT COMPONENT-095;Lo;0;L;;;;;N;;;;; 1885F;TANGUT COMPONENT-096;Lo;0;L;;;;;N;;;;; 18860;TANGUT COMPONENT-097;Lo;0;L;;;;;N;;;;; 18861;TANGUT COMPONENT-098;Lo;0;L;;;;;N;;;;; 18862;TANGUT COMPONENT-099;Lo;0;L;;;;;N;;;;; 18863;TANGUT COMPONENT-100;Lo;0;L;;;;;N;;;;; 18864;TANGUT COMPONENT-101;Lo;0;L;;;;;N;;;;; 18865;TANGUT COMPONENT-102;Lo;0;L;;;;;N;;;;; 18866;TANGUT COMPONENT-103;Lo;0;L;;;;;N;;;;; 18867;TANGUT COMPONENT-104;Lo;0;L;;;;;N;;;;; 18868;TANGUT COMPONENT-105;Lo;0;L;;;;;N;;;;; 18869;TANGUT COMPONENT-106;Lo;0;L;;;;;N;;;;; 1886A;TANGUT COMPONENT-107;Lo;0;L;;;;;N;;;;; 1886B;TANGUT COMPONENT-108;Lo;0;L;;;;;N;;;;; 1886C;TANGUT COMPONENT-109;Lo;0;L;;;;;N;;;;; 1886D;TANGUT COMPONENT-110;Lo;0;L;;;;;N;;;;; 1886E;TANGUT COMPONENT-111;Lo;0;L;;;;;N;;;;; 1886F;TANGUT COMPONENT-112;Lo;0;L;;;;;N;;;;; 18870;TANGUT COMPONENT-113;Lo;0;L;;;;;N;;;;; 18871;TANGUT COMPONENT-114;Lo;0;L;;;;;N;;;;; 18872;TANGUT COMPONENT-115;Lo;0;L;;;;;N;;;;; 18873;TANGUT COMPONENT-116;Lo;0;L;;;;;N;;;;; 18874;TANGUT COMPONENT-117;Lo;0;L;;;;;N;;;;; 18875;TANGUT COMPONENT-118;Lo;0;L;;;;;N;;;;; 18876;TANGUT COMPONENT-119;Lo;0;L;;;;;N;;;;; 18877;TANGUT COMPONENT-120;Lo;0;L;;;;;N;;;;; 18878;TANGUT COMPONENT-121;Lo;0;L;;;;;N;;;;; 18879;TANGUT COMPONENT-122;Lo;0;L;;;;;N;;;;; 1887A;TANGUT COMPONENT-123;Lo;0;L;;;;;N;;;;; 1887B;TANGUT COMPONENT-124;Lo;0;L;;;;;N;;;;; 1887C;TANGUT COMPONENT-125;Lo;0;L;;;;;N;;;;; 1887D;TANGUT COMPONENT-126;Lo;0;L;;;;;N;;;;; 1887E;TANGUT COMPONENT-127;Lo;0;L;;;;;N;;;;; 1887F;TANGUT COMPONENT-128;Lo;0;L;;;;;N;;;;; 18880;TANGUT COMPONENT-129;Lo;0;L;;;;;N;;;;; 18881;TANGUT COMPONENT-130;Lo;0;L;;;;;N;;;;; 18882;TANGUT COMPONENT-131;Lo;0;L;;;;;N;;;;; 18883;TANGUT COMPONENT-132;Lo;0;L;;;;;N;;;;; 18884;TANGUT COMPONENT-133;Lo;0;L;;;;;N;;;;; 18885;TANGUT COMPONENT-134;Lo;0;L;;;;;N;;;;; 18886;TANGUT COMPONENT-135;Lo;0;L;;;;;N;;;;; 18887;TANGUT COMPONENT-136;Lo;0;L;;;;;N;;;;; 18888;TANGUT COMPONENT-137;Lo;0;L;;;;;N;;;;; 18889;TANGUT COMPONENT-138;Lo;0;L;;;;;N;;;;; 1888A;TANGUT COMPONENT-139;Lo;0;L;;;;;N;;;;; 1888B;TANGUT COMPONENT-140;Lo;0;L;;;;;N;;;;; 1888C;TANGUT COMPONENT-141;Lo;0;L;;;;;N;;;;; 1888D;TANGUT COMPONENT-142;Lo;0;L;;;;;N;;;;; 1888E;TANGUT COMPONENT-143;Lo;0;L;;;;;N;;;;; 1888F;TANGUT COMPONENT-144;Lo;0;L;;;;;N;;;;; 18890;TANGUT COMPONENT-145;Lo;0;L;;;;;N;;;;; 18891;TANGUT COMPONENT-146;Lo;0;L;;;;;N;;;;; 18892;TANGUT COMPONENT-147;Lo;0;L;;;;;N;;;;; 18893;TANGUT COMPONENT-148;Lo;0;L;;;;;N;;;;; 18894;TANGUT COMPONENT-149;Lo;0;L;;;;;N;;;;; 18895;TANGUT COMPONENT-150;Lo;0;L;;;;;N;;;;; 18896;TANGUT COMPONENT-151;Lo;0;L;;;;;N;;;;; 18897;TANGUT COMPONENT-152;Lo;0;L;;;;;N;;;;; 18898;TANGUT COMPONENT-153;Lo;0;L;;;;;N;;;;; 18899;TANGUT COMPONENT-154;Lo;0;L;;;;;N;;;;; 1889A;TANGUT COMPONENT-155;Lo;0;L;;;;;N;;;;; 1889B;TANGUT COMPONENT-156;Lo;0;L;;;;;N;;;;; 1889C;TANGUT COMPONENT-157;Lo;0;L;;;;;N;;;;; 1889D;TANGUT COMPONENT-158;Lo;0;L;;;;;N;;;;; 1889E;TANGUT COMPONENT-159;Lo;0;L;;;;;N;;;;; 1889F;TANGUT COMPONENT-160;Lo;0;L;;;;;N;;;;; 188A0;TANGUT COMPONENT-161;Lo;0;L;;;;;N;;;;; 188A1;TANGUT COMPONENT-162;Lo;0;L;;;;;N;;;;; 188A2;TANGUT COMPONENT-163;Lo;0;L;;;;;N;;;;; 188A3;TANGUT COMPONENT-164;Lo;0;L;;;;;N;;;;; 188A4;TANGUT COMPONENT-165;Lo;0;L;;;;;N;;;;; 188A5;TANGUT COMPONENT-166;Lo;0;L;;;;;N;;;;; 188A6;TANGUT COMPONENT-167;Lo;0;L;;;;;N;;;;; 188A7;TANGUT COMPONENT-168;Lo;0;L;;;;;N;;;;; 188A8;TANGUT COMPONENT-169;Lo;0;L;;;;;N;;;;; 188A9;TANGUT COMPONENT-170;Lo;0;L;;;;;N;;;;; 188AA;TANGUT COMPONENT-171;Lo;0;L;;;;;N;;;;; 188AB;TANGUT COMPONENT-172;Lo;0;L;;;;;N;;;;; 188AC;TANGUT COMPONENT-173;Lo;0;L;;;;;N;;;;; 188AD;TANGUT COMPONENT-174;Lo;0;L;;;;;N;;;;; 188AE;TANGUT COMPONENT-175;Lo;0;L;;;;;N;;;;; 188AF;TANGUT COMPONENT-176;Lo;0;L;;;;;N;;;;; 188B0;TANGUT COMPONENT-177;Lo;0;L;;;;;N;;;;; 188B1;TANGUT COMPONENT-178;Lo;0;L;;;;;N;;;;; 188B2;TANGUT COMPONENT-179;Lo;0;L;;;;;N;;;;; 188B3;TANGUT COMPONENT-180;Lo;0;L;;;;;N;;;;; 188B4;TANGUT COMPONENT-181;Lo;0;L;;;;;N;;;;; 188B5;TANGUT COMPONENT-182;Lo;0;L;;;;;N;;;;; 188B6;TANGUT COMPONENT-183;Lo;0;L;;;;;N;;;;; 188B7;TANGUT COMPONENT-184;Lo;0;L;;;;;N;;;;; 188B8;TANGUT COMPONENT-185;Lo;0;L;;;;;N;;;;; 188B9;TANGUT COMPONENT-186;Lo;0;L;;;;;N;;;;; 188BA;TANGUT COMPONENT-187;Lo;0;L;;;;;N;;;;; 188BB;TANGUT COMPONENT-188;Lo;0;L;;;;;N;;;;; 188BC;TANGUT COMPONENT-189;Lo;0;L;;;;;N;;;;; 188BD;TANGUT COMPONENT-190;Lo;0;L;;;;;N;;;;; 188BE;TANGUT COMPONENT-191;Lo;0;L;;;;;N;;;;; 188BF;TANGUT COMPONENT-192;Lo;0;L;;;;;N;;;;; 188C0;TANGUT COMPONENT-193;Lo;0;L;;;;;N;;;;; 188C1;TANGUT COMPONENT-194;Lo;0;L;;;;;N;;;;; 188C2;TANGUT COMPONENT-195;Lo;0;L;;;;;N;;;;; 188C3;TANGUT COMPONENT-196;Lo;0;L;;;;;N;;;;; 188C4;TANGUT COMPONENT-197;Lo;0;L;;;;;N;;;;; 188C5;TANGUT COMPONENT-198;Lo;0;L;;;;;N;;;;; 188C6;TANGUT COMPONENT-199;Lo;0;L;;;;;N;;;;; 188C7;TANGUT COMPONENT-200;Lo;0;L;;;;;N;;;;; 188C8;TANGUT COMPONENT-201;Lo;0;L;;;;;N;;;;; 188C9;TANGUT COMPONENT-202;Lo;0;L;;;;;N;;;;; 188CA;TANGUT COMPONENT-203;Lo;0;L;;;;;N;;;;; 188CB;TANGUT COMPONENT-204;Lo;0;L;;;;;N;;;;; 188CC;TANGUT COMPONENT-205;Lo;0;L;;;;;N;;;;; 188CD;TANGUT COMPONENT-206;Lo;0;L;;;;;N;;;;; 188CE;TANGUT COMPONENT-207;Lo;0;L;;;;;N;;;;; 188CF;TANGUT COMPONENT-208;Lo;0;L;;;;;N;;;;; 188D0;TANGUT COMPONENT-209;Lo;0;L;;;;;N;;;;; 188D1;TANGUT COMPONENT-210;Lo;0;L;;;;;N;;;;; 188D2;TANGUT COMPONENT-211;Lo;0;L;;;;;N;;;;; 188D3;TANGUT COMPONENT-212;Lo;0;L;;;;;N;;;;; 188D4;TANGUT COMPONENT-213;Lo;0;L;;;;;N;;;;; 188D5;TANGUT COMPONENT-214;Lo;0;L;;;;;N;;;;; 188D6;TANGUT COMPONENT-215;Lo;0;L;;;;;N;;;;; 188D7;TANGUT COMPONENT-216;Lo;0;L;;;;;N;;;;; 188D8;TANGUT COMPONENT-217;Lo;0;L;;;;;N;;;;; 188D9;TANGUT COMPONENT-218;Lo;0;L;;;;;N;;;;; 188DA;TANGUT COMPONENT-219;Lo;0;L;;;;;N;;;;; 188DB;TANGUT COMPONENT-220;Lo;0;L;;;;;N;;;;; 188DC;TANGUT COMPONENT-221;Lo;0;L;;;;;N;;;;; 188DD;TANGUT COMPONENT-222;Lo;0;L;;;;;N;;;;; 188DE;TANGUT COMPONENT-223;Lo;0;L;;;;;N;;;;; 188DF;TANGUT COMPONENT-224;Lo;0;L;;;;;N;;;;; 188E0;TANGUT COMPONENT-225;Lo;0;L;;;;;N;;;;; 188E1;TANGUT COMPONENT-226;Lo;0;L;;;;;N;;;;; 188E2;TANGUT COMPONENT-227;Lo;0;L;;;;;N;;;;; 188E3;TANGUT COMPONENT-228;Lo;0;L;;;;;N;;;;; 188E4;TANGUT COMPONENT-229;Lo;0;L;;;;;N;;;;; 188E5;TANGUT COMPONENT-230;Lo;0;L;;;;;N;;;;; 188E6;TANGUT COMPONENT-231;Lo;0;L;;;;;N;;;;; 188E7;TANGUT COMPONENT-232;Lo;0;L;;;;;N;;;;; 188E8;TANGUT COMPONENT-233;Lo;0;L;;;;;N;;;;; 188E9;TANGUT COMPONENT-234;Lo;0;L;;;;;N;;;;; 188EA;TANGUT COMPONENT-235;Lo;0;L;;;;;N;;;;; 188EB;TANGUT COMPONENT-236;Lo;0;L;;;;;N;;;;; 188EC;TANGUT COMPONENT-237;Lo;0;L;;;;;N;;;;; 188ED;TANGUT COMPONENT-238;Lo;0;L;;;;;N;;;;; 188EE;TANGUT COMPONENT-239;Lo;0;L;;;;;N;;;;; 188EF;TANGUT COMPONENT-240;Lo;0;L;;;;;N;;;;; 188F0;TANGUT COMPONENT-241;Lo;0;L;;;;;N;;;;; 188F1;TANGUT COMPONENT-242;Lo;0;L;;;;;N;;;;; 188F2;TANGUT COMPONENT-243;Lo;0;L;;;;;N;;;;; 188F3;TANGUT COMPONENT-244;Lo;0;L;;;;;N;;;;; 188F4;TANGUT COMPONENT-245;Lo;0;L;;;;;N;;;;; 188F5;TANGUT COMPONENT-246;Lo;0;L;;;;;N;;;;; 188F6;TANGUT COMPONENT-247;Lo;0;L;;;;;N;;;;; 188F7;TANGUT COMPONENT-248;Lo;0;L;;;;;N;;;;; 188F8;TANGUT COMPONENT-249;Lo;0;L;;;;;N;;;;; 188F9;TANGUT COMPONENT-250;Lo;0;L;;;;;N;;;;; 188FA;TANGUT COMPONENT-251;Lo;0;L;;;;;N;;;;; 188FB;TANGUT COMPONENT-252;Lo;0;L;;;;;N;;;;; 188FC;TANGUT COMPONENT-253;Lo;0;L;;;;;N;;;;; 188FD;TANGUT COMPONENT-254;Lo;0;L;;;;;N;;;;; 188FE;TANGUT COMPONENT-255;Lo;0;L;;;;;N;;;;; 188FF;TANGUT COMPONENT-256;Lo;0;L;;;;;N;;;;; 18900;TANGUT COMPONENT-257;Lo;0;L;;;;;N;;;;; 18901;TANGUT COMPONENT-258;Lo;0;L;;;;;N;;;;; 18902;TANGUT COMPONENT-259;Lo;0;L;;;;;N;;;;; 18903;TANGUT COMPONENT-260;Lo;0;L;;;;;N;;;;; 18904;TANGUT COMPONENT-261;Lo;0;L;;;;;N;;;;; 18905;TANGUT COMPONENT-262;Lo;0;L;;;;;N;;;;; 18906;TANGUT COMPONENT-263;Lo;0;L;;;;;N;;;;; 18907;TANGUT COMPONENT-264;Lo;0;L;;;;;N;;;;; 18908;TANGUT COMPONENT-265;Lo;0;L;;;;;N;;;;; 18909;TANGUT COMPONENT-266;Lo;0;L;;;;;N;;;;; 1890A;TANGUT COMPONENT-267;Lo;0;L;;;;;N;;;;; 1890B;TANGUT COMPONENT-268;Lo;0;L;;;;;N;;;;; 1890C;TANGUT COMPONENT-269;Lo;0;L;;;;;N;;;;; 1890D;TANGUT COMPONENT-270;Lo;0;L;;;;;N;;;;; 1890E;TANGUT COMPONENT-271;Lo;0;L;;;;;N;;;;; 1890F;TANGUT COMPONENT-272;Lo;0;L;;;;;N;;;;; 18910;TANGUT COMPONENT-273;Lo;0;L;;;;;N;;;;; 18911;TANGUT COMPONENT-274;Lo;0;L;;;;;N;;;;; 18912;TANGUT COMPONENT-275;Lo;0;L;;;;;N;;;;; 18913;TANGUT COMPONENT-276;Lo;0;L;;;;;N;;;;; 18914;TANGUT COMPONENT-277;Lo;0;L;;;;;N;;;;; 18915;TANGUT COMPONENT-278;Lo;0;L;;;;;N;;;;; 18916;TANGUT COMPONENT-279;Lo;0;L;;;;;N;;;;; 18917;TANGUT COMPONENT-280;Lo;0;L;;;;;N;;;;; 18918;TANGUT COMPONENT-281;Lo;0;L;;;;;N;;;;; 18919;TANGUT COMPONENT-282;Lo;0;L;;;;;N;;;;; 1891A;TANGUT COMPONENT-283;Lo;0;L;;;;;N;;;;; 1891B;TANGUT COMPONENT-284;Lo;0;L;;;;;N;;;;; 1891C;TANGUT COMPONENT-285;Lo;0;L;;;;;N;;;;; 1891D;TANGUT COMPONENT-286;Lo;0;L;;;;;N;;;;; 1891E;TANGUT COMPONENT-287;Lo;0;L;;;;;N;;;;; 1891F;TANGUT COMPONENT-288;Lo;0;L;;;;;N;;;;; 18920;TANGUT COMPONENT-289;Lo;0;L;;;;;N;;;;; 18921;TANGUT COMPONENT-290;Lo;0;L;;;;;N;;;;; 18922;TANGUT COMPONENT-291;Lo;0;L;;;;;N;;;;; 18923;TANGUT COMPONENT-292;Lo;0;L;;;;;N;;;;; 18924;TANGUT COMPONENT-293;Lo;0;L;;;;;N;;;;; 18925;TANGUT COMPONENT-294;Lo;0;L;;;;;N;;;;; 18926;TANGUT COMPONENT-295;Lo;0;L;;;;;N;;;;; 18927;TANGUT COMPONENT-296;Lo;0;L;;;;;N;;;;; 18928;TANGUT COMPONENT-297;Lo;0;L;;;;;N;;;;; 18929;TANGUT COMPONENT-298;Lo;0;L;;;;;N;;;;; 1892A;TANGUT COMPONENT-299;Lo;0;L;;;;;N;;;;; 1892B;TANGUT COMPONENT-300;Lo;0;L;;;;;N;;;;; 1892C;TANGUT COMPONENT-301;Lo;0;L;;;;;N;;;;; 1892D;TANGUT COMPONENT-302;Lo;0;L;;;;;N;;;;; 1892E;TANGUT COMPONENT-303;Lo;0;L;;;;;N;;;;; 1892F;TANGUT COMPONENT-304;Lo;0;L;;;;;N;;;;; 18930;TANGUT COMPONENT-305;Lo;0;L;;;;;N;;;;; 18931;TANGUT COMPONENT-306;Lo;0;L;;;;;N;;;;; 18932;TANGUT COMPONENT-307;Lo;0;L;;;;;N;;;;; 18933;TANGUT COMPONENT-308;Lo;0;L;;;;;N;;;;; 18934;TANGUT COMPONENT-309;Lo;0;L;;;;;N;;;;; 18935;TANGUT COMPONENT-310;Lo;0;L;;;;;N;;;;; 18936;TANGUT COMPONENT-311;Lo;0;L;;;;;N;;;;; 18937;TANGUT COMPONENT-312;Lo;0;L;;;;;N;;;;; 18938;TANGUT COMPONENT-313;Lo;0;L;;;;;N;;;;; 18939;TANGUT COMPONENT-314;Lo;0;L;;;;;N;;;;; 1893A;TANGUT COMPONENT-315;Lo;0;L;;;;;N;;;;; 1893B;TANGUT COMPONENT-316;Lo;0;L;;;;;N;;;;; 1893C;TANGUT COMPONENT-317;Lo;0;L;;;;;N;;;;; 1893D;TANGUT COMPONENT-318;Lo;0;L;;;;;N;;;;; 1893E;TANGUT COMPONENT-319;Lo;0;L;;;;;N;;;;; 1893F;TANGUT COMPONENT-320;Lo;0;L;;;;;N;;;;; 18940;TANGUT COMPONENT-321;Lo;0;L;;;;;N;;;;; 18941;TANGUT COMPONENT-322;Lo;0;L;;;;;N;;;;; 18942;TANGUT COMPONENT-323;Lo;0;L;;;;;N;;;;; 18943;TANGUT COMPONENT-324;Lo;0;L;;;;;N;;;;; 18944;TANGUT COMPONENT-325;Lo;0;L;;;;;N;;;;; 18945;TANGUT COMPONENT-326;Lo;0;L;;;;;N;;;;; 18946;TANGUT COMPONENT-327;Lo;0;L;;;;;N;;;;; 18947;TANGUT COMPONENT-328;Lo;0;L;;;;;N;;;;; 18948;TANGUT COMPONENT-329;Lo;0;L;;;;;N;;;;; 18949;TANGUT COMPONENT-330;Lo;0;L;;;;;N;;;;; 1894A;TANGUT COMPONENT-331;Lo;0;L;;;;;N;;;;; 1894B;TANGUT COMPONENT-332;Lo;0;L;;;;;N;;;;; 1894C;TANGUT COMPONENT-333;Lo;0;L;;;;;N;;;;; 1894D;TANGUT COMPONENT-334;Lo;0;L;;;;;N;;;;; 1894E;TANGUT COMPONENT-335;Lo;0;L;;;;;N;;;;; 1894F;TANGUT COMPONENT-336;Lo;0;L;;;;;N;;;;; 18950;TANGUT COMPONENT-337;Lo;0;L;;;;;N;;;;; 18951;TANGUT COMPONENT-338;Lo;0;L;;;;;N;;;;; 18952;TANGUT COMPONENT-339;Lo;0;L;;;;;N;;;;; 18953;TANGUT COMPONENT-340;Lo;0;L;;;;;N;;;;; 18954;TANGUT COMPONENT-341;Lo;0;L;;;;;N;;;;; 18955;TANGUT COMPONENT-342;Lo;0;L;;;;;N;;;;; 18956;TANGUT COMPONENT-343;Lo;0;L;;;;;N;;;;; 18957;TANGUT COMPONENT-344;Lo;0;L;;;;;N;;;;; 18958;TANGUT COMPONENT-345;Lo;0;L;;;;;N;;;;; 18959;TANGUT COMPONENT-346;Lo;0;L;;;;;N;;;;; 1895A;TANGUT COMPONENT-347;Lo;0;L;;;;;N;;;;; 1895B;TANGUT COMPONENT-348;Lo;0;L;;;;;N;;;;; 1895C;TANGUT COMPONENT-349;Lo;0;L;;;;;N;;;;; 1895D;TANGUT COMPONENT-350;Lo;0;L;;;;;N;;;;; 1895E;TANGUT COMPONENT-351;Lo;0;L;;;;;N;;;;; 1895F;TANGUT COMPONENT-352;Lo;0;L;;;;;N;;;;; 18960;TANGUT COMPONENT-353;Lo;0;L;;;;;N;;;;; 18961;TANGUT COMPONENT-354;Lo;0;L;;;;;N;;;;; 18962;TANGUT COMPONENT-355;Lo;0;L;;;;;N;;;;; 18963;TANGUT COMPONENT-356;Lo;0;L;;;;;N;;;;; 18964;TANGUT COMPONENT-357;Lo;0;L;;;;;N;;;;; 18965;TANGUT COMPONENT-358;Lo;0;L;;;;;N;;;;; 18966;TANGUT COMPONENT-359;Lo;0;L;;;;;N;;;;; 18967;TANGUT COMPONENT-360;Lo;0;L;;;;;N;;;;; 18968;TANGUT COMPONENT-361;Lo;0;L;;;;;N;;;;; 18969;TANGUT COMPONENT-362;Lo;0;L;;;;;N;;;;; 1896A;TANGUT COMPONENT-363;Lo;0;L;;;;;N;;;;; 1896B;TANGUT COMPONENT-364;Lo;0;L;;;;;N;;;;; 1896C;TANGUT COMPONENT-365;Lo;0;L;;;;;N;;;;; 1896D;TANGUT COMPONENT-366;Lo;0;L;;;;;N;;;;; 1896E;TANGUT COMPONENT-367;Lo;0;L;;;;;N;;;;; 1896F;TANGUT COMPONENT-368;Lo;0;L;;;;;N;;;;; 18970;TANGUT COMPONENT-369;Lo;0;L;;;;;N;;;;; 18971;TANGUT COMPONENT-370;Lo;0;L;;;;;N;;;;; 18972;TANGUT COMPONENT-371;Lo;0;L;;;;;N;;;;; 18973;TANGUT COMPONENT-372;Lo;0;L;;;;;N;;;;; 18974;TANGUT COMPONENT-373;Lo;0;L;;;;;N;;;;; 18975;TANGUT COMPONENT-374;Lo;0;L;;;;;N;;;;; 18976;TANGUT COMPONENT-375;Lo;0;L;;;;;N;;;;; 18977;TANGUT COMPONENT-376;Lo;0;L;;;;;N;;;;; 18978;TANGUT COMPONENT-377;Lo;0;L;;;;;N;;;;; 18979;TANGUT COMPONENT-378;Lo;0;L;;;;;N;;;;; 1897A;TANGUT COMPONENT-379;Lo;0;L;;;;;N;;;;; 1897B;TANGUT COMPONENT-380;Lo;0;L;;;;;N;;;;; 1897C;TANGUT COMPONENT-381;Lo;0;L;;;;;N;;;;; 1897D;TANGUT COMPONENT-382;Lo;0;L;;;;;N;;;;; 1897E;TANGUT COMPONENT-383;Lo;0;L;;;;;N;;;;; 1897F;TANGUT COMPONENT-384;Lo;0;L;;;;;N;;;;; 18980;TANGUT COMPONENT-385;Lo;0;L;;;;;N;;;;; 18981;TANGUT COMPONENT-386;Lo;0;L;;;;;N;;;;; 18982;TANGUT COMPONENT-387;Lo;0;L;;;;;N;;;;; 18983;TANGUT COMPONENT-388;Lo;0;L;;;;;N;;;;; 18984;TANGUT COMPONENT-389;Lo;0;L;;;;;N;;;;; 18985;TANGUT COMPONENT-390;Lo;0;L;;;;;N;;;;; 18986;TANGUT COMPONENT-391;Lo;0;L;;;;;N;;;;; 18987;TANGUT COMPONENT-392;Lo;0;L;;;;;N;;;;; 18988;TANGUT COMPONENT-393;Lo;0;L;;;;;N;;;;; 18989;TANGUT COMPONENT-394;Lo;0;L;;;;;N;;;;; 1898A;TANGUT COMPONENT-395;Lo;0;L;;;;;N;;;;; 1898B;TANGUT COMPONENT-396;Lo;0;L;;;;;N;;;;; 1898C;TANGUT COMPONENT-397;Lo;0;L;;;;;N;;;;; 1898D;TANGUT COMPONENT-398;Lo;0;L;;;;;N;;;;; 1898E;TANGUT COMPONENT-399;Lo;0;L;;;;;N;;;;; 1898F;TANGUT COMPONENT-400;Lo;0;L;;;;;N;;;;; 18990;TANGUT COMPONENT-401;Lo;0;L;;;;;N;;;;; 18991;TANGUT COMPONENT-402;Lo;0;L;;;;;N;;;;; 18992;TANGUT COMPONENT-403;Lo;0;L;;;;;N;;;;; 18993;TANGUT COMPONENT-404;Lo;0;L;;;;;N;;;;; 18994;TANGUT COMPONENT-405;Lo;0;L;;;;;N;;;;; 18995;TANGUT COMPONENT-406;Lo;0;L;;;;;N;;;;; 18996;TANGUT COMPONENT-407;Lo;0;L;;;;;N;;;;; 18997;TANGUT COMPONENT-408;Lo;0;L;;;;;N;;;;; 18998;TANGUT COMPONENT-409;Lo;0;L;;;;;N;;;;; 18999;TANGUT COMPONENT-410;Lo;0;L;;;;;N;;;;; 1899A;TANGUT COMPONENT-411;Lo;0;L;;;;;N;;;;; 1899B;TANGUT COMPONENT-412;Lo;0;L;;;;;N;;;;; 1899C;TANGUT COMPONENT-413;Lo;0;L;;;;;N;;;;; 1899D;TANGUT COMPONENT-414;Lo;0;L;;;;;N;;;;; 1899E;TANGUT COMPONENT-415;Lo;0;L;;;;;N;;;;; 1899F;TANGUT COMPONENT-416;Lo;0;L;;;;;N;;;;; 189A0;TANGUT COMPONENT-417;Lo;0;L;;;;;N;;;;; 189A1;TANGUT COMPONENT-418;Lo;0;L;;;;;N;;;;; 189A2;TANGUT COMPONENT-419;Lo;0;L;;;;;N;;;;; 189A3;TANGUT COMPONENT-420;Lo;0;L;;;;;N;;;;; 189A4;TANGUT COMPONENT-421;Lo;0;L;;;;;N;;;;; 189A5;TANGUT COMPONENT-422;Lo;0;L;;;;;N;;;;; 189A6;TANGUT COMPONENT-423;Lo;0;L;;;;;N;;;;; 189A7;TANGUT COMPONENT-424;Lo;0;L;;;;;N;;;;; 189A8;TANGUT COMPONENT-425;Lo;0;L;;;;;N;;;;; 189A9;TANGUT COMPONENT-426;Lo;0;L;;;;;N;;;;; 189AA;TANGUT COMPONENT-427;Lo;0;L;;;;;N;;;;; 189AB;TANGUT COMPONENT-428;Lo;0;L;;;;;N;;;;; 189AC;TANGUT COMPONENT-429;Lo;0;L;;;;;N;;;;; 189AD;TANGUT COMPONENT-430;Lo;0;L;;;;;N;;;;; 189AE;TANGUT COMPONENT-431;Lo;0;L;;;;;N;;;;; 189AF;TANGUT COMPONENT-432;Lo;0;L;;;;;N;;;;; 189B0;TANGUT COMPONENT-433;Lo;0;L;;;;;N;;;;; 189B1;TANGUT COMPONENT-434;Lo;0;L;;;;;N;;;;; 189B2;TANGUT COMPONENT-435;Lo;0;L;;;;;N;;;;; 189B3;TANGUT COMPONENT-436;Lo;0;L;;;;;N;;;;; 189B4;TANGUT COMPONENT-437;Lo;0;L;;;;;N;;;;; 189B5;TANGUT COMPONENT-438;Lo;0;L;;;;;N;;;;; 189B6;TANGUT COMPONENT-439;Lo;0;L;;;;;N;;;;; 189B7;TANGUT COMPONENT-440;Lo;0;L;;;;;N;;;;; 189B8;TANGUT COMPONENT-441;Lo;0;L;;;;;N;;;;; 189B9;TANGUT COMPONENT-442;Lo;0;L;;;;;N;;;;; 189BA;TANGUT COMPONENT-443;Lo;0;L;;;;;N;;;;; 189BB;TANGUT COMPONENT-444;Lo;0;L;;;;;N;;;;; 189BC;TANGUT COMPONENT-445;Lo;0;L;;;;;N;;;;; 189BD;TANGUT COMPONENT-446;Lo;0;L;;;;;N;;;;; 189BE;TANGUT COMPONENT-447;Lo;0;L;;;;;N;;;;; 189BF;TANGUT COMPONENT-448;Lo;0;L;;;;;N;;;;; 189C0;TANGUT COMPONENT-449;Lo;0;L;;;;;N;;;;; 189C1;TANGUT COMPONENT-450;Lo;0;L;;;;;N;;;;; 189C2;TANGUT COMPONENT-451;Lo;0;L;;;;;N;;;;; 189C3;TANGUT COMPONENT-452;Lo;0;L;;;;;N;;;;; 189C4;TANGUT COMPONENT-453;Lo;0;L;;;;;N;;;;; 189C5;TANGUT COMPONENT-454;Lo;0;L;;;;;N;;;;; 189C6;TANGUT COMPONENT-455;Lo;0;L;;;;;N;;;;; 189C7;TANGUT COMPONENT-456;Lo;0;L;;;;;N;;;;; 189C8;TANGUT COMPONENT-457;Lo;0;L;;;;;N;;;;; 189C9;TANGUT COMPONENT-458;Lo;0;L;;;;;N;;;;; 189CA;TANGUT COMPONENT-459;Lo;0;L;;;;;N;;;;; 189CB;TANGUT COMPONENT-460;Lo;0;L;;;;;N;;;;; 189CC;TANGUT COMPONENT-461;Lo;0;L;;;;;N;;;;; 189CD;TANGUT COMPONENT-462;Lo;0;L;;;;;N;;;;; 189CE;TANGUT COMPONENT-463;Lo;0;L;;;;;N;;;;; 189CF;TANGUT COMPONENT-464;Lo;0;L;;;;;N;;;;; 189D0;TANGUT COMPONENT-465;Lo;0;L;;;;;N;;;;; 189D1;TANGUT COMPONENT-466;Lo;0;L;;;;;N;;;;; 189D2;TANGUT COMPONENT-467;Lo;0;L;;;;;N;;;;; 189D3;TANGUT COMPONENT-468;Lo;0;L;;;;;N;;;;; 189D4;TANGUT COMPONENT-469;Lo;0;L;;;;;N;;;;; 189D5;TANGUT COMPONENT-470;Lo;0;L;;;;;N;;;;; 189D6;TANGUT COMPONENT-471;Lo;0;L;;;;;N;;;;; 189D7;TANGUT COMPONENT-472;Lo;0;L;;;;;N;;;;; 189D8;TANGUT COMPONENT-473;Lo;0;L;;;;;N;;;;; 189D9;TANGUT COMPONENT-474;Lo;0;L;;;;;N;;;;; 189DA;TANGUT COMPONENT-475;Lo;0;L;;;;;N;;;;; 189DB;TANGUT COMPONENT-476;Lo;0;L;;;;;N;;;;; 189DC;TANGUT COMPONENT-477;Lo;0;L;;;;;N;;;;; 189DD;TANGUT COMPONENT-478;Lo;0;L;;;;;N;;;;; 189DE;TANGUT COMPONENT-479;Lo;0;L;;;;;N;;;;; 189DF;TANGUT COMPONENT-480;Lo;0;L;;;;;N;;;;; 189E0;TANGUT COMPONENT-481;Lo;0;L;;;;;N;;;;; 189E1;TANGUT COMPONENT-482;Lo;0;L;;;;;N;;;;; 189E2;TANGUT COMPONENT-483;Lo;0;L;;;;;N;;;;; 189E3;TANGUT COMPONENT-484;Lo;0;L;;;;;N;;;;; 189E4;TANGUT COMPONENT-485;Lo;0;L;;;;;N;;;;; 189E5;TANGUT COMPONENT-486;Lo;0;L;;;;;N;;;;; 189E6;TANGUT COMPONENT-487;Lo;0;L;;;;;N;;;;; 189E7;TANGUT COMPONENT-488;Lo;0;L;;;;;N;;;;; 189E8;TANGUT COMPONENT-489;Lo;0;L;;;;;N;;;;; 189E9;TANGUT COMPONENT-490;Lo;0;L;;;;;N;;;;; 189EA;TANGUT COMPONENT-491;Lo;0;L;;;;;N;;;;; 189EB;TANGUT COMPONENT-492;Lo;0;L;;;;;N;;;;; 189EC;TANGUT COMPONENT-493;Lo;0;L;;;;;N;;;;; 189ED;TANGUT COMPONENT-494;Lo;0;L;;;;;N;;;;; 189EE;TANGUT COMPONENT-495;Lo;0;L;;;;;N;;;;; 189EF;TANGUT COMPONENT-496;Lo;0;L;;;;;N;;;;; 189F0;TANGUT COMPONENT-497;Lo;0;L;;;;;N;;;;; 189F1;TANGUT COMPONENT-498;Lo;0;L;;;;;N;;;;; 189F2;TANGUT COMPONENT-499;Lo;0;L;;;;;N;;;;; 189F3;TANGUT COMPONENT-500;Lo;0;L;;;;;N;;;;; 189F4;TANGUT COMPONENT-501;Lo;0;L;;;;;N;;;;; 189F5;TANGUT COMPONENT-502;Lo;0;L;;;;;N;;;;; 189F6;TANGUT COMPONENT-503;Lo;0;L;;;;;N;;;;; 189F7;TANGUT COMPONENT-504;Lo;0;L;;;;;N;;;;; 189F8;TANGUT COMPONENT-505;Lo;0;L;;;;;N;;;;; 189F9;TANGUT COMPONENT-506;Lo;0;L;;;;;N;;;;; 189FA;TANGUT COMPONENT-507;Lo;0;L;;;;;N;;;;; 189FB;TANGUT COMPONENT-508;Lo;0;L;;;;;N;;;;; 189FC;TANGUT COMPONENT-509;Lo;0;L;;;;;N;;;;; 189FD;TANGUT COMPONENT-510;Lo;0;L;;;;;N;;;;; 189FE;TANGUT COMPONENT-511;Lo;0;L;;;;;N;;;;; 189FF;TANGUT COMPONENT-512;Lo;0;L;;;;;N;;;;; 18A00;TANGUT COMPONENT-513;Lo;0;L;;;;;N;;;;; 18A01;TANGUT COMPONENT-514;Lo;0;L;;;;;N;;;;; 18A02;TANGUT COMPONENT-515;Lo;0;L;;;;;N;;;;; 18A03;TANGUT COMPONENT-516;Lo;0;L;;;;;N;;;;; 18A04;TANGUT COMPONENT-517;Lo;0;L;;;;;N;;;;; 18A05;TANGUT COMPONENT-518;Lo;0;L;;;;;N;;;;; 18A06;TANGUT COMPONENT-519;Lo;0;L;;;;;N;;;;; 18A07;TANGUT COMPONENT-520;Lo;0;L;;;;;N;;;;; 18A08;TANGUT COMPONENT-521;Lo;0;L;;;;;N;;;;; 18A09;TANGUT COMPONENT-522;Lo;0;L;;;;;N;;;;; 18A0A;TANGUT COMPONENT-523;Lo;0;L;;;;;N;;;;; 18A0B;TANGUT COMPONENT-524;Lo;0;L;;;;;N;;;;; 18A0C;TANGUT COMPONENT-525;Lo;0;L;;;;;N;;;;; 18A0D;TANGUT COMPONENT-526;Lo;0;L;;;;;N;;;;; 18A0E;TANGUT COMPONENT-527;Lo;0;L;;;;;N;;;;; 18A0F;TANGUT COMPONENT-528;Lo;0;L;;;;;N;;;;; 18A10;TANGUT COMPONENT-529;Lo;0;L;;;;;N;;;;; 18A11;TANGUT COMPONENT-530;Lo;0;L;;;;;N;;;;; 18A12;TANGUT COMPONENT-531;Lo;0;L;;;;;N;;;;; 18A13;TANGUT COMPONENT-532;Lo;0;L;;;;;N;;;;; 18A14;TANGUT COMPONENT-533;Lo;0;L;;;;;N;;;;; 18A15;TANGUT COMPONENT-534;Lo;0;L;;;;;N;;;;; 18A16;TANGUT COMPONENT-535;Lo;0;L;;;;;N;;;;; 18A17;TANGUT COMPONENT-536;Lo;0;L;;;;;N;;;;; 18A18;TANGUT COMPONENT-537;Lo;0;L;;;;;N;;;;; 18A19;TANGUT COMPONENT-538;Lo;0;L;;;;;N;;;;; 18A1A;TANGUT COMPONENT-539;Lo;0;L;;;;;N;;;;; 18A1B;TANGUT COMPONENT-540;Lo;0;L;;;;;N;;;;; 18A1C;TANGUT COMPONENT-541;Lo;0;L;;;;;N;;;;; 18A1D;TANGUT COMPONENT-542;Lo;0;L;;;;;N;;;;; 18A1E;TANGUT COMPONENT-543;Lo;0;L;;;;;N;;;;; 18A1F;TANGUT COMPONENT-544;Lo;0;L;;;;;N;;;;; 18A20;TANGUT COMPONENT-545;Lo;0;L;;;;;N;;;;; 18A21;TANGUT COMPONENT-546;Lo;0;L;;;;;N;;;;; 18A22;TANGUT COMPONENT-547;Lo;0;L;;;;;N;;;;; 18A23;TANGUT COMPONENT-548;Lo;0;L;;;;;N;;;;; 18A24;TANGUT COMPONENT-549;Lo;0;L;;;;;N;;;;; 18A25;TANGUT COMPONENT-550;Lo;0;L;;;;;N;;;;; 18A26;TANGUT COMPONENT-551;Lo;0;L;;;;;N;;;;; 18A27;TANGUT COMPONENT-552;Lo;0;L;;;;;N;;;;; 18A28;TANGUT COMPONENT-553;Lo;0;L;;;;;N;;;;; 18A29;TANGUT COMPONENT-554;Lo;0;L;;;;;N;;;;; 18A2A;TANGUT COMPONENT-555;Lo;0;L;;;;;N;;;;; 18A2B;TANGUT COMPONENT-556;Lo;0;L;;;;;N;;;;; 18A2C;TANGUT COMPONENT-557;Lo;0;L;;;;;N;;;;; 18A2D;TANGUT COMPONENT-558;Lo;0;L;;;;;N;;;;; 18A2E;TANGUT COMPONENT-559;Lo;0;L;;;;;N;;;;; 18A2F;TANGUT COMPONENT-560;Lo;0;L;;;;;N;;;;; 18A30;TANGUT COMPONENT-561;Lo;0;L;;;;;N;;;;; 18A31;TANGUT COMPONENT-562;Lo;0;L;;;;;N;;;;; 18A32;TANGUT COMPONENT-563;Lo;0;L;;;;;N;;;;; 18A33;TANGUT COMPONENT-564;Lo;0;L;;;;;N;;;;; 18A34;TANGUT COMPONENT-565;Lo;0;L;;;;;N;;;;; 18A35;TANGUT COMPONENT-566;Lo;0;L;;;;;N;;;;; 18A36;TANGUT COMPONENT-567;Lo;0;L;;;;;N;;;;; 18A37;TANGUT COMPONENT-568;Lo;0;L;;;;;N;;;;; 18A38;TANGUT COMPONENT-569;Lo;0;L;;;;;N;;;;; 18A39;TANGUT COMPONENT-570;Lo;0;L;;;;;N;;;;; 18A3A;TANGUT COMPONENT-571;Lo;0;L;;;;;N;;;;; 18A3B;TANGUT COMPONENT-572;Lo;0;L;;;;;N;;;;; 18A3C;TANGUT COMPONENT-573;Lo;0;L;;;;;N;;;;; 18A3D;TANGUT COMPONENT-574;Lo;0;L;;;;;N;;;;; 18A3E;TANGUT COMPONENT-575;Lo;0;L;;;;;N;;;;; 18A3F;TANGUT COMPONENT-576;Lo;0;L;;;;;N;;;;; 18A40;TANGUT COMPONENT-577;Lo;0;L;;;;;N;;;;; 18A41;TANGUT COMPONENT-578;Lo;0;L;;;;;N;;;;; 18A42;TANGUT COMPONENT-579;Lo;0;L;;;;;N;;;;; 18A43;TANGUT COMPONENT-580;Lo;0;L;;;;;N;;;;; 18A44;TANGUT COMPONENT-581;Lo;0;L;;;;;N;;;;; 18A45;TANGUT COMPONENT-582;Lo;0;L;;;;;N;;;;; 18A46;TANGUT COMPONENT-583;Lo;0;L;;;;;N;;;;; 18A47;TANGUT COMPONENT-584;Lo;0;L;;;;;N;;;;; 18A48;TANGUT COMPONENT-585;Lo;0;L;;;;;N;;;;; 18A49;TANGUT COMPONENT-586;Lo;0;L;;;;;N;;;;; 18A4A;TANGUT COMPONENT-587;Lo;0;L;;;;;N;;;;; 18A4B;TANGUT COMPONENT-588;Lo;0;L;;;;;N;;;;; 18A4C;TANGUT COMPONENT-589;Lo;0;L;;;;;N;;;;; 18A4D;TANGUT COMPONENT-590;Lo;0;L;;;;;N;;;;; 18A4E;TANGUT COMPONENT-591;Lo;0;L;;;;;N;;;;; 18A4F;TANGUT COMPONENT-592;Lo;0;L;;;;;N;;;;; 18A50;TANGUT COMPONENT-593;Lo;0;L;;;;;N;;;;; 18A51;TANGUT COMPONENT-594;Lo;0;L;;;;;N;;;;; 18A52;TANGUT COMPONENT-595;Lo;0;L;;;;;N;;;;; 18A53;TANGUT COMPONENT-596;Lo;0;L;;;;;N;;;;; 18A54;TANGUT COMPONENT-597;Lo;0;L;;;;;N;;;;; 18A55;TANGUT COMPONENT-598;Lo;0;L;;;;;N;;;;; 18A56;TANGUT COMPONENT-599;Lo;0;L;;;;;N;;;;; 18A57;TANGUT COMPONENT-600;Lo;0;L;;;;;N;;;;; 18A58;TANGUT COMPONENT-601;Lo;0;L;;;;;N;;;;; 18A59;TANGUT COMPONENT-602;Lo;0;L;;;;;N;;;;; 18A5A;TANGUT COMPONENT-603;Lo;0;L;;;;;N;;;;; 18A5B;TANGUT COMPONENT-604;Lo;0;L;;;;;N;;;;; 18A5C;TANGUT COMPONENT-605;Lo;0;L;;;;;N;;;;; 18A5D;TANGUT COMPONENT-606;Lo;0;L;;;;;N;;;;; 18A5E;TANGUT COMPONENT-607;Lo;0;L;;;;;N;;;;; 18A5F;TANGUT COMPONENT-608;Lo;0;L;;;;;N;;;;; 18A60;TANGUT COMPONENT-609;Lo;0;L;;;;;N;;;;; 18A61;TANGUT COMPONENT-610;Lo;0;L;;;;;N;;;;; 18A62;TANGUT COMPONENT-611;Lo;0;L;;;;;N;;;;; 18A63;TANGUT COMPONENT-612;Lo;0;L;;;;;N;;;;; 18A64;TANGUT COMPONENT-613;Lo;0;L;;;;;N;;;;; 18A65;TANGUT COMPONENT-614;Lo;0;L;;;;;N;;;;; 18A66;TANGUT COMPONENT-615;Lo;0;L;;;;;N;;;;; 18A67;TANGUT COMPONENT-616;Lo;0;L;;;;;N;;;;; 18A68;TANGUT COMPONENT-617;Lo;0;L;;;;;N;;;;; 18A69;TANGUT COMPONENT-618;Lo;0;L;;;;;N;;;;; 18A6A;TANGUT COMPONENT-619;Lo;0;L;;;;;N;;;;; 18A6B;TANGUT COMPONENT-620;Lo;0;L;;;;;N;;;;; 18A6C;TANGUT COMPONENT-621;Lo;0;L;;;;;N;;;;; 18A6D;TANGUT COMPONENT-622;Lo;0;L;;;;;N;;;;; 18A6E;TANGUT COMPONENT-623;Lo;0;L;;;;;N;;;;; 18A6F;TANGUT COMPONENT-624;Lo;0;L;;;;;N;;;;; 18A70;TANGUT COMPONENT-625;Lo;0;L;;;;;N;;;;; 18A71;TANGUT COMPONENT-626;Lo;0;L;;;;;N;;;;; 18A72;TANGUT COMPONENT-627;Lo;0;L;;;;;N;;;;; 18A73;TANGUT COMPONENT-628;Lo;0;L;;;;;N;;;;; 18A74;TANGUT COMPONENT-629;Lo;0;L;;;;;N;;;;; 18A75;TANGUT COMPONENT-630;Lo;0;L;;;;;N;;;;; 18A76;TANGUT COMPONENT-631;Lo;0;L;;;;;N;;;;; 18A77;TANGUT COMPONENT-632;Lo;0;L;;;;;N;;;;; 18A78;TANGUT COMPONENT-633;Lo;0;L;;;;;N;;;;; 18A79;TANGUT COMPONENT-634;Lo;0;L;;;;;N;;;;; 18A7A;TANGUT COMPONENT-635;Lo;0;L;;;;;N;;;;; 18A7B;TANGUT COMPONENT-636;Lo;0;L;;;;;N;;;;; 18A7C;TANGUT COMPONENT-637;Lo;0;L;;;;;N;;;;; 18A7D;TANGUT COMPONENT-638;Lo;0;L;;;;;N;;;;; 18A7E;TANGUT COMPONENT-639;Lo;0;L;;;;;N;;;;; 18A7F;TANGUT COMPONENT-640;Lo;0;L;;;;;N;;;;; 18A80;TANGUT COMPONENT-641;Lo;0;L;;;;;N;;;;; 18A81;TANGUT COMPONENT-642;Lo;0;L;;;;;N;;;;; 18A82;TANGUT COMPONENT-643;Lo;0;L;;;;;N;;;;; 18A83;TANGUT COMPONENT-644;Lo;0;L;;;;;N;;;;; 18A84;TANGUT COMPONENT-645;Lo;0;L;;;;;N;;;;; 18A85;TANGUT COMPONENT-646;Lo;0;L;;;;;N;;;;; 18A86;TANGUT COMPONENT-647;Lo;0;L;;;;;N;;;;; 18A87;TANGUT COMPONENT-648;Lo;0;L;;;;;N;;;;; 18A88;TANGUT COMPONENT-649;Lo;0;L;;;;;N;;;;; 18A89;TANGUT COMPONENT-650;Lo;0;L;;;;;N;;;;; 18A8A;TANGUT COMPONENT-651;Lo;0;L;;;;;N;;;;; 18A8B;TANGUT COMPONENT-652;Lo;0;L;;;;;N;;;;; 18A8C;TANGUT COMPONENT-653;Lo;0;L;;;;;N;;;;; 18A8D;TANGUT COMPONENT-654;Lo;0;L;;;;;N;;;;; 18A8E;TANGUT COMPONENT-655;Lo;0;L;;;;;N;;;;; 18A8F;TANGUT COMPONENT-656;Lo;0;L;;;;;N;;;;; 18A90;TANGUT COMPONENT-657;Lo;0;L;;;;;N;;;;; 18A91;TANGUT COMPONENT-658;Lo;0;L;;;;;N;;;;; 18A92;TANGUT COMPONENT-659;Lo;0;L;;;;;N;;;;; 18A93;TANGUT COMPONENT-660;Lo;0;L;;;;;N;;;;; 18A94;TANGUT COMPONENT-661;Lo;0;L;;;;;N;;;;; 18A95;TANGUT COMPONENT-662;Lo;0;L;;;;;N;;;;; 18A96;TANGUT COMPONENT-663;Lo;0;L;;;;;N;;;;; 18A97;TANGUT COMPONENT-664;Lo;0;L;;;;;N;;;;; 18A98;TANGUT COMPONENT-665;Lo;0;L;;;;;N;;;;; 18A99;TANGUT COMPONENT-666;Lo;0;L;;;;;N;;;;; 18A9A;TANGUT COMPONENT-667;Lo;0;L;;;;;N;;;;; 18A9B;TANGUT COMPONENT-668;Lo;0;L;;;;;N;;;;; 18A9C;TANGUT COMPONENT-669;Lo;0;L;;;;;N;;;;; 18A9D;TANGUT COMPONENT-670;Lo;0;L;;;;;N;;;;; 18A9E;TANGUT COMPONENT-671;Lo;0;L;;;;;N;;;;; 18A9F;TANGUT COMPONENT-672;Lo;0;L;;;;;N;;;;; 18AA0;TANGUT COMPONENT-673;Lo;0;L;;;;;N;;;;; 18AA1;TANGUT COMPONENT-674;Lo;0;L;;;;;N;;;;; 18AA2;TANGUT COMPONENT-675;Lo;0;L;;;;;N;;;;; 18AA3;TANGUT COMPONENT-676;Lo;0;L;;;;;N;;;;; 18AA4;TANGUT COMPONENT-677;Lo;0;L;;;;;N;;;;; 18AA5;TANGUT COMPONENT-678;Lo;0;L;;;;;N;;;;; 18AA6;TANGUT COMPONENT-679;Lo;0;L;;;;;N;;;;; 18AA7;TANGUT COMPONENT-680;Lo;0;L;;;;;N;;;;; 18AA8;TANGUT COMPONENT-681;Lo;0;L;;;;;N;;;;; 18AA9;TANGUT COMPONENT-682;Lo;0;L;;;;;N;;;;; 18AAA;TANGUT COMPONENT-683;Lo;0;L;;;;;N;;;;; 18AAB;TANGUT COMPONENT-684;Lo;0;L;;;;;N;;;;; 18AAC;TANGUT COMPONENT-685;Lo;0;L;;;;;N;;;;; 18AAD;TANGUT COMPONENT-686;Lo;0;L;;;;;N;;;;; 18AAE;TANGUT COMPONENT-687;Lo;0;L;;;;;N;;;;; 18AAF;TANGUT COMPONENT-688;Lo;0;L;;;;;N;;;;; 18AB0;TANGUT COMPONENT-689;Lo;0;L;;;;;N;;;;; 18AB1;TANGUT COMPONENT-690;Lo;0;L;;;;;N;;;;; 18AB2;TANGUT COMPONENT-691;Lo;0;L;;;;;N;;;;; 18AB3;TANGUT COMPONENT-692;Lo;0;L;;;;;N;;;;; 18AB4;TANGUT COMPONENT-693;Lo;0;L;;;;;N;;;;; 18AB5;TANGUT COMPONENT-694;Lo;0;L;;;;;N;;;;; 18AB6;TANGUT COMPONENT-695;Lo;0;L;;;;;N;;;;; 18AB7;TANGUT COMPONENT-696;Lo;0;L;;;;;N;;;;; 18AB8;TANGUT COMPONENT-697;Lo;0;L;;;;;N;;;;; 18AB9;TANGUT COMPONENT-698;Lo;0;L;;;;;N;;;;; 18ABA;TANGUT COMPONENT-699;Lo;0;L;;;;;N;;;;; 18ABB;TANGUT COMPONENT-700;Lo;0;L;;;;;N;;;;; 18ABC;TANGUT COMPONENT-701;Lo;0;L;;;;;N;;;;; 18ABD;TANGUT COMPONENT-702;Lo;0;L;;;;;N;;;;; 18ABE;TANGUT COMPONENT-703;Lo;0;L;;;;;N;;;;; 18ABF;TANGUT COMPONENT-704;Lo;0;L;;;;;N;;;;; 18AC0;TANGUT COMPONENT-705;Lo;0;L;;;;;N;;;;; 18AC1;TANGUT COMPONENT-706;Lo;0;L;;;;;N;;;;; 18AC2;TANGUT COMPONENT-707;Lo;0;L;;;;;N;;;;; 18AC3;TANGUT COMPONENT-708;Lo;0;L;;;;;N;;;;; 18AC4;TANGUT COMPONENT-709;Lo;0;L;;;;;N;;;;; 18AC5;TANGUT COMPONENT-710;Lo;0;L;;;;;N;;;;; 18AC6;TANGUT COMPONENT-711;Lo;0;L;;;;;N;;;;; 18AC7;TANGUT COMPONENT-712;Lo;0;L;;;;;N;;;;; 18AC8;TANGUT COMPONENT-713;Lo;0;L;;;;;N;;;;; 18AC9;TANGUT COMPONENT-714;Lo;0;L;;;;;N;;;;; 18ACA;TANGUT COMPONENT-715;Lo;0;L;;;;;N;;;;; 18ACB;TANGUT COMPONENT-716;Lo;0;L;;;;;N;;;;; 18ACC;TANGUT COMPONENT-717;Lo;0;L;;;;;N;;;;; 18ACD;TANGUT COMPONENT-718;Lo;0;L;;;;;N;;;;; 18ACE;TANGUT COMPONENT-719;Lo;0;L;;;;;N;;;;; 18ACF;TANGUT COMPONENT-720;Lo;0;L;;;;;N;;;;; 18AD0;TANGUT COMPONENT-721;Lo;0;L;;;;;N;;;;; 18AD1;TANGUT COMPONENT-722;Lo;0;L;;;;;N;;;;; 18AD2;TANGUT COMPONENT-723;Lo;0;L;;;;;N;;;;; 18AD3;TANGUT COMPONENT-724;Lo;0;L;;;;;N;;;;; 18AD4;TANGUT COMPONENT-725;Lo;0;L;;;;;N;;;;; 18AD5;TANGUT COMPONENT-726;Lo;0;L;;;;;N;;;;; 18AD6;TANGUT COMPONENT-727;Lo;0;L;;;;;N;;;;; 18AD7;TANGUT COMPONENT-728;Lo;0;L;;;;;N;;;;; 18AD8;TANGUT COMPONENT-729;Lo;0;L;;;;;N;;;;; 18AD9;TANGUT COMPONENT-730;Lo;0;L;;;;;N;;;;; 18ADA;TANGUT COMPONENT-731;Lo;0;L;;;;;N;;;;; 18ADB;TANGUT COMPONENT-732;Lo;0;L;;;;;N;;;;; 18ADC;TANGUT COMPONENT-733;Lo;0;L;;;;;N;;;;; 18ADD;TANGUT COMPONENT-734;Lo;0;L;;;;;N;;;;; 18ADE;TANGUT COMPONENT-735;Lo;0;L;;;;;N;;;;; 18ADF;TANGUT COMPONENT-736;Lo;0;L;;;;;N;;;;; 18AE0;TANGUT COMPONENT-737;Lo;0;L;;;;;N;;;;; 18AE1;TANGUT COMPONENT-738;Lo;0;L;;;;;N;;;;; 18AE2;TANGUT COMPONENT-739;Lo;0;L;;;;;N;;;;; 18AE3;TANGUT COMPONENT-740;Lo;0;L;;;;;N;;;;; 18AE4;TANGUT COMPONENT-741;Lo;0;L;;;;;N;;;;; 18AE5;TANGUT COMPONENT-742;Lo;0;L;;;;;N;;;;; 18AE6;TANGUT COMPONENT-743;Lo;0;L;;;;;N;;;;; 18AE7;TANGUT COMPONENT-744;Lo;0;L;;;;;N;;;;; 18AE8;TANGUT COMPONENT-745;Lo;0;L;;;;;N;;;;; 18AE9;TANGUT COMPONENT-746;Lo;0;L;;;;;N;;;;; 18AEA;TANGUT COMPONENT-747;Lo;0;L;;;;;N;;;;; 18AEB;TANGUT COMPONENT-748;Lo;0;L;;;;;N;;;;; 18AEC;TANGUT COMPONENT-749;Lo;0;L;;;;;N;;;;; 18AED;TANGUT COMPONENT-750;Lo;0;L;;;;;N;;;;; 18AEE;TANGUT COMPONENT-751;Lo;0;L;;;;;N;;;;; 18AEF;TANGUT COMPONENT-752;Lo;0;L;;;;;N;;;;; 18AF0;TANGUT COMPONENT-753;Lo;0;L;;;;;N;;;;; 18AF1;TANGUT COMPONENT-754;Lo;0;L;;;;;N;;;;; 18AF2;TANGUT COMPONENT-755;Lo;0;L;;;;;N;;;;; 18AF3;TANGUT COMPONENT-756;Lo;0;L;;;;;N;;;;; 18AF4;TANGUT COMPONENT-757;Lo;0;L;;;;;N;;;;; 18AF5;TANGUT COMPONENT-758;Lo;0;L;;;;;N;;;;; 18AF6;TANGUT COMPONENT-759;Lo;0;L;;;;;N;;;;; 18AF7;TANGUT COMPONENT-760;Lo;0;L;;;;;N;;;;; 18AF8;TANGUT COMPONENT-761;Lo;0;L;;;;;N;;;;; 18AF9;TANGUT COMPONENT-762;Lo;0;L;;;;;N;;;;; 18AFA;TANGUT COMPONENT-763;Lo;0;L;;;;;N;;;;; 18AFB;TANGUT COMPONENT-764;Lo;0;L;;;;;N;;;;; 18AFC;TANGUT COMPONENT-765;Lo;0;L;;;;;N;;;;; 18AFD;TANGUT COMPONENT-766;Lo;0;L;;;;;N;;;;; 18AFE;TANGUT COMPONENT-767;Lo;0;L;;;;;N;;;;; 18AFF;TANGUT COMPONENT-768;Lo;0;L;;;;;N;;;;; 18B00;KHITAN SMALL SCRIPT CHARACTER-18B00;Lo;0;L;;;;;N;;;;; 18B01;KHITAN SMALL SCRIPT CHARACTER-18B01;Lo;0;L;;;;;N;;;;; 18B02;KHITAN SMALL SCRIPT CHARACTER-18B02;Lo;0;L;;;;;N;;;;; 18B03;KHITAN SMALL SCRIPT CHARACTER-18B03;Lo;0;L;;;;;N;;;;; 18B04;KHITAN SMALL SCRIPT CHARACTER-18B04;Lo;0;L;;;;;N;;;;; 18B05;KHITAN SMALL SCRIPT CHARACTER-18B05;Lo;0;L;;;;;N;;;;; 18B06;KHITAN SMALL SCRIPT CHARACTER-18B06;Lo;0;L;;;;;N;;;;; 18B07;KHITAN SMALL SCRIPT CHARACTER-18B07;Lo;0;L;;;;;N;;;;; 18B08;KHITAN SMALL SCRIPT CHARACTER-18B08;Lo;0;L;;;;;N;;;;; 18B09;KHITAN SMALL SCRIPT CHARACTER-18B09;Lo;0;L;;;;;N;;;;; 18B0A;KHITAN SMALL SCRIPT CHARACTER-18B0A;Lo;0;L;;;;;N;;;;; 18B0B;KHITAN SMALL SCRIPT CHARACTER-18B0B;Lo;0;L;;;;;N;;;;; 18B0C;KHITAN SMALL SCRIPT CHARACTER-18B0C;Lo;0;L;;;;;N;;;;; 18B0D;KHITAN SMALL SCRIPT CHARACTER-18B0D;Lo;0;L;;;;;N;;;;; 18B0E;KHITAN SMALL SCRIPT CHARACTER-18B0E;Lo;0;L;;;;;N;;;;; 18B0F;KHITAN SMALL SCRIPT CHARACTER-18B0F;Lo;0;L;;;;;N;;;;; 18B10;KHITAN SMALL SCRIPT CHARACTER-18B10;Lo;0;L;;;;;N;;;;; 18B11;KHITAN SMALL SCRIPT CHARACTER-18B11;Lo;0;L;;;;;N;;;;; 18B12;KHITAN SMALL SCRIPT CHARACTER-18B12;Lo;0;L;;;;;N;;;;; 18B13;KHITAN SMALL SCRIPT CHARACTER-18B13;Lo;0;L;;;;;N;;;;; 18B14;KHITAN SMALL SCRIPT CHARACTER-18B14;Lo;0;L;;;;;N;;;;; 18B15;KHITAN SMALL SCRIPT CHARACTER-18B15;Lo;0;L;;;;;N;;;;; 18B16;KHITAN SMALL SCRIPT CHARACTER-18B16;Lo;0;L;;;;;N;;;;; 18B17;KHITAN SMALL SCRIPT CHARACTER-18B17;Lo;0;L;;;;;N;;;;; 18B18;KHITAN SMALL SCRIPT CHARACTER-18B18;Lo;0;L;;;;;N;;;;; 18B19;KHITAN SMALL SCRIPT CHARACTER-18B19;Lo;0;L;;;;;N;;;;; 18B1A;KHITAN SMALL SCRIPT CHARACTER-18B1A;Lo;0;L;;;;;N;;;;; 18B1B;KHITAN SMALL SCRIPT CHARACTER-18B1B;Lo;0;L;;;;;N;;;;; 18B1C;KHITAN SMALL SCRIPT CHARACTER-18B1C;Lo;0;L;;;;;N;;;;; 18B1D;KHITAN SMALL SCRIPT CHARACTER-18B1D;Lo;0;L;;;;;N;;;;; 18B1E;KHITAN SMALL SCRIPT CHARACTER-18B1E;Lo;0;L;;;;;N;;;;; 18B1F;KHITAN SMALL SCRIPT CHARACTER-18B1F;Lo;0;L;;;;;N;;;;; 18B20;KHITAN SMALL SCRIPT CHARACTER-18B20;Lo;0;L;;;;;N;;;;; 18B21;KHITAN SMALL SCRIPT CHARACTER-18B21;Lo;0;L;;;;;N;;;;; 18B22;KHITAN SMALL SCRIPT CHARACTER-18B22;Lo;0;L;;;;;N;;;;; 18B23;KHITAN SMALL SCRIPT CHARACTER-18B23;Lo;0;L;;;;;N;;;;; 18B24;KHITAN SMALL SCRIPT CHARACTER-18B24;Lo;0;L;;;;;N;;;;; 18B25;KHITAN SMALL SCRIPT CHARACTER-18B25;Lo;0;L;;;;;N;;;;; 18B26;KHITAN SMALL SCRIPT CHARACTER-18B26;Lo;0;L;;;;;N;;;;; 18B27;KHITAN SMALL SCRIPT CHARACTER-18B27;Lo;0;L;;;;;N;;;;; 18B28;KHITAN SMALL SCRIPT CHARACTER-18B28;Lo;0;L;;;;;N;;;;; 18B29;KHITAN SMALL SCRIPT CHARACTER-18B29;Lo;0;L;;;;;N;;;;; 18B2A;KHITAN SMALL SCRIPT CHARACTER-18B2A;Lo;0;L;;;;;N;;;;; 18B2B;KHITAN SMALL SCRIPT CHARACTER-18B2B;Lo;0;L;;;;;N;;;;; 18B2C;KHITAN SMALL SCRIPT CHARACTER-18B2C;Lo;0;L;;;;;N;;;;; 18B2D;KHITAN SMALL SCRIPT CHARACTER-18B2D;Lo;0;L;;;;;N;;;;; 18B2E;KHITAN SMALL SCRIPT CHARACTER-18B2E;Lo;0;L;;;;;N;;;;; 18B2F;KHITAN SMALL SCRIPT CHARACTER-18B2F;Lo;0;L;;;;;N;;;;; 18B30;KHITAN SMALL SCRIPT CHARACTER-18B30;Lo;0;L;;;;;N;;;;; 18B31;KHITAN SMALL SCRIPT CHARACTER-18B31;Lo;0;L;;;;;N;;;;; 18B32;KHITAN SMALL SCRIPT CHARACTER-18B32;Lo;0;L;;;;;N;;;;; 18B33;KHITAN SMALL SCRIPT CHARACTER-18B33;Lo;0;L;;;;;N;;;;; 18B34;KHITAN SMALL SCRIPT CHARACTER-18B34;Lo;0;L;;;;;N;;;;; 18B35;KHITAN SMALL SCRIPT CHARACTER-18B35;Lo;0;L;;;;;N;;;;; 18B36;KHITAN SMALL SCRIPT CHARACTER-18B36;Lo;0;L;;;;;N;;;;; 18B37;KHITAN SMALL SCRIPT CHARACTER-18B37;Lo;0;L;;;;;N;;;;; 18B38;KHITAN SMALL SCRIPT CHARACTER-18B38;Lo;0;L;;;;;N;;;;; 18B39;KHITAN SMALL SCRIPT CHARACTER-18B39;Lo;0;L;;;;;N;;;;; 18B3A;KHITAN SMALL SCRIPT CHARACTER-18B3A;Lo;0;L;;;;;N;;;;; 18B3B;KHITAN SMALL SCRIPT CHARACTER-18B3B;Lo;0;L;;;;;N;;;;; 18B3C;KHITAN SMALL SCRIPT CHARACTER-18B3C;Lo;0;L;;;;;N;;;;; 18B3D;KHITAN SMALL SCRIPT CHARACTER-18B3D;Lo;0;L;;;;;N;;;;; 18B3E;KHITAN SMALL SCRIPT CHARACTER-18B3E;Lo;0;L;;;;;N;;;;; 18B3F;KHITAN SMALL SCRIPT CHARACTER-18B3F;Lo;0;L;;;;;N;;;;; 18B40;KHITAN SMALL SCRIPT CHARACTER-18B40;Lo;0;L;;;;;N;;;;; 18B41;KHITAN SMALL SCRIPT CHARACTER-18B41;Lo;0;L;;;;;N;;;;; 18B42;KHITAN SMALL SCRIPT CHARACTER-18B42;Lo;0;L;;;;;N;;;;; 18B43;KHITAN SMALL SCRIPT CHARACTER-18B43;Lo;0;L;;;;;N;;;;; 18B44;KHITAN SMALL SCRIPT CHARACTER-18B44;Lo;0;L;;;;;N;;;;; 18B45;KHITAN SMALL SCRIPT CHARACTER-18B45;Lo;0;L;;;;;N;;;;; 18B46;KHITAN SMALL SCRIPT CHARACTER-18B46;Lo;0;L;;;;;N;;;;; 18B47;KHITAN SMALL SCRIPT CHARACTER-18B47;Lo;0;L;;;;;N;;;;; 18B48;KHITAN SMALL SCRIPT CHARACTER-18B48;Lo;0;L;;;;;N;;;;; 18B49;KHITAN SMALL SCRIPT CHARACTER-18B49;Lo;0;L;;;;;N;;;;; 18B4A;KHITAN SMALL SCRIPT CHARACTER-18B4A;Lo;0;L;;;;;N;;;;; 18B4B;KHITAN SMALL SCRIPT CHARACTER-18B4B;Lo;0;L;;;;;N;;;;; 18B4C;KHITAN SMALL SCRIPT CHARACTER-18B4C;Lo;0;L;;;;;N;;;;; 18B4D;KHITAN SMALL SCRIPT CHARACTER-18B4D;Lo;0;L;;;;;N;;;;; 18B4E;KHITAN SMALL SCRIPT CHARACTER-18B4E;Lo;0;L;;;;;N;;;;; 18B4F;KHITAN SMALL SCRIPT CHARACTER-18B4F;Lo;0;L;;;;;N;;;;; 18B50;KHITAN SMALL SCRIPT CHARACTER-18B50;Lo;0;L;;;;;N;;;;; 18B51;KHITAN SMALL SCRIPT CHARACTER-18B51;Lo;0;L;;;;;N;;;;; 18B52;KHITAN SMALL SCRIPT CHARACTER-18B52;Lo;0;L;;;;;N;;;;; 18B53;KHITAN SMALL SCRIPT CHARACTER-18B53;Lo;0;L;;;;;N;;;;; 18B54;KHITAN SMALL SCRIPT CHARACTER-18B54;Lo;0;L;;;;;N;;;;; 18B55;KHITAN SMALL SCRIPT CHARACTER-18B55;Lo;0;L;;;;;N;;;;; 18B56;KHITAN SMALL SCRIPT CHARACTER-18B56;Lo;0;L;;;;;N;;;;; 18B57;KHITAN SMALL SCRIPT CHARACTER-18B57;Lo;0;L;;;;;N;;;;; 18B58;KHITAN SMALL SCRIPT CHARACTER-18B58;Lo;0;L;;;;;N;;;;; 18B59;KHITAN SMALL SCRIPT CHARACTER-18B59;Lo;0;L;;;;;N;;;;; 18B5A;KHITAN SMALL SCRIPT CHARACTER-18B5A;Lo;0;L;;;;;N;;;;; 18B5B;KHITAN SMALL SCRIPT CHARACTER-18B5B;Lo;0;L;;;;;N;;;;; 18B5C;KHITAN SMALL SCRIPT CHARACTER-18B5C;Lo;0;L;;;;;N;;;;; 18B5D;KHITAN SMALL SCRIPT CHARACTER-18B5D;Lo;0;L;;;;;N;;;;; 18B5E;KHITAN SMALL SCRIPT CHARACTER-18B5E;Lo;0;L;;;;;N;;;;; 18B5F;KHITAN SMALL SCRIPT CHARACTER-18B5F;Lo;0;L;;;;;N;;;;; 18B60;KHITAN SMALL SCRIPT CHARACTER-18B60;Lo;0;L;;;;;N;;;;; 18B61;KHITAN SMALL SCRIPT CHARACTER-18B61;Lo;0;L;;;;;N;;;;; 18B62;KHITAN SMALL SCRIPT CHARACTER-18B62;Lo;0;L;;;;;N;;;;; 18B63;KHITAN SMALL SCRIPT CHARACTER-18B63;Lo;0;L;;;;;N;;;;; 18B64;KHITAN SMALL SCRIPT CHARACTER-18B64;Lo;0;L;;;;;N;;;;; 18B65;KHITAN SMALL SCRIPT CHARACTER-18B65;Lo;0;L;;;;;N;;;;; 18B66;KHITAN SMALL SCRIPT CHARACTER-18B66;Lo;0;L;;;;;N;;;;; 18B67;KHITAN SMALL SCRIPT CHARACTER-18B67;Lo;0;L;;;;;N;;;;; 18B68;KHITAN SMALL SCRIPT CHARACTER-18B68;Lo;0;L;;;;;N;;;;; 18B69;KHITAN SMALL SCRIPT CHARACTER-18B69;Lo;0;L;;;;;N;;;;; 18B6A;KHITAN SMALL SCRIPT CHARACTER-18B6A;Lo;0;L;;;;;N;;;;; 18B6B;KHITAN SMALL SCRIPT CHARACTER-18B6B;Lo;0;L;;;;;N;;;;; 18B6C;KHITAN SMALL SCRIPT CHARACTER-18B6C;Lo;0;L;;;;;N;;;;; 18B6D;KHITAN SMALL SCRIPT CHARACTER-18B6D;Lo;0;L;;;;;N;;;;; 18B6E;KHITAN SMALL SCRIPT CHARACTER-18B6E;Lo;0;L;;;;;N;;;;; 18B6F;KHITAN SMALL SCRIPT CHARACTER-18B6F;Lo;0;L;;;;;N;;;;; 18B70;KHITAN SMALL SCRIPT CHARACTER-18B70;Lo;0;L;;;;;N;;;;; 18B71;KHITAN SMALL SCRIPT CHARACTER-18B71;Lo;0;L;;;;;N;;;;; 18B72;KHITAN SMALL SCRIPT CHARACTER-18B72;Lo;0;L;;;;;N;;;;; 18B73;KHITAN SMALL SCRIPT CHARACTER-18B73;Lo;0;L;;;;;N;;;;; 18B74;KHITAN SMALL SCRIPT CHARACTER-18B74;Lo;0;L;;;;;N;;;;; 18B75;KHITAN SMALL SCRIPT CHARACTER-18B75;Lo;0;L;;;;;N;;;;; 18B76;KHITAN SMALL SCRIPT CHARACTER-18B76;Lo;0;L;;;;;N;;;;; 18B77;KHITAN SMALL SCRIPT CHARACTER-18B77;Lo;0;L;;;;;N;;;;; 18B78;KHITAN SMALL SCRIPT CHARACTER-18B78;Lo;0;L;;;;;N;;;;; 18B79;KHITAN SMALL SCRIPT CHARACTER-18B79;Lo;0;L;;;;;N;;;;; 18B7A;KHITAN SMALL SCRIPT CHARACTER-18B7A;Lo;0;L;;;;;N;;;;; 18B7B;KHITAN SMALL SCRIPT CHARACTER-18B7B;Lo;0;L;;;;;N;;;;; 18B7C;KHITAN SMALL SCRIPT CHARACTER-18B7C;Lo;0;L;;;;;N;;;;; 18B7D;KHITAN SMALL SCRIPT CHARACTER-18B7D;Lo;0;L;;;;;N;;;;; 18B7E;KHITAN SMALL SCRIPT CHARACTER-18B7E;Lo;0;L;;;;;N;;;;; 18B7F;KHITAN SMALL SCRIPT CHARACTER-18B7F;Lo;0;L;;;;;N;;;;; 18B80;KHITAN SMALL SCRIPT CHARACTER-18B80;Lo;0;L;;;;;N;;;;; 18B81;KHITAN SMALL SCRIPT CHARACTER-18B81;Lo;0;L;;;;;N;;;;; 18B82;KHITAN SMALL SCRIPT CHARACTER-18B82;Lo;0;L;;;;;N;;;;; 18B83;KHITAN SMALL SCRIPT CHARACTER-18B83;Lo;0;L;;;;;N;;;;; 18B84;KHITAN SMALL SCRIPT CHARACTER-18B84;Lo;0;L;;;;;N;;;;; 18B85;KHITAN SMALL SCRIPT CHARACTER-18B85;Lo;0;L;;;;;N;;;;; 18B86;KHITAN SMALL SCRIPT CHARACTER-18B86;Lo;0;L;;;;;N;;;;; 18B87;KHITAN SMALL SCRIPT CHARACTER-18B87;Lo;0;L;;;;;N;;;;; 18B88;KHITAN SMALL SCRIPT CHARACTER-18B88;Lo;0;L;;;;;N;;;;; 18B89;KHITAN SMALL SCRIPT CHARACTER-18B89;Lo;0;L;;;;;N;;;;; 18B8A;KHITAN SMALL SCRIPT CHARACTER-18B8A;Lo;0;L;;;;;N;;;;; 18B8B;KHITAN SMALL SCRIPT CHARACTER-18B8B;Lo;0;L;;;;;N;;;;; 18B8C;KHITAN SMALL SCRIPT CHARACTER-18B8C;Lo;0;L;;;;;N;;;;; 18B8D;KHITAN SMALL SCRIPT CHARACTER-18B8D;Lo;0;L;;;;;N;;;;; 18B8E;KHITAN SMALL SCRIPT CHARACTER-18B8E;Lo;0;L;;;;;N;;;;; 18B8F;KHITAN SMALL SCRIPT CHARACTER-18B8F;Lo;0;L;;;;;N;;;;; 18B90;KHITAN SMALL SCRIPT CHARACTER-18B90;Lo;0;L;;;;;N;;;;; 18B91;KHITAN SMALL SCRIPT CHARACTER-18B91;Lo;0;L;;;;;N;;;;; 18B92;KHITAN SMALL SCRIPT CHARACTER-18B92;Lo;0;L;;;;;N;;;;; 18B93;KHITAN SMALL SCRIPT CHARACTER-18B93;Lo;0;L;;;;;N;;;;; 18B94;KHITAN SMALL SCRIPT CHARACTER-18B94;Lo;0;L;;;;;N;;;;; 18B95;KHITAN SMALL SCRIPT CHARACTER-18B95;Lo;0;L;;;;;N;;;;; 18B96;KHITAN SMALL SCRIPT CHARACTER-18B96;Lo;0;L;;;;;N;;;;; 18B97;KHITAN SMALL SCRIPT CHARACTER-18B97;Lo;0;L;;;;;N;;;;; 18B98;KHITAN SMALL SCRIPT CHARACTER-18B98;Lo;0;L;;;;;N;;;;; 18B99;KHITAN SMALL SCRIPT CHARACTER-18B99;Lo;0;L;;;;;N;;;;; 18B9A;KHITAN SMALL SCRIPT CHARACTER-18B9A;Lo;0;L;;;;;N;;;;; 18B9B;KHITAN SMALL SCRIPT CHARACTER-18B9B;Lo;0;L;;;;;N;;;;; 18B9C;KHITAN SMALL SCRIPT CHARACTER-18B9C;Lo;0;L;;;;;N;;;;; 18B9D;KHITAN SMALL SCRIPT CHARACTER-18B9D;Lo;0;L;;;;;N;;;;; 18B9E;KHITAN SMALL SCRIPT CHARACTER-18B9E;Lo;0;L;;;;;N;;;;; 18B9F;KHITAN SMALL SCRIPT CHARACTER-18B9F;Lo;0;L;;;;;N;;;;; 18BA0;KHITAN SMALL SCRIPT CHARACTER-18BA0;Lo;0;L;;;;;N;;;;; 18BA1;KHITAN SMALL SCRIPT CHARACTER-18BA1;Lo;0;L;;;;;N;;;;; 18BA2;KHITAN SMALL SCRIPT CHARACTER-18BA2;Lo;0;L;;;;;N;;;;; 18BA3;KHITAN SMALL SCRIPT CHARACTER-18BA3;Lo;0;L;;;;;N;;;;; 18BA4;KHITAN SMALL SCRIPT CHARACTER-18BA4;Lo;0;L;;;;;N;;;;; 18BA5;KHITAN SMALL SCRIPT CHARACTER-18BA5;Lo;0;L;;;;;N;;;;; 18BA6;KHITAN SMALL SCRIPT CHARACTER-18BA6;Lo;0;L;;;;;N;;;;; 18BA7;KHITAN SMALL SCRIPT CHARACTER-18BA7;Lo;0;L;;;;;N;;;;; 18BA8;KHITAN SMALL SCRIPT CHARACTER-18BA8;Lo;0;L;;;;;N;;;;; 18BA9;KHITAN SMALL SCRIPT CHARACTER-18BA9;Lo;0;L;;;;;N;;;;; 18BAA;KHITAN SMALL SCRIPT CHARACTER-18BAA;Lo;0;L;;;;;N;;;;; 18BAB;KHITAN SMALL SCRIPT CHARACTER-18BAB;Lo;0;L;;;;;N;;;;; 18BAC;KHITAN SMALL SCRIPT CHARACTER-18BAC;Lo;0;L;;;;;N;;;;; 18BAD;KHITAN SMALL SCRIPT CHARACTER-18BAD;Lo;0;L;;;;;N;;;;; 18BAE;KHITAN SMALL SCRIPT CHARACTER-18BAE;Lo;0;L;;;;;N;;;;; 18BAF;KHITAN SMALL SCRIPT CHARACTER-18BAF;Lo;0;L;;;;;N;;;;; 18BB0;KHITAN SMALL SCRIPT CHARACTER-18BB0;Lo;0;L;;;;;N;;;;; 18BB1;KHITAN SMALL SCRIPT CHARACTER-18BB1;Lo;0;L;;;;;N;;;;; 18BB2;KHITAN SMALL SCRIPT CHARACTER-18BB2;Lo;0;L;;;;;N;;;;; 18BB3;KHITAN SMALL SCRIPT CHARACTER-18BB3;Lo;0;L;;;;;N;;;;; 18BB4;KHITAN SMALL SCRIPT CHARACTER-18BB4;Lo;0;L;;;;;N;;;;; 18BB5;KHITAN SMALL SCRIPT CHARACTER-18BB5;Lo;0;L;;;;;N;;;;; 18BB6;KHITAN SMALL SCRIPT CHARACTER-18BB6;Lo;0;L;;;;;N;;;;; 18BB7;KHITAN SMALL SCRIPT CHARACTER-18BB7;Lo;0;L;;;;;N;;;;; 18BB8;KHITAN SMALL SCRIPT CHARACTER-18BB8;Lo;0;L;;;;;N;;;;; 18BB9;KHITAN SMALL SCRIPT CHARACTER-18BB9;Lo;0;L;;;;;N;;;;; 18BBA;KHITAN SMALL SCRIPT CHARACTER-18BBA;Lo;0;L;;;;;N;;;;; 18BBB;KHITAN SMALL SCRIPT CHARACTER-18BBB;Lo;0;L;;;;;N;;;;; 18BBC;KHITAN SMALL SCRIPT CHARACTER-18BBC;Lo;0;L;;;;;N;;;;; 18BBD;KHITAN SMALL SCRIPT CHARACTER-18BBD;Lo;0;L;;;;;N;;;;; 18BBE;KHITAN SMALL SCRIPT CHARACTER-18BBE;Lo;0;L;;;;;N;;;;; 18BBF;KHITAN SMALL SCRIPT CHARACTER-18BBF;Lo;0;L;;;;;N;;;;; 18BC0;KHITAN SMALL SCRIPT CHARACTER-18BC0;Lo;0;L;;;;;N;;;;; 18BC1;KHITAN SMALL SCRIPT CHARACTER-18BC1;Lo;0;L;;;;;N;;;;; 18BC2;KHITAN SMALL SCRIPT CHARACTER-18BC2;Lo;0;L;;;;;N;;;;; 18BC3;KHITAN SMALL SCRIPT CHARACTER-18BC3;Lo;0;L;;;;;N;;;;; 18BC4;KHITAN SMALL SCRIPT CHARACTER-18BC4;Lo;0;L;;;;;N;;;;; 18BC5;KHITAN SMALL SCRIPT CHARACTER-18BC5;Lo;0;L;;;;;N;;;;; 18BC6;KHITAN SMALL SCRIPT CHARACTER-18BC6;Lo;0;L;;;;;N;;;;; 18BC7;KHITAN SMALL SCRIPT CHARACTER-18BC7;Lo;0;L;;;;;N;;;;; 18BC8;KHITAN SMALL SCRIPT CHARACTER-18BC8;Lo;0;L;;;;;N;;;;; 18BC9;KHITAN SMALL SCRIPT CHARACTER-18BC9;Lo;0;L;;;;;N;;;;; 18BCA;KHITAN SMALL SCRIPT CHARACTER-18BCA;Lo;0;L;;;;;N;;;;; 18BCB;KHITAN SMALL SCRIPT CHARACTER-18BCB;Lo;0;L;;;;;N;;;;; 18BCC;KHITAN SMALL SCRIPT CHARACTER-18BCC;Lo;0;L;;;;;N;;;;; 18BCD;KHITAN SMALL SCRIPT CHARACTER-18BCD;Lo;0;L;;;;;N;;;;; 18BCE;KHITAN SMALL SCRIPT CHARACTER-18BCE;Lo;0;L;;;;;N;;;;; 18BCF;KHITAN SMALL SCRIPT CHARACTER-18BCF;Lo;0;L;;;;;N;;;;; 18BD0;KHITAN SMALL SCRIPT CHARACTER-18BD0;Lo;0;L;;;;;N;;;;; 18BD1;KHITAN SMALL SCRIPT CHARACTER-18BD1;Lo;0;L;;;;;N;;;;; 18BD2;KHITAN SMALL SCRIPT CHARACTER-18BD2;Lo;0;L;;;;;N;;;;; 18BD3;KHITAN SMALL SCRIPT CHARACTER-18BD3;Lo;0;L;;;;;N;;;;; 18BD4;KHITAN SMALL SCRIPT CHARACTER-18BD4;Lo;0;L;;;;;N;;;;; 18BD5;KHITAN SMALL SCRIPT CHARACTER-18BD5;Lo;0;L;;;;;N;;;;; 18BD6;KHITAN SMALL SCRIPT CHARACTER-18BD6;Lo;0;L;;;;;N;;;;; 18BD7;KHITAN SMALL SCRIPT CHARACTER-18BD7;Lo;0;L;;;;;N;;;;; 18BD8;KHITAN SMALL SCRIPT CHARACTER-18BD8;Lo;0;L;;;;;N;;;;; 18BD9;KHITAN SMALL SCRIPT CHARACTER-18BD9;Lo;0;L;;;;;N;;;;; 18BDA;KHITAN SMALL SCRIPT CHARACTER-18BDA;Lo;0;L;;;;;N;;;;; 18BDB;KHITAN SMALL SCRIPT CHARACTER-18BDB;Lo;0;L;;;;;N;;;;; 18BDC;KHITAN SMALL SCRIPT CHARACTER-18BDC;Lo;0;L;;;;;N;;;;; 18BDD;KHITAN SMALL SCRIPT CHARACTER-18BDD;Lo;0;L;;;;;N;;;;; 18BDE;KHITAN SMALL SCRIPT CHARACTER-18BDE;Lo;0;L;;;;;N;;;;; 18BDF;KHITAN SMALL SCRIPT CHARACTER-18BDF;Lo;0;L;;;;;N;;;;; 18BE0;KHITAN SMALL SCRIPT CHARACTER-18BE0;Lo;0;L;;;;;N;;;;; 18BE1;KHITAN SMALL SCRIPT CHARACTER-18BE1;Lo;0;L;;;;;N;;;;; 18BE2;KHITAN SMALL SCRIPT CHARACTER-18BE2;Lo;0;L;;;;;N;;;;; 18BE3;KHITAN SMALL SCRIPT CHARACTER-18BE3;Lo;0;L;;;;;N;;;;; 18BE4;KHITAN SMALL SCRIPT CHARACTER-18BE4;Lo;0;L;;;;;N;;;;; 18BE5;KHITAN SMALL SCRIPT CHARACTER-18BE5;Lo;0;L;;;;;N;;;;; 18BE6;KHITAN SMALL SCRIPT CHARACTER-18BE6;Lo;0;L;;;;;N;;;;; 18BE7;KHITAN SMALL SCRIPT CHARACTER-18BE7;Lo;0;L;;;;;N;;;;; 18BE8;KHITAN SMALL SCRIPT CHARACTER-18BE8;Lo;0;L;;;;;N;;;;; 18BE9;KHITAN SMALL SCRIPT CHARACTER-18BE9;Lo;0;L;;;;;N;;;;; 18BEA;KHITAN SMALL SCRIPT CHARACTER-18BEA;Lo;0;L;;;;;N;;;;; 18BEB;KHITAN SMALL SCRIPT CHARACTER-18BEB;Lo;0;L;;;;;N;;;;; 18BEC;KHITAN SMALL SCRIPT CHARACTER-18BEC;Lo;0;L;;;;;N;;;;; 18BED;KHITAN SMALL SCRIPT CHARACTER-18BED;Lo;0;L;;;;;N;;;;; 18BEE;KHITAN SMALL SCRIPT CHARACTER-18BEE;Lo;0;L;;;;;N;;;;; 18BEF;KHITAN SMALL SCRIPT CHARACTER-18BEF;Lo;0;L;;;;;N;;;;; 18BF0;KHITAN SMALL SCRIPT CHARACTER-18BF0;Lo;0;L;;;;;N;;;;; 18BF1;KHITAN SMALL SCRIPT CHARACTER-18BF1;Lo;0;L;;;;;N;;;;; 18BF2;KHITAN SMALL SCRIPT CHARACTER-18BF2;Lo;0;L;;;;;N;;;;; 18BF3;KHITAN SMALL SCRIPT CHARACTER-18BF3;Lo;0;L;;;;;N;;;;; 18BF4;KHITAN SMALL SCRIPT CHARACTER-18BF4;Lo;0;L;;;;;N;;;;; 18BF5;KHITAN SMALL SCRIPT CHARACTER-18BF5;Lo;0;L;;;;;N;;;;; 18BF6;KHITAN SMALL SCRIPT CHARACTER-18BF6;Lo;0;L;;;;;N;;;;; 18BF7;KHITAN SMALL SCRIPT CHARACTER-18BF7;Lo;0;L;;;;;N;;;;; 18BF8;KHITAN SMALL SCRIPT CHARACTER-18BF8;Lo;0;L;;;;;N;;;;; 18BF9;KHITAN SMALL SCRIPT CHARACTER-18BF9;Lo;0;L;;;;;N;;;;; 18BFA;KHITAN SMALL SCRIPT CHARACTER-18BFA;Lo;0;L;;;;;N;;;;; 18BFB;KHITAN SMALL SCRIPT CHARACTER-18BFB;Lo;0;L;;;;;N;;;;; 18BFC;KHITAN SMALL SCRIPT CHARACTER-18BFC;Lo;0;L;;;;;N;;;;; 18BFD;KHITAN SMALL SCRIPT CHARACTER-18BFD;Lo;0;L;;;;;N;;;;; 18BFE;KHITAN SMALL SCRIPT CHARACTER-18BFE;Lo;0;L;;;;;N;;;;; 18BFF;KHITAN SMALL SCRIPT CHARACTER-18BFF;Lo;0;L;;;;;N;;;;; 18C00;KHITAN SMALL SCRIPT CHARACTER-18C00;Lo;0;L;;;;;N;;;;; 18C01;KHITAN SMALL SCRIPT CHARACTER-18C01;Lo;0;L;;;;;N;;;;; 18C02;KHITAN SMALL SCRIPT CHARACTER-18C02;Lo;0;L;;;;;N;;;;; 18C03;KHITAN SMALL SCRIPT CHARACTER-18C03;Lo;0;L;;;;;N;;;;; 18C04;KHITAN SMALL SCRIPT CHARACTER-18C04;Lo;0;L;;;;;N;;;;; 18C05;KHITAN SMALL SCRIPT CHARACTER-18C05;Lo;0;L;;;;;N;;;;; 18C06;KHITAN SMALL SCRIPT CHARACTER-18C06;Lo;0;L;;;;;N;;;;; 18C07;KHITAN SMALL SCRIPT CHARACTER-18C07;Lo;0;L;;;;;N;;;;; 18C08;KHITAN SMALL SCRIPT CHARACTER-18C08;Lo;0;L;;;;;N;;;;; 18C09;KHITAN SMALL SCRIPT CHARACTER-18C09;Lo;0;L;;;;;N;;;;; 18C0A;KHITAN SMALL SCRIPT CHARACTER-18C0A;Lo;0;L;;;;;N;;;;; 18C0B;KHITAN SMALL SCRIPT CHARACTER-18C0B;Lo;0;L;;;;;N;;;;; 18C0C;KHITAN SMALL SCRIPT CHARACTER-18C0C;Lo;0;L;;;;;N;;;;; 18C0D;KHITAN SMALL SCRIPT CHARACTER-18C0D;Lo;0;L;;;;;N;;;;; 18C0E;KHITAN SMALL SCRIPT CHARACTER-18C0E;Lo;0;L;;;;;N;;;;; 18C0F;KHITAN SMALL SCRIPT CHARACTER-18C0F;Lo;0;L;;;;;N;;;;; 18C10;KHITAN SMALL SCRIPT CHARACTER-18C10;Lo;0;L;;;;;N;;;;; 18C11;KHITAN SMALL SCRIPT CHARACTER-18C11;Lo;0;L;;;;;N;;;;; 18C12;KHITAN SMALL SCRIPT CHARACTER-18C12;Lo;0;L;;;;;N;;;;; 18C13;KHITAN SMALL SCRIPT CHARACTER-18C13;Lo;0;L;;;;;N;;;;; 18C14;KHITAN SMALL SCRIPT CHARACTER-18C14;Lo;0;L;;;;;N;;;;; 18C15;KHITAN SMALL SCRIPT CHARACTER-18C15;Lo;0;L;;;;;N;;;;; 18C16;KHITAN SMALL SCRIPT CHARACTER-18C16;Lo;0;L;;;;;N;;;;; 18C17;KHITAN SMALL SCRIPT CHARACTER-18C17;Lo;0;L;;;;;N;;;;; 18C18;KHITAN SMALL SCRIPT CHARACTER-18C18;Lo;0;L;;;;;N;;;;; 18C19;KHITAN SMALL SCRIPT CHARACTER-18C19;Lo;0;L;;;;;N;;;;; 18C1A;KHITAN SMALL SCRIPT CHARACTER-18C1A;Lo;0;L;;;;;N;;;;; 18C1B;KHITAN SMALL SCRIPT CHARACTER-18C1B;Lo;0;L;;;;;N;;;;; 18C1C;KHITAN SMALL SCRIPT CHARACTER-18C1C;Lo;0;L;;;;;N;;;;; 18C1D;KHITAN SMALL SCRIPT CHARACTER-18C1D;Lo;0;L;;;;;N;;;;; 18C1E;KHITAN SMALL SCRIPT CHARACTER-18C1E;Lo;0;L;;;;;N;;;;; 18C1F;KHITAN SMALL SCRIPT CHARACTER-18C1F;Lo;0;L;;;;;N;;;;; 18C20;KHITAN SMALL SCRIPT CHARACTER-18C20;Lo;0;L;;;;;N;;;;; 18C21;KHITAN SMALL SCRIPT CHARACTER-18C21;Lo;0;L;;;;;N;;;;; 18C22;KHITAN SMALL SCRIPT CHARACTER-18C22;Lo;0;L;;;;;N;;;;; 18C23;KHITAN SMALL SCRIPT CHARACTER-18C23;Lo;0;L;;;;;N;;;;; 18C24;KHITAN SMALL SCRIPT CHARACTER-18C24;Lo;0;L;;;;;N;;;;; 18C25;KHITAN SMALL SCRIPT CHARACTER-18C25;Lo;0;L;;;;;N;;;;; 18C26;KHITAN SMALL SCRIPT CHARACTER-18C26;Lo;0;L;;;;;N;;;;; 18C27;KHITAN SMALL SCRIPT CHARACTER-18C27;Lo;0;L;;;;;N;;;;; 18C28;KHITAN SMALL SCRIPT CHARACTER-18C28;Lo;0;L;;;;;N;;;;; 18C29;KHITAN SMALL SCRIPT CHARACTER-18C29;Lo;0;L;;;;;N;;;;; 18C2A;KHITAN SMALL SCRIPT CHARACTER-18C2A;Lo;0;L;;;;;N;;;;; 18C2B;KHITAN SMALL SCRIPT CHARACTER-18C2B;Lo;0;L;;;;;N;;;;; 18C2C;KHITAN SMALL SCRIPT CHARACTER-18C2C;Lo;0;L;;;;;N;;;;; 18C2D;KHITAN SMALL SCRIPT CHARACTER-18C2D;Lo;0;L;;;;;N;;;;; 18C2E;KHITAN SMALL SCRIPT CHARACTER-18C2E;Lo;0;L;;;;;N;;;;; 18C2F;KHITAN SMALL SCRIPT CHARACTER-18C2F;Lo;0;L;;;;;N;;;;; 18C30;KHITAN SMALL SCRIPT CHARACTER-18C30;Lo;0;L;;;;;N;;;;; 18C31;KHITAN SMALL SCRIPT CHARACTER-18C31;Lo;0;L;;;;;N;;;;; 18C32;KHITAN SMALL SCRIPT CHARACTER-18C32;Lo;0;L;;;;;N;;;;; 18C33;KHITAN SMALL SCRIPT CHARACTER-18C33;Lo;0;L;;;;;N;;;;; 18C34;KHITAN SMALL SCRIPT CHARACTER-18C34;Lo;0;L;;;;;N;;;;; 18C35;KHITAN SMALL SCRIPT CHARACTER-18C35;Lo;0;L;;;;;N;;;;; 18C36;KHITAN SMALL SCRIPT CHARACTER-18C36;Lo;0;L;;;;;N;;;;; 18C37;KHITAN SMALL SCRIPT CHARACTER-18C37;Lo;0;L;;;;;N;;;;; 18C38;KHITAN SMALL SCRIPT CHARACTER-18C38;Lo;0;L;;;;;N;;;;; 18C39;KHITAN SMALL SCRIPT CHARACTER-18C39;Lo;0;L;;;;;N;;;;; 18C3A;KHITAN SMALL SCRIPT CHARACTER-18C3A;Lo;0;L;;;;;N;;;;; 18C3B;KHITAN SMALL SCRIPT CHARACTER-18C3B;Lo;0;L;;;;;N;;;;; 18C3C;KHITAN SMALL SCRIPT CHARACTER-18C3C;Lo;0;L;;;;;N;;;;; 18C3D;KHITAN SMALL SCRIPT CHARACTER-18C3D;Lo;0;L;;;;;N;;;;; 18C3E;KHITAN SMALL SCRIPT CHARACTER-18C3E;Lo;0;L;;;;;N;;;;; 18C3F;KHITAN SMALL SCRIPT CHARACTER-18C3F;Lo;0;L;;;;;N;;;;; 18C40;KHITAN SMALL SCRIPT CHARACTER-18C40;Lo;0;L;;;;;N;;;;; 18C41;KHITAN SMALL SCRIPT CHARACTER-18C41;Lo;0;L;;;;;N;;;;; 18C42;KHITAN SMALL SCRIPT CHARACTER-18C42;Lo;0;L;;;;;N;;;;; 18C43;KHITAN SMALL SCRIPT CHARACTER-18C43;Lo;0;L;;;;;N;;;;; 18C44;KHITAN SMALL SCRIPT CHARACTER-18C44;Lo;0;L;;;;;N;;;;; 18C45;KHITAN SMALL SCRIPT CHARACTER-18C45;Lo;0;L;;;;;N;;;;; 18C46;KHITAN SMALL SCRIPT CHARACTER-18C46;Lo;0;L;;;;;N;;;;; 18C47;KHITAN SMALL SCRIPT CHARACTER-18C47;Lo;0;L;;;;;N;;;;; 18C48;KHITAN SMALL SCRIPT CHARACTER-18C48;Lo;0;L;;;;;N;;;;; 18C49;KHITAN SMALL SCRIPT CHARACTER-18C49;Lo;0;L;;;;;N;;;;; 18C4A;KHITAN SMALL SCRIPT CHARACTER-18C4A;Lo;0;L;;;;;N;;;;; 18C4B;KHITAN SMALL SCRIPT CHARACTER-18C4B;Lo;0;L;;;;;N;;;;; 18C4C;KHITAN SMALL SCRIPT CHARACTER-18C4C;Lo;0;L;;;;;N;;;;; 18C4D;KHITAN SMALL SCRIPT CHARACTER-18C4D;Lo;0;L;;;;;N;;;;; 18C4E;KHITAN SMALL SCRIPT CHARACTER-18C4E;Lo;0;L;;;;;N;;;;; 18C4F;KHITAN SMALL SCRIPT CHARACTER-18C4F;Lo;0;L;;;;;N;;;;; 18C50;KHITAN SMALL SCRIPT CHARACTER-18C50;Lo;0;L;;;;;N;;;;; 18C51;KHITAN SMALL SCRIPT CHARACTER-18C51;Lo;0;L;;;;;N;;;;; 18C52;KHITAN SMALL SCRIPT CHARACTER-18C52;Lo;0;L;;;;;N;;;;; 18C53;KHITAN SMALL SCRIPT CHARACTER-18C53;Lo;0;L;;;;;N;;;;; 18C54;KHITAN SMALL SCRIPT CHARACTER-18C54;Lo;0;L;;;;;N;;;;; 18C55;KHITAN SMALL SCRIPT CHARACTER-18C55;Lo;0;L;;;;;N;;;;; 18C56;KHITAN SMALL SCRIPT CHARACTER-18C56;Lo;0;L;;;;;N;;;;; 18C57;KHITAN SMALL SCRIPT CHARACTER-18C57;Lo;0;L;;;;;N;;;;; 18C58;KHITAN SMALL SCRIPT CHARACTER-18C58;Lo;0;L;;;;;N;;;;; 18C59;KHITAN SMALL SCRIPT CHARACTER-18C59;Lo;0;L;;;;;N;;;;; 18C5A;KHITAN SMALL SCRIPT CHARACTER-18C5A;Lo;0;L;;;;;N;;;;; 18C5B;KHITAN SMALL SCRIPT CHARACTER-18C5B;Lo;0;L;;;;;N;;;;; 18C5C;KHITAN SMALL SCRIPT CHARACTER-18C5C;Lo;0;L;;;;;N;;;;; 18C5D;KHITAN SMALL SCRIPT CHARACTER-18C5D;Lo;0;L;;;;;N;;;;; 18C5E;KHITAN SMALL SCRIPT CHARACTER-18C5E;Lo;0;L;;;;;N;;;;; 18C5F;KHITAN SMALL SCRIPT CHARACTER-18C5F;Lo;0;L;;;;;N;;;;; 18C60;KHITAN SMALL SCRIPT CHARACTER-18C60;Lo;0;L;;;;;N;;;;; 18C61;KHITAN SMALL SCRIPT CHARACTER-18C61;Lo;0;L;;;;;N;;;;; 18C62;KHITAN SMALL SCRIPT CHARACTER-18C62;Lo;0;L;;;;;N;;;;; 18C63;KHITAN SMALL SCRIPT CHARACTER-18C63;Lo;0;L;;;;;N;;;;; 18C64;KHITAN SMALL SCRIPT CHARACTER-18C64;Lo;0;L;;;;;N;;;;; 18C65;KHITAN SMALL SCRIPT CHARACTER-18C65;Lo;0;L;;;;;N;;;;; 18C66;KHITAN SMALL SCRIPT CHARACTER-18C66;Lo;0;L;;;;;N;;;;; 18C67;KHITAN SMALL SCRIPT CHARACTER-18C67;Lo;0;L;;;;;N;;;;; 18C68;KHITAN SMALL SCRIPT CHARACTER-18C68;Lo;0;L;;;;;N;;;;; 18C69;KHITAN SMALL SCRIPT CHARACTER-18C69;Lo;0;L;;;;;N;;;;; 18C6A;KHITAN SMALL SCRIPT CHARACTER-18C6A;Lo;0;L;;;;;N;;;;; 18C6B;KHITAN SMALL SCRIPT CHARACTER-18C6B;Lo;0;L;;;;;N;;;;; 18C6C;KHITAN SMALL SCRIPT CHARACTER-18C6C;Lo;0;L;;;;;N;;;;; 18C6D;KHITAN SMALL SCRIPT CHARACTER-18C6D;Lo;0;L;;;;;N;;;;; 18C6E;KHITAN SMALL SCRIPT CHARACTER-18C6E;Lo;0;L;;;;;N;;;;; 18C6F;KHITAN SMALL SCRIPT CHARACTER-18C6F;Lo;0;L;;;;;N;;;;; 18C70;KHITAN SMALL SCRIPT CHARACTER-18C70;Lo;0;L;;;;;N;;;;; 18C71;KHITAN SMALL SCRIPT CHARACTER-18C71;Lo;0;L;;;;;N;;;;; 18C72;KHITAN SMALL SCRIPT CHARACTER-18C72;Lo;0;L;;;;;N;;;;; 18C73;KHITAN SMALL SCRIPT CHARACTER-18C73;Lo;0;L;;;;;N;;;;; 18C74;KHITAN SMALL SCRIPT CHARACTER-18C74;Lo;0;L;;;;;N;;;;; 18C75;KHITAN SMALL SCRIPT CHARACTER-18C75;Lo;0;L;;;;;N;;;;; 18C76;KHITAN SMALL SCRIPT CHARACTER-18C76;Lo;0;L;;;;;N;;;;; 18C77;KHITAN SMALL SCRIPT CHARACTER-18C77;Lo;0;L;;;;;N;;;;; 18C78;KHITAN SMALL SCRIPT CHARACTER-18C78;Lo;0;L;;;;;N;;;;; 18C79;KHITAN SMALL SCRIPT CHARACTER-18C79;Lo;0;L;;;;;N;;;;; 18C7A;KHITAN SMALL SCRIPT CHARACTER-18C7A;Lo;0;L;;;;;N;;;;; 18C7B;KHITAN SMALL SCRIPT CHARACTER-18C7B;Lo;0;L;;;;;N;;;;; 18C7C;KHITAN SMALL SCRIPT CHARACTER-18C7C;Lo;0;L;;;;;N;;;;; 18C7D;KHITAN SMALL SCRIPT CHARACTER-18C7D;Lo;0;L;;;;;N;;;;; 18C7E;KHITAN SMALL SCRIPT CHARACTER-18C7E;Lo;0;L;;;;;N;;;;; 18C7F;KHITAN SMALL SCRIPT CHARACTER-18C7F;Lo;0;L;;;;;N;;;;; 18C80;KHITAN SMALL SCRIPT CHARACTER-18C80;Lo;0;L;;;;;N;;;;; 18C81;KHITAN SMALL SCRIPT CHARACTER-18C81;Lo;0;L;;;;;N;;;;; 18C82;KHITAN SMALL SCRIPT CHARACTER-18C82;Lo;0;L;;;;;N;;;;; 18C83;KHITAN SMALL SCRIPT CHARACTER-18C83;Lo;0;L;;;;;N;;;;; 18C84;KHITAN SMALL SCRIPT CHARACTER-18C84;Lo;0;L;;;;;N;;;;; 18C85;KHITAN SMALL SCRIPT CHARACTER-18C85;Lo;0;L;;;;;N;;;;; 18C86;KHITAN SMALL SCRIPT CHARACTER-18C86;Lo;0;L;;;;;N;;;;; 18C87;KHITAN SMALL SCRIPT CHARACTER-18C87;Lo;0;L;;;;;N;;;;; 18C88;KHITAN SMALL SCRIPT CHARACTER-18C88;Lo;0;L;;;;;N;;;;; 18C89;KHITAN SMALL SCRIPT CHARACTER-18C89;Lo;0;L;;;;;N;;;;; 18C8A;KHITAN SMALL SCRIPT CHARACTER-18C8A;Lo;0;L;;;;;N;;;;; 18C8B;KHITAN SMALL SCRIPT CHARACTER-18C8B;Lo;0;L;;;;;N;;;;; 18C8C;KHITAN SMALL SCRIPT CHARACTER-18C8C;Lo;0;L;;;;;N;;;;; 18C8D;KHITAN SMALL SCRIPT CHARACTER-18C8D;Lo;0;L;;;;;N;;;;; 18C8E;KHITAN SMALL SCRIPT CHARACTER-18C8E;Lo;0;L;;;;;N;;;;; 18C8F;KHITAN SMALL SCRIPT CHARACTER-18C8F;Lo;0;L;;;;;N;;;;; 18C90;KHITAN SMALL SCRIPT CHARACTER-18C90;Lo;0;L;;;;;N;;;;; 18C91;KHITAN SMALL SCRIPT CHARACTER-18C91;Lo;0;L;;;;;N;;;;; 18C92;KHITAN SMALL SCRIPT CHARACTER-18C92;Lo;0;L;;;;;N;;;;; 18C93;KHITAN SMALL SCRIPT CHARACTER-18C93;Lo;0;L;;;;;N;;;;; 18C94;KHITAN SMALL SCRIPT CHARACTER-18C94;Lo;0;L;;;;;N;;;;; 18C95;KHITAN SMALL SCRIPT CHARACTER-18C95;Lo;0;L;;;;;N;;;;; 18C96;KHITAN SMALL SCRIPT CHARACTER-18C96;Lo;0;L;;;;;N;;;;; 18C97;KHITAN SMALL SCRIPT CHARACTER-18C97;Lo;0;L;;;;;N;;;;; 18C98;KHITAN SMALL SCRIPT CHARACTER-18C98;Lo;0;L;;;;;N;;;;; 18C99;KHITAN SMALL SCRIPT CHARACTER-18C99;Lo;0;L;;;;;N;;;;; 18C9A;KHITAN SMALL SCRIPT CHARACTER-18C9A;Lo;0;L;;;;;N;;;;; 18C9B;KHITAN SMALL SCRIPT CHARACTER-18C9B;Lo;0;L;;;;;N;;;;; 18C9C;KHITAN SMALL SCRIPT CHARACTER-18C9C;Lo;0;L;;;;;N;;;;; 18C9D;KHITAN SMALL SCRIPT CHARACTER-18C9D;Lo;0;L;;;;;N;;;;; 18C9E;KHITAN SMALL SCRIPT CHARACTER-18C9E;Lo;0;L;;;;;N;;;;; 18C9F;KHITAN SMALL SCRIPT CHARACTER-18C9F;Lo;0;L;;;;;N;;;;; 18CA0;KHITAN SMALL SCRIPT CHARACTER-18CA0;Lo;0;L;;;;;N;;;;; 18CA1;KHITAN SMALL SCRIPT CHARACTER-18CA1;Lo;0;L;;;;;N;;;;; 18CA2;KHITAN SMALL SCRIPT CHARACTER-18CA2;Lo;0;L;;;;;N;;;;; 18CA3;KHITAN SMALL SCRIPT CHARACTER-18CA3;Lo;0;L;;;;;N;;;;; 18CA4;KHITAN SMALL SCRIPT CHARACTER-18CA4;Lo;0;L;;;;;N;;;;; 18CA5;KHITAN SMALL SCRIPT CHARACTER-18CA5;Lo;0;L;;;;;N;;;;; 18CA6;KHITAN SMALL SCRIPT CHARACTER-18CA6;Lo;0;L;;;;;N;;;;; 18CA7;KHITAN SMALL SCRIPT CHARACTER-18CA7;Lo;0;L;;;;;N;;;;; 18CA8;KHITAN SMALL SCRIPT CHARACTER-18CA8;Lo;0;L;;;;;N;;;;; 18CA9;KHITAN SMALL SCRIPT CHARACTER-18CA9;Lo;0;L;;;;;N;;;;; 18CAA;KHITAN SMALL SCRIPT CHARACTER-18CAA;Lo;0;L;;;;;N;;;;; 18CAB;KHITAN SMALL SCRIPT CHARACTER-18CAB;Lo;0;L;;;;;N;;;;; 18CAC;KHITAN SMALL SCRIPT CHARACTER-18CAC;Lo;0;L;;;;;N;;;;; 18CAD;KHITAN SMALL SCRIPT CHARACTER-18CAD;Lo;0;L;;;;;N;;;;; 18CAE;KHITAN SMALL SCRIPT CHARACTER-18CAE;Lo;0;L;;;;;N;;;;; 18CAF;KHITAN SMALL SCRIPT CHARACTER-18CAF;Lo;0;L;;;;;N;;;;; 18CB0;KHITAN SMALL SCRIPT CHARACTER-18CB0;Lo;0;L;;;;;N;;;;; 18CB1;KHITAN SMALL SCRIPT CHARACTER-18CB1;Lo;0;L;;;;;N;;;;; 18CB2;KHITAN SMALL SCRIPT CHARACTER-18CB2;Lo;0;L;;;;;N;;;;; 18CB3;KHITAN SMALL SCRIPT CHARACTER-18CB3;Lo;0;L;;;;;N;;;;; 18CB4;KHITAN SMALL SCRIPT CHARACTER-18CB4;Lo;0;L;;;;;N;;;;; 18CB5;KHITAN SMALL SCRIPT CHARACTER-18CB5;Lo;0;L;;;;;N;;;;; 18CB6;KHITAN SMALL SCRIPT CHARACTER-18CB6;Lo;0;L;;;;;N;;;;; 18CB7;KHITAN SMALL SCRIPT CHARACTER-18CB7;Lo;0;L;;;;;N;;;;; 18CB8;KHITAN SMALL SCRIPT CHARACTER-18CB8;Lo;0;L;;;;;N;;;;; 18CB9;KHITAN SMALL SCRIPT CHARACTER-18CB9;Lo;0;L;;;;;N;;;;; 18CBA;KHITAN SMALL SCRIPT CHARACTER-18CBA;Lo;0;L;;;;;N;;;;; 18CBB;KHITAN SMALL SCRIPT CHARACTER-18CBB;Lo;0;L;;;;;N;;;;; 18CBC;KHITAN SMALL SCRIPT CHARACTER-18CBC;Lo;0;L;;;;;N;;;;; 18CBD;KHITAN SMALL SCRIPT CHARACTER-18CBD;Lo;0;L;;;;;N;;;;; 18CBE;KHITAN SMALL SCRIPT CHARACTER-18CBE;Lo;0;L;;;;;N;;;;; 18CBF;KHITAN SMALL SCRIPT CHARACTER-18CBF;Lo;0;L;;;;;N;;;;; 18CC0;KHITAN SMALL SCRIPT CHARACTER-18CC0;Lo;0;L;;;;;N;;;;; 18CC1;KHITAN SMALL SCRIPT CHARACTER-18CC1;Lo;0;L;;;;;N;;;;; 18CC2;KHITAN SMALL SCRIPT CHARACTER-18CC2;Lo;0;L;;;;;N;;;;; 18CC3;KHITAN SMALL SCRIPT CHARACTER-18CC3;Lo;0;L;;;;;N;;;;; 18CC4;KHITAN SMALL SCRIPT CHARACTER-18CC4;Lo;0;L;;;;;N;;;;; 18CC5;KHITAN SMALL SCRIPT CHARACTER-18CC5;Lo;0;L;;;;;N;;;;; 18CC6;KHITAN SMALL SCRIPT CHARACTER-18CC6;Lo;0;L;;;;;N;;;;; 18CC7;KHITAN SMALL SCRIPT CHARACTER-18CC7;Lo;0;L;;;;;N;;;;; 18CC8;KHITAN SMALL SCRIPT CHARACTER-18CC8;Lo;0;L;;;;;N;;;;; 18CC9;KHITAN SMALL SCRIPT CHARACTER-18CC9;Lo;0;L;;;;;N;;;;; 18CCA;KHITAN SMALL SCRIPT CHARACTER-18CCA;Lo;0;L;;;;;N;;;;; 18CCB;KHITAN SMALL SCRIPT CHARACTER-18CCB;Lo;0;L;;;;;N;;;;; 18CCC;KHITAN SMALL SCRIPT CHARACTER-18CCC;Lo;0;L;;;;;N;;;;; 18CCD;KHITAN SMALL SCRIPT CHARACTER-18CCD;Lo;0;L;;;;;N;;;;; 18CCE;KHITAN SMALL SCRIPT CHARACTER-18CCE;Lo;0;L;;;;;N;;;;; 18CCF;KHITAN SMALL SCRIPT CHARACTER-18CCF;Lo;0;L;;;;;N;;;;; 18CD0;KHITAN SMALL SCRIPT CHARACTER-18CD0;Lo;0;L;;;;;N;;;;; 18CD1;KHITAN SMALL SCRIPT CHARACTER-18CD1;Lo;0;L;;;;;N;;;;; 18CD2;KHITAN SMALL SCRIPT CHARACTER-18CD2;Lo;0;L;;;;;N;;;;; 18CD3;KHITAN SMALL SCRIPT CHARACTER-18CD3;Lo;0;L;;;;;N;;;;; 18CD4;KHITAN SMALL SCRIPT CHARACTER-18CD4;Lo;0;L;;;;;N;;;;; 18CD5;KHITAN SMALL SCRIPT CHARACTER-18CD5;Lo;0;L;;;;;N;;;;; 18D00;;Lo;0;L;;;;;N;;;;; 18D08;;Lo;0;L;;;;;N;;;;; 1AFF0;KATAKANA LETTER MINNAN TONE-2;Lm;0;L;;;;;N;;;;; 1AFF1;KATAKANA LETTER MINNAN TONE-3;Lm;0;L;;;;;N;;;;; 1AFF2;KATAKANA LETTER MINNAN TONE-4;Lm;0;L;;;;;N;;;;; 1AFF3;KATAKANA LETTER MINNAN TONE-5;Lm;0;L;;;;;N;;;;; 1AFF5;KATAKANA LETTER MINNAN TONE-7;Lm;0;L;;;;;N;;;;; 1AFF6;KATAKANA LETTER MINNAN TONE-8;Lm;0;L;;;;;N;;;;; 1AFF7;KATAKANA LETTER MINNAN NASALIZED TONE-1;Lm;0;L;;;;;N;;;;; 1AFF8;KATAKANA LETTER MINNAN NASALIZED TONE-2;Lm;0;L;;;;;N;;;;; 1AFF9;KATAKANA LETTER MINNAN NASALIZED TONE-3;Lm;0;L;;;;;N;;;;; 1AFFA;KATAKANA LETTER MINNAN NASALIZED TONE-4;Lm;0;L;;;;;N;;;;; 1AFFB;KATAKANA LETTER MINNAN NASALIZED TONE-5;Lm;0;L;;;;;N;;;;; 1AFFD;KATAKANA LETTER MINNAN NASALIZED TONE-7;Lm;0;L;;;;;N;;;;; 1AFFE;KATAKANA LETTER MINNAN NASALIZED TONE-8;Lm;0;L;;;;;N;;;;; 1B000;KATAKANA LETTER ARCHAIC E;Lo;0;L;;;;;N;;;;; 1B001;HIRAGANA LETTER ARCHAIC YE;Lo;0;L;;;;;N;;;;; 1B002;HENTAIGANA LETTER A-1;Lo;0;L;;;;;N;;;;; 1B003;HENTAIGANA LETTER A-2;Lo;0;L;;;;;N;;;;; 1B004;HENTAIGANA LETTER A-3;Lo;0;L;;;;;N;;;;; 1B005;HENTAIGANA LETTER A-WO;Lo;0;L;;;;;N;;;;; 1B006;HENTAIGANA LETTER I-1;Lo;0;L;;;;;N;;;;; 1B007;HENTAIGANA LETTER I-2;Lo;0;L;;;;;N;;;;; 1B008;HENTAIGANA LETTER I-3;Lo;0;L;;;;;N;;;;; 1B009;HENTAIGANA LETTER I-4;Lo;0;L;;;;;N;;;;; 1B00A;HENTAIGANA LETTER U-1;Lo;0;L;;;;;N;;;;; 1B00B;HENTAIGANA LETTER U-2;Lo;0;L;;;;;N;;;;; 1B00C;HENTAIGANA LETTER U-3;Lo;0;L;;;;;N;;;;; 1B00D;HENTAIGANA LETTER U-4;Lo;0;L;;;;;N;;;;; 1B00E;HENTAIGANA LETTER U-5;Lo;0;L;;;;;N;;;;; 1B00F;HENTAIGANA LETTER E-2;Lo;0;L;;;;;N;;;;; 1B010;HENTAIGANA LETTER E-3;Lo;0;L;;;;;N;;;;; 1B011;HENTAIGANA LETTER E-4;Lo;0;L;;;;;N;;;;; 1B012;HENTAIGANA LETTER E-5;Lo;0;L;;;;;N;;;;; 1B013;HENTAIGANA LETTER E-6;Lo;0;L;;;;;N;;;;; 1B014;HENTAIGANA LETTER O-1;Lo;0;L;;;;;N;;;;; 1B015;HENTAIGANA LETTER O-2;Lo;0;L;;;;;N;;;;; 1B016;HENTAIGANA LETTER O-3;Lo;0;L;;;;;N;;;;; 1B017;HENTAIGANA LETTER KA-1;Lo;0;L;;;;;N;;;;; 1B018;HENTAIGANA LETTER KA-2;Lo;0;L;;;;;N;;;;; 1B019;HENTAIGANA LETTER KA-3;Lo;0;L;;;;;N;;;;; 1B01A;HENTAIGANA LETTER KA-4;Lo;0;L;;;;;N;;;;; 1B01B;HENTAIGANA LETTER KA-5;Lo;0;L;;;;;N;;;;; 1B01C;HENTAIGANA LETTER KA-6;Lo;0;L;;;;;N;;;;; 1B01D;HENTAIGANA LETTER KA-7;Lo;0;L;;;;;N;;;;; 1B01E;HENTAIGANA LETTER KA-8;Lo;0;L;;;;;N;;;;; 1B01F;HENTAIGANA LETTER KA-9;Lo;0;L;;;;;N;;;;; 1B020;HENTAIGANA LETTER KA-10;Lo;0;L;;;;;N;;;;; 1B021;HENTAIGANA LETTER KA-11;Lo;0;L;;;;;N;;;;; 1B022;HENTAIGANA LETTER KA-KE;Lo;0;L;;;;;N;;;;; 1B023;HENTAIGANA LETTER KI-1;Lo;0;L;;;;;N;;;;; 1B024;HENTAIGANA LETTER KI-2;Lo;0;L;;;;;N;;;;; 1B025;HENTAIGANA LETTER KI-3;Lo;0;L;;;;;N;;;;; 1B026;HENTAIGANA LETTER KI-4;Lo;0;L;;;;;N;;;;; 1B027;HENTAIGANA LETTER KI-5;Lo;0;L;;;;;N;;;;; 1B028;HENTAIGANA LETTER KI-6;Lo;0;L;;;;;N;;;;; 1B029;HENTAIGANA LETTER KI-7;Lo;0;L;;;;;N;;;;; 1B02A;HENTAIGANA LETTER KI-8;Lo;0;L;;;;;N;;;;; 1B02B;HENTAIGANA LETTER KU-1;Lo;0;L;;;;;N;;;;; 1B02C;HENTAIGANA LETTER KU-2;Lo;0;L;;;;;N;;;;; 1B02D;HENTAIGANA LETTER KU-3;Lo;0;L;;;;;N;;;;; 1B02E;HENTAIGANA LETTER KU-4;Lo;0;L;;;;;N;;;;; 1B02F;HENTAIGANA LETTER KU-5;Lo;0;L;;;;;N;;;;; 1B030;HENTAIGANA LETTER KU-6;Lo;0;L;;;;;N;;;;; 1B031;HENTAIGANA LETTER KU-7;Lo;0;L;;;;;N;;;;; 1B032;HENTAIGANA LETTER KE-1;Lo;0;L;;;;;N;;;;; 1B033;HENTAIGANA LETTER KE-2;Lo;0;L;;;;;N;;;;; 1B034;HENTAIGANA LETTER KE-3;Lo;0;L;;;;;N;;;;; 1B035;HENTAIGANA LETTER KE-4;Lo;0;L;;;;;N;;;;; 1B036;HENTAIGANA LETTER KE-5;Lo;0;L;;;;;N;;;;; 1B037;HENTAIGANA LETTER KE-6;Lo;0;L;;;;;N;;;;; 1B038;HENTAIGANA LETTER KO-1;Lo;0;L;;;;;N;;;;; 1B039;HENTAIGANA LETTER KO-2;Lo;0;L;;;;;N;;;;; 1B03A;HENTAIGANA LETTER KO-3;Lo;0;L;;;;;N;;;;; 1B03B;HENTAIGANA LETTER KO-KI;Lo;0;L;;;;;N;;;;; 1B03C;HENTAIGANA LETTER SA-1;Lo;0;L;;;;;N;;;;; 1B03D;HENTAIGANA LETTER SA-2;Lo;0;L;;;;;N;;;;; 1B03E;HENTAIGANA LETTER SA-3;Lo;0;L;;;;;N;;;;; 1B03F;HENTAIGANA LETTER SA-4;Lo;0;L;;;;;N;;;;; 1B040;HENTAIGANA LETTER SA-5;Lo;0;L;;;;;N;;;;; 1B041;HENTAIGANA LETTER SA-6;Lo;0;L;;;;;N;;;;; 1B042;HENTAIGANA LETTER SA-7;Lo;0;L;;;;;N;;;;; 1B043;HENTAIGANA LETTER SA-8;Lo;0;L;;;;;N;;;;; 1B044;HENTAIGANA LETTER SI-1;Lo;0;L;;;;;N;;;;; 1B045;HENTAIGANA LETTER SI-2;Lo;0;L;;;;;N;;;;; 1B046;HENTAIGANA LETTER SI-3;Lo;0;L;;;;;N;;;;; 1B047;HENTAIGANA LETTER SI-4;Lo;0;L;;;;;N;;;;; 1B048;HENTAIGANA LETTER SI-5;Lo;0;L;;;;;N;;;;; 1B049;HENTAIGANA LETTER SI-6;Lo;0;L;;;;;N;;;;; 1B04A;HENTAIGANA LETTER SU-1;Lo;0;L;;;;;N;;;;; 1B04B;HENTAIGANA LETTER SU-2;Lo;0;L;;;;;N;;;;; 1B04C;HENTAIGANA LETTER SU-3;Lo;0;L;;;;;N;;;;; 1B04D;HENTAIGANA LETTER SU-4;Lo;0;L;;;;;N;;;;; 1B04E;HENTAIGANA LETTER SU-5;Lo;0;L;;;;;N;;;;; 1B04F;HENTAIGANA LETTER SU-6;Lo;0;L;;;;;N;;;;; 1B050;HENTAIGANA LETTER SU-7;Lo;0;L;;;;;N;;;;; 1B051;HENTAIGANA LETTER SU-8;Lo;0;L;;;;;N;;;;; 1B052;HENTAIGANA LETTER SE-1;Lo;0;L;;;;;N;;;;; 1B053;HENTAIGANA LETTER SE-2;Lo;0;L;;;;;N;;;;; 1B054;HENTAIGANA LETTER SE-3;Lo;0;L;;;;;N;;;;; 1B055;HENTAIGANA LETTER SE-4;Lo;0;L;;;;;N;;;;; 1B056;HENTAIGANA LETTER SE-5;Lo;0;L;;;;;N;;;;; 1B057;HENTAIGANA LETTER SO-1;Lo;0;L;;;;;N;;;;; 1B058;HENTAIGANA LETTER SO-2;Lo;0;L;;;;;N;;;;; 1B059;HENTAIGANA LETTER SO-3;Lo;0;L;;;;;N;;;;; 1B05A;HENTAIGANA LETTER SO-4;Lo;0;L;;;;;N;;;;; 1B05B;HENTAIGANA LETTER SO-5;Lo;0;L;;;;;N;;;;; 1B05C;HENTAIGANA LETTER SO-6;Lo;0;L;;;;;N;;;;; 1B05D;HENTAIGANA LETTER SO-7;Lo;0;L;;;;;N;;;;; 1B05E;HENTAIGANA LETTER TA-1;Lo;0;L;;;;;N;;;;; 1B05F;HENTAIGANA LETTER TA-2;Lo;0;L;;;;;N;;;;; 1B060;HENTAIGANA LETTER TA-3;Lo;0;L;;;;;N;;;;; 1B061;HENTAIGANA LETTER TA-4;Lo;0;L;;;;;N;;;;; 1B062;HENTAIGANA LETTER TI-1;Lo;0;L;;;;;N;;;;; 1B063;HENTAIGANA LETTER TI-2;Lo;0;L;;;;;N;;;;; 1B064;HENTAIGANA LETTER TI-3;Lo;0;L;;;;;N;;;;; 1B065;HENTAIGANA LETTER TI-4;Lo;0;L;;;;;N;;;;; 1B066;HENTAIGANA LETTER TI-5;Lo;0;L;;;;;N;;;;; 1B067;HENTAIGANA LETTER TI-6;Lo;0;L;;;;;N;;;;; 1B068;HENTAIGANA LETTER TI-7;Lo;0;L;;;;;N;;;;; 1B069;HENTAIGANA LETTER TU-1;Lo;0;L;;;;;N;;;;; 1B06A;HENTAIGANA LETTER TU-2;Lo;0;L;;;;;N;;;;; 1B06B;HENTAIGANA LETTER TU-3;Lo;0;L;;;;;N;;;;; 1B06C;HENTAIGANA LETTER TU-4;Lo;0;L;;;;;N;;;;; 1B06D;HENTAIGANA LETTER TU-TO;Lo;0;L;;;;;N;;;;; 1B06E;HENTAIGANA LETTER TE-1;Lo;0;L;;;;;N;;;;; 1B06F;HENTAIGANA LETTER TE-2;Lo;0;L;;;;;N;;;;; 1B070;HENTAIGANA LETTER TE-3;Lo;0;L;;;;;N;;;;; 1B071;HENTAIGANA LETTER TE-4;Lo;0;L;;;;;N;;;;; 1B072;HENTAIGANA LETTER TE-5;Lo;0;L;;;;;N;;;;; 1B073;HENTAIGANA LETTER TE-6;Lo;0;L;;;;;N;;;;; 1B074;HENTAIGANA LETTER TE-7;Lo;0;L;;;;;N;;;;; 1B075;HENTAIGANA LETTER TE-8;Lo;0;L;;;;;N;;;;; 1B076;HENTAIGANA LETTER TE-9;Lo;0;L;;;;;N;;;;; 1B077;HENTAIGANA LETTER TO-1;Lo;0;L;;;;;N;;;;; 1B078;HENTAIGANA LETTER TO-2;Lo;0;L;;;;;N;;;;; 1B079;HENTAIGANA LETTER TO-3;Lo;0;L;;;;;N;;;;; 1B07A;HENTAIGANA LETTER TO-4;Lo;0;L;;;;;N;;;;; 1B07B;HENTAIGANA LETTER TO-5;Lo;0;L;;;;;N;;;;; 1B07C;HENTAIGANA LETTER TO-6;Lo;0;L;;;;;N;;;;; 1B07D;HENTAIGANA LETTER TO-RA;Lo;0;L;;;;;N;;;;; 1B07E;HENTAIGANA LETTER NA-1;Lo;0;L;;;;;N;;;;; 1B07F;HENTAIGANA LETTER NA-2;Lo;0;L;;;;;N;;;;; 1B080;HENTAIGANA LETTER NA-3;Lo;0;L;;;;;N;;;;; 1B081;HENTAIGANA LETTER NA-4;Lo;0;L;;;;;N;;;;; 1B082;HENTAIGANA LETTER NA-5;Lo;0;L;;;;;N;;;;; 1B083;HENTAIGANA LETTER NA-6;Lo;0;L;;;;;N;;;;; 1B084;HENTAIGANA LETTER NA-7;Lo;0;L;;;;;N;;;;; 1B085;HENTAIGANA LETTER NA-8;Lo;0;L;;;;;N;;;;; 1B086;HENTAIGANA LETTER NA-9;Lo;0;L;;;;;N;;;;; 1B087;HENTAIGANA LETTER NI-1;Lo;0;L;;;;;N;;;;; 1B088;HENTAIGANA LETTER NI-2;Lo;0;L;;;;;N;;;;; 1B089;HENTAIGANA LETTER NI-3;Lo;0;L;;;;;N;;;;; 1B08A;HENTAIGANA LETTER NI-4;Lo;0;L;;;;;N;;;;; 1B08B;HENTAIGANA LETTER NI-5;Lo;0;L;;;;;N;;;;; 1B08C;HENTAIGANA LETTER NI-6;Lo;0;L;;;;;N;;;;; 1B08D;HENTAIGANA LETTER NI-7;Lo;0;L;;;;;N;;;;; 1B08E;HENTAIGANA LETTER NI-TE;Lo;0;L;;;;;N;;;;; 1B08F;HENTAIGANA LETTER NU-1;Lo;0;L;;;;;N;;;;; 1B090;HENTAIGANA LETTER NU-2;Lo;0;L;;;;;N;;;;; 1B091;HENTAIGANA LETTER NU-3;Lo;0;L;;;;;N;;;;; 1B092;HENTAIGANA LETTER NE-1;Lo;0;L;;;;;N;;;;; 1B093;HENTAIGANA LETTER NE-2;Lo;0;L;;;;;N;;;;; 1B094;HENTAIGANA LETTER NE-3;Lo;0;L;;;;;N;;;;; 1B095;HENTAIGANA LETTER NE-4;Lo;0;L;;;;;N;;;;; 1B096;HENTAIGANA LETTER NE-5;Lo;0;L;;;;;N;;;;; 1B097;HENTAIGANA LETTER NE-6;Lo;0;L;;;;;N;;;;; 1B098;HENTAIGANA LETTER NE-KO;Lo;0;L;;;;;N;;;;; 1B099;HENTAIGANA LETTER NO-1;Lo;0;L;;;;;N;;;;; 1B09A;HENTAIGANA LETTER NO-2;Lo;0;L;;;;;N;;;;; 1B09B;HENTAIGANA LETTER NO-3;Lo;0;L;;;;;N;;;;; 1B09C;HENTAIGANA LETTER NO-4;Lo;0;L;;;;;N;;;;; 1B09D;HENTAIGANA LETTER NO-5;Lo;0;L;;;;;N;;;;; 1B09E;HENTAIGANA LETTER HA-1;Lo;0;L;;;;;N;;;;; 1B09F;HENTAIGANA LETTER HA-2;Lo;0;L;;;;;N;;;;; 1B0A0;HENTAIGANA LETTER HA-3;Lo;0;L;;;;;N;;;;; 1B0A1;HENTAIGANA LETTER HA-4;Lo;0;L;;;;;N;;;;; 1B0A2;HENTAIGANA LETTER HA-5;Lo;0;L;;;;;N;;;;; 1B0A3;HENTAIGANA LETTER HA-6;Lo;0;L;;;;;N;;;;; 1B0A4;HENTAIGANA LETTER HA-7;Lo;0;L;;;;;N;;;;; 1B0A5;HENTAIGANA LETTER HA-8;Lo;0;L;;;;;N;;;;; 1B0A6;HENTAIGANA LETTER HA-9;Lo;0;L;;;;;N;;;;; 1B0A7;HENTAIGANA LETTER HA-10;Lo;0;L;;;;;N;;;;; 1B0A8;HENTAIGANA LETTER HA-11;Lo;0;L;;;;;N;;;;; 1B0A9;HENTAIGANA LETTER HI-1;Lo;0;L;;;;;N;;;;; 1B0AA;HENTAIGANA LETTER HI-2;Lo;0;L;;;;;N;;;;; 1B0AB;HENTAIGANA LETTER HI-3;Lo;0;L;;;;;N;;;;; 1B0AC;HENTAIGANA LETTER HI-4;Lo;0;L;;;;;N;;;;; 1B0AD;HENTAIGANA LETTER HI-5;Lo;0;L;;;;;N;;;;; 1B0AE;HENTAIGANA LETTER HI-6;Lo;0;L;;;;;N;;;;; 1B0AF;HENTAIGANA LETTER HI-7;Lo;0;L;;;;;N;;;;; 1B0B0;HENTAIGANA LETTER HU-1;Lo;0;L;;;;;N;;;;; 1B0B1;HENTAIGANA LETTER HU-2;Lo;0;L;;;;;N;;;;; 1B0B2;HENTAIGANA LETTER HU-3;Lo;0;L;;;;;N;;;;; 1B0B3;HENTAIGANA LETTER HE-1;Lo;0;L;;;;;N;;;;; 1B0B4;HENTAIGANA LETTER HE-2;Lo;0;L;;;;;N;;;;; 1B0B5;HENTAIGANA LETTER HE-3;Lo;0;L;;;;;N;;;;; 1B0B6;HENTAIGANA LETTER HE-4;Lo;0;L;;;;;N;;;;; 1B0B7;HENTAIGANA LETTER HE-5;Lo;0;L;;;;;N;;;;; 1B0B8;HENTAIGANA LETTER HE-6;Lo;0;L;;;;;N;;;;; 1B0B9;HENTAIGANA LETTER HE-7;Lo;0;L;;;;;N;;;;; 1B0BA;HENTAIGANA LETTER HO-1;Lo;0;L;;;;;N;;;;; 1B0BB;HENTAIGANA LETTER HO-2;Lo;0;L;;;;;N;;;;; 1B0BC;HENTAIGANA LETTER HO-3;Lo;0;L;;;;;N;;;;; 1B0BD;HENTAIGANA LETTER HO-4;Lo;0;L;;;;;N;;;;; 1B0BE;HENTAIGANA LETTER HO-5;Lo;0;L;;;;;N;;;;; 1B0BF;HENTAIGANA LETTER HO-6;Lo;0;L;;;;;N;;;;; 1B0C0;HENTAIGANA LETTER HO-7;Lo;0;L;;;;;N;;;;; 1B0C1;HENTAIGANA LETTER HO-8;Lo;0;L;;;;;N;;;;; 1B0C2;HENTAIGANA LETTER MA-1;Lo;0;L;;;;;N;;;;; 1B0C3;HENTAIGANA LETTER MA-2;Lo;0;L;;;;;N;;;;; 1B0C4;HENTAIGANA LETTER MA-3;Lo;0;L;;;;;N;;;;; 1B0C5;HENTAIGANA LETTER MA-4;Lo;0;L;;;;;N;;;;; 1B0C6;HENTAIGANA LETTER MA-5;Lo;0;L;;;;;N;;;;; 1B0C7;HENTAIGANA LETTER MA-6;Lo;0;L;;;;;N;;;;; 1B0C8;HENTAIGANA LETTER MA-7;Lo;0;L;;;;;N;;;;; 1B0C9;HENTAIGANA LETTER MI-1;Lo;0;L;;;;;N;;;;; 1B0CA;HENTAIGANA LETTER MI-2;Lo;0;L;;;;;N;;;;; 1B0CB;HENTAIGANA LETTER MI-3;Lo;0;L;;;;;N;;;;; 1B0CC;HENTAIGANA LETTER MI-4;Lo;0;L;;;;;N;;;;; 1B0CD;HENTAIGANA LETTER MI-5;Lo;0;L;;;;;N;;;;; 1B0CE;HENTAIGANA LETTER MI-6;Lo;0;L;;;;;N;;;;; 1B0CF;HENTAIGANA LETTER MI-7;Lo;0;L;;;;;N;;;;; 1B0D0;HENTAIGANA LETTER MU-1;Lo;0;L;;;;;N;;;;; 1B0D1;HENTAIGANA LETTER MU-2;Lo;0;L;;;;;N;;;;; 1B0D2;HENTAIGANA LETTER MU-3;Lo;0;L;;;;;N;;;;; 1B0D3;HENTAIGANA LETTER MU-4;Lo;0;L;;;;;N;;;;; 1B0D4;HENTAIGANA LETTER ME-1;Lo;0;L;;;;;N;;;;; 1B0D5;HENTAIGANA LETTER ME-2;Lo;0;L;;;;;N;;;;; 1B0D6;HENTAIGANA LETTER ME-MA;Lo;0;L;;;;;N;;;;; 1B0D7;HENTAIGANA LETTER MO-1;Lo;0;L;;;;;N;;;;; 1B0D8;HENTAIGANA LETTER MO-2;Lo;0;L;;;;;N;;;;; 1B0D9;HENTAIGANA LETTER MO-3;Lo;0;L;;;;;N;;;;; 1B0DA;HENTAIGANA LETTER MO-4;Lo;0;L;;;;;N;;;;; 1B0DB;HENTAIGANA LETTER MO-5;Lo;0;L;;;;;N;;;;; 1B0DC;HENTAIGANA LETTER MO-6;Lo;0;L;;;;;N;;;;; 1B0DD;HENTAIGANA LETTER YA-1;Lo;0;L;;;;;N;;;;; 1B0DE;HENTAIGANA LETTER YA-2;Lo;0;L;;;;;N;;;;; 1B0DF;HENTAIGANA LETTER YA-3;Lo;0;L;;;;;N;;;;; 1B0E0;HENTAIGANA LETTER YA-4;Lo;0;L;;;;;N;;;;; 1B0E1;HENTAIGANA LETTER YA-5;Lo;0;L;;;;;N;;;;; 1B0E2;HENTAIGANA LETTER YA-YO;Lo;0;L;;;;;N;;;;; 1B0E3;HENTAIGANA LETTER YU-1;Lo;0;L;;;;;N;;;;; 1B0E4;HENTAIGANA LETTER YU-2;Lo;0;L;;;;;N;;;;; 1B0E5;HENTAIGANA LETTER YU-3;Lo;0;L;;;;;N;;;;; 1B0E6;HENTAIGANA LETTER YU-4;Lo;0;L;;;;;N;;;;; 1B0E7;HENTAIGANA LETTER YO-1;Lo;0;L;;;;;N;;;;; 1B0E8;HENTAIGANA LETTER YO-2;Lo;0;L;;;;;N;;;;; 1B0E9;HENTAIGANA LETTER YO-3;Lo;0;L;;;;;N;;;;; 1B0EA;HENTAIGANA LETTER YO-4;Lo;0;L;;;;;N;;;;; 1B0EB;HENTAIGANA LETTER YO-5;Lo;0;L;;;;;N;;;;; 1B0EC;HENTAIGANA LETTER YO-6;Lo;0;L;;;;;N;;;;; 1B0ED;HENTAIGANA LETTER RA-1;Lo;0;L;;;;;N;;;;; 1B0EE;HENTAIGANA LETTER RA-2;Lo;0;L;;;;;N;;;;; 1B0EF;HENTAIGANA LETTER RA-3;Lo;0;L;;;;;N;;;;; 1B0F0;HENTAIGANA LETTER RA-4;Lo;0;L;;;;;N;;;;; 1B0F1;HENTAIGANA LETTER RI-1;Lo;0;L;;;;;N;;;;; 1B0F2;HENTAIGANA LETTER RI-2;Lo;0;L;;;;;N;;;;; 1B0F3;HENTAIGANA LETTER RI-3;Lo;0;L;;;;;N;;;;; 1B0F4;HENTAIGANA LETTER RI-4;Lo;0;L;;;;;N;;;;; 1B0F5;HENTAIGANA LETTER RI-5;Lo;0;L;;;;;N;;;;; 1B0F6;HENTAIGANA LETTER RI-6;Lo;0;L;;;;;N;;;;; 1B0F7;HENTAIGANA LETTER RI-7;Lo;0;L;;;;;N;;;;; 1B0F8;HENTAIGANA LETTER RU-1;Lo;0;L;;;;;N;;;;; 1B0F9;HENTAIGANA LETTER RU-2;Lo;0;L;;;;;N;;;;; 1B0FA;HENTAIGANA LETTER RU-3;Lo;0;L;;;;;N;;;;; 1B0FB;HENTAIGANA LETTER RU-4;Lo;0;L;;;;;N;;;;; 1B0FC;HENTAIGANA LETTER RU-5;Lo;0;L;;;;;N;;;;; 1B0FD;HENTAIGANA LETTER RU-6;Lo;0;L;;;;;N;;;;; 1B0FE;HENTAIGANA LETTER RE-1;Lo;0;L;;;;;N;;;;; 1B0FF;HENTAIGANA LETTER RE-2;Lo;0;L;;;;;N;;;;; 1B100;HENTAIGANA LETTER RE-3;Lo;0;L;;;;;N;;;;; 1B101;HENTAIGANA LETTER RE-4;Lo;0;L;;;;;N;;;;; 1B102;HENTAIGANA LETTER RO-1;Lo;0;L;;;;;N;;;;; 1B103;HENTAIGANA LETTER RO-2;Lo;0;L;;;;;N;;;;; 1B104;HENTAIGANA LETTER RO-3;Lo;0;L;;;;;N;;;;; 1B105;HENTAIGANA LETTER RO-4;Lo;0;L;;;;;N;;;;; 1B106;HENTAIGANA LETTER RO-5;Lo;0;L;;;;;N;;;;; 1B107;HENTAIGANA LETTER RO-6;Lo;0;L;;;;;N;;;;; 1B108;HENTAIGANA LETTER WA-1;Lo;0;L;;;;;N;;;;; 1B109;HENTAIGANA LETTER WA-2;Lo;0;L;;;;;N;;;;; 1B10A;HENTAIGANA LETTER WA-3;Lo;0;L;;;;;N;;;;; 1B10B;HENTAIGANA LETTER WA-4;Lo;0;L;;;;;N;;;;; 1B10C;HENTAIGANA LETTER WA-5;Lo;0;L;;;;;N;;;;; 1B10D;HENTAIGANA LETTER WI-1;Lo;0;L;;;;;N;;;;; 1B10E;HENTAIGANA LETTER WI-2;Lo;0;L;;;;;N;;;;; 1B10F;HENTAIGANA LETTER WI-3;Lo;0;L;;;;;N;;;;; 1B110;HENTAIGANA LETTER WI-4;Lo;0;L;;;;;N;;;;; 1B111;HENTAIGANA LETTER WI-5;Lo;0;L;;;;;N;;;;; 1B112;HENTAIGANA LETTER WE-1;Lo;0;L;;;;;N;;;;; 1B113;HENTAIGANA LETTER WE-2;Lo;0;L;;;;;N;;;;; 1B114;HENTAIGANA LETTER WE-3;Lo;0;L;;;;;N;;;;; 1B115;HENTAIGANA LETTER WE-4;Lo;0;L;;;;;N;;;;; 1B116;HENTAIGANA LETTER WO-1;Lo;0;L;;;;;N;;;;; 1B117;HENTAIGANA LETTER WO-2;Lo;0;L;;;;;N;;;;; 1B118;HENTAIGANA LETTER WO-3;Lo;0;L;;;;;N;;;;; 1B119;HENTAIGANA LETTER WO-4;Lo;0;L;;;;;N;;;;; 1B11A;HENTAIGANA LETTER WO-5;Lo;0;L;;;;;N;;;;; 1B11B;HENTAIGANA LETTER WO-6;Lo;0;L;;;;;N;;;;; 1B11C;HENTAIGANA LETTER WO-7;Lo;0;L;;;;;N;;;;; 1B11D;HENTAIGANA LETTER N-MU-MO-1;Lo;0;L;;;;;N;;;;; 1B11E;HENTAIGANA LETTER N-MU-MO-2;Lo;0;L;;;;;N;;;;; 1B11F;HIRAGANA LETTER ARCHAIC WU;Lo;0;L;;;;;N;;;;; 1B120;KATAKANA LETTER ARCHAIC YI;Lo;0;L;;;;;N;;;;; 1B121;KATAKANA LETTER ARCHAIC YE;Lo;0;L;;;;;N;;;;; 1B122;KATAKANA LETTER ARCHAIC WU;Lo;0;L;;;;;N;;;;; 1B150;HIRAGANA LETTER SMALL WI;Lo;0;L;;;;;N;;;;; 1B151;HIRAGANA LETTER SMALL WE;Lo;0;L;;;;;N;;;;; 1B152;HIRAGANA LETTER SMALL WO;Lo;0;L;;;;;N;;;;; 1B164;KATAKANA LETTER SMALL WI;Lo;0;L;;;;;N;;;;; 1B165;KATAKANA LETTER SMALL WE;Lo;0;L;;;;;N;;;;; 1B166;KATAKANA LETTER SMALL WO;Lo;0;L;;;;;N;;;;; 1B167;KATAKANA LETTER SMALL N;Lo;0;L;;;;;N;;;;; 1B170;NUSHU CHARACTER-1B170;Lo;0;L;;;;;N;;;;; 1B171;NUSHU CHARACTER-1B171;Lo;0;L;;;;;N;;;;; 1B172;NUSHU CHARACTER-1B172;Lo;0;L;;;;;N;;;;; 1B173;NUSHU CHARACTER-1B173;Lo;0;L;;;;;N;;;;; 1B174;NUSHU CHARACTER-1B174;Lo;0;L;;;;;N;;;;; 1B175;NUSHU CHARACTER-1B175;Lo;0;L;;;;;N;;;;; 1B176;NUSHU CHARACTER-1B176;Lo;0;L;;;;;N;;;;; 1B177;NUSHU CHARACTER-1B177;Lo;0;L;;;;;N;;;;; 1B178;NUSHU CHARACTER-1B178;Lo;0;L;;;;;N;;;;; 1B179;NUSHU CHARACTER-1B179;Lo;0;L;;;;;N;;;;; 1B17A;NUSHU CHARACTER-1B17A;Lo;0;L;;;;;N;;;;; 1B17B;NUSHU CHARACTER-1B17B;Lo;0;L;;;;;N;;;;; 1B17C;NUSHU CHARACTER-1B17C;Lo;0;L;;;;;N;;;;; 1B17D;NUSHU CHARACTER-1B17D;Lo;0;L;;;;;N;;;;; 1B17E;NUSHU CHARACTER-1B17E;Lo;0;L;;;;;N;;;;; 1B17F;NUSHU CHARACTER-1B17F;Lo;0;L;;;;;N;;;;; 1B180;NUSHU CHARACTER-1B180;Lo;0;L;;;;;N;;;;; 1B181;NUSHU CHARACTER-1B181;Lo;0;L;;;;;N;;;;; 1B182;NUSHU CHARACTER-1B182;Lo;0;L;;;;;N;;;;; 1B183;NUSHU CHARACTER-1B183;Lo;0;L;;;;;N;;;;; 1B184;NUSHU CHARACTER-1B184;Lo;0;L;;;;;N;;;;; 1B185;NUSHU CHARACTER-1B185;Lo;0;L;;;;;N;;;;; 1B186;NUSHU CHARACTER-1B186;Lo;0;L;;;;;N;;;;; 1B187;NUSHU CHARACTER-1B187;Lo;0;L;;;;;N;;;;; 1B188;NUSHU CHARACTER-1B188;Lo;0;L;;;;;N;;;;; 1B189;NUSHU CHARACTER-1B189;Lo;0;L;;;;;N;;;;; 1B18A;NUSHU CHARACTER-1B18A;Lo;0;L;;;;;N;;;;; 1B18B;NUSHU CHARACTER-1B18B;Lo;0;L;;;;;N;;;;; 1B18C;NUSHU CHARACTER-1B18C;Lo;0;L;;;;;N;;;;; 1B18D;NUSHU CHARACTER-1B18D;Lo;0;L;;;;;N;;;;; 1B18E;NUSHU CHARACTER-1B18E;Lo;0;L;;;;;N;;;;; 1B18F;NUSHU CHARACTER-1B18F;Lo;0;L;;;;;N;;;;; 1B190;NUSHU CHARACTER-1B190;Lo;0;L;;;;;N;;;;; 1B191;NUSHU CHARACTER-1B191;Lo;0;L;;;;;N;;;;; 1B192;NUSHU CHARACTER-1B192;Lo;0;L;;;;;N;;;;; 1B193;NUSHU CHARACTER-1B193;Lo;0;L;;;;;N;;;;; 1B194;NUSHU CHARACTER-1B194;Lo;0;L;;;;;N;;;;; 1B195;NUSHU CHARACTER-1B195;Lo;0;L;;;;;N;;;;; 1B196;NUSHU CHARACTER-1B196;Lo;0;L;;;;;N;;;;; 1B197;NUSHU CHARACTER-1B197;Lo;0;L;;;;;N;;;;; 1B198;NUSHU CHARACTER-1B198;Lo;0;L;;;;;N;;;;; 1B199;NUSHU CHARACTER-1B199;Lo;0;L;;;;;N;;;;; 1B19A;NUSHU CHARACTER-1B19A;Lo;0;L;;;;;N;;;;; 1B19B;NUSHU CHARACTER-1B19B;Lo;0;L;;;;;N;;;;; 1B19C;NUSHU CHARACTER-1B19C;Lo;0;L;;;;;N;;;;; 1B19D;NUSHU CHARACTER-1B19D;Lo;0;L;;;;;N;;;;; 1B19E;NUSHU CHARACTER-1B19E;Lo;0;L;;;;;N;;;;; 1B19F;NUSHU CHARACTER-1B19F;Lo;0;L;;;;;N;;;;; 1B1A0;NUSHU CHARACTER-1B1A0;Lo;0;L;;;;;N;;;;; 1B1A1;NUSHU CHARACTER-1B1A1;Lo;0;L;;;;;N;;;;; 1B1A2;NUSHU CHARACTER-1B1A2;Lo;0;L;;;;;N;;;;; 1B1A3;NUSHU CHARACTER-1B1A3;Lo;0;L;;;;;N;;;;; 1B1A4;NUSHU CHARACTER-1B1A4;Lo;0;L;;;;;N;;;;; 1B1A5;NUSHU CHARACTER-1B1A5;Lo;0;L;;;;;N;;;;; 1B1A6;NUSHU CHARACTER-1B1A6;Lo;0;L;;;;;N;;;;; 1B1A7;NUSHU CHARACTER-1B1A7;Lo;0;L;;;;;N;;;;; 1B1A8;NUSHU CHARACTER-1B1A8;Lo;0;L;;;;;N;;;;; 1B1A9;NUSHU CHARACTER-1B1A9;Lo;0;L;;;;;N;;;;; 1B1AA;NUSHU CHARACTER-1B1AA;Lo;0;L;;;;;N;;;;; 1B1AB;NUSHU CHARACTER-1B1AB;Lo;0;L;;;;;N;;;;; 1B1AC;NUSHU CHARACTER-1B1AC;Lo;0;L;;;;;N;;;;; 1B1AD;NUSHU CHARACTER-1B1AD;Lo;0;L;;;;;N;;;;; 1B1AE;NUSHU CHARACTER-1B1AE;Lo;0;L;;;;;N;;;;; 1B1AF;NUSHU CHARACTER-1B1AF;Lo;0;L;;;;;N;;;;; 1B1B0;NUSHU CHARACTER-1B1B0;Lo;0;L;;;;;N;;;;; 1B1B1;NUSHU CHARACTER-1B1B1;Lo;0;L;;;;;N;;;;; 1B1B2;NUSHU CHARACTER-1B1B2;Lo;0;L;;;;;N;;;;; 1B1B3;NUSHU CHARACTER-1B1B3;Lo;0;L;;;;;N;;;;; 1B1B4;NUSHU CHARACTER-1B1B4;Lo;0;L;;;;;N;;;;; 1B1B5;NUSHU CHARACTER-1B1B5;Lo;0;L;;;;;N;;;;; 1B1B6;NUSHU CHARACTER-1B1B6;Lo;0;L;;;;;N;;;;; 1B1B7;NUSHU CHARACTER-1B1B7;Lo;0;L;;;;;N;;;;; 1B1B8;NUSHU CHARACTER-1B1B8;Lo;0;L;;;;;N;;;;; 1B1B9;NUSHU CHARACTER-1B1B9;Lo;0;L;;;;;N;;;;; 1B1BA;NUSHU CHARACTER-1B1BA;Lo;0;L;;;;;N;;;;; 1B1BB;NUSHU CHARACTER-1B1BB;Lo;0;L;;;;;N;;;;; 1B1BC;NUSHU CHARACTER-1B1BC;Lo;0;L;;;;;N;;;;; 1B1BD;NUSHU CHARACTER-1B1BD;Lo;0;L;;;;;N;;;;; 1B1BE;NUSHU CHARACTER-1B1BE;Lo;0;L;;;;;N;;;;; 1B1BF;NUSHU CHARACTER-1B1BF;Lo;0;L;;;;;N;;;;; 1B1C0;NUSHU CHARACTER-1B1C0;Lo;0;L;;;;;N;;;;; 1B1C1;NUSHU CHARACTER-1B1C1;Lo;0;L;;;;;N;;;;; 1B1C2;NUSHU CHARACTER-1B1C2;Lo;0;L;;;;;N;;;;; 1B1C3;NUSHU CHARACTER-1B1C3;Lo;0;L;;;;;N;;;;; 1B1C4;NUSHU CHARACTER-1B1C4;Lo;0;L;;;;;N;;;;; 1B1C5;NUSHU CHARACTER-1B1C5;Lo;0;L;;;;;N;;;;; 1B1C6;NUSHU CHARACTER-1B1C6;Lo;0;L;;;;;N;;;;; 1B1C7;NUSHU CHARACTER-1B1C7;Lo;0;L;;;;;N;;;;; 1B1C8;NUSHU CHARACTER-1B1C8;Lo;0;L;;;;;N;;;;; 1B1C9;NUSHU CHARACTER-1B1C9;Lo;0;L;;;;;N;;;;; 1B1CA;NUSHU CHARACTER-1B1CA;Lo;0;L;;;;;N;;;;; 1B1CB;NUSHU CHARACTER-1B1CB;Lo;0;L;;;;;N;;;;; 1B1CC;NUSHU CHARACTER-1B1CC;Lo;0;L;;;;;N;;;;; 1B1CD;NUSHU CHARACTER-1B1CD;Lo;0;L;;;;;N;;;;; 1B1CE;NUSHU CHARACTER-1B1CE;Lo;0;L;;;;;N;;;;; 1B1CF;NUSHU CHARACTER-1B1CF;Lo;0;L;;;;;N;;;;; 1B1D0;NUSHU CHARACTER-1B1D0;Lo;0;L;;;;;N;;;;; 1B1D1;NUSHU CHARACTER-1B1D1;Lo;0;L;;;;;N;;;;; 1B1D2;NUSHU CHARACTER-1B1D2;Lo;0;L;;;;;N;;;;; 1B1D3;NUSHU CHARACTER-1B1D3;Lo;0;L;;;;;N;;;;; 1B1D4;NUSHU CHARACTER-1B1D4;Lo;0;L;;;;;N;;;;; 1B1D5;NUSHU CHARACTER-1B1D5;Lo;0;L;;;;;N;;;;; 1B1D6;NUSHU CHARACTER-1B1D6;Lo;0;L;;;;;N;;;;; 1B1D7;NUSHU CHARACTER-1B1D7;Lo;0;L;;;;;N;;;;; 1B1D8;NUSHU CHARACTER-1B1D8;Lo;0;L;;;;;N;;;;; 1B1D9;NUSHU CHARACTER-1B1D9;Lo;0;L;;;;;N;;;;; 1B1DA;NUSHU CHARACTER-1B1DA;Lo;0;L;;;;;N;;;;; 1B1DB;NUSHU CHARACTER-1B1DB;Lo;0;L;;;;;N;;;;; 1B1DC;NUSHU CHARACTER-1B1DC;Lo;0;L;;;;;N;;;;; 1B1DD;NUSHU CHARACTER-1B1DD;Lo;0;L;;;;;N;;;;; 1B1DE;NUSHU CHARACTER-1B1DE;Lo;0;L;;;;;N;;;;; 1B1DF;NUSHU CHARACTER-1B1DF;Lo;0;L;;;;;N;;;;; 1B1E0;NUSHU CHARACTER-1B1E0;Lo;0;L;;;;;N;;;;; 1B1E1;NUSHU CHARACTER-1B1E1;Lo;0;L;;;;;N;;;;; 1B1E2;NUSHU CHARACTER-1B1E2;Lo;0;L;;;;;N;;;;; 1B1E3;NUSHU CHARACTER-1B1E3;Lo;0;L;;;;;N;;;;; 1B1E4;NUSHU CHARACTER-1B1E4;Lo;0;L;;;;;N;;;;; 1B1E5;NUSHU CHARACTER-1B1E5;Lo;0;L;;;;;N;;;;; 1B1E6;NUSHU CHARACTER-1B1E6;Lo;0;L;;;;;N;;;;; 1B1E7;NUSHU CHARACTER-1B1E7;Lo;0;L;;;;;N;;;;; 1B1E8;NUSHU CHARACTER-1B1E8;Lo;0;L;;;;;N;;;;; 1B1E9;NUSHU CHARACTER-1B1E9;Lo;0;L;;;;;N;;;;; 1B1EA;NUSHU CHARACTER-1B1EA;Lo;0;L;;;;;N;;;;; 1B1EB;NUSHU CHARACTER-1B1EB;Lo;0;L;;;;;N;;;;; 1B1EC;NUSHU CHARACTER-1B1EC;Lo;0;L;;;;;N;;;;; 1B1ED;NUSHU CHARACTER-1B1ED;Lo;0;L;;;;;N;;;;; 1B1EE;NUSHU CHARACTER-1B1EE;Lo;0;L;;;;;N;;;;; 1B1EF;NUSHU CHARACTER-1B1EF;Lo;0;L;;;;;N;;;;; 1B1F0;NUSHU CHARACTER-1B1F0;Lo;0;L;;;;;N;;;;; 1B1F1;NUSHU CHARACTER-1B1F1;Lo;0;L;;;;;N;;;;; 1B1F2;NUSHU CHARACTER-1B1F2;Lo;0;L;;;;;N;;;;; 1B1F3;NUSHU CHARACTER-1B1F3;Lo;0;L;;;;;N;;;;; 1B1F4;NUSHU CHARACTER-1B1F4;Lo;0;L;;;;;N;;;;; 1B1F5;NUSHU CHARACTER-1B1F5;Lo;0;L;;;;;N;;;;; 1B1F6;NUSHU CHARACTER-1B1F6;Lo;0;L;;;;;N;;;;; 1B1F7;NUSHU CHARACTER-1B1F7;Lo;0;L;;;;;N;;;;; 1B1F8;NUSHU CHARACTER-1B1F8;Lo;0;L;;;;;N;;;;; 1B1F9;NUSHU CHARACTER-1B1F9;Lo;0;L;;;;;N;;;;; 1B1FA;NUSHU CHARACTER-1B1FA;Lo;0;L;;;;;N;;;;; 1B1FB;NUSHU CHARACTER-1B1FB;Lo;0;L;;;;;N;;;;; 1B1FC;NUSHU CHARACTER-1B1FC;Lo;0;L;;;;;N;;;;; 1B1FD;NUSHU CHARACTER-1B1FD;Lo;0;L;;;;;N;;;;; 1B1FE;NUSHU CHARACTER-1B1FE;Lo;0;L;;;;;N;;;;; 1B1FF;NUSHU CHARACTER-1B1FF;Lo;0;L;;;;;N;;;;; 1B200;NUSHU CHARACTER-1B200;Lo;0;L;;;;;N;;;;; 1B201;NUSHU CHARACTER-1B201;Lo;0;L;;;;;N;;;;; 1B202;NUSHU CHARACTER-1B202;Lo;0;L;;;;;N;;;;; 1B203;NUSHU CHARACTER-1B203;Lo;0;L;;;;;N;;;;; 1B204;NUSHU CHARACTER-1B204;Lo;0;L;;;;;N;;;;; 1B205;NUSHU CHARACTER-1B205;Lo;0;L;;;;;N;;;;; 1B206;NUSHU CHARACTER-1B206;Lo;0;L;;;;;N;;;;; 1B207;NUSHU CHARACTER-1B207;Lo;0;L;;;;;N;;;;; 1B208;NUSHU CHARACTER-1B208;Lo;0;L;;;;;N;;;;; 1B209;NUSHU CHARACTER-1B209;Lo;0;L;;;;;N;;;;; 1B20A;NUSHU CHARACTER-1B20A;Lo;0;L;;;;;N;;;;; 1B20B;NUSHU CHARACTER-1B20B;Lo;0;L;;;;;N;;;;; 1B20C;NUSHU CHARACTER-1B20C;Lo;0;L;;;;;N;;;;; 1B20D;NUSHU CHARACTER-1B20D;Lo;0;L;;;;;N;;;;; 1B20E;NUSHU CHARACTER-1B20E;Lo;0;L;;;;;N;;;;; 1B20F;NUSHU CHARACTER-1B20F;Lo;0;L;;;;;N;;;;; 1B210;NUSHU CHARACTER-1B210;Lo;0;L;;;;;N;;;;; 1B211;NUSHU CHARACTER-1B211;Lo;0;L;;;;;N;;;;; 1B212;NUSHU CHARACTER-1B212;Lo;0;L;;;;;N;;;;; 1B213;NUSHU CHARACTER-1B213;Lo;0;L;;;;;N;;;;; 1B214;NUSHU CHARACTER-1B214;Lo;0;L;;;;;N;;;;; 1B215;NUSHU CHARACTER-1B215;Lo;0;L;;;;;N;;;;; 1B216;NUSHU CHARACTER-1B216;Lo;0;L;;;;;N;;;;; 1B217;NUSHU CHARACTER-1B217;Lo;0;L;;;;;N;;;;; 1B218;NUSHU CHARACTER-1B218;Lo;0;L;;;;;N;;;;; 1B219;NUSHU CHARACTER-1B219;Lo;0;L;;;;;N;;;;; 1B21A;NUSHU CHARACTER-1B21A;Lo;0;L;;;;;N;;;;; 1B21B;NUSHU CHARACTER-1B21B;Lo;0;L;;;;;N;;;;; 1B21C;NUSHU CHARACTER-1B21C;Lo;0;L;;;;;N;;;;; 1B21D;NUSHU CHARACTER-1B21D;Lo;0;L;;;;;N;;;;; 1B21E;NUSHU CHARACTER-1B21E;Lo;0;L;;;;;N;;;;; 1B21F;NUSHU CHARACTER-1B21F;Lo;0;L;;;;;N;;;;; 1B220;NUSHU CHARACTER-1B220;Lo;0;L;;;;;N;;;;; 1B221;NUSHU CHARACTER-1B221;Lo;0;L;;;;;N;;;;; 1B222;NUSHU CHARACTER-1B222;Lo;0;L;;;;;N;;;;; 1B223;NUSHU CHARACTER-1B223;Lo;0;L;;;;;N;;;;; 1B224;NUSHU CHARACTER-1B224;Lo;0;L;;;;;N;;;;; 1B225;NUSHU CHARACTER-1B225;Lo;0;L;;;;;N;;;;; 1B226;NUSHU CHARACTER-1B226;Lo;0;L;;;;;N;;;;; 1B227;NUSHU CHARACTER-1B227;Lo;0;L;;;;;N;;;;; 1B228;NUSHU CHARACTER-1B228;Lo;0;L;;;;;N;;;;; 1B229;NUSHU CHARACTER-1B229;Lo;0;L;;;;;N;;;;; 1B22A;NUSHU CHARACTER-1B22A;Lo;0;L;;;;;N;;;;; 1B22B;NUSHU CHARACTER-1B22B;Lo;0;L;;;;;N;;;;; 1B22C;NUSHU CHARACTER-1B22C;Lo;0;L;;;;;N;;;;; 1B22D;NUSHU CHARACTER-1B22D;Lo;0;L;;;;;N;;;;; 1B22E;NUSHU CHARACTER-1B22E;Lo;0;L;;;;;N;;;;; 1B22F;NUSHU CHARACTER-1B22F;Lo;0;L;;;;;N;;;;; 1B230;NUSHU CHARACTER-1B230;Lo;0;L;;;;;N;;;;; 1B231;NUSHU CHARACTER-1B231;Lo;0;L;;;;;N;;;;; 1B232;NUSHU CHARACTER-1B232;Lo;0;L;;;;;N;;;;; 1B233;NUSHU CHARACTER-1B233;Lo;0;L;;;;;N;;;;; 1B234;NUSHU CHARACTER-1B234;Lo;0;L;;;;;N;;;;; 1B235;NUSHU CHARACTER-1B235;Lo;0;L;;;;;N;;;;; 1B236;NUSHU CHARACTER-1B236;Lo;0;L;;;;;N;;;;; 1B237;NUSHU CHARACTER-1B237;Lo;0;L;;;;;N;;;;; 1B238;NUSHU CHARACTER-1B238;Lo;0;L;;;;;N;;;;; 1B239;NUSHU CHARACTER-1B239;Lo;0;L;;;;;N;;;;; 1B23A;NUSHU CHARACTER-1B23A;Lo;0;L;;;;;N;;;;; 1B23B;NUSHU CHARACTER-1B23B;Lo;0;L;;;;;N;;;;; 1B23C;NUSHU CHARACTER-1B23C;Lo;0;L;;;;;N;;;;; 1B23D;NUSHU CHARACTER-1B23D;Lo;0;L;;;;;N;;;;; 1B23E;NUSHU CHARACTER-1B23E;Lo;0;L;;;;;N;;;;; 1B23F;NUSHU CHARACTER-1B23F;Lo;0;L;;;;;N;;;;; 1B240;NUSHU CHARACTER-1B240;Lo;0;L;;;;;N;;;;; 1B241;NUSHU CHARACTER-1B241;Lo;0;L;;;;;N;;;;; 1B242;NUSHU CHARACTER-1B242;Lo;0;L;;;;;N;;;;; 1B243;NUSHU CHARACTER-1B243;Lo;0;L;;;;;N;;;;; 1B244;NUSHU CHARACTER-1B244;Lo;0;L;;;;;N;;;;; 1B245;NUSHU CHARACTER-1B245;Lo;0;L;;;;;N;;;;; 1B246;NUSHU CHARACTER-1B246;Lo;0;L;;;;;N;;;;; 1B247;NUSHU CHARACTER-1B247;Lo;0;L;;;;;N;;;;; 1B248;NUSHU CHARACTER-1B248;Lo;0;L;;;;;N;;;;; 1B249;NUSHU CHARACTER-1B249;Lo;0;L;;;;;N;;;;; 1B24A;NUSHU CHARACTER-1B24A;Lo;0;L;;;;;N;;;;; 1B24B;NUSHU CHARACTER-1B24B;Lo;0;L;;;;;N;;;;; 1B24C;NUSHU CHARACTER-1B24C;Lo;0;L;;;;;N;;;;; 1B24D;NUSHU CHARACTER-1B24D;Lo;0;L;;;;;N;;;;; 1B24E;NUSHU CHARACTER-1B24E;Lo;0;L;;;;;N;;;;; 1B24F;NUSHU CHARACTER-1B24F;Lo;0;L;;;;;N;;;;; 1B250;NUSHU CHARACTER-1B250;Lo;0;L;;;;;N;;;;; 1B251;NUSHU CHARACTER-1B251;Lo;0;L;;;;;N;;;;; 1B252;NUSHU CHARACTER-1B252;Lo;0;L;;;;;N;;;;; 1B253;NUSHU CHARACTER-1B253;Lo;0;L;;;;;N;;;;; 1B254;NUSHU CHARACTER-1B254;Lo;0;L;;;;;N;;;;; 1B255;NUSHU CHARACTER-1B255;Lo;0;L;;;;;N;;;;; 1B256;NUSHU CHARACTER-1B256;Lo;0;L;;;;;N;;;;; 1B257;NUSHU CHARACTER-1B257;Lo;0;L;;;;;N;;;;; 1B258;NUSHU CHARACTER-1B258;Lo;0;L;;;;;N;;;;; 1B259;NUSHU CHARACTER-1B259;Lo;0;L;;;;;N;;;;; 1B25A;NUSHU CHARACTER-1B25A;Lo;0;L;;;;;N;;;;; 1B25B;NUSHU CHARACTER-1B25B;Lo;0;L;;;;;N;;;;; 1B25C;NUSHU CHARACTER-1B25C;Lo;0;L;;;;;N;;;;; 1B25D;NUSHU CHARACTER-1B25D;Lo;0;L;;;;;N;;;;; 1B25E;NUSHU CHARACTER-1B25E;Lo;0;L;;;;;N;;;;; 1B25F;NUSHU CHARACTER-1B25F;Lo;0;L;;;;;N;;;;; 1B260;NUSHU CHARACTER-1B260;Lo;0;L;;;;;N;;;;; 1B261;NUSHU CHARACTER-1B261;Lo;0;L;;;;;N;;;;; 1B262;NUSHU CHARACTER-1B262;Lo;0;L;;;;;N;;;;; 1B263;NUSHU CHARACTER-1B263;Lo;0;L;;;;;N;;;;; 1B264;NUSHU CHARACTER-1B264;Lo;0;L;;;;;N;;;;; 1B265;NUSHU CHARACTER-1B265;Lo;0;L;;;;;N;;;;; 1B266;NUSHU CHARACTER-1B266;Lo;0;L;;;;;N;;;;; 1B267;NUSHU CHARACTER-1B267;Lo;0;L;;;;;N;;;;; 1B268;NUSHU CHARACTER-1B268;Lo;0;L;;;;;N;;;;; 1B269;NUSHU CHARACTER-1B269;Lo;0;L;;;;;N;;;;; 1B26A;NUSHU CHARACTER-1B26A;Lo;0;L;;;;;N;;;;; 1B26B;NUSHU CHARACTER-1B26B;Lo;0;L;;;;;N;;;;; 1B26C;NUSHU CHARACTER-1B26C;Lo;0;L;;;;;N;;;;; 1B26D;NUSHU CHARACTER-1B26D;Lo;0;L;;;;;N;;;;; 1B26E;NUSHU CHARACTER-1B26E;Lo;0;L;;;;;N;;;;; 1B26F;NUSHU CHARACTER-1B26F;Lo;0;L;;;;;N;;;;; 1B270;NUSHU CHARACTER-1B270;Lo;0;L;;;;;N;;;;; 1B271;NUSHU CHARACTER-1B271;Lo;0;L;;;;;N;;;;; 1B272;NUSHU CHARACTER-1B272;Lo;0;L;;;;;N;;;;; 1B273;NUSHU CHARACTER-1B273;Lo;0;L;;;;;N;;;;; 1B274;NUSHU CHARACTER-1B274;Lo;0;L;;;;;N;;;;; 1B275;NUSHU CHARACTER-1B275;Lo;0;L;;;;;N;;;;; 1B276;NUSHU CHARACTER-1B276;Lo;0;L;;;;;N;;;;; 1B277;NUSHU CHARACTER-1B277;Lo;0;L;;;;;N;;;;; 1B278;NUSHU CHARACTER-1B278;Lo;0;L;;;;;N;;;;; 1B279;NUSHU CHARACTER-1B279;Lo;0;L;;;;;N;;;;; 1B27A;NUSHU CHARACTER-1B27A;Lo;0;L;;;;;N;;;;; 1B27B;NUSHU CHARACTER-1B27B;Lo;0;L;;;;;N;;;;; 1B27C;NUSHU CHARACTER-1B27C;Lo;0;L;;;;;N;;;;; 1B27D;NUSHU CHARACTER-1B27D;Lo;0;L;;;;;N;;;;; 1B27E;NUSHU CHARACTER-1B27E;Lo;0;L;;;;;N;;;;; 1B27F;NUSHU CHARACTER-1B27F;Lo;0;L;;;;;N;;;;; 1B280;NUSHU CHARACTER-1B280;Lo;0;L;;;;;N;;;;; 1B281;NUSHU CHARACTER-1B281;Lo;0;L;;;;;N;;;;; 1B282;NUSHU CHARACTER-1B282;Lo;0;L;;;;;N;;;;; 1B283;NUSHU CHARACTER-1B283;Lo;0;L;;;;;N;;;;; 1B284;NUSHU CHARACTER-1B284;Lo;0;L;;;;;N;;;;; 1B285;NUSHU CHARACTER-1B285;Lo;0;L;;;;;N;;;;; 1B286;NUSHU CHARACTER-1B286;Lo;0;L;;;;;N;;;;; 1B287;NUSHU CHARACTER-1B287;Lo;0;L;;;;;N;;;;; 1B288;NUSHU CHARACTER-1B288;Lo;0;L;;;;;N;;;;; 1B289;NUSHU CHARACTER-1B289;Lo;0;L;;;;;N;;;;; 1B28A;NUSHU CHARACTER-1B28A;Lo;0;L;;;;;N;;;;; 1B28B;NUSHU CHARACTER-1B28B;Lo;0;L;;;;;N;;;;; 1B28C;NUSHU CHARACTER-1B28C;Lo;0;L;;;;;N;;;;; 1B28D;NUSHU CHARACTER-1B28D;Lo;0;L;;;;;N;;;;; 1B28E;NUSHU CHARACTER-1B28E;Lo;0;L;;;;;N;;;;; 1B28F;NUSHU CHARACTER-1B28F;Lo;0;L;;;;;N;;;;; 1B290;NUSHU CHARACTER-1B290;Lo;0;L;;;;;N;;;;; 1B291;NUSHU CHARACTER-1B291;Lo;0;L;;;;;N;;;;; 1B292;NUSHU CHARACTER-1B292;Lo;0;L;;;;;N;;;;; 1B293;NUSHU CHARACTER-1B293;Lo;0;L;;;;;N;;;;; 1B294;NUSHU CHARACTER-1B294;Lo;0;L;;;;;N;;;;; 1B295;NUSHU CHARACTER-1B295;Lo;0;L;;;;;N;;;;; 1B296;NUSHU CHARACTER-1B296;Lo;0;L;;;;;N;;;;; 1B297;NUSHU CHARACTER-1B297;Lo;0;L;;;;;N;;;;; 1B298;NUSHU CHARACTER-1B298;Lo;0;L;;;;;N;;;;; 1B299;NUSHU CHARACTER-1B299;Lo;0;L;;;;;N;;;;; 1B29A;NUSHU CHARACTER-1B29A;Lo;0;L;;;;;N;;;;; 1B29B;NUSHU CHARACTER-1B29B;Lo;0;L;;;;;N;;;;; 1B29C;NUSHU CHARACTER-1B29C;Lo;0;L;;;;;N;;;;; 1B29D;NUSHU CHARACTER-1B29D;Lo;0;L;;;;;N;;;;; 1B29E;NUSHU CHARACTER-1B29E;Lo;0;L;;;;;N;;;;; 1B29F;NUSHU CHARACTER-1B29F;Lo;0;L;;;;;N;;;;; 1B2A0;NUSHU CHARACTER-1B2A0;Lo;0;L;;;;;N;;;;; 1B2A1;NUSHU CHARACTER-1B2A1;Lo;0;L;;;;;N;;;;; 1B2A2;NUSHU CHARACTER-1B2A2;Lo;0;L;;;;;N;;;;; 1B2A3;NUSHU CHARACTER-1B2A3;Lo;0;L;;;;;N;;;;; 1B2A4;NUSHU CHARACTER-1B2A4;Lo;0;L;;;;;N;;;;; 1B2A5;NUSHU CHARACTER-1B2A5;Lo;0;L;;;;;N;;;;; 1B2A6;NUSHU CHARACTER-1B2A6;Lo;0;L;;;;;N;;;;; 1B2A7;NUSHU CHARACTER-1B2A7;Lo;0;L;;;;;N;;;;; 1B2A8;NUSHU CHARACTER-1B2A8;Lo;0;L;;;;;N;;;;; 1B2A9;NUSHU CHARACTER-1B2A9;Lo;0;L;;;;;N;;;;; 1B2AA;NUSHU CHARACTER-1B2AA;Lo;0;L;;;;;N;;;;; 1B2AB;NUSHU CHARACTER-1B2AB;Lo;0;L;;;;;N;;;;; 1B2AC;NUSHU CHARACTER-1B2AC;Lo;0;L;;;;;N;;;;; 1B2AD;NUSHU CHARACTER-1B2AD;Lo;0;L;;;;;N;;;;; 1B2AE;NUSHU CHARACTER-1B2AE;Lo;0;L;;;;;N;;;;; 1B2AF;NUSHU CHARACTER-1B2AF;Lo;0;L;;;;;N;;;;; 1B2B0;NUSHU CHARACTER-1B2B0;Lo;0;L;;;;;N;;;;; 1B2B1;NUSHU CHARACTER-1B2B1;Lo;0;L;;;;;N;;;;; 1B2B2;NUSHU CHARACTER-1B2B2;Lo;0;L;;;;;N;;;;; 1B2B3;NUSHU CHARACTER-1B2B3;Lo;0;L;;;;;N;;;;; 1B2B4;NUSHU CHARACTER-1B2B4;Lo;0;L;;;;;N;;;;; 1B2B5;NUSHU CHARACTER-1B2B5;Lo;0;L;;;;;N;;;;; 1B2B6;NUSHU CHARACTER-1B2B6;Lo;0;L;;;;;N;;;;; 1B2B7;NUSHU CHARACTER-1B2B7;Lo;0;L;;;;;N;;;;; 1B2B8;NUSHU CHARACTER-1B2B8;Lo;0;L;;;;;N;;;;; 1B2B9;NUSHU CHARACTER-1B2B9;Lo;0;L;;;;;N;;;;; 1B2BA;NUSHU CHARACTER-1B2BA;Lo;0;L;;;;;N;;;;; 1B2BB;NUSHU CHARACTER-1B2BB;Lo;0;L;;;;;N;;;;; 1B2BC;NUSHU CHARACTER-1B2BC;Lo;0;L;;;;;N;;;;; 1B2BD;NUSHU CHARACTER-1B2BD;Lo;0;L;;;;;N;;;;; 1B2BE;NUSHU CHARACTER-1B2BE;Lo;0;L;;;;;N;;;;; 1B2BF;NUSHU CHARACTER-1B2BF;Lo;0;L;;;;;N;;;;; 1B2C0;NUSHU CHARACTER-1B2C0;Lo;0;L;;;;;N;;;;; 1B2C1;NUSHU CHARACTER-1B2C1;Lo;0;L;;;;;N;;;;; 1B2C2;NUSHU CHARACTER-1B2C2;Lo;0;L;;;;;N;;;;; 1B2C3;NUSHU CHARACTER-1B2C3;Lo;0;L;;;;;N;;;;; 1B2C4;NUSHU CHARACTER-1B2C4;Lo;0;L;;;;;N;;;;; 1B2C5;NUSHU CHARACTER-1B2C5;Lo;0;L;;;;;N;;;;; 1B2C6;NUSHU CHARACTER-1B2C6;Lo;0;L;;;;;N;;;;; 1B2C7;NUSHU CHARACTER-1B2C7;Lo;0;L;;;;;N;;;;; 1B2C8;NUSHU CHARACTER-1B2C8;Lo;0;L;;;;;N;;;;; 1B2C9;NUSHU CHARACTER-1B2C9;Lo;0;L;;;;;N;;;;; 1B2CA;NUSHU CHARACTER-1B2CA;Lo;0;L;;;;;N;;;;; 1B2CB;NUSHU CHARACTER-1B2CB;Lo;0;L;;;;;N;;;;; 1B2CC;NUSHU CHARACTER-1B2CC;Lo;0;L;;;;;N;;;;; 1B2CD;NUSHU CHARACTER-1B2CD;Lo;0;L;;;;;N;;;;; 1B2CE;NUSHU CHARACTER-1B2CE;Lo;0;L;;;;;N;;;;; 1B2CF;NUSHU CHARACTER-1B2CF;Lo;0;L;;;;;N;;;;; 1B2D0;NUSHU CHARACTER-1B2D0;Lo;0;L;;;;;N;;;;; 1B2D1;NUSHU CHARACTER-1B2D1;Lo;0;L;;;;;N;;;;; 1B2D2;NUSHU CHARACTER-1B2D2;Lo;0;L;;;;;N;;;;; 1B2D3;NUSHU CHARACTER-1B2D3;Lo;0;L;;;;;N;;;;; 1B2D4;NUSHU CHARACTER-1B2D4;Lo;0;L;;;;;N;;;;; 1B2D5;NUSHU CHARACTER-1B2D5;Lo;0;L;;;;;N;;;;; 1B2D6;NUSHU CHARACTER-1B2D6;Lo;0;L;;;;;N;;;;; 1B2D7;NUSHU CHARACTER-1B2D7;Lo;0;L;;;;;N;;;;; 1B2D8;NUSHU CHARACTER-1B2D8;Lo;0;L;;;;;N;;;;; 1B2D9;NUSHU CHARACTER-1B2D9;Lo;0;L;;;;;N;;;;; 1B2DA;NUSHU CHARACTER-1B2DA;Lo;0;L;;;;;N;;;;; 1B2DB;NUSHU CHARACTER-1B2DB;Lo;0;L;;;;;N;;;;; 1B2DC;NUSHU CHARACTER-1B2DC;Lo;0;L;;;;;N;;;;; 1B2DD;NUSHU CHARACTER-1B2DD;Lo;0;L;;;;;N;;;;; 1B2DE;NUSHU CHARACTER-1B2DE;Lo;0;L;;;;;N;;;;; 1B2DF;NUSHU CHARACTER-1B2DF;Lo;0;L;;;;;N;;;;; 1B2E0;NUSHU CHARACTER-1B2E0;Lo;0;L;;;;;N;;;;; 1B2E1;NUSHU CHARACTER-1B2E1;Lo;0;L;;;;;N;;;;; 1B2E2;NUSHU CHARACTER-1B2E2;Lo;0;L;;;;;N;;;;; 1B2E3;NUSHU CHARACTER-1B2E3;Lo;0;L;;;;;N;;;;; 1B2E4;NUSHU CHARACTER-1B2E4;Lo;0;L;;;;;N;;;;; 1B2E5;NUSHU CHARACTER-1B2E5;Lo;0;L;;;;;N;;;;; 1B2E6;NUSHU CHARACTER-1B2E6;Lo;0;L;;;;;N;;;;; 1B2E7;NUSHU CHARACTER-1B2E7;Lo;0;L;;;;;N;;;;; 1B2E8;NUSHU CHARACTER-1B2E8;Lo;0;L;;;;;N;;;;; 1B2E9;NUSHU CHARACTER-1B2E9;Lo;0;L;;;;;N;;;;; 1B2EA;NUSHU CHARACTER-1B2EA;Lo;0;L;;;;;N;;;;; 1B2EB;NUSHU CHARACTER-1B2EB;Lo;0;L;;;;;N;;;;; 1B2EC;NUSHU CHARACTER-1B2EC;Lo;0;L;;;;;N;;;;; 1B2ED;NUSHU CHARACTER-1B2ED;Lo;0;L;;;;;N;;;;; 1B2EE;NUSHU CHARACTER-1B2EE;Lo;0;L;;;;;N;;;;; 1B2EF;NUSHU CHARACTER-1B2EF;Lo;0;L;;;;;N;;;;; 1B2F0;NUSHU CHARACTER-1B2F0;Lo;0;L;;;;;N;;;;; 1B2F1;NUSHU CHARACTER-1B2F1;Lo;0;L;;;;;N;;;;; 1B2F2;NUSHU CHARACTER-1B2F2;Lo;0;L;;;;;N;;;;; 1B2F3;NUSHU CHARACTER-1B2F3;Lo;0;L;;;;;N;;;;; 1B2F4;NUSHU CHARACTER-1B2F4;Lo;0;L;;;;;N;;;;; 1B2F5;NUSHU CHARACTER-1B2F5;Lo;0;L;;;;;N;;;;; 1B2F6;NUSHU CHARACTER-1B2F6;Lo;0;L;;;;;N;;;;; 1B2F7;NUSHU CHARACTER-1B2F7;Lo;0;L;;;;;N;;;;; 1B2F8;NUSHU CHARACTER-1B2F8;Lo;0;L;;;;;N;;;;; 1B2F9;NUSHU CHARACTER-1B2F9;Lo;0;L;;;;;N;;;;; 1B2FA;NUSHU CHARACTER-1B2FA;Lo;0;L;;;;;N;;;;; 1B2FB;NUSHU CHARACTER-1B2FB;Lo;0;L;;;;;N;;;;; 1BC00;DUPLOYAN LETTER H;Lo;0;L;;;;;N;;;;; 1BC01;DUPLOYAN LETTER X;Lo;0;L;;;;;N;;;;; 1BC02;DUPLOYAN LETTER P;Lo;0;L;;;;;N;;;;; 1BC03;DUPLOYAN LETTER T;Lo;0;L;;;;;N;;;;; 1BC04;DUPLOYAN LETTER F;Lo;0;L;;;;;N;;;;; 1BC05;DUPLOYAN LETTER K;Lo;0;L;;;;;N;;;;; 1BC06;DUPLOYAN LETTER L;Lo;0;L;;;;;N;;;;; 1BC07;DUPLOYAN LETTER B;Lo;0;L;;;;;N;;;;; 1BC08;DUPLOYAN LETTER D;Lo;0;L;;;;;N;;;;; 1BC09;DUPLOYAN LETTER V;Lo;0;L;;;;;N;;;;; 1BC0A;DUPLOYAN LETTER G;Lo;0;L;;;;;N;;;;; 1BC0B;DUPLOYAN LETTER R;Lo;0;L;;;;;N;;;;; 1BC0C;DUPLOYAN LETTER P N;Lo;0;L;;;;;N;;;;; 1BC0D;DUPLOYAN LETTER D S;Lo;0;L;;;;;N;;;;; 1BC0E;DUPLOYAN LETTER F N;Lo;0;L;;;;;N;;;;; 1BC0F;DUPLOYAN LETTER K M;Lo;0;L;;;;;N;;;;; 1BC10;DUPLOYAN LETTER R S;Lo;0;L;;;;;N;;;;; 1BC11;DUPLOYAN LETTER TH;Lo;0;L;;;;;N;;;;; 1BC12;DUPLOYAN LETTER SLOAN DH;Lo;0;L;;;;;N;;;;; 1BC13;DUPLOYAN LETTER DH;Lo;0;L;;;;;N;;;;; 1BC14;DUPLOYAN LETTER KK;Lo;0;L;;;;;N;;;;; 1BC15;DUPLOYAN LETTER SLOAN J;Lo;0;L;;;;;N;;;;; 1BC16;DUPLOYAN LETTER HL;Lo;0;L;;;;;N;;;;; 1BC17;DUPLOYAN LETTER LH;Lo;0;L;;;;;N;;;;; 1BC18;DUPLOYAN LETTER RH;Lo;0;L;;;;;N;;;;; 1BC19;DUPLOYAN LETTER M;Lo;0;L;;;;;N;;;;; 1BC1A;DUPLOYAN LETTER N;Lo;0;L;;;;;N;;;;; 1BC1B;DUPLOYAN LETTER J;Lo;0;L;;;;;N;;;;; 1BC1C;DUPLOYAN LETTER S;Lo;0;L;;;;;N;;;;; 1BC1D;DUPLOYAN LETTER M N;Lo;0;L;;;;;N;;;;; 1BC1E;DUPLOYAN LETTER N M;Lo;0;L;;;;;N;;;;; 1BC1F;DUPLOYAN LETTER J M;Lo;0;L;;;;;N;;;;; 1BC20;DUPLOYAN LETTER S J;Lo;0;L;;;;;N;;;;; 1BC21;DUPLOYAN LETTER M WITH DOT;Lo;0;L;;;;;N;;;;; 1BC22;DUPLOYAN LETTER N WITH DOT;Lo;0;L;;;;;N;;;;; 1BC23;DUPLOYAN LETTER J WITH DOT;Lo;0;L;;;;;N;;;;; 1BC24;DUPLOYAN LETTER J WITH DOTS INSIDE AND ABOVE;Lo;0;L;;;;;N;;;;; 1BC25;DUPLOYAN LETTER S WITH DOT;Lo;0;L;;;;;N;;;;; 1BC26;DUPLOYAN LETTER S WITH DOT BELOW;Lo;0;L;;;;;N;;;;; 1BC27;DUPLOYAN LETTER M S;Lo;0;L;;;;;N;;;;; 1BC28;DUPLOYAN LETTER N S;Lo;0;L;;;;;N;;;;; 1BC29;DUPLOYAN LETTER J S;Lo;0;L;;;;;N;;;;; 1BC2A;DUPLOYAN LETTER S S;Lo;0;L;;;;;N;;;;; 1BC2B;DUPLOYAN LETTER M N S;Lo;0;L;;;;;N;;;;; 1BC2C;DUPLOYAN LETTER N M S;Lo;0;L;;;;;N;;;;; 1BC2D;DUPLOYAN LETTER J M S;Lo;0;L;;;;;N;;;;; 1BC2E;DUPLOYAN LETTER S J S;Lo;0;L;;;;;N;;;;; 1BC2F;DUPLOYAN LETTER J S WITH DOT;Lo;0;L;;;;;N;;;;; 1BC30;DUPLOYAN LETTER J N;Lo;0;L;;;;;N;;;;; 1BC31;DUPLOYAN LETTER J N S;Lo;0;L;;;;;N;;;;; 1BC32;DUPLOYAN LETTER S T;Lo;0;L;;;;;N;;;;; 1BC33;DUPLOYAN LETTER S T R;Lo;0;L;;;;;N;;;;; 1BC34;DUPLOYAN LETTER S P;Lo;0;L;;;;;N;;;;; 1BC35;DUPLOYAN LETTER S P R;Lo;0;L;;;;;N;;;;; 1BC36;DUPLOYAN LETTER T S;Lo;0;L;;;;;N;;;;; 1BC37;DUPLOYAN LETTER T R S;Lo;0;L;;;;;N;;;;; 1BC38;DUPLOYAN LETTER W;Lo;0;L;;;;;N;;;;; 1BC39;DUPLOYAN LETTER WH;Lo;0;L;;;;;N;;;;; 1BC3A;DUPLOYAN LETTER W R;Lo;0;L;;;;;N;;;;; 1BC3B;DUPLOYAN LETTER S N;Lo;0;L;;;;;N;;;;; 1BC3C;DUPLOYAN LETTER S M;Lo;0;L;;;;;N;;;;; 1BC3D;DUPLOYAN LETTER K R S;Lo;0;L;;;;;N;;;;; 1BC3E;DUPLOYAN LETTER G R S;Lo;0;L;;;;;N;;;;; 1BC3F;DUPLOYAN LETTER S K;Lo;0;L;;;;;N;;;;; 1BC40;DUPLOYAN LETTER S K R;Lo;0;L;;;;;N;;;;; 1BC41;DUPLOYAN LETTER A;Lo;0;L;;;;;N;;;;; 1BC42;DUPLOYAN LETTER SLOAN OW;Lo;0;L;;;;;N;;;;; 1BC43;DUPLOYAN LETTER OA;Lo;0;L;;;;;N;;;;; 1BC44;DUPLOYAN LETTER O;Lo;0;L;;;;;N;;;;; 1BC45;DUPLOYAN LETTER AOU;Lo;0;L;;;;;N;;;;; 1BC46;DUPLOYAN LETTER I;Lo;0;L;;;;;N;;;;; 1BC47;DUPLOYAN LETTER E;Lo;0;L;;;;;N;;;;; 1BC48;DUPLOYAN LETTER IE;Lo;0;L;;;;;N;;;;; 1BC49;DUPLOYAN LETTER SHORT I;Lo;0;L;;;;;N;;;;; 1BC4A;DUPLOYAN LETTER UI;Lo;0;L;;;;;N;;;;; 1BC4B;DUPLOYAN LETTER EE;Lo;0;L;;;;;N;;;;; 1BC4C;DUPLOYAN LETTER SLOAN EH;Lo;0;L;;;;;N;;;;; 1BC4D;DUPLOYAN LETTER ROMANIAN I;Lo;0;L;;;;;N;;;;; 1BC4E;DUPLOYAN LETTER SLOAN EE;Lo;0;L;;;;;N;;;;; 1BC4F;DUPLOYAN LETTER LONG I;Lo;0;L;;;;;N;;;;; 1BC50;DUPLOYAN LETTER YE;Lo;0;L;;;;;N;;;;; 1BC51;DUPLOYAN LETTER U;Lo;0;L;;;;;N;;;;; 1BC52;DUPLOYAN LETTER EU;Lo;0;L;;;;;N;;;;; 1BC53;DUPLOYAN LETTER XW;Lo;0;L;;;;;N;;;;; 1BC54;DUPLOYAN LETTER U N;Lo;0;L;;;;;N;;;;; 1BC55;DUPLOYAN LETTER LONG U;Lo;0;L;;;;;N;;;;; 1BC56;DUPLOYAN LETTER ROMANIAN U;Lo;0;L;;;;;N;;;;; 1BC57;DUPLOYAN LETTER UH;Lo;0;L;;;;;N;;;;; 1BC58;DUPLOYAN LETTER SLOAN U;Lo;0;L;;;;;N;;;;; 1BC59;DUPLOYAN LETTER OOH;Lo;0;L;;;;;N;;;;; 1BC5A;DUPLOYAN LETTER OW;Lo;0;L;;;;;N;;;;; 1BC5B;DUPLOYAN LETTER OU;Lo;0;L;;;;;N;;;;; 1BC5C;DUPLOYAN LETTER WA;Lo;0;L;;;;;N;;;;; 1BC5D;DUPLOYAN LETTER WO;Lo;0;L;;;;;N;;;;; 1BC5E;DUPLOYAN LETTER WI;Lo;0;L;;;;;N;;;;; 1BC5F;DUPLOYAN LETTER WEI;Lo;0;L;;;;;N;;;;; 1BC60;DUPLOYAN LETTER WOW;Lo;0;L;;;;;N;;;;; 1BC61;DUPLOYAN LETTER NASAL U;Lo;0;L;;;;;N;;;;; 1BC62;DUPLOYAN LETTER NASAL O;Lo;0;L;;;;;N;;;;; 1BC63;DUPLOYAN LETTER NASAL I;Lo;0;L;;;;;N;;;;; 1BC64;DUPLOYAN LETTER NASAL A;Lo;0;L;;;;;N;;;;; 1BC65;DUPLOYAN LETTER PERNIN AN;Lo;0;L;;;;;N;;;;; 1BC66;DUPLOYAN LETTER PERNIN AM;Lo;0;L;;;;;N;;;;; 1BC67;DUPLOYAN LETTER SLOAN EN;Lo;0;L;;;;;N;;;;; 1BC68;DUPLOYAN LETTER SLOAN AN;Lo;0;L;;;;;N;;;;; 1BC69;DUPLOYAN LETTER SLOAN ON;Lo;0;L;;;;;N;;;;; 1BC6A;DUPLOYAN LETTER VOCALIC M;Lo;0;L;;;;;N;;;;; 1BC70;DUPLOYAN AFFIX LEFT HORIZONTAL SECANT;Lo;0;L;;;;;N;;;;; 1BC71;DUPLOYAN AFFIX MID HORIZONTAL SECANT;Lo;0;L;;;;;N;;;;; 1BC72;DUPLOYAN AFFIX RIGHT HORIZONTAL SECANT;Lo;0;L;;;;;N;;;;; 1BC73;DUPLOYAN AFFIX LOW VERTICAL SECANT;Lo;0;L;;;;;N;;;;; 1BC74;DUPLOYAN AFFIX MID VERTICAL SECANT;Lo;0;L;;;;;N;;;;; 1BC75;DUPLOYAN AFFIX HIGH VERTICAL SECANT;Lo;0;L;;;;;N;;;;; 1BC76;DUPLOYAN AFFIX ATTACHED SECANT;Lo;0;L;;;;;N;;;;; 1BC77;DUPLOYAN AFFIX ATTACHED LEFT-TO-RIGHT SECANT;Lo;0;L;;;;;N;;;;; 1BC78;DUPLOYAN AFFIX ATTACHED TANGENT;Lo;0;L;;;;;N;;;;; 1BC79;DUPLOYAN AFFIX ATTACHED TAIL;Lo;0;L;;;;;N;;;;; 1BC7A;DUPLOYAN AFFIX ATTACHED E HOOK;Lo;0;L;;;;;N;;;;; 1BC7B;DUPLOYAN AFFIX ATTACHED I HOOK;Lo;0;L;;;;;N;;;;; 1BC7C;DUPLOYAN AFFIX ATTACHED TANGENT HOOK;Lo;0;L;;;;;N;;;;; 1BC80;DUPLOYAN AFFIX HIGH ACUTE;Lo;0;L;;;;;N;;;;; 1BC81;DUPLOYAN AFFIX HIGH TIGHT ACUTE;Lo;0;L;;;;;N;;;;; 1BC82;DUPLOYAN AFFIX HIGH GRAVE;Lo;0;L;;;;;N;;;;; 1BC83;DUPLOYAN AFFIX HIGH LONG GRAVE;Lo;0;L;;;;;N;;;;; 1BC84;DUPLOYAN AFFIX HIGH DOT;Lo;0;L;;;;;N;;;;; 1BC85;DUPLOYAN AFFIX HIGH CIRCLE;Lo;0;L;;;;;N;;;;; 1BC86;DUPLOYAN AFFIX HIGH LINE;Lo;0;L;;;;;N;;;;; 1BC87;DUPLOYAN AFFIX HIGH WAVE;Lo;0;L;;;;;N;;;;; 1BC88;DUPLOYAN AFFIX HIGH VERTICAL;Lo;0;L;;;;;N;;;;; 1BC90;DUPLOYAN AFFIX LOW ACUTE;Lo;0;L;;;;;N;;;;; 1BC91;DUPLOYAN AFFIX LOW TIGHT ACUTE;Lo;0;L;;;;;N;;;;; 1BC92;DUPLOYAN AFFIX LOW GRAVE;Lo;0;L;;;;;N;;;;; 1BC93;DUPLOYAN AFFIX LOW LONG GRAVE;Lo;0;L;;;;;N;;;;; 1BC94;DUPLOYAN AFFIX LOW DOT;Lo;0;L;;;;;N;;;;; 1BC95;DUPLOYAN AFFIX LOW CIRCLE;Lo;0;L;;;;;N;;;;; 1BC96;DUPLOYAN AFFIX LOW LINE;Lo;0;L;;;;;N;;;;; 1BC97;DUPLOYAN AFFIX LOW WAVE;Lo;0;L;;;;;N;;;;; 1BC98;DUPLOYAN AFFIX LOW VERTICAL;Lo;0;L;;;;;N;;;;; 1BC99;DUPLOYAN AFFIX LOW ARROW;Lo;0;L;;;;;N;;;;; 1BC9C;DUPLOYAN SIGN O WITH CROSS;So;0;L;;;;;N;;;;; 1BC9D;DUPLOYAN THICK LETTER SELECTOR;Mn;0;NSM;;;;;N;;;;; 1BC9E;DUPLOYAN DOUBLE MARK;Mn;1;NSM;;;;;N;;;;; 1BC9F;DUPLOYAN PUNCTUATION CHINOOK FULL STOP;Po;0;L;;;;;N;;;;; 1BCA0;SHORTHAND FORMAT LETTER OVERLAP;Cf;0;BN;;;;;N;;;;; 1BCA1;SHORTHAND FORMAT CONTINUING OVERLAP;Cf;0;BN;;;;;N;;;;; 1BCA2;SHORTHAND FORMAT DOWN STEP;Cf;0;BN;;;;;N;;;;; 1BCA3;SHORTHAND FORMAT UP STEP;Cf;0;BN;;;;;N;;;;; 1CF00;ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT;Mn;0;NSM;;;;;N;;;;; 1CF01;ZNAMENNY COMBINING MARK NIZKO S KRYZHEM ON LEFT;Mn;0;NSM;;;;;N;;;;; 1CF02;ZNAMENNY COMBINING MARK TSATA ON LEFT;Mn;0;NSM;;;;;N;;;;; 1CF03;ZNAMENNY COMBINING MARK GORAZDO NIZKO ON LEFT;Mn;0;NSM;;;;;N;;;;; 1CF04;ZNAMENNY COMBINING MARK NIZKO ON LEFT;Mn;0;NSM;;;;;N;;;;; 1CF05;ZNAMENNY COMBINING MARK SREDNE ON LEFT;Mn;0;NSM;;;;;N;;;;; 1CF06;ZNAMENNY COMBINING MARK MALO POVYSHE ON LEFT;Mn;0;NSM;;;;;N;;;;; 1CF07;ZNAMENNY COMBINING MARK POVYSHE ON LEFT;Mn;0;NSM;;;;;N;;;;; 1CF08;ZNAMENNY COMBINING MARK VYSOKO ON LEFT;Mn;0;NSM;;;;;N;;;;; 1CF09;ZNAMENNY COMBINING MARK MALO POVYSHE S KHOKHLOM ON LEFT;Mn;0;NSM;;;;;N;;;;; 1CF0A;ZNAMENNY COMBINING MARK POVYSHE S KHOKHLOM ON LEFT;Mn;0;NSM;;;;;N;;;;; 1CF0B;ZNAMENNY COMBINING MARK VYSOKO S KHOKHLOM ON LEFT;Mn;0;NSM;;;;;N;;;;; 1CF0C;ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON RIGHT;Mn;0;NSM;;;;;N;;;;; 1CF0D;ZNAMENNY COMBINING MARK NIZKO S KRYZHEM ON RIGHT;Mn;0;NSM;;;;;N;;;;; 1CF0E;ZNAMENNY COMBINING MARK TSATA ON RIGHT;Mn;0;NSM;;;;;N;;;;; 1CF0F;ZNAMENNY COMBINING MARK GORAZDO NIZKO ON RIGHT;Mn;0;NSM;;;;;N;;;;; 1CF10;ZNAMENNY COMBINING MARK NIZKO ON RIGHT;Mn;0;NSM;;;;;N;;;;; 1CF11;ZNAMENNY COMBINING MARK SREDNE ON RIGHT;Mn;0;NSM;;;;;N;;;;; 1CF12;ZNAMENNY COMBINING MARK MALO POVYSHE ON RIGHT;Mn;0;NSM;;;;;N;;;;; 1CF13;ZNAMENNY COMBINING MARK POVYSHE ON RIGHT;Mn;0;NSM;;;;;N;;;;; 1CF14;ZNAMENNY COMBINING MARK VYSOKO ON RIGHT;Mn;0;NSM;;;;;N;;;;; 1CF15;ZNAMENNY COMBINING MARK MALO POVYSHE S KHOKHLOM ON RIGHT;Mn;0;NSM;;;;;N;;;;; 1CF16;ZNAMENNY COMBINING MARK POVYSHE S KHOKHLOM ON RIGHT;Mn;0;NSM;;;;;N;;;;; 1CF17;ZNAMENNY COMBINING MARK VYSOKO S KHOKHLOM ON RIGHT;Mn;0;NSM;;;;;N;;;;; 1CF18;ZNAMENNY COMBINING MARK TSATA S KRYZHEM;Mn;0;NSM;;;;;N;;;;; 1CF19;ZNAMENNY COMBINING MARK MALO POVYSHE S KRYZHEM;Mn;0;NSM;;;;;N;;;;; 1CF1A;ZNAMENNY COMBINING MARK STRANNO MALO POVYSHE;Mn;0;NSM;;;;;N;;;;; 1CF1B;ZNAMENNY COMBINING MARK POVYSHE S KRYZHEM;Mn;0;NSM;;;;;N;;;;; 1CF1C;ZNAMENNY COMBINING MARK POVYSHE STRANNO;Mn;0;NSM;;;;;N;;;;; 1CF1D;ZNAMENNY COMBINING MARK VYSOKO S KRYZHEM;Mn;0;NSM;;;;;N;;;;; 1CF1E;ZNAMENNY COMBINING MARK MALO POVYSHE STRANNO;Mn;0;NSM;;;;;N;;;;; 1CF1F;ZNAMENNY COMBINING MARK GORAZDO VYSOKO;Mn;0;NSM;;;;;N;;;;; 1CF20;ZNAMENNY COMBINING MARK ZELO;Mn;0;NSM;;;;;N;;;;; 1CF21;ZNAMENNY COMBINING MARK ON;Mn;0;NSM;;;;;N;;;;; 1CF22;ZNAMENNY COMBINING MARK RAVNO;Mn;0;NSM;;;;;N;;;;; 1CF23;ZNAMENNY COMBINING MARK TIKHAYA;Mn;0;NSM;;;;;N;;;;; 1CF24;ZNAMENNY COMBINING MARK BORZAYA;Mn;0;NSM;;;;;N;;;;; 1CF25;ZNAMENNY COMBINING MARK UDARKA;Mn;0;NSM;;;;;N;;;;; 1CF26;ZNAMENNY COMBINING MARK PODVERTKA;Mn;0;NSM;;;;;N;;;;; 1CF27;ZNAMENNY COMBINING MARK LOMKA;Mn;0;NSM;;;;;N;;;;; 1CF28;ZNAMENNY COMBINING MARK KUPNAYA;Mn;0;NSM;;;;;N;;;;; 1CF29;ZNAMENNY COMBINING MARK KACHKA;Mn;0;NSM;;;;;N;;;;; 1CF2A;ZNAMENNY COMBINING MARK ZEVOK;Mn;0;NSM;;;;;N;;;;; 1CF2B;ZNAMENNY COMBINING MARK SKOBA;Mn;0;NSM;;;;;N;;;;; 1CF2C;ZNAMENNY COMBINING MARK RAZSEKA;Mn;0;NSM;;;;;N;;;;; 1CF2D;ZNAMENNY COMBINING MARK KRYZH ON LEFT;Mn;0;NSM;;;;;N;;;;; 1CF30;ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO;Mn;0;NSM;;;;;N;;;;; 1CF31;ZNAMENNY COMBINING TONAL RANGE MARK SVETLO;Mn;0;NSM;;;;;N;;;;; 1CF32;ZNAMENNY COMBINING TONAL RANGE MARK TRESVETLO;Mn;0;NSM;;;;;N;;;;; 1CF33;ZNAMENNY COMBINING MARK ZADERZHKA;Mn;0;NSM;;;;;N;;;;; 1CF34;ZNAMENNY COMBINING MARK DEMESTVENNY ZADERZHKA;Mn;0;NSM;;;;;N;;;;; 1CF35;ZNAMENNY COMBINING MARK OTSECHKA;Mn;0;NSM;;;;;N;;;;; 1CF36;ZNAMENNY COMBINING MARK PODCHASHIE;Mn;0;NSM;;;;;N;;;;; 1CF37;ZNAMENNY COMBINING MARK PODCHASHIE WITH VERTICAL STROKE;Mn;0;NSM;;;;;N;;;;; 1CF38;ZNAMENNY COMBINING MARK CHASHKA;Mn;0;NSM;;;;;N;;;;; 1CF39;ZNAMENNY COMBINING MARK CHASHKA POLNAYA;Mn;0;NSM;;;;;N;;;;; 1CF3A;ZNAMENNY COMBINING MARK OBLACHKO;Mn;0;NSM;;;;;N;;;;; 1CF3B;ZNAMENNY COMBINING MARK SOROCHYA NOZHKA;Mn;0;NSM;;;;;N;;;;; 1CF3C;ZNAMENNY COMBINING MARK TOCHKA;Mn;0;NSM;;;;;N;;;;; 1CF3D;ZNAMENNY COMBINING MARK DVOETOCHIE;Mn;0;NSM;;;;;N;;;;; 1CF3E;ZNAMENNY COMBINING ATTACHING VERTICAL OMET;Mn;0;NSM;;;;;N;;;;; 1CF3F;ZNAMENNY COMBINING MARK CURVED OMET;Mn;0;NSM;;;;;N;;;;; 1CF40;ZNAMENNY COMBINING MARK KRYZH;Mn;0;NSM;;;;;N;;;;; 1CF41;ZNAMENNY COMBINING LOWER TONAL RANGE INDICATOR;Mn;0;NSM;;;;;N;;;;; 1CF42;ZNAMENNY PRIZNAK MODIFIER LEVEL-2;Mn;0;NSM;;;;;N;;;;; 1CF43;ZNAMENNY PRIZNAK MODIFIER LEVEL-3;Mn;0;NSM;;;;;N;;;;; 1CF44;ZNAMENNY PRIZNAK MODIFIER DIRECTION FLIP;Mn;0;NSM;;;;;N;;;;; 1CF45;ZNAMENNY PRIZNAK MODIFIER KRYZH;Mn;0;NSM;;;;;N;;;;; 1CF46;ZNAMENNY PRIZNAK MODIFIER ROG;Mn;0;NSM;;;;;N;;;;; 1CF50;ZNAMENNY NEUME KRYUK;So;0;L;;;;;N;;;;; 1CF51;ZNAMENNY NEUME KRYUK TIKHY;So;0;L;;;;;N;;;;; 1CF52;ZNAMENNY NEUME PARAKLIT;So;0;L;;;;;N;;;;; 1CF53;ZNAMENNY NEUME DVA V CHELNU;So;0;L;;;;;N;;;;; 1CF54;ZNAMENNY NEUME KLYUCH;So;0;L;;;;;N;;;;; 1CF55;ZNAMENNY NEUME ZANOZHEK;So;0;L;;;;;N;;;;; 1CF56;ZNAMENNY NEUME STOPITSA;So;0;L;;;;;N;;;;; 1CF57;ZNAMENNY NEUME STOPITSA S OCHKOM;So;0;L;;;;;N;;;;; 1CF58;ZNAMENNY NEUME PEREVODKA;So;0;L;;;;;N;;;;; 1CF59;ZNAMENNY NEUME PEREVODKA NEPOSTOYANNAYA;So;0;L;;;;;N;;;;; 1CF5A;ZNAMENNY NEUME STOPITSA WITH SOROCHYA NOZHKA;So;0;L;;;;;N;;;;; 1CF5B;ZNAMENNY NEUME CHELYUSTKA;So;0;L;;;;;N;;;;; 1CF5C;ZNAMENNY NEUME PALKA;So;0;L;;;;;N;;;;; 1CF5D;ZNAMENNY NEUME ZAPYATAYA;So;0;L;;;;;N;;;;; 1CF5E;ZNAMENNY NEUME GOLUBCHIK BORZY;So;0;L;;;;;N;;;;; 1CF5F;ZNAMENNY NEUME GOLUBCHIK TIKHY;So;0;L;;;;;N;;;;; 1CF60;ZNAMENNY NEUME GOLUBCHIK MRACHNY;So;0;L;;;;;N;;;;; 1CF61;ZNAMENNY NEUME GOLUBCHIK SVETLY;So;0;L;;;;;N;;;;; 1CF62;ZNAMENNY NEUME GOLUBCHIK TRESVETLY;So;0;L;;;;;N;;;;; 1CF63;ZNAMENNY NEUME VRAKHIYA PROSTAYA;So;0;L;;;;;N;;;;; 1CF64;ZNAMENNY NEUME VRAKHIYA MRACHNAYA;So;0;L;;;;;N;;;;; 1CF65;ZNAMENNY NEUME VRAKHIYA SVETLAYA;So;0;L;;;;;N;;;;; 1CF66;ZNAMENNY NEUME VRAKHIYA TRESVETLAYA;So;0;L;;;;;N;;;;; 1CF67;ZNAMENNY NEUME VRAKHIYA KLYUCHEVAYA PROSTAYA;So;0;L;;;;;N;;;;; 1CF68;ZNAMENNY NEUME VRAKHIYA KLYUCHEVAYA MRACHNAYA;So;0;L;;;;;N;;;;; 1CF69;ZNAMENNY NEUME VRAKHIYA KLYUCHEVAYA SVETLAYA;So;0;L;;;;;N;;;;; 1CF6A;ZNAMENNY NEUME VRAKHIYA KLYUCHEVAYA TRESVETLAYA;So;0;L;;;;;N;;;;; 1CF6B;ZNAMENNY NEUME DOUBLE ZAPYATAYA;So;0;L;;;;;N;;;;; 1CF6C;ZNAMENNY NEUME REVERSED CHELYUSTKA;So;0;L;;;;;N;;;;; 1CF6D;ZNAMENNY NEUME DERBITSA;So;0;L;;;;;N;;;;; 1CF6E;ZNAMENNY NEUME KHAMILO;So;0;L;;;;;N;;;;; 1CF6F;ZNAMENNY NEUME CHASHKA;So;0;L;;;;;N;;;;; 1CF70;ZNAMENNY NEUME PODCHASHIE;So;0;L;;;;;N;;;;; 1CF71;ZNAMENNY NEUME SKAMEYTSA MRACHNAYA;So;0;L;;;;;N;;;;; 1CF72;ZNAMENNY NEUME SKAMEYTSA SVETLAYA;So;0;L;;;;;N;;;;; 1CF73;ZNAMENNY NEUME SKAMEYTSA TRESVETLAYA;So;0;L;;;;;N;;;;; 1CF74;ZNAMENNY NEUME SKAMEYTSA TIKHAYA;So;0;L;;;;;N;;;;; 1CF75;ZNAMENNY NEUME DEMESTVENNY KLYUCH;So;0;L;;;;;N;;;;; 1CF76;ZNAMENNY NEUME SKAMEYTSA KLYUCHEVAYA SVETLAYA;So;0;L;;;;;N;;;;; 1CF77;ZNAMENNY NEUME SKAMEYTSA KLYUCHENEPOSTOYANNAYA;So;0;L;;;;;N;;;;; 1CF78;ZNAMENNY NEUME SKAMEYTSA KLYUCHEVAYA TIKHAYA;So;0;L;;;;;N;;;;; 1CF79;ZNAMENNY NEUME SKAMEYTSA DVOECHELNAYA PROSTAYA;So;0;L;;;;;N;;;;; 1CF7A;ZNAMENNY NEUME SKAMEYTSA DVOECHELNAYA SVETLAYA;So;0;L;;;;;N;;;;; 1CF7B;ZNAMENNY NEUME SKAMEYTSA DVOECHELNAYA NEPOSTOYANNAYA;So;0;L;;;;;N;;;;; 1CF7C;ZNAMENNY NEUME SKAMEYTSA DVOECHELNAYA KLYUCHEVAYA;So;0;L;;;;;N;;;;; 1CF7D;ZNAMENNY NEUME SLOZHITIE;So;0;L;;;;;N;;;;; 1CF7E;ZNAMENNY NEUME SLOZHITIE S ZAPYATOY;So;0;L;;;;;N;;;;; 1CF7F;ZNAMENNY NEUME SLOZHITIE ZAKRYTOE;So;0;L;;;;;N;;;;; 1CF80;ZNAMENNY NEUME SLOZHITIE S KRYZHEM;So;0;L;;;;;N;;;;; 1CF81;ZNAMENNY NEUME KRYZH;So;0;L;;;;;N;;;;; 1CF82;ZNAMENNY NEUME ROG;So;0;L;;;;;N;;;;; 1CF83;ZNAMENNY NEUME FITA;So;0;L;;;;;N;;;;; 1CF84;ZNAMENNY NEUME KOBYLA;So;0;L;;;;;N;;;;; 1CF85;ZNAMENNY NEUME ZMEYTSA;So;0;L;;;;;N;;;;; 1CF86;ZNAMENNY NEUME STATYA;So;0;L;;;;;N;;;;; 1CF87;ZNAMENNY NEUME STATYA S ZAPYATOY;So;0;L;;;;;N;;;;; 1CF88;ZNAMENNY NEUME STATYA S KRYZHEM;So;0;L;;;;;N;;;;; 1CF89;ZNAMENNY NEUME STATYA S ZAPYATOY I KRYZHEM;So;0;L;;;;;N;;;;; 1CF8A;ZNAMENNY NEUME STATYA S KRYZHEM I ZAPYATOY;So;0;L;;;;;N;;;;; 1CF8B;ZNAMENNY NEUME STATYA ZAKRYTAYA;So;0;L;;;;;N;;;;; 1CF8C;ZNAMENNY NEUME STATYA ZAKRYTAYA S ZAPYATOY;So;0;L;;;;;N;;;;; 1CF8D;ZNAMENNY NEUME STATYA S ROGOM;So;0;L;;;;;N;;;;; 1CF8E;ZNAMENNY NEUME STATYA S DVUMYA ZAPYATYMI;So;0;L;;;;;N;;;;; 1CF8F;ZNAMENNY NEUME STATYA S ZAPYATOY I PODCHASHIEM;So;0;L;;;;;N;;;;; 1CF90;ZNAMENNY NEUME POLKULIZMY;So;0;L;;;;;N;;;;; 1CF91;ZNAMENNY NEUME STATYA NEPOSTOYANNAYA;So;0;L;;;;;N;;;;; 1CF92;ZNAMENNY NEUME STRELA PROSTAYA;So;0;L;;;;;N;;;;; 1CF93;ZNAMENNY NEUME STRELA MRACHNOTIKHAYA;So;0;L;;;;;N;;;;; 1CF94;ZNAMENNY NEUME STRELA KRYZHEVAYA;So;0;L;;;;;N;;;;; 1CF95;ZNAMENNY NEUME STRELA POLUPOVODNAYA;So;0;L;;;;;N;;;;; 1CF96;ZNAMENNY NEUME STRELA POVODNAYA;So;0;L;;;;;N;;;;; 1CF97;ZNAMENNY NEUME STRELA NEPOSTOYANNAYA;So;0;L;;;;;N;;;;; 1CF98;ZNAMENNY NEUME STRELA KLYUCHEPOVODNAYA;So;0;L;;;;;N;;;;; 1CF99;ZNAMENNY NEUME STRELA KLYUCHENEPOSTOYANNAYA;So;0;L;;;;;N;;;;; 1CF9A;ZNAMENNY NEUME STRELA TIKHAYA PUTNAYA;So;0;L;;;;;N;;;;; 1CF9B;ZNAMENNY NEUME STRELA DVOECHELNAYA;So;0;L;;;;;N;;;;; 1CF9C;ZNAMENNY NEUME STRELA DVOECHELNOKRYZHEVAYA;So;0;L;;;;;N;;;;; 1CF9D;ZNAMENNY NEUME STRELA DVOECHELNOPOVODNAYA;So;0;L;;;;;N;;;;; 1CF9E;ZNAMENNY NEUME STRELA DVOECHELNAYA KLYUCHEVAYA;So;0;L;;;;;N;;;;; 1CF9F;ZNAMENNY NEUME STRELA DVOECHELNOPOVODNAYA KLYUCHEVAYA;So;0;L;;;;;N;;;;; 1CFA0;ZNAMENNY NEUME STRELA GROMNAYA WITH SINGLE ZAPYATAYA;So;0;L;;;;;N;;;;; 1CFA1;ZNAMENNY NEUME STRELA GROMOPOVODNAYA WITH SINGLE ZAPYATAYA;So;0;L;;;;;N;;;;; 1CFA2;ZNAMENNY NEUME STRELA GROMNAYA;So;0;L;;;;;N;;;;; 1CFA3;ZNAMENNY NEUME STRELA GROMOPOVODNAYA;So;0;L;;;;;N;;;;; 1CFA4;ZNAMENNY NEUME STRELA GROMOPOVODNAYA WITH DOUBLE ZAPYATAYA;So;0;L;;;;;N;;;;; 1CFA5;ZNAMENNY NEUME STRELA GROMOKRYZHEVAYA;So;0;L;;;;;N;;;;; 1CFA6;ZNAMENNY NEUME STRELA GROMOKRYZHEVAYA POVODNAYA;So;0;L;;;;;N;;;;; 1CFA7;ZNAMENNY NEUME MECHIK;So;0;L;;;;;N;;;;; 1CFA8;ZNAMENNY NEUME MECHIK POVODNY;So;0;L;;;;;N;;;;; 1CFA9;ZNAMENNY NEUME MECHIK KLYUCHEVOY;So;0;L;;;;;N;;;;; 1CFAA;ZNAMENNY NEUME MECHIK KLYUCHEPOVODNY;So;0;L;;;;;N;;;;; 1CFAB;ZNAMENNY NEUME MECHIK KLYUCHENEPOSTOYANNY;So;0;L;;;;;N;;;;; 1CFAC;ZNAMENNY NEUME STRELA TRYASOGLASNAYA;So;0;L;;;;;N;;;;; 1CFAD;ZNAMENNY NEUME STRELA TRYASOPOVODNAYA;So;0;L;;;;;N;;;;; 1CFAE;ZNAMENNY NEUME STRELA TRYASOSTRELNAYA;So;0;L;;;;;N;;;;; 1CFAF;ZNAMENNY NEUME OSOKA;So;0;L;;;;;N;;;;; 1CFB0;ZNAMENNY NEUME OSOKA SVETLAYA;So;0;L;;;;;N;;;;; 1CFB1;ZNAMENNY NEUME OSOKA TRESVETLAYA;So;0;L;;;;;N;;;;; 1CFB2;ZNAMENNY NEUME OSOKA KRYUKOVAYA SVETLAYA;So;0;L;;;;;N;;;;; 1CFB3;ZNAMENNY NEUME OSOKA KLYUCHEVAYA SVETLAYA;So;0;L;;;;;N;;;;; 1CFB4;ZNAMENNY NEUME OSOKA KLYUCHEVAYA NEPOSTOYANNAYA;So;0;L;;;;;N;;;;; 1CFB5;ZNAMENNY NEUME STRELA KRYUKOVAYA;So;0;L;;;;;N;;;;; 1CFB6;ZNAMENNY NEUME STRELA KRYUKOVAYA POVODNAYA;So;0;L;;;;;N;;;;; 1CFB7;ZNAMENNY NEUME STRELA KRYUKOVAYA GROMNAYA WITH SINGLE ZAPYATAYA;So;0;L;;;;;N;;;;; 1CFB8;ZNAMENNY NEUME STRELA KRYUKOVAYA GROMOPOVODNAYA WITH SINGLE ZAPYATAYA;So;0;L;;;;;N;;;;; 1CFB9;ZNAMENNY NEUME STRELA KRYUKOVAYA GROMNAYA;So;0;L;;;;;N;;;;; 1CFBA;ZNAMENNY NEUME STRELA KRYUKOVAYA GROMOPOVODNAYA;So;0;L;;;;;N;;;;; 1CFBB;ZNAMENNY NEUME STRELA KRYUKOVAYA GROMOPOVODNAYA WITH DOUBLE ZAPYATAYA;So;0;L;;;;;N;;;;; 1CFBC;ZNAMENNY NEUME STRELA KRYUKOVAYA GROMOKRYZHEVAYA;So;0;L;;;;;N;;;;; 1CFBD;ZNAMENNY NEUME STRELA KRYUKOVAYA GROMOKRYZHEVAYA POVODNAYA;So;0;L;;;;;N;;;;; 1CFBE;ZNAMENNY NEUME STRELA KRYUKOVAYA TRYASKA;So;0;L;;;;;N;;;;; 1CFBF;ZNAMENNY NEUME KUFISMA;So;0;L;;;;;N;;;;; 1CFC0;ZNAMENNY NEUME OBLAKO;So;0;L;;;;;N;;;;; 1CFC1;ZNAMENNY NEUME DUDA;So;0;L;;;;;N;;;;; 1CFC2;ZNAMENNY NEUME NEMKA;So;0;L;;;;;N;;;;; 1CFC3;ZNAMENNY NEUME PAUK;So;0;L;;;;;N;;;;; 1D000;BYZANTINE MUSICAL SYMBOL PSILI;So;0;L;;;;;N;;;;; 1D001;BYZANTINE MUSICAL SYMBOL DASEIA;So;0;L;;;;;N;;;;; 1D002;BYZANTINE MUSICAL SYMBOL PERISPOMENI;So;0;L;;;;;N;;;;; 1D003;BYZANTINE MUSICAL SYMBOL OXEIA EKFONITIKON;So;0;L;;;;;N;;;;; 1D004;BYZANTINE MUSICAL SYMBOL OXEIA DIPLI;So;0;L;;;;;N;;;;; 1D005;BYZANTINE MUSICAL SYMBOL VAREIA EKFONITIKON;So;0;L;;;;;N;;;;; 1D006;BYZANTINE MUSICAL SYMBOL VAREIA DIPLI;So;0;L;;;;;N;;;;; 1D007;BYZANTINE MUSICAL SYMBOL KATHISTI;So;0;L;;;;;N;;;;; 1D008;BYZANTINE MUSICAL SYMBOL SYRMATIKI;So;0;L;;;;;N;;;;; 1D009;BYZANTINE MUSICAL SYMBOL PARAKLITIKI;So;0;L;;;;;N;;;;; 1D00A;BYZANTINE MUSICAL SYMBOL YPOKRISIS;So;0;L;;;;;N;;;;; 1D00B;BYZANTINE MUSICAL SYMBOL YPOKRISIS DIPLI;So;0;L;;;;;N;;;;; 1D00C;BYZANTINE MUSICAL SYMBOL KREMASTI;So;0;L;;;;;N;;;;; 1D00D;BYZANTINE MUSICAL SYMBOL APESO EKFONITIKON;So;0;L;;;;;N;;;;; 1D00E;BYZANTINE MUSICAL SYMBOL EXO EKFONITIKON;So;0;L;;;;;N;;;;; 1D00F;BYZANTINE MUSICAL SYMBOL TELEIA;So;0;L;;;;;N;;;;; 1D010;BYZANTINE MUSICAL SYMBOL KENTIMATA;So;0;L;;;;;N;;;;; 1D011;BYZANTINE MUSICAL SYMBOL APOSTROFOS;So;0;L;;;;;N;;;;; 1D012;BYZANTINE MUSICAL SYMBOL APOSTROFOS DIPLI;So;0;L;;;;;N;;;;; 1D013;BYZANTINE MUSICAL SYMBOL SYNEVMA;So;0;L;;;;;N;;;;; 1D014;BYZANTINE MUSICAL SYMBOL THITA;So;0;L;;;;;N;;;;; 1D015;BYZANTINE MUSICAL SYMBOL OLIGON ARCHAION;So;0;L;;;;;N;;;;; 1D016;BYZANTINE MUSICAL SYMBOL GORGON ARCHAION;So;0;L;;;;;N;;;;; 1D017;BYZANTINE MUSICAL SYMBOL PSILON;So;0;L;;;;;N;;;;; 1D018;BYZANTINE MUSICAL SYMBOL CHAMILON;So;0;L;;;;;N;;;;; 1D019;BYZANTINE MUSICAL SYMBOL VATHY;So;0;L;;;;;N;;;;; 1D01A;BYZANTINE MUSICAL SYMBOL ISON ARCHAION;So;0;L;;;;;N;;;;; 1D01B;BYZANTINE MUSICAL SYMBOL KENTIMA ARCHAION;So;0;L;;;;;N;;;;; 1D01C;BYZANTINE MUSICAL SYMBOL KENTIMATA ARCHAION;So;0;L;;;;;N;;;;; 1D01D;BYZANTINE MUSICAL SYMBOL SAXIMATA;So;0;L;;;;;N;;;;; 1D01E;BYZANTINE MUSICAL SYMBOL PARICHON;So;0;L;;;;;N;;;;; 1D01F;BYZANTINE MUSICAL SYMBOL STAVROS APODEXIA;So;0;L;;;;;N;;;;; 1D020;BYZANTINE MUSICAL SYMBOL OXEIAI ARCHAION;So;0;L;;;;;N;;;;; 1D021;BYZANTINE MUSICAL SYMBOL VAREIAI ARCHAION;So;0;L;;;;;N;;;;; 1D022;BYZANTINE MUSICAL SYMBOL APODERMA ARCHAION;So;0;L;;;;;N;;;;; 1D023;BYZANTINE MUSICAL SYMBOL APOTHEMA;So;0;L;;;;;N;;;;; 1D024;BYZANTINE MUSICAL SYMBOL KLASMA;So;0;L;;;;;N;;;;; 1D025;BYZANTINE MUSICAL SYMBOL REVMA;So;0;L;;;;;N;;;;; 1D026;BYZANTINE MUSICAL SYMBOL PIASMA ARCHAION;So;0;L;;;;;N;;;;; 1D027;BYZANTINE MUSICAL SYMBOL TINAGMA;So;0;L;;;;;N;;;;; 1D028;BYZANTINE MUSICAL SYMBOL ANATRICHISMA;So;0;L;;;;;N;;;;; 1D029;BYZANTINE MUSICAL SYMBOL SEISMA;So;0;L;;;;;N;;;;; 1D02A;BYZANTINE MUSICAL SYMBOL SYNAGMA ARCHAION;So;0;L;;;;;N;;;;; 1D02B;BYZANTINE MUSICAL SYMBOL SYNAGMA META STAVROU;So;0;L;;;;;N;;;;; 1D02C;BYZANTINE MUSICAL SYMBOL OYRANISMA ARCHAION;So;0;L;;;;;N;;;;; 1D02D;BYZANTINE MUSICAL SYMBOL THEMA;So;0;L;;;;;N;;;;; 1D02E;BYZANTINE MUSICAL SYMBOL LEMOI;So;0;L;;;;;N;;;;; 1D02F;BYZANTINE MUSICAL SYMBOL DYO;So;0;L;;;;;N;;;;; 1D030;BYZANTINE MUSICAL SYMBOL TRIA;So;0;L;;;;;N;;;;; 1D031;BYZANTINE MUSICAL SYMBOL TESSERA;So;0;L;;;;;N;;;;; 1D032;BYZANTINE MUSICAL SYMBOL KRATIMATA;So;0;L;;;;;N;;;;; 1D033;BYZANTINE MUSICAL SYMBOL APESO EXO NEO;So;0;L;;;;;N;;;;; 1D034;BYZANTINE MUSICAL SYMBOL FTHORA ARCHAION;So;0;L;;;;;N;;;;; 1D035;BYZANTINE MUSICAL SYMBOL IMIFTHORA;So;0;L;;;;;N;;;;; 1D036;BYZANTINE MUSICAL SYMBOL TROMIKON ARCHAION;So;0;L;;;;;N;;;;; 1D037;BYZANTINE MUSICAL SYMBOL KATAVA TROMIKON;So;0;L;;;;;N;;;;; 1D038;BYZANTINE MUSICAL SYMBOL PELASTON;So;0;L;;;;;N;;;;; 1D039;BYZANTINE MUSICAL SYMBOL PSIFISTON;So;0;L;;;;;N;;;;; 1D03A;BYZANTINE MUSICAL SYMBOL KONTEVMA;So;0;L;;;;;N;;;;; 1D03B;BYZANTINE MUSICAL SYMBOL CHOREVMA ARCHAION;So;0;L;;;;;N;;;;; 1D03C;BYZANTINE MUSICAL SYMBOL RAPISMA;So;0;L;;;;;N;;;;; 1D03D;BYZANTINE MUSICAL SYMBOL PARAKALESMA ARCHAION;So;0;L;;;;;N;;;;; 1D03E;BYZANTINE MUSICAL SYMBOL PARAKLITIKI ARCHAION;So;0;L;;;;;N;;;;; 1D03F;BYZANTINE MUSICAL SYMBOL ICHADIN;So;0;L;;;;;N;;;;; 1D040;BYZANTINE MUSICAL SYMBOL NANA;So;0;L;;;;;N;;;;; 1D041;BYZANTINE MUSICAL SYMBOL PETASMA;So;0;L;;;;;N;;;;; 1D042;BYZANTINE MUSICAL SYMBOL KONTEVMA ALLO;So;0;L;;;;;N;;;;; 1D043;BYZANTINE MUSICAL SYMBOL TROMIKON ALLO;So;0;L;;;;;N;;;;; 1D044;BYZANTINE MUSICAL SYMBOL STRAGGISMATA;So;0;L;;;;;N;;;;; 1D045;BYZANTINE MUSICAL SYMBOL GRONTHISMATA;So;0;L;;;;;N;;;;; 1D046;BYZANTINE MUSICAL SYMBOL ISON NEO;So;0;L;;;;;N;;;;; 1D047;BYZANTINE MUSICAL SYMBOL OLIGON NEO;So;0;L;;;;;N;;;;; 1D048;BYZANTINE MUSICAL SYMBOL OXEIA NEO;So;0;L;;;;;N;;;;; 1D049;BYZANTINE MUSICAL SYMBOL PETASTI;So;0;L;;;;;N;;;;; 1D04A;BYZANTINE MUSICAL SYMBOL KOUFISMA;So;0;L;;;;;N;;;;; 1D04B;BYZANTINE MUSICAL SYMBOL PETASTOKOUFISMA;So;0;L;;;;;N;;;;; 1D04C;BYZANTINE MUSICAL SYMBOL KRATIMOKOUFISMA;So;0;L;;;;;N;;;;; 1D04D;BYZANTINE MUSICAL SYMBOL PELASTON NEO;So;0;L;;;;;N;;;;; 1D04E;BYZANTINE MUSICAL SYMBOL KENTIMATA NEO ANO;So;0;L;;;;;N;;;;; 1D04F;BYZANTINE MUSICAL SYMBOL KENTIMA NEO ANO;So;0;L;;;;;N;;;;; 1D050;BYZANTINE MUSICAL SYMBOL YPSILI;So;0;L;;;;;N;;;;; 1D051;BYZANTINE MUSICAL SYMBOL APOSTROFOS NEO;So;0;L;;;;;N;;;;; 1D052;BYZANTINE MUSICAL SYMBOL APOSTROFOI SYNDESMOS NEO;So;0;L;;;;;N;;;;; 1D053;BYZANTINE MUSICAL SYMBOL YPORROI;So;0;L;;;;;N;;;;; 1D054;BYZANTINE MUSICAL SYMBOL KRATIMOYPORROON;So;0;L;;;;;N;;;;; 1D055;BYZANTINE MUSICAL SYMBOL ELAFRON;So;0;L;;;;;N;;;;; 1D056;BYZANTINE MUSICAL SYMBOL CHAMILI;So;0;L;;;;;N;;;;; 1D057;BYZANTINE MUSICAL SYMBOL MIKRON ISON;So;0;L;;;;;N;;;;; 1D058;BYZANTINE MUSICAL SYMBOL VAREIA NEO;So;0;L;;;;;N;;;;; 1D059;BYZANTINE MUSICAL SYMBOL PIASMA NEO;So;0;L;;;;;N;;;;; 1D05A;BYZANTINE MUSICAL SYMBOL PSIFISTON NEO;So;0;L;;;;;N;;;;; 1D05B;BYZANTINE MUSICAL SYMBOL OMALON;So;0;L;;;;;N;;;;; 1D05C;BYZANTINE MUSICAL SYMBOL ANTIKENOMA;So;0;L;;;;;N;;;;; 1D05D;BYZANTINE MUSICAL SYMBOL LYGISMA;So;0;L;;;;;N;;;;; 1D05E;BYZANTINE MUSICAL SYMBOL PARAKLITIKI NEO;So;0;L;;;;;N;;;;; 1D05F;BYZANTINE MUSICAL SYMBOL PARAKALESMA NEO;So;0;L;;;;;N;;;;; 1D060;BYZANTINE MUSICAL SYMBOL ETERON PARAKALESMA;So;0;L;;;;;N;;;;; 1D061;BYZANTINE MUSICAL SYMBOL KYLISMA;So;0;L;;;;;N;;;;; 1D062;BYZANTINE MUSICAL SYMBOL ANTIKENOKYLISMA;So;0;L;;;;;N;;;;; 1D063;BYZANTINE MUSICAL SYMBOL TROMIKON NEO;So;0;L;;;;;N;;;;; 1D064;BYZANTINE MUSICAL SYMBOL EKSTREPTON;So;0;L;;;;;N;;;;; 1D065;BYZANTINE MUSICAL SYMBOL SYNAGMA NEO;So;0;L;;;;;N;;;;; 1D066;BYZANTINE MUSICAL SYMBOL SYRMA;So;0;L;;;;;N;;;;; 1D067;BYZANTINE MUSICAL SYMBOL CHOREVMA NEO;So;0;L;;;;;N;;;;; 1D068;BYZANTINE MUSICAL SYMBOL EPEGERMA;So;0;L;;;;;N;;;;; 1D069;BYZANTINE MUSICAL SYMBOL SEISMA NEO;So;0;L;;;;;N;;;;; 1D06A;BYZANTINE MUSICAL SYMBOL XIRON KLASMA;So;0;L;;;;;N;;;;; 1D06B;BYZANTINE MUSICAL SYMBOL TROMIKOPSIFISTON;So;0;L;;;;;N;;;;; 1D06C;BYZANTINE MUSICAL SYMBOL PSIFISTOLYGISMA;So;0;L;;;;;N;;;;; 1D06D;BYZANTINE MUSICAL SYMBOL TROMIKOLYGISMA;So;0;L;;;;;N;;;;; 1D06E;BYZANTINE MUSICAL SYMBOL TROMIKOPARAKALESMA;So;0;L;;;;;N;;;;; 1D06F;BYZANTINE MUSICAL SYMBOL PSIFISTOPARAKALESMA;So;0;L;;;;;N;;;;; 1D070;BYZANTINE MUSICAL SYMBOL TROMIKOSYNAGMA;So;0;L;;;;;N;;;;; 1D071;BYZANTINE MUSICAL SYMBOL PSIFISTOSYNAGMA;So;0;L;;;;;N;;;;; 1D072;BYZANTINE MUSICAL SYMBOL GORGOSYNTHETON;So;0;L;;;;;N;;;;; 1D073;BYZANTINE MUSICAL SYMBOL ARGOSYNTHETON;So;0;L;;;;;N;;;;; 1D074;BYZANTINE MUSICAL SYMBOL ETERON ARGOSYNTHETON;So;0;L;;;;;N;;;;; 1D075;BYZANTINE MUSICAL SYMBOL OYRANISMA NEO;So;0;L;;;;;N;;;;; 1D076;BYZANTINE MUSICAL SYMBOL THEMATISMOS ESO;So;0;L;;;;;N;;;;; 1D077;BYZANTINE MUSICAL SYMBOL THEMATISMOS EXO;So;0;L;;;;;N;;;;; 1D078;BYZANTINE MUSICAL SYMBOL THEMA APLOUN;So;0;L;;;;;N;;;;; 1D079;BYZANTINE MUSICAL SYMBOL THES KAI APOTHES;So;0;L;;;;;N;;;;; 1D07A;BYZANTINE MUSICAL SYMBOL KATAVASMA;So;0;L;;;;;N;;;;; 1D07B;BYZANTINE MUSICAL SYMBOL ENDOFONON;So;0;L;;;;;N;;;;; 1D07C;BYZANTINE MUSICAL SYMBOL YFEN KATO;So;0;L;;;;;N;;;;; 1D07D;BYZANTINE MUSICAL SYMBOL YFEN ANO;So;0;L;;;;;N;;;;; 1D07E;BYZANTINE MUSICAL SYMBOL STAVROS;So;0;L;;;;;N;;;;; 1D07F;BYZANTINE MUSICAL SYMBOL KLASMA ANO;So;0;L;;;;;N;;;;; 1D080;BYZANTINE MUSICAL SYMBOL DIPLI ARCHAION;So;0;L;;;;;N;;;;; 1D081;BYZANTINE MUSICAL SYMBOL KRATIMA ARCHAION;So;0;L;;;;;N;;;;; 1D082;BYZANTINE MUSICAL SYMBOL KRATIMA ALLO;So;0;L;;;;;N;;;;; 1D083;BYZANTINE MUSICAL SYMBOL KRATIMA NEO;So;0;L;;;;;N;;;;; 1D084;BYZANTINE MUSICAL SYMBOL APODERMA NEO;So;0;L;;;;;N;;;;; 1D085;BYZANTINE MUSICAL SYMBOL APLI;So;0;L;;;;;N;;;;; 1D086;BYZANTINE MUSICAL SYMBOL DIPLI;So;0;L;;;;;N;;;;; 1D087;BYZANTINE MUSICAL SYMBOL TRIPLI;So;0;L;;;;;N;;;;; 1D088;BYZANTINE MUSICAL SYMBOL TETRAPLI;So;0;L;;;;;N;;;;; 1D089;BYZANTINE MUSICAL SYMBOL KORONIS;So;0;L;;;;;N;;;;; 1D08A;BYZANTINE MUSICAL SYMBOL LEIMMA ENOS CHRONOU;So;0;L;;;;;N;;;;; 1D08B;BYZANTINE MUSICAL SYMBOL LEIMMA DYO CHRONON;So;0;L;;;;;N;;;;; 1D08C;BYZANTINE MUSICAL SYMBOL LEIMMA TRION CHRONON;So;0;L;;;;;N;;;;; 1D08D;BYZANTINE MUSICAL SYMBOL LEIMMA TESSARON CHRONON;So;0;L;;;;;N;;;;; 1D08E;BYZANTINE MUSICAL SYMBOL LEIMMA IMISEOS CHRONOU;So;0;L;;;;;N;;;;; 1D08F;BYZANTINE MUSICAL SYMBOL GORGON NEO ANO;So;0;L;;;;;N;;;;; 1D090;BYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON ARISTERA;So;0;L;;;;;N;;;;; 1D091;BYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON DEXIA;So;0;L;;;;;N;;;;; 1D092;BYZANTINE MUSICAL SYMBOL DIGORGON;So;0;L;;;;;N;;;;; 1D093;BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA KATO;So;0;L;;;;;N;;;;; 1D094;BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA ANO;So;0;L;;;;;N;;;;; 1D095;BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON DEXIA;So;0;L;;;;;N;;;;; 1D096;BYZANTINE MUSICAL SYMBOL TRIGORGON;So;0;L;;;;;N;;;;; 1D097;BYZANTINE MUSICAL SYMBOL ARGON;So;0;L;;;;;N;;;;; 1D098;BYZANTINE MUSICAL SYMBOL IMIDIARGON;So;0;L;;;;;N;;;;; 1D099;BYZANTINE MUSICAL SYMBOL DIARGON;So;0;L;;;;;N;;;;; 1D09A;BYZANTINE MUSICAL SYMBOL AGOGI POLI ARGI;So;0;L;;;;;N;;;;; 1D09B;BYZANTINE MUSICAL SYMBOL AGOGI ARGOTERI;So;0;L;;;;;N;;;;; 1D09C;BYZANTINE MUSICAL SYMBOL AGOGI ARGI;So;0;L;;;;;N;;;;; 1D09D;BYZANTINE MUSICAL SYMBOL AGOGI METRIA;So;0;L;;;;;N;;;;; 1D09E;BYZANTINE MUSICAL SYMBOL AGOGI MESI;So;0;L;;;;;N;;;;; 1D09F;BYZANTINE MUSICAL SYMBOL AGOGI GORGI;So;0;L;;;;;N;;;;; 1D0A0;BYZANTINE MUSICAL SYMBOL AGOGI GORGOTERI;So;0;L;;;;;N;;;;; 1D0A1;BYZANTINE MUSICAL SYMBOL AGOGI POLI GORGI;So;0;L;;;;;N;;;;; 1D0A2;BYZANTINE MUSICAL SYMBOL MARTYRIA PROTOS ICHOS;So;0;L;;;;;N;;;;; 1D0A3;BYZANTINE MUSICAL SYMBOL MARTYRIA ALLI PROTOS ICHOS;So;0;L;;;;;N;;;;; 1D0A4;BYZANTINE MUSICAL SYMBOL MARTYRIA DEYTEROS ICHOS;So;0;L;;;;;N;;;;; 1D0A5;BYZANTINE MUSICAL SYMBOL MARTYRIA ALLI DEYTEROS ICHOS;So;0;L;;;;;N;;;;; 1D0A6;BYZANTINE MUSICAL SYMBOL MARTYRIA TRITOS ICHOS;So;0;L;;;;;N;;;;; 1D0A7;BYZANTINE MUSICAL SYMBOL MARTYRIA TRIFONIAS;So;0;L;;;;;N;;;;; 1D0A8;BYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS ICHOS;So;0;L;;;;;N;;;;; 1D0A9;BYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS LEGETOS ICHOS;So;0;L;;;;;N;;;;; 1D0AA;BYZANTINE MUSICAL SYMBOL MARTYRIA LEGETOS ICHOS;So;0;L;;;;;N;;;;; 1D0AB;BYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS ICHOS;So;0;L;;;;;N;;;;; 1D0AC;BYZANTINE MUSICAL SYMBOL ISAKIA TELOUS ICHIMATOS;So;0;L;;;;;N;;;;; 1D0AD;BYZANTINE MUSICAL SYMBOL APOSTROFOI TELOUS ICHIMATOS;So;0;L;;;;;N;;;;; 1D0AE;BYZANTINE MUSICAL SYMBOL FANEROSIS TETRAFONIAS;So;0;L;;;;;N;;;;; 1D0AF;BYZANTINE MUSICAL SYMBOL FANEROSIS MONOFONIAS;So;0;L;;;;;N;;;;; 1D0B0;BYZANTINE MUSICAL SYMBOL FANEROSIS DIFONIAS;So;0;L;;;;;N;;;;; 1D0B1;BYZANTINE MUSICAL SYMBOL MARTYRIA VARYS ICHOS;So;0;L;;;;;N;;;;; 1D0B2;BYZANTINE MUSICAL SYMBOL MARTYRIA PROTOVARYS ICHOS;So;0;L;;;;;N;;;;; 1D0B3;BYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS TETARTOS ICHOS;So;0;L;;;;;N;;;;; 1D0B4;BYZANTINE MUSICAL SYMBOL GORTHMIKON N APLOUN;So;0;L;;;;;N;;;;; 1D0B5;BYZANTINE MUSICAL SYMBOL GORTHMIKON N DIPLOUN;So;0;L;;;;;N;;;;; 1D0B6;BYZANTINE MUSICAL SYMBOL ENARXIS KAI FTHORA VOU;So;0;L;;;;;N;;;;; 1D0B7;BYZANTINE MUSICAL SYMBOL IMIFONON;So;0;L;;;;;N;;;;; 1D0B8;BYZANTINE MUSICAL SYMBOL IMIFTHORON;So;0;L;;;;;N;;;;; 1D0B9;BYZANTINE MUSICAL SYMBOL FTHORA ARCHAION DEYTEROU ICHOU;So;0;L;;;;;N;;;;; 1D0BA;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI PA;So;0;L;;;;;N;;;;; 1D0BB;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NANA;So;0;L;;;;;N;;;;; 1D0BC;BYZANTINE MUSICAL SYMBOL FTHORA NAOS ICHOS;So;0;L;;;;;N;;;;; 1D0BD;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI DI;So;0;L;;;;;N;;;;; 1D0BE;BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON DIATONON DI;So;0;L;;;;;N;;;;; 1D0BF;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI KE;So;0;L;;;;;N;;;;; 1D0C0;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI ZO;So;0;L;;;;;N;;;;; 1D0C1;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI KATO;So;0;L;;;;;N;;;;; 1D0C2;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI ANO;So;0;L;;;;;N;;;;; 1D0C3;BYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA DIFONIAS;So;0;L;;;;;N;;;;; 1D0C4;BYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA MONOFONIAS;So;0;L;;;;;N;;;;; 1D0C5;BYZANTINE MUSICAL SYMBOL FHTORA SKLIRON CHROMA VASIS;So;0;L;;;;;N;;;;; 1D0C6;BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON CHROMA SYNAFI;So;0;L;;;;;N;;;;; 1D0C7;BYZANTINE MUSICAL SYMBOL FTHORA NENANO;So;0;L;;;;;N;;;;; 1D0C8;BYZANTINE MUSICAL SYMBOL CHROA ZYGOS;So;0;L;;;;;N;;;;; 1D0C9;BYZANTINE MUSICAL SYMBOL CHROA KLITON;So;0;L;;;;;N;;;;; 1D0CA;BYZANTINE MUSICAL SYMBOL CHROA SPATHI;So;0;L;;;;;N;;;;; 1D0CB;BYZANTINE MUSICAL SYMBOL FTHORA I YFESIS TETARTIMORION;So;0;L;;;;;N;;;;; 1D0CC;BYZANTINE MUSICAL SYMBOL FTHORA ENARMONIOS ANTIFONIA;So;0;L;;;;;N;;;;; 1D0CD;BYZANTINE MUSICAL SYMBOL YFESIS TRITIMORION;So;0;L;;;;;N;;;;; 1D0CE;BYZANTINE MUSICAL SYMBOL DIESIS TRITIMORION;So;0;L;;;;;N;;;;; 1D0CF;BYZANTINE MUSICAL SYMBOL DIESIS TETARTIMORION;So;0;L;;;;;N;;;;; 1D0D0;BYZANTINE MUSICAL SYMBOL DIESIS APLI DYO DODEKATA;So;0;L;;;;;N;;;;; 1D0D1;BYZANTINE MUSICAL SYMBOL DIESIS MONOGRAMMOS TESSERA DODEKATA;So;0;L;;;;;N;;;;; 1D0D2;BYZANTINE MUSICAL SYMBOL DIESIS DIGRAMMOS EX DODEKATA;So;0;L;;;;;N;;;;; 1D0D3;BYZANTINE MUSICAL SYMBOL DIESIS TRIGRAMMOS OKTO DODEKATA;So;0;L;;;;;N;;;;; 1D0D4;BYZANTINE MUSICAL SYMBOL YFESIS APLI DYO DODEKATA;So;0;L;;;;;N;;;;; 1D0D5;BYZANTINE MUSICAL SYMBOL YFESIS MONOGRAMMOS TESSERA DODEKATA;So;0;L;;;;;N;;;;; 1D0D6;BYZANTINE MUSICAL SYMBOL YFESIS DIGRAMMOS EX DODEKATA;So;0;L;;;;;N;;;;; 1D0D7;BYZANTINE MUSICAL SYMBOL YFESIS TRIGRAMMOS OKTO DODEKATA;So;0;L;;;;;N;;;;; 1D0D8;BYZANTINE MUSICAL SYMBOL GENIKI DIESIS;So;0;L;;;;;N;;;;; 1D0D9;BYZANTINE MUSICAL SYMBOL GENIKI YFESIS;So;0;L;;;;;N;;;;; 1D0DA;BYZANTINE MUSICAL SYMBOL DIASTOLI APLI MIKRI;So;0;L;;;;;N;;;;; 1D0DB;BYZANTINE MUSICAL SYMBOL DIASTOLI APLI MEGALI;So;0;L;;;;;N;;;;; 1D0DC;BYZANTINE MUSICAL SYMBOL DIASTOLI DIPLI;So;0;L;;;;;N;;;;; 1D0DD;BYZANTINE MUSICAL SYMBOL DIASTOLI THESEOS;So;0;L;;;;;N;;;;; 1D0DE;BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS;So;0;L;;;;;N;;;;; 1D0DF;BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS DISIMOU;So;0;L;;;;;N;;;;; 1D0E0;BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TRISIMOU;So;0;L;;;;;N;;;;; 1D0E1;BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TETRASIMOU;So;0;L;;;;;N;;;;; 1D0E2;BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS;So;0;L;;;;;N;;;;; 1D0E3;BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS DISIMOU;So;0;L;;;;;N;;;;; 1D0E4;BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TRISIMOU;So;0;L;;;;;N;;;;; 1D0E5;BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TETRASIMOU;So;0;L;;;;;N;;;;; 1D0E6;BYZANTINE MUSICAL SYMBOL DIGRAMMA GG;So;0;L;;;;;N;;;;; 1D0E7;BYZANTINE MUSICAL SYMBOL DIFTOGGOS OU;So;0;L;;;;;N;;;;; 1D0E8;BYZANTINE MUSICAL SYMBOL STIGMA;So;0;L;;;;;N;;;;; 1D0E9;BYZANTINE MUSICAL SYMBOL ARKTIKO PA;So;0;L;;;;;N;;;;; 1D0EA;BYZANTINE MUSICAL SYMBOL ARKTIKO VOU;So;0;L;;;;;N;;;;; 1D0EB;BYZANTINE MUSICAL SYMBOL ARKTIKO GA;So;0;L;;;;;N;;;;; 1D0EC;BYZANTINE MUSICAL SYMBOL ARKTIKO DI;So;0;L;;;;;N;;;;; 1D0ED;BYZANTINE MUSICAL SYMBOL ARKTIKO KE;So;0;L;;;;;N;;;;; 1D0EE;BYZANTINE MUSICAL SYMBOL ARKTIKO ZO;So;0;L;;;;;N;;;;; 1D0EF;BYZANTINE MUSICAL SYMBOL ARKTIKO NI;So;0;L;;;;;N;;;;; 1D0F0;BYZANTINE MUSICAL SYMBOL KENTIMATA NEO MESO;So;0;L;;;;;N;;;;; 1D0F1;BYZANTINE MUSICAL SYMBOL KENTIMA NEO MESO;So;0;L;;;;;N;;;;; 1D0F2;BYZANTINE MUSICAL SYMBOL KENTIMATA NEO KATO;So;0;L;;;;;N;;;;; 1D0F3;BYZANTINE MUSICAL SYMBOL KENTIMA NEO KATO;So;0;L;;;;;N;;;;; 1D0F4;BYZANTINE MUSICAL SYMBOL KLASMA KATO;So;0;L;;;;;N;;;;; 1D0F5;BYZANTINE MUSICAL SYMBOL GORGON NEO KATO;So;0;L;;;;;N;;;;; 1D100;MUSICAL SYMBOL SINGLE BARLINE;So;0;L;;;;;N;;;;; 1D101;MUSICAL SYMBOL DOUBLE BARLINE;So;0;L;;;;;N;;;;; 1D102;MUSICAL SYMBOL FINAL BARLINE;So;0;L;;;;;N;;;;; 1D103;MUSICAL SYMBOL REVERSE FINAL BARLINE;So;0;L;;;;;N;;;;; 1D104;MUSICAL SYMBOL DASHED BARLINE;So;0;L;;;;;N;;;;; 1D105;MUSICAL SYMBOL SHORT BARLINE;So;0;L;;;;;N;;;;; 1D106;MUSICAL SYMBOL LEFT REPEAT SIGN;So;0;L;;;;;N;;;;; 1D107;MUSICAL SYMBOL RIGHT REPEAT SIGN;So;0;L;;;;;N;;;;; 1D108;MUSICAL SYMBOL REPEAT DOTS;So;0;L;;;;;N;;;;; 1D109;MUSICAL SYMBOL DAL SEGNO;So;0;L;;;;;N;;;;; 1D10A;MUSICAL SYMBOL DA CAPO;So;0;L;;;;;N;;;;; 1D10B;MUSICAL SYMBOL SEGNO;So;0;L;;;;;N;;;;; 1D10C;MUSICAL SYMBOL CODA;So;0;L;;;;;N;;;;; 1D10D;MUSICAL SYMBOL REPEATED FIGURE-1;So;0;L;;;;;N;;;;; 1D10E;MUSICAL SYMBOL REPEATED FIGURE-2;So;0;L;;;;;N;;;;; 1D10F;MUSICAL SYMBOL REPEATED FIGURE-3;So;0;L;;;;;N;;;;; 1D110;MUSICAL SYMBOL FERMATA;So;0;L;;;;;N;;;;; 1D111;MUSICAL SYMBOL FERMATA BELOW;So;0;L;;;;;N;;;;; 1D112;MUSICAL SYMBOL BREATH MARK;So;0;L;;;;;N;;;;; 1D113;MUSICAL SYMBOL CAESURA;So;0;L;;;;;N;;;;; 1D114;MUSICAL SYMBOL BRACE;So;0;L;;;;;N;;;;; 1D115;MUSICAL SYMBOL BRACKET;So;0;L;;;;;N;;;;; 1D116;MUSICAL SYMBOL ONE-LINE STAFF;So;0;L;;;;;N;;;;; 1D117;MUSICAL SYMBOL TWO-LINE STAFF;So;0;L;;;;;N;;;;; 1D118;MUSICAL SYMBOL THREE-LINE STAFF;So;0;L;;;;;N;;;;; 1D119;MUSICAL SYMBOL FOUR-LINE STAFF;So;0;L;;;;;N;;;;; 1D11A;MUSICAL SYMBOL FIVE-LINE STAFF;So;0;L;;;;;N;;;;; 1D11B;MUSICAL SYMBOL SIX-LINE STAFF;So;0;L;;;;;N;;;;; 1D11C;MUSICAL SYMBOL SIX-STRING FRETBOARD;So;0;L;;;;;N;;;;; 1D11D;MUSICAL SYMBOL FOUR-STRING FRETBOARD;So;0;L;;;;;N;;;;; 1D11E;MUSICAL SYMBOL G CLEF;So;0;L;;;;;N;;;;; 1D11F;MUSICAL SYMBOL G CLEF OTTAVA ALTA;So;0;L;;;;;N;;;;; 1D120;MUSICAL SYMBOL G CLEF OTTAVA BASSA;So;0;L;;;;;N;;;;; 1D121;MUSICAL SYMBOL C CLEF;So;0;L;;;;;N;;;;; 1D122;MUSICAL SYMBOL F CLEF;So;0;L;;;;;N;;;;; 1D123;MUSICAL SYMBOL F CLEF OTTAVA ALTA;So;0;L;;;;;N;;;;; 1D124;MUSICAL SYMBOL F CLEF OTTAVA BASSA;So;0;L;;;;;N;;;;; 1D125;MUSICAL SYMBOL DRUM CLEF-1;So;0;L;;;;;N;;;;; 1D126;MUSICAL SYMBOL DRUM CLEF-2;So;0;L;;;;;N;;;;; 1D129;MUSICAL SYMBOL MULTIPLE MEASURE REST;So;0;L;;;;;N;;;;; 1D12A;MUSICAL SYMBOL DOUBLE SHARP;So;0;L;;;;;N;;;;; 1D12B;MUSICAL SYMBOL DOUBLE FLAT;So;0;L;;;;;N;;;;; 1D12C;MUSICAL SYMBOL FLAT UP;So;0;L;;;;;N;;;;; 1D12D;MUSICAL SYMBOL FLAT DOWN;So;0;L;;;;;N;;;;; 1D12E;MUSICAL SYMBOL NATURAL UP;So;0;L;;;;;N;;;;; 1D12F;MUSICAL SYMBOL NATURAL DOWN;So;0;L;;;;;N;;;;; 1D130;MUSICAL SYMBOL SHARP UP;So;0;L;;;;;N;;;;; 1D131;MUSICAL SYMBOL SHARP DOWN;So;0;L;;;;;N;;;;; 1D132;MUSICAL SYMBOL QUARTER TONE SHARP;So;0;L;;;;;N;;;;; 1D133;MUSICAL SYMBOL QUARTER TONE FLAT;So;0;L;;;;;N;;;;; 1D134;MUSICAL SYMBOL COMMON TIME;So;0;L;;;;;N;;;;; 1D135;MUSICAL SYMBOL CUT TIME;So;0;L;;;;;N;;;;; 1D136;MUSICAL SYMBOL OTTAVA ALTA;So;0;L;;;;;N;;;;; 1D137;MUSICAL SYMBOL OTTAVA BASSA;So;0;L;;;;;N;;;;; 1D138;MUSICAL SYMBOL QUINDICESIMA ALTA;So;0;L;;;;;N;;;;; 1D139;MUSICAL SYMBOL QUINDICESIMA BASSA;So;0;L;;;;;N;;;;; 1D13A;MUSICAL SYMBOL MULTI REST;So;0;L;;;;;N;;;;; 1D13B;MUSICAL SYMBOL WHOLE REST;So;0;L;;;;;N;;;;; 1D13C;MUSICAL SYMBOL HALF REST;So;0;L;;;;;N;;;;; 1D13D;MUSICAL SYMBOL QUARTER REST;So;0;L;;;;;N;;;;; 1D13E;MUSICAL SYMBOL EIGHTH REST;So;0;L;;;;;N;;;;; 1D13F;MUSICAL SYMBOL SIXTEENTH REST;So;0;L;;;;;N;;;;; 1D140;MUSICAL SYMBOL THIRTY-SECOND REST;So;0;L;;;;;N;;;;; 1D141;MUSICAL SYMBOL SIXTY-FOURTH REST;So;0;L;;;;;N;;;;; 1D142;MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH REST;So;0;L;;;;;N;;;;; 1D143;MUSICAL SYMBOL X NOTEHEAD;So;0;L;;;;;N;;;;; 1D144;MUSICAL SYMBOL PLUS NOTEHEAD;So;0;L;;;;;N;;;;; 1D145;MUSICAL SYMBOL CIRCLE X NOTEHEAD;So;0;L;;;;;N;;;;; 1D146;MUSICAL SYMBOL SQUARE NOTEHEAD WHITE;So;0;L;;;;;N;;;;; 1D147;MUSICAL SYMBOL SQUARE NOTEHEAD BLACK;So;0;L;;;;;N;;;;; 1D148;MUSICAL SYMBOL TRIANGLE NOTEHEAD UP WHITE;So;0;L;;;;;N;;;;; 1D149;MUSICAL SYMBOL TRIANGLE NOTEHEAD UP BLACK;So;0;L;;;;;N;;;;; 1D14A;MUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT WHITE;So;0;L;;;;;N;;;;; 1D14B;MUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT BLACK;So;0;L;;;;;N;;;;; 1D14C;MUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT WHITE;So;0;L;;;;;N;;;;; 1D14D;MUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT BLACK;So;0;L;;;;;N;;;;; 1D14E;MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN WHITE;So;0;L;;;;;N;;;;; 1D14F;MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN BLACK;So;0;L;;;;;N;;;;; 1D150;MUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT WHITE;So;0;L;;;;;N;;;;; 1D151;MUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT BLACK;So;0;L;;;;;N;;;;; 1D152;MUSICAL SYMBOL MOON NOTEHEAD WHITE;So;0;L;;;;;N;;;;; 1D153;MUSICAL SYMBOL MOON NOTEHEAD BLACK;So;0;L;;;;;N;;;;; 1D154;MUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN WHITE;So;0;L;;;;;N;;;;; 1D155;MUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN BLACK;So;0;L;;;;;N;;;;; 1D156;MUSICAL SYMBOL PARENTHESIS NOTEHEAD;So;0;L;;;;;N;;;;; 1D157;MUSICAL SYMBOL VOID NOTEHEAD;So;0;L;;;;;N;;;;; 1D158;MUSICAL SYMBOL NOTEHEAD BLACK;So;0;L;;;;;N;;;;; 1D159;MUSICAL SYMBOL NULL NOTEHEAD;So;0;L;;;;;N;;;;; 1D15A;MUSICAL SYMBOL CLUSTER NOTEHEAD WHITE;So;0;L;;;;;N;;;;; 1D15B;MUSICAL SYMBOL CLUSTER NOTEHEAD BLACK;So;0;L;;;;;N;;;;; 1D15C;MUSICAL SYMBOL BREVE;So;0;L;;;;;N;;;;; 1D15D;MUSICAL SYMBOL WHOLE NOTE;So;0;L;;;;;N;;;;; 1D15E;MUSICAL SYMBOL HALF NOTE;So;0;L;1D157 1D165;;;;N;;;;; 1D15F;MUSICAL SYMBOL QUARTER NOTE;So;0;L;1D158 1D165;;;;N;;;;; 1D160;MUSICAL SYMBOL EIGHTH NOTE;So;0;L;1D15F 1D16E;;;;N;;;;; 1D161;MUSICAL SYMBOL SIXTEENTH NOTE;So;0;L;1D15F 1D16F;;;;N;;;;; 1D162;MUSICAL SYMBOL THIRTY-SECOND NOTE;So;0;L;1D15F 1D170;;;;N;;;;; 1D163;MUSICAL SYMBOL SIXTY-FOURTH NOTE;So;0;L;1D15F 1D171;;;;N;;;;; 1D164;MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE;So;0;L;1D15F 1D172;;;;N;;;;; 1D165;MUSICAL SYMBOL COMBINING STEM;Mc;216;L;;;;;N;;;;; 1D166;MUSICAL SYMBOL COMBINING SPRECHGESANG STEM;Mc;216;L;;;;;N;;;;; 1D167;MUSICAL SYMBOL COMBINING TREMOLO-1;Mn;1;NSM;;;;;N;;;;; 1D168;MUSICAL SYMBOL COMBINING TREMOLO-2;Mn;1;NSM;;;;;N;;;;; 1D169;MUSICAL SYMBOL COMBINING TREMOLO-3;Mn;1;NSM;;;;;N;;;;; 1D16A;MUSICAL SYMBOL FINGERED TREMOLO-1;So;0;L;;;;;N;;;;; 1D16B;MUSICAL SYMBOL FINGERED TREMOLO-2;So;0;L;;;;;N;;;;; 1D16C;MUSICAL SYMBOL FINGERED TREMOLO-3;So;0;L;;;;;N;;;;; 1D16D;MUSICAL SYMBOL COMBINING AUGMENTATION DOT;Mc;226;L;;;;;N;;;;; 1D16E;MUSICAL SYMBOL COMBINING FLAG-1;Mc;216;L;;;;;N;;;;; 1D16F;MUSICAL SYMBOL COMBINING FLAG-2;Mc;216;L;;;;;N;;;;; 1D170;MUSICAL SYMBOL COMBINING FLAG-3;Mc;216;L;;;;;N;;;;; 1D171;MUSICAL SYMBOL COMBINING FLAG-4;Mc;216;L;;;;;N;;;;; 1D172;MUSICAL SYMBOL COMBINING FLAG-5;Mc;216;L;;;;;N;;;;; 1D173;MUSICAL SYMBOL BEGIN BEAM;Cf;0;BN;;;;;N;;;;; 1D174;MUSICAL SYMBOL END BEAM;Cf;0;BN;;;;;N;;;;; 1D175;MUSICAL SYMBOL BEGIN TIE;Cf;0;BN;;;;;N;;;;; 1D176;MUSICAL SYMBOL END TIE;Cf;0;BN;;;;;N;;;;; 1D177;MUSICAL SYMBOL BEGIN SLUR;Cf;0;BN;;;;;N;;;;; 1D178;MUSICAL SYMBOL END SLUR;Cf;0;BN;;;;;N;;;;; 1D179;MUSICAL SYMBOL BEGIN PHRASE;Cf;0;BN;;;;;N;;;;; 1D17A;MUSICAL SYMBOL END PHRASE;Cf;0;BN;;;;;N;;;;; 1D17B;MUSICAL SYMBOL COMBINING ACCENT;Mn;220;NSM;;;;;N;;;;; 1D17C;MUSICAL SYMBOL COMBINING STACCATO;Mn;220;NSM;;;;;N;;;;; 1D17D;MUSICAL SYMBOL COMBINING TENUTO;Mn;220;NSM;;;;;N;;;;; 1D17E;MUSICAL SYMBOL COMBINING STACCATISSIMO;Mn;220;NSM;;;;;N;;;;; 1D17F;MUSICAL SYMBOL COMBINING MARCATO;Mn;220;NSM;;;;;N;;;;; 1D180;MUSICAL SYMBOL COMBINING MARCATO-STACCATO;Mn;220;NSM;;;;;N;;;;; 1D181;MUSICAL SYMBOL COMBINING ACCENT-STACCATO;Mn;220;NSM;;;;;N;;;;; 1D182;MUSICAL SYMBOL COMBINING LOURE;Mn;220;NSM;;;;;N;;;;; 1D183;MUSICAL SYMBOL ARPEGGIATO UP;So;0;L;;;;;N;;;;; 1D184;MUSICAL SYMBOL ARPEGGIATO DOWN;So;0;L;;;;;N;;;;; 1D185;MUSICAL SYMBOL COMBINING DOIT;Mn;230;NSM;;;;;N;;;;; 1D186;MUSICAL SYMBOL COMBINING RIP;Mn;230;NSM;;;;;N;;;;; 1D187;MUSICAL SYMBOL COMBINING FLIP;Mn;230;NSM;;;;;N;;;;; 1D188;MUSICAL SYMBOL COMBINING SMEAR;Mn;230;NSM;;;;;N;;;;; 1D189;MUSICAL SYMBOL COMBINING BEND;Mn;230;NSM;;;;;N;;;;; 1D18A;MUSICAL SYMBOL COMBINING DOUBLE TONGUE;Mn;220;NSM;;;;;N;;;;; 1D18B;MUSICAL SYMBOL COMBINING TRIPLE TONGUE;Mn;220;NSM;;;;;N;;;;; 1D18C;MUSICAL SYMBOL RINFORZANDO;So;0;L;;;;;N;;;;; 1D18D;MUSICAL SYMBOL SUBITO;So;0;L;;;;;N;;;;; 1D18E;MUSICAL SYMBOL Z;So;0;L;;;;;N;;;;; 1D18F;MUSICAL SYMBOL PIANO;So;0;L;;;;;N;;;;; 1D190;MUSICAL SYMBOL MEZZO;So;0;L;;;;;N;;;;; 1D191;MUSICAL SYMBOL FORTE;So;0;L;;;;;N;;;;; 1D192;MUSICAL SYMBOL CRESCENDO;So;0;L;;;;;N;;;;; 1D193;MUSICAL SYMBOL DECRESCENDO;So;0;L;;;;;N;;;;; 1D194;MUSICAL SYMBOL GRACE NOTE SLASH;So;0;L;;;;;N;;;;; 1D195;MUSICAL SYMBOL GRACE NOTE NO SLASH;So;0;L;;;;;N;;;;; 1D196;MUSICAL SYMBOL TR;So;0;L;;;;;N;;;;; 1D197;MUSICAL SYMBOL TURN;So;0;L;;;;;N;;;;; 1D198;MUSICAL SYMBOL INVERTED TURN;So;0;L;;;;;N;;;;; 1D199;MUSICAL SYMBOL TURN SLASH;So;0;L;;;;;N;;;;; 1D19A;MUSICAL SYMBOL TURN UP;So;0;L;;;;;N;;;;; 1D19B;MUSICAL SYMBOL ORNAMENT STROKE-1;So;0;L;;;;;N;;;;; 1D19C;MUSICAL SYMBOL ORNAMENT STROKE-2;So;0;L;;;;;N;;;;; 1D19D;MUSICAL SYMBOL ORNAMENT STROKE-3;So;0;L;;;;;N;;;;; 1D19E;MUSICAL SYMBOL ORNAMENT STROKE-4;So;0;L;;;;;N;;;;; 1D19F;MUSICAL SYMBOL ORNAMENT STROKE-5;So;0;L;;;;;N;;;;; 1D1A0;MUSICAL SYMBOL ORNAMENT STROKE-6;So;0;L;;;;;N;;;;; 1D1A1;MUSICAL SYMBOL ORNAMENT STROKE-7;So;0;L;;;;;N;;;;; 1D1A2;MUSICAL SYMBOL ORNAMENT STROKE-8;So;0;L;;;;;N;;;;; 1D1A3;MUSICAL SYMBOL ORNAMENT STROKE-9;So;0;L;;;;;N;;;;; 1D1A4;MUSICAL SYMBOL ORNAMENT STROKE-10;So;0;L;;;;;N;;;;; 1D1A5;MUSICAL SYMBOL ORNAMENT STROKE-11;So;0;L;;;;;N;;;;; 1D1A6;MUSICAL SYMBOL HAUPTSTIMME;So;0;L;;;;;N;;;;; 1D1A7;MUSICAL SYMBOL NEBENSTIMME;So;0;L;;;;;N;;;;; 1D1A8;MUSICAL SYMBOL END OF STIMME;So;0;L;;;;;N;;;;; 1D1A9;MUSICAL SYMBOL DEGREE SLASH;So;0;L;;;;;N;;;;; 1D1AA;MUSICAL SYMBOL COMBINING DOWN BOW;Mn;230;NSM;;;;;N;;;;; 1D1AB;MUSICAL SYMBOL COMBINING UP BOW;Mn;230;NSM;;;;;N;;;;; 1D1AC;MUSICAL SYMBOL COMBINING HARMONIC;Mn;230;NSM;;;;;N;;;;; 1D1AD;MUSICAL SYMBOL COMBINING SNAP PIZZICATO;Mn;230;NSM;;;;;N;;;;; 1D1AE;MUSICAL SYMBOL PEDAL MARK;So;0;L;;;;;N;;;;; 1D1AF;MUSICAL SYMBOL PEDAL UP MARK;So;0;L;;;;;N;;;;; 1D1B0;MUSICAL SYMBOL HALF PEDAL MARK;So;0;L;;;;;N;;;;; 1D1B1;MUSICAL SYMBOL GLISSANDO UP;So;0;L;;;;;N;;;;; 1D1B2;MUSICAL SYMBOL GLISSANDO DOWN;So;0;L;;;;;N;;;;; 1D1B3;MUSICAL SYMBOL WITH FINGERNAILS;So;0;L;;;;;N;;;;; 1D1B4;MUSICAL SYMBOL DAMP;So;0;L;;;;;N;;;;; 1D1B5;MUSICAL SYMBOL DAMP ALL;So;0;L;;;;;N;;;;; 1D1B6;MUSICAL SYMBOL MAXIMA;So;0;L;;;;;N;;;;; 1D1B7;MUSICAL SYMBOL LONGA;So;0;L;;;;;N;;;;; 1D1B8;MUSICAL SYMBOL BREVIS;So;0;L;;;;;N;;;;; 1D1B9;MUSICAL SYMBOL SEMIBREVIS WHITE;So;0;L;;;;;N;;;;; 1D1BA;MUSICAL SYMBOL SEMIBREVIS BLACK;So;0;L;;;;;N;;;;; 1D1BB;MUSICAL SYMBOL MINIMA;So;0;L;1D1B9 1D165;;;;N;;;;; 1D1BC;MUSICAL SYMBOL MINIMA BLACK;So;0;L;1D1BA 1D165;;;;N;;;;; 1D1BD;MUSICAL SYMBOL SEMIMINIMA WHITE;So;0;L;1D1BB 1D16E;;;;N;;;;; 1D1BE;MUSICAL SYMBOL SEMIMINIMA BLACK;So;0;L;1D1BC 1D16E;;;;N;;;;; 1D1BF;MUSICAL SYMBOL FUSA WHITE;So;0;L;1D1BB 1D16F;;;;N;;;;; 1D1C0;MUSICAL SYMBOL FUSA BLACK;So;0;L;1D1BC 1D16F;;;;N;;;;; 1D1C1;MUSICAL SYMBOL LONGA PERFECTA REST;So;0;L;;;;;N;;;;; 1D1C2;MUSICAL SYMBOL LONGA IMPERFECTA REST;So;0;L;;;;;N;;;;; 1D1C3;MUSICAL SYMBOL BREVIS REST;So;0;L;;;;;N;;;;; 1D1C4;MUSICAL SYMBOL SEMIBREVIS REST;So;0;L;;;;;N;;;;; 1D1C5;MUSICAL SYMBOL MINIMA REST;So;0;L;;;;;N;;;;; 1D1C6;MUSICAL SYMBOL SEMIMINIMA REST;So;0;L;;;;;N;;;;; 1D1C7;MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA;So;0;L;;;;;N;;;;; 1D1C8;MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE IMPERFECTA;So;0;L;;;;;N;;;;; 1D1C9;MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA DIMINUTION-1;So;0;L;;;;;N;;;;; 1D1CA;MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE PERFECTA;So;0;L;;;;;N;;;;; 1D1CB;MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA;So;0;L;;;;;N;;;;; 1D1CC;MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-1;So;0;L;;;;;N;;;;; 1D1CD;MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-2;So;0;L;;;;;N;;;;; 1D1CE;MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-3;So;0;L;;;;;N;;;;; 1D1CF;MUSICAL SYMBOL CROIX;So;0;L;;;;;N;;;;; 1D1D0;MUSICAL SYMBOL GREGORIAN C CLEF;So;0;L;;;;;N;;;;; 1D1D1;MUSICAL SYMBOL GREGORIAN F CLEF;So;0;L;;;;;N;;;;; 1D1D2;MUSICAL SYMBOL SQUARE B;So;0;L;;;;;N;;;;; 1D1D3;MUSICAL SYMBOL VIRGA;So;0;L;;;;;N;;;;; 1D1D4;MUSICAL SYMBOL PODATUS;So;0;L;;;;;N;;;;; 1D1D5;MUSICAL SYMBOL CLIVIS;So;0;L;;;;;N;;;;; 1D1D6;MUSICAL SYMBOL SCANDICUS;So;0;L;;;;;N;;;;; 1D1D7;MUSICAL SYMBOL CLIMACUS;So;0;L;;;;;N;;;;; 1D1D8;MUSICAL SYMBOL TORCULUS;So;0;L;;;;;N;;;;; 1D1D9;MUSICAL SYMBOL PORRECTUS;So;0;L;;;;;N;;;;; 1D1DA;MUSICAL SYMBOL PORRECTUS FLEXUS;So;0;L;;;;;N;;;;; 1D1DB;MUSICAL SYMBOL SCANDICUS FLEXUS;So;0;L;;;;;N;;;;; 1D1DC;MUSICAL SYMBOL TORCULUS RESUPINUS;So;0;L;;;;;N;;;;; 1D1DD;MUSICAL SYMBOL PES SUBPUNCTIS;So;0;L;;;;;N;;;;; 1D1DE;MUSICAL SYMBOL KIEVAN C CLEF;So;0;L;;;;;N;;;;; 1D1DF;MUSICAL SYMBOL KIEVAN END OF PIECE;So;0;L;;;;;N;;;;; 1D1E0;MUSICAL SYMBOL KIEVAN FINAL NOTE;So;0;L;;;;;N;;;;; 1D1E1;MUSICAL SYMBOL KIEVAN RECITATIVE MARK;So;0;L;;;;;N;;;;; 1D1E2;MUSICAL SYMBOL KIEVAN WHOLE NOTE;So;0;L;;;;;N;;;;; 1D1E3;MUSICAL SYMBOL KIEVAN HALF NOTE;So;0;L;;;;;N;;;;; 1D1E4;MUSICAL SYMBOL KIEVAN QUARTER NOTE STEM DOWN;So;0;L;;;;;N;;;;; 1D1E5;MUSICAL SYMBOL KIEVAN QUARTER NOTE STEM UP;So;0;L;;;;;N;;;;; 1D1E6;MUSICAL SYMBOL KIEVAN EIGHTH NOTE STEM DOWN;So;0;L;;;;;N;;;;; 1D1E7;MUSICAL SYMBOL KIEVAN EIGHTH NOTE STEM UP;So;0;L;;;;;N;;;;; 1D1E8;MUSICAL SYMBOL KIEVAN FLAT SIGN;So;0;L;;;;;N;;;;; 1D1E9;MUSICAL SYMBOL SORI;So;0;ON;;;;;N;;;;; 1D1EA;MUSICAL SYMBOL KORON;So;0;ON;;;;;N;;;;; 1D200;GREEK VOCAL NOTATION SYMBOL-1;So;0;ON;;;;;N;;;;; 1D201;GREEK VOCAL NOTATION SYMBOL-2;So;0;ON;;;;;N;;;;; 1D202;GREEK VOCAL NOTATION SYMBOL-3;So;0;ON;;;;;N;;;;; 1D203;GREEK VOCAL NOTATION SYMBOL-4;So;0;ON;;;;;N;;;;; 1D204;GREEK VOCAL NOTATION SYMBOL-5;So;0;ON;;;;;N;;;;; 1D205;GREEK VOCAL NOTATION SYMBOL-6;So;0;ON;;;;;N;;;;; 1D206;GREEK VOCAL NOTATION SYMBOL-7;So;0;ON;;;;;N;;;;; 1D207;GREEK VOCAL NOTATION SYMBOL-8;So;0;ON;;;;;N;;;;; 1D208;GREEK VOCAL NOTATION SYMBOL-9;So;0;ON;;;;;N;;;;; 1D209;GREEK VOCAL NOTATION SYMBOL-10;So;0;ON;;;;;N;;;;; 1D20A;GREEK VOCAL NOTATION SYMBOL-11;So;0;ON;;;;;N;;;;; 1D20B;GREEK VOCAL NOTATION SYMBOL-12;So;0;ON;;;;;N;;;;; 1D20C;GREEK VOCAL NOTATION SYMBOL-13;So;0;ON;;;;;N;;;;; 1D20D;GREEK VOCAL NOTATION SYMBOL-14;So;0;ON;;;;;N;;;;; 1D20E;GREEK VOCAL NOTATION SYMBOL-15;So;0;ON;;;;;N;;;;; 1D20F;GREEK VOCAL NOTATION SYMBOL-16;So;0;ON;;;;;N;;;;; 1D210;GREEK VOCAL NOTATION SYMBOL-17;So;0;ON;;;;;N;;;;; 1D211;GREEK VOCAL NOTATION SYMBOL-18;So;0;ON;;;;;N;;;;; 1D212;GREEK VOCAL NOTATION SYMBOL-19;So;0;ON;;;;;N;;;;; 1D213;GREEK VOCAL NOTATION SYMBOL-20;So;0;ON;;;;;N;;;;; 1D214;GREEK VOCAL NOTATION SYMBOL-21;So;0;ON;;;;;N;;;;; 1D215;GREEK VOCAL NOTATION SYMBOL-22;So;0;ON;;;;;N;;;;; 1D216;GREEK VOCAL NOTATION SYMBOL-23;So;0;ON;;;;;N;;;;; 1D217;GREEK VOCAL NOTATION SYMBOL-24;So;0;ON;;;;;N;;;;; 1D218;GREEK VOCAL NOTATION SYMBOL-50;So;0;ON;;;;;N;;;;; 1D219;GREEK VOCAL NOTATION SYMBOL-51;So;0;ON;;;;;N;;;;; 1D21A;GREEK VOCAL NOTATION SYMBOL-52;So;0;ON;;;;;N;;;;; 1D21B;GREEK VOCAL NOTATION SYMBOL-53;So;0;ON;;;;;N;;;;; 1D21C;GREEK VOCAL NOTATION SYMBOL-54;So;0;ON;;;;;N;;;;; 1D21D;GREEK INSTRUMENTAL NOTATION SYMBOL-1;So;0;ON;;;;;N;;;;; 1D21E;GREEK INSTRUMENTAL NOTATION SYMBOL-2;So;0;ON;;;;;N;;;;; 1D21F;GREEK INSTRUMENTAL NOTATION SYMBOL-4;So;0;ON;;;;;N;;;;; 1D220;GREEK INSTRUMENTAL NOTATION SYMBOL-5;So;0;ON;;;;;N;;;;; 1D221;GREEK INSTRUMENTAL NOTATION SYMBOL-7;So;0;ON;;;;;N;;;;; 1D222;GREEK INSTRUMENTAL NOTATION SYMBOL-8;So;0;ON;;;;;N;;;;; 1D223;GREEK INSTRUMENTAL NOTATION SYMBOL-11;So;0;ON;;;;;N;;;;; 1D224;GREEK INSTRUMENTAL NOTATION SYMBOL-12;So;0;ON;;;;;N;;;;; 1D225;GREEK INSTRUMENTAL NOTATION SYMBOL-13;So;0;ON;;;;;N;;;;; 1D226;GREEK INSTRUMENTAL NOTATION SYMBOL-14;So;0;ON;;;;;N;;;;; 1D227;GREEK INSTRUMENTAL NOTATION SYMBOL-17;So;0;ON;;;;;N;;;;; 1D228;GREEK INSTRUMENTAL NOTATION SYMBOL-18;So;0;ON;;;;;N;;;;; 1D229;GREEK INSTRUMENTAL NOTATION SYMBOL-19;So;0;ON;;;;;N;;;;; 1D22A;GREEK INSTRUMENTAL NOTATION SYMBOL-23;So;0;ON;;;;;N;;;;; 1D22B;GREEK INSTRUMENTAL NOTATION SYMBOL-24;So;0;ON;;;;;N;;;;; 1D22C;GREEK INSTRUMENTAL NOTATION SYMBOL-25;So;0;ON;;;;;N;;;;; 1D22D;GREEK INSTRUMENTAL NOTATION SYMBOL-26;So;0;ON;;;;;N;;;;; 1D22E;GREEK INSTRUMENTAL NOTATION SYMBOL-27;So;0;ON;;;;;N;;;;; 1D22F;GREEK INSTRUMENTAL NOTATION SYMBOL-29;So;0;ON;;;;;N;;;;; 1D230;GREEK INSTRUMENTAL NOTATION SYMBOL-30;So;0;ON;;;;;N;;;;; 1D231;GREEK INSTRUMENTAL NOTATION SYMBOL-32;So;0;ON;;;;;N;;;;; 1D232;GREEK INSTRUMENTAL NOTATION SYMBOL-36;So;0;ON;;;;;N;;;;; 1D233;GREEK INSTRUMENTAL NOTATION SYMBOL-37;So;0;ON;;;;;N;;;;; 1D234;GREEK INSTRUMENTAL NOTATION SYMBOL-38;So;0;ON;;;;;N;;;;; 1D235;GREEK INSTRUMENTAL NOTATION SYMBOL-39;So;0;ON;;;;;N;;;;; 1D236;GREEK INSTRUMENTAL NOTATION SYMBOL-40;So;0;ON;;;;;N;;;;; 1D237;GREEK INSTRUMENTAL NOTATION SYMBOL-42;So;0;ON;;;;;N;;;;; 1D238;GREEK INSTRUMENTAL NOTATION SYMBOL-43;So;0;ON;;;;;N;;;;; 1D239;GREEK INSTRUMENTAL NOTATION SYMBOL-45;So;0;ON;;;;;N;;;;; 1D23A;GREEK INSTRUMENTAL NOTATION SYMBOL-47;So;0;ON;;;;;N;;;;; 1D23B;GREEK INSTRUMENTAL NOTATION SYMBOL-48;So;0;ON;;;;;N;;;;; 1D23C;GREEK INSTRUMENTAL NOTATION SYMBOL-49;So;0;ON;;;;;N;;;;; 1D23D;GREEK INSTRUMENTAL NOTATION SYMBOL-50;So;0;ON;;;;;N;;;;; 1D23E;GREEK INSTRUMENTAL NOTATION SYMBOL-51;So;0;ON;;;;;N;;;;; 1D23F;GREEK INSTRUMENTAL NOTATION SYMBOL-52;So;0;ON;;;;;N;;;;; 1D240;GREEK INSTRUMENTAL NOTATION SYMBOL-53;So;0;ON;;;;;N;;;;; 1D241;GREEK INSTRUMENTAL NOTATION SYMBOL-54;So;0;ON;;;;;N;;;;; 1D242;COMBINING GREEK MUSICAL TRISEME;Mn;230;NSM;;;;;N;;;;; 1D243;COMBINING GREEK MUSICAL TETRASEME;Mn;230;NSM;;;;;N;;;;; 1D244;COMBINING GREEK MUSICAL PENTASEME;Mn;230;NSM;;;;;N;;;;; 1D245;GREEK MUSICAL LEIMMA;So;0;ON;;;;;N;;;;; 1D2E0;MAYAN NUMERAL ZERO;No;0;L;;;;0;N;;;;; 1D2E1;MAYAN NUMERAL ONE;No;0;L;;;;1;N;;;;; 1D2E2;MAYAN NUMERAL TWO;No;0;L;;;;2;N;;;;; 1D2E3;MAYAN NUMERAL THREE;No;0;L;;;;3;N;;;;; 1D2E4;MAYAN NUMERAL FOUR;No;0;L;;;;4;N;;;;; 1D2E5;MAYAN NUMERAL FIVE;No;0;L;;;;5;N;;;;; 1D2E6;MAYAN NUMERAL SIX;No;0;L;;;;6;N;;;;; 1D2E7;MAYAN NUMERAL SEVEN;No;0;L;;;;7;N;;;;; 1D2E8;MAYAN NUMERAL EIGHT;No;0;L;;;;8;N;;;;; 1D2E9;MAYAN NUMERAL NINE;No;0;L;;;;9;N;;;;; 1D2EA;MAYAN NUMERAL TEN;No;0;L;;;;10;N;;;;; 1D2EB;MAYAN NUMERAL ELEVEN;No;0;L;;;;11;N;;;;; 1D2EC;MAYAN NUMERAL TWELVE;No;0;L;;;;12;N;;;;; 1D2ED;MAYAN NUMERAL THIRTEEN;No;0;L;;;;13;N;;;;; 1D2EE;MAYAN NUMERAL FOURTEEN;No;0;L;;;;14;N;;;;; 1D2EF;MAYAN NUMERAL FIFTEEN;No;0;L;;;;15;N;;;;; 1D2F0;MAYAN NUMERAL SIXTEEN;No;0;L;;;;16;N;;;;; 1D2F1;MAYAN NUMERAL SEVENTEEN;No;0;L;;;;17;N;;;;; 1D2F2;MAYAN NUMERAL EIGHTEEN;No;0;L;;;;18;N;;;;; 1D2F3;MAYAN NUMERAL NINETEEN;No;0;L;;;;19;N;;;;; 1D300;MONOGRAM FOR EARTH;So;0;ON;;;;;N;;;;; 1D301;DIGRAM FOR HEAVENLY EARTH;So;0;ON;;;;;N;;;;; 1D302;DIGRAM FOR HUMAN EARTH;So;0;ON;;;;;N;;;;; 1D303;DIGRAM FOR EARTHLY HEAVEN;So;0;ON;;;;;N;;;;; 1D304;DIGRAM FOR EARTHLY HUMAN;So;0;ON;;;;;N;;;;; 1D305;DIGRAM FOR EARTH;So;0;ON;;;;;N;;;;; 1D306;TETRAGRAM FOR CENTRE;So;0;ON;;;;;N;;;;; 1D307;TETRAGRAM FOR FULL CIRCLE;So;0;ON;;;;;N;;;;; 1D308;TETRAGRAM FOR MIRED;So;0;ON;;;;;N;;;;; 1D309;TETRAGRAM FOR BARRIER;So;0;ON;;;;;N;;;;; 1D30A;TETRAGRAM FOR KEEPING SMALL;So;0;ON;;;;;N;;;;; 1D30B;TETRAGRAM FOR CONTRARIETY;So;0;ON;;;;;N;;;;; 1D30C;TETRAGRAM FOR ASCENT;So;0;ON;;;;;N;;;;; 1D30D;TETRAGRAM FOR OPPOSITION;So;0;ON;;;;;N;;;;; 1D30E;TETRAGRAM FOR BRANCHING OUT;So;0;ON;;;;;N;;;;; 1D30F;TETRAGRAM FOR DEFECTIVENESS OR DISTORTION;So;0;ON;;;;;N;;;;; 1D310;TETRAGRAM FOR DIVERGENCE;So;0;ON;;;;;N;;;;; 1D311;TETRAGRAM FOR YOUTHFULNESS;So;0;ON;;;;;N;;;;; 1D312;TETRAGRAM FOR INCREASE;So;0;ON;;;;;N;;;;; 1D313;TETRAGRAM FOR PENETRATION;So;0;ON;;;;;N;;;;; 1D314;TETRAGRAM FOR REACH;So;0;ON;;;;;N;;;;; 1D315;TETRAGRAM FOR CONTACT;So;0;ON;;;;;N;;;;; 1D316;TETRAGRAM FOR HOLDING BACK;So;0;ON;;;;;N;;;;; 1D317;TETRAGRAM FOR WAITING;So;0;ON;;;;;N;;;;; 1D318;TETRAGRAM FOR FOLLOWING;So;0;ON;;;;;N;;;;; 1D319;TETRAGRAM FOR ADVANCE;So;0;ON;;;;;N;;;;; 1D31A;TETRAGRAM FOR RELEASE;So;0;ON;;;;;N;;;;; 1D31B;TETRAGRAM FOR RESISTANCE;So;0;ON;;;;;N;;;;; 1D31C;TETRAGRAM FOR EASE;So;0;ON;;;;;N;;;;; 1D31D;TETRAGRAM FOR JOY;So;0;ON;;;;;N;;;;; 1D31E;TETRAGRAM FOR CONTENTION;So;0;ON;;;;;N;;;;; 1D31F;TETRAGRAM FOR ENDEAVOUR;So;0;ON;;;;;N;;;;; 1D320;TETRAGRAM FOR DUTIES;So;0;ON;;;;;N;;;;; 1D321;TETRAGRAM FOR CHANGE;So;0;ON;;;;;N;;;;; 1D322;TETRAGRAM FOR DECISIVENESS;So;0;ON;;;;;N;;;;; 1D323;TETRAGRAM FOR BOLD RESOLUTION;So;0;ON;;;;;N;;;;; 1D324;TETRAGRAM FOR PACKING;So;0;ON;;;;;N;;;;; 1D325;TETRAGRAM FOR LEGION;So;0;ON;;;;;N;;;;; 1D326;TETRAGRAM FOR CLOSENESS;So;0;ON;;;;;N;;;;; 1D327;TETRAGRAM FOR KINSHIP;So;0;ON;;;;;N;;;;; 1D328;TETRAGRAM FOR GATHERING;So;0;ON;;;;;N;;;;; 1D329;TETRAGRAM FOR STRENGTH;So;0;ON;;;;;N;;;;; 1D32A;TETRAGRAM FOR PURITY;So;0;ON;;;;;N;;;;; 1D32B;TETRAGRAM FOR FULLNESS;So;0;ON;;;;;N;;;;; 1D32C;TETRAGRAM FOR RESIDENCE;So;0;ON;;;;;N;;;;; 1D32D;TETRAGRAM FOR LAW OR MODEL;So;0;ON;;;;;N;;;;; 1D32E;TETRAGRAM FOR RESPONSE;So;0;ON;;;;;N;;;;; 1D32F;TETRAGRAM FOR GOING TO MEET;So;0;ON;;;;;N;;;;; 1D330;TETRAGRAM FOR ENCOUNTERS;So;0;ON;;;;;N;;;;; 1D331;TETRAGRAM FOR STOVE;So;0;ON;;;;;N;;;;; 1D332;TETRAGRAM FOR GREATNESS;So;0;ON;;;;;N;;;;; 1D333;TETRAGRAM FOR ENLARGEMENT;So;0;ON;;;;;N;;;;; 1D334;TETRAGRAM FOR PATTERN;So;0;ON;;;;;N;;;;; 1D335;TETRAGRAM FOR RITUAL;So;0;ON;;;;;N;;;;; 1D336;TETRAGRAM FOR FLIGHT;So;0;ON;;;;;N;;;;; 1D337;TETRAGRAM FOR VASTNESS OR WASTING;So;0;ON;;;;;N;;;;; 1D338;TETRAGRAM FOR CONSTANCY;So;0;ON;;;;;N;;;;; 1D339;TETRAGRAM FOR MEASURE;So;0;ON;;;;;N;;;;; 1D33A;TETRAGRAM FOR ETERNITY;So;0;ON;;;;;N;;;;; 1D33B;TETRAGRAM FOR UNITY;So;0;ON;;;;;N;;;;; 1D33C;TETRAGRAM FOR DIMINISHMENT;So;0;ON;;;;;N;;;;; 1D33D;TETRAGRAM FOR CLOSED MOUTH;So;0;ON;;;;;N;;;;; 1D33E;TETRAGRAM FOR GUARDEDNESS;So;0;ON;;;;;N;;;;; 1D33F;TETRAGRAM FOR GATHERING IN;So;0;ON;;;;;N;;;;; 1D340;TETRAGRAM FOR MASSING;So;0;ON;;;;;N;;;;; 1D341;TETRAGRAM FOR ACCUMULATION;So;0;ON;;;;;N;;;;; 1D342;TETRAGRAM FOR EMBELLISHMENT;So;0;ON;;;;;N;;;;; 1D343;TETRAGRAM FOR DOUBT;So;0;ON;;;;;N;;;;; 1D344;TETRAGRAM FOR WATCH;So;0;ON;;;;;N;;;;; 1D345;TETRAGRAM FOR SINKING;So;0;ON;;;;;N;;;;; 1D346;TETRAGRAM FOR INNER;So;0;ON;;;;;N;;;;; 1D347;TETRAGRAM FOR DEPARTURE;So;0;ON;;;;;N;;;;; 1D348;TETRAGRAM FOR DARKENING;So;0;ON;;;;;N;;;;; 1D349;TETRAGRAM FOR DIMMING;So;0;ON;;;;;N;;;;; 1D34A;TETRAGRAM FOR EXHAUSTION;So;0;ON;;;;;N;;;;; 1D34B;TETRAGRAM FOR SEVERANCE;So;0;ON;;;;;N;;;;; 1D34C;TETRAGRAM FOR STOPPAGE;So;0;ON;;;;;N;;;;; 1D34D;TETRAGRAM FOR HARDNESS;So;0;ON;;;;;N;;;;; 1D34E;TETRAGRAM FOR COMPLETION;So;0;ON;;;;;N;;;;; 1D34F;TETRAGRAM FOR CLOSURE;So;0;ON;;;;;N;;;;; 1D350;TETRAGRAM FOR FAILURE;So;0;ON;;;;;N;;;;; 1D351;TETRAGRAM FOR AGGRAVATION;So;0;ON;;;;;N;;;;; 1D352;TETRAGRAM FOR COMPLIANCE;So;0;ON;;;;;N;;;;; 1D353;TETRAGRAM FOR ON THE VERGE;So;0;ON;;;;;N;;;;; 1D354;TETRAGRAM FOR DIFFICULTIES;So;0;ON;;;;;N;;;;; 1D355;TETRAGRAM FOR LABOURING;So;0;ON;;;;;N;;;;; 1D356;TETRAGRAM FOR FOSTERING;So;0;ON;;;;;N;;;;; 1D360;COUNTING ROD UNIT DIGIT ONE;No;0;L;;;;1;N;;;;; 1D361;COUNTING ROD UNIT DIGIT TWO;No;0;L;;;;2;N;;;;; 1D362;COUNTING ROD UNIT DIGIT THREE;No;0;L;;;;3;N;;;;; 1D363;COUNTING ROD UNIT DIGIT FOUR;No;0;L;;;;4;N;;;;; 1D364;COUNTING ROD UNIT DIGIT FIVE;No;0;L;;;;5;N;;;;; 1D365;COUNTING ROD UNIT DIGIT SIX;No;0;L;;;;6;N;;;;; 1D366;COUNTING ROD UNIT DIGIT SEVEN;No;0;L;;;;7;N;;;;; 1D367;COUNTING ROD UNIT DIGIT EIGHT;No;0;L;;;;8;N;;;;; 1D368;COUNTING ROD UNIT DIGIT NINE;No;0;L;;;;9;N;;;;; 1D369;COUNTING ROD TENS DIGIT ONE;No;0;L;;;;10;N;;;;; 1D36A;COUNTING ROD TENS DIGIT TWO;No;0;L;;;;20;N;;;;; 1D36B;COUNTING ROD TENS DIGIT THREE;No;0;L;;;;30;N;;;;; 1D36C;COUNTING ROD TENS DIGIT FOUR;No;0;L;;;;40;N;;;;; 1D36D;COUNTING ROD TENS DIGIT FIVE;No;0;L;;;;50;N;;;;; 1D36E;COUNTING ROD TENS DIGIT SIX;No;0;L;;;;60;N;;;;; 1D36F;COUNTING ROD TENS DIGIT SEVEN;No;0;L;;;;70;N;;;;; 1D370;COUNTING ROD TENS DIGIT EIGHT;No;0;L;;;;80;N;;;;; 1D371;COUNTING ROD TENS DIGIT NINE;No;0;L;;;;90;N;;;;; 1D372;IDEOGRAPHIC TALLY MARK ONE;No;0;L;;;;1;N;;;;; 1D373;IDEOGRAPHIC TALLY MARK TWO;No;0;L;;;;2;N;;;;; 1D374;IDEOGRAPHIC TALLY MARK THREE;No;0;L;;;;3;N;;;;; 1D375;IDEOGRAPHIC TALLY MARK FOUR;No;0;L;;;;4;N;;;;; 1D376;IDEOGRAPHIC TALLY MARK FIVE;No;0;L;;;;5;N;;;;; 1D377;TALLY MARK ONE;No;0;L;;;;1;N;;;;; 1D378;TALLY MARK FIVE;No;0;L;;;;5;N;;;;; 1D400;MATHEMATICAL BOLD CAPITAL A;Lu;0;L; 0041;;;;N;;;;; 1D401;MATHEMATICAL BOLD CAPITAL B;Lu;0;L; 0042;;;;N;;;;; 1D402;MATHEMATICAL BOLD CAPITAL C;Lu;0;L; 0043;;;;N;;;;; 1D403;MATHEMATICAL BOLD CAPITAL D;Lu;0;L; 0044;;;;N;;;;; 1D404;MATHEMATICAL BOLD CAPITAL E;Lu;0;L; 0045;;;;N;;;;; 1D405;MATHEMATICAL BOLD CAPITAL F;Lu;0;L; 0046;;;;N;;;;; 1D406;MATHEMATICAL BOLD CAPITAL G;Lu;0;L; 0047;;;;N;;;;; 1D407;MATHEMATICAL BOLD CAPITAL H;Lu;0;L; 0048;;;;N;;;;; 1D408;MATHEMATICAL BOLD CAPITAL I;Lu;0;L; 0049;;;;N;;;;; 1D409;MATHEMATICAL BOLD CAPITAL J;Lu;0;L; 004A;;;;N;;;;; 1D40A;MATHEMATICAL BOLD CAPITAL K;Lu;0;L; 004B;;;;N;;;;; 1D40B;MATHEMATICAL BOLD CAPITAL L;Lu;0;L; 004C;;;;N;;;;; 1D40C;MATHEMATICAL BOLD CAPITAL M;Lu;0;L; 004D;;;;N;;;;; 1D40D;MATHEMATICAL BOLD CAPITAL N;Lu;0;L; 004E;;;;N;;;;; 1D40E;MATHEMATICAL BOLD CAPITAL O;Lu;0;L; 004F;;;;N;;;;; 1D40F;MATHEMATICAL BOLD CAPITAL P;Lu;0;L; 0050;;;;N;;;;; 1D410;MATHEMATICAL BOLD CAPITAL Q;Lu;0;L; 0051;;;;N;;;;; 1D411;MATHEMATICAL BOLD CAPITAL R;Lu;0;L; 0052;;;;N;;;;; 1D412;MATHEMATICAL BOLD CAPITAL S;Lu;0;L; 0053;;;;N;;;;; 1D413;MATHEMATICAL BOLD CAPITAL T;Lu;0;L; 0054;;;;N;;;;; 1D414;MATHEMATICAL BOLD CAPITAL U;Lu;0;L; 0055;;;;N;;;;; 1D415;MATHEMATICAL BOLD CAPITAL V;Lu;0;L; 0056;;;;N;;;;; 1D416;MATHEMATICAL BOLD CAPITAL W;Lu;0;L; 0057;;;;N;;;;; 1D417;MATHEMATICAL BOLD CAPITAL X;Lu;0;L; 0058;;;;N;;;;; 1D418;MATHEMATICAL BOLD CAPITAL Y;Lu;0;L; 0059;;;;N;;;;; 1D419;MATHEMATICAL BOLD CAPITAL Z;Lu;0;L; 005A;;;;N;;;;; 1D41A;MATHEMATICAL BOLD SMALL A;Ll;0;L; 0061;;;;N;;;;; 1D41B;MATHEMATICAL BOLD SMALL B;Ll;0;L; 0062;;;;N;;;;; 1D41C;MATHEMATICAL BOLD SMALL C;Ll;0;L; 0063;;;;N;;;;; 1D41D;MATHEMATICAL BOLD SMALL D;Ll;0;L; 0064;;;;N;;;;; 1D41E;MATHEMATICAL BOLD SMALL E;Ll;0;L; 0065;;;;N;;;;; 1D41F;MATHEMATICAL BOLD SMALL F;Ll;0;L; 0066;;;;N;;;;; 1D420;MATHEMATICAL BOLD SMALL G;Ll;0;L; 0067;;;;N;;;;; 1D421;MATHEMATICAL BOLD SMALL H;Ll;0;L; 0068;;;;N;;;;; 1D422;MATHEMATICAL BOLD SMALL I;Ll;0;L; 0069;;;;N;;;;; 1D423;MATHEMATICAL BOLD SMALL J;Ll;0;L; 006A;;;;N;;;;; 1D424;MATHEMATICAL BOLD SMALL K;Ll;0;L; 006B;;;;N;;;;; 1D425;MATHEMATICAL BOLD SMALL L;Ll;0;L; 006C;;;;N;;;;; 1D426;MATHEMATICAL BOLD SMALL M;Ll;0;L; 006D;;;;N;;;;; 1D427;MATHEMATICAL BOLD SMALL N;Ll;0;L; 006E;;;;N;;;;; 1D428;MATHEMATICAL BOLD SMALL O;Ll;0;L; 006F;;;;N;;;;; 1D429;MATHEMATICAL BOLD SMALL P;Ll;0;L; 0070;;;;N;;;;; 1D42A;MATHEMATICAL BOLD SMALL Q;Ll;0;L; 0071;;;;N;;;;; 1D42B;MATHEMATICAL BOLD SMALL R;Ll;0;L; 0072;;;;N;;;;; 1D42C;MATHEMATICAL BOLD SMALL S;Ll;0;L; 0073;;;;N;;;;; 1D42D;MATHEMATICAL BOLD SMALL T;Ll;0;L; 0074;;;;N;;;;; 1D42E;MATHEMATICAL BOLD SMALL U;Ll;0;L; 0075;;;;N;;;;; 1D42F;MATHEMATICAL BOLD SMALL V;Ll;0;L; 0076;;;;N;;;;; 1D430;MATHEMATICAL BOLD SMALL W;Ll;0;L; 0077;;;;N;;;;; 1D431;MATHEMATICAL BOLD SMALL X;Ll;0;L; 0078;;;;N;;;;; 1D432;MATHEMATICAL BOLD SMALL Y;Ll;0;L; 0079;;;;N;;;;; 1D433;MATHEMATICAL BOLD SMALL Z;Ll;0;L; 007A;;;;N;;;;; 1D434;MATHEMATICAL ITALIC CAPITAL A;Lu;0;L; 0041;;;;N;;;;; 1D435;MATHEMATICAL ITALIC CAPITAL B;Lu;0;L; 0042;;;;N;;;;; 1D436;MATHEMATICAL ITALIC CAPITAL C;Lu;0;L; 0043;;;;N;;;;; 1D437;MATHEMATICAL ITALIC CAPITAL D;Lu;0;L; 0044;;;;N;;;;; 1D438;MATHEMATICAL ITALIC CAPITAL E;Lu;0;L; 0045;;;;N;;;;; 1D439;MATHEMATICAL ITALIC CAPITAL F;Lu;0;L; 0046;;;;N;;;;; 1D43A;MATHEMATICAL ITALIC CAPITAL G;Lu;0;L; 0047;;;;N;;;;; 1D43B;MATHEMATICAL ITALIC CAPITAL H;Lu;0;L; 0048;;;;N;;;;; 1D43C;MATHEMATICAL ITALIC CAPITAL I;Lu;0;L; 0049;;;;N;;;;; 1D43D;MATHEMATICAL ITALIC CAPITAL J;Lu;0;L; 004A;;;;N;;;;; 1D43E;MATHEMATICAL ITALIC CAPITAL K;Lu;0;L; 004B;;;;N;;;;; 1D43F;MATHEMATICAL ITALIC CAPITAL L;Lu;0;L; 004C;;;;N;;;;; 1D440;MATHEMATICAL ITALIC CAPITAL M;Lu;0;L; 004D;;;;N;;;;; 1D441;MATHEMATICAL ITALIC CAPITAL N;Lu;0;L; 004E;;;;N;;;;; 1D442;MATHEMATICAL ITALIC CAPITAL O;Lu;0;L; 004F;;;;N;;;;; 1D443;MATHEMATICAL ITALIC CAPITAL P;Lu;0;L; 0050;;;;N;;;;; 1D444;MATHEMATICAL ITALIC CAPITAL Q;Lu;0;L; 0051;;;;N;;;;; 1D445;MATHEMATICAL ITALIC CAPITAL R;Lu;0;L; 0052;;;;N;;;;; 1D446;MATHEMATICAL ITALIC CAPITAL S;Lu;0;L; 0053;;;;N;;;;; 1D447;MATHEMATICAL ITALIC CAPITAL T;Lu;0;L; 0054;;;;N;;;;; 1D448;MATHEMATICAL ITALIC CAPITAL U;Lu;0;L; 0055;;;;N;;;;; 1D449;MATHEMATICAL ITALIC CAPITAL V;Lu;0;L; 0056;;;;N;;;;; 1D44A;MATHEMATICAL ITALIC CAPITAL W;Lu;0;L; 0057;;;;N;;;;; 1D44B;MATHEMATICAL ITALIC CAPITAL X;Lu;0;L; 0058;;;;N;;;;; 1D44C;MATHEMATICAL ITALIC CAPITAL Y;Lu;0;L; 0059;;;;N;;;;; 1D44D;MATHEMATICAL ITALIC CAPITAL Z;Lu;0;L; 005A;;;;N;;;;; 1D44E;MATHEMATICAL ITALIC SMALL A;Ll;0;L; 0061;;;;N;;;;; 1D44F;MATHEMATICAL ITALIC SMALL B;Ll;0;L; 0062;;;;N;;;;; 1D450;MATHEMATICAL ITALIC SMALL C;Ll;0;L; 0063;;;;N;;;;; 1D451;MATHEMATICAL ITALIC SMALL D;Ll;0;L; 0064;;;;N;;;;; 1D452;MATHEMATICAL ITALIC SMALL E;Ll;0;L; 0065;;;;N;;;;; 1D453;MATHEMATICAL ITALIC SMALL F;Ll;0;L; 0066;;;;N;;;;; 1D454;MATHEMATICAL ITALIC SMALL G;Ll;0;L; 0067;;;;N;;;;; 1D456;MATHEMATICAL ITALIC SMALL I;Ll;0;L; 0069;;;;N;;;;; 1D457;MATHEMATICAL ITALIC SMALL J;Ll;0;L; 006A;;;;N;;;;; 1D458;MATHEMATICAL ITALIC SMALL K;Ll;0;L; 006B;;;;N;;;;; 1D459;MATHEMATICAL ITALIC SMALL L;Ll;0;L; 006C;;;;N;;;;; 1D45A;MATHEMATICAL ITALIC SMALL M;Ll;0;L; 006D;;;;N;;;;; 1D45B;MATHEMATICAL ITALIC SMALL N;Ll;0;L; 006E;;;;N;;;;; 1D45C;MATHEMATICAL ITALIC SMALL O;Ll;0;L; 006F;;;;N;;;;; 1D45D;MATHEMATICAL ITALIC SMALL P;Ll;0;L; 0070;;;;N;;;;; 1D45E;MATHEMATICAL ITALIC SMALL Q;Ll;0;L; 0071;;;;N;;;;; 1D45F;MATHEMATICAL ITALIC SMALL R;Ll;0;L; 0072;;;;N;;;;; 1D460;MATHEMATICAL ITALIC SMALL S;Ll;0;L; 0073;;;;N;;;;; 1D461;MATHEMATICAL ITALIC SMALL T;Ll;0;L; 0074;;;;N;;;;; 1D462;MATHEMATICAL ITALIC SMALL U;Ll;0;L; 0075;;;;N;;;;; 1D463;MATHEMATICAL ITALIC SMALL V;Ll;0;L; 0076;;;;N;;;;; 1D464;MATHEMATICAL ITALIC SMALL W;Ll;0;L; 0077;;;;N;;;;; 1D465;MATHEMATICAL ITALIC SMALL X;Ll;0;L; 0078;;;;N;;;;; 1D466;MATHEMATICAL ITALIC SMALL Y;Ll;0;L; 0079;;;;N;;;;; 1D467;MATHEMATICAL ITALIC SMALL Z;Ll;0;L; 007A;;;;N;;;;; 1D468;MATHEMATICAL BOLD ITALIC CAPITAL A;Lu;0;L; 0041;;;;N;;;;; 1D469;MATHEMATICAL BOLD ITALIC CAPITAL B;Lu;0;L; 0042;;;;N;;;;; 1D46A;MATHEMATICAL BOLD ITALIC CAPITAL C;Lu;0;L; 0043;;;;N;;;;; 1D46B;MATHEMATICAL BOLD ITALIC CAPITAL D;Lu;0;L; 0044;;;;N;;;;; 1D46C;MATHEMATICAL BOLD ITALIC CAPITAL E;Lu;0;L; 0045;;;;N;;;;; 1D46D;MATHEMATICAL BOLD ITALIC CAPITAL F;Lu;0;L; 0046;;;;N;;;;; 1D46E;MATHEMATICAL BOLD ITALIC CAPITAL G;Lu;0;L; 0047;;;;N;;;;; 1D46F;MATHEMATICAL BOLD ITALIC CAPITAL H;Lu;0;L; 0048;;;;N;;;;; 1D470;MATHEMATICAL BOLD ITALIC CAPITAL I;Lu;0;L; 0049;;;;N;;;;; 1D471;MATHEMATICAL BOLD ITALIC CAPITAL J;Lu;0;L; 004A;;;;N;;;;; 1D472;MATHEMATICAL BOLD ITALIC CAPITAL K;Lu;0;L; 004B;;;;N;;;;; 1D473;MATHEMATICAL BOLD ITALIC CAPITAL L;Lu;0;L; 004C;;;;N;;;;; 1D474;MATHEMATICAL BOLD ITALIC CAPITAL M;Lu;0;L; 004D;;;;N;;;;; 1D475;MATHEMATICAL BOLD ITALIC CAPITAL N;Lu;0;L; 004E;;;;N;;;;; 1D476;MATHEMATICAL BOLD ITALIC CAPITAL O;Lu;0;L; 004F;;;;N;;;;; 1D477;MATHEMATICAL BOLD ITALIC CAPITAL P;Lu;0;L; 0050;;;;N;;;;; 1D478;MATHEMATICAL BOLD ITALIC CAPITAL Q;Lu;0;L; 0051;;;;N;;;;; 1D479;MATHEMATICAL BOLD ITALIC CAPITAL R;Lu;0;L; 0052;;;;N;;;;; 1D47A;MATHEMATICAL BOLD ITALIC CAPITAL S;Lu;0;L; 0053;;;;N;;;;; 1D47B;MATHEMATICAL BOLD ITALIC CAPITAL T;Lu;0;L; 0054;;;;N;;;;; 1D47C;MATHEMATICAL BOLD ITALIC CAPITAL U;Lu;0;L; 0055;;;;N;;;;; 1D47D;MATHEMATICAL BOLD ITALIC CAPITAL V;Lu;0;L; 0056;;;;N;;;;; 1D47E;MATHEMATICAL BOLD ITALIC CAPITAL W;Lu;0;L; 0057;;;;N;;;;; 1D47F;MATHEMATICAL BOLD ITALIC CAPITAL X;Lu;0;L; 0058;;;;N;;;;; 1D480;MATHEMATICAL BOLD ITALIC CAPITAL Y;Lu;0;L; 0059;;;;N;;;;; 1D481;MATHEMATICAL BOLD ITALIC CAPITAL Z;Lu;0;L; 005A;;;;N;;;;; 1D482;MATHEMATICAL BOLD ITALIC SMALL A;Ll;0;L; 0061;;;;N;;;;; 1D483;MATHEMATICAL BOLD ITALIC SMALL B;Ll;0;L; 0062;;;;N;;;;; 1D484;MATHEMATICAL BOLD ITALIC SMALL C;Ll;0;L; 0063;;;;N;;;;; 1D485;MATHEMATICAL BOLD ITALIC SMALL D;Ll;0;L; 0064;;;;N;;;;; 1D486;MATHEMATICAL BOLD ITALIC SMALL E;Ll;0;L; 0065;;;;N;;;;; 1D487;MATHEMATICAL BOLD ITALIC SMALL F;Ll;0;L; 0066;;;;N;;;;; 1D488;MATHEMATICAL BOLD ITALIC SMALL G;Ll;0;L; 0067;;;;N;;;;; 1D489;MATHEMATICAL BOLD ITALIC SMALL H;Ll;0;L; 0068;;;;N;;;;; 1D48A;MATHEMATICAL BOLD ITALIC SMALL I;Ll;0;L; 0069;;;;N;;;;; 1D48B;MATHEMATICAL BOLD ITALIC SMALL J;Ll;0;L; 006A;;;;N;;;;; 1D48C;MATHEMATICAL BOLD ITALIC SMALL K;Ll;0;L; 006B;;;;N;;;;; 1D48D;MATHEMATICAL BOLD ITALIC SMALL L;Ll;0;L; 006C;;;;N;;;;; 1D48E;MATHEMATICAL BOLD ITALIC SMALL M;Ll;0;L; 006D;;;;N;;;;; 1D48F;MATHEMATICAL BOLD ITALIC SMALL N;Ll;0;L; 006E;;;;N;;;;; 1D490;MATHEMATICAL BOLD ITALIC SMALL O;Ll;0;L; 006F;;;;N;;;;; 1D491;MATHEMATICAL BOLD ITALIC SMALL P;Ll;0;L; 0070;;;;N;;;;; 1D492;MATHEMATICAL BOLD ITALIC SMALL Q;Ll;0;L; 0071;;;;N;;;;; 1D493;MATHEMATICAL BOLD ITALIC SMALL R;Ll;0;L; 0072;;;;N;;;;; 1D494;MATHEMATICAL BOLD ITALIC SMALL S;Ll;0;L; 0073;;;;N;;;;; 1D495;MATHEMATICAL BOLD ITALIC SMALL T;Ll;0;L; 0074;;;;N;;;;; 1D496;MATHEMATICAL BOLD ITALIC SMALL U;Ll;0;L; 0075;;;;N;;;;; 1D497;MATHEMATICAL BOLD ITALIC SMALL V;Ll;0;L; 0076;;;;N;;;;; 1D498;MATHEMATICAL BOLD ITALIC SMALL W;Ll;0;L; 0077;;;;N;;;;; 1D499;MATHEMATICAL BOLD ITALIC SMALL X;Ll;0;L; 0078;;;;N;;;;; 1D49A;MATHEMATICAL BOLD ITALIC SMALL Y;Ll;0;L; 0079;;;;N;;;;; 1D49B;MATHEMATICAL BOLD ITALIC SMALL Z;Ll;0;L; 007A;;;;N;;;;; 1D49C;MATHEMATICAL SCRIPT CAPITAL A;Lu;0;L; 0041;;;;N;;;;; 1D49E;MATHEMATICAL SCRIPT CAPITAL C;Lu;0;L; 0043;;;;N;;;;; 1D49F;MATHEMATICAL SCRIPT CAPITAL D;Lu;0;L; 0044;;;;N;;;;; 1D4A2;MATHEMATICAL SCRIPT CAPITAL G;Lu;0;L; 0047;;;;N;;;;; 1D4A5;MATHEMATICAL SCRIPT CAPITAL J;Lu;0;L; 004A;;;;N;;;;; 1D4A6;MATHEMATICAL SCRIPT CAPITAL K;Lu;0;L; 004B;;;;N;;;;; 1D4A9;MATHEMATICAL SCRIPT CAPITAL N;Lu;0;L; 004E;;;;N;;;;; 1D4AA;MATHEMATICAL SCRIPT CAPITAL O;Lu;0;L; 004F;;;;N;;;;; 1D4AB;MATHEMATICAL SCRIPT CAPITAL P;Lu;0;L; 0050;;;;N;;;;; 1D4AC;MATHEMATICAL SCRIPT CAPITAL Q;Lu;0;L; 0051;;;;N;;;;; 1D4AE;MATHEMATICAL SCRIPT CAPITAL S;Lu;0;L; 0053;;;;N;;;;; 1D4AF;MATHEMATICAL SCRIPT CAPITAL T;Lu;0;L; 0054;;;;N;;;;; 1D4B0;MATHEMATICAL SCRIPT CAPITAL U;Lu;0;L; 0055;;;;N;;;;; 1D4B1;MATHEMATICAL SCRIPT CAPITAL V;Lu;0;L; 0056;;;;N;;;;; 1D4B2;MATHEMATICAL SCRIPT CAPITAL W;Lu;0;L; 0057;;;;N;;;;; 1D4B3;MATHEMATICAL SCRIPT CAPITAL X;Lu;0;L; 0058;;;;N;;;;; 1D4B4;MATHEMATICAL SCRIPT CAPITAL Y;Lu;0;L; 0059;;;;N;;;;; 1D4B5;MATHEMATICAL SCRIPT CAPITAL Z;Lu;0;L; 005A;;;;N;;;;; 1D4B6;MATHEMATICAL SCRIPT SMALL A;Ll;0;L; 0061;;;;N;;;;; 1D4B7;MATHEMATICAL SCRIPT SMALL B;Ll;0;L; 0062;;;;N;;;;; 1D4B8;MATHEMATICAL SCRIPT SMALL C;Ll;0;L; 0063;;;;N;;;;; 1D4B9;MATHEMATICAL SCRIPT SMALL D;Ll;0;L; 0064;;;;N;;;;; 1D4BB;MATHEMATICAL SCRIPT SMALL F;Ll;0;L; 0066;;;;N;;;;; 1D4BD;MATHEMATICAL SCRIPT SMALL H;Ll;0;L; 0068;;;;N;;;;; 1D4BE;MATHEMATICAL SCRIPT SMALL I;Ll;0;L; 0069;;;;N;;;;; 1D4BF;MATHEMATICAL SCRIPT SMALL J;Ll;0;L; 006A;;;;N;;;;; 1D4C0;MATHEMATICAL SCRIPT SMALL K;Ll;0;L; 006B;;;;N;;;;; 1D4C1;MATHEMATICAL SCRIPT SMALL L;Ll;0;L; 006C;;;;N;;;;; 1D4C2;MATHEMATICAL SCRIPT SMALL M;Ll;0;L; 006D;;;;N;;;;; 1D4C3;MATHEMATICAL SCRIPT SMALL N;Ll;0;L; 006E;;;;N;;;;; 1D4C5;MATHEMATICAL SCRIPT SMALL P;Ll;0;L; 0070;;;;N;;;;; 1D4C6;MATHEMATICAL SCRIPT SMALL Q;Ll;0;L; 0071;;;;N;;;;; 1D4C7;MATHEMATICAL SCRIPT SMALL R;Ll;0;L; 0072;;;;N;;;;; 1D4C8;MATHEMATICAL SCRIPT SMALL S;Ll;0;L; 0073;;;;N;;;;; 1D4C9;MATHEMATICAL SCRIPT SMALL T;Ll;0;L; 0074;;;;N;;;;; 1D4CA;MATHEMATICAL SCRIPT SMALL U;Ll;0;L; 0075;;;;N;;;;; 1D4CB;MATHEMATICAL SCRIPT SMALL V;Ll;0;L; 0076;;;;N;;;;; 1D4CC;MATHEMATICAL SCRIPT SMALL W;Ll;0;L; 0077;;;;N;;;;; 1D4CD;MATHEMATICAL SCRIPT SMALL X;Ll;0;L; 0078;;;;N;;;;; 1D4CE;MATHEMATICAL SCRIPT SMALL Y;Ll;0;L; 0079;;;;N;;;;; 1D4CF;MATHEMATICAL SCRIPT SMALL Z;Ll;0;L; 007A;;;;N;;;;; 1D4D0;MATHEMATICAL BOLD SCRIPT CAPITAL A;Lu;0;L; 0041;;;;N;;;;; 1D4D1;MATHEMATICAL BOLD SCRIPT CAPITAL B;Lu;0;L; 0042;;;;N;;;;; 1D4D2;MATHEMATICAL BOLD SCRIPT CAPITAL C;Lu;0;L; 0043;;;;N;;;;; 1D4D3;MATHEMATICAL BOLD SCRIPT CAPITAL D;Lu;0;L; 0044;;;;N;;;;; 1D4D4;MATHEMATICAL BOLD SCRIPT CAPITAL E;Lu;0;L; 0045;;;;N;;;;; 1D4D5;MATHEMATICAL BOLD SCRIPT CAPITAL F;Lu;0;L; 0046;;;;N;;;;; 1D4D6;MATHEMATICAL BOLD SCRIPT CAPITAL G;Lu;0;L; 0047;;;;N;;;;; 1D4D7;MATHEMATICAL BOLD SCRIPT CAPITAL H;Lu;0;L; 0048;;;;N;;;;; 1D4D8;MATHEMATICAL BOLD SCRIPT CAPITAL I;Lu;0;L; 0049;;;;N;;;;; 1D4D9;MATHEMATICAL BOLD SCRIPT CAPITAL J;Lu;0;L; 004A;;;;N;;;;; 1D4DA;MATHEMATICAL BOLD SCRIPT CAPITAL K;Lu;0;L; 004B;;;;N;;;;; 1D4DB;MATHEMATICAL BOLD SCRIPT CAPITAL L;Lu;0;L; 004C;;;;N;;;;; 1D4DC;MATHEMATICAL BOLD SCRIPT CAPITAL M;Lu;0;L; 004D;;;;N;;;;; 1D4DD;MATHEMATICAL BOLD SCRIPT CAPITAL N;Lu;0;L; 004E;;;;N;;;;; 1D4DE;MATHEMATICAL BOLD SCRIPT CAPITAL O;Lu;0;L; 004F;;;;N;;;;; 1D4DF;MATHEMATICAL BOLD SCRIPT CAPITAL P;Lu;0;L; 0050;;;;N;;;;; 1D4E0;MATHEMATICAL BOLD SCRIPT CAPITAL Q;Lu;0;L; 0051;;;;N;;;;; 1D4E1;MATHEMATICAL BOLD SCRIPT CAPITAL R;Lu;0;L; 0052;;;;N;;;;; 1D4E2;MATHEMATICAL BOLD SCRIPT CAPITAL S;Lu;0;L; 0053;;;;N;;;;; 1D4E3;MATHEMATICAL BOLD SCRIPT CAPITAL T;Lu;0;L; 0054;;;;N;;;;; 1D4E4;MATHEMATICAL BOLD SCRIPT CAPITAL U;Lu;0;L; 0055;;;;N;;;;; 1D4E5;MATHEMATICAL BOLD SCRIPT CAPITAL V;Lu;0;L; 0056;;;;N;;;;; 1D4E6;MATHEMATICAL BOLD SCRIPT CAPITAL W;Lu;0;L; 0057;;;;N;;;;; 1D4E7;MATHEMATICAL BOLD SCRIPT CAPITAL X;Lu;0;L; 0058;;;;N;;;;; 1D4E8;MATHEMATICAL BOLD SCRIPT CAPITAL Y;Lu;0;L; 0059;;;;N;;;;; 1D4E9;MATHEMATICAL BOLD SCRIPT CAPITAL Z;Lu;0;L; 005A;;;;N;;;;; 1D4EA;MATHEMATICAL BOLD SCRIPT SMALL A;Ll;0;L; 0061;;;;N;;;;; 1D4EB;MATHEMATICAL BOLD SCRIPT SMALL B;Ll;0;L; 0062;;;;N;;;;; 1D4EC;MATHEMATICAL BOLD SCRIPT SMALL C;Ll;0;L; 0063;;;;N;;;;; 1D4ED;MATHEMATICAL BOLD SCRIPT SMALL D;Ll;0;L; 0064;;;;N;;;;; 1D4EE;MATHEMATICAL BOLD SCRIPT SMALL E;Ll;0;L; 0065;;;;N;;;;; 1D4EF;MATHEMATICAL BOLD SCRIPT SMALL F;Ll;0;L; 0066;;;;N;;;;; 1D4F0;MATHEMATICAL BOLD SCRIPT SMALL G;Ll;0;L; 0067;;;;N;;;;; 1D4F1;MATHEMATICAL BOLD SCRIPT SMALL H;Ll;0;L; 0068;;;;N;;;;; 1D4F2;MATHEMATICAL BOLD SCRIPT SMALL I;Ll;0;L; 0069;;;;N;;;;; 1D4F3;MATHEMATICAL BOLD SCRIPT SMALL J;Ll;0;L; 006A;;;;N;;;;; 1D4F4;MATHEMATICAL BOLD SCRIPT SMALL K;Ll;0;L; 006B;;;;N;;;;; 1D4F5;MATHEMATICAL BOLD SCRIPT SMALL L;Ll;0;L; 006C;;;;N;;;;; 1D4F6;MATHEMATICAL BOLD SCRIPT SMALL M;Ll;0;L; 006D;;;;N;;;;; 1D4F7;MATHEMATICAL BOLD SCRIPT SMALL N;Ll;0;L; 006E;;;;N;;;;; 1D4F8;MATHEMATICAL BOLD SCRIPT SMALL O;Ll;0;L; 006F;;;;N;;;;; 1D4F9;MATHEMATICAL BOLD SCRIPT SMALL P;Ll;0;L; 0070;;;;N;;;;; 1D4FA;MATHEMATICAL BOLD SCRIPT SMALL Q;Ll;0;L; 0071;;;;N;;;;; 1D4FB;MATHEMATICAL BOLD SCRIPT SMALL R;Ll;0;L; 0072;;;;N;;;;; 1D4FC;MATHEMATICAL BOLD SCRIPT SMALL S;Ll;0;L; 0073;;;;N;;;;; 1D4FD;MATHEMATICAL BOLD SCRIPT SMALL T;Ll;0;L; 0074;;;;N;;;;; 1D4FE;MATHEMATICAL BOLD SCRIPT SMALL U;Ll;0;L; 0075;;;;N;;;;; 1D4FF;MATHEMATICAL BOLD SCRIPT SMALL V;Ll;0;L; 0076;;;;N;;;;; 1D500;MATHEMATICAL BOLD SCRIPT SMALL W;Ll;0;L; 0077;;;;N;;;;; 1D501;MATHEMATICAL BOLD SCRIPT SMALL X;Ll;0;L; 0078;;;;N;;;;; 1D502;MATHEMATICAL BOLD SCRIPT SMALL Y;Ll;0;L; 0079;;;;N;;;;; 1D503;MATHEMATICAL BOLD SCRIPT SMALL Z;Ll;0;L; 007A;;;;N;;;;; 1D504;MATHEMATICAL FRAKTUR CAPITAL A;Lu;0;L; 0041;;;;N;;;;; 1D505;MATHEMATICAL FRAKTUR CAPITAL B;Lu;0;L; 0042;;;;N;;;;; 1D507;MATHEMATICAL FRAKTUR CAPITAL D;Lu;0;L; 0044;;;;N;;;;; 1D508;MATHEMATICAL FRAKTUR CAPITAL E;Lu;0;L; 0045;;;;N;;;;; 1D509;MATHEMATICAL FRAKTUR CAPITAL F;Lu;0;L; 0046;;;;N;;;;; 1D50A;MATHEMATICAL FRAKTUR CAPITAL G;Lu;0;L; 0047;;;;N;;;;; 1D50D;MATHEMATICAL FRAKTUR CAPITAL J;Lu;0;L; 004A;;;;N;;;;; 1D50E;MATHEMATICAL FRAKTUR CAPITAL K;Lu;0;L; 004B;;;;N;;;;; 1D50F;MATHEMATICAL FRAKTUR CAPITAL L;Lu;0;L; 004C;;;;N;;;;; 1D510;MATHEMATICAL FRAKTUR CAPITAL M;Lu;0;L; 004D;;;;N;;;;; 1D511;MATHEMATICAL FRAKTUR CAPITAL N;Lu;0;L; 004E;;;;N;;;;; 1D512;MATHEMATICAL FRAKTUR CAPITAL O;Lu;0;L; 004F;;;;N;;;;; 1D513;MATHEMATICAL FRAKTUR CAPITAL P;Lu;0;L; 0050;;;;N;;;;; 1D514;MATHEMATICAL FRAKTUR CAPITAL Q;Lu;0;L; 0051;;;;N;;;;; 1D516;MATHEMATICAL FRAKTUR CAPITAL S;Lu;0;L; 0053;;;;N;;;;; 1D517;MATHEMATICAL FRAKTUR CAPITAL T;Lu;0;L; 0054;;;;N;;;;; 1D518;MATHEMATICAL FRAKTUR CAPITAL U;Lu;0;L; 0055;;;;N;;;;; 1D519;MATHEMATICAL FRAKTUR CAPITAL V;Lu;0;L; 0056;;;;N;;;;; 1D51A;MATHEMATICAL FRAKTUR CAPITAL W;Lu;0;L; 0057;;;;N;;;;; 1D51B;MATHEMATICAL FRAKTUR CAPITAL X;Lu;0;L; 0058;;;;N;;;;; 1D51C;MATHEMATICAL FRAKTUR CAPITAL Y;Lu;0;L; 0059;;;;N;;;;; 1D51E;MATHEMATICAL FRAKTUR SMALL A;Ll;0;L; 0061;;;;N;;;;; 1D51F;MATHEMATICAL FRAKTUR SMALL B;Ll;0;L; 0062;;;;N;;;;; 1D520;MATHEMATICAL FRAKTUR SMALL C;Ll;0;L; 0063;;;;N;;;;; 1D521;MATHEMATICAL FRAKTUR SMALL D;Ll;0;L; 0064;;;;N;;;;; 1D522;MATHEMATICAL FRAKTUR SMALL E;Ll;0;L; 0065;;;;N;;;;; 1D523;MATHEMATICAL FRAKTUR SMALL F;Ll;0;L; 0066;;;;N;;;;; 1D524;MATHEMATICAL FRAKTUR SMALL G;Ll;0;L; 0067;;;;N;;;;; 1D525;MATHEMATICAL FRAKTUR SMALL H;Ll;0;L; 0068;;;;N;;;;; 1D526;MATHEMATICAL FRAKTUR SMALL I;Ll;0;L; 0069;;;;N;;;;; 1D527;MATHEMATICAL FRAKTUR SMALL J;Ll;0;L; 006A;;;;N;;;;; 1D528;MATHEMATICAL FRAKTUR SMALL K;Ll;0;L; 006B;;;;N;;;;; 1D529;MATHEMATICAL FRAKTUR SMALL L;Ll;0;L; 006C;;;;N;;;;; 1D52A;MATHEMATICAL FRAKTUR SMALL M;Ll;0;L; 006D;;;;N;;;;; 1D52B;MATHEMATICAL FRAKTUR SMALL N;Ll;0;L; 006E;;;;N;;;;; 1D52C;MATHEMATICAL FRAKTUR SMALL O;Ll;0;L; 006F;;;;N;;;;; 1D52D;MATHEMATICAL FRAKTUR SMALL P;Ll;0;L; 0070;;;;N;;;;; 1D52E;MATHEMATICAL FRAKTUR SMALL Q;Ll;0;L; 0071;;;;N;;;;; 1D52F;MATHEMATICAL FRAKTUR SMALL R;Ll;0;L; 0072;;;;N;;;;; 1D530;MATHEMATICAL FRAKTUR SMALL S;Ll;0;L; 0073;;;;N;;;;; 1D531;MATHEMATICAL FRAKTUR SMALL T;Ll;0;L; 0074;;;;N;;;;; 1D532;MATHEMATICAL FRAKTUR SMALL U;Ll;0;L; 0075;;;;N;;;;; 1D533;MATHEMATICAL FRAKTUR SMALL V;Ll;0;L; 0076;;;;N;;;;; 1D534;MATHEMATICAL FRAKTUR SMALL W;Ll;0;L; 0077;;;;N;;;;; 1D535;MATHEMATICAL FRAKTUR SMALL X;Ll;0;L; 0078;;;;N;;;;; 1D536;MATHEMATICAL FRAKTUR SMALL Y;Ll;0;L; 0079;;;;N;;;;; 1D537;MATHEMATICAL FRAKTUR SMALL Z;Ll;0;L; 007A;;;;N;;;;; 1D538;MATHEMATICAL DOUBLE-STRUCK CAPITAL A;Lu;0;L; 0041;;;;N;;;;; 1D539;MATHEMATICAL DOUBLE-STRUCK CAPITAL B;Lu;0;L; 0042;;;;N;;;;; 1D53B;MATHEMATICAL DOUBLE-STRUCK CAPITAL D;Lu;0;L; 0044;;;;N;;;;; 1D53C;MATHEMATICAL DOUBLE-STRUCK CAPITAL E;Lu;0;L; 0045;;;;N;;;;; 1D53D;MATHEMATICAL DOUBLE-STRUCK CAPITAL F;Lu;0;L; 0046;;;;N;;;;; 1D53E;MATHEMATICAL DOUBLE-STRUCK CAPITAL G;Lu;0;L; 0047;;;;N;;;;; 1D540;MATHEMATICAL DOUBLE-STRUCK CAPITAL I;Lu;0;L; 0049;;;;N;;;;; 1D541;MATHEMATICAL DOUBLE-STRUCK CAPITAL J;Lu;0;L; 004A;;;;N;;;;; 1D542;MATHEMATICAL DOUBLE-STRUCK CAPITAL K;Lu;0;L; 004B;;;;N;;;;; 1D543;MATHEMATICAL DOUBLE-STRUCK CAPITAL L;Lu;0;L; 004C;;;;N;;;;; 1D544;MATHEMATICAL DOUBLE-STRUCK CAPITAL M;Lu;0;L; 004D;;;;N;;;;; 1D546;MATHEMATICAL DOUBLE-STRUCK CAPITAL O;Lu;0;L; 004F;;;;N;;;;; 1D54A;MATHEMATICAL DOUBLE-STRUCK CAPITAL S;Lu;0;L; 0053;;;;N;;;;; 1D54B;MATHEMATICAL DOUBLE-STRUCK CAPITAL T;Lu;0;L; 0054;;;;N;;;;; 1D54C;MATHEMATICAL DOUBLE-STRUCK CAPITAL U;Lu;0;L; 0055;;;;N;;;;; 1D54D;MATHEMATICAL DOUBLE-STRUCK CAPITAL V;Lu;0;L; 0056;;;;N;;;;; 1D54E;MATHEMATICAL DOUBLE-STRUCK CAPITAL W;Lu;0;L; 0057;;;;N;;;;; 1D54F;MATHEMATICAL DOUBLE-STRUCK CAPITAL X;Lu;0;L; 0058;;;;N;;;;; 1D550;MATHEMATICAL DOUBLE-STRUCK CAPITAL Y;Lu;0;L; 0059;;;;N;;;;; 1D552;MATHEMATICAL DOUBLE-STRUCK SMALL A;Ll;0;L; 0061;;;;N;;;;; 1D553;MATHEMATICAL DOUBLE-STRUCK SMALL B;Ll;0;L; 0062;;;;N;;;;; 1D554;MATHEMATICAL DOUBLE-STRUCK SMALL C;Ll;0;L; 0063;;;;N;;;;; 1D555;MATHEMATICAL DOUBLE-STRUCK SMALL D;Ll;0;L; 0064;;;;N;;;;; 1D556;MATHEMATICAL DOUBLE-STRUCK SMALL E;Ll;0;L; 0065;;;;N;;;;; 1D557;MATHEMATICAL DOUBLE-STRUCK SMALL F;Ll;0;L; 0066;;;;N;;;;; 1D558;MATHEMATICAL DOUBLE-STRUCK SMALL G;Ll;0;L; 0067;;;;N;;;;; 1D559;MATHEMATICAL DOUBLE-STRUCK SMALL H;Ll;0;L; 0068;;;;N;;;;; 1D55A;MATHEMATICAL DOUBLE-STRUCK SMALL I;Ll;0;L; 0069;;;;N;;;;; 1D55B;MATHEMATICAL DOUBLE-STRUCK SMALL J;Ll;0;L; 006A;;;;N;;;;; 1D55C;MATHEMATICAL DOUBLE-STRUCK SMALL K;Ll;0;L; 006B;;;;N;;;;; 1D55D;MATHEMATICAL DOUBLE-STRUCK SMALL L;Ll;0;L; 006C;;;;N;;;;; 1D55E;MATHEMATICAL DOUBLE-STRUCK SMALL M;Ll;0;L; 006D;;;;N;;;;; 1D55F;MATHEMATICAL DOUBLE-STRUCK SMALL N;Ll;0;L; 006E;;;;N;;;;; 1D560;MATHEMATICAL DOUBLE-STRUCK SMALL O;Ll;0;L; 006F;;;;N;;;;; 1D561;MATHEMATICAL DOUBLE-STRUCK SMALL P;Ll;0;L; 0070;;;;N;;;;; 1D562;MATHEMATICAL DOUBLE-STRUCK SMALL Q;Ll;0;L; 0071;;;;N;;;;; 1D563;MATHEMATICAL DOUBLE-STRUCK SMALL R;Ll;0;L; 0072;;;;N;;;;; 1D564;MATHEMATICAL DOUBLE-STRUCK SMALL S;Ll;0;L; 0073;;;;N;;;;; 1D565;MATHEMATICAL DOUBLE-STRUCK SMALL T;Ll;0;L; 0074;;;;N;;;;; 1D566;MATHEMATICAL DOUBLE-STRUCK SMALL U;Ll;0;L; 0075;;;;N;;;;; 1D567;MATHEMATICAL DOUBLE-STRUCK SMALL V;Ll;0;L; 0076;;;;N;;;;; 1D568;MATHEMATICAL DOUBLE-STRUCK SMALL W;Ll;0;L; 0077;;;;N;;;;; 1D569;MATHEMATICAL DOUBLE-STRUCK SMALL X;Ll;0;L; 0078;;;;N;;;;; 1D56A;MATHEMATICAL DOUBLE-STRUCK SMALL Y;Ll;0;L; 0079;;;;N;;;;; 1D56B;MATHEMATICAL DOUBLE-STRUCK SMALL Z;Ll;0;L; 007A;;;;N;;;;; 1D56C;MATHEMATICAL BOLD FRAKTUR CAPITAL A;Lu;0;L; 0041;;;;N;;;;; 1D56D;MATHEMATICAL BOLD FRAKTUR CAPITAL B;Lu;0;L; 0042;;;;N;;;;; 1D56E;MATHEMATICAL BOLD FRAKTUR CAPITAL C;Lu;0;L; 0043;;;;N;;;;; 1D56F;MATHEMATICAL BOLD FRAKTUR CAPITAL D;Lu;0;L; 0044;;;;N;;;;; 1D570;MATHEMATICAL BOLD FRAKTUR CAPITAL E;Lu;0;L; 0045;;;;N;;;;; 1D571;MATHEMATICAL BOLD FRAKTUR CAPITAL F;Lu;0;L; 0046;;;;N;;;;; 1D572;MATHEMATICAL BOLD FRAKTUR CAPITAL G;Lu;0;L; 0047;;;;N;;;;; 1D573;MATHEMATICAL BOLD FRAKTUR CAPITAL H;Lu;0;L; 0048;;;;N;;;;; 1D574;MATHEMATICAL BOLD FRAKTUR CAPITAL I;Lu;0;L; 0049;;;;N;;;;; 1D575;MATHEMATICAL BOLD FRAKTUR CAPITAL J;Lu;0;L; 004A;;;;N;;;;; 1D576;MATHEMATICAL BOLD FRAKTUR CAPITAL K;Lu;0;L; 004B;;;;N;;;;; 1D577;MATHEMATICAL BOLD FRAKTUR CAPITAL L;Lu;0;L; 004C;;;;N;;;;; 1D578;MATHEMATICAL BOLD FRAKTUR CAPITAL M;Lu;0;L; 004D;;;;N;;;;; 1D579;MATHEMATICAL BOLD FRAKTUR CAPITAL N;Lu;0;L; 004E;;;;N;;;;; 1D57A;MATHEMATICAL BOLD FRAKTUR CAPITAL O;Lu;0;L; 004F;;;;N;;;;; 1D57B;MATHEMATICAL BOLD FRAKTUR CAPITAL P;Lu;0;L; 0050;;;;N;;;;; 1D57C;MATHEMATICAL BOLD FRAKTUR CAPITAL Q;Lu;0;L; 0051;;;;N;;;;; 1D57D;MATHEMATICAL BOLD FRAKTUR CAPITAL R;Lu;0;L; 0052;;;;N;;;;; 1D57E;MATHEMATICAL BOLD FRAKTUR CAPITAL S;Lu;0;L; 0053;;;;N;;;;; 1D57F;MATHEMATICAL BOLD FRAKTUR CAPITAL T;Lu;0;L; 0054;;;;N;;;;; 1D580;MATHEMATICAL BOLD FRAKTUR CAPITAL U;Lu;0;L; 0055;;;;N;;;;; 1D581;MATHEMATICAL BOLD FRAKTUR CAPITAL V;Lu;0;L; 0056;;;;N;;;;; 1D582;MATHEMATICAL BOLD FRAKTUR CAPITAL W;Lu;0;L; 0057;;;;N;;;;; 1D583;MATHEMATICAL BOLD FRAKTUR CAPITAL X;Lu;0;L; 0058;;;;N;;;;; 1D584;MATHEMATICAL BOLD FRAKTUR CAPITAL Y;Lu;0;L; 0059;;;;N;;;;; 1D585;MATHEMATICAL BOLD FRAKTUR CAPITAL Z;Lu;0;L; 005A;;;;N;;;;; 1D586;MATHEMATICAL BOLD FRAKTUR SMALL A;Ll;0;L; 0061;;;;N;;;;; 1D587;MATHEMATICAL BOLD FRAKTUR SMALL B;Ll;0;L; 0062;;;;N;;;;; 1D588;MATHEMATICAL BOLD FRAKTUR SMALL C;Ll;0;L; 0063;;;;N;;;;; 1D589;MATHEMATICAL BOLD FRAKTUR SMALL D;Ll;0;L; 0064;;;;N;;;;; 1D58A;MATHEMATICAL BOLD FRAKTUR SMALL E;Ll;0;L; 0065;;;;N;;;;; 1D58B;MATHEMATICAL BOLD FRAKTUR SMALL F;Ll;0;L; 0066;;;;N;;;;; 1D58C;MATHEMATICAL BOLD FRAKTUR SMALL G;Ll;0;L; 0067;;;;N;;;;; 1D58D;MATHEMATICAL BOLD FRAKTUR SMALL H;Ll;0;L; 0068;;;;N;;;;; 1D58E;MATHEMATICAL BOLD FRAKTUR SMALL I;Ll;0;L; 0069;;;;N;;;;; 1D58F;MATHEMATICAL BOLD FRAKTUR SMALL J;Ll;0;L; 006A;;;;N;;;;; 1D590;MATHEMATICAL BOLD FRAKTUR SMALL K;Ll;0;L; 006B;;;;N;;;;; 1D591;MATHEMATICAL BOLD FRAKTUR SMALL L;Ll;0;L; 006C;;;;N;;;;; 1D592;MATHEMATICAL BOLD FRAKTUR SMALL M;Ll;0;L; 006D;;;;N;;;;; 1D593;MATHEMATICAL BOLD FRAKTUR SMALL N;Ll;0;L; 006E;;;;N;;;;; 1D594;MATHEMATICAL BOLD FRAKTUR SMALL O;Ll;0;L; 006F;;;;N;;;;; 1D595;MATHEMATICAL BOLD FRAKTUR SMALL P;Ll;0;L; 0070;;;;N;;;;; 1D596;MATHEMATICAL BOLD FRAKTUR SMALL Q;Ll;0;L; 0071;;;;N;;;;; 1D597;MATHEMATICAL BOLD FRAKTUR SMALL R;Ll;0;L; 0072;;;;N;;;;; 1D598;MATHEMATICAL BOLD FRAKTUR SMALL S;Ll;0;L; 0073;;;;N;;;;; 1D599;MATHEMATICAL BOLD FRAKTUR SMALL T;Ll;0;L; 0074;;;;N;;;;; 1D59A;MATHEMATICAL BOLD FRAKTUR SMALL U;Ll;0;L; 0075;;;;N;;;;; 1D59B;MATHEMATICAL BOLD FRAKTUR SMALL V;Ll;0;L; 0076;;;;N;;;;; 1D59C;MATHEMATICAL BOLD FRAKTUR SMALL W;Ll;0;L; 0077;;;;N;;;;; 1D59D;MATHEMATICAL BOLD FRAKTUR SMALL X;Ll;0;L; 0078;;;;N;;;;; 1D59E;MATHEMATICAL BOLD FRAKTUR SMALL Y;Ll;0;L; 0079;;;;N;;;;; 1D59F;MATHEMATICAL BOLD FRAKTUR SMALL Z;Ll;0;L; 007A;;;;N;;;;; 1D5A0;MATHEMATICAL SANS-SERIF CAPITAL A;Lu;0;L; 0041;;;;N;;;;; 1D5A1;MATHEMATICAL SANS-SERIF CAPITAL B;Lu;0;L; 0042;;;;N;;;;; 1D5A2;MATHEMATICAL SANS-SERIF CAPITAL C;Lu;0;L; 0043;;;;N;;;;; 1D5A3;MATHEMATICAL SANS-SERIF CAPITAL D;Lu;0;L; 0044;;;;N;;;;; 1D5A4;MATHEMATICAL SANS-SERIF CAPITAL E;Lu;0;L; 0045;;;;N;;;;; 1D5A5;MATHEMATICAL SANS-SERIF CAPITAL F;Lu;0;L; 0046;;;;N;;;;; 1D5A6;MATHEMATICAL SANS-SERIF CAPITAL G;Lu;0;L; 0047;;;;N;;;;; 1D5A7;MATHEMATICAL SANS-SERIF CAPITAL H;Lu;0;L; 0048;;;;N;;;;; 1D5A8;MATHEMATICAL SANS-SERIF CAPITAL I;Lu;0;L; 0049;;;;N;;;;; 1D5A9;MATHEMATICAL SANS-SERIF CAPITAL J;Lu;0;L; 004A;;;;N;;;;; 1D5AA;MATHEMATICAL SANS-SERIF CAPITAL K;Lu;0;L; 004B;;;;N;;;;; 1D5AB;MATHEMATICAL SANS-SERIF CAPITAL L;Lu;0;L; 004C;;;;N;;;;; 1D5AC;MATHEMATICAL SANS-SERIF CAPITAL M;Lu;0;L; 004D;;;;N;;;;; 1D5AD;MATHEMATICAL SANS-SERIF CAPITAL N;Lu;0;L; 004E;;;;N;;;;; 1D5AE;MATHEMATICAL SANS-SERIF CAPITAL O;Lu;0;L; 004F;;;;N;;;;; 1D5AF;MATHEMATICAL SANS-SERIF CAPITAL P;Lu;0;L; 0050;;;;N;;;;; 1D5B0;MATHEMATICAL SANS-SERIF CAPITAL Q;Lu;0;L; 0051;;;;N;;;;; 1D5B1;MATHEMATICAL SANS-SERIF CAPITAL R;Lu;0;L; 0052;;;;N;;;;; 1D5B2;MATHEMATICAL SANS-SERIF CAPITAL S;Lu;0;L; 0053;;;;N;;;;; 1D5B3;MATHEMATICAL SANS-SERIF CAPITAL T;Lu;0;L; 0054;;;;N;;;;; 1D5B4;MATHEMATICAL SANS-SERIF CAPITAL U;Lu;0;L; 0055;;;;N;;;;; 1D5B5;MATHEMATICAL SANS-SERIF CAPITAL V;Lu;0;L; 0056;;;;N;;;;; 1D5B6;MATHEMATICAL SANS-SERIF CAPITAL W;Lu;0;L; 0057;;;;N;;;;; 1D5B7;MATHEMATICAL SANS-SERIF CAPITAL X;Lu;0;L; 0058;;;;N;;;;; 1D5B8;MATHEMATICAL SANS-SERIF CAPITAL Y;Lu;0;L; 0059;;;;N;;;;; 1D5B9;MATHEMATICAL SANS-SERIF CAPITAL Z;Lu;0;L; 005A;;;;N;;;;; 1D5BA;MATHEMATICAL SANS-SERIF SMALL A;Ll;0;L; 0061;;;;N;;;;; 1D5BB;MATHEMATICAL SANS-SERIF SMALL B;Ll;0;L; 0062;;;;N;;;;; 1D5BC;MATHEMATICAL SANS-SERIF SMALL C;Ll;0;L; 0063;;;;N;;;;; 1D5BD;MATHEMATICAL SANS-SERIF SMALL D;Ll;0;L; 0064;;;;N;;;;; 1D5BE;MATHEMATICAL SANS-SERIF SMALL E;Ll;0;L; 0065;;;;N;;;;; 1D5BF;MATHEMATICAL SANS-SERIF SMALL F;Ll;0;L; 0066;;;;N;;;;; 1D5C0;MATHEMATICAL SANS-SERIF SMALL G;Ll;0;L; 0067;;;;N;;;;; 1D5C1;MATHEMATICAL SANS-SERIF SMALL H;Ll;0;L; 0068;;;;N;;;;; 1D5C2;MATHEMATICAL SANS-SERIF SMALL I;Ll;0;L; 0069;;;;N;;;;; 1D5C3;MATHEMATICAL SANS-SERIF SMALL J;Ll;0;L; 006A;;;;N;;;;; 1D5C4;MATHEMATICAL SANS-SERIF SMALL K;Ll;0;L; 006B;;;;N;;;;; 1D5C5;MATHEMATICAL SANS-SERIF SMALL L;Ll;0;L; 006C;;;;N;;;;; 1D5C6;MATHEMATICAL SANS-SERIF SMALL M;Ll;0;L; 006D;;;;N;;;;; 1D5C7;MATHEMATICAL SANS-SERIF SMALL N;Ll;0;L; 006E;;;;N;;;;; 1D5C8;MATHEMATICAL SANS-SERIF SMALL O;Ll;0;L; 006F;;;;N;;;;; 1D5C9;MATHEMATICAL SANS-SERIF SMALL P;Ll;0;L; 0070;;;;N;;;;; 1D5CA;MATHEMATICAL SANS-SERIF SMALL Q;Ll;0;L; 0071;;;;N;;;;; 1D5CB;MATHEMATICAL SANS-SERIF SMALL R;Ll;0;L; 0072;;;;N;;;;; 1D5CC;MATHEMATICAL SANS-SERIF SMALL S;Ll;0;L; 0073;;;;N;;;;; 1D5CD;MATHEMATICAL SANS-SERIF SMALL T;Ll;0;L; 0074;;;;N;;;;; 1D5CE;MATHEMATICAL SANS-SERIF SMALL U;Ll;0;L; 0075;;;;N;;;;; 1D5CF;MATHEMATICAL SANS-SERIF SMALL V;Ll;0;L; 0076;;;;N;;;;; 1D5D0;MATHEMATICAL SANS-SERIF SMALL W;Ll;0;L; 0077;;;;N;;;;; 1D5D1;MATHEMATICAL SANS-SERIF SMALL X;Ll;0;L; 0078;;;;N;;;;; 1D5D2;MATHEMATICAL SANS-SERIF SMALL Y;Ll;0;L; 0079;;;;N;;;;; 1D5D3;MATHEMATICAL SANS-SERIF SMALL Z;Ll;0;L; 007A;;;;N;;;;; 1D5D4;MATHEMATICAL SANS-SERIF BOLD CAPITAL A;Lu;0;L; 0041;;;;N;;;;; 1D5D5;MATHEMATICAL SANS-SERIF BOLD CAPITAL B;Lu;0;L; 0042;;;;N;;;;; 1D5D6;MATHEMATICAL SANS-SERIF BOLD CAPITAL C;Lu;0;L; 0043;;;;N;;;;; 1D5D7;MATHEMATICAL SANS-SERIF BOLD CAPITAL D;Lu;0;L; 0044;;;;N;;;;; 1D5D8;MATHEMATICAL SANS-SERIF BOLD CAPITAL E;Lu;0;L; 0045;;;;N;;;;; 1D5D9;MATHEMATICAL SANS-SERIF BOLD CAPITAL F;Lu;0;L; 0046;;;;N;;;;; 1D5DA;MATHEMATICAL SANS-SERIF BOLD CAPITAL G;Lu;0;L; 0047;;;;N;;;;; 1D5DB;MATHEMATICAL SANS-SERIF BOLD CAPITAL H;Lu;0;L; 0048;;;;N;;;;; 1D5DC;MATHEMATICAL SANS-SERIF BOLD CAPITAL I;Lu;0;L; 0049;;;;N;;;;; 1D5DD;MATHEMATICAL SANS-SERIF BOLD CAPITAL J;Lu;0;L; 004A;;;;N;;;;; 1D5DE;MATHEMATICAL SANS-SERIF BOLD CAPITAL K;Lu;0;L; 004B;;;;N;;;;; 1D5DF;MATHEMATICAL SANS-SERIF BOLD CAPITAL L;Lu;0;L; 004C;;;;N;;;;; 1D5E0;MATHEMATICAL SANS-SERIF BOLD CAPITAL M;Lu;0;L; 004D;;;;N;;;;; 1D5E1;MATHEMATICAL SANS-SERIF BOLD CAPITAL N;Lu;0;L; 004E;;;;N;;;;; 1D5E2;MATHEMATICAL SANS-SERIF BOLD CAPITAL O;Lu;0;L; 004F;;;;N;;;;; 1D5E3;MATHEMATICAL SANS-SERIF BOLD CAPITAL P;Lu;0;L; 0050;;;;N;;;;; 1D5E4;MATHEMATICAL SANS-SERIF BOLD CAPITAL Q;Lu;0;L; 0051;;;;N;;;;; 1D5E5;MATHEMATICAL SANS-SERIF BOLD CAPITAL R;Lu;0;L; 0052;;;;N;;;;; 1D5E6;MATHEMATICAL SANS-SERIF BOLD CAPITAL S;Lu;0;L; 0053;;;;N;;;;; 1D5E7;MATHEMATICAL SANS-SERIF BOLD CAPITAL T;Lu;0;L; 0054;;;;N;;;;; 1D5E8;MATHEMATICAL SANS-SERIF BOLD CAPITAL U;Lu;0;L; 0055;;;;N;;;;; 1D5E9;MATHEMATICAL SANS-SERIF BOLD CAPITAL V;Lu;0;L; 0056;;;;N;;;;; 1D5EA;MATHEMATICAL SANS-SERIF BOLD CAPITAL W;Lu;0;L; 0057;;;;N;;;;; 1D5EB;MATHEMATICAL SANS-SERIF BOLD CAPITAL X;Lu;0;L; 0058;;;;N;;;;; 1D5EC;MATHEMATICAL SANS-SERIF BOLD CAPITAL Y;Lu;0;L; 0059;;;;N;;;;; 1D5ED;MATHEMATICAL SANS-SERIF BOLD CAPITAL Z;Lu;0;L; 005A;;;;N;;;;; 1D5EE;MATHEMATICAL SANS-SERIF BOLD SMALL A;Ll;0;L; 0061;;;;N;;;;; 1D5EF;MATHEMATICAL SANS-SERIF BOLD SMALL B;Ll;0;L; 0062;;;;N;;;;; 1D5F0;MATHEMATICAL SANS-SERIF BOLD SMALL C;Ll;0;L; 0063;;;;N;;;;; 1D5F1;MATHEMATICAL SANS-SERIF BOLD SMALL D;Ll;0;L; 0064;;;;N;;;;; 1D5F2;MATHEMATICAL SANS-SERIF BOLD SMALL E;Ll;0;L; 0065;;;;N;;;;; 1D5F3;MATHEMATICAL SANS-SERIF BOLD SMALL F;Ll;0;L; 0066;;;;N;;;;; 1D5F4;MATHEMATICAL SANS-SERIF BOLD SMALL G;Ll;0;L; 0067;;;;N;;;;; 1D5F5;MATHEMATICAL SANS-SERIF BOLD SMALL H;Ll;0;L; 0068;;;;N;;;;; 1D5F6;MATHEMATICAL SANS-SERIF BOLD SMALL I;Ll;0;L; 0069;;;;N;;;;; 1D5F7;MATHEMATICAL SANS-SERIF BOLD SMALL J;Ll;0;L; 006A;;;;N;;;;; 1D5F8;MATHEMATICAL SANS-SERIF BOLD SMALL K;Ll;0;L; 006B;;;;N;;;;; 1D5F9;MATHEMATICAL SANS-SERIF BOLD SMALL L;Ll;0;L; 006C;;;;N;;;;; 1D5FA;MATHEMATICAL SANS-SERIF BOLD SMALL M;Ll;0;L; 006D;;;;N;;;;; 1D5FB;MATHEMATICAL SANS-SERIF BOLD SMALL N;Ll;0;L; 006E;;;;N;;;;; 1D5FC;MATHEMATICAL SANS-SERIF BOLD SMALL O;Ll;0;L; 006F;;;;N;;;;; 1D5FD;MATHEMATICAL SANS-SERIF BOLD SMALL P;Ll;0;L; 0070;;;;N;;;;; 1D5FE;MATHEMATICAL SANS-SERIF BOLD SMALL Q;Ll;0;L; 0071;;;;N;;;;; 1D5FF;MATHEMATICAL SANS-SERIF BOLD SMALL R;Ll;0;L; 0072;;;;N;;;;; 1D600;MATHEMATICAL SANS-SERIF BOLD SMALL S;Ll;0;L; 0073;;;;N;;;;; 1D601;MATHEMATICAL SANS-SERIF BOLD SMALL T;Ll;0;L; 0074;;;;N;;;;; 1D602;MATHEMATICAL SANS-SERIF BOLD SMALL U;Ll;0;L; 0075;;;;N;;;;; 1D603;MATHEMATICAL SANS-SERIF BOLD SMALL V;Ll;0;L; 0076;;;;N;;;;; 1D604;MATHEMATICAL SANS-SERIF BOLD SMALL W;Ll;0;L; 0077;;;;N;;;;; 1D605;MATHEMATICAL SANS-SERIF BOLD SMALL X;Ll;0;L; 0078;;;;N;;;;; 1D606;MATHEMATICAL SANS-SERIF BOLD SMALL Y;Ll;0;L; 0079;;;;N;;;;; 1D607;MATHEMATICAL SANS-SERIF BOLD SMALL Z;Ll;0;L; 007A;;;;N;;;;; 1D608;MATHEMATICAL SANS-SERIF ITALIC CAPITAL A;Lu;0;L; 0041;;;;N;;;;; 1D609;MATHEMATICAL SANS-SERIF ITALIC CAPITAL B;Lu;0;L; 0042;;;;N;;;;; 1D60A;MATHEMATICAL SANS-SERIF ITALIC CAPITAL C;Lu;0;L; 0043;;;;N;;;;; 1D60B;MATHEMATICAL SANS-SERIF ITALIC CAPITAL D;Lu;0;L; 0044;;;;N;;;;; 1D60C;MATHEMATICAL SANS-SERIF ITALIC CAPITAL E;Lu;0;L; 0045;;;;N;;;;; 1D60D;MATHEMATICAL SANS-SERIF ITALIC CAPITAL F;Lu;0;L; 0046;;;;N;;;;; 1D60E;MATHEMATICAL SANS-SERIF ITALIC CAPITAL G;Lu;0;L; 0047;;;;N;;;;; 1D60F;MATHEMATICAL SANS-SERIF ITALIC CAPITAL H;Lu;0;L; 0048;;;;N;;;;; 1D610;MATHEMATICAL SANS-SERIF ITALIC CAPITAL I;Lu;0;L; 0049;;;;N;;;;; 1D611;MATHEMATICAL SANS-SERIF ITALIC CAPITAL J;Lu;0;L; 004A;;;;N;;;;; 1D612;MATHEMATICAL SANS-SERIF ITALIC CAPITAL K;Lu;0;L; 004B;;;;N;;;;; 1D613;MATHEMATICAL SANS-SERIF ITALIC CAPITAL L;Lu;0;L; 004C;;;;N;;;;; 1D614;MATHEMATICAL SANS-SERIF ITALIC CAPITAL M;Lu;0;L; 004D;;;;N;;;;; 1D615;MATHEMATICAL SANS-SERIF ITALIC CAPITAL N;Lu;0;L; 004E;;;;N;;;;; 1D616;MATHEMATICAL SANS-SERIF ITALIC CAPITAL O;Lu;0;L; 004F;;;;N;;;;; 1D617;MATHEMATICAL SANS-SERIF ITALIC CAPITAL P;Lu;0;L; 0050;;;;N;;;;; 1D618;MATHEMATICAL SANS-SERIF ITALIC CAPITAL Q;Lu;0;L; 0051;;;;N;;;;; 1D619;MATHEMATICAL SANS-SERIF ITALIC CAPITAL R;Lu;0;L; 0052;;;;N;;;;; 1D61A;MATHEMATICAL SANS-SERIF ITALIC CAPITAL S;Lu;0;L; 0053;;;;N;;;;; 1D61B;MATHEMATICAL SANS-SERIF ITALIC CAPITAL T;Lu;0;L; 0054;;;;N;;;;; 1D61C;MATHEMATICAL SANS-SERIF ITALIC CAPITAL U;Lu;0;L; 0055;;;;N;;;;; 1D61D;MATHEMATICAL SANS-SERIF ITALIC CAPITAL V;Lu;0;L; 0056;;;;N;;;;; 1D61E;MATHEMATICAL SANS-SERIF ITALIC CAPITAL W;Lu;0;L; 0057;;;;N;;;;; 1D61F;MATHEMATICAL SANS-SERIF ITALIC CAPITAL X;Lu;0;L; 0058;;;;N;;;;; 1D620;MATHEMATICAL SANS-SERIF ITALIC CAPITAL Y;Lu;0;L; 0059;;;;N;;;;; 1D621;MATHEMATICAL SANS-SERIF ITALIC CAPITAL Z;Lu;0;L; 005A;;;;N;;;;; 1D622;MATHEMATICAL SANS-SERIF ITALIC SMALL A;Ll;0;L; 0061;;;;N;;;;; 1D623;MATHEMATICAL SANS-SERIF ITALIC SMALL B;Ll;0;L; 0062;;;;N;;;;; 1D624;MATHEMATICAL SANS-SERIF ITALIC SMALL C;Ll;0;L; 0063;;;;N;;;;; 1D625;MATHEMATICAL SANS-SERIF ITALIC SMALL D;Ll;0;L; 0064;;;;N;;;;; 1D626;MATHEMATICAL SANS-SERIF ITALIC SMALL E;Ll;0;L; 0065;;;;N;;;;; 1D627;MATHEMATICAL SANS-SERIF ITALIC SMALL F;Ll;0;L; 0066;;;;N;;;;; 1D628;MATHEMATICAL SANS-SERIF ITALIC SMALL G;Ll;0;L; 0067;;;;N;;;;; 1D629;MATHEMATICAL SANS-SERIF ITALIC SMALL H;Ll;0;L; 0068;;;;N;;;;; 1D62A;MATHEMATICAL SANS-SERIF ITALIC SMALL I;Ll;0;L; 0069;;;;N;;;;; 1D62B;MATHEMATICAL SANS-SERIF ITALIC SMALL J;Ll;0;L; 006A;;;;N;;;;; 1D62C;MATHEMATICAL SANS-SERIF ITALIC SMALL K;Ll;0;L; 006B;;;;N;;;;; 1D62D;MATHEMATICAL SANS-SERIF ITALIC SMALL L;Ll;0;L; 006C;;;;N;;;;; 1D62E;MATHEMATICAL SANS-SERIF ITALIC SMALL M;Ll;0;L; 006D;;;;N;;;;; 1D62F;MATHEMATICAL SANS-SERIF ITALIC SMALL N;Ll;0;L; 006E;;;;N;;;;; 1D630;MATHEMATICAL SANS-SERIF ITALIC SMALL O;Ll;0;L; 006F;;;;N;;;;; 1D631;MATHEMATICAL SANS-SERIF ITALIC SMALL P;Ll;0;L; 0070;;;;N;;;;; 1D632;MATHEMATICAL SANS-SERIF ITALIC SMALL Q;Ll;0;L; 0071;;;;N;;;;; 1D633;MATHEMATICAL SANS-SERIF ITALIC SMALL R;Ll;0;L; 0072;;;;N;;;;; 1D634;MATHEMATICAL SANS-SERIF ITALIC SMALL S;Ll;0;L; 0073;;;;N;;;;; 1D635;MATHEMATICAL SANS-SERIF ITALIC SMALL T;Ll;0;L; 0074;;;;N;;;;; 1D636;MATHEMATICAL SANS-SERIF ITALIC SMALL U;Ll;0;L; 0075;;;;N;;;;; 1D637;MATHEMATICAL SANS-SERIF ITALIC SMALL V;Ll;0;L; 0076;;;;N;;;;; 1D638;MATHEMATICAL SANS-SERIF ITALIC SMALL W;Ll;0;L; 0077;;;;N;;;;; 1D639;MATHEMATICAL SANS-SERIF ITALIC SMALL X;Ll;0;L; 0078;;;;N;;;;; 1D63A;MATHEMATICAL SANS-SERIF ITALIC SMALL Y;Ll;0;L; 0079;;;;N;;;;; 1D63B;MATHEMATICAL SANS-SERIF ITALIC SMALL Z;Ll;0;L; 007A;;;;N;;;;; 1D63C;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL A;Lu;0;L; 0041;;;;N;;;;; 1D63D;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL B;Lu;0;L; 0042;;;;N;;;;; 1D63E;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL C;Lu;0;L; 0043;;;;N;;;;; 1D63F;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL D;Lu;0;L; 0044;;;;N;;;;; 1D640;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL E;Lu;0;L; 0045;;;;N;;;;; 1D641;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL F;Lu;0;L; 0046;;;;N;;;;; 1D642;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL G;Lu;0;L; 0047;;;;N;;;;; 1D643;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL H;Lu;0;L; 0048;;;;N;;;;; 1D644;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL I;Lu;0;L; 0049;;;;N;;;;; 1D645;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL J;Lu;0;L; 004A;;;;N;;;;; 1D646;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL K;Lu;0;L; 004B;;;;N;;;;; 1D647;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL L;Lu;0;L; 004C;;;;N;;;;; 1D648;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL M;Lu;0;L; 004D;;;;N;;;;; 1D649;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL N;Lu;0;L; 004E;;;;N;;;;; 1D64A;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL O;Lu;0;L; 004F;;;;N;;;;; 1D64B;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL P;Lu;0;L; 0050;;;;N;;;;; 1D64C;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Q;Lu;0;L; 0051;;;;N;;;;; 1D64D;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL R;Lu;0;L; 0052;;;;N;;;;; 1D64E;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL S;Lu;0;L; 0053;;;;N;;;;; 1D64F;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL T;Lu;0;L; 0054;;;;N;;;;; 1D650;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL U;Lu;0;L; 0055;;;;N;;;;; 1D651;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL V;Lu;0;L; 0056;;;;N;;;;; 1D652;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL W;Lu;0;L; 0057;;;;N;;;;; 1D653;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL X;Lu;0;L; 0058;;;;N;;;;; 1D654;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Y;Lu;0;L; 0059;;;;N;;;;; 1D655;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Z;Lu;0;L; 005A;;;;N;;;;; 1D656;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL A;Ll;0;L; 0061;;;;N;;;;; 1D657;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL B;Ll;0;L; 0062;;;;N;;;;; 1D658;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL C;Ll;0;L; 0063;;;;N;;;;; 1D659;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL D;Ll;0;L; 0064;;;;N;;;;; 1D65A;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL E;Ll;0;L; 0065;;;;N;;;;; 1D65B;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL F;Ll;0;L; 0066;;;;N;;;;; 1D65C;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL G;Ll;0;L; 0067;;;;N;;;;; 1D65D;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL H;Ll;0;L; 0068;;;;N;;;;; 1D65E;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL I;Ll;0;L; 0069;;;;N;;;;; 1D65F;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL J;Ll;0;L; 006A;;;;N;;;;; 1D660;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL K;Ll;0;L; 006B;;;;N;;;;; 1D661;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL L;Ll;0;L; 006C;;;;N;;;;; 1D662;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL M;Ll;0;L; 006D;;;;N;;;;; 1D663;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL N;Ll;0;L; 006E;;;;N;;;;; 1D664;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL O;Ll;0;L; 006F;;;;N;;;;; 1D665;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL P;Ll;0;L; 0070;;;;N;;;;; 1D666;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Q;Ll;0;L; 0071;;;;N;;;;; 1D667;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL R;Ll;0;L; 0072;;;;N;;;;; 1D668;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL S;Ll;0;L; 0073;;;;N;;;;; 1D669;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL T;Ll;0;L; 0074;;;;N;;;;; 1D66A;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL U;Ll;0;L; 0075;;;;N;;;;; 1D66B;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL V;Ll;0;L; 0076;;;;N;;;;; 1D66C;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL W;Ll;0;L; 0077;;;;N;;;;; 1D66D;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL X;Ll;0;L; 0078;;;;N;;;;; 1D66E;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Y;Ll;0;L; 0079;;;;N;;;;; 1D66F;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Z;Ll;0;L; 007A;;;;N;;;;; 1D670;MATHEMATICAL MONOSPACE CAPITAL A;Lu;0;L; 0041;;;;N;;;;; 1D671;MATHEMATICAL MONOSPACE CAPITAL B;Lu;0;L; 0042;;;;N;;;;; 1D672;MATHEMATICAL MONOSPACE CAPITAL C;Lu;0;L; 0043;;;;N;;;;; 1D673;MATHEMATICAL MONOSPACE CAPITAL D;Lu;0;L; 0044;;;;N;;;;; 1D674;MATHEMATICAL MONOSPACE CAPITAL E;Lu;0;L; 0045;;;;N;;;;; 1D675;MATHEMATICAL MONOSPACE CAPITAL F;Lu;0;L; 0046;;;;N;;;;; 1D676;MATHEMATICAL MONOSPACE CAPITAL G;Lu;0;L; 0047;;;;N;;;;; 1D677;MATHEMATICAL MONOSPACE CAPITAL H;Lu;0;L; 0048;;;;N;;;;; 1D678;MATHEMATICAL MONOSPACE CAPITAL I;Lu;0;L; 0049;;;;N;;;;; 1D679;MATHEMATICAL MONOSPACE CAPITAL J;Lu;0;L; 004A;;;;N;;;;; 1D67A;MATHEMATICAL MONOSPACE CAPITAL K;Lu;0;L; 004B;;;;N;;;;; 1D67B;MATHEMATICAL MONOSPACE CAPITAL L;Lu;0;L; 004C;;;;N;;;;; 1D67C;MATHEMATICAL MONOSPACE CAPITAL M;Lu;0;L; 004D;;;;N;;;;; 1D67D;MATHEMATICAL MONOSPACE CAPITAL N;Lu;0;L; 004E;;;;N;;;;; 1D67E;MATHEMATICAL MONOSPACE CAPITAL O;Lu;0;L; 004F;;;;N;;;;; 1D67F;MATHEMATICAL MONOSPACE CAPITAL P;Lu;0;L; 0050;;;;N;;;;; 1D680;MATHEMATICAL MONOSPACE CAPITAL Q;Lu;0;L; 0051;;;;N;;;;; 1D681;MATHEMATICAL MONOSPACE CAPITAL R;Lu;0;L; 0052;;;;N;;;;; 1D682;MATHEMATICAL MONOSPACE CAPITAL S;Lu;0;L; 0053;;;;N;;;;; 1D683;MATHEMATICAL MONOSPACE CAPITAL T;Lu;0;L; 0054;;;;N;;;;; 1D684;MATHEMATICAL MONOSPACE CAPITAL U;Lu;0;L; 0055;;;;N;;;;; 1D685;MATHEMATICAL MONOSPACE CAPITAL V;Lu;0;L; 0056;;;;N;;;;; 1D686;MATHEMATICAL MONOSPACE CAPITAL W;Lu;0;L; 0057;;;;N;;;;; 1D687;MATHEMATICAL MONOSPACE CAPITAL X;Lu;0;L; 0058;;;;N;;;;; 1D688;MATHEMATICAL MONOSPACE CAPITAL Y;Lu;0;L; 0059;;;;N;;;;; 1D689;MATHEMATICAL MONOSPACE CAPITAL Z;Lu;0;L; 005A;;;;N;;;;; 1D68A;MATHEMATICAL MONOSPACE SMALL A;Ll;0;L; 0061;;;;N;;;;; 1D68B;MATHEMATICAL MONOSPACE SMALL B;Ll;0;L; 0062;;;;N;;;;; 1D68C;MATHEMATICAL MONOSPACE SMALL C;Ll;0;L; 0063;;;;N;;;;; 1D68D;MATHEMATICAL MONOSPACE SMALL D;Ll;0;L; 0064;;;;N;;;;; 1D68E;MATHEMATICAL MONOSPACE SMALL E;Ll;0;L; 0065;;;;N;;;;; 1D68F;MATHEMATICAL MONOSPACE SMALL F;Ll;0;L; 0066;;;;N;;;;; 1D690;MATHEMATICAL MONOSPACE SMALL G;Ll;0;L; 0067;;;;N;;;;; 1D691;MATHEMATICAL MONOSPACE SMALL H;Ll;0;L; 0068;;;;N;;;;; 1D692;MATHEMATICAL MONOSPACE SMALL I;Ll;0;L; 0069;;;;N;;;;; 1D693;MATHEMATICAL MONOSPACE SMALL J;Ll;0;L; 006A;;;;N;;;;; 1D694;MATHEMATICAL MONOSPACE SMALL K;Ll;0;L; 006B;;;;N;;;;; 1D695;MATHEMATICAL MONOSPACE SMALL L;Ll;0;L; 006C;;;;N;;;;; 1D696;MATHEMATICAL MONOSPACE SMALL M;Ll;0;L; 006D;;;;N;;;;; 1D697;MATHEMATICAL MONOSPACE SMALL N;Ll;0;L; 006E;;;;N;;;;; 1D698;MATHEMATICAL MONOSPACE SMALL O;Ll;0;L; 006F;;;;N;;;;; 1D699;MATHEMATICAL MONOSPACE SMALL P;Ll;0;L; 0070;;;;N;;;;; 1D69A;MATHEMATICAL MONOSPACE SMALL Q;Ll;0;L; 0071;;;;N;;;;; 1D69B;MATHEMATICAL MONOSPACE SMALL R;Ll;0;L; 0072;;;;N;;;;; 1D69C;MATHEMATICAL MONOSPACE SMALL S;Ll;0;L; 0073;;;;N;;;;; 1D69D;MATHEMATICAL MONOSPACE SMALL T;Ll;0;L; 0074;;;;N;;;;; 1D69E;MATHEMATICAL MONOSPACE SMALL U;Ll;0;L; 0075;;;;N;;;;; 1D69F;MATHEMATICAL MONOSPACE SMALL V;Ll;0;L; 0076;;;;N;;;;; 1D6A0;MATHEMATICAL MONOSPACE SMALL W;Ll;0;L; 0077;;;;N;;;;; 1D6A1;MATHEMATICAL MONOSPACE SMALL X;Ll;0;L; 0078;;;;N;;;;; 1D6A2;MATHEMATICAL MONOSPACE SMALL Y;Ll;0;L; 0079;;;;N;;;;; 1D6A3;MATHEMATICAL MONOSPACE SMALL Z;Ll;0;L; 007A;;;;N;;;;; 1D6A4;MATHEMATICAL ITALIC SMALL DOTLESS I;Ll;0;L; 0131;;;;N;;;;; 1D6A5;MATHEMATICAL ITALIC SMALL DOTLESS J;Ll;0;L; 0237;;;;N;;;;; 1D6A8;MATHEMATICAL BOLD CAPITAL ALPHA;Lu;0;L; 0391;;;;N;;;;; 1D6A9;MATHEMATICAL BOLD CAPITAL BETA;Lu;0;L; 0392;;;;N;;;;; 1D6AA;MATHEMATICAL BOLD CAPITAL GAMMA;Lu;0;L; 0393;;;;N;;;;; 1D6AB;MATHEMATICAL BOLD CAPITAL DELTA;Lu;0;L; 0394;;;;N;;;;; 1D6AC;MATHEMATICAL BOLD CAPITAL EPSILON;Lu;0;L; 0395;;;;N;;;;; 1D6AD;MATHEMATICAL BOLD CAPITAL ZETA;Lu;0;L; 0396;;;;N;;;;; 1D6AE;MATHEMATICAL BOLD CAPITAL ETA;Lu;0;L; 0397;;;;N;;;;; 1D6AF;MATHEMATICAL BOLD CAPITAL THETA;Lu;0;L; 0398;;;;N;;;;; 1D6B0;MATHEMATICAL BOLD CAPITAL IOTA;Lu;0;L; 0399;;;;N;;;;; 1D6B1;MATHEMATICAL BOLD CAPITAL KAPPA;Lu;0;L; 039A;;;;N;;;;; 1D6B2;MATHEMATICAL BOLD CAPITAL LAMDA;Lu;0;L; 039B;;;;N;;;;; 1D6B3;MATHEMATICAL BOLD CAPITAL MU;Lu;0;L; 039C;;;;N;;;;; 1D6B4;MATHEMATICAL BOLD CAPITAL NU;Lu;0;L; 039D;;;;N;;;;; 1D6B5;MATHEMATICAL BOLD CAPITAL XI;Lu;0;L; 039E;;;;N;;;;; 1D6B6;MATHEMATICAL BOLD CAPITAL OMICRON;Lu;0;L; 039F;;;;N;;;;; 1D6B7;MATHEMATICAL BOLD CAPITAL PI;Lu;0;L; 03A0;;;;N;;;;; 1D6B8;MATHEMATICAL BOLD CAPITAL RHO;Lu;0;L; 03A1;;;;N;;;;; 1D6B9;MATHEMATICAL BOLD CAPITAL THETA SYMBOL;Lu;0;L; 03F4;;;;N;;;;; 1D6BA;MATHEMATICAL BOLD CAPITAL SIGMA;Lu;0;L; 03A3;;;;N;;;;; 1D6BB;MATHEMATICAL BOLD CAPITAL TAU;Lu;0;L; 03A4;;;;N;;;;; 1D6BC;MATHEMATICAL BOLD CAPITAL UPSILON;Lu;0;L; 03A5;;;;N;;;;; 1D6BD;MATHEMATICAL BOLD CAPITAL PHI;Lu;0;L; 03A6;;;;N;;;;; 1D6BE;MATHEMATICAL BOLD CAPITAL CHI;Lu;0;L; 03A7;;;;N;;;;; 1D6BF;MATHEMATICAL BOLD CAPITAL PSI;Lu;0;L; 03A8;;;;N;;;;; 1D6C0;MATHEMATICAL BOLD CAPITAL OMEGA;Lu;0;L; 03A9;;;;N;;;;; 1D6C1;MATHEMATICAL BOLD NABLA;Sm;0;L; 2207;;;;N;;;;; 1D6C2;MATHEMATICAL BOLD SMALL ALPHA;Ll;0;L; 03B1;;;;N;;;;; 1D6C3;MATHEMATICAL BOLD SMALL BETA;Ll;0;L; 03B2;;;;N;;;;; 1D6C4;MATHEMATICAL BOLD SMALL GAMMA;Ll;0;L; 03B3;;;;N;;;;; 1D6C5;MATHEMATICAL BOLD SMALL DELTA;Ll;0;L; 03B4;;;;N;;;;; 1D6C6;MATHEMATICAL BOLD SMALL EPSILON;Ll;0;L; 03B5;;;;N;;;;; 1D6C7;MATHEMATICAL BOLD SMALL ZETA;Ll;0;L; 03B6;;;;N;;;;; 1D6C8;MATHEMATICAL BOLD SMALL ETA;Ll;0;L; 03B7;;;;N;;;;; 1D6C9;MATHEMATICAL BOLD SMALL THETA;Ll;0;L; 03B8;;;;N;;;;; 1D6CA;MATHEMATICAL BOLD SMALL IOTA;Ll;0;L; 03B9;;;;N;;;;; 1D6CB;MATHEMATICAL BOLD SMALL KAPPA;Ll;0;L; 03BA;;;;N;;;;; 1D6CC;MATHEMATICAL BOLD SMALL LAMDA;Ll;0;L; 03BB;;;;N;;;;; 1D6CD;MATHEMATICAL BOLD SMALL MU;Ll;0;L; 03BC;;;;N;;;;; 1D6CE;MATHEMATICAL BOLD SMALL NU;Ll;0;L; 03BD;;;;N;;;;; 1D6CF;MATHEMATICAL BOLD SMALL XI;Ll;0;L; 03BE;;;;N;;;;; 1D6D0;MATHEMATICAL BOLD SMALL OMICRON;Ll;0;L; 03BF;;;;N;;;;; 1D6D1;MATHEMATICAL BOLD SMALL PI;Ll;0;L; 03C0;;;;N;;;;; 1D6D2;MATHEMATICAL BOLD SMALL RHO;Ll;0;L; 03C1;;;;N;;;;; 1D6D3;MATHEMATICAL BOLD SMALL FINAL SIGMA;Ll;0;L; 03C2;;;;N;;;;; 1D6D4;MATHEMATICAL BOLD SMALL SIGMA;Ll;0;L; 03C3;;;;N;;;;; 1D6D5;MATHEMATICAL BOLD SMALL TAU;Ll;0;L; 03C4;;;;N;;;;; 1D6D6;MATHEMATICAL BOLD SMALL UPSILON;Ll;0;L; 03C5;;;;N;;;;; 1D6D7;MATHEMATICAL BOLD SMALL PHI;Ll;0;L; 03C6;;;;N;;;;; 1D6D8;MATHEMATICAL BOLD SMALL CHI;Ll;0;L; 03C7;;;;N;;;;; 1D6D9;MATHEMATICAL BOLD SMALL PSI;Ll;0;L; 03C8;;;;N;;;;; 1D6DA;MATHEMATICAL BOLD SMALL OMEGA;Ll;0;L; 03C9;;;;N;;;;; 1D6DB;MATHEMATICAL BOLD PARTIAL DIFFERENTIAL;Sm;0;ON; 2202;;;;Y;;;;; 1D6DC;MATHEMATICAL BOLD EPSILON SYMBOL;Ll;0;L; 03F5;;;;N;;;;; 1D6DD;MATHEMATICAL BOLD THETA SYMBOL;Ll;0;L; 03D1;;;;N;;;;; 1D6DE;MATHEMATICAL BOLD KAPPA SYMBOL;Ll;0;L; 03F0;;;;N;;;;; 1D6DF;MATHEMATICAL BOLD PHI SYMBOL;Ll;0;L; 03D5;;;;N;;;;; 1D6E0;MATHEMATICAL BOLD RHO SYMBOL;Ll;0;L; 03F1;;;;N;;;;; 1D6E1;MATHEMATICAL BOLD PI SYMBOL;Ll;0;L; 03D6;;;;N;;;;; 1D6E2;MATHEMATICAL ITALIC CAPITAL ALPHA;Lu;0;L; 0391;;;;N;;;;; 1D6E3;MATHEMATICAL ITALIC CAPITAL BETA;Lu;0;L; 0392;;;;N;;;;; 1D6E4;MATHEMATICAL ITALIC CAPITAL GAMMA;Lu;0;L; 0393;;;;N;;;;; 1D6E5;MATHEMATICAL ITALIC CAPITAL DELTA;Lu;0;L; 0394;;;;N;;;;; 1D6E6;MATHEMATICAL ITALIC CAPITAL EPSILON;Lu;0;L; 0395;;;;N;;;;; 1D6E7;MATHEMATICAL ITALIC CAPITAL ZETA;Lu;0;L; 0396;;;;N;;;;; 1D6E8;MATHEMATICAL ITALIC CAPITAL ETA;Lu;0;L; 0397;;;;N;;;;; 1D6E9;MATHEMATICAL ITALIC CAPITAL THETA;Lu;0;L; 0398;;;;N;;;;; 1D6EA;MATHEMATICAL ITALIC CAPITAL IOTA;Lu;0;L; 0399;;;;N;;;;; 1D6EB;MATHEMATICAL ITALIC CAPITAL KAPPA;Lu;0;L; 039A;;;;N;;;;; 1D6EC;MATHEMATICAL ITALIC CAPITAL LAMDA;Lu;0;L; 039B;;;;N;;;;; 1D6ED;MATHEMATICAL ITALIC CAPITAL MU;Lu;0;L; 039C;;;;N;;;;; 1D6EE;MATHEMATICAL ITALIC CAPITAL NU;Lu;0;L; 039D;;;;N;;;;; 1D6EF;MATHEMATICAL ITALIC CAPITAL XI;Lu;0;L; 039E;;;;N;;;;; 1D6F0;MATHEMATICAL ITALIC CAPITAL OMICRON;Lu;0;L; 039F;;;;N;;;;; 1D6F1;MATHEMATICAL ITALIC CAPITAL PI;Lu;0;L; 03A0;;;;N;;;;; 1D6F2;MATHEMATICAL ITALIC CAPITAL RHO;Lu;0;L; 03A1;;;;N;;;;; 1D6F3;MATHEMATICAL ITALIC CAPITAL THETA SYMBOL;Lu;0;L; 03F4;;;;N;;;;; 1D6F4;MATHEMATICAL ITALIC CAPITAL SIGMA;Lu;0;L; 03A3;;;;N;;;;; 1D6F5;MATHEMATICAL ITALIC CAPITAL TAU;Lu;0;L; 03A4;;;;N;;;;; 1D6F6;MATHEMATICAL ITALIC CAPITAL UPSILON;Lu;0;L; 03A5;;;;N;;;;; 1D6F7;MATHEMATICAL ITALIC CAPITAL PHI;Lu;0;L; 03A6;;;;N;;;;; 1D6F8;MATHEMATICAL ITALIC CAPITAL CHI;Lu;0;L; 03A7;;;;N;;;;; 1D6F9;MATHEMATICAL ITALIC CAPITAL PSI;Lu;0;L; 03A8;;;;N;;;;; 1D6FA;MATHEMATICAL ITALIC CAPITAL OMEGA;Lu;0;L; 03A9;;;;N;;;;; 1D6FB;MATHEMATICAL ITALIC NABLA;Sm;0;L; 2207;;;;N;;;;; 1D6FC;MATHEMATICAL ITALIC SMALL ALPHA;Ll;0;L; 03B1;;;;N;;;;; 1D6FD;MATHEMATICAL ITALIC SMALL BETA;Ll;0;L; 03B2;;;;N;;;;; 1D6FE;MATHEMATICAL ITALIC SMALL GAMMA;Ll;0;L; 03B3;;;;N;;;;; 1D6FF;MATHEMATICAL ITALIC SMALL DELTA;Ll;0;L; 03B4;;;;N;;;;; 1D700;MATHEMATICAL ITALIC SMALL EPSILON;Ll;0;L; 03B5;;;;N;;;;; 1D701;MATHEMATICAL ITALIC SMALL ZETA;Ll;0;L; 03B6;;;;N;;;;; 1D702;MATHEMATICAL ITALIC SMALL ETA;Ll;0;L; 03B7;;;;N;;;;; 1D703;MATHEMATICAL ITALIC SMALL THETA;Ll;0;L; 03B8;;;;N;;;;; 1D704;MATHEMATICAL ITALIC SMALL IOTA;Ll;0;L; 03B9;;;;N;;;;; 1D705;MATHEMATICAL ITALIC SMALL KAPPA;Ll;0;L; 03BA;;;;N;;;;; 1D706;MATHEMATICAL ITALIC SMALL LAMDA;Ll;0;L; 03BB;;;;N;;;;; 1D707;MATHEMATICAL ITALIC SMALL MU;Ll;0;L; 03BC;;;;N;;;;; 1D708;MATHEMATICAL ITALIC SMALL NU;Ll;0;L; 03BD;;;;N;;;;; 1D709;MATHEMATICAL ITALIC SMALL XI;Ll;0;L; 03BE;;;;N;;;;; 1D70A;MATHEMATICAL ITALIC SMALL OMICRON;Ll;0;L; 03BF;;;;N;;;;; 1D70B;MATHEMATICAL ITALIC SMALL PI;Ll;0;L; 03C0;;;;N;;;;; 1D70C;MATHEMATICAL ITALIC SMALL RHO;Ll;0;L; 03C1;;;;N;;;;; 1D70D;MATHEMATICAL ITALIC SMALL FINAL SIGMA;Ll;0;L; 03C2;;;;N;;;;; 1D70E;MATHEMATICAL ITALIC SMALL SIGMA;Ll;0;L; 03C3;;;;N;;;;; 1D70F;MATHEMATICAL ITALIC SMALL TAU;Ll;0;L; 03C4;;;;N;;;;; 1D710;MATHEMATICAL ITALIC SMALL UPSILON;Ll;0;L; 03C5;;;;N;;;;; 1D711;MATHEMATICAL ITALIC SMALL PHI;Ll;0;L; 03C6;;;;N;;;;; 1D712;MATHEMATICAL ITALIC SMALL CHI;Ll;0;L; 03C7;;;;N;;;;; 1D713;MATHEMATICAL ITALIC SMALL PSI;Ll;0;L; 03C8;;;;N;;;;; 1D714;MATHEMATICAL ITALIC SMALL OMEGA;Ll;0;L; 03C9;;;;N;;;;; 1D715;MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL;Sm;0;ON; 2202;;;;Y;;;;; 1D716;MATHEMATICAL ITALIC EPSILON SYMBOL;Ll;0;L; 03F5;;;;N;;;;; 1D717;MATHEMATICAL ITALIC THETA SYMBOL;Ll;0;L; 03D1;;;;N;;;;; 1D718;MATHEMATICAL ITALIC KAPPA SYMBOL;Ll;0;L; 03F0;;;;N;;;;; 1D719;MATHEMATICAL ITALIC PHI SYMBOL;Ll;0;L; 03D5;;;;N;;;;; 1D71A;MATHEMATICAL ITALIC RHO SYMBOL;Ll;0;L; 03F1;;;;N;;;;; 1D71B;MATHEMATICAL ITALIC PI SYMBOL;Ll;0;L; 03D6;;;;N;;;;; 1D71C;MATHEMATICAL BOLD ITALIC CAPITAL ALPHA;Lu;0;L; 0391;;;;N;;;;; 1D71D;MATHEMATICAL BOLD ITALIC CAPITAL BETA;Lu;0;L; 0392;;;;N;;;;; 1D71E;MATHEMATICAL BOLD ITALIC CAPITAL GAMMA;Lu;0;L; 0393;;;;N;;;;; 1D71F;MATHEMATICAL BOLD ITALIC CAPITAL DELTA;Lu;0;L; 0394;;;;N;;;;; 1D720;MATHEMATICAL BOLD ITALIC CAPITAL EPSILON;Lu;0;L; 0395;;;;N;;;;; 1D721;MATHEMATICAL BOLD ITALIC CAPITAL ZETA;Lu;0;L; 0396;;;;N;;;;; 1D722;MATHEMATICAL BOLD ITALIC CAPITAL ETA;Lu;0;L; 0397;;;;N;;;;; 1D723;MATHEMATICAL BOLD ITALIC CAPITAL THETA;Lu;0;L; 0398;;;;N;;;;; 1D724;MATHEMATICAL BOLD ITALIC CAPITAL IOTA;Lu;0;L; 0399;;;;N;;;;; 1D725;MATHEMATICAL BOLD ITALIC CAPITAL KAPPA;Lu;0;L; 039A;;;;N;;;;; 1D726;MATHEMATICAL BOLD ITALIC CAPITAL LAMDA;Lu;0;L; 039B;;;;N;;;;; 1D727;MATHEMATICAL BOLD ITALIC CAPITAL MU;Lu;0;L; 039C;;;;N;;;;; 1D728;MATHEMATICAL BOLD ITALIC CAPITAL NU;Lu;0;L; 039D;;;;N;;;;; 1D729;MATHEMATICAL BOLD ITALIC CAPITAL XI;Lu;0;L; 039E;;;;N;;;;; 1D72A;MATHEMATICAL BOLD ITALIC CAPITAL OMICRON;Lu;0;L; 039F;;;;N;;;;; 1D72B;MATHEMATICAL BOLD ITALIC CAPITAL PI;Lu;0;L; 03A0;;;;N;;;;; 1D72C;MATHEMATICAL BOLD ITALIC CAPITAL RHO;Lu;0;L; 03A1;;;;N;;;;; 1D72D;MATHEMATICAL BOLD ITALIC CAPITAL THETA SYMBOL;Lu;0;L; 03F4;;;;N;;;;; 1D72E;MATHEMATICAL BOLD ITALIC CAPITAL SIGMA;Lu;0;L; 03A3;;;;N;;;;; 1D72F;MATHEMATICAL BOLD ITALIC CAPITAL TAU;Lu;0;L; 03A4;;;;N;;;;; 1D730;MATHEMATICAL BOLD ITALIC CAPITAL UPSILON;Lu;0;L; 03A5;;;;N;;;;; 1D731;MATHEMATICAL BOLD ITALIC CAPITAL PHI;Lu;0;L; 03A6;;;;N;;;;; 1D732;MATHEMATICAL BOLD ITALIC CAPITAL CHI;Lu;0;L; 03A7;;;;N;;;;; 1D733;MATHEMATICAL BOLD ITALIC CAPITAL PSI;Lu;0;L; 03A8;;;;N;;;;; 1D734;MATHEMATICAL BOLD ITALIC CAPITAL OMEGA;Lu;0;L; 03A9;;;;N;;;;; 1D735;MATHEMATICAL BOLD ITALIC NABLA;Sm;0;L; 2207;;;;N;;;;; 1D736;MATHEMATICAL BOLD ITALIC SMALL ALPHA;Ll;0;L; 03B1;;;;N;;;;; 1D737;MATHEMATICAL BOLD ITALIC SMALL BETA;Ll;0;L; 03B2;;;;N;;;;; 1D738;MATHEMATICAL BOLD ITALIC SMALL GAMMA;Ll;0;L; 03B3;;;;N;;;;; 1D739;MATHEMATICAL BOLD ITALIC SMALL DELTA;Ll;0;L; 03B4;;;;N;;;;; 1D73A;MATHEMATICAL BOLD ITALIC SMALL EPSILON;Ll;0;L; 03B5;;;;N;;;;; 1D73B;MATHEMATICAL BOLD ITALIC SMALL ZETA;Ll;0;L; 03B6;;;;N;;;;; 1D73C;MATHEMATICAL BOLD ITALIC SMALL ETA;Ll;0;L; 03B7;;;;N;;;;; 1D73D;MATHEMATICAL BOLD ITALIC SMALL THETA;Ll;0;L; 03B8;;;;N;;;;; 1D73E;MATHEMATICAL BOLD ITALIC SMALL IOTA;Ll;0;L; 03B9;;;;N;;;;; 1D73F;MATHEMATICAL BOLD ITALIC SMALL KAPPA;Ll;0;L; 03BA;;;;N;;;;; 1D740;MATHEMATICAL BOLD ITALIC SMALL LAMDA;Ll;0;L; 03BB;;;;N;;;;; 1D741;MATHEMATICAL BOLD ITALIC SMALL MU;Ll;0;L; 03BC;;;;N;;;;; 1D742;MATHEMATICAL BOLD ITALIC SMALL NU;Ll;0;L; 03BD;;;;N;;;;; 1D743;MATHEMATICAL BOLD ITALIC SMALL XI;Ll;0;L; 03BE;;;;N;;;;; 1D744;MATHEMATICAL BOLD ITALIC SMALL OMICRON;Ll;0;L; 03BF;;;;N;;;;; 1D745;MATHEMATICAL BOLD ITALIC SMALL PI;Ll;0;L; 03C0;;;;N;;;;; 1D746;MATHEMATICAL BOLD ITALIC SMALL RHO;Ll;0;L; 03C1;;;;N;;;;; 1D747;MATHEMATICAL BOLD ITALIC SMALL FINAL SIGMA;Ll;0;L; 03C2;;;;N;;;;; 1D748;MATHEMATICAL BOLD ITALIC SMALL SIGMA;Ll;0;L; 03C3;;;;N;;;;; 1D749;MATHEMATICAL BOLD ITALIC SMALL TAU;Ll;0;L; 03C4;;;;N;;;;; 1D74A;MATHEMATICAL BOLD ITALIC SMALL UPSILON;Ll;0;L; 03C5;;;;N;;;;; 1D74B;MATHEMATICAL BOLD ITALIC SMALL PHI;Ll;0;L; 03C6;;;;N;;;;; 1D74C;MATHEMATICAL BOLD ITALIC SMALL CHI;Ll;0;L; 03C7;;;;N;;;;; 1D74D;MATHEMATICAL BOLD ITALIC SMALL PSI;Ll;0;L; 03C8;;;;N;;;;; 1D74E;MATHEMATICAL BOLD ITALIC SMALL OMEGA;Ll;0;L; 03C9;;;;N;;;;; 1D74F;MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL;Sm;0;ON; 2202;;;;Y;;;;; 1D750;MATHEMATICAL BOLD ITALIC EPSILON SYMBOL;Ll;0;L; 03F5;;;;N;;;;; 1D751;MATHEMATICAL BOLD ITALIC THETA SYMBOL;Ll;0;L; 03D1;;;;N;;;;; 1D752;MATHEMATICAL BOLD ITALIC KAPPA SYMBOL;Ll;0;L; 03F0;;;;N;;;;; 1D753;MATHEMATICAL BOLD ITALIC PHI SYMBOL;Ll;0;L; 03D5;;;;N;;;;; 1D754;MATHEMATICAL BOLD ITALIC RHO SYMBOL;Ll;0;L; 03F1;;;;N;;;;; 1D755;MATHEMATICAL BOLD ITALIC PI SYMBOL;Ll;0;L; 03D6;;;;N;;;;; 1D756;MATHEMATICAL SANS-SERIF BOLD CAPITAL ALPHA;Lu;0;L; 0391;;;;N;;;;; 1D757;MATHEMATICAL SANS-SERIF BOLD CAPITAL BETA;Lu;0;L; 0392;;;;N;;;;; 1D758;MATHEMATICAL SANS-SERIF BOLD CAPITAL GAMMA;Lu;0;L; 0393;;;;N;;;;; 1D759;MATHEMATICAL SANS-SERIF BOLD CAPITAL DELTA;Lu;0;L; 0394;;;;N;;;;; 1D75A;MATHEMATICAL SANS-SERIF BOLD CAPITAL EPSILON;Lu;0;L; 0395;;;;N;;;;; 1D75B;MATHEMATICAL SANS-SERIF BOLD CAPITAL ZETA;Lu;0;L; 0396;;;;N;;;;; 1D75C;MATHEMATICAL SANS-SERIF BOLD CAPITAL ETA;Lu;0;L; 0397;;;;N;;;;; 1D75D;MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA;Lu;0;L; 0398;;;;N;;;;; 1D75E;MATHEMATICAL SANS-SERIF BOLD CAPITAL IOTA;Lu;0;L; 0399;;;;N;;;;; 1D75F;MATHEMATICAL SANS-SERIF BOLD CAPITAL KAPPA;Lu;0;L; 039A;;;;N;;;;; 1D760;MATHEMATICAL SANS-SERIF BOLD CAPITAL LAMDA;Lu;0;L; 039B;;;;N;;;;; 1D761;MATHEMATICAL SANS-SERIF BOLD CAPITAL MU;Lu;0;L; 039C;;;;N;;;;; 1D762;MATHEMATICAL SANS-SERIF BOLD CAPITAL NU;Lu;0;L; 039D;;;;N;;;;; 1D763;MATHEMATICAL SANS-SERIF BOLD CAPITAL XI;Lu;0;L; 039E;;;;N;;;;; 1D764;MATHEMATICAL SANS-SERIF BOLD CAPITAL OMICRON;Lu;0;L; 039F;;;;N;;;;; 1D765;MATHEMATICAL SANS-SERIF BOLD CAPITAL PI;Lu;0;L; 03A0;;;;N;;;;; 1D766;MATHEMATICAL SANS-SERIF BOLD CAPITAL RHO;Lu;0;L; 03A1;;;;N;;;;; 1D767;MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA SYMBOL;Lu;0;L; 03F4;;;;N;;;;; 1D768;MATHEMATICAL SANS-SERIF BOLD CAPITAL SIGMA;Lu;0;L; 03A3;;;;N;;;;; 1D769;MATHEMATICAL SANS-SERIF BOLD CAPITAL TAU;Lu;0;L; 03A4;;;;N;;;;; 1D76A;MATHEMATICAL SANS-SERIF BOLD CAPITAL UPSILON;Lu;0;L; 03A5;;;;N;;;;; 1D76B;MATHEMATICAL SANS-SERIF BOLD CAPITAL PHI;Lu;0;L; 03A6;;;;N;;;;; 1D76C;MATHEMATICAL SANS-SERIF BOLD CAPITAL CHI;Lu;0;L; 03A7;;;;N;;;;; 1D76D;MATHEMATICAL SANS-SERIF BOLD CAPITAL PSI;Lu;0;L; 03A8;;;;N;;;;; 1D76E;MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA;Lu;0;L; 03A9;;;;N;;;;; 1D76F;MATHEMATICAL SANS-SERIF BOLD NABLA;Sm;0;L; 2207;;;;N;;;;; 1D770;MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA;Ll;0;L; 03B1;;;;N;;;;; 1D771;MATHEMATICAL SANS-SERIF BOLD SMALL BETA;Ll;0;L; 03B2;;;;N;;;;; 1D772;MATHEMATICAL SANS-SERIF BOLD SMALL GAMMA;Ll;0;L; 03B3;;;;N;;;;; 1D773;MATHEMATICAL SANS-SERIF BOLD SMALL DELTA;Ll;0;L; 03B4;;;;N;;;;; 1D774;MATHEMATICAL SANS-SERIF BOLD SMALL EPSILON;Ll;0;L; 03B5;;;;N;;;;; 1D775;MATHEMATICAL SANS-SERIF BOLD SMALL ZETA;Ll;0;L; 03B6;;;;N;;;;; 1D776;MATHEMATICAL SANS-SERIF BOLD SMALL ETA;Ll;0;L; 03B7;;;;N;;;;; 1D777;MATHEMATICAL SANS-SERIF BOLD SMALL THETA;Ll;0;L; 03B8;;;;N;;;;; 1D778;MATHEMATICAL SANS-SERIF BOLD SMALL IOTA;Ll;0;L; 03B9;;;;N;;;;; 1D779;MATHEMATICAL SANS-SERIF BOLD SMALL KAPPA;Ll;0;L; 03BA;;;;N;;;;; 1D77A;MATHEMATICAL SANS-SERIF BOLD SMALL LAMDA;Ll;0;L; 03BB;;;;N;;;;; 1D77B;MATHEMATICAL SANS-SERIF BOLD SMALL MU;Ll;0;L; 03BC;;;;N;;;;; 1D77C;MATHEMATICAL SANS-SERIF BOLD SMALL NU;Ll;0;L; 03BD;;;;N;;;;; 1D77D;MATHEMATICAL SANS-SERIF BOLD SMALL XI;Ll;0;L; 03BE;;;;N;;;;; 1D77E;MATHEMATICAL SANS-SERIF BOLD SMALL OMICRON;Ll;0;L; 03BF;;;;N;;;;; 1D77F;MATHEMATICAL SANS-SERIF BOLD SMALL PI;Ll;0;L; 03C0;;;;N;;;;; 1D780;MATHEMATICAL SANS-SERIF BOLD SMALL RHO;Ll;0;L; 03C1;;;;N;;;;; 1D781;MATHEMATICAL SANS-SERIF BOLD SMALL FINAL SIGMA;Ll;0;L; 03C2;;;;N;;;;; 1D782;MATHEMATICAL SANS-SERIF BOLD SMALL SIGMA;Ll;0;L; 03C3;;;;N;;;;; 1D783;MATHEMATICAL SANS-SERIF BOLD SMALL TAU;Ll;0;L; 03C4;;;;N;;;;; 1D784;MATHEMATICAL SANS-SERIF BOLD SMALL UPSILON;Ll;0;L; 03C5;;;;N;;;;; 1D785;MATHEMATICAL SANS-SERIF BOLD SMALL PHI;Ll;0;L; 03C6;;;;N;;;;; 1D786;MATHEMATICAL SANS-SERIF BOLD SMALL CHI;Ll;0;L; 03C7;;;;N;;;;; 1D787;MATHEMATICAL SANS-SERIF BOLD SMALL PSI;Ll;0;L; 03C8;;;;N;;;;; 1D788;MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA;Ll;0;L; 03C9;;;;N;;;;; 1D789;MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL;Sm;0;ON; 2202;;;;Y;;;;; 1D78A;MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL;Ll;0;L; 03F5;;;;N;;;;; 1D78B;MATHEMATICAL SANS-SERIF BOLD THETA SYMBOL;Ll;0;L; 03D1;;;;N;;;;; 1D78C;MATHEMATICAL SANS-SERIF BOLD KAPPA SYMBOL;Ll;0;L; 03F0;;;;N;;;;; 1D78D;MATHEMATICAL SANS-SERIF BOLD PHI SYMBOL;Ll;0;L; 03D5;;;;N;;;;; 1D78E;MATHEMATICAL SANS-SERIF BOLD RHO SYMBOL;Ll;0;L; 03F1;;;;N;;;;; 1D78F;MATHEMATICAL SANS-SERIF BOLD PI SYMBOL;Ll;0;L; 03D6;;;;N;;;;; 1D790;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ALPHA;Lu;0;L; 0391;;;;N;;;;; 1D791;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL BETA;Lu;0;L; 0392;;;;N;;;;; 1D792;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL GAMMA;Lu;0;L; 0393;;;;N;;;;; 1D793;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL DELTA;Lu;0;L; 0394;;;;N;;;;; 1D794;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL EPSILON;Lu;0;L; 0395;;;;N;;;;; 1D795;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ZETA;Lu;0;L; 0396;;;;N;;;;; 1D796;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ETA;Lu;0;L; 0397;;;;N;;;;; 1D797;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA;Lu;0;L; 0398;;;;N;;;;; 1D798;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL IOTA;Lu;0;L; 0399;;;;N;;;;; 1D799;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL KAPPA;Lu;0;L; 039A;;;;N;;;;; 1D79A;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL LAMDA;Lu;0;L; 039B;;;;N;;;;; 1D79B;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL MU;Lu;0;L; 039C;;;;N;;;;; 1D79C;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL NU;Lu;0;L; 039D;;;;N;;;;; 1D79D;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL XI;Lu;0;L; 039E;;;;N;;;;; 1D79E;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMICRON;Lu;0;L; 039F;;;;N;;;;; 1D79F;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PI;Lu;0;L; 03A0;;;;N;;;;; 1D7A0;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL RHO;Lu;0;L; 03A1;;;;N;;;;; 1D7A1;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA SYMBOL;Lu;0;L; 03F4;;;;N;;;;; 1D7A2;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL SIGMA;Lu;0;L; 03A3;;;;N;;;;; 1D7A3;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL TAU;Lu;0;L; 03A4;;;;N;;;;; 1D7A4;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL UPSILON;Lu;0;L; 03A5;;;;N;;;;; 1D7A5;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PHI;Lu;0;L; 03A6;;;;N;;;;; 1D7A6;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL CHI;Lu;0;L; 03A7;;;;N;;;;; 1D7A7;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PSI;Lu;0;L; 03A8;;;;N;;;;; 1D7A8;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA;Lu;0;L; 03A9;;;;N;;;;; 1D7A9;MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA;Sm;0;L; 2207;;;;N;;;;; 1D7AA;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA;Ll;0;L; 03B1;;;;N;;;;; 1D7AB;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL BETA;Ll;0;L; 03B2;;;;N;;;;; 1D7AC;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL GAMMA;Ll;0;L; 03B3;;;;N;;;;; 1D7AD;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL DELTA;Ll;0;L; 03B4;;;;N;;;;; 1D7AE;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL EPSILON;Ll;0;L; 03B5;;;;N;;;;; 1D7AF;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ZETA;Ll;0;L; 03B6;;;;N;;;;; 1D7B0;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ETA;Ll;0;L; 03B7;;;;N;;;;; 1D7B1;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL THETA;Ll;0;L; 03B8;;;;N;;;;; 1D7B2;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL IOTA;Ll;0;L; 03B9;;;;N;;;;; 1D7B3;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL KAPPA;Ll;0;L; 03BA;;;;N;;;;; 1D7B4;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL LAMDA;Ll;0;L; 03BB;;;;N;;;;; 1D7B5;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL MU;Ll;0;L; 03BC;;;;N;;;;; 1D7B6;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL NU;Ll;0;L; 03BD;;;;N;;;;; 1D7B7;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL XI;Ll;0;L; 03BE;;;;N;;;;; 1D7B8;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMICRON;Ll;0;L; 03BF;;;;N;;;;; 1D7B9;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PI;Ll;0;L; 03C0;;;;N;;;;; 1D7BA;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL RHO;Ll;0;L; 03C1;;;;N;;;;; 1D7BB;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL FINAL SIGMA;Ll;0;L; 03C2;;;;N;;;;; 1D7BC;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL SIGMA;Ll;0;L; 03C3;;;;N;;;;; 1D7BD;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL TAU;Ll;0;L; 03C4;;;;N;;;;; 1D7BE;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL UPSILON;Ll;0;L; 03C5;;;;N;;;;; 1D7BF;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PHI;Ll;0;L; 03C6;;;;N;;;;; 1D7C0;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL CHI;Ll;0;L; 03C7;;;;N;;;;; 1D7C1;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PSI;Ll;0;L; 03C8;;;;N;;;;; 1D7C2;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA;Ll;0;L; 03C9;;;;N;;;;; 1D7C3;MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL;Sm;0;ON; 2202;;;;Y;;;;; 1D7C4;MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL;Ll;0;L; 03F5;;;;N;;;;; 1D7C5;MATHEMATICAL SANS-SERIF BOLD ITALIC THETA SYMBOL;Ll;0;L; 03D1;;;;N;;;;; 1D7C6;MATHEMATICAL SANS-SERIF BOLD ITALIC KAPPA SYMBOL;Ll;0;L; 03F0;;;;N;;;;; 1D7C7;MATHEMATICAL SANS-SERIF BOLD ITALIC PHI SYMBOL;Ll;0;L; 03D5;;;;N;;;;; 1D7C8;MATHEMATICAL SANS-SERIF BOLD ITALIC RHO SYMBOL;Ll;0;L; 03F1;;;;N;;;;; 1D7C9;MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL;Ll;0;L; 03D6;;;;N;;;;; 1D7CA;MATHEMATICAL BOLD CAPITAL DIGAMMA;Lu;0;L; 03DC;;;;N;;;;; 1D7CB;MATHEMATICAL BOLD SMALL DIGAMMA;Ll;0;L; 03DD;;;;N;;;;; 1D7CE;MATHEMATICAL BOLD DIGIT ZERO;Nd;0;EN; 0030;0;0;0;N;;;;; 1D7CF;MATHEMATICAL BOLD DIGIT ONE;Nd;0;EN; 0031;1;1;1;N;;;;; 1D7D0;MATHEMATICAL BOLD DIGIT TWO;Nd;0;EN; 0032;2;2;2;N;;;;; 1D7D1;MATHEMATICAL BOLD DIGIT THREE;Nd;0;EN; 0033;3;3;3;N;;;;; 1D7D2;MATHEMATICAL BOLD DIGIT FOUR;Nd;0;EN; 0034;4;4;4;N;;;;; 1D7D3;MATHEMATICAL BOLD DIGIT FIVE;Nd;0;EN; 0035;5;5;5;N;;;;; 1D7D4;MATHEMATICAL BOLD DIGIT SIX;Nd;0;EN; 0036;6;6;6;N;;;;; 1D7D5;MATHEMATICAL BOLD DIGIT SEVEN;Nd;0;EN; 0037;7;7;7;N;;;;; 1D7D6;MATHEMATICAL BOLD DIGIT EIGHT;Nd;0;EN; 0038;8;8;8;N;;;;; 1D7D7;MATHEMATICAL BOLD DIGIT NINE;Nd;0;EN; 0039;9;9;9;N;;;;; 1D7D8;MATHEMATICAL DOUBLE-STRUCK DIGIT ZERO;Nd;0;EN; 0030;0;0;0;N;;;;; 1D7D9;MATHEMATICAL DOUBLE-STRUCK DIGIT ONE;Nd;0;EN; 0031;1;1;1;N;;;;; 1D7DA;MATHEMATICAL DOUBLE-STRUCK DIGIT TWO;Nd;0;EN; 0032;2;2;2;N;;;;; 1D7DB;MATHEMATICAL DOUBLE-STRUCK DIGIT THREE;Nd;0;EN; 0033;3;3;3;N;;;;; 1D7DC;MATHEMATICAL DOUBLE-STRUCK DIGIT FOUR;Nd;0;EN; 0034;4;4;4;N;;;;; 1D7DD;MATHEMATICAL DOUBLE-STRUCK DIGIT FIVE;Nd;0;EN; 0035;5;5;5;N;;;;; 1D7DE;MATHEMATICAL DOUBLE-STRUCK DIGIT SIX;Nd;0;EN; 0036;6;6;6;N;;;;; 1D7DF;MATHEMATICAL DOUBLE-STRUCK DIGIT SEVEN;Nd;0;EN; 0037;7;7;7;N;;;;; 1D7E0;MATHEMATICAL DOUBLE-STRUCK DIGIT EIGHT;Nd;0;EN; 0038;8;8;8;N;;;;; 1D7E1;MATHEMATICAL DOUBLE-STRUCK DIGIT NINE;Nd;0;EN; 0039;9;9;9;N;;;;; 1D7E2;MATHEMATICAL SANS-SERIF DIGIT ZERO;Nd;0;EN; 0030;0;0;0;N;;;;; 1D7E3;MATHEMATICAL SANS-SERIF DIGIT ONE;Nd;0;EN; 0031;1;1;1;N;;;;; 1D7E4;MATHEMATICAL SANS-SERIF DIGIT TWO;Nd;0;EN; 0032;2;2;2;N;;;;; 1D7E5;MATHEMATICAL SANS-SERIF DIGIT THREE;Nd;0;EN; 0033;3;3;3;N;;;;; 1D7E6;MATHEMATICAL SANS-SERIF DIGIT FOUR;Nd;0;EN; 0034;4;4;4;N;;;;; 1D7E7;MATHEMATICAL SANS-SERIF DIGIT FIVE;Nd;0;EN; 0035;5;5;5;N;;;;; 1D7E8;MATHEMATICAL SANS-SERIF DIGIT SIX;Nd;0;EN; 0036;6;6;6;N;;;;; 1D7E9;MATHEMATICAL SANS-SERIF DIGIT SEVEN;Nd;0;EN; 0037;7;7;7;N;;;;; 1D7EA;MATHEMATICAL SANS-SERIF DIGIT EIGHT;Nd;0;EN; 0038;8;8;8;N;;;;; 1D7EB;MATHEMATICAL SANS-SERIF DIGIT NINE;Nd;0;EN; 0039;9;9;9;N;;;;; 1D7EC;MATHEMATICAL SANS-SERIF BOLD DIGIT ZERO;Nd;0;EN; 0030;0;0;0;N;;;;; 1D7ED;MATHEMATICAL SANS-SERIF BOLD DIGIT ONE;Nd;0;EN; 0031;1;1;1;N;;;;; 1D7EE;MATHEMATICAL SANS-SERIF BOLD DIGIT TWO;Nd;0;EN; 0032;2;2;2;N;;;;; 1D7EF;MATHEMATICAL SANS-SERIF BOLD DIGIT THREE;Nd;0;EN; 0033;3;3;3;N;;;;; 1D7F0;MATHEMATICAL SANS-SERIF BOLD DIGIT FOUR;Nd;0;EN; 0034;4;4;4;N;;;;; 1D7F1;MATHEMATICAL SANS-SERIF BOLD DIGIT FIVE;Nd;0;EN; 0035;5;5;5;N;;;;; 1D7F2;MATHEMATICAL SANS-SERIF BOLD DIGIT SIX;Nd;0;EN; 0036;6;6;6;N;;;;; 1D7F3;MATHEMATICAL SANS-SERIF BOLD DIGIT SEVEN;Nd;0;EN; 0037;7;7;7;N;;;;; 1D7F4;MATHEMATICAL SANS-SERIF BOLD DIGIT EIGHT;Nd;0;EN; 0038;8;8;8;N;;;;; 1D7F5;MATHEMATICAL SANS-SERIF BOLD DIGIT NINE;Nd;0;EN; 0039;9;9;9;N;;;;; 1D7F6;MATHEMATICAL MONOSPACE DIGIT ZERO;Nd;0;EN; 0030;0;0;0;N;;;;; 1D7F7;MATHEMATICAL MONOSPACE DIGIT ONE;Nd;0;EN; 0031;1;1;1;N;;;;; 1D7F8;MATHEMATICAL MONOSPACE DIGIT TWO;Nd;0;EN; 0032;2;2;2;N;;;;; 1D7F9;MATHEMATICAL MONOSPACE DIGIT THREE;Nd;0;EN; 0033;3;3;3;N;;;;; 1D7FA;MATHEMATICAL MONOSPACE DIGIT FOUR;Nd;0;EN; 0034;4;4;4;N;;;;; 1D7FB;MATHEMATICAL MONOSPACE DIGIT FIVE;Nd;0;EN; 0035;5;5;5;N;;;;; 1D7FC;MATHEMATICAL MONOSPACE DIGIT SIX;Nd;0;EN; 0036;6;6;6;N;;;;; 1D7FD;MATHEMATICAL MONOSPACE DIGIT SEVEN;Nd;0;EN; 0037;7;7;7;N;;;;; 1D7FE;MATHEMATICAL MONOSPACE DIGIT EIGHT;Nd;0;EN; 0038;8;8;8;N;;;;; 1D7FF;MATHEMATICAL MONOSPACE DIGIT NINE;Nd;0;EN; 0039;9;9;9;N;;;;; 1D800;SIGNWRITING HAND-FIST INDEX;So;0;L;;;;;N;;;;; 1D801;SIGNWRITING HAND-CIRCLE INDEX;So;0;L;;;;;N;;;;; 1D802;SIGNWRITING HAND-CUP INDEX;So;0;L;;;;;N;;;;; 1D803;SIGNWRITING HAND-OVAL INDEX;So;0;L;;;;;N;;;;; 1D804;SIGNWRITING HAND-HINGE INDEX;So;0;L;;;;;N;;;;; 1D805;SIGNWRITING HAND-ANGLE INDEX;So;0;L;;;;;N;;;;; 1D806;SIGNWRITING HAND-FIST INDEX BENT;So;0;L;;;;;N;;;;; 1D807;SIGNWRITING HAND-CIRCLE INDEX BENT;So;0;L;;;;;N;;;;; 1D808;SIGNWRITING HAND-FIST THUMB UNDER INDEX BENT;So;0;L;;;;;N;;;;; 1D809;SIGNWRITING HAND-FIST INDEX RAISED KNUCKLE;So;0;L;;;;;N;;;;; 1D80A;SIGNWRITING HAND-FIST INDEX CUPPED;So;0;L;;;;;N;;;;; 1D80B;SIGNWRITING HAND-FIST INDEX HINGED;So;0;L;;;;;N;;;;; 1D80C;SIGNWRITING HAND-FIST INDEX HINGED LOW;So;0;L;;;;;N;;;;; 1D80D;SIGNWRITING HAND-CIRCLE INDEX HINGE;So;0;L;;;;;N;;;;; 1D80E;SIGNWRITING HAND-FIST INDEX MIDDLE;So;0;L;;;;;N;;;;; 1D80F;SIGNWRITING HAND-CIRCLE INDEX MIDDLE;So;0;L;;;;;N;;;;; 1D810;SIGNWRITING HAND-FIST INDEX MIDDLE BENT;So;0;L;;;;;N;;;;; 1D811;SIGNWRITING HAND-FIST INDEX MIDDLE RAISED KNUCKLES;So;0;L;;;;;N;;;;; 1D812;SIGNWRITING HAND-FIST INDEX MIDDLE HINGED;So;0;L;;;;;N;;;;; 1D813;SIGNWRITING HAND-FIST INDEX UP MIDDLE HINGED;So;0;L;;;;;N;;;;; 1D814;SIGNWRITING HAND-FIST INDEX HINGED MIDDLE UP;So;0;L;;;;;N;;;;; 1D815;SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED;So;0;L;;;;;N;;;;; 1D816;SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED INDEX BENT;So;0;L;;;;;N;;;;; 1D817;SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED MIDDLE BENT;So;0;L;;;;;N;;;;; 1D818;SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED CUPPED;So;0;L;;;;;N;;;;; 1D819;SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED HINGED;So;0;L;;;;;N;;;;; 1D81A;SIGNWRITING HAND-FIST INDEX MIDDLE CROSSED;So;0;L;;;;;N;;;;; 1D81B;SIGNWRITING HAND-CIRCLE INDEX MIDDLE CROSSED;So;0;L;;;;;N;;;;; 1D81C;SIGNWRITING HAND-FIST MIDDLE BENT OVER INDEX;So;0;L;;;;;N;;;;; 1D81D;SIGNWRITING HAND-FIST INDEX BENT OVER MIDDLE;So;0;L;;;;;N;;;;; 1D81E;SIGNWRITING HAND-FIST INDEX MIDDLE THUMB;So;0;L;;;;;N;;;;; 1D81F;SIGNWRITING HAND-CIRCLE INDEX MIDDLE THUMB;So;0;L;;;;;N;;;;; 1D820;SIGNWRITING HAND-FIST INDEX MIDDLE STRAIGHT THUMB BENT;So;0;L;;;;;N;;;;; 1D821;SIGNWRITING HAND-FIST INDEX MIDDLE BENT THUMB STRAIGHT;So;0;L;;;;;N;;;;; 1D822;SIGNWRITING HAND-FIST INDEX MIDDLE THUMB BENT;So;0;L;;;;;N;;;;; 1D823;SIGNWRITING HAND-FIST INDEX MIDDLE HINGED SPREAD THUMB SIDE;So;0;L;;;;;N;;;;; 1D824;SIGNWRITING HAND-FIST INDEX UP MIDDLE HINGED THUMB SIDE;So;0;L;;;;;N;;;;; 1D825;SIGNWRITING HAND-FIST INDEX UP MIDDLE HINGED THUMB CONJOINED;So;0;L;;;;;N;;;;; 1D826;SIGNWRITING HAND-FIST INDEX HINGED MIDDLE UP THUMB SIDE;So;0;L;;;;;N;;;;; 1D827;SIGNWRITING HAND-FIST INDEX MIDDLE UP SPREAD THUMB FORWARD;So;0;L;;;;;N;;;;; 1D828;SIGNWRITING HAND-FIST INDEX MIDDLE THUMB CUPPED;So;0;L;;;;;N;;;;; 1D829;SIGNWRITING HAND-FIST INDEX MIDDLE THUMB CIRCLED;So;0;L;;;;;N;;;;; 1D82A;SIGNWRITING HAND-FIST INDEX MIDDLE THUMB HOOKED;So;0;L;;;;;N;;;;; 1D82B;SIGNWRITING HAND-FIST INDEX MIDDLE THUMB HINGED;So;0;L;;;;;N;;;;; 1D82C;SIGNWRITING HAND-FIST THUMB BETWEEN INDEX MIDDLE STRAIGHT;So;0;L;;;;;N;;;;; 1D82D;SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED THUMB SIDE;So;0;L;;;;;N;;;;; 1D82E;SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED THUMB SIDE CONJOINED;So;0;L;;;;;N;;;;; 1D82F;SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED THUMB SIDE BENT;So;0;L;;;;;N;;;;; 1D830;SIGNWRITING HAND-FIST MIDDLE THUMB HOOKED INDEX UP;So;0;L;;;;;N;;;;; 1D831;SIGNWRITING HAND-FIST INDEX THUMB HOOKED MIDDLE UP;So;0;L;;;;;N;;;;; 1D832;SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED HINGED THUMB SIDE;So;0;L;;;;;N;;;;; 1D833;SIGNWRITING HAND-FIST INDEX MIDDLE CROSSED THUMB SIDE;So;0;L;;;;;N;;;;; 1D834;SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED THUMB FORWARD;So;0;L;;;;;N;;;;; 1D835;SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED CUPPED THUMB FORWARD;So;0;L;;;;;N;;;;; 1D836;SIGNWRITING HAND-FIST MIDDLE THUMB CUPPED INDEX UP;So;0;L;;;;;N;;;;; 1D837;SIGNWRITING HAND-FIST INDEX THUMB CUPPED MIDDLE UP;So;0;L;;;;;N;;;;; 1D838;SIGNWRITING HAND-FIST MIDDLE THUMB CIRCLED INDEX UP;So;0;L;;;;;N;;;;; 1D839;SIGNWRITING HAND-FIST MIDDLE THUMB CIRCLED INDEX HINGED;So;0;L;;;;;N;;;;; 1D83A;SIGNWRITING HAND-FIST INDEX THUMB ANGLED OUT MIDDLE UP;So;0;L;;;;;N;;;;; 1D83B;SIGNWRITING HAND-FIST INDEX THUMB ANGLED IN MIDDLE UP;So;0;L;;;;;N;;;;; 1D83C;SIGNWRITING HAND-FIST INDEX THUMB CIRCLED MIDDLE UP;So;0;L;;;;;N;;;;; 1D83D;SIGNWRITING HAND-FIST INDEX MIDDLE THUMB CONJOINED HINGED;So;0;L;;;;;N;;;;; 1D83E;SIGNWRITING HAND-FIST INDEX MIDDLE THUMB ANGLED OUT;So;0;L;;;;;N;;;;; 1D83F;SIGNWRITING HAND-FIST INDEX MIDDLE THUMB ANGLED;So;0;L;;;;;N;;;;; 1D840;SIGNWRITING HAND-FIST MIDDLE THUMB ANGLED OUT INDEX UP;So;0;L;;;;;N;;;;; 1D841;SIGNWRITING HAND-FIST MIDDLE THUMB ANGLED OUT INDEX CROSSED;So;0;L;;;;;N;;;;; 1D842;SIGNWRITING HAND-FIST MIDDLE THUMB ANGLED INDEX UP;So;0;L;;;;;N;;;;; 1D843;SIGNWRITING HAND-FIST INDEX THUMB HOOKED MIDDLE HINGED;So;0;L;;;;;N;;;;; 1D844;SIGNWRITING HAND-FLAT FOUR FINGERS;So;0;L;;;;;N;;;;; 1D845;SIGNWRITING HAND-FLAT FOUR FINGERS BENT;So;0;L;;;;;N;;;;; 1D846;SIGNWRITING HAND-FLAT FOUR FINGERS HINGED;So;0;L;;;;;N;;;;; 1D847;SIGNWRITING HAND-FLAT FOUR FINGERS CONJOINED;So;0;L;;;;;N;;;;; 1D848;SIGNWRITING HAND-FLAT FOUR FINGERS CONJOINED SPLIT;So;0;L;;;;;N;;;;; 1D849;SIGNWRITING HAND-CLAW FOUR FINGERS CONJOINED;So;0;L;;;;;N;;;;; 1D84A;SIGNWRITING HAND-FIST FOUR FINGERS CONJOINED BENT;So;0;L;;;;;N;;;;; 1D84B;SIGNWRITING HAND-HINGE FOUR FINGERS CONJOINED;So;0;L;;;;;N;;;;; 1D84C;SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD;So;0;L;;;;;N;;;;; 1D84D;SIGNWRITING HAND-FLAT HEEL FIVE FINGERS SPREAD;So;0;L;;;;;N;;;;; 1D84E;SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD FOUR BENT;So;0;L;;;;;N;;;;; 1D84F;SIGNWRITING HAND-FLAT HEEL FIVE FINGERS SPREAD FOUR BENT;So;0;L;;;;;N;;;;; 1D850;SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD BENT;So;0;L;;;;;N;;;;; 1D851;SIGNWRITING HAND-FLAT HEEL FIVE FINGERS SPREAD BENT;So;0;L;;;;;N;;;;; 1D852;SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD THUMB FORWARD;So;0;L;;;;;N;;;;; 1D853;SIGNWRITING HAND-CUP FIVE FINGERS SPREAD;So;0;L;;;;;N;;;;; 1D854;SIGNWRITING HAND-CUP FIVE FINGERS SPREAD OPEN;So;0;L;;;;;N;;;;; 1D855;SIGNWRITING HAND-HINGE FIVE FINGERS SPREAD OPEN;So;0;L;;;;;N;;;;; 1D856;SIGNWRITING HAND-OVAL FIVE FINGERS SPREAD;So;0;L;;;;;N;;;;; 1D857;SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD HINGED;So;0;L;;;;;N;;;;; 1D858;SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD HINGED THUMB SIDE;So;0;L;;;;;N;;;;; 1D859;SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD HINGED NO THUMB;So;0;L;;;;;N;;;;; 1D85A;SIGNWRITING HAND-FLAT;So;0;L;;;;;N;;;;; 1D85B;SIGNWRITING HAND-FLAT BETWEEN PALM FACINGS;So;0;L;;;;;N;;;;; 1D85C;SIGNWRITING HAND-FLAT HEEL;So;0;L;;;;;N;;;;; 1D85D;SIGNWRITING HAND-FLAT THUMB SIDE;So;0;L;;;;;N;;;;; 1D85E;SIGNWRITING HAND-FLAT HEEL THUMB SIDE;So;0;L;;;;;N;;;;; 1D85F;SIGNWRITING HAND-FLAT THUMB BENT;So;0;L;;;;;N;;;;; 1D860;SIGNWRITING HAND-FLAT THUMB FORWARD;So;0;L;;;;;N;;;;; 1D861;SIGNWRITING HAND-FLAT SPLIT INDEX THUMB SIDE;So;0;L;;;;;N;;;;; 1D862;SIGNWRITING HAND-FLAT SPLIT CENTRE;So;0;L;;;;;N;;;;; 1D863;SIGNWRITING HAND-FLAT SPLIT CENTRE THUMB SIDE;So;0;L;;;;;N;;;;; 1D864;SIGNWRITING HAND-FLAT SPLIT CENTRE THUMB SIDE BENT;So;0;L;;;;;N;;;;; 1D865;SIGNWRITING HAND-FLAT SPLIT LITTLE;So;0;L;;;;;N;;;;; 1D866;SIGNWRITING HAND-CLAW;So;0;L;;;;;N;;;;; 1D867;SIGNWRITING HAND-CLAW THUMB SIDE;So;0;L;;;;;N;;;;; 1D868;SIGNWRITING HAND-CLAW NO THUMB;So;0;L;;;;;N;;;;; 1D869;SIGNWRITING HAND-CLAW THUMB FORWARD;So;0;L;;;;;N;;;;; 1D86A;SIGNWRITING HAND-HOOK CURLICUE;So;0;L;;;;;N;;;;; 1D86B;SIGNWRITING HAND-HOOK;So;0;L;;;;;N;;;;; 1D86C;SIGNWRITING HAND-CUP OPEN;So;0;L;;;;;N;;;;; 1D86D;SIGNWRITING HAND-CUP;So;0;L;;;;;N;;;;; 1D86E;SIGNWRITING HAND-CUP OPEN THUMB SIDE;So;0;L;;;;;N;;;;; 1D86F;SIGNWRITING HAND-CUP THUMB SIDE;So;0;L;;;;;N;;;;; 1D870;SIGNWRITING HAND-CUP OPEN NO THUMB;So;0;L;;;;;N;;;;; 1D871;SIGNWRITING HAND-CUP NO THUMB;So;0;L;;;;;N;;;;; 1D872;SIGNWRITING HAND-CUP OPEN THUMB FORWARD;So;0;L;;;;;N;;;;; 1D873;SIGNWRITING HAND-CUP THUMB FORWARD;So;0;L;;;;;N;;;;; 1D874;SIGNWRITING HAND-CURLICUE OPEN;So;0;L;;;;;N;;;;; 1D875;SIGNWRITING HAND-CURLICUE;So;0;L;;;;;N;;;;; 1D876;SIGNWRITING HAND-CIRCLE;So;0;L;;;;;N;;;;; 1D877;SIGNWRITING HAND-OVAL;So;0;L;;;;;N;;;;; 1D878;SIGNWRITING HAND-OVAL THUMB SIDE;So;0;L;;;;;N;;;;; 1D879;SIGNWRITING HAND-OVAL NO THUMB;So;0;L;;;;;N;;;;; 1D87A;SIGNWRITING HAND-OVAL THUMB FORWARD;So;0;L;;;;;N;;;;; 1D87B;SIGNWRITING HAND-HINGE OPEN;So;0;L;;;;;N;;;;; 1D87C;SIGNWRITING HAND-HINGE OPEN THUMB FORWARD;So;0;L;;;;;N;;;;; 1D87D;SIGNWRITING HAND-HINGE;So;0;L;;;;;N;;;;; 1D87E;SIGNWRITING HAND-HINGE SMALL;So;0;L;;;;;N;;;;; 1D87F;SIGNWRITING HAND-HINGE OPEN THUMB SIDE;So;0;L;;;;;N;;;;; 1D880;SIGNWRITING HAND-HINGE THUMB SIDE;So;0;L;;;;;N;;;;; 1D881;SIGNWRITING HAND-HINGE OPEN NO THUMB;So;0;L;;;;;N;;;;; 1D882;SIGNWRITING HAND-HINGE NO THUMB;So;0;L;;;;;N;;;;; 1D883;SIGNWRITING HAND-HINGE THUMB SIDE TOUCHING INDEX;So;0;L;;;;;N;;;;; 1D884;SIGNWRITING HAND-HINGE THUMB BETWEEN MIDDLE RING;So;0;L;;;;;N;;;;; 1D885;SIGNWRITING HAND-ANGLE;So;0;L;;;;;N;;;;; 1D886;SIGNWRITING HAND-FIST INDEX MIDDLE RING;So;0;L;;;;;N;;;;; 1D887;SIGNWRITING HAND-CIRCLE INDEX MIDDLE RING;So;0;L;;;;;N;;;;; 1D888;SIGNWRITING HAND-HINGE INDEX MIDDLE RING;So;0;L;;;;;N;;;;; 1D889;SIGNWRITING HAND-ANGLE INDEX MIDDLE RING;So;0;L;;;;;N;;;;; 1D88A;SIGNWRITING HAND-HINGE LITTLE;So;0;L;;;;;N;;;;; 1D88B;SIGNWRITING HAND-FIST INDEX MIDDLE RING BENT;So;0;L;;;;;N;;;;; 1D88C;SIGNWRITING HAND-FIST INDEX MIDDLE RING CONJOINED;So;0;L;;;;;N;;;;; 1D88D;SIGNWRITING HAND-HINGE INDEX MIDDLE RING CONJOINED;So;0;L;;;;;N;;;;; 1D88E;SIGNWRITING HAND-FIST LITTLE DOWN;So;0;L;;;;;N;;;;; 1D88F;SIGNWRITING HAND-FIST LITTLE DOWN RIPPLE STRAIGHT;So;0;L;;;;;N;;;;; 1D890;SIGNWRITING HAND-FIST LITTLE DOWN RIPPLE CURVED;So;0;L;;;;;N;;;;; 1D891;SIGNWRITING HAND-FIST LITTLE DOWN OTHERS CIRCLED;So;0;L;;;;;N;;;;; 1D892;SIGNWRITING HAND-FIST LITTLE UP;So;0;L;;;;;N;;;;; 1D893;SIGNWRITING HAND-FIST THUMB UNDER LITTLE UP;So;0;L;;;;;N;;;;; 1D894;SIGNWRITING HAND-CIRCLE LITTLE UP;So;0;L;;;;;N;;;;; 1D895;SIGNWRITING HAND-OVAL LITTLE UP;So;0;L;;;;;N;;;;; 1D896;SIGNWRITING HAND-ANGLE LITTLE UP;So;0;L;;;;;N;;;;; 1D897;SIGNWRITING HAND-FIST LITTLE RAISED KNUCKLE;So;0;L;;;;;N;;;;; 1D898;SIGNWRITING HAND-FIST LITTLE BENT;So;0;L;;;;;N;;;;; 1D899;SIGNWRITING HAND-FIST LITTLE TOUCHES THUMB;So;0;L;;;;;N;;;;; 1D89A;SIGNWRITING HAND-FIST LITTLE THUMB;So;0;L;;;;;N;;;;; 1D89B;SIGNWRITING HAND-HINGE LITTLE THUMB;So;0;L;;;;;N;;;;; 1D89C;SIGNWRITING HAND-FIST LITTLE INDEX THUMB;So;0;L;;;;;N;;;;; 1D89D;SIGNWRITING HAND-HINGE LITTLE INDEX THUMB;So;0;L;;;;;N;;;;; 1D89E;SIGNWRITING HAND-ANGLE LITTLE INDEX THUMB INDEX THUMB OUT;So;0;L;;;;;N;;;;; 1D89F;SIGNWRITING HAND-ANGLE LITTLE INDEX THUMB INDEX THUMB;So;0;L;;;;;N;;;;; 1D8A0;SIGNWRITING HAND-FIST LITTLE INDEX;So;0;L;;;;;N;;;;; 1D8A1;SIGNWRITING HAND-CIRCLE LITTLE INDEX;So;0;L;;;;;N;;;;; 1D8A2;SIGNWRITING HAND-HINGE LITTLE INDEX;So;0;L;;;;;N;;;;; 1D8A3;SIGNWRITING HAND-ANGLE LITTLE INDEX;So;0;L;;;;;N;;;;; 1D8A4;SIGNWRITING HAND-FIST INDEX MIDDLE LITTLE;So;0;L;;;;;N;;;;; 1D8A5;SIGNWRITING HAND-CIRCLE INDEX MIDDLE LITTLE;So;0;L;;;;;N;;;;; 1D8A6;SIGNWRITING HAND-HINGE INDEX MIDDLE LITTLE;So;0;L;;;;;N;;;;; 1D8A7;SIGNWRITING HAND-HINGE RING;So;0;L;;;;;N;;;;; 1D8A8;SIGNWRITING HAND-ANGLE INDEX MIDDLE LITTLE;So;0;L;;;;;N;;;;; 1D8A9;SIGNWRITING HAND-FIST INDEX MIDDLE CROSS LITTLE;So;0;L;;;;;N;;;;; 1D8AA;SIGNWRITING HAND-CIRCLE INDEX MIDDLE CROSS LITTLE;So;0;L;;;;;N;;;;; 1D8AB;SIGNWRITING HAND-FIST RING DOWN;So;0;L;;;;;N;;;;; 1D8AC;SIGNWRITING HAND-HINGE RING DOWN INDEX THUMB HOOK MIDDLE;So;0;L;;;;;N;;;;; 1D8AD;SIGNWRITING HAND-ANGLE RING DOWN MIDDLE THUMB INDEX CROSS;So;0;L;;;;;N;;;;; 1D8AE;SIGNWRITING HAND-FIST RING UP;So;0;L;;;;;N;;;;; 1D8AF;SIGNWRITING HAND-FIST RING RAISED KNUCKLE;So;0;L;;;;;N;;;;; 1D8B0;SIGNWRITING HAND-FIST RING LITTLE;So;0;L;;;;;N;;;;; 1D8B1;SIGNWRITING HAND-CIRCLE RING LITTLE;So;0;L;;;;;N;;;;; 1D8B2;SIGNWRITING HAND-OVAL RING LITTLE;So;0;L;;;;;N;;;;; 1D8B3;SIGNWRITING HAND-ANGLE RING LITTLE;So;0;L;;;;;N;;;;; 1D8B4;SIGNWRITING HAND-FIST RING MIDDLE;So;0;L;;;;;N;;;;; 1D8B5;SIGNWRITING HAND-FIST RING MIDDLE CONJOINED;So;0;L;;;;;N;;;;; 1D8B6;SIGNWRITING HAND-FIST RING MIDDLE RAISED KNUCKLES;So;0;L;;;;;N;;;;; 1D8B7;SIGNWRITING HAND-FIST RING INDEX;So;0;L;;;;;N;;;;; 1D8B8;SIGNWRITING HAND-FIST RING THUMB;So;0;L;;;;;N;;;;; 1D8B9;SIGNWRITING HAND-HOOK RING THUMB;So;0;L;;;;;N;;;;; 1D8BA;SIGNWRITING HAND-FIST INDEX RING LITTLE;So;0;L;;;;;N;;;;; 1D8BB;SIGNWRITING HAND-CIRCLE INDEX RING LITTLE;So;0;L;;;;;N;;;;; 1D8BC;SIGNWRITING HAND-CURLICUE INDEX RING LITTLE ON;So;0;L;;;;;N;;;;; 1D8BD;SIGNWRITING HAND-HOOK INDEX RING LITTLE OUT;So;0;L;;;;;N;;;;; 1D8BE;SIGNWRITING HAND-HOOK INDEX RING LITTLE IN;So;0;L;;;;;N;;;;; 1D8BF;SIGNWRITING HAND-HOOK INDEX RING LITTLE UNDER;So;0;L;;;;;N;;;;; 1D8C0;SIGNWRITING HAND-CUP INDEX RING LITTLE;So;0;L;;;;;N;;;;; 1D8C1;SIGNWRITING HAND-HINGE INDEX RING LITTLE;So;0;L;;;;;N;;;;; 1D8C2;SIGNWRITING HAND-ANGLE INDEX RING LITTLE OUT;So;0;L;;;;;N;;;;; 1D8C3;SIGNWRITING HAND-ANGLE INDEX RING LITTLE;So;0;L;;;;;N;;;;; 1D8C4;SIGNWRITING HAND-FIST MIDDLE DOWN;So;0;L;;;;;N;;;;; 1D8C5;SIGNWRITING HAND-HINGE MIDDLE;So;0;L;;;;;N;;;;; 1D8C6;SIGNWRITING HAND-FIST MIDDLE UP;So;0;L;;;;;N;;;;; 1D8C7;SIGNWRITING HAND-CIRCLE MIDDLE UP;So;0;L;;;;;N;;;;; 1D8C8;SIGNWRITING HAND-FIST MIDDLE RAISED KNUCKLE;So;0;L;;;;;N;;;;; 1D8C9;SIGNWRITING HAND-FIST MIDDLE UP THUMB SIDE;So;0;L;;;;;N;;;;; 1D8CA;SIGNWRITING HAND-HOOK MIDDLE THUMB;So;0;L;;;;;N;;;;; 1D8CB;SIGNWRITING HAND-FIST MIDDLE THUMB LITTLE;So;0;L;;;;;N;;;;; 1D8CC;SIGNWRITING HAND-FIST MIDDLE LITTLE;So;0;L;;;;;N;;;;; 1D8CD;SIGNWRITING HAND-FIST MIDDLE RING LITTLE;So;0;L;;;;;N;;;;; 1D8CE;SIGNWRITING HAND-CIRCLE MIDDLE RING LITTLE;So;0;L;;;;;N;;;;; 1D8CF;SIGNWRITING HAND-CURLICUE MIDDLE RING LITTLE ON;So;0;L;;;;;N;;;;; 1D8D0;SIGNWRITING HAND-CUP MIDDLE RING LITTLE;So;0;L;;;;;N;;;;; 1D8D1;SIGNWRITING HAND-HINGE MIDDLE RING LITTLE;So;0;L;;;;;N;;;;; 1D8D2;SIGNWRITING HAND-ANGLE MIDDLE RING LITTLE OUT;So;0;L;;;;;N;;;;; 1D8D3;SIGNWRITING HAND-ANGLE MIDDLE RING LITTLE IN;So;0;L;;;;;N;;;;; 1D8D4;SIGNWRITING HAND-ANGLE MIDDLE RING LITTLE;So;0;L;;;;;N;;;;; 1D8D5;SIGNWRITING HAND-CIRCLE MIDDLE RING LITTLE BENT;So;0;L;;;;;N;;;;; 1D8D6;SIGNWRITING HAND-CLAW MIDDLE RING LITTLE CONJOINED;So;0;L;;;;;N;;;;; 1D8D7;SIGNWRITING HAND-CLAW MIDDLE RING LITTLE CONJOINED SIDE;So;0;L;;;;;N;;;;; 1D8D8;SIGNWRITING HAND-HOOK MIDDLE RING LITTLE CONJOINED OUT;So;0;L;;;;;N;;;;; 1D8D9;SIGNWRITING HAND-HOOK MIDDLE RING LITTLE CONJOINED IN;So;0;L;;;;;N;;;;; 1D8DA;SIGNWRITING HAND-HOOK MIDDLE RING LITTLE CONJOINED;So;0;L;;;;;N;;;;; 1D8DB;SIGNWRITING HAND-HINGE INDEX HINGED;So;0;L;;;;;N;;;;; 1D8DC;SIGNWRITING HAND-FIST INDEX THUMB SIDE;So;0;L;;;;;N;;;;; 1D8DD;SIGNWRITING HAND-HINGE INDEX THUMB SIDE;So;0;L;;;;;N;;;;; 1D8DE;SIGNWRITING HAND-FIST INDEX THUMB SIDE THUMB DIAGONAL;So;0;L;;;;;N;;;;; 1D8DF;SIGNWRITING HAND-FIST INDEX THUMB SIDE THUMB CONJOINED;So;0;L;;;;;N;;;;; 1D8E0;SIGNWRITING HAND-FIST INDEX THUMB SIDE THUMB BENT;So;0;L;;;;;N;;;;; 1D8E1;SIGNWRITING HAND-FIST INDEX THUMB SIDE INDEX BENT;So;0;L;;;;;N;;;;; 1D8E2;SIGNWRITING HAND-FIST INDEX THUMB SIDE BOTH BENT;So;0;L;;;;;N;;;;; 1D8E3;SIGNWRITING HAND-FIST INDEX THUMB SIDE INDEX HINGE;So;0;L;;;;;N;;;;; 1D8E4;SIGNWRITING HAND-FIST INDEX THUMB FORWARD INDEX STRAIGHT;So;0;L;;;;;N;;;;; 1D8E5;SIGNWRITING HAND-FIST INDEX THUMB FORWARD INDEX BENT;So;0;L;;;;;N;;;;; 1D8E6;SIGNWRITING HAND-FIST INDEX THUMB HOOK;So;0;L;;;;;N;;;;; 1D8E7;SIGNWRITING HAND-FIST INDEX THUMB CURLICUE;So;0;L;;;;;N;;;;; 1D8E8;SIGNWRITING HAND-FIST INDEX THUMB CURVE THUMB INSIDE;So;0;L;;;;;N;;;;; 1D8E9;SIGNWRITING HAND-CLAW INDEX THUMB CURVE THUMB INSIDE;So;0;L;;;;;N;;;;; 1D8EA;SIGNWRITING HAND-FIST INDEX THUMB CURVE THUMB UNDER;So;0;L;;;;;N;;;;; 1D8EB;SIGNWRITING HAND-FIST INDEX THUMB CIRCLE;So;0;L;;;;;N;;;;; 1D8EC;SIGNWRITING HAND-CUP INDEX THUMB;So;0;L;;;;;N;;;;; 1D8ED;SIGNWRITING HAND-CUP INDEX THUMB OPEN;So;0;L;;;;;N;;;;; 1D8EE;SIGNWRITING HAND-HINGE INDEX THUMB OPEN;So;0;L;;;;;N;;;;; 1D8EF;SIGNWRITING HAND-HINGE INDEX THUMB LARGE;So;0;L;;;;;N;;;;; 1D8F0;SIGNWRITING HAND-HINGE INDEX THUMB;So;0;L;;;;;N;;;;; 1D8F1;SIGNWRITING HAND-HINGE INDEX THUMB SMALL;So;0;L;;;;;N;;;;; 1D8F2;SIGNWRITING HAND-ANGLE INDEX THUMB OUT;So;0;L;;;;;N;;;;; 1D8F3;SIGNWRITING HAND-ANGLE INDEX THUMB IN;So;0;L;;;;;N;;;;; 1D8F4;SIGNWRITING HAND-ANGLE INDEX THUMB;So;0;L;;;;;N;;;;; 1D8F5;SIGNWRITING HAND-FIST THUMB;So;0;L;;;;;N;;;;; 1D8F6;SIGNWRITING HAND-FIST THUMB HEEL;So;0;L;;;;;N;;;;; 1D8F7;SIGNWRITING HAND-FIST THUMB SIDE DIAGONAL;So;0;L;;;;;N;;;;; 1D8F8;SIGNWRITING HAND-FIST THUMB SIDE CONJOINED;So;0;L;;;;;N;;;;; 1D8F9;SIGNWRITING HAND-FIST THUMB SIDE BENT;So;0;L;;;;;N;;;;; 1D8FA;SIGNWRITING HAND-FIST THUMB FORWARD;So;0;L;;;;;N;;;;; 1D8FB;SIGNWRITING HAND-FIST THUMB BETWEEN INDEX MIDDLE;So;0;L;;;;;N;;;;; 1D8FC;SIGNWRITING HAND-FIST THUMB BETWEEN MIDDLE RING;So;0;L;;;;;N;;;;; 1D8FD;SIGNWRITING HAND-FIST THUMB BETWEEN RING LITTLE;So;0;L;;;;;N;;;;; 1D8FE;SIGNWRITING HAND-FIST THUMB UNDER TWO FINGERS;So;0;L;;;;;N;;;;; 1D8FF;SIGNWRITING HAND-FIST THUMB OVER TWO FINGERS;So;0;L;;;;;N;;;;; 1D900;SIGNWRITING HAND-FIST THUMB UNDER THREE FINGERS;So;0;L;;;;;N;;;;; 1D901;SIGNWRITING HAND-FIST THUMB UNDER FOUR FINGERS;So;0;L;;;;;N;;;;; 1D902;SIGNWRITING HAND-FIST THUMB OVER FOUR RAISED KNUCKLES;So;0;L;;;;;N;;;;; 1D903;SIGNWRITING HAND-FIST;So;0;L;;;;;N;;;;; 1D904;SIGNWRITING HAND-FIST HEEL;So;0;L;;;;;N;;;;; 1D905;SIGNWRITING TOUCH SINGLE;So;0;L;;;;;N;;;;; 1D906;SIGNWRITING TOUCH MULTIPLE;So;0;L;;;;;N;;;;; 1D907;SIGNWRITING TOUCH BETWEEN;So;0;L;;;;;N;;;;; 1D908;SIGNWRITING GRASP SINGLE;So;0;L;;;;;N;;;;; 1D909;SIGNWRITING GRASP MULTIPLE;So;0;L;;;;;N;;;;; 1D90A;SIGNWRITING GRASP BETWEEN;So;0;L;;;;;N;;;;; 1D90B;SIGNWRITING STRIKE SINGLE;So;0;L;;;;;N;;;;; 1D90C;SIGNWRITING STRIKE MULTIPLE;So;0;L;;;;;N;;;;; 1D90D;SIGNWRITING STRIKE BETWEEN;So;0;L;;;;;N;;;;; 1D90E;SIGNWRITING BRUSH SINGLE;So;0;L;;;;;N;;;;; 1D90F;SIGNWRITING BRUSH MULTIPLE;So;0;L;;;;;N;;;;; 1D910;SIGNWRITING BRUSH BETWEEN;So;0;L;;;;;N;;;;; 1D911;SIGNWRITING RUB SINGLE;So;0;L;;;;;N;;;;; 1D912;SIGNWRITING RUB MULTIPLE;So;0;L;;;;;N;;;;; 1D913;SIGNWRITING RUB BETWEEN;So;0;L;;;;;N;;;;; 1D914;SIGNWRITING SURFACE SYMBOLS;So;0;L;;;;;N;;;;; 1D915;SIGNWRITING SURFACE BETWEEN;So;0;L;;;;;N;;;;; 1D916;SIGNWRITING SQUEEZE LARGE SINGLE;So;0;L;;;;;N;;;;; 1D917;SIGNWRITING SQUEEZE SMALL SINGLE;So;0;L;;;;;N;;;;; 1D918;SIGNWRITING SQUEEZE LARGE MULTIPLE;So;0;L;;;;;N;;;;; 1D919;SIGNWRITING SQUEEZE SMALL MULTIPLE;So;0;L;;;;;N;;;;; 1D91A;SIGNWRITING SQUEEZE SEQUENTIAL;So;0;L;;;;;N;;;;; 1D91B;SIGNWRITING FLICK LARGE SINGLE;So;0;L;;;;;N;;;;; 1D91C;SIGNWRITING FLICK SMALL SINGLE;So;0;L;;;;;N;;;;; 1D91D;SIGNWRITING FLICK LARGE MULTIPLE;So;0;L;;;;;N;;;;; 1D91E;SIGNWRITING FLICK SMALL MULTIPLE;So;0;L;;;;;N;;;;; 1D91F;SIGNWRITING FLICK SEQUENTIAL;So;0;L;;;;;N;;;;; 1D920;SIGNWRITING SQUEEZE FLICK ALTERNATING;So;0;L;;;;;N;;;;; 1D921;SIGNWRITING MOVEMENT-HINGE UP DOWN LARGE;So;0;L;;;;;N;;;;; 1D922;SIGNWRITING MOVEMENT-HINGE UP DOWN SMALL;So;0;L;;;;;N;;;;; 1D923;SIGNWRITING MOVEMENT-HINGE UP SEQUENTIAL;So;0;L;;;;;N;;;;; 1D924;SIGNWRITING MOVEMENT-HINGE DOWN SEQUENTIAL;So;0;L;;;;;N;;;;; 1D925;SIGNWRITING MOVEMENT-HINGE UP DOWN ALTERNATING LARGE;So;0;L;;;;;N;;;;; 1D926;SIGNWRITING MOVEMENT-HINGE UP DOWN ALTERNATING SMALL;So;0;L;;;;;N;;;;; 1D927;SIGNWRITING MOVEMENT-HINGE SIDE TO SIDE SCISSORS;So;0;L;;;;;N;;;;; 1D928;SIGNWRITING MOVEMENT-WALLPLANE FINGER CONTACT;So;0;L;;;;;N;;;;; 1D929;SIGNWRITING MOVEMENT-FLOORPLANE FINGER CONTACT;So;0;L;;;;;N;;;;; 1D92A;SIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT SMALL;So;0;L;;;;;N;;;;; 1D92B;SIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT MEDIUM;So;0;L;;;;;N;;;;; 1D92C;SIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT LARGE;So;0;L;;;;;N;;;;; 1D92D;SIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT LARGEST;So;0;L;;;;;N;;;;; 1D92E;SIGNWRITING MOVEMENT-WALLPLANE SINGLE WRIST FLEX;So;0;L;;;;;N;;;;; 1D92F;SIGNWRITING MOVEMENT-WALLPLANE DOUBLE STRAIGHT;So;0;L;;;;;N;;;;; 1D930;SIGNWRITING MOVEMENT-WALLPLANE DOUBLE WRIST FLEX;So;0;L;;;;;N;;;;; 1D931;SIGNWRITING MOVEMENT-WALLPLANE DOUBLE ALTERNATING;So;0;L;;;;;N;;;;; 1D932;SIGNWRITING MOVEMENT-WALLPLANE DOUBLE ALTERNATING WRIST FLEX;So;0;L;;;;;N;;;;; 1D933;SIGNWRITING MOVEMENT-WALLPLANE CROSS;So;0;L;;;;;N;;;;; 1D934;SIGNWRITING MOVEMENT-WALLPLANE TRIPLE STRAIGHT MOVEMENT;So;0;L;;;;;N;;;;; 1D935;SIGNWRITING MOVEMENT-WALLPLANE TRIPLE WRIST FLEX;So;0;L;;;;;N;;;;; 1D936;SIGNWRITING MOVEMENT-WALLPLANE TRIPLE ALTERNATING;So;0;L;;;;;N;;;;; 1D937;SIGNWRITING MOVEMENT-WALLPLANE TRIPLE ALTERNATING WRIST FLEX;So;0;L;;;;;N;;;;; 1D938;SIGNWRITING MOVEMENT-WALLPLANE BEND SMALL;So;0;L;;;;;N;;;;; 1D939;SIGNWRITING MOVEMENT-WALLPLANE BEND MEDIUM;So;0;L;;;;;N;;;;; 1D93A;SIGNWRITING MOVEMENT-WALLPLANE BEND LARGE;So;0;L;;;;;N;;;;; 1D93B;SIGNWRITING MOVEMENT-WALLPLANE CORNER SMALL;So;0;L;;;;;N;;;;; 1D93C;SIGNWRITING MOVEMENT-WALLPLANE CORNER MEDIUM;So;0;L;;;;;N;;;;; 1D93D;SIGNWRITING MOVEMENT-WALLPLANE CORNER LARGE;So;0;L;;;;;N;;;;; 1D93E;SIGNWRITING MOVEMENT-WALLPLANE CORNER ROTATION;So;0;L;;;;;N;;;;; 1D93F;SIGNWRITING MOVEMENT-WALLPLANE CHECK SMALL;So;0;L;;;;;N;;;;; 1D940;SIGNWRITING MOVEMENT-WALLPLANE CHECK MEDIUM;So;0;L;;;;;N;;;;; 1D941;SIGNWRITING MOVEMENT-WALLPLANE CHECK LARGE;So;0;L;;;;;N;;;;; 1D942;SIGNWRITING MOVEMENT-WALLPLANE BOX SMALL;So;0;L;;;;;N;;;;; 1D943;SIGNWRITING MOVEMENT-WALLPLANE BOX MEDIUM;So;0;L;;;;;N;;;;; 1D944;SIGNWRITING MOVEMENT-WALLPLANE BOX LARGE;So;0;L;;;;;N;;;;; 1D945;SIGNWRITING MOVEMENT-WALLPLANE ZIGZAG SMALL;So;0;L;;;;;N;;;;; 1D946;SIGNWRITING MOVEMENT-WALLPLANE ZIGZAG MEDIUM;So;0;L;;;;;N;;;;; 1D947;SIGNWRITING MOVEMENT-WALLPLANE ZIGZAG LARGE;So;0;L;;;;;N;;;;; 1D948;SIGNWRITING MOVEMENT-WALLPLANE PEAKS SMALL;So;0;L;;;;;N;;;;; 1D949;SIGNWRITING MOVEMENT-WALLPLANE PEAKS MEDIUM;So;0;L;;;;;N;;;;; 1D94A;SIGNWRITING MOVEMENT-WALLPLANE PEAKS LARGE;So;0;L;;;;;N;;;;; 1D94B;SIGNWRITING TRAVEL-WALLPLANE ROTATION-WALLPLANE SINGLE;So;0;L;;;;;N;;;;; 1D94C;SIGNWRITING TRAVEL-WALLPLANE ROTATION-WALLPLANE DOUBLE;So;0;L;;;;;N;;;;; 1D94D;SIGNWRITING TRAVEL-WALLPLANE ROTATION-WALLPLANE ALTERNATING;So;0;L;;;;;N;;;;; 1D94E;SIGNWRITING TRAVEL-WALLPLANE ROTATION-FLOORPLANE SINGLE;So;0;L;;;;;N;;;;; 1D94F;SIGNWRITING TRAVEL-WALLPLANE ROTATION-FLOORPLANE DOUBLE;So;0;L;;;;;N;;;;; 1D950;SIGNWRITING TRAVEL-WALLPLANE ROTATION-FLOORPLANE ALTERNATING;So;0;L;;;;;N;;;;; 1D951;SIGNWRITING TRAVEL-WALLPLANE SHAKING;So;0;L;;;;;N;;;;; 1D952;SIGNWRITING TRAVEL-WALLPLANE ARM SPIRAL SINGLE;So;0;L;;;;;N;;;;; 1D953;SIGNWRITING TRAVEL-WALLPLANE ARM SPIRAL DOUBLE;So;0;L;;;;;N;;;;; 1D954;SIGNWRITING TRAVEL-WALLPLANE ARM SPIRAL TRIPLE;So;0;L;;;;;N;;;;; 1D955;SIGNWRITING MOVEMENT-DIAGONAL AWAY SMALL;So;0;L;;;;;N;;;;; 1D956;SIGNWRITING MOVEMENT-DIAGONAL AWAY MEDIUM;So;0;L;;;;;N;;;;; 1D957;SIGNWRITING MOVEMENT-DIAGONAL AWAY LARGE;So;0;L;;;;;N;;;;; 1D958;SIGNWRITING MOVEMENT-DIAGONAL AWAY LARGEST;So;0;L;;;;;N;;;;; 1D959;SIGNWRITING MOVEMENT-DIAGONAL TOWARDS SMALL;So;0;L;;;;;N;;;;; 1D95A;SIGNWRITING MOVEMENT-DIAGONAL TOWARDS MEDIUM;So;0;L;;;;;N;;;;; 1D95B;SIGNWRITING MOVEMENT-DIAGONAL TOWARDS LARGE;So;0;L;;;;;N;;;;; 1D95C;SIGNWRITING MOVEMENT-DIAGONAL TOWARDS LARGEST;So;0;L;;;;;N;;;;; 1D95D;SIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY SMALL;So;0;L;;;;;N;;;;; 1D95E;SIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY MEDIUM;So;0;L;;;;;N;;;;; 1D95F;SIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY LARGE;So;0;L;;;;;N;;;;; 1D960;SIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY LARGEST;So;0;L;;;;;N;;;;; 1D961;SIGNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS SMALL;So;0;L;;;;;N;;;;; 1D962;SIGNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS MEDIUM;So;0;L;;;;;N;;;;; 1D963;SIGNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS LARGE;So;0;L;;;;;N;;;;; 1D964;SIGNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS LARGEST;So;0;L;;;;;N;;;;; 1D965;SIGNWRITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT SMALL;So;0;L;;;;;N;;;;; 1D966;SIGNWRITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT MEDIUM;So;0;L;;;;;N;;;;; 1D967;SIGNWRITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT LARGE;So;0;L;;;;;N;;;;; 1D968;SIGNWRITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT LARGEST;So;0;L;;;;;N;;;;; 1D969;SIGNWRITING MOVEMENT-FLOORPLANE SINGLE WRIST FLEX;So;0;L;;;;;N;;;;; 1D96A;SIGNWRITING MOVEMENT-FLOORPLANE DOUBLE STRAIGHT;So;0;L;;;;;N;;;;; 1D96B;SIGNWRITING MOVEMENT-FLOORPLANE DOUBLE WRIST FLEX;So;0;L;;;;;N;;;;; 1D96C;SIGNWRITING MOVEMENT-FLOORPLANE DOUBLE ALTERNATING;So;0;L;;;;;N;;;;; 1D96D;SIGNWRITING MOVEMENT-FLOORPLANE DOUBLE ALTERNATING WRIST FLEX;So;0;L;;;;;N;;;;; 1D96E;SIGNWRITING MOVEMENT-FLOORPLANE CROSS;So;0;L;;;;;N;;;;; 1D96F;SIGNWRITING MOVEMENT-FLOORPLANE TRIPLE STRAIGHT MOVEMENT;So;0;L;;;;;N;;;;; 1D970;SIGNWRITING MOVEMENT-FLOORPLANE TRIPLE WRIST FLEX;So;0;L;;;;;N;;;;; 1D971;SIGNWRITING MOVEMENT-FLOORPLANE TRIPLE ALTERNATING MOVEMENT;So;0;L;;;;;N;;;;; 1D972;SIGNWRITING MOVEMENT-FLOORPLANE TRIPLE ALTERNATING WRIST FLEX;So;0;L;;;;;N;;;;; 1D973;SIGNWRITING MOVEMENT-FLOORPLANE BEND;So;0;L;;;;;N;;;;; 1D974;SIGNWRITING MOVEMENT-FLOORPLANE CORNER SMALL;So;0;L;;;;;N;;;;; 1D975;SIGNWRITING MOVEMENT-FLOORPLANE CORNER MEDIUM;So;0;L;;;;;N;;;;; 1D976;SIGNWRITING MOVEMENT-FLOORPLANE CORNER LARGE;So;0;L;;;;;N;;;;; 1D977;SIGNWRITING MOVEMENT-FLOORPLANE CHECK;So;0;L;;;;;N;;;;; 1D978;SIGNWRITING MOVEMENT-FLOORPLANE BOX SMALL;So;0;L;;;;;N;;;;; 1D979;SIGNWRITING MOVEMENT-FLOORPLANE BOX MEDIUM;So;0;L;;;;;N;;;;; 1D97A;SIGNWRITING MOVEMENT-FLOORPLANE BOX LARGE;So;0;L;;;;;N;;;;; 1D97B;SIGNWRITING MOVEMENT-FLOORPLANE ZIGZAG SMALL;So;0;L;;;;;N;;;;; 1D97C;SIGNWRITING MOVEMENT-FLOORPLANE ZIGZAG MEDIUM;So;0;L;;;;;N;;;;; 1D97D;SIGNWRITING MOVEMENT-FLOORPLANE ZIGZAG LARGE;So;0;L;;;;;N;;;;; 1D97E;SIGNWRITING MOVEMENT-FLOORPLANE PEAKS SMALL;So;0;L;;;;;N;;;;; 1D97F;SIGNWRITING MOVEMENT-FLOORPLANE PEAKS MEDIUM;So;0;L;;;;;N;;;;; 1D980;SIGNWRITING MOVEMENT-FLOORPLANE PEAKS LARGE;So;0;L;;;;;N;;;;; 1D981;SIGNWRITING TRAVEL-FLOORPLANE ROTATION-FLOORPLANE SINGLE;So;0;L;;;;;N;;;;; 1D982;SIGNWRITING TRAVEL-FLOORPLANE ROTATION-FLOORPLANE DOUBLE;So;0;L;;;;;N;;;;; 1D983;SIGNWRITING TRAVEL-FLOORPLANE ROTATION-FLOORPLANE ALTERNATING;So;0;L;;;;;N;;;;; 1D984;SIGNWRITING TRAVEL-FLOORPLANE ROTATION-WALLPLANE SINGLE;So;0;L;;;;;N;;;;; 1D985;SIGNWRITING TRAVEL-FLOORPLANE ROTATION-WALLPLANE DOUBLE;So;0;L;;;;;N;;;;; 1D986;SIGNWRITING TRAVEL-FLOORPLANE ROTATION-WALLPLANE ALTERNATING;So;0;L;;;;;N;;;;; 1D987;SIGNWRITING TRAVEL-FLOORPLANE SHAKING;So;0;L;;;;;N;;;;; 1D988;SIGNWRITING MOVEMENT-WALLPLANE CURVE QUARTER SMALL;So;0;L;;;;;N;;;;; 1D989;SIGNWRITING MOVEMENT-WALLPLANE CURVE QUARTER MEDIUM;So;0;L;;;;;N;;;;; 1D98A;SIGNWRITING MOVEMENT-WALLPLANE CURVE QUARTER LARGE;So;0;L;;;;;N;;;;; 1D98B;SIGNWRITING MOVEMENT-WALLPLANE CURVE QUARTER LARGEST;So;0;L;;;;;N;;;;; 1D98C;SIGNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE SMALL;So;0;L;;;;;N;;;;; 1D98D;SIGNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE MEDIUM;So;0;L;;;;;N;;;;; 1D98E;SIGNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE LARGE;So;0;L;;;;;N;;;;; 1D98F;SIGNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE LARGEST;So;0;L;;;;;N;;;;; 1D990;SIGNWRITING MOVEMENT-WALLPLANE CURVE THREE-QUARTER CIRCLE SMALL;So;0;L;;;;;N;;;;; 1D991;SIGNWRITING MOVEMENT-WALLPLANE CURVE THREE-QUARTER CIRCLE MEDIUM;So;0;L;;;;;N;;;;; 1D992;SIGNWRITING MOVEMENT-WALLPLANE HUMP SMALL;So;0;L;;;;;N;;;;; 1D993;SIGNWRITING MOVEMENT-WALLPLANE HUMP MEDIUM;So;0;L;;;;;N;;;;; 1D994;SIGNWRITING MOVEMENT-WALLPLANE HUMP LARGE;So;0;L;;;;;N;;;;; 1D995;SIGNWRITING MOVEMENT-WALLPLANE LOOP SMALL;So;0;L;;;;;N;;;;; 1D996;SIGNWRITING MOVEMENT-WALLPLANE LOOP MEDIUM;So;0;L;;;;;N;;;;; 1D997;SIGNWRITING MOVEMENT-WALLPLANE LOOP LARGE;So;0;L;;;;;N;;;;; 1D998;SIGNWRITING MOVEMENT-WALLPLANE LOOP SMALL DOUBLE;So;0;L;;;;;N;;;;; 1D999;SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE DOUBLE SMALL;So;0;L;;;;;N;;;;; 1D99A;SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE DOUBLE MEDIUM;So;0;L;;;;;N;;;;; 1D99B;SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE DOUBLE LARGE;So;0;L;;;;;N;;;;; 1D99C;SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE TRIPLE SMALL;So;0;L;;;;;N;;;;; 1D99D;SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE TRIPLE MEDIUM;So;0;L;;;;;N;;;;; 1D99E;SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE TRIPLE LARGE;So;0;L;;;;;N;;;;; 1D99F;SIGNWRITING MOVEMENT-WALLPLANE CURVE THEN STRAIGHT;So;0;L;;;;;N;;;;; 1D9A0;SIGNWRITING MOVEMENT-WALLPLANE CURVED CROSS SMALL;So;0;L;;;;;N;;;;; 1D9A1;SIGNWRITING MOVEMENT-WALLPLANE CURVED CROSS MEDIUM;So;0;L;;;;;N;;;;; 1D9A2;SIGNWRITING ROTATION-WALLPLANE SINGLE;So;0;L;;;;;N;;;;; 1D9A3;SIGNWRITING ROTATION-WALLPLANE DOUBLE;So;0;L;;;;;N;;;;; 1D9A4;SIGNWRITING ROTATION-WALLPLANE ALTERNATE;So;0;L;;;;;N;;;;; 1D9A5;SIGNWRITING MOVEMENT-WALLPLANE SHAKING;So;0;L;;;;;N;;;;; 1D9A6;SIGNWRITING MOVEMENT-WALLPLANE CURVE HITTING FRONT WALL;So;0;L;;;;;N;;;;; 1D9A7;SIGNWRITING MOVEMENT-WALLPLANE HUMP HITTING FRONT WALL;So;0;L;;;;;N;;;;; 1D9A8;SIGNWRITING MOVEMENT-WALLPLANE LOOP HITTING FRONT WALL;So;0;L;;;;;N;;;;; 1D9A9;SIGNWRITING MOVEMENT-WALLPLANE WAVE HITTING FRONT WALL;So;0;L;;;;;N;;;;; 1D9AA;SIGNWRITING ROTATION-WALLPLANE SINGLE HITTING FRONT WALL;So;0;L;;;;;N;;;;; 1D9AB;SIGNWRITING ROTATION-WALLPLANE DOUBLE HITTING FRONT WALL;So;0;L;;;;;N;;;;; 1D9AC;SIGNWRITING ROTATION-WALLPLANE ALTERNATING HITTING FRONT WALL;So;0;L;;;;;N;;;;; 1D9AD;SIGNWRITING MOVEMENT-WALLPLANE CURVE HITTING CHEST;So;0;L;;;;;N;;;;; 1D9AE;SIGNWRITING MOVEMENT-WALLPLANE HUMP HITTING CHEST;So;0;L;;;;;N;;;;; 1D9AF;SIGNWRITING MOVEMENT-WALLPLANE LOOP HITTING CHEST;So;0;L;;;;;N;;;;; 1D9B0;SIGNWRITING MOVEMENT-WALLPLANE WAVE HITTING CHEST;So;0;L;;;;;N;;;;; 1D9B1;SIGNWRITING ROTATION-WALLPLANE SINGLE HITTING CHEST;So;0;L;;;;;N;;;;; 1D9B2;SIGNWRITING ROTATION-WALLPLANE DOUBLE HITTING CHEST;So;0;L;;;;;N;;;;; 1D9B3;SIGNWRITING ROTATION-WALLPLANE ALTERNATING HITTING CHEST;So;0;L;;;;;N;;;;; 1D9B4;SIGNWRITING MOVEMENT-WALLPLANE WAVE DIAGONAL PATH SMALL;So;0;L;;;;;N;;;;; 1D9B5;SIGNWRITING MOVEMENT-WALLPLANE WAVE DIAGONAL PATH MEDIUM;So;0;L;;;;;N;;;;; 1D9B6;SIGNWRITING MOVEMENT-WALLPLANE WAVE DIAGONAL PATH LARGE;So;0;L;;;;;N;;;;; 1D9B7;SIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING CEILING SMALL;So;0;L;;;;;N;;;;; 1D9B8;SIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING CEILING LARGE;So;0;L;;;;;N;;;;; 1D9B9;SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING SMALL DOUBLE;So;0;L;;;;;N;;;;; 1D9BA;SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING LARGE DOUBLE;So;0;L;;;;;N;;;;; 1D9BB;SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING SMALL TRIPLE;So;0;L;;;;;N;;;;; 1D9BC;SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING LARGE TRIPLE;So;0;L;;;;;N;;;;; 1D9BD;SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING CEILING SMALL SINGLE;So;0;L;;;;;N;;;;; 1D9BE;SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING CEILING LARGE SINGLE;So;0;L;;;;;N;;;;; 1D9BF;SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING CEILING SMALL DOUBLE;So;0;L;;;;;N;;;;; 1D9C0;SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING CEILING LARGE DOUBLE;So;0;L;;;;;N;;;;; 1D9C1;SIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING CEILING SMALL;So;0;L;;;;;N;;;;; 1D9C2;SIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING CEILING LARGE;So;0;L;;;;;N;;;;; 1D9C3;SIGNWRITING ROTATION-FLOORPLANE SINGLE HITTING CEILING;So;0;L;;;;;N;;;;; 1D9C4;SIGNWRITING ROTATION-FLOORPLANE DOUBLE HITTING CEILING;So;0;L;;;;;N;;;;; 1D9C5;SIGNWRITING ROTATION-FLOORPLANE ALTERNATING HITTING CEILING;So;0;L;;;;;N;;;;; 1D9C6;SIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING FLOOR SMALL;So;0;L;;;;;N;;;;; 1D9C7;SIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING FLOOR LARGE;So;0;L;;;;;N;;;;; 1D9C8;SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING FLOOR SMALL DOUBLE;So;0;L;;;;;N;;;;; 1D9C9;SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING FLOOR LARGE DOUBLE;So;0;L;;;;;N;;;;; 1D9CA;SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING FLOOR TRIPLE SMALL TRIPLE;So;0;L;;;;;N;;;;; 1D9CB;SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING FLOOR TRIPLE LARGE TRIPLE;So;0;L;;;;;N;;;;; 1D9CC;SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING FLOOR SMALL SINGLE;So;0;L;;;;;N;;;;; 1D9CD;SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING FLOOR LARGE SINGLE;So;0;L;;;;;N;;;;; 1D9CE;SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING FLOOR SMALL DOUBLE;So;0;L;;;;;N;;;;; 1D9CF;SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING FLOOR LARGE DOUBLE;So;0;L;;;;;N;;;;; 1D9D0;SIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING FLOOR SMALL;So;0;L;;;;;N;;;;; 1D9D1;SIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING FLOOR LARGE;So;0;L;;;;;N;;;;; 1D9D2;SIGNWRITING ROTATION-FLOORPLANE SINGLE HITTING FLOOR;So;0;L;;;;;N;;;;; 1D9D3;SIGNWRITING ROTATION-FLOORPLANE DOUBLE HITTING FLOOR;So;0;L;;;;;N;;;;; 1D9D4;SIGNWRITING ROTATION-FLOORPLANE ALTERNATING HITTING FLOOR;So;0;L;;;;;N;;;;; 1D9D5;SIGNWRITING MOVEMENT-FLOORPLANE CURVE SMALL;So;0;L;;;;;N;;;;; 1D9D6;SIGNWRITING MOVEMENT-FLOORPLANE CURVE MEDIUM;So;0;L;;;;;N;;;;; 1D9D7;SIGNWRITING MOVEMENT-FLOORPLANE CURVE LARGE;So;0;L;;;;;N;;;;; 1D9D8;SIGNWRITING MOVEMENT-FLOORPLANE CURVE LARGEST;So;0;L;;;;;N;;;;; 1D9D9;SIGNWRITING MOVEMENT-FLOORPLANE CURVE COMBINED;So;0;L;;;;;N;;;;; 1D9DA;SIGNWRITING MOVEMENT-FLOORPLANE HUMP SMALL;So;0;L;;;;;N;;;;; 1D9DB;SIGNWRITING MOVEMENT-FLOORPLANE LOOP SMALL;So;0;L;;;;;N;;;;; 1D9DC;SIGNWRITING MOVEMENT-FLOORPLANE WAVE SNAKE;So;0;L;;;;;N;;;;; 1D9DD;SIGNWRITING MOVEMENT-FLOORPLANE WAVE SMALL;So;0;L;;;;;N;;;;; 1D9DE;SIGNWRITING MOVEMENT-FLOORPLANE WAVE LARGE;So;0;L;;;;;N;;;;; 1D9DF;SIGNWRITING ROTATION-FLOORPLANE SINGLE;So;0;L;;;;;N;;;;; 1D9E0;SIGNWRITING ROTATION-FLOORPLANE DOUBLE;So;0;L;;;;;N;;;;; 1D9E1;SIGNWRITING ROTATION-FLOORPLANE ALTERNATING;So;0;L;;;;;N;;;;; 1D9E2;SIGNWRITING MOVEMENT-FLOORPLANE SHAKING PARALLEL;So;0;L;;;;;N;;;;; 1D9E3;SIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE SMALL SINGLE;So;0;L;;;;;N;;;;; 1D9E4;SIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE MEDIUM SINGLE;So;0;L;;;;;N;;;;; 1D9E5;SIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE SMALL DOUBLE;So;0;L;;;;;N;;;;; 1D9E6;SIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE MEDIUM DOUBLE;So;0;L;;;;;N;;;;; 1D9E7;SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL SMALL SINGLE;So;0;L;;;;;N;;;;; 1D9E8;SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL MEDIUM SINGLE;So;0;L;;;;;N;;;;; 1D9E9;SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL LARGE SINGLE;So;0;L;;;;;N;;;;; 1D9EA;SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL SMALL DOUBLE;So;0;L;;;;;N;;;;; 1D9EB;SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL MEDIUM DOUBLE;So;0;L;;;;;N;;;;; 1D9EC;SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL LARGE DOUBLE;So;0;L;;;;;N;;;;; 1D9ED;SIGNWRITING MOVEMENT-WALLPLANE WRIST CIRCLE FRONT SINGLE;So;0;L;;;;;N;;;;; 1D9EE;SIGNWRITING MOVEMENT-WALLPLANE WRIST CIRCLE FRONT DOUBLE;So;0;L;;;;;N;;;;; 1D9EF;SIGNWRITING MOVEMENT-FLOORPLANE WRIST CIRCLE HITTING WALL SINGLE;So;0;L;;;;;N;;;;; 1D9F0;SIGNWRITING MOVEMENT-FLOORPLANE WRIST CIRCLE HITTING WALL DOUBLE;So;0;L;;;;;N;;;;; 1D9F1;SIGNWRITING MOVEMENT-WALLPLANE FINGER CIRCLES SINGLE;So;0;L;;;;;N;;;;; 1D9F2;SIGNWRITING MOVEMENT-WALLPLANE FINGER CIRCLES DOUBLE;So;0;L;;;;;N;;;;; 1D9F3;SIGNWRITING MOVEMENT-FLOORPLANE FINGER CIRCLES HITTING WALL SINGLE;So;0;L;;;;;N;;;;; 1D9F4;SIGNWRITING MOVEMENT-FLOORPLANE FINGER CIRCLES HITTING WALL DOUBLE;So;0;L;;;;;N;;;;; 1D9F5;SIGNWRITING DYNAMIC ARROWHEAD SMALL;So;0;L;;;;;N;;;;; 1D9F6;SIGNWRITING DYNAMIC ARROWHEAD LARGE;So;0;L;;;;;N;;;;; 1D9F7;SIGNWRITING DYNAMIC FAST;So;0;L;;;;;N;;;;; 1D9F8;SIGNWRITING DYNAMIC SLOW;So;0;L;;;;;N;;;;; 1D9F9;SIGNWRITING DYNAMIC TENSE;So;0;L;;;;;N;;;;; 1D9FA;SIGNWRITING DYNAMIC RELAXED;So;0;L;;;;;N;;;;; 1D9FB;SIGNWRITING DYNAMIC SIMULTANEOUS;So;0;L;;;;;N;;;;; 1D9FC;SIGNWRITING DYNAMIC SIMULTANEOUS ALTERNATING;So;0;L;;;;;N;;;;; 1D9FD;SIGNWRITING DYNAMIC EVERY OTHER TIME;So;0;L;;;;;N;;;;; 1D9FE;SIGNWRITING DYNAMIC GRADUAL;So;0;L;;;;;N;;;;; 1D9FF;SIGNWRITING HEAD;So;0;L;;;;;N;;;;; 1DA00;SIGNWRITING HEAD RIM;Mn;0;NSM;;;;;N;;;;; 1DA01;SIGNWRITING HEAD MOVEMENT-WALLPLANE STRAIGHT;Mn;0;NSM;;;;;N;;;;; 1DA02;SIGNWRITING HEAD MOVEMENT-WALLPLANE TILT;Mn;0;NSM;;;;;N;;;;; 1DA03;SIGNWRITING HEAD MOVEMENT-FLOORPLANE STRAIGHT;Mn;0;NSM;;;;;N;;;;; 1DA04;SIGNWRITING HEAD MOVEMENT-WALLPLANE CURVE;Mn;0;NSM;;;;;N;;;;; 1DA05;SIGNWRITING HEAD MOVEMENT-FLOORPLANE CURVE;Mn;0;NSM;;;;;N;;;;; 1DA06;SIGNWRITING HEAD MOVEMENT CIRCLE;Mn;0;NSM;;;;;N;;;;; 1DA07;SIGNWRITING FACE DIRECTION POSITION NOSE FORWARD TILTING;Mn;0;NSM;;;;;N;;;;; 1DA08;SIGNWRITING FACE DIRECTION POSITION NOSE UP OR DOWN;Mn;0;NSM;;;;;N;;;;; 1DA09;SIGNWRITING FACE DIRECTION POSITION NOSE UP OR DOWN TILTING;Mn;0;NSM;;;;;N;;;;; 1DA0A;SIGNWRITING EYEBROWS STRAIGHT UP;Mn;0;NSM;;;;;N;;;;; 1DA0B;SIGNWRITING EYEBROWS STRAIGHT NEUTRAL;Mn;0;NSM;;;;;N;;;;; 1DA0C;SIGNWRITING EYEBROWS STRAIGHT DOWN;Mn;0;NSM;;;;;N;;;;; 1DA0D;SIGNWRITING DREAMY EYEBROWS NEUTRAL DOWN;Mn;0;NSM;;;;;N;;;;; 1DA0E;SIGNWRITING DREAMY EYEBROWS DOWN NEUTRAL;Mn;0;NSM;;;;;N;;;;; 1DA0F;SIGNWRITING DREAMY EYEBROWS UP NEUTRAL;Mn;0;NSM;;;;;N;;;;; 1DA10;SIGNWRITING DREAMY EYEBROWS NEUTRAL UP;Mn;0;NSM;;;;;N;;;;; 1DA11;SIGNWRITING FOREHEAD NEUTRAL;Mn;0;NSM;;;;;N;;;;; 1DA12;SIGNWRITING FOREHEAD CONTACT;Mn;0;NSM;;;;;N;;;;; 1DA13;SIGNWRITING FOREHEAD WRINKLED;Mn;0;NSM;;;;;N;;;;; 1DA14;SIGNWRITING EYES OPEN;Mn;0;NSM;;;;;N;;;;; 1DA15;SIGNWRITING EYES SQUEEZED;Mn;0;NSM;;;;;N;;;;; 1DA16;SIGNWRITING EYES CLOSED;Mn;0;NSM;;;;;N;;;;; 1DA17;SIGNWRITING EYE BLINK SINGLE;Mn;0;NSM;;;;;N;;;;; 1DA18;SIGNWRITING EYE BLINK MULTIPLE;Mn;0;NSM;;;;;N;;;;; 1DA19;SIGNWRITING EYES HALF OPEN;Mn;0;NSM;;;;;N;;;;; 1DA1A;SIGNWRITING EYES WIDE OPEN;Mn;0;NSM;;;;;N;;;;; 1DA1B;SIGNWRITING EYES HALF CLOSED;Mn;0;NSM;;;;;N;;;;; 1DA1C;SIGNWRITING EYES WIDENING MOVEMENT;Mn;0;NSM;;;;;N;;;;; 1DA1D;SIGNWRITING EYE WINK;Mn;0;NSM;;;;;N;;;;; 1DA1E;SIGNWRITING EYELASHES UP;Mn;0;NSM;;;;;N;;;;; 1DA1F;SIGNWRITING EYELASHES DOWN;Mn;0;NSM;;;;;N;;;;; 1DA20;SIGNWRITING EYELASHES FLUTTERING;Mn;0;NSM;;;;;N;;;;; 1DA21;SIGNWRITING EYEGAZE-WALLPLANE STRAIGHT;Mn;0;NSM;;;;;N;;;;; 1DA22;SIGNWRITING EYEGAZE-WALLPLANE STRAIGHT DOUBLE;Mn;0;NSM;;;;;N;;;;; 1DA23;SIGNWRITING EYEGAZE-WALLPLANE STRAIGHT ALTERNATING;Mn;0;NSM;;;;;N;;;;; 1DA24;SIGNWRITING EYEGAZE-FLOORPLANE STRAIGHT;Mn;0;NSM;;;;;N;;;;; 1DA25;SIGNWRITING EYEGAZE-FLOORPLANE STRAIGHT DOUBLE;Mn;0;NSM;;;;;N;;;;; 1DA26;SIGNWRITING EYEGAZE-FLOORPLANE STRAIGHT ALTERNATING;Mn;0;NSM;;;;;N;;;;; 1DA27;SIGNWRITING EYEGAZE-WALLPLANE CURVED;Mn;0;NSM;;;;;N;;;;; 1DA28;SIGNWRITING EYEGAZE-FLOORPLANE CURVED;Mn;0;NSM;;;;;N;;;;; 1DA29;SIGNWRITING EYEGAZE-WALLPLANE CIRCLING;Mn;0;NSM;;;;;N;;;;; 1DA2A;SIGNWRITING CHEEKS PUFFED;Mn;0;NSM;;;;;N;;;;; 1DA2B;SIGNWRITING CHEEKS NEUTRAL;Mn;0;NSM;;;;;N;;;;; 1DA2C;SIGNWRITING CHEEKS SUCKED;Mn;0;NSM;;;;;N;;;;; 1DA2D;SIGNWRITING TENSE CHEEKS HIGH;Mn;0;NSM;;;;;N;;;;; 1DA2E;SIGNWRITING TENSE CHEEKS MIDDLE;Mn;0;NSM;;;;;N;;;;; 1DA2F;SIGNWRITING TENSE CHEEKS LOW;Mn;0;NSM;;;;;N;;;;; 1DA30;SIGNWRITING EARS;Mn;0;NSM;;;;;N;;;;; 1DA31;SIGNWRITING NOSE NEUTRAL;Mn;0;NSM;;;;;N;;;;; 1DA32;SIGNWRITING NOSE CONTACT;Mn;0;NSM;;;;;N;;;;; 1DA33;SIGNWRITING NOSE WRINKLES;Mn;0;NSM;;;;;N;;;;; 1DA34;SIGNWRITING NOSE WIGGLES;Mn;0;NSM;;;;;N;;;;; 1DA35;SIGNWRITING AIR BLOWING OUT;Mn;0;NSM;;;;;N;;;;; 1DA36;SIGNWRITING AIR SUCKING IN;Mn;0;NSM;;;;;N;;;;; 1DA37;SIGNWRITING AIR BLOW SMALL ROTATIONS;So;0;L;;;;;N;;;;; 1DA38;SIGNWRITING AIR SUCK SMALL ROTATIONS;So;0;L;;;;;N;;;;; 1DA39;SIGNWRITING BREATH INHALE;So;0;L;;;;;N;;;;; 1DA3A;SIGNWRITING BREATH EXHALE;So;0;L;;;;;N;;;;; 1DA3B;SIGNWRITING MOUTH CLOSED NEUTRAL;Mn;0;NSM;;;;;N;;;;; 1DA3C;SIGNWRITING MOUTH CLOSED FORWARD;Mn;0;NSM;;;;;N;;;;; 1DA3D;SIGNWRITING MOUTH CLOSED CONTACT;Mn;0;NSM;;;;;N;;;;; 1DA3E;SIGNWRITING MOUTH SMILE;Mn;0;NSM;;;;;N;;;;; 1DA3F;SIGNWRITING MOUTH SMILE WRINKLED;Mn;0;NSM;;;;;N;;;;; 1DA40;SIGNWRITING MOUTH SMILE OPEN;Mn;0;NSM;;;;;N;;;;; 1DA41;SIGNWRITING MOUTH FROWN;Mn;0;NSM;;;;;N;;;;; 1DA42;SIGNWRITING MOUTH FROWN WRINKLED;Mn;0;NSM;;;;;N;;;;; 1DA43;SIGNWRITING MOUTH FROWN OPEN;Mn;0;NSM;;;;;N;;;;; 1DA44;SIGNWRITING MOUTH OPEN CIRCLE;Mn;0;NSM;;;;;N;;;;; 1DA45;SIGNWRITING MOUTH OPEN FORWARD;Mn;0;NSM;;;;;N;;;;; 1DA46;SIGNWRITING MOUTH OPEN WRINKLED;Mn;0;NSM;;;;;N;;;;; 1DA47;SIGNWRITING MOUTH OPEN OVAL;Mn;0;NSM;;;;;N;;;;; 1DA48;SIGNWRITING MOUTH OPEN OVAL WRINKLED;Mn;0;NSM;;;;;N;;;;; 1DA49;SIGNWRITING MOUTH OPEN OVAL YAWN;Mn;0;NSM;;;;;N;;;;; 1DA4A;SIGNWRITING MOUTH OPEN RECTANGLE;Mn;0;NSM;;;;;N;;;;; 1DA4B;SIGNWRITING MOUTH OPEN RECTANGLE WRINKLED;Mn;0;NSM;;;;;N;;;;; 1DA4C;SIGNWRITING MOUTH OPEN RECTANGLE YAWN;Mn;0;NSM;;;;;N;;;;; 1DA4D;SIGNWRITING MOUTH KISS;Mn;0;NSM;;;;;N;;;;; 1DA4E;SIGNWRITING MOUTH KISS FORWARD;Mn;0;NSM;;;;;N;;;;; 1DA4F;SIGNWRITING MOUTH KISS WRINKLED;Mn;0;NSM;;;;;N;;;;; 1DA50;SIGNWRITING MOUTH TENSE;Mn;0;NSM;;;;;N;;;;; 1DA51;SIGNWRITING MOUTH TENSE FORWARD;Mn;0;NSM;;;;;N;;;;; 1DA52;SIGNWRITING MOUTH TENSE SUCKED;Mn;0;NSM;;;;;N;;;;; 1DA53;SIGNWRITING LIPS PRESSED TOGETHER;Mn;0;NSM;;;;;N;;;;; 1DA54;SIGNWRITING LIP LOWER OVER UPPER;Mn;0;NSM;;;;;N;;;;; 1DA55;SIGNWRITING LIP UPPER OVER LOWER;Mn;0;NSM;;;;;N;;;;; 1DA56;SIGNWRITING MOUTH CORNERS;Mn;0;NSM;;;;;N;;;;; 1DA57;SIGNWRITING MOUTH WRINKLES SINGLE;Mn;0;NSM;;;;;N;;;;; 1DA58;SIGNWRITING MOUTH WRINKLES DOUBLE;Mn;0;NSM;;;;;N;;;;; 1DA59;SIGNWRITING TONGUE STICKING OUT FAR;Mn;0;NSM;;;;;N;;;;; 1DA5A;SIGNWRITING TONGUE LICKING LIPS;Mn;0;NSM;;;;;N;;;;; 1DA5B;SIGNWRITING TONGUE TIP BETWEEN LIPS;Mn;0;NSM;;;;;N;;;;; 1DA5C;SIGNWRITING TONGUE TIP TOUCHING INSIDE MOUTH;Mn;0;NSM;;;;;N;;;;; 1DA5D;SIGNWRITING TONGUE INSIDE MOUTH RELAXED;Mn;0;NSM;;;;;N;;;;; 1DA5E;SIGNWRITING TONGUE MOVES AGAINST CHEEK;Mn;0;NSM;;;;;N;;;;; 1DA5F;SIGNWRITING TONGUE CENTRE STICKING OUT;Mn;0;NSM;;;;;N;;;;; 1DA60;SIGNWRITING TONGUE CENTRE INSIDE MOUTH;Mn;0;NSM;;;;;N;;;;; 1DA61;SIGNWRITING TEETH;Mn;0;NSM;;;;;N;;;;; 1DA62;SIGNWRITING TEETH MOVEMENT;Mn;0;NSM;;;;;N;;;;; 1DA63;SIGNWRITING TEETH ON TONGUE;Mn;0;NSM;;;;;N;;;;; 1DA64;SIGNWRITING TEETH ON TONGUE MOVEMENT;Mn;0;NSM;;;;;N;;;;; 1DA65;SIGNWRITING TEETH ON LIPS;Mn;0;NSM;;;;;N;;;;; 1DA66;SIGNWRITING TEETH ON LIPS MOVEMENT;Mn;0;NSM;;;;;N;;;;; 1DA67;SIGNWRITING TEETH BITE LIPS;Mn;0;NSM;;;;;N;;;;; 1DA68;SIGNWRITING MOVEMENT-WALLPLANE JAW;Mn;0;NSM;;;;;N;;;;; 1DA69;SIGNWRITING MOVEMENT-FLOORPLANE JAW;Mn;0;NSM;;;;;N;;;;; 1DA6A;SIGNWRITING NECK;Mn;0;NSM;;;;;N;;;;; 1DA6B;SIGNWRITING HAIR;Mn;0;NSM;;;;;N;;;;; 1DA6C;SIGNWRITING EXCITEMENT;Mn;0;NSM;;;;;N;;;;; 1DA6D;SIGNWRITING SHOULDER HIP SPINE;So;0;L;;;;;N;;;;; 1DA6E;SIGNWRITING SHOULDER HIP POSITIONS;So;0;L;;;;;N;;;;; 1DA6F;SIGNWRITING WALLPLANE SHOULDER HIP MOVE;So;0;L;;;;;N;;;;; 1DA70;SIGNWRITING FLOORPLANE SHOULDER HIP MOVE;So;0;L;;;;;N;;;;; 1DA71;SIGNWRITING SHOULDER TILTING FROM WAIST;So;0;L;;;;;N;;;;; 1DA72;SIGNWRITING TORSO-WALLPLANE STRAIGHT STRETCH;So;0;L;;;;;N;;;;; 1DA73;SIGNWRITING TORSO-WALLPLANE CURVED BEND;So;0;L;;;;;N;;;;; 1DA74;SIGNWRITING TORSO-FLOORPLANE TWISTING;So;0;L;;;;;N;;;;; 1DA75;SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS;Mn;0;NSM;;;;;N;;;;; 1DA76;SIGNWRITING LIMB COMBINATION;So;0;L;;;;;N;;;;; 1DA77;SIGNWRITING LIMB LENGTH-1;So;0;L;;;;;N;;;;; 1DA78;SIGNWRITING LIMB LENGTH-2;So;0;L;;;;;N;;;;; 1DA79;SIGNWRITING LIMB LENGTH-3;So;0;L;;;;;N;;;;; 1DA7A;SIGNWRITING LIMB LENGTH-4;So;0;L;;;;;N;;;;; 1DA7B;SIGNWRITING LIMB LENGTH-5;So;0;L;;;;;N;;;;; 1DA7C;SIGNWRITING LIMB LENGTH-6;So;0;L;;;;;N;;;;; 1DA7D;SIGNWRITING LIMB LENGTH-7;So;0;L;;;;;N;;;;; 1DA7E;SIGNWRITING FINGER;So;0;L;;;;;N;;;;; 1DA7F;SIGNWRITING LOCATION-WALLPLANE SPACE;So;0;L;;;;;N;;;;; 1DA80;SIGNWRITING LOCATION-FLOORPLANE SPACE;So;0;L;;;;;N;;;;; 1DA81;SIGNWRITING LOCATION HEIGHT;So;0;L;;;;;N;;;;; 1DA82;SIGNWRITING LOCATION WIDTH;So;0;L;;;;;N;;;;; 1DA83;SIGNWRITING LOCATION DEPTH;So;0;L;;;;;N;;;;; 1DA84;SIGNWRITING LOCATION HEAD NECK;Mn;0;NSM;;;;;N;;;;; 1DA85;SIGNWRITING LOCATION TORSO;So;0;L;;;;;N;;;;; 1DA86;SIGNWRITING LOCATION LIMBS DIGITS;So;0;L;;;;;N;;;;; 1DA87;SIGNWRITING COMMA;Po;0;L;;;;;N;;;;; 1DA88;SIGNWRITING FULL STOP;Po;0;L;;;;;N;;;;; 1DA89;SIGNWRITING SEMICOLON;Po;0;L;;;;;N;;;;; 1DA8A;SIGNWRITING COLON;Po;0;L;;;;;N;;;;; 1DA8B;SIGNWRITING PARENTHESIS;Po;0;L;;;;;N;;;;; 1DA9B;SIGNWRITING FILL MODIFIER-2;Mn;0;NSM;;;;;N;;;;; 1DA9C;SIGNWRITING FILL MODIFIER-3;Mn;0;NSM;;;;;N;;;;; 1DA9D;SIGNWRITING FILL MODIFIER-4;Mn;0;NSM;;;;;N;;;;; 1DA9E;SIGNWRITING FILL MODIFIER-5;Mn;0;NSM;;;;;N;;;;; 1DA9F;SIGNWRITING FILL MODIFIER-6;Mn;0;NSM;;;;;N;;;;; 1DAA1;SIGNWRITING ROTATION MODIFIER-2;Mn;0;NSM;;;;;N;;;;; 1DAA2;SIGNWRITING ROTATION MODIFIER-3;Mn;0;NSM;;;;;N;;;;; 1DAA3;SIGNWRITING ROTATION MODIFIER-4;Mn;0;NSM;;;;;N;;;;; 1DAA4;SIGNWRITING ROTATION MODIFIER-5;Mn;0;NSM;;;;;N;;;;; 1DAA5;SIGNWRITING ROTATION MODIFIER-6;Mn;0;NSM;;;;;N;;;;; 1DAA6;SIGNWRITING ROTATION MODIFIER-7;Mn;0;NSM;;;;;N;;;;; 1DAA7;SIGNWRITING ROTATION MODIFIER-8;Mn;0;NSM;;;;;N;;;;; 1DAA8;SIGNWRITING ROTATION MODIFIER-9;Mn;0;NSM;;;;;N;;;;; 1DAA9;SIGNWRITING ROTATION MODIFIER-10;Mn;0;NSM;;;;;N;;;;; 1DAAA;SIGNWRITING ROTATION MODIFIER-11;Mn;0;NSM;;;;;N;;;;; 1DAAB;SIGNWRITING ROTATION MODIFIER-12;Mn;0;NSM;;;;;N;;;;; 1DAAC;SIGNWRITING ROTATION MODIFIER-13;Mn;0;NSM;;;;;N;;;;; 1DAAD;SIGNWRITING ROTATION MODIFIER-14;Mn;0;NSM;;;;;N;;;;; 1DAAE;SIGNWRITING ROTATION MODIFIER-15;Mn;0;NSM;;;;;N;;;;; 1DAAF;SIGNWRITING ROTATION MODIFIER-16;Mn;0;NSM;;;;;N;;;;; 1DF00;LATIN SMALL LETTER FENG DIGRAPH WITH TRILL;Ll;0;L;;;;;N;;;;; 1DF01;LATIN SMALL LETTER REVERSED SCRIPT G;Ll;0;L;;;;;N;;;;; 1DF02;LATIN LETTER SMALL CAPITAL TURNED G;Ll;0;L;;;;;N;;;;; 1DF03;LATIN SMALL LETTER REVERSED K;Ll;0;L;;;;;N;;;;; 1DF04;LATIN LETTER SMALL CAPITAL L WITH BELT;Ll;0;L;;;;;N;;;;; 1DF05;LATIN SMALL LETTER LEZH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; 1DF06;LATIN SMALL LETTER TURNED Y WITH BELT;Ll;0;L;;;;;N;;;;; 1DF07;LATIN SMALL LETTER REVERSED ENG;Ll;0;L;;;;;N;;;;; 1DF08;LATIN SMALL LETTER TURNED R WITH LONG LEG AND RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; 1DF09;LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; 1DF0A;LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK;Lo;0;L;;;;;N;;;;; 1DF0B;LATIN SMALL LETTER ESH WITH DOUBLE BAR;Ll;0;L;;;;;N;;;;; 1DF0C;LATIN SMALL LETTER ESH WITH DOUBLE BAR AND CURL;Ll;0;L;;;;;N;;;;; 1DF0D;LATIN SMALL LETTER TURNED T WITH CURL;Ll;0;L;;;;;N;;;;; 1DF0E;LATIN LETTER INVERTED GLOTTAL STOP WITH CURL;Ll;0;L;;;;;N;;;;; 1DF0F;LATIN LETTER STRETCHED C WITH CURL;Ll;0;L;;;;;N;;;;; 1DF10;LATIN LETTER SMALL CAPITAL TURNED K;Ll;0;L;;;;;N;;;;; 1DF11;LATIN SMALL LETTER L WITH FISHHOOK;Ll;0;L;;;;;N;;;;; 1DF12;LATIN SMALL LETTER DEZH DIGRAPH WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; 1DF13;LATIN SMALL LETTER L WITH BELT AND PALATAL HOOK;Ll;0;L;;;;;N;;;;; 1DF14;LATIN SMALL LETTER ENG WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; 1DF15;LATIN SMALL LETTER TURNED R WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; 1DF16;LATIN SMALL LETTER R WITH FISHHOOK AND PALATAL HOOK;Ll;0;L;;;;;N;;;;; 1DF17;LATIN SMALL LETTER TESH DIGRAPH WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; 1DF18;LATIN SMALL LETTER EZH WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; 1DF19;LATIN SMALL LETTER DEZH DIGRAPH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; 1DF1A;LATIN SMALL LETTER I WITH STROKE AND RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; 1DF1B;LATIN SMALL LETTER O WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; 1DF1C;LATIN SMALL LETTER TESH DIGRAPH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; 1DF1D;LATIN SMALL LETTER C WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; 1DF1E;LATIN SMALL LETTER S WITH CURL;Ll;0;L;;;;;N;;;;; 1E000;COMBINING GLAGOLITIC LETTER AZU;Mn;230;NSM;;;;;N;;;;; 1E001;COMBINING GLAGOLITIC LETTER BUKY;Mn;230;NSM;;;;;N;;;;; 1E002;COMBINING GLAGOLITIC LETTER VEDE;Mn;230;NSM;;;;;N;;;;; 1E003;COMBINING GLAGOLITIC LETTER GLAGOLI;Mn;230;NSM;;;;;N;;;;; 1E004;COMBINING GLAGOLITIC LETTER DOBRO;Mn;230;NSM;;;;;N;;;;; 1E005;COMBINING GLAGOLITIC LETTER YESTU;Mn;230;NSM;;;;;N;;;;; 1E006;COMBINING GLAGOLITIC LETTER ZHIVETE;Mn;230;NSM;;;;;N;;;;; 1E008;COMBINING GLAGOLITIC LETTER ZEMLJA;Mn;230;NSM;;;;;N;;;;; 1E009;COMBINING GLAGOLITIC LETTER IZHE;Mn;230;NSM;;;;;N;;;;; 1E00A;COMBINING GLAGOLITIC LETTER INITIAL IZHE;Mn;230;NSM;;;;;N;;;;; 1E00B;COMBINING GLAGOLITIC LETTER I;Mn;230;NSM;;;;;N;;;;; 1E00C;COMBINING GLAGOLITIC LETTER DJERVI;Mn;230;NSM;;;;;N;;;;; 1E00D;COMBINING GLAGOLITIC LETTER KAKO;Mn;230;NSM;;;;;N;;;;; 1E00E;COMBINING GLAGOLITIC LETTER LJUDIJE;Mn;230;NSM;;;;;N;;;;; 1E00F;COMBINING GLAGOLITIC LETTER MYSLITE;Mn;230;NSM;;;;;N;;;;; 1E010;COMBINING GLAGOLITIC LETTER NASHI;Mn;230;NSM;;;;;N;;;;; 1E011;COMBINING GLAGOLITIC LETTER ONU;Mn;230;NSM;;;;;N;;;;; 1E012;COMBINING GLAGOLITIC LETTER POKOJI;Mn;230;NSM;;;;;N;;;;; 1E013;COMBINING GLAGOLITIC LETTER RITSI;Mn;230;NSM;;;;;N;;;;; 1E014;COMBINING GLAGOLITIC LETTER SLOVO;Mn;230;NSM;;;;;N;;;;; 1E015;COMBINING GLAGOLITIC LETTER TVRIDO;Mn;230;NSM;;;;;N;;;;; 1E016;COMBINING GLAGOLITIC LETTER UKU;Mn;230;NSM;;;;;N;;;;; 1E017;COMBINING GLAGOLITIC LETTER FRITU;Mn;230;NSM;;;;;N;;;;; 1E018;COMBINING GLAGOLITIC LETTER HERU;Mn;230;NSM;;;;;N;;;;; 1E01B;COMBINING GLAGOLITIC LETTER SHTA;Mn;230;NSM;;;;;N;;;;; 1E01C;COMBINING GLAGOLITIC LETTER TSI;Mn;230;NSM;;;;;N;;;;; 1E01D;COMBINING GLAGOLITIC LETTER CHRIVI;Mn;230;NSM;;;;;N;;;;; 1E01E;COMBINING GLAGOLITIC LETTER SHA;Mn;230;NSM;;;;;N;;;;; 1E01F;COMBINING GLAGOLITIC LETTER YERU;Mn;230;NSM;;;;;N;;;;; 1E020;COMBINING GLAGOLITIC LETTER YERI;Mn;230;NSM;;;;;N;;;;; 1E021;COMBINING GLAGOLITIC LETTER YATI;Mn;230;NSM;;;;;N;;;;; 1E023;COMBINING GLAGOLITIC LETTER YU;Mn;230;NSM;;;;;N;;;;; 1E024;COMBINING GLAGOLITIC LETTER SMALL YUS;Mn;230;NSM;;;;;N;;;;; 1E026;COMBINING GLAGOLITIC LETTER YO;Mn;230;NSM;;;;;N;;;;; 1E027;COMBINING GLAGOLITIC LETTER IOTATED SMALL YUS;Mn;230;NSM;;;;;N;;;;; 1E028;COMBINING GLAGOLITIC LETTER BIG YUS;Mn;230;NSM;;;;;N;;;;; 1E029;COMBINING GLAGOLITIC LETTER IOTATED BIG YUS;Mn;230;NSM;;;;;N;;;;; 1E02A;COMBINING GLAGOLITIC LETTER FITA;Mn;230;NSM;;;;;N;;;;; 1E100;NYIAKENG PUACHUE HMONG LETTER MA;Lo;0;L;;;;;N;;;;; 1E101;NYIAKENG PUACHUE HMONG LETTER TSA;Lo;0;L;;;;;N;;;;; 1E102;NYIAKENG PUACHUE HMONG LETTER NTA;Lo;0;L;;;;;N;;;;; 1E103;NYIAKENG PUACHUE HMONG LETTER TA;Lo;0;L;;;;;N;;;;; 1E104;NYIAKENG PUACHUE HMONG LETTER HA;Lo;0;L;;;;;N;;;;; 1E105;NYIAKENG PUACHUE HMONG LETTER NA;Lo;0;L;;;;;N;;;;; 1E106;NYIAKENG PUACHUE HMONG LETTER XA;Lo;0;L;;;;;N;;;;; 1E107;NYIAKENG PUACHUE HMONG LETTER NKA;Lo;0;L;;;;;N;;;;; 1E108;NYIAKENG PUACHUE HMONG LETTER CA;Lo;0;L;;;;;N;;;;; 1E109;NYIAKENG PUACHUE HMONG LETTER LA;Lo;0;L;;;;;N;;;;; 1E10A;NYIAKENG PUACHUE HMONG LETTER SA;Lo;0;L;;;;;N;;;;; 1E10B;NYIAKENG PUACHUE HMONG LETTER ZA;Lo;0;L;;;;;N;;;;; 1E10C;NYIAKENG PUACHUE HMONG LETTER NCA;Lo;0;L;;;;;N;;;;; 1E10D;NYIAKENG PUACHUE HMONG LETTER NTSA;Lo;0;L;;;;;N;;;;; 1E10E;NYIAKENG PUACHUE HMONG LETTER KA;Lo;0;L;;;;;N;;;;; 1E10F;NYIAKENG PUACHUE HMONG LETTER DA;Lo;0;L;;;;;N;;;;; 1E110;NYIAKENG PUACHUE HMONG LETTER NYA;Lo;0;L;;;;;N;;;;; 1E111;NYIAKENG PUACHUE HMONG LETTER NRA;Lo;0;L;;;;;N;;;;; 1E112;NYIAKENG PUACHUE HMONG LETTER VA;Lo;0;L;;;;;N;;;;; 1E113;NYIAKENG PUACHUE HMONG LETTER NTXA;Lo;0;L;;;;;N;;;;; 1E114;NYIAKENG PUACHUE HMONG LETTER TXA;Lo;0;L;;;;;N;;;;; 1E115;NYIAKENG PUACHUE HMONG LETTER FA;Lo;0;L;;;;;N;;;;; 1E116;NYIAKENG PUACHUE HMONG LETTER RA;Lo;0;L;;;;;N;;;;; 1E117;NYIAKENG PUACHUE HMONG LETTER QA;Lo;0;L;;;;;N;;;;; 1E118;NYIAKENG PUACHUE HMONG LETTER YA;Lo;0;L;;;;;N;;;;; 1E119;NYIAKENG PUACHUE HMONG LETTER NQA;Lo;0;L;;;;;N;;;;; 1E11A;NYIAKENG PUACHUE HMONG LETTER PA;Lo;0;L;;;;;N;;;;; 1E11B;NYIAKENG PUACHUE HMONG LETTER XYA;Lo;0;L;;;;;N;;;;; 1E11C;NYIAKENG PUACHUE HMONG LETTER NPA;Lo;0;L;;;;;N;;;;; 1E11D;NYIAKENG PUACHUE HMONG LETTER DLA;Lo;0;L;;;;;N;;;;; 1E11E;NYIAKENG PUACHUE HMONG LETTER NPLA;Lo;0;L;;;;;N;;;;; 1E11F;NYIAKENG PUACHUE HMONG LETTER HAH;Lo;0;L;;;;;N;;;;; 1E120;NYIAKENG PUACHUE HMONG LETTER MLA;Lo;0;L;;;;;N;;;;; 1E121;NYIAKENG PUACHUE HMONG LETTER PLA;Lo;0;L;;;;;N;;;;; 1E122;NYIAKENG PUACHUE HMONG LETTER GA;Lo;0;L;;;;;N;;;;; 1E123;NYIAKENG PUACHUE HMONG LETTER RRA;Lo;0;L;;;;;N;;;;; 1E124;NYIAKENG PUACHUE HMONG LETTER A;Lo;0;L;;;;;N;;;;; 1E125;NYIAKENG PUACHUE HMONG LETTER AA;Lo;0;L;;;;;N;;;;; 1E126;NYIAKENG PUACHUE HMONG LETTER I;Lo;0;L;;;;;N;;;;; 1E127;NYIAKENG PUACHUE HMONG LETTER U;Lo;0;L;;;;;N;;;;; 1E128;NYIAKENG PUACHUE HMONG LETTER O;Lo;0;L;;;;;N;;;;; 1E129;NYIAKENG PUACHUE HMONG LETTER OO;Lo;0;L;;;;;N;;;;; 1E12A;NYIAKENG PUACHUE HMONG LETTER E;Lo;0;L;;;;;N;;;;; 1E12B;NYIAKENG PUACHUE HMONG LETTER EE;Lo;0;L;;;;;N;;;;; 1E12C;NYIAKENG PUACHUE HMONG LETTER W;Lo;0;L;;;;;N;;;;; 1E130;NYIAKENG PUACHUE HMONG TONE-B;Mn;230;NSM;;;;;N;;;;; 1E131;NYIAKENG PUACHUE HMONG TONE-M;Mn;230;NSM;;;;;N;;;;; 1E132;NYIAKENG PUACHUE HMONG TONE-J;Mn;230;NSM;;;;;N;;;;; 1E133;NYIAKENG PUACHUE HMONG TONE-V;Mn;230;NSM;;;;;N;;;;; 1E134;NYIAKENG PUACHUE HMONG TONE-S;Mn;230;NSM;;;;;N;;;;; 1E135;NYIAKENG PUACHUE HMONG TONE-G;Mn;230;NSM;;;;;N;;;;; 1E136;NYIAKENG PUACHUE HMONG TONE-D;Mn;230;NSM;;;;;N;;;;; 1E137;NYIAKENG PUACHUE HMONG SIGN FOR PERSON;Lm;0;L;;;;;N;;;;; 1E138;NYIAKENG PUACHUE HMONG SIGN FOR THING;Lm;0;L;;;;;N;;;;; 1E139;NYIAKENG PUACHUE HMONG SIGN FOR LOCATION;Lm;0;L;;;;;N;;;;; 1E13A;NYIAKENG PUACHUE HMONG SIGN FOR ANIMAL;Lm;0;L;;;;;N;;;;; 1E13B;NYIAKENG PUACHUE HMONG SIGN FOR INVERTEBRATE;Lm;0;L;;;;;N;;;;; 1E13C;NYIAKENG PUACHUE HMONG SIGN XW XW;Lm;0;L;;;;;N;;;;; 1E13D;NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER;Lm;0;L;;;;;N;;;;; 1E140;NYIAKENG PUACHUE HMONG DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 1E141;NYIAKENG PUACHUE HMONG DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 1E142;NYIAKENG PUACHUE HMONG DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 1E143;NYIAKENG PUACHUE HMONG DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 1E144;NYIAKENG PUACHUE HMONG DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 1E145;NYIAKENG PUACHUE HMONG DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 1E146;NYIAKENG PUACHUE HMONG DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 1E147;NYIAKENG PUACHUE HMONG DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 1E148;NYIAKENG PUACHUE HMONG DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 1E149;NYIAKENG PUACHUE HMONG DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 1E14E;NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ;Lo;0;L;;;;;N;;;;; 1E14F;NYIAKENG PUACHUE HMONG CIRCLED CA;So;0;L;;;;;N;;;;; 1E290;TOTO LETTER PA;Lo;0;L;;;;;N;;;;; 1E291;TOTO LETTER BA;Lo;0;L;;;;;N;;;;; 1E292;TOTO LETTER TA;Lo;0;L;;;;;N;;;;; 1E293;TOTO LETTER DA;Lo;0;L;;;;;N;;;;; 1E294;TOTO LETTER KA;Lo;0;L;;;;;N;;;;; 1E295;TOTO LETTER GA;Lo;0;L;;;;;N;;;;; 1E296;TOTO LETTER MA;Lo;0;L;;;;;N;;;;; 1E297;TOTO LETTER NA;Lo;0;L;;;;;N;;;;; 1E298;TOTO LETTER NGA;Lo;0;L;;;;;N;;;;; 1E299;TOTO LETTER SA;Lo;0;L;;;;;N;;;;; 1E29A;TOTO LETTER CHA;Lo;0;L;;;;;N;;;;; 1E29B;TOTO LETTER YA;Lo;0;L;;;;;N;;;;; 1E29C;TOTO LETTER WA;Lo;0;L;;;;;N;;;;; 1E29D;TOTO LETTER JA;Lo;0;L;;;;;N;;;;; 1E29E;TOTO LETTER HA;Lo;0;L;;;;;N;;;;; 1E29F;TOTO LETTER RA;Lo;0;L;;;;;N;;;;; 1E2A0;TOTO LETTER LA;Lo;0;L;;;;;N;;;;; 1E2A1;TOTO LETTER I;Lo;0;L;;;;;N;;;;; 1E2A2;TOTO LETTER BREATHY I;Lo;0;L;;;;;N;;;;; 1E2A3;TOTO LETTER IU;Lo;0;L;;;;;N;;;;; 1E2A4;TOTO LETTER BREATHY IU;Lo;0;L;;;;;N;;;;; 1E2A5;TOTO LETTER U;Lo;0;L;;;;;N;;;;; 1E2A6;TOTO LETTER E;Lo;0;L;;;;;N;;;;; 1E2A7;TOTO LETTER BREATHY E;Lo;0;L;;;;;N;;;;; 1E2A8;TOTO LETTER EO;Lo;0;L;;;;;N;;;;; 1E2A9;TOTO LETTER BREATHY EO;Lo;0;L;;;;;N;;;;; 1E2AA;TOTO LETTER O;Lo;0;L;;;;;N;;;;; 1E2AB;TOTO LETTER AE;Lo;0;L;;;;;N;;;;; 1E2AC;TOTO LETTER BREATHY AE;Lo;0;L;;;;;N;;;;; 1E2AD;TOTO LETTER A;Lo;0;L;;;;;N;;;;; 1E2AE;TOTO SIGN RISING TONE;Mn;230;NSM;;;;;N;;;;; 1E2C0;WANCHO LETTER AA;Lo;0;L;;;;;N;;;;; 1E2C1;WANCHO LETTER A;Lo;0;L;;;;;N;;;;; 1E2C2;WANCHO LETTER BA;Lo;0;L;;;;;N;;;;; 1E2C3;WANCHO LETTER CA;Lo;0;L;;;;;N;;;;; 1E2C4;WANCHO LETTER DA;Lo;0;L;;;;;N;;;;; 1E2C5;WANCHO LETTER GA;Lo;0;L;;;;;N;;;;; 1E2C6;WANCHO LETTER YA;Lo;0;L;;;;;N;;;;; 1E2C7;WANCHO LETTER PHA;Lo;0;L;;;;;N;;;;; 1E2C8;WANCHO LETTER LA;Lo;0;L;;;;;N;;;;; 1E2C9;WANCHO LETTER NA;Lo;0;L;;;;;N;;;;; 1E2CA;WANCHO LETTER PA;Lo;0;L;;;;;N;;;;; 1E2CB;WANCHO LETTER TA;Lo;0;L;;;;;N;;;;; 1E2CC;WANCHO LETTER THA;Lo;0;L;;;;;N;;;;; 1E2CD;WANCHO LETTER FA;Lo;0;L;;;;;N;;;;; 1E2CE;WANCHO LETTER SA;Lo;0;L;;;;;N;;;;; 1E2CF;WANCHO LETTER SHA;Lo;0;L;;;;;N;;;;; 1E2D0;WANCHO LETTER JA;Lo;0;L;;;;;N;;;;; 1E2D1;WANCHO LETTER ZA;Lo;0;L;;;;;N;;;;; 1E2D2;WANCHO LETTER WA;Lo;0;L;;;;;N;;;;; 1E2D3;WANCHO LETTER VA;Lo;0;L;;;;;N;;;;; 1E2D4;WANCHO LETTER KA;Lo;0;L;;;;;N;;;;; 1E2D5;WANCHO LETTER O;Lo;0;L;;;;;N;;;;; 1E2D6;WANCHO LETTER AU;Lo;0;L;;;;;N;;;;; 1E2D7;WANCHO LETTER RA;Lo;0;L;;;;;N;;;;; 1E2D8;WANCHO LETTER MA;Lo;0;L;;;;;N;;;;; 1E2D9;WANCHO LETTER KHA;Lo;0;L;;;;;N;;;;; 1E2DA;WANCHO LETTER HA;Lo;0;L;;;;;N;;;;; 1E2DB;WANCHO LETTER E;Lo;0;L;;;;;N;;;;; 1E2DC;WANCHO LETTER I;Lo;0;L;;;;;N;;;;; 1E2DD;WANCHO LETTER NGA;Lo;0;L;;;;;N;;;;; 1E2DE;WANCHO LETTER U;Lo;0;L;;;;;N;;;;; 1E2DF;WANCHO LETTER LLHA;Lo;0;L;;;;;N;;;;; 1E2E0;WANCHO LETTER TSA;Lo;0;L;;;;;N;;;;; 1E2E1;WANCHO LETTER TRA;Lo;0;L;;;;;N;;;;; 1E2E2;WANCHO LETTER ONG;Lo;0;L;;;;;N;;;;; 1E2E3;WANCHO LETTER AANG;Lo;0;L;;;;;N;;;;; 1E2E4;WANCHO LETTER ANG;Lo;0;L;;;;;N;;;;; 1E2E5;WANCHO LETTER ING;Lo;0;L;;;;;N;;;;; 1E2E6;WANCHO LETTER ON;Lo;0;L;;;;;N;;;;; 1E2E7;WANCHO LETTER EN;Lo;0;L;;;;;N;;;;; 1E2E8;WANCHO LETTER AAN;Lo;0;L;;;;;N;;;;; 1E2E9;WANCHO LETTER NYA;Lo;0;L;;;;;N;;;;; 1E2EA;WANCHO LETTER UEN;Lo;0;L;;;;;N;;;;; 1E2EB;WANCHO LETTER YIH;Lo;0;L;;;;;N;;;;; 1E2EC;WANCHO TONE TUP;Mn;230;NSM;;;;;N;;;;; 1E2ED;WANCHO TONE TUPNI;Mn;230;NSM;;;;;N;;;;; 1E2EE;WANCHO TONE KOI;Mn;230;NSM;;;;;N;;;;; 1E2EF;WANCHO TONE KOINI;Mn;230;NSM;;;;;N;;;;; 1E2F0;WANCHO DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 1E2F1;WANCHO DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 1E2F2;WANCHO DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 1E2F3;WANCHO DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 1E2F4;WANCHO DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 1E2F5;WANCHO DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 1E2F6;WANCHO DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 1E2F7;WANCHO DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 1E2F8;WANCHO DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 1E2F9;WANCHO DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 1E2FF;WANCHO NGUN SIGN;Sc;0;ET;;;;;N;;;;; 1E7E0;ETHIOPIC SYLLABLE HHYA;Lo;0;L;;;;;N;;;;; 1E7E1;ETHIOPIC SYLLABLE HHYU;Lo;0;L;;;;;N;;;;; 1E7E2;ETHIOPIC SYLLABLE HHYI;Lo;0;L;;;;;N;;;;; 1E7E3;ETHIOPIC SYLLABLE HHYAA;Lo;0;L;;;;;N;;;;; 1E7E4;ETHIOPIC SYLLABLE HHYEE;Lo;0;L;;;;;N;;;;; 1E7E5;ETHIOPIC SYLLABLE HHYE;Lo;0;L;;;;;N;;;;; 1E7E6;ETHIOPIC SYLLABLE HHYO;Lo;0;L;;;;;N;;;;; 1E7E8;ETHIOPIC SYLLABLE GURAGE HHWA;Lo;0;L;;;;;N;;;;; 1E7E9;ETHIOPIC SYLLABLE HHWI;Lo;0;L;;;;;N;;;;; 1E7EA;ETHIOPIC SYLLABLE HHWEE;Lo;0;L;;;;;N;;;;; 1E7EB;ETHIOPIC SYLLABLE HHWE;Lo;0;L;;;;;N;;;;; 1E7ED;ETHIOPIC SYLLABLE GURAGE MWI;Lo;0;L;;;;;N;;;;; 1E7EE;ETHIOPIC SYLLABLE GURAGE MWEE;Lo;0;L;;;;;N;;;;; 1E7F0;ETHIOPIC SYLLABLE GURAGE QWI;Lo;0;L;;;;;N;;;;; 1E7F1;ETHIOPIC SYLLABLE GURAGE QWEE;Lo;0;L;;;;;N;;;;; 1E7F2;ETHIOPIC SYLLABLE GURAGE QWE;Lo;0;L;;;;;N;;;;; 1E7F3;ETHIOPIC SYLLABLE GURAGE BWI;Lo;0;L;;;;;N;;;;; 1E7F4;ETHIOPIC SYLLABLE GURAGE BWEE;Lo;0;L;;;;;N;;;;; 1E7F5;ETHIOPIC SYLLABLE GURAGE KWI;Lo;0;L;;;;;N;;;;; 1E7F6;ETHIOPIC SYLLABLE GURAGE KWEE;Lo;0;L;;;;;N;;;;; 1E7F7;ETHIOPIC SYLLABLE GURAGE KWE;Lo;0;L;;;;;N;;;;; 1E7F8;ETHIOPIC SYLLABLE GURAGE GWI;Lo;0;L;;;;;N;;;;; 1E7F9;ETHIOPIC SYLLABLE GURAGE GWEE;Lo;0;L;;;;;N;;;;; 1E7FA;ETHIOPIC SYLLABLE GURAGE GWE;Lo;0;L;;;;;N;;;;; 1E7FB;ETHIOPIC SYLLABLE GURAGE FWI;Lo;0;L;;;;;N;;;;; 1E7FC;ETHIOPIC SYLLABLE GURAGE FWEE;Lo;0;L;;;;;N;;;;; 1E7FD;ETHIOPIC SYLLABLE GURAGE PWI;Lo;0;L;;;;;N;;;;; 1E7FE;ETHIOPIC SYLLABLE GURAGE PWEE;Lo;0;L;;;;;N;;;;; 1E800;MENDE KIKAKUI SYLLABLE M001 KI;Lo;0;R;;;;;N;;;;; 1E801;MENDE KIKAKUI SYLLABLE M002 KA;Lo;0;R;;;;;N;;;;; 1E802;MENDE KIKAKUI SYLLABLE M003 KU;Lo;0;R;;;;;N;;;;; 1E803;MENDE KIKAKUI SYLLABLE M065 KEE;Lo;0;R;;;;;N;;;;; 1E804;MENDE KIKAKUI SYLLABLE M095 KE;Lo;0;R;;;;;N;;;;; 1E805;MENDE KIKAKUI SYLLABLE M076 KOO;Lo;0;R;;;;;N;;;;; 1E806;MENDE KIKAKUI SYLLABLE M048 KO;Lo;0;R;;;;;N;;;;; 1E807;MENDE KIKAKUI SYLLABLE M179 KUA;Lo;0;R;;;;;N;;;;; 1E808;MENDE KIKAKUI SYLLABLE M004 WI;Lo;0;R;;;;;N;;;;; 1E809;MENDE KIKAKUI SYLLABLE M005 WA;Lo;0;R;;;;;N;;;;; 1E80A;MENDE KIKAKUI SYLLABLE M006 WU;Lo;0;R;;;;;N;;;;; 1E80B;MENDE KIKAKUI SYLLABLE M126 WEE;Lo;0;R;;;;;N;;;;; 1E80C;MENDE KIKAKUI SYLLABLE M118 WE;Lo;0;R;;;;;N;;;;; 1E80D;MENDE KIKAKUI SYLLABLE M114 WOO;Lo;0;R;;;;;N;;;;; 1E80E;MENDE KIKAKUI SYLLABLE M045 WO;Lo;0;R;;;;;N;;;;; 1E80F;MENDE KIKAKUI SYLLABLE M194 WUI;Lo;0;R;;;;;N;;;;; 1E810;MENDE KIKAKUI SYLLABLE M143 WEI;Lo;0;R;;;;;N;;;;; 1E811;MENDE KIKAKUI SYLLABLE M061 WVI;Lo;0;R;;;;;N;;;;; 1E812;MENDE KIKAKUI SYLLABLE M049 WVA;Lo;0;R;;;;;N;;;;; 1E813;MENDE KIKAKUI SYLLABLE M139 WVE;Lo;0;R;;;;;N;;;;; 1E814;MENDE KIKAKUI SYLLABLE M007 MIN;Lo;0;R;;;;;N;;;;; 1E815;MENDE KIKAKUI SYLLABLE M008 MAN;Lo;0;R;;;;;N;;;;; 1E816;MENDE KIKAKUI SYLLABLE M009 MUN;Lo;0;R;;;;;N;;;;; 1E817;MENDE KIKAKUI SYLLABLE M059 MEN;Lo;0;R;;;;;N;;;;; 1E818;MENDE KIKAKUI SYLLABLE M094 MON;Lo;0;R;;;;;N;;;;; 1E819;MENDE KIKAKUI SYLLABLE M154 MUAN;Lo;0;R;;;;;N;;;;; 1E81A;MENDE KIKAKUI SYLLABLE M189 MUEN;Lo;0;R;;;;;N;;;;; 1E81B;MENDE KIKAKUI SYLLABLE M010 BI;Lo;0;R;;;;;N;;;;; 1E81C;MENDE KIKAKUI SYLLABLE M011 BA;Lo;0;R;;;;;N;;;;; 1E81D;MENDE KIKAKUI SYLLABLE M012 BU;Lo;0;R;;;;;N;;;;; 1E81E;MENDE KIKAKUI SYLLABLE M150 BEE;Lo;0;R;;;;;N;;;;; 1E81F;MENDE KIKAKUI SYLLABLE M097 BE;Lo;0;R;;;;;N;;;;; 1E820;MENDE KIKAKUI SYLLABLE M103 BOO;Lo;0;R;;;;;N;;;;; 1E821;MENDE KIKAKUI SYLLABLE M138 BO;Lo;0;R;;;;;N;;;;; 1E822;MENDE KIKAKUI SYLLABLE M013 I;Lo;0;R;;;;;N;;;;; 1E823;MENDE KIKAKUI SYLLABLE M014 A;Lo;0;R;;;;;N;;;;; 1E824;MENDE KIKAKUI SYLLABLE M015 U;Lo;0;R;;;;;N;;;;; 1E825;MENDE KIKAKUI SYLLABLE M163 EE;Lo;0;R;;;;;N;;;;; 1E826;MENDE KIKAKUI SYLLABLE M100 E;Lo;0;R;;;;;N;;;;; 1E827;MENDE KIKAKUI SYLLABLE M165 OO;Lo;0;R;;;;;N;;;;; 1E828;MENDE KIKAKUI SYLLABLE M147 O;Lo;0;R;;;;;N;;;;; 1E829;MENDE KIKAKUI SYLLABLE M137 EI;Lo;0;R;;;;;N;;;;; 1E82A;MENDE KIKAKUI SYLLABLE M131 IN;Lo;0;R;;;;;N;;;;; 1E82B;MENDE KIKAKUI SYLLABLE M135 IN;Lo;0;R;;;;;N;;;;; 1E82C;MENDE KIKAKUI SYLLABLE M195 AN;Lo;0;R;;;;;N;;;;; 1E82D;MENDE KIKAKUI SYLLABLE M178 EN;Lo;0;R;;;;;N;;;;; 1E82E;MENDE KIKAKUI SYLLABLE M019 SI;Lo;0;R;;;;;N;;;;; 1E82F;MENDE KIKAKUI SYLLABLE M020 SA;Lo;0;R;;;;;N;;;;; 1E830;MENDE KIKAKUI SYLLABLE M021 SU;Lo;0;R;;;;;N;;;;; 1E831;MENDE KIKAKUI SYLLABLE M162 SEE;Lo;0;R;;;;;N;;;;; 1E832;MENDE KIKAKUI SYLLABLE M116 SE;Lo;0;R;;;;;N;;;;; 1E833;MENDE KIKAKUI SYLLABLE M136 SOO;Lo;0;R;;;;;N;;;;; 1E834;MENDE KIKAKUI SYLLABLE M079 SO;Lo;0;R;;;;;N;;;;; 1E835;MENDE KIKAKUI SYLLABLE M196 SIA;Lo;0;R;;;;;N;;;;; 1E836;MENDE KIKAKUI SYLLABLE M025 LI;Lo;0;R;;;;;N;;;;; 1E837;MENDE KIKAKUI SYLLABLE M026 LA;Lo;0;R;;;;;N;;;;; 1E838;MENDE KIKAKUI SYLLABLE M027 LU;Lo;0;R;;;;;N;;;;; 1E839;MENDE KIKAKUI SYLLABLE M084 LEE;Lo;0;R;;;;;N;;;;; 1E83A;MENDE KIKAKUI SYLLABLE M073 LE;Lo;0;R;;;;;N;;;;; 1E83B;MENDE KIKAKUI SYLLABLE M054 LOO;Lo;0;R;;;;;N;;;;; 1E83C;MENDE KIKAKUI SYLLABLE M153 LO;Lo;0;R;;;;;N;;;;; 1E83D;MENDE KIKAKUI SYLLABLE M110 LONG LE;Lo;0;R;;;;;N;;;;; 1E83E;MENDE KIKAKUI SYLLABLE M016 DI;Lo;0;R;;;;;N;;;;; 1E83F;MENDE KIKAKUI SYLLABLE M017 DA;Lo;0;R;;;;;N;;;;; 1E840;MENDE KIKAKUI SYLLABLE M018 DU;Lo;0;R;;;;;N;;;;; 1E841;MENDE KIKAKUI SYLLABLE M089 DEE;Lo;0;R;;;;;N;;;;; 1E842;MENDE KIKAKUI SYLLABLE M180 DOO;Lo;0;R;;;;;N;;;;; 1E843;MENDE KIKAKUI SYLLABLE M181 DO;Lo;0;R;;;;;N;;;;; 1E844;MENDE KIKAKUI SYLLABLE M022 TI;Lo;0;R;;;;;N;;;;; 1E845;MENDE KIKAKUI SYLLABLE M023 TA;Lo;0;R;;;;;N;;;;; 1E846;MENDE KIKAKUI SYLLABLE M024 TU;Lo;0;R;;;;;N;;;;; 1E847;MENDE KIKAKUI SYLLABLE M091 TEE;Lo;0;R;;;;;N;;;;; 1E848;MENDE KIKAKUI SYLLABLE M055 TE;Lo;0;R;;;;;N;;;;; 1E849;MENDE KIKAKUI SYLLABLE M104 TOO;Lo;0;R;;;;;N;;;;; 1E84A;MENDE KIKAKUI SYLLABLE M069 TO;Lo;0;R;;;;;N;;;;; 1E84B;MENDE KIKAKUI SYLLABLE M028 JI;Lo;0;R;;;;;N;;;;; 1E84C;MENDE KIKAKUI SYLLABLE M029 JA;Lo;0;R;;;;;N;;;;; 1E84D;MENDE KIKAKUI SYLLABLE M030 JU;Lo;0;R;;;;;N;;;;; 1E84E;MENDE KIKAKUI SYLLABLE M157 JEE;Lo;0;R;;;;;N;;;;; 1E84F;MENDE KIKAKUI SYLLABLE M113 JE;Lo;0;R;;;;;N;;;;; 1E850;MENDE KIKAKUI SYLLABLE M160 JOO;Lo;0;R;;;;;N;;;;; 1E851;MENDE KIKAKUI SYLLABLE M063 JO;Lo;0;R;;;;;N;;;;; 1E852;MENDE KIKAKUI SYLLABLE M175 LONG JO;Lo;0;R;;;;;N;;;;; 1E853;MENDE KIKAKUI SYLLABLE M031 YI;Lo;0;R;;;;;N;;;;; 1E854;MENDE KIKAKUI SYLLABLE M032 YA;Lo;0;R;;;;;N;;;;; 1E855;MENDE KIKAKUI SYLLABLE M033 YU;Lo;0;R;;;;;N;;;;; 1E856;MENDE KIKAKUI SYLLABLE M109 YEE;Lo;0;R;;;;;N;;;;; 1E857;MENDE KIKAKUI SYLLABLE M080 YE;Lo;0;R;;;;;N;;;;; 1E858;MENDE KIKAKUI SYLLABLE M141 YOO;Lo;0;R;;;;;N;;;;; 1E859;MENDE KIKAKUI SYLLABLE M121 YO;Lo;0;R;;;;;N;;;;; 1E85A;MENDE KIKAKUI SYLLABLE M034 FI;Lo;0;R;;;;;N;;;;; 1E85B;MENDE KIKAKUI SYLLABLE M035 FA;Lo;0;R;;;;;N;;;;; 1E85C;MENDE KIKAKUI SYLLABLE M036 FU;Lo;0;R;;;;;N;;;;; 1E85D;MENDE KIKAKUI SYLLABLE M078 FEE;Lo;0;R;;;;;N;;;;; 1E85E;MENDE KIKAKUI SYLLABLE M075 FE;Lo;0;R;;;;;N;;;;; 1E85F;MENDE KIKAKUI SYLLABLE M133 FOO;Lo;0;R;;;;;N;;;;; 1E860;MENDE KIKAKUI SYLLABLE M088 FO;Lo;0;R;;;;;N;;;;; 1E861;MENDE KIKAKUI SYLLABLE M197 FUA;Lo;0;R;;;;;N;;;;; 1E862;MENDE KIKAKUI SYLLABLE M101 FAN;Lo;0;R;;;;;N;;;;; 1E863;MENDE KIKAKUI SYLLABLE M037 NIN;Lo;0;R;;;;;N;;;;; 1E864;MENDE KIKAKUI SYLLABLE M038 NAN;Lo;0;R;;;;;N;;;;; 1E865;MENDE KIKAKUI SYLLABLE M039 NUN;Lo;0;R;;;;;N;;;;; 1E866;MENDE KIKAKUI SYLLABLE M117 NEN;Lo;0;R;;;;;N;;;;; 1E867;MENDE KIKAKUI SYLLABLE M169 NON;Lo;0;R;;;;;N;;;;; 1E868;MENDE KIKAKUI SYLLABLE M176 HI;Lo;0;R;;;;;N;;;;; 1E869;MENDE KIKAKUI SYLLABLE M041 HA;Lo;0;R;;;;;N;;;;; 1E86A;MENDE KIKAKUI SYLLABLE M186 HU;Lo;0;R;;;;;N;;;;; 1E86B;MENDE KIKAKUI SYLLABLE M040 HEE;Lo;0;R;;;;;N;;;;; 1E86C;MENDE KIKAKUI SYLLABLE M096 HE;Lo;0;R;;;;;N;;;;; 1E86D;MENDE KIKAKUI SYLLABLE M042 HOO;Lo;0;R;;;;;N;;;;; 1E86E;MENDE KIKAKUI SYLLABLE M140 HO;Lo;0;R;;;;;N;;;;; 1E86F;MENDE KIKAKUI SYLLABLE M083 HEEI;Lo;0;R;;;;;N;;;;; 1E870;MENDE KIKAKUI SYLLABLE M128 HOOU;Lo;0;R;;;;;N;;;;; 1E871;MENDE KIKAKUI SYLLABLE M053 HIN;Lo;0;R;;;;;N;;;;; 1E872;MENDE KIKAKUI SYLLABLE M130 HAN;Lo;0;R;;;;;N;;;;; 1E873;MENDE KIKAKUI SYLLABLE M087 HUN;Lo;0;R;;;;;N;;;;; 1E874;MENDE KIKAKUI SYLLABLE M052 HEN;Lo;0;R;;;;;N;;;;; 1E875;MENDE KIKAKUI SYLLABLE M193 HON;Lo;0;R;;;;;N;;;;; 1E876;MENDE KIKAKUI SYLLABLE M046 HUAN;Lo;0;R;;;;;N;;;;; 1E877;MENDE KIKAKUI SYLLABLE M090 NGGI;Lo;0;R;;;;;N;;;;; 1E878;MENDE KIKAKUI SYLLABLE M043 NGGA;Lo;0;R;;;;;N;;;;; 1E879;MENDE KIKAKUI SYLLABLE M082 NGGU;Lo;0;R;;;;;N;;;;; 1E87A;MENDE KIKAKUI SYLLABLE M115 NGGEE;Lo;0;R;;;;;N;;;;; 1E87B;MENDE KIKAKUI SYLLABLE M146 NGGE;Lo;0;R;;;;;N;;;;; 1E87C;MENDE KIKAKUI SYLLABLE M156 NGGOO;Lo;0;R;;;;;N;;;;; 1E87D;MENDE KIKAKUI SYLLABLE M120 NGGO;Lo;0;R;;;;;N;;;;; 1E87E;MENDE KIKAKUI SYLLABLE M159 NGGAA;Lo;0;R;;;;;N;;;;; 1E87F;MENDE KIKAKUI SYLLABLE M127 NGGUA;Lo;0;R;;;;;N;;;;; 1E880;MENDE KIKAKUI SYLLABLE M086 LONG NGGE;Lo;0;R;;;;;N;;;;; 1E881;MENDE KIKAKUI SYLLABLE M106 LONG NGGOO;Lo;0;R;;;;;N;;;;; 1E882;MENDE KIKAKUI SYLLABLE M183 LONG NGGO;Lo;0;R;;;;;N;;;;; 1E883;MENDE KIKAKUI SYLLABLE M155 GI;Lo;0;R;;;;;N;;;;; 1E884;MENDE KIKAKUI SYLLABLE M111 GA;Lo;0;R;;;;;N;;;;; 1E885;MENDE KIKAKUI SYLLABLE M168 GU;Lo;0;R;;;;;N;;;;; 1E886;MENDE KIKAKUI SYLLABLE M190 GEE;Lo;0;R;;;;;N;;;;; 1E887;MENDE KIKAKUI SYLLABLE M166 GUEI;Lo;0;R;;;;;N;;;;; 1E888;MENDE KIKAKUI SYLLABLE M167 GUAN;Lo;0;R;;;;;N;;;;; 1E889;MENDE KIKAKUI SYLLABLE M184 NGEN;Lo;0;R;;;;;N;;;;; 1E88A;MENDE KIKAKUI SYLLABLE M057 NGON;Lo;0;R;;;;;N;;;;; 1E88B;MENDE KIKAKUI SYLLABLE M177 NGUAN;Lo;0;R;;;;;N;;;;; 1E88C;MENDE KIKAKUI SYLLABLE M068 PI;Lo;0;R;;;;;N;;;;; 1E88D;MENDE KIKAKUI SYLLABLE M099 PA;Lo;0;R;;;;;N;;;;; 1E88E;MENDE KIKAKUI SYLLABLE M050 PU;Lo;0;R;;;;;N;;;;; 1E88F;MENDE KIKAKUI SYLLABLE M081 PEE;Lo;0;R;;;;;N;;;;; 1E890;MENDE KIKAKUI SYLLABLE M051 PE;Lo;0;R;;;;;N;;;;; 1E891;MENDE KIKAKUI SYLLABLE M102 POO;Lo;0;R;;;;;N;;;;; 1E892;MENDE KIKAKUI SYLLABLE M066 PO;Lo;0;R;;;;;N;;;;; 1E893;MENDE KIKAKUI SYLLABLE M145 MBI;Lo;0;R;;;;;N;;;;; 1E894;MENDE KIKAKUI SYLLABLE M062 MBA;Lo;0;R;;;;;N;;;;; 1E895;MENDE KIKAKUI SYLLABLE M122 MBU;Lo;0;R;;;;;N;;;;; 1E896;MENDE KIKAKUI SYLLABLE M047 MBEE;Lo;0;R;;;;;N;;;;; 1E897;MENDE KIKAKUI SYLLABLE M188 MBEE;Lo;0;R;;;;;N;;;;; 1E898;MENDE KIKAKUI SYLLABLE M072 MBE;Lo;0;R;;;;;N;;;;; 1E899;MENDE KIKAKUI SYLLABLE M172 MBOO;Lo;0;R;;;;;N;;;;; 1E89A;MENDE KIKAKUI SYLLABLE M174 MBO;Lo;0;R;;;;;N;;;;; 1E89B;MENDE KIKAKUI SYLLABLE M187 MBUU;Lo;0;R;;;;;N;;;;; 1E89C;MENDE KIKAKUI SYLLABLE M161 LONG MBE;Lo;0;R;;;;;N;;;;; 1E89D;MENDE KIKAKUI SYLLABLE M105 LONG MBOO;Lo;0;R;;;;;N;;;;; 1E89E;MENDE KIKAKUI SYLLABLE M142 LONG MBO;Lo;0;R;;;;;N;;;;; 1E89F;MENDE KIKAKUI SYLLABLE M132 KPI;Lo;0;R;;;;;N;;;;; 1E8A0;MENDE KIKAKUI SYLLABLE M092 KPA;Lo;0;R;;;;;N;;;;; 1E8A1;MENDE KIKAKUI SYLLABLE M074 KPU;Lo;0;R;;;;;N;;;;; 1E8A2;MENDE KIKAKUI SYLLABLE M044 KPEE;Lo;0;R;;;;;N;;;;; 1E8A3;MENDE KIKAKUI SYLLABLE M108 KPE;Lo;0;R;;;;;N;;;;; 1E8A4;MENDE KIKAKUI SYLLABLE M112 KPOO;Lo;0;R;;;;;N;;;;; 1E8A5;MENDE KIKAKUI SYLLABLE M158 KPO;Lo;0;R;;;;;N;;;;; 1E8A6;MENDE KIKAKUI SYLLABLE M124 GBI;Lo;0;R;;;;;N;;;;; 1E8A7;MENDE KIKAKUI SYLLABLE M056 GBA;Lo;0;R;;;;;N;;;;; 1E8A8;MENDE KIKAKUI SYLLABLE M148 GBU;Lo;0;R;;;;;N;;;;; 1E8A9;MENDE KIKAKUI SYLLABLE M093 GBEE;Lo;0;R;;;;;N;;;;; 1E8AA;MENDE KIKAKUI SYLLABLE M107 GBE;Lo;0;R;;;;;N;;;;; 1E8AB;MENDE KIKAKUI SYLLABLE M071 GBOO;Lo;0;R;;;;;N;;;;; 1E8AC;MENDE KIKAKUI SYLLABLE M070 GBO;Lo;0;R;;;;;N;;;;; 1E8AD;MENDE KIKAKUI SYLLABLE M171 RA;Lo;0;R;;;;;N;;;;; 1E8AE;MENDE KIKAKUI SYLLABLE M123 NDI;Lo;0;R;;;;;N;;;;; 1E8AF;MENDE KIKAKUI SYLLABLE M129 NDA;Lo;0;R;;;;;N;;;;; 1E8B0;MENDE KIKAKUI SYLLABLE M125 NDU;Lo;0;R;;;;;N;;;;; 1E8B1;MENDE KIKAKUI SYLLABLE M191 NDEE;Lo;0;R;;;;;N;;;;; 1E8B2;MENDE KIKAKUI SYLLABLE M119 NDE;Lo;0;R;;;;;N;;;;; 1E8B3;MENDE KIKAKUI SYLLABLE M067 NDOO;Lo;0;R;;;;;N;;;;; 1E8B4;MENDE KIKAKUI SYLLABLE M064 NDO;Lo;0;R;;;;;N;;;;; 1E8B5;MENDE KIKAKUI SYLLABLE M152 NJA;Lo;0;R;;;;;N;;;;; 1E8B6;MENDE KIKAKUI SYLLABLE M192 NJU;Lo;0;R;;;;;N;;;;; 1E8B7;MENDE KIKAKUI SYLLABLE M149 NJEE;Lo;0;R;;;;;N;;;;; 1E8B8;MENDE KIKAKUI SYLLABLE M134 NJOO;Lo;0;R;;;;;N;;;;; 1E8B9;MENDE KIKAKUI SYLLABLE M182 VI;Lo;0;R;;;;;N;;;;; 1E8BA;MENDE KIKAKUI SYLLABLE M185 VA;Lo;0;R;;;;;N;;;;; 1E8BB;MENDE KIKAKUI SYLLABLE M151 VU;Lo;0;R;;;;;N;;;;; 1E8BC;MENDE KIKAKUI SYLLABLE M173 VEE;Lo;0;R;;;;;N;;;;; 1E8BD;MENDE KIKAKUI SYLLABLE M085 VE;Lo;0;R;;;;;N;;;;; 1E8BE;MENDE KIKAKUI SYLLABLE M144 VOO;Lo;0;R;;;;;N;;;;; 1E8BF;MENDE KIKAKUI SYLLABLE M077 VO;Lo;0;R;;;;;N;;;;; 1E8C0;MENDE KIKAKUI SYLLABLE M164 NYIN;Lo;0;R;;;;;N;;;;; 1E8C1;MENDE KIKAKUI SYLLABLE M058 NYAN;Lo;0;R;;;;;N;;;;; 1E8C2;MENDE KIKAKUI SYLLABLE M170 NYUN;Lo;0;R;;;;;N;;;;; 1E8C3;MENDE KIKAKUI SYLLABLE M098 NYEN;Lo;0;R;;;;;N;;;;; 1E8C4;MENDE KIKAKUI SYLLABLE M060 NYON;Lo;0;R;;;;;N;;;;; 1E8C7;MENDE KIKAKUI DIGIT ONE;No;0;R;;;;1;N;;;;; 1E8C8;MENDE KIKAKUI DIGIT TWO;No;0;R;;;;2;N;;;;; 1E8C9;MENDE KIKAKUI DIGIT THREE;No;0;R;;;;3;N;;;;; 1E8CA;MENDE KIKAKUI DIGIT FOUR;No;0;R;;;;4;N;;;;; 1E8CB;MENDE KIKAKUI DIGIT FIVE;No;0;R;;;;5;N;;;;; 1E8CC;MENDE KIKAKUI DIGIT SIX;No;0;R;;;;6;N;;;;; 1E8CD;MENDE KIKAKUI DIGIT SEVEN;No;0;R;;;;7;N;;;;; 1E8CE;MENDE KIKAKUI DIGIT EIGHT;No;0;R;;;;8;N;;;;; 1E8CF;MENDE KIKAKUI DIGIT NINE;No;0;R;;;;9;N;;;;; 1E8D0;MENDE KIKAKUI COMBINING NUMBER TEENS;Mn;220;NSM;;;;;N;;;;; 1E8D1;MENDE KIKAKUI COMBINING NUMBER TENS;Mn;220;NSM;;;;;N;;;;; 1E8D2;MENDE KIKAKUI COMBINING NUMBER HUNDREDS;Mn;220;NSM;;;;;N;;;;; 1E8D3;MENDE KIKAKUI COMBINING NUMBER THOUSANDS;Mn;220;NSM;;;;;N;;;;; 1E8D4;MENDE KIKAKUI COMBINING NUMBER TEN THOUSANDS;Mn;220;NSM;;;;;N;;;;; 1E8D5;MENDE KIKAKUI COMBINING NUMBER HUNDRED THOUSANDS;Mn;220;NSM;;;;;N;;;;; 1E8D6;MENDE KIKAKUI COMBINING NUMBER MILLIONS;Mn;220;NSM;;;;;N;;;;; 1E900;ADLAM CAPITAL LETTER ALIF;Lu;0;R;;;;;N;;;;1E922; 1E901;ADLAM CAPITAL LETTER DAALI;Lu;0;R;;;;;N;;;;1E923; 1E902;ADLAM CAPITAL LETTER LAAM;Lu;0;R;;;;;N;;;;1E924; 1E903;ADLAM CAPITAL LETTER MIIM;Lu;0;R;;;;;N;;;;1E925; 1E904;ADLAM CAPITAL LETTER BA;Lu;0;R;;;;;N;;;;1E926; 1E905;ADLAM CAPITAL LETTER SINNYIIYHE;Lu;0;R;;;;;N;;;;1E927; 1E906;ADLAM CAPITAL LETTER PE;Lu;0;R;;;;;N;;;;1E928; 1E907;ADLAM CAPITAL LETTER BHE;Lu;0;R;;;;;N;;;;1E929; 1E908;ADLAM CAPITAL LETTER RA;Lu;0;R;;;;;N;;;;1E92A; 1E909;ADLAM CAPITAL LETTER E;Lu;0;R;;;;;N;;;;1E92B; 1E90A;ADLAM CAPITAL LETTER FA;Lu;0;R;;;;;N;;;;1E92C; 1E90B;ADLAM CAPITAL LETTER I;Lu;0;R;;;;;N;;;;1E92D; 1E90C;ADLAM CAPITAL LETTER O;Lu;0;R;;;;;N;;;;1E92E; 1E90D;ADLAM CAPITAL LETTER DHA;Lu;0;R;;;;;N;;;;1E92F; 1E90E;ADLAM CAPITAL LETTER YHE;Lu;0;R;;;;;N;;;;1E930; 1E90F;ADLAM CAPITAL LETTER WAW;Lu;0;R;;;;;N;;;;1E931; 1E910;ADLAM CAPITAL LETTER NUN;Lu;0;R;;;;;N;;;;1E932; 1E911;ADLAM CAPITAL LETTER KAF;Lu;0;R;;;;;N;;;;1E933; 1E912;ADLAM CAPITAL LETTER YA;Lu;0;R;;;;;N;;;;1E934; 1E913;ADLAM CAPITAL LETTER U;Lu;0;R;;;;;N;;;;1E935; 1E914;ADLAM CAPITAL LETTER JIIM;Lu;0;R;;;;;N;;;;1E936; 1E915;ADLAM CAPITAL LETTER CHI;Lu;0;R;;;;;N;;;;1E937; 1E916;ADLAM CAPITAL LETTER HA;Lu;0;R;;;;;N;;;;1E938; 1E917;ADLAM CAPITAL LETTER QAAF;Lu;0;R;;;;;N;;;;1E939; 1E918;ADLAM CAPITAL LETTER GA;Lu;0;R;;;;;N;;;;1E93A; 1E919;ADLAM CAPITAL LETTER NYA;Lu;0;R;;;;;N;;;;1E93B; 1E91A;ADLAM CAPITAL LETTER TU;Lu;0;R;;;;;N;;;;1E93C; 1E91B;ADLAM CAPITAL LETTER NHA;Lu;0;R;;;;;N;;;;1E93D; 1E91C;ADLAM CAPITAL LETTER VA;Lu;0;R;;;;;N;;;;1E93E; 1E91D;ADLAM CAPITAL LETTER KHA;Lu;0;R;;;;;N;;;;1E93F; 1E91E;ADLAM CAPITAL LETTER GBE;Lu;0;R;;;;;N;;;;1E940; 1E91F;ADLAM CAPITAL LETTER ZAL;Lu;0;R;;;;;N;;;;1E941; 1E920;ADLAM CAPITAL LETTER KPO;Lu;0;R;;;;;N;;;;1E942; 1E921;ADLAM CAPITAL LETTER SHA;Lu;0;R;;;;;N;;;;1E943; 1E922;ADLAM SMALL LETTER ALIF;Ll;0;R;;;;;N;;;1E900;;1E900 1E923;ADLAM SMALL LETTER DAALI;Ll;0;R;;;;;N;;;1E901;;1E901 1E924;ADLAM SMALL LETTER LAAM;Ll;0;R;;;;;N;;;1E902;;1E902 1E925;ADLAM SMALL LETTER MIIM;Ll;0;R;;;;;N;;;1E903;;1E903 1E926;ADLAM SMALL LETTER BA;Ll;0;R;;;;;N;;;1E904;;1E904 1E927;ADLAM SMALL LETTER SINNYIIYHE;Ll;0;R;;;;;N;;;1E905;;1E905 1E928;ADLAM SMALL LETTER PE;Ll;0;R;;;;;N;;;1E906;;1E906 1E929;ADLAM SMALL LETTER BHE;Ll;0;R;;;;;N;;;1E907;;1E907 1E92A;ADLAM SMALL LETTER RA;Ll;0;R;;;;;N;;;1E908;;1E908 1E92B;ADLAM SMALL LETTER E;Ll;0;R;;;;;N;;;1E909;;1E909 1E92C;ADLAM SMALL LETTER FA;Ll;0;R;;;;;N;;;1E90A;;1E90A 1E92D;ADLAM SMALL LETTER I;Ll;0;R;;;;;N;;;1E90B;;1E90B 1E92E;ADLAM SMALL LETTER O;Ll;0;R;;;;;N;;;1E90C;;1E90C 1E92F;ADLAM SMALL LETTER DHA;Ll;0;R;;;;;N;;;1E90D;;1E90D 1E930;ADLAM SMALL LETTER YHE;Ll;0;R;;;;;N;;;1E90E;;1E90E 1E931;ADLAM SMALL LETTER WAW;Ll;0;R;;;;;N;;;1E90F;;1E90F 1E932;ADLAM SMALL LETTER NUN;Ll;0;R;;;;;N;;;1E910;;1E910 1E933;ADLAM SMALL LETTER KAF;Ll;0;R;;;;;N;;;1E911;;1E911 1E934;ADLAM SMALL LETTER YA;Ll;0;R;;;;;N;;;1E912;;1E912 1E935;ADLAM SMALL LETTER U;Ll;0;R;;;;;N;;;1E913;;1E913 1E936;ADLAM SMALL LETTER JIIM;Ll;0;R;;;;;N;;;1E914;;1E914 1E937;ADLAM SMALL LETTER CHI;Ll;0;R;;;;;N;;;1E915;;1E915 1E938;ADLAM SMALL LETTER HA;Ll;0;R;;;;;N;;;1E916;;1E916 1E939;ADLAM SMALL LETTER QAAF;Ll;0;R;;;;;N;;;1E917;;1E917 1E93A;ADLAM SMALL LETTER GA;Ll;0;R;;;;;N;;;1E918;;1E918 1E93B;ADLAM SMALL LETTER NYA;Ll;0;R;;;;;N;;;1E919;;1E919 1E93C;ADLAM SMALL LETTER TU;Ll;0;R;;;;;N;;;1E91A;;1E91A 1E93D;ADLAM SMALL LETTER NHA;Ll;0;R;;;;;N;;;1E91B;;1E91B 1E93E;ADLAM SMALL LETTER VA;Ll;0;R;;;;;N;;;1E91C;;1E91C 1E93F;ADLAM SMALL LETTER KHA;Ll;0;R;;;;;N;;;1E91D;;1E91D 1E940;ADLAM SMALL LETTER GBE;Ll;0;R;;;;;N;;;1E91E;;1E91E 1E941;ADLAM SMALL LETTER ZAL;Ll;0;R;;;;;N;;;1E91F;;1E91F 1E942;ADLAM SMALL LETTER KPO;Ll;0;R;;;;;N;;;1E920;;1E920 1E943;ADLAM SMALL LETTER SHA;Ll;0;R;;;;;N;;;1E921;;1E921 1E944;ADLAM ALIF LENGTHENER;Mn;230;NSM;;;;;N;;;;; 1E945;ADLAM VOWEL LENGTHENER;Mn;230;NSM;;;;;N;;;;; 1E946;ADLAM GEMINATION MARK;Mn;230;NSM;;;;;N;;;;; 1E947;ADLAM HAMZA;Mn;230;NSM;;;;;N;;;;; 1E948;ADLAM CONSONANT MODIFIER;Mn;230;NSM;;;;;N;;;;; 1E949;ADLAM GEMINATE CONSONANT MODIFIER;Mn;230;NSM;;;;;N;;;;; 1E94A;ADLAM NUKTA;Mn;7;NSM;;;;;N;;;;; 1E94B;ADLAM NASALIZATION MARK;Lm;0;R;;;;;N;;;;; 1E950;ADLAM DIGIT ZERO;Nd;0;R;;0;0;0;N;;;;; 1E951;ADLAM DIGIT ONE;Nd;0;R;;1;1;1;N;;;;; 1E952;ADLAM DIGIT TWO;Nd;0;R;;2;2;2;N;;;;; 1E953;ADLAM DIGIT THREE;Nd;0;R;;3;3;3;N;;;;; 1E954;ADLAM DIGIT FOUR;Nd;0;R;;4;4;4;N;;;;; 1E955;ADLAM DIGIT FIVE;Nd;0;R;;5;5;5;N;;;;; 1E956;ADLAM DIGIT SIX;Nd;0;R;;6;6;6;N;;;;; 1E957;ADLAM DIGIT SEVEN;Nd;0;R;;7;7;7;N;;;;; 1E958;ADLAM DIGIT EIGHT;Nd;0;R;;8;8;8;N;;;;; 1E959;ADLAM DIGIT NINE;Nd;0;R;;9;9;9;N;;;;; 1E95E;ADLAM INITIAL EXCLAMATION MARK;Po;0;R;;;;;N;;;;; 1E95F;ADLAM INITIAL QUESTION MARK;Po;0;R;;;;;N;;;;; 1EC71;INDIC SIYAQ NUMBER ONE;No;0;AL;;;;1;N;;;;; 1EC72;INDIC SIYAQ NUMBER TWO;No;0;AL;;;;2;N;;;;; 1EC73;INDIC SIYAQ NUMBER THREE;No;0;AL;;;;3;N;;;;; 1EC74;INDIC SIYAQ NUMBER FOUR;No;0;AL;;;;4;N;;;;; 1EC75;INDIC SIYAQ NUMBER FIVE;No;0;AL;;;;5;N;;;;; 1EC76;INDIC SIYAQ NUMBER SIX;No;0;AL;;;;6;N;;;;; 1EC77;INDIC SIYAQ NUMBER SEVEN;No;0;AL;;;;7;N;;;;; 1EC78;INDIC SIYAQ NUMBER EIGHT;No;0;AL;;;;8;N;;;;; 1EC79;INDIC SIYAQ NUMBER NINE;No;0;AL;;;;9;N;;;;; 1EC7A;INDIC SIYAQ NUMBER TEN;No;0;AL;;;;10;N;;;;; 1EC7B;INDIC SIYAQ NUMBER TWENTY;No;0;AL;;;;20;N;;;;; 1EC7C;INDIC SIYAQ NUMBER THIRTY;No;0;AL;;;;30;N;;;;; 1EC7D;INDIC SIYAQ NUMBER FORTY;No;0;AL;;;;40;N;;;;; 1EC7E;INDIC SIYAQ NUMBER FIFTY;No;0;AL;;;;50;N;;;;; 1EC7F;INDIC SIYAQ NUMBER SIXTY;No;0;AL;;;;60;N;;;;; 1EC80;INDIC SIYAQ NUMBER SEVENTY;No;0;AL;;;;70;N;;;;; 1EC81;INDIC SIYAQ NUMBER EIGHTY;No;0;AL;;;;80;N;;;;; 1EC82;INDIC SIYAQ NUMBER NINETY;No;0;AL;;;;90;N;;;;; 1EC83;INDIC SIYAQ NUMBER ONE HUNDRED;No;0;AL;;;;100;N;;;;; 1EC84;INDIC SIYAQ NUMBER TWO HUNDRED;No;0;AL;;;;200;N;;;;; 1EC85;INDIC SIYAQ NUMBER THREE HUNDRED;No;0;AL;;;;300;N;;;;; 1EC86;INDIC SIYAQ NUMBER FOUR HUNDRED;No;0;AL;;;;400;N;;;;; 1EC87;INDIC SIYAQ NUMBER FIVE HUNDRED;No;0;AL;;;;500;N;;;;; 1EC88;INDIC SIYAQ NUMBER SIX HUNDRED;No;0;AL;;;;600;N;;;;; 1EC89;INDIC SIYAQ NUMBER SEVEN HUNDRED;No;0;AL;;;;700;N;;;;; 1EC8A;INDIC SIYAQ NUMBER EIGHT HUNDRED;No;0;AL;;;;800;N;;;;; 1EC8B;INDIC SIYAQ NUMBER NINE HUNDRED;No;0;AL;;;;900;N;;;;; 1EC8C;INDIC SIYAQ NUMBER ONE THOUSAND;No;0;AL;;;;1000;N;;;;; 1EC8D;INDIC SIYAQ NUMBER TWO THOUSAND;No;0;AL;;;;2000;N;;;;; 1EC8E;INDIC SIYAQ NUMBER THREE THOUSAND;No;0;AL;;;;3000;N;;;;; 1EC8F;INDIC SIYAQ NUMBER FOUR THOUSAND;No;0;AL;;;;4000;N;;;;; 1EC90;INDIC SIYAQ NUMBER FIVE THOUSAND;No;0;AL;;;;5000;N;;;;; 1EC91;INDIC SIYAQ NUMBER SIX THOUSAND;No;0;AL;;;;6000;N;;;;; 1EC92;INDIC SIYAQ NUMBER SEVEN THOUSAND;No;0;AL;;;;7000;N;;;;; 1EC93;INDIC SIYAQ NUMBER EIGHT THOUSAND;No;0;AL;;;;8000;N;;;;; 1EC94;INDIC SIYAQ NUMBER NINE THOUSAND;No;0;AL;;;;9000;N;;;;; 1EC95;INDIC SIYAQ NUMBER TEN THOUSAND;No;0;AL;;;;10000;N;;;;; 1EC96;INDIC SIYAQ NUMBER TWENTY THOUSAND;No;0;AL;;;;20000;N;;;;; 1EC97;INDIC SIYAQ NUMBER THIRTY THOUSAND;No;0;AL;;;;30000;N;;;;; 1EC98;INDIC SIYAQ NUMBER FORTY THOUSAND;No;0;AL;;;;40000;N;;;;; 1EC99;INDIC SIYAQ NUMBER FIFTY THOUSAND;No;0;AL;;;;50000;N;;;;; 1EC9A;INDIC SIYAQ NUMBER SIXTY THOUSAND;No;0;AL;;;;60000;N;;;;; 1EC9B;INDIC SIYAQ NUMBER SEVENTY THOUSAND;No;0;AL;;;;70000;N;;;;; 1EC9C;INDIC SIYAQ NUMBER EIGHTY THOUSAND;No;0;AL;;;;80000;N;;;;; 1EC9D;INDIC SIYAQ NUMBER NINETY THOUSAND;No;0;AL;;;;90000;N;;;;; 1EC9E;INDIC SIYAQ NUMBER LAKH;No;0;AL;;;;100000;N;;;;; 1EC9F;INDIC SIYAQ NUMBER LAKHAN;No;0;AL;;;;200000;N;;;;; 1ECA0;INDIC SIYAQ LAKH MARK;No;0;AL;;;;100000;N;;;;; 1ECA1;INDIC SIYAQ NUMBER KAROR;No;0;AL;;;;10000000;N;;;;; 1ECA2;INDIC SIYAQ NUMBER KARORAN;No;0;AL;;;;20000000;N;;;;; 1ECA3;INDIC SIYAQ NUMBER PREFIXED ONE;No;0;AL;;;;1;N;;;;; 1ECA4;INDIC SIYAQ NUMBER PREFIXED TWO;No;0;AL;;;;2;N;;;;; 1ECA5;INDIC SIYAQ NUMBER PREFIXED THREE;No;0;AL;;;;3;N;;;;; 1ECA6;INDIC SIYAQ NUMBER PREFIXED FOUR;No;0;AL;;;;4;N;;;;; 1ECA7;INDIC SIYAQ NUMBER PREFIXED FIVE;No;0;AL;;;;5;N;;;;; 1ECA8;INDIC SIYAQ NUMBER PREFIXED SIX;No;0;AL;;;;6;N;;;;; 1ECA9;INDIC SIYAQ NUMBER PREFIXED SEVEN;No;0;AL;;;;7;N;;;;; 1ECAA;INDIC SIYAQ NUMBER PREFIXED EIGHT;No;0;AL;;;;8;N;;;;; 1ECAB;INDIC SIYAQ NUMBER PREFIXED NINE;No;0;AL;;;;9;N;;;;; 1ECAC;INDIC SIYAQ PLACEHOLDER;So;0;AL;;;;;N;;;;; 1ECAD;INDIC SIYAQ FRACTION ONE QUARTER;No;0;AL;;;;1/4;N;;;;; 1ECAE;INDIC SIYAQ FRACTION ONE HALF;No;0;AL;;;;1/2;N;;;;; 1ECAF;INDIC SIYAQ FRACTION THREE QUARTERS;No;0;AL;;;;3/4;N;;;;; 1ECB0;INDIC SIYAQ RUPEE MARK;Sc;0;AL;;;;;N;;;;; 1ECB1;INDIC SIYAQ NUMBER ALTERNATE ONE;No;0;AL;;;;1;N;;;;; 1ECB2;INDIC SIYAQ NUMBER ALTERNATE TWO;No;0;AL;;;;2;N;;;;; 1ECB3;INDIC SIYAQ NUMBER ALTERNATE TEN THOUSAND;No;0;AL;;;;10000;N;;;;; 1ECB4;INDIC SIYAQ ALTERNATE LAKH MARK;No;0;AL;;;;100000;N;;;;; 1ED01;OTTOMAN SIYAQ NUMBER ONE;No;0;AL;;;;1;N;;;;; 1ED02;OTTOMAN SIYAQ NUMBER TWO;No;0;AL;;;;2;N;;;;; 1ED03;OTTOMAN SIYAQ NUMBER THREE;No;0;AL;;;;3;N;;;;; 1ED04;OTTOMAN SIYAQ NUMBER FOUR;No;0;AL;;;;4;N;;;;; 1ED05;OTTOMAN SIYAQ NUMBER FIVE;No;0;AL;;;;5;N;;;;; 1ED06;OTTOMAN SIYAQ NUMBER SIX;No;0;AL;;;;6;N;;;;; 1ED07;OTTOMAN SIYAQ NUMBER SEVEN;No;0;AL;;;;7;N;;;;; 1ED08;OTTOMAN SIYAQ NUMBER EIGHT;No;0;AL;;;;8;N;;;;; 1ED09;OTTOMAN SIYAQ NUMBER NINE;No;0;AL;;;;9;N;;;;; 1ED0A;OTTOMAN SIYAQ NUMBER TEN;No;0;AL;;;;10;N;;;;; 1ED0B;OTTOMAN SIYAQ NUMBER TWENTY;No;0;AL;;;;20;N;;;;; 1ED0C;OTTOMAN SIYAQ NUMBER THIRTY;No;0;AL;;;;30;N;;;;; 1ED0D;OTTOMAN SIYAQ NUMBER FORTY;No;0;AL;;;;40;N;;;;; 1ED0E;OTTOMAN SIYAQ NUMBER FIFTY;No;0;AL;;;;50;N;;;;; 1ED0F;OTTOMAN SIYAQ NUMBER SIXTY;No;0;AL;;;;60;N;;;;; 1ED10;OTTOMAN SIYAQ NUMBER SEVENTY;No;0;AL;;;;70;N;;;;; 1ED11;OTTOMAN SIYAQ NUMBER EIGHTY;No;0;AL;;;;80;N;;;;; 1ED12;OTTOMAN SIYAQ NUMBER NINETY;No;0;AL;;;;90;N;;;;; 1ED13;OTTOMAN SIYAQ NUMBER ONE HUNDRED;No;0;AL;;;;100;N;;;;; 1ED14;OTTOMAN SIYAQ NUMBER TWO HUNDRED;No;0;AL;;;;200;N;;;;; 1ED15;OTTOMAN SIYAQ NUMBER THREE HUNDRED;No;0;AL;;;;300;N;;;;; 1ED16;OTTOMAN SIYAQ NUMBER FOUR HUNDRED;No;0;AL;;;;400;N;;;;; 1ED17;OTTOMAN SIYAQ NUMBER FIVE HUNDRED;No;0;AL;;;;500;N;;;;; 1ED18;OTTOMAN SIYAQ NUMBER SIX HUNDRED;No;0;AL;;;;600;N;;;;; 1ED19;OTTOMAN SIYAQ NUMBER SEVEN HUNDRED;No;0;AL;;;;700;N;;;;; 1ED1A;OTTOMAN SIYAQ NUMBER EIGHT HUNDRED;No;0;AL;;;;800;N;;;;; 1ED1B;OTTOMAN SIYAQ NUMBER NINE HUNDRED;No;0;AL;;;;900;N;;;;; 1ED1C;OTTOMAN SIYAQ NUMBER ONE THOUSAND;No;0;AL;;;;1000;N;;;;; 1ED1D;OTTOMAN SIYAQ NUMBER TWO THOUSAND;No;0;AL;;;;2000;N;;;;; 1ED1E;OTTOMAN SIYAQ NUMBER THREE THOUSAND;No;0;AL;;;;3000;N;;;;; 1ED1F;OTTOMAN SIYAQ NUMBER FOUR THOUSAND;No;0;AL;;;;4000;N;;;;; 1ED20;OTTOMAN SIYAQ NUMBER FIVE THOUSAND;No;0;AL;;;;5000;N;;;;; 1ED21;OTTOMAN SIYAQ NUMBER SIX THOUSAND;No;0;AL;;;;6000;N;;;;; 1ED22;OTTOMAN SIYAQ NUMBER SEVEN THOUSAND;No;0;AL;;;;7000;N;;;;; 1ED23;OTTOMAN SIYAQ NUMBER EIGHT THOUSAND;No;0;AL;;;;8000;N;;;;; 1ED24;OTTOMAN SIYAQ NUMBER NINE THOUSAND;No;0;AL;;;;9000;N;;;;; 1ED25;OTTOMAN SIYAQ NUMBER TEN THOUSAND;No;0;AL;;;;10000;N;;;;; 1ED26;OTTOMAN SIYAQ NUMBER TWENTY THOUSAND;No;0;AL;;;;20000;N;;;;; 1ED27;OTTOMAN SIYAQ NUMBER THIRTY THOUSAND;No;0;AL;;;;30000;N;;;;; 1ED28;OTTOMAN SIYAQ NUMBER FORTY THOUSAND;No;0;AL;;;;40000;N;;;;; 1ED29;OTTOMAN SIYAQ NUMBER FIFTY THOUSAND;No;0;AL;;;;50000;N;;;;; 1ED2A;OTTOMAN SIYAQ NUMBER SIXTY THOUSAND;No;0;AL;;;;60000;N;;;;; 1ED2B;OTTOMAN SIYAQ NUMBER SEVENTY THOUSAND;No;0;AL;;;;70000;N;;;;; 1ED2C;OTTOMAN SIYAQ NUMBER EIGHTY THOUSAND;No;0;AL;;;;80000;N;;;;; 1ED2D;OTTOMAN SIYAQ NUMBER NINETY THOUSAND;No;0;AL;;;;90000;N;;;;; 1ED2E;OTTOMAN SIYAQ MARRATAN;So;0;AL;;;;;N;;;;; 1ED2F;OTTOMAN SIYAQ ALTERNATE NUMBER TWO;No;0;AL;;;;2;N;;;;; 1ED30;OTTOMAN SIYAQ ALTERNATE NUMBER THREE;No;0;AL;;;;3;N;;;;; 1ED31;OTTOMAN SIYAQ ALTERNATE NUMBER FOUR;No;0;AL;;;;4;N;;;;; 1ED32;OTTOMAN SIYAQ ALTERNATE NUMBER FIVE;No;0;AL;;;;5;N;;;;; 1ED33;OTTOMAN SIYAQ ALTERNATE NUMBER SIX;No;0;AL;;;;6;N;;;;; 1ED34;OTTOMAN SIYAQ ALTERNATE NUMBER SEVEN;No;0;AL;;;;7;N;;;;; 1ED35;OTTOMAN SIYAQ ALTERNATE NUMBER EIGHT;No;0;AL;;;;8;N;;;;; 1ED36;OTTOMAN SIYAQ ALTERNATE NUMBER NINE;No;0;AL;;;;9;N;;;;; 1ED37;OTTOMAN SIYAQ ALTERNATE NUMBER TEN;No;0;AL;;;;10;N;;;;; 1ED38;OTTOMAN SIYAQ ALTERNATE NUMBER FOUR HUNDRED;No;0;AL;;;;400;N;;;;; 1ED39;OTTOMAN SIYAQ ALTERNATE NUMBER SIX HUNDRED;No;0;AL;;;;600;N;;;;; 1ED3A;OTTOMAN SIYAQ ALTERNATE NUMBER TWO THOUSAND;No;0;AL;;;;2000;N;;;;; 1ED3B;OTTOMAN SIYAQ ALTERNATE NUMBER TEN THOUSAND;No;0;AL;;;;10000;N;;;;; 1ED3C;OTTOMAN SIYAQ FRACTION ONE HALF;No;0;AL;;;;1/2;N;;;;; 1ED3D;OTTOMAN SIYAQ FRACTION ONE SIXTH;No;0;AL;;;;1/6;N;;;;; 1EE00;ARABIC MATHEMATICAL ALEF;Lo;0;AL; 0627;;;;N;;;;; 1EE01;ARABIC MATHEMATICAL BEH;Lo;0;AL; 0628;;;;N;;;;; 1EE02;ARABIC MATHEMATICAL JEEM;Lo;0;AL; 062C;;;;N;;;;; 1EE03;ARABIC MATHEMATICAL DAL;Lo;0;AL; 062F;;;;N;;;;; 1EE05;ARABIC MATHEMATICAL WAW;Lo;0;AL; 0648;;;;N;;;;; 1EE06;ARABIC MATHEMATICAL ZAIN;Lo;0;AL; 0632;;;;N;;;;; 1EE07;ARABIC MATHEMATICAL HAH;Lo;0;AL; 062D;;;;N;;;;; 1EE08;ARABIC MATHEMATICAL TAH;Lo;0;AL; 0637;;;;N;;;;; 1EE09;ARABIC MATHEMATICAL YEH;Lo;0;AL; 064A;;;;N;;;;; 1EE0A;ARABIC MATHEMATICAL KAF;Lo;0;AL; 0643;;;;N;;;;; 1EE0B;ARABIC MATHEMATICAL LAM;Lo;0;AL; 0644;;;;N;;;;; 1EE0C;ARABIC MATHEMATICAL MEEM;Lo;0;AL; 0645;;;;N;;;;; 1EE0D;ARABIC MATHEMATICAL NOON;Lo;0;AL; 0646;;;;N;;;;; 1EE0E;ARABIC MATHEMATICAL SEEN;Lo;0;AL; 0633;;;;N;;;;; 1EE0F;ARABIC MATHEMATICAL AIN;Lo;0;AL; 0639;;;;N;;;;; 1EE10;ARABIC MATHEMATICAL FEH;Lo;0;AL; 0641;;;;N;;;;; 1EE11;ARABIC MATHEMATICAL SAD;Lo;0;AL; 0635;;;;N;;;;; 1EE12;ARABIC MATHEMATICAL QAF;Lo;0;AL; 0642;;;;N;;;;; 1EE13;ARABIC MATHEMATICAL REH;Lo;0;AL; 0631;;;;N;;;;; 1EE14;ARABIC MATHEMATICAL SHEEN;Lo;0;AL; 0634;;;;N;;;;; 1EE15;ARABIC MATHEMATICAL TEH;Lo;0;AL; 062A;;;;N;;;;; 1EE16;ARABIC MATHEMATICAL THEH;Lo;0;AL; 062B;;;;N;;;;; 1EE17;ARABIC MATHEMATICAL KHAH;Lo;0;AL; 062E;;;;N;;;;; 1EE18;ARABIC MATHEMATICAL THAL;Lo;0;AL; 0630;;;;N;;;;; 1EE19;ARABIC MATHEMATICAL DAD;Lo;0;AL; 0636;;;;N;;;;; 1EE1A;ARABIC MATHEMATICAL ZAH;Lo;0;AL; 0638;;;;N;;;;; 1EE1B;ARABIC MATHEMATICAL GHAIN;Lo;0;AL; 063A;;;;N;;;;; 1EE1C;ARABIC MATHEMATICAL DOTLESS BEH;Lo;0;AL; 066E;;;;N;;;;; 1EE1D;ARABIC MATHEMATICAL DOTLESS NOON;Lo;0;AL; 06BA;;;;N;;;;; 1EE1E;ARABIC MATHEMATICAL DOTLESS FEH;Lo;0;AL; 06A1;;;;N;;;;; 1EE1F;ARABIC MATHEMATICAL DOTLESS QAF;Lo;0;AL; 066F;;;;N;;;;; 1EE21;ARABIC MATHEMATICAL INITIAL BEH;Lo;0;AL; 0628;;;;N;;;;; 1EE22;ARABIC MATHEMATICAL INITIAL JEEM;Lo;0;AL; 062C;;;;N;;;;; 1EE24;ARABIC MATHEMATICAL INITIAL HEH;Lo;0;AL; 0647;;;;N;;;;; 1EE27;ARABIC MATHEMATICAL INITIAL HAH;Lo;0;AL; 062D;;;;N;;;;; 1EE29;ARABIC MATHEMATICAL INITIAL YEH;Lo;0;AL; 064A;;;;N;;;;; 1EE2A;ARABIC MATHEMATICAL INITIAL KAF;Lo;0;AL; 0643;;;;N;;;;; 1EE2B;ARABIC MATHEMATICAL INITIAL LAM;Lo;0;AL; 0644;;;;N;;;;; 1EE2C;ARABIC MATHEMATICAL INITIAL MEEM;Lo;0;AL; 0645;;;;N;;;;; 1EE2D;ARABIC MATHEMATICAL INITIAL NOON;Lo;0;AL; 0646;;;;N;;;;; 1EE2E;ARABIC MATHEMATICAL INITIAL SEEN;Lo;0;AL; 0633;;;;N;;;;; 1EE2F;ARABIC MATHEMATICAL INITIAL AIN;Lo;0;AL; 0639;;;;N;;;;; 1EE30;ARABIC MATHEMATICAL INITIAL FEH;Lo;0;AL; 0641;;;;N;;;;; 1EE31;ARABIC MATHEMATICAL INITIAL SAD;Lo;0;AL; 0635;;;;N;;;;; 1EE32;ARABIC MATHEMATICAL INITIAL QAF;Lo;0;AL; 0642;;;;N;;;;; 1EE34;ARABIC MATHEMATICAL INITIAL SHEEN;Lo;0;AL; 0634;;;;N;;;;; 1EE35;ARABIC MATHEMATICAL INITIAL TEH;Lo;0;AL; 062A;;;;N;;;;; 1EE36;ARABIC MATHEMATICAL INITIAL THEH;Lo;0;AL; 062B;;;;N;;;;; 1EE37;ARABIC MATHEMATICAL INITIAL KHAH;Lo;0;AL; 062E;;;;N;;;;; 1EE39;ARABIC MATHEMATICAL INITIAL DAD;Lo;0;AL; 0636;;;;N;;;;; 1EE3B;ARABIC MATHEMATICAL INITIAL GHAIN;Lo;0;AL; 063A;;;;N;;;;; 1EE42;ARABIC MATHEMATICAL TAILED JEEM;Lo;0;AL; 062C;;;;N;;;;; 1EE47;ARABIC MATHEMATICAL TAILED HAH;Lo;0;AL; 062D;;;;N;;;;; 1EE49;ARABIC MATHEMATICAL TAILED YEH;Lo;0;AL; 064A;;;;N;;;;; 1EE4B;ARABIC MATHEMATICAL TAILED LAM;Lo;0;AL; 0644;;;;N;;;;; 1EE4D;ARABIC MATHEMATICAL TAILED NOON;Lo;0;AL; 0646;;;;N;;;;; 1EE4E;ARABIC MATHEMATICAL TAILED SEEN;Lo;0;AL; 0633;;;;N;;;;; 1EE4F;ARABIC MATHEMATICAL TAILED AIN;Lo;0;AL; 0639;;;;N;;;;; 1EE51;ARABIC MATHEMATICAL TAILED SAD;Lo;0;AL; 0635;;;;N;;;;; 1EE52;ARABIC MATHEMATICAL TAILED QAF;Lo;0;AL; 0642;;;;N;;;;; 1EE54;ARABIC MATHEMATICAL TAILED SHEEN;Lo;0;AL; 0634;;;;N;;;;; 1EE57;ARABIC MATHEMATICAL TAILED KHAH;Lo;0;AL; 062E;;;;N;;;;; 1EE59;ARABIC MATHEMATICAL TAILED DAD;Lo;0;AL; 0636;;;;N;;;;; 1EE5B;ARABIC MATHEMATICAL TAILED GHAIN;Lo;0;AL; 063A;;;;N;;;;; 1EE5D;ARABIC MATHEMATICAL TAILED DOTLESS NOON;Lo;0;AL; 06BA;;;;N;;;;; 1EE5F;ARABIC MATHEMATICAL TAILED DOTLESS QAF;Lo;0;AL; 066F;;;;N;;;;; 1EE61;ARABIC MATHEMATICAL STRETCHED BEH;Lo;0;AL; 0628;;;;N;;;;; 1EE62;ARABIC MATHEMATICAL STRETCHED JEEM;Lo;0;AL; 062C;;;;N;;;;; 1EE64;ARABIC MATHEMATICAL STRETCHED HEH;Lo;0;AL; 0647;;;;N;;;;; 1EE67;ARABIC MATHEMATICAL STRETCHED HAH;Lo;0;AL; 062D;;;;N;;;;; 1EE68;ARABIC MATHEMATICAL STRETCHED TAH;Lo;0;AL; 0637;;;;N;;;;; 1EE69;ARABIC MATHEMATICAL STRETCHED YEH;Lo;0;AL; 064A;;;;N;;;;; 1EE6A;ARABIC MATHEMATICAL STRETCHED KAF;Lo;0;AL; 0643;;;;N;;;;; 1EE6C;ARABIC MATHEMATICAL STRETCHED MEEM;Lo;0;AL; 0645;;;;N;;;;; 1EE6D;ARABIC MATHEMATICAL STRETCHED NOON;Lo;0;AL; 0646;;;;N;;;;; 1EE6E;ARABIC MATHEMATICAL STRETCHED SEEN;Lo;0;AL; 0633;;;;N;;;;; 1EE6F;ARABIC MATHEMATICAL STRETCHED AIN;Lo;0;AL; 0639;;;;N;;;;; 1EE70;ARABIC MATHEMATICAL STRETCHED FEH;Lo;0;AL; 0641;;;;N;;;;; 1EE71;ARABIC MATHEMATICAL STRETCHED SAD;Lo;0;AL; 0635;;;;N;;;;; 1EE72;ARABIC MATHEMATICAL STRETCHED QAF;Lo;0;AL; 0642;;;;N;;;;; 1EE74;ARABIC MATHEMATICAL STRETCHED SHEEN;Lo;0;AL; 0634;;;;N;;;;; 1EE75;ARABIC MATHEMATICAL STRETCHED TEH;Lo;0;AL; 062A;;;;N;;;;; 1EE76;ARABIC MATHEMATICAL STRETCHED THEH;Lo;0;AL; 062B;;;;N;;;;; 1EE77;ARABIC MATHEMATICAL STRETCHED KHAH;Lo;0;AL; 062E;;;;N;;;;; 1EE79;ARABIC MATHEMATICAL STRETCHED DAD;Lo;0;AL; 0636;;;;N;;;;; 1EE7A;ARABIC MATHEMATICAL STRETCHED ZAH;Lo;0;AL; 0638;;;;N;;;;; 1EE7B;ARABIC MATHEMATICAL STRETCHED GHAIN;Lo;0;AL; 063A;;;;N;;;;; 1EE7C;ARABIC MATHEMATICAL STRETCHED DOTLESS BEH;Lo;0;AL; 066E;;;;N;;;;; 1EE7E;ARABIC MATHEMATICAL STRETCHED DOTLESS FEH;Lo;0;AL; 06A1;;;;N;;;;; 1EE80;ARABIC MATHEMATICAL LOOPED ALEF;Lo;0;AL; 0627;;;;N;;;;; 1EE81;ARABIC MATHEMATICAL LOOPED BEH;Lo;0;AL; 0628;;;;N;;;;; 1EE82;ARABIC MATHEMATICAL LOOPED JEEM;Lo;0;AL; 062C;;;;N;;;;; 1EE83;ARABIC MATHEMATICAL LOOPED DAL;Lo;0;AL; 062F;;;;N;;;;; 1EE84;ARABIC MATHEMATICAL LOOPED HEH;Lo;0;AL; 0647;;;;N;;;;; 1EE85;ARABIC MATHEMATICAL LOOPED WAW;Lo;0;AL; 0648;;;;N;;;;; 1EE86;ARABIC MATHEMATICAL LOOPED ZAIN;Lo;0;AL; 0632;;;;N;;;;; 1EE87;ARABIC MATHEMATICAL LOOPED HAH;Lo;0;AL; 062D;;;;N;;;;; 1EE88;ARABIC MATHEMATICAL LOOPED TAH;Lo;0;AL; 0637;;;;N;;;;; 1EE89;ARABIC MATHEMATICAL LOOPED YEH;Lo;0;AL; 064A;;;;N;;;;; 1EE8B;ARABIC MATHEMATICAL LOOPED LAM;Lo;0;AL; 0644;;;;N;;;;; 1EE8C;ARABIC MATHEMATICAL LOOPED MEEM;Lo;0;AL; 0645;;;;N;;;;; 1EE8D;ARABIC MATHEMATICAL LOOPED NOON;Lo;0;AL; 0646;;;;N;;;;; 1EE8E;ARABIC MATHEMATICAL LOOPED SEEN;Lo;0;AL; 0633;;;;N;;;;; 1EE8F;ARABIC MATHEMATICAL LOOPED AIN;Lo;0;AL; 0639;;;;N;;;;; 1EE90;ARABIC MATHEMATICAL LOOPED FEH;Lo;0;AL; 0641;;;;N;;;;; 1EE91;ARABIC MATHEMATICAL LOOPED SAD;Lo;0;AL; 0635;;;;N;;;;; 1EE92;ARABIC MATHEMATICAL LOOPED QAF;Lo;0;AL; 0642;;;;N;;;;; 1EE93;ARABIC MATHEMATICAL LOOPED REH;Lo;0;AL; 0631;;;;N;;;;; 1EE94;ARABIC MATHEMATICAL LOOPED SHEEN;Lo;0;AL; 0634;;;;N;;;;; 1EE95;ARABIC MATHEMATICAL LOOPED TEH;Lo;0;AL; 062A;;;;N;;;;; 1EE96;ARABIC MATHEMATICAL LOOPED THEH;Lo;0;AL; 062B;;;;N;;;;; 1EE97;ARABIC MATHEMATICAL LOOPED KHAH;Lo;0;AL; 062E;;;;N;;;;; 1EE98;ARABIC MATHEMATICAL LOOPED THAL;Lo;0;AL; 0630;;;;N;;;;; 1EE99;ARABIC MATHEMATICAL LOOPED DAD;Lo;0;AL; 0636;;;;N;;;;; 1EE9A;ARABIC MATHEMATICAL LOOPED ZAH;Lo;0;AL; 0638;;;;N;;;;; 1EE9B;ARABIC MATHEMATICAL LOOPED GHAIN;Lo;0;AL; 063A;;;;N;;;;; 1EEA1;ARABIC MATHEMATICAL DOUBLE-STRUCK BEH;Lo;0;AL; 0628;;;;N;;;;; 1EEA2;ARABIC MATHEMATICAL DOUBLE-STRUCK JEEM;Lo;0;AL; 062C;;;;N;;;;; 1EEA3;ARABIC MATHEMATICAL DOUBLE-STRUCK DAL;Lo;0;AL; 062F;;;;N;;;;; 1EEA5;ARABIC MATHEMATICAL DOUBLE-STRUCK WAW;Lo;0;AL; 0648;;;;N;;;;; 1EEA6;ARABIC MATHEMATICAL DOUBLE-STRUCK ZAIN;Lo;0;AL; 0632;;;;N;;;;; 1EEA7;ARABIC MATHEMATICAL DOUBLE-STRUCK HAH;Lo;0;AL; 062D;;;;N;;;;; 1EEA8;ARABIC MATHEMATICAL DOUBLE-STRUCK TAH;Lo;0;AL; 0637;;;;N;;;;; 1EEA9;ARABIC MATHEMATICAL DOUBLE-STRUCK YEH;Lo;0;AL; 064A;;;;N;;;;; 1EEAB;ARABIC MATHEMATICAL DOUBLE-STRUCK LAM;Lo;0;AL; 0644;;;;N;;;;; 1EEAC;ARABIC MATHEMATICAL DOUBLE-STRUCK MEEM;Lo;0;AL; 0645;;;;N;;;;; 1EEAD;ARABIC MATHEMATICAL DOUBLE-STRUCK NOON;Lo;0;AL; 0646;;;;N;;;;; 1EEAE;ARABIC MATHEMATICAL DOUBLE-STRUCK SEEN;Lo;0;AL; 0633;;;;N;;;;; 1EEAF;ARABIC MATHEMATICAL DOUBLE-STRUCK AIN;Lo;0;AL; 0639;;;;N;;;;; 1EEB0;ARABIC MATHEMATICAL DOUBLE-STRUCK FEH;Lo;0;AL; 0641;;;;N;;;;; 1EEB1;ARABIC MATHEMATICAL DOUBLE-STRUCK SAD;Lo;0;AL; 0635;;;;N;;;;; 1EEB2;ARABIC MATHEMATICAL DOUBLE-STRUCK QAF;Lo;0;AL; 0642;;;;N;;;;; 1EEB3;ARABIC MATHEMATICAL DOUBLE-STRUCK REH;Lo;0;AL; 0631;;;;N;;;;; 1EEB4;ARABIC MATHEMATICAL DOUBLE-STRUCK SHEEN;Lo;0;AL; 0634;;;;N;;;;; 1EEB5;ARABIC MATHEMATICAL DOUBLE-STRUCK TEH;Lo;0;AL; 062A;;;;N;;;;; 1EEB6;ARABIC MATHEMATICAL DOUBLE-STRUCK THEH;Lo;0;AL; 062B;;;;N;;;;; 1EEB7;ARABIC MATHEMATICAL DOUBLE-STRUCK KHAH;Lo;0;AL; 062E;;;;N;;;;; 1EEB8;ARABIC MATHEMATICAL DOUBLE-STRUCK THAL;Lo;0;AL; 0630;;;;N;;;;; 1EEB9;ARABIC MATHEMATICAL DOUBLE-STRUCK DAD;Lo;0;AL; 0636;;;;N;;;;; 1EEBA;ARABIC MATHEMATICAL DOUBLE-STRUCK ZAH;Lo;0;AL; 0638;;;;N;;;;; 1EEBB;ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN;Lo;0;AL; 063A;;;;N;;;;; 1EEF0;ARABIC MATHEMATICAL OPERATOR MEEM WITH HAH WITH TATWEEL;Sm;0;ON;;;;;N;;;;; 1EEF1;ARABIC MATHEMATICAL OPERATOR HAH WITH DAL;Sm;0;ON;;;;;N;;;;; 1F000;MAHJONG TILE EAST WIND;So;0;ON;;;;;N;;;;; 1F001;MAHJONG TILE SOUTH WIND;So;0;ON;;;;;N;;;;; 1F002;MAHJONG TILE WEST WIND;So;0;ON;;;;;N;;;;; 1F003;MAHJONG TILE NORTH WIND;So;0;ON;;;;;N;;;;; 1F004;MAHJONG TILE RED DRAGON;So;0;ON;;;;;N;;;;; 1F005;MAHJONG TILE GREEN DRAGON;So;0;ON;;;;;N;;;;; 1F006;MAHJONG TILE WHITE DRAGON;So;0;ON;;;;;N;;;;; 1F007;MAHJONG TILE ONE OF CHARACTERS;So;0;ON;;;;;N;;;;; 1F008;MAHJONG TILE TWO OF CHARACTERS;So;0;ON;;;;;N;;;;; 1F009;MAHJONG TILE THREE OF CHARACTERS;So;0;ON;;;;;N;;;;; 1F00A;MAHJONG TILE FOUR OF CHARACTERS;So;0;ON;;;;;N;;;;; 1F00B;MAHJONG TILE FIVE OF CHARACTERS;So;0;ON;;;;;N;;;;; 1F00C;MAHJONG TILE SIX OF CHARACTERS;So;0;ON;;;;;N;;;;; 1F00D;MAHJONG TILE SEVEN OF CHARACTERS;So;0;ON;;;;;N;;;;; 1F00E;MAHJONG TILE EIGHT OF CHARACTERS;So;0;ON;;;;;N;;;;; 1F00F;MAHJONG TILE NINE OF CHARACTERS;So;0;ON;;;;;N;;;;; 1F010;MAHJONG TILE ONE OF BAMBOOS;So;0;ON;;;;;N;;;;; 1F011;MAHJONG TILE TWO OF BAMBOOS;So;0;ON;;;;;N;;;;; 1F012;MAHJONG TILE THREE OF BAMBOOS;So;0;ON;;;;;N;;;;; 1F013;MAHJONG TILE FOUR OF BAMBOOS;So;0;ON;;;;;N;;;;; 1F014;MAHJONG TILE FIVE OF BAMBOOS;So;0;ON;;;;;N;;;;; 1F015;MAHJONG TILE SIX OF BAMBOOS;So;0;ON;;;;;N;;;;; 1F016;MAHJONG TILE SEVEN OF BAMBOOS;So;0;ON;;;;;N;;;;; 1F017;MAHJONG TILE EIGHT OF BAMBOOS;So;0;ON;;;;;N;;;;; 1F018;MAHJONG TILE NINE OF BAMBOOS;So;0;ON;;;;;N;;;;; 1F019;MAHJONG TILE ONE OF CIRCLES;So;0;ON;;;;;N;;;;; 1F01A;MAHJONG TILE TWO OF CIRCLES;So;0;ON;;;;;N;;;;; 1F01B;MAHJONG TILE THREE OF CIRCLES;So;0;ON;;;;;N;;;;; 1F01C;MAHJONG TILE FOUR OF CIRCLES;So;0;ON;;;;;N;;;;; 1F01D;MAHJONG TILE FIVE OF CIRCLES;So;0;ON;;;;;N;;;;; 1F01E;MAHJONG TILE SIX OF CIRCLES;So;0;ON;;;;;N;;;;; 1F01F;MAHJONG TILE SEVEN OF CIRCLES;So;0;ON;;;;;N;;;;; 1F020;MAHJONG TILE EIGHT OF CIRCLES;So;0;ON;;;;;N;;;;; 1F021;MAHJONG TILE NINE OF CIRCLES;So;0;ON;;;;;N;;;;; 1F022;MAHJONG TILE PLUM;So;0;ON;;;;;N;;;;; 1F023;MAHJONG TILE ORCHID;So;0;ON;;;;;N;;;;; 1F024;MAHJONG TILE BAMBOO;So;0;ON;;;;;N;;;;; 1F025;MAHJONG TILE CHRYSANTHEMUM;So;0;ON;;;;;N;;;;; 1F026;MAHJONG TILE SPRING;So;0;ON;;;;;N;;;;; 1F027;MAHJONG TILE SUMMER;So;0;ON;;;;;N;;;;; 1F028;MAHJONG TILE AUTUMN;So;0;ON;;;;;N;;;;; 1F029;MAHJONG TILE WINTER;So;0;ON;;;;;N;;;;; 1F02A;MAHJONG TILE JOKER;So;0;ON;;;;;N;;;;; 1F02B;MAHJONG TILE BACK;So;0;ON;;;;;N;;;;; 1F030;DOMINO TILE HORIZONTAL BACK;So;0;ON;;;;;N;;;;; 1F031;DOMINO TILE HORIZONTAL-00-00;So;0;ON;;;;;N;;;;; 1F032;DOMINO TILE HORIZONTAL-00-01;So;0;ON;;;;;N;;;;; 1F033;DOMINO TILE HORIZONTAL-00-02;So;0;ON;;;;;N;;;;; 1F034;DOMINO TILE HORIZONTAL-00-03;So;0;ON;;;;;N;;;;; 1F035;DOMINO TILE HORIZONTAL-00-04;So;0;ON;;;;;N;;;;; 1F036;DOMINO TILE HORIZONTAL-00-05;So;0;ON;;;;;N;;;;; 1F037;DOMINO TILE HORIZONTAL-00-06;So;0;ON;;;;;N;;;;; 1F038;DOMINO TILE HORIZONTAL-01-00;So;0;ON;;;;;N;;;;; 1F039;DOMINO TILE HORIZONTAL-01-01;So;0;ON;;;;;N;;;;; 1F03A;DOMINO TILE HORIZONTAL-01-02;So;0;ON;;;;;N;;;;; 1F03B;DOMINO TILE HORIZONTAL-01-03;So;0;ON;;;;;N;;;;; 1F03C;DOMINO TILE HORIZONTAL-01-04;So;0;ON;;;;;N;;;;; 1F03D;DOMINO TILE HORIZONTAL-01-05;So;0;ON;;;;;N;;;;; 1F03E;DOMINO TILE HORIZONTAL-01-06;So;0;ON;;;;;N;;;;; 1F03F;DOMINO TILE HORIZONTAL-02-00;So;0;ON;;;;;N;;;;; 1F040;DOMINO TILE HORIZONTAL-02-01;So;0;ON;;;;;N;;;;; 1F041;DOMINO TILE HORIZONTAL-02-02;So;0;ON;;;;;N;;;;; 1F042;DOMINO TILE HORIZONTAL-02-03;So;0;ON;;;;;N;;;;; 1F043;DOMINO TILE HORIZONTAL-02-04;So;0;ON;;;;;N;;;;; 1F044;DOMINO TILE HORIZONTAL-02-05;So;0;ON;;;;;N;;;;; 1F045;DOMINO TILE HORIZONTAL-02-06;So;0;ON;;;;;N;;;;; 1F046;DOMINO TILE HORIZONTAL-03-00;So;0;ON;;;;;N;;;;; 1F047;DOMINO TILE HORIZONTAL-03-01;So;0;ON;;;;;N;;;;; 1F048;DOMINO TILE HORIZONTAL-03-02;So;0;ON;;;;;N;;;;; 1F049;DOMINO TILE HORIZONTAL-03-03;So;0;ON;;;;;N;;;;; 1F04A;DOMINO TILE HORIZONTAL-03-04;So;0;ON;;;;;N;;;;; 1F04B;DOMINO TILE HORIZONTAL-03-05;So;0;ON;;;;;N;;;;; 1F04C;DOMINO TILE HORIZONTAL-03-06;So;0;ON;;;;;N;;;;; 1F04D;DOMINO TILE HORIZONTAL-04-00;So;0;ON;;;;;N;;;;; 1F04E;DOMINO TILE HORIZONTAL-04-01;So;0;ON;;;;;N;;;;; 1F04F;DOMINO TILE HORIZONTAL-04-02;So;0;ON;;;;;N;;;;; 1F050;DOMINO TILE HORIZONTAL-04-03;So;0;ON;;;;;N;;;;; 1F051;DOMINO TILE HORIZONTAL-04-04;So;0;ON;;;;;N;;;;; 1F052;DOMINO TILE HORIZONTAL-04-05;So;0;ON;;;;;N;;;;; 1F053;DOMINO TILE HORIZONTAL-04-06;So;0;ON;;;;;N;;;;; 1F054;DOMINO TILE HORIZONTAL-05-00;So;0;ON;;;;;N;;;;; 1F055;DOMINO TILE HORIZONTAL-05-01;So;0;ON;;;;;N;;;;; 1F056;DOMINO TILE HORIZONTAL-05-02;So;0;ON;;;;;N;;;;; 1F057;DOMINO TILE HORIZONTAL-05-03;So;0;ON;;;;;N;;;;; 1F058;DOMINO TILE HORIZONTAL-05-04;So;0;ON;;;;;N;;;;; 1F059;DOMINO TILE HORIZONTAL-05-05;So;0;ON;;;;;N;;;;; 1F05A;DOMINO TILE HORIZONTAL-05-06;So;0;ON;;;;;N;;;;; 1F05B;DOMINO TILE HORIZONTAL-06-00;So;0;ON;;;;;N;;;;; 1F05C;DOMINO TILE HORIZONTAL-06-01;So;0;ON;;;;;N;;;;; 1F05D;DOMINO TILE HORIZONTAL-06-02;So;0;ON;;;;;N;;;;; 1F05E;DOMINO TILE HORIZONTAL-06-03;So;0;ON;;;;;N;;;;; 1F05F;DOMINO TILE HORIZONTAL-06-04;So;0;ON;;;;;N;;;;; 1F060;DOMINO TILE HORIZONTAL-06-05;So;0;ON;;;;;N;;;;; 1F061;DOMINO TILE HORIZONTAL-06-06;So;0;ON;;;;;N;;;;; 1F062;DOMINO TILE VERTICAL BACK;So;0;ON;;;;;N;;;;; 1F063;DOMINO TILE VERTICAL-00-00;So;0;ON;;;;;N;;;;; 1F064;DOMINO TILE VERTICAL-00-01;So;0;ON;;;;;N;;;;; 1F065;DOMINO TILE VERTICAL-00-02;So;0;ON;;;;;N;;;;; 1F066;DOMINO TILE VERTICAL-00-03;So;0;ON;;;;;N;;;;; 1F067;DOMINO TILE VERTICAL-00-04;So;0;ON;;;;;N;;;;; 1F068;DOMINO TILE VERTICAL-00-05;So;0;ON;;;;;N;;;;; 1F069;DOMINO TILE VERTICAL-00-06;So;0;ON;;;;;N;;;;; 1F06A;DOMINO TILE VERTICAL-01-00;So;0;ON;;;;;N;;;;; 1F06B;DOMINO TILE VERTICAL-01-01;So;0;ON;;;;;N;;;;; 1F06C;DOMINO TILE VERTICAL-01-02;So;0;ON;;;;;N;;;;; 1F06D;DOMINO TILE VERTICAL-01-03;So;0;ON;;;;;N;;;;; 1F06E;DOMINO TILE VERTICAL-01-04;So;0;ON;;;;;N;;;;; 1F06F;DOMINO TILE VERTICAL-01-05;So;0;ON;;;;;N;;;;; 1F070;DOMINO TILE VERTICAL-01-06;So;0;ON;;;;;N;;;;; 1F071;DOMINO TILE VERTICAL-02-00;So;0;ON;;;;;N;;;;; 1F072;DOMINO TILE VERTICAL-02-01;So;0;ON;;;;;N;;;;; 1F073;DOMINO TILE VERTICAL-02-02;So;0;ON;;;;;N;;;;; 1F074;DOMINO TILE VERTICAL-02-03;So;0;ON;;;;;N;;;;; 1F075;DOMINO TILE VERTICAL-02-04;So;0;ON;;;;;N;;;;; 1F076;DOMINO TILE VERTICAL-02-05;So;0;ON;;;;;N;;;;; 1F077;DOMINO TILE VERTICAL-02-06;So;0;ON;;;;;N;;;;; 1F078;DOMINO TILE VERTICAL-03-00;So;0;ON;;;;;N;;;;; 1F079;DOMINO TILE VERTICAL-03-01;So;0;ON;;;;;N;;;;; 1F07A;DOMINO TILE VERTICAL-03-02;So;0;ON;;;;;N;;;;; 1F07B;DOMINO TILE VERTICAL-03-03;So;0;ON;;;;;N;;;;; 1F07C;DOMINO TILE VERTICAL-03-04;So;0;ON;;;;;N;;;;; 1F07D;DOMINO TILE VERTICAL-03-05;So;0;ON;;;;;N;;;;; 1F07E;DOMINO TILE VERTICAL-03-06;So;0;ON;;;;;N;;;;; 1F07F;DOMINO TILE VERTICAL-04-00;So;0;ON;;;;;N;;;;; 1F080;DOMINO TILE VERTICAL-04-01;So;0;ON;;;;;N;;;;; 1F081;DOMINO TILE VERTICAL-04-02;So;0;ON;;;;;N;;;;; 1F082;DOMINO TILE VERTICAL-04-03;So;0;ON;;;;;N;;;;; 1F083;DOMINO TILE VERTICAL-04-04;So;0;ON;;;;;N;;;;; 1F084;DOMINO TILE VERTICAL-04-05;So;0;ON;;;;;N;;;;; 1F085;DOMINO TILE VERTICAL-04-06;So;0;ON;;;;;N;;;;; 1F086;DOMINO TILE VERTICAL-05-00;So;0;ON;;;;;N;;;;; 1F087;DOMINO TILE VERTICAL-05-01;So;0;ON;;;;;N;;;;; 1F088;DOMINO TILE VERTICAL-05-02;So;0;ON;;;;;N;;;;; 1F089;DOMINO TILE VERTICAL-05-03;So;0;ON;;;;;N;;;;; 1F08A;DOMINO TILE VERTICAL-05-04;So;0;ON;;;;;N;;;;; 1F08B;DOMINO TILE VERTICAL-05-05;So;0;ON;;;;;N;;;;; 1F08C;DOMINO TILE VERTICAL-05-06;So;0;ON;;;;;N;;;;; 1F08D;DOMINO TILE VERTICAL-06-00;So;0;ON;;;;;N;;;;; 1F08E;DOMINO TILE VERTICAL-06-01;So;0;ON;;;;;N;;;;; 1F08F;DOMINO TILE VERTICAL-06-02;So;0;ON;;;;;N;;;;; 1F090;DOMINO TILE VERTICAL-06-03;So;0;ON;;;;;N;;;;; 1F091;DOMINO TILE VERTICAL-06-04;So;0;ON;;;;;N;;;;; 1F092;DOMINO TILE VERTICAL-06-05;So;0;ON;;;;;N;;;;; 1F093;DOMINO TILE VERTICAL-06-06;So;0;ON;;;;;N;;;;; 1F0A0;PLAYING CARD BACK;So;0;ON;;;;;N;;;;; 1F0A1;PLAYING CARD ACE OF SPADES;So;0;ON;;;;;N;;;;; 1F0A2;PLAYING CARD TWO OF SPADES;So;0;ON;;;;;N;;;;; 1F0A3;PLAYING CARD THREE OF SPADES;So;0;ON;;;;;N;;;;; 1F0A4;PLAYING CARD FOUR OF SPADES;So;0;ON;;;;;N;;;;; 1F0A5;PLAYING CARD FIVE OF SPADES;So;0;ON;;;;;N;;;;; 1F0A6;PLAYING CARD SIX OF SPADES;So;0;ON;;;;;N;;;;; 1F0A7;PLAYING CARD SEVEN OF SPADES;So;0;ON;;;;;N;;;;; 1F0A8;PLAYING CARD EIGHT OF SPADES;So;0;ON;;;;;N;;;;; 1F0A9;PLAYING CARD NINE OF SPADES;So;0;ON;;;;;N;;;;; 1F0AA;PLAYING CARD TEN OF SPADES;So;0;ON;;;;;N;;;;; 1F0AB;PLAYING CARD JACK OF SPADES;So;0;ON;;;;;N;;;;; 1F0AC;PLAYING CARD KNIGHT OF SPADES;So;0;ON;;;;;N;;;;; 1F0AD;PLAYING CARD QUEEN OF SPADES;So;0;ON;;;;;N;;;;; 1F0AE;PLAYING CARD KING OF SPADES;So;0;ON;;;;;N;;;;; 1F0B1;PLAYING CARD ACE OF HEARTS;So;0;ON;;;;;N;;;;; 1F0B2;PLAYING CARD TWO OF HEARTS;So;0;ON;;;;;N;;;;; 1F0B3;PLAYING CARD THREE OF HEARTS;So;0;ON;;;;;N;;;;; 1F0B4;PLAYING CARD FOUR OF HEARTS;So;0;ON;;;;;N;;;;; 1F0B5;PLAYING CARD FIVE OF HEARTS;So;0;ON;;;;;N;;;;; 1F0B6;PLAYING CARD SIX OF HEARTS;So;0;ON;;;;;N;;;;; 1F0B7;PLAYING CARD SEVEN OF HEARTS;So;0;ON;;;;;N;;;;; 1F0B8;PLAYING CARD EIGHT OF HEARTS;So;0;ON;;;;;N;;;;; 1F0B9;PLAYING CARD NINE OF HEARTS;So;0;ON;;;;;N;;;;; 1F0BA;PLAYING CARD TEN OF HEARTS;So;0;ON;;;;;N;;;;; 1F0BB;PLAYING CARD JACK OF HEARTS;So;0;ON;;;;;N;;;;; 1F0BC;PLAYING CARD KNIGHT OF HEARTS;So;0;ON;;;;;N;;;;; 1F0BD;PLAYING CARD QUEEN OF HEARTS;So;0;ON;;;;;N;;;;; 1F0BE;PLAYING CARD KING OF HEARTS;So;0;ON;;;;;N;;;;; 1F0BF;PLAYING CARD RED JOKER;So;0;ON;;;;;N;;;;; 1F0C1;PLAYING CARD ACE OF DIAMONDS;So;0;ON;;;;;N;;;;; 1F0C2;PLAYING CARD TWO OF DIAMONDS;So;0;ON;;;;;N;;;;; 1F0C3;PLAYING CARD THREE OF DIAMONDS;So;0;ON;;;;;N;;;;; 1F0C4;PLAYING CARD FOUR OF DIAMONDS;So;0;ON;;;;;N;;;;; 1F0C5;PLAYING CARD FIVE OF DIAMONDS;So;0;ON;;;;;N;;;;; 1F0C6;PLAYING CARD SIX OF DIAMONDS;So;0;ON;;;;;N;;;;; 1F0C7;PLAYING CARD SEVEN OF DIAMONDS;So;0;ON;;;;;N;;;;; 1F0C8;PLAYING CARD EIGHT OF DIAMONDS;So;0;ON;;;;;N;;;;; 1F0C9;PLAYING CARD NINE OF DIAMONDS;So;0;ON;;;;;N;;;;; 1F0CA;PLAYING CARD TEN OF DIAMONDS;So;0;ON;;;;;N;;;;; 1F0CB;PLAYING CARD JACK OF DIAMONDS;So;0;ON;;;;;N;;;;; 1F0CC;PLAYING CARD KNIGHT OF DIAMONDS;So;0;ON;;;;;N;;;;; 1F0CD;PLAYING CARD QUEEN OF DIAMONDS;So;0;ON;;;;;N;;;;; 1F0CE;PLAYING CARD KING OF DIAMONDS;So;0;ON;;;;;N;;;;; 1F0CF;PLAYING CARD BLACK JOKER;So;0;ON;;;;;N;;;;; 1F0D1;PLAYING CARD ACE OF CLUBS;So;0;ON;;;;;N;;;;; 1F0D2;PLAYING CARD TWO OF CLUBS;So;0;ON;;;;;N;;;;; 1F0D3;PLAYING CARD THREE OF CLUBS;So;0;ON;;;;;N;;;;; 1F0D4;PLAYING CARD FOUR OF CLUBS;So;0;ON;;;;;N;;;;; 1F0D5;PLAYING CARD FIVE OF CLUBS;So;0;ON;;;;;N;;;;; 1F0D6;PLAYING CARD SIX OF CLUBS;So;0;ON;;;;;N;;;;; 1F0D7;PLAYING CARD SEVEN OF CLUBS;So;0;ON;;;;;N;;;;; 1F0D8;PLAYING CARD EIGHT OF CLUBS;So;0;ON;;;;;N;;;;; 1F0D9;PLAYING CARD NINE OF CLUBS;So;0;ON;;;;;N;;;;; 1F0DA;PLAYING CARD TEN OF CLUBS;So;0;ON;;;;;N;;;;; 1F0DB;PLAYING CARD JACK OF CLUBS;So;0;ON;;;;;N;;;;; 1F0DC;PLAYING CARD KNIGHT OF CLUBS;So;0;ON;;;;;N;;;;; 1F0DD;PLAYING CARD QUEEN OF CLUBS;So;0;ON;;;;;N;;;;; 1F0DE;PLAYING CARD KING OF CLUBS;So;0;ON;;;;;N;;;;; 1F0DF;PLAYING CARD WHITE JOKER;So;0;ON;;;;;N;;;;; 1F0E0;PLAYING CARD FOOL;So;0;ON;;;;;N;;;;; 1F0E1;PLAYING CARD TRUMP-1;So;0;ON;;;;;N;;;;; 1F0E2;PLAYING CARD TRUMP-2;So;0;ON;;;;;N;;;;; 1F0E3;PLAYING CARD TRUMP-3;So;0;ON;;;;;N;;;;; 1F0E4;PLAYING CARD TRUMP-4;So;0;ON;;;;;N;;;;; 1F0E5;PLAYING CARD TRUMP-5;So;0;ON;;;;;N;;;;; 1F0E6;PLAYING CARD TRUMP-6;So;0;ON;;;;;N;;;;; 1F0E7;PLAYING CARD TRUMP-7;So;0;ON;;;;;N;;;;; 1F0E8;PLAYING CARD TRUMP-8;So;0;ON;;;;;N;;;;; 1F0E9;PLAYING CARD TRUMP-9;So;0;ON;;;;;N;;;;; 1F0EA;PLAYING CARD TRUMP-10;So;0;ON;;;;;N;;;;; 1F0EB;PLAYING CARD TRUMP-11;So;0;ON;;;;;N;;;;; 1F0EC;PLAYING CARD TRUMP-12;So;0;ON;;;;;N;;;;; 1F0ED;PLAYING CARD TRUMP-13;So;0;ON;;;;;N;;;;; 1F0EE;PLAYING CARD TRUMP-14;So;0;ON;;;;;N;;;;; 1F0EF;PLAYING CARD TRUMP-15;So;0;ON;;;;;N;;;;; 1F0F0;PLAYING CARD TRUMP-16;So;0;ON;;;;;N;;;;; 1F0F1;PLAYING CARD TRUMP-17;So;0;ON;;;;;N;;;;; 1F0F2;PLAYING CARD TRUMP-18;So;0;ON;;;;;N;;;;; 1F0F3;PLAYING CARD TRUMP-19;So;0;ON;;;;;N;;;;; 1F0F4;PLAYING CARD TRUMP-20;So;0;ON;;;;;N;;;;; 1F0F5;PLAYING CARD TRUMP-21;So;0;ON;;;;;N;;;;; 1F100;DIGIT ZERO FULL STOP;No;0;EN; 0030 002E;;0;0;N;;;;; 1F101;DIGIT ZERO COMMA;No;0;EN; 0030 002C;;0;0;N;;;;; 1F102;DIGIT ONE COMMA;No;0;EN; 0031 002C;;1;1;N;;;;; 1F103;DIGIT TWO COMMA;No;0;EN; 0032 002C;;2;2;N;;;;; 1F104;DIGIT THREE COMMA;No;0;EN; 0033 002C;;3;3;N;;;;; 1F105;DIGIT FOUR COMMA;No;0;EN; 0034 002C;;4;4;N;;;;; 1F106;DIGIT FIVE COMMA;No;0;EN; 0035 002C;;5;5;N;;;;; 1F107;DIGIT SIX COMMA;No;0;EN; 0036 002C;;6;6;N;;;;; 1F108;DIGIT SEVEN COMMA;No;0;EN; 0037 002C;;7;7;N;;;;; 1F109;DIGIT EIGHT COMMA;No;0;EN; 0038 002C;;8;8;N;;;;; 1F10A;DIGIT NINE COMMA;No;0;EN; 0039 002C;;9;9;N;;;;; 1F10B;DINGBAT CIRCLED SANS-SERIF DIGIT ZERO;No;0;ON;;;;0;N;;;;; 1F10C;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ZERO;No;0;ON;;;;0;N;;;;; 1F10D;CIRCLED ZERO WITH SLASH;So;0;ON;;;;;N;;;;; 1F10E;CIRCLED ANTICLOCKWISE ARROW;So;0;ON;;;;;N;;;;; 1F10F;CIRCLED DOLLAR SIGN WITH OVERLAID BACKSLASH;So;0;ON;;;;;N;;;;; 1F110;PARENTHESIZED LATIN CAPITAL LETTER A;So;0;L; 0028 0041 0029;;;;N;;;;; 1F111;PARENTHESIZED LATIN CAPITAL LETTER B;So;0;L; 0028 0042 0029;;;;N;;;;; 1F112;PARENTHESIZED LATIN CAPITAL LETTER C;So;0;L; 0028 0043 0029;;;;N;;;;; 1F113;PARENTHESIZED LATIN CAPITAL LETTER D;So;0;L; 0028 0044 0029;;;;N;;;;; 1F114;PARENTHESIZED LATIN CAPITAL LETTER E;So;0;L; 0028 0045 0029;;;;N;;;;; 1F115;PARENTHESIZED LATIN CAPITAL LETTER F;So;0;L; 0028 0046 0029;;;;N;;;;; 1F116;PARENTHESIZED LATIN CAPITAL LETTER G;So;0;L; 0028 0047 0029;;;;N;;;;; 1F117;PARENTHESIZED LATIN CAPITAL LETTER H;So;0;L; 0028 0048 0029;;;;N;;;;; 1F118;PARENTHESIZED LATIN CAPITAL LETTER I;So;0;L; 0028 0049 0029;;;;N;;;;; 1F119;PARENTHESIZED LATIN CAPITAL LETTER J;So;0;L; 0028 004A 0029;;;;N;;;;; 1F11A;PARENTHESIZED LATIN CAPITAL LETTER K;So;0;L; 0028 004B 0029;;;;N;;;;; 1F11B;PARENTHESIZED LATIN CAPITAL LETTER L;So;0;L; 0028 004C 0029;;;;N;;;;; 1F11C;PARENTHESIZED LATIN CAPITAL LETTER M;So;0;L; 0028 004D 0029;;;;N;;;;; 1F11D;PARENTHESIZED LATIN CAPITAL LETTER N;So;0;L; 0028 004E 0029;;;;N;;;;; 1F11E;PARENTHESIZED LATIN CAPITAL LETTER O;So;0;L; 0028 004F 0029;;;;N;;;;; 1F11F;PARENTHESIZED LATIN CAPITAL LETTER P;So;0;L; 0028 0050 0029;;;;N;;;;; 1F120;PARENTHESIZED LATIN CAPITAL LETTER Q;So;0;L; 0028 0051 0029;;;;N;;;;; 1F121;PARENTHESIZED LATIN CAPITAL LETTER R;So;0;L; 0028 0052 0029;;;;N;;;;; 1F122;PARENTHESIZED LATIN CAPITAL LETTER S;So;0;L; 0028 0053 0029;;;;N;;;;; 1F123;PARENTHESIZED LATIN CAPITAL LETTER T;So;0;L; 0028 0054 0029;;;;N;;;;; 1F124;PARENTHESIZED LATIN CAPITAL LETTER U;So;0;L; 0028 0055 0029;;;;N;;;;; 1F125;PARENTHESIZED LATIN CAPITAL LETTER V;So;0;L; 0028 0056 0029;;;;N;;;;; 1F126;PARENTHESIZED LATIN CAPITAL LETTER W;So;0;L; 0028 0057 0029;;;;N;;;;; 1F127;PARENTHESIZED LATIN CAPITAL LETTER X;So;0;L; 0028 0058 0029;;;;N;;;;; 1F128;PARENTHESIZED LATIN CAPITAL LETTER Y;So;0;L; 0028 0059 0029;;;;N;;;;; 1F129;PARENTHESIZED LATIN CAPITAL LETTER Z;So;0;L; 0028 005A 0029;;;;N;;;;; 1F12A;TORTOISE SHELL BRACKETED LATIN CAPITAL LETTER S;So;0;L; 3014 0053 3015;;;;N;;;;; 1F12B;CIRCLED ITALIC LATIN CAPITAL LETTER C;So;0;L; 0043;;;;N;;;;; 1F12C;CIRCLED ITALIC LATIN CAPITAL LETTER R;So;0;L; 0052;;;;N;;;;; 1F12D;CIRCLED CD;So;0;L; 0043 0044;;;;N;;;;; 1F12E;CIRCLED WZ;So;0;L; 0057 005A;;;;N;;;;; 1F12F;COPYLEFT SYMBOL;So;0;ON;;;;;N;;;;; 1F130;SQUARED LATIN CAPITAL LETTER A;So;0;L; 0041;;;;N;;;;; 1F131;SQUARED LATIN CAPITAL LETTER B;So;0;L; 0042;;;;N;;;;; 1F132;SQUARED LATIN CAPITAL LETTER C;So;0;L; 0043;;;;N;;;;; 1F133;SQUARED LATIN CAPITAL LETTER D;So;0;L; 0044;;;;N;;;;; 1F134;SQUARED LATIN CAPITAL LETTER E;So;0;L; 0045;;;;N;;;;; 1F135;SQUARED LATIN CAPITAL LETTER F;So;0;L; 0046;;;;N;;;;; 1F136;SQUARED LATIN CAPITAL LETTER G;So;0;L; 0047;;;;N;;;;; 1F137;SQUARED LATIN CAPITAL LETTER H;So;0;L; 0048;;;;N;;;;; 1F138;SQUARED LATIN CAPITAL LETTER I;So;0;L; 0049;;;;N;;;;; 1F139;SQUARED LATIN CAPITAL LETTER J;So;0;L; 004A;;;;N;;;;; 1F13A;SQUARED LATIN CAPITAL LETTER K;So;0;L; 004B;;;;N;;;;; 1F13B;SQUARED LATIN CAPITAL LETTER L;So;0;L; 004C;;;;N;;;;; 1F13C;SQUARED LATIN CAPITAL LETTER M;So;0;L; 004D;;;;N;;;;; 1F13D;SQUARED LATIN CAPITAL LETTER N;So;0;L; 004E;;;;N;;;;; 1F13E;SQUARED LATIN CAPITAL LETTER O;So;0;L; 004F;;;;N;;;;; 1F13F;SQUARED LATIN CAPITAL LETTER P;So;0;L; 0050;;;;N;;;;; 1F140;SQUARED LATIN CAPITAL LETTER Q;So;0;L; 0051;;;;N;;;;; 1F141;SQUARED LATIN CAPITAL LETTER R;So;0;L; 0052;;;;N;;;;; 1F142;SQUARED LATIN CAPITAL LETTER S;So;0;L; 0053;;;;N;;;;; 1F143;SQUARED LATIN CAPITAL LETTER T;So;0;L; 0054;;;;N;;;;; 1F144;SQUARED LATIN CAPITAL LETTER U;So;0;L; 0055;;;;N;;;;; 1F145;SQUARED LATIN CAPITAL LETTER V;So;0;L; 0056;;;;N;;;;; 1F146;SQUARED LATIN CAPITAL LETTER W;So;0;L; 0057;;;;N;;;;; 1F147;SQUARED LATIN CAPITAL LETTER X;So;0;L; 0058;;;;N;;;;; 1F148;SQUARED LATIN CAPITAL LETTER Y;So;0;L; 0059;;;;N;;;;; 1F149;SQUARED LATIN CAPITAL LETTER Z;So;0;L; 005A;;;;N;;;;; 1F14A;SQUARED HV;So;0;L; 0048 0056;;;;N;;;;; 1F14B;SQUARED MV;So;0;L; 004D 0056;;;;N;;;;; 1F14C;SQUARED SD;So;0;L; 0053 0044;;;;N;;;;; 1F14D;SQUARED SS;So;0;L; 0053 0053;;;;N;;;;; 1F14E;SQUARED PPV;So;0;L; 0050 0050 0056;;;;N;;;;; 1F14F;SQUARED WC;So;0;L; 0057 0043;;;;N;;;;; 1F150;NEGATIVE CIRCLED LATIN CAPITAL LETTER A;So;0;L;;;;;N;;;;; 1F151;NEGATIVE CIRCLED LATIN CAPITAL LETTER B;So;0;L;;;;;N;;;;; 1F152;NEGATIVE CIRCLED LATIN CAPITAL LETTER C;So;0;L;;;;;N;;;;; 1F153;NEGATIVE CIRCLED LATIN CAPITAL LETTER D;So;0;L;;;;;N;;;;; 1F154;NEGATIVE CIRCLED LATIN CAPITAL LETTER E;So;0;L;;;;;N;;;;; 1F155;NEGATIVE CIRCLED LATIN CAPITAL LETTER F;So;0;L;;;;;N;;;;; 1F156;NEGATIVE CIRCLED LATIN CAPITAL LETTER G;So;0;L;;;;;N;;;;; 1F157;NEGATIVE CIRCLED LATIN CAPITAL LETTER H;So;0;L;;;;;N;;;;; 1F158;NEGATIVE CIRCLED LATIN CAPITAL LETTER I;So;0;L;;;;;N;;;;; 1F159;NEGATIVE CIRCLED LATIN CAPITAL LETTER J;So;0;L;;;;;N;;;;; 1F15A;NEGATIVE CIRCLED LATIN CAPITAL LETTER K;So;0;L;;;;;N;;;;; 1F15B;NEGATIVE CIRCLED LATIN CAPITAL LETTER L;So;0;L;;;;;N;;;;; 1F15C;NEGATIVE CIRCLED LATIN CAPITAL LETTER M;So;0;L;;;;;N;;;;; 1F15D;NEGATIVE CIRCLED LATIN CAPITAL LETTER N;So;0;L;;;;;N;;;;; 1F15E;NEGATIVE CIRCLED LATIN CAPITAL LETTER O;So;0;L;;;;;N;;;;; 1F15F;NEGATIVE CIRCLED LATIN CAPITAL LETTER P;So;0;L;;;;;N;;;;; 1F160;NEGATIVE CIRCLED LATIN CAPITAL LETTER Q;So;0;L;;;;;N;;;;; 1F161;NEGATIVE CIRCLED LATIN CAPITAL LETTER R;So;0;L;;;;;N;;;;; 1F162;NEGATIVE CIRCLED LATIN CAPITAL LETTER S;So;0;L;;;;;N;;;;; 1F163;NEGATIVE CIRCLED LATIN CAPITAL LETTER T;So;0;L;;;;;N;;;;; 1F164;NEGATIVE CIRCLED LATIN CAPITAL LETTER U;So;0;L;;;;;N;;;;; 1F165;NEGATIVE CIRCLED LATIN CAPITAL LETTER V;So;0;L;;;;;N;;;;; 1F166;NEGATIVE CIRCLED LATIN CAPITAL LETTER W;So;0;L;;;;;N;;;;; 1F167;NEGATIVE CIRCLED LATIN CAPITAL LETTER X;So;0;L;;;;;N;;;;; 1F168;NEGATIVE CIRCLED LATIN CAPITAL LETTER Y;So;0;L;;;;;N;;;;; 1F169;NEGATIVE CIRCLED LATIN CAPITAL LETTER Z;So;0;L;;;;;N;;;;; 1F16A;RAISED MC SIGN;So;0;ON; 004D 0043;;;;N;;;;; 1F16B;RAISED MD SIGN;So;0;ON; 004D 0044;;;;N;;;;; 1F16C;RAISED MR SIGN;So;0;ON; 004D 0052;;;;N;;;;; 1F16D;CIRCLED CC;So;0;ON;;;;;N;;;;; 1F16E;CIRCLED C WITH OVERLAID BACKSLASH;So;0;ON;;;;;N;;;;; 1F16F;CIRCLED HUMAN FIGURE;So;0;ON;;;;;N;;;;; 1F170;NEGATIVE SQUARED LATIN CAPITAL LETTER A;So;0;L;;;;;N;;;;; 1F171;NEGATIVE SQUARED LATIN CAPITAL LETTER B;So;0;L;;;;;N;;;;; 1F172;NEGATIVE SQUARED LATIN CAPITAL LETTER C;So;0;L;;;;;N;;;;; 1F173;NEGATIVE SQUARED LATIN CAPITAL LETTER D;So;0;L;;;;;N;;;;; 1F174;NEGATIVE SQUARED LATIN CAPITAL LETTER E;So;0;L;;;;;N;;;;; 1F175;NEGATIVE SQUARED LATIN CAPITAL LETTER F;So;0;L;;;;;N;;;;; 1F176;NEGATIVE SQUARED LATIN CAPITAL LETTER G;So;0;L;;;;;N;;;;; 1F177;NEGATIVE SQUARED LATIN CAPITAL LETTER H;So;0;L;;;;;N;;;;; 1F178;NEGATIVE SQUARED LATIN CAPITAL LETTER I;So;0;L;;;;;N;;;;; 1F179;NEGATIVE SQUARED LATIN CAPITAL LETTER J;So;0;L;;;;;N;;;;; 1F17A;NEGATIVE SQUARED LATIN CAPITAL LETTER K;So;0;L;;;;;N;;;;; 1F17B;NEGATIVE SQUARED LATIN CAPITAL LETTER L;So;0;L;;;;;N;;;;; 1F17C;NEGATIVE SQUARED LATIN CAPITAL LETTER M;So;0;L;;;;;N;;;;; 1F17D;NEGATIVE SQUARED LATIN CAPITAL LETTER N;So;0;L;;;;;N;;;;; 1F17E;NEGATIVE SQUARED LATIN CAPITAL LETTER O;So;0;L;;;;;N;;;;; 1F17F;NEGATIVE SQUARED LATIN CAPITAL LETTER P;So;0;L;;;;;N;;;;; 1F180;NEGATIVE SQUARED LATIN CAPITAL LETTER Q;So;0;L;;;;;N;;;;; 1F181;NEGATIVE SQUARED LATIN CAPITAL LETTER R;So;0;L;;;;;N;;;;; 1F182;NEGATIVE SQUARED LATIN CAPITAL LETTER S;So;0;L;;;;;N;;;;; 1F183;NEGATIVE SQUARED LATIN CAPITAL LETTER T;So;0;L;;;;;N;;;;; 1F184;NEGATIVE SQUARED LATIN CAPITAL LETTER U;So;0;L;;;;;N;;;;; 1F185;NEGATIVE SQUARED LATIN CAPITAL LETTER V;So;0;L;;;;;N;;;;; 1F186;NEGATIVE SQUARED LATIN CAPITAL LETTER W;So;0;L;;;;;N;;;;; 1F187;NEGATIVE SQUARED LATIN CAPITAL LETTER X;So;0;L;;;;;N;;;;; 1F188;NEGATIVE SQUARED LATIN CAPITAL LETTER Y;So;0;L;;;;;N;;;;; 1F189;NEGATIVE SQUARED LATIN CAPITAL LETTER Z;So;0;L;;;;;N;;;;; 1F18A;CROSSED NEGATIVE SQUARED LATIN CAPITAL LETTER P;So;0;L;;;;;N;;;;; 1F18B;NEGATIVE SQUARED IC;So;0;L;;;;;N;;;;; 1F18C;NEGATIVE SQUARED PA;So;0;L;;;;;N;;;;; 1F18D;NEGATIVE SQUARED SA;So;0;L;;;;;N;;;;; 1F18E;NEGATIVE SQUARED AB;So;0;L;;;;;N;;;;; 1F18F;NEGATIVE SQUARED WC;So;0;L;;;;;N;;;;; 1F190;SQUARE DJ;So;0;L; 0044 004A;;;;N;;;;; 1F191;SQUARED CL;So;0;L;;;;;N;;;;; 1F192;SQUARED COOL;So;0;L;;;;;N;;;;; 1F193;SQUARED FREE;So;0;L;;;;;N;;;;; 1F194;SQUARED ID;So;0;L;;;;;N;;;;; 1F195;SQUARED NEW;So;0;L;;;;;N;;;;; 1F196;SQUARED NG;So;0;L;;;;;N;;;;; 1F197;SQUARED OK;So;0;L;;;;;N;;;;; 1F198;SQUARED SOS;So;0;L;;;;;N;;;;; 1F199;SQUARED UP WITH EXCLAMATION MARK;So;0;L;;;;;N;;;;; 1F19A;SQUARED VS;So;0;L;;;;;N;;;;; 1F19B;SQUARED THREE D;So;0;L;;;;;N;;;;; 1F19C;SQUARED SECOND SCREEN;So;0;L;;;;;N;;;;; 1F19D;SQUARED TWO K;So;0;L;;;;;N;;;;; 1F19E;SQUARED FOUR K;So;0;L;;;;;N;;;;; 1F19F;SQUARED EIGHT K;So;0;L;;;;;N;;;;; 1F1A0;SQUARED FIVE POINT ONE;So;0;L;;;;;N;;;;; 1F1A1;SQUARED SEVEN POINT ONE;So;0;L;;;;;N;;;;; 1F1A2;SQUARED TWENTY-TWO POINT TWO;So;0;L;;;;;N;;;;; 1F1A3;SQUARED SIXTY P;So;0;L;;;;;N;;;;; 1F1A4;SQUARED ONE HUNDRED TWENTY P;So;0;L;;;;;N;;;;; 1F1A5;SQUARED LATIN SMALL LETTER D;So;0;L;;;;;N;;;;; 1F1A6;SQUARED HC;So;0;L;;;;;N;;;;; 1F1A7;SQUARED HDR;So;0;L;;;;;N;;;;; 1F1A8;SQUARED HI-RES;So;0;L;;;;;N;;;;; 1F1A9;SQUARED LOSSLESS;So;0;L;;;;;N;;;;; 1F1AA;SQUARED SHV;So;0;L;;;;;N;;;;; 1F1AB;SQUARED UHD;So;0;L;;;;;N;;;;; 1F1AC;SQUARED VOD;So;0;L;;;;;N;;;;; 1F1AD;MASK WORK SYMBOL;So;0;ON;;;;;N;;;;; 1F1E6;REGIONAL INDICATOR SYMBOL LETTER A;So;0;L;;;;;N;;;;; 1F1E7;REGIONAL INDICATOR SYMBOL LETTER B;So;0;L;;;;;N;;;;; 1F1E8;REGIONAL INDICATOR SYMBOL LETTER C;So;0;L;;;;;N;;;;; 1F1E9;REGIONAL INDICATOR SYMBOL LETTER D;So;0;L;;;;;N;;;;; 1F1EA;REGIONAL INDICATOR SYMBOL LETTER E;So;0;L;;;;;N;;;;; 1F1EB;REGIONAL INDICATOR SYMBOL LETTER F;So;0;L;;;;;N;;;;; 1F1EC;REGIONAL INDICATOR SYMBOL LETTER G;So;0;L;;;;;N;;;;; 1F1ED;REGIONAL INDICATOR SYMBOL LETTER H;So;0;L;;;;;N;;;;; 1F1EE;REGIONAL INDICATOR SYMBOL LETTER I;So;0;L;;;;;N;;;;; 1F1EF;REGIONAL INDICATOR SYMBOL LETTER J;So;0;L;;;;;N;;;;; 1F1F0;REGIONAL INDICATOR SYMBOL LETTER K;So;0;L;;;;;N;;;;; 1F1F1;REGIONAL INDICATOR SYMBOL LETTER L;So;0;L;;;;;N;;;;; 1F1F2;REGIONAL INDICATOR SYMBOL LETTER M;So;0;L;;;;;N;;;;; 1F1F3;REGIONAL INDICATOR SYMBOL LETTER N;So;0;L;;;;;N;;;;; 1F1F4;REGIONAL INDICATOR SYMBOL LETTER O;So;0;L;;;;;N;;;;; 1F1F5;REGIONAL INDICATOR SYMBOL LETTER P;So;0;L;;;;;N;;;;; 1F1F6;REGIONAL INDICATOR SYMBOL LETTER Q;So;0;L;;;;;N;;;;; 1F1F7;REGIONAL INDICATOR SYMBOL LETTER R;So;0;L;;;;;N;;;;; 1F1F8;REGIONAL INDICATOR SYMBOL LETTER S;So;0;L;;;;;N;;;;; 1F1F9;REGIONAL INDICATOR SYMBOL LETTER T;So;0;L;;;;;N;;;;; 1F1FA;REGIONAL INDICATOR SYMBOL LETTER U;So;0;L;;;;;N;;;;; 1F1FB;REGIONAL INDICATOR SYMBOL LETTER V;So;0;L;;;;;N;;;;; 1F1FC;REGIONAL INDICATOR SYMBOL LETTER W;So;0;L;;;;;N;;;;; 1F1FD;REGIONAL INDICATOR SYMBOL LETTER X;So;0;L;;;;;N;;;;; 1F1FE;REGIONAL INDICATOR SYMBOL LETTER Y;So;0;L;;;;;N;;;;; 1F1FF;REGIONAL INDICATOR SYMBOL LETTER Z;So;0;L;;;;;N;;;;; 1F200;SQUARE HIRAGANA HOKA;So;0;L; 307B 304B;;;;N;;;;; 1F201;SQUARED KATAKANA KOKO;So;0;L; 30B3 30B3;;;;N;;;;; 1F202;SQUARED KATAKANA SA;So;0;L; 30B5;;;;N;;;;; 1F210;SQUARED CJK UNIFIED IDEOGRAPH-624B;So;0;L; 624B;;;;N;;;;; 1F211;SQUARED CJK UNIFIED IDEOGRAPH-5B57;So;0;L; 5B57;;;;N;;;;; 1F212;SQUARED CJK UNIFIED IDEOGRAPH-53CC;So;0;L; 53CC;;;;N;;;;; 1F213;SQUARED KATAKANA DE;So;0;L; 30C7;;;;N;;;;; 1F214;SQUARED CJK UNIFIED IDEOGRAPH-4E8C;So;0;L; 4E8C;;;;N;;;;; 1F215;SQUARED CJK UNIFIED IDEOGRAPH-591A;So;0;L; 591A;;;;N;;;;; 1F216;SQUARED CJK UNIFIED IDEOGRAPH-89E3;So;0;L; 89E3;;;;N;;;;; 1F217;SQUARED CJK UNIFIED IDEOGRAPH-5929;So;0;L; 5929;;;;N;;;;; 1F218;SQUARED CJK UNIFIED IDEOGRAPH-4EA4;So;0;L; 4EA4;;;;N;;;;; 1F219;SQUARED CJK UNIFIED IDEOGRAPH-6620;So;0;L; 6620;;;;N;;;;; 1F21A;SQUARED CJK UNIFIED IDEOGRAPH-7121;So;0;L; 7121;;;;N;;;;; 1F21B;SQUARED CJK UNIFIED IDEOGRAPH-6599;So;0;L; 6599;;;;N;;;;; 1F21C;SQUARED CJK UNIFIED IDEOGRAPH-524D;So;0;L; 524D;;;;N;;;;; 1F21D;SQUARED CJK UNIFIED IDEOGRAPH-5F8C;So;0;L; 5F8C;;;;N;;;;; 1F21E;SQUARED CJK UNIFIED IDEOGRAPH-518D;So;0;L; 518D;;;;N;;;;; 1F21F;SQUARED CJK UNIFIED IDEOGRAPH-65B0;So;0;L; 65B0;;;;N;;;;; 1F220;SQUARED CJK UNIFIED IDEOGRAPH-521D;So;0;L; 521D;;;;N;;;;; 1F221;SQUARED CJK UNIFIED IDEOGRAPH-7D42;So;0;L; 7D42;;;;N;;;;; 1F222;SQUARED CJK UNIFIED IDEOGRAPH-751F;So;0;L; 751F;;;;N;;;;; 1F223;SQUARED CJK UNIFIED IDEOGRAPH-8CA9;So;0;L; 8CA9;;;;N;;;;; 1F224;SQUARED CJK UNIFIED IDEOGRAPH-58F0;So;0;L; 58F0;;;;N;;;;; 1F225;SQUARED CJK UNIFIED IDEOGRAPH-5439;So;0;L; 5439;;;;N;;;;; 1F226;SQUARED CJK UNIFIED IDEOGRAPH-6F14;So;0;L; 6F14;;;;N;;;;; 1F227;SQUARED CJK UNIFIED IDEOGRAPH-6295;So;0;L; 6295;;;;N;;;;; 1F228;SQUARED CJK UNIFIED IDEOGRAPH-6355;So;0;L; 6355;;;;N;;;;; 1F229;SQUARED CJK UNIFIED IDEOGRAPH-4E00;So;0;L; 4E00;;;;N;;;;; 1F22A;SQUARED CJK UNIFIED IDEOGRAPH-4E09;So;0;L; 4E09;;;;N;;;;; 1F22B;SQUARED CJK UNIFIED IDEOGRAPH-904A;So;0;L; 904A;;;;N;;;;; 1F22C;SQUARED CJK UNIFIED IDEOGRAPH-5DE6;So;0;L; 5DE6;;;;N;;;;; 1F22D;SQUARED CJK UNIFIED IDEOGRAPH-4E2D;So;0;L; 4E2D;;;;N;;;;; 1F22E;SQUARED CJK UNIFIED IDEOGRAPH-53F3;So;0;L; 53F3;;;;N;;;;; 1F22F;SQUARED CJK UNIFIED IDEOGRAPH-6307;So;0;L; 6307;;;;N;;;;; 1F230;SQUARED CJK UNIFIED IDEOGRAPH-8D70;So;0;L; 8D70;;;;N;;;;; 1F231;SQUARED CJK UNIFIED IDEOGRAPH-6253;So;0;L; 6253;;;;N;;;;; 1F232;SQUARED CJK UNIFIED IDEOGRAPH-7981;So;0;L; 7981;;;;N;;;;; 1F233;SQUARED CJK UNIFIED IDEOGRAPH-7A7A;So;0;L; 7A7A;;;;N;;;;; 1F234;SQUARED CJK UNIFIED IDEOGRAPH-5408;So;0;L; 5408;;;;N;;;;; 1F235;SQUARED CJK UNIFIED IDEOGRAPH-6E80;So;0;L; 6E80;;;;N;;;;; 1F236;SQUARED CJK UNIFIED IDEOGRAPH-6709;So;0;L; 6709;;;;N;;;;; 1F237;SQUARED CJK UNIFIED IDEOGRAPH-6708;So;0;L; 6708;;;;N;;;;; 1F238;SQUARED CJK UNIFIED IDEOGRAPH-7533;So;0;L; 7533;;;;N;;;;; 1F239;SQUARED CJK UNIFIED IDEOGRAPH-5272;So;0;L; 5272;;;;N;;;;; 1F23A;SQUARED CJK UNIFIED IDEOGRAPH-55B6;So;0;L; 55B6;;;;N;;;;; 1F23B;SQUARED CJK UNIFIED IDEOGRAPH-914D;So;0;L; 914D;;;;N;;;;; 1F240;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C;So;0;L; 3014 672C 3015;;;;N;;;;; 1F241;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E09;So;0;L; 3014 4E09 3015;;;;N;;;;; 1F242;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E8C;So;0;L; 3014 4E8C 3015;;;;N;;;;; 1F243;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-5B89;So;0;L; 3014 5B89 3015;;;;N;;;;; 1F244;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-70B9;So;0;L; 3014 70B9 3015;;;;N;;;;; 1F245;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6253;So;0;L; 3014 6253 3015;;;;N;;;;; 1F246;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-76D7;So;0;L; 3014 76D7 3015;;;;N;;;;; 1F247;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-52DD;So;0;L; 3014 52DD 3015;;;;N;;;;; 1F248;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557;So;0;L; 3014 6557 3015;;;;N;;;;; 1F250;CIRCLED IDEOGRAPH ADVANTAGE;So;0;L; 5F97;;;;N;;;;; 1F251;CIRCLED IDEOGRAPH ACCEPT;So;0;L; 53EF;;;;N;;;;; 1F260;ROUNDED SYMBOL FOR FU;So;0;ON;;;;;N;;;;; 1F261;ROUNDED SYMBOL FOR LU;So;0;ON;;;;;N;;;;; 1F262;ROUNDED SYMBOL FOR SHOU;So;0;ON;;;;;N;;;;; 1F263;ROUNDED SYMBOL FOR XI;So;0;ON;;;;;N;;;;; 1F264;ROUNDED SYMBOL FOR SHUANGXI;So;0;ON;;;;;N;;;;; 1F265;ROUNDED SYMBOL FOR CAI;So;0;ON;;;;;N;;;;; 1F300;CYCLONE;So;0;ON;;;;;N;;;;; 1F301;FOGGY;So;0;ON;;;;;N;;;;; 1F302;CLOSED UMBRELLA;So;0;ON;;;;;N;;;;; 1F303;NIGHT WITH STARS;So;0;ON;;;;;N;;;;; 1F304;SUNRISE OVER MOUNTAINS;So;0;ON;;;;;N;;;;; 1F305;SUNRISE;So;0;ON;;;;;N;;;;; 1F306;CITYSCAPE AT DUSK;So;0;ON;;;;;N;;;;; 1F307;SUNSET OVER BUILDINGS;So;0;ON;;;;;N;;;;; 1F308;RAINBOW;So;0;ON;;;;;N;;;;; 1F309;BRIDGE AT NIGHT;So;0;ON;;;;;N;;;;; 1F30A;WATER WAVE;So;0;ON;;;;;N;;;;; 1F30B;VOLCANO;So;0;ON;;;;;N;;;;; 1F30C;MILKY WAY;So;0;ON;;;;;N;;;;; 1F30D;EARTH GLOBE EUROPE-AFRICA;So;0;ON;;;;;N;;;;; 1F30E;EARTH GLOBE AMERICAS;So;0;ON;;;;;N;;;;; 1F30F;EARTH GLOBE ASIA-AUSTRALIA;So;0;ON;;;;;N;;;;; 1F310;GLOBE WITH MERIDIANS;So;0;ON;;;;;N;;;;; 1F311;NEW MOON SYMBOL;So;0;ON;;;;;N;;;;; 1F312;WAXING CRESCENT MOON SYMBOL;So;0;ON;;;;;N;;;;; 1F313;FIRST QUARTER MOON SYMBOL;So;0;ON;;;;;N;;;;; 1F314;WAXING GIBBOUS MOON SYMBOL;So;0;ON;;;;;N;;;;; 1F315;FULL MOON SYMBOL;So;0;ON;;;;;N;;;;; 1F316;WANING GIBBOUS MOON SYMBOL;So;0;ON;;;;;N;;;;; 1F317;LAST QUARTER MOON SYMBOL;So;0;ON;;;;;N;;;;; 1F318;WANING CRESCENT MOON SYMBOL;So;0;ON;;;;;N;;;;; 1F319;CRESCENT MOON;So;0;ON;;;;;N;;;;; 1F31A;NEW MOON WITH FACE;So;0;ON;;;;;N;;;;; 1F31B;FIRST QUARTER MOON WITH FACE;So;0;ON;;;;;N;;;;; 1F31C;LAST QUARTER MOON WITH FACE;So;0;ON;;;;;N;;;;; 1F31D;FULL MOON WITH FACE;So;0;ON;;;;;N;;;;; 1F31E;SUN WITH FACE;So;0;ON;;;;;N;;;;; 1F31F;GLOWING STAR;So;0;ON;;;;;N;;;;; 1F320;SHOOTING STAR;So;0;ON;;;;;N;;;;; 1F321;THERMOMETER;So;0;ON;;;;;N;;;;; 1F322;BLACK DROPLET;So;0;ON;;;;;N;;;;; 1F323;WHITE SUN;So;0;ON;;;;;N;;;;; 1F324;WHITE SUN WITH SMALL CLOUD;So;0;ON;;;;;N;;;;; 1F325;WHITE SUN BEHIND CLOUD;So;0;ON;;;;;N;;;;; 1F326;WHITE SUN BEHIND CLOUD WITH RAIN;So;0;ON;;;;;N;;;;; 1F327;CLOUD WITH RAIN;So;0;ON;;;;;N;;;;; 1F328;CLOUD WITH SNOW;So;0;ON;;;;;N;;;;; 1F329;CLOUD WITH LIGHTNING;So;0;ON;;;;;N;;;;; 1F32A;CLOUD WITH TORNADO;So;0;ON;;;;;N;;;;; 1F32B;FOG;So;0;ON;;;;;N;;;;; 1F32C;WIND BLOWING FACE;So;0;ON;;;;;N;;;;; 1F32D;HOT DOG;So;0;ON;;;;;N;;;;; 1F32E;TACO;So;0;ON;;;;;N;;;;; 1F32F;BURRITO;So;0;ON;;;;;N;;;;; 1F330;CHESTNUT;So;0;ON;;;;;N;;;;; 1F331;SEEDLING;So;0;ON;;;;;N;;;;; 1F332;EVERGREEN TREE;So;0;ON;;;;;N;;;;; 1F333;DECIDUOUS TREE;So;0;ON;;;;;N;;;;; 1F334;PALM TREE;So;0;ON;;;;;N;;;;; 1F335;CACTUS;So;0;ON;;;;;N;;;;; 1F336;HOT PEPPER;So;0;ON;;;;;N;;;;; 1F337;TULIP;So;0;ON;;;;;N;;;;; 1F338;CHERRY BLOSSOM;So;0;ON;;;;;N;;;;; 1F339;ROSE;So;0;ON;;;;;N;;;;; 1F33A;HIBISCUS;So;0;ON;;;;;N;;;;; 1F33B;SUNFLOWER;So;0;ON;;;;;N;;;;; 1F33C;BLOSSOM;So;0;ON;;;;;N;;;;; 1F33D;EAR OF MAIZE;So;0;ON;;;;;N;;;;; 1F33E;EAR OF RICE;So;0;ON;;;;;N;;;;; 1F33F;HERB;So;0;ON;;;;;N;;;;; 1F340;FOUR LEAF CLOVER;So;0;ON;;;;;N;;;;; 1F341;MAPLE LEAF;So;0;ON;;;;;N;;;;; 1F342;FALLEN LEAF;So;0;ON;;;;;N;;;;; 1F343;LEAF FLUTTERING IN WIND;So;0;ON;;;;;N;;;;; 1F344;MUSHROOM;So;0;ON;;;;;N;;;;; 1F345;TOMATO;So;0;ON;;;;;N;;;;; 1F346;AUBERGINE;So;0;ON;;;;;N;;;;; 1F347;GRAPES;So;0;ON;;;;;N;;;;; 1F348;MELON;So;0;ON;;;;;N;;;;; 1F349;WATERMELON;So;0;ON;;;;;N;;;;; 1F34A;TANGERINE;So;0;ON;;;;;N;;;;; 1F34B;LEMON;So;0;ON;;;;;N;;;;; 1F34C;BANANA;So;0;ON;;;;;N;;;;; 1F34D;PINEAPPLE;So;0;ON;;;;;N;;;;; 1F34E;RED APPLE;So;0;ON;;;;;N;;;;; 1F34F;GREEN APPLE;So;0;ON;;;;;N;;;;; 1F350;PEAR;So;0;ON;;;;;N;;;;; 1F351;PEACH;So;0;ON;;;;;N;;;;; 1F352;CHERRIES;So;0;ON;;;;;N;;;;; 1F353;STRAWBERRY;So;0;ON;;;;;N;;;;; 1F354;HAMBURGER;So;0;ON;;;;;N;;;;; 1F355;SLICE OF PIZZA;So;0;ON;;;;;N;;;;; 1F356;MEAT ON BONE;So;0;ON;;;;;N;;;;; 1F357;POULTRY LEG;So;0;ON;;;;;N;;;;; 1F358;RICE CRACKER;So;0;ON;;;;;N;;;;; 1F359;RICE BALL;So;0;ON;;;;;N;;;;; 1F35A;COOKED RICE;So;0;ON;;;;;N;;;;; 1F35B;CURRY AND RICE;So;0;ON;;;;;N;;;;; 1F35C;STEAMING BOWL;So;0;ON;;;;;N;;;;; 1F35D;SPAGHETTI;So;0;ON;;;;;N;;;;; 1F35E;BREAD;So;0;ON;;;;;N;;;;; 1F35F;FRENCH FRIES;So;0;ON;;;;;N;;;;; 1F360;ROASTED SWEET POTATO;So;0;ON;;;;;N;;;;; 1F361;DANGO;So;0;ON;;;;;N;;;;; 1F362;ODEN;So;0;ON;;;;;N;;;;; 1F363;SUSHI;So;0;ON;;;;;N;;;;; 1F364;FRIED SHRIMP;So;0;ON;;;;;N;;;;; 1F365;FISH CAKE WITH SWIRL DESIGN;So;0;ON;;;;;N;;;;; 1F366;SOFT ICE CREAM;So;0;ON;;;;;N;;;;; 1F367;SHAVED ICE;So;0;ON;;;;;N;;;;; 1F368;ICE CREAM;So;0;ON;;;;;N;;;;; 1F369;DOUGHNUT;So;0;ON;;;;;N;;;;; 1F36A;COOKIE;So;0;ON;;;;;N;;;;; 1F36B;CHOCOLATE BAR;So;0;ON;;;;;N;;;;; 1F36C;CANDY;So;0;ON;;;;;N;;;;; 1F36D;LOLLIPOP;So;0;ON;;;;;N;;;;; 1F36E;CUSTARD;So;0;ON;;;;;N;;;;; 1F36F;HONEY POT;So;0;ON;;;;;N;;;;; 1F370;SHORTCAKE;So;0;ON;;;;;N;;;;; 1F371;BENTO BOX;So;0;ON;;;;;N;;;;; 1F372;POT OF FOOD;So;0;ON;;;;;N;;;;; 1F373;COOKING;So;0;ON;;;;;N;;;;; 1F374;FORK AND KNIFE;So;0;ON;;;;;N;;;;; 1F375;TEACUP WITHOUT HANDLE;So;0;ON;;;;;N;;;;; 1F376;SAKE BOTTLE AND CUP;So;0;ON;;;;;N;;;;; 1F377;WINE GLASS;So;0;ON;;;;;N;;;;; 1F378;COCKTAIL GLASS;So;0;ON;;;;;N;;;;; 1F379;TROPICAL DRINK;So;0;ON;;;;;N;;;;; 1F37A;BEER MUG;So;0;ON;;;;;N;;;;; 1F37B;CLINKING BEER MUGS;So;0;ON;;;;;N;;;;; 1F37C;BABY BOTTLE;So;0;ON;;;;;N;;;;; 1F37D;FORK AND KNIFE WITH PLATE;So;0;ON;;;;;N;;;;; 1F37E;BOTTLE WITH POPPING CORK;So;0;ON;;;;;N;;;;; 1F37F;POPCORN;So;0;ON;;;;;N;;;;; 1F380;RIBBON;So;0;ON;;;;;N;;;;; 1F381;WRAPPED PRESENT;So;0;ON;;;;;N;;;;; 1F382;BIRTHDAY CAKE;So;0;ON;;;;;N;;;;; 1F383;JACK-O-LANTERN;So;0;ON;;;;;N;;;;; 1F384;CHRISTMAS TREE;So;0;ON;;;;;N;;;;; 1F385;FATHER CHRISTMAS;So;0;ON;;;;;N;;;;; 1F386;FIREWORKS;So;0;ON;;;;;N;;;;; 1F387;FIREWORK SPARKLER;So;0;ON;;;;;N;;;;; 1F388;BALLOON;So;0;ON;;;;;N;;;;; 1F389;PARTY POPPER;So;0;ON;;;;;N;;;;; 1F38A;CONFETTI BALL;So;0;ON;;;;;N;;;;; 1F38B;TANABATA TREE;So;0;ON;;;;;N;;;;; 1F38C;CROSSED FLAGS;So;0;ON;;;;;N;;;;; 1F38D;PINE DECORATION;So;0;ON;;;;;N;;;;; 1F38E;JAPANESE DOLLS;So;0;ON;;;;;N;;;;; 1F38F;CARP STREAMER;So;0;ON;;;;;N;;;;; 1F390;WIND CHIME;So;0;ON;;;;;N;;;;; 1F391;MOON VIEWING CEREMONY;So;0;ON;;;;;N;;;;; 1F392;SCHOOL SATCHEL;So;0;ON;;;;;N;;;;; 1F393;GRADUATION CAP;So;0;ON;;;;;N;;;;; 1F394;HEART WITH TIP ON THE LEFT;So;0;ON;;;;;N;;;;; 1F395;BOUQUET OF FLOWERS;So;0;ON;;;;;N;;;;; 1F396;MILITARY MEDAL;So;0;ON;;;;;N;;;;; 1F397;REMINDER RIBBON;So;0;ON;;;;;N;;;;; 1F398;MUSICAL KEYBOARD WITH JACKS;So;0;ON;;;;;N;;;;; 1F399;STUDIO MICROPHONE;So;0;ON;;;;;N;;;;; 1F39A;LEVEL SLIDER;So;0;ON;;;;;N;;;;; 1F39B;CONTROL KNOBS;So;0;ON;;;;;N;;;;; 1F39C;BEAMED ASCENDING MUSICAL NOTES;So;0;ON;;;;;N;;;;; 1F39D;BEAMED DESCENDING MUSICAL NOTES;So;0;ON;;;;;N;;;;; 1F39E;FILM FRAMES;So;0;ON;;;;;N;;;;; 1F39F;ADMISSION TICKETS;So;0;ON;;;;;N;;;;; 1F3A0;CAROUSEL HORSE;So;0;ON;;;;;N;;;;; 1F3A1;FERRIS WHEEL;So;0;ON;;;;;N;;;;; 1F3A2;ROLLER COASTER;So;0;ON;;;;;N;;;;; 1F3A3;FISHING POLE AND FISH;So;0;ON;;;;;N;;;;; 1F3A4;MICROPHONE;So;0;ON;;;;;N;;;;; 1F3A5;MOVIE CAMERA;So;0;ON;;;;;N;;;;; 1F3A6;CINEMA;So;0;ON;;;;;N;;;;; 1F3A7;HEADPHONE;So;0;ON;;;;;N;;;;; 1F3A8;ARTIST PALETTE;So;0;ON;;;;;N;;;;; 1F3A9;TOP HAT;So;0;ON;;;;;N;;;;; 1F3AA;CIRCUS TENT;So;0;ON;;;;;N;;;;; 1F3AB;TICKET;So;0;ON;;;;;N;;;;; 1F3AC;CLAPPER BOARD;So;0;ON;;;;;N;;;;; 1F3AD;PERFORMING ARTS;So;0;ON;;;;;N;;;;; 1F3AE;VIDEO GAME;So;0;ON;;;;;N;;;;; 1F3AF;DIRECT HIT;So;0;ON;;;;;N;;;;; 1F3B0;SLOT MACHINE;So;0;ON;;;;;N;;;;; 1F3B1;BILLIARDS;So;0;ON;;;;;N;;;;; 1F3B2;GAME DIE;So;0;ON;;;;;N;;;;; 1F3B3;BOWLING;So;0;ON;;;;;N;;;;; 1F3B4;FLOWER PLAYING CARDS;So;0;ON;;;;;N;;;;; 1F3B5;MUSICAL NOTE;So;0;ON;;;;;N;;;;; 1F3B6;MULTIPLE MUSICAL NOTES;So;0;ON;;;;;N;;;;; 1F3B7;SAXOPHONE;So;0;ON;;;;;N;;;;; 1F3B8;GUITAR;So;0;ON;;;;;N;;;;; 1F3B9;MUSICAL KEYBOARD;So;0;ON;;;;;N;;;;; 1F3BA;TRUMPET;So;0;ON;;;;;N;;;;; 1F3BB;VIOLIN;So;0;ON;;;;;N;;;;; 1F3BC;MUSICAL SCORE;So;0;ON;;;;;N;;;;; 1F3BD;RUNNING SHIRT WITH SASH;So;0;ON;;;;;N;;;;; 1F3BE;TENNIS RACQUET AND BALL;So;0;ON;;;;;N;;;;; 1F3BF;SKI AND SKI BOOT;So;0;ON;;;;;N;;;;; 1F3C0;BASKETBALL AND HOOP;So;0;ON;;;;;N;;;;; 1F3C1;CHEQUERED FLAG;So;0;ON;;;;;N;;;;; 1F3C2;SNOWBOARDER;So;0;ON;;;;;N;;;;; 1F3C3;RUNNER;So;0;ON;;;;;N;;;;; 1F3C4;SURFER;So;0;ON;;;;;N;;;;; 1F3C5;SPORTS MEDAL;So;0;ON;;;;;N;;;;; 1F3C6;TROPHY;So;0;ON;;;;;N;;;;; 1F3C7;HORSE RACING;So;0;ON;;;;;N;;;;; 1F3C8;AMERICAN FOOTBALL;So;0;ON;;;;;N;;;;; 1F3C9;RUGBY FOOTBALL;So;0;ON;;;;;N;;;;; 1F3CA;SWIMMER;So;0;ON;;;;;N;;;;; 1F3CB;WEIGHT LIFTER;So;0;ON;;;;;N;;;;; 1F3CC;GOLFER;So;0;ON;;;;;N;;;;; 1F3CD;RACING MOTORCYCLE;So;0;ON;;;;;N;;;;; 1F3CE;RACING CAR;So;0;ON;;;;;N;;;;; 1F3CF;CRICKET BAT AND BALL;So;0;ON;;;;;N;;;;; 1F3D0;VOLLEYBALL;So;0;ON;;;;;N;;;;; 1F3D1;FIELD HOCKEY STICK AND BALL;So;0;ON;;;;;N;;;;; 1F3D2;ICE HOCKEY STICK AND PUCK;So;0;ON;;;;;N;;;;; 1F3D3;TABLE TENNIS PADDLE AND BALL;So;0;ON;;;;;N;;;;; 1F3D4;SNOW CAPPED MOUNTAIN;So;0;ON;;;;;N;;;;; 1F3D5;CAMPING;So;0;ON;;;;;N;;;;; 1F3D6;BEACH WITH UMBRELLA;So;0;ON;;;;;N;;;;; 1F3D7;BUILDING CONSTRUCTION;So;0;ON;;;;;N;;;;; 1F3D8;HOUSE BUILDINGS;So;0;ON;;;;;N;;;;; 1F3D9;CITYSCAPE;So;0;ON;;;;;N;;;;; 1F3DA;DERELICT HOUSE BUILDING;So;0;ON;;;;;N;;;;; 1F3DB;CLASSICAL BUILDING;So;0;ON;;;;;N;;;;; 1F3DC;DESERT;So;0;ON;;;;;N;;;;; 1F3DD;DESERT ISLAND;So;0;ON;;;;;N;;;;; 1F3DE;NATIONAL PARK;So;0;ON;;;;;N;;;;; 1F3DF;STADIUM;So;0;ON;;;;;N;;;;; 1F3E0;HOUSE BUILDING;So;0;ON;;;;;N;;;;; 1F3E1;HOUSE WITH GARDEN;So;0;ON;;;;;N;;;;; 1F3E2;OFFICE BUILDING;So;0;ON;;;;;N;;;;; 1F3E3;JAPANESE POST OFFICE;So;0;ON;;;;;N;;;;; 1F3E4;EUROPEAN POST OFFICE;So;0;ON;;;;;N;;;;; 1F3E5;HOSPITAL;So;0;ON;;;;;N;;;;; 1F3E6;BANK;So;0;ON;;;;;N;;;;; 1F3E7;AUTOMATED TELLER MACHINE;So;0;ON;;;;;N;;;;; 1F3E8;HOTEL;So;0;ON;;;;;N;;;;; 1F3E9;LOVE HOTEL;So;0;ON;;;;;N;;;;; 1F3EA;CONVENIENCE STORE;So;0;ON;;;;;N;;;;; 1F3EB;SCHOOL;So;0;ON;;;;;N;;;;; 1F3EC;DEPARTMENT STORE;So;0;ON;;;;;N;;;;; 1F3ED;FACTORY;So;0;ON;;;;;N;;;;; 1F3EE;IZAKAYA LANTERN;So;0;ON;;;;;N;;;;; 1F3EF;JAPANESE CASTLE;So;0;ON;;;;;N;;;;; 1F3F0;EUROPEAN CASTLE;So;0;ON;;;;;N;;;;; 1F3F1;WHITE PENNANT;So;0;ON;;;;;N;;;;; 1F3F2;BLACK PENNANT;So;0;ON;;;;;N;;;;; 1F3F3;WAVING WHITE FLAG;So;0;ON;;;;;N;;;;; 1F3F4;WAVING BLACK FLAG;So;0;ON;;;;;N;;;;; 1F3F5;ROSETTE;So;0;ON;;;;;N;;;;; 1F3F6;BLACK ROSETTE;So;0;ON;;;;;N;;;;; 1F3F7;LABEL;So;0;ON;;;;;N;;;;; 1F3F8;BADMINTON RACQUET AND SHUTTLECOCK;So;0;ON;;;;;N;;;;; 1F3F9;BOW AND ARROW;So;0;ON;;;;;N;;;;; 1F3FA;AMPHORA;So;0;ON;;;;;N;;;;; 1F3FB;EMOJI MODIFIER FITZPATRICK TYPE-1-2;Sk;0;ON;;;;;N;;;;; 1F3FC;EMOJI MODIFIER FITZPATRICK TYPE-3;Sk;0;ON;;;;;N;;;;; 1F3FD;EMOJI MODIFIER FITZPATRICK TYPE-4;Sk;0;ON;;;;;N;;;;; 1F3FE;EMOJI MODIFIER FITZPATRICK TYPE-5;Sk;0;ON;;;;;N;;;;; 1F3FF;EMOJI MODIFIER FITZPATRICK TYPE-6;Sk;0;ON;;;;;N;;;;; 1F400;RAT;So;0;ON;;;;;N;;;;; 1F401;MOUSE;So;0;ON;;;;;N;;;;; 1F402;OX;So;0;ON;;;;;N;;;;; 1F403;WATER BUFFALO;So;0;ON;;;;;N;;;;; 1F404;COW;So;0;ON;;;;;N;;;;; 1F405;TIGER;So;0;ON;;;;;N;;;;; 1F406;LEOPARD;So;0;ON;;;;;N;;;;; 1F407;RABBIT;So;0;ON;;;;;N;;;;; 1F408;CAT;So;0;ON;;;;;N;;;;; 1F409;DRAGON;So;0;ON;;;;;N;;;;; 1F40A;CROCODILE;So;0;ON;;;;;N;;;;; 1F40B;WHALE;So;0;ON;;;;;N;;;;; 1F40C;SNAIL;So;0;ON;;;;;N;;;;; 1F40D;SNAKE;So;0;ON;;;;;N;;;;; 1F40E;HORSE;So;0;ON;;;;;N;;;;; 1F40F;RAM;So;0;ON;;;;;N;;;;; 1F410;GOAT;So;0;ON;;;;;N;;;;; 1F411;SHEEP;So;0;ON;;;;;N;;;;; 1F412;MONKEY;So;0;ON;;;;;N;;;;; 1F413;ROOSTER;So;0;ON;;;;;N;;;;; 1F414;CHICKEN;So;0;ON;;;;;N;;;;; 1F415;DOG;So;0;ON;;;;;N;;;;; 1F416;PIG;So;0;ON;;;;;N;;;;; 1F417;BOAR;So;0;ON;;;;;N;;;;; 1F418;ELEPHANT;So;0;ON;;;;;N;;;;; 1F419;OCTOPUS;So;0;ON;;;;;N;;;;; 1F41A;SPIRAL SHELL;So;0;ON;;;;;N;;;;; 1F41B;BUG;So;0;ON;;;;;N;;;;; 1F41C;ANT;So;0;ON;;;;;N;;;;; 1F41D;HONEYBEE;So;0;ON;;;;;N;;;;; 1F41E;LADY BEETLE;So;0;ON;;;;;N;;;;; 1F41F;FISH;So;0;ON;;;;;N;;;;; 1F420;TROPICAL FISH;So;0;ON;;;;;N;;;;; 1F421;BLOWFISH;So;0;ON;;;;;N;;;;; 1F422;TURTLE;So;0;ON;;;;;N;;;;; 1F423;HATCHING CHICK;So;0;ON;;;;;N;;;;; 1F424;BABY CHICK;So;0;ON;;;;;N;;;;; 1F425;FRONT-FACING BABY CHICK;So;0;ON;;;;;N;;;;; 1F426;BIRD;So;0;ON;;;;;N;;;;; 1F427;PENGUIN;So;0;ON;;;;;N;;;;; 1F428;KOALA;So;0;ON;;;;;N;;;;; 1F429;POODLE;So;0;ON;;;;;N;;;;; 1F42A;DROMEDARY CAMEL;So;0;ON;;;;;N;;;;; 1F42B;BACTRIAN CAMEL;So;0;ON;;;;;N;;;;; 1F42C;DOLPHIN;So;0;ON;;;;;N;;;;; 1F42D;MOUSE FACE;So;0;ON;;;;;N;;;;; 1F42E;COW FACE;So;0;ON;;;;;N;;;;; 1F42F;TIGER FACE;So;0;ON;;;;;N;;;;; 1F430;RABBIT FACE;So;0;ON;;;;;N;;;;; 1F431;CAT FACE;So;0;ON;;;;;N;;;;; 1F432;DRAGON FACE;So;0;ON;;;;;N;;;;; 1F433;SPOUTING WHALE;So;0;ON;;;;;N;;;;; 1F434;HORSE FACE;So;0;ON;;;;;N;;;;; 1F435;MONKEY FACE;So;0;ON;;;;;N;;;;; 1F436;DOG FACE;So;0;ON;;;;;N;;;;; 1F437;PIG FACE;So;0;ON;;;;;N;;;;; 1F438;FROG FACE;So;0;ON;;;;;N;;;;; 1F439;HAMSTER FACE;So;0;ON;;;;;N;;;;; 1F43A;WOLF FACE;So;0;ON;;;;;N;;;;; 1F43B;BEAR FACE;So;0;ON;;;;;N;;;;; 1F43C;PANDA FACE;So;0;ON;;;;;N;;;;; 1F43D;PIG NOSE;So;0;ON;;;;;N;;;;; 1F43E;PAW PRINTS;So;0;ON;;;;;N;;;;; 1F43F;CHIPMUNK;So;0;ON;;;;;N;;;;; 1F440;EYES;So;0;ON;;;;;N;;;;; 1F441;EYE;So;0;ON;;;;;N;;;;; 1F442;EAR;So;0;ON;;;;;N;;;;; 1F443;NOSE;So;0;ON;;;;;N;;;;; 1F444;MOUTH;So;0;ON;;;;;N;;;;; 1F445;TONGUE;So;0;ON;;;;;N;;;;; 1F446;WHITE UP POINTING BACKHAND INDEX;So;0;ON;;;;;N;;;;; 1F447;WHITE DOWN POINTING BACKHAND INDEX;So;0;ON;;;;;N;;;;; 1F448;WHITE LEFT POINTING BACKHAND INDEX;So;0;ON;;;;;N;;;;; 1F449;WHITE RIGHT POINTING BACKHAND INDEX;So;0;ON;;;;;N;;;;; 1F44A;FISTED HAND SIGN;So;0;ON;;;;;N;;;;; 1F44B;WAVING HAND SIGN;So;0;ON;;;;;N;;;;; 1F44C;OK HAND SIGN;So;0;ON;;;;;N;;;;; 1F44D;THUMBS UP SIGN;So;0;ON;;;;;N;;;;; 1F44E;THUMBS DOWN SIGN;So;0;ON;;;;;N;;;;; 1F44F;CLAPPING HANDS SIGN;So;0;ON;;;;;N;;;;; 1F450;OPEN HANDS SIGN;So;0;ON;;;;;N;;;;; 1F451;CROWN;So;0;ON;;;;;N;;;;; 1F452;WOMANS HAT;So;0;ON;;;;;N;;;;; 1F453;EYEGLASSES;So;0;ON;;;;;N;;;;; 1F454;NECKTIE;So;0;ON;;;;;N;;;;; 1F455;T-SHIRT;So;0;ON;;;;;N;;;;; 1F456;JEANS;So;0;ON;;;;;N;;;;; 1F457;DRESS;So;0;ON;;;;;N;;;;; 1F458;KIMONO;So;0;ON;;;;;N;;;;; 1F459;BIKINI;So;0;ON;;;;;N;;;;; 1F45A;WOMANS CLOTHES;So;0;ON;;;;;N;;;;; 1F45B;PURSE;So;0;ON;;;;;N;;;;; 1F45C;HANDBAG;So;0;ON;;;;;N;;;;; 1F45D;POUCH;So;0;ON;;;;;N;;;;; 1F45E;MANS SHOE;So;0;ON;;;;;N;;;;; 1F45F;ATHLETIC SHOE;So;0;ON;;;;;N;;;;; 1F460;HIGH-HEELED SHOE;So;0;ON;;;;;N;;;;; 1F461;WOMANS SANDAL;So;0;ON;;;;;N;;;;; 1F462;WOMANS BOOTS;So;0;ON;;;;;N;;;;; 1F463;FOOTPRINTS;So;0;ON;;;;;N;;;;; 1F464;BUST IN SILHOUETTE;So;0;ON;;;;;N;;;;; 1F465;BUSTS IN SILHOUETTE;So;0;ON;;;;;N;;;;; 1F466;BOY;So;0;ON;;;;;N;;;;; 1F467;GIRL;So;0;ON;;;;;N;;;;; 1F468;MAN;So;0;ON;;;;;N;;;;; 1F469;WOMAN;So;0;ON;;;;;N;;;;; 1F46A;FAMILY;So;0;ON;;;;;N;;;;; 1F46B;MAN AND WOMAN HOLDING HANDS;So;0;ON;;;;;N;;;;; 1F46C;TWO MEN HOLDING HANDS;So;0;ON;;;;;N;;;;; 1F46D;TWO WOMEN HOLDING HANDS;So;0;ON;;;;;N;;;;; 1F46E;POLICE OFFICER;So;0;ON;;;;;N;;;;; 1F46F;WOMAN WITH BUNNY EARS;So;0;ON;;;;;N;;;;; 1F470;BRIDE WITH VEIL;So;0;ON;;;;;N;;;;; 1F471;PERSON WITH BLOND HAIR;So;0;ON;;;;;N;;;;; 1F472;MAN WITH GUA PI MAO;So;0;ON;;;;;N;;;;; 1F473;MAN WITH TURBAN;So;0;ON;;;;;N;;;;; 1F474;OLDER MAN;So;0;ON;;;;;N;;;;; 1F475;OLDER WOMAN;So;0;ON;;;;;N;;;;; 1F476;BABY;So;0;ON;;;;;N;;;;; 1F477;CONSTRUCTION WORKER;So;0;ON;;;;;N;;;;; 1F478;PRINCESS;So;0;ON;;;;;N;;;;; 1F479;JAPANESE OGRE;So;0;ON;;;;;N;;;;; 1F47A;JAPANESE GOBLIN;So;0;ON;;;;;N;;;;; 1F47B;GHOST;So;0;ON;;;;;N;;;;; 1F47C;BABY ANGEL;So;0;ON;;;;;N;;;;; 1F47D;EXTRATERRESTRIAL ALIEN;So;0;ON;;;;;N;;;;; 1F47E;ALIEN MONSTER;So;0;ON;;;;;N;;;;; 1F47F;IMP;So;0;ON;;;;;N;;;;; 1F480;SKULL;So;0;ON;;;;;N;;;;; 1F481;INFORMATION DESK PERSON;So;0;ON;;;;;N;;;;; 1F482;GUARDSMAN;So;0;ON;;;;;N;;;;; 1F483;DANCER;So;0;ON;;;;;N;;;;; 1F484;LIPSTICK;So;0;ON;;;;;N;;;;; 1F485;NAIL POLISH;So;0;ON;;;;;N;;;;; 1F486;FACE MASSAGE;So;0;ON;;;;;N;;;;; 1F487;HAIRCUT;So;0;ON;;;;;N;;;;; 1F488;BARBER POLE;So;0;ON;;;;;N;;;;; 1F489;SYRINGE;So;0;ON;;;;;N;;;;; 1F48A;PILL;So;0;ON;;;;;N;;;;; 1F48B;KISS MARK;So;0;ON;;;;;N;;;;; 1F48C;LOVE LETTER;So;0;ON;;;;;N;;;;; 1F48D;RING;So;0;ON;;;;;N;;;;; 1F48E;GEM STONE;So;0;ON;;;;;N;;;;; 1F48F;KISS;So;0;ON;;;;;N;;;;; 1F490;BOUQUET;So;0;ON;;;;;N;;;;; 1F491;COUPLE WITH HEART;So;0;ON;;;;;N;;;;; 1F492;WEDDING;So;0;ON;;;;;N;;;;; 1F493;BEATING HEART;So;0;ON;;;;;N;;;;; 1F494;BROKEN HEART;So;0;ON;;;;;N;;;;; 1F495;TWO HEARTS;So;0;ON;;;;;N;;;;; 1F496;SPARKLING HEART;So;0;ON;;;;;N;;;;; 1F497;GROWING HEART;So;0;ON;;;;;N;;;;; 1F498;HEART WITH ARROW;So;0;ON;;;;;N;;;;; 1F499;BLUE HEART;So;0;ON;;;;;N;;;;; 1F49A;GREEN HEART;So;0;ON;;;;;N;;;;; 1F49B;YELLOW HEART;So;0;ON;;;;;N;;;;; 1F49C;PURPLE HEART;So;0;ON;;;;;N;;;;; 1F49D;HEART WITH RIBBON;So;0;ON;;;;;N;;;;; 1F49E;REVOLVING HEARTS;So;0;ON;;;;;N;;;;; 1F49F;HEART DECORATION;So;0;ON;;;;;N;;;;; 1F4A0;DIAMOND SHAPE WITH A DOT INSIDE;So;0;ON;;;;;N;;;;; 1F4A1;ELECTRIC LIGHT BULB;So;0;ON;;;;;N;;;;; 1F4A2;ANGER SYMBOL;So;0;ON;;;;;N;;;;; 1F4A3;BOMB;So;0;ON;;;;;N;;;;; 1F4A4;SLEEPING SYMBOL;So;0;ON;;;;;N;;;;; 1F4A5;COLLISION SYMBOL;So;0;ON;;;;;N;;;;; 1F4A6;SPLASHING SWEAT SYMBOL;So;0;ON;;;;;N;;;;; 1F4A7;DROPLET;So;0;ON;;;;;N;;;;; 1F4A8;DASH SYMBOL;So;0;ON;;;;;N;;;;; 1F4A9;PILE OF POO;So;0;ON;;;;;N;;;;; 1F4AA;FLEXED BICEPS;So;0;ON;;;;;N;;;;; 1F4AB;DIZZY SYMBOL;So;0;ON;;;;;N;;;;; 1F4AC;SPEECH BALLOON;So;0;ON;;;;;N;;;;; 1F4AD;THOUGHT BALLOON;So;0;ON;;;;;N;;;;; 1F4AE;WHITE FLOWER;So;0;ON;;;;;N;;;;; 1F4AF;HUNDRED POINTS SYMBOL;So;0;ON;;;;;N;;;;; 1F4B0;MONEY BAG;So;0;ON;;;;;N;;;;; 1F4B1;CURRENCY EXCHANGE;So;0;ON;;;;;N;;;;; 1F4B2;HEAVY DOLLAR SIGN;So;0;ON;;;;;N;;;;; 1F4B3;CREDIT CARD;So;0;ON;;;;;N;;;;; 1F4B4;BANKNOTE WITH YEN SIGN;So;0;ON;;;;;N;;;;; 1F4B5;BANKNOTE WITH DOLLAR SIGN;So;0;ON;;;;;N;;;;; 1F4B6;BANKNOTE WITH EURO SIGN;So;0;ON;;;;;N;;;;; 1F4B7;BANKNOTE WITH POUND SIGN;So;0;ON;;;;;N;;;;; 1F4B8;MONEY WITH WINGS;So;0;ON;;;;;N;;;;; 1F4B9;CHART WITH UPWARDS TREND AND YEN SIGN;So;0;ON;;;;;N;;;;; 1F4BA;SEAT;So;0;ON;;;;;N;;;;; 1F4BB;PERSONAL COMPUTER;So;0;ON;;;;;N;;;;; 1F4BC;BRIEFCASE;So;0;ON;;;;;N;;;;; 1F4BD;MINIDISC;So;0;ON;;;;;N;;;;; 1F4BE;FLOPPY DISK;So;0;ON;;;;;N;;;;; 1F4BF;OPTICAL DISC;So;0;ON;;;;;N;;;;; 1F4C0;DVD;So;0;ON;;;;;N;;;;; 1F4C1;FILE FOLDER;So;0;ON;;;;;N;;;;; 1F4C2;OPEN FILE FOLDER;So;0;ON;;;;;N;;;;; 1F4C3;PAGE WITH CURL;So;0;ON;;;;;N;;;;; 1F4C4;PAGE FACING UP;So;0;ON;;;;;N;;;;; 1F4C5;CALENDAR;So;0;ON;;;;;N;;;;; 1F4C6;TEAR-OFF CALENDAR;So;0;ON;;;;;N;;;;; 1F4C7;CARD INDEX;So;0;ON;;;;;N;;;;; 1F4C8;CHART WITH UPWARDS TREND;So;0;ON;;;;;N;;;;; 1F4C9;CHART WITH DOWNWARDS TREND;So;0;ON;;;;;N;;;;; 1F4CA;BAR CHART;So;0;ON;;;;;N;;;;; 1F4CB;CLIPBOARD;So;0;ON;;;;;N;;;;; 1F4CC;PUSHPIN;So;0;ON;;;;;N;;;;; 1F4CD;ROUND PUSHPIN;So;0;ON;;;;;N;;;;; 1F4CE;PAPERCLIP;So;0;ON;;;;;N;;;;; 1F4CF;STRAIGHT RULER;So;0;ON;;;;;N;;;;; 1F4D0;TRIANGULAR RULER;So;0;ON;;;;;N;;;;; 1F4D1;BOOKMARK TABS;So;0;ON;;;;;N;;;;; 1F4D2;LEDGER;So;0;ON;;;;;N;;;;; 1F4D3;NOTEBOOK;So;0;ON;;;;;N;;;;; 1F4D4;NOTEBOOK WITH DECORATIVE COVER;So;0;ON;;;;;N;;;;; 1F4D5;CLOSED BOOK;So;0;ON;;;;;N;;;;; 1F4D6;OPEN BOOK;So;0;ON;;;;;N;;;;; 1F4D7;GREEN BOOK;So;0;ON;;;;;N;;;;; 1F4D8;BLUE BOOK;So;0;ON;;;;;N;;;;; 1F4D9;ORANGE BOOK;So;0;ON;;;;;N;;;;; 1F4DA;BOOKS;So;0;ON;;;;;N;;;;; 1F4DB;NAME BADGE;So;0;ON;;;;;N;;;;; 1F4DC;SCROLL;So;0;ON;;;;;N;;;;; 1F4DD;MEMO;So;0;ON;;;;;N;;;;; 1F4DE;TELEPHONE RECEIVER;So;0;ON;;;;;N;;;;; 1F4DF;PAGER;So;0;ON;;;;;N;;;;; 1F4E0;FAX MACHINE;So;0;ON;;;;;N;;;;; 1F4E1;SATELLITE ANTENNA;So;0;ON;;;;;N;;;;; 1F4E2;PUBLIC ADDRESS LOUDSPEAKER;So;0;ON;;;;;N;;;;; 1F4E3;CHEERING MEGAPHONE;So;0;ON;;;;;N;;;;; 1F4E4;OUTBOX TRAY;So;0;ON;;;;;N;;;;; 1F4E5;INBOX TRAY;So;0;ON;;;;;N;;;;; 1F4E6;PACKAGE;So;0;ON;;;;;N;;;;; 1F4E7;E-MAIL SYMBOL;So;0;ON;;;;;N;;;;; 1F4E8;INCOMING ENVELOPE;So;0;ON;;;;;N;;;;; 1F4E9;ENVELOPE WITH DOWNWARDS ARROW ABOVE;So;0;ON;;;;;N;;;;; 1F4EA;CLOSED MAILBOX WITH LOWERED FLAG;So;0;ON;;;;;N;;;;; 1F4EB;CLOSED MAILBOX WITH RAISED FLAG;So;0;ON;;;;;N;;;;; 1F4EC;OPEN MAILBOX WITH RAISED FLAG;So;0;ON;;;;;N;;;;; 1F4ED;OPEN MAILBOX WITH LOWERED FLAG;So;0;ON;;;;;N;;;;; 1F4EE;POSTBOX;So;0;ON;;;;;N;;;;; 1F4EF;POSTAL HORN;So;0;ON;;;;;N;;;;; 1F4F0;NEWSPAPER;So;0;ON;;;;;N;;;;; 1F4F1;MOBILE PHONE;So;0;ON;;;;;N;;;;; 1F4F2;MOBILE PHONE WITH RIGHTWARDS ARROW AT LEFT;So;0;ON;;;;;N;;;;; 1F4F3;VIBRATION MODE;So;0;ON;;;;;N;;;;; 1F4F4;MOBILE PHONE OFF;So;0;ON;;;;;N;;;;; 1F4F5;NO MOBILE PHONES;So;0;ON;;;;;N;;;;; 1F4F6;ANTENNA WITH BARS;So;0;ON;;;;;N;;;;; 1F4F7;CAMERA;So;0;ON;;;;;N;;;;; 1F4F8;CAMERA WITH FLASH;So;0;ON;;;;;N;;;;; 1F4F9;VIDEO CAMERA;So;0;ON;;;;;N;;;;; 1F4FA;TELEVISION;So;0;ON;;;;;N;;;;; 1F4FB;RADIO;So;0;ON;;;;;N;;;;; 1F4FC;VIDEOCASSETTE;So;0;ON;;;;;N;;;;; 1F4FD;FILM PROJECTOR;So;0;ON;;;;;N;;;;; 1F4FE;PORTABLE STEREO;So;0;ON;;;;;N;;;;; 1F4FF;PRAYER BEADS;So;0;ON;;;;;N;;;;; 1F500;TWISTED RIGHTWARDS ARROWS;So;0;ON;;;;;N;;;;; 1F501;CLOCKWISE RIGHTWARDS AND LEFTWARDS OPEN CIRCLE ARROWS;So;0;ON;;;;;N;;;;; 1F502;CLOCKWISE RIGHTWARDS AND LEFTWARDS OPEN CIRCLE ARROWS WITH CIRCLED ONE OVERLAY;So;0;ON;;;;;N;;;;; 1F503;CLOCKWISE DOWNWARDS AND UPWARDS OPEN CIRCLE ARROWS;So;0;ON;;;;;N;;;;; 1F504;ANTICLOCKWISE DOWNWARDS AND UPWARDS OPEN CIRCLE ARROWS;So;0;ON;;;;;N;;;;; 1F505;LOW BRIGHTNESS SYMBOL;So;0;ON;;;;;N;;;;; 1F506;HIGH BRIGHTNESS SYMBOL;So;0;ON;;;;;N;;;;; 1F507;SPEAKER WITH CANCELLATION STROKE;So;0;ON;;;;;N;;;;; 1F508;SPEAKER;So;0;ON;;;;;N;;;;; 1F509;SPEAKER WITH ONE SOUND WAVE;So;0;ON;;;;;N;;;;; 1F50A;SPEAKER WITH THREE SOUND WAVES;So;0;ON;;;;;N;;;;; 1F50B;BATTERY;So;0;ON;;;;;N;;;;; 1F50C;ELECTRIC PLUG;So;0;ON;;;;;N;;;;; 1F50D;LEFT-POINTING MAGNIFYING GLASS;So;0;ON;;;;;N;;;;; 1F50E;RIGHT-POINTING MAGNIFYING GLASS;So;0;ON;;;;;N;;;;; 1F50F;LOCK WITH INK PEN;So;0;ON;;;;;N;;;;; 1F510;CLOSED LOCK WITH KEY;So;0;ON;;;;;N;;;;; 1F511;KEY;So;0;ON;;;;;N;;;;; 1F512;LOCK;So;0;ON;;;;;N;;;;; 1F513;OPEN LOCK;So;0;ON;;;;;N;;;;; 1F514;BELL;So;0;ON;;;;;N;;;;; 1F515;BELL WITH CANCELLATION STROKE;So;0;ON;;;;;N;;;;; 1F516;BOOKMARK;So;0;ON;;;;;N;;;;; 1F517;LINK SYMBOL;So;0;ON;;;;;N;;;;; 1F518;RADIO BUTTON;So;0;ON;;;;;N;;;;; 1F519;BACK WITH LEFTWARDS ARROW ABOVE;So;0;ON;;;;;N;;;;; 1F51A;END WITH LEFTWARDS ARROW ABOVE;So;0;ON;;;;;N;;;;; 1F51B;ON WITH EXCLAMATION MARK WITH LEFT RIGHT ARROW ABOVE;So;0;ON;;;;;N;;;;; 1F51C;SOON WITH RIGHTWARDS ARROW ABOVE;So;0;ON;;;;;N;;;;; 1F51D;TOP WITH UPWARDS ARROW ABOVE;So;0;ON;;;;;N;;;;; 1F51E;NO ONE UNDER EIGHTEEN SYMBOL;So;0;ON;;;;;N;;;;; 1F51F;KEYCAP TEN;So;0;ON;;;;;N;;;;; 1F520;INPUT SYMBOL FOR LATIN CAPITAL LETTERS;So;0;ON;;;;;N;;;;; 1F521;INPUT SYMBOL FOR LATIN SMALL LETTERS;So;0;ON;;;;;N;;;;; 1F522;INPUT SYMBOL FOR NUMBERS;So;0;ON;;;;;N;;;;; 1F523;INPUT SYMBOL FOR SYMBOLS;So;0;ON;;;;;N;;;;; 1F524;INPUT SYMBOL FOR LATIN LETTERS;So;0;ON;;;;;N;;;;; 1F525;FIRE;So;0;ON;;;;;N;;;;; 1F526;ELECTRIC TORCH;So;0;ON;;;;;N;;;;; 1F527;WRENCH;So;0;ON;;;;;N;;;;; 1F528;HAMMER;So;0;ON;;;;;N;;;;; 1F529;NUT AND BOLT;So;0;ON;;;;;N;;;;; 1F52A;HOCHO;So;0;ON;;;;;N;;;;; 1F52B;PISTOL;So;0;ON;;;;;N;;;;; 1F52C;MICROSCOPE;So;0;ON;;;;;N;;;;; 1F52D;TELESCOPE;So;0;ON;;;;;N;;;;; 1F52E;CRYSTAL BALL;So;0;ON;;;;;N;;;;; 1F52F;SIX POINTED STAR WITH MIDDLE DOT;So;0;ON;;;;;N;;;;; 1F530;JAPANESE SYMBOL FOR BEGINNER;So;0;ON;;;;;N;;;;; 1F531;TRIDENT EMBLEM;So;0;ON;;;;;N;;;;; 1F532;BLACK SQUARE BUTTON;So;0;ON;;;;;N;;;;; 1F533;WHITE SQUARE BUTTON;So;0;ON;;;;;N;;;;; 1F534;LARGE RED CIRCLE;So;0;ON;;;;;N;;;;; 1F535;LARGE BLUE CIRCLE;So;0;ON;;;;;N;;;;; 1F536;LARGE ORANGE DIAMOND;So;0;ON;;;;;N;;;;; 1F537;LARGE BLUE DIAMOND;So;0;ON;;;;;N;;;;; 1F538;SMALL ORANGE DIAMOND;So;0;ON;;;;;N;;;;; 1F539;SMALL BLUE DIAMOND;So;0;ON;;;;;N;;;;; 1F53A;UP-POINTING RED TRIANGLE;So;0;ON;;;;;N;;;;; 1F53B;DOWN-POINTING RED TRIANGLE;So;0;ON;;;;;N;;;;; 1F53C;UP-POINTING SMALL RED TRIANGLE;So;0;ON;;;;;N;;;;; 1F53D;DOWN-POINTING SMALL RED TRIANGLE;So;0;ON;;;;;N;;;;; 1F53E;LOWER RIGHT SHADOWED WHITE CIRCLE;So;0;ON;;;;;N;;;;; 1F53F;UPPER RIGHT SHADOWED WHITE CIRCLE;So;0;ON;;;;;N;;;;; 1F540;CIRCLED CROSS POMMEE;So;0;ON;;;;;N;;;;; 1F541;CROSS POMMEE WITH HALF-CIRCLE BELOW;So;0;ON;;;;;N;;;;; 1F542;CROSS POMMEE;So;0;ON;;;;;N;;;;; 1F543;NOTCHED LEFT SEMICIRCLE WITH THREE DOTS;So;0;ON;;;;;N;;;;; 1F544;NOTCHED RIGHT SEMICIRCLE WITH THREE DOTS;So;0;ON;;;;;N;;;;; 1F545;SYMBOL FOR MARKS CHAPTER;So;0;ON;;;;;N;;;;; 1F546;WHITE LATIN CROSS;So;0;ON;;;;;N;;;;; 1F547;HEAVY LATIN CROSS;So;0;ON;;;;;N;;;;; 1F548;CELTIC CROSS;So;0;ON;;;;;N;;;;; 1F549;OM SYMBOL;So;0;ON;;;;;N;;;;; 1F54A;DOVE OF PEACE;So;0;ON;;;;;N;;;;; 1F54B;KAABA;So;0;ON;;;;;N;;;;; 1F54C;MOSQUE;So;0;ON;;;;;N;;;;; 1F54D;SYNAGOGUE;So;0;ON;;;;;N;;;;; 1F54E;MENORAH WITH NINE BRANCHES;So;0;ON;;;;;N;;;;; 1F54F;BOWL OF HYGIEIA;So;0;ON;;;;;N;;;;; 1F550;CLOCK FACE ONE OCLOCK;So;0;ON;;;;;N;;;;; 1F551;CLOCK FACE TWO OCLOCK;So;0;ON;;;;;N;;;;; 1F552;CLOCK FACE THREE OCLOCK;So;0;ON;;;;;N;;;;; 1F553;CLOCK FACE FOUR OCLOCK;So;0;ON;;;;;N;;;;; 1F554;CLOCK FACE FIVE OCLOCK;So;0;ON;;;;;N;;;;; 1F555;CLOCK FACE SIX OCLOCK;So;0;ON;;;;;N;;;;; 1F556;CLOCK FACE SEVEN OCLOCK;So;0;ON;;;;;N;;;;; 1F557;CLOCK FACE EIGHT OCLOCK;So;0;ON;;;;;N;;;;; 1F558;CLOCK FACE NINE OCLOCK;So;0;ON;;;;;N;;;;; 1F559;CLOCK FACE TEN OCLOCK;So;0;ON;;;;;N;;;;; 1F55A;CLOCK FACE ELEVEN OCLOCK;So;0;ON;;;;;N;;;;; 1F55B;CLOCK FACE TWELVE OCLOCK;So;0;ON;;;;;N;;;;; 1F55C;CLOCK FACE ONE-THIRTY;So;0;ON;;;;;N;;;;; 1F55D;CLOCK FACE TWO-THIRTY;So;0;ON;;;;;N;;;;; 1F55E;CLOCK FACE THREE-THIRTY;So;0;ON;;;;;N;;;;; 1F55F;CLOCK FACE FOUR-THIRTY;So;0;ON;;;;;N;;;;; 1F560;CLOCK FACE FIVE-THIRTY;So;0;ON;;;;;N;;;;; 1F561;CLOCK FACE SIX-THIRTY;So;0;ON;;;;;N;;;;; 1F562;CLOCK FACE SEVEN-THIRTY;So;0;ON;;;;;N;;;;; 1F563;CLOCK FACE EIGHT-THIRTY;So;0;ON;;;;;N;;;;; 1F564;CLOCK FACE NINE-THIRTY;So;0;ON;;;;;N;;;;; 1F565;CLOCK FACE TEN-THIRTY;So;0;ON;;;;;N;;;;; 1F566;CLOCK FACE ELEVEN-THIRTY;So;0;ON;;;;;N;;;;; 1F567;CLOCK FACE TWELVE-THIRTY;So;0;ON;;;;;N;;;;; 1F568;RIGHT SPEAKER;So;0;ON;;;;;N;;;;; 1F569;RIGHT SPEAKER WITH ONE SOUND WAVE;So;0;ON;;;;;N;;;;; 1F56A;RIGHT SPEAKER WITH THREE SOUND WAVES;So;0;ON;;;;;N;;;;; 1F56B;BULLHORN;So;0;ON;;;;;N;;;;; 1F56C;BULLHORN WITH SOUND WAVES;So;0;ON;;;;;N;;;;; 1F56D;RINGING BELL;So;0;ON;;;;;N;;;;; 1F56E;BOOK;So;0;ON;;;;;N;;;;; 1F56F;CANDLE;So;0;ON;;;;;N;;;;; 1F570;MANTELPIECE CLOCK;So;0;ON;;;;;N;;;;; 1F571;BLACK SKULL AND CROSSBONES;So;0;ON;;;;;N;;;;; 1F572;NO PIRACY;So;0;ON;;;;;N;;;;; 1F573;HOLE;So;0;ON;;;;;N;;;;; 1F574;MAN IN BUSINESS SUIT LEVITATING;So;0;ON;;;;;N;;;;; 1F575;SLEUTH OR SPY;So;0;ON;;;;;N;;;;; 1F576;DARK SUNGLASSES;So;0;ON;;;;;N;;;;; 1F577;SPIDER;So;0;ON;;;;;N;;;;; 1F578;SPIDER WEB;So;0;ON;;;;;N;;;;; 1F579;JOYSTICK;So;0;ON;;;;;N;;;;; 1F57A;MAN DANCING;So;0;ON;;;;;N;;;;; 1F57B;LEFT HAND TELEPHONE RECEIVER;So;0;ON;;;;;N;;;;; 1F57C;TELEPHONE RECEIVER WITH PAGE;So;0;ON;;;;;N;;;;; 1F57D;RIGHT HAND TELEPHONE RECEIVER;So;0;ON;;;;;N;;;;; 1F57E;WHITE TOUCHTONE TELEPHONE;So;0;ON;;;;;N;;;;; 1F57F;BLACK TOUCHTONE TELEPHONE;So;0;ON;;;;;N;;;;; 1F580;TELEPHONE ON TOP OF MODEM;So;0;ON;;;;;N;;;;; 1F581;CLAMSHELL MOBILE PHONE;So;0;ON;;;;;N;;;;; 1F582;BACK OF ENVELOPE;So;0;ON;;;;;N;;;;; 1F583;STAMPED ENVELOPE;So;0;ON;;;;;N;;;;; 1F584;ENVELOPE WITH LIGHTNING;So;0;ON;;;;;N;;;;; 1F585;FLYING ENVELOPE;So;0;ON;;;;;N;;;;; 1F586;PEN OVER STAMPED ENVELOPE;So;0;ON;;;;;N;;;;; 1F587;LINKED PAPERCLIPS;So;0;ON;;;;;N;;;;; 1F588;BLACK PUSHPIN;So;0;ON;;;;;N;;;;; 1F589;LOWER LEFT PENCIL;So;0;ON;;;;;N;;;;; 1F58A;LOWER LEFT BALLPOINT PEN;So;0;ON;;;;;N;;;;; 1F58B;LOWER LEFT FOUNTAIN PEN;So;0;ON;;;;;N;;;;; 1F58C;LOWER LEFT PAINTBRUSH;So;0;ON;;;;;N;;;;; 1F58D;LOWER LEFT CRAYON;So;0;ON;;;;;N;;;;; 1F58E;LEFT WRITING HAND;So;0;ON;;;;;N;;;;; 1F58F;TURNED OK HAND SIGN;So;0;ON;;;;;N;;;;; 1F590;RAISED HAND WITH FINGERS SPLAYED;So;0;ON;;;;;N;;;;; 1F591;REVERSED RAISED HAND WITH FINGERS SPLAYED;So;0;ON;;;;;N;;;;; 1F592;REVERSED THUMBS UP SIGN;So;0;ON;;;;;N;;;;; 1F593;REVERSED THUMBS DOWN SIGN;So;0;ON;;;;;N;;;;; 1F594;REVERSED VICTORY HAND;So;0;ON;;;;;N;;;;; 1F595;REVERSED HAND WITH MIDDLE FINGER EXTENDED;So;0;ON;;;;;N;;;;; 1F596;RAISED HAND WITH PART BETWEEN MIDDLE AND RING FINGERS;So;0;ON;;;;;N;;;;; 1F597;WHITE DOWN POINTING LEFT HAND INDEX;So;0;ON;;;;;N;;;;; 1F598;SIDEWAYS WHITE LEFT POINTING INDEX;So;0;ON;;;;;N;;;;; 1F599;SIDEWAYS WHITE RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;; 1F59A;SIDEWAYS BLACK LEFT POINTING INDEX;So;0;ON;;;;;N;;;;; 1F59B;SIDEWAYS BLACK RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;; 1F59C;BLACK LEFT POINTING BACKHAND INDEX;So;0;ON;;;;;N;;;;; 1F59D;BLACK RIGHT POINTING BACKHAND INDEX;So;0;ON;;;;;N;;;;; 1F59E;SIDEWAYS WHITE UP POINTING INDEX;So;0;ON;;;;;N;;;;; 1F59F;SIDEWAYS WHITE DOWN POINTING INDEX;So;0;ON;;;;;N;;;;; 1F5A0;SIDEWAYS BLACK UP POINTING INDEX;So;0;ON;;;;;N;;;;; 1F5A1;SIDEWAYS BLACK DOWN POINTING INDEX;So;0;ON;;;;;N;;;;; 1F5A2;BLACK UP POINTING BACKHAND INDEX;So;0;ON;;;;;N;;;;; 1F5A3;BLACK DOWN POINTING BACKHAND INDEX;So;0;ON;;;;;N;;;;; 1F5A4;BLACK HEART;So;0;ON;;;;;N;;;;; 1F5A5;DESKTOP COMPUTER;So;0;ON;;;;;N;;;;; 1F5A6;KEYBOARD AND MOUSE;So;0;ON;;;;;N;;;;; 1F5A7;THREE NETWORKED COMPUTERS;So;0;ON;;;;;N;;;;; 1F5A8;PRINTER;So;0;ON;;;;;N;;;;; 1F5A9;POCKET CALCULATOR;So;0;ON;;;;;N;;;;; 1F5AA;BLACK HARD SHELL FLOPPY DISK;So;0;ON;;;;;N;;;;; 1F5AB;WHITE HARD SHELL FLOPPY DISK;So;0;ON;;;;;N;;;;; 1F5AC;SOFT SHELL FLOPPY DISK;So;0;ON;;;;;N;;;;; 1F5AD;TAPE CARTRIDGE;So;0;ON;;;;;N;;;;; 1F5AE;WIRED KEYBOARD;So;0;ON;;;;;N;;;;; 1F5AF;ONE BUTTON MOUSE;So;0;ON;;;;;N;;;;; 1F5B0;TWO BUTTON MOUSE;So;0;ON;;;;;N;;;;; 1F5B1;THREE BUTTON MOUSE;So;0;ON;;;;;N;;;;; 1F5B2;TRACKBALL;So;0;ON;;;;;N;;;;; 1F5B3;OLD PERSONAL COMPUTER;So;0;ON;;;;;N;;;;; 1F5B4;HARD DISK;So;0;ON;;;;;N;;;;; 1F5B5;SCREEN;So;0;ON;;;;;N;;;;; 1F5B6;PRINTER ICON;So;0;ON;;;;;N;;;;; 1F5B7;FAX ICON;So;0;ON;;;;;N;;;;; 1F5B8;OPTICAL DISC ICON;So;0;ON;;;;;N;;;;; 1F5B9;DOCUMENT WITH TEXT;So;0;ON;;;;;N;;;;; 1F5BA;DOCUMENT WITH TEXT AND PICTURE;So;0;ON;;;;;N;;;;; 1F5BB;DOCUMENT WITH PICTURE;So;0;ON;;;;;N;;;;; 1F5BC;FRAME WITH PICTURE;So;0;ON;;;;;N;;;;; 1F5BD;FRAME WITH TILES;So;0;ON;;;;;N;;;;; 1F5BE;FRAME WITH AN X;So;0;ON;;;;;N;;;;; 1F5BF;BLACK FOLDER;So;0;ON;;;;;N;;;;; 1F5C0;FOLDER;So;0;ON;;;;;N;;;;; 1F5C1;OPEN FOLDER;So;0;ON;;;;;N;;;;; 1F5C2;CARD INDEX DIVIDERS;So;0;ON;;;;;N;;;;; 1F5C3;CARD FILE BOX;So;0;ON;;;;;N;;;;; 1F5C4;FILE CABINET;So;0;ON;;;;;N;;;;; 1F5C5;EMPTY NOTE;So;0;ON;;;;;N;;;;; 1F5C6;EMPTY NOTE PAGE;So;0;ON;;;;;N;;;;; 1F5C7;EMPTY NOTE PAD;So;0;ON;;;;;N;;;;; 1F5C8;NOTE;So;0;ON;;;;;N;;;;; 1F5C9;NOTE PAGE;So;0;ON;;;;;N;;;;; 1F5CA;NOTE PAD;So;0;ON;;;;;N;;;;; 1F5CB;EMPTY DOCUMENT;So;0;ON;;;;;N;;;;; 1F5CC;EMPTY PAGE;So;0;ON;;;;;N;;;;; 1F5CD;EMPTY PAGES;So;0;ON;;;;;N;;;;; 1F5CE;DOCUMENT;So;0;ON;;;;;N;;;;; 1F5CF;PAGE;So;0;ON;;;;;N;;;;; 1F5D0;PAGES;So;0;ON;;;;;N;;;;; 1F5D1;WASTEBASKET;So;0;ON;;;;;N;;;;; 1F5D2;SPIRAL NOTE PAD;So;0;ON;;;;;N;;;;; 1F5D3;SPIRAL CALENDAR PAD;So;0;ON;;;;;N;;;;; 1F5D4;DESKTOP WINDOW;So;0;ON;;;;;N;;;;; 1F5D5;MINIMIZE;So;0;ON;;;;;N;;;;; 1F5D6;MAXIMIZE;So;0;ON;;;;;N;;;;; 1F5D7;OVERLAP;So;0;ON;;;;;N;;;;; 1F5D8;CLOCKWISE RIGHT AND LEFT SEMICIRCLE ARROWS;So;0;ON;;;;;N;;;;; 1F5D9;CANCELLATION X;So;0;ON;;;;;N;;;;; 1F5DA;INCREASE FONT SIZE SYMBOL;So;0;ON;;;;;N;;;;; 1F5DB;DECREASE FONT SIZE SYMBOL;So;0;ON;;;;;N;;;;; 1F5DC;COMPRESSION;So;0;ON;;;;;N;;;;; 1F5DD;OLD KEY;So;0;ON;;;;;N;;;;; 1F5DE;ROLLED-UP NEWSPAPER;So;0;ON;;;;;N;;;;; 1F5DF;PAGE WITH CIRCLED TEXT;So;0;ON;;;;;N;;;;; 1F5E0;STOCK CHART;So;0;ON;;;;;N;;;;; 1F5E1;DAGGER KNIFE;So;0;ON;;;;;N;;;;; 1F5E2;LIPS;So;0;ON;;;;;N;;;;; 1F5E3;SPEAKING HEAD IN SILHOUETTE;So;0;ON;;;;;N;;;;; 1F5E4;THREE RAYS ABOVE;So;0;ON;;;;;N;;;;; 1F5E5;THREE RAYS BELOW;So;0;ON;;;;;N;;;;; 1F5E6;THREE RAYS LEFT;So;0;ON;;;;;N;;;;; 1F5E7;THREE RAYS RIGHT;So;0;ON;;;;;N;;;;; 1F5E8;LEFT SPEECH BUBBLE;So;0;ON;;;;;N;;;;; 1F5E9;RIGHT SPEECH BUBBLE;So;0;ON;;;;;N;;;;; 1F5EA;TWO SPEECH BUBBLES;So;0;ON;;;;;N;;;;; 1F5EB;THREE SPEECH BUBBLES;So;0;ON;;;;;N;;;;; 1F5EC;LEFT THOUGHT BUBBLE;So;0;ON;;;;;N;;;;; 1F5ED;RIGHT THOUGHT BUBBLE;So;0;ON;;;;;N;;;;; 1F5EE;LEFT ANGER BUBBLE;So;0;ON;;;;;N;;;;; 1F5EF;RIGHT ANGER BUBBLE;So;0;ON;;;;;N;;;;; 1F5F0;MOOD BUBBLE;So;0;ON;;;;;N;;;;; 1F5F1;LIGHTNING MOOD BUBBLE;So;0;ON;;;;;N;;;;; 1F5F2;LIGHTNING MOOD;So;0;ON;;;;;N;;;;; 1F5F3;BALLOT BOX WITH BALLOT;So;0;ON;;;;;N;;;;; 1F5F4;BALLOT SCRIPT X;So;0;ON;;;;;N;;;;; 1F5F5;BALLOT BOX WITH SCRIPT X;So;0;ON;;;;;N;;;;; 1F5F6;BALLOT BOLD SCRIPT X;So;0;ON;;;;;N;;;;; 1F5F7;BALLOT BOX WITH BOLD SCRIPT X;So;0;ON;;;;;N;;;;; 1F5F8;LIGHT CHECK MARK;So;0;ON;;;;;N;;;;; 1F5F9;BALLOT BOX WITH BOLD CHECK;So;0;ON;;;;;N;;;;; 1F5FA;WORLD MAP;So;0;ON;;;;;N;;;;; 1F5FB;MOUNT FUJI;So;0;ON;;;;;N;;;;; 1F5FC;TOKYO TOWER;So;0;ON;;;;;N;;;;; 1F5FD;STATUE OF LIBERTY;So;0;ON;;;;;N;;;;; 1F5FE;SILHOUETTE OF JAPAN;So;0;ON;;;;;N;;;;; 1F5FF;MOYAI;So;0;ON;;;;;N;;;;; 1F600;GRINNING FACE;So;0;ON;;;;;N;;;;; 1F601;GRINNING FACE WITH SMILING EYES;So;0;ON;;;;;N;;;;; 1F602;FACE WITH TEARS OF JOY;So;0;ON;;;;;N;;;;; 1F603;SMILING FACE WITH OPEN MOUTH;So;0;ON;;;;;N;;;;; 1F604;SMILING FACE WITH OPEN MOUTH AND SMILING EYES;So;0;ON;;;;;N;;;;; 1F605;SMILING FACE WITH OPEN MOUTH AND COLD SWEAT;So;0;ON;;;;;N;;;;; 1F606;SMILING FACE WITH OPEN MOUTH AND TIGHTLY-CLOSED EYES;So;0;ON;;;;;N;;;;; 1F607;SMILING FACE WITH HALO;So;0;ON;;;;;N;;;;; 1F608;SMILING FACE WITH HORNS;So;0;ON;;;;;N;;;;; 1F609;WINKING FACE;So;0;ON;;;;;N;;;;; 1F60A;SMILING FACE WITH SMILING EYES;So;0;ON;;;;;N;;;;; 1F60B;FACE SAVOURING DELICIOUS FOOD;So;0;ON;;;;;N;;;;; 1F60C;RELIEVED FACE;So;0;ON;;;;;N;;;;; 1F60D;SMILING FACE WITH HEART-SHAPED EYES;So;0;ON;;;;;N;;;;; 1F60E;SMILING FACE WITH SUNGLASSES;So;0;ON;;;;;N;;;;; 1F60F;SMIRKING FACE;So;0;ON;;;;;N;;;;; 1F610;NEUTRAL FACE;So;0;ON;;;;;N;;;;; 1F611;EXPRESSIONLESS FACE;So;0;ON;;;;;N;;;;; 1F612;UNAMUSED FACE;So;0;ON;;;;;N;;;;; 1F613;FACE WITH COLD SWEAT;So;0;ON;;;;;N;;;;; 1F614;PENSIVE FACE;So;0;ON;;;;;N;;;;; 1F615;CONFUSED FACE;So;0;ON;;;;;N;;;;; 1F616;CONFOUNDED FACE;So;0;ON;;;;;N;;;;; 1F617;KISSING FACE;So;0;ON;;;;;N;;;;; 1F618;FACE THROWING A KISS;So;0;ON;;;;;N;;;;; 1F619;KISSING FACE WITH SMILING EYES;So;0;ON;;;;;N;;;;; 1F61A;KISSING FACE WITH CLOSED EYES;So;0;ON;;;;;N;;;;; 1F61B;FACE WITH STUCK-OUT TONGUE;So;0;ON;;;;;N;;;;; 1F61C;FACE WITH STUCK-OUT TONGUE AND WINKING EYE;So;0;ON;;;;;N;;;;; 1F61D;FACE WITH STUCK-OUT TONGUE AND TIGHTLY-CLOSED EYES;So;0;ON;;;;;N;;;;; 1F61E;DISAPPOINTED FACE;So;0;ON;;;;;N;;;;; 1F61F;WORRIED FACE;So;0;ON;;;;;N;;;;; 1F620;ANGRY FACE;So;0;ON;;;;;N;;;;; 1F621;POUTING FACE;So;0;ON;;;;;N;;;;; 1F622;CRYING FACE;So;0;ON;;;;;N;;;;; 1F623;PERSEVERING FACE;So;0;ON;;;;;N;;;;; 1F624;FACE WITH LOOK OF TRIUMPH;So;0;ON;;;;;N;;;;; 1F625;DISAPPOINTED BUT RELIEVED FACE;So;0;ON;;;;;N;;;;; 1F626;FROWNING FACE WITH OPEN MOUTH;So;0;ON;;;;;N;;;;; 1F627;ANGUISHED FACE;So;0;ON;;;;;N;;;;; 1F628;FEARFUL FACE;So;0;ON;;;;;N;;;;; 1F629;WEARY FACE;So;0;ON;;;;;N;;;;; 1F62A;SLEEPY FACE;So;0;ON;;;;;N;;;;; 1F62B;TIRED FACE;So;0;ON;;;;;N;;;;; 1F62C;GRIMACING FACE;So;0;ON;;;;;N;;;;; 1F62D;LOUDLY CRYING FACE;So;0;ON;;;;;N;;;;; 1F62E;FACE WITH OPEN MOUTH;So;0;ON;;;;;N;;;;; 1F62F;HUSHED FACE;So;0;ON;;;;;N;;;;; 1F630;FACE WITH OPEN MOUTH AND COLD SWEAT;So;0;ON;;;;;N;;;;; 1F631;FACE SCREAMING IN FEAR;So;0;ON;;;;;N;;;;; 1F632;ASTONISHED FACE;So;0;ON;;;;;N;;;;; 1F633;FLUSHED FACE;So;0;ON;;;;;N;;;;; 1F634;SLEEPING FACE;So;0;ON;;;;;N;;;;; 1F635;DIZZY FACE;So;0;ON;;;;;N;;;;; 1F636;FACE WITHOUT MOUTH;So;0;ON;;;;;N;;;;; 1F637;FACE WITH MEDICAL MASK;So;0;ON;;;;;N;;;;; 1F638;GRINNING CAT FACE WITH SMILING EYES;So;0;ON;;;;;N;;;;; 1F639;CAT FACE WITH TEARS OF JOY;So;0;ON;;;;;N;;;;; 1F63A;SMILING CAT FACE WITH OPEN MOUTH;So;0;ON;;;;;N;;;;; 1F63B;SMILING CAT FACE WITH HEART-SHAPED EYES;So;0;ON;;;;;N;;;;; 1F63C;CAT FACE WITH WRY SMILE;So;0;ON;;;;;N;;;;; 1F63D;KISSING CAT FACE WITH CLOSED EYES;So;0;ON;;;;;N;;;;; 1F63E;POUTING CAT FACE;So;0;ON;;;;;N;;;;; 1F63F;CRYING CAT FACE;So;0;ON;;;;;N;;;;; 1F640;WEARY CAT FACE;So;0;ON;;;;;N;;;;; 1F641;SLIGHTLY FROWNING FACE;So;0;ON;;;;;N;;;;; 1F642;SLIGHTLY SMILING FACE;So;0;ON;;;;;N;;;;; 1F643;UPSIDE-DOWN FACE;So;0;ON;;;;;N;;;;; 1F644;FACE WITH ROLLING EYES;So;0;ON;;;;;N;;;;; 1F645;FACE WITH NO GOOD GESTURE;So;0;ON;;;;;N;;;;; 1F646;FACE WITH OK GESTURE;So;0;ON;;;;;N;;;;; 1F647;PERSON BOWING DEEPLY;So;0;ON;;;;;N;;;;; 1F648;SEE-NO-EVIL MONKEY;So;0;ON;;;;;N;;;;; 1F649;HEAR-NO-EVIL MONKEY;So;0;ON;;;;;N;;;;; 1F64A;SPEAK-NO-EVIL MONKEY;So;0;ON;;;;;N;;;;; 1F64B;HAPPY PERSON RAISING ONE HAND;So;0;ON;;;;;N;;;;; 1F64C;PERSON RAISING BOTH HANDS IN CELEBRATION;So;0;ON;;;;;N;;;;; 1F64D;PERSON FROWNING;So;0;ON;;;;;N;;;;; 1F64E;PERSON WITH POUTING FACE;So;0;ON;;;;;N;;;;; 1F64F;PERSON WITH FOLDED HANDS;So;0;ON;;;;;N;;;;; 1F650;NORTH WEST POINTING LEAF;So;0;ON;;;;;N;;;;; 1F651;SOUTH WEST POINTING LEAF;So;0;ON;;;;;N;;;;; 1F652;NORTH EAST POINTING LEAF;So;0;ON;;;;;N;;;;; 1F653;SOUTH EAST POINTING LEAF;So;0;ON;;;;;N;;;;; 1F654;TURNED NORTH WEST POINTING LEAF;So;0;ON;;;;;N;;;;; 1F655;TURNED SOUTH WEST POINTING LEAF;So;0;ON;;;;;N;;;;; 1F656;TURNED NORTH EAST POINTING LEAF;So;0;ON;;;;;N;;;;; 1F657;TURNED SOUTH EAST POINTING LEAF;So;0;ON;;;;;N;;;;; 1F658;NORTH WEST POINTING VINE LEAF;So;0;ON;;;;;N;;;;; 1F659;SOUTH WEST POINTING VINE LEAF;So;0;ON;;;;;N;;;;; 1F65A;NORTH EAST POINTING VINE LEAF;So;0;ON;;;;;N;;;;; 1F65B;SOUTH EAST POINTING VINE LEAF;So;0;ON;;;;;N;;;;; 1F65C;HEAVY NORTH WEST POINTING VINE LEAF;So;0;ON;;;;;N;;;;; 1F65D;HEAVY SOUTH WEST POINTING VINE LEAF;So;0;ON;;;;;N;;;;; 1F65E;HEAVY NORTH EAST POINTING VINE LEAF;So;0;ON;;;;;N;;;;; 1F65F;HEAVY SOUTH EAST POINTING VINE LEAF;So;0;ON;;;;;N;;;;; 1F660;NORTH WEST POINTING BUD;So;0;ON;;;;;N;;;;; 1F661;SOUTH WEST POINTING BUD;So;0;ON;;;;;N;;;;; 1F662;NORTH EAST POINTING BUD;So;0;ON;;;;;N;;;;; 1F663;SOUTH EAST POINTING BUD;So;0;ON;;;;;N;;;;; 1F664;HEAVY NORTH WEST POINTING BUD;So;0;ON;;;;;N;;;;; 1F665;HEAVY SOUTH WEST POINTING BUD;So;0;ON;;;;;N;;;;; 1F666;HEAVY NORTH EAST POINTING BUD;So;0;ON;;;;;N;;;;; 1F667;HEAVY SOUTH EAST POINTING BUD;So;0;ON;;;;;N;;;;; 1F668;HOLLOW QUILT SQUARE ORNAMENT;So;0;ON;;;;;N;;;;; 1F669;HOLLOW QUILT SQUARE ORNAMENT IN BLACK SQUARE;So;0;ON;;;;;N;;;;; 1F66A;SOLID QUILT SQUARE ORNAMENT;So;0;ON;;;;;N;;;;; 1F66B;SOLID QUILT SQUARE ORNAMENT IN BLACK SQUARE;So;0;ON;;;;;N;;;;; 1F66C;LEFTWARDS ROCKET;So;0;ON;;;;;N;;;;; 1F66D;UPWARDS ROCKET;So;0;ON;;;;;N;;;;; 1F66E;RIGHTWARDS ROCKET;So;0;ON;;;;;N;;;;; 1F66F;DOWNWARDS ROCKET;So;0;ON;;;;;N;;;;; 1F670;SCRIPT LIGATURE ET ORNAMENT;So;0;ON;;;;;N;;;;; 1F671;HEAVY SCRIPT LIGATURE ET ORNAMENT;So;0;ON;;;;;N;;;;; 1F672;LIGATURE OPEN ET ORNAMENT;So;0;ON;;;;;N;;;;; 1F673;HEAVY LIGATURE OPEN ET ORNAMENT;So;0;ON;;;;;N;;;;; 1F674;HEAVY AMPERSAND ORNAMENT;So;0;ON;;;;;N;;;;; 1F675;SWASH AMPERSAND ORNAMENT;So;0;ON;;;;;N;;;;; 1F676;SANS-SERIF HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; 1F677;SANS-SERIF HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; 1F678;SANS-SERIF HEAVY LOW DOUBLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; 1F679;HEAVY INTERROBANG ORNAMENT;So;0;ON;;;;;N;;;;; 1F67A;SANS-SERIF INTERROBANG ORNAMENT;So;0;ON;;;;;N;;;;; 1F67B;HEAVY SANS-SERIF INTERROBANG ORNAMENT;So;0;ON;;;;;N;;;;; 1F67C;VERY HEAVY SOLIDUS;So;0;ON;;;;;N;;;;; 1F67D;VERY HEAVY REVERSE SOLIDUS;So;0;ON;;;;;N;;;;; 1F67E;CHECKER BOARD;So;0;ON;;;;;N;;;;; 1F67F;REVERSE CHECKER BOARD;So;0;ON;;;;;N;;;;; 1F680;ROCKET;So;0;ON;;;;;N;;;;; 1F681;HELICOPTER;So;0;ON;;;;;N;;;;; 1F682;STEAM LOCOMOTIVE;So;0;ON;;;;;N;;;;; 1F683;RAILWAY CAR;So;0;ON;;;;;N;;;;; 1F684;HIGH-SPEED TRAIN;So;0;ON;;;;;N;;;;; 1F685;HIGH-SPEED TRAIN WITH BULLET NOSE;So;0;ON;;;;;N;;;;; 1F686;TRAIN;So;0;ON;;;;;N;;;;; 1F687;METRO;So;0;ON;;;;;N;;;;; 1F688;LIGHT RAIL;So;0;ON;;;;;N;;;;; 1F689;STATION;So;0;ON;;;;;N;;;;; 1F68A;TRAM;So;0;ON;;;;;N;;;;; 1F68B;TRAM CAR;So;0;ON;;;;;N;;;;; 1F68C;BUS;So;0;ON;;;;;N;;;;; 1F68D;ONCOMING BUS;So;0;ON;;;;;N;;;;; 1F68E;TROLLEYBUS;So;0;ON;;;;;N;;;;; 1F68F;BUS STOP;So;0;ON;;;;;N;;;;; 1F690;MINIBUS;So;0;ON;;;;;N;;;;; 1F691;AMBULANCE;So;0;ON;;;;;N;;;;; 1F692;FIRE ENGINE;So;0;ON;;;;;N;;;;; 1F693;POLICE CAR;So;0;ON;;;;;N;;;;; 1F694;ONCOMING POLICE CAR;So;0;ON;;;;;N;;;;; 1F695;TAXI;So;0;ON;;;;;N;;;;; 1F696;ONCOMING TAXI;So;0;ON;;;;;N;;;;; 1F697;AUTOMOBILE;So;0;ON;;;;;N;;;;; 1F698;ONCOMING AUTOMOBILE;So;0;ON;;;;;N;;;;; 1F699;RECREATIONAL VEHICLE;So;0;ON;;;;;N;;;;; 1F69A;DELIVERY TRUCK;So;0;ON;;;;;N;;;;; 1F69B;ARTICULATED LORRY;So;0;ON;;;;;N;;;;; 1F69C;TRACTOR;So;0;ON;;;;;N;;;;; 1F69D;MONORAIL;So;0;ON;;;;;N;;;;; 1F69E;MOUNTAIN RAILWAY;So;0;ON;;;;;N;;;;; 1F69F;SUSPENSION RAILWAY;So;0;ON;;;;;N;;;;; 1F6A0;MOUNTAIN CABLEWAY;So;0;ON;;;;;N;;;;; 1F6A1;AERIAL TRAMWAY;So;0;ON;;;;;N;;;;; 1F6A2;SHIP;So;0;ON;;;;;N;;;;; 1F6A3;ROWBOAT;So;0;ON;;;;;N;;;;; 1F6A4;SPEEDBOAT;So;0;ON;;;;;N;;;;; 1F6A5;HORIZONTAL TRAFFIC LIGHT;So;0;ON;;;;;N;;;;; 1F6A6;VERTICAL TRAFFIC LIGHT;So;0;ON;;;;;N;;;;; 1F6A7;CONSTRUCTION SIGN;So;0;ON;;;;;N;;;;; 1F6A8;POLICE CARS REVOLVING LIGHT;So;0;ON;;;;;N;;;;; 1F6A9;TRIANGULAR FLAG ON POST;So;0;ON;;;;;N;;;;; 1F6AA;DOOR;So;0;ON;;;;;N;;;;; 1F6AB;NO ENTRY SIGN;So;0;ON;;;;;N;;;;; 1F6AC;SMOKING SYMBOL;So;0;ON;;;;;N;;;;; 1F6AD;NO SMOKING SYMBOL;So;0;ON;;;;;N;;;;; 1F6AE;PUT LITTER IN ITS PLACE SYMBOL;So;0;ON;;;;;N;;;;; 1F6AF;DO NOT LITTER SYMBOL;So;0;ON;;;;;N;;;;; 1F6B0;POTABLE WATER SYMBOL;So;0;ON;;;;;N;;;;; 1F6B1;NON-POTABLE WATER SYMBOL;So;0;ON;;;;;N;;;;; 1F6B2;BICYCLE;So;0;ON;;;;;N;;;;; 1F6B3;NO BICYCLES;So;0;ON;;;;;N;;;;; 1F6B4;BICYCLIST;So;0;ON;;;;;N;;;;; 1F6B5;MOUNTAIN BICYCLIST;So;0;ON;;;;;N;;;;; 1F6B6;PEDESTRIAN;So;0;ON;;;;;N;;;;; 1F6B7;NO PEDESTRIANS;So;0;ON;;;;;N;;;;; 1F6B8;CHILDREN CROSSING;So;0;ON;;;;;N;;;;; 1F6B9;MENS SYMBOL;So;0;ON;;;;;N;;;;; 1F6BA;WOMENS SYMBOL;So;0;ON;;;;;N;;;;; 1F6BB;RESTROOM;So;0;ON;;;;;N;;;;; 1F6BC;BABY SYMBOL;So;0;ON;;;;;N;;;;; 1F6BD;TOILET;So;0;ON;;;;;N;;;;; 1F6BE;WATER CLOSET;So;0;ON;;;;;N;;;;; 1F6BF;SHOWER;So;0;ON;;;;;N;;;;; 1F6C0;BATH;So;0;ON;;;;;N;;;;; 1F6C1;BATHTUB;So;0;ON;;;;;N;;;;; 1F6C2;PASSPORT CONTROL;So;0;ON;;;;;N;;;;; 1F6C3;CUSTOMS;So;0;ON;;;;;N;;;;; 1F6C4;BAGGAGE CLAIM;So;0;ON;;;;;N;;;;; 1F6C5;LEFT LUGGAGE;So;0;ON;;;;;N;;;;; 1F6C6;TRIANGLE WITH ROUNDED CORNERS;So;0;ON;;;;;N;;;;; 1F6C7;PROHIBITED SIGN;So;0;ON;;;;;N;;;;; 1F6C8;CIRCLED INFORMATION SOURCE;So;0;ON;;;;;N;;;;; 1F6C9;BOYS SYMBOL;So;0;ON;;;;;N;;;;; 1F6CA;GIRLS SYMBOL;So;0;ON;;;;;N;;;;; 1F6CB;COUCH AND LAMP;So;0;ON;;;;;N;;;;; 1F6CC;SLEEPING ACCOMMODATION;So;0;ON;;;;;N;;;;; 1F6CD;SHOPPING BAGS;So;0;ON;;;;;N;;;;; 1F6CE;BELLHOP BELL;So;0;ON;;;;;N;;;;; 1F6CF;BED;So;0;ON;;;;;N;;;;; 1F6D0;PLACE OF WORSHIP;So;0;ON;;;;;N;;;;; 1F6D1;OCTAGONAL SIGN;So;0;ON;;;;;N;;;;; 1F6D2;SHOPPING TROLLEY;So;0;ON;;;;;N;;;;; 1F6D3;STUPA;So;0;ON;;;;;N;;;;; 1F6D4;PAGODA;So;0;ON;;;;;N;;;;; 1F6D5;HINDU TEMPLE;So;0;ON;;;;;N;;;;; 1F6D6;HUT;So;0;ON;;;;;N;;;;; 1F6D7;ELEVATOR;So;0;ON;;;;;N;;;;; 1F6DD;PLAYGROUND SLIDE;So;0;ON;;;;;N;;;;; 1F6DE;WHEEL;So;0;ON;;;;;N;;;;; 1F6DF;RING BUOY;So;0;ON;;;;;N;;;;; 1F6E0;HAMMER AND WRENCH;So;0;ON;;;;;N;;;;; 1F6E1;SHIELD;So;0;ON;;;;;N;;;;; 1F6E2;OIL DRUM;So;0;ON;;;;;N;;;;; 1F6E3;MOTORWAY;So;0;ON;;;;;N;;;;; 1F6E4;RAILWAY TRACK;So;0;ON;;;;;N;;;;; 1F6E5;MOTOR BOAT;So;0;ON;;;;;N;;;;; 1F6E6;UP-POINTING MILITARY AIRPLANE;So;0;ON;;;;;N;;;;; 1F6E7;UP-POINTING AIRPLANE;So;0;ON;;;;;N;;;;; 1F6E8;UP-POINTING SMALL AIRPLANE;So;0;ON;;;;;N;;;;; 1F6E9;SMALL AIRPLANE;So;0;ON;;;;;N;;;;; 1F6EA;NORTHEAST-POINTING AIRPLANE;So;0;ON;;;;;N;;;;; 1F6EB;AIRPLANE DEPARTURE;So;0;ON;;;;;N;;;;; 1F6EC;AIRPLANE ARRIVING;So;0;ON;;;;;N;;;;; 1F6F0;SATELLITE;So;0;ON;;;;;N;;;;; 1F6F1;ONCOMING FIRE ENGINE;So;0;ON;;;;;N;;;;; 1F6F2;DIESEL LOCOMOTIVE;So;0;ON;;;;;N;;;;; 1F6F3;PASSENGER SHIP;So;0;ON;;;;;N;;;;; 1F6F4;SCOOTER;So;0;ON;;;;;N;;;;; 1F6F5;MOTOR SCOOTER;So;0;ON;;;;;N;;;;; 1F6F6;CANOE;So;0;ON;;;;;N;;;;; 1F6F7;SLED;So;0;ON;;;;;N;;;;; 1F6F8;FLYING SAUCER;So;0;ON;;;;;N;;;;; 1F6F9;SKATEBOARD;So;0;ON;;;;;N;;;;; 1F6FA;AUTO RICKSHAW;So;0;ON;;;;;N;;;;; 1F6FB;PICKUP TRUCK;So;0;ON;;;;;N;;;;; 1F6FC;ROLLER SKATE;So;0;ON;;;;;N;;;;; 1F700;ALCHEMICAL SYMBOL FOR QUINTESSENCE;So;0;ON;;;;;N;;;;; 1F701;ALCHEMICAL SYMBOL FOR AIR;So;0;ON;;;;;N;;;;; 1F702;ALCHEMICAL SYMBOL FOR FIRE;So;0;ON;;;;;N;;;;; 1F703;ALCHEMICAL SYMBOL FOR EARTH;So;0;ON;;;;;N;;;;; 1F704;ALCHEMICAL SYMBOL FOR WATER;So;0;ON;;;;;N;;;;; 1F705;ALCHEMICAL SYMBOL FOR AQUAFORTIS;So;0;ON;;;;;N;;;;; 1F706;ALCHEMICAL SYMBOL FOR AQUA REGIA;So;0;ON;;;;;N;;;;; 1F707;ALCHEMICAL SYMBOL FOR AQUA REGIA-2;So;0;ON;;;;;N;;;;; 1F708;ALCHEMICAL SYMBOL FOR AQUA VITAE;So;0;ON;;;;;N;;;;; 1F709;ALCHEMICAL SYMBOL FOR AQUA VITAE-2;So;0;ON;;;;;N;;;;; 1F70A;ALCHEMICAL SYMBOL FOR VINEGAR;So;0;ON;;;;;N;;;;; 1F70B;ALCHEMICAL SYMBOL FOR VINEGAR-2;So;0;ON;;;;;N;;;;; 1F70C;ALCHEMICAL SYMBOL FOR VINEGAR-3;So;0;ON;;;;;N;;;;; 1F70D;ALCHEMICAL SYMBOL FOR SULFUR;So;0;ON;;;;;N;;;;; 1F70E;ALCHEMICAL SYMBOL FOR PHILOSOPHERS SULFUR;So;0;ON;;;;;N;;;;; 1F70F;ALCHEMICAL SYMBOL FOR BLACK SULFUR;So;0;ON;;;;;N;;;;; 1F710;ALCHEMICAL SYMBOL FOR MERCURY SUBLIMATE;So;0;ON;;;;;N;;;;; 1F711;ALCHEMICAL SYMBOL FOR MERCURY SUBLIMATE-2;So;0;ON;;;;;N;;;;; 1F712;ALCHEMICAL SYMBOL FOR MERCURY SUBLIMATE-3;So;0;ON;;;;;N;;;;; 1F713;ALCHEMICAL SYMBOL FOR CINNABAR;So;0;ON;;;;;N;;;;; 1F714;ALCHEMICAL SYMBOL FOR SALT;So;0;ON;;;;;N;;;;; 1F715;ALCHEMICAL SYMBOL FOR NITRE;So;0;ON;;;;;N;;;;; 1F716;ALCHEMICAL SYMBOL FOR VITRIOL;So;0;ON;;;;;N;;;;; 1F717;ALCHEMICAL SYMBOL FOR VITRIOL-2;So;0;ON;;;;;N;;;;; 1F718;ALCHEMICAL SYMBOL FOR ROCK SALT;So;0;ON;;;;;N;;;;; 1F719;ALCHEMICAL SYMBOL FOR ROCK SALT-2;So;0;ON;;;;;N;;;;; 1F71A;ALCHEMICAL SYMBOL FOR GOLD;So;0;ON;;;;;N;;;;; 1F71B;ALCHEMICAL SYMBOL FOR SILVER;So;0;ON;;;;;N;;;;; 1F71C;ALCHEMICAL SYMBOL FOR IRON ORE;So;0;ON;;;;;N;;;;; 1F71D;ALCHEMICAL SYMBOL FOR IRON ORE-2;So;0;ON;;;;;N;;;;; 1F71E;ALCHEMICAL SYMBOL FOR CROCUS OF IRON;So;0;ON;;;;;N;;;;; 1F71F;ALCHEMICAL SYMBOL FOR REGULUS OF IRON;So;0;ON;;;;;N;;;;; 1F720;ALCHEMICAL SYMBOL FOR COPPER ORE;So;0;ON;;;;;N;;;;; 1F721;ALCHEMICAL SYMBOL FOR IRON-COPPER ORE;So;0;ON;;;;;N;;;;; 1F722;ALCHEMICAL SYMBOL FOR SUBLIMATE OF COPPER;So;0;ON;;;;;N;;;;; 1F723;ALCHEMICAL SYMBOL FOR CROCUS OF COPPER;So;0;ON;;;;;N;;;;; 1F724;ALCHEMICAL SYMBOL FOR CROCUS OF COPPER-2;So;0;ON;;;;;N;;;;; 1F725;ALCHEMICAL SYMBOL FOR COPPER ANTIMONIATE;So;0;ON;;;;;N;;;;; 1F726;ALCHEMICAL SYMBOL FOR SALT OF COPPER ANTIMONIATE;So;0;ON;;;;;N;;;;; 1F727;ALCHEMICAL SYMBOL FOR SUBLIMATE OF SALT OF COPPER;So;0;ON;;;;;N;;;;; 1F728;ALCHEMICAL SYMBOL FOR VERDIGRIS;So;0;ON;;;;;N;;;;; 1F729;ALCHEMICAL SYMBOL FOR TIN ORE;So;0;ON;;;;;N;;;;; 1F72A;ALCHEMICAL SYMBOL FOR LEAD ORE;So;0;ON;;;;;N;;;;; 1F72B;ALCHEMICAL SYMBOL FOR ANTIMONY ORE;So;0;ON;;;;;N;;;;; 1F72C;ALCHEMICAL SYMBOL FOR SUBLIMATE OF ANTIMONY;So;0;ON;;;;;N;;;;; 1F72D;ALCHEMICAL SYMBOL FOR SALT OF ANTIMONY;So;0;ON;;;;;N;;;;; 1F72E;ALCHEMICAL SYMBOL FOR SUBLIMATE OF SALT OF ANTIMONY;So;0;ON;;;;;N;;;;; 1F72F;ALCHEMICAL SYMBOL FOR VINEGAR OF ANTIMONY;So;0;ON;;;;;N;;;;; 1F730;ALCHEMICAL SYMBOL FOR REGULUS OF ANTIMONY;So;0;ON;;;;;N;;;;; 1F731;ALCHEMICAL SYMBOL FOR REGULUS OF ANTIMONY-2;So;0;ON;;;;;N;;;;; 1F732;ALCHEMICAL SYMBOL FOR REGULUS;So;0;ON;;;;;N;;;;; 1F733;ALCHEMICAL SYMBOL FOR REGULUS-2;So;0;ON;;;;;N;;;;; 1F734;ALCHEMICAL SYMBOL FOR REGULUS-3;So;0;ON;;;;;N;;;;; 1F735;ALCHEMICAL SYMBOL FOR REGULUS-4;So;0;ON;;;;;N;;;;; 1F736;ALCHEMICAL SYMBOL FOR ALKALI;So;0;ON;;;;;N;;;;; 1F737;ALCHEMICAL SYMBOL FOR ALKALI-2;So;0;ON;;;;;N;;;;; 1F738;ALCHEMICAL SYMBOL FOR MARCASITE;So;0;ON;;;;;N;;;;; 1F739;ALCHEMICAL SYMBOL FOR SAL-AMMONIAC;So;0;ON;;;;;N;;;;; 1F73A;ALCHEMICAL SYMBOL FOR ARSENIC;So;0;ON;;;;;N;;;;; 1F73B;ALCHEMICAL SYMBOL FOR REALGAR;So;0;ON;;;;;N;;;;; 1F73C;ALCHEMICAL SYMBOL FOR REALGAR-2;So;0;ON;;;;;N;;;;; 1F73D;ALCHEMICAL SYMBOL FOR AURIPIGMENT;So;0;ON;;;;;N;;;;; 1F73E;ALCHEMICAL SYMBOL FOR BISMUTH ORE;So;0;ON;;;;;N;;;;; 1F73F;ALCHEMICAL SYMBOL FOR TARTAR;So;0;ON;;;;;N;;;;; 1F740;ALCHEMICAL SYMBOL FOR TARTAR-2;So;0;ON;;;;;N;;;;; 1F741;ALCHEMICAL SYMBOL FOR QUICK LIME;So;0;ON;;;;;N;;;;; 1F742;ALCHEMICAL SYMBOL FOR BORAX;So;0;ON;;;;;N;;;;; 1F743;ALCHEMICAL SYMBOL FOR BORAX-2;So;0;ON;;;;;N;;;;; 1F744;ALCHEMICAL SYMBOL FOR BORAX-3;So;0;ON;;;;;N;;;;; 1F745;ALCHEMICAL SYMBOL FOR ALUM;So;0;ON;;;;;N;;;;; 1F746;ALCHEMICAL SYMBOL FOR OIL;So;0;ON;;;;;N;;;;; 1F747;ALCHEMICAL SYMBOL FOR SPIRIT;So;0;ON;;;;;N;;;;; 1F748;ALCHEMICAL SYMBOL FOR TINCTURE;So;0;ON;;;;;N;;;;; 1F749;ALCHEMICAL SYMBOL FOR GUM;So;0;ON;;;;;N;;;;; 1F74A;ALCHEMICAL SYMBOL FOR WAX;So;0;ON;;;;;N;;;;; 1F74B;ALCHEMICAL SYMBOL FOR POWDER;So;0;ON;;;;;N;;;;; 1F74C;ALCHEMICAL SYMBOL FOR CALX;So;0;ON;;;;;N;;;;; 1F74D;ALCHEMICAL SYMBOL FOR TUTTY;So;0;ON;;;;;N;;;;; 1F74E;ALCHEMICAL SYMBOL FOR CAPUT MORTUUM;So;0;ON;;;;;N;;;;; 1F74F;ALCHEMICAL SYMBOL FOR SCEPTER OF JOVE;So;0;ON;;;;;N;;;;; 1F750;ALCHEMICAL SYMBOL FOR CADUCEUS;So;0;ON;;;;;N;;;;; 1F751;ALCHEMICAL SYMBOL FOR TRIDENT;So;0;ON;;;;;N;;;;; 1F752;ALCHEMICAL SYMBOL FOR STARRED TRIDENT;So;0;ON;;;;;N;;;;; 1F753;ALCHEMICAL SYMBOL FOR LODESTONE;So;0;ON;;;;;N;;;;; 1F754;ALCHEMICAL SYMBOL FOR SOAP;So;0;ON;;;;;N;;;;; 1F755;ALCHEMICAL SYMBOL FOR URINE;So;0;ON;;;;;N;;;;; 1F756;ALCHEMICAL SYMBOL FOR HORSE DUNG;So;0;ON;;;;;N;;;;; 1F757;ALCHEMICAL SYMBOL FOR ASHES;So;0;ON;;;;;N;;;;; 1F758;ALCHEMICAL SYMBOL FOR POT ASHES;So;0;ON;;;;;N;;;;; 1F759;ALCHEMICAL SYMBOL FOR BRICK;So;0;ON;;;;;N;;;;; 1F75A;ALCHEMICAL SYMBOL FOR POWDERED BRICK;So;0;ON;;;;;N;;;;; 1F75B;ALCHEMICAL SYMBOL FOR AMALGAM;So;0;ON;;;;;N;;;;; 1F75C;ALCHEMICAL SYMBOL FOR STRATUM SUPER STRATUM;So;0;ON;;;;;N;;;;; 1F75D;ALCHEMICAL SYMBOL FOR STRATUM SUPER STRATUM-2;So;0;ON;;;;;N;;;;; 1F75E;ALCHEMICAL SYMBOL FOR SUBLIMATION;So;0;ON;;;;;N;;;;; 1F75F;ALCHEMICAL SYMBOL FOR PRECIPITATE;So;0;ON;;;;;N;;;;; 1F760;ALCHEMICAL SYMBOL FOR DISTILL;So;0;ON;;;;;N;;;;; 1F761;ALCHEMICAL SYMBOL FOR DISSOLVE;So;0;ON;;;;;N;;;;; 1F762;ALCHEMICAL SYMBOL FOR DISSOLVE-2;So;0;ON;;;;;N;;;;; 1F763;ALCHEMICAL SYMBOL FOR PURIFY;So;0;ON;;;;;N;;;;; 1F764;ALCHEMICAL SYMBOL FOR PUTREFACTION;So;0;ON;;;;;N;;;;; 1F765;ALCHEMICAL SYMBOL FOR CRUCIBLE;So;0;ON;;;;;N;;;;; 1F766;ALCHEMICAL SYMBOL FOR CRUCIBLE-2;So;0;ON;;;;;N;;;;; 1F767;ALCHEMICAL SYMBOL FOR CRUCIBLE-3;So;0;ON;;;;;N;;;;; 1F768;ALCHEMICAL SYMBOL FOR CRUCIBLE-4;So;0;ON;;;;;N;;;;; 1F769;ALCHEMICAL SYMBOL FOR CRUCIBLE-5;So;0;ON;;;;;N;;;;; 1F76A;ALCHEMICAL SYMBOL FOR ALEMBIC;So;0;ON;;;;;N;;;;; 1F76B;ALCHEMICAL SYMBOL FOR BATH OF MARY;So;0;ON;;;;;N;;;;; 1F76C;ALCHEMICAL SYMBOL FOR BATH OF VAPOURS;So;0;ON;;;;;N;;;;; 1F76D;ALCHEMICAL SYMBOL FOR RETORT;So;0;ON;;;;;N;;;;; 1F76E;ALCHEMICAL SYMBOL FOR HOUR;So;0;ON;;;;;N;;;;; 1F76F;ALCHEMICAL SYMBOL FOR NIGHT;So;0;ON;;;;;N;;;;; 1F770;ALCHEMICAL SYMBOL FOR DAY-NIGHT;So;0;ON;;;;;N;;;;; 1F771;ALCHEMICAL SYMBOL FOR MONTH;So;0;ON;;;;;N;;;;; 1F772;ALCHEMICAL SYMBOL FOR HALF DRAM;So;0;ON;;;;;N;;;;; 1F773;ALCHEMICAL SYMBOL FOR HALF OUNCE;So;0;ON;;;;;N;;;;; 1F780;BLACK LEFT-POINTING ISOSCELES RIGHT TRIANGLE;So;0;ON;;;;;N;;;;; 1F781;BLACK UP-POINTING ISOSCELES RIGHT TRIANGLE;So;0;ON;;;;;N;;;;; 1F782;BLACK RIGHT-POINTING ISOSCELES RIGHT TRIANGLE;So;0;ON;;;;;N;;;;; 1F783;BLACK DOWN-POINTING ISOSCELES RIGHT TRIANGLE;So;0;ON;;;;;N;;;;; 1F784;BLACK SLIGHTLY SMALL CIRCLE;So;0;ON;;;;;N;;;;; 1F785;MEDIUM BOLD WHITE CIRCLE;So;0;ON;;;;;N;;;;; 1F786;BOLD WHITE CIRCLE;So;0;ON;;;;;N;;;;; 1F787;HEAVY WHITE CIRCLE;So;0;ON;;;;;N;;;;; 1F788;VERY HEAVY WHITE CIRCLE;So;0;ON;;;;;N;;;;; 1F789;EXTREMELY HEAVY WHITE CIRCLE;So;0;ON;;;;;N;;;;; 1F78A;WHITE CIRCLE CONTAINING BLACK SMALL CIRCLE;So;0;ON;;;;;N;;;;; 1F78B;ROUND TARGET;So;0;ON;;;;;N;;;;; 1F78C;BLACK TINY SQUARE;So;0;ON;;;;;N;;;;; 1F78D;BLACK SLIGHTLY SMALL SQUARE;So;0;ON;;;;;N;;;;; 1F78E;LIGHT WHITE SQUARE;So;0;ON;;;;;N;;;;; 1F78F;MEDIUM WHITE SQUARE;So;0;ON;;;;;N;;;;; 1F790;BOLD WHITE SQUARE;So;0;ON;;;;;N;;;;; 1F791;HEAVY WHITE SQUARE;So;0;ON;;;;;N;;;;; 1F792;VERY HEAVY WHITE SQUARE;So;0;ON;;;;;N;;;;; 1F793;EXTREMELY HEAVY WHITE SQUARE;So;0;ON;;;;;N;;;;; 1F794;WHITE SQUARE CONTAINING BLACK VERY SMALL SQUARE;So;0;ON;;;;;N;;;;; 1F795;WHITE SQUARE CONTAINING BLACK MEDIUM SQUARE;So;0;ON;;;;;N;;;;; 1F796;SQUARE TARGET;So;0;ON;;;;;N;;;;; 1F797;BLACK TINY DIAMOND;So;0;ON;;;;;N;;;;; 1F798;BLACK VERY SMALL DIAMOND;So;0;ON;;;;;N;;;;; 1F799;BLACK MEDIUM SMALL DIAMOND;So;0;ON;;;;;N;;;;; 1F79A;WHITE DIAMOND CONTAINING BLACK VERY SMALL DIAMOND;So;0;ON;;;;;N;;;;; 1F79B;WHITE DIAMOND CONTAINING BLACK MEDIUM DIAMOND;So;0;ON;;;;;N;;;;; 1F79C;DIAMOND TARGET;So;0;ON;;;;;N;;;;; 1F79D;BLACK TINY LOZENGE;So;0;ON;;;;;N;;;;; 1F79E;BLACK VERY SMALL LOZENGE;So;0;ON;;;;;N;;;;; 1F79F;BLACK MEDIUM SMALL LOZENGE;So;0;ON;;;;;N;;;;; 1F7A0;WHITE LOZENGE CONTAINING BLACK SMALL LOZENGE;So;0;ON;;;;;N;;;;; 1F7A1;THIN GREEK CROSS;So;0;ON;;;;;N;;;;; 1F7A2;LIGHT GREEK CROSS;So;0;ON;;;;;N;;;;; 1F7A3;MEDIUM GREEK CROSS;So;0;ON;;;;;N;;;;; 1F7A4;BOLD GREEK CROSS;So;0;ON;;;;;N;;;;; 1F7A5;VERY BOLD GREEK CROSS;So;0;ON;;;;;N;;;;; 1F7A6;VERY HEAVY GREEK CROSS;So;0;ON;;;;;N;;;;; 1F7A7;EXTREMELY HEAVY GREEK CROSS;So;0;ON;;;;;N;;;;; 1F7A8;THIN SALTIRE;So;0;ON;;;;;N;;;;; 1F7A9;LIGHT SALTIRE;So;0;ON;;;;;N;;;;; 1F7AA;MEDIUM SALTIRE;So;0;ON;;;;;N;;;;; 1F7AB;BOLD SALTIRE;So;0;ON;;;;;N;;;;; 1F7AC;HEAVY SALTIRE;So;0;ON;;;;;N;;;;; 1F7AD;VERY HEAVY SALTIRE;So;0;ON;;;;;N;;;;; 1F7AE;EXTREMELY HEAVY SALTIRE;So;0;ON;;;;;N;;;;; 1F7AF;LIGHT FIVE SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 1F7B0;MEDIUM FIVE SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 1F7B1;BOLD FIVE SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 1F7B2;HEAVY FIVE SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 1F7B3;VERY HEAVY FIVE SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 1F7B4;EXTREMELY HEAVY FIVE SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 1F7B5;LIGHT SIX SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 1F7B6;MEDIUM SIX SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 1F7B7;BOLD SIX SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 1F7B8;HEAVY SIX SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 1F7B9;VERY HEAVY SIX SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 1F7BA;EXTREMELY HEAVY SIX SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 1F7BB;LIGHT EIGHT SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 1F7BC;MEDIUM EIGHT SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 1F7BD;BOLD EIGHT SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 1F7BE;HEAVY EIGHT SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 1F7BF;VERY HEAVY EIGHT SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 1F7C0;LIGHT THREE POINTED BLACK STAR;So;0;ON;;;;;N;;;;; 1F7C1;MEDIUM THREE POINTED BLACK STAR;So;0;ON;;;;;N;;;;; 1F7C2;THREE POINTED BLACK STAR;So;0;ON;;;;;N;;;;; 1F7C3;MEDIUM THREE POINTED PINWHEEL STAR;So;0;ON;;;;;N;;;;; 1F7C4;LIGHT FOUR POINTED BLACK STAR;So;0;ON;;;;;N;;;;; 1F7C5;MEDIUM FOUR POINTED BLACK STAR;So;0;ON;;;;;N;;;;; 1F7C6;FOUR POINTED BLACK STAR;So;0;ON;;;;;N;;;;; 1F7C7;MEDIUM FOUR POINTED PINWHEEL STAR;So;0;ON;;;;;N;;;;; 1F7C8;REVERSE LIGHT FOUR POINTED PINWHEEL STAR;So;0;ON;;;;;N;;;;; 1F7C9;LIGHT FIVE POINTED BLACK STAR;So;0;ON;;;;;N;;;;; 1F7CA;HEAVY FIVE POINTED BLACK STAR;So;0;ON;;;;;N;;;;; 1F7CB;MEDIUM SIX POINTED BLACK STAR;So;0;ON;;;;;N;;;;; 1F7CC;HEAVY SIX POINTED BLACK STAR;So;0;ON;;;;;N;;;;; 1F7CD;SIX POINTED PINWHEEL STAR;So;0;ON;;;;;N;;;;; 1F7CE;MEDIUM EIGHT POINTED BLACK STAR;So;0;ON;;;;;N;;;;; 1F7CF;HEAVY EIGHT POINTED BLACK STAR;So;0;ON;;;;;N;;;;; 1F7D0;VERY HEAVY EIGHT POINTED BLACK STAR;So;0;ON;;;;;N;;;;; 1F7D1;HEAVY EIGHT POINTED PINWHEEL STAR;So;0;ON;;;;;N;;;;; 1F7D2;LIGHT TWELVE POINTED BLACK STAR;So;0;ON;;;;;N;;;;; 1F7D3;HEAVY TWELVE POINTED BLACK STAR;So;0;ON;;;;;N;;;;; 1F7D4;HEAVY TWELVE POINTED PINWHEEL STAR;So;0;ON;;;;;N;;;;; 1F7D5;CIRCLED TRIANGLE;So;0;ON;;;;;N;;;;; 1F7D6;NEGATIVE CIRCLED TRIANGLE;So;0;ON;;;;;N;;;;; 1F7D7;CIRCLED SQUARE;So;0;ON;;;;;N;;;;; 1F7D8;NEGATIVE CIRCLED SQUARE;So;0;ON;;;;;N;;;;; 1F7E0;LARGE ORANGE CIRCLE;So;0;ON;;;;;N;;;;; 1F7E1;LARGE YELLOW CIRCLE;So;0;ON;;;;;N;;;;; 1F7E2;LARGE GREEN CIRCLE;So;0;ON;;;;;N;;;;; 1F7E3;LARGE PURPLE CIRCLE;So;0;ON;;;;;N;;;;; 1F7E4;LARGE BROWN CIRCLE;So;0;ON;;;;;N;;;;; 1F7E5;LARGE RED SQUARE;So;0;ON;;;;;N;;;;; 1F7E6;LARGE BLUE SQUARE;So;0;ON;;;;;N;;;;; 1F7E7;LARGE ORANGE SQUARE;So;0;ON;;;;;N;;;;; 1F7E8;LARGE YELLOW SQUARE;So;0;ON;;;;;N;;;;; 1F7E9;LARGE GREEN SQUARE;So;0;ON;;;;;N;;;;; 1F7EA;LARGE PURPLE SQUARE;So;0;ON;;;;;N;;;;; 1F7EB;LARGE BROWN SQUARE;So;0;ON;;;;;N;;;;; 1F7F0;HEAVY EQUALS SIGN;So;0;ON;;;;;N;;;;; 1F800;LEFTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F801;UPWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F802;RIGHTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F803;DOWNWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F804;LEFTWARDS ARROW WITH MEDIUM TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F805;UPWARDS ARROW WITH MEDIUM TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F806;RIGHTWARDS ARROW WITH MEDIUM TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F807;DOWNWARDS ARROW WITH MEDIUM TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F808;LEFTWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F809;UPWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F80A;RIGHTWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F80B;DOWNWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F810;LEFTWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 1F811;UPWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 1F812;RIGHTWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 1F813;DOWNWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 1F814;LEFTWARDS ARROW WITH EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 1F815;UPWARDS ARROW WITH EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 1F816;RIGHTWARDS ARROW WITH EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 1F817;DOWNWARDS ARROW WITH EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 1F818;HEAVY LEFTWARDS ARROW WITH EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 1F819;HEAVY UPWARDS ARROW WITH EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 1F81A;HEAVY RIGHTWARDS ARROW WITH EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 1F81B;HEAVY DOWNWARDS ARROW WITH EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 1F81C;HEAVY LEFTWARDS ARROW WITH LARGE EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 1F81D;HEAVY UPWARDS ARROW WITH LARGE EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 1F81E;HEAVY RIGHTWARDS ARROW WITH LARGE EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 1F81F;HEAVY DOWNWARDS ARROW WITH LARGE EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 1F820;LEFTWARDS TRIANGLE-HEADED ARROW WITH NARROW SHAFT;So;0;ON;;;;;N;;;;; 1F821;UPWARDS TRIANGLE-HEADED ARROW WITH NARROW SHAFT;So;0;ON;;;;;N;;;;; 1F822;RIGHTWARDS TRIANGLE-HEADED ARROW WITH NARROW SHAFT;So;0;ON;;;;;N;;;;; 1F823;DOWNWARDS TRIANGLE-HEADED ARROW WITH NARROW SHAFT;So;0;ON;;;;;N;;;;; 1F824;LEFTWARDS TRIANGLE-HEADED ARROW WITH MEDIUM SHAFT;So;0;ON;;;;;N;;;;; 1F825;UPWARDS TRIANGLE-HEADED ARROW WITH MEDIUM SHAFT;So;0;ON;;;;;N;;;;; 1F826;RIGHTWARDS TRIANGLE-HEADED ARROW WITH MEDIUM SHAFT;So;0;ON;;;;;N;;;;; 1F827;DOWNWARDS TRIANGLE-HEADED ARROW WITH MEDIUM SHAFT;So;0;ON;;;;;N;;;;; 1F828;LEFTWARDS TRIANGLE-HEADED ARROW WITH BOLD SHAFT;So;0;ON;;;;;N;;;;; 1F829;UPWARDS TRIANGLE-HEADED ARROW WITH BOLD SHAFT;So;0;ON;;;;;N;;;;; 1F82A;RIGHTWARDS TRIANGLE-HEADED ARROW WITH BOLD SHAFT;So;0;ON;;;;;N;;;;; 1F82B;DOWNWARDS TRIANGLE-HEADED ARROW WITH BOLD SHAFT;So;0;ON;;;;;N;;;;; 1F82C;LEFTWARDS TRIANGLE-HEADED ARROW WITH HEAVY SHAFT;So;0;ON;;;;;N;;;;; 1F82D;UPWARDS TRIANGLE-HEADED ARROW WITH HEAVY SHAFT;So;0;ON;;;;;N;;;;; 1F82E;RIGHTWARDS TRIANGLE-HEADED ARROW WITH HEAVY SHAFT;So;0;ON;;;;;N;;;;; 1F82F;DOWNWARDS TRIANGLE-HEADED ARROW WITH HEAVY SHAFT;So;0;ON;;;;;N;;;;; 1F830;LEFTWARDS TRIANGLE-HEADED ARROW WITH VERY HEAVY SHAFT;So;0;ON;;;;;N;;;;; 1F831;UPWARDS TRIANGLE-HEADED ARROW WITH VERY HEAVY SHAFT;So;0;ON;;;;;N;;;;; 1F832;RIGHTWARDS TRIANGLE-HEADED ARROW WITH VERY HEAVY SHAFT;So;0;ON;;;;;N;;;;; 1F833;DOWNWARDS TRIANGLE-HEADED ARROW WITH VERY HEAVY SHAFT;So;0;ON;;;;;N;;;;; 1F834;LEFTWARDS FINGER-POST ARROW;So;0;ON;;;;;N;;;;; 1F835;UPWARDS FINGER-POST ARROW;So;0;ON;;;;;N;;;;; 1F836;RIGHTWARDS FINGER-POST ARROW;So;0;ON;;;;;N;;;;; 1F837;DOWNWARDS FINGER-POST ARROW;So;0;ON;;;;;N;;;;; 1F838;LEFTWARDS SQUARED ARROW;So;0;ON;;;;;N;;;;; 1F839;UPWARDS SQUARED ARROW;So;0;ON;;;;;N;;;;; 1F83A;RIGHTWARDS SQUARED ARROW;So;0;ON;;;;;N;;;;; 1F83B;DOWNWARDS SQUARED ARROW;So;0;ON;;;;;N;;;;; 1F83C;LEFTWARDS COMPRESSED ARROW;So;0;ON;;;;;N;;;;; 1F83D;UPWARDS COMPRESSED ARROW;So;0;ON;;;;;N;;;;; 1F83E;RIGHTWARDS COMPRESSED ARROW;So;0;ON;;;;;N;;;;; 1F83F;DOWNWARDS COMPRESSED ARROW;So;0;ON;;;;;N;;;;; 1F840;LEFTWARDS HEAVY COMPRESSED ARROW;So;0;ON;;;;;N;;;;; 1F841;UPWARDS HEAVY COMPRESSED ARROW;So;0;ON;;;;;N;;;;; 1F842;RIGHTWARDS HEAVY COMPRESSED ARROW;So;0;ON;;;;;N;;;;; 1F843;DOWNWARDS HEAVY COMPRESSED ARROW;So;0;ON;;;;;N;;;;; 1F844;LEFTWARDS HEAVY ARROW;So;0;ON;;;;;N;;;;; 1F845;UPWARDS HEAVY ARROW;So;0;ON;;;;;N;;;;; 1F846;RIGHTWARDS HEAVY ARROW;So;0;ON;;;;;N;;;;; 1F847;DOWNWARDS HEAVY ARROW;So;0;ON;;;;;N;;;;; 1F850;LEFTWARDS SANS-SERIF ARROW;So;0;ON;;;;;N;;;;; 1F851;UPWARDS SANS-SERIF ARROW;So;0;ON;;;;;N;;;;; 1F852;RIGHTWARDS SANS-SERIF ARROW;So;0;ON;;;;;N;;;;; 1F853;DOWNWARDS SANS-SERIF ARROW;So;0;ON;;;;;N;;;;; 1F854;NORTH WEST SANS-SERIF ARROW;So;0;ON;;;;;N;;;;; 1F855;NORTH EAST SANS-SERIF ARROW;So;0;ON;;;;;N;;;;; 1F856;SOUTH EAST SANS-SERIF ARROW;So;0;ON;;;;;N;;;;; 1F857;SOUTH WEST SANS-SERIF ARROW;So;0;ON;;;;;N;;;;; 1F858;LEFT RIGHT SANS-SERIF ARROW;So;0;ON;;;;;N;;;;; 1F859;UP DOWN SANS-SERIF ARROW;So;0;ON;;;;;N;;;;; 1F860;WIDE-HEADED LEFTWARDS LIGHT BARB ARROW;So;0;ON;;;;;N;;;;; 1F861;WIDE-HEADED UPWARDS LIGHT BARB ARROW;So;0;ON;;;;;N;;;;; 1F862;WIDE-HEADED RIGHTWARDS LIGHT BARB ARROW;So;0;ON;;;;;N;;;;; 1F863;WIDE-HEADED DOWNWARDS LIGHT BARB ARROW;So;0;ON;;;;;N;;;;; 1F864;WIDE-HEADED NORTH WEST LIGHT BARB ARROW;So;0;ON;;;;;N;;;;; 1F865;WIDE-HEADED NORTH EAST LIGHT BARB ARROW;So;0;ON;;;;;N;;;;; 1F866;WIDE-HEADED SOUTH EAST LIGHT BARB ARROW;So;0;ON;;;;;N;;;;; 1F867;WIDE-HEADED SOUTH WEST LIGHT BARB ARROW;So;0;ON;;;;;N;;;;; 1F868;WIDE-HEADED LEFTWARDS BARB ARROW;So;0;ON;;;;;N;;;;; 1F869;WIDE-HEADED UPWARDS BARB ARROW;So;0;ON;;;;;N;;;;; 1F86A;WIDE-HEADED RIGHTWARDS BARB ARROW;So;0;ON;;;;;N;;;;; 1F86B;WIDE-HEADED DOWNWARDS BARB ARROW;So;0;ON;;;;;N;;;;; 1F86C;WIDE-HEADED NORTH WEST BARB ARROW;So;0;ON;;;;;N;;;;; 1F86D;WIDE-HEADED NORTH EAST BARB ARROW;So;0;ON;;;;;N;;;;; 1F86E;WIDE-HEADED SOUTH EAST BARB ARROW;So;0;ON;;;;;N;;;;; 1F86F;WIDE-HEADED SOUTH WEST BARB ARROW;So;0;ON;;;;;N;;;;; 1F870;WIDE-HEADED LEFTWARDS MEDIUM BARB ARROW;So;0;ON;;;;;N;;;;; 1F871;WIDE-HEADED UPWARDS MEDIUM BARB ARROW;So;0;ON;;;;;N;;;;; 1F872;WIDE-HEADED RIGHTWARDS MEDIUM BARB ARROW;So;0;ON;;;;;N;;;;; 1F873;WIDE-HEADED DOWNWARDS MEDIUM BARB ARROW;So;0;ON;;;;;N;;;;; 1F874;WIDE-HEADED NORTH WEST MEDIUM BARB ARROW;So;0;ON;;;;;N;;;;; 1F875;WIDE-HEADED NORTH EAST MEDIUM BARB ARROW;So;0;ON;;;;;N;;;;; 1F876;WIDE-HEADED SOUTH EAST MEDIUM BARB ARROW;So;0;ON;;;;;N;;;;; 1F877;WIDE-HEADED SOUTH WEST MEDIUM BARB ARROW;So;0;ON;;;;;N;;;;; 1F878;WIDE-HEADED LEFTWARDS HEAVY BARB ARROW;So;0;ON;;;;;N;;;;; 1F879;WIDE-HEADED UPWARDS HEAVY BARB ARROW;So;0;ON;;;;;N;;;;; 1F87A;WIDE-HEADED RIGHTWARDS HEAVY BARB ARROW;So;0;ON;;;;;N;;;;; 1F87B;WIDE-HEADED DOWNWARDS HEAVY BARB ARROW;So;0;ON;;;;;N;;;;; 1F87C;WIDE-HEADED NORTH WEST HEAVY BARB ARROW;So;0;ON;;;;;N;;;;; 1F87D;WIDE-HEADED NORTH EAST HEAVY BARB ARROW;So;0;ON;;;;;N;;;;; 1F87E;WIDE-HEADED SOUTH EAST HEAVY BARB ARROW;So;0;ON;;;;;N;;;;; 1F87F;WIDE-HEADED SOUTH WEST HEAVY BARB ARROW;So;0;ON;;;;;N;;;;; 1F880;WIDE-HEADED LEFTWARDS VERY HEAVY BARB ARROW;So;0;ON;;;;;N;;;;; 1F881;WIDE-HEADED UPWARDS VERY HEAVY BARB ARROW;So;0;ON;;;;;N;;;;; 1F882;WIDE-HEADED RIGHTWARDS VERY HEAVY BARB ARROW;So;0;ON;;;;;N;;;;; 1F883;WIDE-HEADED DOWNWARDS VERY HEAVY BARB ARROW;So;0;ON;;;;;N;;;;; 1F884;WIDE-HEADED NORTH WEST VERY HEAVY BARB ARROW;So;0;ON;;;;;N;;;;; 1F885;WIDE-HEADED NORTH EAST VERY HEAVY BARB ARROW;So;0;ON;;;;;N;;;;; 1F886;WIDE-HEADED SOUTH EAST VERY HEAVY BARB ARROW;So;0;ON;;;;;N;;;;; 1F887;WIDE-HEADED SOUTH WEST VERY HEAVY BARB ARROW;So;0;ON;;;;;N;;;;; 1F890;LEFTWARDS TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F891;UPWARDS TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F892;RIGHTWARDS TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F893;DOWNWARDS TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F894;LEFTWARDS WHITE ARROW WITHIN TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F895;UPWARDS WHITE ARROW WITHIN TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F896;RIGHTWARDS WHITE ARROW WITHIN TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F897;DOWNWARDS WHITE ARROW WITHIN TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F898;LEFTWARDS ARROW WITH NOTCHED TAIL;So;0;ON;;;;;N;;;;; 1F899;UPWARDS ARROW WITH NOTCHED TAIL;So;0;ON;;;;;N;;;;; 1F89A;RIGHTWARDS ARROW WITH NOTCHED TAIL;So;0;ON;;;;;N;;;;; 1F89B;DOWNWARDS ARROW WITH NOTCHED TAIL;So;0;ON;;;;;N;;;;; 1F89C;HEAVY ARROW SHAFT WIDTH ONE;So;0;ON;;;;;N;;;;; 1F89D;HEAVY ARROW SHAFT WIDTH TWO THIRDS;So;0;ON;;;;;N;;;;; 1F89E;HEAVY ARROW SHAFT WIDTH ONE HALF;So;0;ON;;;;;N;;;;; 1F89F;HEAVY ARROW SHAFT WIDTH ONE THIRD;So;0;ON;;;;;N;;;;; 1F8A0;LEFTWARDS BOTTOM-SHADED WHITE ARROW;So;0;ON;;;;;N;;;;; 1F8A1;RIGHTWARDS BOTTOM SHADED WHITE ARROW;So;0;ON;;;;;N;;;;; 1F8A2;LEFTWARDS TOP SHADED WHITE ARROW;So;0;ON;;;;;N;;;;; 1F8A3;RIGHTWARDS TOP SHADED WHITE ARROW;So;0;ON;;;;;N;;;;; 1F8A4;LEFTWARDS LEFT-SHADED WHITE ARROW;So;0;ON;;;;;N;;;;; 1F8A5;RIGHTWARDS RIGHT-SHADED WHITE ARROW;So;0;ON;;;;;N;;;;; 1F8A6;LEFTWARDS RIGHT-SHADED WHITE ARROW;So;0;ON;;;;;N;;;;; 1F8A7;RIGHTWARDS LEFT-SHADED WHITE ARROW;So;0;ON;;;;;N;;;;; 1F8A8;LEFTWARDS BACK-TILTED SHADOWED WHITE ARROW;So;0;ON;;;;;N;;;;; 1F8A9;RIGHTWARDS BACK-TILTED SHADOWED WHITE ARROW;So;0;ON;;;;;N;;;;; 1F8AA;LEFTWARDS FRONT-TILTED SHADOWED WHITE ARROW;So;0;ON;;;;;N;;;;; 1F8AB;RIGHTWARDS FRONT-TILTED SHADOWED WHITE ARROW;So;0;ON;;;;;N;;;;; 1F8AC;WHITE ARROW SHAFT WIDTH ONE;So;0;ON;;;;;N;;;;; 1F8AD;WHITE ARROW SHAFT WIDTH TWO THIRDS;So;0;ON;;;;;N;;;;; 1F8B0;ARROW POINTING UPWARDS THEN NORTH WEST;So;0;ON;;;;;N;;;;; 1F8B1;ARROW POINTING RIGHTWARDS THEN CURVING SOUTH WEST;So;0;ON;;;;;N;;;;; 1F900;CIRCLED CROSS FORMEE WITH FOUR DOTS;So;0;ON;;;;;N;;;;; 1F901;CIRCLED CROSS FORMEE WITH TWO DOTS;So;0;ON;;;;;N;;;;; 1F902;CIRCLED CROSS FORMEE;So;0;ON;;;;;N;;;;; 1F903;LEFT HALF CIRCLE WITH FOUR DOTS;So;0;ON;;;;;N;;;;; 1F904;LEFT HALF CIRCLE WITH THREE DOTS;So;0;ON;;;;;N;;;;; 1F905;LEFT HALF CIRCLE WITH TWO DOTS;So;0;ON;;;;;N;;;;; 1F906;LEFT HALF CIRCLE WITH DOT;So;0;ON;;;;;N;;;;; 1F907;LEFT HALF CIRCLE;So;0;ON;;;;;N;;;;; 1F908;DOWNWARD FACING HOOK;So;0;ON;;;;;N;;;;; 1F909;DOWNWARD FACING NOTCHED HOOK;So;0;ON;;;;;N;;;;; 1F90A;DOWNWARD FACING HOOK WITH DOT;So;0;ON;;;;;N;;;;; 1F90B;DOWNWARD FACING NOTCHED HOOK WITH DOT;So;0;ON;;;;;N;;;;; 1F90C;PINCHED FINGERS;So;0;ON;;;;;N;;;;; 1F90D;WHITE HEART;So;0;ON;;;;;N;;;;; 1F90E;BROWN HEART;So;0;ON;;;;;N;;;;; 1F90F;PINCHING HAND;So;0;ON;;;;;N;;;;; 1F910;ZIPPER-MOUTH FACE;So;0;ON;;;;;N;;;;; 1F911;MONEY-MOUTH FACE;So;0;ON;;;;;N;;;;; 1F912;FACE WITH THERMOMETER;So;0;ON;;;;;N;;;;; 1F913;NERD FACE;So;0;ON;;;;;N;;;;; 1F914;THINKING FACE;So;0;ON;;;;;N;;;;; 1F915;FACE WITH HEAD-BANDAGE;So;0;ON;;;;;N;;;;; 1F916;ROBOT FACE;So;0;ON;;;;;N;;;;; 1F917;HUGGING FACE;So;0;ON;;;;;N;;;;; 1F918;SIGN OF THE HORNS;So;0;ON;;;;;N;;;;; 1F919;CALL ME HAND;So;0;ON;;;;;N;;;;; 1F91A;RAISED BACK OF HAND;So;0;ON;;;;;N;;;;; 1F91B;LEFT-FACING FIST;So;0;ON;;;;;N;;;;; 1F91C;RIGHT-FACING FIST;So;0;ON;;;;;N;;;;; 1F91D;HANDSHAKE;So;0;ON;;;;;N;;;;; 1F91E;HAND WITH INDEX AND MIDDLE FINGERS CROSSED;So;0;ON;;;;;N;;;;; 1F91F;I LOVE YOU HAND SIGN;So;0;ON;;;;;N;;;;; 1F920;FACE WITH COWBOY HAT;So;0;ON;;;;;N;;;;; 1F921;CLOWN FACE;So;0;ON;;;;;N;;;;; 1F922;NAUSEATED FACE;So;0;ON;;;;;N;;;;; 1F923;ROLLING ON THE FLOOR LAUGHING;So;0;ON;;;;;N;;;;; 1F924;DROOLING FACE;So;0;ON;;;;;N;;;;; 1F925;LYING FACE;So;0;ON;;;;;N;;;;; 1F926;FACE PALM;So;0;ON;;;;;N;;;;; 1F927;SNEEZING FACE;So;0;ON;;;;;N;;;;; 1F928;FACE WITH ONE EYEBROW RAISED;So;0;ON;;;;;N;;;;; 1F929;GRINNING FACE WITH STAR EYES;So;0;ON;;;;;N;;;;; 1F92A;GRINNING FACE WITH ONE LARGE AND ONE SMALL EYE;So;0;ON;;;;;N;;;;; 1F92B;FACE WITH FINGER COVERING CLOSED LIPS;So;0;ON;;;;;N;;;;; 1F92C;SERIOUS FACE WITH SYMBOLS COVERING MOUTH;So;0;ON;;;;;N;;;;; 1F92D;SMILING FACE WITH SMILING EYES AND HAND COVERING MOUTH;So;0;ON;;;;;N;;;;; 1F92E;FACE WITH OPEN MOUTH VOMITING;So;0;ON;;;;;N;;;;; 1F92F;SHOCKED FACE WITH EXPLODING HEAD;So;0;ON;;;;;N;;;;; 1F930;PREGNANT WOMAN;So;0;ON;;;;;N;;;;; 1F931;BREAST-FEEDING;So;0;ON;;;;;N;;;;; 1F932;PALMS UP TOGETHER;So;0;ON;;;;;N;;;;; 1F933;SELFIE;So;0;ON;;;;;N;;;;; 1F934;PRINCE;So;0;ON;;;;;N;;;;; 1F935;MAN IN TUXEDO;So;0;ON;;;;;N;;;;; 1F936;MOTHER CHRISTMAS;So;0;ON;;;;;N;;;;; 1F937;SHRUG;So;0;ON;;;;;N;;;;; 1F938;PERSON DOING CARTWHEEL;So;0;ON;;;;;N;;;;; 1F939;JUGGLING;So;0;ON;;;;;N;;;;; 1F93A;FENCER;So;0;ON;;;;;N;;;;; 1F93B;MODERN PENTATHLON;So;0;ON;;;;;N;;;;; 1F93C;WRESTLERS;So;0;ON;;;;;N;;;;; 1F93D;WATER POLO;So;0;ON;;;;;N;;;;; 1F93E;HANDBALL;So;0;ON;;;;;N;;;;; 1F93F;DIVING MASK;So;0;ON;;;;;N;;;;; 1F940;WILTED FLOWER;So;0;ON;;;;;N;;;;; 1F941;DRUM WITH DRUMSTICKS;So;0;ON;;;;;N;;;;; 1F942;CLINKING GLASSES;So;0;ON;;;;;N;;;;; 1F943;TUMBLER GLASS;So;0;ON;;;;;N;;;;; 1F944;SPOON;So;0;ON;;;;;N;;;;; 1F945;GOAL NET;So;0;ON;;;;;N;;;;; 1F946;RIFLE;So;0;ON;;;;;N;;;;; 1F947;FIRST PLACE MEDAL;So;0;ON;;;;;N;;;;; 1F948;SECOND PLACE MEDAL;So;0;ON;;;;;N;;;;; 1F949;THIRD PLACE MEDAL;So;0;ON;;;;;N;;;;; 1F94A;BOXING GLOVE;So;0;ON;;;;;N;;;;; 1F94B;MARTIAL ARTS UNIFORM;So;0;ON;;;;;N;;;;; 1F94C;CURLING STONE;So;0;ON;;;;;N;;;;; 1F94D;LACROSSE STICK AND BALL;So;0;ON;;;;;N;;;;; 1F94E;SOFTBALL;So;0;ON;;;;;N;;;;; 1F94F;FLYING DISC;So;0;ON;;;;;N;;;;; 1F950;CROISSANT;So;0;ON;;;;;N;;;;; 1F951;AVOCADO;So;0;ON;;;;;N;;;;; 1F952;CUCUMBER;So;0;ON;;;;;N;;;;; 1F953;BACON;So;0;ON;;;;;N;;;;; 1F954;POTATO;So;0;ON;;;;;N;;;;; 1F955;CARROT;So;0;ON;;;;;N;;;;; 1F956;BAGUETTE BREAD;So;0;ON;;;;;N;;;;; 1F957;GREEN SALAD;So;0;ON;;;;;N;;;;; 1F958;SHALLOW PAN OF FOOD;So;0;ON;;;;;N;;;;; 1F959;STUFFED FLATBREAD;So;0;ON;;;;;N;;;;; 1F95A;EGG;So;0;ON;;;;;N;;;;; 1F95B;GLASS OF MILK;So;0;ON;;;;;N;;;;; 1F95C;PEANUTS;So;0;ON;;;;;N;;;;; 1F95D;KIWIFRUIT;So;0;ON;;;;;N;;;;; 1F95E;PANCAKES;So;0;ON;;;;;N;;;;; 1F95F;DUMPLING;So;0;ON;;;;;N;;;;; 1F960;FORTUNE COOKIE;So;0;ON;;;;;N;;;;; 1F961;TAKEOUT BOX;So;0;ON;;;;;N;;;;; 1F962;CHOPSTICKS;So;0;ON;;;;;N;;;;; 1F963;BOWL WITH SPOON;So;0;ON;;;;;N;;;;; 1F964;CUP WITH STRAW;So;0;ON;;;;;N;;;;; 1F965;COCONUT;So;0;ON;;;;;N;;;;; 1F966;BROCCOLI;So;0;ON;;;;;N;;;;; 1F967;PIE;So;0;ON;;;;;N;;;;; 1F968;PRETZEL;So;0;ON;;;;;N;;;;; 1F969;CUT OF MEAT;So;0;ON;;;;;N;;;;; 1F96A;SANDWICH;So;0;ON;;;;;N;;;;; 1F96B;CANNED FOOD;So;0;ON;;;;;N;;;;; 1F96C;LEAFY GREEN;So;0;ON;;;;;N;;;;; 1F96D;MANGO;So;0;ON;;;;;N;;;;; 1F96E;MOON CAKE;So;0;ON;;;;;N;;;;; 1F96F;BAGEL;So;0;ON;;;;;N;;;;; 1F970;SMILING FACE WITH SMILING EYES AND THREE HEARTS;So;0;ON;;;;;N;;;;; 1F971;YAWNING FACE;So;0;ON;;;;;N;;;;; 1F972;SMILING FACE WITH TEAR;So;0;ON;;;;;N;;;;; 1F973;FACE WITH PARTY HORN AND PARTY HAT;So;0;ON;;;;;N;;;;; 1F974;FACE WITH UNEVEN EYES AND WAVY MOUTH;So;0;ON;;;;;N;;;;; 1F975;OVERHEATED FACE;So;0;ON;;;;;N;;;;; 1F976;FREEZING FACE;So;0;ON;;;;;N;;;;; 1F977;NINJA;So;0;ON;;;;;N;;;;; 1F978;DISGUISED FACE;So;0;ON;;;;;N;;;;; 1F979;FACE HOLDING BACK TEARS;So;0;ON;;;;;N;;;;; 1F97A;FACE WITH PLEADING EYES;So;0;ON;;;;;N;;;;; 1F97B;SARI;So;0;ON;;;;;N;;;;; 1F97C;LAB COAT;So;0;ON;;;;;N;;;;; 1F97D;GOGGLES;So;0;ON;;;;;N;;;;; 1F97E;HIKING BOOT;So;0;ON;;;;;N;;;;; 1F97F;FLAT SHOE;So;0;ON;;;;;N;;;;; 1F980;CRAB;So;0;ON;;;;;N;;;;; 1F981;LION FACE;So;0;ON;;;;;N;;;;; 1F982;SCORPION;So;0;ON;;;;;N;;;;; 1F983;TURKEY;So;0;ON;;;;;N;;;;; 1F984;UNICORN FACE;So;0;ON;;;;;N;;;;; 1F985;EAGLE;So;0;ON;;;;;N;;;;; 1F986;DUCK;So;0;ON;;;;;N;;;;; 1F987;BAT;So;0;ON;;;;;N;;;;; 1F988;SHARK;So;0;ON;;;;;N;;;;; 1F989;OWL;So;0;ON;;;;;N;;;;; 1F98A;FOX FACE;So;0;ON;;;;;N;;;;; 1F98B;BUTTERFLY;So;0;ON;;;;;N;;;;; 1F98C;DEER;So;0;ON;;;;;N;;;;; 1F98D;GORILLA;So;0;ON;;;;;N;;;;; 1F98E;LIZARD;So;0;ON;;;;;N;;;;; 1F98F;RHINOCEROS;So;0;ON;;;;;N;;;;; 1F990;SHRIMP;So;0;ON;;;;;N;;;;; 1F991;SQUID;So;0;ON;;;;;N;;;;; 1F992;GIRAFFE FACE;So;0;ON;;;;;N;;;;; 1F993;ZEBRA FACE;So;0;ON;;;;;N;;;;; 1F994;HEDGEHOG;So;0;ON;;;;;N;;;;; 1F995;SAUROPOD;So;0;ON;;;;;N;;;;; 1F996;T-REX;So;0;ON;;;;;N;;;;; 1F997;CRICKET;So;0;ON;;;;;N;;;;; 1F998;KANGAROO;So;0;ON;;;;;N;;;;; 1F999;LLAMA;So;0;ON;;;;;N;;;;; 1F99A;PEACOCK;So;0;ON;;;;;N;;;;; 1F99B;HIPPOPOTAMUS;So;0;ON;;;;;N;;;;; 1F99C;PARROT;So;0;ON;;;;;N;;;;; 1F99D;RACCOON;So;0;ON;;;;;N;;;;; 1F99E;LOBSTER;So;0;ON;;;;;N;;;;; 1F99F;MOSQUITO;So;0;ON;;;;;N;;;;; 1F9A0;MICROBE;So;0;ON;;;;;N;;;;; 1F9A1;BADGER;So;0;ON;;;;;N;;;;; 1F9A2;SWAN;So;0;ON;;;;;N;;;;; 1F9A3;MAMMOTH;So;0;ON;;;;;N;;;;; 1F9A4;DODO;So;0;ON;;;;;N;;;;; 1F9A5;SLOTH;So;0;ON;;;;;N;;;;; 1F9A6;OTTER;So;0;ON;;;;;N;;;;; 1F9A7;ORANGUTAN;So;0;ON;;;;;N;;;;; 1F9A8;SKUNK;So;0;ON;;;;;N;;;;; 1F9A9;FLAMINGO;So;0;ON;;;;;N;;;;; 1F9AA;OYSTER;So;0;ON;;;;;N;;;;; 1F9AB;BEAVER;So;0;ON;;;;;N;;;;; 1F9AC;BISON;So;0;ON;;;;;N;;;;; 1F9AD;SEAL;So;0;ON;;;;;N;;;;; 1F9AE;GUIDE DOG;So;0;ON;;;;;N;;;;; 1F9AF;PROBING CANE;So;0;ON;;;;;N;;;;; 1F9B0;EMOJI COMPONENT RED HAIR;So;0;ON;;;;;N;;;;; 1F9B1;EMOJI COMPONENT CURLY HAIR;So;0;ON;;;;;N;;;;; 1F9B2;EMOJI COMPONENT BALD;So;0;ON;;;;;N;;;;; 1F9B3;EMOJI COMPONENT WHITE HAIR;So;0;ON;;;;;N;;;;; 1F9B4;BONE;So;0;ON;;;;;N;;;;; 1F9B5;LEG;So;0;ON;;;;;N;;;;; 1F9B6;FOOT;So;0;ON;;;;;N;;;;; 1F9B7;TOOTH;So;0;ON;;;;;N;;;;; 1F9B8;SUPERHERO;So;0;ON;;;;;N;;;;; 1F9B9;SUPERVILLAIN;So;0;ON;;;;;N;;;;; 1F9BA;SAFETY VEST;So;0;ON;;;;;N;;;;; 1F9BB;EAR WITH HEARING AID;So;0;ON;;;;;N;;;;; 1F9BC;MOTORIZED WHEELCHAIR;So;0;ON;;;;;N;;;;; 1F9BD;MANUAL WHEELCHAIR;So;0;ON;;;;;N;;;;; 1F9BE;MECHANICAL ARM;So;0;ON;;;;;N;;;;; 1F9BF;MECHANICAL LEG;So;0;ON;;;;;N;;;;; 1F9C0;CHEESE WEDGE;So;0;ON;;;;;N;;;;; 1F9C1;CUPCAKE;So;0;ON;;;;;N;;;;; 1F9C2;SALT SHAKER;So;0;ON;;;;;N;;;;; 1F9C3;BEVERAGE BOX;So;0;ON;;;;;N;;;;; 1F9C4;GARLIC;So;0;ON;;;;;N;;;;; 1F9C5;ONION;So;0;ON;;;;;N;;;;; 1F9C6;FALAFEL;So;0;ON;;;;;N;;;;; 1F9C7;WAFFLE;So;0;ON;;;;;N;;;;; 1F9C8;BUTTER;So;0;ON;;;;;N;;;;; 1F9C9;MATE DRINK;So;0;ON;;;;;N;;;;; 1F9CA;ICE CUBE;So;0;ON;;;;;N;;;;; 1F9CB;BUBBLE TEA;So;0;ON;;;;;N;;;;; 1F9CC;TROLL;So;0;ON;;;;;N;;;;; 1F9CD;STANDING PERSON;So;0;ON;;;;;N;;;;; 1F9CE;KNEELING PERSON;So;0;ON;;;;;N;;;;; 1F9CF;DEAF PERSON;So;0;ON;;;;;N;;;;; 1F9D0;FACE WITH MONOCLE;So;0;ON;;;;;N;;;;; 1F9D1;ADULT;So;0;ON;;;;;N;;;;; 1F9D2;CHILD;So;0;ON;;;;;N;;;;; 1F9D3;OLDER ADULT;So;0;ON;;;;;N;;;;; 1F9D4;BEARDED PERSON;So;0;ON;;;;;N;;;;; 1F9D5;PERSON WITH HEADSCARF;So;0;ON;;;;;N;;;;; 1F9D6;PERSON IN STEAMY ROOM;So;0;ON;;;;;N;;;;; 1F9D7;PERSON CLIMBING;So;0;ON;;;;;N;;;;; 1F9D8;PERSON IN LOTUS POSITION;So;0;ON;;;;;N;;;;; 1F9D9;MAGE;So;0;ON;;;;;N;;;;; 1F9DA;FAIRY;So;0;ON;;;;;N;;;;; 1F9DB;VAMPIRE;So;0;ON;;;;;N;;;;; 1F9DC;MERPERSON;So;0;ON;;;;;N;;;;; 1F9DD;ELF;So;0;ON;;;;;N;;;;; 1F9DE;GENIE;So;0;ON;;;;;N;;;;; 1F9DF;ZOMBIE;So;0;ON;;;;;N;;;;; 1F9E0;BRAIN;So;0;ON;;;;;N;;;;; 1F9E1;ORANGE HEART;So;0;ON;;;;;N;;;;; 1F9E2;BILLED CAP;So;0;ON;;;;;N;;;;; 1F9E3;SCARF;So;0;ON;;;;;N;;;;; 1F9E4;GLOVES;So;0;ON;;;;;N;;;;; 1F9E5;COAT;So;0;ON;;;;;N;;;;; 1F9E6;SOCKS;So;0;ON;;;;;N;;;;; 1F9E7;RED GIFT ENVELOPE;So;0;ON;;;;;N;;;;; 1F9E8;FIRECRACKER;So;0;ON;;;;;N;;;;; 1F9E9;JIGSAW PUZZLE PIECE;So;0;ON;;;;;N;;;;; 1F9EA;TEST TUBE;So;0;ON;;;;;N;;;;; 1F9EB;PETRI DISH;So;0;ON;;;;;N;;;;; 1F9EC;DNA DOUBLE HELIX;So;0;ON;;;;;N;;;;; 1F9ED;COMPASS;So;0;ON;;;;;N;;;;; 1F9EE;ABACUS;So;0;ON;;;;;N;;;;; 1F9EF;FIRE EXTINGUISHER;So;0;ON;;;;;N;;;;; 1F9F0;TOOLBOX;So;0;ON;;;;;N;;;;; 1F9F1;BRICK;So;0;ON;;;;;N;;;;; 1F9F2;MAGNET;So;0;ON;;;;;N;;;;; 1F9F3;LUGGAGE;So;0;ON;;;;;N;;;;; 1F9F4;LOTION BOTTLE;So;0;ON;;;;;N;;;;; 1F9F5;SPOOL OF THREAD;So;0;ON;;;;;N;;;;; 1F9F6;BALL OF YARN;So;0;ON;;;;;N;;;;; 1F9F7;SAFETY PIN;So;0;ON;;;;;N;;;;; 1F9F8;TEDDY BEAR;So;0;ON;;;;;N;;;;; 1F9F9;BROOM;So;0;ON;;;;;N;;;;; 1F9FA;BASKET;So;0;ON;;;;;N;;;;; 1F9FB;ROLL OF PAPER;So;0;ON;;;;;N;;;;; 1F9FC;BAR OF SOAP;So;0;ON;;;;;N;;;;; 1F9FD;SPONGE;So;0;ON;;;;;N;;;;; 1F9FE;RECEIPT;So;0;ON;;;;;N;;;;; 1F9FF;NAZAR AMULET;So;0;ON;;;;;N;;;;; 1FA00;NEUTRAL CHESS KING;So;0;ON;;;;;N;;;;; 1FA01;NEUTRAL CHESS QUEEN;So;0;ON;;;;;N;;;;; 1FA02;NEUTRAL CHESS ROOK;So;0;ON;;;;;N;;;;; 1FA03;NEUTRAL CHESS BISHOP;So;0;ON;;;;;N;;;;; 1FA04;NEUTRAL CHESS KNIGHT;So;0;ON;;;;;N;;;;; 1FA05;NEUTRAL CHESS PAWN;So;0;ON;;;;;N;;;;; 1FA06;WHITE CHESS KNIGHT ROTATED FORTY-FIVE DEGREES;So;0;ON;;;;;N;;;;; 1FA07;BLACK CHESS KNIGHT ROTATED FORTY-FIVE DEGREES;So;0;ON;;;;;N;;;;; 1FA08;NEUTRAL CHESS KNIGHT ROTATED FORTY-FIVE DEGREES;So;0;ON;;;;;N;;;;; 1FA09;WHITE CHESS KING ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;; 1FA0A;WHITE CHESS QUEEN ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;; 1FA0B;WHITE CHESS ROOK ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;; 1FA0C;WHITE CHESS BISHOP ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;; 1FA0D;WHITE CHESS KNIGHT ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;; 1FA0E;WHITE CHESS PAWN ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;; 1FA0F;BLACK CHESS KING ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;; 1FA10;BLACK CHESS QUEEN ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;; 1FA11;BLACK CHESS ROOK ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;; 1FA12;BLACK CHESS BISHOP ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;; 1FA13;BLACK CHESS KNIGHT ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;; 1FA14;BLACK CHESS PAWN ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;; 1FA15;NEUTRAL CHESS KING ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;; 1FA16;NEUTRAL CHESS QUEEN ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;; 1FA17;NEUTRAL CHESS ROOK ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;; 1FA18;NEUTRAL CHESS BISHOP ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;; 1FA19;NEUTRAL CHESS KNIGHT ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;; 1FA1A;NEUTRAL CHESS PAWN ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;; 1FA1B;WHITE CHESS KNIGHT ROTATED ONE HUNDRED THIRTY-FIVE DEGREES;So;0;ON;;;;;N;;;;; 1FA1C;BLACK CHESS KNIGHT ROTATED ONE HUNDRED THIRTY-FIVE DEGREES;So;0;ON;;;;;N;;;;; 1FA1D;NEUTRAL CHESS KNIGHT ROTATED ONE HUNDRED THIRTY-FIVE DEGREES;So;0;ON;;;;;N;;;;; 1FA1E;WHITE CHESS TURNED KING;So;0;ON;;;;;N;;;;; 1FA1F;WHITE CHESS TURNED QUEEN;So;0;ON;;;;;N;;;;; 1FA20;WHITE CHESS TURNED ROOK;So;0;ON;;;;;N;;;;; 1FA21;WHITE CHESS TURNED BISHOP;So;0;ON;;;;;N;;;;; 1FA22;WHITE CHESS TURNED KNIGHT;So;0;ON;;;;;N;;;;; 1FA23;WHITE CHESS TURNED PAWN;So;0;ON;;;;;N;;;;; 1FA24;BLACK CHESS TURNED KING;So;0;ON;;;;;N;;;;; 1FA25;BLACK CHESS TURNED QUEEN;So;0;ON;;;;;N;;;;; 1FA26;BLACK CHESS TURNED ROOK;So;0;ON;;;;;N;;;;; 1FA27;BLACK CHESS TURNED BISHOP;So;0;ON;;;;;N;;;;; 1FA28;BLACK CHESS TURNED KNIGHT;So;0;ON;;;;;N;;;;; 1FA29;BLACK CHESS TURNED PAWN;So;0;ON;;;;;N;;;;; 1FA2A;NEUTRAL CHESS TURNED KING;So;0;ON;;;;;N;;;;; 1FA2B;NEUTRAL CHESS TURNED QUEEN;So;0;ON;;;;;N;;;;; 1FA2C;NEUTRAL CHESS TURNED ROOK;So;0;ON;;;;;N;;;;; 1FA2D;NEUTRAL CHESS TURNED BISHOP;So;0;ON;;;;;N;;;;; 1FA2E;NEUTRAL CHESS TURNED KNIGHT;So;0;ON;;;;;N;;;;; 1FA2F;NEUTRAL CHESS TURNED PAWN;So;0;ON;;;;;N;;;;; 1FA30;WHITE CHESS KNIGHT ROTATED TWO HUNDRED TWENTY-FIVE DEGREES;So;0;ON;;;;;N;;;;; 1FA31;BLACK CHESS KNIGHT ROTATED TWO HUNDRED TWENTY-FIVE DEGREES;So;0;ON;;;;;N;;;;; 1FA32;NEUTRAL CHESS KNIGHT ROTATED TWO HUNDRED TWENTY-FIVE DEGREES;So;0;ON;;;;;N;;;;; 1FA33;WHITE CHESS KING ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;; 1FA34;WHITE CHESS QUEEN ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;; 1FA35;WHITE CHESS ROOK ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;; 1FA36;WHITE CHESS BISHOP ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;; 1FA37;WHITE CHESS KNIGHT ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;; 1FA38;WHITE CHESS PAWN ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;; 1FA39;BLACK CHESS KING ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;; 1FA3A;BLACK CHESS QUEEN ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;; 1FA3B;BLACK CHESS ROOK ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;; 1FA3C;BLACK CHESS BISHOP ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;; 1FA3D;BLACK CHESS KNIGHT ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;; 1FA3E;BLACK CHESS PAWN ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;; 1FA3F;NEUTRAL CHESS KING ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;; 1FA40;NEUTRAL CHESS QUEEN ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;; 1FA41;NEUTRAL CHESS ROOK ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;; 1FA42;NEUTRAL CHESS BISHOP ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;; 1FA43;NEUTRAL CHESS KNIGHT ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;; 1FA44;NEUTRAL CHESS PAWN ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;; 1FA45;WHITE CHESS KNIGHT ROTATED THREE HUNDRED FIFTEEN DEGREES;So;0;ON;;;;;N;;;;; 1FA46;BLACK CHESS KNIGHT ROTATED THREE HUNDRED FIFTEEN DEGREES;So;0;ON;;;;;N;;;;; 1FA47;NEUTRAL CHESS KNIGHT ROTATED THREE HUNDRED FIFTEEN DEGREES;So;0;ON;;;;;N;;;;; 1FA48;WHITE CHESS EQUIHOPPER;So;0;ON;;;;;N;;;;; 1FA49;BLACK CHESS EQUIHOPPER;So;0;ON;;;;;N;;;;; 1FA4A;NEUTRAL CHESS EQUIHOPPER;So;0;ON;;;;;N;;;;; 1FA4B;WHITE CHESS EQUIHOPPER ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;; 1FA4C;BLACK CHESS EQUIHOPPER ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;; 1FA4D;NEUTRAL CHESS EQUIHOPPER ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;; 1FA4E;WHITE CHESS KNIGHT-QUEEN;So;0;ON;;;;;N;;;;; 1FA4F;WHITE CHESS KNIGHT-ROOK;So;0;ON;;;;;N;;;;; 1FA50;WHITE CHESS KNIGHT-BISHOP;So;0;ON;;;;;N;;;;; 1FA51;BLACK CHESS KNIGHT-QUEEN;So;0;ON;;;;;N;;;;; 1FA52;BLACK CHESS KNIGHT-ROOK;So;0;ON;;;;;N;;;;; 1FA53;BLACK CHESS KNIGHT-BISHOP;So;0;ON;;;;;N;;;;; 1FA60;XIANGQI RED GENERAL;So;0;ON;;;;;N;;;;; 1FA61;XIANGQI RED MANDARIN;So;0;ON;;;;;N;;;;; 1FA62;XIANGQI RED ELEPHANT;So;0;ON;;;;;N;;;;; 1FA63;XIANGQI RED HORSE;So;0;ON;;;;;N;;;;; 1FA64;XIANGQI RED CHARIOT;So;0;ON;;;;;N;;;;; 1FA65;XIANGQI RED CANNON;So;0;ON;;;;;N;;;;; 1FA66;XIANGQI RED SOLDIER;So;0;ON;;;;;N;;;;; 1FA67;XIANGQI BLACK GENERAL;So;0;ON;;;;;N;;;;; 1FA68;XIANGQI BLACK MANDARIN;So;0;ON;;;;;N;;;;; 1FA69;XIANGQI BLACK ELEPHANT;So;0;ON;;;;;N;;;;; 1FA6A;XIANGQI BLACK HORSE;So;0;ON;;;;;N;;;;; 1FA6B;XIANGQI BLACK CHARIOT;So;0;ON;;;;;N;;;;; 1FA6C;XIANGQI BLACK CANNON;So;0;ON;;;;;N;;;;; 1FA6D;XIANGQI BLACK SOLDIER;So;0;ON;;;;;N;;;;; 1FA70;BALLET SHOES;So;0;ON;;;;;N;;;;; 1FA71;ONE-PIECE SWIMSUIT;So;0;ON;;;;;N;;;;; 1FA72;BRIEFS;So;0;ON;;;;;N;;;;; 1FA73;SHORTS;So;0;ON;;;;;N;;;;; 1FA74;THONG SANDAL;So;0;ON;;;;;N;;;;; 1FA78;DROP OF BLOOD;So;0;ON;;;;;N;;;;; 1FA79;ADHESIVE BANDAGE;So;0;ON;;;;;N;;;;; 1FA7A;STETHOSCOPE;So;0;ON;;;;;N;;;;; 1FA7B;X-RAY;So;0;ON;;;;;N;;;;; 1FA7C;CRUTCH;So;0;ON;;;;;N;;;;; 1FA80;YO-YO;So;0;ON;;;;;N;;;;; 1FA81;KITE;So;0;ON;;;;;N;;;;; 1FA82;PARACHUTE;So;0;ON;;;;;N;;;;; 1FA83;BOOMERANG;So;0;ON;;;;;N;;;;; 1FA84;MAGIC WAND;So;0;ON;;;;;N;;;;; 1FA85;PINATA;So;0;ON;;;;;N;;;;; 1FA86;NESTING DOLLS;So;0;ON;;;;;N;;;;; 1FA90;RINGED PLANET;So;0;ON;;;;;N;;;;; 1FA91;CHAIR;So;0;ON;;;;;N;;;;; 1FA92;RAZOR;So;0;ON;;;;;N;;;;; 1FA93;AXE;So;0;ON;;;;;N;;;;; 1FA94;DIYA LAMP;So;0;ON;;;;;N;;;;; 1FA95;BANJO;So;0;ON;;;;;N;;;;; 1FA96;MILITARY HELMET;So;0;ON;;;;;N;;;;; 1FA97;ACCORDION;So;0;ON;;;;;N;;;;; 1FA98;LONG DRUM;So;0;ON;;;;;N;;;;; 1FA99;COIN;So;0;ON;;;;;N;;;;; 1FA9A;CARPENTRY SAW;So;0;ON;;;;;N;;;;; 1FA9B;SCREWDRIVER;So;0;ON;;;;;N;;;;; 1FA9C;LADDER;So;0;ON;;;;;N;;;;; 1FA9D;HOOK;So;0;ON;;;;;N;;;;; 1FA9E;MIRROR;So;0;ON;;;;;N;;;;; 1FA9F;WINDOW;So;0;ON;;;;;N;;;;; 1FAA0;PLUNGER;So;0;ON;;;;;N;;;;; 1FAA1;SEWING NEEDLE;So;0;ON;;;;;N;;;;; 1FAA2;KNOT;So;0;ON;;;;;N;;;;; 1FAA3;BUCKET;So;0;ON;;;;;N;;;;; 1FAA4;MOUSE TRAP;So;0;ON;;;;;N;;;;; 1FAA5;TOOTHBRUSH;So;0;ON;;;;;N;;;;; 1FAA6;HEADSTONE;So;0;ON;;;;;N;;;;; 1FAA7;PLACARD;So;0;ON;;;;;N;;;;; 1FAA8;ROCK;So;0;ON;;;;;N;;;;; 1FAA9;MIRROR BALL;So;0;ON;;;;;N;;;;; 1FAAA;IDENTIFICATION CARD;So;0;ON;;;;;N;;;;; 1FAAB;LOW BATTERY;So;0;ON;;;;;N;;;;; 1FAAC;HAMSA;So;0;ON;;;;;N;;;;; 1FAB0;FLY;So;0;ON;;;;;N;;;;; 1FAB1;WORM;So;0;ON;;;;;N;;;;; 1FAB2;BEETLE;So;0;ON;;;;;N;;;;; 1FAB3;COCKROACH;So;0;ON;;;;;N;;;;; 1FAB4;POTTED PLANT;So;0;ON;;;;;N;;;;; 1FAB5;WOOD;So;0;ON;;;;;N;;;;; 1FAB6;FEATHER;So;0;ON;;;;;N;;;;; 1FAB7;LOTUS;So;0;ON;;;;;N;;;;; 1FAB8;CORAL;So;0;ON;;;;;N;;;;; 1FAB9;EMPTY NEST;So;0;ON;;;;;N;;;;; 1FABA;NEST WITH EGGS;So;0;ON;;;;;N;;;;; 1FAC0;ANATOMICAL HEART;So;0;ON;;;;;N;;;;; 1FAC1;LUNGS;So;0;ON;;;;;N;;;;; 1FAC2;PEOPLE HUGGING;So;0;ON;;;;;N;;;;; 1FAC3;PREGNANT MAN;So;0;ON;;;;;N;;;;; 1FAC4;PREGNANT PERSON;So;0;ON;;;;;N;;;;; 1FAC5;PERSON WITH CROWN;So;0;ON;;;;;N;;;;; 1FAD0;BLUEBERRIES;So;0;ON;;;;;N;;;;; 1FAD1;BELL PEPPER;So;0;ON;;;;;N;;;;; 1FAD2;OLIVE;So;0;ON;;;;;N;;;;; 1FAD3;FLATBREAD;So;0;ON;;;;;N;;;;; 1FAD4;TAMALE;So;0;ON;;;;;N;;;;; 1FAD5;FONDUE;So;0;ON;;;;;N;;;;; 1FAD6;TEAPOT;So;0;ON;;;;;N;;;;; 1FAD7;POURING LIQUID;So;0;ON;;;;;N;;;;; 1FAD8;BEANS;So;0;ON;;;;;N;;;;; 1FAD9;JAR;So;0;ON;;;;;N;;;;; 1FAE0;MELTING FACE;So;0;ON;;;;;N;;;;; 1FAE1;SALUTING FACE;So;0;ON;;;;;N;;;;; 1FAE2;FACE WITH OPEN EYES AND HAND OVER MOUTH;So;0;ON;;;;;N;;;;; 1FAE3;FACE WITH PEEKING EYE;So;0;ON;;;;;N;;;;; 1FAE4;FACE WITH DIAGONAL MOUTH;So;0;ON;;;;;N;;;;; 1FAE5;DOTTED LINE FACE;So;0;ON;;;;;N;;;;; 1FAE6;BITING LIP;So;0;ON;;;;;N;;;;; 1FAE7;BUBBLES;So;0;ON;;;;;N;;;;; 1FAF0;HAND WITH INDEX FINGER AND THUMB CROSSED;So;0;ON;;;;;N;;;;; 1FAF1;RIGHTWARDS HAND;So;0;ON;;;;;N;;;;; 1FAF2;LEFTWARDS HAND;So;0;ON;;;;;N;;;;; 1FAF3;PALM DOWN HAND;So;0;ON;;;;;N;;;;; 1FAF4;PALM UP HAND;So;0;ON;;;;;N;;;;; 1FAF5;INDEX POINTING AT THE VIEWER;So;0;ON;;;;;N;;;;; 1FAF6;HEART HANDS;So;0;ON;;;;;N;;;;; 1FB00;BLOCK SEXTANT-1;So;0;ON;;;;;N;;;;; 1FB01;BLOCK SEXTANT-2;So;0;ON;;;;;N;;;;; 1FB02;BLOCK SEXTANT-12;So;0;ON;;;;;N;;;;; 1FB03;BLOCK SEXTANT-3;So;0;ON;;;;;N;;;;; 1FB04;BLOCK SEXTANT-13;So;0;ON;;;;;N;;;;; 1FB05;BLOCK SEXTANT-23;So;0;ON;;;;;N;;;;; 1FB06;BLOCK SEXTANT-123;So;0;ON;;;;;N;;;;; 1FB07;BLOCK SEXTANT-4;So;0;ON;;;;;N;;;;; 1FB08;BLOCK SEXTANT-14;So;0;ON;;;;;N;;;;; 1FB09;BLOCK SEXTANT-24;So;0;ON;;;;;N;;;;; 1FB0A;BLOCK SEXTANT-124;So;0;ON;;;;;N;;;;; 1FB0B;BLOCK SEXTANT-34;So;0;ON;;;;;N;;;;; 1FB0C;BLOCK SEXTANT-134;So;0;ON;;;;;N;;;;; 1FB0D;BLOCK SEXTANT-234;So;0;ON;;;;;N;;;;; 1FB0E;BLOCK SEXTANT-1234;So;0;ON;;;;;N;;;;; 1FB0F;BLOCK SEXTANT-5;So;0;ON;;;;;N;;;;; 1FB10;BLOCK SEXTANT-15;So;0;ON;;;;;N;;;;; 1FB11;BLOCK SEXTANT-25;So;0;ON;;;;;N;;;;; 1FB12;BLOCK SEXTANT-125;So;0;ON;;;;;N;;;;; 1FB13;BLOCK SEXTANT-35;So;0;ON;;;;;N;;;;; 1FB14;BLOCK SEXTANT-235;So;0;ON;;;;;N;;;;; 1FB15;BLOCK SEXTANT-1235;So;0;ON;;;;;N;;;;; 1FB16;BLOCK SEXTANT-45;So;0;ON;;;;;N;;;;; 1FB17;BLOCK SEXTANT-145;So;0;ON;;;;;N;;;;; 1FB18;BLOCK SEXTANT-245;So;0;ON;;;;;N;;;;; 1FB19;BLOCK SEXTANT-1245;So;0;ON;;;;;N;;;;; 1FB1A;BLOCK SEXTANT-345;So;0;ON;;;;;N;;;;; 1FB1B;BLOCK SEXTANT-1345;So;0;ON;;;;;N;;;;; 1FB1C;BLOCK SEXTANT-2345;So;0;ON;;;;;N;;;;; 1FB1D;BLOCK SEXTANT-12345;So;0;ON;;;;;N;;;;; 1FB1E;BLOCK SEXTANT-6;So;0;ON;;;;;N;;;;; 1FB1F;BLOCK SEXTANT-16;So;0;ON;;;;;N;;;;; 1FB20;BLOCK SEXTANT-26;So;0;ON;;;;;N;;;;; 1FB21;BLOCK SEXTANT-126;So;0;ON;;;;;N;;;;; 1FB22;BLOCK SEXTANT-36;So;0;ON;;;;;N;;;;; 1FB23;BLOCK SEXTANT-136;So;0;ON;;;;;N;;;;; 1FB24;BLOCK SEXTANT-236;So;0;ON;;;;;N;;;;; 1FB25;BLOCK SEXTANT-1236;So;0;ON;;;;;N;;;;; 1FB26;BLOCK SEXTANT-46;So;0;ON;;;;;N;;;;; 1FB27;BLOCK SEXTANT-146;So;0;ON;;;;;N;;;;; 1FB28;BLOCK SEXTANT-1246;So;0;ON;;;;;N;;;;; 1FB29;BLOCK SEXTANT-346;So;0;ON;;;;;N;;;;; 1FB2A;BLOCK SEXTANT-1346;So;0;ON;;;;;N;;;;; 1FB2B;BLOCK SEXTANT-2346;So;0;ON;;;;;N;;;;; 1FB2C;BLOCK SEXTANT-12346;So;0;ON;;;;;N;;;;; 1FB2D;BLOCK SEXTANT-56;So;0;ON;;;;;N;;;;; 1FB2E;BLOCK SEXTANT-156;So;0;ON;;;;;N;;;;; 1FB2F;BLOCK SEXTANT-256;So;0;ON;;;;;N;;;;; 1FB30;BLOCK SEXTANT-1256;So;0;ON;;;;;N;;;;; 1FB31;BLOCK SEXTANT-356;So;0;ON;;;;;N;;;;; 1FB32;BLOCK SEXTANT-1356;So;0;ON;;;;;N;;;;; 1FB33;BLOCK SEXTANT-2356;So;0;ON;;;;;N;;;;; 1FB34;BLOCK SEXTANT-12356;So;0;ON;;;;;N;;;;; 1FB35;BLOCK SEXTANT-456;So;0;ON;;;;;N;;;;; 1FB36;BLOCK SEXTANT-1456;So;0;ON;;;;;N;;;;; 1FB37;BLOCK SEXTANT-2456;So;0;ON;;;;;N;;;;; 1FB38;BLOCK SEXTANT-12456;So;0;ON;;;;;N;;;;; 1FB39;BLOCK SEXTANT-3456;So;0;ON;;;;;N;;;;; 1FB3A;BLOCK SEXTANT-13456;So;0;ON;;;;;N;;;;; 1FB3B;BLOCK SEXTANT-23456;So;0;ON;;;;;N;;;;; 1FB3C;LOWER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER CENTRE;So;0;ON;;;;;N;;;;; 1FB3D;LOWER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER RIGHT;So;0;ON;;;;;N;;;;; 1FB3E;LOWER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER CENTRE;So;0;ON;;;;;N;;;;; 1FB3F;LOWER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER RIGHT;So;0;ON;;;;;N;;;;; 1FB40;LOWER LEFT BLOCK DIAGONAL UPPER LEFT TO LOWER CENTRE;So;0;ON;;;;;N;;;;; 1FB41;LOWER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER CENTRE;So;0;ON;;;;;N;;;;; 1FB42;LOWER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER RIGHT;So;0;ON;;;;;N;;;;; 1FB43;LOWER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER CENTRE;So;0;ON;;;;;N;;;;; 1FB44;LOWER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER RIGHT;So;0;ON;;;;;N;;;;; 1FB45;LOWER RIGHT BLOCK DIAGONAL LOWER LEFT TO UPPER CENTRE;So;0;ON;;;;;N;;;;; 1FB46;LOWER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER MIDDLE RIGHT;So;0;ON;;;;;N;;;;; 1FB47;LOWER RIGHT BLOCK DIAGONAL LOWER CENTRE TO LOWER MIDDLE RIGHT;So;0;ON;;;;;N;;;;; 1FB48;LOWER RIGHT BLOCK DIAGONAL LOWER LEFT TO LOWER MIDDLE RIGHT;So;0;ON;;;;;N;;;;; 1FB49;LOWER RIGHT BLOCK DIAGONAL LOWER CENTRE TO UPPER MIDDLE RIGHT;So;0;ON;;;;;N;;;;; 1FB4A;LOWER RIGHT BLOCK DIAGONAL LOWER LEFT TO UPPER MIDDLE RIGHT;So;0;ON;;;;;N;;;;; 1FB4B;LOWER RIGHT BLOCK DIAGONAL LOWER CENTRE TO UPPER RIGHT;So;0;ON;;;;;N;;;;; 1FB4C;LOWER LEFT BLOCK DIAGONAL UPPER CENTRE TO UPPER MIDDLE RIGHT;So;0;ON;;;;;N;;;;; 1FB4D;LOWER LEFT BLOCK DIAGONAL UPPER LEFT TO UPPER MIDDLE RIGHT;So;0;ON;;;;;N;;;;; 1FB4E;LOWER LEFT BLOCK DIAGONAL UPPER CENTRE TO LOWER MIDDLE RIGHT;So;0;ON;;;;;N;;;;; 1FB4F;LOWER LEFT BLOCK DIAGONAL UPPER LEFT TO LOWER MIDDLE RIGHT;So;0;ON;;;;;N;;;;; 1FB50;LOWER LEFT BLOCK DIAGONAL UPPER CENTRE TO LOWER RIGHT;So;0;ON;;;;;N;;;;; 1FB51;LOWER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER MIDDLE RIGHT;So;0;ON;;;;;N;;;;; 1FB52;UPPER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER CENTRE;So;0;ON;;;;;N;;;;; 1FB53;UPPER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER RIGHT;So;0;ON;;;;;N;;;;; 1FB54;UPPER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER CENTRE;So;0;ON;;;;;N;;;;; 1FB55;UPPER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER RIGHT;So;0;ON;;;;;N;;;;; 1FB56;UPPER RIGHT BLOCK DIAGONAL UPPER LEFT TO LOWER CENTRE;So;0;ON;;;;;N;;;;; 1FB57;UPPER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER CENTRE;So;0;ON;;;;;N;;;;; 1FB58;UPPER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER RIGHT;So;0;ON;;;;;N;;;;; 1FB59;UPPER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER CENTRE;So;0;ON;;;;;N;;;;; 1FB5A;UPPER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER RIGHT;So;0;ON;;;;;N;;;;; 1FB5B;UPPER LEFT BLOCK DIAGONAL LOWER LEFT TO UPPER CENTRE;So;0;ON;;;;;N;;;;; 1FB5C;UPPER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER MIDDLE RIGHT;So;0;ON;;;;;N;;;;; 1FB5D;UPPER LEFT BLOCK DIAGONAL LOWER CENTRE TO LOWER MIDDLE RIGHT;So;0;ON;;;;;N;;;;; 1FB5E;UPPER LEFT BLOCK DIAGONAL LOWER LEFT TO LOWER MIDDLE RIGHT;So;0;ON;;;;;N;;;;; 1FB5F;UPPER LEFT BLOCK DIAGONAL LOWER CENTRE TO UPPER MIDDLE RIGHT;So;0;ON;;;;;N;;;;; 1FB60;UPPER LEFT BLOCK DIAGONAL LOWER LEFT TO UPPER MIDDLE RIGHT;So;0;ON;;;;;N;;;;; 1FB61;UPPER LEFT BLOCK DIAGONAL LOWER CENTRE TO UPPER RIGHT;So;0;ON;;;;;N;;;;; 1FB62;UPPER RIGHT BLOCK DIAGONAL UPPER CENTRE TO UPPER MIDDLE RIGHT;So;0;ON;;;;;N;;;;; 1FB63;UPPER RIGHT BLOCK DIAGONAL UPPER LEFT TO UPPER MIDDLE RIGHT;So;0;ON;;;;;N;;;;; 1FB64;UPPER RIGHT BLOCK DIAGONAL UPPER CENTRE TO LOWER MIDDLE RIGHT;So;0;ON;;;;;N;;;;; 1FB65;UPPER RIGHT BLOCK DIAGONAL UPPER LEFT TO LOWER MIDDLE RIGHT;So;0;ON;;;;;N;;;;; 1FB66;UPPER RIGHT BLOCK DIAGONAL UPPER CENTRE TO LOWER RIGHT;So;0;ON;;;;;N;;;;; 1FB67;UPPER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER MIDDLE RIGHT;So;0;ON;;;;;N;;;;; 1FB68;UPPER AND RIGHT AND LOWER TRIANGULAR THREE QUARTERS BLOCK;So;0;ON;;;;;N;;;;; 1FB69;LEFT AND LOWER AND RIGHT TRIANGULAR THREE QUARTERS BLOCK;So;0;ON;;;;;N;;;;; 1FB6A;UPPER AND LEFT AND LOWER TRIANGULAR THREE QUARTERS BLOCK;So;0;ON;;;;;N;;;;; 1FB6B;LEFT AND UPPER AND RIGHT TRIANGULAR THREE QUARTERS BLOCK;So;0;ON;;;;;N;;;;; 1FB6C;LEFT TRIANGULAR ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; 1FB6D;UPPER TRIANGULAR ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; 1FB6E;RIGHT TRIANGULAR ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; 1FB6F;LOWER TRIANGULAR ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; 1FB70;VERTICAL ONE EIGHTH BLOCK-2;So;0;ON;;;;;N;;;;; 1FB71;VERTICAL ONE EIGHTH BLOCK-3;So;0;ON;;;;;N;;;;; 1FB72;VERTICAL ONE EIGHTH BLOCK-4;So;0;ON;;;;;N;;;;; 1FB73;VERTICAL ONE EIGHTH BLOCK-5;So;0;ON;;;;;N;;;;; 1FB74;VERTICAL ONE EIGHTH BLOCK-6;So;0;ON;;;;;N;;;;; 1FB75;VERTICAL ONE EIGHTH BLOCK-7;So;0;ON;;;;;N;;;;; 1FB76;HORIZONTAL ONE EIGHTH BLOCK-2;So;0;ON;;;;;N;;;;; 1FB77;HORIZONTAL ONE EIGHTH BLOCK-3;So;0;ON;;;;;N;;;;; 1FB78;HORIZONTAL ONE EIGHTH BLOCK-4;So;0;ON;;;;;N;;;;; 1FB79;HORIZONTAL ONE EIGHTH BLOCK-5;So;0;ON;;;;;N;;;;; 1FB7A;HORIZONTAL ONE EIGHTH BLOCK-6;So;0;ON;;;;;N;;;;; 1FB7B;HORIZONTAL ONE EIGHTH BLOCK-7;So;0;ON;;;;;N;;;;; 1FB7C;LEFT AND LOWER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;; 1FB7D;LEFT AND UPPER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;; 1FB7E;RIGHT AND UPPER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;; 1FB7F;RIGHT AND LOWER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;; 1FB80;UPPER AND LOWER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;; 1FB81;HORIZONTAL ONE EIGHTH BLOCK-1358;So;0;ON;;;;;N;;;;; 1FB82;UPPER ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; 1FB83;UPPER THREE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;; 1FB84;UPPER FIVE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;; 1FB85;UPPER THREE QUARTERS BLOCK;So;0;ON;;;;;N;;;;; 1FB86;UPPER SEVEN EIGHTHS BLOCK;So;0;ON;;;;;N;;;;; 1FB87;RIGHT ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; 1FB88;RIGHT THREE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;; 1FB89;RIGHT FIVE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;; 1FB8A;RIGHT THREE QUARTERS BLOCK;So;0;ON;;;;;N;;;;; 1FB8B;RIGHT SEVEN EIGHTHS BLOCK;So;0;ON;;;;;N;;;;; 1FB8C;LEFT HALF MEDIUM SHADE;So;0;ON;;;;;N;;;;; 1FB8D;RIGHT HALF MEDIUM SHADE;So;0;ON;;;;;N;;;;; 1FB8E;UPPER HALF MEDIUM SHADE;So;0;ON;;;;;N;;;;; 1FB8F;LOWER HALF MEDIUM SHADE;So;0;ON;;;;;N;;;;; 1FB90;INVERSE MEDIUM SHADE;So;0;ON;;;;;N;;;;; 1FB91;UPPER HALF BLOCK AND LOWER HALF INVERSE MEDIUM SHADE;So;0;ON;;;;;N;;;;; 1FB92;UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK;So;0;ON;;;;;N;;;;; 1FB94;LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK;So;0;ON;;;;;N;;;;; 1FB95;CHECKER BOARD FILL;So;0;ON;;;;;N;;;;; 1FB96;INVERSE CHECKER BOARD FILL;So;0;ON;;;;;N;;;;; 1FB97;HEAVY HORIZONTAL FILL;So;0;ON;;;;;N;;;;; 1FB98;UPPER LEFT TO LOWER RIGHT FILL;So;0;ON;;;;;N;;;;; 1FB99;UPPER RIGHT TO LOWER LEFT FILL;So;0;ON;;;;;N;;;;; 1FB9A;UPPER AND LOWER TRIANGULAR HALF BLOCK;So;0;ON;;;;;N;;;;; 1FB9B;LEFT AND RIGHT TRIANGULAR HALF BLOCK;So;0;ON;;;;;N;;;;; 1FB9C;UPPER LEFT TRIANGULAR MEDIUM SHADE;So;0;ON;;;;;N;;;;; 1FB9D;UPPER RIGHT TRIANGULAR MEDIUM SHADE;So;0;ON;;;;;N;;;;; 1FB9E;LOWER RIGHT TRIANGULAR MEDIUM SHADE;So;0;ON;;;;;N;;;;; 1FB9F;LOWER LEFT TRIANGULAR MEDIUM SHADE;So;0;ON;;;;;N;;;;; 1FBA0;BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT;So;0;ON;;;;;N;;;;; 1FBA1;BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT;So;0;ON;;;;;N;;;;; 1FBA2;BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO LOWER CENTRE;So;0;ON;;;;;N;;;;; 1FBA3;BOX DRAWINGS LIGHT DIAGONAL MIDDLE RIGHT TO LOWER CENTRE;So;0;ON;;;;;N;;;;; 1FBA4;BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT TO LOWER CENTRE;So;0;ON;;;;;N;;;;; 1FBA5;BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT TO LOWER CENTRE;So;0;ON;;;;;N;;;;; 1FBA6;BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO LOWER CENTRE TO MIDDLE RIGHT;So;0;ON;;;;;N;;;;; 1FBA7;BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO UPPER CENTRE TO MIDDLE RIGHT;So;0;ON;;;;;N;;;;; 1FBA8;BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT AND MIDDLE RIGHT TO LOWER CENTRE;So;0;ON;;;;;N;;;;; 1FBA9;BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT AND MIDDLE LEFT TO LOWER CENTRE;So;0;ON;;;;;N;;;;; 1FBAA;BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT TO LOWER CENTRE TO MIDDLE LEFT;So;0;ON;;;;;N;;;;; 1FBAB;BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT TO LOWER CENTRE TO MIDDLE RIGHT;So;0;ON;;;;;N;;;;; 1FBAC;BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO UPPER CENTRE TO MIDDLE RIGHT TO LOWER CENTRE;So;0;ON;;;;;N;;;;; 1FBAD;BOX DRAWINGS LIGHT DIAGONAL MIDDLE RIGHT TO UPPER CENTRE TO MIDDLE LEFT TO LOWER CENTRE;So;0;ON;;;;;N;;;;; 1FBAE;BOX DRAWINGS LIGHT DIAGONAL DIAMOND;So;0;ON;;;;;N;;;;; 1FBAF;BOX DRAWINGS LIGHT HORIZONTAL WITH VERTICAL STROKE;So;0;ON;;;;;N;;;;; 1FBB0;ARROWHEAD-SHAPED POINTER;So;0;ON;;;;;N;;;;; 1FBB1;INVERSE CHECK MARK;So;0;ON;;;;;N;;;;; 1FBB2;LEFT HALF RUNNING MAN;So;0;ON;;;;;N;;;;; 1FBB3;RIGHT HALF RUNNING MAN;So;0;ON;;;;;N;;;;; 1FBB4;INVERSE DOWNWARDS ARROW WITH TIP LEFTWARDS;So;0;ON;;;;;N;;;;; 1FBB5;LEFTWARDS ARROW AND UPPER AND LOWER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;; 1FBB6;RIGHTWARDS ARROW AND UPPER AND LOWER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;; 1FBB7;DOWNWARDS ARROW AND RIGHT ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;; 1FBB8;UPWARDS ARROW AND RIGHT ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;; 1FBB9;LEFT HALF FOLDER;So;0;ON;;;;;N;;;;; 1FBBA;RIGHT HALF FOLDER;So;0;ON;;;;;N;;;;; 1FBBB;VOIDED GREEK CROSS;So;0;ON;;;;;N;;;;; 1FBBC;RIGHT OPEN SQUARED DOT;So;0;ON;;;;;N;;;;; 1FBBD;NEGATIVE DIAGONAL CROSS;So;0;ON;;;;;N;;;;; 1FBBE;NEGATIVE DIAGONAL MIDDLE RIGHT TO LOWER CENTRE;So;0;ON;;;;;N;;;;; 1FBBF;NEGATIVE DIAGONAL DIAMOND;So;0;ON;;;;;N;;;;; 1FBC0;WHITE HEAVY SALTIRE WITH ROUNDED CORNERS;So;0;ON;;;;;N;;;;; 1FBC1;LEFT THIRD WHITE RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;; 1FBC2;MIDDLE THIRD WHITE RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;; 1FBC3;RIGHT THIRD WHITE RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;; 1FBC4;NEGATIVE SQUARED QUESTION MARK;So;0;ON;;;;;N;;;;; 1FBC5;STICK FIGURE;So;0;ON;;;;;N;;;;; 1FBC6;STICK FIGURE WITH ARMS RAISED;So;0;ON;;;;;N;;;;; 1FBC7;STICK FIGURE LEANING LEFT;So;0;ON;;;;;N;;;;; 1FBC8;STICK FIGURE LEANING RIGHT;So;0;ON;;;;;N;;;;; 1FBC9;STICK FIGURE WITH DRESS;So;0;ON;;;;;N;;;;; 1FBCA;WHITE UP-POINTING CHEVRON;So;0;ON;;;;;N;;;;; 1FBF0;SEGMENTED DIGIT ZERO;Nd;0;EN; 0030;0;0;0;N;;;;; 1FBF1;SEGMENTED DIGIT ONE;Nd;0;EN; 0031;1;1;1;N;;;;; 1FBF2;SEGMENTED DIGIT TWO;Nd;0;EN; 0032;2;2;2;N;;;;; 1FBF3;SEGMENTED DIGIT THREE;Nd;0;EN; 0033;3;3;3;N;;;;; 1FBF4;SEGMENTED DIGIT FOUR;Nd;0;EN; 0034;4;4;4;N;;;;; 1FBF5;SEGMENTED DIGIT FIVE;Nd;0;EN; 0035;5;5;5;N;;;;; 1FBF6;SEGMENTED DIGIT SIX;Nd;0;EN; 0036;6;6;6;N;;;;; 1FBF7;SEGMENTED DIGIT SEVEN;Nd;0;EN; 0037;7;7;7;N;;;;; 1FBF8;SEGMENTED DIGIT EIGHT;Nd;0;EN; 0038;8;8;8;N;;;;; 1FBF9;SEGMENTED DIGIT NINE;Nd;0;EN; 0039;9;9;9;N;;;;; 20000;;Lo;0;L;;;;;N;;;;; 2A6DF;;Lo;0;L;;;;;N;;;;; 2A700;;Lo;0;L;;;;;N;;;;; 2B738;;Lo;0;L;;;;;N;;;;; 2B740;;Lo;0;L;;;;;N;;;;; 2B81D;;Lo;0;L;;;;;N;;;;; 2B820;;Lo;0;L;;;;;N;;;;; 2CEA1;;Lo;0;L;;;;;N;;;;; 2CEB0;;Lo;0;L;;;;;N;;;;; 2EBE0;;Lo;0;L;;;;;N;;;;; 2F800;CJK COMPATIBILITY IDEOGRAPH-2F800;Lo;0;L;4E3D;;;;N;;;;; 2F801;CJK COMPATIBILITY IDEOGRAPH-2F801;Lo;0;L;4E38;;;;N;;;;; 2F802;CJK COMPATIBILITY IDEOGRAPH-2F802;Lo;0;L;4E41;;;;N;;;;; 2F803;CJK COMPATIBILITY IDEOGRAPH-2F803;Lo;0;L;20122;;;;N;;;;; 2F804;CJK COMPATIBILITY IDEOGRAPH-2F804;Lo;0;L;4F60;;;;N;;;;; 2F805;CJK COMPATIBILITY IDEOGRAPH-2F805;Lo;0;L;4FAE;;;;N;;;;; 2F806;CJK COMPATIBILITY IDEOGRAPH-2F806;Lo;0;L;4FBB;;;;N;;;;; 2F807;CJK COMPATIBILITY IDEOGRAPH-2F807;Lo;0;L;5002;;;;N;;;;; 2F808;CJK COMPATIBILITY IDEOGRAPH-2F808;Lo;0;L;507A;;;;N;;;;; 2F809;CJK COMPATIBILITY IDEOGRAPH-2F809;Lo;0;L;5099;;;;N;;;;; 2F80A;CJK COMPATIBILITY IDEOGRAPH-2F80A;Lo;0;L;50E7;;;;N;;;;; 2F80B;CJK COMPATIBILITY IDEOGRAPH-2F80B;Lo;0;L;50CF;;;;N;;;;; 2F80C;CJK COMPATIBILITY IDEOGRAPH-2F80C;Lo;0;L;349E;;;;N;;;;; 2F80D;CJK COMPATIBILITY IDEOGRAPH-2F80D;Lo;0;L;2063A;;;;N;;;;; 2F80E;CJK COMPATIBILITY IDEOGRAPH-2F80E;Lo;0;L;514D;;;;N;;;;; 2F80F;CJK COMPATIBILITY IDEOGRAPH-2F80F;Lo;0;L;5154;;;;N;;;;; 2F810;CJK COMPATIBILITY IDEOGRAPH-2F810;Lo;0;L;5164;;;;N;;;;; 2F811;CJK COMPATIBILITY IDEOGRAPH-2F811;Lo;0;L;5177;;;;N;;;;; 2F812;CJK COMPATIBILITY IDEOGRAPH-2F812;Lo;0;L;2051C;;;;N;;;;; 2F813;CJK COMPATIBILITY IDEOGRAPH-2F813;Lo;0;L;34B9;;;;N;;;;; 2F814;CJK COMPATIBILITY IDEOGRAPH-2F814;Lo;0;L;5167;;;;N;;;;; 2F815;CJK COMPATIBILITY IDEOGRAPH-2F815;Lo;0;L;518D;;;;N;;;;; 2F816;CJK COMPATIBILITY IDEOGRAPH-2F816;Lo;0;L;2054B;;;;N;;;;; 2F817;CJK COMPATIBILITY IDEOGRAPH-2F817;Lo;0;L;5197;;;;N;;;;; 2F818;CJK COMPATIBILITY IDEOGRAPH-2F818;Lo;0;L;51A4;;;;N;;;;; 2F819;CJK COMPATIBILITY IDEOGRAPH-2F819;Lo;0;L;4ECC;;;;N;;;;; 2F81A;CJK COMPATIBILITY IDEOGRAPH-2F81A;Lo;0;L;51AC;;;;N;;;;; 2F81B;CJK COMPATIBILITY IDEOGRAPH-2F81B;Lo;0;L;51B5;;;;N;;;;; 2F81C;CJK COMPATIBILITY IDEOGRAPH-2F81C;Lo;0;L;291DF;;;;N;;;;; 2F81D;CJK COMPATIBILITY IDEOGRAPH-2F81D;Lo;0;L;51F5;;;;N;;;;; 2F81E;CJK COMPATIBILITY IDEOGRAPH-2F81E;Lo;0;L;5203;;;;N;;;;; 2F81F;CJK COMPATIBILITY IDEOGRAPH-2F81F;Lo;0;L;34DF;;;;N;;;;; 2F820;CJK COMPATIBILITY IDEOGRAPH-2F820;Lo;0;L;523B;;;;N;;;;; 2F821;CJK COMPATIBILITY IDEOGRAPH-2F821;Lo;0;L;5246;;;;N;;;;; 2F822;CJK COMPATIBILITY IDEOGRAPH-2F822;Lo;0;L;5272;;;;N;;;;; 2F823;CJK COMPATIBILITY IDEOGRAPH-2F823;Lo;0;L;5277;;;;N;;;;; 2F824;CJK COMPATIBILITY IDEOGRAPH-2F824;Lo;0;L;3515;;;;N;;;;; 2F825;CJK COMPATIBILITY IDEOGRAPH-2F825;Lo;0;L;52C7;;;;N;;;;; 2F826;CJK COMPATIBILITY IDEOGRAPH-2F826;Lo;0;L;52C9;;;;N;;;;; 2F827;CJK COMPATIBILITY IDEOGRAPH-2F827;Lo;0;L;52E4;;;;N;;;;; 2F828;CJK COMPATIBILITY IDEOGRAPH-2F828;Lo;0;L;52FA;;;;N;;;;; 2F829;CJK COMPATIBILITY IDEOGRAPH-2F829;Lo;0;L;5305;;;;N;;;;; 2F82A;CJK COMPATIBILITY IDEOGRAPH-2F82A;Lo;0;L;5306;;;;N;;;;; 2F82B;CJK COMPATIBILITY IDEOGRAPH-2F82B;Lo;0;L;5317;;;;N;;;;; 2F82C;CJK COMPATIBILITY IDEOGRAPH-2F82C;Lo;0;L;5349;;;;N;;;;; 2F82D;CJK COMPATIBILITY IDEOGRAPH-2F82D;Lo;0;L;5351;;;;N;;;;; 2F82E;CJK COMPATIBILITY IDEOGRAPH-2F82E;Lo;0;L;535A;;;;N;;;;; 2F82F;CJK COMPATIBILITY IDEOGRAPH-2F82F;Lo;0;L;5373;;;;N;;;;; 2F830;CJK COMPATIBILITY IDEOGRAPH-2F830;Lo;0;L;537D;;;;N;;;;; 2F831;CJK COMPATIBILITY IDEOGRAPH-2F831;Lo;0;L;537F;;;;N;;;;; 2F832;CJK COMPATIBILITY IDEOGRAPH-2F832;Lo;0;L;537F;;;;N;;;;; 2F833;CJK COMPATIBILITY IDEOGRAPH-2F833;Lo;0;L;537F;;;;N;;;;; 2F834;CJK COMPATIBILITY IDEOGRAPH-2F834;Lo;0;L;20A2C;;;;N;;;;; 2F835;CJK COMPATIBILITY IDEOGRAPH-2F835;Lo;0;L;7070;;;;N;;;;; 2F836;CJK COMPATIBILITY IDEOGRAPH-2F836;Lo;0;L;53CA;;;;N;;;;; 2F837;CJK COMPATIBILITY IDEOGRAPH-2F837;Lo;0;L;53DF;;;;N;;;;; 2F838;CJK COMPATIBILITY IDEOGRAPH-2F838;Lo;0;L;20B63;;;;N;;;;; 2F839;CJK COMPATIBILITY IDEOGRAPH-2F839;Lo;0;L;53EB;;;;N;;;;; 2F83A;CJK COMPATIBILITY IDEOGRAPH-2F83A;Lo;0;L;53F1;;;;N;;;;; 2F83B;CJK COMPATIBILITY IDEOGRAPH-2F83B;Lo;0;L;5406;;;;N;;;;; 2F83C;CJK COMPATIBILITY IDEOGRAPH-2F83C;Lo;0;L;549E;;;;N;;;;; 2F83D;CJK COMPATIBILITY IDEOGRAPH-2F83D;Lo;0;L;5438;;;;N;;;;; 2F83E;CJK COMPATIBILITY IDEOGRAPH-2F83E;Lo;0;L;5448;;;;N;;;;; 2F83F;CJK COMPATIBILITY IDEOGRAPH-2F83F;Lo;0;L;5468;;;;N;;;;; 2F840;CJK COMPATIBILITY IDEOGRAPH-2F840;Lo;0;L;54A2;;;;N;;;;; 2F841;CJK COMPATIBILITY IDEOGRAPH-2F841;Lo;0;L;54F6;;;;N;;;;; 2F842;CJK COMPATIBILITY IDEOGRAPH-2F842;Lo;0;L;5510;;;;N;;;;; 2F843;CJK COMPATIBILITY IDEOGRAPH-2F843;Lo;0;L;5553;;;;N;;;;; 2F844;CJK COMPATIBILITY IDEOGRAPH-2F844;Lo;0;L;5563;;;;N;;;;; 2F845;CJK COMPATIBILITY IDEOGRAPH-2F845;Lo;0;L;5584;;;;N;;;;; 2F846;CJK COMPATIBILITY IDEOGRAPH-2F846;Lo;0;L;5584;;;;N;;;;; 2F847;CJK COMPATIBILITY IDEOGRAPH-2F847;Lo;0;L;5599;;;;N;;;;; 2F848;CJK COMPATIBILITY IDEOGRAPH-2F848;Lo;0;L;55AB;;;;N;;;;; 2F849;CJK COMPATIBILITY IDEOGRAPH-2F849;Lo;0;L;55B3;;;;N;;;;; 2F84A;CJK COMPATIBILITY IDEOGRAPH-2F84A;Lo;0;L;55C2;;;;N;;;;; 2F84B;CJK COMPATIBILITY IDEOGRAPH-2F84B;Lo;0;L;5716;;;;N;;;;; 2F84C;CJK COMPATIBILITY IDEOGRAPH-2F84C;Lo;0;L;5606;;;;N;;;;; 2F84D;CJK COMPATIBILITY IDEOGRAPH-2F84D;Lo;0;L;5717;;;;N;;;;; 2F84E;CJK COMPATIBILITY IDEOGRAPH-2F84E;Lo;0;L;5651;;;;N;;;;; 2F84F;CJK COMPATIBILITY IDEOGRAPH-2F84F;Lo;0;L;5674;;;;N;;;;; 2F850;CJK COMPATIBILITY IDEOGRAPH-2F850;Lo;0;L;5207;;;;N;;;;; 2F851;CJK COMPATIBILITY IDEOGRAPH-2F851;Lo;0;L;58EE;;;;N;;;;; 2F852;CJK COMPATIBILITY IDEOGRAPH-2F852;Lo;0;L;57CE;;;;N;;;;; 2F853;CJK COMPATIBILITY IDEOGRAPH-2F853;Lo;0;L;57F4;;;;N;;;;; 2F854;CJK COMPATIBILITY IDEOGRAPH-2F854;Lo;0;L;580D;;;;N;;;;; 2F855;CJK COMPATIBILITY IDEOGRAPH-2F855;Lo;0;L;578B;;;;N;;;;; 2F856;CJK COMPATIBILITY IDEOGRAPH-2F856;Lo;0;L;5832;;;;N;;;;; 2F857;CJK COMPATIBILITY IDEOGRAPH-2F857;Lo;0;L;5831;;;;N;;;;; 2F858;CJK COMPATIBILITY IDEOGRAPH-2F858;Lo;0;L;58AC;;;;N;;;;; 2F859;CJK COMPATIBILITY IDEOGRAPH-2F859;Lo;0;L;214E4;;;;N;;;;; 2F85A;CJK COMPATIBILITY IDEOGRAPH-2F85A;Lo;0;L;58F2;;;;N;;;;; 2F85B;CJK COMPATIBILITY IDEOGRAPH-2F85B;Lo;0;L;58F7;;;;N;;;;; 2F85C;CJK COMPATIBILITY IDEOGRAPH-2F85C;Lo;0;L;5906;;;;N;;;;; 2F85D;CJK COMPATIBILITY IDEOGRAPH-2F85D;Lo;0;L;591A;;;;N;;;;; 2F85E;CJK COMPATIBILITY IDEOGRAPH-2F85E;Lo;0;L;5922;;;;N;;;;; 2F85F;CJK COMPATIBILITY IDEOGRAPH-2F85F;Lo;0;L;5962;;;;N;;;;; 2F860;CJK COMPATIBILITY IDEOGRAPH-2F860;Lo;0;L;216A8;;;;N;;;;; 2F861;CJK COMPATIBILITY IDEOGRAPH-2F861;Lo;0;L;216EA;;;;N;;;;; 2F862;CJK COMPATIBILITY IDEOGRAPH-2F862;Lo;0;L;59EC;;;;N;;;;; 2F863;CJK COMPATIBILITY IDEOGRAPH-2F863;Lo;0;L;5A1B;;;;N;;;;; 2F864;CJK COMPATIBILITY IDEOGRAPH-2F864;Lo;0;L;5A27;;;;N;;;;; 2F865;CJK COMPATIBILITY IDEOGRAPH-2F865;Lo;0;L;59D8;;;;N;;;;; 2F866;CJK COMPATIBILITY IDEOGRAPH-2F866;Lo;0;L;5A66;;;;N;;;;; 2F867;CJK COMPATIBILITY IDEOGRAPH-2F867;Lo;0;L;36EE;;;;N;;;;; 2F868;CJK COMPATIBILITY IDEOGRAPH-2F868;Lo;0;L;36FC;;;;N;;;;; 2F869;CJK COMPATIBILITY IDEOGRAPH-2F869;Lo;0;L;5B08;;;;N;;;;; 2F86A;CJK COMPATIBILITY IDEOGRAPH-2F86A;Lo;0;L;5B3E;;;;N;;;;; 2F86B;CJK COMPATIBILITY IDEOGRAPH-2F86B;Lo;0;L;5B3E;;;;N;;;;; 2F86C;CJK COMPATIBILITY IDEOGRAPH-2F86C;Lo;0;L;219C8;;;;N;;;;; 2F86D;CJK COMPATIBILITY IDEOGRAPH-2F86D;Lo;0;L;5BC3;;;;N;;;;; 2F86E;CJK COMPATIBILITY IDEOGRAPH-2F86E;Lo;0;L;5BD8;;;;N;;;;; 2F86F;CJK COMPATIBILITY IDEOGRAPH-2F86F;Lo;0;L;5BE7;;;;N;;;;; 2F870;CJK COMPATIBILITY IDEOGRAPH-2F870;Lo;0;L;5BF3;;;;N;;;;; 2F871;CJK COMPATIBILITY IDEOGRAPH-2F871;Lo;0;L;21B18;;;;N;;;;; 2F872;CJK COMPATIBILITY IDEOGRAPH-2F872;Lo;0;L;5BFF;;;;N;;;;; 2F873;CJK COMPATIBILITY IDEOGRAPH-2F873;Lo;0;L;5C06;;;;N;;;;; 2F874;CJK COMPATIBILITY IDEOGRAPH-2F874;Lo;0;L;5F53;;;;N;;;;; 2F875;CJK COMPATIBILITY IDEOGRAPH-2F875;Lo;0;L;5C22;;;;N;;;;; 2F876;CJK COMPATIBILITY IDEOGRAPH-2F876;Lo;0;L;3781;;;;N;;;;; 2F877;CJK COMPATIBILITY IDEOGRAPH-2F877;Lo;0;L;5C60;;;;N;;;;; 2F878;CJK COMPATIBILITY IDEOGRAPH-2F878;Lo;0;L;5C6E;;;;N;;;;; 2F879;CJK COMPATIBILITY IDEOGRAPH-2F879;Lo;0;L;5CC0;;;;N;;;;; 2F87A;CJK COMPATIBILITY IDEOGRAPH-2F87A;Lo;0;L;5C8D;;;;N;;;;; 2F87B;CJK COMPATIBILITY IDEOGRAPH-2F87B;Lo;0;L;21DE4;;;;N;;;;; 2F87C;CJK COMPATIBILITY IDEOGRAPH-2F87C;Lo;0;L;5D43;;;;N;;;;; 2F87D;CJK COMPATIBILITY IDEOGRAPH-2F87D;Lo;0;L;21DE6;;;;N;;;;; 2F87E;CJK COMPATIBILITY IDEOGRAPH-2F87E;Lo;0;L;5D6E;;;;N;;;;; 2F87F;CJK COMPATIBILITY IDEOGRAPH-2F87F;Lo;0;L;5D6B;;;;N;;;;; 2F880;CJK COMPATIBILITY IDEOGRAPH-2F880;Lo;0;L;5D7C;;;;N;;;;; 2F881;CJK COMPATIBILITY IDEOGRAPH-2F881;Lo;0;L;5DE1;;;;N;;;;; 2F882;CJK COMPATIBILITY IDEOGRAPH-2F882;Lo;0;L;5DE2;;;;N;;;;; 2F883;CJK COMPATIBILITY IDEOGRAPH-2F883;Lo;0;L;382F;;;;N;;;;; 2F884;CJK COMPATIBILITY IDEOGRAPH-2F884;Lo;0;L;5DFD;;;;N;;;;; 2F885;CJK COMPATIBILITY IDEOGRAPH-2F885;Lo;0;L;5E28;;;;N;;;;; 2F886;CJK COMPATIBILITY IDEOGRAPH-2F886;Lo;0;L;5E3D;;;;N;;;;; 2F887;CJK COMPATIBILITY IDEOGRAPH-2F887;Lo;0;L;5E69;;;;N;;;;; 2F888;CJK COMPATIBILITY IDEOGRAPH-2F888;Lo;0;L;3862;;;;N;;;;; 2F889;CJK COMPATIBILITY IDEOGRAPH-2F889;Lo;0;L;22183;;;;N;;;;; 2F88A;CJK COMPATIBILITY IDEOGRAPH-2F88A;Lo;0;L;387C;;;;N;;;;; 2F88B;CJK COMPATIBILITY IDEOGRAPH-2F88B;Lo;0;L;5EB0;;;;N;;;;; 2F88C;CJK COMPATIBILITY IDEOGRAPH-2F88C;Lo;0;L;5EB3;;;;N;;;;; 2F88D;CJK COMPATIBILITY IDEOGRAPH-2F88D;Lo;0;L;5EB6;;;;N;;;;; 2F88E;CJK COMPATIBILITY IDEOGRAPH-2F88E;Lo;0;L;5ECA;;;;N;;;;; 2F88F;CJK COMPATIBILITY IDEOGRAPH-2F88F;Lo;0;L;2A392;;;;N;;;;; 2F890;CJK COMPATIBILITY IDEOGRAPH-2F890;Lo;0;L;5EFE;;;9;N;;;;; 2F891;CJK COMPATIBILITY IDEOGRAPH-2F891;Lo;0;L;22331;;;;N;;;;; 2F892;CJK COMPATIBILITY IDEOGRAPH-2F892;Lo;0;L;22331;;;;N;;;;; 2F893;CJK COMPATIBILITY IDEOGRAPH-2F893;Lo;0;L;8201;;;;N;;;;; 2F894;CJK COMPATIBILITY IDEOGRAPH-2F894;Lo;0;L;5F22;;;;N;;;;; 2F895;CJK COMPATIBILITY IDEOGRAPH-2F895;Lo;0;L;5F22;;;;N;;;;; 2F896;CJK COMPATIBILITY IDEOGRAPH-2F896;Lo;0;L;38C7;;;;N;;;;; 2F897;CJK COMPATIBILITY IDEOGRAPH-2F897;Lo;0;L;232B8;;;;N;;;;; 2F898;CJK COMPATIBILITY IDEOGRAPH-2F898;Lo;0;L;261DA;;;;N;;;;; 2F899;CJK COMPATIBILITY IDEOGRAPH-2F899;Lo;0;L;5F62;;;;N;;;;; 2F89A;CJK COMPATIBILITY IDEOGRAPH-2F89A;Lo;0;L;5F6B;;;;N;;;;; 2F89B;CJK COMPATIBILITY IDEOGRAPH-2F89B;Lo;0;L;38E3;;;;N;;;;; 2F89C;CJK COMPATIBILITY IDEOGRAPH-2F89C;Lo;0;L;5F9A;;;;N;;;;; 2F89D;CJK COMPATIBILITY IDEOGRAPH-2F89D;Lo;0;L;5FCD;;;;N;;;;; 2F89E;CJK COMPATIBILITY IDEOGRAPH-2F89E;Lo;0;L;5FD7;;;;N;;;;; 2F89F;CJK COMPATIBILITY IDEOGRAPH-2F89F;Lo;0;L;5FF9;;;;N;;;;; 2F8A0;CJK COMPATIBILITY IDEOGRAPH-2F8A0;Lo;0;L;6081;;;;N;;;;; 2F8A1;CJK COMPATIBILITY IDEOGRAPH-2F8A1;Lo;0;L;393A;;;;N;;;;; 2F8A2;CJK COMPATIBILITY IDEOGRAPH-2F8A2;Lo;0;L;391C;;;;N;;;;; 2F8A3;CJK COMPATIBILITY IDEOGRAPH-2F8A3;Lo;0;L;6094;;;;N;;;;; 2F8A4;CJK COMPATIBILITY IDEOGRAPH-2F8A4;Lo;0;L;226D4;;;;N;;;;; 2F8A5;CJK COMPATIBILITY IDEOGRAPH-2F8A5;Lo;0;L;60C7;;;;N;;;;; 2F8A6;CJK COMPATIBILITY IDEOGRAPH-2F8A6;Lo;0;L;6148;;;;N;;;;; 2F8A7;CJK COMPATIBILITY IDEOGRAPH-2F8A7;Lo;0;L;614C;;;;N;;;;; 2F8A8;CJK COMPATIBILITY IDEOGRAPH-2F8A8;Lo;0;L;614E;;;;N;;;;; 2F8A9;CJK COMPATIBILITY IDEOGRAPH-2F8A9;Lo;0;L;614C;;;;N;;;;; 2F8AA;CJK COMPATIBILITY IDEOGRAPH-2F8AA;Lo;0;L;617A;;;;N;;;;; 2F8AB;CJK COMPATIBILITY IDEOGRAPH-2F8AB;Lo;0;L;618E;;;;N;;;;; 2F8AC;CJK COMPATIBILITY IDEOGRAPH-2F8AC;Lo;0;L;61B2;;;;N;;;;; 2F8AD;CJK COMPATIBILITY IDEOGRAPH-2F8AD;Lo;0;L;61A4;;;;N;;;;; 2F8AE;CJK COMPATIBILITY IDEOGRAPH-2F8AE;Lo;0;L;61AF;;;;N;;;;; 2F8AF;CJK COMPATIBILITY IDEOGRAPH-2F8AF;Lo;0;L;61DE;;;;N;;;;; 2F8B0;CJK COMPATIBILITY IDEOGRAPH-2F8B0;Lo;0;L;61F2;;;;N;;;;; 2F8B1;CJK COMPATIBILITY IDEOGRAPH-2F8B1;Lo;0;L;61F6;;;;N;;;;; 2F8B2;CJK COMPATIBILITY IDEOGRAPH-2F8B2;Lo;0;L;6210;;;;N;;;;; 2F8B3;CJK COMPATIBILITY IDEOGRAPH-2F8B3;Lo;0;L;621B;;;;N;;;;; 2F8B4;CJK COMPATIBILITY IDEOGRAPH-2F8B4;Lo;0;L;625D;;;;N;;;;; 2F8B5;CJK COMPATIBILITY IDEOGRAPH-2F8B5;Lo;0;L;62B1;;;;N;;;;; 2F8B6;CJK COMPATIBILITY IDEOGRAPH-2F8B6;Lo;0;L;62D4;;;;N;;;;; 2F8B7;CJK COMPATIBILITY IDEOGRAPH-2F8B7;Lo;0;L;6350;;;;N;;;;; 2F8B8;CJK COMPATIBILITY IDEOGRAPH-2F8B8;Lo;0;L;22B0C;;;;N;;;;; 2F8B9;CJK COMPATIBILITY IDEOGRAPH-2F8B9;Lo;0;L;633D;;;;N;;;;; 2F8BA;CJK COMPATIBILITY IDEOGRAPH-2F8BA;Lo;0;L;62FC;;;;N;;;;; 2F8BB;CJK COMPATIBILITY IDEOGRAPH-2F8BB;Lo;0;L;6368;;;;N;;;;; 2F8BC;CJK COMPATIBILITY IDEOGRAPH-2F8BC;Lo;0;L;6383;;;;N;;;;; 2F8BD;CJK COMPATIBILITY IDEOGRAPH-2F8BD;Lo;0;L;63E4;;;;N;;;;; 2F8BE;CJK COMPATIBILITY IDEOGRAPH-2F8BE;Lo;0;L;22BF1;;;;N;;;;; 2F8BF;CJK COMPATIBILITY IDEOGRAPH-2F8BF;Lo;0;L;6422;;;;N;;;;; 2F8C0;CJK COMPATIBILITY IDEOGRAPH-2F8C0;Lo;0;L;63C5;;;;N;;;;; 2F8C1;CJK COMPATIBILITY IDEOGRAPH-2F8C1;Lo;0;L;63A9;;;;N;;;;; 2F8C2;CJK COMPATIBILITY IDEOGRAPH-2F8C2;Lo;0;L;3A2E;;;;N;;;;; 2F8C3;CJK COMPATIBILITY IDEOGRAPH-2F8C3;Lo;0;L;6469;;;;N;;;;; 2F8C4;CJK COMPATIBILITY IDEOGRAPH-2F8C4;Lo;0;L;647E;;;;N;;;;; 2F8C5;CJK COMPATIBILITY IDEOGRAPH-2F8C5;Lo;0;L;649D;;;;N;;;;; 2F8C6;CJK COMPATIBILITY IDEOGRAPH-2F8C6;Lo;0;L;6477;;;;N;;;;; 2F8C7;CJK COMPATIBILITY IDEOGRAPH-2F8C7;Lo;0;L;3A6C;;;;N;;;;; 2F8C8;CJK COMPATIBILITY IDEOGRAPH-2F8C8;Lo;0;L;654F;;;;N;;;;; 2F8C9;CJK COMPATIBILITY IDEOGRAPH-2F8C9;Lo;0;L;656C;;;;N;;;;; 2F8CA;CJK COMPATIBILITY IDEOGRAPH-2F8CA;Lo;0;L;2300A;;;;N;;;;; 2F8CB;CJK COMPATIBILITY IDEOGRAPH-2F8CB;Lo;0;L;65E3;;;;N;;;;; 2F8CC;CJK COMPATIBILITY IDEOGRAPH-2F8CC;Lo;0;L;66F8;;;;N;;;;; 2F8CD;CJK COMPATIBILITY IDEOGRAPH-2F8CD;Lo;0;L;6649;;;;N;;;;; 2F8CE;CJK COMPATIBILITY IDEOGRAPH-2F8CE;Lo;0;L;3B19;;;;N;;;;; 2F8CF;CJK COMPATIBILITY IDEOGRAPH-2F8CF;Lo;0;L;6691;;;;N;;;;; 2F8D0;CJK COMPATIBILITY IDEOGRAPH-2F8D0;Lo;0;L;3B08;;;;N;;;;; 2F8D1;CJK COMPATIBILITY IDEOGRAPH-2F8D1;Lo;0;L;3AE4;;;;N;;;;; 2F8D2;CJK COMPATIBILITY IDEOGRAPH-2F8D2;Lo;0;L;5192;;;;N;;;;; 2F8D3;CJK COMPATIBILITY IDEOGRAPH-2F8D3;Lo;0;L;5195;;;;N;;;;; 2F8D4;CJK COMPATIBILITY IDEOGRAPH-2F8D4;Lo;0;L;6700;;;;N;;;;; 2F8D5;CJK COMPATIBILITY IDEOGRAPH-2F8D5;Lo;0;L;669C;;;;N;;;;; 2F8D6;CJK COMPATIBILITY IDEOGRAPH-2F8D6;Lo;0;L;80AD;;;;N;;;;; 2F8D7;CJK COMPATIBILITY IDEOGRAPH-2F8D7;Lo;0;L;43D9;;;;N;;;;; 2F8D8;CJK COMPATIBILITY IDEOGRAPH-2F8D8;Lo;0;L;6717;;;;N;;;;; 2F8D9;CJK COMPATIBILITY IDEOGRAPH-2F8D9;Lo;0;L;671B;;;;N;;;;; 2F8DA;CJK COMPATIBILITY IDEOGRAPH-2F8DA;Lo;0;L;6721;;;;N;;;;; 2F8DB;CJK COMPATIBILITY IDEOGRAPH-2F8DB;Lo;0;L;675E;;;;N;;;;; 2F8DC;CJK COMPATIBILITY IDEOGRAPH-2F8DC;Lo;0;L;6753;;;;N;;;;; 2F8DD;CJK COMPATIBILITY IDEOGRAPH-2F8DD;Lo;0;L;233C3;;;;N;;;;; 2F8DE;CJK COMPATIBILITY IDEOGRAPH-2F8DE;Lo;0;L;3B49;;;;N;;;;; 2F8DF;CJK COMPATIBILITY IDEOGRAPH-2F8DF;Lo;0;L;67FA;;;;N;;;;; 2F8E0;CJK COMPATIBILITY IDEOGRAPH-2F8E0;Lo;0;L;6785;;;;N;;;;; 2F8E1;CJK COMPATIBILITY IDEOGRAPH-2F8E1;Lo;0;L;6852;;;;N;;;;; 2F8E2;CJK COMPATIBILITY IDEOGRAPH-2F8E2;Lo;0;L;6885;;;;N;;;;; 2F8E3;CJK COMPATIBILITY IDEOGRAPH-2F8E3;Lo;0;L;2346D;;;;N;;;;; 2F8E4;CJK COMPATIBILITY IDEOGRAPH-2F8E4;Lo;0;L;688E;;;;N;;;;; 2F8E5;CJK COMPATIBILITY IDEOGRAPH-2F8E5;Lo;0;L;681F;;;;N;;;;; 2F8E6;CJK COMPATIBILITY IDEOGRAPH-2F8E6;Lo;0;L;6914;;;;N;;;;; 2F8E7;CJK COMPATIBILITY IDEOGRAPH-2F8E7;Lo;0;L;3B9D;;;;N;;;;; 2F8E8;CJK COMPATIBILITY IDEOGRAPH-2F8E8;Lo;0;L;6942;;;;N;;;;; 2F8E9;CJK COMPATIBILITY IDEOGRAPH-2F8E9;Lo;0;L;69A3;;;;N;;;;; 2F8EA;CJK COMPATIBILITY IDEOGRAPH-2F8EA;Lo;0;L;69EA;;;;N;;;;; 2F8EB;CJK COMPATIBILITY IDEOGRAPH-2F8EB;Lo;0;L;6AA8;;;;N;;;;; 2F8EC;CJK COMPATIBILITY IDEOGRAPH-2F8EC;Lo;0;L;236A3;;;;N;;;;; 2F8ED;CJK COMPATIBILITY IDEOGRAPH-2F8ED;Lo;0;L;6ADB;;;;N;;;;; 2F8EE;CJK COMPATIBILITY IDEOGRAPH-2F8EE;Lo;0;L;3C18;;;;N;;;;; 2F8EF;CJK COMPATIBILITY IDEOGRAPH-2F8EF;Lo;0;L;6B21;;;;N;;;;; 2F8F0;CJK COMPATIBILITY IDEOGRAPH-2F8F0;Lo;0;L;238A7;;;;N;;;;; 2F8F1;CJK COMPATIBILITY IDEOGRAPH-2F8F1;Lo;0;L;6B54;;;;N;;;;; 2F8F2;CJK COMPATIBILITY IDEOGRAPH-2F8F2;Lo;0;L;3C4E;;;;N;;;;; 2F8F3;CJK COMPATIBILITY IDEOGRAPH-2F8F3;Lo;0;L;6B72;;;;N;;;;; 2F8F4;CJK COMPATIBILITY IDEOGRAPH-2F8F4;Lo;0;L;6B9F;;;;N;;;;; 2F8F5;CJK COMPATIBILITY IDEOGRAPH-2F8F5;Lo;0;L;6BBA;;;;N;;;;; 2F8F6;CJK COMPATIBILITY IDEOGRAPH-2F8F6;Lo;0;L;6BBB;;;;N;;;;; 2F8F7;CJK COMPATIBILITY IDEOGRAPH-2F8F7;Lo;0;L;23A8D;;;;N;;;;; 2F8F8;CJK COMPATIBILITY IDEOGRAPH-2F8F8;Lo;0;L;21D0B;;;;N;;;;; 2F8F9;CJK COMPATIBILITY IDEOGRAPH-2F8F9;Lo;0;L;23AFA;;;;N;;;;; 2F8FA;CJK COMPATIBILITY IDEOGRAPH-2F8FA;Lo;0;L;6C4E;;;;N;;;;; 2F8FB;CJK COMPATIBILITY IDEOGRAPH-2F8FB;Lo;0;L;23CBC;;;;N;;;;; 2F8FC;CJK COMPATIBILITY IDEOGRAPH-2F8FC;Lo;0;L;6CBF;;;;N;;;;; 2F8FD;CJK COMPATIBILITY IDEOGRAPH-2F8FD;Lo;0;L;6CCD;;;;N;;;;; 2F8FE;CJK COMPATIBILITY IDEOGRAPH-2F8FE;Lo;0;L;6C67;;;;N;;;;; 2F8FF;CJK COMPATIBILITY IDEOGRAPH-2F8FF;Lo;0;L;6D16;;;;N;;;;; 2F900;CJK COMPATIBILITY IDEOGRAPH-2F900;Lo;0;L;6D3E;;;;N;;;;; 2F901;CJK COMPATIBILITY IDEOGRAPH-2F901;Lo;0;L;6D77;;;;N;;;;; 2F902;CJK COMPATIBILITY IDEOGRAPH-2F902;Lo;0;L;6D41;;;;N;;;;; 2F903;CJK COMPATIBILITY IDEOGRAPH-2F903;Lo;0;L;6D69;;;;N;;;;; 2F904;CJK COMPATIBILITY IDEOGRAPH-2F904;Lo;0;L;6D78;;;;N;;;;; 2F905;CJK COMPATIBILITY IDEOGRAPH-2F905;Lo;0;L;6D85;;;;N;;;;; 2F906;CJK COMPATIBILITY IDEOGRAPH-2F906;Lo;0;L;23D1E;;;;N;;;;; 2F907;CJK COMPATIBILITY IDEOGRAPH-2F907;Lo;0;L;6D34;;;;N;;;;; 2F908;CJK COMPATIBILITY IDEOGRAPH-2F908;Lo;0;L;6E2F;;;;N;;;;; 2F909;CJK COMPATIBILITY IDEOGRAPH-2F909;Lo;0;L;6E6E;;;;N;;;;; 2F90A;CJK COMPATIBILITY IDEOGRAPH-2F90A;Lo;0;L;3D33;;;;N;;;;; 2F90B;CJK COMPATIBILITY IDEOGRAPH-2F90B;Lo;0;L;6ECB;;;;N;;;;; 2F90C;CJK COMPATIBILITY IDEOGRAPH-2F90C;Lo;0;L;6EC7;;;;N;;;;; 2F90D;CJK COMPATIBILITY IDEOGRAPH-2F90D;Lo;0;L;23ED1;;;;N;;;;; 2F90E;CJK COMPATIBILITY IDEOGRAPH-2F90E;Lo;0;L;6DF9;;;;N;;;;; 2F90F;CJK COMPATIBILITY IDEOGRAPH-2F90F;Lo;0;L;6F6E;;;;N;;;;; 2F910;CJK COMPATIBILITY IDEOGRAPH-2F910;Lo;0;L;23F5E;;;;N;;;;; 2F911;CJK COMPATIBILITY IDEOGRAPH-2F911;Lo;0;L;23F8E;;;;N;;;;; 2F912;CJK COMPATIBILITY IDEOGRAPH-2F912;Lo;0;L;6FC6;;;;N;;;;; 2F913;CJK COMPATIBILITY IDEOGRAPH-2F913;Lo;0;L;7039;;;;N;;;;; 2F914;CJK COMPATIBILITY IDEOGRAPH-2F914;Lo;0;L;701E;;;;N;;;;; 2F915;CJK COMPATIBILITY IDEOGRAPH-2F915;Lo;0;L;701B;;;;N;;;;; 2F916;CJK COMPATIBILITY IDEOGRAPH-2F916;Lo;0;L;3D96;;;;N;;;;; 2F917;CJK COMPATIBILITY IDEOGRAPH-2F917;Lo;0;L;704A;;;;N;;;;; 2F918;CJK COMPATIBILITY IDEOGRAPH-2F918;Lo;0;L;707D;;;;N;;;;; 2F919;CJK COMPATIBILITY IDEOGRAPH-2F919;Lo;0;L;7077;;;;N;;;;; 2F91A;CJK COMPATIBILITY IDEOGRAPH-2F91A;Lo;0;L;70AD;;;;N;;;;; 2F91B;CJK COMPATIBILITY IDEOGRAPH-2F91B;Lo;0;L;20525;;;;N;;;;; 2F91C;CJK COMPATIBILITY IDEOGRAPH-2F91C;Lo;0;L;7145;;;;N;;;;; 2F91D;CJK COMPATIBILITY IDEOGRAPH-2F91D;Lo;0;L;24263;;;;N;;;;; 2F91E;CJK COMPATIBILITY IDEOGRAPH-2F91E;Lo;0;L;719C;;;;N;;;;; 2F91F;CJK COMPATIBILITY IDEOGRAPH-2F91F;Lo;0;L;243AB;;;;N;;;;; 2F920;CJK COMPATIBILITY IDEOGRAPH-2F920;Lo;0;L;7228;;;;N;;;;; 2F921;CJK COMPATIBILITY IDEOGRAPH-2F921;Lo;0;L;7235;;;;N;;;;; 2F922;CJK COMPATIBILITY IDEOGRAPH-2F922;Lo;0;L;7250;;;;N;;;;; 2F923;CJK COMPATIBILITY IDEOGRAPH-2F923;Lo;0;L;24608;;;;N;;;;; 2F924;CJK COMPATIBILITY IDEOGRAPH-2F924;Lo;0;L;7280;;;;N;;;;; 2F925;CJK COMPATIBILITY IDEOGRAPH-2F925;Lo;0;L;7295;;;;N;;;;; 2F926;CJK COMPATIBILITY IDEOGRAPH-2F926;Lo;0;L;24735;;;;N;;;;; 2F927;CJK COMPATIBILITY IDEOGRAPH-2F927;Lo;0;L;24814;;;;N;;;;; 2F928;CJK COMPATIBILITY IDEOGRAPH-2F928;Lo;0;L;737A;;;;N;;;;; 2F929;CJK COMPATIBILITY IDEOGRAPH-2F929;Lo;0;L;738B;;;;N;;;;; 2F92A;CJK COMPATIBILITY IDEOGRAPH-2F92A;Lo;0;L;3EAC;;;;N;;;;; 2F92B;CJK COMPATIBILITY IDEOGRAPH-2F92B;Lo;0;L;73A5;;;;N;;;;; 2F92C;CJK COMPATIBILITY IDEOGRAPH-2F92C;Lo;0;L;3EB8;;;;N;;;;; 2F92D;CJK COMPATIBILITY IDEOGRAPH-2F92D;Lo;0;L;3EB8;;;;N;;;;; 2F92E;CJK COMPATIBILITY IDEOGRAPH-2F92E;Lo;0;L;7447;;;;N;;;;; 2F92F;CJK COMPATIBILITY IDEOGRAPH-2F92F;Lo;0;L;745C;;;;N;;;;; 2F930;CJK COMPATIBILITY IDEOGRAPH-2F930;Lo;0;L;7471;;;;N;;;;; 2F931;CJK COMPATIBILITY IDEOGRAPH-2F931;Lo;0;L;7485;;;;N;;;;; 2F932;CJK COMPATIBILITY IDEOGRAPH-2F932;Lo;0;L;74CA;;;;N;;;;; 2F933;CJK COMPATIBILITY IDEOGRAPH-2F933;Lo;0;L;3F1B;;;;N;;;;; 2F934;CJK COMPATIBILITY IDEOGRAPH-2F934;Lo;0;L;7524;;;;N;;;;; 2F935;CJK COMPATIBILITY IDEOGRAPH-2F935;Lo;0;L;24C36;;;;N;;;;; 2F936;CJK COMPATIBILITY IDEOGRAPH-2F936;Lo;0;L;753E;;;;N;;;;; 2F937;CJK COMPATIBILITY IDEOGRAPH-2F937;Lo;0;L;24C92;;;;N;;;;; 2F938;CJK COMPATIBILITY IDEOGRAPH-2F938;Lo;0;L;7570;;;;N;;;;; 2F939;CJK COMPATIBILITY IDEOGRAPH-2F939;Lo;0;L;2219F;;;;N;;;;; 2F93A;CJK COMPATIBILITY IDEOGRAPH-2F93A;Lo;0;L;7610;;;;N;;;;; 2F93B;CJK COMPATIBILITY IDEOGRAPH-2F93B;Lo;0;L;24FA1;;;;N;;;;; 2F93C;CJK COMPATIBILITY IDEOGRAPH-2F93C;Lo;0;L;24FB8;;;;N;;;;; 2F93D;CJK COMPATIBILITY IDEOGRAPH-2F93D;Lo;0;L;25044;;;;N;;;;; 2F93E;CJK COMPATIBILITY IDEOGRAPH-2F93E;Lo;0;L;3FFC;;;;N;;;;; 2F93F;CJK COMPATIBILITY IDEOGRAPH-2F93F;Lo;0;L;4008;;;;N;;;;; 2F940;CJK COMPATIBILITY IDEOGRAPH-2F940;Lo;0;L;76F4;;;;N;;;;; 2F941;CJK COMPATIBILITY IDEOGRAPH-2F941;Lo;0;L;250F3;;;;N;;;;; 2F942;CJK COMPATIBILITY IDEOGRAPH-2F942;Lo;0;L;250F2;;;;N;;;;; 2F943;CJK COMPATIBILITY IDEOGRAPH-2F943;Lo;0;L;25119;;;;N;;;;; 2F944;CJK COMPATIBILITY IDEOGRAPH-2F944;Lo;0;L;25133;;;;N;;;;; 2F945;CJK COMPATIBILITY IDEOGRAPH-2F945;Lo;0;L;771E;;;;N;;;;; 2F946;CJK COMPATIBILITY IDEOGRAPH-2F946;Lo;0;L;771F;;;;N;;;;; 2F947;CJK COMPATIBILITY IDEOGRAPH-2F947;Lo;0;L;771F;;;;N;;;;; 2F948;CJK COMPATIBILITY IDEOGRAPH-2F948;Lo;0;L;774A;;;;N;;;;; 2F949;CJK COMPATIBILITY IDEOGRAPH-2F949;Lo;0;L;4039;;;;N;;;;; 2F94A;CJK COMPATIBILITY IDEOGRAPH-2F94A;Lo;0;L;778B;;;;N;;;;; 2F94B;CJK COMPATIBILITY IDEOGRAPH-2F94B;Lo;0;L;4046;;;;N;;;;; 2F94C;CJK COMPATIBILITY IDEOGRAPH-2F94C;Lo;0;L;4096;;;;N;;;;; 2F94D;CJK COMPATIBILITY IDEOGRAPH-2F94D;Lo;0;L;2541D;;;;N;;;;; 2F94E;CJK COMPATIBILITY IDEOGRAPH-2F94E;Lo;0;L;784E;;;;N;;;;; 2F94F;CJK COMPATIBILITY IDEOGRAPH-2F94F;Lo;0;L;788C;;;;N;;;;; 2F950;CJK COMPATIBILITY IDEOGRAPH-2F950;Lo;0;L;78CC;;;;N;;;;; 2F951;CJK COMPATIBILITY IDEOGRAPH-2F951;Lo;0;L;40E3;;;;N;;;;; 2F952;CJK COMPATIBILITY IDEOGRAPH-2F952;Lo;0;L;25626;;;;N;;;;; 2F953;CJK COMPATIBILITY IDEOGRAPH-2F953;Lo;0;L;7956;;;;N;;;;; 2F954;CJK COMPATIBILITY IDEOGRAPH-2F954;Lo;0;L;2569A;;;;N;;;;; 2F955;CJK COMPATIBILITY IDEOGRAPH-2F955;Lo;0;L;256C5;;;;N;;;;; 2F956;CJK COMPATIBILITY IDEOGRAPH-2F956;Lo;0;L;798F;;;;N;;;;; 2F957;CJK COMPATIBILITY IDEOGRAPH-2F957;Lo;0;L;79EB;;;;N;;;;; 2F958;CJK COMPATIBILITY IDEOGRAPH-2F958;Lo;0;L;412F;;;;N;;;;; 2F959;CJK COMPATIBILITY IDEOGRAPH-2F959;Lo;0;L;7A40;;;;N;;;;; 2F95A;CJK COMPATIBILITY IDEOGRAPH-2F95A;Lo;0;L;7A4A;;;;N;;;;; 2F95B;CJK COMPATIBILITY IDEOGRAPH-2F95B;Lo;0;L;7A4F;;;;N;;;;; 2F95C;CJK COMPATIBILITY IDEOGRAPH-2F95C;Lo;0;L;2597C;;;;N;;;;; 2F95D;CJK COMPATIBILITY IDEOGRAPH-2F95D;Lo;0;L;25AA7;;;;N;;;;; 2F95E;CJK COMPATIBILITY IDEOGRAPH-2F95E;Lo;0;L;25AA7;;;;N;;;;; 2F95F;CJK COMPATIBILITY IDEOGRAPH-2F95F;Lo;0;L;7AEE;;;;N;;;;; 2F960;CJK COMPATIBILITY IDEOGRAPH-2F960;Lo;0;L;4202;;;;N;;;;; 2F961;CJK COMPATIBILITY IDEOGRAPH-2F961;Lo;0;L;25BAB;;;;N;;;;; 2F962;CJK COMPATIBILITY IDEOGRAPH-2F962;Lo;0;L;7BC6;;;;N;;;;; 2F963;CJK COMPATIBILITY IDEOGRAPH-2F963;Lo;0;L;7BC9;;;;N;;;;; 2F964;CJK COMPATIBILITY IDEOGRAPH-2F964;Lo;0;L;4227;;;;N;;;;; 2F965;CJK COMPATIBILITY IDEOGRAPH-2F965;Lo;0;L;25C80;;;;N;;;;; 2F966;CJK COMPATIBILITY IDEOGRAPH-2F966;Lo;0;L;7CD2;;;;N;;;;; 2F967;CJK COMPATIBILITY IDEOGRAPH-2F967;Lo;0;L;42A0;;;;N;;;;; 2F968;CJK COMPATIBILITY IDEOGRAPH-2F968;Lo;0;L;7CE8;;;;N;;;;; 2F969;CJK COMPATIBILITY IDEOGRAPH-2F969;Lo;0;L;7CE3;;;;N;;;;; 2F96A;CJK COMPATIBILITY IDEOGRAPH-2F96A;Lo;0;L;7D00;;;;N;;;;; 2F96B;CJK COMPATIBILITY IDEOGRAPH-2F96B;Lo;0;L;25F86;;;;N;;;;; 2F96C;CJK COMPATIBILITY IDEOGRAPH-2F96C;Lo;0;L;7D63;;;;N;;;;; 2F96D;CJK COMPATIBILITY IDEOGRAPH-2F96D;Lo;0;L;4301;;;;N;;;;; 2F96E;CJK COMPATIBILITY IDEOGRAPH-2F96E;Lo;0;L;7DC7;;;;N;;;;; 2F96F;CJK COMPATIBILITY IDEOGRAPH-2F96F;Lo;0;L;7E02;;;;N;;;;; 2F970;CJK COMPATIBILITY IDEOGRAPH-2F970;Lo;0;L;7E45;;;;N;;;;; 2F971;CJK COMPATIBILITY IDEOGRAPH-2F971;Lo;0;L;4334;;;;N;;;;; 2F972;CJK COMPATIBILITY IDEOGRAPH-2F972;Lo;0;L;26228;;;;N;;;;; 2F973;CJK COMPATIBILITY IDEOGRAPH-2F973;Lo;0;L;26247;;;;N;;;;; 2F974;CJK COMPATIBILITY IDEOGRAPH-2F974;Lo;0;L;4359;;;;N;;;;; 2F975;CJK COMPATIBILITY IDEOGRAPH-2F975;Lo;0;L;262D9;;;;N;;;;; 2F976;CJK COMPATIBILITY IDEOGRAPH-2F976;Lo;0;L;7F7A;;;;N;;;;; 2F977;CJK COMPATIBILITY IDEOGRAPH-2F977;Lo;0;L;2633E;;;;N;;;;; 2F978;CJK COMPATIBILITY IDEOGRAPH-2F978;Lo;0;L;7F95;;;;N;;;;; 2F979;CJK COMPATIBILITY IDEOGRAPH-2F979;Lo;0;L;7FFA;;;;N;;;;; 2F97A;CJK COMPATIBILITY IDEOGRAPH-2F97A;Lo;0;L;8005;;;;N;;;;; 2F97B;CJK COMPATIBILITY IDEOGRAPH-2F97B;Lo;0;L;264DA;;;;N;;;;; 2F97C;CJK COMPATIBILITY IDEOGRAPH-2F97C;Lo;0;L;26523;;;;N;;;;; 2F97D;CJK COMPATIBILITY IDEOGRAPH-2F97D;Lo;0;L;8060;;;;N;;;;; 2F97E;CJK COMPATIBILITY IDEOGRAPH-2F97E;Lo;0;L;265A8;;;;N;;;;; 2F97F;CJK COMPATIBILITY IDEOGRAPH-2F97F;Lo;0;L;8070;;;;N;;;;; 2F980;CJK COMPATIBILITY IDEOGRAPH-2F980;Lo;0;L;2335F;;;;N;;;;; 2F981;CJK COMPATIBILITY IDEOGRAPH-2F981;Lo;0;L;43D5;;;;N;;;;; 2F982;CJK COMPATIBILITY IDEOGRAPH-2F982;Lo;0;L;80B2;;;;N;;;;; 2F983;CJK COMPATIBILITY IDEOGRAPH-2F983;Lo;0;L;8103;;;;N;;;;; 2F984;CJK COMPATIBILITY IDEOGRAPH-2F984;Lo;0;L;440B;;;;N;;;;; 2F985;CJK COMPATIBILITY IDEOGRAPH-2F985;Lo;0;L;813E;;;;N;;;;; 2F986;CJK COMPATIBILITY IDEOGRAPH-2F986;Lo;0;L;5AB5;;;;N;;;;; 2F987;CJK COMPATIBILITY IDEOGRAPH-2F987;Lo;0;L;267A7;;;;N;;;;; 2F988;CJK COMPATIBILITY IDEOGRAPH-2F988;Lo;0;L;267B5;;;;N;;;;; 2F989;CJK COMPATIBILITY IDEOGRAPH-2F989;Lo;0;L;23393;;;;N;;;;; 2F98A;CJK COMPATIBILITY IDEOGRAPH-2F98A;Lo;0;L;2339C;;;;N;;;;; 2F98B;CJK COMPATIBILITY IDEOGRAPH-2F98B;Lo;0;L;8201;;;;N;;;;; 2F98C;CJK COMPATIBILITY IDEOGRAPH-2F98C;Lo;0;L;8204;;;;N;;;;; 2F98D;CJK COMPATIBILITY IDEOGRAPH-2F98D;Lo;0;L;8F9E;;;;N;;;;; 2F98E;CJK COMPATIBILITY IDEOGRAPH-2F98E;Lo;0;L;446B;;;;N;;;;; 2F98F;CJK COMPATIBILITY IDEOGRAPH-2F98F;Lo;0;L;8291;;;;N;;;;; 2F990;CJK COMPATIBILITY IDEOGRAPH-2F990;Lo;0;L;828B;;;;N;;;;; 2F991;CJK COMPATIBILITY IDEOGRAPH-2F991;Lo;0;L;829D;;;;N;;;;; 2F992;CJK COMPATIBILITY IDEOGRAPH-2F992;Lo;0;L;52B3;;;;N;;;;; 2F993;CJK COMPATIBILITY IDEOGRAPH-2F993;Lo;0;L;82B1;;;;N;;;;; 2F994;CJK COMPATIBILITY IDEOGRAPH-2F994;Lo;0;L;82B3;;;;N;;;;; 2F995;CJK COMPATIBILITY IDEOGRAPH-2F995;Lo;0;L;82BD;;;;N;;;;; 2F996;CJK COMPATIBILITY IDEOGRAPH-2F996;Lo;0;L;82E6;;;;N;;;;; 2F997;CJK COMPATIBILITY IDEOGRAPH-2F997;Lo;0;L;26B3C;;;;N;;;;; 2F998;CJK COMPATIBILITY IDEOGRAPH-2F998;Lo;0;L;82E5;;;;N;;;;; 2F999;CJK COMPATIBILITY IDEOGRAPH-2F999;Lo;0;L;831D;;;;N;;;;; 2F99A;CJK COMPATIBILITY IDEOGRAPH-2F99A;Lo;0;L;8363;;;;N;;;;; 2F99B;CJK COMPATIBILITY IDEOGRAPH-2F99B;Lo;0;L;83AD;;;;N;;;;; 2F99C;CJK COMPATIBILITY IDEOGRAPH-2F99C;Lo;0;L;8323;;;;N;;;;; 2F99D;CJK COMPATIBILITY IDEOGRAPH-2F99D;Lo;0;L;83BD;;;;N;;;;; 2F99E;CJK COMPATIBILITY IDEOGRAPH-2F99E;Lo;0;L;83E7;;;;N;;;;; 2F99F;CJK COMPATIBILITY IDEOGRAPH-2F99F;Lo;0;L;8457;;;;N;;;;; 2F9A0;CJK COMPATIBILITY IDEOGRAPH-2F9A0;Lo;0;L;8353;;;;N;;;;; 2F9A1;CJK COMPATIBILITY IDEOGRAPH-2F9A1;Lo;0;L;83CA;;;;N;;;;; 2F9A2;CJK COMPATIBILITY IDEOGRAPH-2F9A2;Lo;0;L;83CC;;;;N;;;;; 2F9A3;CJK COMPATIBILITY IDEOGRAPH-2F9A3;Lo;0;L;83DC;;;;N;;;;; 2F9A4;CJK COMPATIBILITY IDEOGRAPH-2F9A4;Lo;0;L;26C36;;;;N;;;;; 2F9A5;CJK COMPATIBILITY IDEOGRAPH-2F9A5;Lo;0;L;26D6B;;;;N;;;;; 2F9A6;CJK COMPATIBILITY IDEOGRAPH-2F9A6;Lo;0;L;26CD5;;;;N;;;;; 2F9A7;CJK COMPATIBILITY IDEOGRAPH-2F9A7;Lo;0;L;452B;;;;N;;;;; 2F9A8;CJK COMPATIBILITY IDEOGRAPH-2F9A8;Lo;0;L;84F1;;;;N;;;;; 2F9A9;CJK COMPATIBILITY IDEOGRAPH-2F9A9;Lo;0;L;84F3;;;;N;;;;; 2F9AA;CJK COMPATIBILITY IDEOGRAPH-2F9AA;Lo;0;L;8516;;;;N;;;;; 2F9AB;CJK COMPATIBILITY IDEOGRAPH-2F9AB;Lo;0;L;273CA;;;;N;;;;; 2F9AC;CJK COMPATIBILITY IDEOGRAPH-2F9AC;Lo;0;L;8564;;;;N;;;;; 2F9AD;CJK COMPATIBILITY IDEOGRAPH-2F9AD;Lo;0;L;26F2C;;;;N;;;;; 2F9AE;CJK COMPATIBILITY IDEOGRAPH-2F9AE;Lo;0;L;455D;;;;N;;;;; 2F9AF;CJK COMPATIBILITY IDEOGRAPH-2F9AF;Lo;0;L;4561;;;;N;;;;; 2F9B0;CJK COMPATIBILITY IDEOGRAPH-2F9B0;Lo;0;L;26FB1;;;;N;;;;; 2F9B1;CJK COMPATIBILITY IDEOGRAPH-2F9B1;Lo;0;L;270D2;;;;N;;;;; 2F9B2;CJK COMPATIBILITY IDEOGRAPH-2F9B2;Lo;0;L;456B;;;;N;;;;; 2F9B3;CJK COMPATIBILITY IDEOGRAPH-2F9B3;Lo;0;L;8650;;;;N;;;;; 2F9B4;CJK COMPATIBILITY IDEOGRAPH-2F9B4;Lo;0;L;865C;;;;N;;;;; 2F9B5;CJK COMPATIBILITY IDEOGRAPH-2F9B5;Lo;0;L;8667;;;;N;;;;; 2F9B6;CJK COMPATIBILITY IDEOGRAPH-2F9B6;Lo;0;L;8669;;;;N;;;;; 2F9B7;CJK COMPATIBILITY IDEOGRAPH-2F9B7;Lo;0;L;86A9;;;;N;;;;; 2F9B8;CJK COMPATIBILITY IDEOGRAPH-2F9B8;Lo;0;L;8688;;;;N;;;;; 2F9B9;CJK COMPATIBILITY IDEOGRAPH-2F9B9;Lo;0;L;870E;;;;N;;;;; 2F9BA;CJK COMPATIBILITY IDEOGRAPH-2F9BA;Lo;0;L;86E2;;;;N;;;;; 2F9BB;CJK COMPATIBILITY IDEOGRAPH-2F9BB;Lo;0;L;8779;;;;N;;;;; 2F9BC;CJK COMPATIBILITY IDEOGRAPH-2F9BC;Lo;0;L;8728;;;;N;;;;; 2F9BD;CJK COMPATIBILITY IDEOGRAPH-2F9BD;Lo;0;L;876B;;;;N;;;;; 2F9BE;CJK COMPATIBILITY IDEOGRAPH-2F9BE;Lo;0;L;8786;;;;N;;;;; 2F9BF;CJK COMPATIBILITY IDEOGRAPH-2F9BF;Lo;0;L;45D7;;;;N;;;;; 2F9C0;CJK COMPATIBILITY IDEOGRAPH-2F9C0;Lo;0;L;87E1;;;;N;;;;; 2F9C1;CJK COMPATIBILITY IDEOGRAPH-2F9C1;Lo;0;L;8801;;;;N;;;;; 2F9C2;CJK COMPATIBILITY IDEOGRAPH-2F9C2;Lo;0;L;45F9;;;;N;;;;; 2F9C3;CJK COMPATIBILITY IDEOGRAPH-2F9C3;Lo;0;L;8860;;;;N;;;;; 2F9C4;CJK COMPATIBILITY IDEOGRAPH-2F9C4;Lo;0;L;8863;;;;N;;;;; 2F9C5;CJK COMPATIBILITY IDEOGRAPH-2F9C5;Lo;0;L;27667;;;;N;;;;; 2F9C6;CJK COMPATIBILITY IDEOGRAPH-2F9C6;Lo;0;L;88D7;;;;N;;;;; 2F9C7;CJK COMPATIBILITY IDEOGRAPH-2F9C7;Lo;0;L;88DE;;;;N;;;;; 2F9C8;CJK COMPATIBILITY IDEOGRAPH-2F9C8;Lo;0;L;4635;;;;N;;;;; 2F9C9;CJK COMPATIBILITY IDEOGRAPH-2F9C9;Lo;0;L;88FA;;;;N;;;;; 2F9CA;CJK COMPATIBILITY IDEOGRAPH-2F9CA;Lo;0;L;34BB;;;;N;;;;; 2F9CB;CJK COMPATIBILITY IDEOGRAPH-2F9CB;Lo;0;L;278AE;;;;N;;;;; 2F9CC;CJK COMPATIBILITY IDEOGRAPH-2F9CC;Lo;0;L;27966;;;;N;;;;; 2F9CD;CJK COMPATIBILITY IDEOGRAPH-2F9CD;Lo;0;L;46BE;;;;N;;;;; 2F9CE;CJK COMPATIBILITY IDEOGRAPH-2F9CE;Lo;0;L;46C7;;;;N;;;;; 2F9CF;CJK COMPATIBILITY IDEOGRAPH-2F9CF;Lo;0;L;8AA0;;;;N;;;;; 2F9D0;CJK COMPATIBILITY IDEOGRAPH-2F9D0;Lo;0;L;8AED;;;;N;;;;; 2F9D1;CJK COMPATIBILITY IDEOGRAPH-2F9D1;Lo;0;L;8B8A;;;;N;;;;; 2F9D2;CJK COMPATIBILITY IDEOGRAPH-2F9D2;Lo;0;L;8C55;;;;N;;;;; 2F9D3;CJK COMPATIBILITY IDEOGRAPH-2F9D3;Lo;0;L;27CA8;;;;N;;;;; 2F9D4;CJK COMPATIBILITY IDEOGRAPH-2F9D4;Lo;0;L;8CAB;;;;N;;;;; 2F9D5;CJK COMPATIBILITY IDEOGRAPH-2F9D5;Lo;0;L;8CC1;;;;N;;;;; 2F9D6;CJK COMPATIBILITY IDEOGRAPH-2F9D6;Lo;0;L;8D1B;;;;N;;;;; 2F9D7;CJK COMPATIBILITY IDEOGRAPH-2F9D7;Lo;0;L;8D77;;;;N;;;;; 2F9D8;CJK COMPATIBILITY IDEOGRAPH-2F9D8;Lo;0;L;27F2F;;;;N;;;;; 2F9D9;CJK COMPATIBILITY IDEOGRAPH-2F9D9;Lo;0;L;20804;;;;N;;;;; 2F9DA;CJK COMPATIBILITY IDEOGRAPH-2F9DA;Lo;0;L;8DCB;;;;N;;;;; 2F9DB;CJK COMPATIBILITY IDEOGRAPH-2F9DB;Lo;0;L;8DBC;;;;N;;;;; 2F9DC;CJK COMPATIBILITY IDEOGRAPH-2F9DC;Lo;0;L;8DF0;;;;N;;;;; 2F9DD;CJK COMPATIBILITY IDEOGRAPH-2F9DD;Lo;0;L;208DE;;;;N;;;;; 2F9DE;CJK COMPATIBILITY IDEOGRAPH-2F9DE;Lo;0;L;8ED4;;;;N;;;;; 2F9DF;CJK COMPATIBILITY IDEOGRAPH-2F9DF;Lo;0;L;8F38;;;;N;;;;; 2F9E0;CJK COMPATIBILITY IDEOGRAPH-2F9E0;Lo;0;L;285D2;;;;N;;;;; 2F9E1;CJK COMPATIBILITY IDEOGRAPH-2F9E1;Lo;0;L;285ED;;;;N;;;;; 2F9E2;CJK COMPATIBILITY IDEOGRAPH-2F9E2;Lo;0;L;9094;;;;N;;;;; 2F9E3;CJK COMPATIBILITY IDEOGRAPH-2F9E3;Lo;0;L;90F1;;;;N;;;;; 2F9E4;CJK COMPATIBILITY IDEOGRAPH-2F9E4;Lo;0;L;9111;;;;N;;;;; 2F9E5;CJK COMPATIBILITY IDEOGRAPH-2F9E5;Lo;0;L;2872E;;;;N;;;;; 2F9E6;CJK COMPATIBILITY IDEOGRAPH-2F9E6;Lo;0;L;911B;;;;N;;;;; 2F9E7;CJK COMPATIBILITY IDEOGRAPH-2F9E7;Lo;0;L;9238;;;;N;;;;; 2F9E8;CJK COMPATIBILITY IDEOGRAPH-2F9E8;Lo;0;L;92D7;;;;N;;;;; 2F9E9;CJK COMPATIBILITY IDEOGRAPH-2F9E9;Lo;0;L;92D8;;;;N;;;;; 2F9EA;CJK COMPATIBILITY IDEOGRAPH-2F9EA;Lo;0;L;927C;;;;N;;;;; 2F9EB;CJK COMPATIBILITY IDEOGRAPH-2F9EB;Lo;0;L;93F9;;;;N;;;;; 2F9EC;CJK COMPATIBILITY IDEOGRAPH-2F9EC;Lo;0;L;9415;;;;N;;;;; 2F9ED;CJK COMPATIBILITY IDEOGRAPH-2F9ED;Lo;0;L;28BFA;;;;N;;;;; 2F9EE;CJK COMPATIBILITY IDEOGRAPH-2F9EE;Lo;0;L;958B;;;;N;;;;; 2F9EF;CJK COMPATIBILITY IDEOGRAPH-2F9EF;Lo;0;L;4995;;;;N;;;;; 2F9F0;CJK COMPATIBILITY IDEOGRAPH-2F9F0;Lo;0;L;95B7;;;;N;;;;; 2F9F1;CJK COMPATIBILITY IDEOGRAPH-2F9F1;Lo;0;L;28D77;;;;N;;;;; 2F9F2;CJK COMPATIBILITY IDEOGRAPH-2F9F2;Lo;0;L;49E6;;;;N;;;;; 2F9F3;CJK COMPATIBILITY IDEOGRAPH-2F9F3;Lo;0;L;96C3;;;;N;;;;; 2F9F4;CJK COMPATIBILITY IDEOGRAPH-2F9F4;Lo;0;L;5DB2;;;;N;;;;; 2F9F5;CJK COMPATIBILITY IDEOGRAPH-2F9F5;Lo;0;L;9723;;;;N;;;;; 2F9F6;CJK COMPATIBILITY IDEOGRAPH-2F9F6;Lo;0;L;29145;;;;N;;;;; 2F9F7;CJK COMPATIBILITY IDEOGRAPH-2F9F7;Lo;0;L;2921A;;;;N;;;;; 2F9F8;CJK COMPATIBILITY IDEOGRAPH-2F9F8;Lo;0;L;4A6E;;;;N;;;;; 2F9F9;CJK COMPATIBILITY IDEOGRAPH-2F9F9;Lo;0;L;4A76;;;;N;;;;; 2F9FA;CJK COMPATIBILITY IDEOGRAPH-2F9FA;Lo;0;L;97E0;;;;N;;;;; 2F9FB;CJK COMPATIBILITY IDEOGRAPH-2F9FB;Lo;0;L;2940A;;;;N;;;;; 2F9FC;CJK COMPATIBILITY IDEOGRAPH-2F9FC;Lo;0;L;4AB2;;;;N;;;;; 2F9FD;CJK COMPATIBILITY IDEOGRAPH-2F9FD;Lo;0;L;29496;;;;N;;;;; 2F9FE;CJK COMPATIBILITY IDEOGRAPH-2F9FE;Lo;0;L;980B;;;;N;;;;; 2F9FF;CJK COMPATIBILITY IDEOGRAPH-2F9FF;Lo;0;L;980B;;;;N;;;;; 2FA00;CJK COMPATIBILITY IDEOGRAPH-2FA00;Lo;0;L;9829;;;;N;;;;; 2FA01;CJK COMPATIBILITY IDEOGRAPH-2FA01;Lo;0;L;295B6;;;;N;;;;; 2FA02;CJK COMPATIBILITY IDEOGRAPH-2FA02;Lo;0;L;98E2;;;;N;;;;; 2FA03;CJK COMPATIBILITY IDEOGRAPH-2FA03;Lo;0;L;4B33;;;;N;;;;; 2FA04;CJK COMPATIBILITY IDEOGRAPH-2FA04;Lo;0;L;9929;;;;N;;;;; 2FA05;CJK COMPATIBILITY IDEOGRAPH-2FA05;Lo;0;L;99A7;;;;N;;;;; 2FA06;CJK COMPATIBILITY IDEOGRAPH-2FA06;Lo;0;L;99C2;;;;N;;;;; 2FA07;CJK COMPATIBILITY IDEOGRAPH-2FA07;Lo;0;L;99FE;;;;N;;;;; 2FA08;CJK COMPATIBILITY IDEOGRAPH-2FA08;Lo;0;L;4BCE;;;;N;;;;; 2FA09;CJK COMPATIBILITY IDEOGRAPH-2FA09;Lo;0;L;29B30;;;;N;;;;; 2FA0A;CJK COMPATIBILITY IDEOGRAPH-2FA0A;Lo;0;L;9B12;;;;N;;;;; 2FA0B;CJK COMPATIBILITY IDEOGRAPH-2FA0B;Lo;0;L;9C40;;;;N;;;;; 2FA0C;CJK COMPATIBILITY IDEOGRAPH-2FA0C;Lo;0;L;9CFD;;;;N;;;;; 2FA0D;CJK COMPATIBILITY IDEOGRAPH-2FA0D;Lo;0;L;4CCE;;;;N;;;;; 2FA0E;CJK COMPATIBILITY IDEOGRAPH-2FA0E;Lo;0;L;4CED;;;;N;;;;; 2FA0F;CJK COMPATIBILITY IDEOGRAPH-2FA0F;Lo;0;L;9D67;;;;N;;;;; 2FA10;CJK COMPATIBILITY IDEOGRAPH-2FA10;Lo;0;L;2A0CE;;;;N;;;;; 2FA11;CJK COMPATIBILITY IDEOGRAPH-2FA11;Lo;0;L;4CF8;;;;N;;;;; 2FA12;CJK COMPATIBILITY IDEOGRAPH-2FA12;Lo;0;L;2A105;;;;N;;;;; 2FA13;CJK COMPATIBILITY IDEOGRAPH-2FA13;Lo;0;L;2A20E;;;;N;;;;; 2FA14;CJK COMPATIBILITY IDEOGRAPH-2FA14;Lo;0;L;2A291;;;;N;;;;; 2FA15;CJK COMPATIBILITY IDEOGRAPH-2FA15;Lo;0;L;9EBB;;;;N;;;;; 2FA16;CJK COMPATIBILITY IDEOGRAPH-2FA16;Lo;0;L;4D56;;;;N;;;;; 2FA17;CJK COMPATIBILITY IDEOGRAPH-2FA17;Lo;0;L;9EF9;;;;N;;;;; 2FA18;CJK COMPATIBILITY IDEOGRAPH-2FA18;Lo;0;L;9EFE;;;;N;;;;; 2FA19;CJK COMPATIBILITY IDEOGRAPH-2FA19;Lo;0;L;9F05;;;;N;;;;; 2FA1A;CJK COMPATIBILITY IDEOGRAPH-2FA1A;Lo;0;L;9F0F;;;;N;;;;; 2FA1B;CJK COMPATIBILITY IDEOGRAPH-2FA1B;Lo;0;L;9F16;;;;N;;;;; 2FA1C;CJK COMPATIBILITY IDEOGRAPH-2FA1C;Lo;0;L;9F3B;;;;N;;;;; 2FA1D;CJK COMPATIBILITY IDEOGRAPH-2FA1D;Lo;0;L;2A600;;;;N;;;;; 30000;;Lo;0;L;;;;;N;;;;; 3134A;;Lo;0;L;;;;;N;;;;; E0001;LANGUAGE TAG;Cf;0;BN;;;;;N;;;;; E0020;TAG SPACE;Cf;0;BN;;;;;N;;;;; E0021;TAG EXCLAMATION MARK;Cf;0;BN;;;;;N;;;;; E0022;TAG QUOTATION MARK;Cf;0;BN;;;;;N;;;;; E0023;TAG NUMBER SIGN;Cf;0;BN;;;;;N;;;;; E0024;TAG DOLLAR SIGN;Cf;0;BN;;;;;N;;;;; E0025;TAG PERCENT SIGN;Cf;0;BN;;;;;N;;;;; E0026;TAG AMPERSAND;Cf;0;BN;;;;;N;;;;; E0027;TAG APOSTROPHE;Cf;0;BN;;;;;N;;;;; E0028;TAG LEFT PARENTHESIS;Cf;0;BN;;;;;N;;;;; E0029;TAG RIGHT PARENTHESIS;Cf;0;BN;;;;;N;;;;; E002A;TAG ASTERISK;Cf;0;BN;;;;;N;;;;; E002B;TAG PLUS SIGN;Cf;0;BN;;;;;N;;;;; E002C;TAG COMMA;Cf;0;BN;;;;;N;;;;; E002D;TAG HYPHEN-MINUS;Cf;0;BN;;;;;N;;;;; E002E;TAG FULL STOP;Cf;0;BN;;;;;N;;;;; E002F;TAG SOLIDUS;Cf;0;BN;;;;;N;;;;; E0030;TAG DIGIT ZERO;Cf;0;BN;;;;;N;;;;; E0031;TAG DIGIT ONE;Cf;0;BN;;;;;N;;;;; E0032;TAG DIGIT TWO;Cf;0;BN;;;;;N;;;;; E0033;TAG DIGIT THREE;Cf;0;BN;;;;;N;;;;; E0034;TAG DIGIT FOUR;Cf;0;BN;;;;;N;;;;; E0035;TAG DIGIT FIVE;Cf;0;BN;;;;;N;;;;; E0036;TAG DIGIT SIX;Cf;0;BN;;;;;N;;;;; E0037;TAG DIGIT SEVEN;Cf;0;BN;;;;;N;;;;; E0038;TAG DIGIT EIGHT;Cf;0;BN;;;;;N;;;;; E0039;TAG DIGIT NINE;Cf;0;BN;;;;;N;;;;; E003A;TAG COLON;Cf;0;BN;;;;;N;;;;; E003B;TAG SEMICOLON;Cf;0;BN;;;;;N;;;;; E003C;TAG LESS-THAN SIGN;Cf;0;BN;;;;;N;;;;; E003D;TAG EQUALS SIGN;Cf;0;BN;;;;;N;;;;; E003E;TAG GREATER-THAN SIGN;Cf;0;BN;;;;;N;;;;; E003F;TAG QUESTION MARK;Cf;0;BN;;;;;N;;;;; E0040;TAG COMMERCIAL AT;Cf;0;BN;;;;;N;;;;; E0041;TAG LATIN CAPITAL LETTER A;Cf;0;BN;;;;;N;;;;; E0042;TAG LATIN CAPITAL LETTER B;Cf;0;BN;;;;;N;;;;; E0043;TAG LATIN CAPITAL LETTER C;Cf;0;BN;;;;;N;;;;; E0044;TAG LATIN CAPITAL LETTER D;Cf;0;BN;;;;;N;;;;; E0045;TAG LATIN CAPITAL LETTER E;Cf;0;BN;;;;;N;;;;; E0046;TAG LATIN CAPITAL LETTER F;Cf;0;BN;;;;;N;;;;; E0047;TAG LATIN CAPITAL LETTER G;Cf;0;BN;;;;;N;;;;; E0048;TAG LATIN CAPITAL LETTER H;Cf;0;BN;;;;;N;;;;; E0049;TAG LATIN CAPITAL LETTER I;Cf;0;BN;;;;;N;;;;; E004A;TAG LATIN CAPITAL LETTER J;Cf;0;BN;;;;;N;;;;; E004B;TAG LATIN CAPITAL LETTER K;Cf;0;BN;;;;;N;;;;; E004C;TAG LATIN CAPITAL LETTER L;Cf;0;BN;;;;;N;;;;; E004D;TAG LATIN CAPITAL LETTER M;Cf;0;BN;;;;;N;;;;; E004E;TAG LATIN CAPITAL LETTER N;Cf;0;BN;;;;;N;;;;; E004F;TAG LATIN CAPITAL LETTER O;Cf;0;BN;;;;;N;;;;; E0050;TAG LATIN CAPITAL LETTER P;Cf;0;BN;;;;;N;;;;; E0051;TAG LATIN CAPITAL LETTER Q;Cf;0;BN;;;;;N;;;;; E0052;TAG LATIN CAPITAL LETTER R;Cf;0;BN;;;;;N;;;;; E0053;TAG LATIN CAPITAL LETTER S;Cf;0;BN;;;;;N;;;;; E0054;TAG LATIN CAPITAL LETTER T;Cf;0;BN;;;;;N;;;;; E0055;TAG LATIN CAPITAL LETTER U;Cf;0;BN;;;;;N;;;;; E0056;TAG LATIN CAPITAL LETTER V;Cf;0;BN;;;;;N;;;;; E0057;TAG LATIN CAPITAL LETTER W;Cf;0;BN;;;;;N;;;;; E0058;TAG LATIN CAPITAL LETTER X;Cf;0;BN;;;;;N;;;;; E0059;TAG LATIN CAPITAL LETTER Y;Cf;0;BN;;;;;N;;;;; E005A;TAG LATIN CAPITAL LETTER Z;Cf;0;BN;;;;;N;;;;; E005B;TAG LEFT SQUARE BRACKET;Cf;0;BN;;;;;N;;;;; E005C;TAG REVERSE SOLIDUS;Cf;0;BN;;;;;N;;;;; E005D;TAG RIGHT SQUARE BRACKET;Cf;0;BN;;;;;N;;;;; E005E;TAG CIRCUMFLEX ACCENT;Cf;0;BN;;;;;N;;;;; E005F;TAG LOW LINE;Cf;0;BN;;;;;N;;;;; E0060;TAG GRAVE ACCENT;Cf;0;BN;;;;;N;;;;; E0061;TAG LATIN SMALL LETTER A;Cf;0;BN;;;;;N;;;;; E0062;TAG LATIN SMALL LETTER B;Cf;0;BN;;;;;N;;;;; E0063;TAG LATIN SMALL LETTER C;Cf;0;BN;;;;;N;;;;; E0064;TAG LATIN SMALL LETTER D;Cf;0;BN;;;;;N;;;;; E0065;TAG LATIN SMALL LETTER E;Cf;0;BN;;;;;N;;;;; E0066;TAG LATIN SMALL LETTER F;Cf;0;BN;;;;;N;;;;; E0067;TAG LATIN SMALL LETTER G;Cf;0;BN;;;;;N;;;;; E0068;TAG LATIN SMALL LETTER H;Cf;0;BN;;;;;N;;;;; E0069;TAG LATIN SMALL LETTER I;Cf;0;BN;;;;;N;;;;; E006A;TAG LATIN SMALL LETTER J;Cf;0;BN;;;;;N;;;;; E006B;TAG LATIN SMALL LETTER K;Cf;0;BN;;;;;N;;;;; E006C;TAG LATIN SMALL LETTER L;Cf;0;BN;;;;;N;;;;; E006D;TAG LATIN SMALL LETTER M;Cf;0;BN;;;;;N;;;;; E006E;TAG LATIN SMALL LETTER N;Cf;0;BN;;;;;N;;;;; E006F;TAG LATIN SMALL LETTER O;Cf;0;BN;;;;;N;;;;; E0070;TAG LATIN SMALL LETTER P;Cf;0;BN;;;;;N;;;;; E0071;TAG LATIN SMALL LETTER Q;Cf;0;BN;;;;;N;;;;; E0072;TAG LATIN SMALL LETTER R;Cf;0;BN;;;;;N;;;;; E0073;TAG LATIN SMALL LETTER S;Cf;0;BN;;;;;N;;;;; E0074;TAG LATIN SMALL LETTER T;Cf;0;BN;;;;;N;;;;; E0075;TAG LATIN SMALL LETTER U;Cf;0;BN;;;;;N;;;;; E0076;TAG LATIN SMALL LETTER V;Cf;0;BN;;;;;N;;;;; E0077;TAG LATIN SMALL LETTER W;Cf;0;BN;;;;;N;;;;; E0078;TAG LATIN SMALL LETTER X;Cf;0;BN;;;;;N;;;;; E0079;TAG LATIN SMALL LETTER Y;Cf;0;BN;;;;;N;;;;; E007A;TAG LATIN SMALL LETTER Z;Cf;0;BN;;;;;N;;;;; E007B;TAG LEFT CURLY BRACKET;Cf;0;BN;;;;;N;;;;; E007C;TAG VERTICAL LINE;Cf;0;BN;;;;;N;;;;; E007D;TAG RIGHT CURLY BRACKET;Cf;0;BN;;;;;N;;;;; E007E;TAG TILDE;Cf;0;BN;;;;;N;;;;; E007F;CANCEL TAG;Cf;0;BN;;;;;N;;;;; E0100;VARIATION SELECTOR-17;Mn;0;NSM;;;;;N;;;;; E0101;VARIATION SELECTOR-18;Mn;0;NSM;;;;;N;;;;; E0102;VARIATION SELECTOR-19;Mn;0;NSM;;;;;N;;;;; E0103;VARIATION SELECTOR-20;Mn;0;NSM;;;;;N;;;;; E0104;VARIATION SELECTOR-21;Mn;0;NSM;;;;;N;;;;; E0105;VARIATION SELECTOR-22;Mn;0;NSM;;;;;N;;;;; E0106;VARIATION SELECTOR-23;Mn;0;NSM;;;;;N;;;;; E0107;VARIATION SELECTOR-24;Mn;0;NSM;;;;;N;;;;; E0108;VARIATION SELECTOR-25;Mn;0;NSM;;;;;N;;;;; E0109;VARIATION SELECTOR-26;Mn;0;NSM;;;;;N;;;;; E010A;VARIATION SELECTOR-27;Mn;0;NSM;;;;;N;;;;; E010B;VARIATION SELECTOR-28;Mn;0;NSM;;;;;N;;;;; E010C;VARIATION SELECTOR-29;Mn;0;NSM;;;;;N;;;;; E010D;VARIATION SELECTOR-30;Mn;0;NSM;;;;;N;;;;; E010E;VARIATION SELECTOR-31;Mn;0;NSM;;;;;N;;;;; E010F;VARIATION SELECTOR-32;Mn;0;NSM;;;;;N;;;;; E0110;VARIATION SELECTOR-33;Mn;0;NSM;;;;;N;;;;; E0111;VARIATION SELECTOR-34;Mn;0;NSM;;;;;N;;;;; E0112;VARIATION SELECTOR-35;Mn;0;NSM;;;;;N;;;;; E0113;VARIATION SELECTOR-36;Mn;0;NSM;;;;;N;;;;; E0114;VARIATION SELECTOR-37;Mn;0;NSM;;;;;N;;;;; E0115;VARIATION SELECTOR-38;Mn;0;NSM;;;;;N;;;;; E0116;VARIATION SELECTOR-39;Mn;0;NSM;;;;;N;;;;; E0117;VARIATION SELECTOR-40;Mn;0;NSM;;;;;N;;;;; E0118;VARIATION SELECTOR-41;Mn;0;NSM;;;;;N;;;;; E0119;VARIATION SELECTOR-42;Mn;0;NSM;;;;;N;;;;; E011A;VARIATION SELECTOR-43;Mn;0;NSM;;;;;N;;;;; E011B;VARIATION SELECTOR-44;Mn;0;NSM;;;;;N;;;;; E011C;VARIATION SELECTOR-45;Mn;0;NSM;;;;;N;;;;; E011D;VARIATION SELECTOR-46;Mn;0;NSM;;;;;N;;;;; E011E;VARIATION SELECTOR-47;Mn;0;NSM;;;;;N;;;;; E011F;VARIATION SELECTOR-48;Mn;0;NSM;;;;;N;;;;; E0120;VARIATION SELECTOR-49;Mn;0;NSM;;;;;N;;;;; E0121;VARIATION SELECTOR-50;Mn;0;NSM;;;;;N;;;;; E0122;VARIATION SELECTOR-51;Mn;0;NSM;;;;;N;;;;; E0123;VARIATION SELECTOR-52;Mn;0;NSM;;;;;N;;;;; E0124;VARIATION SELECTOR-53;Mn;0;NSM;;;;;N;;;;; E0125;VARIATION SELECTOR-54;Mn;0;NSM;;;;;N;;;;; E0126;VARIATION SELECTOR-55;Mn;0;NSM;;;;;N;;;;; E0127;VARIATION SELECTOR-56;Mn;0;NSM;;;;;N;;;;; E0128;VARIATION SELECTOR-57;Mn;0;NSM;;;;;N;;;;; E0129;VARIATION SELECTOR-58;Mn;0;NSM;;;;;N;;;;; E012A;VARIATION SELECTOR-59;Mn;0;NSM;;;;;N;;;;; E012B;VARIATION SELECTOR-60;Mn;0;NSM;;;;;N;;;;; E012C;VARIATION SELECTOR-61;Mn;0;NSM;;;;;N;;;;; E012D;VARIATION SELECTOR-62;Mn;0;NSM;;;;;N;;;;; E012E;VARIATION SELECTOR-63;Mn;0;NSM;;;;;N;;;;; E012F;VARIATION SELECTOR-64;Mn;0;NSM;;;;;N;;;;; E0130;VARIATION SELECTOR-65;Mn;0;NSM;;;;;N;;;;; E0131;VARIATION SELECTOR-66;Mn;0;NSM;;;;;N;;;;; E0132;VARIATION SELECTOR-67;Mn;0;NSM;;;;;N;;;;; E0133;VARIATION SELECTOR-68;Mn;0;NSM;;;;;N;;;;; E0134;VARIATION SELECTOR-69;Mn;0;NSM;;;;;N;;;;; E0135;VARIATION SELECTOR-70;Mn;0;NSM;;;;;N;;;;; E0136;VARIATION SELECTOR-71;Mn;0;NSM;;;;;N;;;;; E0137;VARIATION SELECTOR-72;Mn;0;NSM;;;;;N;;;;; E0138;VARIATION SELECTOR-73;Mn;0;NSM;;;;;N;;;;; E0139;VARIATION SELECTOR-74;Mn;0;NSM;;;;;N;;;;; E013A;VARIATION SELECTOR-75;Mn;0;NSM;;;;;N;;;;; E013B;VARIATION SELECTOR-76;Mn;0;NSM;;;;;N;;;;; E013C;VARIATION SELECTOR-77;Mn;0;NSM;;;;;N;;;;; E013D;VARIATION SELECTOR-78;Mn;0;NSM;;;;;N;;;;; E013E;VARIATION SELECTOR-79;Mn;0;NSM;;;;;N;;;;; E013F;VARIATION SELECTOR-80;Mn;0;NSM;;;;;N;;;;; E0140;VARIATION SELECTOR-81;Mn;0;NSM;;;;;N;;;;; E0141;VARIATION SELECTOR-82;Mn;0;NSM;;;;;N;;;;; E0142;VARIATION SELECTOR-83;Mn;0;NSM;;;;;N;;;;; E0143;VARIATION SELECTOR-84;Mn;0;NSM;;;;;N;;;;; E0144;VARIATION SELECTOR-85;Mn;0;NSM;;;;;N;;;;; E0145;VARIATION SELECTOR-86;Mn;0;NSM;;;;;N;;;;; E0146;VARIATION SELECTOR-87;Mn;0;NSM;;;;;N;;;;; E0147;VARIATION SELECTOR-88;Mn;0;NSM;;;;;N;;;;; E0148;VARIATION SELECTOR-89;Mn;0;NSM;;;;;N;;;;; E0149;VARIATION SELECTOR-90;Mn;0;NSM;;;;;N;;;;; E014A;VARIATION SELECTOR-91;Mn;0;NSM;;;;;N;;;;; E014B;VARIATION SELECTOR-92;Mn;0;NSM;;;;;N;;;;; E014C;VARIATION SELECTOR-93;Mn;0;NSM;;;;;N;;;;; E014D;VARIATION SELECTOR-94;Mn;0;NSM;;;;;N;;;;; E014E;VARIATION SELECTOR-95;Mn;0;NSM;;;;;N;;;;; E014F;VARIATION SELECTOR-96;Mn;0;NSM;;;;;N;;;;; E0150;VARIATION SELECTOR-97;Mn;0;NSM;;;;;N;;;;; E0151;VARIATION SELECTOR-98;Mn;0;NSM;;;;;N;;;;; E0152;VARIATION SELECTOR-99;Mn;0;NSM;;;;;N;;;;; E0153;VARIATION SELECTOR-100;Mn;0;NSM;;;;;N;;;;; E0154;VARIATION SELECTOR-101;Mn;0;NSM;;;;;N;;;;; E0155;VARIATION SELECTOR-102;Mn;0;NSM;;;;;N;;;;; E0156;VARIATION SELECTOR-103;Mn;0;NSM;;;;;N;;;;; E0157;VARIATION SELECTOR-104;Mn;0;NSM;;;;;N;;;;; E0158;VARIATION SELECTOR-105;Mn;0;NSM;;;;;N;;;;; E0159;VARIATION SELECTOR-106;Mn;0;NSM;;;;;N;;;;; E015A;VARIATION SELECTOR-107;Mn;0;NSM;;;;;N;;;;; E015B;VARIATION SELECTOR-108;Mn;0;NSM;;;;;N;;;;; E015C;VARIATION SELECTOR-109;Mn;0;NSM;;;;;N;;;;; E015D;VARIATION SELECTOR-110;Mn;0;NSM;;;;;N;;;;; E015E;VARIATION SELECTOR-111;Mn;0;NSM;;;;;N;;;;; E015F;VARIATION SELECTOR-112;Mn;0;NSM;;;;;N;;;;; E0160;VARIATION SELECTOR-113;Mn;0;NSM;;;;;N;;;;; E0161;VARIATION SELECTOR-114;Mn;0;NSM;;;;;N;;;;; E0162;VARIATION SELECTOR-115;Mn;0;NSM;;;;;N;;;;; E0163;VARIATION SELECTOR-116;Mn;0;NSM;;;;;N;;;;; E0164;VARIATION SELECTOR-117;Mn;0;NSM;;;;;N;;;;; E0165;VARIATION SELECTOR-118;Mn;0;NSM;;;;;N;;;;; E0166;VARIATION SELECTOR-119;Mn;0;NSM;;;;;N;;;;; E0167;VARIATION SELECTOR-120;Mn;0;NSM;;;;;N;;;;; E0168;VARIATION SELECTOR-121;Mn;0;NSM;;;;;N;;;;; E0169;VARIATION SELECTOR-122;Mn;0;NSM;;;;;N;;;;; E016A;VARIATION SELECTOR-123;Mn;0;NSM;;;;;N;;;;; E016B;VARIATION SELECTOR-124;Mn;0;NSM;;;;;N;;;;; E016C;VARIATION SELECTOR-125;Mn;0;NSM;;;;;N;;;;; E016D;VARIATION SELECTOR-126;Mn;0;NSM;;;;;N;;;;; E016E;VARIATION SELECTOR-127;Mn;0;NSM;;;;;N;;;;; E016F;VARIATION SELECTOR-128;Mn;0;NSM;;;;;N;;;;; E0170;VARIATION SELECTOR-129;Mn;0;NSM;;;;;N;;;;; E0171;VARIATION SELECTOR-130;Mn;0;NSM;;;;;N;;;;; E0172;VARIATION SELECTOR-131;Mn;0;NSM;;;;;N;;;;; E0173;VARIATION SELECTOR-132;Mn;0;NSM;;;;;N;;;;; E0174;VARIATION SELECTOR-133;Mn;0;NSM;;;;;N;;;;; E0175;VARIATION SELECTOR-134;Mn;0;NSM;;;;;N;;;;; E0176;VARIATION SELECTOR-135;Mn;0;NSM;;;;;N;;;;; E0177;VARIATION SELECTOR-136;Mn;0;NSM;;;;;N;;;;; E0178;VARIATION SELECTOR-137;Mn;0;NSM;;;;;N;;;;; E0179;VARIATION SELECTOR-138;Mn;0;NSM;;;;;N;;;;; E017A;VARIATION SELECTOR-139;Mn;0;NSM;;;;;N;;;;; E017B;VARIATION SELECTOR-140;Mn;0;NSM;;;;;N;;;;; E017C;VARIATION SELECTOR-141;Mn;0;NSM;;;;;N;;;;; E017D;VARIATION SELECTOR-142;Mn;0;NSM;;;;;N;;;;; E017E;VARIATION SELECTOR-143;Mn;0;NSM;;;;;N;;;;; E017F;VARIATION SELECTOR-144;Mn;0;NSM;;;;;N;;;;; E0180;VARIATION SELECTOR-145;Mn;0;NSM;;;;;N;;;;; E0181;VARIATION SELECTOR-146;Mn;0;NSM;;;;;N;;;;; E0182;VARIATION SELECTOR-147;Mn;0;NSM;;;;;N;;;;; E0183;VARIATION SELECTOR-148;Mn;0;NSM;;;;;N;;;;; E0184;VARIATION SELECTOR-149;Mn;0;NSM;;;;;N;;;;; E0185;VARIATION SELECTOR-150;Mn;0;NSM;;;;;N;;;;; E0186;VARIATION SELECTOR-151;Mn;0;NSM;;;;;N;;;;; E0187;VARIATION SELECTOR-152;Mn;0;NSM;;;;;N;;;;; E0188;VARIATION SELECTOR-153;Mn;0;NSM;;;;;N;;;;; E0189;VARIATION SELECTOR-154;Mn;0;NSM;;;;;N;;;;; E018A;VARIATION SELECTOR-155;Mn;0;NSM;;;;;N;;;;; E018B;VARIATION SELECTOR-156;Mn;0;NSM;;;;;N;;;;; E018C;VARIATION SELECTOR-157;Mn;0;NSM;;;;;N;;;;; E018D;VARIATION SELECTOR-158;Mn;0;NSM;;;;;N;;;;; E018E;VARIATION SELECTOR-159;Mn;0;NSM;;;;;N;;;;; E018F;VARIATION SELECTOR-160;Mn;0;NSM;;;;;N;;;;; E0190;VARIATION SELECTOR-161;Mn;0;NSM;;;;;N;;;;; E0191;VARIATION SELECTOR-162;Mn;0;NSM;;;;;N;;;;; E0192;VARIATION SELECTOR-163;Mn;0;NSM;;;;;N;;;;; E0193;VARIATION SELECTOR-164;Mn;0;NSM;;;;;N;;;;; E0194;VARIATION SELECTOR-165;Mn;0;NSM;;;;;N;;;;; E0195;VARIATION SELECTOR-166;Mn;0;NSM;;;;;N;;;;; E0196;VARIATION SELECTOR-167;Mn;0;NSM;;;;;N;;;;; E0197;VARIATION SELECTOR-168;Mn;0;NSM;;;;;N;;;;; E0198;VARIATION SELECTOR-169;Mn;0;NSM;;;;;N;;;;; E0199;VARIATION SELECTOR-170;Mn;0;NSM;;;;;N;;;;; E019A;VARIATION SELECTOR-171;Mn;0;NSM;;;;;N;;;;; E019B;VARIATION SELECTOR-172;Mn;0;NSM;;;;;N;;;;; E019C;VARIATION SELECTOR-173;Mn;0;NSM;;;;;N;;;;; E019D;VARIATION SELECTOR-174;Mn;0;NSM;;;;;N;;;;; E019E;VARIATION SELECTOR-175;Mn;0;NSM;;;;;N;;;;; E019F;VARIATION SELECTOR-176;Mn;0;NSM;;;;;N;;;;; E01A0;VARIATION SELECTOR-177;Mn;0;NSM;;;;;N;;;;; E01A1;VARIATION SELECTOR-178;Mn;0;NSM;;;;;N;;;;; E01A2;VARIATION SELECTOR-179;Mn;0;NSM;;;;;N;;;;; E01A3;VARIATION SELECTOR-180;Mn;0;NSM;;;;;N;;;;; E01A4;VARIATION SELECTOR-181;Mn;0;NSM;;;;;N;;;;; E01A5;VARIATION SELECTOR-182;Mn;0;NSM;;;;;N;;;;; E01A6;VARIATION SELECTOR-183;Mn;0;NSM;;;;;N;;;;; E01A7;VARIATION SELECTOR-184;Mn;0;NSM;;;;;N;;;;; E01A8;VARIATION SELECTOR-185;Mn;0;NSM;;;;;N;;;;; E01A9;VARIATION SELECTOR-186;Mn;0;NSM;;;;;N;;;;; E01AA;VARIATION SELECTOR-187;Mn;0;NSM;;;;;N;;;;; E01AB;VARIATION SELECTOR-188;Mn;0;NSM;;;;;N;;;;; E01AC;VARIATION SELECTOR-189;Mn;0;NSM;;;;;N;;;;; E01AD;VARIATION SELECTOR-190;Mn;0;NSM;;;;;N;;;;; E01AE;VARIATION SELECTOR-191;Mn;0;NSM;;;;;N;;;;; E01AF;VARIATION SELECTOR-192;Mn;0;NSM;;;;;N;;;;; E01B0;VARIATION SELECTOR-193;Mn;0;NSM;;;;;N;;;;; E01B1;VARIATION SELECTOR-194;Mn;0;NSM;;;;;N;;;;; E01B2;VARIATION SELECTOR-195;Mn;0;NSM;;;;;N;;;;; E01B3;VARIATION SELECTOR-196;Mn;0;NSM;;;;;N;;;;; E01B4;VARIATION SELECTOR-197;Mn;0;NSM;;;;;N;;;;; E01B5;VARIATION SELECTOR-198;Mn;0;NSM;;;;;N;;;;; E01B6;VARIATION SELECTOR-199;Mn;0;NSM;;;;;N;;;;; E01B7;VARIATION SELECTOR-200;Mn;0;NSM;;;;;N;;;;; E01B8;VARIATION SELECTOR-201;Mn;0;NSM;;;;;N;;;;; E01B9;VARIATION SELECTOR-202;Mn;0;NSM;;;;;N;;;;; E01BA;VARIATION SELECTOR-203;Mn;0;NSM;;;;;N;;;;; E01BB;VARIATION SELECTOR-204;Mn;0;NSM;;;;;N;;;;; E01BC;VARIATION SELECTOR-205;Mn;0;NSM;;;;;N;;;;; E01BD;VARIATION SELECTOR-206;Mn;0;NSM;;;;;N;;;;; E01BE;VARIATION SELECTOR-207;Mn;0;NSM;;;;;N;;;;; E01BF;VARIATION SELECTOR-208;Mn;0;NSM;;;;;N;;;;; E01C0;VARIATION SELECTOR-209;Mn;0;NSM;;;;;N;;;;; E01C1;VARIATION SELECTOR-210;Mn;0;NSM;;;;;N;;;;; E01C2;VARIATION SELECTOR-211;Mn;0;NSM;;;;;N;;;;; E01C3;VARIATION SELECTOR-212;Mn;0;NSM;;;;;N;;;;; E01C4;VARIATION SELECTOR-213;Mn;0;NSM;;;;;N;;;;; E01C5;VARIATION SELECTOR-214;Mn;0;NSM;;;;;N;;;;; E01C6;VARIATION SELECTOR-215;Mn;0;NSM;;;;;N;;;;; E01C7;VARIATION SELECTOR-216;Mn;0;NSM;;;;;N;;;;; E01C8;VARIATION SELECTOR-217;Mn;0;NSM;;;;;N;;;;; E01C9;VARIATION SELECTOR-218;Mn;0;NSM;;;;;N;;;;; E01CA;VARIATION SELECTOR-219;Mn;0;NSM;;;;;N;;;;; E01CB;VARIATION SELECTOR-220;Mn;0;NSM;;;;;N;;;;; E01CC;VARIATION SELECTOR-221;Mn;0;NSM;;;;;N;;;;; E01CD;VARIATION SELECTOR-222;Mn;0;NSM;;;;;N;;;;; E01CE;VARIATION SELECTOR-223;Mn;0;NSM;;;;;N;;;;; E01CF;VARIATION SELECTOR-224;Mn;0;NSM;;;;;N;;;;; E01D0;VARIATION SELECTOR-225;Mn;0;NSM;;;;;N;;;;; E01D1;VARIATION SELECTOR-226;Mn;0;NSM;;;;;N;;;;; E01D2;VARIATION SELECTOR-227;Mn;0;NSM;;;;;N;;;;; E01D3;VARIATION SELECTOR-228;Mn;0;NSM;;;;;N;;;;; E01D4;VARIATION SELECTOR-229;Mn;0;NSM;;;;;N;;;;; E01D5;VARIATION SELECTOR-230;Mn;0;NSM;;;;;N;;;;; E01D6;VARIATION SELECTOR-231;Mn;0;NSM;;;;;N;;;;; E01D7;VARIATION SELECTOR-232;Mn;0;NSM;;;;;N;;;;; E01D8;VARIATION SELECTOR-233;Mn;0;NSM;;;;;N;;;;; E01D9;VARIATION SELECTOR-234;Mn;0;NSM;;;;;N;;;;; E01DA;VARIATION SELECTOR-235;Mn;0;NSM;;;;;N;;;;; E01DB;VARIATION SELECTOR-236;Mn;0;NSM;;;;;N;;;;; E01DC;VARIATION SELECTOR-237;Mn;0;NSM;;;;;N;;;;; E01DD;VARIATION SELECTOR-238;Mn;0;NSM;;;;;N;;;;; E01DE;VARIATION SELECTOR-239;Mn;0;NSM;;;;;N;;;;; E01DF;VARIATION SELECTOR-240;Mn;0;NSM;;;;;N;;;;; E01E0;VARIATION SELECTOR-241;Mn;0;NSM;;;;;N;;;;; E01E1;VARIATION SELECTOR-242;Mn;0;NSM;;;;;N;;;;; E01E2;VARIATION SELECTOR-243;Mn;0;NSM;;;;;N;;;;; E01E3;VARIATION SELECTOR-244;Mn;0;NSM;;;;;N;;;;; E01E4;VARIATION SELECTOR-245;Mn;0;NSM;;;;;N;;;;; E01E5;VARIATION SELECTOR-246;Mn;0;NSM;;;;;N;;;;; E01E6;VARIATION SELECTOR-247;Mn;0;NSM;;;;;N;;;;; E01E7;VARIATION SELECTOR-248;Mn;0;NSM;;;;;N;;;;; E01E8;VARIATION SELECTOR-249;Mn;0;NSM;;;;;N;;;;; E01E9;VARIATION SELECTOR-250;Mn;0;NSM;;;;;N;;;;; E01EA;VARIATION SELECTOR-251;Mn;0;NSM;;;;;N;;;;; E01EB;VARIATION SELECTOR-252;Mn;0;NSM;;;;;N;;;;; E01EC;VARIATION SELECTOR-253;Mn;0;NSM;;;;;N;;;;; E01ED;VARIATION SELECTOR-254;Mn;0;NSM;;;;;N;;;;; E01EE;VARIATION SELECTOR-255;Mn;0;NSM;;;;;N;;;;; E01EF;VARIATION SELECTOR-256;Mn;0;NSM;;;;;N;;;;; F0000;;Co;0;L;;;;;N;;;;; FFFFD;;Co;0;L;;;;;N;;;;; 100000;;Co;0;L;;;;;N;;;;; 10FFFD;;Co;0;L;;;;;N;;;;; cpdf-2.8.1/compressor/run0000755000175000017500000000010014771516640014044 0ustar johnjohn./compressor ../cpdfunicodedata.source.ml ../cpdfunicodedata.ml cpdf-2.8.1/compressor/README.md0000664000175000017500000000005214771516640014601 0ustar johnjohnCompresses source files for unicode data. cpdf-2.8.1/compressor/OCamlMakefile0000755000175000017500000010503114771516640015702 0ustar johnjohn########################################################################### # OCamlMakefile # Copyright (C) 1999- Markus Mottl # # For updates see: # http://www.ocaml.info/home/ocaml_sources.html # ########################################################################### # Modified by damien for .glade.ml compilation # Set these variables to the names of the sources to be processed and # the result variable. Order matters during linkage! ifndef SOURCES SOURCES := foo.ml endif export SOURCES ifndef RES_CLIB_SUF RES_CLIB_SUF := _stubs endif export RES_CLIB_SUF ifndef RESULT RESULT := foo endif export RESULT := $(strip $(RESULT)) export LIB_PACK_NAME ifndef DOC_FILES DOC_FILES := $(filter %.mli, $(SOURCES)) endif export DOC_FILES FIRST_DOC_FILE := $(firstword $(DOC_FILES)) export BCSUFFIX export NCSUFFIX ifndef TOPSUFFIX TOPSUFFIX := .top endif export TOPSUFFIX # Eventually set include- and library-paths, libraries to link, # additional compilation-, link- and ocamlyacc-flags # Path- and library information needs not be written with "-I" and such... # Define THREADS if you need it, otherwise leave it unset (same for # USE_CAMLP4)! export THREADS export VMTHREADS export ANNOTATE export USE_CAMLP4 export INCDIRS export LIBDIRS export EXTLIBDIRS export RESULTDEPS export OCAML_DEFAULT_DIRS export LIBS export CLIBS export CFRAMEWORKS export OCAMLFLAGS export OCAMLNCFLAGS export OCAMLBCFLAGS export OCAMLLDFLAGS export OCAMLNLDFLAGS export OCAMLBLDFLAGS export OCAMLMKLIB_FLAGS ifndef OCAMLCPFLAGS OCAMLCPFLAGS := a endif export OCAMLCPFLAGS ifndef DOC_DIR DOC_DIR := doc endif export DOC_DIR export PPFLAGS export LFLAGS export YFLAGS export IDLFLAGS export OCAMLDOCFLAGS export OCAMLFIND_INSTFLAGS export DVIPSFLAGS export STATIC # Add a list of optional trash files that should be deleted by "make clean" export TRASH ECHO := echo ifdef REALLY_QUIET export REALLY_QUIET ECHO := true LFLAGS := $(LFLAGS) -q YFLAGS := $(YFLAGS) -q endif #################### variables depending on your OCaml-installation SYSTEM := $(shell ocamlc -config 2>/dev/null | grep system | sed 's/system: //') # This may be # - mingw # - mingw64 # - win32 # - cygwin # - some other string means Unix # - empty means ocamlc does not support -config ifeq ($(SYSTEM),$(filter $(SYSTEM),mingw mingw64)) MINGW=1 endif ifeq ($(SYSTEM),win32) MSVC=1 endif ifdef MINGW export MINGW WIN32 := 1 # The default value 'cc' makes 'ocamlc -cc "cc"' raises the error 'The # NTVDM CPU has encountered an illegal instruction'. ifndef CC MNO_CYGWIN := $(shell gcc -Wextra -v --help 2>/dev/null | grep -q '\-mno-cygwin'; echo $$?) CC := gcc else MNO_CYGWIN := $(shell $$CC -Wextra -v --help 2>/dev/null | grep -q '\-mno-cygwin'; echo $$?) endif # We are compiling with cygwin tools: ifeq ($(MNO_CYGWIN),0) CFLAGS_WIN32 := -mno-cygwin endif # The OCaml C header files use this flag: CFLAGS += -D__MINGW32__ endif ifdef MSVC export MSVC WIN32 := 1 ifndef STATIC CPPFLAGS_WIN32 := -DCAML_DLL endif CFLAGS_WIN32 += -nologo EXT_OBJ := obj EXT_LIB := lib ifeq ($(CC),gcc) # work around GNU Make default value ifdef THREADS CC := cl -MT else CC := cl endif endif ifeq ($(CXX),g++) # work around GNU Make default value CXX := $(CC) endif CFLAG_O := -Fo endif ifdef WIN32 EXT_CXX := cpp EXE := .exe endif ifndef EXT_OBJ EXT_OBJ := o endif ifndef EXT_LIB EXT_LIB := a endif ifndef EXT_CXX EXT_CXX := cc endif ifndef EXE EXE := # empty endif ifndef CFLAG_O CFLAG_O := -o # do not delete this comment (preserves trailing whitespace)! endif export CC export CXX export CFLAGS export CXXFLAGS export LDFLAGS export CPPFLAGS ifndef RPATH_FLAG ifdef ELF_RPATH_FLAG RPATH_FLAG := $(ELF_RPATH_FLAG) else RPATH_FLAG := -R endif endif export RPATH_FLAG ifndef MSVC ifndef PIC_CFLAGS PIC_CFLAGS := -fPIC endif ifndef PIC_CPPFLAGS PIC_CPPFLAGS := -DPIC endif endif export PIC_CFLAGS export PIC_CPPFLAGS BCRESULT := $(addsuffix $(BCSUFFIX), $(RESULT)) NCRESULT := $(addsuffix $(NCSUFFIX), $(RESULT)) TOPRESULT := $(addsuffix $(TOPSUFFIX), $(RESULT)) ifndef OCAMLFIND OCAMLFIND := ocamlfind endif export OCAMLFIND ifndef OCAML OCAML := ocaml endif export OCAML ifndef OCAMLC OCAMLC := ocamlc endif export OCAMLC ifndef OCAMLOPT OCAMLOPT := ocamlopt endif export OCAMLOPT ifndef OCAMLMKTOP OCAMLMKTOP := ocamlmktop endif export OCAMLMKTOP ifndef OCAMLCP OCAMLCP := ocamlcp endif export OCAMLCP ifndef OCAMLDEP OCAMLDEP := ocamldep endif export OCAMLDEP ifndef OCAMLLEX OCAMLLEX := ocamllex endif export OCAMLLEX ifndef OCAMLYACC OCAMLYACC := ocamlyacc endif export OCAMLYACC ifndef OCAMLMKLIB OCAMLMKLIB := ocamlmklib endif export OCAMLMKLIB ifndef OCAML_GLADECC OCAML_GLADECC := lablgladecc2 endif export OCAML_GLADECC ifndef OCAML_GLADECC_FLAGS OCAML_GLADECC_FLAGS := endif export OCAML_GLADECC_FLAGS ifndef CAMELEON_REPORT CAMELEON_REPORT := report endif export CAMELEON_REPORT ifndef CAMELEON_REPORT_FLAGS CAMELEON_REPORT_FLAGS := endif export CAMELEON_REPORT_FLAGS ifndef CAMELEON_ZOGGY CAMELEON_ZOGGY := camlp4o pa_zog.cma pr_o.cmo endif export CAMELEON_ZOGGY ifndef CAMELEON_ZOGGY_FLAGS CAMELEON_ZOGGY_FLAGS := endif export CAMELEON_ZOGGY_FLAGS ifndef OXRIDL OXRIDL := oxridl endif export OXRIDL ifndef CAMLIDL CAMLIDL := camlidl endif export CAMLIDL ifndef CAMLIDLDLL CAMLIDLDLL := camlidldll endif export CAMLIDLDLL ifndef NOIDLHEADER MAYBE_IDL_HEADER := -header endif export NOIDLHEADER export NO_CUSTOM ifndef CAMLP4 CAMLP4 := camlp4 endif export CAMLP4 ifndef REAL_OCAMLFIND ifdef PACKS ifndef CREATE_LIB ifdef THREADS PACKS += threads endif endif empty := space := $(empty) $(empty) comma := , ifdef PREDS PRE_OCAML_FIND_PREDICATES := $(subst $(space),$(comma),$(PREDS)) PRE_OCAML_FIND_PACKAGES := $(subst $(space),$(comma),$(PACKS)) OCAML_FIND_PREDICATES := -predicates $(PRE_OCAML_FIND_PREDICATES) # OCAML_DEP_PREDICATES := -syntax $(PRE_OCAML_FIND_PREDICATES) OCAML_FIND_PACKAGES := $(OCAML_FIND_PREDICATES) -package $(PRE_OCAML_FIND_PACKAGES) OCAML_DEP_PACKAGES := $(OCAML_DEP_PREDICATES) -package $(PRE_OCAML_FIND_PACKAGES) else OCAML_FIND_PACKAGES := -package $(subst $(space),$(comma),$(PACKS)) OCAML_DEP_PACKAGES := endif OCAML_FIND_LINKPKG := -linkpkg REAL_OCAMLFIND := $(OCAMLFIND) endif endif export OCAML_FIND_PACKAGES export OCAML_DEP_PACKAGES export OCAML_FIND_LINKPKG export REAL_OCAMLFIND ifndef OCAMLDOC OCAMLDOC := ocamldoc endif export OCAMLDOC ifndef LATEX LATEX := latex endif export LATEX ifndef DVIPS DVIPS := dvips endif export DVIPS ifndef PS2PDF PS2PDF := ps2pdf endif export PS2PDF ifndef OCAMLMAKEFILE OCAMLMAKEFILE := OCamlMakefile endif export OCAMLMAKEFILE ifndef OCAMLLIBPATH OCAMLLIBPATH := \ $(shell $(OCAMLC) 2>/dev/null -where || echo /usr/local/lib/ocaml) endif export OCAMLLIBPATH ifndef OCAML_LIB_INSTALL OCAML_LIB_INSTALL := $(OCAMLLIBPATH)/contrib endif export OCAML_LIB_INSTALL ########################################################################### #################### change following sections only if #################### you know what you are doing! # delete target files when a build command fails .PHONY: .DELETE_ON_ERROR .DELETE_ON_ERROR: # for pedants using "--warn-undefined-variables" export MAYBE_IDL export REAL_RESULT export CAMLIDLFLAGS export THREAD_FLAG export RES_CLIB export MAKEDLL export ANNOT_FLAG export C_OXRIDL export SUBPROJS export CFLAGS_WIN32 export CPPFLAGS_WIN32 INCFLAGS := SHELL := /bin/sh MLDEPDIR := ._d BCDIDIR := ._bcdi NCDIDIR := ._ncdi FILTER_EXTNS := %.mli %.ml %.mll %.mly %.idl %.oxridl %.c %.m %.$(EXT_CXX) %.rep %.zog %.glade FILTERED := $(filter $(FILTER_EXTNS), $(SOURCES)) SOURCE_DIRS := $(filter-out ./, $(sort $(dir $(FILTERED)))) FILTERED_REP := $(filter %.rep, $(FILTERED)) DEP_REP := $(FILTERED_REP:%.rep=$(MLDEPDIR)/%.d) AUTO_REP := $(FILTERED_REP:.rep=.ml) FILTERED_ZOG := $(filter %.zog, $(FILTERED)) DEP_ZOG := $(FILTERED_ZOG:%.zog=$(MLDEPDIR)/%.d) AUTO_ZOG := $(FILTERED_ZOG:.zog=.ml) FILTERED_GLADE := $(filter %.glade, $(FILTERED)) DEP_GLADE := $(FILTERED_GLADE:%.glade=$(MLDEPDIR)/%.d) AUTO_GLADE := $(FILTERED_GLADE:.glade=.ml) FILTERED_ML := $(filter %.ml, $(FILTERED)) DEP_ML := $(FILTERED_ML:%.ml=$(MLDEPDIR)/%.d) FILTERED_MLI := $(filter %.mli, $(FILTERED)) DEP_MLI := $(FILTERED_MLI:.mli=.di) FILTERED_MLL := $(filter %.mll, $(FILTERED)) DEP_MLL := $(FILTERED_MLL:%.mll=$(MLDEPDIR)/%.d) AUTO_MLL := $(FILTERED_MLL:.mll=.ml) FILTERED_MLY := $(filter %.mly, $(FILTERED)) DEP_MLY := $(FILTERED_MLY:%.mly=$(MLDEPDIR)/%.d) $(FILTERED_MLY:.mly=.di) AUTO_MLY := $(FILTERED_MLY:.mly=.mli) $(FILTERED_MLY:.mly=.ml) FILTERED_IDL := $(filter %.idl, $(FILTERED)) DEP_IDL := $(FILTERED_IDL:%.idl=$(MLDEPDIR)/%.d) $(FILTERED_IDL:.idl=.di) C_IDL := $(FILTERED_IDL:%.idl=%_stubs.c) ifndef NOIDLHEADER C_IDL += $(FILTERED_IDL:.idl=.h) endif OBJ_C_IDL := $(FILTERED_IDL:%.idl=%_stubs.$(EXT_OBJ)) AUTO_IDL := $(FILTERED_IDL:.idl=.mli) $(FILTERED_IDL:.idl=.ml) $(C_IDL) FILTERED_OXRIDL := $(filter %.oxridl, $(FILTERED)) DEP_OXRIDL := $(FILTERED_OXRIDL:%.oxridl=$(MLDEPDIR)/%.d) $(FILTERED_OXRIDL:.oxridl=.di) AUTO_OXRIDL := $(FILTERED_OXRIDL:.oxridl=.mli) $(FILTERED_OXRIDL:.oxridl=.ml) $(C_OXRIDL) FILTERED_C_CXX := $(filter %.c %.m %.$(EXT_CXX), $(FILTERED)) OBJ_C_CXX := $(FILTERED_C_CXX:.c=.$(EXT_OBJ)) OBJ_C_CXX := $(OBJ_C_CXX:.m=.$(EXT_OBJ)) OBJ_C_CXX := $(OBJ_C_CXX:.$(EXT_CXX)=.$(EXT_OBJ)) PRE_TARGETS += $(AUTO_MLL) $(AUTO_MLY) $(AUTO_IDL) $(AUTO_OXRIDL) $(AUTO_ZOG) $(AUTO_REP) $(AUTO_GLADE) ALL_DEPS := $(DEP_ML) $(DEP_MLI) $(DEP_MLL) $(DEP_MLY) $(DEP_IDL) $(DEP_OXRIDL) $(DEP_ZOG) $(DEP_REP) $(DEP_GLADE) MLDEPS := $(filter %.d, $(ALL_DEPS)) MLIDEPS := $(filter %.di, $(ALL_DEPS)) BCDEPIS := $(MLIDEPS:%.di=$(BCDIDIR)/%.di) NCDEPIS := $(MLIDEPS:%.di=$(NCDIDIR)/%.di) ALLML := $(filter %.mli %.ml %.mll %.mly %.idl %.oxridl %.rep %.zog %.glade, $(FILTERED)) IMPLO_INTF := $(ALLML:%.mli=%.mli.__) IMPLO_INTF := $(foreach file, $(IMPLO_INTF), \ $(basename $(file)).cmi $(basename $(file)).cmo) IMPLO_INTF := $(filter-out %.mli.cmo, $(IMPLO_INTF)) IMPLO_INTF := $(IMPLO_INTF:%.mli.cmi=%.cmi) IMPLX_INTF := $(IMPLO_INTF:.cmo=.cmx) INTF := $(filter %.cmi, $(IMPLO_INTF)) IMPL_CMO := $(filter %.cmo, $(IMPLO_INTF)) IMPL_CMX := $(IMPL_CMO:.cmo=.cmx) IMPL_ASM := $(IMPL_CMO:.cmo=.asm) IMPL_S := $(IMPL_CMO:.cmo=.s) OBJ_LINK := $(OBJ_C_IDL) $(OBJ_C_CXX) OBJ_FILES := $(IMPL_CMO:.cmo=.$(EXT_OBJ)) $(OBJ_LINK) EXECS := $(addsuffix $(EXE), \ $(sort $(TOPRESULT) $(BCRESULT) $(NCRESULT))) ifdef WIN32 EXECS += $(BCRESULT).dll $(NCRESULT).dll endif CLIB_BASE := $(RESULT)$(RES_CLIB_SUF) ifneq ($(strip $(OBJ_LINK)),) RES_CLIB := lib$(CLIB_BASE).$(EXT_LIB) endif ifdef WIN32 DLLSONAME := dll$(CLIB_BASE).dll else DLLSONAME := dll$(CLIB_BASE).so endif NONEXECS := $(INTF) $(IMPL_CMO) $(IMPL_CMX) $(IMPL_ASM) $(IMPL_S) \ $(OBJ_FILES) $(PRE_TARGETS) $(BCRESULT).cma $(NCRESULT).cmxa \ $(NCRESULT).$(EXT_LIB) $(BCRESULT).cmi $(BCRESULT).cmo \ $(NCRESULT).cmi $(NCRESULT).cmx $(NCRESULT).$(EXT_OBJ) \ $(RES_CLIB) $(IMPL_CMO:.cmo=.annot) \ $(LIB_PACK_NAME).cmi $(LIB_PACK_NAME).cmo $(LIB_PACK_NAME).cmx \ $(LIB_PACK_NAME).$(EXT_OBJ) ifndef STATIC NONEXECS += $(DLLSONAME) endif ifndef LIBINSTALL_FILES LIBINSTALL_FILES := $(RESULT).mli $(RESULT).cmi $(RESULT).cma \ $(RESULT).cmxa $(RESULT).$(EXT_LIB) $(RES_CLIB) ifndef STATIC ifneq ($(strip $(OBJ_LINK)),) LIBINSTALL_FILES += $(DLLSONAME) endif endif endif export LIBINSTALL_FILES ifdef WIN32 # some extra stuff is created while linking DLLs NONEXECS += $(BCRESULT).$(EXT_LIB) $(BCRESULT).exp $(NCRESULT).exp $(CLIB_BASE).exp $(CLIB_BASE).lib endif TARGETS := $(EXECS) $(NONEXECS) # If there are IDL-files ifneq ($(strip $(FILTERED_IDL)),) MAYBE_IDL := -cclib -lcamlidl endif ifdef USE_CAMLP4 CAMLP4PATH := \ $(shell $(CAMLP4) -where 2>/dev/null || echo /usr/local/lib/camlp4) INCFLAGS := -I $(CAMLP4PATH) CINCFLAGS := -I$(CAMLP4PATH) endif INCFLAGS := $(INCFLAGS) $(INCDIRS:%=-I %) $(SOURCE_DIRS:%=-I %) $(OCAML_DEFAULT_DIRS:%=-I %) CINCFLAGS += $(SOURCE_DIRS:%=-I%) $(INCDIRS:%=-I%) $(OCAML_DEFAULT_DIRS:%=-I%) ifndef MSVC CLIBFLAGS += $(SOURCE_DIRS:%=-L%) $(LIBDIRS:%=-L%) \ $(EXTLIBDIRS:%=-L%) $(OCAML_DEFAULT_DIRS:%=-L%) ifeq ($(ELF_RPATH), yes) CLIBFLAGS += $(EXTLIBDIRS:%=-Wl,$(RPATH_FLAG)%) endif endif ifndef PROFILING INTF_OCAMLC := $(OCAMLC) else ifndef THREADS INTF_OCAMLC := $(OCAMLCP) -p $(OCAMLCPFLAGS) else # OCaml does not support profiling byte code # with threads (yet), therefore we force an error. ifndef REAL_OCAMLC $(error Profiling of multithreaded byte code not yet supported by OCaml) endif INTF_OCAMLC := $(OCAMLC) endif endif ifndef MSVC COMMON_LDFLAGS := $(LDFLAGS:%=-ccopt %) $(SOURCE_DIRS:%=-ccopt -L%) \ $(LIBDIRS:%=-ccopt -L%) $(EXTLIBDIRS:%=-ccopt -L%) \ $(EXTLIBDIRS:%=-ccopt -Wl $(OCAML_DEFAULT_DIRS:%=-ccopt -L%)) ifeq ($(ELF_RPATH),yes) COMMON_LDFLAGS += $(EXTLIBDIRS:%=-ccopt -Wl,$(RPATH_FLAG)%) endif else COMMON_LDFLAGS := -ccopt "/link -NODEFAULTLIB:LIBC $(LDFLAGS:%=%) $(SOURCE_DIRS:%=-LIBPATH:%) \ $(LIBDIRS:%=-LIBPATH:%) $(EXTLIBDIRS:%=-LIBPATH:%) \ $(OCAML_DEFAULT_DIRS:%=-LIBPATH:%) " endif CLIBS_OPTS := $(CLIBS:%=-cclib -l%) $(CFRAMEWORKS:%=-cclib '-framework %') ifdef MSVC ifndef STATIC # MSVC libraries do not have 'lib' prefix CLIBS_OPTS := $(CLIBS:%=-cclib %.lib) endif endif ifneq ($(strip $(OBJ_LINK)),) ifdef CREATE_LIB OBJS_LIBS := -cclib -l$(CLIB_BASE) $(CLIBS_OPTS) $(MAYBE_IDL) else OBJS_LIBS := $(OBJ_LINK) $(CLIBS_OPTS) $(MAYBE_IDL) endif else OBJS_LIBS := $(CLIBS_OPTS) $(MAYBE_IDL) endif ifdef LIB_PACK_NAME FOR_PACK_NAME := $(shell echo $(LIB_PACK_NAME) | awk '{print toupper(substr($$0,1,1))substr($$0,2)}') endif # If we have to make byte-code ifndef REAL_OCAMLC BYTE_OCAML := y # EXTRADEPS is added dependencies we have to insert for all # executable files we generate. Ideally it should be all of the # libraries we use, but it's hard to find the ones that get searched on # the path since I don't know the paths built into the compiler, so # just include the ones with slashes in their names. EXTRADEPS := $(addsuffix .cma,$(foreach i,$(LIBS),$(if $(findstring /,$(i)),$(i)))) ifndef LIB_PACK_NAME SPECIAL_OCAMLFLAGS := $(OCAMLBCFLAGS) else SPECIAL_OCAMLFLAGS := -for-pack $(FOR_PACK_NAME) $(OCAMLBCFLAGS) endif REAL_OCAMLC := $(INTF_OCAMLC) REAL_IMPL := $(IMPL_CMO) REAL_IMPL_INTF := $(IMPLO_INTF) IMPL_SUF := .cmo DEPFLAGS := MAKE_DEPS := $(MLDEPS) $(BCDEPIS) ifdef CREATE_LIB override CFLAGS := $(PIC_CFLAGS) $(CFLAGS) override CPPFLAGS := $(PIC_CPPFLAGS) $(CPPFLAGS) ifndef STATIC ifneq ($(strip $(OBJ_LINK)),) MAKEDLL := $(DLLSONAME) ALL_LDFLAGS := -dllib $(DLLSONAME) endif endif endif ifndef NO_CUSTOM ifneq "$(strip $(OBJ_LINK) $(THREADS) $(MAYBE_IDL) $(CLIBS) $(CFRAMEWORKS))" "" ALL_LDFLAGS += -custom endif endif ALL_LDFLAGS += $(INCFLAGS) $(OCAMLLDFLAGS) $(OCAMLBLDFLAGS) \ $(COMMON_LDFLAGS) $(LIBS:%=%.cma) CAMLIDLDLLFLAGS := ifdef THREADS ifdef VMTHREADS THREAD_FLAG := -vmthread else THREAD_FLAG := -thread endif ALL_LDFLAGS := $(THREAD_FLAG) $(ALL_LDFLAGS) ifndef CREATE_LIB ifndef REAL_OCAMLFIND ALL_LDFLAGS := $(ALL_LDFLAGS) endif endif endif # we have to make native-code else EXTRADEPS := $(addsuffix .cmxa,$(foreach i,$(LIBS),$(if $(findstring /,$(i)),$(i)))) ifndef PROFILING SPECIAL_OCAMLFLAGS := $(OCAMLNCFLAGS) PLDFLAGS := else SPECIAL_OCAMLFLAGS := -p $(OCAMLNCFLAGS) PLDFLAGS := -p endif ifndef LIB_PACK_NAME SPECIAL_OCAMLFLAGS := $(OCAMLNCFLAGS) else SPECIAL_OCAMLFLAGS := -for-pack $(FOR_PACK_NAME) $(OCAMLNCFLAGS) endif REAL_IMPL := $(IMPL_CMX) REAL_IMPL_INTF := $(IMPLX_INTF) IMPL_SUF := .cmx override CPPFLAGS := -DNATIVE_CODE $(CPPFLAGS) DEPFLAGS := -native MAKE_DEPS := $(MLDEPS) $(NCDEPIS) ALL_LDFLAGS := $(PLDFLAGS) $(INCFLAGS) $(OCAMLLDFLAGS) \ $(OCAMLNLDFLAGS) $(COMMON_LDFLAGS) CAMLIDLDLLFLAGS := -opt ifndef CREATE_LIB ALL_LDFLAGS += $(LIBS:%=%.cmxa) else override CFLAGS := $(PIC_CFLAGS) $(CFLAGS) override CPPFLAGS := $(PIC_CPPFLAGS) $(CPPFLAGS) endif ifdef THREADS THREAD_FLAG := -thread ALL_LDFLAGS := $(THREAD_FLAG) $(ALL_LDFLAGS) ifndef CREATE_LIB ifndef REAL_OCAMLFIND ALL_LDFLAGS := $(ALL_LDFLAGS) endif endif endif endif export MAKE_DEPS ifdef ANNOTATE ANNOT_FLAG := -annot else endif ALL_OCAMLCFLAGS := $(THREAD_FLAG) $(ANNOT_FLAG) $(OCAMLFLAGS) \ $(INCFLAGS) $(SPECIAL_OCAMLFLAGS) ifdef make_deps -include $(MAKE_DEPS) PRE_TARGETS := endif ########################################################################### # USER RULES # Call "OCamlMakefile QUIET=" to get rid of all of the @'s. QUIET=@ # generates byte-code (default) byte-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(BCRESULT) \ REAL_RESULT="$(BCRESULT)" make_deps=yes bc: byte-code byte-code-nolink: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) nolink \ REAL_RESULT="$(BCRESULT)" make_deps=yes bcnl: byte-code-nolink top: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(TOPRESULT) \ REAL_RESULT="$(BCRESULT)" make_deps=yes # generates native-code native-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(NCRESULT) \ REAL_RESULT="$(NCRESULT)" \ REAL_OCAMLC="$(OCAMLOPT)" \ make_deps=yes nc: native-code native-code-nolink: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) nolink \ REAL_RESULT="$(NCRESULT)" \ REAL_OCAMLC="$(OCAMLOPT)" \ make_deps=yes ncnl: native-code-nolink # generates byte-code libraries byte-code-library: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(BCRESULT).cma \ REAL_RESULT="$(BCRESULT)" \ CREATE_LIB=yes \ make_deps=yes bcl: byte-code-library # generates native-code libraries native-code-library: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(NCRESULT).cmxa \ REAL_RESULT="$(NCRESULT)" \ REAL_OCAMLC="$(OCAMLOPT)" \ CREATE_LIB=yes \ make_deps=yes ncl: native-code-library ifdef WIN32 # generates byte-code dll byte-code-dll: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(BCRESULT).dll \ REAL_RESULT="$(BCRESULT)" \ make_deps=yes bcd: byte-code-dll # generates native-code dll native-code-dll: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(NCRESULT).dll \ REAL_RESULT="$(NCRESULT)" \ REAL_OCAMLC="$(OCAMLOPT)" \ make_deps=yes ncd: native-code-dll endif # generates byte-code with debugging information debug-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(BCRESULT) \ REAL_RESULT="$(BCRESULT)" make_deps=yes \ OCAMLFLAGS="-g $(OCAMLFLAGS)" \ OCAMLLDFLAGS="-g $(OCAMLLDFLAGS)" dc: debug-code debug-code-nolink: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) nolink \ REAL_RESULT="$(BCRESULT)" make_deps=yes \ OCAMLFLAGS="-g $(OCAMLFLAGS)" \ OCAMLLDFLAGS="-g $(OCAMLLDFLAGS)" dcnl: debug-code-nolink # generates byte-code with debugging information (native code) debug-native-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(NCRESULT) \ REAL_RESULT="$(NCRESULT)" make_deps=yes \ REAL_OCAMLC="$(OCAMLOPT)" \ OCAMLFLAGS="-g $(OCAMLFLAGS)" \ OCAMLLDFLAGS="-g $(OCAMLLDFLAGS)" dnc: debug-native-code debug-native-code-nolink: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) nolink \ REAL_RESULT="$(NCRESULT)" make_deps=yes \ REAL_OCAMLC="$(OCAMLOPT)" \ OCAMLFLAGS="-g $(OCAMLFLAGS)" \ OCAMLLDFLAGS="-g $(OCAMLLDFLAGS)" dncnl: debug-native-code-nolink # generates byte-code libraries with debugging information debug-code-library: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(BCRESULT).cma \ REAL_RESULT="$(BCRESULT)" make_deps=yes \ CREATE_LIB=yes \ OCAMLFLAGS="-g $(OCAMLFLAGS)" \ OCAMLLDFLAGS="-g $(OCAMLLDFLAGS)" dcl: debug-code-library # generates byte-code libraries with debugging information (native code) debug-native-code-library: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(NCRESULT).cmxa \ REAL_RESULT="$(NCRESULT)" make_deps=yes \ REAL_OCAMLC="$(OCAMLOPT)" \ CREATE_LIB=yes \ OCAMLFLAGS="-g $(OCAMLFLAGS)" \ OCAMLLDFLAGS="-g $(OCAMLLDFLAGS)" dncl: debug-native-code-library # generates byte-code for profiling profiling-byte-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(BCRESULT) \ REAL_RESULT="$(BCRESULT)" PROFILING="y" \ make_deps=yes pbc: profiling-byte-code # generates native-code profiling-native-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(NCRESULT) \ REAL_RESULT="$(NCRESULT)" \ REAL_OCAMLC="$(OCAMLOPT)" \ PROFILING="y" \ make_deps=yes pnc: profiling-native-code # generates byte-code libraries profiling-byte-code-library: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(BCRESULT).cma \ REAL_RESULT="$(BCRESULT)" PROFILING="y" \ CREATE_LIB=yes \ make_deps=yes pbcl: profiling-byte-code-library # generates native-code libraries profiling-native-code-library: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(NCRESULT).cmxa \ REAL_RESULT="$(NCRESULT)" PROFILING="y" \ REAL_OCAMLC="$(OCAMLOPT)" \ CREATE_LIB=yes \ make_deps=yes pncl: profiling-native-code-library # packs byte-code objects pack-byte-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(BCRESULT).cmo \ REAL_RESULT="$(BCRESULT)" \ PACK_LIB=yes make_deps=yes pabc: pack-byte-code # packs native-code objects pack-native-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(NCRESULT).cmx $(NCRESULT).$(EXT_OBJ) \ REAL_RESULT="$(NCRESULT)" \ REAL_OCAMLC="$(OCAMLOPT)" \ PACK_LIB=yes make_deps=yes panc: pack-native-code # generates HTML-documentation htdoc: $(DOC_DIR)/$(RESULT)/html/index.html # generates Latex-documentation ladoc: $(DOC_DIR)/$(RESULT)/latex/doc.tex # generates PostScript-documentation psdoc: $(DOC_DIR)/$(RESULT)/latex/doc.ps # generates PDF-documentation pdfdoc: $(DOC_DIR)/$(RESULT)/latex/doc.pdf # generates all supported forms of documentation doc: htdoc ladoc psdoc pdfdoc ########################################################################### # LOW LEVEL RULES $(REAL_RESULT): $(REAL_IMPL_INTF) $(OBJ_LINK) $(EXTRADEPS) $(RESULTDEPS) $(REAL_OCAMLFIND) $(REAL_OCAMLC) \ $(OCAML_FIND_PACKAGES) $(OCAML_FIND_LINKPKG) \ $(OBJS_LIBS) $(ALL_LDFLAGS) -o $@$(EXE) \ $(REAL_IMPL) nolink: $(REAL_IMPL_INTF) $(OBJ_LINK) ifdef WIN32 $(REAL_RESULT).dll: $(REAL_IMPL_INTF) $(OBJ_LINK) $(CAMLIDLDLL) $(CAMLIDLDLLFLAGS) $(OBJ_LINK) $(CLIBS) \ -o $@ $(REAL_IMPL) endif %$(TOPSUFFIX): $(REAL_IMPL_INTF) $(OBJ_LINK) $(EXTRADEPS) $(REAL_OCAMLFIND) $(OCAMLMKTOP) \ $(OCAML_FIND_PACKAGES) $(OCAML_FIND_LINKPKG) \ $(OBJS_LIBS) $(ALL_LDFLAGS) -o $@$(EXE) \ $(REAL_IMPL) .SUFFIXES: .mli .ml .cmi .cmo .cmx .cma .cmxa .$(EXT_OBJ) \ .mly .di .d .$(EXT_LIB) .idl %.oxridl .c .m .$(EXT_CXX) .h .so \ .rep .zog .glade ifndef STATIC ifdef MINGW # From OCaml 3.11.0, ocamlmklib is available on windows OCAMLMLIB_EXISTS = $(shell which $(OCAMLMKLIB)) ifeq ($(strip $(OCAMLMLIB_EXISTS)),) $(DLLSONAME): $(OBJ_LINK) $(CC) $(CFLAGS) $(CFLAGS_WIN32) $(OBJ_LINK) -shared -o $@ \ $(wildcard $(foreach dir,$(LIBDIRS),$(CLIBS:%=$(dir)/lib%.a))) \ '$(OCAMLLIBPATH)/ocamlrun.a' \ -Wl,--whole-archive \ -Wl,--export-all-symbols \ -Wl,--allow-multiple-definition \ -Wl,--enable-auto-import else $(DLLSONAME): $(OBJ_LINK) $(OCAMLMKLIB) $(INCFLAGS) $(CLIBFLAGS) \ -o $(CLIB_BASE) $(OBJ_LINK) $(CLIBS:%=-l%) \ $(CFRAMEWORKS:%=-framework %) \ $(OCAMLMKLIB_FLAGS) endif else ifdef MSVC $(DLLSONAME): $(OBJ_LINK) link /NOLOGO /DLL /OUT:$@ $(OBJ_LINK) \ $(wildcard $(foreach dir,$(LIBDIRS),$(CLIBS:%=$(dir)/%.lib))) \ '$(OCAMLLIBPATH)/ocamlrun.lib' else $(DLLSONAME): $(OBJ_LINK) $(OCAMLMKLIB) $(INCFLAGS) $(CLIBFLAGS) \ -o $(CLIB_BASE) $(OBJ_LINK) $(CLIBS:%=-l%) $(CFRAMEWORKS:%=-framework %) \ $(OCAMLMKLIB_FLAGS) endif endif endif ifndef LIB_PACK_NAME $(RESULT).cma: $(REAL_IMPL_INTF) $(MAKEDLL) $(EXTRADEPS) $(RESULTDEPS) $(REAL_OCAMLFIND) $(REAL_OCAMLC) -a $(OBJS_LIBS) $(ALL_LDFLAGS) -o $@ $(REAL_IMPL) $(RESULT).cmxa $(RESULT).$(EXT_LIB): $(REAL_IMPL_INTF) $(EXTRADEPS) $(RESULTDEPS) $(REAL_OCAMLFIND) $(OCAMLOPT) -a $(OBJS_LIBS) $(ALL_LDFLAGS) -o $@ $(REAL_IMPL) else # Packing a bytecode library LIB_PACK_NAME_MLI = $(wildcard $(LIB_PACK_NAME).mli) ifeq ($(LIB_PACK_NAME_MLI),) LIB_PACK_NAME_CMI = $(LIB_PACK_NAME).cmi else # $(LIB_PACK_NAME).mli exists, it likely depends on other compiled interfaces LIB_PACK_NAME_CMI = $(LIB_PACK_NAME).cmi: $(REAL_IMPL_INTF) endif ifdef BYTE_OCAML $(LIB_PACK_NAME_CMI) $(LIB_PACK_NAME).cmo: $(REAL_IMPL_INTF) $(REAL_OCAMLFIND) $(REAL_OCAMLC) -pack -o $(LIB_PACK_NAME).cmo $(OCAMLLDFLAGS) $(REAL_IMPL) # Packing into a unit which can be transformed into a library # Remember the .ml's must have been compiled with -for-pack $(LIB_PACK_NAME) else $(LIB_PACK_NAME_CMI) $(LIB_PACK_NAME).cmx: $(REAL_IMPL_INTF) $(REAL_OCAMLFIND) $(OCAMLOPT) -pack -o $(LIB_PACK_NAME).cmx $(OCAMLLDFLAGS) $(REAL_IMPL) endif $(RESULT).cma: $(LIB_PACK_NAME).cmi $(LIB_PACK_NAME).cmo $(MAKEDLL) $(EXTRADEPS) $(RESULTDEPS) $(REAL_OCAMLFIND) $(REAL_OCAMLC) -a $(OBJS_LIBS) $(ALL_LDFLAGS) -o $@ $(LIB_PACK_NAME).cmo $(RESULT).cmxa $(RESULT).$(EXT_LIB): $(LIB_PACK_NAME).cmi $(LIB_PACK_NAME).cmx $(EXTRADEPS) $(RESULTDEPS) $(REAL_OCAMLFIND) $(OCAMLOPT) -a $(OBJS_LIBS) $(filter-out -custom, $(ALL_LDFLAGS)) -o $@ $(LIB_PACK_NAME).cmx endif $(RES_CLIB): $(OBJ_LINK) ifndef MSVC ifneq ($(strip $(OBJ_LINK)),) $(AR) rcs $@ $(OBJ_LINK) endif else ifneq ($(strip $(OBJ_LINK)),) lib -nologo -debugtype:cv -out:$(RES_CLIB) $(OBJ_LINK) endif endif %.cmi: %.mli $(EXTRADEPS) $(QUIET)pp=`sed -n -e '/^#/d' -e 's/(\*pp \([^*]*\) \*)/\1/p;q' $<`; \ if [ -z "$$pp" ]; then \ $(ECHO) $(REAL_OCAMLFIND) $(INTF_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c $(THREAD_FLAG) $(ANNOT_FLAG) \ $(OCAMLFLAGS) $(INCFLAGS) $<; \ $(REAL_OCAMLFIND) $(INTF_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c $(THREAD_FLAG) $(ANNOT_FLAG) \ $(OCAMLFLAGS) $(INCFLAGS) $<; \ else \ $(ECHO) $(REAL_OCAMLFIND) $(INTF_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c -pp \"$$pp $(PPFLAGS)\" $(THREAD_FLAG) $(ANNOT_FLAG) \ $(OCAMLFLAGS) $(INCFLAGS) $<; \ $(REAL_OCAMLFIND) $(INTF_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c -pp "$$pp $(PPFLAGS)" $(THREAD_FLAG) $(ANNOT_FLAG) \ $(OCAMLFLAGS) $(INCFLAGS) $<; \ fi %.cmi: %$(IMPL_SUF); %$(IMPL_SUF) %.$(EXT_OBJ): %.ml $(EXTRADEPS) $(QUIET)pp=`sed -n -e '/^#/d' -e 's/(\*pp \([^*]*\) \*)/\1/p;q' $<`; \ if [ -z "$$pp" ]; then \ $(ECHO) $(REAL_OCAMLFIND) $(REAL_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c $(ALL_OCAMLCFLAGS) $<; \ $(REAL_OCAMLFIND) $(REAL_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c $(ALL_OCAMLCFLAGS) $<; \ else \ $(ECHO) $(REAL_OCAMLFIND) $(REAL_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c -pp \"$$pp $(PPFLAGS)\" $(ALL_OCAMLCFLAGS) $<; \ $(REAL_OCAMLFIND) $(REAL_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c -pp "$$pp $(PPFLAGS)" $(ALL_OCAMLCFLAGS) $<; \ fi .PRECIOUS: %.ml %.ml: %.mll $(OCAMLLEX) $(LFLAGS) $< .PRECIOUS: %.ml %.mli %.ml %.mli: %.mly $(OCAMLYACC) $(YFLAGS) $< $(QUIET)pp=`sed -n -e 's/.*(\*pp \([^*]*\) \*).*/\1/p;q' $<`; \ if [ ! -z "$$pp" ]; then \ mv $*.ml $*.ml.temporary; \ echo "(*pp $$pp $(PPFLAGS)*)" > $*.ml; \ cat $*.ml.temporary >> $*.ml; \ rm $*.ml.temporary; \ mv $*.mli $*.mli.temporary; \ echo "(*pp $$pp $(PPFLAGS)*)" > $*.mli; \ cat $*.mli.temporary >> $*.mli; \ rm $*.mli.temporary; \ fi .PRECIOUS: %.ml %.ml: %.rep $(CAMELEON_REPORT) $(CAMELEON_REPORT_FLAGS) -gen $< .PRECIOUS: %.ml %.ml: %.zog $(CAMELEON_ZOGGY) $(CAMELEON_ZOGGY_FLAGS) -impl $< > $@ .PRECIOUS: %.ml %.ml: %.glade $(OCAML_GLADECC) $(OCAML_GLADECC_FLAGS) $< > $@ .PRECIOUS: %.ml %.mli %.ml %.mli: %.oxridl $(OXRIDL) $< .PRECIOUS: %.ml %.mli %_stubs.c %.h %.ml %.mli %_stubs.c %.h: %.idl $(CAMLIDL) $(MAYBE_IDL_HEADER) $(IDLFLAGS) \ $(CAMLIDLFLAGS) $< $(QUIET)if [ $(NOIDLHEADER) ]; then touch $*.h; fi %.$(EXT_OBJ): %.c $(OCAMLC) -c -cc "$(CC)" -ccopt "$(CFLAGS) \ $(CPPFLAGS) $(CPPFLAGS_WIN32) \ $(CFLAGS_WIN32) $(CINCFLAGS) $(CFLAG_O)$@ " $< %.$(EXT_OBJ): %.m $(CC) -c $(CFLAGS) $(CINCFLAGS) $(CPPFLAGS) \ -I'$(OCAMLLIBPATH)' \ $< $(CFLAG_O)$@ %.$(EXT_OBJ): %.$(EXT_CXX) $(CXX) -c $(CXXFLAGS) $(CINCFLAGS) $(CPPFLAGS) \ -I'$(OCAMLLIBPATH)' \ $< $(CFLAG_O)$@ $(MLDEPDIR)/%.d: %.ml $(QUIET)if [ ! -d $(@D) ]; then mkdir -p $(@D); fi $(QUIET)pp=`sed -n -e '/^#/d' -e 's/(\*pp \([^*]*\) \*)/\1/p;q' $<`; \ if [ -z "$$pp" ]; then \ $(ECHO) $(REAL_OCAMLFIND) $(OCAMLDEP) $(OCAML_DEP_PACKAGES) \ $(INCFLAGS) $< \> $@; \ $(REAL_OCAMLFIND) $(OCAMLDEP) $(OCAML_DEP_PACKAGES) \ $(INCFLAGS) $< > $@; \ else \ $(ECHO) $(REAL_OCAMLFIND) $(OCAMLDEP) $(OCAML_DEP_PACKAGES) \ -pp \"$$pp $(PPFLAGS)\" $(INCFLAGS) $< \> $@; \ $(REAL_OCAMLFIND) $(OCAMLDEP) $(OCAML_DEP_PACKAGES) \ -pp "$$pp $(PPFLAGS)" $(INCFLAGS) $< > $@; \ fi $(BCDIDIR)/%.di $(NCDIDIR)/%.di: %.mli $(QUIET)if [ ! -d $(@D) ]; then mkdir -p $(@D); fi $(QUIET)pp=`sed -n -e '/^#/d' -e 's/(\*pp \([^*]*\) \*)/\1/p;q' $<`; \ if [ -z "$$pp" ]; then \ $(ECHO) $(REAL_OCAMLFIND) $(OCAMLDEP) $(DEPFLAGS) $(INCFLAGS) $< \> $@; \ $(REAL_OCAMLFIND) $(OCAMLDEP) $(DEPFLAGS) $(INCFLAGS) $< > $@; \ else \ $(ECHO) $(REAL_OCAMLFIND) $(OCAMLDEP) $(DEPFLAGS) \ -pp \"$$pp $(PPFLAGS)\" $(INCFLAGS) $< \> $@; \ $(REAL_OCAMLFIND) $(OCAMLDEP) $(DEPFLAGS) \ -pp "$$pp $(PPFLAGS)" $(INCFLAGS) $< > $@; \ fi $(DOC_DIR)/$(RESULT)/html: mkdir -p $@ $(DOC_DIR)/$(RESULT)/html/index.html: $(DOC_DIR)/$(RESULT)/html $(DOC_FILES) rm -rf $ match obj with Pdf.Array (Pdf.Name "/Separation"::x::_) -> begin match Pdf.direct pdf x with Pdf.Name col -> Printf.printf "%s\n" col | _ -> () end | _ -> ()) pdf cpdf-2.8.1/cpdfembed.ml0000664000175000017500000001122214771516640013372 0ustar johnjohn(* Embed a font *) open Pdfutil type t = Pdftext.font list * (int, int * int) Hashtbl.t (* Table returns font number and charcode for given unicode codepoint *) type cpdffont = PreMadeFontPack of t | EmbedInfo of {fontfile : Pdfio.bytes; fontname : string; encoding : Pdftext.encoding} | ExistingNamedFont let fontpack_of_standardfont sf = let te = Pdftext.text_extractor_of_font_real sf in let table = null_hash () in for x = 0 to 255 do let u = hd (Pdftext.codepoints_of_text te (string_of_char (char_of_int x))) in Hashtbl.add table u (0, x) done; ([sf], table) let get_char (fonts, table) u = match Hashtbl.find table u with | (n, charcode) -> Some (charcode, n, List.nth fonts n) | exception Not_found -> None let fontnum = ref 0 let basename () = incr fontnum; "AAAAA" ^ string_of_char (char_of_int (!fontnum + 65)) let make_single_font ~fontname ~encoding pdf f = let name_1 = basename () in let module TT = Cpdftruetype in let fontfile = let len = Pdfio.bytes_size f.TT.subset_fontfile in Pdf.Stream {contents = (Pdf.Dictionary [("/Length", Pdf.Integer len); ("/Length1", Pdf.Integer len)], Pdf.Got f.TT.subset_fontfile)} in let fontfile_num = Pdf.addobj pdf fontfile in let open Pdftext in let fontmetrics = let a = Array.make 256 0. in for x = f.TT.firstchar to f.TT.lastchar do a.(x) <- float_of_int (f.TT.widths.(x - f.TT.firstchar)) done; a in (f.TT.subset, SimpleFont {fonttype = Truetype; basefont = Printf.sprintf "/%s+%s" name_1 fontname; fontmetrics = Some fontmetrics; firstchar = f.TT.firstchar; lastchar = f.TT.lastchar; widths = f.TT.widths; fontdescriptor = Some {ascent = float_of_int f.TT.ascent; descent = float_of_int f.TT.descent; avgwidth = float_of_int f.TT.avgwidth; maxwidth = float_of_int f.TT.maxwidth; flags = f.TT.flags; italicangle = float_of_int f.TT.italicangle; capheight = float_of_int f.TT.capheight; xheight = float_of_int f.TT.xheight; stemv = float_of_int f.TT.stemv; fontbbox = (float_of_int f.TT.minx, float_of_int f.TT.miny, float_of_int f.TT.maxx, float_of_int f.TT.maxy); fontfile = Some (FontFile2 fontfile_num); charset = None; tounicode = f.TT.tounicode}; encoding}) let make_fontpack_hashtable fs = let indexes = indx0 fs in let table = null_hash () in iter2 (fun i (subset, f) -> let charcode_extractor = Pdftext.charcode_extractor_of_font_real f in iter (fun u -> match charcode_extractor u with | Some x -> Hashtbl.add table u (i, x) | None -> Printf.printf "charcode_extractor could not find char U+%04x in make_fontpack_hashtable\n" u) subset) indexes fs; table let embed_truetype pdf ~fontfile ~fontname ~codepoints ~encoding = if codepoints = [] then ([], null_hash ()) else (* Can't call Cpdftruetype.parse with empty codepoint set. *) let fs = Cpdftruetype.parse ~subset:codepoints fontfile encoding in let subsets_and_their_fonts = map (make_single_font ~fontname ~encoding pdf) fs in (map snd subsets_and_their_fonts, make_fontpack_hashtable subsets_and_their_fonts) let rec collate_runs cfn a = function | [] -> rev (map rev a) | (charcode, fontnum, font) as h::t -> match a with | [] -> collate_runs fontnum [[h]] t | this::rest -> if fontnum = cfn then collate_runs cfn ((h::this)::rest) t else collate_runs fontnum ([h]::this::rest) t let collate_runs = function | [] -> [] | (_, fontnum, _)::_ as l -> collate_runs fontnum [] l let fontnames = [(Pdftext.TimesRoman, ["NimbusRoman-Regular.ttf"]); (Pdftext.TimesBold, ["NimbusRoman-Bold.ttf"]); (Pdftext.TimesItalic, ["NimbusRoman-Italic.ttf"]); (Pdftext.TimesBoldItalic, ["NimbusRoman-BoldItalic.ttf"]); (Pdftext.Helvetica, ["NimbusSans-Regular.ttf"]); (Pdftext.HelveticaBold, ["NimbusSans-Bold.ttf"]); (Pdftext.HelveticaOblique, ["NimbusSans-Italic.ttf"]); (Pdftext.HelveticaBoldOblique, ["NimbusSans-BoldItalic.ttf"]); (Pdftext.Courier, ["NimbusMonoPS-Regular.ttf"]); (Pdftext.CourierBold, ["NimbusMonoPS-Bold.ttf"]); (Pdftext.CourierOblique, ["NimbusMonoPS-Italic.ttf"]); (Pdftext.CourierBoldOblique, ["NimbusMonoPS-BoldItalic.ttf"]); (Pdftext.Symbol, ["StandardSymbolsPS.ttf"]); (Pdftext.ZapfDingbats, ["D050000L.ttf"])] let load_substitute dirname f = let filename = hd (List.assoc f fontnames) in (Pdfio.bytes_of_string (contents_of_file (Filename.concat dirname filename)), Filename.remove_extension filename) cpdf-2.8.1/cpdffont.mli0000664000175000017500000000220514771516640013436 0ustar johnjohn(** Fonts *) (** {2 Listing fonts} *) (** Print font list to stdout *) val print_fonts : ?json:bool -> Pdf.t -> int list -> unit (** Return font list. Page number, name, subtype, basefont, encoding, font (direct). *) val list_fonts : Pdf.t -> int list -> (int * string * string * string * string * Pdf.pdfobject) list (** Return font list in JSON format *) val json_fonts : Pdf.t -> int list -> Cpdfyojson.Safe.t (** {2 Miscellany} *) (** Embed missing fonts *) val embed_missing_fonts : string -> bool -> string -> string -> unit (** Copy a font *) val copy_font : Pdf.t -> string -> int -> int list -> Pdf.t -> Pdf.t (** Report missing fonts *) val missing_fonts : ?l:(int * string * string * string * string) list ref -> Pdf.t -> int list -> unit (** Return missing fonts *) val missing_fonts_return : Pdf.t -> int list -> (int * string * string * string * string) list (** Print a font table to Standard Output. *) val print_font_table : Pdf.t -> string -> int -> unit (** Extract a font file to disk. *) val extract_fontfile : int -> string -> string -> Pdf.t -> unit (** Remove fonts from a document. *) val remove_fonts : Pdf.t -> Pdf.t cpdf-2.8.1/cpdfunicodedata.source.ml0000664000175000017500000001176714771516640016113 0ustar johnjohn(* UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE Unicode Data Files include all data files under the directories http://www.unicode.org/Public/, http://www.unicode.org/reports/, and http://www.unicode.org/cldr/data/. Unicode Data Files do not include PDF online code charts under the directory http://www.unicode.org/Public/. Software includes any source code published in the Unicode Standard or under the directories http://www.unicode.org/Public/, http://www.unicode.org/reports/, and http://www.unicode.org/cldr/data/. NOTICE TO USER: Carefully read the following legal agreement. BY DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING UNICODE INC.'S DATA FILES ("DATA FILES"), AND/OR SOFTWARE ("SOFTWARE"), YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE. COPYRIGHT AND PERMISSION NOTICE Copyright © 1991-2015 Unicode, Inc. All rights reserved. Distributed under the Terms of Use in http://www.unicode.org/copyright.html. Permission is hereby granted, free of charge, to any person obtaining a copy of the Unicode data files and any associated documentation (the "Data Files") or Unicode software and any associated documentation (the "Software") to deal in the Data Files or Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, and/or sell copies of the Data Files or Software, and to permit persons to whom the Data Files or Software are furnished to do so, provided that (a) this copyright and permission notice appear with all copies of the Data Files or Software, (b) this copyright and permission notice appear in associated documentation, and (c) there is clear notice in each modified Data File or in the Software as well as in the documentation associated with the Data File(s) or Software that the data or software has been modified. THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA FILES OR SOFTWARE. Except as contained in this notice, the name of a copyright holder shall not be used in advertising or otherwise to promote the sale, use or other dealings in these Data Files or Software without prior written authorization of the copyright holder. *) open Pdfutil let unicodedata_source = __DATA:UnicodeData.txt type t = {code_value : string; character_name : string; general_category : string; canonical_combining_classes : string; bidirectional_category : string; character_decomposition_mapping : string; decimal_digit_value : string; digit_value : string; numeric_value : string; mirrored : string; unicode_10_name : string; iso_10646_comment_field : string; uppercase_mapping : string; lowercase_mapping : string; titlecase_mapping : string} let get_single_field i = let r = implode (Pdfread.getuntil true (function c -> c = ';' || c = '\n') i) in Pdfio.nudge i; r let parse_entry i = let code_value = get_single_field i in let character_name = get_single_field i in let general_category = get_single_field i in let canonical_combining_classes = get_single_field i in let bidirectional_category = get_single_field i in let character_decomposition_mapping = get_single_field i in let decimal_digit_value = get_single_field i in let digit_value = get_single_field i in let numeric_value = get_single_field i in let mirrored = get_single_field i in let unicode_10_name = get_single_field i in let iso_10646_comment_field = get_single_field i in let uppercase_mapping = get_single_field i in let lowercase_mapping = get_single_field i in let titlecase_mapping = get_single_field i in {code_value; character_name; general_category; canonical_combining_classes; bidirectional_category; character_decomposition_mapping; decimal_digit_value; digit_value; numeric_value; mirrored; unicode_10_name; iso_10646_comment_field; uppercase_mapping; lowercase_mapping; titlecase_mapping} let rec parse_unicodedata a i = if i.Pdfio.pos_in () = i.Pdfio.in_channel_length + 2 (* it's been nudged *) then rev a else parse_unicodedata (parse_entry i::a) i let unicodedata = memoize (fun () -> let r = unicodedata_source |> Pdfio.bytes_of_string |> Pdfcodec.decode_flate |> Pdfio.string_of_bytes |> Pdfio.input_of_string |> parse_unicodedata [] in (*iter print_entry r;*) r) cpdf-2.8.1/cpdfua.ml0000664000175000017500000024075614771516640012743 0ustar johnjohnopen Pdfutil open Cpdferror (* Implements the Matterhorn checks for PDF/UA-1 except for: Unimplemented: 31-011--016,018,030 Require looking inside font files Partially implemented: 31-027, 10-001 Require looking inside font files 11-001--005 Natural Language (We just check for top-level document language.) *) type subformat = | PDFUA1 | PDFUA2 let subformat_of_string = function | "PDF/UA-1" -> PDFUA1 | "PDF/UA-2" -> PDFUA2 | _ -> error "Unknown subformat" exception MatterhornError of Cpdfyojson.Safe.t exception MatterhornUnimplemented let merror () = raise (MatterhornError `Null) let merror_str s = raise (MatterhornError (`String s)) let unimpl () = raise MatterhornUnimplemented (* A simple type for structure trees, for doing structure checks. For now just the element name, and its children. *) type st = E of string * st list (* Now one which contains the attributes too. *) type st2 = E2 of string * string list * st2 list let print_children (E (n, cs)) = Printf.printf "%S: " n; iter (fun (E (n, _)) -> Printf.printf "%S " n) cs; flprint "\n" (* Read attributes. *) let rec read_single pdf d = match Pdf.direct pdf d with | Pdf.Dictionary d -> map fst d | Pdf.Stream s -> read_single pdf (fst !s) | Pdf.Name n -> [n] | x -> error ("read_single: " ^ Pdfwrite.string_of_pdf x) let read_a pdf n stnode = match Pdf.lookup_direct pdf n stnode with | Some (Pdf.Array attrs) -> let attrs = keep (function Pdf.Integer _ -> false | _ -> true) attrs in flatten (map (read_single pdf) attrs) | Some (Pdf.Name n) -> [n] | Some (Pdf.Dictionary d) -> read_single pdf (Pdf.Dictionary d) | Some (Pdf.Stream s) -> read_single pdf (Pdf.Stream s) | Some _ -> [] | None -> [] let read_attributes pdf stnode = let from_a = read_a pdf "/A" stnode in let from_c = read_a pdf "/C" stnode in (* Prefer entries from a, but we are just testing for presence, so merely setify *) let attrs = setify (from_a @ from_c) in (* For now, stick /ID, /Alt, /ActualText in here too. *) let alt = match Pdf.lookup_direct pdf "/Alt" stnode with | Some _ -> ["/Alt"] | None -> [] in let id = match Pdf.lookup_direct pdf "/ID" stnode with | Some _ -> ["/ID"] | None -> [] in let at = match Pdf.lookup_direct pdf "/ActualText" stnode with | Some _ -> ["/ActualText"] | None -> [] in let pageref = match Pdf.direct pdf stnode with | Pdf.Dictionary d -> begin match lookup "/Pg" d with | Some (Pdf.Indirect i) -> ["_" ^ string_of_int i] | _ -> [] end | _ -> [] in attrs @ id @ at @ alt @ pageref let rec read_st_inner pdf stnode = let s = match Pdf.lookup_direct pdf "/S" stnode with | Some (Pdf.Name s) -> s | _ -> "" in match Pdf.lookup_direct pdf "/K" stnode with | None -> E2 (s, read_attributes pdf stnode, []) | Some (Pdf.Dictionary d) -> E2 (s, read_attributes pdf stnode, [read_st_inner pdf (Pdf.Dictionary d)]) | Some (Pdf.Integer mcd) -> E2 (s, read_attributes pdf stnode, []) (* marked content identifier, we drop. *) | Some (Pdf.Array a) -> E2 (s, read_attributes pdf stnode, read_st_inner_array pdf a) | _ -> error "malformed st node" and read_st_inner_array pdf nodes = map (read_st_inner pdf) nodes let read_st_basic pdf = match Pdf.lookup_obj pdf pdf.Pdf.root with | Pdf.Dictionary d -> begin match lookup "/StructTreeRoot" d with | None -> E2 ("/StructTreeRoot", [], []) | Some st -> match read_st_inner pdf st with | E2 (_, a, b) -> E2 ("/StructTreeRoot", a, b) end | _ -> error "read_st no root" (* Rewrite a tree according to a rolemap. *) let rec rewrite_st rolemap (E2 (n, attr, cs)) = let rec rewrite_st_name rolemap n = match List.assoc_opt n rolemap with | Some n' -> rewrite_st_name rolemap n' | None -> n in E2 (rewrite_st_name rolemap n, attr, map (rewrite_st rolemap) cs) let read_rolemap pdf = function | Pdf.Dictionary d -> option_map (function (k, Pdf.Name v) -> Some (k, v) | _ -> None) d | _ -> error "read_rolemap: not a rolemap" let read_st2 pdf = let rolemap = match Pdf.lookup_chain pdf pdf.Pdf.trailerdict ["/Root"; "/StructTreeRoot"; "/RoleMap"] with | Some rm -> read_rolemap pdf rm | None -> [] in rewrite_st rolemap (read_st_basic pdf) let rec st_of_st2 = function E2 (a, _, cs) -> E (a, map st_of_st2 cs) let rec st_mem p = function | E (s, _) when p s -> true | E (_, cs) -> List.exists (st_mem p) cs let string_of_st st = let rec convert (E (s, ks)) = `Tuple [`String s; `List (map convert ks)] in Cpdfyojson.Safe.pretty_to_string (convert st) (* Return a list of ops for all pages and form xobjects in a document. *) let all_ops ?(xobjects=true) pdf = let form_xobject_ops = if xobjects then let objnums = Pdf.objselect (function Pdf.Stream s when Pdf.lookup_direct pdf "/Subtype" (Pdf.Stream s) = Some (Pdf.Name "/Form") -> true | _ -> false) pdf in map (fun streamnum -> let stream = Pdf.lookup_obj pdf streamnum in let resources = match Pdf.lookup_direct pdf "/Resources" stream with Some d -> d | None -> Pdf.Dictionary [] in Pdfops.parse_operators pdf resources [stream]) objnums else [] in let page_ops = map (fun objnum -> let stream = Pdf.lookup_obj pdf objnum in let resources = match Pdf.lookup_direct pdf "/Resources" stream with Some d -> d | None -> Pdf.Dictionary [] in let content = match Pdf.lookup_direct pdf "/Contents" stream with Some (Pdf.Array a) -> a | Some x -> [x] | None -> [] in Pdfops.parse_operators pdf resources content) (Pdf.page_reference_numbers pdf) in form_xobject_ops @ page_ops let rec artifact_in_content c a = function | [] -> () (* Start content. *) | Pdfops.Op_BDC _::t -> artifact_in_content true a t (* Start artifact. If already in content, this is an error. *) | Pdfops.Op_BMC "/Artifact"::t -> if c then merror () else artifact_in_content c true t (* End artifact or content, whichever is true. If both true, an error. *) | Pdfops.Op_EMC::t -> if c && a then merror () else if c then artifact_in_content false a t else artifact_in_content c false t (* Anything else *) | h::t -> artifact_in_content c a t let rec content_in_artifact c a = function | [] -> () (* Start content. If already in artifact, this is an error. *) | Pdfops.Op_BDC _::t -> if a then merror () else content_in_artifact true a t (* Start artifact. *) | Pdfops.Op_BMC "/Artifact"::t -> content_in_artifact c true t (* End artifact or content, whichever is true. If both true, an error. *) | Pdfops.Op_EMC::t -> if c && a then merror () else if c then content_in_artifact false a t else content_in_artifact c false t (* Anything else *) | h::t -> content_in_artifact c a t (* Content marked as Artifact is present inside tagged content. *) let matterhorn_01_003 _ _ pdf = iter (fun ops -> artifact_in_content false false ops) (all_ops pdf) (* Tagged content is present inside content marked as Artifact. *) let matterhorn_01_004 _ _ pdf = iter (fun ops -> content_in_artifact false false ops) (all_ops pdf) (* Content is neither marked as Artifact nor tagged as real content. *) (* Which operations are real? *) let op_is_real = function | Pdfops.( Op_m _ | Op_l _ | Op_c _ | Op_v _ | Op_y _ | Op_h | Op_re _ | Op_S | Op_s | Op_f | Op_F | Op_f' | Op_B | Op_B' | Op_b | Op_b' | Op_W | Op_W' | Op_Tj _ | Op_TJ _ | Op_' _ | Op_'' _ | Op_sh _ | InlineImage _ | Op_Do _) -> true | _ -> false (* Look at a list of ops and return operators neither marked as neither artifect nor content. Assumes artifact/content markers not nested - so each op is either unmarked, marked as artifact or marked as content. But, of course, other marked content may be present. If it is, it must be properly nested. *) type mc = Artifact | Content | Other let rec naked_ops acc stack = function | [] -> rev acc | Pdfops.Op_BDC (_, Pdf.Dictionary d)::t when lookup "/MCID" d <> None -> naked_ops acc (Content::stack) t | Pdfops.Op_BDC ("/Artifact", _)::t -> naked_ops acc (Artifact::stack) t | Pdfops.Op_BDC _::t -> naked_ops acc (Other::stack) t | Pdfops.Op_BMC ("/Span" | "/Artifact")::t -> naked_ops acc (Artifact::stack) t | Pdfops.Op_BMC _::t -> naked_ops acc (Other::stack) t | Pdfops.Op_EMC::t -> if stack = [] then merror_str "empty stack" else naked_ops acc (tl stack) t | h::t -> if List.exists (function Artifact | Content -> true | _ -> false) stack || not (op_is_real h) then naked_ops acc stack t else naked_ops (h::acc) stack t let print_ops = iter (fun op -> Printf.printf "%s\n" (Pdfops.string_of_op op)) (* We may still have sequences of path-creation operators followed by W or W*. Strip any such. *) let is_path_construction_operator = function | Pdfops.Op_m _ | Pdfops.Op_l _ | Pdfops.Op_c _ | Pdfops.Op_v _ | Pdfops.Op_y _ | Pdfops.Op_h | Pdfops.Op_re _ -> true | _ -> false let rec filter_clipping_operations a = function | (Pdfops.Op_W | Pdfops.Op_W')::t -> let _, r = cleavewhile is_path_construction_operator t in filter_clipping_operations a r | h::t -> filter_clipping_operations (h::a) t | [] -> a let matterhorn_01_005 _ _ pdf = iter (fun ops -> if List.exists op_is_real (let n = filter_clipping_operations [] (rev (naked_ops [] [] ops)) in (*print_ops n;*) n) then merror ()) (all_ops ~xobjects:false pdf) (* Suspects entry has a value of true. *) let matterhorn_01_007 _ _ pdf = match Pdf.lookup_chain pdf pdf.Pdf.trailerdict ["/Root"; "/MarkInfo"; "/Suspects"] with | Some (Pdf.Boolean true) -> merror () | _ -> () let standard_structure_types_2008 = ["/Document"; "/Part"; "/Sect"; "/Div"; "/NonStruct"; "/P"; "/H1"; "/H2"; "/H3"; "/H4"; "/H5"; "/H6"; "/H"; "/Lbl"; "/Span"; "/Link"; "/Annot"; "/Form"; "/Ruby"; "/RB"; "/RT"; "/RP"; "/Warichu"; "/WT"; "/WP"; "/L"; "/LI"; "/LBody"; "/Table"; "/TR"; "/TH"; "/TD"; "/THead"; "/TBody"; "/TFoot"; "/Caption"; "/Figure"; "/Formula"; "/Art"; "/BlockQuote"; "/TOC"; "/TOCI"; "/Index"; "/Private"; "/Quote"; "/Note"; "/Reference"; "/Code"; "/BibEntry"] let rec follow_standard rm n = match List.assoc_opt n rm with | None -> raise Exit | Some x when mem x standard_structure_types_2008 -> () | Some x -> follow_standard rm x let circular rm = let rec circular n k rm = n < 0 || match List.assoc_opt k rm with None -> false | Some k' -> circular (n - 1) k' rm in List.exists (fun k -> circular (length rm) k rm) (map fst rm) (* One or more non-standard tag’s mapping does not terminate with a standard type. *) let matterhorn_02_001 _ _ pdf = match Pdf.lookup_chain pdf pdf.Pdf.trailerdict ["/Root"; "/StructTreeRoot"; "/RoleMap"] with | Some rm -> let rolemap = read_rolemap pdf rm in if circular rolemap then () else (* Will be reported below *) iter (fun x -> try follow_standard rolemap x with Exit -> merror_str x) (map fst rolemap) | None -> () (* A circular mapping exists. *) let matterhorn_02_003 _ _ pdf = match Pdf.lookup_chain pdf pdf.Pdf.trailerdict ["/Root"; "/StructTreeRoot"; "/RoleMap"] with | Some rm -> let rolemap = read_rolemap pdf rm in if circular rolemap then merror_str "STOP. If rolemap circular, cannot proceed with other checks." (* We never reach here in normal use. This is pre-checked. *) | None -> () (* One or more standard types are remapped. *) let matterhorn_02_004 _ _ pdf = match Pdf.lookup_chain pdf pdf.Pdf.trailerdict ["/Root"; "/StructTreeRoot"; "/RoleMap"] with | Some rm -> let rolemap = read_rolemap pdf rm in iter (function k -> if mem k standard_structure_types_2008 then merror_str k) (map fst rolemap) | None -> () (* Document does not contain an XMP metadata stream *) let matterhorn_06_001 _ _ pdf = match Cpdfmetadata.get_metadata pdf with | Some _ -> () | None -> merror () (* The XMP metadata stream in the Catalog dictionary does not include the PDF/UA identifier. *) let matterhorn_06_002 _ _ pdf = match Cpdfmetadata.get_metadata pdf with | Some metadata -> let _, tree = Cpdfmetadata.xmltree_of_bytes metadata in begin match Cpdfmetadata.get_data_for Cpdfmetadata.pdfuaid "part" tree with | Some _ -> () | None -> merror () end | None -> () (* case covered by test 06_001 above, no need for two failures *) (* XMP metadata stream does not contain dc:title *) let matterhorn_06_003 _ _ pdf = match Cpdfmetadata.get_metadata pdf with | Some metadata -> let _, tree = Cpdfmetadata.xmltree_of_bytes metadata in begin match Cpdfmetadata.get_data_for Cpdfmetadata.dc "title" tree with | Some _ -> () | None -> merror () end | None -> () (* case covered by test 06_001 above, no need for two failures *) (* ViewerPreferences dictionary of the Catalog dictionary does not contain a DisplayDocTitle entry. *) let matterhorn_07_001 _ _ pdf = match Pdf.lookup_chain pdf pdf.Pdf.trailerdict ["/Root"; "/ViewerPreferences"; "/DisplayDocTitle"] with | None -> merror () | _ -> () (* ViewerPreferences dictionary of the Catalog dictionary contains a DisplayDocTitle entry with a value of false. *) let matterhorn_07_002 _ _ pdf = match Pdf.lookup_chain pdf pdf.Pdf.trailerdict ["/Root"; "/ViewerPreferences"; "/DisplayDocTitle"] with | Some (Pdf.Boolean false) -> merror () | _ -> () (* A table-related structure element is used in a way that does not conform to the syntax defined in ISO 32000-1, Table 337. We assume no nesting of whole tables, since it is not excplicitly mentioned in the spec. *) let matterhorn_09_004 st st2 pdf = let rec check_table = function | E ("/Table", cs) -> let cs = begin match cs with | E ("/Caption", _)::cs -> cs | l -> begin match rev cs with | E ("/Caption", _)::cs -> rev cs | cs -> rev cs end end in (* A) 1 or more /TRs is ok *) if List.for_all (function E ("/TR", cs) -> iter check_tr cs; true | _ -> false) cs then () else (* B) 0 or 1 /THead followed by 1 or n /TBody followed by 0 or 1 /TFoot *) begin check_thead_tbody_tfoot cs; let without_thead = match cs with | E ("/THead", _)::cs -> cs | cs -> cs in let without_tfoot = match rev without_thead with | E ("/TFoot", _)::cs -> cs | cs -> cs in if List.exists (function E ("/TBody", _) -> false | _ -> true) without_tfoot then merror_str "Top-level /Table not of required form" end | E (_, cs) -> iter check_table cs and check_tr = function | E (("/TH" | "/TD"), _) -> () | _ -> merror_str "Every /TR element must be a /TH or /TD" and check_thead_tbody_tfoot cs = iter (fun node -> if List.exists (function E ("/TR", _) -> false | _ -> true) node then merror_str "Element in /THead | /TBody | /TFoot not a /TR") (map (function (E (_, cs')) -> cs') cs) in check_table st (* A list-related structure element is used in a way that does not conform to Table 336 in ISO 32000-1. *) let matterhorn_09_005 st st2 pdf = let rec check_l = function | E ("/L", cs) -> (* 0 or 1 captions *) let cs = match cs with E ("/Caption", _)::cs | cs -> cs in (* 1 or n /LI *) begin match cs with | [] -> merror_str "No /LI in /L" | cs -> iter check_li cs end | E (_, cs) -> iter check_l cs and check_li = function (* for each /LI, 1 or n /Lbl or /LBody or both *) | E ("/LI", []) -> merror_str "Empty /LI" | E ("/LI", cs) -> iter check_li_child cs | E ("/L", cs) -> check_l (E ("/L", cs)) | E (n, _) -> merror_str ("Unknown child of /LI: " ^ n) (* need to check all children of /LBody too, to see if any is /L *) and check_li_child = function | E (("/LBody"| "/Lbl"), cs) -> iter check_l cs | E (_, _) -> merror_str "Child of /LI must be /Lbl or /LBody" in check_l st (* A TOC-related structure element is used in a way that does not conform to Table 333 in ISO 32000-1. *) (* We test two things: a) everything under a TOC is correct; and b) There is no TOCI except under a TOC. *) let matterhorn_09_006 st st2 pdf = let seen_toc = ref false in let rec check_toplevel_TOCI n = begin match n with | E ("/TOC", cs) -> set seen_toc | E ("/TOCI", cs) -> if not !seen_toc then merror_str "TOCI without TOC above" | E (_, cs) -> () end; begin match n with | E (_, cs) -> iter check_toplevel_TOCI cs end in let rec check_toc_toci = function | E ("/TOC", cs) -> if List.exists (function E (("/TOC" | "/TOCI"), _) -> false | _ -> true) cs then merror_str "/TOC children must be /TOC or /TOCI"; iter check_toc_toci cs | E ("/TOCI", cs) -> if List.exists (function E (("/TOC" | "/Lbl" | "/Reference" | "/P" | "/NonStruct"), _) -> false | _ -> true) cs then merror_str "Bad child of /TOCI"; iter check_toc_toci cs | E (_, cs) -> iter check_toc_toci cs in check_toplevel_TOCI st; check_toc_toci st (* A Ruby-related structure element is used in a way that does not conform to Table 338 in ISO 32000-1. *) let matterhorn_09_007 st st2 pdf = let rec check_ruby = function | E ("/Ruby", cs) -> if List.exists (function (E (("/RB" | "/RT" | "RP"), _)) -> false | _ -> true) cs then merror () | E (_, cs) -> iter check_ruby cs in check_ruby st (* A Warichu-related structure element is used in a way that does not conform to Table 338 in ISO 32000-1. *) let matterhorn_09_008 st st2 pdf = let rec check_warichu = function | E ("/Ruby", cs) -> if List.exists (function (E (("/WT" | "/WP"), _)) -> false | _ -> true) cs then merror () | E (_, cs) -> iter check_warichu cs in check_warichu st (* Character code cannot be mapped to Unicode. *) let matterhorn_10_001 _ _ pdf = (* Each font in the PDF must either, per 9.10.2 in the standard a) Have a /ToUnicode entry; or b) Be a simple font with a simple encoding; or c) Be a CIDFont matching certain parameters *) let check_diffs diffs = let allowed_names = map fst (Pdfglyphlist.name_to_symbol @ Pdfglyphlist.name_to_win @ Pdfglyphlist.name_to_standard @ Pdfglyphlist.name_to_pdf @ Pdfglyphlist.name_to_macroman) in let names = match diffs with | Pdf.Array a -> option_map (function Pdf.Name n -> Some n | _ -> None) a | _ -> [] in if not (List.for_all (mem' allowed_names) names) then merror () in let check_font font = (*Printf.printf "Check font: %s\n" (Pdfwrite.string_of_pdf font);*) match Pdf.lookup_direct pdf "/ToUnicode" font with | Some _ -> (* a) *) () | _ -> match Pdf.lookup_direct pdf "/Encoding" font with | Some (Pdf.Name ("/MacRomanEncoding" | "/MacExpertEncoding" | "/WinAnsiEncoding")) -> () (* b) 1 *) | Some d -> begin match Pdf.lookup_direct pdf "/Differences" d with | Some diffs -> check_diffs diffs (* b) 2 *) | None -> merror_str "No /Differences" end | None -> match Pdf.lookup_direct pdf "/Subtype" font with | Some (Pdf.Name "/Type0") -> (* c) *) unimpl () | _ -> merror_str "Not a Type 0 font" in let fonts = map (fun (_, _, _, _, _, x) -> x) (Cpdffont.list_fonts pdf (ilist 1 (Pdfpage.endpage pdf))) in iter (fun o -> match Pdf.lookup_direct pdf "/Type" o, Pdf.lookup_direct pdf "/Subtype" o with | Some (Pdf.Name "/Font"), Some (Pdf.Name ("/CIDFontType0" | "/CIDFontType2")) -> () | Some (Pdf.Name "/Font"), _ -> check_font o | _ -> ()) fonts (* If the top-level /Lang is present, that rules all and is sufficient. *) (* Natural language for text in page content cannot be determined. *) let matterhorn_11_001 _ _ pdf = match Pdf.lookup_chain pdf pdf.Pdf.trailerdict ["/Root"; "/Lang"] with | Some (Pdf.String "") -> merror_str "Top-level /Lang is empty" | None -> merror_str "No top-level /Lang" | Some _ -> () (* Natural language for text in Alt, ActualText and E attributes cannot be determined. *) let matterhorn_11_002 _ _ pdf = unimpl () (* Natural language in the Outline entries cannot be determined. *) let matterhorn_11_003 _ _ pdf = unimpl () (* Natural language in the Contents entry for annotations cannot be determined. *) let matterhorn_11_004 _ _ pdf = unimpl () (* Natural language in the TU entry for form fields cannot be determined. *) let matterhorn_11_005 _ _ pdf = unimpl () (* Natural language for document metadata cannot be determined. *) let matterhorn_11_006 _ _ pdf = unimpl () (*
tag alternative or replacement text missing. *) let matterhorn_13_004 _ st2 pdf = let rec check_fig = function | E2 ("/Figure", attrs, cs) -> if not (mem "/Alt" attrs || mem "/ActualText" attrs) then merror (); iter check_fig cs | E2 (_, _, cs) -> iter check_fig cs in check_fig st2 let is_hnum s = match explode s with | ['/'; 'H'] -> false | '/'::'H'::cs -> begin try ignore (int_of_string (implode cs)); true with Failure _ -> false end | _ -> false let num s = int_of_string (implode (tl (tl (explode s)))) let rec headings_list_of_tree (E (n, cs)) = (if is_hnum n then [n] else []) @ flatten (map headings_list_of_tree cs) (* Does use numbered headings, but the first heading tag is not

. *) let matterhorn_14_002 st _ _ = match headings_list_of_tree st with | [] | "/H1"::_ -> () | x::_ -> merror_str x (* Numbered heading levels in descending sequence are skipped (Example:

follows directly after

). *) let matterhorn_14_003 st _ _ = let rec check l = function | [] -> () | n::ns -> let nm = num n in if nm > l + 1 then merror_str (Printf.sprintf "%i -> %i" l nm) else check nm ns in check 1 (headings_list_of_tree st) (* A node contains more than one tag. *) let matterhorn_14_006 st st2 pdf = let found = ref false in let rec check_hs (E (_, cs)) = if length (option_map (function E ("/H", _) -> Some () | _ -> None) cs) > 1 then set found; iter check_hs cs in check_hs st; if !found then merror () (* Document uses both and tags. *) let matterhorn_14_007 st st2 pdf = if st_mem (eq "/H") st && st_mem is_hnum st then merror () (* In a table not organized with Headers attributes and IDs, a cell does not contain a Scope attribute. *) let matterhorn_15_003 st st2 pdf = (* For now, we complain any time a does not have a scope. The 2008 PDF spec, 2014 PDF/UA spec and Matterhorn protocol combined do not quite give enough information to know what is required. To be returned to. *) let rec check_th = function | E2 ("/TH", attr, _) -> if not (List.mem "/Scope" attr) then merror_str "No scope, table organization not checked." | E2 (_, _, cs) -> iter check_th cs in check_th st2 (* tag is missing an Alt attribute. *) let matterhorn_17_002 _ st2 pdf = let rec check_fm = function | E2 ("/Formula", attr, _) -> if not (List.mem "/Alt" attr) then merror () | E2 (_, _, cs) -> iter check_fm cs in check_fm st2 (* Unicode mapping requirements are not met. *) let matterhorn_17_003 _ _ pdf = (* Covered elsewhere, since all text in the PDF must meet these requirements, mathematical expressions need not be considered separately. *) () (* ID entry of the tag is not present. *) let matterhorn_19_003 st st2 pdf = let rec check_note = function | E2 ("/Note", attr, _) -> if not (List.mem "/ID" attr) then merror () | E2 (_, _, cs) -> iter check_note cs in check_note st2 (* ID entry of the tag is non-unique. *) let matterhorn_19_004 _ _ pdf = (* Looking for /S /Note /ID to exist. *) let ids = ref [] in Pdf.objiter (fun _ x -> match Pdf.lookup_direct pdf "/S" x, Pdf.lookup_direct pdf "/ID" x with | Some (Pdf.Name "/Note"), Some (Pdf.String s) -> ids := s::!ids | _ -> ()) pdf; if length (setify_large !ids) < length !ids then merror () (* Name entry is missing or has an empty string as its value in an Optional Content Configuration Dictionary in the Configs entry in the OCProperties entry in the Catalog dictionary. *) let matterhorn_20_001 _ _ pdf = match Pdf.lookup_chain pdf pdf.Pdf.trailerdict ["/Root"; "/OCProperties"; "/Configs"] with | Some (Pdf.Array occds) -> iter (function x -> match Pdf.lookup_direct pdf "/Name" x with None | Some (Pdf.Name "") -> merror () | _ -> ()) occds | _ -> () (* Name entry is missing or has an empty string as its value in an Optional Content Configuration Dictionary that is the value of the D entry in the OCProperties entry in the Catalog dictionary. *) let matterhorn_20_002 _ _ pdf = match Pdf.lookup_chain pdf pdf.Pdf.trailerdict ["/Root"; "/OCProperties"; "/D"], Pdf.lookup_chain pdf pdf.Pdf.trailerdict ["/Root"; "/OCProperties"; "/D"; "/Name"] with | Some _, Some (Pdf.String "") -> merror_str "empty string" | Some _, None -> merror_str "not present" | _ -> () (* An AS entry appears in an Optional Content Configuration Dictionary. *) let matterhorn_20_003 _ _ pdf = begin match Pdf.lookup_chain pdf pdf.Pdf.trailerdict ["/Root"; "/OCProperties"; "/D"; "/AS"] with | Some _ -> merror () | _ -> () end; begin match Pdf.lookup_chain pdf pdf.Pdf.trailerdict ["/Root"; "/OCProperties"; "/Configs"] with | Some (Pdf.Array occds) -> iter (function x -> match Pdf.lookup_direct pdf "/AS" x with Some _ -> merror () | _ -> ()) occds | _ -> () end (* The file specification dictionary for an embedded file does not contain F and UF entries. *) let matterhorn_21_001 _ _ pdf = let from_nametree = match Pdf.lookup_chain pdf pdf.Pdf.trailerdict ["/Root"; "/Names"; "/EmbeddedFiles"] with | Some embeddedfiles -> map snd (Pdf.contents_of_nametree pdf embeddedfiles) | _ -> [] in let from_annots = option_map (fun x -> if x.Pdfannot.subtype = Pdfannot.FileAttachment then Pdf.lookup_direct pdf "/FS" x.Pdfannot.annotrest else None) (flatten (map (Pdfannot.annotations_of_page pdf) (Pdfpage.pages_of_pagetree pdf))) in if List.exists (fun x -> match Pdf.lookup_direct pdf "/F" x, Pdf.lookup_direct pdf "/UF" x with | Some _, Some _ -> false | _ -> true) (from_nametree @ from_annots) then merror () (* File contains the dynamicRender element with value “required”. *) let matterhorn_25_001 _ _ pdf = let rec contains_required_dynamicRender = function | Cpdfmetadata.E (((_, "dynamicRender"), _), [Cpdfmetadata.D "required"]) -> true | Cpdfmetadata.E (_, children) -> List.exists contains_required_dynamicRender children | Cpdfmetadata.D _ -> false in match Pdf.lookup_chain pdf pdf.Pdf.trailerdict ["/Root"; "/AcroForm"; "/XFA"] with | Some (Pdf.Array xfa) -> begin match option_map (function (Pdf.String "config", x) -> Some x | _ -> None) (pairs xfa) with | [config] -> begin match Pdf.direct pdf config with | Pdf.Stream _ as s -> Pdfcodec.decode_pdfstream pdf s; begin match s with | Pdf.Stream {contents = _, Pdf.Got xmlstream} -> let _, tree = Cpdfmetadata.xmltree_of_bytes xmlstream in if contains_required_dynamicRender tree then merror () | _ -> assert false end | _ -> () end | _ -> () end | _ -> () (* The file is encrypted but does not contain a P entry in its encryption dictionary. *) let matterhorn_26_001 _ _ pdf = () (* Would already have failed at this point, because CamlPDF does not allow the decryption of a file with no /P. So this is never reported. A file without a /P is simply reported as malformed upon reading. *) (* The file is encrypted and does contain a P entry but the 10th bit position of the P entry is false. *) let matterhorn_26_002 _ _ pdf = match pdf.Pdf.saved_encryption with | None -> () | Some {Pdf.from_get_encryption_values = (_, _, _, p, _, _, _)} -> if mem Pdfcrypt.NoExtract (Pdfcrypt.banlist_of_p p) then merror () let read_parent_tree pdf = match Pdf.lookup_chain pdf pdf.Pdf.trailerdict ["/Root"; "/StructTreeRoot"; "/ParentTree"] with | Some t -> Pdftree.read_number_tree pdf t | None -> [] (* An annotation, other than of subtype Widget, Link and PrinterMark, is not a direct child of an structure element. *) let matterhorn_28_002 _ _ pdf = let parent_tree = read_parent_tree pdf in (* Find object numbers of all annotations which are not Widget, Link, or Printermark. *) Pdf.objiter (fun n obj -> match Pdf.lookup_direct pdf "/Subtype" obj with | Some (Pdf.Name ("/Stamp" | "/Line" | "Square" | "/Circle" | "/Polygon" | "/PolyLine" | "/Highlight" | "/Underline" | "/Squiggly" | "/StrikeOut" | "/Caret" | "/Ink" | "/FileAttachment" | "/Sound" | "/Movie" | "/Screen" | "/TrapNet" | "/Watermark" | "/3D")) -> (* Check that every /StructParent entry for each of these points to something with /S /Annot. No need to worry about rolemapping, because PDF/UA docs aren't allowed to remap standard types. *) begin match Pdf.lookup_direct pdf "/StructParent" obj with | Some (Pdf.Integer i) -> begin match List.assoc_opt (string_of_int i) parent_tree with | Some d -> begin match Pdf.lookup_direct pdf "/S" d with | Some (Pdf.Name "/Annot") -> () | _ -> merror () end | None -> merror () end | _ -> merror () end | _ -> ()) pdf (* An annotation, other than of subtype Widget, does not have a Contents entry and does not have an alternative description (in the form of an Alt entry in the enclosing structure element). *) (* NB for future: "The requirements of this clause shall not apply to annotations whose hidden flag is set or whose rectangle is outside the CropBox or whose Subtype is Popup." *) let matterhorn_28_004 _ _ pdf = let parent_tree = read_parent_tree pdf in Pdf.objiter (fun n obj -> (*flprint (Pdfwrite.string_of_pdf obj ^ "\n");*) match Pdf.lookup_direct pdf "/Subtype" obj with | Some (Pdf.Name ("/Stamp" | "/Line" | "Square" | "/Circle" | "/Polygon" | "/PolyLine" | "/Highlight" | "/Underline" | "/Squiggly" | "/StrikeOut" | "/Caret" | "/Ink" | "/FileAttachment" | "/Sound" | "/Movie" | "/Screen" | "/TrapNet" | "/Watermark" | "/3D" | "/Link" | "/PrinterMark")) -> begin match Pdf.lookup_direct pdf "/Contents" obj with | Some _ -> () | None -> begin match Pdf.lookup_direct pdf "/StructParent" obj with | Some (Pdf.Integer i) -> begin match List.assoc_opt (string_of_int i) parent_tree with | Some d -> begin match Pdf.lookup_direct pdf "/Alt" d with | Some _ -> () | _ -> merror () end | None -> merror () end | _ -> () (* Ok, since not part of structure tree. *) end end | _ -> ()) pdf (* A form field does not have a TU entry and does not have an alternative description (in the form of an Alt entry in the enclosing structure element). *) let get_field_object_numbers pdf = let rec get_field_object_numbers_inner obj = match obj with | Pdf.Indirect i -> (* Is this referenced item a field (rather than an annotation alone?). If so, count it, and recurse on /Kids. *) begin match Pdf.lookup_direct pdf "/T" (Pdf.Indirect i) with | Some _ -> begin match Pdf.lookup_direct pdf "/Kids" (Pdf.Indirect i) with | Some (Pdf.Array kids) -> i::flatten (map get_field_object_numbers_inner kids) | _ -> [i] end | None -> [] end | x -> Pdfe.log (Printf.sprintf "get_field_object_numbers_inner: non-indirect Kid %S\n" (Pdfwrite.string_of_pdf x)); [] in match Pdf.lookup_chain pdf pdf.Pdf.trailerdict ["/Root"; "/AcroForm"; "/Fields"] with | Some (Pdf.Array toplevelfields) -> flatten (map get_field_object_numbers_inner toplevelfields) | _ -> [] let matterhorn_28_005 _ _ pdf = let missing_tu = option_map (function objnum -> match Pdf.lookup_direct pdf "/T" (Pdf.Indirect objnum) with | Some _ -> None | None -> Some objnum) (get_field_object_numbers pdf) in if missing_tu = [] then () else (* Check for alts in enclosing. We look for /StructParent (from merged annotation, not field) *) let parent_tree = read_parent_tree pdf in iter (fun objnum -> let obj = Pdf.lookup_obj pdf objnum in match Pdf.lookup_direct pdf "/StructParent" obj with | Some (Pdf.Integer i) -> begin match List.assoc_opt (string_of_int i) parent_tree with | Some d -> begin match Pdf.lookup_direct pdf "/Alt" d with | None -> merror_str "no /Alt" | _ -> () end | _ -> merror_str "no parent tree entry" end | _ -> merror_str "no /StructParent") missing_tu (* An annotation with subtype undefined in ISO 32000 does not meet 7.18.1. *) let matterhorn_28_006 _ _ pdf = if List.exists (fun x -> match x.Pdfannot.subtype with Pdfannot.Unknown _ -> true | _ -> false) (flatten (map (Pdfannot.annotations_of_page pdf) (Pdfpage.pages_of_pagetree pdf))) then merror () (* An annotation of subtype TrapNet exists. *) let matterhorn_28_007 _ _ pdf = if List.exists (fun x -> x.Pdfannot.subtype = Pdfannot.TrapNet) (flatten (map (Pdfannot.annotations_of_page pdf) (Pdfpage.pages_of_pagetree pdf))) then merror () (* A page containing an annotation does not contain a Tabs entry *) let matterhorn_28_008 _ _ pdf = if List.exists (fun p -> Pdfannot.annotations_of_page pdf p <> [] && Pdf.lookup_direct pdf "/Tabs" p.Pdfpage.rest = None) (Pdfpage.pages_of_pagetree pdf) then merror () (* A page containing an annotation has a Tabs entry with a value other than S. *) let matterhorn_28_009 _ _ pdf = if List.exists (fun p -> Pdfannot.annotations_of_page pdf p <> [] && Pdf.lookup_direct pdf "/Tabs" p.Pdfpage.rest <> None && (* already covered by 28_008 above. *) Pdf.lookup_direct pdf "/Tabs" p.Pdfpage.rest <> Some (Pdf.Name "/S")) (Pdfpage.pages_of_pagetree pdf) then merror () (* A widget annotation is not nested within a
tag. *) let matterhorn_28_010 _ _ pdf = let parent_tree = read_parent_tree pdf in Pdf.objiter (fun _ o -> match Pdf.lookup_direct pdf "/Subtype" o with | Some (Pdf.Name "/Widget") -> begin match Pdf.lookup_direct pdf "/StructParent" o with | Some (Pdf.Integer i) -> begin match List.assoc_opt (string_of_int i) parent_tree with | Some d -> begin match Pdf.lookup_direct pdf "/S" d with | Some (Pdf.Name "/Form") -> () | _ -> merror_str "type is not form" end | _ -> merror_str "not found in parent tree" end | _ -> merror_str "not in structure tree" end | _ -> ()) pdf (* A link annotation is not nested within a tag. *) let matterhorn_28_011 _ _ pdf = let parent_tree = read_parent_tree pdf in Pdf.objiter (fun _ o -> match Pdf.lookup_direct pdf "/Subtype" o with | Some (Pdf.Name "/Link") -> begin match Pdf.lookup_direct pdf "/StructParent" o with | Some (Pdf.Integer i) -> begin match List.assoc_opt (string_of_int i) parent_tree with | Some d -> begin match Pdf.lookup_direct pdf "/S" d with | Some (Pdf.Name "/Link") -> () | _ -> merror_str "type is not link" end | _ -> merror_str "not found in parent tree" end | _ -> () (* Not part of structure tree. That's ok. *) end | _ -> ()) pdf (* A link annotation does not include an alternate description in its Contents entry. *) let matterhorn_28_012 _ _ pdf = if List.exists (fun x -> x.Pdfannot.subtype = Pdfannot.Link && x.Pdfannot.annot_contents = None ) (flatten (map (Pdfannot.annotations_of_page pdf) (Pdfpage.pages_of_pagetree pdf))) then merror () (* CT entry is missing from the media clip data dictionary. *) let matterhorn_28_014 _ _ pdf = Pdf.objiter (fun _ o -> match Pdf.lookup_direct pdf "/Type" o, Pdf.lookup_direct pdf "/S" o, Pdf.lookup_direct pdf "/CT" o with | Some (Pdf.Name "/MediaClip"), Some (Pdf.Name "/MCD"), None -> merror () | _ -> ()) pdf (* Alt entry is missing from the media clip data dictionary. *) let matterhorn_28_015 _ _ pdf = Pdf.objiter (fun _ o -> match Pdf.lookup_direct pdf "/Type" o, Pdf.lookup_direct pdf "/S" o, Pdf.lookup_direct pdf "/CT" o with | Some (Pdf.Name "/MediaClip"), Some (Pdf.Name "/MCD"), None -> merror () | _ -> ()) pdf (* File attachment annotations do not conform to 7.11. *) let matterhorn_28_016 _ _ pdf = (* Covered by 21_001 above *) () (* A PrinterMark annotation is included in the logical structure. *) let matterhorn_28_017 _ _ pdf = Pdf.objiter (fun _ o -> match Pdf.lookup_direct pdf "/Subtype" o, Pdf.lookup_direct pdf "/StructParent" o with | Some (Pdf.Name "/PrinterMark"), Some _ -> merror () | _ -> ()) pdf (* The appearance stream of a PrinterMark annotation is not marked as Artifact. *) let matterhorn_28_018 _ _ pdf = let annotations = map (Pdf.lookup_obj pdf) (Pdf.objselect (fun o -> match Pdf.lookup_direct pdf "/Subtype" o with Some (Pdf.Name "/PrinterMark") -> true | _ -> false) pdf) in let form_xobjects = let ns = option_map (fun a -> Pdf.lookup_chain pdf a ["/AP"; "/N"]) annotations in flatten (map (function Pdf.Dictionary d -> (map (Pdf.direct pdf) (map snd d)) | x -> [x]) ns) in iter (fun stream -> let resources = match Pdf.lookup_direct pdf "/Resources" stream with Some d -> d | None -> Pdf.Dictionary [] in let ops = Pdfops.parse_operators pdf resources [stream] in if Cpdftype.add_artifacts ops <> ops then merror ()) form_xobjects (* A reference XObject is present. *) let matterhorn_30_001 _ _ pdf = Pdf.objiter (fun _ o -> match Pdf.lookup_direct pdf "/Subtype" o, Pdf.lookup_direct pdf "/Ref" o with | Some (Pdf.Name "/Form"), Some _ -> merror () | _ -> ()) pdf (* Form XObject contains MCIDs and is referenced more than once. *) let matterhorn_30_002 _ _ pdf = let contains_mcid n = let obj = Pdf.lookup_obj pdf n in let ops = Pdfops.parse_operators pdf (match Pdf.lookup_direct pdf "/Resources" obj with Some r -> r | None -> Pdf.Dictionary []) [obj] in keep (function Pdfops.Op_BDC (n, d) when Pdf.lookup_direct pdf "/MCID" d <> None -> true | _ -> false) ops <> [] in (* Regularize inheritance amongst pages. *) Pdfpage.replace_inherit pdf (Pdf.page_reference_numbers pdf); (* Find list of xobject object numbers *) let xobj_objnums = Pdf.objselect (function o -> match Pdf.lookup_direct pdf "/Subtype" o with Some (Pdf.Name "/Form") -> true | _ -> false) pdf in (* Trim to only ones containing MCIDs *) let containing_mcids = keep contains_mcid xobj_objnums in (* We check that an xobject which contains MCIDs is not referenced directly from multiple (page or xobject) i.e is in their /XObject lists. In both cases (page, form xobject) we can look in /Resources/XObject *) let to_check = xobj_objnums @ Pdf.page_reference_numbers pdf in let results = flatten (map (fun objnum -> match Pdf.lookup_chain pdf (Pdf.Indirect objnum) ["/Resources"; "/XObject"] with | Some (Pdf.Dictionary d) -> option_map (function (_, Pdf.Indirect i) when mem i containing_mcids -> Some i | _ -> None) d | _ -> []) to_check) in if setify results <> results then merror () (* A Type 0 font dictionary with encoding other than Identity-H and Identity-V has values for Registry in both CIDSystemInfo dictionaries that are not identical. *) let matterhorn_31_001 _ _ pdf = Pdf.objiter (fun _ o -> match Pdf.lookup_direct pdf "/Subtype" o, Pdf.lookup_direct pdf "/Encoding" o with | Some (Pdf.Name "/Type0"), Some (Pdf.Name ("/Identity-H" | "/Identity-V")) -> () | Some (Pdf.Name "/Type0"), Some (Pdf.Indirect enc) -> if Pdf.lookup_chain pdf (Pdf.Indirect enc) ["/CIDSystemInfo"; "/Registry"] <> Pdf.lookup_chain pdf o ["/DescendantFonts"; "/[0]"; "/CIDSystemInfo"; "/Registry"] then merror () | _ -> ()) pdf (* A Type 0 font dictionary with encoding other than Identity-H and Identity-V has values for Ordering in both CIDSystemInfo dictionaries that are not identical. *) let matterhorn_31_002 st st2 pdf = Pdf.objiter (fun _ o -> match Pdf.lookup_direct pdf "/Subtype" o, Pdf.lookup_direct pdf "/Encoding" o with | Some (Pdf.Name "/Type0"), Some (Pdf.Name ("/Identity-H" | "/Identity-V")) -> () | Some (Pdf.Name "/Type0"), Some (Pdf.Indirect enc) -> if Pdf.lookup_chain pdf (Pdf.Indirect enc) ["/CIDSystemInfo"; "/Ordering"] <> Pdf.lookup_chain pdf o ["/DescendantFonts"; "/[0]"; "/CIDSystemInfo"; "/Ordering"] then merror () | _ -> ()) pdf (* A Type 0 font dictionary with encoding other than Identity-H and Identity-V has a value for Supplement in the CIDSystemInfo dictionary of the CID font that is less than the value for Supplement in the CIDSystemInfo dictionary of the CMap. *) let matterhorn_31_003 st st2 pdf = Pdf.objiter (fun _ o -> match Pdf.lookup_direct pdf "/Subtype" o, Pdf.lookup_direct pdf "/Encoding" o with | Some (Pdf.Name "/Type0"), Some (Pdf.Name ("/Identity-H" | "/Identity-V")) -> () | Some (Pdf.Name "/Type0"), Some (Pdf.Indirect enc) -> if Pdf.lookup_chain pdf (Pdf.Indirect enc) ["/CIDSystemInfo"; "/Registry"] <> Pdf.lookup_chain pdf o ["/DescendantFonts"; "/[0]"; "/CIDSystemInfo"; "/Ordering"] then merror () | _ -> ()) pdf (* A Type 2 CID font contains neither a stream nor the name Identity as the value of the CIDToGIDMap entry. *) let matterhorn_31_004 _ _ pdf = Pdf.objiter (fun _ n -> match Pdf.lookup_direct pdf "/Subtype" n with | Some (Pdf.Name "/CIDFontType2") -> begin match Pdf.lookup_direct pdf "/CIDToGIDMap" n with | Some (Pdf.Name "/Identity" | Pdf.Stream _) -> () | _ -> merror_str (Pdfwrite.string_of_pdf n) end | _ -> ()) pdf (* A Type 2 CID font does not contain a CIDToGIDMap entry. *) let matterhorn_31_005 _ _ pdf = Pdf.objiter (fun _ n -> match Pdf.lookup_direct pdf "/Subtype" n with | Some (Pdf.Name "/CIDFontType2") -> begin match Pdf.lookup_direct pdf "/CIDToGIDMap" n with | Some _ -> () | _ -> merror () end | _ -> ()) pdf (* A CMap is neither listed as described in ISO 32000-1:2008, 9.7.5.2, Table 118 nor is it embedded. *) let cmap_names = ["/GB-EUC-H"; "/GB-EUC-V"; "/GBpc-EUC-H"; "/GBpc-EUC-V"; "/GBK-EUC-H"; "/GBK-EUC-V"; "/GBKp-EUC-H"; "/GBKp-EUC-V"; "/GBK2K-H"; "/GBK2K-V"; "/UniGB-UCS32-H"; "/UniGB-UCS32-V"; "/UniGB-UTF16-H"; "/UniGB-UTF16-V"; "/B5pc-H"; "/B5pc-V"; "/HKscs-B5-H"; "/HKscs-B5-V"; "/ETen-B5-H"; "/ETen-B5-V"; "/ETenms-B5-H"; "/ETenms-B5-V"; "/CNS-EUC-H"; "/CNS-EUC-V"; "/UniCNS-UCS2-H"; "/UniCNS-UCS2-V"; "/UniCNS-UTF16-H"; "/UniCNS-UTF16-V"; "/83pv-RKSJ-H"; "/90ms-RKSJ-H"; "/90ms-RKSJ-V"; "/90msp-RKSJ-H"; "/90msp-RKSJ-V"; "/90pv-RKSJ-H"; "/Add-RKSJ-H"; "/Add-RKSJ-V"; "/EUC-H"; "/EUC-V"; "/Ext-RKSJ-H"; "/Ext-RKSJ-V"; "/H"; "/V"; "/UniJIS-UCS2-H"; "/UniJIS-UCS2-V"; "/UniJIS-UCS2-HW-H"; "/UniJIS-UCS2-HW-V"; "/UniJIS-UTF16-H"; "/UniJIS-UTF16-V"; "/KSC-EUC-H"; "/KSC-EUC-V"; "/KSCms-UHC-H"; "/KSCms-UHC-V"; "/KSCms-UHC-HW-H"; "/KSCms-UHS-HW-V"; "/KSCpc-EUC-H"; "/UniKS-UCS2-H"; "/UniKS-UCS2-V"; "/Identity-H"; "/Identity-V"] let matterhorn_31_006 _ _ pdf = Pdf.objiter (fun _ o -> match Pdf.lookup_direct pdf "/Subtype" o with | Some (Pdf.Name "/Type0") -> begin match Pdf.lookup_direct pdf "/Encoding" o with | Some (Pdf.Name n) when not (List.mem n cmap_names) -> merror_str n | _ -> () end | _ -> ()) pdf (* The WMode entry in a CMap dictionary is not identical to the WMode value in the CMap stream. *) let matterhorn_31_007 _ _ pdf = Pdf.objiter (fun _ o -> match Pdf.lookup_direct pdf "/WMode" o with | Some (Pdf.Integer fromdict) -> if (Pdfcmap.parse_cmap pdf o).wmode <> Some fromdict then merror () | _ -> ()) pdf (* A CMap references another CMap which is not listed in ISO 32000-1:2008, 9.7.5.2, Table 118. *) let matterhorn_31_008 _ _ pdf = Pdf.objiter (fun _ o -> match Pdf.lookup_direct pdf "/UseCMap" o with | Some (Pdf.Name n) when not (List.mem n cmap_names) -> merror_str n | _ -> ()) pdf (* For a font used by text intended to be rendered the font program is not embedded. *) (* NB This, for now, reports all unembedded fonts, save for Type 3 ones... *) let matterhorn_31_009 _ _ pdf = let l = Cpdffont.missing_fonts_return pdf (ilist 1 (Pdfpage.endpage pdf)) in if l <> [] then raise (MatterhornError (`List (map (fun (a, b, c, d, e) -> `String (Printf.sprintf "%i %s %s %s %s" a b c d e)) l))) (* For a font used by text the font program is embedded but it does not contain glyphs for all of the glyphs referenced by the text used for rendering. *) let matterhorn_31_011 _ _ pdf = unimpl () (* The FontDescriptor dictionary of an embedded Type 1 font contains a CharSet string, but at least one of the glyphs present in the font program is not listed in the CharSet string. *) let matterhorn_31_012 _ _ pdf = unimpl () (* The FontDescriptor dictionary of an embedded Type 1 font contains a CharSet string, but at least one of the glyphs listed in the CharSet string is not present in the font program. *) let matterhorn_31_013 _ _ pdf = unimpl () (* The FontDescriptor dictionary of an embedded CID font contains a CIDSet string, but at least one of the glyphs present in the font program is not listed in the CIDSet string. *) let matterhorn_31_014 _ _ pdf = unimpl () (* The FontDescriptor dictionary of an embedded CID font contains a CIDSet string, but at least one of the glyphs listed in the CIDSet string is not present in the font program. *) let matterhorn_31_015 _ _ pdf = unimpl () (* For one or more glyphs, the glyph width information in the font dictionary and in the embedded font program differ by more than 1/1000 unit. *) let matterhorn_31_016 _ _ pdf = unimpl () let is_non_symbolic pdf o = match Pdf.lookup_direct pdf "/FontDescriptor" o with | Some fd -> begin match Pdf.lookup_direct pdf "/Flags" fd with | Some (Pdf.Integer i) -> not (i land 0b100 > 0) | _ -> true end | None -> true let truetype_fontfile pdf o = match Pdf.lookup_chain pdf o ["/FontDescriptor"; "/FontFile2"] with | Some (Pdf.Stream s) -> Pdfcodec.decode_pdfstream_until_unknown pdf (Pdf.Stream s); begin match s with | {contents = (_, Pdf.Got bs)} -> Some bs | _ -> None end | _ -> None (* A non-symbolic TrueType font is used for rendering, but none of the cmap entries in the embedded font program is a non-symbolic cmap. *) let matterhorn_31_017 _ _ pdf = Pdf.objiter (fun _ o -> match Pdf.lookup_direct pdf "/Subtype" o with | Some (Pdf.Name "/TrueType") -> if not (is_non_symbolic pdf o) then let fontfile = truetype_fontfile pdf o in if fontfile = None then () else let cmaps = Cpdftruetype.cmaps (unopt fontfile) in (*iter (fun (x, y) -> Printf.printf "%i, %i\n" x y) cmaps;*) (* Must all be symbolic *) iter (function (1, 8) | (3, 0) -> () | (a, b) -> merror_str (Printf.sprintf "(%i, %i) cmap" a b)) cmaps else () | _ -> ()) pdf (* A non-symbolic TrueType font is used for rendering, but for at least one glyph to be rendered the glyph cannot be looked up by any of the non-symbolic cmap entries in the embedded font program. *) let matterhorn_31_018 _ _ pdf = unimpl () (* The font dictionary for a non-symbolic TrueType font does not contain an Encoding entry. *) let matterhorn_31_019 _ _ pdf = Pdf.objiter (fun _ o -> match Pdf.lookup_direct pdf "/Subtype" o with | Some (Pdf.Name "/TrueType") -> begin match is_non_symbolic pdf o, Pdf.lookup_direct pdf "/Encoding" o with | true, None -> merror () | _ -> () end | _ -> ()) pdf (* The font dictionary for a non-symbolic TrueType font contains an Encoding dictionary which does not contain a BaseEncoding entry. *) let matterhorn_31_020 _ _ pdf = Pdf.objiter (fun _ o -> match Pdf.lookup_direct pdf "/Subtype" o with | Some (Pdf.Name "/TrueType") -> begin match is_non_symbolic pdf o, Pdf.lookup_direct pdf "/Encoding" o with | true, Some ((Pdf.Dictionary _) as d) -> begin match Pdf.lookup_direct pdf "/BaseEncoding" d with | None -> merror () | Some _ -> () end | _ -> () end | _ -> ()) pdf (* The value for either the Encoding entry or the BaseEncoding entry in the Encoding dictionary in a non-symbolic TrueType font dictionary is neither MacRomanEncoding nor WinAnsiEncoding. *) let matterhorn_31_021 _ _ pdf = Pdf.objiter (fun _ o -> match Pdf.lookup_direct pdf "/Subtype" o with | Some (Pdf.Name "/TrueType") -> begin match is_non_symbolic pdf o, Pdf.lookup_direct pdf "/Encoding" o with | true, Some (Pdf.Name ("/MacRomanEncoding" | "/WinAnsiEncoding")) -> () | true, Some (Pdf.Name _) -> merror () | true, Some ((Pdf.Dictionary _) as d) -> begin match Pdf.lookup_direct pdf "/BaseEncoding" d with | Some (Pdf.Name ("/MacRomanEncoding" | "/WinAnsiEncoding")) -> () | Some x -> merror_str (Pdfwrite.string_of_pdf x) | _ -> () end | _ -> () end | _ -> ()) pdf (* The Differences array in the Encoding entry in a non-symbolic TrueType font dictionary contains one or more glyph names which are not listed in the Adobe Glyph List. *) let matterhorn_31_022 _ _ pdf = Pdf.objiter (fun _ o -> match Pdf.lookup_direct pdf "/Subtype" o with | Some (Pdf.Name "/TrueType") -> begin match is_non_symbolic pdf o, Pdf.lookup_direct pdf "/Encoding" o with | true, Some d -> begin match Pdf.lookup_direct pdf "/Differences" d with | Some (Pdf.Array a) -> let glyphs = Pdfglyphlist.glyph_hashes () in let names = option_map (function Pdf.Name n -> Some n | _ -> None) a in iter (fun n -> if not (Hashtbl.mem glyphs n) then merror_str n) names | _ -> () end | _ -> () end | _ -> ()) pdf (* The Differences array is present in the Encoding entry in a non-symbolic TrueType font dictionary but the embedded font program does not contain a (3,1) Microsoft Unicode cmap. *) let matterhorn_31_023 _ _ pdf = Pdf.objiter (fun _ o -> match Pdf.lookup_direct pdf "/Subtype" o, Pdf.lookup_chain pdf o ["/Encoding"; "/Differences"] with | Some (Pdf.Name "/TrueType"), Some _ -> if is_non_symbolic pdf o then let fontfile = truetype_fontfile pdf o in if fontfile = None then () else let cmaps = Cpdftruetype.cmaps (unopt fontfile) in if mem (3, 1) cmaps then () else merror () else () | _ -> ()) pdf (* The Encoding entry is present in the font dictionary for a symbolic TrueType font. *) let matterhorn_31_024 _ _ pdf = Pdf.objiter (fun _ o -> match Pdf.lookup_direct pdf "/Subtype" o with | Some (Pdf.Name "/TrueType") -> begin match is_non_symbolic pdf o, Pdf.lookup_direct pdf "/Encoding" o with | false, Some _ -> merror () | _ -> () end | _ -> ()) pdf (* The embedded font program for a symbolic TrueType font contains no cmap. *) let matterhorn_31_025 _ _ pdf = Pdf.objiter (fun _ o -> match Pdf.lookup_direct pdf "/Subtype" o with | Some (Pdf.Name "/TrueType") -> if not (is_non_symbolic pdf o) then let fontfile = truetype_fontfile pdf o in if fontfile = None then () else let cmaps = Cpdftruetype.cmaps (unopt fontfile) in (*iter (fun (x, y) -> Printf.printf "%i, %i\n" x y) cmaps;*) if cmaps = [] then merror () else () | _ -> ()) pdf (* The embedded font program for a symbolic TrueType font contains more than one cmap, but none of the cmap entries is a (3,0) Microsoft Symbol cmap. *) let matterhorn_31_026 _ _ pdf = Pdf.objiter (fun _ o -> match Pdf.lookup_direct pdf "/Subtype" o with | Some (Pdf.Name "/TrueType") -> if not (is_non_symbolic pdf o) then let fontfile = truetype_fontfile pdf o in if fontfile = None then () else let cmaps = Cpdftruetype.cmaps (unopt fontfile) in (*iter (fun (x, y) -> Printf.printf "%i, %i\n" x y) cmaps;*) if length cmaps > 1 && not (mem (3, 0) cmaps) then merror () else () | _ -> ()) pdf (* A font dictionary does not contain the ToUnicode entry and none of the following is true: the font uses MacRomanEncoding, MacExpertEncoding or WinAnsiEncoding; the font is a Type 1 or Type 3 font and the glyph names of the glyphs referenced are all contained in the Adobe Glyph List or the set of named characters in the Symbol font, as defined in ISO 32000-1:2008, Annex D; the font is a Type 0 font, and its descendant CIDFont uses Adobe-GB1, Adobe-CNS1, Adobe-Japan1 or Adobe-Korea1 character collections; the font is a non-symbolic TrueType font. *) let matterhorn_31_027 _ _ pdf = (* Here, we implement most of this one, but can't check the set of referenced glyphs for Type1 / Type3. *) let c1 o = match Pdf.lookup_direct pdf "/Encoding" o with | Some (Pdf.Name ("/MacRomanEncoding" | "/MacExpertEncoding" | "/WinAnsiEncoding")) -> true | _ -> false in let c3 o = match Pdf.lookup_direct pdf "/Subtype" o with | Some (Pdf.Name "/Type0") -> begin match Pdf.lookup_direct pdf "/DescendantFonts" o with | Some (Pdf.Array [df]) -> begin match Pdf.lookup_direct pdf "/CIDSystemInfo" df with | Some cidinfo -> begin match Pdf.lookup_direct pdf "/Registry" cidinfo, Pdf.lookup_direct pdf "/Ordering" cidinfo with | Some (Pdf.Name "/Adobe"), Some (Pdf.Name ("/GB1" | "/CNS1" | "/Japan1" | "/Korea1")) -> true | _ -> false end | _ -> false end | _ -> false end | _ -> false in let c4 o = is_non_symbolic pdf o in Pdf.objiter (fun _ o -> match Pdf.lookup_direct pdf "/ToUnicode" o with | Some _ -> () | None -> begin match Pdf.lookup_direct pdf "/Type" o with | Some (Pdf.Name "/Font") -> begin match c1 o, c3 o, c4 o with | false, false, false -> begin match Pdf.lookup_direct pdf "/Subtype" o with | Some (Pdf.Name ("/Type0" | "/CIDFontType0" | "/CIDFontType2")) -> () | Some (Pdf.Name ("/Type1" | "/MMType1" | "/Type3")) -> unimpl () | _ -> merror_str (Pdfwrite.string_of_pdf o) end | _ -> () end | _ -> () end) pdf let all_tounicodes pdf = let tus = ref [] in Pdf.objiter (fun _ o -> match Pdf.indirect_number pdf "/ToUnicode" o with | Some i -> tus := i::!tus | None -> ()) pdf; (setify !tus) let check_unicode tu n = mem n (flatten (map (fun x -> Pdftext.codepoints_of_utf16be (snd x)) tu)) (* One or more Unicode values specified in the ToUnicode CMap are zero (0). *) let matterhorn_31_028 _ _ pdf = iter (fun i -> let tu = (Pdfcmap.parse_cmap pdf (Pdf.lookup_obj pdf i)).map in if check_unicode tu 0 then merror ()) (all_tounicodes pdf) (* One or more Unicode values specified in the ToUnicode CMap are equal to either U+FEFF or U+FFFE. *) let matterhorn_31_029 _ _ pdf = iter (fun i -> let tu = (Pdfcmap.parse_cmap pdf (Pdf.lookup_obj pdf i)).map in if check_unicode tu 0xFEFF || check_unicode tu 0xFFFE then merror ()) (all_tounicodes pdf) (* One or more characters used in text showing operators reference the .notdef glyph. *) let matterhorn_31_030 _ _ pdf = unimpl () let matterhorn = [("01-003", "Content marked as Artifact is present inside tagged content.", "UA1:7.1-1", matterhorn_01_003); ("01-004", "Tagged content is present inside content marked as Artifact.", "UA1:7.1-1", matterhorn_01_004); ("01-005", "Content is neither marked as Artifact nor tagged as real content.", "UA1:7-1-2", matterhorn_01_005); ("01-007", "Suspects entry has a value of true.", "UA1:7-1-11", matterhorn_01_007); ("02-001", "One or more non-standard tag’s mapping does not terminate with a standard type.", "UA1:7.1-3", matterhorn_02_001); ("02-003", "A circular mapping exists.", "UA1:7.1-3", matterhorn_02_003); ("02-004", "One or more standard types are remapped.", "UA1:7.1-4", matterhorn_02_004); ("06-001", "Document does not contain an XMP metadata stream", "UA1:7.1-8", matterhorn_06_001); ("06-002", "The XMP metadata stream in the Catalog dictionary does not include the PDF/UA identifier.", "UA1:5", matterhorn_06_002); ("06-003", "XMP metadata stream does not contain dc:title", "UA1:7.1-8", matterhorn_06_003); ("07-001", "ViewerPreferences dictionary of the Catalog dictionary does not contain a DisplayDocTitle entry", "UA1:7.1-9", matterhorn_07_001); ("07-002", "ViewerPreferences dictionary of the Catalog dictionary contains a DisplayDocTitle entry with a value of false", "UA1:7.1-9", matterhorn_07_002); ("09-004", "A table-related structure element is used in a way that does not conform to the syntax defined in ISO 32000-1, Table 337.", "UA1-7.2-1", matterhorn_09_004); ("09-005", "A list-related structure element is used in a way that does not conform to Table 336 in ISO 32000-1.", "UA1-7.2-1", matterhorn_09_005); ("09-006", "A TOC-related structure element is used in a way that does not conform to Table 333 in ISO 32000-1.", "UA1-7.2-1", matterhorn_09_006); ("09-007", "A Ruby-related structure element is used in a way that does not conform to Table 338 in ISO 32000-1.", "UA1-7.2-1", matterhorn_09_007); ("09-008", "A Warichu-related structure element is used in a way that does not conform to Table 338 in ISO 32000-1.", "UA1-7.2-1", matterhorn_09_008); ("10-001", "Character code cannot be mapped to Unicode.", "UA1:7.2-2", matterhorn_10_001); ("11-001", "Natural language for text in page content cannot be determined.", "UA1:7.2-3", matterhorn_11_001); ("11-002", "Natural language for text in Alt, ActualText and E attributes cannot be determined.", "UA1:7.2-3", matterhorn_11_002); ("11-003", "Natural language in the Outline entries cannot be determined.", "UA1:7.2-3", matterhorn_11_003); ("11-004", "Natural language in the Contents entry for annotations cannot be determined.", "UA1:7.2-3", matterhorn_11_004); ("11-005", "Natural language in the TU entry for form fields cannot be determined.", "UA1:7.2-3", matterhorn_11_005); ("11-006", "Natural language for document metadata cannot be determined.", "UA1:7.2-3", matterhorn_11_006); ("13-004", "
tag alternative or replacement text missing.", "UA1:7.3-3", matterhorn_13_004); ("14-002", "Does use numbered headings, but the first heading tag is not

.", "UA1:7.4.2-1", matterhorn_14_002); ("14-003", "Numbered heading levels in descending sequence are skipped (Example:

follows directly after

).", "UA1:7.4-1", matterhorn_14_003); ("14-006", "A node contains more than one tag.", "UA1:7.4.4-1", matterhorn_14_006); ("14-007", "Document uses both and tags.", "UA1:7.4.4-3", matterhorn_14_007); ("15-003", "In a table not organized with Headers attributes and IDs, a cell does not contain a Scope attribute.", "UA1:7.5-2", matterhorn_15_003); ("17-002", " tag is missing an Alt attribute.", "UA1:7.7-1", matterhorn_17_002); ("17-003", "Unicode mapping requirements are not met.", "UA1:7.7-2", matterhorn_17_003); ("19-003", "ID entry of the tag is not present.", "UA1:7.9-2", matterhorn_19_003); ("19-004", "ID entry of the tag is non-unique.", "UA1:7.9-2", matterhorn_19_004); ("20-001", "Name entry is missing or has an empty string as its value in an Optional Content Configuration Dictionary in the Configs entry in the OCProperties entry in the Catalog dictionary.", "UA1:7.10-1", matterhorn_20_001); ("20-002", "Name entry is missing or has an empty string as its value in an Optional Content Configuration Dictionary that is the value of the D entry in the OCProperties entry in the Catalog dictionary.", "UA1:7.10-1", matterhorn_20_002); ("20-003", "An AS entry appears in an Optional Content Configuration Dictionary.", "UA1:7.10-2", matterhorn_20_003); ("21-001", "The file specification dictionary for an embedded file does not contain F and UF entries.", "UA1:7.11-1", matterhorn_21_001); ("25-001", "File contains the dynamicRender element with value “required”.", "UA1:7.15-1", matterhorn_25_001); ("26-001", "The file is encrypted but does not contain a P entry in its encryption dictionary.", "UA1:7.16-1", matterhorn_26_001); ("26-002", "The file is encrypted and does contain a P entry but the 10th bit position of the P entry is false.", "UA1:7.16-1", matterhorn_26_002); ("28-002", "An annotation, other than of subtype Widget, Link and PrinterMark, is not a direct child of an structure element.", "UA1:7.18.1-2", matterhorn_28_002); ("28-004", "An annotation, other than of subtype Widget, does not have a Contents entry and does not have an alternative description (in the form of an Alt entry in the enclosing structure element).", "UA1:7.18.1-4", matterhorn_28_004); ("28-005", "A form field does not have a TU entry and does not have an alternative description (in the form of an Alt entry in the enclosing structure element).", "UA1:7.18.1-4", matterhorn_28_005); ("28-006", "An annotation with subtype undefined in ISO 32000 does not meet 7.18.1.", "UA1:7.18.2-1", matterhorn_28_006); ("28-007", "An annotation of subtype TrapNet exists.", "UA1:7.18.2-2", matterhorn_28_007); ("28-008", "A page containing an annotation does not contain a Tabs entry", "UA1:7.18.3-1", matterhorn_28_008); ("28-009", "A page containing an annotation has a Tabs entry with a value other than S.", "UA1:7.18.3-1", matterhorn_28_009); ("28-010", "A widget annotation is not nested within a tag.", "UA1:7.18.4-1", matterhorn_28_010); ("28-011", "A link annotation is not nested within a tag.", "UA1:7.18.5-1", matterhorn_28_011); ("28-012", "A link annotation does not include an alternate description in its Contents entry.", "UA1:7.18.5-2", matterhorn_28_012); ("28-014", "CT entry is missing from the media clip data dictionary.", "", matterhorn_28_014); ("28-015", "Alt entry is missing from the media clip data dictionary.", "UA1:7.18.6.2-1", matterhorn_28_015); ("28-016", "File attachment annotations do not conform to 7.11.", "UA1:7.18.7-1", matterhorn_28_016); ("28-017", "A PrinterMark annotation is included in the logical structure.", "UA1:7.18.8-1", matterhorn_28_017); ("28-018", "The appearance stream of a PrinterMark annotation is not marked as Artifact.", "UA1:7.18.8-2", matterhorn_28_018); ("30-001", "A reference XObject is present.", "UA1:7.2", matterhorn_30_001); ("30-002", "Form XObject contains MCIDs and is referenced more than once.", "UA1:7.21.3.1-1", matterhorn_30_002); ("31-001", "A Type 0 font dictionary with encoding other than Identity-H and Identity-V has values for Registry in both CIDSystemInfo dictionaries that are not identical.", "UA1:7.21.3-1", matterhorn_31_001); ("31-002", "A Type 0 font dictionary with encoding other than Identity-H and Identity-V has values for Ordering in both CIDSystemInfo dictionaries that are not identical.", "UA1:7.21.3.1-1", matterhorn_31_002); ("31-003", "A Type 0 font dictionary with encoding other than Identity-H and Identity-V has a value for Supplement in the CIDSystemInfo dictionary of the CID font that is less than the value for Supplement in the CIDSystemInfo dictionary of the CMap.", "UA1:7.21.3.1-1", matterhorn_31_003); ("31-004", "A Type 2 CID font contains neither a stream nor the name Identity as the value of the CIDToGIDMap entry.", "UA1:7.21.3.2-1", matterhorn_31_004); ("31-005", "A Type 2 CID font does not contain a CIDToGIDMap entry.", "UA1:7.21.3.2-1", matterhorn_31_005); ("31-006", "A CMap is neither listed as described in ISO 32000- 1:2008, 9.7.5.2, Table 118 nor is it embedded.", "UA1:7.21.3.3-1", matterhorn_31_006); ("31-007", "The WMode entry in a CMap dictionary is not identical to the WMode value in the CMap stream.", "UA1:7.21.3.3-1", matterhorn_31_007); ("31-008", "A CMap references another CMap which is not listed in ISO 32000-1:2008, 9.7.5.2, Table 118.", "UA1:7.21.3.3-2", matterhorn_31_008); ("31-009", "For a font used by text intended to be rendered the font program is not embedded.", "UA1:7.21.4.1-1", matterhorn_31_009); ("31-011", "For a font used by text the font program is embedded but it does not contain glyphs for all of the glyphs referenced by the text used for rendering.", "UA1:7.21.4.1-3", matterhorn_31_011); ("31-012", "The FontDescriptor dictionary of an embedded Type 1 font contains a CharSet string, but at least one of the glyphs present in the font program is not listed in the CharSet string.", "UA1:7.21.4.2-1", matterhorn_31_012); ("31-013", "The FontDescriptor dictionary of an embedded Type 1 font contains a CharSet string, but at least one of the glyphs listed in the CharSet string is not present in the font program.", "UA1:7.21.4.2-2", matterhorn_31_013); ("31-014", "The FontDescriptor dictionary of an embedded CID font contains a CIDSet string, but at least one of the glyphs present in the font program is not listed in the CIDSet string.", "UA1:7.21.4.2-3", matterhorn_31_014); ("31-015", "The FontDescriptor dictionary of an embedded CID font contains a CIDSet string, but at least one of the glyphs listed in the CIDSet string is not present in the font program.", "UA1:7.21.4.2-4", matterhorn_31_015); ("31-016", "For one or more glyphs, the glyph width information in the font dictionary and in the embedded font program differ by more than 1/1000 unit.", "UA1:7.21.5-1", matterhorn_31_016); ("31-017", "A non-symbolic TrueType font is used for rendering, but none of the cmap entries in the embedded font program is a non-symbolic cmap.", "UA1:7.21.6-1", matterhorn_31_017); ("31-018", "A non-symbolic TrueType font is used for rendering, but for at least one glyph to be rendered the glyph cannot be looked up by any of the non-symbolic cmap entries in the embedded font program.", "UA1:7.21.6-2", matterhorn_31_018); ("31-019", "The font dictionary for a non-symbolic TrueType font does not contain an Encoding entry.", "UA1:7.21.6-3", matterhorn_31_019); ("31-020", "The font dictionary for a non-symbolic TrueType font contains an Encoding dictionary which does not contain a BaseEncoding entry.", "UA1:7.21.6-4", matterhorn_31_020); ("31-021", "The value for either the Encoding entry or the BaseEncoding entry in the Encoding dictionary in a non-symbolic TrueType font dictionary is neither MacRomanEncoding nor WinAnsiEncoding.", "UA1:7.21.6-5", matterhorn_31_021); ("31-022", "The Differences array in the Encoding entry in a non-symbolic TrueType font dictionary contains one or more glyph names which are not listed in the Adobe Glyph List.", "UA1:7.21.6-6", matterhorn_31_022); ("31-023", "The Differences array is present in the Encoding entry in a non-symbolic TrueType font dictionary but the embedded font program does not contain a (3,1) Microsoft Unicode cmap.", "UA1:7.21.6-7", matterhorn_31_023); ("31-024", "The Encoding entry is present in the font dictionary for a symbolic TrueType font.", "UA1:7.21.6-8", matterhorn_31_024); ("31-025", "The embedded font program for a symbolic TrueType font contains no cmap.", "UA1:7.21.6-9", matterhorn_31_025); ("31-026", "The embedded font program for a symbolic TrueType font contains more than one cmap, but none of the cmap entries is a (3,0) Microsoft Symbol cmap.", "UA1:7.21.6-10", matterhorn_31_026); ("31-027", "A font dictionary does not contain the ToUnicode entry and none of the following is true: the font uses MacRomanEncoding, MacExpertEncoding or WinAnsiEncoding; the font is a Type 1 or Type 3 font and the glyph names of the glyphs referenced are all contained in the Adobe Glyph List or the set of named characters in the Symbol font, as defined in ISO 32000-1:2008, Annex D; the font is a Type 0 font, and its descendant CIDFont uses Adobe-GB1, Adobe-CNS1, Adobe-Japan1 or Adobe-Korea1 character collections; the font is a non-symbolic TrueType font.", "UA1:7.21.7-1", matterhorn_31_027); ("31-028", "One or more Unicode values specified in the ToUnicode CMap are zero (0).", "UA1:7.21.7-2", matterhorn_31_028); ("31-029", "One or more Unicode values specified in the ToUnicode CMap are equal to either U+FEFF or U+FFFE.", "UA1:7.21.7-3", matterhorn_31_029); ("31-030", "One or more characters used in text showing operators reference the .notdef glyph.", "UA1:7.21.8-1", matterhorn_31_030); ] let test_matterhorn pdf testname = let tests = match testname with | "" -> matterhorn | n -> match keep (fun (n', _, _, _) -> n' = n) matterhorn with | [] -> error "test not found" | [t] -> [t] | _ -> error "duplicate test" in (* A circularity in the role map prevents all structure checks, so we do it first at stop if it fails. *) let circularity_error = try matterhorn_02_003 0 0 pdf; [] with MatterhornError (`String s) -> [("02-003", "A circular mapping exists.", "UA1:7.1-3", `String s)] in if circularity_error <> [] then circularity_error else let st2 = read_st2 pdf in let st = st_of_st2 st2 in option_map (fun (name, error, section, test) -> try test st st2 pdf; None with | MatterhornError extra -> Some (name, error, section, extra) | MatterhornUnimplemented -> None | e -> Some (name, "Incomplete", section, `String ("ERROR: " ^ Printexc.to_string e))) tests let test_matterhorn_print pdf testname = iter (fun (name, error, section, extra) -> Printf.eprintf "%s %s %s %s\n" name section error (if extra = `Null then "" else "(" ^ Cpdfyojson.Safe.to_string extra ^ ")")) (test_matterhorn pdf testname) let test_matterhorn_json pdf testname = `List (map (fun (name, error, section, extra) -> `Assoc [("name", `String name); ("section", `String section); ("error", `String error); ("extra", extra)]) (test_matterhorn pdf testname)) let pdfua_marker = Cpdfmetadata.(E (((rdf, "Description"), [((rdf, "about"), ""); ((Cpdfxmlm.ns_xmlns, "pdfuaid"), pdfuaid)]), [E (((pdfuaid, "part"), []), [D "1"])])) let pdfua2_marker year = Cpdfmetadata.(E (((rdf, "Description"), [((rdf, "about"), ""); ((Cpdfxmlm.ns_xmlns, "pdfuaid"), pdfuaid)]), [E (((pdfuaid, "part"), []), [D "2"]); E (((pdfuaid, "rev"), []), [D (string_of_int year)])])) let rec insert_as_rdf_description fragment = function | Cpdfmetadata.E (((_, "RDF"), _) as rdftag, rdfs) -> Cpdfmetadata.E (rdftag, fragment::rdfs) | Cpdfmetadata.E (((_, "xmpmeta"), _) as xmptag, cs) -> Cpdfmetadata.E (xmptag, map (insert_as_rdf_description fragment) cs) | _ -> error "insert_as_rdf_description: could not find insertion point." let rec delete_pdfua_marker tree = let is_pdfuaid = function | Cpdfmetadata.E (((pdfuaid, ("part" | "rev" | "amd" | "corr")), _), _) when pdfuaid = Cpdfmetadata.pdfuaid -> true | _ -> false in match tree with | Cpdfmetadata.E (((rdf, "Description"), x), c) when rdf = Cpdfmetadata.rdf && List.exists is_pdfuaid c -> Cpdfmetadata.E (((rdf, "Description"), x), keep (notpred is_pdfuaid) c) | Cpdfmetadata.E (x, children) -> Cpdfmetadata.E (x, map delete_pdfua_marker children) | x -> x let mark_inner pdfua_marker pdf = let pdf2 = if Cpdfmetadata.get_metadata pdf = None then Cpdfmetadata.create_metadata pdf else pdf in pdf.Pdf.objects <- pdf2.Pdf.objects; pdf.Pdf.trailerdict <- pdf2.Pdf.trailerdict; pdf.Pdf.root <- pdf2.Pdf.root; match Cpdfmetadata.get_metadata pdf with | Some metadata -> let dtd, tree = Cpdfmetadata.xmltree_of_bytes metadata in let newtree = match Cpdfmetadata.get_data_for Cpdfmetadata.pdfuaid "part" tree with | Some _ -> insert_as_rdf_description pdfua_marker (delete_pdfua_marker tree) | None -> insert_as_rdf_description pdfua_marker tree in let newbytes = Cpdfmetadata.bytes_of_xmltree (dtd, newtree) in let pdf3 = Cpdfmetadata.set_metadata_from_bytes true newbytes pdf in pdf.Pdf.objects <- pdf3.Pdf.objects; pdf.Pdf.trailerdict <- pdf3.Pdf.trailerdict; pdf.Pdf.root <- pdf3.Pdf.root | None -> assert false let mark = mark_inner pdfua_marker let mark2 year = mark_inner (pdfua2_marker year) let remove_mark pdf = match Cpdfmetadata.get_metadata pdf with | Some metadata -> let dtd, tree = Cpdfmetadata.xmltree_of_bytes metadata in let newtree = match Cpdfmetadata.get_data_for Cpdfmetadata.pdfuaid "part" tree with | Some _ -> delete_pdfua_marker tree | None -> tree in let newbytes = Cpdfmetadata.bytes_of_xmltree (dtd, newtree) in let pdf3 = Cpdfmetadata.set_metadata_from_bytes true newbytes pdf in pdf.Pdf.objects <- pdf3.Pdf.objects; pdf.Pdf.trailerdict <- pdf3.Pdf.trailerdict; pdf.Pdf.root <- pdf3.Pdf.root | None -> () let extract_struct_tree pdf = match Pdf.lookup_obj pdf pdf.Pdf.root with | Pdf.Dictionary d -> let zero = `List [`Int 0; `Assoc [("/CPDFJSONformatversion", `Int 1); ("/CPDFJSONpageobjnumbers", `List (map (fun x -> `Int (unopt (Pdfpage.page_object_number pdf x))) (ilist 1 (Pdfpage.endpage pdf))))]] in begin match lookup "/StructTreeRoot" d with | None -> `List [zero] | Some x -> let objs = Pdf.objects_referenced ["/Pg"; "/Obj"; "/Stm"; "/StmOwn"] [] pdf x in `List (zero::map (fun objnum -> let jsonobj = Cpdfjson.json_of_object ~utf8:true ~no_stream_data:false ~parse_content:false pdf (function _ -> ()) (Pdf.lookup_obj pdf objnum) in `List [`Int objnum; jsonobj]) objs) end | _ -> error "extract_struct_tree: no root" (* Use JSON data to replace objects in a file. Negative objects are new ones, we make them positive and renumber them not to clash. Everything else must remain unrenumbered. *) let replace_struct_tree pdf json = try let rec rewrite_indirects negobjnummap = function | Pdf.Indirect i -> begin match lookup i negobjnummap with | Some x -> Pdf.Indirect x | None -> Pdf.Indirect i end | Pdf.Dictionary d -> Pdf.recurse_dict (rewrite_indirects negobjnummap) d | Pdf.Array a -> Pdf.recurse_array (rewrite_indirects negobjnummap) a | x -> x in match json with | `List (`List [`Int 0; _]::xs) -> let pos, neg = List.partition (function (`List [`Int x; _]) -> x > 0 | _ -> error "structure 1") xs in let pos = map (function `List [`Int x; j] -> (x, Cpdfjson.object_of_json j) | _ -> error "structure 2") pos in let neg = map (function `List [`Int x; j] -> (x, Cpdfjson.object_of_json j) | _ -> error "structure 3") neg in let nextnum = Pdf.objcard pdf + 1 in let negobjnummap = if length neg = 0 then [] else map2 (fun n n' -> (n, n')) (map fst neg) (ilist nextnum (nextnum + length neg - 1)) in let pos = map (fun (objnum, obj) -> (objnum, rewrite_indirects negobjnummap obj)) pos in let neg = map (fun (objnum, obj) -> (objnum, rewrite_indirects negobjnummap obj)) neg in iter (Pdf.addobj_given_num pdf) (pos @ neg) | _ -> error "Top level JSON wrong. Must be list with 0 first." with e -> error (Printf.sprintf "replace_struct_tree: %s" (Printexc.to_string e)) let rec remove_empty = function E2 (n, attrs, cs) -> let cs' = map remove_empty cs in E2 (n, attrs, lose (function E2 ("", _, []) -> true | _ -> false) cs') let rec remove_slashes = function E2 (n, attrs, cs) -> E2 ((match n with "" -> "" | n -> implode (tl (explode n))), attrs, map remove_slashes cs) let print_struct_tree pdf = let page_lookup = hashtable_of_dictionary (combine (Pdf.page_reference_numbers pdf) (ilist 1 (Pdfpage.endpage pdf))) in let get_page attrs = match option_map (fun x -> match explode x with '_'::more -> Some (implode more) | _ -> None) attrs with | [i] -> string_of_int (try Hashtbl.find page_lookup (int_of_string i) with _ -> 0) | _ -> "0" in let st = read_st2 pdf in match st with E2 ("/StructTreeRoot", _, []) -> () | _ -> flprint (Cpdfprinttree.to_string ~get_name:(fun (E2 (x, a, _)) -> if int_of_string (get_page a) > 0 then x ^ " (" ^ get_page a ^ ")" else x) ~get_children:(fun (E2 (_, _, cs)) -> cs) (remove_empty (remove_slashes st))) let create_pdfua1 title pagesize pages = let pdf = Cpdfcreate.blank_document_paper pagesize pages in let pdf = Cpdfmetadata.set_pdf_info ~xmp_also:false ~xmp_just_set:false ("/Title", Pdf.String title, 0) pdf in let pdf = Cpdfmetadata.create_metadata pdf in Cpdfmetadata.set_language pdf "en-US"; let pdf = Cpdfmetadata.set_viewer_preference ("/DisplayDocTitle", Pdf.Boolean true, 0) pdf in Pdf.replace_chain pdf ["/Root"; "/MarkInfo"; "/Marked"] (Pdf.Boolean true); Pdf.replace_chain pdf ["/Root"; "/StructTreeRoot"; "/Type"] (Pdf.Name "/StructTreeRoot"); let pdf = {pdf with Pdf.major = 1; Pdf.minor = 7} in mark pdf; pdf let create_pdfua2 title pagesize pages = let pdf = Cpdfcreate.blank_document_paper pagesize pages in let pdf = Cpdfmetadata.set_pdf_info ~xmp_also:false ~xmp_just_set:false ("/Title", Pdf.String title, 0) pdf in let pdf = Cpdfmetadata.create_metadata pdf in Cpdfmetadata.set_language pdf "en-US"; let pdf = Cpdfmetadata.set_viewer_preference ("/DisplayDocTitle", Pdf.Boolean true, 0) pdf in Pdf.replace_chain pdf ["/Root"; "/MarkInfo"; "/Marked"] (Pdf.Boolean true); Pdf.replace_chain pdf ["/Root"; "/StructTreeRoot"; "/Type"] (Pdf.Name "/StructTreeRoot"); let pdf = {pdf with Pdf.major = 2; Pdf.minor = 0} in mark2 2024 pdf; pdf cpdf-2.8.1/cpdfextracttext.ml0000664000175000017500000000406214771516640014701 0ustar johnjohnopen Pdfutil let extract_page_text only_fontsize pdf _ page = let text_extractor = ref None in let right_font_size = ref false in fold_left ( ^ ) "" (map (function | Pdfops.Op_Tf (fontname, fontsize) -> right_font_size := begin match only_fontsize with Some x -> x = fontsize | _ -> false end; let fontdict = match Pdf.lookup_direct pdf "/Font" page.Pdfpage.resources with | None -> raise (Pdf.PDFError "Missing /Font in text extraction") | Some d -> match Pdf.lookup_direct pdf fontname d with | None -> raise (Pdf.PDFError "Missing font in text extraction") | Some d -> d in text_extractor := Some (Pdftext.text_extractor_of_font pdf fontdict); "" | Pdfops.Op_Tj text when !text_extractor <> None -> if not !right_font_size then "" else Pdftext.utf8_of_codepoints (Pdftext.codepoints_of_text (unopt !text_extractor) text) | Pdfops.Op_TJ (Pdf.Array objs) when !text_extractor <> None -> if not !right_font_size then "" else fold_left ( ^ ) "" (option_map (function | Pdf.String text -> Some (Pdftext.utf8_of_codepoints (Pdftext.codepoints_of_text (unopt !text_extractor) text)) | _ -> None) objs) | _ -> "") (Pdfops.parse_operators pdf page.Pdfpage.resources page.Pdfpage.content)) (* For each page, extract all the ops with text in them, and concatenate it all together *) let extract_text extract_text_font_size pdf range = fold_left (fun x y -> x ^ (if x <> "" && y <> "" then "\n" else "") ^ y) "" (Cpdfpage.map_pages (extract_page_text extract_text_font_size pdf) pdf range) cpdf-2.8.1/cpdfstrftime.mli0000664000175000017500000000106514771516640014330 0ustar johnjohn(** C-style strftime *) (** Supports the following format specifiers: %a %A %b %B %s %e %H %I %j %m %M %p %S %T %u %w %Y %% *) (** Our version of Unix's tm, so Unix not required *) type t = {_tm_sec : int; _tm_min : int; _tm_hour : int; _tm_mday : int; _tm_mon : int; _tm_year : int; _tm_wday : int; _tm_yday : int; _tm_isdst : bool} (** Get the time now *) val current_time : unit -> t (** A dummy time value *) val dummy : t (** Strftime. If time omitted, the current time is used. *) val strftime : ?time:t -> string -> string cpdf-2.8.1/LICENSE.md0000664000175000017500000010333314771516640012540 0ustar johnjohn GNU AFFERO GENERAL PUBLIC LICENSE Version 3, 19 November 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU Affero General Public License is a free, copyleft license for software and other kinds of works, specifically designed to ensure cooperation with the community in the case of network server software. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, our General Public Licenses are intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. Developers that use our General Public Licenses protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License which gives you legal permission to copy, distribute and/or modify the software. A secondary benefit of defending all users' freedom is that improvements made in alternate versions of the program, if they receive widespread use, become available for other developers to incorporate. Many developers of free software are heartened and encouraged by the resulting cooperation. However, in the case of software used on network servers, this result may fail to come about. The GNU General Public License permits making a modified version and letting the public access it on a server without ever releasing its source code to the public. The GNU Affero General Public License is designed specifically to ensure that, in such cases, the modified source code becomes available to the community. It requires the operator of a network server to provide the source code of the modified version running there to the users of that server. Therefore, public use of a modified version, on a publicly accessible server, gives the public access to the source code of the modified version. An older license, called the Affero General Public License and published by Affero, was designed to accomplish similar goals. This is a different license, not a version of the Affero GPL, but Affero has released a new version of the Affero GPL which permits relicensing under this license. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU Affero General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Remote Network Interaction; Use with the GNU General Public License. Notwithstanding any other provision of this License, if you modify the Program, your modified version must prominently offer all users interacting with it remotely through a computer network (if your version supports such interaction) an opportunity to receive the Corresponding Source of your version by providing access to the Corresponding Source from a network server at no charge, through some standard or customary means of facilitating copying of software. This Corresponding Source shall include the Corresponding Source for any work covered by version 3 of the GNU General Public License that is incorporated pursuant to the following paragraph. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the work with which it is combined will remain governed by version 3 of the GNU General Public License. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU Affero General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU Affero General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU Affero General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU Affero General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If your software can interact with users remotely through a computer network, you should also make sure that it provides a way for users to get its source. For example, if your program is a web application, its interface could display a "Source" link that leads users to an archive of the code. There are many ways you could offer source, and different solutions will be better for different programs; see section 13 for the specific requirements. You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU AGPL, see . cpdf-2.8.1/cpdfbookmarks.mli0000664000175000017500000000337314771516640014467 0ustar johnjohn(** Bookmarks *) (** [parse_bookmark_file verify pdf input] parses the bookmark file in [input]. Details of the bookmark file format can be found in cpdfmanual.pdf. *) val parse_bookmark_file : bool -> Pdf.t -> Pdfio.input -> Pdfmarks.t list (** [add_bookmarks verify input pdf] adds bookmarks from the bookmark file give. If [verify] is given, bookmarks will be verified to ensure, for example, that they are not out of the page range. In the new JSON format if chosen. *) val add_bookmarks : json:bool -> bool -> Pdfio.input -> Pdf.t -> Pdf.t (** [list_bookmarks encoding range pdf output] lists the bookmarks to the given output in the format specified in cpdfmanual.pdf. In the new JSON format if chosen. *) val list_bookmarks : json:bool -> json_preserve_actions:bool -> Cpdfmetadata.encoding -> int list -> Pdf.t -> Pdfio.output -> unit (** Get bookmarks in JSON format. *) val get_bookmarks_json : json_preserve_actions:bool -> Pdf.t -> Pdfio.bytes (** [name_of_spec encoding marks pdf splitlevel spec n filename startpage endpage] expands a bookmark specifiation filename. *) val name_of_spec : Cpdfmetadata.encoding -> Pdfmarks.t list -> Pdf.t -> int -> string -> int -> string -> int -> int -> string (** Indent bookmarks in each file by one and add a title bookmark pointing to the first page. If the boolean is set, then use the PDF's metadata title instead of the filename. *) val add_bookmark_title : string -> bool -> Pdf.t -> Pdf.t (** Set bookmarks to be open to the given level. *) val bookmarks_open_to_level : int -> Pdf.t -> Pdf.t (** Alter bookmark destinations given a hash table of (old page reference number, new page reference number) pairings *) val change_bookmark : (int, int) Hashtbl.t -> Pdfmarks.t -> Pdfmarks.t cpdf-2.8.1/cpdfaddtext.mli0000664000175000017500000000402514771516640014127 0ustar johnjohn(** Adding text *) (** Colours *) type colour = Grey of float | RGB of float * float * float | CYMK of float * float * float * float (** Build a colour operation for filling with the given colour. *) val colour_op : colour -> Pdfops.t (** Build a colour operation for filing with the given colour *) val colour_op_stroke : colour -> Pdfops.t (** Justification of multiline text *) type justification = | LeftJustify | CentreJustify | RightJustify (** Call [add_texts linewidth outline fast fontname font bates batespad colour position linespacing fontsize underneath text pages orientation relative_to_cropbox midline_adjust topline filename pdf]. For details see cpdfmanual.pdf *) val addtexts : float -> (*linewidth*) bool -> (*outline*) bool -> (*fast*) string -> (*fontname*) Cpdfembed.cpdffont -> (*font*) int -> (* bates number *) int option -> (* bates padding width *) colour -> (*colour*) Cpdfposition.position -> (*position*) float -> (*linespacing*) float -> (*fontsize*) bool -> (*underneath*) string ->(*text*) int list ->(*page range*) bool ->(*relative to cropbox?*) float ->(*opacity*) justification ->(*justification*) bool ->(*midline adjust?*) bool ->(*topline adjust?*) string ->(*filename*) float option -> (*extract_text_font_size*) string -> (* shift *) ?raw:bool -> (* raw *) Pdf.t ->(*pdf*) Pdf.t (** Add a rectangle to the given pages. [addrectangle fast (w, h) colour outline linewidth opacity position relative_to_cropbox underneath range pdf]. *) val addrectangle : bool -> float * float -> colour -> bool -> float -> float -> Cpdfposition.position -> bool -> bool -> int list -> Pdf.t -> Pdf.t (**/**) val replace_pairs : Pdfmarks.t list -> (int, int) Hashtbl.t -> Pdf.t -> int -> float option -> string -> int -> int option -> int -> Pdfpage.t -> (string * (unit -> string)) list val process_text : Cpdfstrftime.t -> string -> (string * (unit -> string)) list -> string cpdf-2.8.1/cpdfyojson.mli0000664000175000017500000022550414771516640014022 0ustar johnjohn(* Copyright (c) 2010-2012, Martin Jambon All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. Neither the name of nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *) # 1 "yojson.cppo.mli" (** The Yojson library provides several types for representing JSON values, with different use cases. - The {{!basic}Basic} JSON type, - The {{!safe}Safe} JSON type, a superset of JSON with safer support for integers, - The {{!raw}Raw} JSON type, a superset of JSON, safer but less integrated with OCaml types. Each of these different types have their own module. *) (** {1 Shared types and functions} *) # 1 "common.mli" val version : string exception Json_error of string (** Exception used: - in JSON readers, if parsing fails; - in JSON writers and pretty printing, if [float] value is not allowed in standard JSON. *) val json_error : string -> 'a (** @raise Json_error *) type lexer_state = { buf : Buffer.t; (** Buffer used to accumulate substrings *) mutable lnum : int; (** Current line number (counting from 1) *) mutable bol : int; (** Absolute position of the first character of the current line (counting from 0) *) mutable fname : string option; (** Name referencing the input file in error messages *) } module Lexer_state : sig type t = lexer_state = { buf : Buffer.t; mutable lnum : int; mutable bol : int; mutable fname : string option; } end val init_lexer : ?buf: Buffer.t -> ?fname: string -> ?lnum: int -> unit -> lexer_state (** Create a fresh lexer_state record. *) (**/**) (* begin undocumented section *) exception End_of_array exception End_of_object exception End_of_tuple exception End_of_input (* end undocumented section *) (**/**) # 16 "yojson.cppo.mli" (** {1:basic Basic JSON tree type} *) module Basic : sig (** This module supports standard JSON nodes only, i.e. no special syntax for variants or tuples as supported by {!Yojson.Safe}. Arbitrary integers are not supported as they must all fit within the standard OCaml int type (31 or 63 bits depending on the platform). The main advantage of this module is its simplicity. *) # 1 "type.ml" (** {3 Type of the JSON tree} *) type t = [ | `Null | `Bool of bool # 8 "type.ml" | `Int of int # 14 "type.ml" | `Float of float # 20 "type.ml" | `String of string # 25 "type.ml" | `Assoc of (string * t) list | `List of t list # 33 "type.ml" ] (** All possible cases defined in Yojson: - `Null: JSON null - `Bool of bool: JSON boolean - `Int of int: JSON number without decimal point or exponent. - `Intlit of string: JSON number without decimal point or exponent, preserved as a string. - `Float of float: JSON number, Infinity, -Infinity or NaN. - `Floatlit of string: JSON number, Infinity, -Infinity or NaN, preserved as a string. - `String of string: JSON string. Bytes in the range 128-255 are preserved as-is without encoding validation for both reading and writing. - `Stringlit of string: JSON string literal including the double quotes. - `Assoc of (string * json) list: JSON object. - `List of json list: JSON array. - `Tuple of json list: Tuple (non-standard extension of JSON). Syntax: [("abc", 123)]. - `Variant of (string * json option): Variant (non-standard extension of JSON). Syntax: [<"Foo">] or [<"Bar":123>]. *) (* Note to adventurers: ocamldoc does not support inline comments on each polymorphic variant, and cppo doesn't allow to concatenate comments, so it would be complicated to document only the cases that are preserved by cppo in the type definition. *) # 1 "write.mli" (** {2 JSON writers} *) val to_string : ?buf:Buffer.t -> ?len:int -> ?suf:string -> ?std:bool -> t -> string (** Write a compact JSON value to a string. @param buf allows to reuse an existing buffer created with [Buffer.create]. The buffer is cleared of all contents before starting and right before returning. @param len initial length of the output buffer. @param suf appended to the output as a suffix, defaults to empty string. @param std use only standard JSON syntax, i.e. convert tuples and variants into standard JSON (if applicable), refuse to print NaN and infinities, require the root node to be either an object or an array. Default is [false]. @raise Json_error if [float] value is not allowed in standard JSON. *) val to_channel : ?buf:Buffer.t -> ?len:int -> ?suf:string -> ?std:bool -> out_channel -> t -> unit (** Write a compact JSON value to a channel. Note: the [out_channel] is not flushed by this function. See [to_string] for the role of the optional arguments and raised exceptions. *) val to_output : ?buf:Buffer.t -> ?len:int -> ?suf:string -> ?std:bool -> < output : string -> int -> int -> int; .. > -> t -> unit (** Write a compact JSON value to an OO channel. See [to_string] for the role of the optional arguments and raised exceptions. *) val to_file : ?len:int -> ?std:bool -> ?suf:string -> string -> t -> unit (** Write a compact JSON value to a file. See [to_string] for the role of the optional arguments and raised exceptions. @param suf is a suffix appended to the output Newline by default for POSIX compliance. *) val to_buffer : ?suf:string -> ?std:bool -> Buffer.t -> t -> unit (** Write a compact JSON value to an existing buffer. See [to_string] for the role of the optional argument and raised exceptions. *) val seq_to_string : ?buf:Buffer.t -> ?len:int -> ?suf:string -> ?std:bool -> t Seq.t -> string (** Write a sequence of [suf]-suffixed compact one-line JSON values to a string. @param suf is the suffix ouf each value written. Newline by default. See [to_string] for the role of the optional arguments and raised exceptions. *) val seq_to_channel : ?buf:Buffer.t -> ?len:int -> ?suf:string -> ?std:bool -> out_channel -> t Seq.t -> unit (** Write a sequence of [suf]-suffixed compact one-line JSON values to a channel. @param suf is the suffix of each value written. Newline by default. See [to_channel] for the role of the optional arguments and raised exceptions. *) val seq_to_file : ?len:int -> ?suf:string -> ?std:bool -> string -> t Seq.t -> unit (** Write a sequence of [suf]-suffixed compact one-line JSON values to a file. @param suf is the suffix of each value written. Newline by default. See [to_string] for the role of the optional arguments and raised exceptions. *) val seq_to_buffer : ?suf:string -> ?std:bool -> Buffer.t -> t Seq.t -> unit (** Write a sequence of [suf]-suffixed compact one-line JSON values to an existing buffer. @param suf is the suffix of each value written. Newline by default. See [to_string] for the role of the optional arguments and raised exceptions. *) val write_t : Buffer.t -> t -> unit (** Write the given JSON value to the given buffer. Provided as a writer function for atdgen. *) (** {2 Miscellaneous} *) val sort : t -> t (** Sort object fields (stable sort, comparing field names and treating them as byte sequences) *) (**/**) (* begin undocumented section *) val write_null : Buffer.t -> unit -> unit val write_bool : Buffer.t -> bool -> unit # 122 "write.mli" val write_int : Buffer.t -> int -> unit # 125 "write.mli" val write_float : Buffer.t -> float -> unit val write_std_float : Buffer.t -> float -> unit val write_float_prec : int -> Buffer.t -> float -> unit val write_std_float_prec : int -> Buffer.t -> float -> unit # 131 "write.mli" val write_string : Buffer.t -> string -> unit # 144 "write.mli" val write_assoc : Buffer.t -> (string * t) list -> unit val write_list : Buffer.t -> t list -> unit # 155 "write.mli" val write_json : Buffer.t -> t -> unit val write_std_json : Buffer.t -> t -> unit (* end undocumented section *) (**/**) # 1 "monomorphic.mli" val pp : Format.formatter -> t -> unit (** Pretty printer, useful for debugging *) val show : t -> string (** Convert value to string, useful for debugging *) val equal : t -> t -> bool (** [equal a b] is the monomorphic equality. Determines whether two JSON values are considered equal. In the case of JSON objects, the order of the keys does not matter, except for duplicate keys which will be considered equal as long as they are in the same input order. *) # 1 "write2.mli" (** {2 JSON pretty-printing} *) val pretty_print : ?std:bool -> Format.formatter -> t -> unit (** Pretty-print into a {!Format.formatter}. See [to_string] for the role of the optional [std] argument. @raise Json_error if [float] value is not allowed in standard JSON. @since 1.3.1 *) val pretty_to_string : ?std:bool -> t -> string (** Pretty-print into a string. See [to_string] for the role of the optional [std] argument. See [pretty_print] for raised exceptions. *) val pretty_to_channel : ?std:bool -> out_channel -> t -> unit (** Pretty-print to a channel. See [to_string] for the role of the optional [std] argument. See [pretty_print] for raised exceptions. *) # 1 "read.mli" val prettify : ?std:bool -> string -> string (** Combined parser and pretty-printer. See [to_string] for the role of the optional [std] argument and raised exceptions. *) val compact : ?std:bool -> string -> string (** Combined parser and printer. See [to_string] for the role of the optional [std] argument and raised exceptions. *) (** {2 JSON readers} *) exception Finally of exn * exn (** Exception describing a failure in both finalizer and parsing. *) val from_string : ?buf:Buffer.t -> ?fname:string -> ?lnum:int -> string -> t (** Read a JSON value from a string. @param buf use this buffer at will during parsing instead of creating a new one. @param fname data file name to be used in error messages. It does not have to be a real file. @param lnum number of the first line of input. Default is 1. @raise Json_error if parsing fails. *) val from_channel : ?buf:Buffer.t -> ?fname:string -> ?lnum:int -> in_channel -> t (** Read a JSON value from a channel. See [from_string] for the meaning of the optional arguments and raised exceptions. *) val from_file : ?buf:Buffer.t -> ?fname:string -> ?lnum:int -> string -> t (** Read a JSON value from a file. See [from_string] for the meaning of the optional arguments and raised exceptions. *) type lexer_state = Lexer_state.t = { buf : Buffer.t; mutable lnum : int; mutable bol : int; mutable fname : string option; } (** This alias is provided for backward compatibility. New code should refer to {!Yojson.lexer_state} directly. *) val init_lexer : ?buf: Buffer.t -> ?fname: string -> ?lnum: int -> unit -> lexer_state (** This alias is provided for backward compatibility. New code should use {!Yojson.init_lexer} directly. *) val from_lexbuf : lexer_state -> ?stream:bool -> Lexing.lexbuf -> t (** Read a JSON value from a lexbuf. A valid initial [lexer_state] can be created with [init_lexer]. See [from_string] for the meaning of the optional arguments and raised exceptions. @param stream indicates whether more data may follow. The default value is false and indicates that only JSON whitespace can be found between the end of the JSON value and the end of the input. *) val seq_from_string : ?buf:Buffer.t -> ?fname:string -> ?lnum:int -> string -> t Seq.t (** Input a sequence of JSON values from a string. Whitespace between JSON values is fine but not required. See [from_string] for the meaning of the optional arguments and raised exceptions. *) val seq_from_channel : ?buf:Buffer.t -> ?fin:(unit -> unit) -> ?fname:string -> ?lnum:int -> in_channel -> t Seq.t (** Input a sequence of JSON values from a channel. Whitespace between JSON values is fine but not required. @param fin finalization function executed once when the end of the sequence is reached either because there is no more input or because the input could not be parsed, raising an exception. @raise Finally When the parsing and the finalizer both raised, [Finally (exn, fin_exn)] is raised, [exn] being the parsing exception and [fin_exn] the finalizer one. See [from_string] for the meaning of the other optional arguments and other raised exceptions. *) val seq_from_file : ?buf:Buffer.t -> ?fname:string -> ?lnum:int -> string -> t Seq.t (** Input a sequence of JSON values from a file. Whitespace between JSON values is fine but not required. See [from_string] for the meaning of the optional arguments and raised exceptions. *) val seq_from_lexbuf : lexer_state -> ?fin:(unit -> unit) -> Lexing.lexbuf -> t Seq.t (** Input a sequence of JSON values from a lexbuf. A valid initial [lexer_state] can be created with [init_lexer]. Whitespace between JSON values is fine but not required. @raise Finally When the parsing and the finalizer both raised, [Finally (exn, fin_exn)] is raised, [exn] being the parsing exception and [fin_exn] the finalizer one. See [seq_from_channel] for the meaning of the optional [fin] argument and other raised exceptions. *) type json_line = [ `Json of t | `Exn of exn ] (** The type of values resulting from a parsing attempt of a JSON value. *) val lineseq_from_channel : ?buf:Buffer.t -> ?fin:(unit -> unit) -> ?fname:string -> ?lnum:int -> in_channel -> json_line Seq.t (** Input a sequence of JSON values, one per line, from a channel. Exceptions raised when reading malformed lines are caught and represented using [`Exn]. See [seq_from_channel] for the meaning of the optional [fin] argument. See [from_string] for the meaning of the other optional arguments and raised exceptions. *) val lineseq_from_file : ?buf:Buffer.t -> ?fname:string -> ?lnum:int -> string -> json_line Seq.t (** Input a sequence of JSON values, one per line, from a file. Exceptions raised when reading malformed lines are caught and represented using [`Exn]. See [seq_from_channel] for the meaning of the optional [fin] argument. See [from_string] for the meaning of the other optional arguments and raised exceptions. *) val read_t : lexer_state -> Lexing.lexbuf -> t (** Read a JSON value from the given lexer_state and lexing buffer and return it. Provided as a reader function for atdgen. *) (**/**) (* begin undocumented section *) val finish_string : lexer_state -> Lexing.lexbuf -> string val read_string : lexer_state -> Lexing.lexbuf -> string val read_ident : lexer_state -> Lexing.lexbuf -> string val map_string : lexer_state -> (string -> int -> int -> 'a) -> Lexing.lexbuf -> 'a (* equivalent to finish_string *) val map_ident : lexer_state -> (string -> int -> int -> 'a) -> Lexing.lexbuf -> 'a (* equivalent to read_ident *) type variant_kind = [ `Edgy_bracket | `Square_bracket | `Double_quote ] val start_any_variant : lexer_state -> Lexing.lexbuf -> variant_kind val finish_variant : lexer_state -> Lexing.lexbuf -> t option val finish_skip_variant : lexer_state -> Lexing.lexbuf -> unit val read_lt : lexer_state -> Lexing.lexbuf -> unit val read_gt : lexer_state -> Lexing.lexbuf -> unit val read_comma : lexer_state -> Lexing.lexbuf -> unit val finish_stringlit : lexer_state -> Lexing.lexbuf -> string val finish_skip_stringlit : lexer_state -> Lexing.lexbuf -> unit val finish_escaped_char : lexer_state -> Lexing.lexbuf -> unit val finish_comment : lexer_state -> Lexing.lexbuf -> unit val read_space : lexer_state -> Lexing.lexbuf -> unit val read_eof : Lexing.lexbuf -> bool val read_null : lexer_state -> Lexing.lexbuf -> unit val read_null_if_possible : lexer_state -> Lexing.lexbuf -> bool val read_bool : lexer_state -> Lexing.lexbuf -> bool val read_int : lexer_state -> Lexing.lexbuf -> int val read_int8 : lexer_state -> Lexing.lexbuf -> char val read_int32 : lexer_state -> Lexing.lexbuf -> int32 val read_int64 : lexer_state -> Lexing.lexbuf -> int64 val read_number : lexer_state -> Lexing.lexbuf -> float val skip_ident : lexer_state -> Lexing.lexbuf -> unit val read_sequence : ('a -> lexer_state -> Lexing.lexbuf -> 'a) -> 'a -> lexer_state -> Lexing.lexbuf -> 'a val read_list : (lexer_state -> Lexing.lexbuf -> 'a) -> lexer_state -> Lexing.lexbuf -> 'a list val read_list_rev : (lexer_state -> Lexing.lexbuf -> 'a) -> lexer_state -> Lexing.lexbuf -> 'a list val read_array_end : Lexing.lexbuf -> unit val read_array_sep : lexer_state -> Lexing.lexbuf -> unit val read_array : (lexer_state -> Lexing.lexbuf -> 'a) -> lexer_state -> Lexing.lexbuf -> 'a array val read_tuple : (int -> 'a -> lexer_state -> Lexing.lexbuf -> 'a) -> 'a -> lexer_state -> Lexing.lexbuf -> 'a val start_any_tuple : lexer_state -> Lexing.lexbuf -> bool val read_lpar : lexer_state -> Lexing.lexbuf -> unit val read_rpar : lexer_state -> Lexing.lexbuf -> unit val read_tuple_end : Lexing.lexbuf -> unit val read_tuple_end2 : lexer_state -> bool -> Lexing.lexbuf -> unit val read_tuple_sep : lexer_state -> Lexing.lexbuf -> unit val read_tuple_sep2 : lexer_state -> bool -> Lexing.lexbuf -> unit val read_lbr : lexer_state -> Lexing.lexbuf -> unit val read_rbr : lexer_state -> Lexing.lexbuf -> unit val read_fields : ('acc -> string -> lexer_state -> Lexing.lexbuf -> 'acc) -> 'acc -> lexer_state -> Lexing.lexbuf -> 'acc val read_abstract_fields : (lexer_state -> Lexing.lexbuf -> 'key) -> ('acc -> 'key -> lexer_state -> Lexing.lexbuf -> 'acc) -> 'acc -> lexer_state -> Lexing.lexbuf -> 'acc val read_lcurl : lexer_state -> Lexing.lexbuf -> unit val read_object_end : Lexing.lexbuf -> unit val read_object_sep : lexer_state -> Lexing.lexbuf -> unit val read_colon : lexer_state -> Lexing.lexbuf -> unit val read_json : lexer_state -> Lexing.lexbuf -> t val skip_json : lexer_state -> Lexing.lexbuf -> unit val buffer_json : lexer_state -> Lexing.lexbuf -> unit (* end undocumented section *) (**/**) # 37 "yojson.cppo.mli" (** This module provides combinators for extracting fields from JSON values. *) module Util : sig # 1 "util.mli" (** This module provides combinators for extracting fields from JSON values. This approach is recommended for reading a few fields from data returned by public APIs. However for more complex applications we recommend {{:https://github.com/ahrefs/atd}Atdgen}. Here is some sample JSON data: {v { "id": "398eb027", "name": "John Doe", "pages": [ { "id": 1, "title": "The Art of Flipping Coins", "url": "http://example.com/398eb027/1" }, { "id": 2, "deleted": true }, { "id": 3, "title": "Artichoke Salad", "url": "http://example.com/398eb027/3" }, { "id": 4, "title": "Flying Bananas", "url": "http://example.com/398eb027/4" } ] } v} In order to extract the "id" field, assuming it is mandatory, we would use the following OCaml code that operates on single JSON nodes: {v open Yojson.Basic.Util ... let id = json |> member "id" |> to_string in ... v} In order to extract all the "title" fields, we would write the following OCaml code that operates on lists of JSON nodes, skipping undefined nodes and nodes of unexpected type: {v open Yojson.Basic.Util let extract_titles (json : Yojson.Basic.t) : string list = [json] |> filter_member "pages" |> flatten |> filter_member "title" |> filter_string v} *) exception Type_error of string * t (** Raised when the JSON value is not of the correct type to support an operation, e.g. [member] on an [`Int]. The string message explains the mismatch. *) exception Undefined of string * t (** Raised when the equivalent JavaScript operation on the JSON value would return undefined. Currently this only happens when an array index is out of bounds. *) val keys : t -> string list (** Returns all the key names in the given JSON object. @raise Type_error if argument is not a JSON object. *) val values : t -> t list (** Return all the value in the given JSON object. @raise Type_error if argument is not a JSON object. *) val combine : t -> t -> t (** Combine two JSON objects together. @raise Invalid_argument if either argument is not a JSON object. *) val member : string -> t -> t (** [member k obj] returns the value associated with the key [k] in the JSON object [obj], or [`Null] if [k] is not present in [obj]. @raise Type_error if [obj] is not a JSON object. *) val index : int -> t -> t (** [index i arr] returns the value at index [i] in the JSON array [arr]. Negative indices count from the end of the list (so -1 is the last element). @raise Type_error if [arr] is not a JSON array. @raise Undefined if index is out of bounds. *) val map : (t -> t) -> t -> t (** [map f arr] calls the function [f] on each element of the JSON array [arr], and returns a JSON array containing the results. @raise Type_error if [arr] is not an JSON array. *) val to_assoc : t -> (string * t) list (** Extract the items of a JSON object. @raise Type_error if argument is not a JSON object. *) val to_option : (t -> 'a) -> t -> 'a option (** Return [None] if the JSON value is null or map the JSON value to [Some] value using the provided function. *) val to_bool : t -> bool (** Extract a boolean value. @raise Type_error if argument is not a JSON boolean. *) val to_bool_option : t -> bool option (** Extract [Some] boolean value, return [None] if the value is null. @raise Type_error if argument is neither. *) val to_number : t -> float (** Extract a number. @raise Type_error if argument is not a JSON number. *) val to_number_option : t -> float option (** Extract [Some] number, return [None] if the value is null. @raise Type_error if argument is neither. *) val to_float : t -> float (** Extract a float value. [to_number] is generally preferred as it also works with int literals. @raise Type_error if argument is not a JSON float. *) val to_float_option : t -> float option (** Extract [Some] float value, return [None] if the value is null. [to_number_option] is generally preferred as it also works with int literals. @raise Type_error if argument is neither. *) val to_int : t -> int (** Extract an int from a JSON int. @raise Type_error if argument is not a JSON int. *) val to_int_option : t -> int option (** Extract [Some] int from a JSON int, return [None] if the value is null. @raise Type_error if argument is neither. *) val to_list : t -> t list (** Extract a list from JSON array. @raise Type_error if argument is not a JSON array. *) val to_string : t -> string (** Extract a string from a JSON string. @raise Type_error if argument is not a JSON string. *) val to_string_option : t -> string option (** Extract [Some] string from a JSON string, return [None] if the value is null. @raise Type_error if argument is neither. *) val convert_each : (t -> 'a) -> t -> 'a list (** The conversion functions above cannot be used with [map], because they do not return JSON values. This convenience function [convert_each to_f arr] is equivalent to [List.map to_f (to_list arr)]. @raise Type_error if [arr] is not a JSON array. *) (** {3 Exception-free filters} *) (** The following functions operate on lists of JSON nodes. None of them raises an exception when a certain kind of node is expected but no node or the wrong kind of node is found. Instead of raising an exception, nodes that are not as expected are simply ignored. *) val filter_map : ('a -> 'b option) -> 'a list -> 'b list (** [filter_map f l] maps each element of the list [l] to an optional value using function [f] and unwraps the resulting values. *) val flatten : t list -> t list (** Expects JSON arrays and returns all their elements as a single list. [flatten l] is equivalent to [List.flatten (filter_list l)]. *) val filter_index : int -> t list -> t list (** Expects JSON arrays and returns all their elements existing at the given position. *) val filter_list : t list -> t list list (** Expects JSON arrays and unwraps them. *) val filter_member : string -> t list -> t list (** Expects JSON objects and returns all the fields of the given name (at most one field per object). *) val filter_assoc : t list -> (string * t) list list (** Expects JSON objects and unwraps them. *) val filter_bool : t list -> bool list (** Expects JSON booleans and unwraps them. *) val filter_int : t list -> int list (** Expects JSON integers ([`Int] nodes) and unwraps them. *) val filter_float : t list -> float list (** Expects JSON floats ([`Float] nodes) and unwraps them. *) val filter_number : t list -> float list (** Expects JSON numbers ([`Int] or [`Float]) and unwraps them. Ints are converted to floats. *) val filter_string : t list -> string list (** Expects JSON strings and unwraps them. *) # 41 "yojson.cppo.mli" end # 45 "yojson.cppo.mli" end (** {1:safe Multipurpose JSON tree type} *) module Safe : sig (** This module supports a specific syntax for variants and tuples in addition to the standard JSON nodes. Arbitrary integers are supported and represented as a decimal string using [`Intlit] when they cannot be represented using OCaml's int type (31 or 63 bits depending on the platform). This module is recommended for intensive use or OCaml-friendly use of JSON. *) # 1 "type.ml" (** {3 Type of the JSON tree} *) type t = [ | `Null | `Bool of bool # 8 "type.ml" | `Int of int # 11 "type.ml" | `Intlit of string # 14 "type.ml" | `Float of float # 20 "type.ml" | `String of string # 25 "type.ml" | `Assoc of (string * t) list | `List of t list # 28 "type.ml" | `Tuple of t list # 31 "type.ml" | `Variant of (string * t option) # 33 "type.ml" ] (** All possible cases defined in Yojson: - `Null: JSON null - `Bool of bool: JSON boolean - `Int of int: JSON number without decimal point or exponent. - `Intlit of string: JSON number without decimal point or exponent, preserved as a string. - `Float of float: JSON number, Infinity, -Infinity or NaN. - `Floatlit of string: JSON number, Infinity, -Infinity or NaN, preserved as a string. - `String of string: JSON string. Bytes in the range 128-255 are preserved as-is without encoding validation for both reading and writing. - `Stringlit of string: JSON string literal including the double quotes. - `Assoc of (string * json) list: JSON object. - `List of json list: JSON array. - `Tuple of json list: Tuple (non-standard extension of JSON). Syntax: [("abc", 123)]. - `Variant of (string * json option): Variant (non-standard extension of JSON). Syntax: [<"Foo">] or [<"Bar":123>]. *) (* Note to adventurers: ocamldoc does not support inline comments on each polymorphic variant, and cppo doesn't allow to concatenate comments, so it would be complicated to document only the cases that are preserved by cppo in the type definition. *) # 1 "monomorphic.mli" val pp : Format.formatter -> t -> unit (** Pretty printer, useful for debugging *) val show : t -> string (** Convert value to string, useful for debugging *) val equal : t -> t -> bool (** [equal a b] is the monomorphic equality. Determines whether two JSON values are considered equal. In the case of JSON objects, the order of the keys does not matter, except for duplicate keys which will be considered equal as long as they are in the same input order. *) # 1 "safe.mli" val to_basic : t -> Basic.t (** Tuples are converted to JSON arrays, Variants are converted to JSON strings or arrays of a string (constructor) and a json value (argument). Long integers are converted to JSON strings. Examples: {v `Tuple [ `Int 1; `Float 2.3 ] -> `List [ `Int 1; `Float 2.3 ] `Variant ("A", None) -> `String "A" `Variant ("B", Some x) -> `List [ `String "B", x ] `Intlit "12345678901234567890" -> `String "12345678901234567890" v} *) # 1 "write.mli" (** {2 JSON writers} *) val to_string : ?buf:Buffer.t -> ?len:int -> ?suf:string -> ?std:bool -> t -> string (** Write a compact JSON value to a string. @param buf allows to reuse an existing buffer created with [Buffer.create]. The buffer is cleared of all contents before starting and right before returning. @param len initial length of the output buffer. @param suf appended to the output as a suffix, defaults to empty string. @param std use only standard JSON syntax, i.e. convert tuples and variants into standard JSON (if applicable), refuse to print NaN and infinities, require the root node to be either an object or an array. Default is [false]. @raise Json_error if [float] value is not allowed in standard JSON. *) val to_channel : ?buf:Buffer.t -> ?len:int -> ?suf:string -> ?std:bool -> out_channel -> t -> unit (** Write a compact JSON value to a channel. Note: the [out_channel] is not flushed by this function. See [to_string] for the role of the optional arguments and raised exceptions. *) val to_output : ?buf:Buffer.t -> ?len:int -> ?suf:string -> ?std:bool -> < output : string -> int -> int -> int; .. > -> t -> unit (** Write a compact JSON value to an OO channel. See [to_string] for the role of the optional arguments and raised exceptions. *) val to_file : ?len:int -> ?std:bool -> ?suf:string -> string -> t -> unit (** Write a compact JSON value to a file. See [to_string] for the role of the optional arguments and raised exceptions. @param suf is a suffix appended to the output Newline by default for POSIX compliance. *) val to_buffer : ?suf:string -> ?std:bool -> Buffer.t -> t -> unit (** Write a compact JSON value to an existing buffer. See [to_string] for the role of the optional argument and raised exceptions. *) val seq_to_string : ?buf:Buffer.t -> ?len:int -> ?suf:string -> ?std:bool -> t Seq.t -> string (** Write a sequence of [suf]-suffixed compact one-line JSON values to a string. @param suf is the suffix ouf each value written. Newline by default. See [to_string] for the role of the optional arguments and raised exceptions. *) val seq_to_channel : ?buf:Buffer.t -> ?len:int -> ?suf:string -> ?std:bool -> out_channel -> t Seq.t -> unit (** Write a sequence of [suf]-suffixed compact one-line JSON values to a channel. @param suf is the suffix of each value written. Newline by default. See [to_channel] for the role of the optional arguments and raised exceptions. *) val seq_to_file : ?len:int -> ?suf:string -> ?std:bool -> string -> t Seq.t -> unit (** Write a sequence of [suf]-suffixed compact one-line JSON values to a file. @param suf is the suffix of each value written. Newline by default. See [to_string] for the role of the optional arguments and raised exceptions. *) val seq_to_buffer : ?suf:string -> ?std:bool -> Buffer.t -> t Seq.t -> unit (** Write a sequence of [suf]-suffixed compact one-line JSON values to an existing buffer. @param suf is the suffix of each value written. Newline by default. See [to_string] for the role of the optional arguments and raised exceptions. *) val write_t : Buffer.t -> t -> unit (** Write the given JSON value to the given buffer. Provided as a writer function for atdgen. *) (** {2 Miscellaneous} *) val sort : t -> t (** Sort object fields (stable sort, comparing field names and treating them as byte sequences) *) (**/**) (* begin undocumented section *) val write_null : Buffer.t -> unit -> unit val write_bool : Buffer.t -> bool -> unit # 122 "write.mli" val write_int : Buffer.t -> int -> unit # 125 "write.mli" val write_float : Buffer.t -> float -> unit val write_std_float : Buffer.t -> float -> unit val write_float_prec : int -> Buffer.t -> float -> unit val write_std_float_prec : int -> Buffer.t -> float -> unit # 131 "write.mli" val write_string : Buffer.t -> string -> unit # 135 "write.mli" val write_intlit : Buffer.t -> string -> unit # 144 "write.mli" val write_assoc : Buffer.t -> (string * t) list -> unit val write_list : Buffer.t -> t list -> unit # 147 "write.mli" val write_tuple : Buffer.t -> t list -> unit val write_std_tuple : Buffer.t -> t list -> unit # 151 "write.mli" val write_variant : Buffer.t -> string -> t option -> unit val write_std_variant : Buffer.t -> string -> t option -> unit # 155 "write.mli" val write_json : Buffer.t -> t -> unit val write_std_json : Buffer.t -> t -> unit (* end undocumented section *) (**/**) # 1 "write2.mli" (** {2 JSON pretty-printing} *) val pretty_print : ?std:bool -> Format.formatter -> t -> unit (** Pretty-print into a {!Format.formatter}. See [to_string] for the role of the optional [std] argument. @raise Json_error if [float] value is not allowed in standard JSON. @since 1.3.1 *) val pretty_to_string : ?std:bool -> t -> string (** Pretty-print into a string. See [to_string] for the role of the optional [std] argument. See [pretty_print] for raised exceptions. *) val pretty_to_channel : ?std:bool -> out_channel -> t -> unit (** Pretty-print to a channel. See [to_string] for the role of the optional [std] argument. See [pretty_print] for raised exceptions. *) # 1 "read.mli" val prettify : ?std:bool -> string -> string (** Combined parser and pretty-printer. See [to_string] for the role of the optional [std] argument and raised exceptions. *) val compact : ?std:bool -> string -> string (** Combined parser and printer. See [to_string] for the role of the optional [std] argument and raised exceptions. *) (** {2 JSON readers} *) exception Finally of exn * exn (** Exception describing a failure in both finalizer and parsing. *) val from_string : ?buf:Buffer.t -> ?fname:string -> ?lnum:int -> string -> t (** Read a JSON value from a string. @param buf use this buffer at will during parsing instead of creating a new one. @param fname data file name to be used in error messages. It does not have to be a real file. @param lnum number of the first line of input. Default is 1. @raise Json_error if parsing fails. *) val from_channel : ?buf:Buffer.t -> ?fname:string -> ?lnum:int -> in_channel -> t (** Read a JSON value from a channel. See [from_string] for the meaning of the optional arguments and raised exceptions. *) val from_file : ?buf:Buffer.t -> ?fname:string -> ?lnum:int -> string -> t (** Read a JSON value from a file. See [from_string] for the meaning of the optional arguments and raised exceptions. *) type lexer_state = Lexer_state.t = { buf : Buffer.t; mutable lnum : int; mutable bol : int; mutable fname : string option; } (** This alias is provided for backward compatibility. New code should refer to {!Yojson.lexer_state} directly. *) val init_lexer : ?buf: Buffer.t -> ?fname: string -> ?lnum: int -> unit -> lexer_state (** This alias is provided for backward compatibility. New code should use {!Yojson.init_lexer} directly. *) val from_lexbuf : lexer_state -> ?stream:bool -> Lexing.lexbuf -> t (** Read a JSON value from a lexbuf. A valid initial [lexer_state] can be created with [init_lexer]. See [from_string] for the meaning of the optional arguments and raised exceptions. @param stream indicates whether more data may follow. The default value is false and indicates that only JSON whitespace can be found between the end of the JSON value and the end of the input. *) val seq_from_string : ?buf:Buffer.t -> ?fname:string -> ?lnum:int -> string -> t Seq.t (** Input a sequence of JSON values from a string. Whitespace between JSON values is fine but not required. See [from_string] for the meaning of the optional arguments and raised exceptions. *) val seq_from_channel : ?buf:Buffer.t -> ?fin:(unit -> unit) -> ?fname:string -> ?lnum:int -> in_channel -> t Seq.t (** Input a sequence of JSON values from a channel. Whitespace between JSON values is fine but not required. @param fin finalization function executed once when the end of the sequence is reached either because there is no more input or because the input could not be parsed, raising an exception. @raise Finally When the parsing and the finalizer both raised, [Finally (exn, fin_exn)] is raised, [exn] being the parsing exception and [fin_exn] the finalizer one. See [from_string] for the meaning of the other optional arguments and other raised exceptions. *) val seq_from_file : ?buf:Buffer.t -> ?fname:string -> ?lnum:int -> string -> t Seq.t (** Input a sequence of JSON values from a file. Whitespace between JSON values is fine but not required. See [from_string] for the meaning of the optional arguments and raised exceptions. *) val seq_from_lexbuf : lexer_state -> ?fin:(unit -> unit) -> Lexing.lexbuf -> t Seq.t (** Input a sequence of JSON values from a lexbuf. A valid initial [lexer_state] can be created with [init_lexer]. Whitespace between JSON values is fine but not required. @raise Finally When the parsing and the finalizer both raised, [Finally (exn, fin_exn)] is raised, [exn] being the parsing exception and [fin_exn] the finalizer one. See [seq_from_channel] for the meaning of the optional [fin] argument and other raised exceptions. *) type json_line = [ `Json of t | `Exn of exn ] (** The type of values resulting from a parsing attempt of a JSON value. *) val lineseq_from_channel : ?buf:Buffer.t -> ?fin:(unit -> unit) -> ?fname:string -> ?lnum:int -> in_channel -> json_line Seq.t (** Input a sequence of JSON values, one per line, from a channel. Exceptions raised when reading malformed lines are caught and represented using [`Exn]. See [seq_from_channel] for the meaning of the optional [fin] argument. See [from_string] for the meaning of the other optional arguments and raised exceptions. *) val lineseq_from_file : ?buf:Buffer.t -> ?fname:string -> ?lnum:int -> string -> json_line Seq.t (** Input a sequence of JSON values, one per line, from a file. Exceptions raised when reading malformed lines are caught and represented using [`Exn]. See [seq_from_channel] for the meaning of the optional [fin] argument. See [from_string] for the meaning of the other optional arguments and raised exceptions. *) val read_t : lexer_state -> Lexing.lexbuf -> t (** Read a JSON value from the given lexer_state and lexing buffer and return it. Provided as a reader function for atdgen. *) (**/**) (* begin undocumented section *) val finish_string : lexer_state -> Lexing.lexbuf -> string val read_string : lexer_state -> Lexing.lexbuf -> string val read_ident : lexer_state -> Lexing.lexbuf -> string val map_string : lexer_state -> (string -> int -> int -> 'a) -> Lexing.lexbuf -> 'a (* equivalent to finish_string *) val map_ident : lexer_state -> (string -> int -> int -> 'a) -> Lexing.lexbuf -> 'a (* equivalent to read_ident *) type variant_kind = [ `Edgy_bracket | `Square_bracket | `Double_quote ] val start_any_variant : lexer_state -> Lexing.lexbuf -> variant_kind val finish_variant : lexer_state -> Lexing.lexbuf -> t option val finish_skip_variant : lexer_state -> Lexing.lexbuf -> unit val read_lt : lexer_state -> Lexing.lexbuf -> unit val read_gt : lexer_state -> Lexing.lexbuf -> unit val read_comma : lexer_state -> Lexing.lexbuf -> unit val finish_stringlit : lexer_state -> Lexing.lexbuf -> string val finish_skip_stringlit : lexer_state -> Lexing.lexbuf -> unit val finish_escaped_char : lexer_state -> Lexing.lexbuf -> unit val finish_comment : lexer_state -> Lexing.lexbuf -> unit val read_space : lexer_state -> Lexing.lexbuf -> unit val read_eof : Lexing.lexbuf -> bool val read_null : lexer_state -> Lexing.lexbuf -> unit val read_null_if_possible : lexer_state -> Lexing.lexbuf -> bool val read_bool : lexer_state -> Lexing.lexbuf -> bool val read_int : lexer_state -> Lexing.lexbuf -> int val read_int8 : lexer_state -> Lexing.lexbuf -> char val read_int32 : lexer_state -> Lexing.lexbuf -> int32 val read_int64 : lexer_state -> Lexing.lexbuf -> int64 val read_number : lexer_state -> Lexing.lexbuf -> float val skip_ident : lexer_state -> Lexing.lexbuf -> unit val read_sequence : ('a -> lexer_state -> Lexing.lexbuf -> 'a) -> 'a -> lexer_state -> Lexing.lexbuf -> 'a val read_list : (lexer_state -> Lexing.lexbuf -> 'a) -> lexer_state -> Lexing.lexbuf -> 'a list val read_list_rev : (lexer_state -> Lexing.lexbuf -> 'a) -> lexer_state -> Lexing.lexbuf -> 'a list val read_array_end : Lexing.lexbuf -> unit val read_array_sep : lexer_state -> Lexing.lexbuf -> unit val read_array : (lexer_state -> Lexing.lexbuf -> 'a) -> lexer_state -> Lexing.lexbuf -> 'a array val read_tuple : (int -> 'a -> lexer_state -> Lexing.lexbuf -> 'a) -> 'a -> lexer_state -> Lexing.lexbuf -> 'a val start_any_tuple : lexer_state -> Lexing.lexbuf -> bool val read_lpar : lexer_state -> Lexing.lexbuf -> unit val read_rpar : lexer_state -> Lexing.lexbuf -> unit val read_tuple_end : Lexing.lexbuf -> unit val read_tuple_end2 : lexer_state -> bool -> Lexing.lexbuf -> unit val read_tuple_sep : lexer_state -> Lexing.lexbuf -> unit val read_tuple_sep2 : lexer_state -> bool -> Lexing.lexbuf -> unit val read_lbr : lexer_state -> Lexing.lexbuf -> unit val read_rbr : lexer_state -> Lexing.lexbuf -> unit val read_fields : ('acc -> string -> lexer_state -> Lexing.lexbuf -> 'acc) -> 'acc -> lexer_state -> Lexing.lexbuf -> 'acc val read_abstract_fields : (lexer_state -> Lexing.lexbuf -> 'key) -> ('acc -> 'key -> lexer_state -> Lexing.lexbuf -> 'acc) -> 'acc -> lexer_state -> Lexing.lexbuf -> 'acc val read_lcurl : lexer_state -> Lexing.lexbuf -> unit val read_object_end : Lexing.lexbuf -> unit val read_object_sep : lexer_state -> Lexing.lexbuf -> unit val read_colon : lexer_state -> Lexing.lexbuf -> unit val read_json : lexer_state -> Lexing.lexbuf -> t val skip_json : lexer_state -> Lexing.lexbuf -> unit val buffer_json : lexer_state -> Lexing.lexbuf -> unit (* end undocumented section *) (**/**) # 74 "yojson.cppo.mli" (** This module provides combinators for extracting fields from JSON values. *) module Util : sig # 1 "util.mli" (** This module provides combinators for extracting fields from JSON values. This approach is recommended for reading a few fields from data returned by public APIs. However for more complex applications we recommend {{:https://github.com/ahrefs/atd}Atdgen}. Here is some sample JSON data: {v { "id": "398eb027", "name": "John Doe", "pages": [ { "id": 1, "title": "The Art of Flipping Coins", "url": "http://example.com/398eb027/1" }, { "id": 2, "deleted": true }, { "id": 3, "title": "Artichoke Salad", "url": "http://example.com/398eb027/3" }, { "id": 4, "title": "Flying Bananas", "url": "http://example.com/398eb027/4" } ] } v} In order to extract the "id" field, assuming it is mandatory, we would use the following OCaml code that operates on single JSON nodes: {v open Yojson.Basic.Util ... let id = json |> member "id" |> to_string in ... v} In order to extract all the "title" fields, we would write the following OCaml code that operates on lists of JSON nodes, skipping undefined nodes and nodes of unexpected type: {v open Yojson.Basic.Util let extract_titles (json : Yojson.Basic.t) : string list = [json] |> filter_member "pages" |> flatten |> filter_member "title" |> filter_string v} *) exception Type_error of string * t (** Raised when the JSON value is not of the correct type to support an operation, e.g. [member] on an [`Int]. The string message explains the mismatch. *) exception Undefined of string * t (** Raised when the equivalent JavaScript operation on the JSON value would return undefined. Currently this only happens when an array index is out of bounds. *) val keys : t -> string list (** Returns all the key names in the given JSON object. @raise Type_error if argument is not a JSON object. *) val values : t -> t list (** Return all the value in the given JSON object. @raise Type_error if argument is not a JSON object. *) val combine : t -> t -> t (** Combine two JSON objects together. @raise Invalid_argument if either argument is not a JSON object. *) val member : string -> t -> t (** [member k obj] returns the value associated with the key [k] in the JSON object [obj], or [`Null] if [k] is not present in [obj]. @raise Type_error if [obj] is not a JSON object. *) val index : int -> t -> t (** [index i arr] returns the value at index [i] in the JSON array [arr]. Negative indices count from the end of the list (so -1 is the last element). @raise Type_error if [arr] is not a JSON array. @raise Undefined if index is out of bounds. *) val map : (t -> t) -> t -> t (** [map f arr] calls the function [f] on each element of the JSON array [arr], and returns a JSON array containing the results. @raise Type_error if [arr] is not an JSON array. *) val to_assoc : t -> (string * t) list (** Extract the items of a JSON object. @raise Type_error if argument is not a JSON object. *) val to_option : (t -> 'a) -> t -> 'a option (** Return [None] if the JSON value is null or map the JSON value to [Some] value using the provided function. *) val to_bool : t -> bool (** Extract a boolean value. @raise Type_error if argument is not a JSON boolean. *) val to_bool_option : t -> bool option (** Extract [Some] boolean value, return [None] if the value is null. @raise Type_error if argument is neither. *) val to_number : t -> float (** Extract a number. @raise Type_error if argument is not a JSON number. *) val to_number_option : t -> float option (** Extract [Some] number, return [None] if the value is null. @raise Type_error if argument is neither. *) val to_float : t -> float (** Extract a float value. [to_number] is generally preferred as it also works with int literals. @raise Type_error if argument is not a JSON float. *) val to_float_option : t -> float option (** Extract [Some] float value, return [None] if the value is null. [to_number_option] is generally preferred as it also works with int literals. @raise Type_error if argument is neither. *) val to_int : t -> int (** Extract an int from a JSON int. @raise Type_error if argument is not a JSON int. *) val to_int_option : t -> int option (** Extract [Some] int from a JSON int, return [None] if the value is null. @raise Type_error if argument is neither. *) val to_list : t -> t list (** Extract a list from JSON array. @raise Type_error if argument is not a JSON array. *) val to_string : t -> string (** Extract a string from a JSON string. @raise Type_error if argument is not a JSON string. *) val to_string_option : t -> string option (** Extract [Some] string from a JSON string, return [None] if the value is null. @raise Type_error if argument is neither. *) val convert_each : (t -> 'a) -> t -> 'a list (** The conversion functions above cannot be used with [map], because they do not return JSON values. This convenience function [convert_each to_f arr] is equivalent to [List.map to_f (to_list arr)]. @raise Type_error if [arr] is not a JSON array. *) (** {3 Exception-free filters} *) (** The following functions operate on lists of JSON nodes. None of them raises an exception when a certain kind of node is expected but no node or the wrong kind of node is found. Instead of raising an exception, nodes that are not as expected are simply ignored. *) val filter_map : ('a -> 'b option) -> 'a list -> 'b list (** [filter_map f l] maps each element of the list [l] to an optional value using function [f] and unwraps the resulting values. *) val flatten : t list -> t list (** Expects JSON arrays and returns all their elements as a single list. [flatten l] is equivalent to [List.flatten (filter_list l)]. *) val filter_index : int -> t list -> t list (** Expects JSON arrays and returns all their elements existing at the given position. *) val filter_list : t list -> t list list (** Expects JSON arrays and unwraps them. *) val filter_member : string -> t list -> t list (** Expects JSON objects and returns all the fields of the given name (at most one field per object). *) val filter_assoc : t list -> (string * t) list list (** Expects JSON objects and unwraps them. *) val filter_bool : t list -> bool list (** Expects JSON booleans and unwraps them. *) val filter_int : t list -> int list (** Expects JSON integers ([`Int] nodes) and unwraps them. *) val filter_float : t list -> float list (** Expects JSON floats ([`Float] nodes) and unwraps them. *) val filter_number : t list -> float list (** Expects JSON numbers ([`Int] or [`Float]) and unwraps them. Ints are converted to floats. *) val filter_string : t list -> string list (** Expects JSON strings and unwraps them. *) # 78 "yojson.cppo.mli" end # 85 "yojson.cppo.mli" end (** {1 JSON tree type with literal int/float/string leaves} *) module Raw : sig (** Ints, floats and strings literals are systematically preserved using [`Intlit], [`Floatlit] and [`Stringlit]. This module also supports the specific syntax for variants and tuples supported by {!Yojson.Safe}. *) # 1 "type.ml" (** {3 Type of the JSON tree} *) type t = [ | `Null | `Bool of bool # 11 "type.ml" | `Intlit of string # 17 "type.ml" | `Floatlit of string # 23 "type.ml" | `Stringlit of string # 25 "type.ml" | `Assoc of (string * t) list | `List of t list # 28 "type.ml" | `Tuple of t list # 31 "type.ml" | `Variant of (string * t option) # 33 "type.ml" ] (** All possible cases defined in Yojson: - `Null: JSON null - `Bool of bool: JSON boolean - `Int of int: JSON number without decimal point or exponent. - `Intlit of string: JSON number without decimal point or exponent, preserved as a string. - `Float of float: JSON number, Infinity, -Infinity or NaN. - `Floatlit of string: JSON number, Infinity, -Infinity or NaN, preserved as a string. - `String of string: JSON string. Bytes in the range 128-255 are preserved as-is without encoding validation for both reading and writing. - `Stringlit of string: JSON string literal including the double quotes. - `Assoc of (string * json) list: JSON object. - `List of json list: JSON array. - `Tuple of json list: Tuple (non-standard extension of JSON). Syntax: [("abc", 123)]. - `Variant of (string * json option): Variant (non-standard extension of JSON). Syntax: [<"Foo">] or [<"Bar":123>]. *) (* Note to adventurers: ocamldoc does not support inline comments on each polymorphic variant, and cppo doesn't allow to concatenate comments, so it would be complicated to document only the cases that are preserved by cppo in the type definition. *) # 1 "monomorphic.mli" val pp : Format.formatter -> t -> unit (** Pretty printer, useful for debugging *) val show : t -> string (** Convert value to string, useful for debugging *) val equal : t -> t -> bool (** [equal a b] is the monomorphic equality. Determines whether two JSON values are considered equal. In the case of JSON objects, the order of the keys does not matter, except for duplicate keys which will be considered equal as long as they are in the same input order. *) # 1 "write.mli" (** {2 JSON writers} *) val to_string : ?buf:Buffer.t -> ?len:int -> ?suf:string -> ?std:bool -> t -> string (** Write a compact JSON value to a string. @param buf allows to reuse an existing buffer created with [Buffer.create]. The buffer is cleared of all contents before starting and right before returning. @param len initial length of the output buffer. @param suf appended to the output as a suffix, defaults to empty string. @param std use only standard JSON syntax, i.e. convert tuples and variants into standard JSON (if applicable), refuse to print NaN and infinities, require the root node to be either an object or an array. Default is [false]. @raise Json_error if [float] value is not allowed in standard JSON. *) val to_channel : ?buf:Buffer.t -> ?len:int -> ?suf:string -> ?std:bool -> out_channel -> t -> unit (** Write a compact JSON value to a channel. Note: the [out_channel] is not flushed by this function. See [to_string] for the role of the optional arguments and raised exceptions. *) val to_output : ?buf:Buffer.t -> ?len:int -> ?suf:string -> ?std:bool -> < output : string -> int -> int -> int; .. > -> t -> unit (** Write a compact JSON value to an OO channel. See [to_string] for the role of the optional arguments and raised exceptions. *) val to_file : ?len:int -> ?std:bool -> ?suf:string -> string -> t -> unit (** Write a compact JSON value to a file. See [to_string] for the role of the optional arguments and raised exceptions. @param suf is a suffix appended to the output Newline by default for POSIX compliance. *) val to_buffer : ?suf:string -> ?std:bool -> Buffer.t -> t -> unit (** Write a compact JSON value to an existing buffer. See [to_string] for the role of the optional argument and raised exceptions. *) val seq_to_string : ?buf:Buffer.t -> ?len:int -> ?suf:string -> ?std:bool -> t Seq.t -> string (** Write a sequence of [suf]-suffixed compact one-line JSON values to a string. @param suf is the suffix ouf each value written. Newline by default. See [to_string] for the role of the optional arguments and raised exceptions. *) val seq_to_channel : ?buf:Buffer.t -> ?len:int -> ?suf:string -> ?std:bool -> out_channel -> t Seq.t -> unit (** Write a sequence of [suf]-suffixed compact one-line JSON values to a channel. @param suf is the suffix of each value written. Newline by default. See [to_channel] for the role of the optional arguments and raised exceptions. *) val seq_to_file : ?len:int -> ?suf:string -> ?std:bool -> string -> t Seq.t -> unit (** Write a sequence of [suf]-suffixed compact one-line JSON values to a file. @param suf is the suffix of each value written. Newline by default. See [to_string] for the role of the optional arguments and raised exceptions. *) val seq_to_buffer : ?suf:string -> ?std:bool -> Buffer.t -> t Seq.t -> unit (** Write a sequence of [suf]-suffixed compact one-line JSON values to an existing buffer. @param suf is the suffix of each value written. Newline by default. See [to_string] for the role of the optional arguments and raised exceptions. *) val write_t : Buffer.t -> t -> unit (** Write the given JSON value to the given buffer. Provided as a writer function for atdgen. *) (** {2 Miscellaneous} *) val sort : t -> t (** Sort object fields (stable sort, comparing field names and treating them as byte sequences) *) (**/**) (* begin undocumented section *) val write_null : Buffer.t -> unit -> unit val write_bool : Buffer.t -> bool -> unit # 135 "write.mli" val write_intlit : Buffer.t -> string -> unit # 138 "write.mli" val write_floatlit : Buffer.t -> string -> unit # 141 "write.mli" val write_stringlit : Buffer.t -> string -> unit # 144 "write.mli" val write_assoc : Buffer.t -> (string * t) list -> unit val write_list : Buffer.t -> t list -> unit # 147 "write.mli" val write_tuple : Buffer.t -> t list -> unit val write_std_tuple : Buffer.t -> t list -> unit # 151 "write.mli" val write_variant : Buffer.t -> string -> t option -> unit val write_std_variant : Buffer.t -> string -> t option -> unit # 155 "write.mli" val write_json : Buffer.t -> t -> unit val write_std_json : Buffer.t -> t -> unit (* end undocumented section *) (**/**) # 1 "write2.mli" (** {2 JSON pretty-printing} *) val pretty_print : ?std:bool -> Format.formatter -> t -> unit (** Pretty-print into a {!Format.formatter}. See [to_string] for the role of the optional [std] argument. @raise Json_error if [float] value is not allowed in standard JSON. @since 1.3.1 *) val pretty_to_string : ?std:bool -> t -> string (** Pretty-print into a string. See [to_string] for the role of the optional [std] argument. See [pretty_print] for raised exceptions. *) val pretty_to_channel : ?std:bool -> out_channel -> t -> unit (** Pretty-print to a channel. See [to_string] for the role of the optional [std] argument. See [pretty_print] for raised exceptions. *) # 1 "read.mli" val prettify : ?std:bool -> string -> string (** Combined parser and pretty-printer. See [to_string] for the role of the optional [std] argument and raised exceptions. *) val compact : ?std:bool -> string -> string (** Combined parser and printer. See [to_string] for the role of the optional [std] argument and raised exceptions. *) (** {2 JSON readers} *) exception Finally of exn * exn (** Exception describing a failure in both finalizer and parsing. *) val from_string : ?buf:Buffer.t -> ?fname:string -> ?lnum:int -> string -> t (** Read a JSON value from a string. @param buf use this buffer at will during parsing instead of creating a new one. @param fname data file name to be used in error messages. It does not have to be a real file. @param lnum number of the first line of input. Default is 1. @raise Json_error if parsing fails. *) val from_channel : ?buf:Buffer.t -> ?fname:string -> ?lnum:int -> in_channel -> t (** Read a JSON value from a channel. See [from_string] for the meaning of the optional arguments and raised exceptions. *) val from_file : ?buf:Buffer.t -> ?fname:string -> ?lnum:int -> string -> t (** Read a JSON value from a file. See [from_string] for the meaning of the optional arguments and raised exceptions. *) type lexer_state = Lexer_state.t = { buf : Buffer.t; mutable lnum : int; mutable bol : int; mutable fname : string option; } (** This alias is provided for backward compatibility. New code should refer to {!Yojson.lexer_state} directly. *) val init_lexer : ?buf: Buffer.t -> ?fname: string -> ?lnum: int -> unit -> lexer_state (** This alias is provided for backward compatibility. New code should use {!Yojson.init_lexer} directly. *) val from_lexbuf : lexer_state -> ?stream:bool -> Lexing.lexbuf -> t (** Read a JSON value from a lexbuf. A valid initial [lexer_state] can be created with [init_lexer]. See [from_string] for the meaning of the optional arguments and raised exceptions. @param stream indicates whether more data may follow. The default value is false and indicates that only JSON whitespace can be found between the end of the JSON value and the end of the input. *) val seq_from_string : ?buf:Buffer.t -> ?fname:string -> ?lnum:int -> string -> t Seq.t (** Input a sequence of JSON values from a string. Whitespace between JSON values is fine but not required. See [from_string] for the meaning of the optional arguments and raised exceptions. *) val seq_from_channel : ?buf:Buffer.t -> ?fin:(unit -> unit) -> ?fname:string -> ?lnum:int -> in_channel -> t Seq.t (** Input a sequence of JSON values from a channel. Whitespace between JSON values is fine but not required. @param fin finalization function executed once when the end of the sequence is reached either because there is no more input or because the input could not be parsed, raising an exception. @raise Finally When the parsing and the finalizer both raised, [Finally (exn, fin_exn)] is raised, [exn] being the parsing exception and [fin_exn] the finalizer one. See [from_string] for the meaning of the other optional arguments and other raised exceptions. *) val seq_from_file : ?buf:Buffer.t -> ?fname:string -> ?lnum:int -> string -> t Seq.t (** Input a sequence of JSON values from a file. Whitespace between JSON values is fine but not required. See [from_string] for the meaning of the optional arguments and raised exceptions. *) val seq_from_lexbuf : lexer_state -> ?fin:(unit -> unit) -> Lexing.lexbuf -> t Seq.t (** Input a sequence of JSON values from a lexbuf. A valid initial [lexer_state] can be created with [init_lexer]. Whitespace between JSON values is fine but not required. @raise Finally When the parsing and the finalizer both raised, [Finally (exn, fin_exn)] is raised, [exn] being the parsing exception and [fin_exn] the finalizer one. See [seq_from_channel] for the meaning of the optional [fin] argument and other raised exceptions. *) type json_line = [ `Json of t | `Exn of exn ] (** The type of values resulting from a parsing attempt of a JSON value. *) val lineseq_from_channel : ?buf:Buffer.t -> ?fin:(unit -> unit) -> ?fname:string -> ?lnum:int -> in_channel -> json_line Seq.t (** Input a sequence of JSON values, one per line, from a channel. Exceptions raised when reading malformed lines are caught and represented using [`Exn]. See [seq_from_channel] for the meaning of the optional [fin] argument. See [from_string] for the meaning of the other optional arguments and raised exceptions. *) val lineseq_from_file : ?buf:Buffer.t -> ?fname:string -> ?lnum:int -> string -> json_line Seq.t (** Input a sequence of JSON values, one per line, from a file. Exceptions raised when reading malformed lines are caught and represented using [`Exn]. See [seq_from_channel] for the meaning of the optional [fin] argument. See [from_string] for the meaning of the other optional arguments and raised exceptions. *) val read_t : lexer_state -> Lexing.lexbuf -> t (** Read a JSON value from the given lexer_state and lexing buffer and return it. Provided as a reader function for atdgen. *) (**/**) (* begin undocumented section *) val finish_string : lexer_state -> Lexing.lexbuf -> string val read_string : lexer_state -> Lexing.lexbuf -> string val read_ident : lexer_state -> Lexing.lexbuf -> string val map_string : lexer_state -> (string -> int -> int -> 'a) -> Lexing.lexbuf -> 'a (* equivalent to finish_string *) val map_ident : lexer_state -> (string -> int -> int -> 'a) -> Lexing.lexbuf -> 'a (* equivalent to read_ident *) type variant_kind = [ `Edgy_bracket | `Square_bracket | `Double_quote ] val start_any_variant : lexer_state -> Lexing.lexbuf -> variant_kind val finish_variant : lexer_state -> Lexing.lexbuf -> t option val finish_skip_variant : lexer_state -> Lexing.lexbuf -> unit val read_lt : lexer_state -> Lexing.lexbuf -> unit val read_gt : lexer_state -> Lexing.lexbuf -> unit val read_comma : lexer_state -> Lexing.lexbuf -> unit val finish_stringlit : lexer_state -> Lexing.lexbuf -> string val finish_skip_stringlit : lexer_state -> Lexing.lexbuf -> unit val finish_escaped_char : lexer_state -> Lexing.lexbuf -> unit val finish_comment : lexer_state -> Lexing.lexbuf -> unit val read_space : lexer_state -> Lexing.lexbuf -> unit val read_eof : Lexing.lexbuf -> bool val read_null : lexer_state -> Lexing.lexbuf -> unit val read_null_if_possible : lexer_state -> Lexing.lexbuf -> bool val read_bool : lexer_state -> Lexing.lexbuf -> bool val read_int : lexer_state -> Lexing.lexbuf -> int val read_int8 : lexer_state -> Lexing.lexbuf -> char val read_int32 : lexer_state -> Lexing.lexbuf -> int32 val read_int64 : lexer_state -> Lexing.lexbuf -> int64 val read_number : lexer_state -> Lexing.lexbuf -> float val skip_ident : lexer_state -> Lexing.lexbuf -> unit val read_sequence : ('a -> lexer_state -> Lexing.lexbuf -> 'a) -> 'a -> lexer_state -> Lexing.lexbuf -> 'a val read_list : (lexer_state -> Lexing.lexbuf -> 'a) -> lexer_state -> Lexing.lexbuf -> 'a list val read_list_rev : (lexer_state -> Lexing.lexbuf -> 'a) -> lexer_state -> Lexing.lexbuf -> 'a list val read_array_end : Lexing.lexbuf -> unit val read_array_sep : lexer_state -> Lexing.lexbuf -> unit val read_array : (lexer_state -> Lexing.lexbuf -> 'a) -> lexer_state -> Lexing.lexbuf -> 'a array val read_tuple : (int -> 'a -> lexer_state -> Lexing.lexbuf -> 'a) -> 'a -> lexer_state -> Lexing.lexbuf -> 'a val start_any_tuple : lexer_state -> Lexing.lexbuf -> bool val read_lpar : lexer_state -> Lexing.lexbuf -> unit val read_rpar : lexer_state -> Lexing.lexbuf -> unit val read_tuple_end : Lexing.lexbuf -> unit val read_tuple_end2 : lexer_state -> bool -> Lexing.lexbuf -> unit val read_tuple_sep : lexer_state -> Lexing.lexbuf -> unit val read_tuple_sep2 : lexer_state -> bool -> Lexing.lexbuf -> unit val read_lbr : lexer_state -> Lexing.lexbuf -> unit val read_rbr : lexer_state -> Lexing.lexbuf -> unit val read_fields : ('acc -> string -> lexer_state -> Lexing.lexbuf -> 'acc) -> 'acc -> lexer_state -> Lexing.lexbuf -> 'acc val read_abstract_fields : (lexer_state -> Lexing.lexbuf -> 'key) -> ('acc -> 'key -> lexer_state -> Lexing.lexbuf -> 'acc) -> 'acc -> lexer_state -> Lexing.lexbuf -> 'acc val read_lcurl : lexer_state -> Lexing.lexbuf -> unit val read_object_end : Lexing.lexbuf -> unit val read_object_sep : lexer_state -> Lexing.lexbuf -> unit val read_colon : lexer_state -> Lexing.lexbuf -> unit val read_json : lexer_state -> Lexing.lexbuf -> t val skip_json : lexer_state -> Lexing.lexbuf -> unit val buffer_json : lexer_state -> Lexing.lexbuf -> unit (* end undocumented section *) (**/**) # 113 "yojson.cppo.mli" end (** {1:raw Supertype of all JSON tree types} *) # 1 "type.ml" (** {3 Type of the JSON tree} *) type t = [ | `Null | `Bool of bool # 8 "type.ml" | `Int of int # 11 "type.ml" | `Intlit of string # 14 "type.ml" | `Float of float # 17 "type.ml" | `Floatlit of string # 20 "type.ml" | `String of string # 23 "type.ml" | `Stringlit of string # 25 "type.ml" | `Assoc of (string * t) list | `List of t list # 28 "type.ml" | `Tuple of t list # 31 "type.ml" | `Variant of (string * t option) # 33 "type.ml" ] (** All possible cases defined in Yojson: - `Null: JSON null - `Bool of bool: JSON boolean - `Int of int: JSON number without decimal point or exponent. - `Intlit of string: JSON number without decimal point or exponent, preserved as a string. - `Float of float: JSON number, Infinity, -Infinity or NaN. - `Floatlit of string: JSON number, Infinity, -Infinity or NaN, preserved as a string. - `String of string: JSON string. Bytes in the range 128-255 are preserved as-is without encoding validation for both reading and writing. - `Stringlit of string: JSON string literal including the double quotes. - `Assoc of (string * json) list: JSON object. - `List of json list: JSON array. - `Tuple of json list: Tuple (non-standard extension of JSON). Syntax: [("abc", 123)]. - `Variant of (string * json option): Variant (non-standard extension of JSON). Syntax: [<"Foo">] or [<"Bar":123>]. *) (* Note to adventurers: ocamldoc does not support inline comments on each polymorphic variant, and cppo doesn't allow to concatenate comments, so it would be complicated to document only the cases that are preserved by cppo in the type definition. *) # 1 "monomorphic.mli" val pp : Format.formatter -> t -> unit (** Pretty printer, useful for debugging *) val show : t -> string (** Convert value to string, useful for debugging *) val equal : t -> t -> bool (** [equal a b] is the monomorphic equality. Determines whether two JSON values are considered equal. In the case of JSON objects, the order of the keys does not matter, except for duplicate keys which will be considered equal as long as they are in the same input order. *) # 1 "write.mli" (** {2 JSON writers} *) val to_string : ?buf:Buffer.t -> ?len:int -> ?suf:string -> ?std:bool -> t -> string (** Write a compact JSON value to a string. @param buf allows to reuse an existing buffer created with [Buffer.create]. The buffer is cleared of all contents before starting and right before returning. @param len initial length of the output buffer. @param suf appended to the output as a suffix, defaults to empty string. @param std use only standard JSON syntax, i.e. convert tuples and variants into standard JSON (if applicable), refuse to print NaN and infinities, require the root node to be either an object or an array. Default is [false]. @raise Json_error if [float] value is not allowed in standard JSON. *) val to_channel : ?buf:Buffer.t -> ?len:int -> ?suf:string -> ?std:bool -> out_channel -> t -> unit (** Write a compact JSON value to a channel. Note: the [out_channel] is not flushed by this function. See [to_string] for the role of the optional arguments and raised exceptions. *) val to_output : ?buf:Buffer.t -> ?len:int -> ?suf:string -> ?std:bool -> < output : string -> int -> int -> int; .. > -> t -> unit (** Write a compact JSON value to an OO channel. See [to_string] for the role of the optional arguments and raised exceptions. *) val to_file : ?len:int -> ?std:bool -> ?suf:string -> string -> t -> unit (** Write a compact JSON value to a file. See [to_string] for the role of the optional arguments and raised exceptions. @param suf is a suffix appended to the output Newline by default for POSIX compliance. *) val to_buffer : ?suf:string -> ?std:bool -> Buffer.t -> t -> unit (** Write a compact JSON value to an existing buffer. See [to_string] for the role of the optional argument and raised exceptions. *) val seq_to_string : ?buf:Buffer.t -> ?len:int -> ?suf:string -> ?std:bool -> t Seq.t -> string (** Write a sequence of [suf]-suffixed compact one-line JSON values to a string. @param suf is the suffix ouf each value written. Newline by default. See [to_string] for the role of the optional arguments and raised exceptions. *) val seq_to_channel : ?buf:Buffer.t -> ?len:int -> ?suf:string -> ?std:bool -> out_channel -> t Seq.t -> unit (** Write a sequence of [suf]-suffixed compact one-line JSON values to a channel. @param suf is the suffix of each value written. Newline by default. See [to_channel] for the role of the optional arguments and raised exceptions. *) val seq_to_file : ?len:int -> ?suf:string -> ?std:bool -> string -> t Seq.t -> unit (** Write a sequence of [suf]-suffixed compact one-line JSON values to a file. @param suf is the suffix of each value written. Newline by default. See [to_string] for the role of the optional arguments and raised exceptions. *) val seq_to_buffer : ?suf:string -> ?std:bool -> Buffer.t -> t Seq.t -> unit (** Write a sequence of [suf]-suffixed compact one-line JSON values to an existing buffer. @param suf is the suffix of each value written. Newline by default. See [to_string] for the role of the optional arguments and raised exceptions. *) val write_t : Buffer.t -> t -> unit (** Write the given JSON value to the given buffer. Provided as a writer function for atdgen. *) (** {2 Miscellaneous} *) val sort : t -> t (** Sort object fields (stable sort, comparing field names and treating them as byte sequences) *) (**/**) (* begin undocumented section *) val write_null : Buffer.t -> unit -> unit val write_bool : Buffer.t -> bool -> unit # 122 "write.mli" val write_int : Buffer.t -> int -> unit # 125 "write.mli" val write_float : Buffer.t -> float -> unit val write_std_float : Buffer.t -> float -> unit val write_float_prec : int -> Buffer.t -> float -> unit val write_std_float_prec : int -> Buffer.t -> float -> unit # 131 "write.mli" val write_string : Buffer.t -> string -> unit # 135 "write.mli" val write_intlit : Buffer.t -> string -> unit # 138 "write.mli" val write_floatlit : Buffer.t -> string -> unit # 141 "write.mli" val write_stringlit : Buffer.t -> string -> unit # 144 "write.mli" val write_assoc : Buffer.t -> (string * t) list -> unit val write_list : Buffer.t -> t list -> unit # 147 "write.mli" val write_tuple : Buffer.t -> t list -> unit val write_std_tuple : Buffer.t -> t list -> unit # 151 "write.mli" val write_variant : Buffer.t -> string -> t option -> unit val write_std_variant : Buffer.t -> string -> t option -> unit # 155 "write.mli" val write_json : Buffer.t -> t -> unit val write_std_json : Buffer.t -> t -> unit (* end undocumented section *) (**/**) # 1 "write2.mli" (** {2 JSON pretty-printing} *) val pretty_print : ?std:bool -> Format.formatter -> t -> unit (** Pretty-print into a {!Format.formatter}. See [to_string] for the role of the optional [std] argument. @raise Json_error if [float] value is not allowed in standard JSON. @since 1.3.1 *) val pretty_to_string : ?std:bool -> t -> string (** Pretty-print into a string. See [to_string] for the role of the optional [std] argument. See [pretty_print] for raised exceptions. *) val pretty_to_channel : ?std:bool -> out_channel -> t -> unit (** Pretty-print to a channel. See [to_string] for the role of the optional [std] argument. See [pretty_print] for raised exceptions. *) cpdf-2.8.1/cpdfjpeg2000.ml0000664000175000017500000000227014771516640013550 0ustar johnjohnopen Pdfutil open Pdfio open Cpdferror let read_word i = let a = i32ofi (i.input_byte ()) in let b = i32ofi (i.input_byte ()) in let c = i32ofi (i.input_byte ()) in let d = i32ofi (i.input_byte ()) in lor32 (lor32 (lor32 (lsl32 a 24) (lsl32 b 16)) (lsl32 c 8)) d exception Answer of int * int let id_IMAGE_HEADER_BOX = 0x69686472l (* ihdr *) (* Return the width and height of a JPEG2000 (.jp2 or .jpx) image. *) let jpeg2000_dimensions_inner bs = let i = Pdfio.input_of_bytes bs in let a = read_word i in let b = read_word i in let c = read_word i in if a <> 0x0000000cl || b <> 0x6a502020l || c <> 0x0d0a870al then Cpdferror.error "bad JPEG2000 header" else while true do let box = read_word i in if box = id_IMAGE_HEADER_BOX then begin let h = read_word i in let w = read_word i in raise (Answer (i32toi w, i32toi h)) end; (* Read words starting at each byte until we find ihdr. *) i.seek_in (i.pos_in () - 3) done let jpeg2000_dimensions bs = try ignore (jpeg2000_dimensions_inner bs); (0, 0) with | Answer (w, h) -> (w, h) | Exit -> error "could not determine JPEG2000 dimensions" cpdf-2.8.1/cpdftexttopdf.ml0000664000175000017500000001701114771516640014341 0ustar johnjohnopen Pdfutil open Cpdferror let of_utf8_with_newlines fontpack fontsize t = let items = ref [] in let currfont = ref ~-1 in let codepoints = Pdftext.codepoints_of_utf8 t in let currtext = ref [] in let process_codepoints cs = iter (fun u -> match Cpdfembed.get_char fontpack u with | Some (c, n, f) -> begin if n <> !currfont then begin if !currtext <> [] then items := Cpdftype.Text (rev !currtext)::!items; currtext := []; currfont := n; items := Cpdftype.Font (string_of_int n, f, fontsize)::!items; currtext := char_of_int c::!currtext; end else currtext := char_of_int c::!currtext end | None -> Printf.printf "No glyph for unicode U+%04X in this font\n" u) cs; items := Cpdftype.Text (rev !currtext)::!items in let buf = ref [] in List.iter (function | 10 (*'\n'*) -> let c = rev !buf in if c <> [] then process_codepoints c; items := Cpdftype.NewLine::!items; currtext := []; buf := [] | 13 (*'\r'*) -> () | x -> buf := x::!buf) codepoints; (* Do last one *) let c = rev !buf in if c <> [] then process_codepoints c; rev !items (* Post process, adding Tag / EndTag around paragraphs *) let rec tag_paragraphs = function | Cpdftype.NewLine::Cpdftype.NewLine::t -> Cpdftype.EndTag::Cpdftype.NewLine::Cpdftype.NewLine::Cpdftype.Tag ("P", 0)::tag_paragraphs t | x::t -> x::tag_paragraphs t | [] -> [Cpdftype.EndTag] let tag_paragraphs l = Cpdftype.Tag ("P", 0)::tag_paragraphs l let typeset ~process_struct_tree ?subformat ?title ~papersize ~font ~fontsize text = let process_struct_tree = match process_struct_tree, subformat with | _, (Some Cpdfua.PDFUA1 | Some Cpdfua.PDFUA2) | true, _ -> true | _ -> false in let pdf, title = match subformat with | None -> Pdf.empty (), begin match title with Some x -> x | None -> "" end | Some Cpdfua.PDFUA1 -> begin match title with | None -> error "no -title given" | Some title -> Cpdfua.create_pdfua1 title papersize 1, title end | Some Cpdfua.PDFUA2 -> begin match title with | None -> error "no -title given" | Some title -> Cpdfua.create_pdfua2 title papersize 1, title end in let codepoints = setify (Pdftext.codepoints_of_utf8 (Pdfio.string_of_bytes text)) in let fontpack = match font with | Cpdfembed.PreMadeFontPack t -> t | Cpdfembed.EmbedInfo {fontfile; fontname; encoding} -> Cpdfembed.embed_truetype pdf ~fontfile ~fontname ~codepoints ~encoding | Cpdfembed.ExistingNamedFont -> raise (Pdf.PDFError "Can't use existing named font for text-to-PDF") in let instrs = of_utf8_with_newlines fontpack fontsize (Pdfio.string_of_bytes text) in (*flprint (Cpdftype.to_string instrs); flprint "------------------------------";*) let tagged = if process_struct_tree then tag_paragraphs instrs else instrs in (*flprint (Cpdftype.to_string tagged);*) let margin = Pdfunits.points (Pdfpaper.width papersize) (Pdfpaper.unit papersize) /. 15. in let instrs = if tagged = [] then [] else let firstfont = hd (keep (function Cpdftype.Font _ -> true | _ -> false) tagged) in [firstfont; Cpdftype.BeginDocument] @ tagged in let pages, tags = Cpdftype.typeset ~process_struct_tree margin margin margin margin papersize pdf instrs in (*iter (fun x -> Printf.printf "PAGE\n"; iter (fun (_, i) -> Printf.printf "Paragraph number %i\n" i) x) tags;*) (* We make (tag number, page number, mcid) triples *) let tagtriples = flatten (map2 (fun pn tags -> map2 (fun (_, tagnum) mcid -> (tagnum, pn, mcid)) tags (indx0 tags)) (indx0 tags) tags) in (* Printf.printf "(paragraph number, page number, mcid) triples:\n"; iter (fun (tagnum, pn, mcid) -> Printf.printf "%i, %i, %i\n" tagnum pn mcid) tagtriples;*) (* Now work out the nodes and which MCIDs in which pages they point to. Each paragraph may point to 1 or more nodes. *) let rec find_nodes (a : ((int * int * int) list) list) = function | (para, page, mcid)::nodes -> begin match a with | ((para', page', mcid')::t)::rest when para = para' -> find_nodes (((para, page, mcid)::(para', page', mcid')::t)::rest) nodes | (h::t)::rest -> find_nodes (([(para, page, mcid)])::(h::t)::rest) nodes | []::rest -> find_nodes (([(para, page, mcid)])::rest) nodes | [] -> assert false end | [] -> rev (map rev a) in let nodes = find_nodes [[]] tagtriples in (*Printf.printf "Paragraphs and their page and MCIDs\n"; iter (fun parts_of_para -> Printf.printf "Paragraph:\n"; iter (fun (para, page, mcid) -> Printf.printf "Para %i, Page %i, MCID %i\n" para page mcid) parts_of_para) nodes;*) let pages = map2 (fun pn p -> if process_struct_tree then {p with Pdfpage.rest = Pdf.add_dict_entry p.Pdfpage.rest "/StructParents" (Pdf.Integer pn)} else p) (indx0 pages) pages in let pdf, pageroot = Pdfpage.add_pagetree pages pdf in let pdf = Pdfpage.add_root pageroot [] pdf in let refnums = let ns = Pdf.page_reference_numbers pdf in combine (indx0 ns) ns in if process_struct_tree || subformat = Some Cpdfua.PDFUA1 || subformat = Some Cpdfua.PDFUA2 then begin let namespace = if subformat = Some Cpdfua.PDFUA2 then Pdf.addobj pdf (Pdf.Dictionary [("/NS", Pdf.String "http://iso.org/pdf2/ssn")]) else 0 in let document = if subformat = Some Cpdfua.PDFUA2 then Pdf.addobj pdf Pdf.Null else 0 in let str = Pdf.addobj pdf Pdf.Null in let topks = map (fun parts_of_para -> let ks = map (fun (_, pagenumber, mcid) -> Pdf.Dictionary [("/Type", Pdf.Name "/MCR"); ("/Pg", Pdf.Indirect (unopt (lookup pagenumber refnums))); ("/MCID", Pdf.Integer mcid)]) parts_of_para in Pdf.Indirect (Pdf.addobj pdf (Pdf.Dictionary [("/K", Pdf.Array ks); ("/P", Pdf.Indirect (if subformat = Some Cpdfua.PDFUA2 then document else str)); ("/S", Pdf.Name "/P")]))) nodes in if subformat = Some Cpdfua.PDFUA2 then Pdf.addobj_given_num pdf (document, Pdf.Dictionary [("/K", Pdf.Array topks); ("/P", Pdf.Indirect str); ("/S", Pdf.Name "/Document"); ("/NS", Pdf.Indirect namespace)]); let parent_tree = let pairs = map (fun pn -> let this_page_triples = keep (fun (para, page, mcid) -> page = pn) tagtriples in (string_of_int pn, Pdf.Array (map (function (para, _, _) -> (List.nth topks para)) this_page_triples))) (indx0 pages) in Pdf.addobj pdf (Pdftree.build_name_tree true pdf pairs) in let stns = if subformat = Some Cpdfua.PDFUA2 then [("/Namespaces", Pdf.Array [Pdf.Indirect namespace])] else [] in let k = if subformat = Some Cpdfua.PDFUA2 then Pdf.Indirect document else Pdf.Array topks in Pdf.addobj_given_num pdf (str, Pdf.Dictionary (stns @ [("/Type", Pdf.Name "/StructTreeRoot"); ("/K", k); ("/ParentTree", Pdf.Indirect parent_tree)])); Pdf.replace_chain pdf ["/Root"; "/StructTreeRoot"] (Pdf.Indirect str) end; pdf cpdf-2.8.1/cpdfpage.ml0000664000175000017500000012613614771516640013245 0ustar johnjohnopen Pdfutil open Cpdferror (*(* FIXME: Need to take account of inherited resources (among Xobjects and their children - pages are regularized upon loading). Would be nice to see a failing example first though. FIXME: What would happen if a pattern was used in a transforming and non-transforming way - we would have to dedupulicate - again, no failing example available. *) (* Transparency group soft masks appear to need altering with the inverse of the transformation matrix. We find them all, deduplicate, and then process in place. *) (* For each xobject, look in /Resources -> /ExtGState -> /G, and get object number. *) let rec change_softmask_matrices_xobject pdf xobject = let objnums = ref [] in begin match xobject with | Pdf.Indirect i -> let dict = Pdf.lookup_obj pdf i in begin match Pdf.lookup_direct pdf "/Resources" dict with | Some d -> begin match Pdf.lookup_direct pdf "/ExtGState" d with | Some (Pdf.Dictionary extgstates) -> iter (function extgstate -> match Pdf.direct pdf extgstate with | Pdf.Dictionary d -> begin match Pdf.lookup_direct pdf "/SMask" (Pdf.Dictionary d) with | Some (Pdf.Dictionary d) -> begin match lookup "/G" d with | Some (Pdf.Indirect i) -> objnums := i::!objnums | _ -> () end | _ -> () end | _ -> ()) (map snd extgstates) | _ -> () end | _ -> () end | _ -> () end; let subxobjects = match Pdf.lookup_direct pdf "/Resources" xobject with | Some d -> begin match Pdf.lookup_direct pdf "/XObject" d with | Some (Pdf.Dictionary d) -> map snd d | _ -> [] end | _ -> [] in let descendants = flatten (map (change_softmask_matrices_xobject pdf) subxobjects) in descendants @ !objnums let change_softmask_matrices_page pdf tr page = let xobjects = match Pdf.lookup_direct pdf "/XObject" page.Pdfpage.resources with | Some (Pdf.Dictionary d) -> d | _ -> [] in let objnums = setify (flatten (map (change_softmask_matrices_xobject pdf) (map snd xobjects))) in iter (fun objnum -> let dict = Pdf.lookup_obj pdf objnum in let matrix = Pdf.parse_matrix pdf "/Matrix" dict in let matrix' = Pdftransform.matrix_compose (Pdftransform.matrix_invert tr) matrix in let dict = Pdf.add_dict_entry dict "/Matrix" (Pdf.make_matrix matrix') in Pdf.addobj_given_num pdf (objnum, dict)) objnums*) (* When we transform a page by wrapping in an [Op_cm], we must also change any /Matrix entries in (some) pattern dictionaries, including inside xobjects. We only change the ones used with scn, to avoid pattern dictionaries used in other ways, which must not be transformed. *) let patterns_used pdf content resources = let used = null_hash () in match Pdf.lookup_direct pdf "/Pattern" resources with | None -> used | Some _ -> let ops = Pdfops.parse_operators pdf resources content in iter (function Pdfops.Op_scnName (x, []) | Pdfops.Op_SCNName (x, []) -> Hashtbl.replace used x () | _ -> ()) ops; used let pats_done = null_hash () let rec change_pattern_matrices_resources pdf tr resources names_used_with_scn = begin match Pdf.lookup_direct pdf "/XObject" resources with | Some (Pdf.Dictionary elts) -> iter (fun (k, v) -> match v with | Pdf.Indirect i -> (*Printf.printf "Processing form xobject %s for patterns\n%!" k;*) change_pattern_matrices_xobject pdf tr v i | _ -> raise (Pdf.PDFError "change_pattern_matrices_page")) elts | _ -> () end; begin match Pdf.lookup_direct pdf "/Pattern" resources with | Some (Pdf.Dictionary patterns) -> let entries = map (fun (name, p) -> match Hashtbl.find names_used_with_scn name with | exception Not_found -> (name, p) | _ -> (*Printf.printf "Changing matrices of pattern %s\n%!" name;*) let old_pattern = Pdf.direct pdf p in let new_pattern = let existing_tr = Pdf.parse_matrix pdf "/Matrix" old_pattern in let new_tr = Pdftransform.matrix_compose tr existing_tr in Pdf.add_dict_entry old_pattern "/Matrix" (Pdf.make_matrix new_tr) in name, Pdf.Indirect (Pdf.addobj pdf new_pattern)) patterns in Pdf.add_dict_entry resources "/Pattern" (Pdf.Dictionary entries) | _ -> resources end and change_pattern_matrices_xobject pdf tr xobj xobjnum = match xobj with | Pdf.Indirect i when (try ignore (Hashtbl.find pats_done i); true with Not_found -> false) -> () | _ -> begin match xobj with Pdf.Indirect i -> Hashtbl.add pats_done i () | _ -> () end; let xobj = Pdf.direct pdf xobj in match Pdf.lookup_direct pdf "/Subtype" xobj with | Some (Pdf.Name "/Form") -> Pdfcodec.decode_pdfstream pdf xobj; let resources = match Pdf.lookup_direct pdf "/Resources" xobj with Some d -> d | None -> Pdf.Dictionary [] in let used = patterns_used pdf [xobj] resources in begin match Pdf.lookup_direct pdf "/Resources" xobj with | Some resources -> let xobj' = Pdf.add_dict_entry xobj "/Resources" (change_pattern_matrices_resources pdf tr resources used) in Pdf.addobj_given_num pdf (xobjnum, xobj') | _ -> () end | _ -> () let change_pattern_matrices_page pdf tr page = Hashtbl.clear pats_done; (*change_softmask_matrices_page pdf tr page;*) let used = patterns_used pdf page.Pdfpage.content page.Pdfpage.resources in (*Printf.printf "Patterns for translation, due to being used as cs / CS"; Hashtbl.iter (fun x _ -> Printf.printf "%s " x) used; Printf.printf "\n%!";*) {page with Pdfpage.resources = change_pattern_matrices_resources pdf tr page.Pdfpage.resources used} (* Output information for each page *) exception Exceptjson of Cpdfyojson.Safe.t let output_page_info ?(json=false) ?(raisejson=false) unit pdf range = let ugetnum pdf o = let n = Pdf.getnum pdf o in match unit with | Pdfunits.PdfPoint -> n | Pdfunits.Inch -> Pdfunits.inches n Pdfunits.PdfPoint | Pdfunits.Centimetre -> Pdfunits.centimetres n Pdfunits.PdfPoint | Pdfunits.Millimetre -> Pdfunits.millimetres n Pdfunits.PdfPoint in let pages = Pdfpage.pages_of_pagetree pdf in let labels = Pdfpagelabels.read pdf in let getbox page box = if box = "/MediaBox" then match page.Pdfpage.mediabox with | Pdf.Array [a; b; c; d] -> Printf.sprintf "%f %f %f %f" (ugetnum pdf a) (ugetnum pdf b) (ugetnum pdf c) (ugetnum pdf d) | _ -> "" else match Pdf.lookup_direct pdf box page.Pdfpage.rest with | Some (Pdf.Array [a; b; c; d]) -> Printf.sprintf "%f %f %f %f" (ugetnum pdf a) (ugetnum pdf b) (ugetnum pdf c) (ugetnum pdf d) | _ -> "" in let rotation page = Pdfpage.int_of_rotation page.Pdfpage.rotate in let num_annots page = match Pdf.lookup_direct pdf "/Annots" page.Pdfpage.rest with | Some (Pdf.Array a) -> length a | _ -> 0 in let json_entry_of_pnum pnum = let getbox_json page box = match getbox page box with | "" -> `Null | s -> let a, b, c, d = Cpdfcoord.parse_rectangle (Pdf.empty ()) s in `List [`Float a; `Float b; `Float c; `Float d] in let page = select pnum pages in `Assoc [("Page", `Int pnum); ("Label", (`String (try Pdfpagelabels.pagelabeltext_of_pagenumber pnum labels with Not_found -> ""))); ("MediaBox", getbox_json page "/MediaBox"); ("CropBox", getbox_json page "/CropBox"); ("BleedBox", getbox_json page "/BleedBox"); ("TrimBox", getbox_json page "/TrimBox"); ("ArtBox", getbox_json page "/ArtBox"); ("Rotation", `Int (rotation page)); ("Annotations", `Int (num_annots page))] in if json then let thejson = `List (map json_entry_of_pnum range) in if raisejson then raise (Exceptjson thejson) else flprint (Cpdfyojson.Safe.pretty_to_string thejson) else iter (fun pnum -> let page = select pnum pages in Printf.printf "Page %i:\n" pnum; Printf.printf "Label: %s\n" (try Pdfpagelabels.pagelabeltext_of_pagenumber pnum labels with Not_found -> ""); Printf.printf "MediaBox: %s\n" (getbox page "/MediaBox"); Printf.printf "CropBox: %s\n" (getbox page "/CropBox"); Printf.printf "BleedBox: %s\n" (getbox page "/BleedBox"); Printf.printf "TrimBox: %s\n" (getbox page "/TrimBox"); Printf.printf "ArtBox: %s\n" (getbox page "/ArtBox"); Printf.printf "Rotation: %i\n" (rotation page); Printf.printf "Annotations: %i\n" (num_annots page)) range let json_page_info pdf range unit = try output_page_info ~json:true ~raisejson:true unit pdf range; `List [] with Exceptjson j -> j let process_pages f pdf range = let pages = Pdfpage.pages_of_pagetree pdf in let pages', pagenumbers, matrices = (* new page objects, page number, matrix *) split3 (map2 (fun n p -> if mem n range then f n p else (p, n, Pdftransform.i_matrix)) (ilist 1 (length pages)) pages) in Pdfpage.change_pages ~matrices:(combine pagenumbers matrices) true pdf pages' let iter_pages f pdf range = let pages = Pdfpage.pages_of_pagetree pdf in iter2 (fun n p -> if mem n range then f n p) (ilist 1 (length pages)) pages let map_pages f pdf range = let pages = Pdfpage.pages_of_pagetree pdf in option_map2 (fun n p -> if mem n range then Some (f n p) else None) (ilist 1 (length pages)) pages (* Clip a page to one of its boxes, or the media box if that box is not * present. This is a hard clip, done by using a clipping rectangle, so that * the page may then be used as a stamp without extraneous material reapearing. * *) let hard_box pdf range boxname mediabox_if_missing fast = process_pages (Pdfpage.ppstub (fun pagenum page -> let minx, miny, maxx, maxy = if boxname = "/MediaBox" then Pdf.parse_rectangle pdf page.Pdfpage.mediabox else match Pdf.lookup_direct pdf boxname page.Pdfpage.rest with | Some a -> Pdf.parse_rectangle pdf a | _ -> if mediabox_if_missing then Pdf.parse_rectangle pdf page.Pdfpage.mediabox else error (Printf.sprintf "hard_box: box %s not found" boxname) in let ops = [Pdfops.Op_re (minx, miny, maxx -. minx, maxy -. miny); Pdfops.Op_W; Pdfops.Op_n] in Pdfpage.prepend_operators pdf ops ~fast page)) pdf range let shift_page ?(fast=false) dxdylist pdf pnum page = let dx, dy = List.nth dxdylist (pnum - 1) in let transform_op = Pdfops.Op_cm (Pdftransform.matrix_of_op (Pdftransform.Translate (dx, dy))) in let tr = Pdftransform.mktranslate dx dy in let page = change_pattern_matrices_page pdf tr page in Pdfannot.transform_annotations pdf tr page.Pdfpage.rest; (Pdfpage.prepend_operators pdf [transform_op] ~fast page, pnum, tr) let shift_pdf ?(fast=false) dxdylist pdf range = process_pages (shift_page ~fast dxdylist pdf) pdf range (* Shift page data *) let make_mediabox (xmin, ymin, xmax, ymax) = Pdf.Array [Pdf.Real xmin; Pdf.Real ymin; Pdf.Real xmax; Pdf.Real ymax] (* Change the media box and other known boxes by the function [f] which takes xmin, xmax, ymin, ymax as input. *) let change_boxes f pdf page = let names = ["/TrimBox"; "/ArtBox"; "/CropBox"; "/BleedBox"] in let getbox n = Pdf.lookup_direct pdf n page.Pdfpage.rest in let boxes = combine names (map getbox names) in let toreplace = lose (function (_, None) -> true | _ -> false) boxes in let toreplace = map (function (name, Some value) -> (name, value) | _ -> assert false) toreplace in let rest' = fold_left (fun e (k, v) -> let v = make_mediabox (f (Pdf.parse_rectangle pdf v)) in Pdf.replace_dict_entry e k v) page.Pdfpage.rest toreplace in {page with Pdfpage.mediabox = make_mediabox (f (Pdf.parse_rectangle pdf page.Pdfpage.mediabox)); Pdfpage.rest = rest'} let shift_boxes dxdylist pdf range = let dx, dy = match dxdylist with (a, b)::_ -> a, b | _ -> 0.0, 0.0 in let f (xmin, ymin, xmax, ymax) = (xmin +. dx, ymin +. dy, xmax +. dx, ymax +. dy) in let fpage _ p = change_boxes f pdf p in process_pages (Pdfpage.ppstub fpage) pdf range (* Scale contents *) let scale_page_contents ?(fast=false) scale position pdf pnum page = let (minx, miny, maxx, maxy) as box = (* Use cropbox if available *) Pdf.parse_rectangle pdf (match Pdf.lookup_direct pdf "/CropBox" page.Pdfpage.rest with | Some r -> r | None -> page.Pdfpage.mediabox) in let sx, sy, _ = Cpdfposition.calculate_position true 0. box position in let tx, ty = let open Cpdfposition in match position with | Top t -> 0., -.t | TopLeft (a, b) -> a, -.b | TopRight (a, b) -> -.a, -.b | Left t -> t, 0. | BottomLeft (a, b) -> a, b | Bottom t -> 0., t | BottomRight (a, b) -> -.a, b | Right t -> -.t, 0. | _ -> 0., 0. (* centre it... FIXME: We will add a center position, eventually, for text and this... *) in let transform = Pdftransform.matrix_of_transform [Pdftransform.Translate (tx, ty); Pdftransform.Scale ((sx, sy), scale, scale)] in let transform_op = Pdfops.Op_cm transform in let page = change_pattern_matrices_page pdf transform page in Pdfannot.transform_annotations pdf transform page.Pdfpage.rest; (Pdfpage.prepend_operators pdf [transform_op] ~fast page, pnum, transform) let scale_contents ?(fast=false) position scale pdf range = process_pages (scale_page_contents ~fast scale position pdf) pdf range (* Set media box *) let set_mediabox xywhlist pdf range = let crop_page pnum page = let x, y, w, h = List.nth xywhlist (pnum - 1) in {page with Pdfpage.mediabox = (Pdf.Array [Pdf.Real x; Pdf.Real y; Pdf.Real (x +. w); Pdf.Real (y +. h)])} in process_pages (Pdfpage.ppstub crop_page) pdf range let remove_cropping_pdf pdf range = let remove_cropping_page _ page = {page with Pdfpage.rest = (Pdf.remove_dict_entry page.Pdfpage.rest "/CropBox")} in process_pages (Pdfpage.ppstub remove_cropping_page) pdf range let remove_trim_pdf pdf range = let remove_trim_page _ page = {page with Pdfpage.rest = (Pdf.remove_dict_entry page.Pdfpage.rest "/TrimBox")} in process_pages (Pdfpage.ppstub remove_trim_page) pdf range let remove_art_pdf pdf range = let remove_art_page _ page = {page with Pdfpage.rest = (Pdf.remove_dict_entry page.Pdfpage.rest "/ArtBox")} in process_pages (Pdfpage.ppstub remove_art_page) pdf range let remove_bleed_pdf pdf range = let remove_bleed_page _ page = {page with Pdfpage.rest = (Pdf.remove_dict_entry page.Pdfpage.rest "/BleedBox")} in process_pages (Pdfpage.ppstub remove_bleed_page) pdf range (* Upright functionality *) (* Return the pages from the pdf in the range, unordered. *) let select_pages range pdf = let pages = Pdfpage.pages_of_pagetree pdf in option_map (function n -> try Some (select n pages) with _ -> None) range (* If all pages are already upright, and the mediabox is (0,0)-based, do nothing to save time. *) let allupright range pdf = let page_is_upright page = page.Pdfpage.rotate = Pdfpage.Rotate0 && (let (minx, miny, _, _) = Pdf.parse_rectangle pdf page.Pdfpage.mediabox in minx < 0.001 && miny < 0.001 && minx > ~-.0.001 && miny > ~-.0.001) in not (mem false (map page_is_upright (select_pages range pdf))) (* Same, but don't care about mediabox origin. This is for -scale-to-fit, now that it is ok with nonzero origins. *) let alluprightonly range pdf = let page_is_upright page = page.Pdfpage.rotate = Pdfpage.Rotate0 in not (mem false (map page_is_upright (select_pages range pdf))) let upright_transform pdf page = let rotate = Pdfpage.int_of_rotation page.Pdfpage.rotate and cx, cy = let minx, miny, maxx, maxy = Pdf.parse_rectangle pdf page.Pdfpage.mediabox in (minx +. maxx) /. 2., (miny +. maxy) /. 2. in Pdftransform.mkrotate (cx, cy) (rad_of_deg (~-.(float rotate))) let transform_boxes tr pdf page = let f (minx, miny, maxx, maxy) = let minx, miny = Pdftransform.transform_matrix tr (minx, miny) and maxx, maxy = Pdftransform.transform_matrix tr (maxx, maxy) in (minx, miny, maxx, maxy) in change_boxes f pdf page let transform_contents ?(fast=false) tr pdf page = let transform_op = Pdfops.Op_cm tr in let page = change_pattern_matrices_page pdf tr page in Pdfannot.transform_annotations pdf tr page.Pdfpage.rest; Pdfpage.prepend_operators pdf [transform_op] ~fast page (* Change a page's media box so its minimum x and y are 0, making other operations simpler to think about. Any shift that is done is reflected in other boxes (clip etc.) *) let rectify_boxes ?(fast=false) pdf page = let minx, miny, _, _ = Pdf.parse_rectangle pdf page.Pdfpage.mediabox in let f (iminx, iminy, imaxx, imaxy) = iminx -. minx, iminy -. miny, imaxx -. minx, imaxy -. miny in let page = change_boxes f pdf page in if minx <> 0. || miny <> 0. then begin let p, _, _ = shift_page ~fast [(-.minx),(-.miny)] pdf 1 page in p end else page let upright ?(fast=false) range pdf = if allupright range pdf then pdf else let upright_page _ pnum page = let tr = upright_transform pdf page in let page = transform_boxes tr pdf page in let page = transform_contents ~fast tr pdf page in (rectify_boxes ~fast pdf {page with Pdfpage.rotate = Pdfpage.Rotate0}, pnum, tr) in process_pages (upright_page pdf) pdf range (* Rotating pages *) let rotate_pdf r pdf range = let rotate_page _ page = {page with Pdfpage.rotate = Pdfpage.rotation_of_int r} in process_pages (Pdfpage.ppstub rotate_page) pdf range let rotate_pdf_by r pdf range = let rotate_page_by _ page = {page with Pdfpage.rotate = Pdfpage.rotation_of_int ((Pdfpage.int_of_rotation page.Pdfpage.rotate + r) mod 360)} in process_pages (Pdfpage.ppstub rotate_page_by) pdf range let rotate_page_contents ~fast rotpoint r pdf pnum page = let rotation_point = match rotpoint with | None -> let minx, miny, maxx, maxy = Pdf.parse_rectangle pdf page.Pdfpage.mediabox in (minx +. maxx) /. 2., (miny +. maxy) /. 2. | Some point -> point in let tr = Pdftransform.matrix_of_op (Pdftransform.Rotate (rotation_point, -.(rad_of_deg r))) in let transform_op = Pdfops.Op_cm tr in let page = change_pattern_matrices_page pdf tr page in Pdfannot.transform_annotations pdf tr page.Pdfpage.rest; (Pdfpage.prepend_operators pdf [transform_op] ~fast page, pnum, tr) let rotate_contents ?(fast=false) r pdf range = process_pages (rotate_page_contents ~fast None r pdf) pdf range (* Scale page data *) let scale_pdf ?(fast=false) sxsylist pdf range = let scale_page pnum page = let sx, sy = List.nth sxsylist (pnum - 1) in let f (xmin, ymin, xmax, ymax) = xmin *. sx, ymin *. sy, xmax *. sx, ymax *. sy in let page = change_boxes f pdf page and matrix = Pdftransform.matrix_of_op (Pdftransform.Scale ((0., 0.), sx, sy)) in let transform_op = Pdfops.Op_cm matrix in let page = change_pattern_matrices_page pdf matrix page in Pdfannot.transform_annotations pdf matrix page.Pdfpage.rest; (Pdfpage.prepend_operators pdf ~fast [transform_op] page, pnum, matrix) in process_pages scale_page pdf range (* Scale without regard to aspect ratio. *) let stretch ?(fast=false) sxsylist pdf range = let stretch_page pnum page = let sx, sy = List.nth sxsylist (pnum - 1) in let (minx, miny, maxx, maxy) = Pdf.parse_rectangle pdf (match Pdf.lookup_direct pdf "/CropBox" page.Pdfpage.rest with | Some r -> r | None -> page.Pdfpage.mediabox) in let scale_x, scale_y = sx /. (maxx -. minx), sy /. (maxy -. miny) in let f (xmin, ymin, xmax, ymax) = xmin *. scale_x, ymin *. scale_y, xmax *. scale_x, ymax *. scale_y in let page = change_boxes f pdf page in let matrix = Pdftransform.matrix_of_op (Pdftransform.Scale ((0., 0.), scale_x, scale_y)) in let transform_op = Pdfops.Op_cm matrix in let page = change_pattern_matrices_page pdf matrix page in Pdfannot.transform_annotations pdf matrix page.Pdfpage.rest; (Pdfpage.prepend_operators pdf ~fast [transform_op] page, pnum, matrix) in process_pages stretch_page pdf range (* Cropping *) let crop_pdf ?(box="/CropBox") xywhlist pdf range = let crop_page pagenum page = {page with Pdfpage.rest = (Pdf.add_dict_entry page.Pdfpage.rest box (let x, y, w, h = List.nth xywhlist (pagenum - 1) in (Pdf.Array [Pdf.Real x; Pdf.Real y; Pdf.Real (x +. w); Pdf.Real (y +. h)])))} in process_pages (Pdfpage.ppstub crop_page) pdf range (* Centre page content (crop box) on given page size, with no scaling. *) let center_to_fit sxsylist pdf range = let dxdylist = let tx, ty = hd sxsylist in map (fun page -> let (minx, miny, maxx, maxy) = Pdf.parse_rectangle pdf (match Pdf.lookup_direct pdf "/CropBox" page.Pdfpage.rest with | Some r -> r | None -> page.Pdfpage.mediabox) in (~-.((tx -. (maxx -. minx)) /. 2.), ~-.((ty -. (maxy -. miny)) /. 2.))) (Pdfpage.pages_of_pagetree pdf) in let list4 = map (fun (x, y) -> (0., 0., x, y)) sxsylist in let pdf = set_mediabox list4 pdf range in let pdf = crop_pdf list4 pdf range in let pdf = remove_bleed_pdf pdf range in let pdf = remove_art_pdf pdf range in let pdf = remove_bleed_pdf pdf range in shift_boxes dxdylist pdf range (* Scale to fit page of size x * y *) let scale_to_fit_pdf ?(fast=false) position input_scale xylist op pdf range = let scale_page_to_fit pnum page = let x, y = List.nth xylist (pnum - 1) in let matrix = let (minx, miny, maxx, maxy) = Pdf.parse_rectangle pdf (match Pdf.lookup_direct pdf "/CropBox" page.Pdfpage.rest with | Some r -> r | None -> page.Pdfpage.mediabox) in if maxx <= 0. || maxy <= 0. then failwith "Zero-sized pages are invalid" else let fx = x /. (maxx -. minx) in let fy = y /. (maxy -. miny) in let scale = fmin fx fy *. input_scale in let trans_x = (x -. (maxx *. scale)) /. 2. in let trans_y = (y -. (maxy *. scale)) /. 2. in let fixup_trans_x = -. (minx *. scale) /. 2. in let fixup_trans_y = -. (miny *. scale) /. 2. in let position_trans_x = let dx = (x -. ((maxx -. minx) *. scale)) /. 2. in match position with | Cpdfposition.Left _ -> ~-. dx | Cpdfposition.Right _ -> dx | _ -> 0. in let position_trans_y = let dy = (y -. ((maxy -. miny) *. scale)) /. 2. in match position with | Cpdfposition.Top _ -> dy | Cpdfposition.Bottom _ -> ~-. dy | _ -> 0. in (Pdftransform.matrix_of_transform [Pdftransform.Translate (fixup_trans_x, fixup_trans_y); Pdftransform.Translate (position_trans_x, position_trans_y); Pdftransform.Translate (trans_x, trans_y); Pdftransform.Scale ((0., 0.), scale, scale)]) in let page = change_boxes (function (minx, miny, maxx, maxy) -> 0., 0., x, y) pdf page in Pdfannot.transform_annotations pdf matrix page.Pdfpage.rest; (Pdfpage.prepend_operators pdf [Pdfops.Op_cm matrix] ~fast (change_pattern_matrices_page pdf matrix page), pnum, matrix) in process_pages scale_page_to_fit pdf range (* Add stack operators to a content stream to ensure it is composeable. On -fast, we don't check for Q deficit, assuming PDF is ISO. *) let protect fast pdf resources content = let deficit = if fast then 0 else let ops = Pdfops.parse_operators pdf resources content in let qs = length (keep (eq Pdfops.Op_q) ops) in let bigqs = length (keep (eq Pdfops.Op_Q) ops) in let deficit = if qs > bigqs then qs - bigqs else 0 in if deficit <> 0 then Pdfe.log (Printf.sprintf "Q Deficit was nonzero. Fixing. %i\n" deficit); deficit in let addstream ops = Pdf.addobj pdf (Pdfops.stream_of_ops ops) in let q = addstream [Pdfops.Op_q] in let qs = addstream (many Pdfops.Op_Q deficit @ [Pdfops.Op_Q]) in [Pdf.Indirect q] @ content @ [Pdf.Indirect qs] (* Does the page have a defined box e.g "/CropBox" *) let hasbox pdf page boxname = let pages = Pdfpage.pages_of_pagetree pdf in if page > length pages || page < 1 then raise (Failure "hasbox: bad page") else let p = select page pages in match Pdf.lookup_direct pdf boxname p.Pdfpage.rest with | Some _ -> true | _ -> false (* Flip pages *) let flip_page ?(fast=false) transform_op pdf pnum page = let minx, miny, maxx, maxy = Pdf.parse_rectangle pdf page.Pdfpage.mediabox in let tr = transform_op minx miny maxx maxy in let page = change_pattern_matrices_page pdf tr page in Pdfannot.transform_annotations pdf tr page.Pdfpage.rest; (Pdfpage.prepend_operators pdf [Pdfops.Op_cm tr] ~fast page, pnum, tr) let vflip_pdf ?(fast=false) pdf range = let transform_op _ miny _ maxy = Pdftransform.matrix_of_op (Pdftransform.Scale ((0., ((miny +. maxy) /. 2.)), 1., -.1.)) in process_pages (flip_page ~fast transform_op pdf) pdf range let hflip_pdf ?(fast=false) pdf range = let transform_op minx _ maxx _ = Pdftransform.matrix_of_op (Pdftransform.Scale (((minx +. maxx) /. 2., 0.), -.1., 1.)) in process_pages (flip_page ~fast transform_op pdf) pdf range let stamp_shift_of_position topline midline sw sh w h p = let half x = x /. 2. and dy = if midline then sh /. 2. else if topline then sh else 0. in let open Cpdfposition in match p with | PosCentre (ox, oy) -> ox -. half sw, oy -. dy | PosLeft (ox, oy) -> ox, oy -. dy | PosRight (ox, oy) -> ox -. sw, oy -. dy | Top o -> half w -. half sw, h -. o -. sh -. dy | TopLeft (a, b) -> a, h -. sh -. b -. dy | TopRight (a, b) -> w -. sw -. a, h -. sh -. b -. dy | Left o -> o, half h -. half sh -. dy | BottomLeft (a, b) -> a, b -. dy | Bottom o -> half w -. half sw, o -. dy | BottomRight (a, b) -> w -. sw -. a, b -. dy | Right o -> w -. sw -. o, half h -. half sh -. dy | Diagonal | ReverseDiagonal | Centre -> half w -. half sw, half h -. half sh -. dy (* Combine Pdfpage.rest items for two PDFs. For now, we combine /Annots, and * copy everything else from adict. What else should we combine? *) let combine_page_items pdf adict bdict = let getannots dict = begin match dict with Pdf.Dictionary d -> begin match lookup "/Annots" d with Some (Pdf.Array items) -> items | _ -> [] end | _ -> [] end in let a_annots = getannots adict in let b_annots = getannots bdict in match a_annots @ b_annots with [] -> adict | annots -> Pdf.add_dict_entry adict "/Annots" (Pdf.Array annots) let do_stamp relative_to_cropbox fast position topline midline scale_to_fit isover pdf o u opdf = (* Scale page stamp o to fit page u *) let sxmin, symin, sxmax, symax = Pdf.parse_rectangle pdf (match Pdf.lookup_direct pdf "/CropBox" o.Pdfpage.rest with | Some r -> r | None -> o.Pdfpage.mediabox) in let txmin, tymin, txmax, tymax = Pdf.parse_rectangle pdf (match Pdf.lookup_direct pdf "/CropBox" u.Pdfpage.rest with | Some r -> r | None -> u.Pdfpage.mediabox) in let o = if scale_to_fit then let xmag = (txmax -. txmin) /. (sxmax -. sxmin) in let ymag = (tymax -. tymin) /. (symax -. symin) in let scale = if xmag < 0.999 && ymag < 0.999 then if xmag > ymag then xmag else ymag else if xmag >= 1.001 && ymag >= 1.001 then if xmag > ymag then ymag else xmag else if xmag >= 1.001 then ymag else xmag in let dx = txmin +. ((txmax -. txmin) -. (sxmax -. sxmin) *. scale) /. 2. in let dy = tymin +. ((tymax -. tymin) -. (symax -. symin) *. scale) /. 2. in let matrix = (Pdftransform.matrix_of_transform ([Pdftransform.Translate (dx, dy)] @ (if relative_to_cropbox then [Pdftransform.Translate (txmin, tymin)] else []) @ [Pdftransform.Scale ((sxmin, symin), scale, scale)])) in Pdfannot.transform_annotations pdf matrix o.Pdfpage.rest; let r = Pdfpage.prepend_operators pdf [Pdfops.Op_cm matrix] ~fast o in change_pattern_matrices_page pdf matrix r else let sw = sxmax -. sxmin and sh = symax -. symin and w = txmax -. txmin and h = tymax -. tymin in let dx, dy = stamp_shift_of_position topline midline sw sh w h position in let matrix = (Pdftransform.matrix_of_transform ((if relative_to_cropbox then [Pdftransform.Translate (txmin, tymin)] else []) @ [Pdftransform.Translate (dx, dy)])) in Pdfannot.transform_annotations pdf matrix o.Pdfpage.rest; let r = Pdfpage.prepend_operators pdf [Pdfops.Op_cm matrix] ~fast o in change_pattern_matrices_page pdf matrix r in {u with Pdfpage.content = (if isover then ( @ ) else ( @@ )) (protect fast pdf u.Pdfpage.resources u.Pdfpage.content) (protect fast pdf o.Pdfpage.resources o.Pdfpage.content); Pdfpage.rest = combine_page_items pdf u.Pdfpage.rest o.Pdfpage.rest; Pdfpage.resources = Pdfpage.combine_pdf_resources pdf u.Pdfpage.resources o.Pdfpage.resources} let remove_struct_tree pdf = Cpdfutil.remove_dict_entry pdf "/StructTreeRoot" None; Cpdfutil.remove_dict_entry pdf "/StructParent" None; Cpdfutil.remove_dict_entry pdf "/StructParents" None; let remove_struct_tree_ops pdf resources content = let operators = Pdfops.parse_operators pdf resources content in (* In fact, we remove all marked content regions. Acceptable in the circumstances. *) let remove_mcids = lose (function | Pdfops.Op_MP _ | Pdfops.Op_DP _ | Pdfops.Op_BMC _ | Pdfops.Op_BDC _ | Pdfops.Op_EMC -> true | _ -> false) in let operators' = remove_mcids operators in [Pdfops.stream_of_ops operators'] in let remove_struct_tree_page _ page = let content' = remove_struct_tree_ops pdf page.Pdfpage.resources page.Pdfpage.content in Pdfpage.process_xobjects pdf page remove_struct_tree_ops; {page with Pdfpage.content = content'} in process_pages (Pdfpage.ppstub remove_struct_tree_page) pdf (ilist 1 (Pdfpage.endpage pdf)) let mark_all_as_artifact pdf = let mark_all_as_artifact_ops pdf resources content = let operators = Pdfops.parse_operators pdf resources content in let operators' = [Pdfops.Op_BMC "/Artifact"] @ operators @ [Pdfops.Op_EMC] in [Pdfops.stream_of_ops operators'] in let remove_struct_tree_page _ page = let content' = mark_all_as_artifact_ops pdf page.Pdfpage.resources page.Pdfpage.content in Pdfpage.process_xobjects pdf page mark_all_as_artifact_ops; {page with Pdfpage.content = content'} in process_pages (Pdfpage.ppstub remove_struct_tree_page) pdf (ilist 1 (Pdfpage.endpage pdf)) let stamp ~process_struct_tree relative_to_cropbox position topline midline fast scale_to_fit isover range over pdf = let over = if process_struct_tree then mark_all_as_artifact (remove_struct_tree over) else over in let prefix = Pdfpage.shortest_unused_prefix pdf in Pdfpage.add_prefix over prefix; let marks = Pdfmarks.read_bookmarks ~preserve_actions:true pdf in let marks_refnumbers = Pdf.page_reference_numbers pdf in let pdf = Pdfmarks.remove_bookmarks pdf in let over = Pdfmarks.remove_bookmarks over in let pageseqs = ilist 1 (Pdfpage.endpage pdf) in let over_firstpage_pdf = match Pdfpage.pages_of_pagetree over with | [] -> error "empty PDF" | h::_ -> Pdfpage.change_pages ~changes:[(1, 1)] true over [h] in let merged = Pdfmerge.merge_pdfs false false ["a"; "b"] [pdf; over_firstpage_pdf] [pageseqs; [1]] in let merged = {merged with Pdf.saved_encryption = pdf.Pdf.saved_encryption} in let merged = Cpdfmetadata.copy_id true pdf merged in let merged_pages = Pdfpage.pages_of_pagetree merged in let under_pages, over_page = all_but_last merged_pages, last merged_pages in let new_pages = map2 (fun pageseq under_page -> do_stamp relative_to_cropbox fast position topline midline scale_to_fit isover merged (if mem pageseq range then over_page else Pdfpage.blankpage Pdfpaper.a4) under_page over) pageseqs under_pages in let changed = let changes = map (fun x -> (x, x)) (ilist 1 (length new_pages)) in Pdfpage.change_pages ~changes true merged new_pages in let new_refnumbers = Pdf.page_reference_numbers changed in let changetable = hashtable_of_dictionary (combine marks_refnumbers new_refnumbers) in let new_marks = map (Cpdfbookmarks.change_bookmark changetable) marks in Pdfmarks.add_bookmarks new_marks changed (* Combine pages from two PDFs. *) (* If [over] has more pages than [under], chop the excess. If the converse, pad [over] to the same length *) let equalize_pages under over = let length_under = Pdfpage.endpage under in let length_over = Pdfpage.endpage over in if length_over > length_under then let changes = map (fun x -> (x, x)) (ilist 1 length_under) in (under, (Pdfpage.change_pages ~changes true over (take (Pdfpage.pages_of_pagetree over) length_under))) else if length_under > length_over then let changes = map (fun x -> (x, x)) (ilist 1 length_over) in (under, Pdfpage.change_pages ~changes true over (Pdfpage.pages_of_pagetree over @ (many (Pdfpage.blankpage Pdfpaper.a4) (length_under - length_over)))) else under, over let combine_pages ~process_struct_tree fast under over scaletofit over_is_under = let over = if process_struct_tree then mark_all_as_artifact (remove_struct_tree over) else over in let debug_combine_pages = false in let debug_pdf pdf n = if debug_combine_pages then begin Pdf.remove_unreferenced pdf; Pdfwrite.pdf_to_file pdf n end in Pdfpage.add_prefix over (Pdfpage.shortest_unused_prefix under); let marks_under, marks_over = Pdfmarks.read_bookmarks ~preserve_actions:true under, Pdfmarks.read_bookmarks ~preserve_actions:true over in let under, over = equalize_pages under over in let under_length, over_length = Pdfpage.endpage under, Pdfpage.endpage over in if under_length <> over_length then raise (Pdf.PDFError "combine_pages: not of equal length") else let pageseqs_under = ilist 1 (Pdfpage.endpage under) in let pageseqs_over = ilist 1 (Pdfpage.endpage over) in let merged = Pdfmerge.merge_pdfs false false ["a"; "b"] [under; over] [pageseqs_under; pageseqs_over] in debug_pdf merged "merged.pdf"; let under_pages, over_pages = cleave (Pdfpage.pages_of_pagetree merged) under_length in let new_pages = map2 (fun o u -> do_stamp false fast (BottomLeft (0., 0.)) false false scaletofit (not over_is_under) merged o u over) over_pages under_pages in (* Build the changes. 123456 -> 123123 *) let changes = let len = length new_pages in combine (ilist 1 (len * 2)) (let x = ilist 1 len in x @ x) in let changed = Pdfpage.change_pages ~changes true merged new_pages in let r = Pdfmarks.add_bookmarks (marks_under @ marks_over) changed in debug_pdf r "final.pdf"; r (* Just used by cpdflib for historical reasons *) let setBox box minx maxx miny maxy pdf range = let set_box_page _ page = {page with Pdfpage.rest = Pdf.add_dict_entry page.Pdfpage.rest box (Pdf.Array [Pdf.Real minx; Pdf.Real miny; Pdf.Real maxx; Pdf.Real maxy])} in process_pages (Pdfpage.ppstub set_box_page) pdf range (* Add rectangles on top of pages to show Media, Crop, Art, Trim, Bleed boxes. * * We use different dash lengths and colours to help distinguish coincident * boxes The sequence of operators is postpended to the page content, * appropriately protected to prevent pollution of matrices. * * /MediaBox: Solid red line * /CropBox: Dashed 7 on 7 off green line * /ArtBox: Dashed 5 on 5 off blue line * /TrimBox: Dashed 3 on 3 off orange line * /BleedBox: Dashed 2 on 2 off pink line *) let get_rectangle pdf page box = if box = "/MediaBox" then match page.Pdfpage.mediabox with Pdf.Array [a; b; c; d] as r -> Some (Pdf.parse_rectangle pdf r) | _ -> None else match Pdf.lookup_direct pdf box page.Pdfpage.rest with Some (Pdf.Array [a; b; c; d] as r) -> Some (Pdf.parse_rectangle pdf r) | _ -> None let show_boxes_page fast pdf _ page = let make_ops (r, g, b) on off boxname = match get_rectangle pdf page boxname with Some (r1, r2, r3, r4) -> [Pdfops.Op_q; Pdfops.Op_RG (r /. 255., g /. 255., b /. 255.); Pdfops.Op_w 1.; Pdfops.Op_d ((if on = 0. && off = 0. then [] else [on; off]), 0.); Pdfops.Op_re (r1, r2, r3 -. r1, r4 -. r2); Pdfops.Op_S; Pdfops.Op_Q] | None -> [] in let ops = [Pdfops.begin_artifact] @ make_ops (255., 0., 0.) 0. 0. "/MediaBox" @ make_ops (0., 255., 0.) 7. 7. "/CropBox" @ make_ops (0., 0., 255.) 5. 5. "/ArtBox" @ make_ops (255.,150.,0.) 3. 3. "/TrimBox" @ make_ops (255.,9.,147.) 2. 2. "/BleedBox" @ [Pdfops.end_artifact] in Pdfpage.postpend_operators pdf ops ~fast page let show_boxes ?(fast=false) pdf range = process_pages (Pdfpage.ppstub (show_boxes_page fast pdf)) pdf range let allowance = 9. let line (x0, y0, x1, y1) = [Pdfops.Op_m (x0, y0); Pdfops.Op_l (x1, y1); Pdfops.Op_s] let trim_marks_page fast pdf n page = match get_rectangle pdf page "/TrimBox", get_rectangle pdf page "/MediaBox" with | Some (tminx, tminy, tmaxx, tmaxy), Some (minx, miny, maxx, maxy) -> let ops = [Pdfops.Op_q; Pdfops.Op_K (1., 1., 1., 1.); Pdfops.Op_w 1.] @ [Pdfops.begin_artifact] @ line (minx, tmaxy, tminy -. allowance, tmaxy) (* top left *) @ line (tminx, tmaxy +. allowance, tminx, maxy) @ line (tmaxx +. allowance, tmaxy, maxx, tmaxy) (* top right *) @ line (tmaxx, tmaxy +. allowance, tmaxx, maxy) @ line (tmaxx +. allowance, tminy, maxx, tminy) (* bottom right *) @ line (tmaxx, tminy -. allowance, tmaxx, miny) @ line (tminx -. allowance, tminy, minx, tminy) (* bottom left *) @ line (tminx, tminy -. allowance, tminx, miny) @ [Pdfops.end_artifact] @ [Pdfops.Op_Q] in Pdfpage.postpend_operators pdf ops ~fast page | _, _ -> (*Pdfe.log (Printf.sprintf "warning: no /TrimBox found on page %i\n" n);*) page let trim_marks ?(fast=false) pdf range = process_pages (Pdfpage.ppstub (trim_marks_page fast pdf)) pdf range (* copy the contents of the box f to the box t. If mediabox_if_missing is set, the contents of the mediabox will be used if the from fox is not available. If mediabox_is_missing is false, the page is unaltered. *) let copy_box f t mediabox_if_missing pdf range = process_pages (Pdfpage.ppstub (fun _ page -> if f = "/MediaBox" then {page with Pdfpage.rest = (Pdf.add_dict_entry page.Pdfpage.rest t (page.Pdfpage.mediabox))} else match Pdf.lookup_direct pdf f page.Pdfpage.rest with | Some pdfobject -> if t = "/MediaBox" then {page with Pdfpage.mediabox = Pdf.direct pdf pdfobject} else {page with Pdfpage.rest = (Pdf.add_dict_entry page.Pdfpage.rest t (Pdf.direct pdf pdfobject))} | None -> if mediabox_if_missing then {page with Pdfpage.rest = Pdf.add_dict_entry page.Pdfpage.rest t page.Pdfpage.mediabox} else page)) pdf range let redact ~process_struct_tree pdf range = let pdf = process_pages (Pdfpage.ppstub (fun pnum page -> if mem pnum range then {page with Pdfpage.content = []; Pdfpage.resources = Pdf.Dictionary []; Pdfpage.rest = Pdf.remove_dict_entry page.Pdfpage.rest "/Annots"} else page)) pdf range in if process_struct_tree then Pdfst.trim_structure_tree pdf (Cpdfpagespec.invert_range (Pdfpage.endpage pdf) range); pdf cpdf-2.8.1/cpdfpagespec.ml0000664000175000017500000002434314771516640014115 0ustar johnjohnopen Pdfutil (* Raised when syntax is ok, but endpage is too low. Caught by validator. Caught and reraised as normal failure by parse_pagespec. *) exception PageSpecUnknownPage of int (* There would be no pages *) exception PageSpecWouldBeNoPages (* Raised when syntax is wrong. Caught and reraised by parse_pagespec and validator. *) exception PageSpecBadSyntax (* Parsing range specifications *) let rec splitat_commas toks = match cleavewhile (neq (Pdfgenlex.LexName ",")) toks with | [], [] -> [] | [], _ -> raise PageSpecBadSyntax | some, [] -> [some] | _::_ as before, _::rest -> before::splitat_commas rest let is_dimension pdf comparison {Pdfpage.mediabox = box} = let minx, miny, maxx, maxy = Pdf.parse_rectangle pdf box in comparison (maxx -. minx) (maxy -. miny) let select_dimensions comparison pdf candidates = let pages = Pdfpage.pages_of_pagetree pdf in let pagenums, kept_pages = split (option_map (fun (index, page) -> if mem index candidates then Some (index, page) else None) (combine (indx pages) pages)) in option_map2 (fun pagenum page -> if is_dimension pdf comparison page then Some pagenum else None) pagenums kept_pages let select_portrait = select_dimensions ( < ) let select_landscape = select_dimensions ( > ) let rec mk_numbers pdf endpage lexemes = match lexemes with | [Pdfgenlex.LexInt n] -> [n] | [Pdfgenlex.LexName "end"] -> [endpage] | [Pdfgenlex.LexInt n; Pdfgenlex.LexName "-"; Pdfgenlex.LexInt n'] -> if n > n' then rev (ilist n' n) else ilist n n' | [Pdfgenlex.LexName "end"; Pdfgenlex.LexName "-"; Pdfgenlex.LexInt n] -> if n <= endpage then rev (ilist n endpage) else raise (PageSpecUnknownPage n) | [Pdfgenlex.LexInt n; Pdfgenlex.LexName "-"; Pdfgenlex.LexName "end"] -> if n <= endpage then ilist n endpage else raise (PageSpecUnknownPage n) | [Pdfgenlex.LexName "end"; Pdfgenlex.LexName "-"; Pdfgenlex.LexName "end"] -> [endpage] | [Pdfgenlex.LexName "even"] -> drop_odds (ilist 1 endpage) | [Pdfgenlex.LexName "portrait"] -> select_portrait pdf (ilist 1 endpage) | [Pdfgenlex.LexName "landscape"] -> select_landscape pdf (ilist 1 endpage) | [Pdfgenlex.LexName "odd"] -> really_drop_evens (ilist 1 endpage) | [Pdfgenlex.LexName "all"] -> ilist 1 endpage | [Pdfgenlex.LexName "reverse"] -> rev (ilist 1 endpage) | toks -> let ranges = splitat_commas toks in if ranges = [toks] then raise PageSpecBadSyntax else flatten (map (mk_numbers pdf endpage) ranges) (* Space dashes and commas *) let rec add_spaces = function | [] -> [] | ('-' | ',') as h::t -> ' '::h::' '::add_spaces t | h::t -> h::add_spaces t let space_string s = implode (add_spaces (explode s)) let fixup_negatives endpage = function | Pdfgenlex.LexName s when String.length s > 1 && s.[0] = '~' -> Pdfgenlex.LexInt (endpage + 1 + ~-(int_of_string (implode (tl (explode s))))) | x -> x let invert_range endpage r = option_map (fun p -> if mem p r then None else Some p) (ilist 1 endpage) let duplicate_range n r = flatten (map (fun x -> many x n) r) (* e.g [1] -> 1, [iii] -> x, [/]] -> ] etc. *) let resolve_pagelabels pdf spec = let labels = let labs = Pdfpagelabels.read pdf in map (fun pnum -> (begin try Pdfpagelabels.pagelabeltext_of_pagenumber pnum labs with Not_found -> "" end, pnum)) (ilist 1 (Pdfpage.endpage pdf)) in (*iter (fun (s, l) -> Printf.printf "%s = %i\n" s l) labels;*) let rec readuntilclose a t = match t with | ']'::t -> rev a, t | '\\'::('[' | ']' as c)::t -> readuntilclose (c::a) t | '['::t -> raise PageSpecBadSyntax | x::t -> readuntilclose (x::a) t | [] -> rev a, [] in let rec resolve_pagelabels_inner = function | '['::t -> let pagelabel, rest = readuntilclose [] t in let resolved = explode (string_of_int (begin match lookup (implode pagelabel) labels with Some x -> x | None -> raise PageSpecBadSyntax end)) in resolved @ resolve_pagelabels_inner rest | '\\'::('[' | ']' as c)::t -> c::resolve_pagelabels_inner t | ']'::t -> raise PageSpecBadSyntax | h::t -> h::resolve_pagelabels_inner t | [] -> [] in resolve_pagelabels_inner spec let rec parse_pagespec_inner endpage pdf spec = let spec = if spec = "" then "all" else spec in let spec = implode (resolve_pagelabels pdf (explode spec)) in let spec = space_string spec in if endpage < 1 then raise (Pdf.PDFError "This PDF file has no pages and is therefore malformed") else let numbers = try match explode spec with | 'N'::'O'::'T'::r -> invert_range endpage (parse_pagespec_inner endpage pdf (implode r)) | x::'D'::'U'::'P'::r -> duplicate_range (int_of_string (implode [x])) (parse_pagespec_inner endpage pdf (implode r)) | x::y::'D'::'U'::'P'::r -> duplicate_range (int_of_string (implode [x; y])) (parse_pagespec_inner endpage pdf (implode r)) | x::y::z::'D'::'U'::'P'::r -> duplicate_range (int_of_string (implode [x; y; z])) (parse_pagespec_inner endpage pdf (implode r)) | x::y::z::a::'D'::'U'::'P'::r -> duplicate_range (int_of_string (implode [x; y; z; a])) (parse_pagespec_inner endpage pdf (implode r)) | x::y::z::a::b::'D'::'U'::'P'::r -> duplicate_range (int_of_string (implode [x; y; z; a; b])) (parse_pagespec_inner endpage pdf (implode r)) | x::y::z::a::b::c::'D'::'U'::'P'::r -> duplicate_range (int_of_string (implode [x; y; z; a; b; c])) (parse_pagespec_inner endpage pdf (implode r)) | _ -> match rev (explode spec) with | ['n'; 'e'; 'v'; 'e'] -> keep even (ilist 1 endpage) | ['d'; 'd'; 'o'] -> keep odd (ilist 1 endpage) | ['t'; 'i'; 'a'; 'r'; 't'; 'r'; 'o'; 'p'] -> select_portrait pdf (ilist 1 endpage) | ['e'; 'p'; 'a'; 'c'; 's'; 'd'; 'n'; 'a'; 'l'] -> select_landscape pdf (ilist 1 endpage) | 't'::'i'::'a'::'r'::'t'::'r'::'o'::'p'::more -> select_portrait pdf (mk_numbers pdf endpage (map (fixup_negatives endpage) (Pdfgenlex.lex_string (implode (rev more))))) | 'e'::'p'::'a'::'c'::'s'::'d'::'n'::'a'::'l'::more -> select_landscape pdf (mk_numbers pdf endpage (map (fixup_negatives endpage) (Pdfgenlex.lex_string (implode (rev more))))) | 'd'::'d'::'o'::more -> keep odd (mk_numbers pdf endpage (map (fixup_negatives endpage) (Pdfgenlex.lex_string (implode (rev more))))) | 'n'::'e'::'v'::'e'::more -> keep even (mk_numbers pdf endpage (map (fixup_negatives endpage) (Pdfgenlex.lex_string (implode (rev more))))) | _ -> mk_numbers pdf endpage (map (fixup_negatives endpage) (Pdfgenlex.lex_string spec)) with e -> raise PageSpecBadSyntax in if numbers = [] then raise PageSpecWouldBeNoPages else iter (fun n -> if n <= 0 || n > endpage then raise (PageSpecUnknownPage n)) numbers; numbers let parse_pagespec pdf spec = try parse_pagespec_inner (Pdfpage.endpage pdf) pdf spec with | PageSpecUnknownPage n -> raise (Pdf.PDFError ("Page " ^ string_of_int n ^ " does not exist.")) | PageSpecWouldBeNoPages -> raise (Pdf.PDFError ("Page range specifies no pages")) | e -> raise (Pdf.PDFError ("Bad page specification " ^ spec ^ ". Raw error was " ^ Printexc.to_string e ^ ". Last page was " ^ string_of_int (Pdfpage.endpage pdf))) (* To validate a pagespec as being syntactically correct without the PDF in question. This is nasty, since the parser above includes checking based on the endpage of the PDF (which we don't have). Pass 100 as the endpage, doubling on page range exception, bailng out above 500000. *) let rec validate_pagespec_inner n spec = try ignore (parse_pagespec_inner n (Pdfpage.minimum_valid_pdf ()) spec); true with | PageSpecUnknownPage _ -> if n < 500000 then validate_pagespec_inner (n * 2) spec else false | PageSpecBadSyntax | _ -> false let validate_pagespec spec = validate_pagespec_inner 100 spec let rec parse_pagespec_without_pdf_inner n spec = try parse_pagespec_inner n (Pdfpage.minimum_valid_pdf ()) spec with PageSpecUnknownPage _ -> if n < 500000 then parse_pagespec_without_pdf_inner (n * 2) spec else raise (Pdf.PDFError "PageSpecUnknownPage") let parse_pagespec_without_pdf spec = parse_pagespec_without_pdf_inner 100 spec (* Convert an integer list representing a set to a page specification, in order. *) let string_of_pagespec pdf = function | [] -> "" | is -> let iseven len is = drop_odds (ilist 1 len) = is in let isodd len is = really_drop_evens (ilist 1 len) = is in let isall len is = ilist 1 len = is in let is = sort compare is in let len = Pdfpage.endpage pdf in let rec mkranges prev = function | [] -> map extremes (rev (map rev prev)) | h::t -> match prev with | (ph::pht)::pt when h = ph + 1 -> mkranges ((h::ph::pht)::pt) t | (_::_)::_ -> mkranges ([h]::prev) t | []::_ -> assert false | [] -> mkranges [[h]] t in if iseven len is && len > 3 then "even" else if isodd len is && len > 2 then "odd" else if isall len is then "all" else let ranges = mkranges [] is in let rangestrings = map (function (s, e) -> if s = e then string_of_int s else string_of_int s ^ "-" ^ string_of_int e) ranges in fold_left ( ^ ) "" (interleave "," rangestrings) (*let string_of_range r = fold_left (fun a b -> a ^ " " ^ b) "" (map string_of_int r)*) cpdf-2.8.1/cpdfmetadata.mli0000664000175000017500000000765014771516640014261 0ustar johnjohn(** Metadata *) (** {2 Types and Exceptions} *) (** Possible output encodings for some function. [Raw] does no processing at all - the PDF string is output as-is. [UTF8] converts loslessly to UTF8. [Stripped] extracts the unicode codepoints and returns only those which correspond to 7 bit ASCII. *) type encoding = Raw | UTF8 | Stripped (** Encode a string using a given encoding. *) val encode_output : encoding -> string -> string (** {2 Metadata and settings} *) (** [copy_id keepversion copyfrom copyto] copies the ID, if any, from [copyfrom] to [copyto]. If [keepversion] is true, the PDF version of [copyto] won't be affected. *) val copy_id : bool -> Pdf.t -> Pdf.t -> Pdf.t (** [set_pdf_info (key, value, version)] sets the entry [key] in the /Info directory, updating the PDF minor version to [version].*) val set_pdf_info : ?xmp_also:bool -> ?xmp_just_set:bool -> (string * Pdf.pdfobject * int) -> Pdf.t -> Pdf.t (** Get XMP information for a given key. *) val get_xmp_info : Pdf.t -> string -> string (** [set_pdf_info (key, value, version)] sets the entry [key] in the /ViewerPreferences directory, updating the PDF minor version to [version].*) val set_viewer_preference : (string * Pdf.pdfobject * int) -> Pdf.t -> Pdf.t (** Set the page layout to the given name (sans slash) e.g SinglePage *) val set_page_layout : Pdf.t -> string -> Pdf.t (** Set the page mode to the given name (sans slash) e.g UseThumbs *) val set_page_mode : Pdf.t -> string -> Pdf.t (** Set the non full screen page mode to the given name (sans slash) e.g UseThumbs *) val set_non_full_screen_page_mode : Pdf.t -> string -> Pdf.t (** Set the open action. If the boolean is true, /Fit will be used, otherwise /XYZ *) val set_open_action : Pdf.t -> ?dest:string -> bool -> int -> Pdf.t (** Set the PDF version number *) val set_version : int -> Pdf.t -> unit (** Given a PDF, returns a function which can lookup a given dictionary entry from the /Info dictionary, returning it as a UTF8 string *) val get_info_utf8 : Pdf.t -> string -> string (** Output to standard output general information about a PDF. *) val output_info : ?json:(string * Cpdfyojson.Safe.t) list ref -> encoding -> Pdfunits.t -> Pdf.t -> unit (** Output to standard output information from any XMP metadata stream in a PDF. *) val output_xmp_info : ?json:(string * Cpdfyojson.Safe.t) list ref -> encoding -> Pdfunits.t -> Pdf.t -> unit (** Create XMP metadata from scratch *) val create_metadata : Pdf.t -> Pdf.t (** {2 XML Metadata} *) (** [set_metadata keepversion filename pdf] sets the XML metadata of a PDF to the contents of [filename]. If [keepversion] is true, the PDF version will not be altered. *) val set_metadata : bool -> string -> Pdf.t -> Pdf.t (** The same, but the content comes from [bytes]. *) val set_metadata_from_bytes : bool -> Pdfio.bytes -> Pdf.t -> Pdf.t (** Remove the metadata from a file *) val remove_metadata : Pdf.t -> Pdf.t (** Extract metadata to a [Pdfio.bytes] *) val get_metadata : Pdf.t -> Pdfio.bytes option (** Print metadate to stdout *) val print_metadata : Pdf.t -> unit (** Set the metadata date *) val set_metadata_date : Pdf.t -> string -> Pdf.t (** Expands the date ["now"] to the date now. Leaves any other string alone. *) val expand_date : string -> string (**/**) val get_catalog_item : string -> Pdf.t -> string val get_viewer_pref_item : string -> Pdf.t -> string val determine_subformats : Pdf.t -> string list val language : Pdf.t -> string option val set_language : Pdf.t -> string -> unit val adobe : string val xmp : string val dc : string val rdf : string val pdfaid : string val pdfxid : string val pdfe : string val pdfuaid : string val pdfvtid : string type xmltree = E of Cpdfxmlm.tag * xmltree list | D of string val xmltree_of_bytes : Pdfio.bytes -> Cpdfxmlm.dtd * xmltree val get_data_for : string -> string -> xmltree -> string option val string_of_xmltree : xmltree -> string val bytes_of_xmltree : Cpdfxmlm.dtd * xmltree -> Pdfio.bytes cpdf-2.8.1/cpdfshape.mli0000664000175000017500000000227114771516640013573 0ustar johnjohn(** Basic Shapes *) type fpoint = float * float type winding_rule = EvenOdd | NonZero type segment = | Straight of fpoint * fpoint | Bezier of fpoint * fpoint * fpoint * fpoint (* Each segment list may be marked as a hole or not. *) type hole = Hole | Not_hole (* A [subpath] is either closed or open. *) type closure = Closed | Open (* A [subpath] is the pair of a hole and a list of segments. *) type subpath = hole * closure * segment list (* A path is made from a number of subpaths. *) type path = winding_rule * subpath list (** The factor by which the radius of a circle is multiplied to find the length of the bezier control lines when approximating quarter arcs to make circles. *) val kappa : float (** Calling [restrict_angle s a] restricts an angle [a] to one of those at [s, 2s, 3s...] returning the chosen one. *) val restrict_angle : float -> float -> float (** Calling [circle x y r] builds a path representing a circle at [(x, y)] with radius [r]. *) val circle : float -> float -> float -> path (** Calling [rectangle x y w h] builds a path representing a rectangle with top left [(x, y)], width [w] and height [h]. *) val rectangle : float -> float -> float -> float -> path cpdf-2.8.1/cpdfutil.mli0000664000175000017500000000037214771516640013450 0ustar johnjohn(** Utilities *) (** Remove a dictionary entry. *) val remove_dict_entry : Pdf.t -> string -> Pdf.pdfobject option -> unit (** Replace a dictionary entry. *) val replace_dict_entry : Pdf.t -> string -> Pdf.pdfobject -> Pdf.pdfobject option -> unit cpdf-2.8.1/cpdfocg.ml0000664000175000017500000001364314771516640013077 0ustar johnjohnopen Pdfutil (* 1. Get list of indirects of all OCGs from the /OCProperties, and their textual names * 2. Calculate a change list to coalesce them * 3. Remove any changed ones from the /OCGs and /Order and /ON and /OFF in /OCProperties * 4. Do the changes to all indirect references in the whole pdf *) (*FIXME Pre-existing nulls - what to do? *) let ocg_coalesce pdf = match Pdf.lookup_direct pdf "/OCProperties" (Pdf.catalog_of_pdf pdf) with None -> () | Some ocpdict -> let number_name_pairs = match Pdf.lookup_direct pdf "/OCGs" ocpdict with Some (Pdf.Array ocgs) -> begin let numbers = map (function Pdf.Indirect i -> i | _ -> failwith "Malformed /OCG entry") ocgs in let names = map (fun i -> try begin match Pdf.lookup_obj pdf i with Pdf.Dictionary d -> begin match Pdf.lookup_direct pdf "/Name" (Pdf.Dictionary d) with Some (Pdf.String s) -> s | _ -> failwith "ocg: missing name" end | _ -> failwith "ocg: not a dictionary" end with _ -> failwith "OCG object missing") numbers in combine numbers names end | _ -> failwith "Malformed or missing /OCGs" in (*iter (fun (num, name) -> Printf.printf "%i = %s\n" num name) number_name_pairs;*) let changes = let cf (_, name) (_, name') = compare name name' in let sets = collate cf (List.stable_sort cf number_name_pairs) in flatten (option_map (function [] -> None | (hnum, _)::t -> Some (map (function (tnum, _) -> (tnum, hnum)) t)) sets) in (*Printf.printf "\nChanges are:\n"; List.iter (fun (f, t) -> Printf.printf "%i -> %i\n" f t) changes;*) let new_ocproperties = let remove_from_array key nums dict = match Pdf.lookup_direct pdf key dict with | Some (Pdf.Array elts) -> let elts' = option_map (function Pdf.Indirect i -> if mem i nums then None else Some (Pdf.Indirect i) | _ -> None) elts in Pdf.add_dict_entry dict key (Pdf.Array elts') | _ -> dict in let remove_from_array_inside_d key nums dict = match Pdf.lookup_direct pdf "/D" dict with | Some (Pdf.Dictionary ddict) -> begin match Pdf.lookup_direct pdf key (Pdf.Dictionary ddict) with | Some (Pdf.Array elts) -> let elts' = option_map (function Pdf.Indirect i -> if mem i nums then None else Some (Pdf.Indirect i) | _ -> None) elts in Pdf.add_dict_entry dict "/D" (Pdf.add_dict_entry (Pdf.Dictionary ddict) key (Pdf.Array elts')) | _ -> dict end | _ -> failwith "No /D dict in OCGProperties" in let nums = map fst changes in (*Printf.printf "\nto remove:\n"; List.iter (Printf.printf "%i ") nums;*) remove_from_array "/OCGs" nums (remove_from_array_inside_d "/ON" nums (remove_from_array_inside_d "/OFF" nums (remove_from_array_inside_d "/Order" nums ocpdict))) in (*flprint (Pdfwrite.string_of_pdf new_ocproperties);*) let ocp_objnum = Pdf.addobj pdf new_ocproperties in let new_catalog = Pdf.addobj pdf (Pdf.add_dict_entry (Pdf.catalog_of_pdf pdf) "/OCProperties" (Pdf.Indirect ocp_objnum)) in pdf.Pdf.trailerdict <- Pdf.add_dict_entry pdf.Pdf.trailerdict "/Root" (Pdf.Indirect new_catalog); pdf.Pdf.root <- new_catalog; Pdf.objselfmap (Pdf.renumber_object_parsed pdf (hashtable_of_dictionary changes)) pdf let ocg_get_list pdf = let l = ref [] in begin match Pdf.lookup_direct pdf "/OCProperties" (Pdf.catalog_of_pdf pdf) with None -> () | Some ocpdict -> match Pdf.lookup_direct pdf "/OCGs" ocpdict with Some (Pdf.Array elts) -> iter (function Pdf.Indirect i -> (match Pdf.lookup_direct pdf "/Name" (Pdf.lookup_obj pdf i) with Some (Pdf.String s) -> l := s::!l | _ -> ()) | _ -> ()) elts | _ -> () end; rev !l let ocg_list pdf = List.iter (Printf.printf "%s\n") (map Pdftext.utf8_of_pdfdocstring (ocg_get_list pdf)) let ocg_rename f t pdf = Pdf.objselfmap (function Pdf.Dictionary d -> begin match Pdf.lookup_direct pdf "/Type" (Pdf.Dictionary d) with Some (Pdf.Name "/OCG") -> begin match Pdf.lookup_direct pdf "/Name" (Pdf.Dictionary d) with Some (Pdf.String s) when s = f -> Pdf.add_dict_entry (Pdf.Dictionary d) "/Name" (Pdf.String t) | _ -> Pdf.Dictionary d end | _ -> Pdf.Dictionary d end | x -> x ) pdf let ocg_order_all pdf = match Pdf.lookup_direct pdf "/OCProperties" (Pdf.catalog_of_pdf pdf) with None -> () | Some ocpdict -> match Pdf.lookup_direct pdf "/OCGs" ocpdict with Some (Pdf.Array elts) -> begin match Pdf.lookup_direct pdf "/D" ocpdict with Some (Pdf.Dictionary d) -> let newd = Pdf.add_dict_entry (Pdf.Dictionary d) "/Order" (Pdf.Array elts) in let new_ocproperties = Pdf.add_dict_entry ocpdict "/D" newd in let ocp_objnum = Pdf.addobj pdf new_ocproperties in let new_catalog = Pdf.addobj pdf (Pdf.add_dict_entry (Pdf.catalog_of_pdf pdf) "/OCProperties" (Pdf.Indirect ocp_objnum)) in pdf.Pdf.trailerdict <- Pdf.add_dict_entry pdf.Pdf.trailerdict "/Root" (Pdf.Indirect new_catalog); pdf.Pdf.root <- new_catalog | _ -> () end | _ -> () cpdf-2.8.1/cpdfmetadata.ml0000664000175000017500000011344714771516640014112 0ustar johnjohnopen Pdfutil open Pdfio open Cpdferror type encoding = | Raw | UTF8 | Stripped (* Just strip everything which isn't 7 bit ASCII *) let crude_de_unicode s = implode (map char_of_int (lose (fun x -> x > 127) (Pdftext.codepoints_of_pdfdocstring s))) let encode_output enc s = match enc with | Raw -> s | UTF8 -> Pdftext.utf8_of_pdfdocstring s | Stripped -> crude_de_unicode s let xmp_template = {| CREATEDATE MODDATE PRODUCER CREATOR TITLE SUBJECT AUTHOR KEYWORDS TRAPPED CREATEDATE CREATOR MODDATE METADATADATE TITLE |} (* Set or replace metadata *) let set_metadata_from_bytes keepversion data pdf = let metadata_stream = Pdf.Stream {contents = (Pdf.Dictionary ["/Length", Pdf.Integer (bytes_size data); "/Type", Pdf.Name "/Metadata"; "/Subtype", Pdf.Name "/XML"], Pdf.Got data)} in let objnum = Pdf.addobj pdf metadata_stream in let document_catalog = match Pdf.lookup_direct pdf "/Root" pdf.Pdf.trailerdict with | Some s -> s | None -> error "Malformed PDF: No root." in let document_catalog' = Pdf.add_dict_entry document_catalog "/Metadata" (Pdf.Indirect objnum) in let rootnum = Pdf.addobj pdf document_catalog' in let trailerdict = Pdf.add_dict_entry pdf.Pdf.trailerdict "/Root" (Pdf.Indirect rootnum) in {pdf with Pdf.trailerdict = trailerdict; Pdf.root = rootnum; Pdf.minor = if pdf.Pdf.major > 1 || keepversion then pdf.Pdf.minor else max 4 pdf.Pdf.minor} let set_metadata keepversion filename pdf = let ch = open_in_bin filename in let data = mkbytes (in_channel_length ch) in for x = 0 to bytes_size data - 1 do bset data x (input_byte ch) done; set_metadata_from_bytes keepversion data pdf (* Remove metadata *) let remove_metadata pdf = match Pdf.lookup_direct pdf "/Root" pdf.Pdf.trailerdict with | None -> error "malformed file" | Some root -> let root' = Pdf.remove_dict_entry root "/Metadata" in let rootnum = Pdf.addobj pdf root' in {pdf with Pdf.trailerdict = Pdf.add_dict_entry pdf.Pdf.trailerdict "/Root" (Pdf.Indirect rootnum); Pdf.root = rootnum} (* Print metadata *) let get_metadata pdf = match Pdf.lookup_direct pdf "/Root" pdf.Pdf.trailerdict with | None -> error "malformed file" | Some root -> match Pdf.lookup_direct pdf "/Metadata" root with | Some ((Pdf.Stream _) as s) -> Pdfcodec.decode_pdfstream pdf s; begin match s with | Pdf.Stream {contents = (_, Pdf.Got data)} -> Some data | _ -> assert false end | _ -> None let print_metadata pdf = match get_metadata pdf with None -> () | Some data -> for x = 0 to bytes_size data - 1 do Printf.printf "%c" (char_of_int (bget data x)) done let get_info raw pdf = let infodict = match Pdf.lookup_direct pdf "/Info" pdf.Pdf.trailerdict with | Some infodict -> infodict | _ -> Pdf.Dictionary [] in let getstring name = match Pdf.lookup_direct pdf name infodict with | Some (Pdf.String s) -> if raw then s else crude_de_unicode s | Some (Pdf.Boolean false) -> "False" | Some (Pdf.Boolean true) -> "True" | _ -> if name = "/Trapped" then "False" else "" in getstring let get_info_utf8 pdf = let infodict = match Pdf.lookup_direct pdf "/Info" pdf.Pdf.trailerdict with | Some infodict -> infodict | _ -> Pdf.Dictionary [] in (function name -> match Pdf.lookup_direct pdf name infodict with | Some (Pdf.String s) -> Pdftext.utf8_of_pdfdocstring s | Some (Pdf.Boolean false) -> "False" | Some (Pdf.Boolean true) -> "True" | _ -> if name = "/Trapped" then "False" else "") let getstring encoding pdf = match encoding with | Raw -> get_info true pdf | Stripped -> get_info false pdf | UTF8 -> get_info_utf8 pdf let get_catalog_item name pdf = match Pdf.lookup_direct pdf "/Root" pdf.Pdf.trailerdict with | Some catalog -> begin match Pdf.lookup_direct pdf name catalog with | Some (Pdf.Name x) when x <> "" -> implode (tl (explode x)) | Some (Pdf.Dictionary _) -> "True" | _ -> "" end | _ -> "" let get_viewer_pref_item name pdf = match Pdf.lookup_direct pdf "/Root" pdf.Pdf.trailerdict with | Some catalog -> begin match Pdf.lookup_direct pdf "/ViewerPreferences" catalog with | Some d -> begin match Pdf.lookup_direct pdf name d with | Some (Pdf.Name x) when x <> "" -> implode (tl (explode x)) | Some (Pdf.Boolean b) -> string_of_bool b | _ -> "" end | None -> "" end | _ -> "" let get_markinfo_item name pdf = match Pdf.lookup_direct pdf "/Root" pdf.Pdf.trailerdict with | Some catalog -> begin match Pdf.lookup_direct pdf "/MarkInfo" catalog with | Some d -> begin match Pdf.lookup_direct pdf name d with | Some (Pdf.Boolean b) -> b | _ -> false end | None -> false end | _ -> false (* We fetch the open action, which is either: 1. A destination in array form. Change to a page number; 2. A /GoTo action with a /D destination - return the destination with number changed; 3. Something else - return the whole thing with no changes; 4. Not there - return `Null. *) let get_open_action pdf = let rewrite_page a = match a with | Pdf.Array (Pdf.Indirect i::more) as x-> begin match position_1 i (Pdf.page_reference_numbers pdf) with | Some i' -> Pdf.Array (Pdf.Integer i'::more) | None -> x end | x -> x in let convert = Cpdfjson.json_of_object ~utf8:true pdf (fun _ -> ()) ~no_stream_data:true ~parse_content:false in match Pdf.lookup_chain pdf pdf.Pdf.trailerdict ["/Root"; "/OpenAction"] with | Some (Pdf.Array a) -> convert (rewrite_page (Pdf.Array a)) | Some (Pdf.Dictionary d) -> begin match Pdf.lookup_direct pdf "/D" (Pdf.Dictionary d) with | Some (Pdf.Array a) -> convert (rewrite_page (Pdf.Array a)) | _ -> convert (Pdf.Dictionary d) end | Some x -> convert x | None -> `Null let get_open_action_string pdf = match get_open_action pdf with | `Null -> "" | j -> Pdfwrite.string_of_pdf (Cpdfjson.object_of_json j) let is_xfa pdf = Pdf.lookup_chain pdf pdf.Pdf.trailerdict ["/Root"; "/AcroForm"; "/XFA"] <> None let output_info ?(json=ref [("none", `Null)]) encoding unit pdf = let ugetnum pdf o = let n = Pdf.getnum pdf o in match unit with | Pdfunits.PdfPoint -> n | Pdfunits.Inch -> Pdfunits.inches n Pdfunits.PdfPoint | Pdfunits.Centimetre -> Pdfunits.centimetres n Pdfunits.PdfPoint | Pdfunits.Millimetre -> Pdfunits.millimetres n Pdfunits.PdfPoint in let notjson = !json = [("none", `Null)] in let getstring = getstring encoding pdf in let pages = Pdfpage.pages_of_pagetree pdf in let mediaboxes = map (fun page -> page.Pdfpage.mediabox) pages in let trimboxes = map (fun page -> Pdf.lookup_direct pdf "/TrimBox" page.Pdfpage.rest) pages in let artboxes = map (fun page -> Pdf.lookup_direct pdf "/ArtBox" page.Pdfpage.rest) pages in let cropboxes = map (fun page -> Pdf.lookup_direct pdf "/CropBox" page.Pdfpage.rest) pages in let bleedboxes = map (fun page -> Pdf.lookup_direct pdf "/BleedBox" page.Pdfpage.rest) pages in if notjson then Printf.printf "Version: %i.%i\n" pdf.Pdf.major pdf.Pdf.minor; json =| ("Version", `List [`Int pdf.Pdf.major; `Int pdf.Pdf.minor]); if notjson then Printf.printf "Pages: %i\n" (Pdfpage.endpage pdf); json =| ("Pages", `Int (Pdfpage.endpage pdf)); if notjson then Printf.printf "Title: %s\n" (getstring "/Title"); json =| ("Title", if getstring "/Title" = "" then `Null else `String (getstring "/Title")); if notjson then Printf.printf "Author: %s\n" (getstring "/Author"); json =| ("Author", if getstring "/Author" = "" then `Null else `String (getstring "/Author")); if notjson then Printf.printf "Subject: %s\n" (getstring "/Subject"); json =| ("Subject", if getstring "/Subject" = "" then `Null else `String (getstring "/Subject")); if notjson then Printf.printf "Keywords: %s\n" (getstring "/Keywords"); json =| ("Keywords", if getstring "/Keywords" = "" then `Null else `String (getstring "/Keywords")); if notjson then Printf.printf "Creator: %s\n" (getstring "/Creator"); json =| ("Creator", if getstring "/Creator" = "" then `Null else `String (getstring "/Creator")); if notjson then Printf.printf "Producer: %s\n" (getstring "/Producer"); json =| ("Producer", if getstring "/Producer" = "" then `Null else `String (getstring "/Producer")); if notjson then Printf.printf "Created: %s\n" (getstring "/CreationDate"); json =| ("Created", if getstring "/CreationDate" = "" then `Null else `String (getstring "/CreationDate")); if notjson then Printf.printf "Modified: %s\n" (getstring "/ModDate"); json =| ("Modified", if getstring "/ModDate" = "" then `Null else `String (getstring "/ModDate")); if notjson then Printf.printf "Trapped: %s\n" (getstring "/Trapped"); json =| ("Trapped", `Bool (bool_of_string (String.lowercase_ascii (getstring "/Trapped")))); if notjson then Printf.printf "PageMode: %s\n" (get_catalog_item "/PageMode" pdf); json =| ("PageMode", match (get_catalog_item "/PageMode" pdf) with "" -> `Null | x -> `String x); if notjson then Printf.printf "PageLayout: %s\n" (get_catalog_item "/PageLayout" pdf); json =| ("PageLayout", match (get_catalog_item "/PageLayout" pdf) with "" -> `Null | x -> `String x); if notjson then Printf.printf "OpenAction: %s\n" (get_open_action_string pdf); json =| ("OpenAction", get_open_action pdf); if notjson then Printf.printf "HideToolbar: %s\n" (get_viewer_pref_item "/HideToolbar" pdf); json =| ("HideToolbar", match get_viewer_pref_item "/HideToolbar" pdf with "" -> `Null | s -> `Bool (bool_of_string s)); if notjson then Printf.printf "HideMenubar: %s\n" (get_viewer_pref_item "/HideMenubar" pdf); json =| ("HideMenubar", match get_viewer_pref_item "/HideMenubar" pdf with "" -> `Null | s -> `Bool (bool_of_string s)); if notjson then Printf.printf "HideWindowUI: %s\n" (get_viewer_pref_item "/HideWindowUI" pdf); json =| ("HideWindowUI", match get_viewer_pref_item "/HideWindowUI" pdf with "" -> `Null | s -> `Bool (bool_of_string s)); if notjson then Printf.printf "FitWindow: %s\n" (get_viewer_pref_item "/FitWindow" pdf); json =| ("FitWindow", match get_viewer_pref_item "/FitWindow" pdf with "" -> `Null | s -> `Bool (bool_of_string s)); if notjson then Printf.printf "CenterWindow: %s\n" (get_viewer_pref_item "/CenterWindow" pdf); json =| ("CenterWindow", match get_viewer_pref_item "/CenterWindow" pdf with "" -> `Null | s -> `Bool (bool_of_string s)); if notjson then Printf.printf "DisplayDocTitle: %s\n" (get_viewer_pref_item "/DisplayDocTitle" pdf); json =| ("DisplayDocTitle", match get_viewer_pref_item "/DisplayDocTitle" pdf with "" -> `Null | s -> `Bool (bool_of_string s)); if notjson then Printf.printf "NonFullScreenPageMode: %s\n" (get_viewer_pref_item "/NonFullScreenPageMode" pdf); json =| ("NonFullPageScreenMode", match (get_viewer_pref_item "/NonFullPageScreenMode" pdf) with "" -> `Null | x -> `String x); if notjson then Printf.printf "AcroForm: %s\n" (match get_catalog_item "/AcroForm" pdf with "" -> "False" | x -> x); json =| ("AcroForm", match (get_catalog_item "/AcroForm" pdf) with "" -> `Bool false | x -> `Bool true); if notjson then Printf.printf "XFA: %s\n" (if is_xfa pdf then "True" else "False"); json =| ("XFA", `Bool (is_xfa pdf)); if notjson then Printf.printf "Marked: %s\n" (match get_markinfo_item "/Marked" pdf with true -> "True" | _ -> "False"); json =| ("Marked", `Bool (get_markinfo_item "/Marked" pdf)); if notjson then Printf.printf "UserProperties: %s\n" (match get_markinfo_item "/UserProperties" pdf with true -> "True" | _ -> "False"); json =| ("UserProperties", `Bool (get_markinfo_item "/UserProperties" pdf)); if notjson then Printf.printf "Suspects: %s\n" (match get_markinfo_item "/Suspects" pdf with true -> "True" | _ -> "False"); json =| ("Suspects", `Bool (get_markinfo_item "/Suspects" pdf)); if notjson then begin Printf.printf "MediaBox: "; begin if length (setify mediaboxes) = 1 then match hd mediaboxes with | Pdf.Array [a; b; c; d] -> Printf.printf "%f %f %f %f\n" (ugetnum pdf a) (ugetnum pdf b) (ugetnum pdf c) (ugetnum pdf d) | _ -> Printf.printf "\n" else Printf.printf "various\n" end; let printbox boxes s = Printf.printf s; Printf.printf ": "; if length (setify boxes) = 1 then begin match hd boxes with | Some (Pdf.Array [a; b; c; d]) -> Printf.printf "%f %f %f %f\n" (ugetnum pdf a) (ugetnum pdf b) (ugetnum pdf c) (ugetnum pdf d) | _ -> Printf.printf "\n" end else Printf.printf "various\n" in printbox cropboxes "CropBox"; printbox bleedboxes "BleedBox"; printbox trimboxes "TrimBox"; printbox artboxes "ArtBox" end else begin let mediabox = if length (setify mediaboxes) = 1 then match hd mediaboxes with | Pdf.Array [a; b; c; d] -> `List [`Float (ugetnum pdf a); `Float (ugetnum pdf b); `Float (ugetnum pdf c); `Float (ugetnum pdf d)] | _ -> `Null else `String "various" in let jsonbox boxes = if length (setify boxes) = 1 then match hd boxes with | Some (Pdf.Array [a; b; c; d]) -> `List [`Float (ugetnum pdf a); `Float (ugetnum pdf b); `Float (ugetnum pdf c); `Float (ugetnum pdf d)] | _ -> `Null else `String "various" in json =| ("MediaBox", mediabox); json =| ("CropBox", jsonbox cropboxes); json =| ("BleedBox", jsonbox bleedboxes); json =| ("TrimBox", jsonbox trimboxes); json =| ("ArtBox", jsonbox artboxes); end type xmltree = E of Cpdfxmlm.tag * xmltree list | D of string let xmltree_of_bytes b = let i = Cpdfxmlm.make_input ~strip:true (`String (0, string_of_bytes b)) in let el tag childs = E (tag, childs) and data d = D d in Cpdfxmlm.input_doc_tree ~el ~data i let bytes_of_xmltree t = let buf = Buffer.create 1024 in let o = Cpdfxmlm.make_output ~indent:None (`Buffer buf) in let frag = function E (tag, childs) -> `El (tag, childs) | D d -> `Data d in Cpdfxmlm.output_doc_tree frag o t; (* Delete the ?xml declaration, per XMP spec. *) let s = Buffer.contents buf in bytes_of_string (String.sub s 39 (String.length s - 39)) let rec string_of_xmltree = function D d -> Printf.sprintf "D {%s}" d | E (tag, trees) -> Printf.sprintf "E (%s, %s)" (string_of_tag tag) (string_of_xmltrees trees) and string_of_tag ((n, n'), attributes) = Printf.sprintf "NAME |%s| |%s|, ATTRIBUTES {%s}" n n' (string_of_attributes attributes) and string_of_attribute ((n, n'), str) = Printf.sprintf "ATTRNAME |%s| |%s|, STR {%s}" n n' str and string_of_attributes attrs = fold_left (fun a b -> a ^ " " ^ b) "" (map string_of_attribute attrs) and string_of_xmltrees trees = fold_left (fun a b -> a ^ " " ^ b) "" (map string_of_xmltree trees) let adobe = "http://ns.adobe.com/pdf/1.3/" let xmp = "http://ns.adobe.com/xap/1.0/" let dc = "http://purl.org/dc/elements/1.1/" let rdf = "http://www.w3.org/1999/02/22-rdf-syntax-ns#" let pdfaid = "http://www.aiim.org/pdfa/ns/id/" let pdfaid_wrong_iso19005_1 = "http://www.aiim.org/pdfa/ns/id" let pdfaid_wrong_acrobat_707 = "http://www.aiim.org/pdfa/ns/id.html" let pdfxid = "http://www.npes.org/pdfx/ns/id/" let pdfe = "http://www.aiim.org/pdfe/ns/id/" let pdfuaid = "http://www.aiim.org/pdfua/ns/id/" let pdfvtid = "http://www.npes.org/pdfvt/ns/id/" let combine_with_commas strs = String.trim (fold_left (fun x y -> x ^ (if x <> "" then ", " else "") ^ y) "" strs) (* Collect all
  • elements inside a seq, bag, or alt. Combine with commas. If none found, return empty string instead. *) let collect_list_items = function E (((n, n'), _), elts) when n = rdf && (n' = "Alt" || n' = "Seq" || n' = "Bag") -> combine_with_commas (option_map (function E (((n, n'), _), [D d]) when n = rdf && n' = "li" -> Some d | _ -> None) elts) | _ -> "" let collect_list_items_all all = match keep (function E _ -> true | _ -> false) all with h::_ -> Some (collect_list_items h) | [] -> None let rec get_data_for namespace name = function D _ -> None | E (((_, _), attrs), []) -> begin match option_map (function ((n, n'), str) when n = namespace && n' = name -> Some str | _ -> None) attrs with | h::_ -> Some h | [] -> None end | E (((n, n'), _), [D d]) when n = namespace && n' = name -> Some d | E (((n, n'), _), e) when n = namespace && n' = name -> collect_list_items_all e | E (_, l) -> match option_map (get_data_for namespace name) l with x :: _ -> Some x | _ -> None (* PDF/A: 2 B or pdfaid:part="2" pdfaid:conformance="B" PDF/E: PDF/E-1 PDF/VT: PDF/VT-1 PDF/UA: 1 PDF/X: PDF/X-4 (Fallback DID /GTS_PDFXVersion) *) let determine_subformats pdf = let formats = ref [] in let fallback_pdfx () = match Pdf.lookup_direct pdf "/Info" pdf.Pdf.trailerdict with | Some d -> begin match Pdf.lookup_direct pdf "/GTS_PDFXVersion" d with | Some (Pdf.String s) -> formats =| s | _ -> () end | None -> () in match get_metadata pdf with | None -> fallback_pdfx (); !formats | Some metadata -> let _, tree = xmltree_of_bytes metadata in (* PDF/E *) begin match get_data_for pdfe "ISO_PDFEVersion" tree with | Some s -> formats =| s | None -> () end; (* PDF/UA *) begin match get_data_for pdfuaid "part" tree with | Some s -> formats =| "PDF/UA-" ^ s | None -> () end; (* PDF/A *) begin match get_data_for pdfaid "part" tree, get_data_for pdfaid_wrong_acrobat_707 "part" tree, get_data_for pdfaid_wrong_iso19005_1 "part" tree with | (Some part, _, _) | (_, Some part, _) | (_, _, Some part) -> let conformance = match get_data_for pdfaid "conformance" tree, get_data_for pdfaid_wrong_acrobat_707 "conformance" tree, get_data_for pdfaid_wrong_iso19005_1 "conformance" tree with | (Some s, _, _) | (_, Some s, _) | (_, _, Some s) -> String.lowercase_ascii s | _ -> "" in formats =| "PDF/A-" ^ part ^ conformance | _ -> () end; (* PDF/X *) begin match get_data_for pdfxid "GTS_PDFXVersion" tree with | Some s -> formats =| s | None -> fallback_pdfx () end; (* PDF/VT *) begin match get_data_for pdfvtid "GTS_PDFVTVersion" tree with | Some s -> formats =| s | None -> () end; !formats let language pdf = match Pdf.lookup_chain pdf pdf.Pdf.trailerdict ["/Root"; "/Lang"] with | Some (Pdf.String x) -> Some x | _ -> None let set_language pdf s = Pdf.replace_chain pdf ["/Root"; "/Lang"] (Pdf.String s) let output_xmp_info ?(json=ref [("none", `Null)]) encoding unit pdf = let notjson = !json = [("none", `Null)] in let print_out tree title namespace name = match get_data_for namespace name tree with None -> () | Some data -> if notjson then begin Printf.printf "%s: " title; print_endline data end else json =| (title, `String data) in if notjson then Printf.printf "Subformats: %s\n" (combine_with_commas (determine_subformats pdf)) else json =| ("Subformats", `List (map (fun x -> `String x) (determine_subformats pdf))); if notjson then Printf.printf "Language: %s\n" (match language pdf with None -> "" | Some x -> "\"" ^ x ^ "\"") else json =| ("Language", match language pdf with None -> `Null | Some x -> `String x); match get_metadata pdf with None -> () | Some metadata -> try let dtd, tree = xmltree_of_bytes metadata in print_out tree "XMP pdf:Keywords" adobe "Keywords"; print_out tree "XMP pdf:Producer" adobe "Producer"; print_out tree "XMP pdf:Trapped" adobe "Trapped"; print_out tree "XMP pdf:Title" adobe "Title"; print_out tree "XMP pdf:Creator" adobe "Creator"; print_out tree "XMP pdf:Subject" adobe "Subject"; print_out tree "XMP pdf:Author" adobe "Author"; print_out tree "XMP pdf:CreationDate" adobe "CreationDate"; print_out tree "XMP pdf:ModDate" adobe "ModDate"; print_out tree "XMP xmp:CreateDate" xmp "CreateDate"; print_out tree "XMP xmp:CreatorTool" xmp "CreatorTool"; print_out tree "XMP xmp:MetadataDate" xmp "MetadataDate"; print_out tree "XMP xmp:ModifyDate" xmp "ModifyDate"; print_out tree "XMP dc:title" dc "title"; print_out tree "XMP dc:creator" dc "creator"; print_out tree "XMP dc:subject" dc "subject"; print_out tree "XMP dc:description" dc "description"; print_out tree "PDF/UA pdfuaid:amd" pdfuaid "amd"; print_out tree "PDF/UA pdfuaid:corr" pdfuaid "corr" with _ -> () (* Get XMP info equivalent of an old metadata field *) let check = function "/Title" -> [(adobe, "Title"); (dc, "title")] | "/Author" -> [(adobe, "Author"); (dc, "creator")] | "/Subject" -> [(adobe, "Subject"); (dc, "subject")] | "/Keywords" -> [(adobe, "Keywords")] | "/Creator" -> [(adobe, "Creator"); (xmp, "CreatorTool")] | "/Producer" -> [(adobe, "Producer")] | "/CreationDate" -> [(adobe, "CreationDate"); (xmp, "CreateDate")] | "/ModDate" -> [(adobe, "ModificationDate"); (xmp, "ModifyDate")] | _ -> failwith "Cpdf.check_name not known" let get_xmp_info pdf name = let tocheck = check name in match get_metadata pdf with None -> "" | Some metadata -> try let _, tree = xmltree_of_bytes metadata in let results = map (fun (kind, key) -> match get_data_for kind key tree with Some x -> x | None -> "") tocheck in match lose (eq "") results with x::_ -> x | [] -> "" with _ -> "" (* Set XMP info *) let rec set_xml_field kind fieldname value = function D data -> D data | E (((n, n'), m), _ (*[D _]*)) when n = kind && n' = fieldname -> (* Replace anything inside, including nothing i.e *) E (((n, n'), m), [D value]) | E (x, ts) -> E (x, map (set_xml_field kind fieldname value) ts) let set_pdf_info_xml kind fieldname value xmldata pdf = let dtd, tree = xmltree_of_bytes xmldata in let str = match value with Pdf.String s -> Pdftext.utf8_of_pdfdocstring s | Pdf.Boolean true -> "True" | Pdf.Boolean false -> "False" | _ -> failwith "set_pdf_info_xml: not a string" in let newtree = set_xml_field kind fieldname str tree in bytes_of_xmltree (dtd, newtree) let set_pdf_info_xml_many changes value xmldata pdf = let xmldata = ref xmldata in iter (fun (kind, fieldname) -> xmldata := set_pdf_info_xml kind fieldname value !xmldata pdf) changes; !xmldata (* Set an entry in the /Info dictionary *) (* We must parse the date to get its components, then use strftime to build the * new string in XMP format *) type date = {mutable year : int; mutable month : int; (* 1 - 12 *) mutable day : int; (* 1 - 31 *) mutable hour : int; (* 0 - 23 *) mutable minute : int; (* 0 - 59 *) mutable second : int; (* 0 - 59 *) mutable ut_relationship : int; (* -1, 0, +1 *) mutable offset_hours : int; (* 0 - 59 *) mutable offset_minutes : int (* 0 - 59 *)} let default_date () = {year = 0; month = 1; day = 1; hour = 0; minute = 0; second = 0; ut_relationship = 0; offset_hours = 0; offset_minutes = 0} (* XMP date format is YYYY-MM-DDThh:mm:ssTZD *) let make_xmp_date_from_components d = let tzd = if d.ut_relationship = 0 && d.offset_hours = 0 && d.offset_minutes = 0 then "Z" else (if d.ut_relationship >=0 then "+" else "-") ^ Printf.sprintf "%02i" d.offset_hours ^ ":" ^ Printf.sprintf "%02i" d.offset_minutes in Cpdfstrftime.strftime ~time:{Cpdfstrftime._tm_sec = d.second; Cpdfstrftime._tm_min = d.minute; Cpdfstrftime._tm_hour = d.hour; Cpdfstrftime._tm_mday = d.day; Cpdfstrftime._tm_mon = d.month - 1; Cpdfstrftime._tm_year = d.year - 1900; Cpdfstrftime._tm_wday = 0; Cpdfstrftime._tm_yday = 0; Cpdfstrftime._tm_isdst = false} "%Y-%m-%dT%H:%M:%S" ^ tzd let xmp_date date = let d = default_date () in try match explode date with 'D'::':'::r -> begin match r with y1::y2::y3::y4::r -> d.year <- int_of_string (implode [y1; y2; y3; y4]); begin match r with m1::m2::r -> d.month <- int_of_string (implode [m1; m2]); begin match r with d1::d2::r -> d.day <- int_of_string (implode [d1; d2]); begin match r with h1::h2::r -> d.hour <- int_of_string (implode [h1; h2]); begin match r with m1::m2::r -> d.minute <- int_of_string (implode [m1; m2]); begin match r with s1::s2::r -> d.second <- int_of_string (implode [s1; s2]); begin match r with o::r -> d.ut_relationship <- if o = '+' then 1 else if o = '-' then -1 else 0; begin match r with h1::h2::'\''::r -> d.offset_hours <- int_of_string (implode [h1; h2]); begin match r with m1::m2::_ -> d.offset_minutes <- int_of_string (implode [m1; m2]); raise Exit | _ -> raise Exit end | _ -> raise Exit end | _ -> raise Exit end | _ -> raise Exit end | _ -> raise Exit end | _ -> raise Exit end | _ -> raise Exit end | _ -> raise Exit end | _ -> Pdfe.log (Printf.sprintf "xmp_date: Malformed date string (no year): %s\n" date); make_xmp_date_from_components d end | _ -> Pdfe.log (Printf.sprintf "xmp_date: Malformed date string (no prefix): %s\n" date); make_xmp_date_from_components d with Exit -> make_xmp_date_from_components d let set_pdf_info ?(xmp_also=false) ?(xmp_just_set=false) (key, value, version) pdf = let infodict = match Pdf.lookup_direct pdf "/Info" pdf.Pdf.trailerdict with | Some d -> d | None -> Pdf.Dictionary [] in let infodict' = Pdf.add_dict_entry infodict key value in let objnum = Pdf.addobj pdf infodict' in if not xmp_just_set then begin pdf.Pdf.trailerdict <- Pdf.add_dict_entry pdf.Pdf.trailerdict "/Info" (Pdf.Indirect objnum); if pdf.Pdf.major = 1 then pdf.Pdf.minor <- max pdf.Pdf.minor version end; if xmp_also then begin match get_metadata pdf with None -> pdf | Some xmldata -> let xmp_date = function Pdf.String s -> Pdf.String (xmp_date s) | _ -> failwith "xmp_date not a string" in let changes, value = match key with | "/Producer" -> [(adobe, "Producer")], value | "/Creator" -> [(adobe, "Creator"); (xmp, "CreatorTool"); (dc, "creator")], value | "/Author" -> [(adobe, "Author")], value | "/Title" -> [(adobe, "Title"); (dc, "title")], value | "/Subject" -> [(adobe, "Subject"); (dc, "subject")], value | "/Keywords" -> [(adobe, "Keywords")], value | "/CreationDate" -> [(adobe, "CreationDate"); (xmp, "CreateDate")], xmp_date value | "/ModDate" -> [(adobe, "ModDate"); (xmp, "ModifyDate")], xmp_date value | "/Trapped" -> [(adobe, "Trapped")], value | _ -> failwith "Unknown call to set_pdf_info" in set_metadata_from_bytes true (set_pdf_info_xml_many changes value xmldata pdf) pdf end else pdf let expand_date = function | "now" -> begin match Sys.getenv_opt "CPDF_REPRODUCIBLE_DATES" with | Some "true" -> Cpdfstrftime.strftime ~time:Cpdfstrftime.dummy "D:%Y%m%d%H%M%S" | _ -> Cpdfstrftime.strftime "D:%Y%m%d%H%M%S" end | x -> x (* Set metadata date *) let set_metadata_date pdf date = match get_metadata pdf with None -> pdf | Some xmldata -> let changes= [(xmp, "MetadataDate")] in let value = match date with "now" -> xmp_date (expand_date "now") | x -> x in set_metadata_from_bytes true (set_pdf_info_xml_many changes (Pdf.String value) xmldata pdf) pdf (* Copy an /ID from one file to another *) let copy_id keepversion copyfrom copyto = match Pdf.lookup_direct copyfrom "/ID" copyfrom.Pdf.trailerdict with | None -> copyto (* error "Source PDF file has no /ID entry to copy from" *) | Some id -> copyto.Pdf.trailerdict <- Pdf.add_dict_entry copyto.Pdf.trailerdict "/ID" id; copyto.Pdf.minor <- if copyto.Pdf.major > 1 || keepversion then copyto.Pdf.minor else max copyto.Pdf.minor 1; copyto let replacements pdf = let info = get_info_utf8 pdf in [("CREATEDATE", xmp_date (let i = info "/CreationDate" in if i = "" then expand_date "now" else i)); ("MODDATE", xmp_date (let i = info "/ModDate" in if i = "" then expand_date "now" else i)); ("PRODUCER", info "/Producer"); ("CREATOR", info "/Creator"); ("TITLE", info "/Title"); ("SUBJECT", info "/Subject"); ("AUTHOR", info "/Author"); ("KEYWORDS", info "/Keywords"); ("TRAPPED", info "/Trapped"); ("METADATADATE", xmp_date (expand_date "now"))] let create_metadata pdf = let xmp = ref xmp_template in iter (fun (s, r) -> xmp := string_replace_all s r !xmp) (replacements pdf); set_metadata_from_bytes false (bytes_of_string !xmp) pdf (* Set viewer preferences *) let set_viewer_preference (key, value, version) pdf = match Pdf.lookup_direct pdf "/Root" pdf.Pdf.trailerdict with | Some catalog -> let viewer_preferences = match Pdf.lookup_direct pdf "/ViewerPreferences" catalog with | Some d -> d | None -> Pdf.Dictionary [] in let viewer_preferences' = Pdf.add_dict_entry viewer_preferences key value in let catalog' = Pdf.add_dict_entry catalog "/ViewerPreferences" viewer_preferences' in let catalognum = Pdf.addobj pdf catalog' in let trailerdict' = Pdf.add_dict_entry pdf.Pdf.trailerdict "/Root" (Pdf.Indirect catalognum) in {pdf with Pdf.minor = max pdf.Pdf.minor version; Pdf.root = catalognum; Pdf.trailerdict = trailerdict'} | None -> error "bad root" (* Set page layout *) let set_page_layout pdf s = match s with | "SinglePage" | "OneColumn" | "TwoColumnLeft" | "TwoColumnRight" | "TwoPageLeft" | "TwoPageRight" -> begin match Pdf.lookup_direct pdf "/Root" pdf.Pdf.trailerdict with | Some catalog -> let catalog' = Pdf.add_dict_entry catalog "/PageLayout" (Pdf.Name ("/" ^ s)) in let catalognum = Pdf.addobj pdf catalog' in let trailerdict' = Pdf.add_dict_entry pdf.Pdf.trailerdict "/Root" (Pdf.Indirect catalognum) in {pdf with Pdf.root = catalognum; Pdf.trailerdict = trailerdict'} | None -> error "bad root" end | _ -> error "Unknown page layout" (* Set page mode *) let set_page_mode pdf s = match s with | "UseNone" | "UseOutlines" | "UseThumbs" | "FullScreen" | "UseOC" | "UseAttachments" -> begin match Pdf.lookup_direct pdf "/Root" pdf.Pdf.trailerdict with | Some catalog -> let catalog' = Pdf.add_dict_entry catalog "/PageMode" (Pdf.Name ("/" ^ s)) in let catalognum = Pdf.addobj pdf catalog' in let trailerdict' = Pdf.add_dict_entry pdf.Pdf.trailerdict "/Root" (Pdf.Indirect catalognum) in {pdf with Pdf.root = catalognum; Pdf.trailerdict = trailerdict'} | None -> error "bad root" end | _ -> error "Unknown page mode" let set_non_full_screen_page_mode pdf s = match s with | "UseNone" | "UseOutlines" | "UseThumbs" | "UseOC" | "UseAttachments" -> begin match Pdf.lookup_direct pdf "/Root" pdf.Pdf.trailerdict with | Some catalog -> let viewerprefs = match Pdf.lookup_direct pdf "/ViewerPreferences" catalog with | Some d -> d | None -> Pdf.Dictionary [] in let viewerprefsnum = Pdf.addobj pdf (Pdf.add_dict_entry viewerprefs "/NonFullScreenPageMode" (Pdf.Name ("/" ^ s))) in let catalog' = Pdf.add_dict_entry catalog "/ViewerPreferences" (Pdf.Indirect viewerprefsnum)in let catalognum = Pdf.addobj pdf catalog' in let trailerdict' = Pdf.add_dict_entry pdf.Pdf.trailerdict "/Root" (Pdf.Indirect catalognum) in {pdf with Pdf.root = catalognum; Pdf.trailerdict = trailerdict'} | None -> error "bad root" end | _ -> error "Unknown non full screen page mode" (* Set open action *) let set_open_action pdf ?dest fit pagenumber = if pagenumber > Pdfpage.endpage pdf || pagenumber < 0 then raise (error "set_open_action: invalid page number") else let pageobjectnumber = select pagenumber (Pdf.page_reference_numbers pdf) in let destination = match dest with | Some s -> begin match Pdfread.parse_single_object s with | Pdf.Array (Pdf.Integer pagenum::more) -> begin try let pageobjectnumber = select pagenum (Pdf.page_reference_numbers pdf) in Pdf.Array (Pdf.Indirect pageobjectnumber::more) with _ -> raise (Pdf.PDFError "bad page number in custom destination") end | _ | exception _ -> raise (Pdf.PDFError "Bad destination syntax") end | None -> if fit then Pdf.Array [Pdf.Indirect pageobjectnumber; Pdf.Name "/Fit"] else Pdf.Array [Pdf.Indirect pageobjectnumber; Pdf.Name "/XYZ"; Pdf.Null; Pdf.Null; Pdf.Null] in let open_action = Pdf.Dictionary [("/D", destination); ("/S", Pdf.Name "/GoTo")] in match Pdf.lookup_direct pdf "/Root" pdf.Pdf.trailerdict with | Some catalog -> let catalog' = Pdf.add_dict_entry catalog "/OpenAction" open_action in let catalognum = Pdf.addobj pdf catalog' in let trailerdict' = Pdf.add_dict_entry pdf.Pdf.trailerdict "/Root" (Pdf.Indirect catalognum) in {pdf with Pdf.root = catalognum; Pdf.trailerdict = trailerdict'} | None -> error "bad root" let set_version v pdf = pdf.Pdf.minor <- v cpdf-2.8.1/cpdfua.mli0000664000175000017500000000225214771516640013077 0ustar johnjohn(** PDF/UA *) type subformat = | PDFUA1 | PDFUA2 (** Parse PDF/UA-1 and PDF/UA-2 to the subformat type. *) val subformat_of_string : string -> subformat (** Print matterhorn test results ("" = all tests) *) val test_matterhorn_print : Pdf.t -> string -> unit (** Return JSON results of a matterhorn test ("" = all tests *) val test_matterhorn_json : Pdf.t -> string -> Cpdfyojson.Safe.t (** Mark PDF as PDF/UA-1 compliant. *) val mark : Pdf.t -> unit (** Mark PDF as PDF/UA-2 compliant. *) val mark2 : int -> Pdf.t -> unit (** Remove any PDF/UA-* marker *) val remove_mark : Pdf.t -> unit (** Print the structure tree to standard output, graphically. *) val print_struct_tree : Pdf.t -> unit (** Extract structure tree to JSON *) val extract_struct_tree : Pdf.t -> Cpdfyojson.Safe.t (** Reapply an edited JSON structure tree to its PDF. *) val replace_struct_tree : Pdf.t -> Cpdfyojson.Safe.t -> unit (** Make a blank PDF/UA-1 PDF given a title, paper size, and number of pages. *) val create_pdfua1 : string -> Pdfpaper.t -> int -> Pdf.t (** Make a blank PDF/UA-2 PDF given a title, paper size, and number of pages. *) val create_pdfua2 : string -> Pdfpaper.t -> int -> Pdf.t cpdf-2.8.1/cpdfsqueeze.ml0000664000175000017500000002555114771516640014011 0ustar johnjohnopen Pdfutil open Pdfio (* For debugging *) (*let report_pdf_size pdf = Pdf.remove_unreferenced pdf; Pdfwrite.pdf_to_file_options ~preserve_objstm:false ~generate_objstm:false ~compress_objstm:false None false pdf "temp.pdf"; let fh = open_in_bin "temp.pdf" in Printf.printf "Size %i bytes\n" (in_channel_length fh); flush stdout; close_in fh*) (* Recompress anything which isn't compressed (or compressed with old-fashioned mechanisms), unless it's metadata. *) (* TODO The use of this function in cpdfcommand.ml actually takes some power away from the user - maybe they don't want old-fashioned stuff re-compressed, but only uncompressed data compressed. Consider adding a flag -recompress-only-uncompressed and an argument to this function. *) let recompress_stream pdf = function (* If there is no compression, or bad compression with /FlateDecode *) | Pdf.Stream {contents = (dict, _)} as stream -> begin match Pdf.lookup_direct pdf "/Filter" dict, Pdf.lookup_direct pdf "/Type" dict with | _, Some (Pdf.Name "/Metadata") -> () | ( None | Some (Pdf.Name ("/ASCIIHexDecode" | "/ASCII85Decode" | "/LZWDecode" | "/RunLengthDecode")) | Some (Pdf.Array [] | Pdf.Array (Pdf.Name ("/ASCIIHexDecode" | "/ASCII85Decode" | "/LZWDecode" | "/RunLengthDecode")::_) )), _ -> begin try Pdfcodec.decode_pdfstream_until_unknown pdf stream with _ -> Pdfe.log "Warning: Skipping re-encoding of a stream\n" end; Pdfcodec.encode_pdfstream ~only_if_smaller:true pdf Pdfcodec.Flate stream | _ -> () end | _ -> assert false let recompress_pdf pdf = if not (Pdfcrypt.is_encrypted pdf) then Pdf.iter_stream (recompress_stream pdf) pdf; pdf let decompress_pdf pdf = if not (Pdfcrypt.is_encrypted pdf) then (Pdf.iter_stream (Pdfcodec.decode_pdfstream_until_unknown pdf) pdf); pdf (* Equality on PDF objects *) let pdfobjeq pdf x y = let x = Pdf.lookup_obj pdf x and y = Pdf.lookup_obj pdf y in begin match x with Pdf.Stream _ -> Pdf.getstream x | _ -> () end; begin match y with Pdf.Stream _ -> Pdf.getstream y | _ -> () end; compare x y let memory () = Printf.printf "%i bytes in use\n%!" (Gc.(quick_stat ()).heap_words * 4) let really_squeeze pdf = (*Printf.printf "Beginning of really_squeeze: %!"; memory ();*) let objs = ref [] in Pdf.objiter (fun objnum _ -> objs := objnum :: !objs) pdf; let toprocess = keep (fun x -> length x > 1) (collate (pdfobjeq pdf) (sort (pdfobjeq pdf) !objs)) in (*Printf.printf "Stage 1 done%!\n"; memory ();*) (* Remove any pools of objects which are page objects, since Adobe Reader * gets confused when there are duplicate page objects. *) let toprocess = option_map (function [] -> assert false | h::_ as l -> match Pdf.lookup_direct pdf "/Type" (Pdf.lookup_obj pdf h) with Some (Pdf.Name "/Page") -> None | _ -> Some l) toprocess in (*Printf.printf "Stage 2 done%!\n"; memory ();*) let pdfr = ref pdf in let changetable = Hashtbl.create 100 in iter (function [] -> assert false | h::t -> iter (fun e -> Hashtbl.add changetable e h) t) toprocess; (* For a unknown reason, the output file is much smaller if Pdf.renumber is run twice. This is bizarre, since Pdf.renumber is an old, well-understood function in use for years -- what is going on? Furthermore, if we run it 3 times, it gets bigger again! *) (*Printf.printf "Stage 3 done\n%!"; memory ();*) pdfr := Pdf.renumber changetable !pdfr; (*Printf.printf "Stage 4 done\n%!"; memory ();*) pdfr := Pdf.renumber changetable !pdfr; (*Printf.printf "Stage 5 done\n%!"; memory ();*) Pdf.remove_unreferenced !pdfr; (*Printf.printf "Stage 6 done\n%!"; memory ();*) (*Gc.compact ();*) (*Printf.printf "Compacted:\n%!"; memory ();*) pdf.Pdf.root <- !pdfr.Pdf.root; pdf.Pdf.objects <- !pdfr.Pdf.objects; pdf.Pdf.trailerdict <- !pdfr.Pdf.trailerdict (* Squeeze the form xobject at objnum. FIXME: For old PDFs (< v1.2) any resources from the page (or its ancestors in the page tree!) are also needed - we must merge them with the ones from the xobject itself. However, it it safe for now -- in the unlikely event that the resources actually need to be available, the parse will fail, the squeeze of this object will fail, and we bail out. *) (* FIXME: XObjects inside xobjects? *) let xobjects_done = ref [] let squeeze_form_xobject pdf objnum = if mem objnum !xobjects_done then () else begin xobjects_done := objnum :: !xobjects_done; let obj = Pdf.lookup_obj pdf objnum in match Pdf.lookup_direct pdf "/Subtype" obj with Some (Pdf.Name "/Form") -> let resources = match Pdf.lookup_direct pdf "/Resources" obj with Some d -> d | None -> Pdf.Dictionary [] in begin match Pdfops.stream_of_ops (Pdfops.parse_operators pdf resources [Pdf.Indirect objnum]) with Pdf.Stream {contents = (_, Pdf.Got data)} -> (* Put replacement data in original stream, and overwrite /Length *) begin match obj with Pdf.Stream ({contents = (d, _)} as str) -> str := (Pdf.add_dict_entry d "/Length" (Pdf.Integer (bytes_size data)), Pdf.Got data) | _ -> failwith "squeeze_form_xobject" end | _ -> failwith "squeeze_form_xobject" end | _ -> () end (* For a list of indirects representing content streams, make sure that none of them are duplicated in the PDF. This indicates sharing, which parsing and rewriting the streams might destroy, thus making the file bigger. FIXME: The correct thing to do is to preserve the multiple content streams. *) let no_duplicates content_stream_numbers stream_numbers = not (mem false (map (fun n -> length (keep (eq n) content_stream_numbers) < 2) stream_numbers)) (* Give a list of content stream numbers, given a page reference number *) let content_streams_of_page pdf refnum = match Pdf.direct pdf (Pdf.lookup_obj pdf refnum) with Pdf.Dictionary dict -> begin match lookup "/Contents" dict with Some (Pdf.Indirect i) -> [i] | Some (Pdf.Array x) -> option_map (function Pdf.Indirect i -> Some i | _ -> None) x | _ -> [] end | _ -> [] (* For each object in the PDF marked with /Type /Page, for each /Contents indirect reference or array of such, decode and recode that content stream. *) let squeeze_all_content_streams pdf = let page_reference_numbers = Pdf.page_reference_numbers pdf in let all_content_streams_in_doc = flatten (map (content_streams_of_page pdf) page_reference_numbers) in xobjects_done := []; Pdf.objiter (fun objnum _ -> match Pdf.lookup_obj pdf objnum with Pdf.Dictionary dict as d when Pdf.lookup_direct pdf "/Type" d = Some (Pdf.Name "/Page") -> let resources = match Pdf.lookup_direct pdf "/Resources" d with Some d -> d | None -> Pdf.Dictionary [] in begin try let content_streams = match lookup "/Contents" dict with Some (Pdf.Indirect i) -> begin match Pdf.direct pdf (Pdf.Indirect i) with Pdf.Array x -> x | _ -> [Pdf.Indirect i] end | Some (Pdf.Array x) -> x | _ -> raise Not_found in if no_duplicates all_content_streams_in_doc (map (function Pdf.Indirect i -> i | _ -> assert false) content_streams) then let newstream = Pdfops.stream_of_ops (Pdfops.parse_operators pdf resources content_streams) in let newdict = Pdf.add_dict_entry d "/Contents" (Pdf.Indirect (Pdf.addobj pdf newstream)) in Pdf.addobj_given_num pdf (objnum, newdict); (* Now process all xobjects related to this page *) begin match Pdf.lookup_direct pdf "/XObject" resources with Some (Pdf.Dictionary xobjs) -> iter (function (_, Pdf.Indirect i) -> squeeze_form_xobject pdf i | _ -> failwith "squeeze_xobject") xobjs | _ -> () end with (* No /Contents, which is ok. Or a parsing failure due to uninherited resources. FIXME: Add support for inherited resources. NB 24th March 2023 we tried this, and sizes went up on many files and down on none! So reverted. *) Not_found -> () end | _ -> ()) pdf (* We run squeeze enough times for the number of objects to not change *) let squeeze ?logto ?(pagedata=true) pdf = let log x = match logto with None -> print_string x; flush stdout | Some "nolog" -> () | Some s -> let fh = open_out_gen [Open_wronly; Open_creat] 0o666 s in seek_out fh (out_channel_length fh); output_string fh x; close_out fh in try let n = ref (Pdf.objcard pdf) in log (Printf.sprintf "Beginning squeeze: %i objects\n" (Pdf.objcard pdf)); while !n > (ignore (really_squeeze pdf); Pdf.objcard pdf) do n := Pdf.objcard pdf; log (Printf.sprintf "Squeezing... Down to %i objects\n" (Pdf.objcard pdf)); done; if pagedata then begin log (Printf.sprintf "Squeezing page data and xobjects\n"); squeeze_all_content_streams pdf; end; log (Printf.sprintf "Recompressing document\n"); ignore (recompress_pdf pdf); with e -> raise (Pdf.PDFError (Printf.sprintf "Squeeze failed. No output written.\n Proximate error was:\n %s" (Printexc.to_string e))) cpdf-2.8.1/cpdfcreate.ml0000664000175000017500000000127214771516640013565 0ustar johnjohnopen Pdfutil let blank_document width height pages = let pdf_pages = map (fun () -> Pdfpage.blankpage (Pdfpaper.make Pdfunits.PdfPoint width height)) (many () pages) in let pdf, pageroot = Pdfpage.add_pagetree pdf_pages (Pdf.empty ()) in let pdf = Pdfpage.add_root pageroot [] pdf in Pdf.change_id pdf (string_of_float (Random.float 1.)); pdf let blank_document_paper papersize pages = let pdf_pages = map (fun () -> Pdfpage.blankpage papersize) (many () pages) in let pdf, pageroot = Pdfpage.add_pagetree pdf_pages (Pdf.empty ()) in let pdf = Pdfpage.add_root pageroot [] pdf in Pdf.change_id pdf (string_of_float (Random.float 1.)); pdf cpdf-2.8.1/cpdf.10000664000175000017500000000101714771516640012126 0ustar johnjohn.\" Process this file with .\" groff -man -Tascii cpdf.1 .\" .TH CPDF 1 "APRIL 2025" "" "" .SH NAME cpdf \- PDF command line tools .SH SYNOPSIS .B cpdf ... [-o ] .SH DESCRIPTION .B cpdf provides various tools for modifying PDF files. The full documentation is given in the PDF file .B cpdfmanual.pdf. .SH OPTIONS .IP -version Print the .B cpdf version number. .IP "-help, --help" Output a list of .B cpdf commands. .SH AUTHOR John Whitington cpdf-2.8.1/html_manual/0000775000175000017500000000000014771516640013432 5ustar johnjohncpdf-2.8.1/html_manual/clean0000755000175000017500000000027514771516640014444 0ustar johnjohnrm -f *.html *.4ct *.4tc *.aux *.css *.dvi *.idv *.idx *.lg *.log *.tmp *.xref *.png *.toc *.out *.cut rm -rf manualimages rm -f Changes rm -rf ../camlpdf rm -f logo.pdf rm cpdfmanual.tex cpdf-2.8.1/html_manual/javascriptsplits/0000775000175000017500000000000014771516640017037 5ustar johnjohncpdf-2.8.1/html_manual/javascriptsplits/cm1.tex0000664000175000017500000000015014771516640020235 0ustar johnjohncpdf.js: JavaScript interface to the cpdf PDF tools =================================================== cpdf-2.8.1/html_manual/javascriptsplits/c08.tex0000664000175000017500000000003514771516640020151 0ustar johnjohn// CHAPTER 7. Presentations cpdf-2.8.1/html_manual/javascriptsplits/c18.tex0000664000175000017500000000347314771516640020163 0ustar johnjohn// CHAPTER 17. Creating new PDFs /** Creates a blank document with pages of the given width (in points), height (in points), and number of pages. @arg {number} w page width @arg {number} h page height @arg {number} number of pages @return {pdf} PDF document */ function blankDocument(w, h, pages) {} /** Makes a blank document given a page size and number of pages. @arg {"paper size"} papersize paper size @arg {number} pages number of pages @return {pdf} PDF document */ function blankDocumentPaper(papersize, pages) {} /** Typesets a UTF8 text file ragged right on a page of size w * h in points in the given font and font size. @arg {number} w page width @arg {number} h page height @arg {font} font font @arg {number} fontsize font size @arg {string} filename file name @result {pdf} PDF document */ function textToPDF(w, h, font, fontsize, filename) {} /** Typesets a UTF8 text file ragged right on a page of size w * h in points in the given font and font size. @arg {number} w page width @arg {number} h page height @arg {font} font font @arg {number} fontsize font size @arg {Uint8Array} data text @result {pdf} PDF document */ function textToPDFMemory(w, h, font, fontsize, data) {} /** Typesets a UTF8 text file ragged right on a page of the given size in the given font and font size. @arg {"paper size"} papersize paper size @arg {font} font font @arg {number} fontsize font size @arg {string} filename file name @result {pdf} PDF document */ function textToPDFPaper(papersize, font, fontsize, filename) {} /** Typesets a UTF8 text file ragged right on a page of the given size in the given font and font size. @arg {"paper size"} papersize paper size @arg {font} font font @arg {number} fontsize font size @arg {Uint8Array} data text @result {pdf} PDF document */ function textToPDFPaperMemory(papersize, font, fontsize, data) {} cpdf-2.8.1/html_manual/javascriptsplits/c07.tex0000664000175000017500000000553214771516640020157 0ustar johnjohn// CHAPTER 6. Bookmarks /** Starts the bookmark retrieval process for a given PDF. @arg {pdf} pdf PDF document */ function startGetBookmarkInfo(pdf) {} /** Gets the number of bookmarks for the PDF given to startGetBookmarkInfo. @return {number} number of bookmarks */ function numberBookmarks() {} /** Gets the bookmark level for the given bookmark (0...(n - 1)). @arg {number} n serial number @return {number} bookmark level */ function getBookmarkLevel(n) {} /** Gets the bookmark target page for the given PDF (which must be the same as the PDF passed to startSetBookmarkInfo) and bookmark (0...(n - 1)). @arg {pdf} pdf PDF document @arg {number} n serial number @return {number} bookmark page */ function getBookmarkPage(pdf, n) {} /** Returns the text of bookmark (0...(n - 1)). @arg {number} n serial number @return {string} bookmark text */ function getBookmarkText(n) {} /** True if the bookmark is open. @arg {number} n serial number @return {boolean} open status */ function getBookmarkOpenStatus(n) {} /** Ends the bookmark retrieval process, cleaning up. */ function endGetBookmarkInfo() {} /** Starts the bookmark setting process for n bookmarks. @arg {number} n number of bookmarks required */ function startSetBookmarkInfo(n) {} /** Set bookmark level for the given bookmark (0...(n - 1)). @arg {number} n serial number @arg {number} level bookmark level */ function setBookmarkLevel(n, level) {} /** Sets the bookmark target page for the given PDF (which must be the same as the PDF to be passed to endSetBookmarkInfo) and bookmark (0...(n - 1)). @arg {pdf} pdf PDF document @arg {number} n serial number @arg {number} targetpage target page */ function setBookmarkPage(pdf, n, targetpage) {} /** Sets the open status of bookmark (0...(n - 1)). @arg {number} n serial number @arg {boolean} status open status */ function setBookmarkOpenStatus(n, status) {} /** Sets the text of bookmark (0...(n - 1)). @arg {number} n serial number @arg {string} text bookmark text */ function setBookmarkText(n, text) {} /** Ends the bookmark setting process, writing the bookmarks to the given PDF. @arg {pdf} pdf PDF document */ function endSetBookmarkInfo(pdf) {} /** Returns the bookmark data in JSON format. @arg {pdf} pdf PDF document @result {Uint8Array} result as a byte array */ function getBookmarksJSON(pdf) {} /** Sets the bookmarks from JSON bookmark data. @arg {pdf} pdf PDF document @arg {Uint8Array} byte array of JSON bookmark data */ function setBookmarksJSON(pdf, data) {} /** Typesets a table of contents from existing bookmarks and prepends it to the document. If bookmark is set, the table of contents gets its own bookmark. @arg {pdf} pdf PDF document @arg {font} font font @arg {number} fontsize font size @arg {string} title title @arg {boolean} bookmark table of contents gets its own bookmark */ function tableOfContents(pdf, font, fontsize, title, bookmark) {} cpdf-2.8.1/html_manual/javascriptsplits/c17.tex0000664000175000017500000000210514771516640020151 0ustar johnjohn// CHAPTER 16. Optional Content Groups /** Begins retrieving optional content group names. The number of entries is returned. @arg {pdf} pdf PDF document @return {number} number of entries */ function startGetOCGList(pdf) {} /** Retrieves an OCG name, given its serial number 0..n - 1. @arg {number} n serial number @return {string} OCG name */ function ocgListEntry(n) {} /** Ends retrieval of optional content group names. */ function endGetOCGList() {} /** Renames an optional content group. @arg {pdf} pdf PDF document @arg {string} name_from source name @arg {string} name_to destination name */ function ocgRename(pdf, name_from, name_to) {} /** Ensures that every optional content group appears in the OCG order list. @arg {pdf} pdf PDF document */ function ocgOrderAll(pdf) {} /** Coalesces optional content groups. For example, if we merge or stamp two files both with an OCG called "Layer 1", we will have two different optional content groups. This function will merge the two into a single optional content group. @arg {pdf} pdf PDF document */ function ocgCoalesce(pdf) {} cpdf-2.8.1/html_manual/javascriptsplits/c04.tex0000664000175000017500000001443714771516640020160 0ustar johnjohn// CHAPTER 3. Pages /** Scales the page dimensions and content by the given scale, about (0, 0). Other boxes (crop etc. are altered as appropriate) @arg {pdf} pdf PDF document @arg {range} range page range @arg {number} sx x scale @arg {number} sy y scale */ function scalePages(pdf, range, sx, sy) {} /** Scales the content to fit new page dimensions (width x height) multiplied by scale (typically 1.0). Other boxes (crop etc. are altered as appropriate). @arg {pdf} pdf PDF document @arg {range} range page range @arg {number} sx x scale @arg {number} sy y scale @arg {number} scale scale */ function scaleToFit(pdf, range, sx, sy, scale) {} /** A0 Portrait paper */ var a0portrait = 0; /** A1 Portrait paper */ var a1portrait = 1; /** A2 Portrait paper */ var a2portrait = 2; /** A3 Portrait paper */ var a3portrait = 3; /** A4 Portrait paper */ var a4portrait = 4; /** A5 Portrait paper */ var a5portrait = 5; /** A0 Landscape paper */ var a0landscape = 6; /** A1 Landscape paper */ var a1landscape = 7; /** A2 Landscape paper */ var a2landscape = 8; /** A3 Landscape paper */ var a3landscape = 9; /** A4 Landscape paper */ var a4landscape = 10; /** A5 Landscape paper */ var a5landscape = 11; /** US Letter Portrait paper */ var usletterportrait = 12; /** US Letter Landscape paper */ var usletterlandscape = 13; /** US Legal Portrait paper */ var uslegalportrait = 14; /** US Legal Landscape paper */ var uslegallandscape = 15; /** Scales the page content to fit the given page size, possibly multiplied by scale (typically 1.0) @arg {pdf} pdf PDF document @arg {range} range page range @arg {"paper size"} papersize paper size @arg {number} s scale */ function scaleToFitPaper(pdf, range, papersize, s) {} /** Positions on the page. Used for scaling about a point, and adding text. A position is an anchor and zero or one or two parameters. posCentre: Two parameters, x and y
    posLeft: Two parameters, x and y
    posRight: Two parameters, x and y
    top: One parameter - distance from top
    topLeft: One parameter - distance from top left
    topRight: One parameter - distance from top right
    left: One parameter - distance from left middle
    bottomLeft: One parameter - distance from bottom left
    bottom: One parameter - distance from bottom
    bottomRight: One parameter - distance from bottom right
    right: One parameter - distance from right
    diagonal: Zero parameters
    reverseDiagonal: Zero parameters */ /** Absolute centre */ var posCentre = 0; /** Absolute left */ var posLeft = 1; /** Absolute right */ var posRight = 2; /** The top centre of the page */ var top = 3; /** The top left of the page */ var topLeft = 4; /** The top right of the page */ var topRight = 5; /** The left hand side of the page, halfway down */ var left = 6; /** The bottom left of the page */ var bottomLeft = 7; /** The bottom middle of the page */ var bottom = 8; /** The bottom right of the page */ var bottomRight = 9; /** The right hand side of the page, halfway down */ var right = 10; /** Diagonal, bottom left to top right */ var diagonal = 11; /** Diagonal, top left to bottom right */ var reversediagonal = 12; /** Scales the contents of the pages in the range about the point given by the position, by the scale given. @arg {pdf} pdf PDF document @arg {range} range page range @arg {anchor} anchor anchor to scale contents about @arg {number} p1 position argument 1 @arg {number} p2 position argument 2 @arg {number} scale scale */ function scaleContents(pdf, range, anchor, p1, p2, scale) {} /** Shifts the content of the pages in the range. @arg {pdf} pdf PDF document @arg {range} range page range @arg {number} dx x shift @arg {number} dy y shift */ function shiftContents(pdf, range, dx, dy) {} /** Changes the viewing rotation to an absolute value. Appropriate rotations are 0, 90, 180, 270. @arg {pdf} pdf PDF document @arg {range} range page range @arg {number} rotation rotation */ function rotate(pdf, range, rotation) {} /** Rotates the content about the centre of the page by the given number of degrees, in a clockwise direction. Appropriate rotations are 0, 90, 180, 270. @arg {pdf} pdf PDF document @arg {range} range page range @arg {number} rotation rotation */ function rotateBy(pdf, range, rotation) {} /** Rotates the content about the centre of the page by the given number of degrees, in a clockwise direction. @arg {pdf} pdf PDF document @arg {range} range page range @arg {number} angle angle */ function rotateContents(pdf, range, angle) {} /** Changes the viewing rotation of the pages in the range, counter-rotating the dimensions and content such that there is no visual change. @arg {pdf} pdf PDF document @arg {range} range page range */ function upright(pdf, range) {} /** Flips horizontally the pages in the range. @arg {pdf} pdf PDF document @arg {range} range page range */ function hFlip(pdf, range) {} /** Flips vertically the pages in the range. @arg {pdf} pdf PDF document @arg {range} range page range */ function vFlip(pdf, range) {} /** Crops a page, replacing any existing crop box. The dimensions are in points. @arg {pdf} pdf PDF document @arg {range} range page range @arg {number} x x position @arg {number} y y position @arg {number} w width @arg {number} h height */ function crop(pdf, range, x, y, w, h) {} /** Removes any crop box from pages in the range. @arg {pdf} pdf PDF document @arg {range} range page range */ function removeCrop(pdf, range) {} /** Removes any trim box from pages in the range. @arg {pdf} pdf PDF document @arg {range} range page range */ function removeTrim(pdf, range) {} /** Removes any art box from pages in the range. @arg {pdf} pdf PDF document @arg {range} range page range */ function removeArt(pdf, range) {} /** Removes any bleed box from pages in the range. @arg {pdf} pdf PDF document @arg {range} range page range */ function removeBleed(pdf, range) {} /** Adds trim marks to the given pages, if the trimbox exists. @arg {pdf} pdf PDF document @arg {range} range page range */ function trimMarks(pdf, range) {} /** Shows the boxes on the given pages, for debug. @arg {pdf} pdf PDF document @arg {range} range page range */ function showBoxes(pdf, range) {} /** Makes a given box a 'hard box' i.e clips it explicitly. @arg {pdf} pdf PDF document @arg {range} range page range @arg {string} boxname box name */ function hardBox(pdf, range, boxname) {} cpdf-2.8.1/html_manual/javascriptsplits/c00.tex0000664000175000017500000000215514771516640020146 0ustar johnjohn// CHAPTER -1: Introduction /** Use --- coherentpdf.js can be used from both node and the browser. The file `cpdflibtest.js` uses every function in coherentpdf.js. Call `./run` to run it in node. For development server-side with node: `coherentpdf.js` (minified version `coherentpdf.min.js`). Load with `const coherentpdf = require('coherentpdf')` if installed in npm, or `const coherentpdf = require('./coherentpdf.js')` to load from current directory. For development client-side with the browser : `coherentpdf.browser.js` (minified version for deployment : `coherentpdf.browser.min.js`). Load with `` or similar. Data types ---------- Arguments are numbers, strings, or arrays (of type UInt8Array for data). Page ranges are represented by arrays of numbers. Memory Management ----------------- A PDF p must be explicitly deallocated with deletePdf(p). Errors ------ Any function may raise an exception, containing a string describing the problem. Concurrency ----------- coherentpdf.js is synchronous and non-re-entrant. In the browser, best used in a worker. **/ cpdf-2.8.1/html_manual/javascriptsplits/c09.tex0000664000175000017500000001133214771516640020154 0ustar johnjohn// CHAPTER 8. Logos, Watermarks and Stamps /** Stamps stamp_pdf on all the pages in the document which are in the range. The stamp is placed with its origin at the origin of the target document. @arg {pdf} stamp_pdf stamp @arg {pdf} pdf PDF document @arg {range} range page range */ function stampOn(stamp_pdf, pdf, range) {} /** Stamps stamp_pdf under all the pages in the document which are in the range. The stamp is placed with its origin at the origin of the target document. @arg {pdf} stamp_pdf stamp @arg {pdf} pdf PDF document @arg {range} range page range */ function stampUnder(stamp_pdf, pdf, range) {} /** A stamping function with extra features. @arg {pdf} pdf first PDF document @arg {pdf} pdf second PDF document @arg {boolean} isover pdf goes over pdf2, otherwise under @arg {boolean} scale_stamp_to_fit scales the stamp to fit the page @arg {anchor} anchor for position of stamp @arg {number} p1 position argument 1 @arg {number} p2 position argument 2 @arg {boolean} relative_to_cropbox pos is relative to cropbox not mediabox. */ function stampExtended(pdf, pdf2, range, isover, scale_stamp_to_fit, position, relative_to_cropbox) {} /** Combines the PDFs page-by-page, putting each page of 'over' over each page of 'under'. @arg {pdf} under PDF document @arg {pdf} over PDF document @result {pdf} resultant PDF document */ function combinePages(under, over) {} /** Times Roman */ var timesRoman = 0; /** Times Bold */ var timesBold = 1; /** Times Italic */ var timesItalic = 2; /** Times Bold Italic */ var timesBoldItalic = 3; /** Helvetica */ var helvetica = 4; /** Helvetica Bold */ var helveticaBold = 5; /** Helvetica Oblique */ var helveticaOblique = 6; /** Helvetica Bold Oblique */ var helveticaBoldOblique = 7; /** Courier */ var courier = 8; /** Courier Bold */ var courierBold = 9; /** Courier Oblique */ var courierOblique = 10; /** Courier Bold Oblique */ var courierBoldOblique = 11; /** Left justify */ var leftJustify = 0; /** Centre justify */ var centreJustify = 1; /** Right justify */ var rightJustify = 2; /** Adds text to the pages in the given range. @arg {boolean} metrics collect metrics only @arg {pdf} pdf PDF document @arg {range} range page range @arg {string} text text to add \\n for newline @arg {anchor} anchor anchor to add text at @arg {number} p1 position argument 1 @arg {number} p2 position argument 2 @arg {number} linespacing line spacing @arg {number} bates starting bates number @arg {font} font font @arg {number} fontsize font size @arg {number} r red component of colour 0..1 @arg {number} g green component of colour 0..1 @arg {number} b blue component of colour 0..1 @arg {boolean} underneath put text under the page rather than over @arg {boolean} relative_to_cropbox position is relative to crop box not media box @arg {boolean} outline text is outline @arg {number} opacity opacity 0..1 @arg {justification} justification justification @arg {boolean} midline position is relative to midline not baseline @arg {boolean} topline position is relative to topline not baseline @arg {string} filename file name @arg {number} linewidth line width @arg {boolean} embed_fonts add font information */ function addText(metrics, pdf, range, text, anchor, p1, p2, linespacing, bates, font, fontsize, r, g, b, underneath, relative_to_cropbox, outline, opacity, justification, midline, topline, filename, linewidth, embed_fonts) {} /** Adds text with most parameters default. @arg {pdf} pdf PDF document @arg {range} range page range @arg {string} text text to add. \\n for newline @arg {anchor} anchor anchor to add text at @arg {number} p1 position argument 1 @arg {number} p2 position argument 2 @arg {font} font font @arg {number} fontsize font size */ function addTextSimple(pdf, range, text, anchor, p1, p2, font, fontsize) {} /** Removes any text added by cpdf from the given pages. @arg {pdf} pdf PDF document @arg {range} range page range */ function removeText(pdf, range) {} /** Returns the width of a given string in the given font in thousandths of a point. @arg {font} font font @arg {string} text text @result {number} width */ function textWidth(font, text) {} /** Adds page content before (if true) or after (if false) the existing content to pages in the given range in the given PDF. @arg {string} content content to add @arg {boolean} before rather than after @arg {pdf} pdf PDF document @arg {range} range page range */ function addContent(content, before, pdf, range) {} /** Stamps stamp_pdf onto the pages in the given range in pdf as a shared Form XObject. The name of the newly-created XObject is returned. @arg {pdf} pdf PDF document @arg {range} range page range @arg {pdf} stamp_pdf stamp pdf @result {string} name of XObject */ function stampAsXObject(pdf, range, stamp_pdf) {} cpdf-2.8.1/html_manual/javascriptsplits/c12.tex0000664000175000017500000004175314771516640020160 0ustar johnjohn// CHAPTER 11. Document Information and Metadata /** Finds out if a document is linearized as quickly as possible without loading it. @arg {string} filename file name @result {boolean} true if linearized */ function isLinearized(filename) {} /** Finds out if a document in memory is linearized as quickly as possible without loading it. @arg {Uint8Array} PDF file as a byte array @result {boolean} true if linearized */ function isLinearizedMemory(data) {} /** Returns the minor version number of a document. @arg {pdf} pdf PDF document @return {number} version number */ function getVersion(pdf) {} /** Returns the major version number of a document. @arg {pdf} pdf PDF document @return {number} major version number */ function getMajorVersion(pdf) {} /** Returns the title of a document. @arg {pdf} pdf PDF document @return {string} title */ function getTitle(pdf) {} /** Returns the author of a document. @arg {pdf} pdf PDF document @return {string} author */ function getAuthor(pdf) {} /** Returns the subject of a document. @arg {pdf} pdf PDF document @return {string} subject */ function getSubject(pdf) {} /** Returns the keywords of a document. @arg {pdf} pdf PDF document @return {string} keywords */ function getKeywords(pdf) {} /** Returns the creator of a document. @arg {pdf} pdf PDF document @return {string} creator */ function getCreator(pdf) {} /** Returns the producer of a document. @arg {pdf} pdf PDF document @return {string} producer */ function getProducer(pdf) {} /** Returns the creation date of a document. @arg {pdf} pdf PDF document @return {string} creation date */ function getCreationDate(pdf) {} /** Returns the modification date of a document. @arg {pdf} pdf PDF document @return {string} modification date */ function getModificationDate(pdf) {} /** Returns the XMP title of a document. @arg {pdf} pdf PDF document @return {string} XMP title */ function getTitleXMP(pdf) {} /** Returns the XMP author of a document. @arg {pdf} pdf PDF document @return {string} XMP author */ function getAuthorXMP(pdf) {} /** Returns the XMP subject of a document. @arg {pdf} pdf PDF document @return {string} XMP subject */ function getSubjectXMP(pdf) {} /** Returns the XMP keywords of a document. @arg {pdf} pdf PDF document @return {string} XMP keywords */ function getKeywordsXMP(pdf) {} /** Returns the XMP creator of a document. @arg {pdf} pdf PDF document @return {string} XMP creator */ function getCreatorXMP(pdf) {} /** Returns the XMP producer of a document. @arg {pdf} pdf PDF document @return {string} XMP producer */ function getProducerXMP(pdf) {} /** Returns the XMP creation date of a document. @arg {pdf} pdf PDF document @return {string} XMP creation date */ function getCreationDateXMP(pdf) {} /** Returns the XMP modification date of a document. @arg {pdf} pdf PDF document @return {string} XMP modification date */ function getModificationDateXMP(pdf) {} /** Sets the title of a document. @arg {pdf} pdf PDF document @arg {string} s title */ function setTitle(pdf, s) {} /** Sets the author of a document. @arg {pdf} pdf PDF document @arg {string} s author */ function setAuthor(pdf, s) {} /** Sets the subject of a document. @arg {pdf} pdf PDF document @arg {string} s subject */ function setSubject(pdf, s) {} /** Sets the keywords of a document. @arg {pdf} pdf PDF document @arg {string} s keywords */ function setKeywords(pdf, s) {} /** Sets the creator of a document. @arg {pdf} pdf PDF document @arg {string} s creator */ function setCreator(pdf, s) {} /** Sets the producer of a document. @arg {pdf} pdf PDF document @arg {string} s producer */ function setProducer(pdf, s) {} /** Sets the creation date of a document. @arg {pdf} pdf PDF document @arg {string} s creation date */ function setCreationDate(pdf, s) {} /** Sets the modification date of a document. @arg {pdf} pdf PDF document @arg {string} s modification date */ function setModificationDate(pdf, s) {} /** Sets the XMP title of a document. @arg {pdf} pdf PDF document @arg {string} s XMP title */ function setTitleXMP(pdf, s) {} /** Sets the XMP author of a document. @arg {pdf} pdf PDF document @arg {string} s XMP author */ function setAuthorXMP(pdf, s) {} /** Sets the XMP author of a document. @arg {pdf} pdf PDF document @arg {string} s XMP subject */ function setSubjectXMP(pdf, s) {} /** Sets the XMP keywords of a document. @arg {pdf} pdf PDF document @arg {string} s XMP keywords */ function setKeywordsXMP(pdf, s) {} /** Sets the XMP creator of a document. @arg {pdf} pdf PDF document @arg {string} s XMP creator */ function setCreatorXMP(pdf, s) {} /** Sets the XMP producer of a document. @arg {pdf} pdf PDF document @arg {string} s XMP producer */ function setProducerXMP(pdf, s) {} /** Sets the XMP creation date of a document. @arg {pdf} pdf PDF document @arg {string} s XMP creation date */ function setCreationDateXMP(pdf, s) {} /** Sets the XMP modification date of a document. @arg {pdf} pdf PDF document @arg {string} s XMP modification date */ function setModificationDateXMP(pdf, s) {} /** Returns the components from a PDF date string. @arg {string} string date string @return {"array of numbers"} date components */ function getDateComponents(string) {} /** Builds a PDF date string from individual components. @arg {number} y year @arg {number} m month @arg {number} d day @arg {number} h hour @arg {number} min minute @arg {number} sec second @arg {number} hour_offset hour offset @arg {number} minute_offset minute offset @return {string} date string */ function dateStringOfComponents(y, m, d, h, min, sec, hour_offset, minute_offset) {} /** Gets the viewing rotation for a given page. @arg {pdf} pdf PDF document @arg {number} page page number @result {number} page rotation */ function getPageRotation(pdf, page) {} /** Returns true if that page has the given box. E.g "/CropBox". @arg {pdf} pdf PDF document @arg {number} page page number @arg {string} box box name @result {boolean} true if box present */ function hasBox(pdf, page, box) {} /** These functions get a box given the document, page number, min x, max x, min y, max y in points. Only succeeds if such a box exists, as checked by hasBox. @arg {pdf} pdf PDF document @arg {number} pagenumber page number @return {"array of numbers"} media box */ function getMediaBox(pdf, pagenumber) {} /** These functions get a box given the document, page number, min x, max x, min y, max y in points. Only succeeds if such a box exists, as checked by hasBox. @arg {pdf} pdf PDF document @arg {number} pagenumber page number @return {"array of numbers"} crop box */ function getCropBox(pdf, pagenumber) {} /** These functions get a box given the document, page number, min x, max x, min y, max y in points. Only succeeds if such a box exists, as checked by hasBox. @arg {pdf} pdf PDF document @arg {number} pagenumber page number @return {"array of numbers"} art box */ function getArtBox(pdf, pagenumber) {} /** These functions get a box given the document, page number, min x, max x, min y, max y in points. Only succeeds if such a box exists, as checked by hasBox. @arg {pdf} pdf PDF document @arg {number} pagenumber page number @return {"array of numbers"} bleed box */ function getBleedBox(pdf, pagenumber) {} /** These functions get a box given the document, page number, min x, max x, min y, max y in points. Only succeeds if such a box exists, as checked by hasBox. @arg {pdf} pdf PDF document @arg {number} pagenumber page number @return {"array of numbers"} trim box */ function getTrimBox(pdf, pagenumber) {} /** These functions set a box given the document, page range, min x, max x, min y, max y in points. @arg {pdf} pdf PDF document @arg {range} range page range @arg {number} minx min x @arg {number} maxx max x @arg {number} minx min y @arg {number} maxx max y */ function setMediabox(pdf, range, minx, maxx, miny, maxy) {} /** These functions set a box given the document, page range, min x, max x, min y, max y in points. @arg {pdf} pdf PDF document @arg {range} range page range @arg {number} minx min x @arg {number} maxx max x @arg {number} minx min y @arg {number} maxx max y */ function setCropBox(pdf, range, minx, maxx, miny, maxy) {} /** These functions set a box given the document, page range, min x, max x, min y, max y in points. @arg {pdf} pdf PDF document @arg {range} range page range @arg {number} minx min x @arg {number} maxx max x @arg {number} minx min y @arg {number} maxx max y */ function setTrimBox(pdf, range, minx, maxx, miny, maxy) {} /** These functions set a box given the document, page range, min x, max x, min y, max y in points. @arg {pdf} pdf PDF document @arg {range} range page range @arg {number} minx min x @arg {number} maxx max x @arg {number} minx min y @arg {number} maxx max y */ function setBleedBox(pdf, range, minx, maxx, miny, maxy) {} /** These functions set a box given the document, page range, min x, max x, min y, max y in points. @arg {pdf} pdf PDF document @arg {range} range page range @arg {number} minx min x @arg {number} maxx max x @arg {number} minx min y @arg {number} maxx max y */ function setArtBox(pdf, range, minx, maxx, miny, maxy) {} /** Marks a document as trapped. @arg {pdf} pdf PDF document */ function markTrapped(pdf) {} /** Marks a document as untrapped. @arg {pdf} pdf PDF document */ function markUntrapped(pdf) {} /** Marks a document as trapped in XMP metadata. @arg {pdf} pdf PDF document */ function markTrappedXMP(pdf) {} /** Marks a document as untrapped in XMP metadata. @arg {pdf} pdf PDF document */ function markUntrappedXMP(pdf) {} /** Single page */ var singlePage = 0; /** One column */ var oneColumn = 1; /** Two column left */ var twoColumnLeft = 2; /** Two column right */ var twoColumnRight = 3; /** Two page left */ var twoPageLeft = 4; /** Two page right */ var twoPageRight = 5; /** Sets the page layout for a document. @arg {pdf} pdf PDF document @arg {layout} layout page layout */ function setPageLayout(pdf, layout) {} /** Use none */ var useNone = 0; /** Use outlines */ var useOutlines = 1; /** Use thumbs */ var useThumbs = 2; /** Use OC */ var useOC = 3; /** Use attachments */ var useAttachments = 4; /** Sets the page mode for a document. @arg {pdf} pdf PDF document @arg {mode} mode page mode */ function setPageMode(pdf, mode) {} /** Sets the hide toolbar flag. @arg {pdf} pdf PDF document @arg {boolean} flag hide toolbar */ function hideToolbar(pdf, flag) {} /** Sets the hide menubar flag. @arg {pdf} pdf PDF document @arg {boolean} flag hide menubar */ function hideMenubar(pdf, flag) {} /** Sets the hide window UI flag. @arg {pdf} pdf PDF document @arg {boolean} flag hide UI */ function hideWindowUi(pdf, flag) {} /** Sets the fit window flag. @arg {pdf} pdf PDF document @arg {boolean} flag fit window */ function fitWindow(pdf, flag) {} /** Sets the center window flag. @arg {pdf} pdf PDF document @arg {boolean} flag center window */ function centerWindow(pdf, flag) {} /** Sets the display doc title flag. @arg {pdf} pdf PDF document @arg {boolean} flag display doc title */ function displayDocTitle(pdf, flag) {} /** Sets the PDF to open, possibly with zoom-to-fit, at the given page number. @arg {pdf} pdf PDF document @arg {boolean} fit zoom-to-fit @arg {number} pagenumber page number */ function openAtPage(pdf, fit, pagenumber) {} /** Sets the XMP metadata of a document, given a file name. @arg {pdf} pdf PDF document @arg {string} filename file name */ function setMetadataFromFile(pdf, filename) {} /** Sets the XMP metadata from an array of bytes. @arg {pdf} pdf PDF document @arg {Uint8Array} data XMP metadata as an array of bytes */ function setMetadataFromByteArray(pdf, data) {} /** Removes the XMP metadata from a document. @arg {pdf} pdf PDF document */ function removeMetadata(pdf) {} /** Returns the XMP metadata from a document. @arg {pdf} pdf PDF document @result {Uint8Array} XMP metadata as a byte array */ function getMetadata(pdf) {} /** Builds fresh XMP metadata as best it can from existing metadata in the document. @arg {pdf} pdf PDF document */ function createMetadata(pdf) {} /** Sets the metadata date for a PDF. The date is given in PDF date format -- cpdf will convert it to XMP format. The date 'now' means now. */ function setMetadataDate(pdf, date) {} /** 1, 2, 3... */ var decimalArabic = 0; /** I, II, III... */ var uppercaseRoman = 1; /** i, ii, iii... */ var lowercaseRoman = 2; /** A, B, C... */ var uppercaseLetters = 3; /** a, b, c... */ var lowercaseLetters = 4; /** Adds page labels. The prefix is prefix text for each label. The range is the page range the labels apply to. Offset can be used to shift the numbering up or down. @arg {pdf} pdf PDF document @arg {style} style page label style @arg {string} prefix label prefix @arg {number} offset offset @arg {range} range page range @arg {boolean} progress labels progress */ function addPageLabels(pdf, style, prefix, offset, range, progress) {} /** Removes the page labels from the document. @arg {pdf} pdf PDF document */ function removePageLabels(pdf) {} /** Calculates the full label string for a given page, and returns it. @arg {pdf} pdf PDF document @arg {number} pagenumber page number @result {string} page label string */ function getPageLabelStringForPage(pdf, pagenumber) {} /** Gets page label data. Call startGetPageLabels to find out how many there are, then use these serial numbers to get the style, prefix, offset and start value (note not a range). Call endGetPageLabels to clean up.

    For example, a document might have five pages of introduction with roman numerals, followed by the rest of the pages in decimal arabic, numbered from one:

    labelstyle = LowercaseRoman
    labelprefix = ""
    startpage = 1
    startvalue = 1

    labelstyle = DecimalArabic
    labelprefix = ""
    startpage = 6
    startvalue = 1
    @arg {pdf} pdf PDF document @result {number} number of page labels */ function startGetPageLabels(pdf) {} /** Gets page label data. Call startGetPageLabels to find out how many there are, then use these serial numbers to get the style, prefix, offset and start value (note not a range). Call endGetPageLabels to clean up.

    For example, a document might have five pages of introduction with roman numerals, followed by the rest of the pages in decimal arabic, numbered from one:

    labelstyle = LowercaseRoman
    labelprefix = ""
    startpage = 1
    startvalue = 1

    labelstyle = DecimalArabic
    labelprefix = ""
    startpage = 6
    startvalue = 1
    @arg {number} n serial number @result {"label style"} page label style */ function getPageLabelStyle(n) {} /** Gets page label data. Call startGetPageLabels to find out how many there are, then use these serial numbers to get the style, prefix, offset and start value (note not a range). Call endGetPageLabels to clean up.

    For example, a document might have five pages of introduction with roman numerals, followed by the rest of the pages in decimal arabic, numbered from one:

    labelstyle = LowercaseRoman
    labelprefix = ""
    startpage = 1
    startvalue = 1

    labelstyle = DecimalArabic
    labelprefix = ""
    startpage = 6
    startvalue = 1
    @arg {number} n serial number @result {string} page label prefix */ function getPageLabelPrefix(n) {} /** Gets page label data. Call startGetPageLabels to find out how many there are, then use these serial numbers to get the style, prefix, offset and start value (note not a range). Call endGetPageLabels to clean up.

    For example, a document might have five pages of introduction with roman numerals, followed by the rest of the pages in decimal arabic, numbered from one:

    labelstyle = LowercaseRoman
    labelprefix = ""
    startpage = 1
    startvalue = 1

    labelstyle = DecimalArabic
    labelprefix = ""
    startpage = 6
    startvalue = 1
    @arg {number} n serial number @result {number} page label offset */ function getPageLabelOffset(n) {} /** Gets page label data. Call startGetPageLabels to find out how many there are, then use these serial numbers to get the style, prefix, offset and start value (note not a range). Call endGetPageLabels to clean up.

    For example, a document might have five pages of introduction with roman numerals, followed by the rest of the pages in decimal arabic, numbered from one:

    labelstyle = LowercaseRoman
    labelprefix = ""
    startpage = 1
    startvalue = 1

    labelstyle = DecimalArabic
    labelprefix = ""
    startpage = 6
    startvalue = 1
    @arg {number} n serial number @result {number} page label range */ function getPageLabelRange(n) {} /** Gets page label data. Call startGetPageLabels to find out how many there are, then use these serial numbers to get the style, prefix, offset and start value (note not a range). Call endGetPageLabels to clean up.

    For example, a document might have five pages of introduction with roman numerals, followed by the rest of the pages in decimal arabic, numbered from one:

    labelstyle = LowercaseRoman
    labelprefix = ""
    startpage = 1
    startvalue = 1

    labelstyle = DecimalArabic
    labelprefix = ""
    startpage = 6
    startvalue = 1
    */ function endGetPageLabels() {} cpdf-2.8.1/html_manual/javascriptsplits/c06.tex0000664000175000017500000000064314771516640020154 0ustar johnjohn// CHAPTER 5. Compression /** Compresses any uncompressed streams in the given PDF using the Flate algorithm. @arg {pdf} pdf PDF document */ function compress(pdf) {} /** Decompresses any streams in the given PDF, so long as the compression method is supported. @arg {pdf} pdf PDF document */ function decompress(pdf) {} /** Squeezes a pdf in memory. @arg {pdf} pdf PDF document */ function squeezeInMemory(pdf) {} cpdf-2.8.1/html_manual/javascriptsplits/c11.tex0000664000175000017500000000030714771516640020145 0ustar johnjohn// CHAPTER 10. Annotations /** Returns the annotations from a PDF in JSON format. @arg {pdf} pdf PDF document @return {Uint8Array} results as an array of bytes */ function annotationsJSON(pdf) {} cpdf-2.8.1/html_manual/javascriptsplits/c19.tex0000664000175000017500000000565514771516640020170 0ustar johnjohn//CHAPTER 18. Miscellaneous /** Removes images on the given pages, replacing them with crossed boxes if 'boxes' is true. @arg {pdf} pdf PDF document @arg {range} range page range @arg {boolean} boxes replace with crossed boxes */ function draft(pdf, range, boxes) {} /** Removes all text from the given pages in a given document. @arg {pdf} pdf PDF document @arg {range} range page range */ function removeAllText(pdf, range) {} /* Blackens all text on the given pages. @arg {pdf} pdf PDF document @arg {range} range page range */ function blackText(pdf, range) {} /** Blackens all lines on the given pages. @arg {pdf} pdf PDF document @arg {range} range page range */ function blackLines(pdf, range) {} /** Blackens all fills on the given pages. @arg {pdf} pdf PDF document @arg {range} range page range */ function blackFills(pdf, range) {} /** Thickens every line less than min_thickness to min_thickness. Thickness given in points. @arg {pdf} pdf PDF document @arg {range} range page range @arg {number} min_thickness minimum required thickness */ function thinLines(pdf, range, min_thickness) {} /** Copies the /ID from one document to another. @arg {pdf} pdf_from source document @arg {pdf} pdf_to destination document */ function copyId(pdf_from, pdf_to) {} /** Removes a document's /ID. @arg {pdf} pdf PDF document */ function removeId(pdf) {} /** Sets the minor version number of a document. @arg {pdf} pdf PDF document @arg {number} version */ function setVersion(pdf, version) {} /** Sets the full version number of a document. @arg {pdf} pdf PDF document @arg {number} major version @arg {number} minor version */ function setFullVersion(pdf, major, minor) {} /** Removes any dictionary entry with the given key anywhere in the document. @arg {pdf} pdf PDF document @arg {string} key key to remove */ function removeDictEntry(pdf, key) {} /** Removes any dictionary entry with the given key whose value matches the given search term. @arg {pdf} pdf PDF document @arg {string} key key to remove @arg {string} searchterm search term */ function removeDictEntrySearch(pdf, key, searchterm) {} /** Replaces the value associated with the given key. @arg {pdf} pdf PDF document @arg {string} key key to remove @arg {string} newval new value */ function replaceDictEntry(pdf, key, newval) {} /** Replaces the value associated with the given key if the existing value matches the search term. @arg {pdf} pdf PDF document @arg {string} key key to remove @arg {string} newval new value @arg {string} searchterm search term */ function replaceDictEntrySearch(pdf, key, newval, searchterm) {} /** Removes all clipping from pages in the given range. @arg {pdf} pdf PDF document @arg {range} range page range */ function removeClipping(pdf, range) {} /* Returns a JSON array containing any and all values associated with the given key. @arg {pdf} pdf PDF docment @arg {string} key key @return {Uint8Array} results as an array of bytes */ function getDictEntries(pdf, key) {} cpdf-2.8.1/html_manual/javascriptsplits/c05.tex0000664000175000017500000000003214771516640020143 0ustar johnjohn// CHAPTER 4. Encryption cpdf-2.8.1/html_manual/javascriptsplits/c15.tex0000664000175000017500000000621214771516640020152 0ustar johnjohn// CHAPTER 14. Fonts. /** Retrieves font information. First, call startGetFontInfo(pdf). Now call numberFonts to return the number of fonts. For each font, call one or more of getFontPage, getFontName, getFontType, and getFontEncoding giving a serial number 0..n - 1 to return information. Finally, call endGetFontInfo to clean up. @ {pdf} pdf PDF document */ function startGetFontInfo(pdf) {} /** Retrieves font information. First, call startGetFontInfo(pdf). Now call numberFonts to return the number of fonts. For each font, call one or more of getFontPage, getFontName, getFontType, and getFontEncoding giving a serial number 0..n - 1 to return information. Finally, call endGetFontInfo to clean up. @result {number} number of fonts */ function numberFonts() {} /** Retrieves font information. First, call startGetFontInfo(pdf). Now call numberFonts to return the number of fonts. For each font, call one or more of getFontPage, getFontName, getFontType, and getFontEncoding giving a serial number 0..n - 1 to return information. Finally, call endGetFontInfo to clean up. @arg {number} n serial number @return {number} page number */ function getFontPage(n) {} /** Retrieves font information. First, call startGetFontInfo(pdf). Now call numberFonts to return the number of fonts. For each font, call one or more of getFontPage, getFontName, getFontType, and getFontEncoding giving a serial number 0..n - 1 to return information. Finally, call endGetFontInfo to clean up. @arg {number} n serial number @return {string} font name */ function getFontName(n) {} /** Retrieves font information. First, call startGetFontInfo(pdf). Now call numberFonts to return the number of fonts. For each font, call one or more of getFontPage, getFontName, getFontType, and getFontEncoding giving a serial number 0..n - 1 to return information. Finally, call endGetFontInfo to clean up. @arg {number} n serial number @return {string} font type */ function getFontType(n) {} /** Retrieves font information. First, call startGetFontInfo(pdf). Now call numberFonts to return the number of fonts. For each font, call one or more of getFontPage, getFontName, getFontType, and getFontEncoding giving a serial number 0..n - 1 to return information. Finally, call endGetFontInfo to clean up. @arg {number} n serial number @return {string} font encoding */ function getFontEncoding(n) {} /** Retrieves font information. First, call startGetFontInfo(pdf). Now call numberFonts to return the number of fonts. For each font, call one or more of getFontPage, getFontName, getFontType, and getFontEncoding giving a serial number 0..n - 1 to return information. Finally, call endGetFontInfo to clean up. */ function endGetFontInfo() {} /** Removes all font data from a file. @arg {pdf} pdf PDF document */ function removeFonts(pdf) {} /** Copies the given font from the given page in the 'from' PDF to every page in the range of the 'to' PDF. The new font is stored under its font name. @arg {pdf} docfrom source document @arg {pdf} docto destination document @arg {range} page range @arg {number} pagenumber source page number @arg {string} fontname font name */ function copyFont(docfrom, docto, range, pagenumber, fontname) {} cpdf-2.8.1/html_manual/javascriptsplits/c16.tex0000664000175000017500000000234114771516640020152 0ustar johnjohn// CHAPTER 15. PDF and JSON /** Outputs a PDF in JSON format to the given filename. If parse_content is true, page content is parsed. If no_stream_data is true, all stream data is suppressed entirely. If decompress_streams is true, streams are decompressed. @arg {string} filename file name @arg {boolean} parse_content parse page content @arg {boolean} no_stream_data suppress stream data @arg {boolean} decompress_streams decompress streams @arg {pdf} pdf PDF document */ function outputJSON(filename, parse_content, no_stream_data, decompress_streams, pdf) {} /** Like outputJSON, but it writes to a byte array in memory. @arg {boolean} parse_content parse page content @arg {boolean} no_stream_data suppress stream data @arg {boolean} decompress_streams decompress streams @arg {pdf} pdf PDF document @return {Uint8Array} JSON data as a byte array */ function outputJSONMemory(parse_content, no_stream_data, decompress_streams, pdf) {} /** Loads a PDF from a JSON file given its filename. @arg {string} filename file name @return {pdf} PDF document */ function fromJSON(filename) {} /** Loads a PDF from a JSON file in memory. @arg {Uint8Array} data JSON data as a byte array @return {pdf} PDF document */ function fromJSONMemory(data) {} cpdf-2.8.1/html_manual/javascriptsplits/c01.tex0000664000175000017500000000171614771516640020151 0ustar johnjohn// CHAPTER 0. Preliminaries /** Returns a string giving the version number of the CPDF library. @returns {string} version */ function version() {} /** Some operations have a fast mode. The default is 'slow' mode, which works even on old-fashioned files. For more details, see section 1.13 of the CPDF manual. This function sets the mode to fast globally. */ function setFast() {} /** Some operations have a fast mode. The default is 'slow' mode, which works even on old-fashioned files. For more details, see section 1.13 of the CPDF manual. This function sets the mode to slow globally. */ function setSlow() {} /** Delete a PDF so the memory representing it may be recovered. @arg {pdf} pdf PDF document to delete */ function deletePdf(pdf) {} /* A debug function which prints some information about resource usage. This can be used to detect if PDFs or ranges are being deallocated properly. Contrary to its name, it may be run at any time. */ function onexit() {} cpdf-2.8.1/html_manual/javascriptsplits/c03.tex0000664000175000017500000000266114771516640020153 0ustar johnjohn// CHAPTER 2. Merging and Splitting /** Given a list of PDFs, merges the files into a new one, which is returned. @arg {"array of pdfs"} pdfs array of PDF documents to merge @return {pdf} merged PDF document */ function mergeSimple(pdfs) {} /** Merges the PDFs. If retain_numbering is true page labels are not rewritten. If remove_duplicate_fonts is true, duplicate fonts are merged. This is useful when the source documents for merging originate from the same source. @arg {"array of pdfs"} pdfs array of PDF documents to merge @arg {boolean} retain_numbering keep page numbering @arg {boolean} remove_duplicate_fonts remove duplicate font data */ function merge(pdfs, retain_numbering, remove_duplicate_fonts) {} /** The same as merge, except that it has an additional argument - a list of page ranges. This is used to select the pages to pick from each PDF. This avoids duplication of information when multiple discrete parts of a source PDF are included. @arg {"array of pdfs"} pdfs array of PDF documents to merge @arg {boolean} retain_numbering keep page numbering @arg {boolean} remove_duplicate_fonts remove duplicate font data @arg {"array of arrays of numbers"} ranges page ranges, one for each input PDF */ function mergeSame(pdfs, retain_numbering, remove_duplicate_fonts, ranges) {} /** Returns a new document with just those pages in the page range. @arg {pdf} pdf PDF document @arg {range} page range */ function selectPages(pdf, r) {} cpdf-2.8.1/html_manual/javascriptsplits/c10.tex0000664000175000017500000000360314771516640020146 0ustar johnjohn// CHAPTER 9. Multipage facilities /** Imposes a PDF. There are two modes: imposing x * y, or imposing to fit a page of size x * y. This is controlled by fit. Columns imposes by columns rather than rows. rtl is right-to-left, btt bottom-to-top. Center is unused for now. Margin is the margin around the output, spacing the spacing between imposed inputs. @arg {pdf} pdf PDF document @arg {number} x (explained above) @arg {number} y (explained above) @arg {boolean} fit (explained above) @arg {boolean} rtl impose right to left @arg {boolean} btt impose bottom to top @arg {boolean} center unused @arg {number} margin margin around output pages @arg {number} spacing spacing between imposed pages @arg {number} linewidth line width */ function impose(pdf, x, y, fit, columns, rtl, btt, center, margin, spacing, linewidth) {} /** Imposes a document two up. twoUp does so by shrinking the page size, to fit two pages on one. @arg {pdf} pdf PDF document */ function twoUp(pdf) {} /** Impose a document two up. twoUpStack does so by doubling the page size, to fit two pages on one. @arg {pdf} pdf PDF document */ function twoUpStack(pdf) {} /** Adds a blank page before each page in the given range. @arg {pdf} pdf PDF document @arg {range} range page range */ function padBefore(pdf, range) {} /** Adds a blank page after every n pages. @arg {pdf} pdf PDF document @arg {range} range page range */ function padAfter(pdf, range) {} /** Adds a blank page after every n pages. @arg {pdf} pdf PDF document @arg {number} interval */ function padEvery(pdf, n) {} /** Adds pages at the end to pad the file to a multiple of n pages in length. @arg {pdf} pdf PDF document @arg {number} multiple to pad to */ function padMultiple(pdf, n) {} /** Adds pages at the beginning to pad the file to a multiple of n pages in length. @arg {pdf} pdf PDF document @arg {number} multiple to pad to */ function padMultipleBefore(pdf, n) {} cpdf-2.8.1/html_manual/javascriptsplits/c14.tex0000664000175000017500000001054614771516640020156 0ustar johnjohn//CHAPTER 13. Images /** Gets image data, including resolution at all points of use. Call startGetImageResolution(pdf, min_required_resolution) to begin the process of obtaining data on all image uses below min_required_resolution, returning the total number. So, to return all image uses, specify a very high min_required_resolution. Then, call the other functions giving a serial number 0..n - 1, to retrieve the data. Finally, call endGetImageResolution to clean up. @arg {pdf} pdf PDF document @arg {number} min_required_resolution minimum required resolution @return {number} number of uses */ function startGetImageResolution(pdf, min_required_resolution) {} /** Gets image data, including resolution at all points of use. Call startGetImageResolution(pdf, min_required_resolution) to begin the process of obtaining data on all image uses below min_required_resolution, returning the total number. So, to return all image uses, specify a very high min_required_resolution. Then, call the other functions giving a serial number 0..n - 1, to retrieve the data. Finally, call endGetImageResolution to clean up. @arg {number} n serial number @return {number} page number */ function getImageResolutionPageNumber(n) {} /** Gets image data, including resolution at all points of use. Call startGetImageResolution(pdf, min_required_resolution) to begin the process of obtaining data on all image uses below min_required_resolution, returning the total number. So, to return all image uses, specify a very high min_required_resolution. Then, call the other functions giving a serial number 0..n - 1, to retrieve the data. Finally, call endGetImageResolution to clean up. @arg {number} n serial number @return {string} image name */ function getImageResolutionImageName(n) {} /** Gets image data, including resolution at all points of use. Call startGetImageResolution(pdf, min_required_resolution) to begin the process of obtaining data on all image uses below min_required_resolution, returning the total number. So, to return all image uses, specify a very high min_required_resolution. Then, call the other functions giving a serial number 0..n - 1, to retrieve the data. Finally, call endGetImageResolution to clean up. @arg {number} n serial number @return {number} X pixels */ function getImageResolutionXPixels(n) {} /** Gets image data, including resolution at all points of use. Call startGetImageResolution(pdf, min_required_resolution) to begin the process of obtaining data on all image uses below min_required_resolution, returning the total number. So, to return all image uses, specify a very high min_required_resolution. Then, call the other functions giving a serial number 0..n - 1, to retrieve the data. Finally, call endGetImageResolution to clean up. @arg {number} n serial number @return {number} Y pixels */ function getImageResolutionYPixels(n) {} /** Gets image data, including resolution at all points of use. Call startGetImageResolution(pdf, min_required_resolution) to begin the process of obtaining data on all image uses below min_required_resolution, returning the total number. So, to return all image uses, specify a very high min_required_resolution. Then, call the other functions giving a serial number 0..n - 1, to retrieve the data. Finally, call endGetImageResolution to clean up. @arg {number} n serial number @return {number} X Res */ function getImageResolutionXRes(n) {} /** Gets image data, including resolution at all points of use. Call startGetImageResolution(pdf, min_required_resolution) to begin the process of obtaining data on all image uses below min_required_resolution, returning the total number. So, to return all image uses, specify a very high min_required_resolution. Then, call the other functions giving a serial number 0..n - 1, to retrieve the data. Finally, call endGetImageResolution to clean up. @arg {number} n serial number @return {number} Y Res */ function getImageResolutionYRes(n) {} /** Gets image data, including resolution at all points of use. Call startGetImageResolution(pdf, min_required_resolution) to begin the process of obtaining data on all image uses below min_required_resolution, returning the total number. So, to return all image uses, specify a very high min_required_resolution. Then, call the other functions giving a serial number 0..n - 1, to retrieve the data. Finally, call endGetImageResolution to clean up. */ function endGetImageResolution() {} cpdf-2.8.1/html_manual/javascriptsplits/c02.tex0000664000175000017500000003357114771516640020156 0ustar johnjohn// CHAPTER 1. Basics /** Loads a PDF file from a given file. Supply a user password (possibly blank) in case the file is encrypted. It won't be decrypted, but sometimes the password is needed just to load the file. @arg {string} filename File name @arg {string} userpw User password, or blank if none */ function fromFile(filename, userpw) {} /** Loads a PDF from a file, doing only minimal parsing. The objects will be read and parsed when they are actually needed. Use this when the whole file won't be required. Also supply a user password (possibly blank) in case the file is encrypted. It won't be decrypted, but sometimes the password is needed just to load the file. @arg {string} filename File name @arg {string} userpw User password, or blank if none */ function fromFileLazy(filename, userpw) {} /** Loads a file from memory given any user password. @arg {Uint8Array} data PDF document as an array of bytes @arg {string} userpw User password, or blank if none */ function fromMemory(data, userpw) {} /** Loads a file from memory, given a pointer and a length, and the user password, but lazily like fromFileLazy. @arg {Uint8Array} data PDF document as an array of bytes @arg {string} userpw User password, or blank if none */ function fromMemoryLazy(data, userpw) {} /** To enumerate the list of currently allocated PDFs, call startEnumeratePDFs which gives the number, n, of PDFs allocated, then enumeratePDFsInfo and enumeratePDFsKey with index numbers from 0...(n - 1). Call endEnumeratePDFs to clean up. @return {number} number of PDFs */ function startEnumeratePDFs() {} /** To enumerate the list of currently allocated PDFs, call startEnumeratePDFs which gives the number, n, of PDFs allocated, then enumeratePDFsInfo and enumeratePDFsKey with index numbers from 0...(n - 1). Call endEnumeratePDFs to clean up. @arg {n} index number @return {number} PDF key */ function enumeratePDFsKey(n) {} /** To enumerate the list of currently allocated PDFs, call startEnumeratePDFs which gives the number, n, of PDFs allocated, then enumeratePDFsInfo and enumeratePDFsKey with index numbers from 0...(n - 1). Call endEnumeratePDFs to clean up. @arg {n} index number @return {number} PDF information */ function enumeratePDFsInfo(n) {} /** To enumerate the list of currently allocated PDFs, call startEnumeratePDFs which gives the number, n, of PDFs allocated, then enumeratePDFsInfo and enumeratePDFsKey with index numbers from 0...(n - 1). Call endEnumeratePDFs to clean up. */ function endEnumeratePDFs() {} /** Converts a figure in centimetres to points (72 points to 1 inch) @arg {number} i figure in centimetres @return {number} figure in points */ function ptOfCm(i) {} /** Converts a figure in millimetres to points (72 points to 1 inch) @arg {number} i figure in millimetres @return {number} figure in points */ function ptOfMm(i) {} /** Converts a figure in inches to points (72 points to 1 inch) @arg {number} i figure in inches @return {number} figure in points */ function ptOfIn(i) {} /** Converts a figure in points to centimetres (72 points to 1 inch) @arg {number} i figure in points @return {number} figure in centimetres */ function cmOfPt(i) {} /** Converts a figure in points to millimetres (72 points to 1 inch) @arg {number} i figure in points @return {number} figure in millimetres */ function mmOfPt(i) {} /** Converts a figure in points to inches (72 points to 1 inch) @arg {number} i figure in points @return {number} figure in inches */ function inOfPt(i) {} /** Parses a page specification with reference to a given PDF (the PDF is supplied so that page ranges which reference pages which do not exist are rejected). @arg {pdf} pdf PDF document @arg {string} pagespec Page specification @return {array} page range */ function parsePagespec(pdf, pagespec) {} /** Validates a page specification so far as is possible in the absence of the actual document. Result is true if valid. @arg {string} pagespec Page specification @return {boolean} validity or otherwise of page specification */ function validatePagespec(pagespec) {} /** Builds a page specification from a page range. For example, the range containing 1,2,3,6,7,8 in a document of 8 pages might yield "1-3,6-end" @arg {pdf} pdf PDF document @arg {array} r Page range @return {string} Page specifcation */ function stringOfPagespec(pdf, r) {} /** Creates a range with no pages in. @return {array} Page range */ function blankRange() {} /** Builds a range from one page to another inclusive. For example, range(3,7) gives the range 3,4,5,6,7 @arg {number} f begining of page range @arg {number} t end of page range @return {array} page range */ function range(f, t) {} /** The range containing all the pages in a given document. @arg {pdf} pdf PDF document @return {array} page range */ function all(pdf) {} /** Makes a range which contains just the even pages of another range. @arg {array} r_in page range @return {array} page range */ function even(r_in) {} /** Makes a range which contains just the odd pages of another range. @arg {array} r_in page range @return {array} page range */ function odd(r_in) {} /** Makes the union of two ranges giving a range containing the pages in range a and range b. @arg {array} a page range @arg {array} b page range @return {array} page range */ function rangeUnion(a, b) {} /** Makes the difference of two ranges, giving a range containing all the pages in a except for those which are also in b. @arg {array} a page range @arg {array} b page range @return {array} page range */ function difference(a, b) {} /** Deduplicates a range, making a new one. @arg {array} a page range @return {array} page range */ function removeDuplicates(a) {} /** Gives the number of pages in a range. @arg {array} r page range @return {number} length */ function rangeLength(r) {} /** Gets the page number at position n in a range, where n runs from 0 to rangeLength - 1. @arg {array} r page range @arg {number} n position @return {number} page at given position */ function rangeGet(r, n) {} /** Adds the page to a range, if it is not already there. @arg {array} r page range @arg {number} page page number */ function rangeAdd(r, page) {} /** Returns true if the page is in the range, false otherwise. @arg {array} r page range @arg {number} page page number @return {boolean} true if page in range, false otherwise */ function isInRange(r, page) {} /** Returns the number of pages in a PDF. @arg {pdf} pdf PDF document @return {number} number of pages */ function pages(pdf) {} /** Returns the number of pages in a given PDF, with given user password. It tries to do this as fast as possible, without loading the whole file. @arg {string} password user password @arg {string} filename file name @return {number} number of pages */ function pagesFast(password, filename) {} /** Returns the number of pages in a given PDF, with given user password. It tries to do this as fast as possible, without loading the whole file. @arg {string} password user password @arg {Uint8Array} data PDF file as a byte array @return {number} number of pages */ function pagesFastMemory(password, data) {} /** Writes the file to a given filename. If linearize is true, it will be linearized if a linearizer is available. If make_id is true, it will be given a new ID. @arg {pdf} pdf PDF document @arg {string} filename file name @arg {boolean} linearize linearize if a linearizer is available @arg {boolean} make_id make a new /ID */ function toFile(pdf, filename, linearize, make_id) {} /** Writes the file to a given filename. If make_id is true, it will be given a new ID. If preserve_objstm is true, existing object streams will be preserved. If generate_objstm is true, object streams will be generated even if not originally present. If compress_objstm is true, object streams will be compressed (what we usually want). WARNING: the pdf argument will be invalid after this call, and should be not be used again. @arg {pdf} pdf PDF document @arg {string} filename file name @arg {boolean} linearize linearize if a linearizer is available @arg {boolean} preserve_objstm preserve existing object streams @arg {boolean} generate_objstm create new object streams @arg {boolean} compress_objstm compress new object streams */ function toFileExt(pdf, filename, linearize, make_id, preserve_objstm, generate_objstm, compress_objstm) {} /** Writes a PDF file and returns as an array of bytes. @arg {pdf} pdf PDF document @arg {boolean} linearize linearize if a linearizer is available @arg {boolean} make_id make a new /ID @result {Uint8Array} PDF document as an array of bytes */ function toMemory(pdf, linearize, make_id) {} /** Writes the file to memory. If make_id is true, it will be given a new ID. If preserve_objstm is true, existing object streams will be preserved. If generate_objstm is true, object streams will be generated even if not originally present. If compress_objstm is true, object streams will be compressed (what we usually want). WARNING: the pdf argument will be invalid after this call, and should be not be used again. @arg {pdf} pdf PDF document @arg {boolean} linearize linearize if a linearizer is available @arg {boolean} preserve_objstm preserve existing object streams @arg {boolean} generate_objstm create new object streams @arg {boolean} compress_objstm compress new object streams @result {Uint8Array} PDF file as a byte array */ function toMemoryExt(pdf, linearize, make_id, preserve_objstm, generate_objstm, compress_objstm) {} /** Returns true if a document is encrypted, false otherwise. @arg {pdf} pdf PDF document @return {boolean} true if document encrypted, false otherwise */ function isEncrypted(pdf) {} /** Attempts to decrypt a PDF using the given user password. An exception is raised if the decryption fails. @arg {pdf} pdf PDF document @arg {string} userpw user password, or empty if none */ function decryptPdf(pdf, userpw) {} /** Attempts to decrypt a PDF using the given owner password. Raises an exception if the decryption fails. @arg {pdf} pdf PDF document @arg {string} ownerpw owner password, or empty if none */ function decryptPdfOwner(pdf, ownerpw) {} /** Cannot edit the document */ var noEdit = 0; /** Cannot print the document */ var noPrint = 1; /** Cannot copy the document */ var noCopy = 2; /** Cannot annotate the document */ var noAnnot = 3; /** Cannot edit forms in the document */ var noForms = 4; /** Cannot extract information */ var noExtract = 5; /** Cannot assemble into a bigger document */ var noAssemble = 6; /** Cannot print high quality */ var noHqPrint = 7; /** 40 bit RC4 encryption */ var pdf40bit = 0; /** 128 bit RC4 encryption */ var pdf128bit = 1; /** 128 bit AES encryption, do not encrypt metadata */ var aes128bitfalse = 2; /** 128 bit AES encryption, encrypt metadata */ var aes128bittrue = 3; /** Deprecated. Do not use for new files */ var aes256bitfalse = 4; /** Deprecated. Do not use for new files */ var aes256bittrue = 5; /** 256 bit AES encryption, do not encrypt metadata */ var aes256bitisofalse = 6; /** 256 bit AES encryption, encrypt metadata */ var aes256bitisotrue = 7; /** Writes a file as encrypted. @arg {pdf} pdf PDF document @arg {"encryption method"} encryption_method encryption method @arg {"permission array"} array of permissions @arg {string} ownerpw owner password @arg {string} userpw user password @arg {boolean} linearize linearize if a linearizer is available @arg {boolean} makeid make a new /ID @arg {string} filename file name */ function toFileEncrypted(pdf, encryption_method, permissions, ownerpw, userpw, linearize, makeid, filename) {} /** Writes to memory as encrypted. @arg {pdf} pdf PDF document @arg {"encryption method"} encryption_method encryption method @arg {"permission array"} array of permissions @arg {string} ownerpw owner password @arg {string} userpw user password @arg {boolean} linearize linearize if a linearizer is available @arg {boolean} makeid make a new /ID @return {Uint8Array} PDF file as a byte array */ function toMemoryEncrypted(pdf, encryption_method, permissions, ownerpw, userpw, linearize, makeid) {} /** Writes a file as encrypted with extra parameters. WARNING: the pdf argument will be invalid after this call, and should not be used again. @arg {pdf} pdf PDF document @arg {"encryption method"} encryption_method encryption method @arg {"permission array"} array of permissions @arg {string} ownerpw owner password @arg {string} userpw user password @arg {boolean} linearize linearize if a linearizer is available @arg {boolean} makeid make a new /ID @arg {boolean} preserve_objstm preserve existing object streams @arg {boolean} generate_objstm generate new object streams @arg {boolean} compress_objstm compress object streams @arg {string} filename file name */ function toFileEncryptedExt(pdf, encryption_method, permissions, ownerpw, userpw, linearize, makeid, preserve_objstm, generate_objstm, compress_objstm, filename) {} /** Writes a file as encrypted with extra parameters. WARNING: the pdf argument will be invalid after this call, and should not be used again. @arg {pdf} pdf PDF document @arg {"encryption method"} encryption_method encryption method @arg {"permission array"} array of permissions @arg {string} ownerpw owner password @arg {string} userpw user password @arg {boolean} linearize linearize if a linearizer is available @arg {boolean} makeid make a new /ID @arg {boolean} preserve_objstm preserve existing object streams @arg {boolean} generate_objstm generate new object streams @arg {boolean} compress_objstm compress object streams @return {Uint8Array} PDF file as a byte array */ function toMemoryEncryptedExt(pdf, encryption_method, permissions, ownerpw, userpw, linearize, makeid, preserve_objstm, generate_objstm, compress_objstm) {} /** Returns true if the given permission (restriction) is present. @arg {pdf} pdf PDF document @arg {permission} permission permission @return {boolean} true if permission present */ function hasPermission(pdf, permission) {} /** Returns the encryption method currently in use on a document. @arg {pdf} pdf PDF document @return {"encryption method"} encryption method */ function encryptionKind(pdf) {} cpdf-2.8.1/html_manual/javascriptsplits/c13.tex0000664000175000017500000000434114771516640020151 0ustar johnjohn// CHAPTER 12. File Attachments /** Attaches a file to the pdf. It is attached at document level. @arg {string} filename file name @arg {pdf} pdf PDF document */ function attachFile(filename, pdf) {} /** Attaches a file, given its file name, pdf, and the page number to which it should be attached. @arg {string} filename file name @arg {pdf} pdf PDF document @arg {number} pagenumber page number */ function attachFileToPage(filename, pdf, pagenumber) {} /** Attaches data from memory, just like attachFile. @arg {Uint8Array} data file as a byte array @arg {string} filename file name to call it in the PDF @arg {pdf} pdf PDF document */ function attachFileFromMemory(data, filename, pdf) {} /** Attaches to a page from memory, just like attachFileToPage. @arg {Uint8Array} data file as a byte array @arg {string} filename file name to call it in the PDF @arg {pdf} pdf PDF document @arg {number} pagenumber page number */ function attachFileToPageFromMemory(data, filename, pdf, pagenumber) {} /** Removes all page- and document-level attachments from a document. @arg {pdf} pdf PDF document */ function removeAttachedFiles(pdf) {} /** Lists information about attachments. Call startGetAttachments(pdf) first, then numberGetAttachments to find out how many there are. Then getAttachmentName etc. to return each one 0...(n - 1). Finally, call endGetAttachments to clean up. @arg {pdf} pdf PDF document */ function startGetAttachments(pdf) {} /** Lists information about attachments. Call startGetAttachments(pdf) first, then numberGetAttachments to find out how many there are. Then getAttachmentName etc. to return each one 0...(n - 1). Finally, call endGetAttachments to clean up. @return {number} number of attachments */ function numberGetAttachments() {} /** Gets the name of an attachment. @arg {number} n serial number @return {string} attachment name */ function getAttachmentName(n) {} /** Gets the page number. 0 = document level. @arg {number} n serial number @return {number} attachment page */ function getAttachmentPage(n) {} /** Gets the attachment data itself. @arg {number} n serial number @return {Uint8Array} attachment data */ function getAttachmentData(n) {} /** Cleans up after getting attachments. */ function endGetAttachments() {} cpdf-2.8.1/html_manual/pysplits/0000775000175000017500000000000014771516640015321 5ustar johnjohncpdf-2.8.1/html_manual/pysplits/c08.tex0000664000175000017500000000010214771516640016426 0ustar johnjohn# CHAPTER 7. Presentations # Not included in the library version cpdf-2.8.1/html_manual/pysplits/c18.tex0000664000175000017500000000137714771516640016446 0ustar johnjohn# CHAPTER 17. Creating New PDFs def blankDocument(w, h, pages): """ Create a blank document with pages of the given width (in points), height (in points), and number of pages.""" def blankDocumentPaper(papersize, pages): """Create a blank document with pages of the given paper size, and number of pages. """ def textToPDF(w, h, font, fontsize, filename): """textToPDF(w, h, font, fontsize, filename) typesets a UTF8 text file ragged right on a page of size w * h in points in the given font and font size.""" def textToPDFPaper(papersize, font, fontsize, filename): """textToPDF(papersize font, fontsize, filename) typesets a UTF8 text file ragged right on a page of the given size in the given font and font size.""" cpdf-2.8.1/html_manual/pysplits/c07.tex0000664000175000017500000000146314771516640016440 0ustar johnjohn# CHAPTER 6. Bookmarks def getBookmarks(pdf): """Get the bookmarks for a PDF as a list of tuples of the form: (level : int, page : int, text : string, openstatus : bool)""" def setBookmarks(pdf, marks): """Set the bookmarks for a PDF as a list of tuples of the form: (level : int, page : int, text : string, openstatus : bool)""" def getBookmarksJSON(pdf): """Get the bookmarks in JSON format.""" def setBookmarksJSON(pdf, data): """setBookmarksJSON(pdf, data) sets the bookmarks from JSON bookmark data.""" def tableOfContents(pdf, font, fontsize, title, bookmark): """tableOfContents(pdf, font, fontsize, title, bookmark) typesets a table of contents from existing bookmarks and prepends it to the document. If bookmark is set, the table of contents gets its own bookmark.""" cpdf-2.8.1/html_manual/pysplits/c17.tex0000664000175000017500000000113514771516640016435 0ustar johnjohn# CHAPTER 16. Optional Content Groups def getOCGList(pdf): """Return a list of Optional Content Groups in the given pdf as strings.""" def OCGRename(pdf, n_from, n_to): """Rename an optional content group.""" def OCGOrderAll(pdf): """Ensure that every optional content group appears in the OCG order list.""" def OCGCoalesce(pdf): """Coalesce optional content groups. For example, if we merge or stamp two files both with an OCG called "Layer 1", we will have two different optional content groups. This function will merge the two into a single optional content group.""" cpdf-2.8.1/html_manual/pysplits/c04.tex0000664000175000017500000000466014771516640016437 0ustar johnjohn# CHAPTER 3. Pages def scalePages(pdf, r, sx, sy): """Scale the page dimensions and content of the given range of pages by the given scale (sx, sy), about (0, 0). Other boxes (crop etc. are altered as appropriate).""" def scaleToFit(pdf, r, w, h, scale_to_fit_scale): """Scales the pages in the range to fit new page dimensions (w and h) multiplied by scale_to_fit_scale (typically 1.0). Other boxes (crop etc.) are altered as appropriate.""" def scaleToFitPaper(pdf, r, papersize, scale_to_fit_scale): """Scales the given pages to fit the given page size, possibly multiplied by scale_to_fit_scale (typically 1.0)""" def scaleContents(pdf, r, pos, scale): """Scales the contents of the pages in the range about the point given by the position, by the scale given.""" def shiftContents(pdf, r, dx, dy): """Shift the content of the pages in the range by (dx, dy).""" def rotate(pdf, r, rotation): """Change the viewing rotation of the pages in the range to an absolute value. Appropriate rotations are 0, 90, 180, 270.""" def rotateBy(pdf, r, rotation): """Change the viewing rotation of the pages in the range by a given number of degrees. Appropriate values are 90, 180, 270.""" def rotateContents(pdf, r, rotation): """Rotate the content about the centre of the page by the given number of degrees, in a clockwise direction.""" def upright(pdf, r): """Change the viewing rotation of the pages in the range, counter-rotating the dimensions and content such that there is no visual change.""" def hFlip(pdf, r): """Flip horizontally the pages in the range.""" def vFlip(pdf, r): """Flip vertically the pages in the range.""" def crop(pdf, r, x, y, w, h): """Crop a page to the box defined by (x, y, w, h), replacing any existing crop box.""" def removeCrop(pdf, r): """Remove any crop box from pages in the range.""" def removeTrim(pdf, r): """Remove any trim box from pages in the range.""" def removeArt(pdf, r): """Remove any art box from pages in the range.""" def removeBleed(pdf, r): """Remove any bleed box from pages in the range.""" def trimMarks(pdf, r): """Add trim marks to the given pages, if the trimbox exists.""" def showBoxes(pdf, r): """Show the boxes on the given pages, for debug.""" def hardBox(pdf, r, boxname): """Make a given box a 'hard box' i.e clip it explicitly. Boxname could be, for example "/TrimBox".""" cpdf-2.8.1/html_manual/pysplits/c00.tex0000664000175000017500000000130514771516640016424 0ustar johnjohn"""Pycpdflib: a python interface to cpdf. Before using the library, you must load the libpycpdf and libcpdf DLLs. This is achieved with the pycpdflib.loadDLL function, given the filename or full path of the libpycpdf DLL. On Windows, you may have to call os.add_dll_directory first. On MacOS, you may need to give the full path, and you may need to install libcpdf.so in a standard location /usr/local/lib/, or use the install_name_tool command to tell libpycpdf.so where to find libcpdf.so. A 'range' is a list of integers specifying page numbers. Text arguments and results are in UTF8. Data is of type bytes. Any function may raise the exception CPDFError, carrying a string describing the error. """ cpdf-2.8.1/html_manual/pysplits/c09.tex0000664000175000017500000001113114771516640016433 0ustar johnjohn# CHAPTER 8. Logos, Watermarks and Stamps def stampOn(pdf, pdf2, r): """Stamps pdf on top of all the pages in pdf2 which are in the range. The stamp is placed with its origin at the origin of the target document.""" def stampUnder(pdf, pdf2, r): """Stamps pdf under under all the pages in pdf2 which are in the range. The stamp is placed with its origin at the origin of the target document.""" def stampExtended(pdf, pdf2, r, isover, scale_stamp_to_fit, pos, relative_to_cropbox): """A stamping function with extra features: - isover True, pdf goes over pdf2, isover False, pdf goes under pdf2 - scale_stamp_to_fit scales the stamp to fit the page - pos gives the position to put the stamp - relative_to_cropbox: if True, pos is relative to crop box not media box""" def combinePages(pdf, pdf2): """Combines the PDFs page-by-page, putting each page of pdf2 over each page of pdf.""" def addText(metrics, pdf, r, text, p, line_spacing, bates, font, size, red, green, blue, underneath, relative_to_cropbox, outline, opacity, justification, midline, topline, filename, line_width, embed_fonts): """Adding text. Adds text to a PDF, if the characters exist in the font. * metrics: If True, don't actually add text but collect metrics. * pdf: Document * r: Page Range * text: The text to add * p: Position to add text at * line_spacing: Linespacing, 1.0 = normal * bates: Starting Bates number * font: Font * size: Font size in points * red: Red component of colour, 0.0 - 1.0 * green: Green component of colour, 0.0 - 1.0 * blue: Blue component of colour, 0.0 - 1.0 * underneath: If True, text is added underneath rather than on top * relative_to_cropbox: If True, position is relative to crop box not media box * outline: If True, text is outline rather than filled * opacity: Opacity, 1.0 = opaque, 0.0 = wholly transparent * justification: Justification * midline: If True, position is relative to midline of text, not baseline * topline: If True, position is relative to topline of text, not baseline * filename: filename that this document was read from (optional) * line_width: line width * embed_fonts: embed fonts Special codes * %Page Page number in arabic notation (1, 2, 3...) * %roman Page number in lower-case roman notation (i, ii, iii...) * %Roman Page number in upper-case roman notation (I, II, III...) * %EndPage Last page of document in arabic notation * %Label The page label of the page * %EndLabel The page label of the last page * %filename The full file name of the input document * %a Abbreviated weekday name (Sun, Mon etc.) * %A Full weekday name (Sunday, Monday etc.) * %b Abbreviated month name (Jan, Feb etc.) * %B Full month name (January, February etc.) * %d Day of the month (01-31) * %e Day of the month (1-31) * %H Hour in 24-hour clock (00-23) * %I Hour in 12-hour clock (01-12) * %j Day of the year (001-366) * %m Month of the year (01-12) * %M Minute of the hour (00-59) * %p "a.m" or "p.m" * %S Second of the minute (00-61) * %T Same as %H:%M:%S * %u Weekday (1-7, 1 = Monday) * %w Weekday (0-6, 0 = Monday) * %Y Year (0000-9999) * %% The % character""" def addTextSimple(pdf, r, text, p, font, size): """like addText, but with most parameters default * pdf = the document * r = the range * text = the text * p = the position * font = the font * size = the font size""" def removeText(pdf, r): """Remove any text added by libcpdf from the given pages.""" def textWidth(font, string): """Return the width of a given string in the given font in thousandths of a point.""" def addContent(content, before, pdf, r): """Add page content before (if True) or after (if False) the existing content to pages in the given range in the given PDF. Warning: this a low level function requiring understanding of the PDF format.""" def stampAsXObject(pdf, r, stamp_pdf): """Stamps stamp_pdf onto the pages in the given range in pdf as a shared Form XObject. The name of the newly-created XObject is returned, for use with addContent. """ cpdf-2.8.1/html_manual/pysplits/c12.tex0000664000175000017500000001742614771516640016442 0ustar johnjohn# CHAPTER 11. Document Information and Metadata def isLinearized(filename): """Finds out if a document is linearized as quickly as possible without loading it.""" def getVersion(pdf): """Return the minor version number of a document.""" def getMajorVersion(pdf): """Return the minor version number of a document.""" def getTitle(pdf): """Return the title of a document.""" def getAuthor(pdf): """Return the subject of a document.""" def getSubject(pdf): """Return the subject of a document.""" def getKeywords(pdf): """Return the keywords of a document.""" def getCreator(pdf): """Return the creator of a document.""" def getProducer(pdf): """Return the producer of a document.""" def getCreationDate(pdf): """Return the creation date of a document.""" def getModificationDate(pdf): """Return the modification date of a document.""" def getTitleXMP(pdf): """Return the XMP title of a document.""" def getAuthorXMP(pdf): """Return the XMP author of a document.""" def getSubjectXMP(pdf): """Return the XMP subject of a document.""" def getKeywordsXMP(pdf): """Return the XMP keywords of a document.""" def getCreatorXMP(pdf): """Return the XMP creator of a document.""" def getProducerXMP(pdf): """Return the XMP producer of a document.""" def getCreationDateXMP(pdf): """Return the XMP creation date of a document.""" def getModificationDateXMP(pdf): """Return the XMP modification date of a document.""" def setTitle(pdf, s): """Set the title of a document.""" def setAuthor(pdf, s): """Set the author of a document.""" def setSubject(pdf, s): """Set the subject of a document.""" def setKeywords(pdf, s): """Set the keywords of a document.""" def setCreator(pdf, s): """Set the creator of a document.""" def setProducer(pdf, s): """Set the producer of a document.""" def setCreationDate(pdf, s): """Set the creation date of a document.""" def setModificationDate(pdf, s): """Set the modifcation date of a document.""" def setTitleXMP(pdf, s): """Set the XMP title of a document.""" def setAuthorXMP(pdf, s): """Set the XMP author of a document.""" def setSubjectXMP(pdf, s): """Set the XMP subject of a document.""" def setKeywordsXMP(pdf, s): """Set the XMP keywords of a document.""" def setCreatorXMP(pdf, s): """Set the XMP creator of a document.""" def setProducerXMP(pdf, s): """Set the XMP producer of a document.""" def setCreationDateXMP(pdf, s): """Set the XMP creation date of a document.""" def setModificationDateXMP(pdf, s): """Set the XMP modification date of a document.""" def getDateComponents(string): """Return the components (year, month, day, hour, minute, second, hour_offset, minute_offset) from a PDF date string. Month 1-31, day 1-31, hours (0-23), minutes (0-59), seconds (0-59), hour_offset is the offset from UT in hours (-23 to 23); minute_offset is the offset from UT in minutes (-59 to 59).""" def dateStringOfComponents(cs): """Build a PDF date string a (year, month, day, hour, minute, second, hour_offset, minute_offset) tuple. Dates: Month 1-31, day 1-31, hours (0-23), minutes (0-59), seconds (0-59), hour_offset is the offset from UT in hours (-23 to 23); minute_offset is the offset from UT in minutes (-59 to 59).""" def getPageRotation(pdf, pagenumber): """Get the viewing rotation for a given page.""" def hasBox(pdf, pagenumber, boxname): """Returns True, if the page has the given box. E.g "/CropBox" """ def getMediaBox(pdf, pagenumber): """Get a mediabox box given the document, page range, min x, max x, min y, max y in points. Only suceeds if such a box exists, as checked by hasBox""" def getCropBox(pdf, pagenumber): """Get a crop box given the document, page range, min x, max x, min y, max y in points. Only suceeds if such a box exists, as checked by hasBox""" def getTrimBox(pdf, pagenumber): """Get a trim box given the document, page range, min x, max x, min y, max y in points. Only suceeds if such a box exists, as checked by hasBox""" def getArtBox(pdf, pagenumber): """Get an art box given the document, page range, min x, max x, min y, max y in points. Only suceeds if such a box exists, as checked by hasBox""" def getBleedBox(pdf, pagenumber): """Get a bleed box given the document, page range, min x, max x, min y, max y in points. Only suceeds if such a box exists, as checked by hasBox""" def setMediaBox(pdf, r, minx, maxx, miny, maxy): """Set the media box given the document, page range, min x, max x, min y, max y in points.""" def setCropBox(pdf, r, minx, maxx, miny, maxy): """Set the crop box given the document, page range, min x, max x, min y, max y in points.""" def setTrimBox(pdf, r, minx, maxx, miny, maxy): """Set the trim box given the document, page range, min x, max x, min y, max y in points.""" def setArtBox(pdf, r, minx, maxx, miny, maxy): """Set the art box given the document, page range, min x, max x, min y, max y in points.""" def setBleedBox(pdf, r, minx, maxx, miny, maxy): """Set the bleed box given the document, page range, min x, max x, min y, max y in points.""" def markTrapped(pdf): """Mark a document as trapped.""" def markUntrapped(pdf): """Mark a document as untrapped.""" def markTrappedXMP(pdf): """Mark a document as trapped in XMP metadata.""" def markUntrappedXMP(pdf): """Mark a document as untrapped in XMP metadata.""" def setPageLayout(pdf, layout): """Set the page layout for a document.""" def setPageMode(pdf, mode): """Set the page mode for a document.""" def hideToolbar(pdf, flag): """Sets the hide toolbar flag.""" def hideMenubar(pdf, flag): """Set the hide menu bar flag.""" def hideWindowUi(pdf, flag): """Set the hide window UI flag.""" def fitWindow(pdf, flag): """Set the fit window flag.""" def centerWindow(pdf, flag): """Set the center window flag.""" def displayDocTitle(pdf, flag): """Set the display document title flag.""" def openAtPage(pdf, fitflag, pagenumber): """Set the PDF to open, possibly with zoom-to-fit, at the given page number. """ def setMetadataFromFile(pdf, filename): """Set the XMP metadata of a document, given a file name.""" def setMetadataFromByteArray(pdf, data): """Set the XMP metadata from an array of bytes.""" def getMetadata(pdf): """Return the XMP metadata as a byte array of type bytes""" def removeMetadata(pdf): """Remove the XMP metadata from a document""" def createMetadata(pdf): """Builds fresh XMP metadata as good as possible from existing metadata in the document.""" def setMetadataDate(pdf, date): """Set the metadata date for a PDF. The date is given in PDF date format -- cpdf will convert it to XMP format. The date 'now' means now.""" def getPageLabels(pdf): """Get page labels as a list of tuples (style, prefix, offset, startvalue) For example, a document might have five pages of introduction with roman numerals, followed by the rest of the pages in decimal arabic, numbered from one. First label: * labelstyle = LowercaseRoman * labelprefix = "" * startpage = 1 * startvalue = 1 Second label: * labelstyle = DecimalArabic * labelprefix = "" * startpage = 6 * startvalue = 1 """ def addPageLabels(pdf, label, progress): """Add one group of page labels from a tuple (style, prefix, offset, range). The prefix is prefix text for each label. The range is the page range the labels apply to. Offset can be used to shift the numbering up or down.""" def removePageLabels(pdf): """Removes all page labels from the document.""" def getPageLabelStringForPage(pdf, pagenumber): """Calculate the full label string for a given page, and return it.""" cpdf-2.8.1/html_manual/pysplits/c06.tex0000664000175000017500000000066614771516640016443 0ustar johnjohn# CHAPTER 5. Compression def compress(pdf): """Compress any uncompressed streams in the given PDF using the Flate algorithm.""" def decompress(pdf): """Decompress any streams in the given PDF, so long as the compression method is supported.""" def squeezeInMemory(pdf): """squeezeToMemory(pdf) squeezes a pdf in memory. Squeezing is a lossless compression method which works be rearrangement of a PDFs internal cpdf-2.8.1/html_manual/pysplits/c11.tex0000664000175000017500000000014314771516640016425 0ustar johnjohn# CHAPTER 10. Annotations def annotationsJSON(pdf): """Get the annotations in JSON format.""" cpdf-2.8.1/html_manual/pysplits/c19.tex0000664000175000017500000000335314771516640016443 0ustar johnjohn# CHAPTER 18. Miscellaneous def draft(pdf, r, boxes): """Remove images on the given pages, replacing them with crossed boxes if 'boxes' is True.""" def removeAllText(pdf, r): """Remove all text from the given pages in a document.""" def blackText(pdf, r): """Blacken all text on the given pages.""" def blackLines(pdf, r): """Blacken all lines on the given pages.""" def blackFills(pdf, r): """Blacken all fills on the given pages.""" def thinLines(pdf, r, linewidth): """Thicken every line less than linewidth to linewidth. Thickness given in points.""" def copyId(pdf, pdf2): """Copy the /ID from one pdf to pdf2.""" def removeId(pdf): """Remove a document's /ID""" def setVersion(pdf, version): """Set the minor version number of a document.""" def setFullVersion(pdf, major, minor): """Set the major and minor version number of a document.""" def removeDictEntry(pdf, key): """Remove any dictionary entry with the given key anywhere in the document.""" def removeDictEntrySearch(pdf, key, searchterm): """Remove any dictionary entry with the given key anywhere in the document, if its value matches the given search term.""" def replaceDictEntry(pdf, key, newvalue): """Replace any dictionary entry with the given key anywhere in the document using the new value given.""" def replaceDictEntrySearch(pdf, key, newvalue, searchterm): """Replace any dictionary entry with the given key anywhere in the document, if its value matches the given search term, with the new value given.""" def getDictEntries(pdf, key): """Return JSON of any dict entries with the given key.""" def removeClipping(pdf, r): """Remove all clipping from pages in the given range""" cpdf-2.8.1/html_manual/pysplits/c05.tex0000664000175000017500000000011314771516640016425 0ustar johnjohn# CHAPTER 4. Encryption # Encryption covered under Chapter 1 in pycpdflib cpdf-2.8.1/html_manual/pysplits/c15.tex0000664000175000017500000000065114771516640016435 0ustar johnjohn# CHAPTER 14. Fonts def getFontInfo(pdf): """Get a list of (pagenumber, fontname, fonttype, fontencoding) tuples, showing each font used on each page.""" def removeFonts(pdf): """Remove all font data from a file.""" def copyFont(pdf, pdf2, r, pagenumber, fontname): """Copy the given font from the given page in the pdf PDF to every page in the pdf2 PDF. The new font is stored under its font name.""" cpdf-2.8.1/html_manual/pysplits/c16.tex0000664000175000017500000000134114771516640016433 0ustar johnjohn# CHAPTER 15. PDF and JSON def outputJSON(filename, parse_content, no_stream_data, decompress_streams, pdf): """Output a PDF in JSON format to the given filename. If parse_content is True, page content is parsed. If decompress_streams is True, streams are decompressed. If no_stream_data is True, all stream data is suppressed entirely.""" def outputJSONMemory(pdf, parse_content, no_stream_data, decompress_streams): """outputJSONMemory(pdf, parse_content, no_stream_data, decompress_stream) is like outputJSON, but it write to a buffer in memory).""" def fromJSON(filename): """Load a PDF from a JSON file given its filename.""" def fromJSONMemory(data): """ Load a PDF from JSON data in memory.""" cpdf-2.8.1/html_manual/pysplits/c01.tex0000664000175000017500000000725414771516640016436 0ustar johnjohnLoading the libpypcdf and libcpdf DLLs -------------------------------------- Before using the library, you must load the ``libpycpdf`` and ``libcpdf`` DLLs. This is achieved with the ``pycpdflib.loadDLL`` function, given the filename or full path of the ``libpycpdf`` DLL. On Windows, you may have to call ``os.add_dll_directory`` first. On MacOS, you may need to give the full path, and you may need to install ``libcpdf.so`` in a standard location ``/usr/local/lib/``, or use the ``install_name_tool`` command to tell ``libpycpdf.so`` where to find ``libcpdf.so``. Conventions ----------- Any function may raise the exception ``CPDFError``, carrying a string describing the error. A 'range' is a list of integers specifying page numbers. Page numbers start at 1. Range arguments are called `r`. Text arguments and results are in UTF8. Units are in PDF points (1/72 inch). Angles are in degrees. Built-in values --------------- Paper sizes: a0portrait a1portrait a2portrait a3portrait a4portrait a5portrait a0landscape a1landscape a2landscape a3landscape a4landscape a5landscape usletterportrait usletterlandscape uslegalportrait uslegallandscape Permissions: noEdit noPrint noCopy noAnnot noForms noExtract noAssemble noHqPrint Encryption methods: pdf40bit pdf128bit aes128bitfalse aes128bittrue aes256bitfalse aes256bittrue aes256bitisofalse aes256bitisotrue Positions: Positions with two numbers in a tuple e.g (posLeft, 10.0, 20.0) posCentre posLeft posRight Positions with one number in a tuple e.g (top, 5.0) top topLeft topRight left bottomLeft bottomRight right Positions with no numbers e.g diagonal diagonal reverseDiagonal Fonts: timesRoman timesBold timesItalic timesBoldItalic helvetica helveticaBold helveticaOblique helveticaBoldOblique courier courierBold courierOblique courierBoldOblique Justification: leftJustify centreJustify rightJustify Page layouts: singlePage oneColumn twoColumnLeft twoColumnRight twoPageLeft twoPageRight Page modes: useNone useOutlines useThumbs useOC useAttachments Page label styles: decimalArabic uppercaseRoman lowercaseRoman uppercaseLetters lowercaseLetters """ class Pdf: """The type of PDF documents.""" def loadDLL(f): """Load the libpycpdf DLL from a given file, and set up pycpdflib. Must be called prior to using any other function in the library.""" class CPDFError(Exception): """Any function may raise an exception CPDFError, carrying a string describing what went wrong.""" def lastError(): """Return the last error. Not usually used directly, since pycpdflib functions raise exceptions.""" def lastErrorString(): """Return the last error string. Not usually used directly, since pycpdflib functions raise exceptions.""" def checkerror(): """Raise an exception if the last function call resulted in an error. Not used directly, since pycpdflib functions will raise the exception directly.""" def version(): """Return the version number of the pycpdflib library.""" def setFast(): """ Set fast mode. Some operations have a fast mode. The default is 'slow' mode, which works even on old-fashioned files. For more details, see section 1.13 of the CPDF manual. This function sets the mode globally. """ def setSlow(): """ Set slow mode. Some operations have a fast mode. The default is 'slow' mode, which works even on old-fashioned files. For more details, see section 1.13 of the CPDF manual. This function sets the mode globally. """ def clearError(): """ Clear the current error state. """ def onExit(): """ A debug function which prints some information about resource usage. This can be used to detect if PDFs or ranges are being deallocated properly.""" cpdf-2.8.1/html_manual/pysplits/c03.tex0000664000175000017500000000161414771516640016432 0ustar johnjohn# CHAPTER 2. Merging and Splitting def mergeSimple(pdfs): """Given a list of PDFs, merges the documents into a new PDF, which is returned.""" def merge(pdfs, retain_numbering, remove_duplicate_fonts): """Merges the list of PDFs. If retain_numbering is True page labels are not rewritten. If remove_duplicate_fonts is True, duplicate fonts are merged. This is useful when the source documents for merging originate from the same source.""" def mergeSame(pdfs, retain_numbering, remove_duplicate_fonts, ranges): """The same as merge, except that it has an additional argument - a list of page ranges. This is used to select the pages to pick from each PDF. This avoids duplication of information when multiple discrete parts of a single source PDF are included.""" def selectPages(pdf, r): """ Returns a new document which just those pages in the page range.""" cpdf-2.8.1/html_manual/pysplits/c10.tex0000664000175000017500000000235014771516640016426 0ustar johnjohn# CHAPTER 9. Multipage facilities def twoUp(pdf): """Impose a document two up by retaining the existing page size, scaling pages down.""" def twoUpStack(pdf): """Impose a document two up by doubling the page size, to fit two pages on one.""" def impose(pdf, x, y, fit, columns, rtl, btt, center, margin, spacing, linewidth): """impose(pdf, x, y, fit, columns, rtl, btt, center, margin, spacing, linewidth) imposes a PDF. There are two modes: imposing x * y, or imposing to fit a page of size x * y. This is controlled by fit. Columns imposes by columns rather than rows. rtl is right-to-left, btt bottom-to-top. Center is unused for now. Margin is the margin around the output, spacing the spacing between imposed inputs.""" def padBefore(pdf, r): """Adds a blank page before each page in the given range.""" def padAfter(pdf, r): """Adds a blank page after each page in the given range.""" def padEvery(pdf, n): """Adds a blank page after every n pages.""" def padMultiple(pdf, n): """Adds pages at the end to pad the file to a multiple of n pages in length.""" def padMultipleBefore(pdf, n): """Adds pages at the beginning to pad the file to a multiple of n pages in length.""" cpdf-2.8.1/html_manual/pysplits/c14.tex0000664000175000017500000000042714771516640016435 0ustar johnjohn# CHAPTER 13. Images def getImageResolution(pdf, min_required_resolution): """Return a list of all uses of images in the PDF which do not meet the minimum required resolution in dpi as tuples of: (pagenumber, name, x pixels, y pixels, x resolution, y resolution)""" cpdf-2.8.1/html_manual/pysplits/c02.tex0000664000175000017500000001421614771516640016433 0ustar johnjohn# CHAPTER 1. Basics def fromFile(filename, userpw): """ Load a PDF file from a given file. Supply a user password (possibly blank) in case the file is encypted. It won't be decrypted, but sometimes the password is needed just to load the file.""" def fromFileLazy(filename, userpw): """ Loads a PDF from a file, doing only minimal parsing. The objects will be read and parsed when they are actually needed. Use this when the whole file won't be required. Also supply a user password (possibly blank) in case the file is encypted. It won't be decrypted, but sometimes the password is needed just to load the file.""" def fromMemory(data, userpw): """ Load a file from a byte array and the user password (blank if none).""" def fromMemoryLazy(data, userpw): """ Load a file from from a byte array and the user password (blank if none), but lazily like fromFileLazy.""" def ptOfCm(i): """Convert a figure in centimetres to points (72 points to 1 inch).""" def ptOfMm(i): """Convert a figure in millimetres to points (72 points to 1 inch).""" def ptOfIn(i): """Convert a figure in inches to points (72 points to 1 inch).""" def cmOfPt(i): """Convert a figure in points to centimetres (72 points to 1 inch).""" def mmOfPt(i): """Convert a figure in points to millimetres (72 points to 1 inch).""" def inOfPt(i): """Convert a figure in points to inches (72 points to 1 inch).""" def parsePagespec(pdf, pagespec): """Parse a page specification such as "1-3,8-end" to a range with reference to a given PDF (the PDF is supplied so that page ranges which reference pages which do not exist are rejected).""" def validatePagespec(pagespec): """Validate a page specification, returning True or False, so far as is possible in the absence of the actual document.""" def stringOfPagespec(pdf, r): """Build a page specification from a page range. For example, the range containing 1,2,3,6,7,8 in a document of 8 pages might yield "1-3,6-end" """ def blankRange(): """Create a range with no pages in.""" def pageRange(f, t): """ Nuild a range from one page to another inclusive. For example, pageRange(3,7) gives the range 3,4,5,6,7. """ def all(pdf): """The range containing all the pages in a given document.""" def even(r): """A range which contains just the even pages of another range.""" def odd(r): """A range which contains just the odd pages of another range.""" def rangeUnion(a, b): """The union of two ranges giving a range containing the pages in range a and range b.""" def difference(a, b): """The difference of two ranges, giving a range containing all the pages in a except for those which are also in b.""" def removeDuplicates(r): """Deduplicates a range, returning a new one.""" def rangeLength(r): """The number of pages in a range.""" def rangeGet(r, n): """Get the page number at position n in a range, where n runs from 0 to rangeLength - 1.""" def rangeAdd(r, p): """Add the page to a range, if it is not already there.""" def isInRange(r, p): """Returns True if the page p is in the range r, False otherwise.""" def pages(pdf): """Return the number of pages in a PDF.""" def pagesFast(userpw, filename): """Return the number of pages in a given PDF, with given user password. It tries to do this as fast as possible, without loading the whole file.""" def toFile(pdf, filename, linearize, make_id): """Write the file to a given filename. If linearize is True, it will be linearized, if supported by libcpdf. If make_id is True, it will be given a new ID.""" def toFileExt(pdf, filename, linearize, make_id, preserve_objstm, generate_objstm, compress_objstm): """Write the file to a given filename. If linearize is True, it will be linearized, if supported by libcpdf. If make_id is True, it will be given a new ID. If preserve_objstm is True, existing object streams will be preserved. If generate_objstm is True, object streams will be generated even if not originally present. If compress_objstm is True, object streams will be compressed (what we usually want). WARNING: the pdf argument will be invalid after this call and should not be used again.""" def toMemory(pdf, linearize, make_id): """Write a file to memory, returning the buffer as a byte array of type bytes.""" def isEncrypted(pdf): """Returns True if a documented is encrypted, False otherwise.""" def toFileEncrypted(pdf, method, permissions, ownerpw, userpw, linearize, makeid, filename): """Write the file to a given filename encrypted with the given encryption method, permissions list, and owener and user passwords. If linearize is True, it will be linearized, if supported by libcpdf. If make_id is True, it will be given a new ID.""" def toFileEncryptedExt(pdf, method, permissions, ownerpw, userpw, linearize, makeid, preserve_objstm, generate_objstm, compress_objstm, filename): """Write the file to a given filename encrypted with the given encryption method, permissions list, and owener and user passwords. If linearize is True, it will be linearized, if supported by libcpdf. If make_id is True, it will be given a new ID. If preserve_objstm is True, existing object streams will be preserved. If generate_objstm is True, object streams will be generated even if not originally present. If compress_objstm is True, object streams will be compressed (what we usually want). WARNING: the pdf argument will be invalid after this call and should not be used again.""" def decryptPdf(pdf, userpw): """Attempts to decrypt a PDF using the given user password. An exception is raised in the event of a bad password.""" def decryptPdfOwner(pdf, ownerpw): """Attempts to decrypt a PDF using the given owner password. An exception is raised in the event of a bad password.""" def hasPermission(pdf, perm): """Returns True if the given permission (restriction) is present.""" def encryptionKind(pdf): """Return the encryption method currently in use on a document.""" cpdf-2.8.1/html_manual/pysplits/c13.tex0000664000175000017500000000154214771516640016433 0ustar johnjohn# CHAPTER 12. File Attachments def attachFile(filename, pdf): """Attach a file to the pdf. It is attached at document level.""" def attachFileToPage(filename, pdf, pagenumber): """Attach a file, given its file name, pdf, and the page number to which it should be attached.""" def attachFileFromMemory(data, filename, pdf): """Attach a file from a byte array. It is attached at document level.""" def attachFileToPageFromMemory(data, filename, pdf, pagenumber): """Attach a file to a given pag from a byte array. It is attached at document level.""" def removeAttachedFiles(pdf): """Remove all page- and document-level attachments from a document.""" def getAttachments(pdf): """List information about attachements. Returns a list of tuples (name, page number, byte array of data). Page 0 = document-level attachment.""" cpdf-2.8.1/html_manual/dotnetsplits/0000775000175000017500000000000014771516640016166 5ustar johnjohncpdf-2.8.1/html_manual/dotnetsplits/cm1.tex0000664000175000017500000000177314771516640017400 0ustar johnjohnCPDF .NET Library ================= Before using the library, you must make sure your project or build environment has access to the cpdf DLL, which is not part of the .NET assembly. You can add it to a Visual Studio project as a file, set to copy-to-output-folder. Or, you can install it in a standard location. The DLL must be named as follows, for .NET to be able to find it: Windows: cpdf.dll MacOS: libcpdf.dylib Linux: libcpdf.so The following documentation is automatically extracted from the XML comments present in the assembly. You can use Intellisense to view them within Visual Studio - the documentation here is for completeness. A 'range' is a list of integers specifying page numbers. Text arguments and results are in UTF8. Data is of type bytes[]. Any function may raise the exception CPDFError, carrying a string describing the error. There is no automatic garbage collection of PDFs. Use the Using keyword and/or the Dispose method on objects of type Cpdf.Pdf to explicitly deallocate PDFs. cpdf-2.8.1/html_manual/dotnetsplits/c08.tex0000664000175000017500000000010714771516640017300 0ustar johnjohnCHAPTER 7. Presentations Not included in the library version of cpdf. cpdf-2.8.1/html_manual/dotnetsplits/c18.tex0000664000175000017500000000116114771516640017302 0ustar johnjohnCHAPTER 17. Creating New PDFs Cpdf.blankDocument(Double, Double, Int32) Creates a blank document with pages of the given width (in points), height (in points), and number of pages. Cpdf.blankDocumentPaper(Cpdf.Papersize, Int32) Makes a blank document given a page size and number of pages. Cpdf.textToPDF(Double, Double, Cpdf.Font, Double, String) Typesets a UTF8 text file ragged right on a page of size w * h in points in the given font and font size. Cpdf.textToPDFPaper(Cpdf.Papersize, Cpdf.Font, Double, String) Typesets a UTF8 text file ragged right on a page of the given size in the given font and font size. cpdf-2.8.1/html_manual/dotnetsplits/c07.tex0000664000175000017500000000331714771516640017305 0ustar johnjohnCHAPTER 6. Bookmarks Cpdf.startGetBookmarkInfo(Cpdf.Pdf) Starts the bookmark retrieval process for a given PDF. Cpdf.numberBookmarks Gets the number of bookmarks for the PDF given to startGetBookmarkInfo. Cpdf.getBookmarkLevel(Int32) Gets the bookmark level for the given bookmark (0...(n - 1)). Cpdf.getBookmarkPage(Cpdf.Pdf, Int32) Gets the bookmark target page for the given PDF (which must be the same as the PDF passed to startSetBookmarkInfo) and bookmark (0...(n - 1)). Cpdf.getBookmarkText(Int32) Returns the text of bookmark (0...(n - 1)). Cpdf.getBookmarkOpenStatus(Int32) True if the bookmark is open. Cpdf.endGetBookmarkInfo Ends the bookmark retrieval process, cleaning up. Cpdf.startSetBookmarkInfo(Int32) Starts the bookmark setting process for n bookmarks. Cpdf.setBookmarkLevel(Int32, Int32) Set bookmark level for the given bookmark (0...(n - 1)). Cpdf.setBookmarkPage(Cpdf.Pdf, Int32, Int32) Sets the bookmark target page for the given PDF (which must be the same as the PDF to be passed to endSetBookmarkInfo) and bookmark (0...(n - 1)). Cpdf.setBookmarkOpenStatus(Int32, Boolean) Sets the open status of bookmark (0...(n - 1)). Cpdf.setBookmarkText(Int32, String) Sets the text of bookmark (0...(n - 1)). Cpdf.endSetBookmarkInfo(Cpdf.Pdf) Ends the bookmark setting process, writing the bookmarks to the given PDF. Cpdf.getBookmarksJSON(Cpdf.Pdf) Returns the bookmark data in JSON format. Cpdf.setBookmarksJSON(Cpdf.Pdf, Byte[]) Sets the bookmarks from JSON bookmark data. Cpdf.tableOfContents(Cpdf.Pdf, Cpdf.Font, Double, String, Boolean) Typesets a table of contents from existing bookmarks and prepends it to the document. If bookmark is set, the table of contents gets its own bookmark. cpdf-2.8.1/html_manual/dotnetsplits/c17.tex0000664000175000017500000000136414771516640017306 0ustar johnjohnCHAPTER 16. Optional Content Groups Cpdf.startGetOCGList(Cpdf.Pdf) Begins retrieving optional content group names. The serial number 0..n - 1 is returned. Cpdf.OCGListEntry(Int32) Retrieves an OCG name, given its serial number 0..n - 1. Cpdf.endGetOCGList Ends retrieval of optional content group names. Cpdf.OCGRename(Cpdf.Pdf, String, String) Renames an optional content group. Cpdf.OCGOrderAll(Cpdf.Pdf) Ensures that every optional content group appears in the OCG order list. Cpdf.OCGCoalesce(Cpdf.Pdf) Coalesces optional content groups. For example, if we merge or stamp two files both with an OCG called "Layer 1", we will have two different optional content groups. This function will merge the two into a single optional content group. cpdf-2.8.1/html_manual/dotnetsplits/c04.tex0000664000175000017500000001034614771516640017302 0ustar johnjohnCHAPTER 3. Pages Cpdf.scalePages(Cpdf.Pdf, List{Int32}, Double, Double) Scales the page dimensions and content by the given scale, about (0, 0). Other boxes (crop etc. are altered as appropriate) Cpdf.scaleToFit(Cpdf.Pdf, List{Int32}, Double, Double, Double) Scales the content to fit new page dimensions (width x height) multiplied by scale (typically 1.0). Other boxes (crop etc. are altered as appropriate) Cpdf.Papersize Built-in paper sizes Cpdf.Papersize.A0portrait A0 Portrait paper Cpdf.Papersize.A1portrait A1 Portrait paper Cpdf.Papersize.A2portrait A2 Portrait paper Cpdf.Papersize.A3portrait A3 Portrait paper Cpdf.Papersize.A4portrait A4 Portrait paper Cpdf.Papersize.A5portrait A5 Portrait paper Cpdf.Papersize.A0landscape A0 Landscape paper Cpdf.Papersize.A1landscape A1 Landscape paper Cpdf.Papersize.A2landscape A2 Landscape paper Cpdf.Papersize.A3landscape A3 Landscape paper Cpdf.Papersize.A4landscape A4 Landscape paper Cpdf.Papersize.A5landscape A5 Landscape paper Cpdf.Papersize.Usletterportrait US Letter Portrait paper Cpdf.Papersize.Usletterlandscape US Letter Landscape paper Cpdf.Papersize.Uslegalportrait US Legal Portrait paper Cpdf.Papersize.Uslegallandscape US Legal Landscape paper Cpdf.scaleToFitPaper(Cpdf.Pdf, List{Int32}, Cpdf.Papersize, Double) Scales the page content to fit the given page size, possibly multiplied by scale (typically 1.0) Cpdf.Anchor Position anchors Cpdf.Anchor.PosCentre Absolute centre Cpdf.Anchor.PosLeft Absolute left Cpdf.Anchor.PosRight Absolute right Cpdf.Anchor.Top The top centre of the page Cpdf.Anchor.TopLeft The top left of the page Cpdf.Anchor.TopRight The top right of the page Cpdf.Anchor.Left The left hand side of the page, halfway down Cpdf.Anchor.BottomLeft The bottom left of the page Cpdf.Anchor.Bottom The bottom middle of the page Cpdf.Anchor.BottomRight The bottom right of the page Cpdf.Anchor.Right The right hand side of the page, halfway down Cpdf.Anchor.Diagonal Diagonal, bottom left to top right Cpdf.Anchor.ReverseDiagonal Diagonal, top left to bottom right Cpdf.Position Cpdf.Position.anchor Position anchor Cpdf.Position.coord1 Parameter one Cpdf.Position.coord2 Parameter two Cpdf.Position.#ctor(Cpdf.Anchor) Build a position with zero parameters Cpdf.Position.#ctor(Cpdf.Anchor, Double) Build a position with one parameter Cpdf.Position.#ctor(Cpdf.Anchor, Double, Double) Build a position with two parameters Cpdf.scaleContents(Cpdf.Pdf, List{Int32}, Cpdf.Position, Double) Scales the contents of the pages in the range about the point given by the position, by the scale given. Cpdf.shiftContents(Cpdf.Pdf, List{Int32}, Double, Double) Shifts the content of the pages in the range. Cpdf.rotate(Cpdf.Pdf, List{Int32}, Int32) Changes the viewing rotation to an absolute value. Appropriate rotations are 0, 90, 180, 270. Cpdf.rotateBy(Cpdf.Pdf, List{Int32}, Int32) Rotates the content about the centre of the page by the given number of degrees, in a clockwise direction. Cpdf.rotateContents(Cpdf.Pdf, List{Int32}, Double) Rotates the content about the centre of the page by the given number of degrees, in a clockwise direction. Cpdf.upright(Cpdf.Pdf, List{Int32}) Changes the viewing rotation of the pages in the range, counter-rotating the dimensions and content such that there is no visual change. Cpdf.hFlip(Cpdf.Pdf, List{Int32}) Flips horizontally the pages in the range. Cpdf.vFlip(Cpdf.Pdf, List{Int32}) Flips vertically the pages in the range. Cpdf.crop(Cpdf.Pdf, List{Int32}, Double, Double, Double, Double) Crops a page, replacing any existing crop box. The dimensions are in points. Cpdf.removeCrop(Cpdf.Pdf, List{Int32}) Removes any crop box from pages in the range. Cpdf.removeTrim(Cpdf.Pdf, List{Int32}) Removes any trim box from pages in the range. Cpdf.removeArt(Cpdf.Pdf, List{Int32}) Removes any art box from pages in the range. Cpdf.removeBleed(Cpdf.Pdf, List{Int32}) Removes any bleed box from pages in the range. Cpdf.trimMarks(Cpdf.Pdf, List{Int32}) Adds trim marks to the given pages, if the trimbox exists. Cpdf.showBoxes(Cpdf.Pdf, List{Int32}) Shows the boxes on the given pages, for debug. Cpdf.hardBox(Cpdf.Pdf, List{Int32}, String) Makes a given box a 'hard box' i.e clips it explicitly. cpdf-2.8.1/html_manual/dotnetsplits/c00.tex0000664000175000017500000000057614771516640017302 0ustar johnjohnCpdf The Coherent PDF Library for .NET Cpdf.Pdf PDF document. Use the 'using' keyword, or call Dispose to make sure PDFs are deallocated. Cpdf.Pdf.Dispose Force disposal of the PDF. Cpdf.Pdf.Finalize Class destructor Cpdf.CPDFError Any function in this library may raise the CPDFError exception. Cpdf.CPDFError.#ctor(String) Construct a CPDFError which carries a string. cpdf-2.8.1/html_manual/dotnetsplits/c09.tex0000664000175000017500000000507114771516640017306 0ustar johnjohnCHAPTER 8. Logos, Watermarks and Stamps Cpdf.stampOn(Cpdf.Pdf, Cpdf.Pdf, List{Int32}) Stamps stamp_pdf on top of all the pages in the document which are in the range. The stamp is placed with its origin at the origin of the target document. Cpdf.stampUnder(Cpdf.Pdf, Cpdf.Pdf, List{Int32}) Stamps stamp_pdf under all the pages in the document which are in the range. The stamp is placed with its origin at the origin of the target document. Cpdf.stampExtended(Cpdf.Pdf, Cpdf.Pdf, List{Int32}, Boolean, Boolean, Cpdf.Position, Boolean) A stamping function with extra features. - isover true, pdf goes over pdf2, isover false, pdf goes under pdf2 - scale_stamp_to_fit scales the stamp to fit the page - pos gives the position to put the stamp - relative_to_cropbox: if true, pos is relative to cropbox not mediabox. Cpdf.combinePages(Cpdf.Pdf, Cpdf.Pdf) Combines the PDFs page-by-page, putting each page of 'over' over each page of 'under'. Cpdf.Font Standard fonts Cpdf.Font.TimesRoman Times Roman Cpdf.Font.TimesBold Times Bold Cpdf.Font.TimesItalic Times Italic Cpdf.Font.TimesBoldItalic Times Bold Italic Cpdf.Font.Helvetica Helvetica Cpdf.Font.HelveticaBold Helvetica Bold Cpdf.Font.HelveticaOblique Helvetica Oblique Cpdf.Font.HelveticaBoldOblique Helvetica Bold Oblique Cpdf.Font.Courier Courier Cpdf.Font.CourierBold Courier Bold Cpdf.Font.CourierOblique Courier Oblique Cpdf.Font.CourierBoldOblique Courier Bold Oblique Cpdf.Justification Justifications Cpdf.Justification.LeftJustify Left justify Cpdf.Justification.CentreJustify Centre justify Cpdf.Justification.RightJustify Right justify Cpdf.addText(Boolean, Cpdf.Pdf, List{Int32}, String, Cpdf.Position, Double, Int32, Cpdf.Font, Double, Double, Double, Double, Boolean, Boolean, Boolean, Double, Cpdf.Justification, Boolean, Boolean, String, Double, Boolean) Adds text to the pages in the given range. Cpdf.addTextSimple(Cpdf.Pdf, List{Int32}, String, Cpdf.Position, Cpdf.Font, Double) Adds text with most parameters default. Cpdf.removeText(Cpdf.Pdf, List{Int32}) Removes any text added by cpdf from the given pages. Cpdf.textWidth(Cpdf.Font, String) Returns the width of a given string in the given font in thousandths of a point. Cpdf.addContent(String, Boolean, Cpdf.Pdf, List{Int32}) Adds page content before (if true) or after (if false) the existing content to pages in the given range in the given PDF. Cpdf.stampAsXObject(Cpdf.Pdf, List{Int32}, Cpdf.Pdf) Stamps stamp_pdf onto the pages in the given range in pdf as a shared Form XObject. The name of the newly-created XObject is returned. cpdf-2.8.1/html_manual/dotnetsplits/c12.tex0000664000175000017500000001562114771516640017302 0ustar johnjohnCHAPTER 11. Document Information and Metadata Cpdf.isLinearized(String) Finds out if a document is linearized as quickly as possible without loading it. Cpdf.getVersion(Cpdf.Pdf) Returns the minor version number of a document. Cpdf.getMajorVersion(Cpdf.Pdf) Returns the minor version number of a document. Cpdf.getTitle(Cpdf.Pdf) Returns the title of a document. Cpdf.getAuthor(Cpdf.Pdf) Returns the author of a document. Cpdf.getSubject(Cpdf.Pdf) Returns the subject of a document. Cpdf.getKeywords(Cpdf.Pdf) Returns the keywords of a document. Cpdf.getCreator(Cpdf.Pdf) Returns the creator of a document. Cpdf.getProducer(Cpdf.Pdf) Returns the producer of a document. Cpdf.getCreationDate(Cpdf.Pdf) Returns the creation date of a document. Cpdf.getModificationDate(Cpdf.Pdf) Returns the modification date of a document. Cpdf.getTitleXMP(Cpdf.Pdf) Returns the XMP title of a document. Cpdf.getAuthorXMP(Cpdf.Pdf) Returns the XMP author of a document. Cpdf.getSubjectXMP(Cpdf.Pdf) Returns the XMP subject of a document. Cpdf.getKeywordsXMP(Cpdf.Pdf) Returns the XMP keywords of a document. Cpdf.getCreatorXMP(Cpdf.Pdf) Returns the XMP creator of a document. Cpdf.getProducerXMP(Cpdf.Pdf) Returns the XMP producer of a document. Cpdf.getCreationDateXMP(Cpdf.Pdf) Returns the XMP creation date of a document. Cpdf.getModificationDateXMP(Cpdf.Pdf) Returns the XMP modification date of a document. Cpdf.setTitle(Cpdf.Pdf, String) Sets the title of a document. Cpdf.setAuthor(Cpdf.Pdf, String) Sets the author of a document. Cpdf.setSubject(Cpdf.Pdf, String) Sets the subject of a document. Cpdf.setKeywords(Cpdf.Pdf, String) Sets the keywords of a document. Cpdf.setCreator(Cpdf.Pdf, String) Sets the creator of a document. Cpdf.setProducer(Cpdf.Pdf, String) Sets the producer of a document. Cpdf.setCreationDate(Cpdf.Pdf, String) Sets the creation date of a document. Cpdf.setModificationDate(Cpdf.Pdf, String) Sets the modification date of a document. Cpdf.setTitleXMP(Cpdf.Pdf, String) Sets the XMP title of a document. Cpdf.setAuthorXMP(Cpdf.Pdf, String) Sets the XMP author of a document. Cpdf.setSubjectXMP(Cpdf.Pdf, String) Sets the XMP subject of a document. Cpdf.setKeywordsXMP(Cpdf.Pdf, String) Sets the XMP keywords of a document. Cpdf.setCreatorXMP(Cpdf.Pdf, String) Sets the XMP creator of a document. Cpdf.setProducerXMP(Cpdf.Pdf, String) Sets the XMP producer of a document. Cpdf.setCreationDateXMP(Cpdf.Pdf, String) Sets the XMP creation date of a document. Cpdf.setModificationDateXMP(Cpdf.Pdf, String) Sets the XMP modification date of a document. Cpdf.getDateComponents(String, Int32@, Int32@, Int32@, Int32@, Int32@, Int32@, Int32@, Int32@) Returns the components from a PDF date string. Cpdf.dateStringOfComponents(Int32, Int32, Int32, Int32, Int32, Int32, Int32, Int32) Builds a PDF date string from individual components. Cpdf.getPageRotation(Cpdf.Pdf, Int32) Gets the viewing rotation for a given page. Cpdf.hasBox(Cpdf.Pdf, Int32, String) Returns true, if that page has the given box. E.g "/CropBox". Cpdf.getMediaBox(Cpdf.Pdf, Int32, Double@, Double@, Double@, Double@) Cpdf.getCropBox(Cpdf.Pdf, Int32, Double@, Double@, Double@, Double@) Cpdf.getTrimBox(Cpdf.Pdf, Int32, Double@, Double@, Double@, Double@) Cpdf.getArtBox(Cpdf.Pdf, Int32, Double@, Double@, Double@, Double@) Cpdf.getBleedBox(Cpdf.Pdf, Int32, Double@, Double@, Double@, Double@) These functions get a box given the document, page number, min x, max x, min y, max y in points. Only succeeds if such a box exists, as checked by hasBox. Cpdf.setMediabox(Cpdf.Pdf, List{Int32}, Double, Double, Double, Double) Cpdf.setCropBox(Cpdf.Pdf, List{Int32}, Double, Double, Double, Double) Cpdf.setTrimBox(Cpdf.Pdf, List{Int32}, Double, Double, Double, Double) Cpdf.setArtBox(Cpdf.Pdf, List{Int32}, Double, Double, Double, Double) Cpdf.setBleedBox(Cpdf.Pdf, List{Int32}, Double, Double, Double, Double) These functions set a box given the document, page range, min x, max x, min y, max y in points. Cpdf.markTrapped(Cpdf.Pdf) Marks a document as trapped. Cpdf.markUntrapped(Cpdf.Pdf) Marks a document as untrapped. Cpdf.markTrappedXMP(Cpdf.Pdf) Marks a document as trapped in XMP metadata. Cpdf.markUntrappedXMP(Cpdf.Pdf) Marks a document as untrapped in XMP metadata. Cpdf.Layout Layouts Cpdf.Layout.SinglePage Single page Cpdf.Layout.OneColumn One column Cpdf.Layout.TwoColumnLeft Two column left Cpdf.Layout.TwoColumnRight Two column right Cpdf.Layout.TwoPageLeft Two page left Cpdf.Layout.TwoPageRight Two page right Cpdf.setPageLayout(Cpdf.Pdf, Cpdf.Layout) Sets the page layout for a document. Cpdf.PageMode Page modes Cpdf.PageMode.UseNone Use none Cpdf.PageMode.UseOutlines Use outlines Cpdf.PageMode.UseThumbs Use thumbs Cpdf.PageMode.UseOC Use OC Cpdf.PageMode.UseAttachments Use attachments Cpdf.setPageMode(Cpdf.Pdf, Cpdf.PageMode) Sets the page mode for a document. Cpdf.hideToolbar(Cpdf.Pdf, Boolean) Sets the hide toolbar flag. Cpdf.hideMenubar(Cpdf.Pdf, Boolean) Sets the hide menubar flag. Cpdf.hideWindowUi(Cpdf.Pdf, Boolean) Sets the hide window UI flag. Cpdf.fitWindow(Cpdf.Pdf, Boolean) Sets the fit window flag. Cpdf.centerWindow(Cpdf.Pdf, Boolean) Sets the center window flag. Cpdf.displayDocTitle(Cpdf.Pdf, Boolean) Sets the display doc title flag. Cpdf.openAtPage(Cpdf.Pdf, Boolean, Int32) Sets the PDF to open, possibly with zoom-to-fit, at the given page number. Cpdf.setMetadataFromFile(Cpdf.Pdf, String) Sets the XMP metadata of a document, given a file name. Cpdf.setMetadataFromByteArray(Cpdf.Pdf, Byte[]) Sets the XMP metadata from an array of bytes. Cpdf.removeMetadata(Cpdf.Pdf) Removes the XMP metadata from a document. Cpdf.getMetadata(Cpdf.Pdf) Returns the XMP metadata from a document. Cpdf.createMetadata(Cpdf.Pdf) Builds fresh metadata as best it can from existing metadata in the document. Cpdf.setMetadataDate(Cpdf.Pdf, String) Sets the metadata date for a PDF. The date is given in PDF date format -- cpdf will convert it to XMP format. The date 'now' means now. Cpdf.PageLabelStyle Page label styles Cpdf.PageLabelStyle.DecimalArabic 1, 2, 3... Cpdf.PageLabelStyle.UppercaseRoman I, II, III... Cpdf.PageLabelStyle.LowercaseRoman i, ii, iii... Cpdf.PageLabelStyle.UppercaseLetters A, B, C... Cpdf.PageLabelStyle.LowercaseLetters a, b, c... Cpdf.addPageLabels(Cpdf.Pdf, Cpdf.PageLabelStyle, String, Int32, List{Int32}, Boolean) Adds page labels. The prefix is prefix text for each label. The range is the page range the labels apply to. Offset can be used to shift the numbering up or down. Cpdf.removePageLabels(Cpdf.Pdf) Removes the page labels from the document. Cpdf.getPageLabelStringForPage(Cpdf.Pdf, Int32) Calculates the full label string for a given page, and returns it. Cpdf.startGetPageLabels(Cpdf.Pdf) Cpdf.getPageLabelStyle(Int32) Cpdf.getPageLabelPrefix(Int32) Cpdf.getPageLabelOffset(Int32) Cpdf.getPageLabelRange(Int32) Cpdf.endGetPageLabels cpdf-2.8.1/html_manual/dotnetsplits/c06.tex0000664000175000017500000000046314771516640017303 0ustar johnjohnCHAPTER 5. Compression Cpdf.compress(Cpdf.Pdf) Compresses any uncompressed streams in the given PDF using the Flate algorithm. Cpdf.decompress(Cpdf.Pdf) Decompresses any streams in the given PDF, so long as the compression method is supported. Cpdf.squeezeInMemory(Cpdf.Pdf) Squeezes a pdf in memory. cpdf-2.8.1/html_manual/dotnetsplits/c11.tex0000664000175000017500000000015314771516640017273 0ustar johnjohnCHAPTER 10. Annotations Cpdf.annotationsJSON(Cpdf.Pdf) Returns the annotations from a PDF in JSON format cpdf-2.8.1/html_manual/dotnetsplits/c19.tex0000664000175000017500000000325014771516640017304 0ustar johnjohnCHAPTER 18. Miscellaneous Cpdf.draft(Cpdf.Pdf, List{Int32}, Boolean) Removes images on the given pages, replacing them with crossed boxes if 'boxes' is true. Cpdf.removeAllText(Cpdf.Pdf, List{Int32}) Removes all text from the given pages in a given document. Cpdf.blackText(Cpdf.Pdf, List{Int32}) Blackens all text on the given pages. Cpdf.blackLines(Cpdf.Pdf, List{Int32}) Blackens all lines on the given pages. Cpdf.blackFills(Cpdf.Pdf, List{Int32}) Blackens all fills on the given pages. Cpdf.thinLines(Cpdf.Pdf, List{Int32}, Double) Thickens every line less than min_thickness to min_thickness. Thickness given in points. Cpdf.copyId(Cpdf.Pdf, Cpdf.Pdf) Copies the /ID from one document to another. Cpdf.removeId(Cpdf.Pdf) Removes a document's /ID. Cpdf.setVersion(Cpdf.Pdf, Int32) Sets the minor version number of a document. Cpdf.setFullVersion(Cpdf.Pdf, Int32, Int32) Sets the full version number of a document. Cpdf.removeDictEntry(Cpdf.Pdf, String) Removes any dictionary entry with the given key anywhere in the document. Cpdf.removeDictEntrySearch(Cpdf.Pdf, String, String) Removes any dictionary entry with the given key whose value matches the given search term. Cpdf.replaceDictEntry(Cpdf.Pdf, String, String) Replaces the value associated with the given key. Cpdf.replaceDictEntrySearch(Cpdf.Pdf, String, String, String) Replaces the value associated with the given key if the existing value matches the search term. Cpdf.removeClipping(Cpdf.Pdf, List{Int32}) Removes all clipping from pages in the given range. Cpdf.getDictEntries(Cpdf.Pdf, String) Returns a JSON array containing any and all values associated with the given key, and fills in its length. cpdf-2.8.1/html_manual/dotnetsplits/c05.tex0000664000175000017500000000007014771516640017274 0ustar johnjohnCHAPTER 4. Encryption Encryption covered in Chapter 1. cpdf-2.8.1/html_manual/dotnetsplits/c15.tex0000664000175000017500000000137514771516640017306 0ustar johnjohnCHAPTER 14. Fonts. Cpdf.startGetFontInfo(Cpdf.Pdf) Cpdf.numberFonts Cpdf.getFontPage(Int32) Cpdf.getFontName(Int32) Cpdf.getFontType(Int32) Cpdf.getFontEncoding(Int32) Cpdf.endGetFontInfo Retrieves font information. First, call startGetFontInfo(pdf). Now call numberFonts to return the number of fonts. For each font, call one or more of getFontPage, getFontName, getFontType, and getFontEncoding giving a serial number 0..n - 1 to return information. Finally, call endGetFontInfo to clean up. Cpdf.removeFonts(Cpdf.Pdf) Removes all font data from a file. Cpdf.copyFont(Cpdf.Pdf, Cpdf.Pdf, List{Int32}, Int32, String) Copies the given font from the given page in the 'from' PDF to every page in the 'to' PDF. The new font is stored under its font name. cpdf-2.8.1/html_manual/dotnetsplits/c16.tex0000664000175000017500000000100614771516640017276 0ustar johnjohnCHAPTER 15. PDF and JSON Cpdf.outputJSON(String, Boolean, Boolean, Boolean, Cpdf.Pdf) Outputs a PDF in JSON format to the given filename. If parse_content is true, page content is parsed. If no_stream_data is true, all stream data is suppressed entirely. Cpdf.outputJSONMemory(Cpdf.Pdf, Boolean, Boolean, Boolean) Like outputJSON, but it writes to a byte array in memory. Cpdf.fromJSON(String) Loads a PDF from a JSON file given its filename. Cpdf.fromJSONMemory(Byte[]) Loads a PDF from a JSON file in memory cpdf-2.8.1/html_manual/dotnetsplits/c01.tex0000664000175000017500000000212714771516640017275 0ustar johnjohnCHAPTER 0. Preliminaries Cpdf.startup Initialises the library. Must be called before any other function. Cpdf.version Returns a string giving the version number of the CPDF library. Cpdf.setFast Some operations have a fast mode. The default is 'slow' mode, which works even on old-fashioned files. For more details, see section 1.13 of the CPDF manual. This function sets the mode to fast globally. Cpdf.setSlow Some operations have a fast mode. The default is 'slow' mode, which works even on old-fashioned files. For more details, see section 1.13 of the CPDF manual. This functions sets the mode to slow globally. Cpdf.lastError Not to be called directly. Errors in .NET cpdf are raised by exceptions. Cpdf.lastErrorString Not to be called directly. Errors in .NET cpdf are raised by exceptions. Cpdf.clearError Not to be called directly. Errors in .NET cpdf are raised by exceptions. Cpdf.onExit A debug function which prints some information about resource usage. This can be used to detect if PDFs or ranges are being deallocated properly. Contrary to its name, it may be run at any time. cpdf-2.8.1/html_manual/dotnetsplits/c03.tex0000664000175000017500000000147614771516640017305 0ustar johnjohnCHAPTER 2. Merging and Splitting Cpdf.mergeSimple(List{Cpdf.Pdf}) Given a list of PDFs, merges the files into a new one, which is returned. Cpdf.merge(List{Cpdf.Pdf}, Boolean, Boolean) Merges the PDFs. If retain_numbering is true page labels are not rewritten. If remove_duplicate_fonts is true, duplicate fonts are merged. This is useful when the source documents for merging originate from the same source. Cpdf.mergeSame(List{Cpdf.Pdf}, Boolean, Boolean, List{List{Int32}}) The same as merge, except that it has an additional argument - a list of page ranges. This is used to select the pages to pick from each PDF. This avoids duplication of information when multiple discrete parts of a source PDF are included. Cpdf.selectPages(Cpdf.Pdf, List{Int32}) Returns a new document which just those pages in the page range. cpdf-2.8.1/html_manual/dotnetsplits/c10.tex0000664000175000017500000000225314771516640017275 0ustar johnjohnCHAPTER 9. Multipage facilities Cpdf.impose(Cpdf.Pdf, Double, Double, Boolean, Boolean, Boolean, Boolean, Boolean, Double, Double, Double) Imposes a PDF. There are two modes: imposing x * y, or imposing to fit a page of size x * y. This is controlled by fit. Columns imposes by columns rather than rows. rtl is right-to-left, btt bottom-to-top. Center is unused for now. Margin is the margin around the output, spacing the spacing between imposed inputs. Cpdf.twoUp(Cpdf.Pdf) Imposes a document two up. twoUpStack does so by doubling the page size, to fit two pages on one. Cpdf.twoUpStack(Cpdf.Pdf) Impose a document two up. twoUpStack does so by doubling the page size, to fit two pages on one. Cpdf.padBefore(Cpdf.Pdf, List{Int32}) Adds a blank page before each page in the given range. Cpdf.padAfter(Cpdf.Pdf, List{Int32}) Adds a blank page after each page in the given range. Cpdf.padEvery(Cpdf.Pdf, Int32) Adds a blank page after every n pages. Cpdf.padMultiple(Cpdf.Pdf, Int32) Adds pages at the end to pad the file to a multiple of n pages in length. Cpdf.padMultipleBefore(Cpdf.Pdf, Int32) Adds pages at the beginning to pad the file to a multiple of n pages in length. cpdf-2.8.1/html_manual/dotnetsplits/c14.tex0000664000175000017500000000141214771516640017275 0ustar johnjohnCHAPTER 13. Images. Cpdf.startGetImageResolution(Cpdf.Pdf, Double) Cpdf.getImageResolutionPageNumber(Int32) Cpdf.getImageResolutionImageName(Int32) Cpdf.getImageResolutionXPixels(Int32) Cpdf.getImageResolutionYPixels(Int32) Cpdf.getImageResolutionXRes(Int32) Cpdf.getImageResolutionYRes(Int32) Cpdf.endGetImageResolution Gets image data, including resolution at all points of use. Call startGetImageResolution(pdf, min_required_resolution) will begin the process of obtaining data on all image uses below min_required_resolution, returning the total number. So, to return all image uses, specify a very high min_required_resolution. Then, call the other functions giving a serial number 0..n - 1, to retrieve the data. Finally, call endGetImageResolution to clean up. cpdf-2.8.1/html_manual/dotnetsplits/c02.tex0000664000175000017500000001513414771516640017300 0ustar johnjohnCHAPTER 1. Basics Cpdf.fromFile(String, String) Loads a PDF file from a given file. Supply a user password (possibly blank) in case the file is encrypted. It won't be decrypted, but sometimes the password is needed just to load the file. Cpdf.fromFileLazy(String, String) Loads a PDF from a file, doing only minimal parsing. The objects will be read and parsed when they are actually needed. Use this when the whole file won't be required. Also supply a user password (possibly blank) in case the file is encrypted. It won't be decrypted, but sometimes the password is needed just to load the file. Cpdf.fromMemory(Byte[], String) Loads a file from memory given any user password. Cpdf.fromMemoryLazy(IntPtr, Int32, String) Loads a file from memory, given a pointer and a length, and the user password, but lazily like fromFileLazy. The caller must use AllocHGlobal / Marshal.Copy / FreeHGlobal itself. It must not free the memory until the PDF is also gone. Cpdf.startEnumeratePDFs Cpdf.enumeratePDFsKey(Int32) Cpdf.enumeratePDFsInfo(Int32) Cpdf.endEnumeratePDFs To enumerate the list of currently allocated PDFs, call startEnumeratePDFs which gives the number, n, of PDFs allocated, then enumeratePDFsInfo and enumeratePDFsKey with index numbers from 0...(n - 1). Call endEnumeratePDFs to clean up. Cpdf.ptOfCm(Double) Converts a figure in centimetres to points (72 points to 1 inch) Cpdf.ptOfMm(Double) Converts a figure in millimetres to points (72 points to 1 inch) Cpdf.ptOfIn(Double) Converts a figure in inches to points (72 points to 1 inch) Cpdf.cmOfPt(Double) Converts a figure in points to centimetres (72 points to 1 inch) Cpdf.mmOfPt(Double) Converts a figure in points to millimetres (72 points to 1 inch) Cpdf.inOfPt(Double) Converts a figure in points to inches (72 points to 1 inch) Cpdf.parsePagespec(Cpdf.Pdf, String) Parses a page specification with reference to a given PDF (the PDF is supplied so that page ranges which reference pages which do not exist are rejected). Cpdf.validatePagespec(String) Validates a page specification so far as is possible in the absence of the actual document. Result is true if valid. Cpdf.stringOfPagespec(Cpdf.Pdf, List{Int32}) Builds a page specification from a page range. For example, the range containing 1, 2, 3, 6, 7, 8 in a document of 8 pages might yield "1-3, 6-end" Cpdf.blankRange Creates a range with no pages in. Cpdf.range(Int32, Int32) Builds a range from one page to another inclusive. For example, range(3, 7) gives the range 3, 4, 5, 6, 7 Cpdf.all(Cpdf.Pdf) The range containing all the pages in a given document. Cpdf.even(List{Int32}) Makes a range which contains just the even pages of another range. Cpdf.odd(List{Int32}) Makes a range which contains just the odd pages of another range. Cpdf.rangeUnion(List{Int32}, List{Int32}) Makes the union of two ranges giving a range containing the pages in range a and range b. Cpdf.difference(List{Int32}, List{Int32}) Makes the difference of two ranges, giving a range containing all the pages in a except for those which are also in b. Cpdf.removeDuplicates(List{Int32}) Deduplicates a range, making a new one. Cpdf.rangeLength(List{Int32}) Gives the number of pages in a range. Cpdf.rangeGet(List{Int32}, Int32) Gets the page number at position n in a range, where n runs from 0 to rangeLength - 1. Cpdf.rangeAdd(List{Int32}, Int32) Adds the page to a range, if it is not already there. Cpdf.isInRange(List{Int32}, Int32) Returns true if the page is in the range, false otherwise. Cpdf.pages(Cpdf.Pdf) Returns the number of pages in a PDF. Cpdf.pagesFast(String, String) Returns the number of pages in a given PDF, with given user password. It tries to do this as fast as possible, without loading the whole file. Cpdf.toFile(Cpdf.Pdf, String, Boolean, Boolean) Writes the file to a given filename. If linearize is true, it will be linearized if a linearizer is available. If make_id is true, it will be given a new ID. Cpdf.toFileExt(Cpdf.Pdf, String, Boolean, Boolean, Boolean, Boolean, Boolean) Writes the file to a given filename. If make_id is true, it will be given a new ID. If preserve_objstm is true, existing object streams will be preserved. If generate_objstm is true, object streams will be generated even if not originally present. If compress_objstm is true, object streams will be compressed (what we usually want). WARNING: the pdf argument will be invalid after this call, and should be not be used again. Cpdf.toMemory(Cpdf.Pdf, Boolean, Boolean) Writes a PDF file and returns as an array of bytes. Cpdf.isEncrypted(Cpdf.Pdf) Returns true if a documented is encrypted, false otherwise. Cpdf.decryptPdf(Cpdf.Pdf, String) Attempts to decrypt a PDF using the given user password. An exception is raised if the decryption fails. Cpdf.decryptPdfOwner(Cpdf.Pdf, String) Attempts to decrypt a PDF using the given owner password. Raises an exception if the decryption fails. Cpdf.Permission Permissions Cpdf.Permission.NoEdit Cannot edit the document Cpdf.Permission.NoPrint Cannot print the document Cpdf.Permission.NoCopy Cannot copy the document Cpdf.Permission.NoAnnot Cannot annotate the document Cpdf.Permission.NoForms Cannot edit forms in the document Cpdf.Permission.NoExtract Cannot extract information Cpdf.Permission.NoAssemble Cannot assemble into a bigger document Cpdf.Permission.NoHqPrint Cannot print high quality Cpdf.EncryptionMethod Encryption methods Cpdf.EncryptionMethod.Pdf40bit 40 bit RC4 encryption Cpdf.EncryptionMethod.Pdf128bit 128 bit RC4 encryption Cpdf.EncryptionMethod.Aes128bitfalse 128 bit AES encryption, do not encrypt metadata Cpdf.EncryptionMethod.Aes128bittrue 128 bit AES encryption, encrypt metadata Cpdf.EncryptionMethod.Aes256bitfalse Deprecated. Do not use for new files Cpdf.EncryptionMethod.Aes256bittrue Deprecated. Do not use for new files Cpdf.EncryptionMethod.Aes256bitisofalse 256 bit AES encryption, do not encrypt metadata Cpdf.EncryptionMethod.Aes256bitiosotrue 256 bit AES encryption, encrypt metadata Cpdf.toFileEncrypted(Cpdf.Pdf, Cpdf.EncryptionMethod, List{Cpdf.Permission}, String, String, Boolean, Boolean, String) Writes a file as encrypted. Cpdf.toFileEncryptedExt(Cpdf.Pdf, Cpdf.EncryptionMethod, List{Cpdf.Permission}, String, String, Boolean, Boolean, Boolean, Boolean, Boolean, String) Writes a file as encrypted with extra parameters. WARNING: the pdf argument will be invalid after this call, and should not be used again. Cpdf.hasPermission(Cpdf.Pdf, Cpdf.Permission) Returns true if the given permission (restriction) is present. Cpdf.encryptionKind(Cpdf.Pdf) Returns the encryption method currently in use on a document. cpdf-2.8.1/html_manual/dotnetsplits/c13.tex0000664000175000017500000000222214771516640017274 0ustar johnjohnCHAPTER 12. File Attachments Cpdf.attachFile(String, Cpdf.Pdf) Attaches a file to the pdf. It is attached at document level. Cpdf.attachFileToPage(String, Cpdf.Pdf, Int32) Attaches a file, given its file name, pdf, and the page number to which it should be attached. Cpdf.attachFileFromMemory(Byte[], String, Cpdf.Pdf) Attaches data from memory, just like attachFile. Cpdf.attachFileToPageFromMemory(Byte[], String, Cpdf.Pdf, Int32) Attaches to a page from memory, just like attachFileToPage. Cpdf.removeAttachedFiles(Cpdf.Pdf) Removes all page- and document-level attachments from a document. Cpdf.startGetAttachments(Cpdf.Pdf) Cpdf.numberGetAttachments Lists information about attachments. Call startGetAttachments(pdf) first, then numberGetAttachments to find out how many there are. Then getAttachmentName etc. to return each one 0...(n - 1). Finally, call endGetAttachments to clean up. Cpdf.getAttachmentName(Int32) Gets the name of an attachment. Cpdf.getAttachmentPage(Int32) Gets the page number. 0 = document level. Cpdf.getAttachmentData(Int32) Gets the attachment data itself. Cpdf.endGetAttachments Cleans up after getting attachments. cpdf-2.8.1/html_manual/README.txt0000664000175000017500000000030314771516640015124 0ustar johnjohnThe splits and pysplits and dotnetsplits are just copied from the parent directory - remember to update them. When we make command line / C / Python / .NET we upload it in a named subdirectory. cpdf-2.8.1/html_manual/javasplits/0000775000175000017500000000000014771516640015612 5ustar johnjohncpdf-2.8.1/html_manual/javasplits/cm1.tex0000664000175000017500000000215614771516640017020 0ustar johnjohnJcpdf: Java interface to the cpdf PDF tools =========================================== The DLLs "libcpdf" and "libjcpdf" are required. Before using the library, you must make sure your project or build environment has access to the cpdf DLL, which is not part of the Java .jar. You can add as am external requirement in your Java IDE. Or, you can install it in a standard location, such as the Windows system folder. On Windows, The DLL libcpdf.dll must be renamed to cpdf.dll, for Jcpdf to be able to find it. Follow the instructions at the end of Chapter 1 to write your first program. In addition, the Jcpdf package provides documentation with each function, which you can view in your IDE. Usage ----- Create an instance of the library with, for example: Jcpdf.jcpdf = new Jcpdf() You must call startup() to initialise the library prior to calling any other function. PDFs are of type Jcpdf.Pdf. Page ranges are of type Jcpdf.Range. Both PDFs and ranges are not automatically garbage-collected. Use try or the close() method to dispose of them. Exceptions are of type Jcpdf.CpdfError and may be raised by any function. cpdf-2.8.1/html_manual/javasplits/c08.tex0000664000175000017500000000011214771516640016720 0ustar johnjohn/* CHAPTER 7. Presentations */ /* Not included in the library version. */ cpdf-2.8.1/html_manual/javasplits/c18.tex0000664000175000017500000000254614771516640016736 0ustar johnjohn/* CHAPTER 17. Creating New PDFs */ /** Creates a blank document with pages of the given width (in points), height (in points), and number of pages. @param w width of page @param h height of page @param pages number of pages */ public native Pdf blankDocument(double w, double h, int pages) throws CpdfError; /** Makes a blank document given a page size and number of pages. @param papersize paper size, such as {@link #a0portrait a0portrait} @param pages number of pages */ public native Pdf blankDocumentPaper(int papersize, int pages) throws CpdfError; /** Typesets a UTF8 text file ragged right on a page of size w * h in points in the given font and font size. @param w width of page @param h height of page @param font font, such as {@link #timesRoman timesRoman} @param fontsize font size @param filename file name */ public Pdf textToPDF(double w, double h, int font, double fontsize, String filename) throws CpdfError; /** Typesets a UTF8 text file ragged right on a page of the given size in the given font and font size. @param papersize paper size, such as {@link #a0portrait a0portrait} @param font font, such as {@link #timesRoman timesRoman} @param fontsize font size @param filename file name */ public Pdf textToPDFPaper(int papersize, int font, double fontsize, String filename) throws CpdfError; cpdf-2.8.1/html_manual/javasplits/c07.tex0000664000175000017500000000542114771516640016727 0ustar johnjohn/* CHAPTER 6. Bookmarks */ /** Starts the bookmark retrieval process for a given PDF. */ public native void startGetBookmarkInfo(Pdf pdf) throws CpdfError; /** Gets the number of bookmarks for the PDF given to {@link #startGetBookmarkInfo(Pdf) startGetBookmarkInfo}. */ public native int numberBookmarks() throws CpdfError; /** Gets the bookmark level for the given bookmark 0...(n - 1). */ public native int getBookmarkLevel(int serial) throws CpdfError; /** Gets the bookmark target page for the given PDF (which must be the same as the PDF passed to {@link #startGetBookmarkInfo(Pdf) startGetBookmarkInfo}) and bookmark 0...(n - 1). */ public native int getBookmarkPage(Pdf pdf, int serial) throws CpdfError; /** Returns the text of bookmark 0...(n - 1)) */ public String getBookmarkText(int serial) throws CpdfError; /** Returns true if the bookmark is open. */ public native boolean getBookmarkOpenStatus(int serial) throws CpdfError; /** Ends the bookmark retrieval process, cleaning up. */ public native void endGetBookmarkInfo() throws CpdfError; /** Starts the bookmark setting process for n bookmarks. */ public native void startSetBookmarkInfo(int n) throws CpdfError; /** Set bookmark level for the given bookmark 0...(n - 1). */ public native void setBookmarkLevel(int serial, int level) throws CpdfError; /** Sets the bookmark target page for the given PDF (which must be the same as the PDF to be passed to {@link #endSetBookmarkInfo(Pdf) endSetBookmarkInfo}) and bookmark 0...(n - 1). */ public native void setBookmarkPage(Pdf pdf, int serial, int pagenum) throws CpdfError; /** Sets the open status of bookmark 0...(n - 1). */ public native void setBookmarkOpenStatus(int serial, boolean open) throws CpdfError; /** Sets the text of bookmark 0...(n - 1). */ public void setBookmarkText(int serial, String text) throws CpdfError; /** Ends the bookmark setting process, writing the bookmarks to the given PDF. */ public native void endSetBookmarkInfo(Pdf pdf) throws CpdfError; /** Returns the bookmark data in JSON format. */ public native byte[] getBookmarksJSON(Pdf pdf) throws CpdfError; /** Sets the bookmarks from JSON bookmark data. */ public native void setBookmarksJSON(Pdf pdf, byte[] data) throws CpdfError; /** Typesets a table of contents from existing bookmarks and prepends it to the document. @param pdf PDF document @param font font, such as {@link #timesRoman timesRoman} @param fontsize font size @param title table of contents title @param bookmark if true, the table of contents gets its own bookmark. */ public void tableOfContents(Pdf pdf, int font, double fontsize, String title, boolean bookmark) throws CpdfError; cpdf-2.8.1/html_manual/javasplits/c17.tex0000664000175000017500000000216014771516640016725 0ustar johnjohn/* CHAPTER 16. Optional Content Groups */ /** Begins retrieving optional content group names. The serial number 0..n - 1 is returned. */ public native int startGetOCGList(Pdf pdf) throws CpdfError; /** Retrieves an entry in the optional content group list, given the serial number 0..n - 1. */ public native String OCGListEntry(int serial) throws CpdfError; /** Ends retrieval of optional content group names. */ public native void endGetOCGList() throws CpdfError; /** Renames an optional content group. @param pdf PDF document @param f name to rename from @param t name to rename to */ public native void OCGRename(Pdf pdf, String f, String t) throws CpdfError; /** Ensures that every optional content group appears in the OCG order list. */ public native void OCGOrderAll(Pdf pdf) throws CpdfError; /** Coalesces optional content groups. For example, if we merge or stamp two files both with an OCG called "Layer 1", we will have two different optional content groups. This function will merge the two into a single optional content group. */ public native void OCGCoalesce(Pdf pdf) throws CpdfError; cpdf-2.8.1/html_manual/javasplits/c04.tex0000664000175000017500000001072714771516640016731 0ustar johnjohn/* CHAPTER 3. Pages */ /** Scales the page dimensions and content by the given scale, about (0, 0). Other boxes (crop etc. are altered as appropriate). @param pdf PDF document @param range page range @param sx X scale @param sy Y scale*/ public native void scalePages(Pdf pdf, Range range, double sx, double sy) throws CpdfError; /** Scales the content to fit new page dimensions (width x height) multiplied by scale (typically 1.0). Other boxes (crop etc. are altered as appropriate). @param pdf PDF document @param range page range @param w width in points @param h height in points @param scale scale (typically 1.0) */ public native void scaleToFit(Pdf pdf, Range range, double w, double h, double scale) throws CpdfError; /** Scales the page content to fit the given page size, possibly multiplied by scale (typically 1.0). @param pdf PDF document @param range page range @param papersize paper size, such as {@link #a4portrait a0portrait} @param scale scale (typically 1.0) */ public native void scaleToFitPaper(Pdf pdf, Range range, int papersize, double scale) throws CpdfError; /** Scales the contents of the pages in the range about the point given by the anchor, p1 and p2 by the scale given. See the documentation for the chosen anchor. @param pdf PDF document @param range page range @param anchor position anchor, such as {@link #posCentre posCentre} @param p1 position parameter 1 @param p2 position parameter 2 @param scale scale */ public native void scaleContents(Pdf pdf, Range range, int anchor, double p1, double p2, double scale) throws CpdfError; /** Shifts the content of the pages in the range. @param pdf PDF document @param range page range @param dx X shift @param dy Y shift */ public native void shiftContents(Pdf pdf, Range range, double dx, double dy) throws CpdfError; /** Changes the viewing rotation to an absolute value. Appropriate rotations are 0, 90, 180, 270. @param pdf PDF document @param range page range @param angle viewing rotation */ public native void rotate(Pdf pdf, Range range, int angle) throws CpdfError; /** Changes the viewing rotation by a relative value. Appropriate rotations are 0, 90, 180, 270. @param pdf PDF document @param range page range @param angle viewing rotation */ public native void rotateBy(Pdf pdf, Range range, int angle) throws CpdfError; /** Rotates the content about the centre of the page by the given number of degrees, in a clockwise direction. @param pdf PDF document @param range page range @param angle angle in degrees */ public native void rotateContents(Pdf pdf, Range range, double angle) throws CpdfError; /** Changes the viewing rotation of the pages in the range, counter-rotating the dimensions and content such that there is no visual change. */ public native void upright(Pdf pdf, Range range) throws CpdfError; /** Flips horizontally the pages in the range. */ public native void hFlip(Pdf pdf, Range range) throws CpdfError; /** Flips vertically the pages in the range. */ public native void vFlip(Pdf pdf, Range range) throws CpdfError; /** Crops a page, replacing any existing crop box. The dimensions are in points. @param pdf PDF document @param range page range @param x minimum X @param y minimum Y @param w width @param h height */ public native void crop(Pdf pdf, Range range, double x, double y, double w, double h) throws CpdfError; /** Removes any crop box from pages in the range. */ public native void removeCrop(Pdf pdf, Range range) throws CpdfError; /** Removes any trim box from pages in the range. */ public native void removeTrim(Pdf pdf, Range range) throws CpdfError; /** Removes any art box from pages in the range. */ public native void removeArt(Pdf pdf, Range range) throws CpdfError; /** Removes any bleed box from pages in the range. */ public native void removeBleed(Pdf pdf, Range range) throws CpdfError; /** Adds trim marks to the given pages, if the trimbox exists. */ public native void trimMarks(Pdf pdf, Range range) throws CpdfError; /** Shows the boxes on the given pages, for debug. */ public native void showBoxes(Pdf pdf, Range range) throws CpdfError; /** Makes a given box a 'hard box' i.e clips it explicitly. @param pdf PDF document @param range page range @param box box name e.g "/CropBox" */ public native void hardBox(Pdf pdf, Range range, String box) throws CpdfError; cpdf-2.8.1/html_manual/javasplits/c00.tex0000664000175000017500000001462314771516640016724 0ustar johnjohn// Enumerations /** Permission: cannot edit the document */ public static int noEdit = 0; /** Permission: cannot print the document */ public static int noPrint = 1; /** Permission: cannot copy the document */ public static int noCopy = 2; /** Permission: cannot annotate the document */ public static int noAnnot = 3; /** Permission: cannot edit forms in the document */ public static int noForms = 4; /** Permission: cannot extract information */ public static int noExtract = 5; /** Permission: cannot assemble into a bigger document */ public static int noAssemble = 6; /** Permission: cannot print high quality */ public static int noHqPrint = 7; /** Encryption method: 40 bit RC4 encryption */ public static int pdf40bit = 0; /** Encryption method: 128 bit RC4 encryption */ public static int pdf128bit = 1; /** Encryption method: 128 bit AES encryption, do not encrypt metadata */ public static int aes128bitfalse = 2; /** Encryption method: 128 bit AES encryption, encrypt metadata */ public static int aes128bittrue = 3; /** Encryption method: Deprecated. Do not use for new files */ public static int aes256bitfalse = 4; /** Encryption method: Deprecated. Do not use for new files */ public static int aes256bittrue = 5; /** Encryption method: 256 bit AES encryption, do not encrypt metadata */ public static int aes256bitisofalse = 6; /** Encryption method: 256 bit AES encryption, encrypt metadata */ public static int aes256bitisotrue = 7; /** Page label style: 1, 2, 3... */ public static int decimalArabic = 0; /** Page label style: I, II, III... */ public static int uppercaseRoman = 1; /** Page label style: i, ii, iii... */ public static int lowercaseRoman = 2; /** Page label style: A, B, C... */ public static int uppercaseLetters = 3; /** Page label style: a, b, c...*/ public static int lowercaseLetters = 4; /** Layout: single page */ public static int singlePage = 0; /** Layout: one column */ public static int oneColumn = 1; /** Layout: two column left */ public static int twoColumnLeft = 2; /** Layout: two column right */ public static int twoColumnRight = 3; /** Layout: two page left */ public static int twoPageLeft = 4; /** Layout: two page right */ public static int twoPageRight = 5; /** Page mode: use none */ public static int useNone = 0; /** Page mode: use outlines */ public static int useOutlines = 1; /** Page mode: use thumbs */ public static int useThumbs = 2; /** Page mode: use OC */ public static int useOC = 3; /** Page mode: use Attachments */ public static int useAttachments = 4; /** Paper size: A0 Portrait */ public static int a0portrait = 0; /** Paper size: A1 Portrait */ public static int a1portrait = 1; /** Paper size: A2 Portrait */ public static int a2portrait = 2; /** Paper size: A3 Portrait */ public static int a3portrait = 3; /** Paper size: A4 Portrait */ public static int a4portrait = 4; /** Paper size: A5 Portrait */ public static int a5portrait = 5; /** Paper size: A0 Landscape */ public static int a0landscape = 6; /** Paper size: A1 Landscape */ public static int a1landscape = 7; /** Paper size: A2 Landscape */ public static int a2landscape = 8; /** Paper size: A3 Landscape */ public static int a3landscape = 9; /** Paper size: A4 Landscape */ public static int a4landscape = 10; /** Paper size: A5 Landscape */ public static int a5landscape = 11; /** Paper size: US Letter Portrait */ public static int usletterportrait = 12; /** Paper size: US Letter Landscape */ public static int usletterlandscape = 13; /** Paper size: US Legal Portrait */ public static int uslegalportrait = 14; /** Paper size: US Legal Landscape */ public static int uslegallandscape = 15; /** Standard font: Times Roman */ public static int timesRoman = 0; /** Standard font: Times Bold */ public static int timesBold = 1; /** Standard font: Times Italic */ public static int timesItalic = 2; /** Standard font: Times Bold Italic */ public static int timesBoldItalic = 3; /** Standard font: Helvetica */ public static int helvetica = 4; /** Standard font: Helvetica Bold */ public static int helveticaBold = 5; /** Standard font: Helvetica Oblique */ public static int helveticaOblique = 6; /** Standard font: Helvetica Bold Oblique */ public static int helveticaBoldOblique = 7; /** Standard font: Courier */ public static int courier = 8; /** Standard font: Courier Bold */ public static int courierBold = 9; /** Standard font: Courier Oblique */ public static int courierOblique = 10; /** Standard font: Courier Bold Oblique */ public static int courierBoldOblique = 11; /** Position anchor: absolute centre. Takes two numbers, x and y. */ public static int posCentre = 0; /** Position anchor: absolute left. Takes two numbers, x and y. */ public static int posLeft = 1; /** Position anchor: absolute right. Takes two numbers, x and y. */ public static int posRight = 2; /** Position anchor: the top centre of the page. Takes one number - distance from top. Second number ignored. */ public static int top = 3; /** Position anchor: the top left of the page. Takes one numbers - distance from top left. Second number ignored. */ public static int topLeft = 4; /** Position anchor: the top right of the page. Takes one number - distance from top right. Second number ignored. */ public static int topRight = 5; /** Position anchor: the left hand side of the page, halfway down. Takes one number - distance from left middle. Second number ignored. */ public static int left = 6; /** Position anchor: the bottom left of the page. Takes one number - distance from bottom left. Second number ignored. */ public static int bottomLeft = 7; /** Position anchor: the bottom middle of the page. Takes one number - distance from bottom middle. Second number ignored. */ public static int bottom = 8; /** Position anchor: the bottomm right of the page. Takes one number - distance from bottom right. Second number ignored. */ public static int bottomRight = 9; /** Position anchor: the right hand side of the page, halfway down. Takes one number - distance from right middle. Second number ignored. */ public static int right = 10; /** Position anchor: diagonal, bottom left to top right. Takes no numbers. Both numbers ignored. */ public static int diagonal = 11; /** Position anchor: diagonal, top left to bottom right. Takes no numbers. Both numbers ignored. */ public static int reverseDiagonal = 12; /** Justification: left */ public static int leftJustify = 0; /** Justification: centre */ public static int centreJustify = 1; /** Justification: right */ public static int rightJusitfy = 2; cpdf-2.8.1/html_manual/javasplits/c09.tex0000664000175000017500000001156514771516640016737 0ustar johnjohn/* CHAPTER 8. Logos, Watermarks and Stamps */ /** Stamps another PDF on top of all the pages in the document which are in the range. The stamp is placed with its origin at the origin of the target document. @param stamp_pdf stamp PDF document @param pdf PDF document @param range page range */ public native void stampOn(Pdf stamp_pdf, Pdf pdf, Range range) throws CpdfError; /** Stamps another PDF under all the pages in the document which are in the range. The stamp is placed with its origin at the origin of the target document. @param stamp_pdf stamp PDF document @param pdf PDF document @param range page range */ public native void stampUnder(Pdf stamp_pdf, Pdf pdf, Range range) throws CpdfError; /** A stamping function with extra features. @param pdf first PDF document @param pdf2 second PDF document @param range page range @param isover if true, pdf goes over pdf2 otherwise under @param scale_stamp_to_fit if true scales the stamp to fit the page. @param anchor position anchor, such as {@link #posCentre posCentre} @param p1 position parameter one @param p2 position parameter two @param relative_to_cropbox if true, the position is relative to the crop box rather than the media box. */ public native void stampExtended(Pdf pdf, Pdf pdf2, Range range, boolean isover, boolean scale_stamp_to_fit, int anchor, double p1, double p2, boolean relative_to_cropbox) throws CpdfError; /** Combines the two PDFs page-by-page, putting each page of 'over' over each page of 'under'. */ public native Pdf combinePages(Pdf under, Pdf over) throws CpdfError; /** Adds text to the pages in the given range. @param metrics if true, only collect metrics @param pdf PDF document @param range page range @param text the text to stamp, including any special codes @param anchor position anchor, such as {@link #posCentre posCentre} @param p1 position parameter one @param p2 position parameter two @param linespacing line spacing @param bates starting bates number @param font font, such as {@link #timesRoman timesRoman} @param fontsize font size @param r red component of colour @param g green component of colour @param b blue component of colour @param underneath if true, text goes under page @param cropbox if true, relative to cropbox rather than media box @param outline text is outline @param opacity opacity @param justification justification, such as {@link #leftJustify leftJustify} @param midline position is relative to midline not baseline @param topline position is relative to topline not baseline @param filename file name, if requied by special code in text @param linewidth line width @param embed_fonts if true, embed fonts */ public void addText(boolean metrics, Pdf pdf, Range range, String text, int anchor, double p1, double p2, double linespacing, int bates, int font, double fontsize, double r, double g, double b, boolean underneath, boolean cropbox, boolean outline, double opacity, int justification, boolean midline, boolean topline, String filename, double linewidth, boolean embed_fonts) throws CpdfError; /** Adds text with most parameters default. @param pdf PDF document @param range page range @param text the text to stamp, including any special codes @param anchor position anchor, such as {@link #posCentre posCentre} @param p1 position parameter one @param p2 position parameter two @param font font, such as {@link #timesRoman timesRoman} @param fontsize font size */ public void addTextSimple(Pdf pdf, Range range, String text, int anchor, double p1, double p2, int font, double fontsize) throws CpdfError; /** Removes any text added by Jcpdf from the given pages. */ public native void removeText(Pdf pdf, Range range) throws CpdfError; /** Returns the width of a given string in the given font in thousandths of a point. @param font font, such as {@link #timesRoman timesRoman} @param text text*/ public int textWidth(int font, String text) throws CpdfError; /** Adds page content before or after the existing content to pages in the given range in the given PDF. @param s page content to add @param before if true new content goes before, else after @param pdf PDF document @param range page range */ public void addContent(String s, boolean before, Pdf pdf, Range range) throws CpdfError; /** Stamps a PDF onto the pages in the given range in pdf as a shared Form XObject. The name of the newly-created XObject is returned. @param pdf PDF document @param range page range @param stamp_pdf PDF document to stamp */ public native String stampAsXObject(Pdf pdf, Range range, Pdf stamp_pdf) throws CpdfError; cpdf-2.8.1/html_manual/javasplits/c12.tex0000664000175000017500000002461214771516640016726 0ustar johnjohn/* CHAPTER 11. Document Information and Metadata */ /** Finds out if a document is linearized as quickly as possible without loading it. */ public boolean isLinearized(String filename) throws CpdfError; /** Returns the minor version number of a document. */ public native int getVersion(Pdf pdf) throws CpdfError; /** Returns the major version number of a document. */ public native int getMajorVersion(Pdf pdf) throws CpdfError; /** Returns the title of a document. */ public String getTitle(Pdf pdf) throws CpdfError; /** Returns the author of a document. */ public String getAuthor(Pdf pdf) throws CpdfError; /** Returns the subject of a document. */ public String getSubject(Pdf pdf) throws CpdfError; /** Returns the keywords of a document. */ public String getKeywords(Pdf pdf) throws CpdfError; /** Returns the creator of a document. */ public String getCreator(Pdf pdf) throws CpdfError; /** Returns the producer of a document. */ public String getProducer(Pdf pdf) throws CpdfError; /** Returns the creation date of a document. */ public String getCreationDate(Pdf pdf) throws CpdfError; /** Returns the modification date of a document. */ public String getModificationDate(Pdf pdf) throws CpdfError; /** Returns the XMP title of a document. */ public String getTitleXMP(Pdf pdf) throws CpdfError; /** Returns the XMP author of a document. */ public String getAuthorXMP(Pdf pdf) throws CpdfError; /** Returns the XMP subject of a document. */ public String getSubjectXMP(Pdf pdf) throws CpdfError; /** Returns the XMP keywords of a document. */ public String getKeywordsXMP(Pdf pdf) throws CpdfError; /** Returns the XMP creator of a document. */ public String getCreatorXMP(Pdf pdf) throws CpdfError; /** Returns the XMP producer of a document. */ public String getProducerXMP(Pdf pdf) throws CpdfError; /** Returns the XMP creation date of a document. */ public String getCreationDateXMP(Pdf pdf) throws CpdfError; /** Returns the XMP modification date of a document. */ public String getModificationDateXMP(Pdf pdf) throws CpdfError; /** Sets the title of a document. */ public void setTitle(Pdf pdf, String str) throws CpdfError; /** Sets the author of a document. */ public void setAuthor(Pdf pdf, String str) throws CpdfError; /** Sets the subject of a document. */ public void setSubject(Pdf pdf, String str) throws CpdfError; /** Sets the keywords of a document. */ public void setKeywords(Pdf pdf, String str) throws CpdfError; /** Sets the creator of a document. */ public void setCreator(Pdf pdf, String str) throws CpdfError; /** Sets the producer of a document. */ public void setProducer(Pdf pdf, String str) throws CpdfError; /** Sets the creation date of a document. */ public void setCreationDate(Pdf pdf, String str) throws CpdfError; /** Sets the modification date of a document. */ public void setModificationDate(Pdf pdf, String str) throws CpdfError; /** Sets the XMP title of a document. */ public void setTitleXMP(Pdf pdf, String str) throws CpdfError; /** Sets the XMP author of a document. */ public void setAuthorXMP(Pdf pdf, String str) throws CpdfError; /** Sets the XMP subject of a document. */ public void setSubjectXMP(Pdf pdf, String str) throws CpdfError; /** Sets the XMP keywords of a document. */ public void setKeywordsXMP(Pdf pdf, String str) throws CpdfError; /** Sets the XMP creator of a document. */ public void setCreatorXMP(Pdf pdf, String str) throws CpdfError; /** Sets the XMP producer of a document. */ public void setProducerXMP(Pdf pdf, String str) throws CpdfError; /** Sets the XMP creation date of a document. */ public void setCreationDateXMP(Pdf pdf, String str) throws CpdfError; /** Sets the XMP modification date of a document. */ public void setModificationDateXMP(Pdf pdf, String str) throws CpdfError; /** Returns the components from a PDF date string in an array of length 8. @param datestring date string @param r return array */ public native void getDateComponents(String datestring, int[] r) throws CpdfError; /** Builds a PDF date string from individual components. */ public native String dateStringOfComponents(int year, int month, int day, int hour, int minute, int second, int hour_offset, int minute_offset) throws CpdfError; /** Gets the viewing rotation for a given page. */ public native int getPageRotation(Pdf pdf, int pagenumber) throws CpdfError; /** Returns true if the given page has the given box. E.g "/CropBox". @param pdf PDF document @param pagenumber page number @param boxname box name, e.g "/CropBox" */ public native boolean hasBox(Pdf pdf, int pagenumber, String boxname) throws CpdfError; /** These functions get a box given the document. The values are returned in a given array of length 4: min x, max x, min y, max y in points. Only succeeds if such a box exists, as checked by {@link #hasBox(Pdf, int, String) hasBox}. */ public native void getMediaBox(Pdf pdf, int pagenumber, double[] r) throws CpdfError; public native void getCropBox(Pdf pdf, int pagenumber, double[] r) throws CpdfError; public native void getBleedBox(Pdf pdf, int pagenumber, double[] r) throws CpdfError; public native void getArtBox(Pdf pdf, int pagenumber, double[] r) throws CpdfError; public native void getTrimBox(Pdf pdf, int pagenumber, double[] r) throws CpdfError; /** These functions set a box given the document page range, min x, max x, min y, max y in points. */ public native void setMediabox(Pdf pdf, Range range, double minx, double maxx, double miny, double maxy) throws CpdfError; public native void setCropBox(Pdf pdf, Range range, double minx, double maxx, double miny, double maxy) throws CpdfError; public native void setTrimBox(Pdf pdf, Range range, double minx, double maxx, double miny, double maxy) throws CpdfError; public native void setArtBox(Pdf pdf, Range range, double minx, double maxx, double miny, double maxy) throws CpdfError; public native void setBleedBox(Pdf pdf, Range range, double minx, double maxx, double miny, double maxy) throws CpdfError; /** Marks a document as trapped. */ public native void markTrapped(Pdf pdf) throws CpdfError; /** Marks a document as untrapped. */ public native void markUntrapped(Pdf pdf) throws CpdfError; /** Marks a document as trapped in XMP metadata. */ public native void markTrappedXMP(Pdf pdf) throws CpdfError; /** Marks a document as untrapped in XMP metadata. */ public native void markUntrappedXMP(Pdf pdf) throws CpdfError; /** Sets the page layout for a document, such as {@link #singlePage singlePage} */ public native void setPageLayout(Pdf pdf, int layout) throws CpdfError; /** Sets the page mode for a document, such as {@link #useNone useNone} */ public native void setPageMode(Pdf pdf, int mode) throws CpdfError; /** Sets the hide toolbar flag. */ public native void hideToolbar(Pdf pdf, boolean flag) throws CpdfError; /** Sets the hide menubar flag. */ public native void hideMenubar(Pdf pdf, boolean flag) throws CpdfError; /** Sets the hide window UI flag. */ public native void hideWindowUi(Pdf pdf, boolean flag) throws CpdfError; /** Sets the fit window flag. */ public native void fitWindow(Pdf pdf, boolean flag) throws CpdfError; /** Sets the center window flag. */ public native void centerWindow(Pdf pdf, boolean flag) throws CpdfError; /** Sets the display document title flag. */ public native void displayDocTitle(Pdf pdf, boolean flag) throws CpdfError; /** Sets the PDF to open, possibly with zoom-to-fit, at the given page number. @param pdf PDF document @param fit if true zoom to fit @param pagenumber page number */ public native void openAtPage(Pdf pdf, boolean fit, int pagenumber) throws CpdfError; /** Sets the XMP metadata of a document, given a file name. */ public void setMetadataFromFile(Pdf pdf, String filename) throws CpdfError; /** Sets the XMP metadata from an array of bytes. */ public native void setMetadataFromByteArray(Pdf pdf, byte[] data) throws CpdfError; /** Removes the XMP metadata from a document. */ public native void removeMetadata(Pdf pdf) throws CpdfError; /** Returns the XMP metadata from a document. */ public native byte[] getMetadata(Pdf pdf) throws CpdfError; /** Builds fresh XMP metadata as best it can from existing metadata in the document. */ public native void createMetadata(Pdf pdf) throws CpdfError; /** Sets the metadata date for a PDF. The date is given in PDF date format. Jcpdf will convert it to XMP format. The date "now" means now. */ public native void setMetadataDate(Pdf pdf, String date) throws CpdfError; /** Adds page labels to a document. @param pdf PDF document @param style label style, such as {@link #decimalArabic decimalArabic} @param prefix text for each label @param offset can be used to shift the numbering up or down @param range page range @param progress if true, labels progress */ public void addPageLabels(Pdf pdf, int style, String prefix, int offset, Range range, boolean progress) throws CpdfError /** Removes the page labels from the document. */ public native void removePageLabels(Pdf pdf) throws CpdfError; /** Calculates the full label string for a given page, and returns it. */ public String getPageLabelStringForPage(Pdf pdf, int pagenumber) throws CpdfError /** Gets page label data. Call {@link #startGetPageLabels(Pdf) startGetPageLabels} to find out how many there are, then use these serial numbers to get the style, prefix, offset and start value (note not a range). Call {@link #endGetPageLabels() endGetPageLabels} to clean up.

    For example, a document might have five pages of introduction with roman numerals, followed by the rest of the pages in decimal arabic, numbered from one:

    labelstyle = LowercaseRoman
    labelprefix = ""
    startpage = 1
    startvalue = 1

    labelstyle = DecimalArabic
    labelprefix = ""
    startpage = 6
    startvalue = 1
    */ public native int startGetPageLabels(Pdf pdf) throws CpdfError; public native void endGetPageLabels() throws CpdfError; public native int getPageLabelOffset(int n) throws CpdfError; public native int getPageLabelStyle(int n) throws CpdfError; public native int getPageLabelRange(int n) throws CpdfError; public String getPageLabelPrefix(int n) throws CpdfError; cpdf-2.8.1/html_manual/javasplits/c06.tex0000664000175000017500000000065014771516640016725 0ustar johnjohn/* CHAPTER 5. Compression */ /** Compresses any uncompressed streams in the given PDF using the Flate algorithm. */ public native void compress(Pdf pdf) throws CpdfError; /** Decompresses any streams in the given PDF, so long as the compression method is supported. */ public native void decompress(Pdf pdf) throws CpdfError; /** Squeezes a pdf in memory. */ public native void squeezeInMemory(Pdf pdf) throws CpdfError; cpdf-2.8.1/html_manual/javasplits/c11.tex0000664000175000017500000000023114771516640016714 0ustar johnjohn/* CHAPTER 10. Annotations */ /** Returns the annotations from a PDF in JSON format. */ public native byte[] annotationsJSON(Pdf pdf) throws CpdfError; cpdf-2.8.1/html_manual/javasplits/c19.tex0000664000175000017500000000654014771516640016735 0ustar johnjohn/* CHAPTER 18. Miscellaneous */ /** Removes images on the given pages, replacing them with crossed boxes if boxes is true. @param pdf PDF document @param range page range @param boxes add crossed boxes */ public native void draft(Pdf pdf, Range range, boolean boxes) throws CpdfError; /** Removes all text from the given pages in a given document. */ public native void removeAllText(Pdf pdf, Range range) throws CpdfError; /** Blackens all text on the given pages. */ public native void blackText(Pdf pdf, Range range) throws CpdfError; /** Blackens all lines on the given pages. */ public native void blackLines(Pdf pdf, Range range) throws CpdfError; /** Blackens all fills on the given pages. */ public native void blackFills(Pdf pdf, Range range) throws CpdfError; /** Thickens every line less than min_thickness to min_thickness. Thickness given in points. @param pdf PDF document @param range page range @param min_thickness minimum thickness */ public native void thinLines(Pdf pdf, Range range, double min_thickness) throws CpdfError; /** Copies the /ID from one document to another. @param pdf PDF document to copy from @param pdf2 PDF document to copy to */ public native void copyId(Pdf pdf, Pdf pdf2) throws CpdfError; /** Removes a document's /ID. */ public native void removeId(Pdf pdf) throws CpdfError; /** Sets the minor version number of a document. @param pdf PDF document @param version minor version number */ public native void setVersion(Pdf pdf, int version) throws CpdfError; /** Sets the full version number of a document. @param pdf PDF document @param major major version number @param minor minor version nuber */ public native void setFullVersion(Pdf pdf, int major, int minor) throws CpdfError; /** Removes any dictionary entry with the given key anywhere in the document. @param pdf PDF document @param key key to remove */ public native void removeDictEntry(Pdf pdf, String key) throws CpdfError; /** Removes any dictionary entry with the given key whose value matches the given search term. @param pdf PDF document @param key key to remove @param searchterm search term */ public native void removeDictEntrySearch(Pdf pdf, String key, String searchterm) throws CpdfError; /** Replaces the value associated with the given key. @param pdf PDF document @param key key whose value to replace @param newvalue value to replace with */ public native void replaceDictEntry(Pdf pdf, String key, String newvalue) throws CpdfError; /** Replaces the value associated with the given key if the existing value matches the search term. @param pdf PDF document @param key key whose value to replace @param newvalue value to replace with @param searchterm search term */ public native void replaceDictEntrySearch(Pdf pdf, String key, String newvalue, String searchterm) throws CpdfError; /** Removes all clipping from pages in the given range. */ public native void removeClipping(Pdf pdf, Range range) throws CpdfError; /** Returns a JSON array containing any and all values associated with the given key, and fills in its length. @param pdf PDF document @param key key to search for */ public native byte[] getDictEntries(Pdf pdf, String key) throws CpdfError; cpdf-2.8.1/html_manual/javasplits/c05.tex0000664000175000017500000000012114771516640016715 0ustar johnjohn/* CHAPTER 4. Encryption */ /* Encryption covered under Chapter 1 in cpdflib. */ cpdf-2.8.1/html_manual/javasplits/c15.tex0000664000175000017500000000300514771516640016722 0ustar johnjohn/* CHAPTER 14. Fonts. */ /** Retrieves font information. First, call {@link #startGetFontInfo(Pdf) startGetFontInfo}. Now call {@link #numberFonts() numberFonts} to return the number of fonts. For each font, call one or more of {@link #getFontPage(int) getFontPage}, {@link #getFontName(int) getFontName}, {@link #getFontType(int) getFontType}, and {@link #getFontEncoding(int) getFontEncoding} giving a serial number 0...n - 1 to return information. Finally, call {@link #endGetFontInfo() endGetFontInfo} to clean up. */ public native void startGetFontInfo(Pdf pdf) throws CpdfError; public native int numberFonts() throws CpdfError; public native String getFontName(int serial) throws CpdfError; public native int getFontPage(int serial) throws CpdfError; public native String getFontType(int setial) throws CpdfError; public native String getFontEncoding(int serial) throws CpdfError; public native void endGetFontInfo() throws CpdfError; /** Removes all font data from a file. */ public native void removeFonts(Pdf pdf) throws CpdfError; /** Copies the given font from the given page in the 'from' PDF to every page in the 'to' PDF. The new font is stored under its font name. @param from_pdf PDF document to copy from @param to_pdf PDF document to copy to @param range page range @param pagenumber page number of the page to copy from @param fontname font name */ public native void copyFont(Pdf from_pdf, Pdf to_pdf, Range range, int pagenumber, String fontname) throws CpdfError; cpdf-2.8.1/html_manual/javasplits/c16.tex0000664000175000017500000000222414771516640016725 0ustar johnjohn/* CHAPTER 15. PDF and JSON */ /** Outputs a PDF in JSON format to the given filename. @param filename file name @param parse_content parse page content @param no_stream_data all stream data is suppressed entirely @param decompress_streams streams are decompressed @param pdf PDF document */ public void outputJSON(String filename, boolean parse_content, boolean no_stream_data, boolean decompress_streams, Pdf pdf) throws CpdfError; /** Like outputJSON, but it writes to a byte array in memory. @param pdf PDF document @param parse_content parse page content @param no_stream_data all stream data is suppressed entirely @param decompress_streams streams are decompressed */ public native byte[] outputJSONMemory(Pdf pdf, boolean parse_content, boolean no_stream_data, boolean decompress_streams) throws CpdfError; /** Loads a PDF from a JSON file given its filename. */ public Pdf fromJSON(String filename) throws CpdfError; /** Loads a PDF from a JSON file in memory. */ public native Pdf fromJSONMemory(byte[] data) throws CpdfError; cpdf-2.8.1/html_manual/javasplits/c01.tex0000664000175000017500000000201414771516640016714 0ustar johnjohn/* CHAPTER 0. Preliminaries */ /** Initialises the library. Must be called before any other function. */ public native void startup() throws CpdfError; /** Returns a string giving the version number of the Jcpdf library. */ public native String version() throws CpdfError; /** Sets fast mode. Some operations have a fast mode. The default is 'slow' mode, which works even on old-fashioned files. For more details, see section 1.13 of the CPDF manual. This functions sets the mode to fast globally. */ public native void setFast() throws CpdfError; /** Sets slow mode. Some operations have a fast mode. The default is 'slow' mode, which works even on old-fashioned files. For more details, see section 1.13 of the CPDF manual. This functions sets the mode to slow globally. */ public native void setSlow() throws CpdfError; /** Prints some information about resource usage. This can be used to detect if PDFs or ranges are being deallocated properly. Contrary to its name, it may be run at any time. */ public native void onExit(); cpdf-2.8.1/html_manual/javasplits/c03.tex0000664000175000017500000000306214771516640016722 0ustar johnjohn/* CHAPTER 2. Merging and Splitting */ /** Given an array of PDFs, merges the documents into a new one, which is returned. */ public native Pdf mergeSimple(Pdf[] pdfs) throws CpdfError; /** Merges the PDFs. If retain_numbering is true page labels are not rewritten. If remove_duplicate_fonts is true, duplicate fonts are merged. This is useful when the source documents for merging originate from the same source. @param pdfs array of PDF documents @param retain_numbering retain page numbering in output @param remove_duplicate_fonts remove duplicate font data by merging */ public native Pdf merge(Pdf[] pdfs, boolean retain_numbering, boolean remove_duplicate_fonts) throws CpdfError; /** Merges PDFs when one or more are drawn from the same document. It has an additional argument - a list of page ranges. This is used to select the pages to pick from each PDF. This avoids duplication of information when multiple discrete parts of a source PDF are included. @param pdfs array of PDF documents @param retain_numbering retain page numbering in output @param remove_duplicate_fonts remove duplicate font data by merging @param ranges array of ranges, one for each PDF*/ public native Pdf mergeSame(Pdf[] pdfs, boolean retain_numbering, boolean remove_duplicate_fonts, Range[] ranges) throws CpdfError; /** Returns a new document with just those pages in the page range. * @param pdf PDF document * @param range range*/ public native Pdf selectPages(Pdf pdf, Range range) throws CpdfError; cpdf-2.8.1/html_manual/javasplits/c10.tex0000664000175000017500000000330014771516640016713 0ustar johnjohn/* CHAPTER 9. Multipage facilities */ /** Imposes a PDF. @param pdf PDF document @param x x parameter @param y y parameter @param fit true: impose to fit a page of size x by y; false: impose x by y @param columns imposes by columns rather than rows @param rtl impose right-to-left @param btt impose bottom-to-top @param center unused for now @param margin margin around the output @param spacing spacing between imposed inputs */ public native void impose(Pdf pdf, double x, double y, boolean fit, boolean columns, boolean rtl, boolean btt, boolean center, double margin, double spacing, double linewidth) throws CpdfError; /** Imposes a document two up. twoUp does so by shrinking the page size, to fit two pages on one. */ public native void twoUp(Pdf pdf) throws CpdfError; /** Imposes a document two up. twoUpStack does so by doubling the page size, to fit two pages on one. */ public native void twoUpStack(Pdf pdf) throws CpdfError; /** Adds a blank page before each page in the given range. */ public native void padBefore(Pdf pdf, Range range) throws CpdfError; /** Adds a blank page after each page in the given range. */ public native void padAfter(Pdf pdf, Range range) throws CpdfError; /** Adds a blank page after every n pages. */ public native void padEvery(Pdf pdf, int n) throws CpdfError; /** Adds pages at the end to pad the file to a multiple of n pages in length. */ public native void padMultiple(Pdf pdf, int n) throws CpdfError; /** Adds pages at the beginning to pad the file to a multiple of n pages in length. */ public native void padMultipleBefore(Pdf pdf, int n) throws CpdfError; cpdf-2.8.1/html_manual/javasplits/c14.tex0000664000175000017500000000227314771516640016727 0ustar johnjohn/* CHAPTER 13. Images. */ /** Gets image data, including resolution at all points of use. Call {@link #startGetImageResolution(pdf, double) startGetImageResolution(pdf, min_required_resolution)} to begin the process of obtaining data on all image uses below min_required_resolution, returning the total number. So, to return all image uses, specify a very high min_required_resolution. Then, call the other functions giving a serial number 0...n - 1, to retrieve the data. Finally, call {@link #endGetImageResolution() endGetImageResolution} to clean up. */ public native int startGetImageResolution(Pdf pdf, double res) throws CpdfError; public native int getImageResolutionPageNumber(int serial) throws CpdfError; public native String getImageResolutionImageName(int serial) throws CpdfError; public native int getImageResolutionXPixels(int serial) throws CpdfError; public native int getImageResolutionYPixels(int serial) throws CpdfError; public native double getImageResolutionXRes(int serial) throws CpdfError; public native double getImageResolutionYRes(int serial) throws CpdfError; public native void endGetImageResolution() throws CpdfError; cpdf-2.8.1/html_manual/javasplits/c02.tex0000664000175000017500000002465414771516640016733 0ustar johnjohn/* CHAPTER 1. Basics */ /** Loads a PDF document from a file. Supply a user password (possibly blank) in case the file is encrypted. It won't be decrypted, but sometimes the password is needed just to load the file. @param filename file name @param userpw user password */ public Pdf fromFile(String filename, String userpw) throws CpdfError; /** Loads a PDF document from a file, doing only minimal parsing. The objects will be read and parsed when they are actually needed. Use this when the whole file won't be required. Also supply a user password (possibly blank) in case the file is encrypted. It won't be decrypted, but sometimes the password is needed just to load the file. @param filename file name @param userpw user password */ public Pdf fromFileLazy(String filename, String userpw) throws CpdfError; /** Loads a PDF document from memory. Supply a user password (possibly blank) in case the file is encrypted. It won't be decrypted, but sometimes the password is needed just to load the file. @param data byte array containing the PDF file @param userpw user password */ public Pdf fromMemory(byte[] data, String userpw) throws CpdfError; /** Loads a file from memory and the user password, but lazily like {@link #fromFileLazy(String, String) fromFileLazy}. The caller must use {@link #fromMemoryLazyRelease(byte[]) fromMemoryLazyRelease} to free the memory. It must not free the memory until the PDF is also gone. */ public Pdf fromMemoryLazy(byte[] data, String userpw) throws CpdfError; /** Releases memory returned from {@link #fromMemoryLazy(byte[], String) fromMemoryLazy} @param data byte array previously passed to {@link #fromMemoryLazy(byte[], String) fromMemoryLazy} */ public native void fromMemoryLazyRelease(byte[] data) throws CpdfError; /** Begins enumerating currently allocated PDFs.

    To enumerate the list of currently allocated PDFs, call {@link #startEnumeratePDFs() startEnumeratePDFs} which gives the number, n, of PDFs allocated, then {@link #enumeratePDFsInfo(int) enumeratePDFsInfo} and {@link #enumeratePDFsKey(int) enumeratePDFsKey} with index numbers from 0...(n - 1). Call {@link #endEnumeratePDFs() endEnumeratePDFs} to clean up. */ public native int startEnumeratePDFs() throws CpdfError; /** Returns the key for a given PDF number. */ public native int enumeratePDFsKey(int n) throws CpdfError; /** Returns the info for a given PDF number. */ public native String enumeratePDFsInfo(int n) throws CpdfError; /** Ends enumeration of currently allocated PDFs. */ public native void endEnumeratePDFs() throws CpdfError; /** Converts a figure in centimetres to points. (72 points to 1 inch) */ public native double ptOfCm(double f) throws CpdfError; /** Converts a figure in millimetres to points. (72 points to 1 inch) */ public native double ptOfMm(double f) throws CpdfError; /** Converts a figure in inches to points (72. points to 1 inch) */ public native double ptOfIn(double f) throws CpdfError; /** Converts a figure in points to centimetres. (72 points to 1 inch) */ public native double cmOfPt(double f) throws CpdfError; /** Converts a figure in points to millimetres. (72 points to 1 inch) */ public native double mmOfPt(double f) throws CpdfError; /** Converts a figure in points to millimetres. (72 points to 1 inch) */ public native double inOfPt(double f) throws CpdfError; /** Parses a page specification such as 1,2,6-end with reference to a given PDF. (The PDF is supplied so that page ranges which reference pages which do not exist are rejected). @param pdf PDF document @param pagespec page specification */ public native Range parsePagespec(Pdf pdf, String pagespec) throws CpdfError; /** Validates a page specification so far as is possible in the absence of the actual document. Result is true if valid. */ public native boolean validatePagespec(String pagespec) throws CpdfError; /** Builds a page specification from a page range. For example, the range containing 1,2,3,6,7,8 in a document of 8 pages might yield "1-3,6-end" @param pdf PDF document @param r page range */ public String stringOfPagespec(Pdf pdf, Range r) throws CpdfError; /** The range containing no pages. */ public native Range blankRange() throws CpdfError; /** The page range containing all page numbers from one page number to another. @param from page number to begin at (inclusive) @param to page number to end at (inclusive) */ public native Range range(int from, int to) throws CpdfError; /** The page range contaning all pages in a given document. */ public native Range all(Pdf pdf) throws CpdfError; /** The page range containing all odd-numbered pages from an existing range. */ public native Range odd(Range r) throws CpdfError; /** The page range containing all even-numbered pages from an existing range. */ public native Range even(Range r) throws CpdfError; /** The union of two ranges - all those pages in either. */ public native Range rangeUnion(Range r, Range s) throws CpdfError; /** The range containing all pages in the first given range which are not in the second. */ public native Range difference(Range r, Range s) throws CpdfError; /** Remove duplicates from a range, returning a new one. */ public native Range removeDuplicates(Range r) throws CpdfError; /** The length of a range. */ public native int rangeLength(Range r) throws CpdfError; /** Gets a page number from a range at the given offset. */ public native int rangeGet(Range r, int n) throws CpdfError; /** Adds a page number to a range, returning a new one. */ public native Range rangeAdd(Range r, int n) throws CpdfError; /** Tests to see if a given number is in a page range. */ public native boolean isInRange(Range r, int n) throws CpdfError; /** Returns the number of pages in a PDF. */ public native int pages(Pdf pdf) throws CpdfError; /** Returns the number of pages in a given PDF, with given user password. It tries to do this as fast as possible, without loading the whole file. @param userpw user password @param filename file name */ public int pagesFast(String userpw, String filename) throws CpdfError; /** Writes the PDF document to a given filename. If linearize is true, it will be linearized if a linearizer is available. If make_id is true, it will be given a new ID. @param pdf PDF document @param filename file name @param linearize linearize @param make_id make new ID */ public void toFile(Pdf pdf, String filename, boolean linearize, boolean make_id) throws CpdfError; /** Writes the PDF document to a given filename, with extra parameters. If make_id is true, it will be given a new ID. If preserve_objstm is true, existing object streams will be preserved. If generate_objstm is true, object streams will be generated even if not originally present. If compress_objstm is true, object streams will be compressed (what we usually want). WARNING: the pdf argument will be invalid after this call, and should not be used again. @param pdf PDF document @param filename file name @param linearize linearize @param make_id make new ID @param preserve_objstm preserve object streams @param create_objstm create new object streams @param compress_objstm compress object streams */ public void toFileExt(Pdf pdf, String filename, boolean linearize, boolean make_id, boolean preserve_objstm, boolean create_objstm, boolean compress_objstm) throws CpdfError; /** Writes a PDF document and returns it as an array of bytes. @param pdf PDF document @param linearize linearize @param make_id make new ID */ public native byte[] toMemory(Pdf pdf, boolean linearize, boolean make_id) throws CpdfError; /** Returns true if a document is encrypted, false otherwise. */ public native boolean isEncrypted(Pdf pdf) throws CpdfError; /** Attempts to decrypt a PDF using the given user password. An exception is raised if the decryption fails. @param pdf PDF document @param userpw user password */ public void decryptPdf(Pdf pdf, String userpw) throws CpdfError; /** Attempts to decrypt a PDF using the given owner password. Raises an exception if the decryption fails. @param pdf PDF document @param ownerpw owner password */ public void decryptPdfOwner(Pdf pdf, String ownerpw) throws CpdfError; /** Writes a PDF document as encrypted. The encryption method and permissions are drawn from Jcpdf's fields, documented above. @param pdf PDF document @param encryption_method encryption method, e.g {@link #aes256bitisofalse aes256bitisofalse} @param permissions array of permissions e.g {@link #noEdit noEdit} @param owner_password owner password @param user_password user password @param linearize linearize @param makeid make new ID @param filename file name */ public void toFileEncrypted(Pdf pdf, int encryption_method, int[] permissions, String owner_password, String user_password, boolean linearize, boolean makeid, String filename) throws CpdfError; /** Writes a file as encrypted with extra parameters. WARNING: the pdf argument will be invalid after this call, and should not be used again. @param pdf PDF document @param encryption_method encryption method, e.g {@link #aes256bitisofalse aes256bitisofalse} @param permissions array of permissions e.g {@link #noEdit noEdit} @param owner_password owner password @param user_password user password @param linearize linearize @param makeid make new ID @param preserve_objstm preserve existing object streams @param generate_objstm generate new object streams @param compress_objstm compress object streams @param filename file name */ public void toFileEncryptedExt(Pdf pdf, int encryption_method, int[] permissions, String owner_password, String user_password, boolean linearize, boolean makeid, boolean preserve_objstm, boolean generate_objstm, boolean compress_objstm, String filename) throws CpdfError; /** Returns true if the given permission (restriction) such as {@link #noEdit noEdit} is present. */ public native boolean hasPermission(Pdf pdf, int permission) throws CpdfError; /** Returns the encryption method currently in use on a document, such as {@link #aes256bitisofalse aes256bitisofalse}. */ public native int encryptionKind(Pdf pdf) throws CpdfError; cpdf-2.8.1/html_manual/javasplits/c13.tex0000664000175000017500000000440214771516640016722 0ustar johnjohn/* CHAPTER 12. File Attachments */ /** Attaches a file to the PDF. It is attached at document level. @param filename file name @param pdf PDF document */ public void attachFile(String filename, Pdf pdf) throws CpdfError; /** Attaches a file to a page of the PDF. Given its file name, pdf, and the page number to which it should be attached. @param filename file name @param pdf PDF document @param pagenumber page number to attach to */ public void attachFileToPage(String filename, Pdf pdf, int pagenumber) throws CpdfError; /** Attaches data from memory to a document. @param data attachment itself @param filename file name to use to describe attachment @param pdf PDF document */ public void attachFileFromMemory(byte[] data, String filename, Pdf pdf) throws CpdfError; /** Attaches data to a page from memory. @param data attachment itself @param filename file name to use to describe attachment @param pdf PDF document */ public void attachFileToPageFromMemory(byte[] data, String filename, Pdf pdf, int pagenumber) throws CpdfError; /** Removes all page- and document-level attachments from a document. */ public native void removeAttachedFiles(Pdf pdf) throws CpdfError; /** Lists information about attachments. Call {@link #startGetAttachments(pdf) startGetAttachments} first, then {@link #numberGetAttachments() numberGetAttachments} to find out how many there are. Then {@link #getAttachmentName(int) getAttachmentName}, {@link #getAttachmentPage(int) getAttachmentPage}, or {@link #getAttachmentData(int) getAttachmentData}. to return each one 0...(n - 1). Finally, call {@link #endGetAttachments() #endGetAttachments} to clean up. */ public native void startGetAttachments(Pdf pdf) throws CpdfError; public native int numberGetAttachments() throws CpdfError; /** Gets the name of an attachment, given a serial number. */ public native String getAttachmentName(int serial) throws CpdfError; /** Gets the page number, given a serial number. 0 = document level. */ public native int getAttachmentPage(int serial) throws CpdfError; /** Gets the attachment data itself, given a serial number. */ public native byte[] getAttachmentData(int serial) throws CpdfError; public native void endGetAttachments() throws CpdfError; cpdf-2.8.1/html_manual/go0000755000175000017500000000142314771516640013763 0ustar johnjohn#Move files around cp -r ../manualimages . cp ../logo.pdf . cp ../Changes . mkdir ../camlpdf cp ../../camlpdf/Changes ../camlpdf/Changes cp ../cpdfmanual.tex . #Remove tagging sed -i '' 's/\\DocumentMetadata/\%\\DocumentMetadata/' cpdfmanual.tex #Typeset to HTML htlatex cpdfmanual "html,2" #Pad frames sed -i '' 's/.framedenv{border: 1px solid black;}/.framedenv{border: 1px solid black; padding: 8px}/g' cpdfmanual.css #Remove tex4ht's attempt at box-drawing characters for struct trees LCTYPE=C LANG=C sed -i '' 's/__/\ \ /g' *.html #Make sure HTML files have a lang set LCTYPE=C LANG=C sed -i '' 's///g' *.html #Give the main page a title LCTYPE=C LANG=C sed -i '' 's//<title>Coherent PDF Command Line Tools Manual/' cpdfmanual.html ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/html_manual/splits/����������������������������������������������������������������������0000775�0001750�0001750�00000000000�14771516640�014750� 5����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/html_manual/splits/c08.tex���������������������������������������������������������������0000664�0001750�0001750�00000000114�14771516640�016060� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* CHAPTER 7. Presentations */ /* Not included in the library version. */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/html_manual/splits/c18.tex���������������������������������������������������������������0000664�0001750�0001750�00000001552�14771516640�016070� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* CHAPTER 17. Creating New PDFs */ /* cpdf_blankDocument(width, height, num_pages) creates a blank document with * pages of the given width (in points), height (in points), and number of * pages. */ int cpdf_blankDocument(double, double, int); /* * cpdf_blankDocumentPaper(papersize, num_pages) makes a blank document given * a page size and number of pages. */ int cpdf_blankDocumentPaper(enum cpdf_papersize, int); /* cpdf_textToPDF(w, h, font, fontsize, filename) typesets a UTF8 text file * ragged right on a page of size w * h in points in the given font and font * size. */ int cpdf_textToPDF(double, double, int, double, const char[]); /* cpdf_textToPDF(papersize font, fontsize, filename) typesets a UTF8 text file * ragged right on a page of the given size in the given font and font size. */ int cpdf_textToPDFPaper(int, int, double, const char[]); ������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/html_manual/splits/c07.tex���������������������������������������������������������������0000664�0001750�0001750�00000004720�14771516640�016066� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* CHAPTER 6. Bookmarks */ /* * cpdf_startGetBookmarkInfo(pdf) start the bookmark retrieval process for a * given PDF. */ void cpdf_startGetBookmarkInfo(int); /* * cpdf_numberBookmarks gets the number of bookmarks for the PDF given to * cpdf_startGetBookmarkInfo. */ int cpdf_numberBookmarks(void); /* * cpdf_getBookmarkLevel(serial) get bookmark level for the given bookmark * (0...(n - 1)). */ int cpdf_getBookmarkLevel(int); /* * cpdf_getBookmarkPage gets the bookmark target page for the given PDF * (which must be the same as the PDF passed to cpdf_startSetBookmarkInfo) * and bookmark (0...(n - 1)). */ int cpdf_getBookmarkPage(int, int); /* cpdf_getBookmarkText returns the text of bookmark (0...(n - 1)). */ char *cpdf_getBookmarkText(int); /* cpdf_getBookmarkOpenStatus(pdf) is true if the bookmark is open. */ int cpdf_getBookmarkOpenStatus(int); /* cpdf_endGetBookmarkInfo ends the bookmark retrieval process, cleaning up. */ void cpdf_endGetBookmarkInfo(void); /* * cpdf_startGetBookmarkInfo(n) start the bookmark setting process for n * bookmarks. */ void cpdf_startSetBookmarkInfo(int); /* * cpdf_setBookmarkLevel(n, level) set bookmark level for the given bookmark * (0...(n - 1)). */ void cpdf_setBookmarkLevel(int, int); /* * cpdf_setBookmarkPage(pdf, bookmark, targetpage) sets the bookmark target * page for the given PDF (which must be the same as the PDF to be passed to * cpdf_endSetBookmarkInfo) and bookmark (0...(n - 1)). */ void cpdf_setBookmarkPage(int, int, int); /* * cpdf_setBookmarkOpenStatus(n, status) set the open status of a bookmark, * true or false. */ void cpdf_setBookmarkOpenStatus(int, int); /* cpdf_setBookmarkText(n, text) sets the text of bookmark (0...(n - 1)). */ void cpdf_setBookmarkText(int, const char[]); /* * cpdf_endSetBookmarkInfo(pdf) end the bookmark setting process, writing the * bookmarks to the given PDF. */ void cpdf_endSetBookmarkInfo(int); /* cpdf_getBookmarksJSON(pdf, length) returns the bookmark data and sets the * length. */ void *cpdf_getBookmarksJSON(int, int *); /* cpdf_setBookmarksJSON(pdf, data, datalength) sets the bookmarks from JSON * bookmark data. */ void cpdf_setBookmarksJSON(int, void *, int); /* cpdf_tableOfContents(pdf, font, fontsize, title, bookmark) typesets a table * of contents from existing bookmarks and prepends it to the document. If * bookmark is set, the table of contents gets its own bookmark. */ void cpdf_tableOfContents(int, int, double, const char[], int); ������������������������������������������������cpdf-2.8.1/html_manual/splits/c17.tex���������������������������������������������������������������0000664�0001750�0001750�00000001554�14771516640�016071� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* CHAPTER 16. Optional Content Groups */ /* Begin retrieving optional content group names. The serial number 0..<n - 1> * is returned. */ int cpdf_startGetOCGList(int pdf); /* Retrieve an OCG name, given its serial number 0..<n - 1>. */ char *cpdf_OCGListEntry(int i); /* End retrieval of optional content group names. */ void cpdf_endGetOCGList(void); /* cpdf_OCGRename(pdf, from, to) will rename an optional content group. */ void cpdf_OCGRename(int, const char[], const char[]); /* Ensure that every optional content group appears in the OCG order list. */ void cpdf_OCGOrderAll(int); /* Coalesce optional content groups. For example, if we merge or stamp two * files both with an OCG called "Layer 1", we will have two different optional * content groups. This function will merge the two into a single optional * content group. */ void cpdf_OCGCoalesce(int); ����������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/html_manual/splits/c04.tex���������������������������������������������������������������0000664�0001750�0001750�00000011563�14771516640�016066� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* CHAPTER 3. Pages */ /* * cpdf_scalePages(pdf, range, x scale, y scale) scales the page dimensions * and content by the given scale, about (0, 0). Other boxes (crop etc. are * altered as appropriate) */ void cpdf_scalePages(int, int, double, double); /* * cpdf_scaleToFit(pdf, range, width, height, scale) scales the content to fit * new page dimensions (width x height) multiplied by scale (typically 1.0). * Other boxed (crop etc. are altered as appropriate) */ void cpdf_scaleToFit(int, int, double, double, double); /* * cpdf_scaleToFitPaper(pdf, range, papersize, scale) scales the page content * to fit the given page size, possibly multiplied by scale (typically 1.0) */ void cpdf_scaleToFitPaper(int, int, enum cpdf_papersize, double); /* Positions on the page. Used for scaling about a point, and adding text. */ enum cpdf_anchor { cpdf_posCentre, /* Absolute centre */ cpdf_posLeft, /* Absolute left */ cpdf_posRight, /* Absolute right */ cpdf_top, /* Top top centre of the page */ cpdf_topLeft, /* The top left of the page */ cpdf_topRight, /* The top right of the page */ cpdf_left, /* The left hand side of the page, halfway * down */ cpdf_bottomLeft, /* The bottom left of the page */ cpdf_bottom, /* The bottom middle of the page */ cpdf_bottomRight, /* The bottom right of the page */ cpdf_right, /* The right hand side of the page, halfway * down */ cpdf_diagonal, /* Diagonal, bottom left to top right */ cpdf_reverseDiagonal /* Diagonal, top left to bottom right */ }; /* * A cpdf_position is an anchor (above) and zero or one or two parameters * (cpdf_coord1, cpdf_coord2). * * cpdf_posCentre: Two parameters, x and y * * cpdf_posLeft: Two parameters, x and y * * cpdf_posRight: Two parameters, x and y * * cpdf_top: One parameter -- distance from top * * cpdf_topLeft: One parameter -- distance from top left * * cpdf_topRight: One parameter -- distance from top right * * cpdf_left: One parameter -- distance from left middle * * cpdf_bottomLeft: One parameter -- distance from bottom left * * cpdf_bottom: One parameter -- distance from bottom * * cpdf_bottomRight: One parameter -- distance from bottom right * * cpdf_right: One parameter -- distance from right * * cpdf_diagonal: Zero parameters * * cpdf_reverseDiagonal: Zero parameters */ struct cpdf_position { int cpdf_anchor; /* Position anchor */ double cpdf_coord1; /* Parameter one */ double cpdf_coord2; /* Parameter two */ }; /* * cpdf_scaleContents(pdf, range, position, scale) scales the contents of the * pages in the range about the point given by the cpdf_position, by the * scale given. */ void cpdf_scaleContents(int, int, struct cpdf_position, double); /* * cpdf_shiftContents(pdf, range, dx, dy) shifts the content of the pages in * the range. */ void cpdf_shiftContents(int, int, double, double); /* * cpdf_rotate(pdf, range, rotation) changes the viewing rotation to an * absolute value. Appropriate rotations are 0, 90, 180, 270. */ void cpdf_rotate(int, int, int); /* * cpdf_rotateBy(pdf, range, rotation) changes the viewing rotation by a * given number of degrees. Appropriate values are 90, 180, 270. */ void cpdf_rotateBy(int, int, int); /* * cpdf_rotateContents(pdf, range, angle) rotates the content about the * centre of the page by the given number of degrees, in a clockwise * direction. */ void cpdf_rotateContents(int, int, double); /* * cpdf_upright(pdf, range) changes the viewing rotation of the pages in the * range, counter-rotating the dimensions and content such that there is no * visual change. */ void cpdf_upright(int, int); /* cpdf_hFlip(pdf, range) flips horizontally the pages in the range. */ void cpdf_hFlip(int, int); /* cpdf_vFlip(pdf, range) flips vertically the pages in the range. */ void cpdf_vFlip(int, int); /* * cpdf_crop(pdf, range, x, y, w, h) crops a page, replacing any existing * crop box. The dimensions are in points. */ void cpdf_crop(int, int, double, double, double, double); /* cpdf_removeCrop(pdf, range) removes any crop box from pages in the range. */ void cpdf_removeCrop(int, int); /* cpdf_removeTrim(pdf, range) removes any crop box from pages in the range. */ void cpdf_removeTrim(int, int); /* cpdf_removeArt(pdf, range) removes any crop box from pages in the range. */ void cpdf_removeArt(int, int); /* cpdf_removeBleed(pdf, range) removes any crop box from pages in the range. */ void cpdf_removeBleed(int, int); /* * cpdf_trimMarks(pdf, range) adds trim marks to the given pages, if the * trimbox exists. */ void cpdf_trimMarks(int, int); /* cpdf_showBoxes(pdf, range) shows the boxes on the given pages, for debug. */ void cpdf_showBoxes(int, int); /* cpdf_hardBox make a given box a 'hard box' i.e clips it explicitly. */ void cpdf_hardBox(int, int, const char[]); ���������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/html_manual/splits/c00.tex���������������������������������������������������������������0000664�0001750�0001750�00000000334�14771516640�016054� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * A C wrapper to cpdf PDF tools library. Free for non-commercial use. See * LICENSE for details. To purchase a license, please visit * http://www.coherentpdf.com/ * * Text arguments and results are in UTF8. */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/html_manual/splits/c09.tex���������������������������������������������������������������0000664�0001750�0001750�00000014426�14771516640�016074� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* CHAPTER 8. Logos, Watermarks and Stamps */ /* * cpdf_stampOn(stamp_pdf, pdf, range) stamps stamp_pdf on top of all the * pages in the document which are in the range. The stamp is placed with its * origin at the origin of the target document. */ void cpdf_stampOn(int, int, int); /* * cpdf_stampUnder(stamp_pdf, pdf, range) stamps stamp_pdf under all the * pages in the document which are in the range. The stamp is placed with its * origin at the origin of the target document. */ void cpdf_stampUnder(int, int, int); /* * cpdf_stampExtended(pdf, pdf2, range, isover, scale_stamp_to_fit, pos, * relative_to_cropbox) is a stamping function with extra features. - isover * true, pdf goes over pdf2, isover false, pdf goes under pdf2 - * scale_stamp_to_fit scales the stamp to fit the page - pos gives the * position to put the stamp - relative_to_cropbox: if true, pos is relative * to cropbox not mediabox. */ void cpdf_stampExtended(int, int, int, int, int, struct cpdf_position, int); /* * cpdf_combinePages(under, over) combines the PDFs page-by-page, putting * each page of 'over' over each page of 'under'. */ int cpdf_combinePages(int, int); /* Adding text. Adds text to a PDF, if the characters exist in the font. */ /* * Special codes * * %Page Page number in arabic notation (1, 2, 3...) * * %roman Page number in lower-case roman notation (i, ii, iii...) * * %Roman Page number in upper-case roman notation (I, II, III...) * * %EndPage Last page of document in arabic notation * * %Label The page label of the page * * %EndLabel The page label of the last page * * %filename The full file name of the input document * * %a Abbreviated weekday name (Sun, Mon etc.) * * %A Full weekday name (Sunday, Monday etc.) * * %b Abbreviated month name (Jan, Feb etc.) * * %B Full month name (January, February etc.) * * %d Day of the month (01-31) * * %e Day of the month (1-31) * * %H Hour in 24-hour clock (00-23) * * %I Hour in 12-hour clock (01-12) * * %j Day of the year (001-366) * * %m Month of the year (01-12) * * %M Minute of the hour (00-59) * * %p "a.m" or "p.m" * * %S Second of the minute (00-61) * * %T Same as %H:%M:%S * * %u Weekday (1-7, 1 = Monday) * * %w Weekday (0-6, 0 = Monday) * * %Y Year (0000-9999) * * %% The % character */ /* The standard fonts */ enum cpdf_font { cpdf_timesRoman, /* Times Roman */ cpdf_timesBold, /* Times Bold */ cpdf_timesItalic, /* Times Italic */ cpdf_timesBoldItalic, /* Times Bold Italic */ cpdf_helvetica, /* Helvetica */ cpdf_helveticaBold, /* Helvetica Bold */ cpdf_helveticaOblique, /* Helvetica Oblique */ cpdf_helveticaBoldOblique, /* Helvetica Bold Oblique */ cpdf_courier, /* Courier */ cpdf_courierBold, /* Courier Bold */ cpdf_courierOblique, /* Courier Oblique */ cpdf_courierBoldOblique /* Courier Bold Oblique */ }; /* Justifications for multi line text */ enum cpdf_justification { cpdf_leftJustify, /* Left justify */ cpdf_CentreJustify, /* Centre justify */ cpdf_RightJustify /* Right justify */ }; /* Add text */ void cpdf_addText(int, /* If true, don't actually add text but * collect metrics. */ int, /* Document */ int, /* Page Range */ const char[], /* The text to add */ struct cpdf_position, /* Position to add text at */ double, /* Linespacing, 1.0 = normal */ int, /* Starting Bates number */ enum cpdf_font, /* Font */ double, /* Font size in points */ double, /* Red component of colour, 0.0 - 1.0 */ double, /* Green component of colour, 0.0 - 1.0 */ double, /* Blue component of colour, 0.0 - 1.0 */ int, /* If true, text is added underneath rather * than on top */ int, /* If true, position is relative to crop box * not media box */ int, /* If true, text is outline rather than * filled */ double, /* Opacity, 1.0 = opaque, 0.0 = wholly * transparent */ enum cpdf_justification, /* Justification */ int, /* If true, position is relative to midline * of text, not baseline */ int, /* If true, position is relative to topline * of text, not baseline */ const char[], /* filename that this document was read from * (optional) */ double, /* line width */ int /* embed fonts */ ); /* Add text, with most parameters default. */ void cpdf_addTextSimple(int, /* Document */ int, /* Page range */ const char[], /* The text to add */ struct cpdf_position, /* Position to add text * at */ enum cpdf_font, /* font */ double); /* font size */ /* * cpdf_removeText(pdf, range) will remove any text added by libcpdf from the * given pages. */ void cpdf_removeText(int, int); /* * Return the width of a given string in the given font in thousandths of a * point. */ int cpdf_textWidth(enum cpdf_font, const char[]); /* cpdf_addContent(content, before, range, pdf) adds page content before (if * true) or after (if false) the existing content to pages in the given range * in the given PDF. */ void cpdf_addContent(const char[], int, int, int); /* cpdf_stampAsXObject(pdf, range, stamp_pdf) stamps stamp_pdf onto the pages * in the given range in pdf as a shared Form XObject. The name of the * newly-created XObject is returned. */ char *cpdf_stampAsXObject(int, int, int); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/html_manual/splits/c12.tex���������������������������������������������������������������0000664�0001750�0001750�00000023711�14771516640�016063� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* CHAPTER 11. Document Information and Metadata */ /* * cpdf_isLinearized(filename) finds out if a document is linearized as * quickly as possible without loading it. */ int cpdf_isLinearized(const char[]); /* cpdf_getVersion(pdf) returns the minor version number of a document. */ int cpdf_getVersion(int); /* cpdf_getMajorVersion(pdf) returns the minor version number of a document. */ int cpdf_getMajorVersion(int); /* cpdf_getTitle(pdf) returns the title of a document. */ char *cpdf_getTitle(int); /* cpdf_getAuthor(pdf) returns the author of a document. */ char *cpdf_getAuthor(int); /* cpdf_getSubject(pdf) returns the subject of a document. */ char *cpdf_getSubject(int); /* cpdf_getKeywords(pdf) returns the keywords of a document. */ char *cpdf_getKeywords(int); /* cpdf_getCreator(pdf) returns the creator of a document. */ char *cpdf_getCreator(int); /* cpdf_getProducer(pdf) returns the producer of a document. */ char *cpdf_getProducer(int); /* cpdf_getCreationDate(pdf) returns the creation date of a document. */ char *cpdf_getCreationDate(int); /* cpdf_getModificationDate(pdf) returns the modification date of a document. */ char *cpdf_getModificationDate(int); /* cpdf_getTitleXMP(pdf) returns the XMP title of a document. */ char *cpdf_getTitleXMP(int); /* cpdf_getAuthorXMP(pdf) returns the XMP author of a document. */ char *cpdf_getAuthorXMP(int); /* cpdf_getSubjectXMP(pdf) returns the XMP subject of a document. */ char *cpdf_getSubjectXMP(int); /* cpdf_getKeywordsXMP(pdf) returns the XMP keywords of a document. */ char *cpdf_getKeywordsXMP(int); /* cpdf_getCreatorXMP(pdf) returns the XMP creator of a document. */ char *cpdf_getCreatorXMP(int); /* cpdf_getProducerXMP(pdf) returns the XMP producer of a document. */ char *cpdf_getProducerXMP(int); /* cpdf_getCreationDateXMP(pdf) returns the XMP creation date of a document. */ char *cpdf_getCreationDateXMP(int); /* * cpdf_getModificationDateXMP(pdf) returns the XMP modification date of a * document. */ char *cpdf_getModificationDateXMP(int); /* cpdf_setTitle(pdf) sets the title of a document. */ void cpdf_setTitle(int, const char[]); /* cpdf_setAuthor(pdf) sets the author of a document. */ void cpdf_setAuthor(int, const char[]); /* cpdf_setSubject(pdf) sets the subject of a document. */ void cpdf_setSubject(int, const char[]); /* cpdf_setKeywords(pdf) sets the keywords of a document. */ void cpdf_setKeywords(int, const char[]); /* cpdf_setCreator(pdf) sets the creator of a document. */ void cpdf_setCreator(int, const char[]); /* cpdf_setProducer(pdf) sets the producer of a document. */ void cpdf_setProducer(int, const char[]); /* cpdf_setCreationDate(pdf) sets the creation date of a document. */ void cpdf_setCreationDate(int, const char[]); /* cpdf_setModificationDate(pdf) sets the modifcation date of a document. */ void cpdf_setModificationDate(int, const char[]); /* cpdf_setTitleXMP(pdf) set the XMP title of a document. */ void cpdf_setTitleXMP(int, const char[]); /* cpdf_setAuthorXMP(pdf) set the XMP author of a document. */ void cpdf_setAuthorXMP(int, const char[]); /* cpdf_setSubjectXMP(pdf) set the XMP subject of a document. */ void cpdf_setSubjectXMP(int, const char[]); /* cpdf_setKeywordsXMP(pdf) set the XMP keywords of a document. */ void cpdf_setKeywordsXMP(int, const char[]); /* cpdf_setCreatorXMP(pdf) set the XMP creator of a document. */ void cpdf_setCreatorXMP(int, const char[]); /* cpdf_setProducerXMP(pdf) set the XMP producer of a document. */ void cpdf_setProducerXMP(int, const char[]); /* cpdf_setCreationDateXMP(pdf) set the XMP creation date of a document. */ void cpdf_setCreationDateXMP(int, const char[]); /* * cpdf_setModificationDateXMP(pdf) set the XMP modification date of a * document. */ void cpdf_setModificationDateXMP(int, const char[]); /* * Dates: Month 1-31, day 1-31, hours (0-23), minutes (0-59), seconds (0-59), * hour_offset is the offset from UT in hours (-23 to 23); minute_offset is * the offset from UT in minutes (-59 to 59). */ /* * cpdf_getDateComponents(datestring, year, month, day, hour, minute, second, * hour_offset, minute_offset) returns the components from a PDF date string. */ void cpdf_getDateComponents(const char[], int *, int *, int *, int *, int *, int *, int *, int *); /* * cpdf_dateStringOfComponents(year, month, day, hour, minute, second, * hour_offset, minute_offset) builds a PDF date string from individual * components. */ char *cpdf_dateStringOfComponents(int, int, int, int, int, int, int, int); /* * cpdf_getPageRotation(pdf, pagenumber) gets the viewing rotation for a * given page. */ int cpdf_getPageRotation(int, int); /* * cpdf_hasBox(pdf, pagenumber, boxname) returns true, if that page has the * given box. E.g "/CropBox". */ int cpdf_hasBox(int, int, const char[]); /* * These functions get a box given the document, page number, min x, max x, * min y, max y in points. Only succeeds if such a box exists, as checked by * cpdf_hasBox. */ void cpdf_getMediaBox(int, int, double *, double *, double *, double *); void cpdf_getCropBox(int, int, double *, double *, double *, double *); void cpdf_getTrimBox(int, int, double *, double *, double *, double *); void cpdf_getArtBox(int, int, double *, double *, double *, double *); void cpdf_getBleedBox(int, int, double *, double *, double *, double *); /* * These functions set a box given the document, page range, min x, max x, * min y, max y in points. */ void cpdf_setMediabox(int, int, double, double, double, double); void cpdf_setCropBox(int, int, double, double, double, double); void cpdf_setTrimBox(int, int, double, double, double, double); void cpdf_setArtBox(int, int, double, double, double, double); void cpdf_setBleedBox(int, int, double, double, double, double); /* cpdf_markTrapped(pdf) marks a document as trapped. */ void cpdf_markTrapped(int); /* cpdf_markUntrapped(pdf) marks a document as untrapped. */ void cpdf_markUntrapped(int); /* cpdf_markTrappedXMP(pdf) marks a document as trapped in XMP metadata. */ void cpdf_markTrappedXMP(int); /* cpdf_markUntrappedXMP(pdf) marks a document as untrapped in XMP metadata. */ void cpdf_markUntrappedXMP(int); /* Document Layouts. */ enum cpdf_layout { cpdf_singlePage, cpdf_oneColumn, cpdf_twoColumnLeft, cpdf_twoColumnRight, cpdf_twoPageLeft, cpdf_twoPageRight }; /* cpdf_setPageLayout(pdf, layout) sets the page layout for a document. */ void cpdf_setPageLayout(int, enum cpdf_layout); /* Document page modes. */ enum cpdf_pageMode { cpdf_useNone, cpdf_useOutlines, cpdf_useThumbs, cpdf_useOC, cpdf_useAttachments }; /* cpdf_setPageMode(pdf, mode) sets the page mode for a document. */ void cpdf_setPageMode(int, enum cpdf_pageMode); /* cpdf_hideToolbar(pdf, flag) sets the hide toolbar flag. */ void cpdf_hideToolbar(int, int); /* cpdf_hideMenubar(pdf, flag) sets the hide menu bar flag. */ void cpdf_hideMenubar(int, int); /* cpdf_hideWindowUi(pdf, flag) sets the hide window UI flag. */ void cpdf_hideWindowUi(int, int); /* cpdf_fitWindow(pdf, flag) sets the fit window flag. */ void cpdf_fitWindow(int, int); /* cpdf_centerWindow(pdf, flag) sets the center window flag. */ void cpdf_centerWindow(int, int); /* cpdf_displayDocTitle(pdf, flag) sets the display doc title flag. */ void cpdf_displayDocTitle(int, int); /* cpdf_openAtPage(pdf, fit, pagenumber) sets the PDF to open, possibly with * zoom-to-fit, at the given page number. */ void cpdf_openAtPage(int, int, int); /* * cpdf_setMetadataFromFile(pdf, filename) set the XMP metadata of a * document, given a file name. */ void cpdf_setMetadataFromFile(int, const char[]); /* * cpdf_setMetadataFromByteArray(pdf, data, length) set the XMP metadata from * an array of bytes. */ void cpdf_setMetadataFromByteArray(int, void *, int); /* * cpdf_getMetadata(pdf, &length) returns the XMP metadata and fills in * length. */ void *cpdf_getMetadata(int, int *); /* cpdf_removeMetadata(pdf) removes the XMP metadata from a document. */ void cpdf_removeMetadata(int); /* * cpdf_createMetadata(pdf) builds fresh metadata as best it can from * existing metadata in the document. */ void cpdf_createMetadata(int); /* * cpdf_setMetadataDate(pdf, date) sets the metadata date for a PDF. The date * is given in PDF date format -- cpdf will convert it to XMP format. The * date 'now' means now. */ void cpdf_setMetadataDate(int, const char[]); /* Styles of page label */ enum cpdf_pageLabelStyle { cpdf_decimalArabic, /* 1, 2, 3... */ cpdf_uppercaseRoman, /* I, II, III... */ cpdf_lowercaseRoman, /* i, ii, iii... */ cpdf_uppercaseLetters, /* A, B, C... */ cpdf_lowercaseLetters /* a, b, c... */ }; /* * Add page labels. * * cpdf_addPageLabels(pdf, style, prefix, offset, range, progress) * * The prefix is prefix text for each label. The range is the page range the * labels apply to. Offset can be used to shift the numbering up or down. */ void cpdf_addPageLabels(int, enum cpdf_pageLabelStyle, const char[], int, int, int); /* cpdf_removePageLabels(pdf) removes the page labels from the document. */ void cpdf_removePageLabels(int); /* * cpdf_getPageLabelStringForPage(pdf, page number) calculates the full label * string for a given page, and returns it. */ char *cpdf_getPageLabelStringForPage(int, int); /* * Get page label data. Call cpdf_startGetPageLabels to find out how many * there are, then use these serial numbers to get the style, prefix, offset * and start value (note not a range). Call cpdf_endGetPageLabels to clean up. * * For example, a document might have five pages of introduction with roman * numerals, followed by the rest of the pages in decimal arabic, numbered from * one: * * labelstyle = LowercaseRoman * labelprefix = "" * startpage = 1 * startvalue = 1 * * labelstyle = DecimalArabic * labelprefix = "" * startpage = 6 * startvalue = 1 */ int cpdf_startGetPageLabels(int); enum cpdf_pageLabelStyle cpdf_getPageLabelStyle(int); char *cpdf_getPageLabelPrefix(int); int cpdf_getPageLabelOffset(int); int cpdf_getPageLabelRange(int); void cpdf_endGetPageLabels(); �������������������������������������������������������cpdf-2.8.1/html_manual/splits/c06.tex���������������������������������������������������������������0000664�0001750�0001750�00000000634�14771516640�016065� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* CHAPTER 5. Compression */ /* * cpdf_compress(pdf) compresses any uncompressed streams in the given PDF * using the Flate algorithm. */ void cpdf_compress(int); /* * cpdf_decompress(pdf) decompresses any streams in the given PDF, so long as * the compression method is supported. */ void cpdf_decompress(int); /* cpdf_squeezeToMemory(pdf) squeezes a pdf in memory. */ void cpdf_squeezeInMemory(int); ����������������������������������������������������������������������������������������������������cpdf-2.8.1/html_manual/splits/c11.tex���������������������������������������������������������������0000664�0001750�0001750�00000000234�14771516640�016055� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* CHAPTER 10. Annotations */ /* Return the annotations from a PDF in JSON format, returning also its length. */ void *cpdf_annotationsJSON(int, int *); ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/html_manual/splits/c19.tex���������������������������������������������������������������0000664�0001750�0001750�00000004773�14771516640�016101� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* CHAPTER 18. Miscellaneous */ /* * cpdf_draft(pdf, range, boxes) removes images on the given pages, replacing * them with crossed boxes if 'boxes' is true */ void cpdf_draft(int, int, int); /* * cpdf_removeAllText(pdf, range) removes all text from the given pages in a * given document. */ void cpdf_removeAllText(int, int); /* cpdf_blackText(pdf, range) blackens all text on the given pages. */ void cpdf_blackText(int, int); /* cpdf_blackLines(pdf, range) blackens all lines on the given pages. */ void cpdf_blackLines(int, int); /* cpdf_blackFills(pdf, range) blackens all fills on the given pages. */ void cpdf_blackFills(int, int); /* * cpdf_thinLines(pdf, range, min_thickness) thickens every line less than * min_thickness to min_thickness. Thickness given in points. */ void cpdf_thinLines(int, int, double); /* cpdf_copyId(from, to) copies the /ID from one document to another. */ void cpdf_copyId(int, int); /* cpdf_removeId(pdf) removes a document's /ID. */ void cpdf_removeId(int); /* cpdf_setVersion(pdf, version) sets the minor version number of a document. */ void cpdf_setVersion(int, int); /* cpdf_setFullVersion(pdf, major_version, minor_version) sets the full version * number of a document. */ void cpdf_setFullVersion(int, int, int); /* * cpdf_removeDictEntry(pdf, key) removes any dictionary entry with the given * key anywhere in the document. */ void cpdf_removeDictEntry(int, const char[]); /* cpdf_removeDictEntrySearch(pdf, key, seachterm) removes any dictionary entry * with the given key whose value matches the given search term. */ void cpdf_removeDictEntrySearch(int, const char[], const char[]); /* cpdf_replaceDictEntry(pdf, key, newvalue) replaces the value associated with * the given key */ void cpdf_replaceDictEntry(int, const char[], const char[]); /* cpdf_replaceDictEntry(pdf, key, newvalue, searchterm) replaces the value * associated with the given key if the existing value matches the search term. */ void cpdf_replaceDictEntrySearch(int, const char[], const char[], const char[]); /* cpdf_getDictEntries(pdf, key, length) returns a JSON array containing any * and all values associated with the given key, and fills in its length. */ void *cpdf_getDictEntries(int, const char[], int *retlen); /* * cpdf_removeClipping(pdf, range) removes all clipping from pages in the * given range. */ void cpdf_removeClipping(int, int); /* CHAPTER X. Internal or undocumented. */ /* Internal. Used for demo versions of the commercial version of cpdflib. */ void cpdf_setDemo(int); �����cpdf-2.8.1/html_manual/splits/c05.tex���������������������������������������������������������������0000664�0001750�0001750�00000000123�14771516640�016055� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* CHAPTER 4. Encryption */ /* Encryption covered under Chapter 1 in cpdflib. */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/html_manual/splits/c15.tex���������������������������������������������������������������0000664�0001750�0001750�00000001711�14771516640�016062� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* CHAPTER 14. Fonts. */ /* * Retrieving font information. First, call cpdf_startGetFontInfo(pdf). Now * call cpdf_numberFonts to return the number of fonts. For each font, call * one or more of cpdf_getFontPage, cpdf_getFontName, cpdf_getFontType, and * cpdf_getFontEncoding giving a serial number 0..<number of fonts> - 1 to * return information. Finally, call cpdf_endGetFontInfo to clean up. */ void cpdf_startGetFontInfo(int); int cpdf_numberFonts(void); int cpdf_getFontPage(int); char *cpdf_getFontName(int); char *cpdf_getFontType(int); char *cpdf_getFontEncoding(int); void cpdf_endGetFontInfo(void); /* cpdf_removeFonts(pdf) removes all font data from a file. */ void cpdf_removeFonts(int); /* * cpdf_copyFont(from, to, range, pagenumber, fontname) copies the given font * from the given page in the 'from' PDF to every page in the 'to' PDF. The * new font is stored under its font name. */ void cpdf_copyFont(int, int, int, int, const char[]); �������������������������������������������������������cpdf-2.8.1/html_manual/splits/c16.tex���������������������������������������������������������������0000664�0001750�0001750�00000001360�14771516640�016063� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* CHAPTER 15. PDF and JSON */ /* cpdf_outputJSON(filename, parse_content, no_stream_data, pdf) outputs a PDF * in JSON format to the given filename. If parse_content is true, page content * is parsed. If no_stream_data is true, all stream data is suppressed entirely. * */ void cpdf_outputJSON(const char[], int, int, int, int); /* cpdf_outputJSONMemory(parse_content, no_stream_data, pdf, &length) is like * outputJSON, but it write to a buffer in memory. The length is filled in. */ void *cpdf_outputJSONMemory(int, int, int, int, int *); /* Load a PDF from a JSON file given its filename */ int cpdf_fromJSON(const char[]); /* Load a PDF from a JSON file in memory, given the buffer and its length */ int cpdf_fromJSONMemory(void *, int); ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/html_manual/splits/c01.tex���������������������������������������������������������������0000664�0001750�0001750�00000002274�14771516640�016062� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* CHAPTER 0. Preliminaries */ /* The function cpdf_startup(argv) must be called before using the library. */ void cpdf_startup(char **); /* Return the version of the cpdflib library as a string */ char *cpdf_version(); /* * Some operations have a fast mode. The default is 'slow' mode, which works * even on old-fashioned files. For more details, see section 1.13 of the * CPDF manual. These functions set the mode globally. */ void cpdf_setFast(); void cpdf_setSlow(); /* * Errors. cpdf_lastError and cpdf_lastErrorString hold information about the * last error to have occurred. They should be consulted after each call. If * cpdf_lastError is non-zero, there was an error, and cpdf_lastErrorString * gives details. If cpdf_lastError is zero, there was no error on the most * recent cpdf call. */ extern int cpdf_lastError; extern char *cpdf_lastErrorString; /* cpdf_clearError clears the current error state. */ void cpdf_clearError(void); /* * cpdf_onExit is a debug function which prints some information about * resource usage. This can be used to detect if PDFs or ranges are being * deallocated properly. Contrary to its name, it may be run at any time. */ void cpdf_onExit(void); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/html_manual/splits/c03.tex���������������������������������������������������������������0000664�0001750�0001750�00000002107�14771516640�016057� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* CHAPTER 2. Merging and Splitting */ /* * cpdf_mergeSimple(pdfs, length) given an array of PDFs, and its length, * merges the files into a new one, which is returned. */ int cpdf_mergeSimple(int *, int); /* * cpdf_merge(pdfs, len, retain_numbering, remove_duplicate_fonts) merges the * PDFs. If retain_numbering is true page labels are not rewritten. If * remove_duplicate_fonts is true, duplicate fonts are merged. This is useful * when the source documents for merging originate from the same source. */ int cpdf_merge(int *, int, int, int); /* * cpdf_mergeSame(pdfs, len, retain_numbering, remove_duplicate_fonts, * ranges) is the same as cpdf_merge, except that it has an additional * argument - an array of page ranges. This is used to select the pages to * pick from each PDF. This avoids duplication of information when multiple * discrete parts of a source PDF are included. */ int cpdf_mergeSame(int *, int, int, int, int *); /* * cpdf_selectPages(pdf, range) returns a new document which just those pages * in the page range. */ int cpdf_selectPages(int, int); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/html_manual/splits/c10.tex���������������������������������������������������������������0000664�0001750�0001750�00000002667�14771516640�016070� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* CHAPTER 9. Multipage facilities */ /* cpdf_impose(pdf, x, y, fit, columns, rtl, btt, center, margin, spacing, * linewidth) imposes a PDF. There are two modes: imposing x * y, or imposing * to fit a page of size x * y. This is controlled by fit. Columns imposes by * columns rather than rows. rtl is right-to-left, btt bottom-to-top. Center is * unused for now. Margin is the margin around the output, spacing the spacing * between imposed inputs. */ void cpdf_impose(int, double, double, int, int, int, int, int, double, double, double); /* * Impose a document two up. cpdf_twoUp does so by retaining the existing * page size, scaling pages down. cpdf_twoUpStack does so by doubling the * page size, to fit two pages on one. */ void cpdf_twoUp(int); void cpdf_twoUpStack(int); /* * cpdf_padBefore(pdf, range) adds a blank page before each page in the given * range. */ void cpdf_padBefore(int, int); /* * cpdf_padAfter(pdf, range) adds a blank page after each page in the given * range. */ void cpdf_padAfter(int, int); /* cpdf_pageEvery(pdf, n) adds a blank page after every n pages. */ void cpdf_padEvery(int, int); /* * cpdf_padMultiple(pdf, n) adds pages at the end to pad the file to a * multiple of n pages in length. */ void cpdf_padMultiple(int, int); /* * cpdf_padMultiple(pdf, n) adds pages at the beginning to pad the file to a * multiple of n pages in length. */ void cpdf_padMultipleBefore(int, int); �������������������������������������������������������������������������cpdf-2.8.1/html_manual/splits/c14.tex���������������������������������������������������������������0000664�0001750�0001750�00000001537�14771516640�016067� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* CHAPTER 13. Images. */ /* * Get image data, including resolution at all points of use. Call * cpdf_startGetImageResolution(pdf, min_required_resolution) will begin the * process of obtaining data on all image uses below min_required_resolution, * returning the total number. So, to return all image uses, specify a very * high min_required_resolution. Then, call the other functions giving a * serial number 0..<total number> - 1, to retrieve the data. Finally, call * cpdf_endGetImageResolution to clean up. */ int cpdf_startGetImageResolution(int, float); int cpdf_getImageResolutionPageNumber(int); char *cpdf_getImageResolutionImageName(int); int cpdf_getImageResolutionXPixels(int); int cpdf_getImageResolutionYPixels(int); double cpdf_getImageResolutionXRes(int); double cpdf_getImageResolutionYRes(int); void cpdf_endGetImageResolution(void); �����������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/html_manual/splits/c02.tex���������������������������������������������������������������0000664�0001750�0001750�00000025412�14771516640�016062� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* CHAPTER 1. Basics */ /* * cpdf_fromFile(filename, userpw) loads a PDF file from a given file. Supply * a user password (possibly blank) in case the file is encrypted. It won't be * decrypted, but sometimes the password is needed just to load the file. */ int cpdf_fromFile(const char[], const char[]); /* * cpdf_fromFileLazy(pdf, userpw) loads a PDF from a file, doing only minimal * parsing. The objects will be read and parsed when they are actually * needed. Use this when the whole file won't be required. Also supply a user * password (possibly blank) in case the file is encrypted. It won't be * decrypted, but sometimes the password is needed just to load the file. */ int cpdf_fromFileLazy(const char[], const char[]); /* * cpdf_fromMemory(data, length, userpw) loads a file from memory, given a * pointer and a length, and the user password. */ int cpdf_fromMemory(void *, int, const char[]); /* * cpdf_fromMemory(data, length, userpw) loads a file from memory, given a * pointer and a length, and the user password, but lazily like * cpdf_fromFileLazy. */ int cpdf_fromMemoryLazy(void *, int, const char[]); /* Standard page sizes. */ enum cpdf_papersize { cpdf_a0portrait, /* A0 portrait */ cpdf_a1portrait, /* A1 portrait */ cpdf_a2portrait, /* A2 portrait */ cpdf_a3portrait, /* A3 portrait */ cpdf_a4portrait, /* A4 portrait */ cpdf_a5portrait, /* A5 portrait */ cpdf_a0landscape, /* A0 landscape */ cpdf_a1landscape, /* A1 landscape */ cpdf_a2landscape, /* A2 landscape */ cpdf_a3landscape, /* A3 landscape */ cpdf_a4landscape, /* A4 landscape */ cpdf_a5landscape, /* A5 landscape */ cpdf_usletterportrait, /* US Letter portrait */ cpdf_usletterlandscape, /* US Letter landscape */ cpdf_uslegalportrait, /* US Legal portrait */ cpdf_uslegallandscape /* US Legal landscape */ }; /* Remove a PDF from memory, given its number. */ void cpdf_deletePdf(int); /* * Calling cpdf_replacePdf(a, b) places PDF b under number a. Number b is no * longer available. */ void cpdf_replacePdf(int, int); /* * To enumerate the list of currently allocated PDFs, call * cpdf_startEnumeratePDFs which gives the number, n, of PDFs allocated, then * cpdf_enumeratePDFsInfo and cpdf_enumeratePDFsKey with index numbers from * 0...(n - 1). Call cpdf_endEnumeratePDFs to clean up. */ int cpdf_startEnumeratePDFs(void); int cpdf_enumeratePDFsKey(int); char *cpdf_enumeratePDFsInfo(int); void cpdf_endEnumeratePDFs(void); /* Convert a figure in centimetres to points (72 points to 1 inch) */ double cpdf_ptOfCm(double); /* Convert a figure in millimetres to points (72 points to 1 inch) */ double cpdf_ptOfMm(double); /* Convert a figure in inches to points (72 points to 1 inch) */ double cpdf_ptOfIn(double); /* Convert a figure in points to centimetres (72 points to 1 inch) */ double cpdf_cmOfPt(double); /* Convert a figure in points to millimetres (72 points to 1 inch) */ double cpdf_mmOfPt(double); /* Convert a figure in points to inches (72 points to 1 inch) */ double cpdf_inOfPt(double); /* * A page range is a list of page numbers used to restrict operations to * certain pages. A page specification is a textual description of a page * range, such as "1-12,18-end". Here is the syntax: * * o A range must contain no spaces. * * o A dash (-) defines ranges, e.g. 1-5 or 6-3. * * o A comma (,) allows one to specify several ranges, e.g. 1-2,4-5. * * o The word end represents the last page number. * * o The words odd and even can be used in place of or at the end of a page * range to restrict to just the odd or even pages. * * o The words portrait and landscape can be used in place of or at the end of * a page range to restrict to just those pages which are portrait or * landscape. Note that the meaning of "portrait" and "landscape" does not * take account of any viewing rotation in place (use cpdf_upright first, if * required). A page with equal width and height is considered neither * portrait nor landscape. * * o The word reverse is the same as end-1. * * o The word all is the same as 1-end. * * o A tilde (~) defines a page number counting from the end of the document * rather than the beginning. Page ~1 is the last page, ~2 the penultimate * page etc. */ /* * cpdf_parsePagespec(pdf, range) parses a page specification with reference * to a given PDF (the PDF is supplied so that page ranges which reference * pages which do not exist are rejected). */ int cpdf_parsePagespec(int, const char[]); /* * cpdf_validatePagespec(range) validates a page specification so far as is * possible in the absence of the actual document. Result is true if valid. */ int cpdf_validatePagespec(const char[]); /* * cpdf_stringOfPagespec(pdf, range) builds a page specification from a page * range. For example, the range containing 1,2,3,6,7,8 in a document of 8 * pages might yield "1-3,6-end" */ char *cpdf_stringOfPagespec(int, int); /* cpdf_blankRange() creates a range with no pages in. */ int cpdf_blankRange(void); /* cpdf_deleteRange(range) deletes a range. */ void cpdf_deleteRange(int); /* * cpdf_range(from, to) builds a range from one page to another inclusive. For * example, cpdf_range(3,7) gives the range 3,4,5,6,7 */ int cpdf_range(int, int); /* cpdf_all(pdf) is the range containing all the pages in a given document. */ int cpdf_all(int); /* * cpdf_even(range) makes a range which contains just the even pages of * another range. */ int cpdf_even(int); /* * cpdf_odd(range) makes a range which contains just the odd pages of another * range. */ int cpdf_odd(int); /* * cpdf_rangeUnion(a, b) makes the union of two ranges giving a range * containing the pages in range a and range b. */ int cpdf_rangeUnion(int, int); /* * cpdf_difference(a, b) makes the difference of two ranges, giving a range * containing all the pages in a except for those which are also in b. */ int cpdf_difference(int, int); /* cpdf_removeDuplicates(range) deduplicates a range, making a new one. */ int cpdf_removeDuplicates(int); /* cpdf_rangeLength gives the number of pages in a range. */ int cpdf_rangeLength(int); /* * cpdf_rangeGet(range, n) gets the page number at position n in a range, * where n runs from 0 to rangeLength - 1. */ int cpdf_rangeGet(int, int); /* * cpdf_rangeAdd(range, page) adds the page to a range, if it is not already * there. */ int cpdf_rangeAdd(int, int); /* * cpdf_isInRange(range, page) returns true if the page is in the range, * false otherwise. */ int cpdf_isInRange(int, int); /* cpdf_pages(pdf) returns the number of pages in a PDF. */ int cpdf_pages(int); /* * cpdf_pagesFast(password, filename) returns the number of pages in a given * PDF, with given user encryption password. It tries to do this as fast as * possible, without loading the whole file. */ int cpdf_pagesFast(const char[], const char[]); /* * cpdf_toFile (pdf, filename, linearize, make_id) writes the file to a given * filename. If linearize is true, it will be linearized if a linearizer is * available. If make_id is true, it will be given a new ID. */ void cpdf_toFile(int, const char[], int, int); /* * cpdf_toFileExt (pdf, filename, linearize, make_id, preserve_objstm, * generate_objstm, compress_objstm) writes the file to a given filename. If * make_id is true, it will be given a new ID. If preserve_objstm is true, * existing object streams will be preserved. If generate_objstm is true, * object streams will be generated even if not originally present. If * compress_objstm is true, object streams will be compressed (what we * usually want). WARNING: the pdf argument will be invalid after this call, * and should be discarded. */ void cpdf_toFileExt(int, const char[], int, int, int, int, int); /* * cpdf_toFileMemory (pdf, linearize, make_id, &length) writes a PDF file it * and returns the buffer. The buffer length is filled in &length. */ void *cpdf_toMemory(int, int, int, int *); /* * cpdf_isEncrypted(pdf) returns true if a documented is encrypted, false * otherwise. */ int cpdf_isEncrypted(int); /* * cpdf_decryptPdf(pdf, userpw) attempts to decrypt a PDF using the given * user password. The error code is non-zero if the decryption fails. */ void cpdf_decryptPdf(int, const char[]); /* * cpdf_decryptPdfOwner(pdf, ownerpw) attempts to decrypt a PDF using the * given owner password. The error code is non-zero if the decryption fails. */ void cpdf_decryptPdfOwner(int, const char[]); /* * File permissions. These are inverted, in the sense that the presence of * one of them indicates a restriction. */ enum cpdf_permission { cpdf_noEdit, /* Cannot edit the document */ cpdf_noPrint, /* Cannot print the document */ cpdf_noCopy, /* Cannot copy the document */ cpdf_noAnnot, /* Cannot annotate the document */ cpdf_noForms, /* Cannot edit forms in the document */ cpdf_noExtract, /* Cannot extract information */ cpdf_noAssemble, /* Cannot assemble into a bigger document */ cpdf_noHqPrint /* Cannot print high quality */ }; /* * Encryption methods. Suffixes 'false' and 'true' indicates lack of or * presence of encryption for XMP metadata streams. */ enum cpdf_encryptionMethod { cpdf_pdf40bit, /* 40 bit RC4 encryption */ cpdf_pdf128bit, /* 128 bit RC4 encryption */ cpdf_aes128bitfalse, /* 128 bit AES encryption, do not encrypt * metadata. */ cpdf_aes128bittrue, /* 128 bit AES encryption, encrypt metadata */ cpdf_aes256bitfalse, /* Deprecated. Do not use for new files */ cpdf_aes256bittrue, /* Deprecated. Do not use for new files */ cpdf_aes256bitisofalse, /* 256 bit AES encryption, do not encrypt * metadata. */ cpdf_aes256bitisotrue /* 256 bit AES encryption, encrypt metadata */ }; /* * cpdf_toFileEncrypted(pdf, encryption_method, permissions, * permission_length, owner_password, user password, linearize, makeid, * filename) writes a file as encrypted. */ void cpdf_toFileEncrypted(int, int, int *, int, const char[], const char[], int, int, const char[]); /* * cpdf_toFileEncryptedExt(pdf, encryption_method, permissions, * permission_length, owner_password, user_password, linearize, makeid, * preserve_objstm, generate_objstm, compress_objstm, filename) WARNING: the * pdf argument will be invalid after this call, and should be discarded. */ void cpdf_toFileEncryptedExt(int, int, int *, int, const char[], const char[], int, int, int, int, int, const char[]); /* * cpdf_hasPermission(pdf, permission) returns true if the given permission * (restriction) is present. */ int cpdf_hasPermission(int, enum cpdf_permission); /* * cpdf_encryptionKind(pdf) return the encryption method currently in use on * a document. */ enum cpdf_encryptionMethod cpdf_encryptionKind(int); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/html_manual/splits/c13.tex���������������������������������������������������������������0000664�0001750�0001750�00000003206�14771516640�016061� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* CHAPTER 12. File Attachments */ /* * cpdf_attachFile(filename, pdf) attaches a file to the pdf. It is attached * at document level. */ void cpdf_attachFile(const char[], int); /* * cpdf_attachFileToPage(filename, pdf, pagenumber) attaches a file, given * its file name, pdf, and the page number to which it should be attached. */ void cpdf_attachFileToPage(const char[], int, int); /* * cpdf_attachFileFromMemory(memory, length, filename, pdf) attaches from * memory, just like cpdf_attachFile. */ void cpdf_attachFileFromMemory(void *, int, const char[], int); /* * cpdf_attachFileToPageFromMemory(memory, length, filename, pdf, pagenumber) * attaches from memory, just like cpdf_attachFileToPage. */ void cpdf_attachFileToPageFromMemory(void *, int, const char[], int, int); /* Remove all page- and document-level attachments from a document */ void cpdf_removeAttachedFiles(int); /* * List information about attachments. Call cpdf_startGetAttachments(pdf) * first, then cpdf_numberGetAttachments to find out how many there are. Then * cpdf_getAttachmentName to return each one 0...(n - 1). Finally, call * cpdf_endGetAttachments to clean up. */ void cpdf_startGetAttachments(int); /* Get the number of attachments. */ int cpdf_numberGetAttachments(void); /* Get the name of the attachment. */ char *cpdf_getAttachmentName(int); /* Gets the page number. 0 = document level. */ int cpdf_getAttachmentPage(int); /* * cpdf_getAttachmentData(serial number, &length) returns a pointer to the * data, and its length. */ void *cpdf_getAttachmentData(int, int *); /* Clean up after getting attachments. */ void cpdf_endGetAttachments(void); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/cpdfmanual.tex���������������������������������������������������������������������������0000664�0001750�0001750�00001027130�14771516640�013771� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%\DocumentMetadata{lang=en, pdfversion=2.0, pdfstandard=ua-2, pdfstandard=a-4f, testphase={phase-III, title, table, math, firstaid}} \documentclass{book} % Edit here to produce cpdfmanual.pdf, cpdflibmanual.pdf, pycpdfmanual.pdf, % dotnetcpdflibmanual.pdf, jcpdflibmanual.pdf jscpdflibmanual.pdf etc. \usepackage{comment} \excludecomment{cpdflib} \excludecomment{pycpdflib} \excludecomment{dotnetcpdflib} \excludecomment{jcpdflib} \excludecomment{jscpdflib} %Our packages \usepackage{alltt} \usepackage{palatino} \usepackage{listings} \usepackage{microtype} \usepackage{graphicx} \usepackage{upquote} \PassOptionsToPackage{hyphens}{url}\usepackage[plainpages=false,pdfpagelabels,pdfborder=0 0 0,draft=false,hidelinks,bookmarksnumbered]{hyperref} \usepackage{framed} \newcommand{\smallgap}{\bigskip} \addtolength{\textwidth}{20mm} \usepackage{makeidx}\makeindex \usepackage[left=3cm, right=1.5cm, top=2cm, bottom=1.8cm, paperwidth=7.5in, paperheight=9.25in]{geometry} \usepackage{fancyhdr} \fancyhf{} \pagestyle{fancy} \fancyhead[lo]{\slshape\nouppercase{\leftmark}\hfill\thepage} \fancyhead[re]{\thepage\hfill\slshape\nouppercase{\leftmark}} \fancyfoot{} \renewcommand{\headrulewidth}{0pt} \renewcommand{\footrulewidth}{0pt} \usepackage{pmboxdraw} \usepackage{longtable} %usepackage{multicol} \begin{document} \frontmatter \pagestyle{empty} \begin{flushright} \ifdefined\HCode {\sffamily \bfseries \Huge Coherent PDF Command Line Tools} \else {\sffamily \bfseries \Huge Coherent PDF \vspace{2mm} \begin{cpdflib} C API and \end{cpdflib} \begin{pycpdflib} Python API and \end{pycpdflib} \begin{dotnetcpdflib} .NET API and \end{dotnetcpdflib} \begin{jcpdflib} Java API and \end{jcpdflib} \begin{jscpdflib} JavaScript API and \end{jscpdflib} Command Line Tools} \fi \vspace{12mm} {\Huge User Manual}\\ Version 2.8.1 (April 2025) \vspace{25mm} \vfill \ifdefined\HCode \includegraphics[natwidth=50,natheight=50,alt={Coherent Graphics Ltd logo}]{logo.pdf} \else \includegraphics[alt={Coherent Graphics Ltd logo}]{logo.pdf} \fi \vspace{2mm} {\sffamily \bfseries \LARGE Coherent Graphics Ltd} \end{flushright} \clearpage \pagestyle{empty} \noindent For bug reports, feature requests and comments, email\\ \texttt{contact@coherentgraphics.co.uk} \vspace*{\fill} \noindent\copyright\ Coherent Graphics Limited. All rights reserved. ISBN 978-0957671140 \smallgap \noindent Adobe, Acrobat, and Adobe PDF are registered trademarks of Adobe Systems Incorporated. Windows, Powerpoint and Excel are registered trademarks of Microsoft Corporation. The verification descriptions for the Matterhorn Protocol come from the PDF Association, and are licensed under the Creative Commons Attribution 4.0 International license. \cleardoublepage \pagestyle{plain} \chapter*{Quickstart Examples} These examples demonstrate just a few of the facilities provided by the Coherent PDF Command Line Tools. See each chapter for more commands and full details. \section*{\hyperref[chap:1]{Chapter 1: Basic Usage}} \begin{framed}\noindent\texttt{cpdf in.pdf 1-3,6 -o out.pdf}\end{framed} \noindent Read \texttt{in.pdf}, select pages 1, 2, 3 and 6, and write those pages to \texttt{out.pdf}. \begin{framed}\noindent\texttt{cpdf in.pdf even -o out.pdf}\end{framed} \noindent Select the even pages (2, 4, 6...) from \texttt{in.pdf} and write those pages to \texttt{out.pdf}. \begin{framed} \noindent\small\verb?cpdf -merge in.pdf in2.pdf AND -add-text "Copyright 2024"?\\ \noindent\small\verb? -o out.pdf? \end{framed} \noindent Using \texttt{AND} to perform several operations in order, here merging two files together and adding a copyright stamp to every page. \begin{framed}\noindent\texttt{cpdf -args args.txt}\end{framed} \noindent Read \texttt{args.txt} and use its contents as the command line arguments for Cpdf. \section*{\hyperref[chap:2]{Chapter 2: Merging and Splitting}} \begin{framed}\noindent\texttt{cpdf -merge in.pdf in2.pdf -o out.pdf}\end{framed} \noindent Merge \texttt{in.pdf} and \texttt{in2.pdf} into one document, writing to \texttt{out.pdf}. \begin{framed}\noindent\texttt{cpdf -split in.pdf -o Chunk\%\%\%.pdf -chunk 10}\end{framed} \noindent Split \texttt{in.pdf} into ten-page chunks, writing them to \texttt{Chunk001.pdf}, \texttt{Chunk002.pdf} etc. \begin{framed}\noindent\texttt{cpdf -split-bookmarks 0 in.pdf -utf8 -o @B.pdf}\end{framed} \noindent Split \texttt{in.pdf} on bookmark boundaries, writing each to a file whose name is the bookmark label. \begin{framed}\noindent\texttt{cpdf -split-max 1Mb in.pdf -o \%\%\%.pdf}\end{framed} \noindent Split \texttt{in.pdf} into files of 1Mb or less \begin{framed}\noindent\texttt{cpdf -spray in.pdf -o a.pdf -o b.pdf -o c.pdf}\end{framed} \noindent Split \texttt{in.pdf}, writing pages 1,4,7... to \texttt{a.pdf}, 2,5,8... to \texttt{b.pdf} and 3,6,9... to \texttt{c.pdf}. \section*{\hyperref[chap:3]{Chapter 3: Pages}} \begin{framed}\noindent\texttt{cpdf -scale-page "2 2" in.pdf -o out.pdf}\end{framed} \noindent Scale both the dimensions and contents of \texttt{in.pdf} by a factor of two in x and y directions. \begin{framed}\noindent\texttt{cpdf -scale-to-fit usletterportrait in.pdf -o out.pdf}\end{framed} \noindent Scale the pages in \texttt{in.pdf} to fit the US Letter page size, writing to \texttt{out.pdf} \begin{framed}\noindent\texttt{cpdf -shift "26pt 18mm" in.pdf -o out.pdf}\end{framed} \noindent Shift the contents of the page by 26 pts in the x direction, and 18 millimetres in the y direction, writing to \texttt{out.pdf} \begin{framed}\noindent\texttt{cpdf -rotate-contents 90 in.pdf -o out.pdf}\end{framed} \noindent Rotate the contents of the pages in \texttt{in.pdf} by ninety degrees and write to \texttt{out.pdf}. \begin{framed}\noindent\texttt{cpdf -cropbox "0 0 600pt 400pt" in.pdf -o out.pdf}\end{framed} \noindent Crop the pages in \texttt{in.pdf} to a 600 pts by 400 pts rectangle. \section*{\hyperref[chap:4]{Chapter 4: Encryption and Decryption}} \begin{framed}\noindent\texttt{cpdf -encrypt 128bit fred joe in.pdf -o out.pdf}\end{framed} \noindent Encrypt \texttt{in.pdf} using 128bit PDF encryption using the owner password \texttt{fred} and the user password \texttt{joe} and writing the encrypted file to \texttt{out.pdf} \begin{framed}\noindent\texttt{cpdf -decrypt in.pdf owner=fred -o out.pdf}\end{framed} \noindent Decrypt \texttt{in.pdf} using the owner password, writing to \texttt{out.pdf}. \section*{\hyperref[chap:5]{Chapter 5: Compression}} \begin{framed}\noindent\texttt{cpdf -compress in.pdf -o out.pdf}\end{framed} \noindent Compress the data streams in \texttt{in.pdf}, writing the result to \texttt{out.pdf}. \begin{framed}\noindent\texttt{cpdf -decompress in.pdf -o out.pdf}\end{framed} \noindent Decompress the data streams in \texttt{in.pdf}, writing to \texttt{out.pdf}. \begin{framed}\noindent\texttt{cpdf -squeeze in.pdf -o out.pdf}\end{framed} \noindent Squeeze \texttt{in.pdf}, writing to \texttt{out.pdf}. Squeezing rearranges the structure of the PDF file to save space. \section*{\hyperref[chap:6]{Chapter 6: Bookmarks}} \begin{framed}\noindent\texttt{cpdf -list-bookmarks -utf8 in.pdf}\end{framed} \noindent List the bookmarks in \texttt{in.pdf}. \begin{framed}\noindent\texttt{cpdf -add-bookmarks bookmarks.txt in.pdf -o out.pdf}\end{framed} \noindent Add bookmarks in the same form from a prepared file \texttt{bookmarks.txt} to \texttt{in.pdf}, writing to \texttt{out.pdf}. JSON alternatives are also available. \begin{framed}\noindent\texttt{cpdf -table-of-contents in.pdf -o out.pdf}\end{framed} \noindent Typeset a table of contents from existing bookmarks and prepend to the document. \section*{\hyperref[chap:7]{Chapter 7: Presentations}} \begin{framed} \noindent\small\verb?cpdf -presentation in.pdf 2-end -trans Split -duration 10?\\ \noindent\small\verb? -o out.pdf? \end{framed} \noindent Use the Split style to build a presentation from the PDF \texttt{in.pdf}, each slide staying 10 seconds on screen unless manually advanced. The first page, being a title does not move on automatically, and has no transition effect. \section*{\hyperref[chap:8]{Chapter 8: Logos, Watermarks and Stamps}} \begin{framed}\noindent\texttt{cpdf -stamp-on watermark.pdf in.pdf -o out.pdf}\end{framed} \noindent Stamp the file \texttt{watermark.pdf} on to each page of \texttt{in.pdf}, writing the result to \texttt{out.pdf}. \begin{framed} \noindent\small\verb?cpdf -topleft 10 -font Courier?\\ \noindent\small\verb? -add-text "Page \%Page\nDate \%d-\%m-\%Y" in.pdf -o out.pdf? \end{framed} \noindent Add a page number and date to all the pages in \texttt{in.pdf} using the Courier font, writing to \texttt{out.pdf}. \section*{\hyperref[chap:9]{Chapter 9: Multipage Facilities}} \begin{framed}\noindent\texttt{cpdf -impose-xy "2 1" in.pdf -o out.pdf}\end{framed} \noindent Two up impose the file \texttt{in.pdf}, writing to \texttt{out.pdf}. \begin{framed}\noindent\texttt{cpdf -pad-after in.pdf 1,3,4 -o out.pdf}\end{framed} \noindent Add extra blank pages after pages one, three and four of a document. \begin{framed}\noindent\texttt{cpdf -chop "2 2" in.pdf -o out.pdf}\end{framed} \noindent Chop each page into four quarters, including each in the output. \section*{\hyperref[chap:10]{Chapter 10: Annotations}} \begin{framed}\noindent\texttt{cpdf -list-annotations-json in.pdf > out.json}\end{framed} \noindent List the annotations in a file \texttt{in.pdf} to standard output, redirecting to file \texttt{out.json}. \begin{framed}\noindent\texttt{cpdf -set-annotations-json out.json in.pdf -o out.pdf}\end{framed} \noindent Add the annotations from a JSON annotations file to \texttt{in.pdf}, writing to \texttt{out.pdf}. \begin{framed}\noindent\texttt{cpdf -remove-annotations in.pdf -o out.pdf}\end{framed} \noindent Remove the annotations from \texttt{in.pdf}, writing to \texttt{out.pdf}. \section*{\hyperref[chap:11]{Chapter 11: Document Information and Metadata}} \begin{framed}\noindent\texttt{cpdf -info -utf8 in.pdf}\end{framed} \noindent List document metadata for \texttt{in.pdf}. \begin{framed}\noindent\texttt{cpdf -set-title "The New Title" -also-set-xmp in.pdf -o out.pdf}\end{framed} \noindent Set the document title of \texttt{in.pdf}, writing to \texttt{out.pdf}. \begin{framed}\noindent\texttt{cpdf -hide-toolbar true in.pdf -o out.pdf}\end{framed} \noindent Set the document \texttt{in.pdf} to open with the PDF Viewer's toolbar hidden, writing to \texttt{out.pdf}. \begin{framed}\noindent\texttt{cpdf -set-metadata metadata.xml in.pdf -o out.pdf}\end{framed} \noindent Set the metadata in a PDF \texttt{in.pdf} to the contents of the file \texttt{metadata.xml}, and write the output to \texttt{out.pdf}. \begin{framed}\noindent\texttt{cpdf -set-page-layout TwoColumnRight in.pdf -o out.pdf}\end{framed} \noindent Set the document \texttt{in.pdf} to open in PDF Viewer showing two columns of pages, starting on the right, putting the result in \texttt{out.pdf}. \begin{framed}\noindent\texttt{cpdf -set-page-mode FullScreen in.pdf -o out.pdf}\end{framed} \noindent Set the document \texttt{in.pdf} to open in PDF Viewer in full screen mode, putting the result in \texttt{out.pdf}. \begin{framed}\noindent\texttt{cpdf -print-page-labels-json in.pdf}\end{framed} \noindent Show, in JSON format, the page labels in \texttt{in.pdf}. \begin{framed}\noindent\texttt{cpdf -composition in.pdf}\end{framed} \noindent Show how much data in \texttt{in.pdf} is used for images, fonts etc. \section*{\hyperref[chap:12]{Chapter 12: File Attachments}} \begin{framed}\noindent\texttt{cpdf -attach-file sheet.xls in.pdf -o out.pdf}\end{framed} \noindent Attach the file \texttt{sheet.xls} to \texttt{in.pdf}, writing to \texttt{out.pdf}. \begin{framed}\noindent\texttt{cpdf -remove-files in.pdf -o out.pdf}\end{framed} \noindent Remove any attachments from \texttt{in.pdf}, writing to \texttt{out.pdf}. \begin{framed}\noindent\texttt{cpdf -dump-attachments in.pdf -o /home/fred/attachments}\end{framed} \noindent Dump attachments to file, given the directory to put them in. \section*{\hyperref[chap:13]{Chapter 13: Images}} \begin{framed}\noindent\texttt{cpdf -image-resolution 600 in.pdf}\end{framed} \noindent Identify and list any image used at less than 600dpi. \begin{framed}\noindent\texttt{cpdf -extract-images in.pdf -im /usr/bin/magick -o output/\%\%\%}\end{framed} \noindent Extract images from \texttt{in.pdf} to directory \texttt{output} (with the help of imagemagick). \begin{framed}\noindent\texttt{cpdf -process-images -jpeg-to-jpeg 65 in.pdf -o out.pdf}\end{framed} \noindent Process JPEG images in \texttt{in.pdf} to 65\% quality, writing the output to \texttt{out.pdf}. \begin{framed}\noindent\texttt{cpdf -gs gs -rasterize in.pdf -o out.pdf}\end{framed} \noindent Rasterize PDF page content, creating new PDF. \begin{framed}\noindent\texttt{cpdf -gs gs -output-image in.pdf 10-end -o image\%\%\%.png}\end{framed} \noindent Rasterize PDF pages to PNG files. \section*{\hyperref[chap:14]{Chapter 14: Fonts}} \begin{framed}\noindent\texttt{cpdf -list-fonts in.pdf}\end{framed} \noindent List the fonts in use, and what pages they are used on. \begin{framed}\noindent\texttt{cpdf -missing-fonts in.pdf}\end{framed} \noindent List missing fonts. \section*{\hyperref[chap:15]{Chapter 15: PDF and JSON}} \begin{framed} \noindent\small\verb?cpdf in.pdf -output-json -utf8 -output-json-parse-content-streams?\\ \noindent\small\verb? -o out.json? \end{framed} \noindent Write the PDF in JSON format to the given file, parsing its content streams into individual JSON objects too. \begin{framed}\noindent\texttt{cpdf -j in.json -o out.pdf}\end{framed} \noindent Load a PDF in JSON format, writing to an output PDF. \section*{\hyperref[chap:16]{Chapter 16: Optional Content Groups}} \begin{framed}\noindent\texttt{cpdf -ocg-list in.pdf}\end{framed} \noindent List the optional content groups by name. \begin{framed}\noindent\texttt{cpdf -ocg-coalesce-on-name in.pdf -o out.pdf}\end{framed} \noindent Coalesce optional content groups after merging or stamping two files with OCGs with like names. \section*{\hyperref[chap:17]{Chapter 17: Creating New PDFs}} \begin{framed} \noindent\small\verb?cpdf -create-pdf -create-pdf-pages 20?\\ \noindent\small\verb? -create-pdf-papersize usletterportrait -o out.pdf? \end{framed} \noindent Create a US Letter PDF of twenty pages. \begin{framed} \noindent\small\verb?cpdf -typeset file.txt -create-pdf-papersize a3portrait?\\ \noindent\small\verb? -font Courier -font-size 10 -o out.pdf? \end{framed} \noindent Typeset a text file as PDF on A3 paper with Courier 10 point font. \begin{framed}\noindent\texttt{cpdf -jpeg pic.jpeg -png pic.png -o out.pdf}\end{framed} \noindent Make a two-page PDF, the first from a JPEG and the second from a PNG. \section*{\hyperref[chap:18]{Chapter 18: Drawing on PDFs}} \begin{framed} \noindent\small\verb?cpdf -create-pdf AND -draw -to "100 100" -line "400 400"?\\ \noindent\small\verb? -line "400 100" -close -fill?\\ \noindent\small\verb? -o out.pdf? \end{framed} \noindent Create a new PDF and draw a filled triangle on it. \begin{framed} \noindent\small\verb?cpdf -create-pdf AND -draw -mtrans "100 200" -font-size 50?\\ \noindent\small\verb? -leading 55 -bt -text "This is" -nl -text "on multiple"?\\ \noindent\small\verb? -nl -text "lines" -et -o out.pdf? \end{framed} \noindent Create a new PDF and draw three lines of text on it. \begin{framed} \noindent\small\verb!cpdf -create-pdf AND -draw -bt -text "Page 1" -et -newpage!\\ \noindent\small\verb! -bt -text "Page 2" -et -o out.pdf! \end{framed} \noindent Create a new PDF and draw text on one page and then the next. \section*{\hyperref[chap:misc]{Chapter 19: Accessible PDFs with PDF/UA}} \begin{framed}\noindent\texttt{cpdf -verify 'PDF/UA-1(matterhorn)' -json in.pdf}\end{framed} \noindent Verify \texttt{in.pdf} for conformance to PDF/UA-1 using the Matterhorn protocol, returning results in JSON format. \section*{\hyperref[chap:misc]{Chapter 20: Miscellaneous}} \begin{framed}\noindent\texttt{cpdf -blacktext in.pdf -o out.pdf}\end{framed} \noindent Blacken all the text in \texttt{in.pdf}, writing to \texttt{out.pdf}. \begin{framed}\noindent\texttt{cpdf -thinlines 2pt in.pdf -o out.pdf}\end{framed} \noindent Make sure all lines in \texttt{in.pdf} are at least 2pts wide, writing to \texttt{out.pdf}. \begin{framed}\noindent\texttt{cpdf -print-dict-entry /URI in.pdf}\end{framed} \noindent List all URLs in annotation hyperlinks in \texttt{in.pdf}. \pagestyle{empty}\thispagestyle{plain} \cleardoublepage \begin{cpdflib} \chapter*{Example Program in C} This program loads a file \texttt{hello.pdf} from disk and writes out a document with the original included three times. Note the use of \texttt{cpdf\_startup}, \texttt{cpdf\_lastError} and \texttt{cpdf\_clearError}. \begin{small} \begin{verbatim} #include <stdbool.h> #include "cpdflibwrapper.h" int main (int argc, char ** argv) { /* Initialise cpdf */ cpdf_startup(argv); /* We will take the input hello.pdf and repeat it three times */ int mergepdf = cpdf_fromFile("hello.pdf", ""); /* Check the error state */ if (cpdf_lastError) return 1; /* Clear the error state */ cpdf_clearError(); /* The array of PDFs to merge */ int pdfs[] = {mergepdf, mergepdf, mergepdf}; /* Merge them */ int merged = cpdf_mergeSimple(pdfs, 3); if (cpdf_lastError) return 1; cpdf_clearError(); /* Write output */ cpdf_toFile(merged, "merged.pdf", false, false); if (cpdf_lastError) return 1; return 0; } \end{verbatim} \end{small} \end{cpdflib} \begin{pycpdflib} \chapter*{Example Program in Python} This program loads a file \texttt{hello.pdf} from disk and writes out a document with the original included three times. \begin{small} \begin{verbatim} #Merge example import pycpdflib #DLL loading depends on your own platform. These are the author's settings. if sys.platform.startswith('darwin'): pycpdflib.loadDLL("/Users/john/repos/python-libcpdf/libpycpdf.so") elif sys.platform.startswith('linux'): pycpdflib.loadDLL("../libpycpdf.so") elif sys.platform.startswith('win32') or sys.platform.startswith('cygwin'): os.add_dll_directory("C:\\\\OCaml64/home/JohnWhitington/python-libcpdf/") pycpdflib.loadDLL("libpycpdf.dll") #We will take the input hello.pdf and repeat it three times mergepdf = pycpdf.fromFile('hello.pdf', '') #The list of PDFs to merge pdfs = [mergepdf, mergepdf, mergepdf] #Merge them merged = pycpdflib.mergeSimple(pdfs) #Write output pycpdflib.toFile(merged, 'merged.pdf', False, False) \end{verbatim} \end{small} \end{pycpdflib} \begin{dotnetcpdflib} \chapter*{Example Program in C\#} This program loads a file \texttt{hello.pdf} from disk and writes out a document with the original included three times. \begin{small} \begin{verbatim} //Merge example using System; using System.Collections.Generic; using CoherentGraphics; // Initialise cpdf Cpdf.startup(); // We will take the input hello.pdf and repeat it three times using (Cpdf.Pdf mergepdf = Cpdf.fromFile("hello.pdf", "")) { // The list of PDFs to merge List<Cpdf.Pdf> pdfs = new List<Cpdf.Pdf> {mergepdf, mergepdf, mergepdf}; // Merge them Cpdf.Pdf merged = Cpdf.mergeSimple(pdfs); // Write output Cpdf.toFile(merged, "merged.pdf", false, false); // Dispose of merged PDF merged.Dispose(); } \end{verbatim} \end{small} \noindent Note the use of \texttt{using} and \texttt{Dispose()} to ensure the PDFs are thrown away when no longer required. \chapter*{Example Program in VB.NET} This program loads a file \texttt{hello.pdf} from disk and writes out a document with the original included three times. \begin{small} \begin{verbatim} ' Merge example imports System imports System.Collections.Generic imports CoherentGraphics ' Initialise cpdf Cpdf.startup() ' We will take the input hello.pdf and repeat it three times Using mergepdf As Cpdf.Pdf = Cpdf.fromFile("hello.pdf", "") ' The list of PDFs to merge Dim pdfs As List(Of Cpdf.Pdf) = new List(Of Cpdf.Pdf)({mergepdf, mergepdf, mergepdf}) ' Merge them Dim merged As Cpdf.Pdf = Cpdf.mergeSimple(pdfs) ' Write output Cpdf.toFile(merged, "merged.pdf", false, false) ' Dispose of merged PDF merged.Dispose() End Using \end{verbatim} \end{small} \noindent Note the use of \texttt{Using} and \texttt{Dispose()} to ensure the PDFs are thrown away when no longer required. \end{dotnetcpdflib} \begin{jcpdflib} \chapter*{Example Program in Java} This program loads a file \texttt{hello.pdf} from disk and writes out a document with the original included three times. \begin{small} \begin{verbatim} //Merge example import com.coherentpdf.Jcpdf public static void main(String[] args) { // Initialise cpdf Jcpdf jcpdf = new Jcpdf(); try { jcpdf.startup(); } catch (Jcpdf.CpdfError e) { System.out.println("Error during cpdf startup"); } // We will take the input hello.pdf and repeat it three times try (Jcpdf.Pdf mergepdf = jcpdf.fromFile("hello.pdf", "")) { // The array of PDFs to merge Jcpdf.Pdf[] pdfs = {mergepdf, mergepdf, mergepdf}; // Merge them Jcpdf.Pdf merged = jcpdf.mergeSimple(pdfs); // Write output jcpdf.toFile(merged, "merged.pdf", false, false); // Dispose of merged PDF merged.close(); } catch (Jcpdf.CpdfError e) { System.out.println("Error during cpdf operation"); } } \end{verbatim} \end{small} \noindent Note the use of \texttt{try} and \texttt{close()} to ensure the PDFs are thrown away when no longer required. \end{jcpdflib} \begin{jscpdflib} \chapter*{Example Program in JavaScript} This program loads a file \texttt{hello.pdf} from disk and writes out a document with the original included three times. \begin{small} \begin{verbatim} //Merge example //Load coherentpdf.js const coherentpdf = require('./coherentpdf.js'); //Load the file hello.pdf from the current directory var pdf = coherentpdf.fromFile('hello.pdf', ''); //Merge three copies of it var merged = coherentpdf.mergeSimple([pdf, pdf, pdf]); //Write to merged.pdf coherentpdf.toFile(merged, 'merged.pdf', false, false); //Clean up the two PDFs coherentpdf.deletePdf(pdf); coherentpdf.deletePdf(merged); \end{verbatim} \end{small} \noindent To be run in node. A browser example is included in the distribution of coherentpdf.js. \end{jscpdflib} \pagestyle{plain} \tableofcontents\clearpage\pagestyle{empty} \cleardoublepage \pagestyle{plain} \chapter*{Typographical Conventions} Command lines to be typed are shown in \texttt{typewriter\hspace{-1mm} font} in a box. For example: \begin{framed} \noindent\small\verb!cpdf in.pdf -o out.pdf! \end{framed} \noindent When describing the general form of a command, rather than a particular example, square brackets \verb|[]| are used to enclose optional parts, and angled braces \verb!<>! to enclose general descriptions which may be substituted for particular instances. For example, \begin{framed} \noindent\small\verb!cpdf <operation> in.pdf [<range>] -o out.pdf! \end{framed} \noindent describes a command line which requires an operation and, optionally, a range. An exception is that we use \texttt{in.pdf} and \texttt{out.pdf} instead of \texttt{<input file>} and \texttt{<output file>} to reduce verbosity. Under Microsoft Windows, type \texttt{cpdf.exe} instead of \texttt{cpdf}. \clearpage\pagestyle{empty}\cleardoublepage \mainmatter %\chapterstyle{hangnum} %\pagestyle{ruled} \pagestyle{fancy} \chapter{Basic Usage}\label{chap:1} \label{basicusage} \begin{framed} \small \noindent\begin{verbatim} -help --help -version -o -i -idir <directory> -recrypt -decrypt-force -stdout -stdin -stdin-user <password> -stdin-owner <password> -producer <text> -creator <text> -change-id -l -cpdflin <filename> -keep-l -no-preserve-objstm -create-objstm -args <filename> -args-json <filename> -utf8 -stripped -raw -gs -gs-malformed -gs-malformed-force -gs-quiet -error-on-malformed\end{verbatim}\end{framed} The Coherent PDF tools provide a wide range of facilities for modifying PDF files created by other means. There is a single command-line program Cpdf (\texttt{cpdf.exe} under Microsoft Windows). The rest of this manual describes the options that may be given to this program. \section{Documentation} The operation \texttt{-help / --help} prints each operation and option together with a short description. The operation \texttt{-version} prints the Cpdf version string. \index{input files} \index{output files} \section{Input and Output Files} The typical pattern for usage is \begin{framed} \noindent\small\verb!cpdf [<operation>] <input file(s)> -o <output file>! \end{framed} \noindent and the simplest concrete example, assuming the existence of a file \texttt{in.pdf} is: \begin{framed} \noindent\small\verb!cpdf in.pdf -o out.pdf! \end{framed} \noindent This copies \texttt{in.pdf} to \texttt{out.pdf}. Of course, we should like to do more interesting things to the PDF file than that! Files on the command line are distinguished from other input by their containing a period. If an input file does not contain a period, it should be preceded by \verb!-i!. For example: \begin{framed} \noindent\small\verb!cpdf -i in -o out.pdf! \end{framed} \noindent A whole directory of files may be added (where a command supports multiple files) by using the \verb!-idir! option: \begin{framed} \noindent\small\verb!cpdf -merge -idir myfiles -o out.pdf! \end{framed} \noindent The files in the directory \verb!myfiles! are considered in alphabetical order. They must all be PDF files. If the names of the files are numeric, leading zeroes will be required for the order to be correct (e.g \verb!001.pdf!, \verb!002.pdf! etc). To restrict cpdf to files ending in \texttt{.pdf} (in upper or lower or mixed case) add the option \texttt{-idir-only-pdfs} \textit{before} \texttt{-idir}: \begin{framed} \noindent\small\verb!cpdf -merge -idir-only-pdfs -idir myfiles -o out.pdf! \end{framed} \section{Input Ranges} An \index{input range} \index{range} \textit{input range} may be specified after each input file. This is treated differently by each operation. For instance \begin{framed} \noindent\small\verb!cpdf in.pdf 2-5 -o out.pdf! \end{framed} \noindent extracts pages two, three, four and five from \texttt{in.pdf}, writing the result to \texttt{out.pdf}, assuming that \texttt{in.pdf} contains at least five pages. \index{page!range} \index{reversing} Here are the rules for building input ranges: \begin{itemize} \item A number represents a page number \item A page label may be used in place of a number e.g \texttt{[iii]} represents the first page found which is labelled \texttt{iii}. \item A tilde (\texttt{\~{}}) defines a page number counting from the end of the document rather than the beginning. Page \texttt{\~{}1} is the last page, \texttt{\~{}2} the penultimate page etc. \item A dash (\texttt{-}) defines ranges, e.g. \texttt{1-5} or \texttt{6-3}. \item A comma (\texttt{,}) allows one to specify several ranges, e.g. \texttt{1-2,4-5}. \item The word \texttt{end} represents the last page. \item The words \texttt{odd} and \texttt{even} can be used in place of or at the end of a page range to restrict to just the odd or even pages. \item The words \texttt{portrait} and \texttt{landscape} can be used in place of or at the end of a page range to restrict to just those pages which are portrait or landscape. Note that the meaning of ``portrait'' and ``landscape'' does not take account of any viewing rotation in place (use \texttt{-upright} from chapter 3 first, if required). A page with equal width and height is considered neither portrait nor landscape. \item The word \texttt{reverse} is the same as \texttt{end-1}. \item The word \texttt{all} is the same as \texttt{1-end}. \item A range must contain no spaces. \item Prepending \texttt{NOT} to a whole page range inverts it. \item Prepending \verb!<n>!\texttt{DUP} to a whole page range duplicates each page of the range \verb!<n>! times.\index{page!duplicate} \end{itemize} \noindent For example: \begin{framed} \noindent\small\verb!cpdf in.pdf 1,2,7-end -o out.pdf! \vspace{2.5mm} \noindent Remove pages three, four, five and six from a document. \vspace{2.5mm} \noindent\verb!cpdf in.pdf 1-16odd -o out.pdf! \vspace{2.5mm} \noindent Extract the odd pages 1,3,...,13,15. \vspace{2.5mm} \noindent\verb!cpdf in.pdf landscape -rotate 90 -o out.pdf! \vspace{2.5mm} \noindent Rotate all landscape pages by ninety degrees. \vspace{2.5mm} \noindent\verb!cpdf in.pdf 1,all -o out.pdf! \vspace{2.5mm} \noindent Duplicate the front page of a document, perhaps as a fax cover sheet. \vspace{2.5mm} \noindent\verb!cpdf in.pdf ~3-~1 -o out.pdf! \vspace{2.5mm} \noindent Extract the last three pages of a document, in order. \vspace{2.5mm} \noindent\verb!cpdf in.pdf 2DUP1-10 -o out.pdf! \vspace{2.5mm} \noindent Produce the pages 1,1,2,2,....10,10. \end{framed} \noindent If the file has a structure tree (a.k.a Tagged PDF), it will be preserved whole. To trim the structure tree to only include the output pages, and so save space, add \texttt{-process-struct-trees} to the command line. \index{decryption} \section{Working with Encrypted Documents} \index{owner password} \index{user password} \index{password} In order to perform many operations, encrypted input PDF files must be decrypted. Some require the owner password, some either the user or owner passwords. Either password is supplied by writing \texttt{user=<password>} or \texttt{owner=<password>} following each input file requiring it (before or after any range). The document will \textit{not} be re-encrypted upon writing. For example: \begin{framed} \noindent\small\verb!cpdf in.pdf user=charles -info!\\ \noindent\small\verb!cpdf in.pdf owner=fred reverse -o out.pdf! \end{framed} \noindent To re-encrypt the file with its existing encryption upon writing, which is required if only the user password was supplied, but allowed in any case, add the \texttt{-recrypt} option: \begin{framed} \noindent\small\verb!cpdf in.pdf user=charles reverse -recrypt -o out.pdf! \end{framed} \noindent The password required (owner or user) depends upon the operation being performed. Separate facilities are provided to decrypt and encrypt files (See Section \ref{crypt}). When appropriate passwords are not available, the option \texttt{-decrypt-force} may be added to the command line to process the file regardless. For decryption with AES256, passwords may be Unicode. However the password, should it contain non-ASCII characters, must be normalized by applying the SASLPrep profile (RFC 4013) of the stringprep algorithm (RFC 3454) using the Normalize and BiDi options. It must then be converted to UTF8 and truncated to 127 bytes. Cpdf does not perform this pre-processing -- it takes its passwords from the command line without processing. \section{Standard Input and Standard Output} \index{standard input} \index{standard output} Thus far, we have assumed that the input PDF will be read from a file on disk, and the output written similarly. Often it's useful to be able to read input from \texttt{stdin} (Standard Input) or write output to \texttt{stdout} (Standard Output) instead. The typical use is to join several programs together into a \textit{pipe}, passing data from one to the next without the use of intermediate files. Use \texttt{-stdin} to read from standard input, and \texttt{-stdout} to write to standard input, either to pipe data between multiple programs, or multiple invocations of the same program. For example, this sequence of commands (all typed on one line) \begin{framed} \noindent\small\begin{verbatim} cpdf in.pdf reverse -stdout | cpdf -stdin 1-5 -stdout | cpdf -stdin reverse -o out.pdf\end{verbatim} \end{framed} \noindent extracts the last five pages of \texttt{in.pdf} in the correct order, writing them to \texttt{out.pdf}. It does this by reversing the input, taking the first five pages and then reversing the result. To supply passwords for a file from \texttt{-stdin}, use \texttt{-stdin-owner <password>} and/or \texttt{-stdin-user <password>}. Using \texttt{-stdout} on the final command in the pipeline to output the PDF to screen is not recommended, since PDF files often contain compressed sections which are not screen-readable. Several Cpdf operations write to standard output by default (for example, listing fonts). A useful feature of the command line (not specific to Cpdf) is the ability to redirect this output to a file. This is achieved with the \texttt{>} operator: \begin{framed} \noindent\small\verb!cpdf -info in.pdf > file.txt! \vspace{2.5mm} \noindent Use the \texttt{-info} operation (See Section \ref{info}), redirecting the output to \texttt{file.txt}. \end{framed} \section{Doing Several Things at Once with AND} \index{AND} The keyword \texttt{AND} can be used to string together several commands in one. The advantage compared with using pipes is that the file need not be repeatedly parsed and written out, saving time. To use \texttt{AND}, simply leave off the output specifier (e.g \texttt{-o}) of one command, and the input specifier (e.g filename) of the next. For instance: \begin{framed} \noindent \small\verb!cpdf -merge in.pdf in2.pdf AND -add-text "Label"!\\ \noindent\small\verb! AND -merge in3.pdf -o out.pdf! \vspace{2.5mm} \noindent Merge \texttt{in.pdf} and \texttt{in2.pdf} together, add text to both pages, append \texttt{in3.pdf} and write to \texttt{out.pdf}. \end{framed} \noindent To specify the range for each section, use \texttt{-range}: \begin{framed} \noindent\small\verb!cpdf -merge in.pdf in2.pdf AND -range 2-4 -add-text "Label"! \noindent\small\verb! AND -merge in3.pdf -o out.pdf! \end{framed} \section{Units} \index{units} When measurements are given to Cpdf, they are in points (1 point = 1/72 inch). They may optionally be followed by some letters to change the measurement. The following are supported: \begin{center} \begin{tabular}{rl} \texttt{pt} & Points (72 points per inch). The default. \\ \texttt{cm} & Centimeters \\ \texttt{mm} & Millimeters \\ \texttt{in} & Inches \\ \end{tabular} \end{center} \noindent For example, one may write \texttt{14mm} or \texttt{21.6in}. In addition, the following letters stand for various page dimensions: \begin{center} \begin{tabular}{rl} \texttt{PW} & Page width\\ \texttt{PH} & Page height\\ \texttt{PMINX} & Page minimum x coordinate\\ \texttt{PMINY} & Page minimum y coordinate\\ \texttt{PMAXX} & Page maximum x coordinate\\ \texttt{PMAXY} & Page maximum y coordinate\\ \texttt{CW} & Crop box width\\ \texttt{CH} & Crop box height\\ \texttt{CMINX} & Crop box minimum x coordinate\\ \texttt{CMINY} & Crop box minimum y coordinate\\ \texttt{CMAXX} & Crop box maximum x coordinate\\ \texttt{CMAXY} & Crop box maximum y coordinate\\ \texttt{AW} & Art box width\\ \texttt{AH} & Art box height\\ \texttt{AMINX} & Art box minimum x coordinate\\ \texttt{AMINY} & Art box minimum y coordinate\\ \texttt{AMAXX} & Art box maximum x coordinate\\ \texttt{AMAXY} & Art box maximum y coordinate\\ \texttt{TW} & Trim box width\\ \texttt{TH} & Trim box height\\ \texttt{TMINX} & Trim box minimum x coordinate\\ \texttt{TMINY} & Trim box minimum y coordinate\\ \texttt{TMAXX} & Trim box maximum x coordinate\\ \texttt{TMAXY} & Trim box maximum y coordinate\\ \texttt{BW} & Bleed box width\\ \texttt{BH} & Bleed box height\\ \texttt{BMINX} & Bleed box minimum x coordinate\\ \texttt{BMINY} & Bleed box minimum y coordinate\\ \texttt{BMAXX} & Bleed box maximum x coordinate\\ \texttt{BMAXY} & Bleed box maximum y coordinate\\ \end{tabular} \end{center} \noindent For example, we may write \texttt{PMINX}\ \texttt{PMINY} to stand for the coordinate of the lower left corner of the page. Simple arithmetic may be performed using the words \texttt{add}, \texttt{sub}, \texttt{mul} and \texttt{div} to stand for addition, subtraction, multiplication and division. For example, one may write \texttt{14in\hspace{-1mm} sub\hspace{-1mm} 30pt} or \texttt{PMINX\hspace{-1mm} mul\hspace{-1mm} 2} \section{Setting the Producer and Creator} \index{producer}\index{creator} The \texttt{-producer} and \texttt{-creator} options may be added to any Cpdf command line to set the producer and/or creator of the PDF file. If the file was converted from another format, the \textit{creator} is the program producing the original, the \textit{producer} the program converting it to PDF. \begin{framed} \noindent\small\verb!cpdf -merge in.pdf in2.pdf -producer MyMerger -o out.pdf! \vspace{2.5mm} \noindent Merge \texttt{in.pdf} and \texttt{in2.pdf}, setting the producer to \texttt{MyMerger} and writing the output to \texttt{out.pdf}.\end{framed} \section{PDF Version Numbers} \index{version number} When an operation which uses a part of the PDF standard which was introduced in a later version than that of the input file, the PDF version in the output file is set to the later version (most PDF viewers will try to load any PDF file, even if it is marked with a later version number). However, this automatic version changing may be suppressed with the \texttt{-keep-version} option. If you wish to manually alter the PDF version of a file, use the \texttt{-set-version} operation described in Section \ref{setversion}. \section{File IDs} \index{file ID} PDF files contain an ID (consisting of two parts), used by some workflow systems to uniquely identify a file. To change the ID, behavior, use the \texttt{-change-id} operation. This will create a new ID for the output file. \begin{framed} \noindent\small\verb!cpdf -change-id in.pdf -o out.pdf! \vspace{2.5mm} \noindent Write \texttt{in.pdf} to \texttt{out.pdf}, changing the ID. \end{framed} \noindent Setting the environment variable \texttt{CAMLPDF\_REPRODUCIBLE\_IDS} to \texttt{true} will use a standard value instead of generating one. \section{Linearization} \index{linearization} Linearized PDF is a version of the PDF format in which the data is held in a special manner to allow content to be fetched only when needed. This means viewing a multipage PDF over a slow connection is more responsive. By default, Cpdf does not linearize output files. To make it do so, add the \texttt{-l} option to the command line, in addition to any other command being used. For example: \begin{framed} \noindent\small\verb!cpdf -l in.pdf -o out.pdf! \vspace{2.5mm} \noindent Linearize the file \texttt{in.pdf}, writing to \texttt{out.pdf}. \end{framed} \noindent This requires the existence of the external program \texttt{cpdflin} which is provided with commercial versions of Cpdf. This must be installed as described in the installation documentation provided with your copy of \texttt{cpdf}. If you are unable to install \texttt{cpdflin}, you must use \texttt{-cpdflin} to let Cpdf know where to find it: \begin{framed} \noindent\small\verb!cpdf.exe -cpdflin "C:\\cpdflin.exe" -l in.pdf -o out.pdf! \vspace{2.5mm} \noindent Linearize the file \texttt{in.pdf}, writing to \texttt{out.pdf}. \end{framed} \noindent In extremis, you may place \texttt{cpdflin} and its resources in the current working directory, though this is not recommended. For further help, refer to the installation instructions for your copy of Cpdf. To keep the existing linearization status of a file (produce linearized output if the input is linearized and the reverse), use \texttt{-keep-l} instead of \texttt{-l}. \section{Object Streams} \index{object stream} PDF 1.5 introduced a new mechanism for storing objects to save space: object streams. by default, Cpdf will preserve object streams in input files, creating no more. To prevent the retention of existing object streams, use \texttt{-no-preserve-objstm}: \begin{framed} \noindent\small\verb!cpdf -no-preserve-objstm in.pdf -o out.pdf! \vspace{2.5mm} \noindent Write the file \texttt{in.pdf} to \texttt{out.pdf}, removing any object streams. \end{framed} \noindent To create new object streams if none exist, or augment the existing ones, use \texttt{-create-objstm}: \begin{framed} \noindent\small\verb!cpdf -create-objstm in.pdf -o out.pdf! \vspace{2.5mm} \noindent Write the file \texttt{in.pdf} to \texttt{out.pdf}, preserving any existing object streams, and creating any new ones for new objects which have been added. \end{framed} \noindent To create wholly new object streams, use both options together: \begin{framed} \noindent\small\verb!cpdf -create-objstm -no-preserve-objstm in.pdf -o out.pdf! \vspace{2.5mm} \noindent Write the file \texttt{in.pdf} to \texttt{out.pdf} with wholly new object streams. \end{framed} \noindent Files written with object streams will be set to PDF 1.5 or higher, unless \texttt{-keep-version} is used (see above). \section{Malformed Files} \index{malformed file} \label{fast} There are many malformed PDF files in existence, including many produced by otherwise-reputable applications. Cpdf attempts to correct these problems silently. Grossly malformed files will be reconstructed. The reconstruction progress is shown on \verb!stderr! (Standard Error): \begin{framed} \noindent\small\verb!$cpdf in.pdf -o out.pdf!\\ \small\verb!couldn't lex object number!\\ \small\verb!Attempting to reconstruct the malformed pdf in.pdf...!\\ \small\verb!Read 5530 objects!\\ \small\verb$Malformed PDF reconstruction succeeded!$ \end{framed} \noindent In the unlikely event that Cpdf cannot reconstruct a malformed file, it is able to use the \texttt{gs} program to try to reconstruct the PDF file, if you have it installed. For example, if \texttt{gs} is installed and in your path, we might try: \begin{framed} \noindent\small\verb!cpdf -gs gs -gs-malformed in.pdf -o out.pdf!\end{framed} \noindent To suppress the output of \texttt{gs} use the \texttt{-gs-quiet} option. If the malformity lies inside an individual page of the PDF, rather than in its gross structure, Cpdf may appear to succeed in reconstruction, only to fail when processing a page (e.g when adding text). To force the use of \texttt{gs} to pre-process such files so cpdf cannot fail on them, use \texttt{-gs\--malformed\--force}: \begin{framed} \noindent\small\verb!cpdf in.pdf -gs gs -gs-malformed-force -o out.pdf [-gs-quiet]!\end{framed} \noindent The command line for \texttt{-gs-malformed-force} must be of \textit{precisely} this form. Sometimes, on the other hand, we might wish Cpdf to fail immediately on any malformed file, rather than try its own reconstruction process. The option \texttt{-error-on-malformed} achieves this. \begin{framed}\noindent\textit{Note: Use of these commands with \texttt{-gs} is a last resort; they may strip some metadata from PDF files.}\end{framed} \noindent Sometimes old, pre-ISO standardisation files can be technically well-formed but use inefficient PDF constructs. If you are sure the input files you are using are modern ISO-compliant PDFs, the \texttt{-fast} option may be added to the command line (or, if using \texttt{AND}, to each section of the command line). This will use certain shortcuts which speed up processing, but would fail on a minority of pre-ISO files. The \verb!-fast! option may be used with: \begin{framed} \small\noindent Chapter \ref{pages}\\ \noindent\small\verb!-rotate-contents -upright -vflip -hflip!\\ \small\verb!-shift -scale-page -scale-to-fit -scale-contents!\\ \small\verb!-show-boxes -hard-box -trim-marks!\\ \noindent Chapter \ref{stamps}\\ \noindent\small\verb!-add-text -add-rectangle!\\ \small\verb!-stamp-on -stamp-under -combine-pages!\\ \noindent Chapter \ref{multipage}\\ \noindent\verb!-impose -impose-xy -twoup -twoup-stack! \end{framed} \noindent If problems occur, refrain from using \verb!-fast!. \section{Error Handling} \index{error handling} When Cpdf encounters an error, it exits with code 2. An error message is displayed on \texttt{stderr} (Standard Error). In normal usage, this means it is displayed on the screen. When a bad or inappropriate password is given, the exit code is 1. \section{Control Files} \index{control file} \begin{framed} \noindent\small\verb!cpdf -args <filename>!\\ \noindent\small\verb!cpdf -args-json <filename>! \end{framed} Some operating systems have a limit on the length of a command line. To circumvent this, or simply for reasons of flexibility, a control file may be specified from which arguments are drawn. Using \texttt{-args} or will perform direct textual substitution of the file into the command line, prior to any other processing. Using \texttt{-args-json} will read arguments from a JSON file consisting of a single array of strings. For example: \begin{framed} {\small\begin{verbatim} ["-merge", "hello.pdf", "cpdfmanual.pdf", //Cpdf's JSON parser allows C-style comments "-o", /* The output file name: */ "out.pdf"] \end{verbatim}}\end{framed} \section{String Arguments} Command lines are handled differently on each operating system. Some characters are reserved with special meanings, even when they occur inside quoted string arguments. To avoid this problem, Cpdf performs processing on string arguments as they are read. A backslash is used to indicate that a character which would otherwise be treated specially by the command line interpreter is to be treated literally. For example, Unix-like systems attribute a special meaning to the exclamation mark, so the command line \begin{framed} \noindent\small\verb?cpdf -add-text "Hello!" in.pdf -o out.pdf? \end{framed} \noindent would fail. We must escape the exclamation mark with a backslash: \begin{framed} \noindent\small\verb?cpdf -add-text "Hello\!" in.pdf -o out.pdf? \end{framed} \noindent It follows that backslashes intended to be taken literally must themselves be escaped (i.e. written \verb!\\!). \section{Text Encodings} \index{text!encodings} \label{textencodings} Some Cpdf commands write text to standard output, or read text from the command line or configuration files. These are: \begin{framed} \noindent\small\verb!-info!\\ \noindent\small\verb!-list-bookmarks!\\ \noindent\small\verb!-set-author! et al.\\ \noindent\small\verb!-list-annotations!\\ \noindent\small\verb!-dump-attachments! \end{framed} \noindent There are three options to control how the text is interpreted: \begin{framed} \noindent\small\verb!-utf8!\\ \noindent\small\verb!-stripped!\\ \noindent\small\verb!-raw! \end{framed} \noindent Add \verb!-utf8! to use Unicode UTF8, \verb!-stripped! to convert to 7 bit ASCII by dropping any high characters, or \verb!-raw! to perform no processing. The default unless specified in the documentation for an individual operation is \verb!-stripped!. In modern usage, \texttt{-utf8} is almost always the sensible option. But for historical reasons it would be the default. \section{Line Endings} For historical reasons, Cpdf uses the Unix line ending character (LF) when writing text files on Microsoft Windows. For example, bookmark files. \begin{cpdflib} \clearpage \section*{C Interface} \begin{small}\tt \lstinputlisting{docsplits/splits/c01} \lstinputlisting{docsplits/splits/c02} \end{small} \end{cpdflib} \begin{pycpdflib} \clearpage \section*{Python Interface} \begin{small}\tt \lstinputlisting{docsplits/pysplits/c01} \lstinputlisting{docsplits/pysplits/c02} \end{small} \end{pycpdflib} \begin{dotnetcpdflib} \clearpage \section*{.NET Interface} \begin{small}\tt \lstinputlisting{dotnetsplits/cm1} \lstinputlisting{dotnetsplits/c01} \lstinputlisting{dotnetsplits/c02} \end{small} \end{dotnetcpdflib} \begin{jcpdflib} \clearpage \section*{Java Interface} \begin{small}\tt \lstinputlisting{javasplits/cm1} \lstinputlisting{javasplits/c00} \lstinputlisting{javasplits/c01} \lstinputlisting{javasplits/c02} \end{small} \end{jcpdflib} \begin{jscpdflib} \clearpage \section*{JavaScript Interface} \begin{small}\tt \lstinputlisting{docsplits/javascriptsplits/cm1} \lstinputlisting{docsplits/javascriptsplits/c00} \lstinputlisting{docsplits/javascriptsplits/c01} \lstinputlisting{docsplits/javascriptsplits/c02} \end{small} \end{jscpdflib} \pagestyle{empty} \thispagestyle{fancy} \chapter{Merging and Splitting}\label{chap:2} \pagestyle{fancy} \begin{framed} \small \noindent\verb!cpdf -merge in1.pdf [<range>] in2.pdf [<range>] [<more names/ranges>]!\\ \noindent\verb! [-collate] [-collate-n <n>] [-retain-numbering]!\\ \noindent\verb! [-merge-add-bookmarks [-merge-add-bookmarks-use-titles]]!\\ \noindent\verb! [-remove-duplicate-fonts] [-process-struct-trees]!\\ \noindent\verb! [-subformat <subformat>]!\\ \noindent\verb! -o out.pdf! \vspace{1.5mm} \noindent\verb!cpdf -split in.pdf [-chunk <chunksize>] [-process-struct-trees]!\\ \noindent\verb! -o <format>! \vspace{1.5mm} \noindent\verb!cpdf -split-bookmarks <level> in.pdf [-utf8] [-process-struct-trees]!\\ \noindent\verb! -o <format>! \vspace{1.5mm} \noindent\verb!cpdf -split-max <file size> in.pdf [-process-struct-trees] -o <format>! \vspace{1.5mm} \noindent\verb!cpdf -spray in.pdf [-process-struct-trees] -o a.pdf [-o b.pdf [-o ...]]! \end{framed} \vspace{12mm} \section{Merging} \index{merging} The \texttt{-merge} operation allow the merging of several files into one. Ranges can be used to select only a subset of pages from each input file in the output. The output file consists of the concatenation of all the input pages in the order specified on the command line. Actually, the \texttt{-merge} can be omitted, since this is the default operation of Cpdf. \begin{framed}\small \noindent\verb!cpdf -merge a.pdf 1 b.pdf 2-end -o out.pdf! \vspace{2.5mm} \noindent Take page one of \texttt{a.pdf} and all but the first page of \texttt{b.pdf}, merge them and produce \texttt{out.pdf}. \vspace{1.5mm} \noindent\verb!cpdf -merge -idir files -o out.pdf! \vspace{2.5mm} \noindent Merge all files from directory \texttt{files}, producing \texttt{out.pdf}. \end{framed} \noindent Merge maintains and merges bookmarks, named destinations, annotations, tagged PDF information, and so on. PDF features which cannot be merged are retained if they are from the document which first exhibits that feature. The \texttt{-collate} option collates pages: that is to say, it takes the first page from the first document and its range, then the first page from the second document and its range and so on. When all first pages have been taken, it begins on the second from each range, and so on. To collate in chunks use, for example, \texttt{-collate-n 2}.\index{pages!collate}\index{collation} The \texttt{-retain-numbering} option keeps the PDF page numbering labels of each document intact, rather than renumbering the output pages from 1. The \texttt{-remove-duplicate-fonts} option ensures that fonts used in more than one of the inputs only appear once in the output. The \texttt{-merge-add-bookmarks} option adds a top-level bookmark for each file, using the filename. Any existing bookmarks are retained. The \texttt{-merge\--add\--bookmarks\--use\--titles}, when used in conjunction with \texttt{-merge-add-bookmarks}, will use the title from each PDF's metadata instead of the filename. The \texttt{-process-struct-trees} option will merge structure trees (the data which forms the logical structure of the PDF). In its absence, the structure tree from the first PDF only is preserved. When merging two or more PDF/UA files, we can add \texttt{-subformat PDF/UA-2} to tell Cpdf to add a top-level Document structure tree element, to conform to the PDF/UA-2 standard. \section{Splitting} \index{splitting} The \texttt{-split} operation splits a PDF file into a number of parts which are written to file, their names being generated from a \emph{format}. The optional \texttt{-chunk} option allows the number of pages written to each output file to be set. \begin{framed}\small \noindent\verb!cpdf -split a.pdf -o out%%%.pdf! \vspace{2.5mm} \noindent Split \texttt{a.pdf} to the files \texttt{out001.pdf}, \texttt{out002.pdf} etc. \vspace{2.5mm} \noindent\verb!cpdf a.pdf even AND -split -chunk 10 -o dir/out%%%.pdf! \vspace{2.5mm} \noindent Split the even pages of \texttt{a.pdf} to the files \texttt{out001.pdf}, \texttt{out002.pdf} etc. with at most ten pages in each file. The directory (folder) \texttt{dir} must exist. \end{framed} \noindent If the output format does not provide enough numbers for the files generated, the result is unspecified. The following format operators may be used: \begin{center} \begin{tabular}{rl} \verb!%, %%, %%% etc.! & Sequence number padded to the number of percent signs\\ \texttt{@F} & Original filename without extension \\ \texttt{@N} & Sequence number without padding zeroes \\ \texttt{@S} & Start page of this chunk \\ \texttt{@E} & End page of this chunk \\ \texttt{@B} & Bookmark name at this page, if any. \\ \texttt{@b<w>@} & Bookmark name at this page, if any, truncated to \texttt{<w>} characters.\\ \end{tabular} \end{center} \noindent Numbers padded to a fixed width field by zeroes may be obtained for \texttt{@S} and \texttt{@E} by following them with more \texttt{@} signs e.g \texttt{@E@@@} for a fixed width of three. \section{Splitting on Bookmarks} \index{splitting!on bookmarks} The \texttt{-split-bookmarks <level>} operation splits a PDF file into a number of parts, according to the page ranges implied by the document's bookmarks. These parts are then written to file with names generated from the given format. Level 0 denotes the top-level bookmarks, level 1 the next level (sub-bookmarks) and so on. So \texttt{-split-bookmarks 1} creates breaks on level 0 and level 1 boundaries. \begin{framed}\small \noindent\verb!cpdf -split-bookmarks 0 a.pdf -o out%%%.pdf! \vspace{2.5mm} \noindent Split \texttt{a.pdf} to the files \texttt{out001.pdf}, \texttt{out002.pdf} on bookmark boundaries. \end{framed} \noindent There may be many bookmarks on a single page (for instance, if paragraphs are bookmarked or there are two subsections on one page). The splits calculated by \texttt{-split-bookmarks} ensure that each page appears in only one of the output files. It is possible to use the \texttt{@} operators above, including operator \texttt{@B} which expands to the text of the bookmark: \begin{framed}\small \noindent\verb!cpdf -split-bookmarks 0 a.pdf -o @B.pdf! \vspace{2.5mm} \noindent Split \texttt{a.pdf} on bookmark boundaries, using the bookmark text as the filename. \end{framed} \noindent The bookmark text used for a name has the following characters are removed, in addition to any character with ASCII code less than 32 or equal to 126. In addition, names beginning with \texttt{.} are not produced. \begin{framed} \centering \verb! / ? < > \ : * | " ^ + =! \end{framed} \noindent The bookmark may be truncated by using the \texttt{@b} variant: \begin{framed}\small \noindent\verb!cpdf -split-bookmarks 0 a.pdf -o @b10@.pdf! \vspace{2.5mm} \noindent Split \texttt{a.pdf} on bookmark boundaries, using the first 10 characters of bookmark text as the filename. \end{framed} \section{Splitting to Maximum Size} The \texttt{-split-max} operation splits a file into chunks of no more than the given size, starting at the beginning. The suffixes kB, KiB, MB, MiB, GB, and GiB may be used to give the size. For example: \begin{framed}\small \noindent\verb!cpdf -split-max 100kB in.pdf -o out%%%.pdf! \vspace{2.5mm} \noindent Split \texttt{in.pdf} into parts of no more than 100kB, if possible. \end{framed} \noindent Should the operation not be possible for the given size, an error message is printed and no output (not even partial output) is produced. \section{Spraying} Spraying is a sort of de-collation. It takes one input file, and writes pages in turn to one or more outputs: \begin{framed}\small \noindent\verb!cpdf -spray in.pdf -o a.pdf -o b.pdf! \vspace{2.5mm} \noindent Place odd pages of the input file in one file, and the even in another. \end{framed} \noindent This is the only time more than one \texttt{-o} is allowed. \section{Encrypting with Split operations} \index{encryption} The encryption parameters described in Chapter \ref{encryption} may be added to the command line to encrypt each split PDF. Similarly, the \texttt{-recrypt} switch described in Chapter \ref{basicusage} may by given to re-encrypt each file with the existing encryption of the source PDF. \section{Splitting and structure trees} The \texttt{-process-struct-trees} option used in conjunction with any splitting command will trim the structure tree (the data which forms the logical structure of the PDF) for each output file. In its absence, the structure tree is preserved wholesale in each output file. Its use can be important when, for example, producing PDF/UA files. \pagestyle{empty}\thispagestyle{fancy} \begin{cpdflib} \clearpage \section*{C Interface} \begin{small}\tt \lstinputlisting{docsplits/splits/c03} \end{small} \end{cpdflib} \begin{pycpdflib} \clearpage \section*{Python Interface} \begin{small}\tt \lstinputlisting{docsplits/pysplits/c03} \end{small} \end{pycpdflib} \begin{dotnetcpdflib} \clearpage \section*{.NET Interface} \begin{small}\tt \lstinputlisting{dotnetsplits/c03} \end{small} \end{dotnetcpdflib} \begin{jcpdflib} \clearpage \section*{Java Interface} \begin{small}\tt \lstinputlisting{javasplits/c03} \end{small} \end{jcpdflib} \begin{jscpdflib} \clearpage \section*{JavaScript Interface} \begin{small}\tt \lstinputlisting{docsplits/javascriptsplits/c03} \end{small} \end{jscpdflib} \chapter{Pages}\label{chap:3} \pagestyle{fancy} \label{pages} \begin{framed} \small\noindent\verb!cpdf -scale-page "<scale x> <scale y>" [-fast] in.pdf [<range>] -o out.pdf! \vspace{1.5mm} \small\noindent\verb!cpdf -scale-to-fit "<x size> <y size>" [-fast] [-prerotate]!\\ \noindent\verb! [-scale-to-fit-scale <scale>] in.pdf [<range>] -o out.pdf! \vspace{1.5mm} \small\noindent\verb!cpdf -stretch "<x size> <y size>" [-fast] in.pdf [<range>] -o out.pdf! \vspace{1.5mm} \small\noindent\verb!cpdf -center-to-fit "<x size> <y size>" in.pdf [<range>] -o out.pdf! \vspace{1.5mm} \small\noindent\verb!cpdf -scale-contents [<scale>] [<position>] [-fast]!\\ \noindent\verb! in.pdf [<range>] -o out.pdf! \vspace{1.5mm} \small\noindent\verb!cpdf -shift "<shift x> <shift y>" [-fast] in.pdf [<range>] -o out.pdf! \vspace{1.5mm} \small\noindent\verb!cpdf -shift-boxes "<shift x> <shift y>" in.pdf [<range>] -o out.pdf! \vspace{1.5mm} \small\noindent\verb!cpdf -rotate <angle> in.pdf [<range>] -o out.pdf! \vspace{1.5mm} \small\noindent\verb!cpdf -rotateby <angle> in.pdf [<range>] -o out.pdf! \vspace{1.5mm} \small\noindent\verb!cpdf -upright [-fast] in.pdf [<range>] -o out.pdf! \vspace{1.5mm} \small\noindent\verb!cpdf -rotate-contents <angle> [-fast] in.pdf [<range>] -o out.pdf! \vspace{1.5mm} \small\noindent\verb!cpdf -hflip [-fast] in.pdf [<range>] -o out.pdf! \vspace{1.5mm} \small\noindent\verb!cpdf -vflip [-fast] in.pdf [<range>] -o out.pdf! \vspace{1.5mm} \small\noindent\verb!cpdf -[media|crop|art|trim|bleed]box <boxspec> in.pdf [<range>] -o out.pdf! \vspace{1.5mm} \small\noindent\verb!cpdf -remove-[crop|art|trim|bleed]box in.pdf [<range>] -o out.pdf! \vspace{1.5mm} \small\noindent\verb!cpdf -frombox <boxname> -tobox <boxname> [-mediabox-if-missing]! \\ \noindent\verb! in.pdf [<range>] -o out.pdf! \vspace{1.5mm} \small\noindent\verb!cpdf -hard-box <boxname> [-fast] in.pdf [<range>]!\\ \small\noindent\verb! [-mediabox-if-missing] -o out.pdf! \vspace{1.5mm} \small\noindent\verb!cpdf -show-boxes [-fast] in.pdf [<range>] -o out.pdf! \vspace{1.5mm} \small\noindent\verb!cpdf -trim-marks [-fast] in.pdf [<range>] -o out.pdf! \end{framed} \section{Page Sizes} \index{page!size} \label{papersizes} Any time when a page size is required, instead of writing, for instance \texttt{"210mm 197mm"} one can instead write \texttt{a4portrait}. Here is a list of supported page sizes: {\small \smallgap \begin{tabular}{lll} \texttt{a0portrait} & \texttt{a1portrait} & \texttt{a2portrait} \\ \texttt{a3portrait} & \texttt{a4portrait} & \texttt{a5portrait} \\ \texttt{a6portrait} & \texttt{a7portrait} & \texttt{a8portrait} \\ \texttt{a9portrait} & \texttt{a10portrait} & \\ \\ \texttt{a0landscape} & \texttt{a1landscape} & \texttt{a2landscape} \\ \texttt{a3landscape} & \texttt{a4landscape} & \texttt{a5landscape} \\ \texttt{a6landscape} & \texttt{a7landscape} & \texttt{a8landscape} \\ \texttt{a9landscape} & \texttt{a10landscape} & \\ \\ \texttt{usletterportrait} & \texttt{usletterlandscape} & \\ \texttt{uslegalportrait} & \texttt{uslegallandscape} & \end{tabular} } \bigskip \noindent Note that this also works when four numbers are required: for example, when setting the mediabox \texttt{"0 0 a3landscape"} will suffice. \section{Scale Pages} \index{scale pages} The \texttt{-scale-page} operation scales each page in the range by the X and Y factors given. This scales both the page contents, and the page size itself. It also scales any Crop Box and other boxes (Art Box, Trim Box etc). As with several of these commands, remember to take into account any page rotation when considering what the X and Y axes relate to. \begin{framed} \small\noindent\verb!cpdf -scale-page "2 2" in.pdf -o out.pdf! \vspace{2.5mm} \noindent Convert an A4 page to A2, for instance. \end{framed} \noindent The \texttt{-scale-to-fit} operation scales each page in the range to fit a given page size, preserving aspect ratio and centring the result. If a crop box is present, it is preferred to the media box. \begin{framed} \small\noindent\verb!cpdf -scale-to-fit "297mm 210mm" in.pdf -o out.pdf! \small\noindent\verb!cpdf -scale-to-fit a4portrait in.pdf -o out.pdf! \vspace{2.5mm} \noindent Scale a file's pages to fit A4 portrait. \end{framed} \noindent To avoid centring, supply \texttt{-top\! 0}, \texttt{-bottom\! 0}, \texttt{-left\! 0} or \texttt{-right\! 0} as appropriate. The scale can optionally be set to a percentage of the available area, instead of filling it. \begin{framed} \small\noindent\verb!cpdf -scale-to-fit a4portrait -scale-to-fit-scale 0.9 in.pdf -o out.pdf! \vspace{2.5mm} \noindent Scale a file's pages to fit A4 portrait, scaling the page 90\% of its possible size. \end{framed} \noindent The \texttt{-stretch} operation scales the contents to the given size without regard to aspect ratio. \begin{framed} \small\noindent\verb!cpdf -stretch a4landscape in.pdf -o out.pdf! \vspace{2.5mm} \noindent Scale a file's pages and their content to fit A4 landscape. \end{framed} \noindent The \texttt{-center-to-fit} operation changes the page size without scaling the contents. It centers the old page on the new page. \begin{framed} \small\noindent\verb!cpdf -center-to-fit a3portrait in.pdf -o out.pdf! \vspace{2.5mm} \noindent Set a file's pages to the given size and center the content. \end{framed} \noindent The \texttt{-scale-contents} operation scales the contents about the center of the crop box (or, if absent, the media box), leaving the page dimensions (boxes) unchanged. \begin{framed} \small\noindent\verb!cpdf -scale-contents 0.5 in.pdf -o out.pdf! \vspace{2.5mm} \noindent Scale a file's contents on all pages to 50\% of its original dimensions. \end{framed} \noindent To scale about a point other than the center, one can use the positioning commands described in Section \ref{position}. For example: \begin{framed} \small\noindent\verb!cpdf -scale-contents 0.5 -topright 20 in.pdf -o out.pdf! \vspace{2.5mm} \noindent Scale a file's contents on all pages to 50\% of its original dimensions about a point 20pts from its top right corner. \end{framed} \section{Shift Page Contents} \index{shift page contents} The \texttt{-shift} operation shifts the contents of each page in the range by X points horizontally and Y points vertically. \begin{framed} \small\noindent\verb!cpdf -shift "50 0" in.pdf even -o out.pdf! \vspace{2.5mm} \noindent Shift pages to the right by 50 points (for instance, to increase the binding margin).\end{framed} \noindent The \texttt{-shift-boxes} operation has the same effect, but operates by moving the page boxes only, avoiding processing the page contents. It is therefore faster. Of course, the numbers must be inverted, since it is the boxes being moved not the page: \begin{framed} \small\noindent\verb!cpdf -shift-boxes "-50 0" in.pdf even -o out.pdf! \vspace{2.5mm} \noindent Shift pages to the right by 50 points (for instance, to increase the binding margin).\end{framed} \section{Rotating Pages} \index{rotate!pages} There are two ways of rotating pages: (1)~setting a value in the PDF file which asks the viewer (e.g. Acrobat) to rotate the page on-the-fly when viewing it (use \texttt{-rotate} or \texttt{-rotateby}) and (2)~actually rotating the page contents and/or the page dimensions (use \texttt{-upright} (described elsewhere in this chapter) afterwards or \texttt{-rotate-contents} to just rotate the page contents). The possible values for \texttt{-rotate} and \texttt{-rotate-by} are 0, 90, 180 and 270, all interpreted as being clockwise. Any value may be used for \texttt{-rotate-contents}. The \texttt{-rotate} operation sets the viewing rotation of the selected pages to the absolute value given. \begin{framed} \noindent\small\verb!cpdf -rotate 90 in.pdf -o out.pdf! \vspace{2.5mm} \noindent Set the rotation of all the pages in the input file to ninety degrees clockwise. \end{framed} \noindent The \texttt{-rotateby} operation changes the viewing rotation of all the given pages by the relative value given. \begin{framed} \noindent\small\verb!cpdf -rotateby 90 in.pdf -o out.pdf! \vspace{2.5mm} \noindent Rotate all the pages in the input file by ninety degrees clockwise. \end{framed} \noindent The \texttt{-rotate-contents} operation rotates the contents and dimensions of the page by the given relative value. \index{rotate!contents} \begin{framed} \noindent\small\verb!cpdf -rotate-contents 90 in.pdf -o out.pdf! \vspace{2.5mm} \noindent Rotate all the page contents in the input file by ninety degrees clockwise. Does not change the page dimensions. \end{framed} \label{upright} \noindent The \texttt{-upright} operation does whatever combination of \texttt{-rotate} and \texttt{-rotate-contents} is required to change the rotation of the document to zero without altering its appearance. In addition, it makes sure the media box has its origin at (0,0), changing other boxes to compensate. This is important because some operations in CPDF (such as scale-to-fit), and in other PDF-processing programs, work properly only when the origin is (0, 0). \begin{framed} \noindent\small\verb!cpdf -upright in.pdf -o out.pdf! \vspace{2.5mm} \noindent Make pages upright. \end{framed} \section{Flipping Pages} \index{flip pages} The \texttt{-hflip} and \texttt{-vflip} operations flip the contents of the chosen pages horizontally or vertically. No account is taken of the current page rotation when considering what "horizontally" and "vertically" mean, so you may like to use \texttt{-upright} (see above) first. \begin{framed} \noindent\small\verb!cpdf -hflip in.pdf even -o out.pdf! \vspace{2.5mm} \noindent Flip the even pages in \texttt{in.pdf} horizontally. \vspace{2.5mm} \noindent\verb!cpdf -vflip in.pdf -o out.pdf! \vspace{2.5mm} \noindent Flip all the pages in \texttt{in.pdf} vertically. \end{framed} \section{Boxes and Cropping} \index{crop pages} \index{media box} All PDF files contain a \textit{media box} for each page, giving the dimensions of the paper. To change these dimensions (without altering the page contents in any way), use the \texttt{-mediabox} operation. \begin{framed} \noindent\small\verb!cpdf -mediabox "0pt 0pt 500pt 500pt" in.pdf -o out.pdf! \vspace{2.5mm} \noindent Set the media box to 500 points square. \end{framed} \noindent The four numbers are minimum x, minimum y, width, height. x coordinates increase to the right, y coordinates increase upwards. To use absolute numbers rather than width and height we may add an initial question mark and write, for example, \texttt{?100pt 200pt 300pt 400pt} which represents the rectangle with lower-left corner (100pt, 200pt) and upper-right corner (300pt, 400pt). PDF files can also optionally contain a \textit{crop box} for each page, defining to what extent the page is cropped before being displayed or printed. A crop box can be set, changed and removed, without affecting the underlying media box. To set or change the crop box use \texttt{-cropbox}. To remove any existing crop box, use \texttt{-remove-cropbox}. \begin{framed} \noindent\small\verb!cpdf -cropbox "0pt 0pt 200mm 200mm" in.pdf -o out.pdf! \vspace{2.5mm} \noindent Crop pages to the bottom left 200-millimeter square of the page. \vspace{2.5mm} \noindent\verb!cpdf -remove-cropbox in.pdf -o out.pdf! \vspace{2.5mm} \noindent Remove cropping. \end{framed} \noindent Note that the crop box is only obeyed in some viewers. Similar operations are available for the bleed, art, and trim boxes (\texttt{-art}, \texttt{-remove-bleed} etc.) \begin{framed} \small\noindent\verb!cpdf -frombox <boxname> -tobox <boxname> [-mediabox-if-missing]! \\ \noindent\verb! in.pdf [<range>] -o out.pdf! \vspace{2.5mm} \noindent Copy the contents of one box to another. \end{framed} \noindent This operation copies the contents of one box (Media box, Crop box, Trim box etc.) to another. If \texttt{-mediabox-if-missing} is added, the media box will be substituted when the 'from' box is not set for a given page. For example \begin{framed} \noindent\small\verb!cpdf -frombox /TrimBox -tobox /CropBox in.pdf -o out.pdf! \end{framed} \noindent copies the Trim Box of each page to the Crop Box of each page. The possible boxes are \texttt{/MediaBox}, \texttt{/CropBox}, \texttt{/BleedBox}, \texttt{/TrimBox}, \texttt{/ArtBox}.\pagestyle{empty}\thispagestyle{fancy} A hard box (one which clips its contents by inserting a clipping rectangle) may be created with the \texttt{-hard-box} operation: \begin{framed} \noindent\small\verb!cpdf -hard-box /TrimBox in.pdf -o out.pdf! \end{framed} \noindent This means the resultant file may be used as a stamp without contents outside the given box reappearing. The \texttt{-mediabox-if-missing} option may also be used here. \section{Showing Boxes and Printer's Marks} \index{printer's marks}\index{trim marks} The \texttt{-show-boxes} operation displays the boxes present on each page as method of debugging. Since boxes may be coincident, they are shown in differing colours and dash patterns so they may be identified even where they overlap. The colours are: \medskip \begin{tabular}{lll} Media box & Red& \\ Crop box & Green& \\ Art box & Blue& \\ Trim box & Orange& \\ Bleed box & Pink& \end{tabular} \medskip \noindent The \texttt{-trim-marks} operation adds trim marks to a PDF file. The trim box must be present. \thispagestyle{fancy} \begin{cpdflib} \clearpage \section*{C Interface} \begin{small}\tt \lstinputlisting{docsplits/splits/c04} \end{small} \end{cpdflib} \begin{pycpdflib} \clearpage \section*{Python Interface} \begin{small}\tt \lstinputlisting{docsplits/pysplits/c04} \end{small} \end{pycpdflib} \begin{dotnetcpdflib} \clearpage \section*{.NET Interface} \begin{small}\tt \lstinputlisting{dotnetsplits/c04} \end{small} \end{dotnetcpdflib} \begin{jcpdflib} \clearpage \section*{Java Interface} \begin{small}\tt \lstinputlisting{javasplits/c04} \end{small} \end{jcpdflib} \begin{jscpdflib} \clearpage \section*{JavaScript Interface} \begin{small}\tt \lstinputlisting{docsplits/javascriptsplits/c04} \end{small} \end{jscpdflib} \chapter{Encryption and Decryption}\label{chap:4} \pagestyle{fancy} \label{encryption} \index{encryption} \index{decryption} \begin{framed} \small\noindent\verb!cpdf -encrypt <method> [-pw=]<owner> [-pw=]<user>!\\ \noindent\verb! [-no-encrypt-metadata] <permissions> in.pdf -o out.pdf! \vspace{1.5mm} \noindent\verb!cpdf -decrypt [-decrypt-force] in.pdf owner=<owner password> -o out.pdf! \end{framed} \label{crypt} \section{Introduction} PDF files can be encrypted using various types of encryption and attaching various permissions describing what someone can do with a particular document (for instance, printing it or extracting content). There are two types of person: \begin{description} \item The \textbf{User} can do to the document what is allowed in the permissions. \item The \textbf{Owner} can do anything, including altering the permissions or removing encryption entirely. \end{description} There are five kinds of encryption: \begin{itemize} \item 40-bit encryption (method \texttt{40bit}) in Acrobat 3 (PDF 1.1) and above \item 128-bit encryption (method \texttt{128bit}) in Acrobat 5 (PDF 1.4) and above \item 128-bit AES encryption (method \texttt{AES}) in Acrobat 7 (PDF 1.6) and above \item 256-bit AES encryption (method \texttt{AES256}) in Acrobat 9 (PDF 1.7) -- \textit{this is deprecated -- do not use for new documents} \item 256-bit AES encryption (method \texttt{AES256ISO}) in PDF 2.0 \end{itemize} \vspace{2mm} \noindent All encryption supports these kinds of permissions: \vspace{2mm} \begin{tabular}{ll} \texttt{-no-edit} & Cannot change the document\\ \texttt{-no-print} & Cannot print the document\\ \texttt{-no-copy} & Cannot select or copy text or graphics\\ \texttt{-no-annot} & Cannot add or change form fields or annotations\\ \end{tabular} \vspace{2mm} \noindent In addition, 128-bit encryption (Acrobat 5 and above) and AES encryption supports these: \vspace{2mm} \begin{tabular}{lll} \texttt{-no-forms} & Cannot edit form fields&\\ \texttt{-no-extract} & Cannot extract text or graphics&\\ \texttt{-no-assemble} & Cannot merge files etc.&\\ \texttt{-no-hq-print} & Cannot print high-quality&\\ \end{tabular} \vspace{2mm} \noindent Add these options to the command line to prevent each operation. \vspace{2mm} \noindent\textit{Note: Adobe Acrobat and Adobe Reader may show slightly different permissions in info dialogues -- this is a result of policy changes and not a bug in \textup{Cpdf}. You may need to experiment.} \vspace{2mm} \section{Encrypting a Document} To encrypt a document, the owner and user passwords must be given (here, \texttt{fred} and \texttt{charles} respectively): \begin{framed} \noindent\small\verb!cpdf -encrypt 40bit fred charles -no-print in.pdf -o out.pdf! \vspace{1.5mm} \noindent\small\verb!cpdf -encrypt 128bit fred charles -no-extract in.pdf -o out.pdf! \vspace{1.5mm} \noindent\small\verb!cpdf -encrypt AES fred "" -no-edit -no-copy in.pdf -o out.pdf! \end{framed} \noindent A blank user password is common. In this event, PDF viewers will typically not prompt for a password for when opening the file or for operations allowable with the user password. \begin{framed} \vspace{1.5mm} \noindent\small\verb!cpdf -encrypt AES256ISO fred "" -no-forms in.pdf -o out.pdf! \end{framed} \noindent In addition, the usual method can be used to give the existing owner password, if the document is already encrypted. The optional \texttt{-pw=} preface may be given where a password might begin with a \texttt{-} and thus be confused with a command line option. When using AES encryption, the option is available to refrain from encrypting the metadata. Add \texttt{-no-encrypt-metadata} to the command line. \section{Decrypting a Document} To decrypt a document, the owner password is provided. \begin{framed} \noindent\small\verb!cpdf -decrypt in.pdf owner=fred -o out.pdf! \end{framed} \noindent The user password cannot decrypt a file. When appropriate passwords are not available, the option \texttt{-decrypt-force} may be added to the command line to process the file regardless. \begin{cpdflib} \clearpage \section*{C Interface} \begin{small}\tt \lstinputlisting{docsplits/splits/c05} \end{small} \end{cpdflib} \begin{pycpdflib} \clearpage \section*{Python Interface} \begin{small}\tt \lstinputlisting{docsplits/pysplits/c05} \end{small} \end{pycpdflib} \begin{dotnetcpdflib} \clearpage \section*{.NET Interface} \begin{small}\tt \lstinputlisting{dotnetsplits/c05} \end{small} \end{dotnetcpdflib} \begin{jcpdflib} \clearpage \section*{Java Interface} \begin{small}\tt \lstinputlisting{javasplits/c05} \end{small} \end{jcpdflib} \begin{jscpdflib} \clearpage \section*{JavaScript Interface} \begin{small}\tt \lstinputlisting{docsplits/javascriptsplits/c05} \end{small} \end{jscpdflib} \chapter{Compression}\label{chap:5} \begin{framed} \small\noindent\verb!cpdf -decompress in.pdf -o out.pdf! \vspace{1.5mm} \noindent\verb!cpdf -compress in.pdf -o out.pdf! \vspace{1.5mm} \noindent\verb!cpdf -squeeze in.pdf [-squeeze-log-to <filename>]!\\ \noindent\verb! [-squeeze-no-recompress] [-squeeze-no-pagedata] -o out.pdf! \end{framed} Cpdf provides facilities for decompressing and compressing PDF streams, and for losslessly reprocessing the whole file to `squeeze' it. For lossy recompression of images within a PDF, see Chapter 13. \section{Decompressing a Document} \index{decompressing} To decompress the streams in a PDF file, for instance to manually inspect the PDF, use: \begin{framed} \noindent\small\verb!cpdf -decompress in.pdf -o out.pdf! \end{framed} \noindent If Cpdf finds a compression type it can't cope with, the stream is left compressed. When using \texttt{-decompress}, object streams are not compressed. It may be easier for manual inspection to also remove object streams, by adding the \texttt{-no-preserve-objstm} option to the command. \section{Compressing a Document} \index{compressing} To compress the streams in a PDF file, use: \begin{framed} \noindent\small\verb!cpdf -compress in.pdf -o out.pdf! \end{framed} \noindent Cpdf compresses any streams which have no compression using the \textbf{Flate\-Decode} method, with the exception of Metadata streams, which are left uncompressed. \section{Squeezing a Document} \index{squeeze} To \textit{squeeze} a PDF file, reducing its size by an average of about twenty percent (though sometimes not at all), use: \begin{framed} \noindent\small\verb!cpdf -squeeze in.pdf -o out.pdf! \end{framed} \noindent Adding \texttt{-squeeze} to the command line when using another operation will \textit{squeeze} the file or files upon output. The \texttt{-squeeze} operation writes some information about the squeezing process to standard output. The squeezing process involves several processes which losslessly attempt to reduce the file size. It is slow, so should not be used without thought. \begin{verbatim} $ ./cpdf -squeeze in.pdf -o out.pdf Initial file size is 238169 bytes Beginning squeeze: 123847 objects Squeezing... Down to 114860 objects Squeezing... Down to 114842 objects Squeezing page data Recompressing document Final file size is 187200 bytes, 78.60% of original. \end{verbatim} \noindent The \texttt{-squeeze-log-to <filename>} option writes the log to the given file instead of to standard output. Log content is appended to the end of the log file, preserving existing contents. The option \texttt{-squeeze-no-pagedata} avoids the reprocessing of page data, which avoids problems in case of malformed files, and makes the process much faster at the cost of a little less compression. The option \texttt{-squeeze-no-recompress} is deprecated as of version 2.6 and has no effect. \begin{cpdflib} \clearpage \section*{C Interface} \begin{small}\tt \lstinputlisting{docsplits/splits/c06} \end{small} \end{cpdflib} \begin{pycpdflib} \clearpage \section*{Python Interface} \begin{small}\tt \lstinputlisting{docsplits/pysplits/c06} \end{small} \end{pycpdflib} \begin{jcpdflib} \clearpage \section*{Java Interface} \begin{small}\tt \lstinputlisting{javasplits/c06} \end{small} \end{jcpdflib} \begin{jscpdflib} \clearpage \section*{JavaScript Interface} \begin{small}\tt \lstinputlisting{docsplits/javascriptsplits/c06} \end{small} \end{jscpdflib} \chapter{Bookmarks}\label{chap:6} \begin{framed} \small\noindent\verb!cpdf -list-bookmarks [-utf8] in.pdf! \vspace{1.5mm} \small\noindent\verb!cpdf -list-bookmarks-json [-preserve-actions] in.pdf! \vspace{1.5mm} \small\noindent\verb!cpdf -remove-bookmarks in.pdf -o out.pdf! \vspace{1.5mm} \small\noindent\verb!cpdf -add-bookmarks <bookmark file> in.pdf -o out.pdf! \vspace{1.5mm} \small\noindent\verb!cpdf -add-bookmarks-json <bookmark file> in.pdf -o out.pdf! \vspace{1.5mm} \small\noindent\verb!cpdf -bookmarks-open-to-level <n> in.pdf -o out.pdf! \vspace{1.5mm} \small\noindent\verb!cpdf -table-of-contents [-toc-title] [-toc-no-bookmark] [-toc-dot-leaders]!\\ \small\noindent\verb! [-font <font>] [-font-size <size>] [-embed-std14 /path/to/fonts]!\\ \small\noindent\verb! [-process-struct-trees] [-subformat <subformat>]!\\ \small\noindent\verb! in.pdf -o out.pdf! \end{framed} PDF bookmarks (properly called the \textit{document outline}) represent a tree of references to parts of the file, typically displayed at the side of the screen. The user can click on one to move to the specified place. Cpdf provides facilities to list, add, and remove bookmarks. The format used by the list and add operations is the same, so you can feed the output of one into the other, for instance to copy bookmarks. \index{bookmarks}\index{JSON!add bookmarks from} \index{document outline} \section{List Bookmarks} \index{bookmarks!listing}\index{JSON!list bookmarks as} The \texttt{-list-bookmarks} operation prints (to standard output) the bookmarks in a file. The first column gives the level of the tree at which a particular bookmark is. Then the text of the bookmark in quotes. Then the page number which the bookmark points to. Then (optionally) the word "open" if the bookmark should have its children (at the level immediately below) visible when the file is loaded. Then the destination (see below). For example, upon executing \begin{framed} \noindent\small\verb!cpdf -list-bookmarks doc.pdf! \end{framed} \noindent the result might be: \begin{framed}{\small\begin{verbatim} 0 "Part 1" 1 open 1 "Part 1A" 2 "[2 /XYZ 200 400 null]" 1 "Part 1B" 3 0 "Part 2" 4 1 "Part 2a" 5\end{verbatim}}\end{framed} \noindent If the page number is 0, it indicates that clicking on that entry doesn't move to a page. By default, Cpdf converts unicode to ASCII text, dropping characters outside the ASCII range. To prevent this, and return unicode UTF8 output, add the \texttt{-utf8} option to the command. To prevent any processing, use the \texttt{-raw} option. See Section \ref{textencodings} for more information. A newline in a bookmark is represented as \texttt{"\textbackslash n"}. By using \texttt{-list-bookmarks-json} instead, the bookmarks are formatted as a JSON array, in order, of dictionaries formatted thus: \begin{verbatim} { "level": 0, "text": "1 Basic Usage", "page": 17, "open": false, "target": [ { "I": 17 }, { "N": "/XYZ" }, { "F": 85.039 }, { "F": 609.307 }, null ] "colour": [ 0.0, 0.0, 0.0 ], "italic": false, "bold": false } \end{verbatim} \noindent Note that the colour (RGB each from 0.0 to 1.0) and shape of the text (bold, italic, or both) can be read and set with the JSON format. The \texttt{-preserve-actions} option will give the target in its original PDF form, rather than resolving it to a destination (see below). See Chapter 15 for more details of Cpdf's JSON formatting. There are two differences here: bookmark text is always UTF8, and the numbers for \texttt{level} and \texttt{page} are plain, rather than begin surrounded with \texttt{ \{ "I": \}}. \subsection{Destinations} \label{destinations} The destination is an extended description of where the bookmark should point to (i.e it can be more detailed than just giving the page). For example, it may point to a section heading halfway down a page. Here are the possibilities: \medskip \begin{tabular}{lp{8cm}} Format & Description\\\hline {[\textit{p} /XYZ \textit{left} \textit{top} \textit{zoom}]} & Display page number \textit{p} with (\textit{left}, \textit{top}) positioned at upper-left of window and magnification of \textit{zoom}. Writing ``null'' for any of \textit{left}, \textit{top} or \textit{zoom} specifies no change. A \textit{zoom} of 0 is the same as ``null''.\\ {[\textit{p} /Fit]} & Display page number \textit{p} so as to fit fully within the window.\\ {[\textit{p} /FitH \textit{top}]} & Display page number \textit{p} with vertical coordinate \textit{top} at the top of the window and the page magnified so its width fits the window. A null value for \textit{top} implies no change.\\ {[\textit{p} /FitV \textit{left}]} & Display page number \textit{p} with horizontal coordinate \textit{left} at the left of the window, and the page magnified so its height fits the window. A null value for \textit{left} implies no change. \\ {[\textit{p} /FitR \textit{left} \textit{bottom} \textit{right} \textit{top}]} & Display page number \textit{p} magnified so as to fit entirely within the rectangle specified by the other parameters. \\ {[\textit{p} /FitB]} & As for /Fit but with the page's bounding box (see below).\\ {[\textit{p} /FitBH \textit{top}]} & As for /FitH but with the page's bounding box (see below).\\ {[\textit{p} /FitBV \textit{left}]} & As for /FitV but with the page's bounding box (see below). \end{tabular} \medskip \noindent The \textit{bounding box} is the intersection of the page's crop box and the bounding box of the page contents. Some other kinds of destination may be produced by \texttt{-list-bookmarks}. They will be preserved by \texttt{-add-bookmarks} and may be edited as your risk. \section{Remove Bookmarks} \label{removebookmarks} \index{bookmarks!removing} The \texttt{-remove-bookmarks} operations removes all bookmarks from the file. \begin{framed} \noindent\small\verb!cpdf -remove-bookmarks in.pdf -o out.pdf! \end{framed} \section{Add Bookmarks} \index{bookmarks!adding} The \texttt{-add-bookmarks} file adds bookmarks as specified by a \textit{bookmarks file}, a text file in ASCII or UTF8 encoding and in the same format as that produced by the \texttt{-list-bookmarks} operation. If there are any bookmarks in the input PDF already, they are discarded. For example, if the file \texttt{bookmarks.txt} contains the output from \texttt{-list-bookmarks} above, then the command \begin{framed} \noindent\small\verb!cpdf -add-bookmarks bookmarks.txt in.pdf -o out.pdf! \end{framed} \noindent adds the bookmarks to the input file, writing to \texttt{out.pdf}. An error will be given if the bookmarks file is not in the correct form (in particular, the numbers in the first column which specify the level must form a proper tree with no entry being more than one greater than the last). Bookmarks in JSON format (see above) may be added with \texttt{-add-bookmarks-json}: \begin{framed} \noindent\small\verb!cpdf -add-bookmarks-json bookmarks.json in.pdf -o out.pdf! \end{framed} \noindent Remember that strings in JSON bookmark files are in UTF8. Note that, if \texttt{-preserve-actions} is used with \texttt{-list-bookmarks-json}, it will no be feasible to use \texttt{-add-bookmarks-json} to add these bookmarks to a different or modified file. They may be round-tripped to the same, unmodified file, of course. \section{Opening bookmarks} \index{bookmarks!opening at level} As an alternative to extracting a bookmark file and manipulating the open-status of bookmarks, mass manipulation may be achieved by the following operation: \begin{framed} \noindent\small\verb!cpdf -bookmarks-open-to-level <level> in.pdf -o out.pdf! \end{framed} \noindent A level of 0 will close all bookmarks, level 1 will open just the top level, closing all others etc. To open all of them, pick a sufficiently large level. \section{Making a Table of Contents} Cpdf can automatically generate a table of contents from existing bookmarks, adding it to the beginning of the document. \begin{framed} \noindent\small\verb!cpdf -table-of-contents in.pdf -o out.pdf! \end{framed} \noindent The page(s) added will have the same dimensions, media and crop boxes as the first page of the original file. The default title is ``Table of Contents'', though this may be changed: \begin{framed} \noindent\small\verb!cpdf -table-of-contents -toc-title "Contents" in.pdf -o out.pdf! \end{framed} \noindent An empty title removes the title. The sequence \texttt{\textbackslash n} may be used to split the title into lines. The default font is 12pt Times Roman (and 24pt for the title). The base font and size may be changed with \texttt{-font} and \texttt{-font-size} (see Section \ref{fonts} for full details): \begin{framed} \noindent\small\verb!cpdf -table-of-contents -font "Courier-Bold" -font-size 8!\\ \noindent\small\verb! in.pdf -o out.pdf! \end{framed} \noindent Dot leaders may be added with \texttt{-toc-dot-leaders}: \begin{framed} \noindent\small\verb!cpdf -table-of-contents -toc-dot-leaders in.pdf -o out.pdf! \end{framed} \noindent By default, an entry for the new table of contents will be added to the document's bookmarks. To suppress this behaviour, add \texttt{-toc-no-bookmark}: \begin{framed} \noindent\small\verb!cpdf -table-of-contents -toc-no-bookmark in.pdf -o out.pdf! \end{framed} \noindent To create a structure tree for the table of contents, and merge it with the existing one (for example, when adding a table of contents to a PDF/UA file), add \texttt{-process-struct-trees} to the command. For PDF/UA-2, add also \texttt{-subformat "PDF/UA-2"}. You may also need \texttt{-embed-std14} as described in chapter \ref{chap:8}, since fully-embedded fonts are a requirement of some PDF subformats. \ \ \ \clearpage\pagestyle{empty} \begin{cpdflib} \clearpage \section*{C Interface} \begin{small}\tt \lstinputlisting{docsplits/splits/c07} \end{small} \end{cpdflib} \begin{pycpdflib} \clearpage \section*{Python Interface} \begin{small}\tt \lstinputlisting{docsplits/pysplits/c07} \end{small} \end{pycpdflib} \begin{dotnetcpdflib} \clearpage \section*{.NET Interface} \begin{small}\tt \lstinputlisting{dotnetsplits/c07} \end{small} \end{dotnetcpdflib} \begin{jcpdflib} \clearpage \section*{Java Interface} \begin{small}\tt \lstinputlisting{javasplits/c07} \end{small} \end{jcpdflib} \begin{jscpdflib} \clearpage \section*{JavaScript Interface} \begin{small}\tt \lstinputlisting{docsplits/javascriptsplits/c07} \end{small} \end{jscpdflib} \chapter{Presentations}\label{chap:7}\pagestyle{fancy} \begin{framed} \small\noindent\begin{verbatim} cpdf -presentation in.pdf [<range>] -o out.pdf [-trans <transition-name>] [-duration <float>] [-vertical] [-outward] [-direction <int>] [-effect-duration <float>]\end{verbatim} \end{framed} The PDF file format, starting at Version 1.1, provides for simple slide-show presentations in the manner of Microsoft Powerpoint. These can be played in Acrobat and possibly other PDF viewers, typically started by entering full-screen mode. The \texttt{-presentation} operation allows such a presentation to be built from any PDF file. \index{presentations} The \texttt{-trans} option chooses the transition style. When a page range is used, it is the transition \textit{from} each page named which is altered. The following transition styles are available: \begin{description} \item[Split]Two lines sweep across the screen, revealing the new page. By default the lines are horizontal. Vertical lines are selected by using the \texttt{-vertical} option. \item[Blinds]Multiple lines sweep across the screen, revealing the new page. By default the lines are horizontal. Vertical lines are selected by using the \texttt{-vertical} option. \item[Box]A rectangular box sweeps inward from the edges of the page. Use \texttt{-outward} to make it sweep from the center to the edges. \item[Wipe]A single line sweeps across the screen from one edge to the other in a direction specified by the \texttt{-direction} option. \item[Dissolve]The old page dissolves gradually to reveal the new one. \item[Glitter]The same as \textbf{Dissolve} but the effect sweeps across the page in the direction specified by the \texttt{-direction} option. \end{description} \noindent To remove a transition style currently applied to the selected pages, omit the \texttt{-trans} option. The \texttt{-effect-duration} option specifies the length of time in seconds for the transition itself. The default value is one second. The \texttt{-duration} option specifies the maximum time in seconds that the page is displayed before the presentation automatically advances. The default, in the absence of the \texttt{-duration} option, is for no automatic advancement. The \texttt{-direction} option (for \textbf{Wipe} and \textbf{Glitter} styles only) specifies the direction of the effect. The following values are valid: \begin{itemize} \item[\textbf{0}] Left to right \item[\textbf{90}] Bottom to top (\textbf{Wipe} only) \item[\textbf{180}] Right to left (\textbf{Wipe} only) \item[\textbf{270}] Top to bottom \item[\textbf{315}] Top-left to bottom-right (\textbf{Glitter} only) \end{itemize} \noindent For example: \begin{framed} \small \noindent\verb!cpdf -presentation in.pdf 2-end -trans Split -duration 10 -o out.pdf! \vspace{2.5mm} \noindent The \textbf{Split} style, with vertical lines, and each slide staying ten seconds unless manually advanced. The first page (being a title) does not move on automatically, and has no transition effect. \end{framed} \noindent To use different options on different page ranges, run Cpdf multiple times on the file using a different page range each time. \begin{cpdflib} \clearpage \section*{C Interface} \begin{small}\tt \lstinputlisting{docsplits/splits/c08} \end{small} \end{cpdflib} \begin{pycpdflib} \clearpage \section*{Python Interface} \begin{small}\tt \lstinputlisting{docsplits/pysplits/c08} \end{small} \end{pycpdflib} \begin{dotnetcpdflib} \clearpage \section*{.NET Interface} \begin{small}\tt \lstinputlisting{dotnetsplits/c08} \end{small} \end{dotnetcpdflib} \begin{jcpdflib} \clearpage \section*{Java Interface} \begin{small}\tt \lstinputlisting{javasplits/c08} \end{small} \end{jcpdflib} \begin{jscpdflib} \clearpage \section*{JavaScript Interface} \begin{small}\tt \lstinputlisting{docsplits/javascriptsplits/c08} \end{small} \end{jscpdflib} \chapter{Watermarks and Stamps}\label{chap:8} \label{stamps} \index{watermarks} \begin{framed} \noindent\small\verb!cpdf -stamp-on source.pdf!\\ \noindent\small\verb! [-scale-stamp-to-fit] [<positioning command>] [-relative-to-cropbox] !\\ \noindent\small\verb! [-process-struct-trees] in.pdf [<range>] [-fast] -o out.pdf! \vspace{1.5mm} \noindent\small\verb!cpdf -stamp-under source.pdf!\\ \noindent\small\verb! [-scale-stamp-to-fit] [<positioning command>] [-relative-to-cropbox]!\\ \noindent\small\verb! [-process-struct-trees] in.pdf [<range>] [-fast] -o out.pdf! \vspace{1.5mm} \noindent\small\verb!cpdf -combine-pages over.pdf under.pdf!\\ \noindent\small\verb! [-fast] [-prerotate] [-no-warn-rotate] [-process-struct-trees]!\\ \noindent\small\verb! [-underneath] [-stamp-scale-to-fit] -o out.pdf! \vspace{0.1mm} \noindent\small\begin{verbatim} cpdf ([-add-text <text-format> | -add-rectangle <size>]) [-font <fontname>] [-font-size <size-in-points>] [-load-ttf <name>=<file>] [-embed-std14] [-color <color>] [-line-spacing <number>] [-outline] [-linewidth <number>] [-underneath] [-relative-to-cropbox] [-prerotate] [-no-warn-rotate] [-bates <number>] [-bates-at-range <number>] [-bates-pad-to <number>] [-opacity <number>] [-midline] [-topline] [-fast] [-process-struct-trees] in.pdf [<range>] -o out.pdf\end{verbatim} \vspace{1.5mm} \noindent See also positioning commands below. \vspace{1.5mm} \noindent\small\verb!cpdf -remove-text in.pdf [<range>] -o out.pdf! \vspace{1.5mm} \noindent\small\verb!cpdf -prepend-content <content> in.pdf [<range>] -o out.pdf! \vspace{1.5mm} \noindent\small\verb!cpdf -postpend-content <content> in.pdf [<range>] -o out.pdf! \vspace{1.5mm} \noindent\small\verb!cpdf -stamp-as-xobject stamp.pdf in.pdf [<range>] -o out.pdf! \vspace{1.5mm} \noindent\small NB: See discussion of \texttt{-fast} in Section \ref{fast}. \end{framed} \section{Add a Watermark or Logo} The \texttt{-stamp-on} and \texttt{-stamp-under} operations stamp the first page of a source PDF onto or under each page in the given range of the input file. For example, \begin{framed} \noindent\small\verb!cpdf -stamp-on logo.pdf in.pdf odd -o out.pdf! \end{framed} \noindent stamps the file \texttt{logo.pdf} onto the odd pages of \texttt{in.pdf}, writing to \texttt{out.pdf}. A watermark should go underneath each page: \begin{framed} \noindent\small\verb!cpdf -stamp-under topsecret.pdf in.pdf -o out.pdf! \end{framed} \noindent The position commands in Section \ref{position} can be used to locate the stamp more precisely (they are calculated relative to the crop box of the stamp). Or, preprocess the stamp with \texttt{-shift} first. The \texttt{-scale-stamp-to-fit} option can be added to scale the stamp to fit the page before applying it. The use of positioning commands together with \texttt{-scale-stamp-to-fit} is not recommended. The \texttt{-relative-to-cropbox} option takes the positioning command to be relative to the crop box of each page rather than the media box. To maintain Tagged PDF, for example with PDF/UA, add \texttt{-process-struct-trees}. The main file will keep its structure; the stamp will be marked as an artifact. The \texttt{-combine-pages} operation takes two PDF files and stamps each page of one over each page of the other. The length of the output is the same as the length of the ``under'' file. For instance: \begin{framed} \noindent\small\verb!cpdf -combine-pages over.pdf under.pdf -o out.pdf! \end{framed} \noindent Page attributes (such as the display rotation) are taken from the ``under'' file. For best results, remove any rotation differences in the two files using \texttt{-upright} first, or by adding \texttt{-prerotate} to the command. To maintain Tagged PDF, for example with PDF/UA, add \texttt{-process-struct-trees}. The ``under'' file will keep its structure; the ``over`` file will be marked as an artifact. To reverse the order of combination (to have ``over'' under ``under'') add \texttt{-underneath}. To scale the ``over'' file to fit, add \texttt{-scale-stamp-to-fit}. \section{Stamp Text, Dates and Times.} \index{date} \index{time} \index{stamp text} The \texttt{-add-text} operation allows text, dates and times to be stamped over one or more pages of the input at a given position and using a given font, font size and color. \begin{framed} \noindent\small\verb!cpdf -add-text "Copyright 2014 ACME Corp." in.pdf -o out.pdf! \end{framed} \noindent The default is black 12pt Times New Roman text in the top left of each page. The text can be placed underneath rather than over the page by adding the \texttt{-underneath} option. Text previously added by Cpdf may be removed by the \texttt{-remove-text} operation. \index{removing text} \begin{framed} \noindent\small\verb!cpdf -remove-text in.pdf -o out.pdf! \end{framed} \noindent NB: Cpdf can only use characters available in the font specified. If necessary, supply your own font with \texttt{-load-ttf} (see below). Times Roman as used in the preceding example refers to the Standard PDF font Times Roman, not the Times Roman which is likely to be supplied with your computer system -- which may have more characters available. \subsection{Page Numbers and other Special Codes} \index{page!numbers} There are various special codes to include the page number in the text: \vspace{2mm} \begin{tabular}{ll} \texttt{\%Page} & Page number in arabic notation (1, 2, 3\ldots) \\ \texttt{\%PageDiv2} & Page number in arabic notation divided by two \\ \texttt{\%roman} & Page number in lower-case roman notation (i, ii, iii\ldots) \\ \texttt{\%Roman} & Page number in upper-case roman notation (I, II, III\ldots) \\ \texttt{\%EndPage} & Last page of document in arabic notation \\ \texttt{\%Label} & The page label of the page \\ \texttt{\%EndLabel} & The page label of the last page \\ \texttt{\%filename} & The full file name of the input document \\ \texttt{\%URL[text|URL]} & Add \texttt{text}, which links to \texttt{URL} (does not work for diagonal text)\\ \texttt{\%Bookmark<n>} & Bookmark text at level n (0, 1, 2, 3, 4)\\ \end{tabular} \vspace{2mm} \noindent For example, the format \texttt{"Page~\%Page~of~\%EndPage"} might become "Page~5~of~17". NB: In some circumstances (e.g in batch files) on Microsoft Windows, \verb!%! is a special character, and must be escaped (written as \verb$%%$). Consult your local documentation for details. Bookmark text refers to the first bookmark of the given level on the stamped page or, if none, the last bookmark text of that level before that page, so long as uninterrupted by a bookmark of lower level. In other words, these specials are suitable for adding running heads to a document. \subsection{Date and Time Formats} \begin{tabular}{ll} \texttt{\%a} & Abbreviated weekday name (Sun, Mon etc.)\\ \texttt{\%A} & Full weekday name (Sunday, Monday etc.)\\ \texttt{\%b} & Abbreviated month name (Jan, Feb etc.)\\ \texttt{\%B} & Full month name (January, February etc.)\\ \texttt{\%d} & Day of the month (01--31) \\ \texttt{\%e} & Day of the month (1--31) \\ \texttt{\%H} & Hour in 24-hour clock (00--23)\\ \texttt{\%I} & Hour in 12-hour clock (01--12)\\ \texttt{\%j} & Day of the year (001--366)\\ \texttt{\%m} & Month of the year (01--12)\\ \texttt{\%M} & Minute of the hour (00--59)\\ \texttt{\%p} & "a.m" or "p.m"\\ \texttt{\%S} & Second of the minute (00--61)\\ \texttt{\%T} & Same as \texttt{\%H:\%M:\%S}\\ \texttt{\%u} & Weekday (1--7, 1 = Sunday)\\ \texttt{\%w} & Weekday (0--6, 0 = Sunday)\\ \texttt{\%Y} & Year (0000--9999)\\ \texttt{\%\%} & The \% character. \end{tabular} \subsection{Bates Numbers} \index{bates numbers} Unique page identifiers can be specified by putting \verb!%Bates! in the format. The starting point can be set with the \texttt{-bates} option. For example: \begin{framed} \noindent\small\verb!cpdf -add-text "Page ID: %Bates" -bates 23745 in.pdf -o out.pdf! \end{framed} \noindent To specify that bates numbering begins at the first page of the range, use \texttt{-bates-at-range} instead. This option must be specified after the range is specified. To pad the bates number up to a given number of leading zeros, use \texttt{-bates-pad-to} in addition to either \texttt{-bates} or \texttt{-bates-at-range}. \subsection{Position} \label{position} The position of the text may be specified in absolute terms: \begin{framed} \noindent\small\verb!-pos-center "200 200"! \vspace{2.5mm} \noindent Position the center of the baseline text at (200pt, 200pt) \vspace{2.5mm} \noindent\small\verb!-pos-left "200 200"! \vspace{2.5mm} \noindent Position the left of the baseline of the text at (200pt, 200pt) \vspace{2.5mm} \noindent\small\verb!-pos-right "200 200"! \vspace{2.5mm} \noindent Position the right of the baseline of the text at (200pt, 200pt) \end{framed} \noindent Position may be set relative to certain common points: \begin{framed} \noindent\begin{tabular}{ll} \small\verb!-top 10! & Center of baseline 10 pts down from the top center \\ \small\verb!-topleft 10! & Left of baseline 10 pts down and in from top left \\ \small\verb!-topleft "10 20"! & Left of baseline 10 pts down and 20 pts in from top left \\ \small\verb!-topright 10! & Right of baseline 10 pts down and left from top right\\ \small\verb!-topright "10 20"! & Right of baseline 10 pts down and 20 pts left from top right\\ \small\verb!-left 10! & Left of baseline 10 pts in from center left \\ \small\verb!-bottomleft 10! & Left of baseline 10 pts in and up from bottom left \\ \small\verb!-bottomleft "10 20"! & Left of baseline 10 pts in and 20 pts up from bottom left \\ \small\verb!-bottom 10! & Center of baseline 10 pts up from bottom center\\ \small\verb!-bottomright 10! & Right of baseline 10 pts up and in from bottom right \\ \small\verb!-bottomright "10 20"! & Right of baseline 10 pts up and 20 pts in from bottom right \\ \small\verb!-right 10! & Right of baseline 10 pts in from the center right \\ \small\verb!-diagonal! & Diagonal, bottom left to top right, centered on page\\ \small\verb!-reverse-diagonal! & Diagonal, top left to bottom right, centered on page\\ \small\verb!-center! & Centered on page\\ \end{tabular} \end{framed} \noindent No attempt is made to take account of the page rotation when interpreting the position, so \texttt{-prerotate} may be added to the command line if the file contains pages with a non-zero viewing rotation (to silence the rotation warning, add \texttt{-no-warn-rotate} instead) This is equivalent to pre-processing the document with \texttt{-upright} (see chapter 3). The \texttt{-relative-to-cropbox} modifier can be added to the command line to make these measurements relative to the crop box instead of the media box. The \texttt{-midline} option may be added to specify that the positioning commands above are to be considered relative to the midline of the text, rather than its baseline. Similarly, the \texttt{-topline} option may be used to specify that the position is taken relative to the top of the text. \subsection{Font and Size} \label{fonts} \index{font} The standard PDF fonts may be set with the \texttt{-font} option. They are: \vspace{2mm} \begin{tabular}{ll} Times-Roman&\\ Times-Bold&\\ Times-Italic&\\ Times-BoldItalic&\\ Helvetica&\\ Helvetica-Bold&\\ Helvetica-Oblique&\\ Helvetica-BoldOblique&\\ Courier&\\ Courier-Bold&\\ Courier-Oblique&\\ Courier-BoldOblique \end{tabular} \vspace{2mm} \noindent For example, page numbers in Times Italic can be achieved by: \begin{framed} \noindent\small\verb!cpdf -add-text "-%Page-" -font "Times-Italic" in.pdf -o out.pdf! \end{framed} \noindent The font size can be altered with the \texttt{-font-size} option, which specifies the size in points: \begin{framed} \noindent\small\verb!cpdf -add-text "-%Page-" -font-size 36 in.pdf -o out.pdf! \end{framed} \noindent Adding \texttt{-embed-std14 <directory>}, given a directory holding the URW Base35 free fonts, will embed subsetted font files in the PDF for any of the Standard fonts used. These free fonts may be downloaded from \url{https://github.com/ArtifexSoftware/urw-base35-fonts}. This is important, for example, for PDF/A or PDF/UA documents, which must have their fonts embedded. The standard fonts cover only the Latin characters, and are limiting. Other TrueType fonts may be introduced with the \texttt{-load-ttf} option, giving a name for, and the file name of the font. For example: \begin{framed} \noindent\small\verb!cpdf -load-ttf A=NotoSans-Black.ttf -font A -add-text "-%Page-" -o out.pdf! \end{framed} \noindent Here we have used the Noto Sans font from Google. This and other Google fonts contain characters for a huge number of scripts, and are available free from \url{https://fonts.google.com/noto/}. But you may use any TrueType font. See Section \ref{copyfont} for how to use an existing font from the source document. \subsection{Colors} \index{color} The \texttt{-color} option takes an RGB (3 values), CMYK (4 values), or Grey (1 value) color. Components range between 0 and 1. All the standard web colours \url{https://www.w3.org/wiki/CSS/Properties/color/keywords} are provided as RGB components, and may be selected by name. \begin{framed} \noindent\small\verb!cpdf -add-text "Hullo" -color darkgrey in.pdf -o out.pdf! \vspace{1.5mm} \noindent\small\verb!cpdf -add-text "Hullo" -color "0.5 0.5 0.5" in.pdf -o out.pdf! \vspace{1.5mm} \noindent\small\verb!cpdf -add-text "Hullo" -color "0.75" in.pdf -o out.pdf! \vspace{1.5mm} \noindent\small\verb!cpdf -add-text "Hullo" -color "0.5 0.5 0.4 0.9" in.pdf -o out.pdf! \end{framed} \noindent Partly-transparent text may be specified using the \verb!-opacity! option. Wholly opaque is 1 and wholly transparent is 0. For example: \begin{framed} \noindent\small\verb!cpdf -add-text "DRAFT" -color "red" -opacity 0.3 -o out.pdf! \end{framed} \subsection{Outline Text} \index{outline text} The \texttt{-outline} option sets outline text. The line width (default 1pt) may be set with the \texttt{-linewidth} option. For example, to stamp documents as drafts: \begin{framed} \noindent\small\verb!cpdf -add-text "DRAFT" -diagonal -outline in.pdf -o out.pdf! \end{framed} \subsection{Multi-line Text} The code \texttt{$\backslash$n} can be included in the text string to move to the next line. In this case, the vertical position refers to the baseline of the first line of text (if the position is at the top, top left or top right of the page) or the baseline of the last line of text (if the position is at the bottom, bottom left or bottom right). \begin{framed} \noindent\small\begin{verbatim} cpdf -add-text "Specification\n%Page of %EndPage" -topright 10 in.pdf -o out.pdf\end{verbatim} \end{framed} \noindent The \texttt{-midline} option may be used to make these vertical positions relative to the midline of a line of text rather than the baseline, as usual. The \texttt{-line-spacing} option can be used to increase or decrease the line spacing, where a spacing of 1 is the standard. \begin{framed} \noindent\small\begin{verbatim} cpdf -add-text "Specification\n%Page of %EndPage" -topright 10 -line-spacing 1.5 in.pdf -o out.pdf\end{verbatim} \end{framed} \noindent Justification of multiple lines is handled by the \texttt{-justify-left}, \texttt{-justify-right} and\linebreak \texttt{-justify-center} options. The defaults are left justification for positions relative to the left hand side of the page, right justification for those relative to the right, and center justification for positions relative to the center of the page. For example: \begin{framed} \noindent\small\begin{verbatim} cpdf -add-text "Long line\nShort" -justify-right in.pdf -o out.pdf\end{verbatim} \end{framed} \subsection{Special Characters} If your command line allows for the inclusion of unicode characters, the input text will be considered as UTF8 by Cpdf. Special characters which exist in the PDF WinAnsiEncoding Latin 1 code (such as many accented characters) will be reproduced in the PDF. This does not mean, however, that every special character can be reproduced -- it must exist in the font. When using a custom font, Cpdf will attempt to convert from UTF8 to the encoding of that font automatically. \subsection{Preserving structure information} To maintain Tagged PDF, for example with PDF/UA, add \texttt{-process-struct-trees}. The main file will keep its structure; the stamped text will be marked as an artifact. \section{Stamping Rectangles} A rectangle may be placed on one or more pages by using the \texttt{-add-rectangle <size>} command. Most of the options discussed above for text placement apply in the same way. For example: \begin{framed} \small\begin{verbatim} cpdf -add-rectangle "200 300" -pos-right 30 -color red -outline in.pdf -o out.pdf\end{verbatim} \end{framed} \noindent This can be used to blank out or highlight part of the document. The following positioning options work as you would expect: \texttt{-topleft}, \texttt{-top}, \texttt{-topright}, \texttt{-right}, \texttt{-bottomright}, \texttt{-bottom}, \texttt{-bottomleft}, \texttt{-left}, \texttt{-center}. When using the option \texttt{-pos-left "x y"}, the point (x, y) refers to the bottom-left of the rectangle. When using the option \texttt{-pos-right "x y"}, the point (x, y) refers to the bottom-right of the rectangle. When using the option \texttt{-pos-center "x y"}, the point (x, y) refers to the center of the rectangle. The options \texttt{-diagonal} and \texttt{-reverse-diagonal} have no meaning. \section{Low-level facilities} \pagestyle{empty}\thispagestyle{fancy} These two operations add content directly to the beginning or end of the page data for a page. You must understand the PDF page description language to use these. \begin{framed} \noindent\small\verb!cpdf -prepend-content <content> in.pdf [<range>] -o out.pdf!\\ \vspace{1.5mm} \noindent\small\verb!cpdf -postpend-content <content> in.pdf [<range>] -o out.pdf! \end{framed} \noindent The \texttt{-fast} option may be added (see Chapter 1). The \texttt{-stamp-as-xobject} operation puts a file in another as a Form XObject on the given pages. You can then use \texttt{-prepend-content} or \texttt{-postpend-content} to use it. \begin{framed} \noindent\small\verb!cpdf -stamp-as-xobject stamp.pdf in.pdf [<range>] -o out.pdf! \end{framed} \ \ \ \begin{cpdflib} \clearpage \section*{C Interface} \begin{small}\tt \lstinputlisting{docsplits/splits/c09} \end{small} \end{cpdflib} \begin{pycpdflib} \clearpage \section*{Python Interface} \begin{small}\tt \lstinputlisting{docsplits/pysplits/c09} \end{small} \end{pycpdflib} \begin{dotnetcpdflib} \clearpage \section*{.NET Interface} \begin{small}\tt \lstinputlisting{dotnetsplits/c09} \end{small} \end{dotnetcpdflib} \begin{jcpdflib} \clearpage \section*{Java Interface} \begin{small}\tt \lstinputlisting{javasplits/c09} \end{small} \end{jcpdflib} \begin{jscpdflib} \clearpage \section*{JavaScript Interface} \begin{small}\tt \lstinputlisting{docsplits/javascriptsplits/c09} \end{small} \end{jscpdflib} \chapter{Multipage Facilities}\pagestyle{fancy}\label{multipage}\label{chap:9} \begin{framed} \small\noindent\verb!cpdf -pad-before in.pdf [<range>] [-pad-with pad.pdf] -o out.pdf! \vspace{1.5mm} \small\noindent\verb!cpdf -pad-after in.pdf [<range>] [-pad-with pad.pdf] -o out.pdf! \vspace{1.5mm} \small\noindent\verb!cpdf -pad-every [<integer>] in.pdf [-pad-with pad.pdf] -o out.pdf! \vspace{1.5mm} \small\noindent\verb!cpdf -pad-multiple [<integer>] in.pdf -o out.pdf! \vspace{1.5mm} \small\noindent\verb!cpdf -pad-multiple-before [<integer>] in.pdf -o out.pdf! \vspace{1.5mm} \small\noindent\verb!cpdf -redact [-process-struct-trees] in.pdf [<range>] -o out.pdf! \vspace{1.5mm} \small\noindent\verb!cpdf [-impose <pagesize> | impose-xy "<x> <y>"]!\\ \small\noindent\verb! [-impose-columns] [-impose-rtl] [-impose-btt]!\\ \small\noindent\verb! [-impose-margin <margin>] [-impose-spacing <spacing>]!\\ \small\noindent\verb! [-impose-linewidth <width>] [-fast]!\\ \small\noindent\verb! [-process-struct-trees]!\\ \small\noindent\verb! in.pdf -o out.pdf! \vspace{1.5mm} \small\noindent\verb!cpdf -twoup-stack [-fast] [-process-struct-trees] in.pdf -o out.pdf! \vspace{1.5mm} \small\noindent\verb!cpdf -twoup [-fast] [-process-struct-trees] in.pdf -o out.pdf! \vspace{1.5mm} \small\noindent\verb!cpdf -chop "<x> <y>" [-chop-columns] [-chop-rtl] [-chop-btt]!\\ \small\noindent\verb! in.pdf [<range>] -o out.pdf! \vspace{1.5mm} \small\noindent\verb!cpdf [-chop-h <y> | -chop-v <x>] [-chop-columns]!\\ \small\noindent\verb! in.pdf [<range>] -o out.pdf! \end{framed} \section{Inserting Blank Pages} \index{blank pages!inserting} Sometimes, for instance to get a printing arrangement right, it's useful to be able to insert blank pages into a PDF file. Cpdf can add blank pages before a given page or pages, or after. The pages in question are specified by a range in the usual way: \begin{framed} \noindent\small\verb!cpdf -pad-before in.pdf 1 -o out.pdf! \vspace{2.5mm} \noindent Add a blank page before page 1 (i.e. at the beginning of the document.) \vspace{2.5mm} \noindent\verb!cpdf -pad-after in.pdf 2,16,38,84,121,147 -o out.pdf! \vspace{2.5mm} \noindent Add a blank page after pages 2, 16, 38, 84, 121 and 147 (for instance, to add a clean page between chapters of a document.) \end{framed} \noindent The dimensions of the padded page are derived from the boxes (media box, crop box etc.) of the page after or before which the padding is to be applied. The \verb!-pad-every n! operation places a blank page after every n pages, excluding any last one. For example on a 9 page document this command adds a blank page after pages 3 and 6: \begin{framed} \noindent\small\verb!cpdf -pad-every 3 in.pdf -o out.pdf! \vspace{2.5mm} \noindent Add a blank page after every three pages \end{framed} \noindent In all three of these operations, one may specify \texttt{-pad-with} providing a (usually one-page) PDF file to be used instead of a blank page. For example, a page saying ``This page left intentionally blank''. The \verb!-pad-multiple n! operation adds blank pages so the document has a multiple of \verb!n! pages. For example: \begin{framed} \noindent\small\verb!cpdf -pad-multiple 8 in.pdf -o out.pdf! \vspace{2.5mm} \noindent Add blank pages to \texttt{in.pdf} so it has a multiple of 8 pages. \end{framed} \noindent The \texttt{-pad-multiple-before n} operation adds the padding pages at the beginning of the file instead. \section{Redaction} Cpdf has basic redaction facilities to remove whole pages. We simply give the page range, and such pages will be emptied of content, and any annotations and page resources removed. The page dimensions remain the same. \begin{framed} \noindent\small\verb!cpdf -redact in.pdf 1,2,19-end -o out.pdf! \vspace{2.5mm} \noindent Redact pages 1,2 and 19-end of \texttt{in.pdf}, writing to \texttt{out.pdf} \end{framed} \noindent If \texttt{-process-struct-trees} is added to the command, the document's structure tree will be shorn of any parts which are marked as relating to the now-redacted pages. \section{Imposition} \index{two-up}\index{imposition} Imposition is the act of putting two or more pages of an input document onto each page of the output document. There are two operations provided by Cpdf: \begin{itemize} \item the \texttt{-impose} operation which, given a page size fits multiple pages into it; and \item the \texttt{-impose-xy} operation which, given an $x$ and $y$ value, builds an output page which fits $x$ input pages horizontally and $y$ input pages vertically. \end{itemize} \begin{framed} \noindent\small\verb!cpdf -impose a0landscape in.pdf -o out.pdf! \vspace{2.5mm} \noindent Impose as many pages as will fit on to new A0 landscape pages. \vspace{2.5mm} \noindent\small\verb!cpdf -impose-xy "3 4" in.pdf -o out.pdf! \vspace{2.5mm} \noindent Impose 3 across and 4 down on to new pages of 3 times the width and 4 times the height of the input ones. \end{framed} \noindent The $x$ value for \texttt{-impose-xy} may be set to zero to indicate an infinitely-wide page; the $y$ value to indicate an infinitely-long one. In both cases, the pages in the input file are assumed to be of the same dimensions. The following options may be used to modify the output: \begin{itemize} \item \texttt{-impose-columns} Lay the pages out in columns rather than rows. \item \texttt{-impose-rtl} Lay the pages out right-to-left. \item \texttt{-impose-btt} Lay the pages out bottom-to-top. \item \texttt{-impose-margin <margin>} Add a margin around the edge of the page of the given width. When using \texttt{-impose-xy} the page size increases; with \texttt{-impose} the pages are scaled. \item \texttt{-impose-spacing <spacing>} Add spacing between each row and column. When using \texttt{-impose-xy} the page size increases; with \texttt{-impose} the pages are scaled. \item \texttt{-impose-linewidth <width>} Add a border around each input page. With \texttt{-impose} the pages are scaled after the border is added, so you must account for this yourself. \end{itemize} \noindent To impose with rotated pages, for example to put two A4 portrait pages two-up on an A3 landscape page, rotate them prior to imposition. Two other ways of putting multiple pages on a single page remain from earlier versions of Cpdf which lacked a general imposition operation. The \texttt{-twoup-stack} operation puts two logical pages on each physical page, rotating them 90 degrees to do so. The new mediabox is thus larger. The \texttt{-twoup} operation does the same, but scales the new sides down so that the media box is unchanged. \begin{framed} \noindent\small\verb!cpdf -twoup in.pdf -o out.pdf! \vspace{2.5mm} \noindent Impose a document two-up, keeping the existing page size. \vspace{2.5mm} \noindent\small\verb!cpdf -twoup-stack in.pdf -o out.pdf! \vspace{2.5mm} \noindent Impose a document two-up on a larger page by rotation. \end{framed} \noindent NB: For all imposition options, see also discussion of \texttt{-fast} in Section \ref{fast}. The option \texttt{-process-struct-trees} will mark the file's content as an artifact for the purpose of imposition. \section{Chopping up pages} \index{chop}\index{poster} The \texttt{-chop} operation cuts up a page into multiple pages, according to the chosen grid, and those pages replace the originals in the PDF. It is a sort of de-imposition. For example: \begin{framed} \noindent\small\verb!cpdf -chop "2 3" in.pdf -o out.pdf! \vspace{2.5mm} \noindent Chop each page into six. \end{framed} \noindent The crop box is used if present; if not, the media box. By default, the pieces are arranged in the output file row by row, and from left to right on each row. To alter this, add one or more of \texttt{-chop-columns}, \texttt{-chop-rtl} (right to left), and \texttt{-chop-btt} (bottom to top). As an alternative, pages can be chopped into two at a given position, horizontally with \texttt{-chop-h} or vertically with \texttt{-chop-v}: \begin{framed} \noindent\small\verb!cpdf -chop-h 400 in.pdf -o out.pdf! \vspace{2.5mm} \noindent Chop each page into two, top and bottom, at 400pt mark. \end{framed} \noindent To reverse the order of pages in the output, specify \texttt{-chop-columns} in addition. \begin{cpdflib} \clearpage \section*{C Interface} \begin{small}\tt \lstinputlisting{docsplits/splits/c10} \end{small} \end{cpdflib} \begin{pycpdflib} \clearpage \section*{Python Interface} \begin{small}\tt \lstinputlisting{docsplits/pysplits/c10} \end{small} \end{pycpdflib} \begin{dotnetcpdflib} \clearpage \section*{.NET Interface} \begin{small}\tt \lstinputlisting{dotnetsplits/c10} \end{small} \end{dotnetcpdflib} \begin{jcpdflib} \clearpage \section*{Java Interface} \begin{small}\tt \lstinputlisting{javasplits/c10} \end{small} \end{jcpdflib} \begin{jscpdflib} \clearpage \section*{JavaScript Interface} \begin{small}\tt \lstinputlisting{docsplits/javascriptsplits/c10} \end{small} \end{jscpdflib} \chapter{Annotations}\label{chap:10} \begin{framed} \small\noindent\verb!cpdf -list-annotations in.pdf [<range>]! \vspace{1.5mm} \small\noindent\verb!cpdf -list-annotations-json in.pdf [<range>]! \vspace{1.5mm} \small\noindent\verb!cpdf -set-annotations-json <filename> [-underneath]!\\ \noindent\verb! in.pdf [<range>] -o out.pdf! \vspace{1.5mm} \small\noindent\verb!cpdf -copy-annotations from.pdf to.pdf [<range>] -o out.pdf! \vspace{1.5mm} \small\noindent\verb!cpdf -remove-annotations in.pdf [<range>] -o out.pdf! \end{framed} \section{Listing Annotations} \index{annotations!listing}\index{JSON!list annotations as} The \texttt{-list-annotations} operation prints the textual content of any annotations on the selected pages to standard output. Each annotation is preceded by the page number and followed by a newline. The output of this operation is always UTF8. \begin{framed} \noindent\small\verb!cpdf -list-annotations in.pdf > annots.txt! \vspace{2.5mm} \noindent Print annotations from \texttt{in.pdf}, redirecting output to \texttt{annots.txt}. \end{framed} \noindent More information can be obtained by listing annotations in JSON format: \begin{framed} \noindent\small\verb!cpdf -list-annotations-json in.pdf > annots.json! \vspace{2.5mm} \noindent Print annotations from \texttt{in.pdf} in JSON format, redirecting output to \texttt{annots.json}. \end{framed} \noindent This produces an array of (page number, object number, annotation) triples giving the PDF structure of each annotation. Destination pages for page links will have page numbers in place of internal PDF page links, but the content is otherwise unaltered. Here is an example entry for an annotation with object number 102 on page 10: {\small\begin{verbatim} [ 10, 102 { "/H": { "N": "/I" }, "/Border": [ { "I": 0 }, { "I": 0 }, { "I": 0 } ], "/Rect": [ { "F": 89.88023 }, { "F": 409.98401 }, { "F": 323.90561 }, { "F": 423.32059 } ], "/Subtype": { "N": "/Link" }, "/Type": { "N": "/Annot" }, "/A": { "/S": { "N": "/URI" }, "/URI": { "U" : "http://www.google.com/" }, "/StructParent": { "I": 10 } } ] \end{verbatim}} \noindent Extra objects required for annotations, but which are not annotations themselves are also extracted. They omit the page number, being just a pair of the object number and object. The CPDFJSON format is described on page \pageref{cpdfjson}. There is an additional object, -1, which gives the Cpdf annotation format version, currently 1. \section{Setting annotations} We can also set annotations from a JSON file, either modified from the output of\linebreak \texttt{-list-annotations-json} or produced manually: \begin{framed} \noindent\small\verb!cpdf -set-annotations annots.json in.pdf -o out.pdf ! \vspace{2.5mm} \noindent Add the annotations in \texttt{annots.json} on top of any already present in \texttt{in.pdf}, writing to \texttt{out.pdf}. \end{framed} \noindent If replacing rather than adding annotations, use \texttt{-remove-annotations} first to clear the existing ones. \section{Copying Annotations} \index{annotations!copying} The \texttt{-copy-annotations} operation copies the annotations in the given page range from one file (the file specified immediately after the option) to another pre-existing PDF. The range is specified after this pre-existing PDF. The result is then written an output file, specified in the usual way. \begin{framed} \noindent\small\verb!cpdf -copy-annotations from.pdf to.pdf 1-10 -o result.pdf ! \vspace{2.5mm} \noindent Copy annotations from the first ten pages of \texttt{from.pdf} onto the PDF file \texttt{to.pdf}, writing the result to \texttt{results.pdf}. \end{framed} \noindent It exists for historical reasons, and is no different from listing and setting the annotations using \texttt{-list-annotations-json} and \texttt{-set-annotations}. \section{Removing Annotations} \index{annotations!removing} The \texttt{-remove-annotations} operation removes all annotations from the given page range. \begin{framed} \noindent\small\verb!cpdf -remove-annotations in.pdf 1 -o out.pdf! \vspace{2.5mm} \noindent Remove annotations from the first page of a file only. \end{framed} \ \ \ \pagestyle{empty}\thispagestyle{fancy} \begin{cpdflib} \clearpage \section*{C Interface} \begin{small}\tt \lstinputlisting{docsplits/splits/c11} \end{small} \end{cpdflib} \begin{pycpdflib} \clearpage \section*{Python Interface} \begin{small}\tt \lstinputlisting{docsplits/pysplits/c11} \end{small} \end{pycpdflib} \begin{dotnetcpdflib} \clearpage \section*{.NET Interface} \begin{small}\tt \lstinputlisting{dotnetsplits/c11} \end{small} \end{dotnetcpdflib} \begin{jcpdflib} \clearpage \section*{Java Interface} \begin{small}\tt \lstinputlisting{javasplits/c11} \end{small} \end{jcpdflib} \begin{jscpdflib} \clearpage \section*{JavaScript Interface} \begin{small}\tt \lstinputlisting{docsplits/javascriptsplits/c11} \end{small} \end{jscpdflib} \chapter{Document Information and Metadata}\label{chap:11} \pagestyle{fancy} \index{document information} \index{metadata} \begin{framed} \small\noindent\verb!cpdf -info[-json] [-utf8] [-in | -cm | -mm] in.pdf! \vspace{1.5mm} \small\noindent\verb!cpdf -page-info[-json] [-in | -cm | -mm] in.pdf [<range>]! \vspace{1.5mm} \small\noindent\verb!cpdf -pages in.pdf! \vspace{1.5mm} \small\noindent\verb!cpdf -set-title <title of document>!\\ \small\noindent\verb! [-also-set-xmp] [-just-set-xmp] in.pdf -o out.pdf!\\ (Also \texttt{-set-author} etc. See Section \ref{setdocinfo}.) \vspace{1.5mm} \small\noindent\verb!cpdf -set-page-layout <layout> in.pdf -o out.pdf! \vspace{1.5mm} \small\noindent\verb!cpdf -set-page-mode <mode> in.pdf -o out.pdf!\\ \small\noindent\verb!cpdf -set-non-full-screen-page-mode <mode> in.pdf -o out.pdf! \vspace{1.5mm} \small\noindent\verb!cpdf -hide-toolbar <true | false> in.pdf -o out.pdf!\\ \noindent\verb! -hide-menubar!\\ \noindent\verb! -hide-window-ui!\\ \noindent\verb! -fit-window!\\ \noindent\verb! -center-window!\\ \noindent\verb! -display-doc-title! \vspace{1.5mm} \small\noindent\verb!cpdf -open-at-page <page number> in.pdf -o out.pdf!\\ \noindent\verb!cpdf -open-at-page-fit <page number> in.pdf -o out.pdf!\\ \noindent\verb!cpdf -open-at-page-custom <destination> in.pdf -o out.pdf! \vspace{1.5mm} \small\noindent\verb!cpdf -set-language <language> in.pdf -o out.pdf! \vspace{1.5mm} \small\noindent\verb!cpdf -set-metadata <metadata-file> in.pdf -o out.pdf!\\ \small\noindent\verb!cpdf -remove-metadata in.pdf -o out.pdf!\\ \small\noindent\verb!cpdf -print-metadata in.pdf!\\ \small\noindent\verb!cpdf -create-metadata in.pdf -o out.pdf!\\ \small\noindent\verb!cpdf -set-metadata-date <date> in.pdf -o out.pdf! \vspace{1.5mm} \small\noindent\verb!cpdf -add-page-labels in.pdf -o out.pdf!\\ \noindent\verb! [-label-style <style>] [-label-prefix <string>]!\\ \noindent\verb! [-label-startval <integer>] [-labels-progress]!\\ \vspace{1.5mm} \small\noindent\verb!cpdf -remove-page-labels in.pdf -o out.pdf!\\ \small\noindent\verb!cpdf -print-page-labels[-json] in.pdf! \vspace{1.5mm} \small\noindent\verb!cpdf -composition[-json] in.pdf! \end{framed} \section{Reading Document Information} \label{info} The \texttt{-info} operation prints entries from the document information dictionary, and from any XMP metadata to standard output. \begin{framed} {\small\begin{verbatim} $cpdf -info pdf_reference.pdf Encryption: Not encrypted Permissions: Linearized: true Object streams: true ID: <0b1f990718e2a92c0c112fbf08b233fb> <b2f1dbee369e11d9b951000393c97fd8> Version: 1.5 Pages: 1236 Title: PDF Reference, version 1.6 Author: Adobe Systems Incorporated Subject: Adobe Portable Document Format (PDF) Keywords: Creator: FrameMaker 7.0 Producer: Acrobat Distiller 6.0.1 for Macintosh Created: D:20041114084116Z Modified: D:20041114163850-08'00' Trapped: False PageMode: UseOutlines PageLayout: OpenAction: [1/XYZ -32768 -32768 1] HideToolbar: HideMenubar: HideWindowUI: FitWindow: CenterWindow: DisplayDocTitle: True NonFullScreenPageMode: AcroForm: False XFA: False Marked: False UserProperties: False Suspects: False MediaBox: 0.000000 0.000000 612.000000 792.000000 CropBox: 41.000000 63.000000 572.000000 729.000000 BleedBox: TrimBox: various ArtBox: various Subformats: Language: en-us XMP dc:title: PDF Reference, version 1.6 XMP dc:creator: Adobe Systems Incorporated XMP dc:description: Adobe Portable Document Format (PDF) \end{verbatim}}\end{framed} \noindent The details of the format for creation and modification dates can be found in Appendix~\ref{dates}. If page boxes vary among pages, the entry will read \texttt{various}. Add \texttt{-in}, \texttt{-cm} or \texttt{mm} to print boxes in inches, centimetres, or millimetres instead of points. By default, Cpdf strips to ASCII, discarding character codes in excess of 127. In order to preserve the original unicode, add the \texttt{-utf8} option. To disable all post-processing of the string, add \texttt{-raw}. See Section \ref{textencodings} for more information. The \texttt{-info-json} operation prints the information in JSON format instead. For example: \begin{framed} {\small\begin{verbatim} { "Encryption": "Not encrypted", "Permissions": [], "Linearized": true, "Object streams": true, "ID": [ "0b1f990718e2a92c0c112fbf08b233fb", "b2f1dbee369e11d9b951000393c97fd8" ], "Version": [ 1, 5 ], "Pages": 1236, "Title": "PDF Reference, version 1.6", "Author": "Adobe Systems Incorporated", "Subject": "Adobe Portable Document Format (PDF)", "Keywords": null, "Creator": "FrameMaker 7.0", "Producer": "Acrobat Distiller 6.0.1 for Macintosh", "Created": "D:20041114084116Z", "Modified": "D:20041114163850-08'00'", "Trapped": false, "PageMode": "UseOutlines", "PageLayout": null, "OpenAction": [{ "I": 1 }, { "N": "/XYZ" }, { "I": -32768 }, { "I": -32768 }, { "I": 1 }] "HideToolbar": null, "HideMenubar": null, "HideWindowUI": null, "FitWindow": null, "CenterWindow": null, "DisplayDocTitle": true, "NonFullPageScreenMode": null, "AcroForm": false, "XFA": false, "Marked": false, "UserProperties": false, "Suspects": false, "MediaBox": [ 0.0, 0.0, 612.0, 792.0 ], "CropBox": [ 41.0, 63.0, 572.0, 729.0 ], "BleedBox": null, "TrimBox": "various", "ArtBox": "various", "Subformats": [], "Language": "en-us" "XMP dc:title": "PDF Reference, version 1.6", "XMP dc:creator": "Adobe Systems Incorporated", "XMP dc:description": "Adobe Portable Document Format (PDF)" } \end{verbatim}}\end{framed} \noindent The \texttt{-page-info} operation prints the page label, media box and other boxes, and number of annotations page-by-page to standard output, for all pages in the current range. \begin{framed} {\small\begin{verbatim} $cpdf -page-info 14psfonts.pdf Page 1: Label: i MediaBox: 0.000000 0.000000 600.000000 450.000000 CropBox: 200.000000 200.000000 500.000000 500.000000 BleedBox: TrimBox: ArtBox: Rotation: 0 Annotations: 0 \end{verbatim}} \end{framed} \noindent Note that the format for boxes is minimum x, minimum y, maximum x, maximum y. Add \texttt{-in}, \texttt{-cm} or \texttt{mm} to print boxes in inches, centimetres, or millimetres instead of points. Using \texttt{-page-info-json} we can get the information in JSON format. For example: \begin{framed} {\small\begin{verbatim} [ { "Page": 1, "Label": "i", "MediaBox": [ 0.0, 0.0, 600.0, 450.0 ], "CropBox": [ 200.0, 200.0, 500.0, 500.0 ], "BleedBox": null, "TrimBox": null, "ArtBox": null, "Rotation": 0, "Annotations": 0 } ] \end{verbatim}} \end{framed} \noindent The \texttt{-pages} operation prints the number of pages in the file. \begin{framed} {\small\begin{verbatim} cpdf -pages Archos.pdf 8 \end{verbatim}} \end{framed} \section{Setting Document Information} \label{setdocinfo} The \textit{document information dictionary} in a PDF file specifies various pieces of information about a PDF. These can be consulted in a PDF viewer (for instance, Acrobat). Here is a summary of the commands for setting entries in the document information dictionary: {\small\begin{framed} \noindent\begin{tabular}{ll} \textbf{Information} & \textbf{Example command-line fragment} \\ Title & \texttt{cpdf -set-title "Discourses"} \\ Author & \texttt{cpdf -set-author "Joe Smith"} \\ Subject & \texttt{cpdf -set-subject "Behavior"} \\ Keywords & \texttt{cpdf -set-keywords "Ape Primate"} \\ Creator & \texttt{cpdf -set-creator "Original Program"} \\ Producer & \texttt{cpdf -set-producer "Distilling Program"} \\ Creation Date & \texttt{cpdf -set-create "D:19970915110347-08'00'"} \\ Modification Date & \texttt{cpdf -set-modify "D:19970915110347-08'00'"} \\ Mark as Trapped & \texttt{cpdf -set-trapped} \\ Mark as Untrapped & \texttt{cpdf -set-untrapped} \\ \end{tabular} \end{framed}} \noindent (The details of the format for creation and modification dates can be found in Appendix~\ref{dates}. Using the date \texttt{"now"} uses the time and date at which the command is executed (unless the environment variable \texttt{CPDF\_REPRODUCIBLE\_DATES} is set to \texttt{true}). Note also that \texttt{-producer} and \texttt{-creator} may be used to set the producer and/or the creator when writing any file, separate from the operations described in this chapter.) \vspace{2mm} For example, to set the title, the full command line would be \begin{framed} \noindent\small\verb!cpdf -set-title "A Night in London" in.pdf -o out.pdf! \end{framed} \noindent The text string is considered to be in UTF8 format, unless the \texttt{-raw} option is added---in which case, it is unprocessed, save for the replacement of any octal escape sequence such as \texttt{\textbackslash 017}, which is replaced by a character of its value (here, 15). To set also any field in the XMP metadata, add \texttt{-also-set-xmp}. The field must exist already. To set only the field (not the document information dictionary), add \texttt{-just-set-xmp} instead. To delete existing non-XMP metadata in line with PDF 2.0, use \texttt{-remove-dict-entry "/Info"} as described in chapter \ref{chap:misc}. \section{XMP Metadata} \index{metadata!XMP}\index{XMP metadata} PDF files can contain a piece of arbitrary metadata, often in XMP format. This is typically stored in an uncompressed stream, so that other applications can read it without having to decode the whole PDF. To set the metadata: \begin{framed} \noindent\small\verb!cpdf -set-metadata data.xml in.pdf -o out.pdf! \end{framed} \noindent To remove any metadata: \begin{framed} \noindent\small\verb!cpdf -remove-metadata in.pdf -o out.pdf! \end{framed} \noindent To print the current metadata to standard output: \begin{framed} \noindent\small\verb!cpdf -print-metadata in.pdf! \end{framed} \noindent To create XMP metadata from scratch, using any information in the Document Information Dictionary (old-style metadata): \begin{framed} \noindent\small\verb!cpdf -create-metadata in.pdf -o out.pdf! \end{framed} \noindent To set the XMP metadata date field, use: \begin{framed} \noindent\small\verb!cpdf -set-metadata-date <date> in.pdf -o out.pdf! \end{framed} \noindent The date format is defined in Appendix \ref{xmpdate}. Using the date \texttt{"now"} uses the time and date at which the command is executed. \section{Upon Opening a Document} A mark can be put in a PDF to set the page viewing characteristics upon opening. NB: If the file has a valid \texttt{/OpenAction} setting, which tells the PDF reader to open at a certain page or position on a page, this can override the page layout or display options described below. To prevent this, preprocess the file with the \texttt{-remove-dict-entry} functionality from Section \ref{removedictentry}: \begin{framed} \noindent\small\verb!cpdf -remove-dict-entry /OpenAction in.pdf -o out.pdf! \end{framed} \noindent You can see if the file has such an open action by referring to the output of \texttt{-info}. NB: The initial view displayed by the dialog box File $\rightarrow$ Properties $\rightarrow$ Initial View in Adobe Reader / Acrobat may not reflect exactly the options here. The options here set the flags within the PDF - Adobe products may show different wording. \subsection{Page Layout} \index{page!layout} The \texttt{-set-page-layout} operation specifies the page layout to be used when a document is opened in, for instance, Acrobat. The possible (case-sensitive) values are: \vspace{2mm} {\small\begin{tabular}{ll} \texttt{SinglePage} & \vspace{2mm} \parbox{8cm}{Display one page at a time} \\ \texttt{OneColumn} & \vspace{2mm} \parbox{8cm}{Display the pages in one column} \\ \texttt{TwoColumnLeft} & \vspace{2mm} \parbox{8cm}{Display the pages in two columns, odd numbered pages on the left} \\ \texttt{TwoColumnRight} & \vspace{2mm} \parbox{8cm}{Display the pages in two columns, even numbered pages on the left} \\ \texttt{TwoPageLeft} & \vspace{2mm} \parbox{8cm}{(PDF 1.5 and above) Display the pages two at a time, odd numbered pages on the left} \\ \texttt{TwoPageRight} & \vspace{2mm} \parbox{8cm}{(PDF 1.5 and above) Display the pages two at a time, even numbered pages on the left} \end{tabular}}\\ \noindent For instance: \begin{framed} \noindent\small\verb!cpdf -set-page-layout TwoColumnRight in.pdf -o out.pdf! \end{framed} \subsection{Page Mode} \index{page!mode} The \textit{page mode} in a PDF file defines how a viewer should display the document when first opened. The possible (case-sensitive) values are: \vspace{2mm} {\small\begin{tabular}{ll} \texttt{UseNone} & \vspace{2mm} \parbox{8cm}{Neither document outline nor thumbnail images visible} \\ \texttt{UseOutlines} & \vspace{2mm} \parbox{8cm}{Document outline (bookmarks) visible} \\ \texttt{UseThumbs} & \vspace{2mm} \parbox{8cm}{Thumbnail images visible} \\ \texttt{FullScreen} & \vspace{2mm} \parbox{8cm}{Full-screen mode (no menu bar, window controls, or anything but the document visible)} \\ \texttt{UseOC} & \vspace{2mm} \parbox{8cm}{(PDF 1.5 and above) Optional content group panel visible} \\ \texttt{UseAttachments} & \vspace{2mm} \parbox{8cm}{(PDF 1.5 and above) Attachments panel visible} \end{tabular}}\\ \noindent For instance: \begin{framed} \noindent\small\verb!cpdf -set-page-mode FullScreen in.pdf -o out.pdf! \end{framed} \noindent If full screen mode is selected for document opening, we can also set a mode to be used when the user exits from full-screen mode: \begin{framed} \noindent\small\verb!cpdf -set-non-full-screen-page-mode UseAttachments in.pdf -o out.pdf! \end{framed} \noindent As would be expected, \texttt{FullScreen} is not allowed here. \subsection{Display Options} The appearance of the PDF viewer upon opening a document may be set with these options. Each is boolean - supply \texttt{true} or \texttt{false}: \vspace{2mm} {\small\begin{tabular}{ll} \texttt{-hide-toolbar} & \vspace{2mm} \parbox{8cm}{Hide the viewer's toolbar} \\ \texttt{-hide-menubar} & \vspace{2mm} \parbox{8cm}{Document outline (bookmarks) visible} \\ \texttt{-hide-window-ui} & \vspace{2mm} \parbox{8cm}{Hide the viewer's scroll bars} \\ \texttt{-fit-window} & \vspace{2mm} \parbox{8cm}{Resize the document's windows to fit size of first page} \\ \texttt{-center-window} & \vspace{2mm} \parbox{8cm}{Position the document window in the center of the screen} \\ \texttt{-display-doc-title} & \vspace{2mm} \parbox{8cm}{Display the document title instead of the file name in the title bar} \end{tabular}}\\ \noindent For instance: \begin{framed} \noindent\small\verb!cpdf -hide-toolbar true in.pdf -o out.pdf! \end{framed} \noindent The page a PDF file opens at can be set using \texttt{-open-at-page}: \begin{framed} \noindent\small\verb!cpdf -open-at-page 15 in.pdf -o out.pdf! \end{framed} \noindent To have that page scaled to fit the window in the viewer, use \texttt{-open-at-page-fit} instead: \begin{framed} \noindent\small\verb!cpdf -open-at-page-fit end in.pdf -o out.pdf! \end{framed} \noindent (Here, we used \texttt{end} to open at the last page. Any page specification describing a single page is ok here.) Alternatively, we may specify a full destination, of the kind described on page \pageref{destinations}: \begin{framed} \noindent\small\verb!cpdf -open-at-page-custom "[3 /FitR 100 100 300 300]" in.pdf -o out.pdf! \end{framed} \section{Document Language} The document language may be set by giving an IETF BCP 47 language tag: \begin{framed} \noindent\small\verb!cpdf -set-language "en-GB" in.pdf -o out.pdf! \end{framed} \noindent This is the top-level language tag. Existing tags on individual parts of the document are preserved. \section{Page Labels} \index{page!labels} It is possible to add \textit{page labels} to a document. These are not the printed on the page, but may be displayed alongside thumbnails or in print dialogue boxes by PDF readers. We use \texttt{-add-page-labels} to do this, by default with decimal arabic numbers (1,2,3\ldots). We can add \texttt{-label-style} to choose what type of labels to add from these kinds: \vspace{4mm} {\small\begin{tabular}{rl} \texttt{DecimalArabic} & 1, 2, 3, 4, 5\ldots \\ \texttt{LowercaseRoman} & i, ii, iii, iv, v\ldots \\ \texttt{UppercaseRoman} & I, II, III, IV, V\ldots \\ \texttt{LowercaseLetters} & a, b, c, \ldots , z, aa, bb\ldots \\ \texttt{UppercaseLetters} & A, B, C, \ldots , Z, AA, BB\ldots \\ \texttt{NoLabelPrefixOnly} & No number, but a prefix will be used if defined. \end{tabular}} \vspace{4mm} \noindent We can use \texttt{-label-prefix} to add a textual prefix to each label. Consider a file with twenty pages and no current page labels (a PDF reader will assume 1,2,3\ldots if there are none). We will add the following page labels: \vspace{4mm} i, ii, iii, iv, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, A-0, A-1, A-2, A-3, A-4, A-5 \vspace{4mm} \noindent Here are the commands, in order: {\small\begin{framed} \noindent\verb!cpdf -add-page-labels in.pdf 1-4 -label-style LowercaseRoman!\\ \noindent\verb! -o out.pdf!\\ \noindent\verb!cpdf -add-page-labels out.pdf 5-14 -o out2.pdf!\\ \noindent\verb!cpdf -add-page-labels out2.pdf 15-20 -label-prefix "A-"!\\ \noindent\verb! -label-startval 0 -o out3.pdf! \end{framed}} \noindent By default the labels begin at page number 1 for each range. To override this, we can use \texttt{-label-startval} (we used $0$ in the final command), where we want the numbers to begin at zero rather than one. The option \texttt{-labels-progress} can be added to make sure the start value progresses between sub-ranges when the page range specified is disjoint, e.g \texttt{1-9, 30-40} or \texttt{odd}. Page labels may be removed altogether by using \texttt{-remove-page-labels} command. To print the page labels from an existing file, use \texttt{-print-page-labels}. For example: \begin{framed}\small\begin{verbatim} $ cpdf -print-page-labels in.pdf labelstyle: LowercaseRoman labelprefix: None startpage: 1 startvalue: 1 labelstyle: DecimalArabic labelprefix: A startpage: 9 startvalue: 1 \end{verbatim} \end{framed}\pagestyle{empty}\thispagestyle{fancy} \noindent Or, in JSON format with \texttt{-print-page-labels-json}: \begin{framed}\small\begin{verbatim} [ { "labelstyle": "LowercaseRoman", "labelprefix": null, "startpage": 1, "startvalue": 1 }, { "labelstyle": "DecimalArabic", "labelprefix": "A", "startpage": 9, "startvalue": 1 } ] \end{verbatim} \end{framed}\pagestyle{empty} \section{Composition of a PDF} The \texttt{-composition} and \texttt{-composition-json} operations show how much space in a PDF is used by each kind of data. Here is the output of \texttt{-composition} for this manual: \begin{framed}\small\begin{verbatim} $ cpdf -composition cpdfmanual.pdf Images: 0 bytes (0.00%) Fonts: 144731 bytes (46.72%) Content streams: 132767 bytes (42.85%) Structure Info: 0 bytes (0.00%) Attached Files: 0 bytes (0.00%) XRef Table: 21082 bytes (6.80%) Piece Info: 0 bytes (0.00%) Unclassified: 11229 bytes (3.62%) \end{verbatim} \end{framed}\pagestyle{empty}\thispagestyle{fancy} \noindent And here it is in JSON format: \begin{framed}\small\begin{verbatim} $ cpdf -composition-json cpdfmanual.pdf [ ["Images", 0, 0.0], ["Fonts", 144731, 46.71620256351494], ["Content streams", 132767, 42.854468398271194], ["Structure Info", 0, 0.0], ["Attached Files", 0, 0.0], ["XRef Table", 21082, 6.8048378194306816], ["Piece Info", 0, 0.0], ["Unclassified", 11229, 3.6244912187831857] ] \end{verbatim} \end{framed}\pagestyle{empty}\thispagestyle{fancy} \noindent Note that, due to small inaccuracies in the method, it is possible for the \texttt{Unclassified} numbers to be negative. \begin{cpdflib} \clearpage \section*{C Interface} \begin{small}\tt \lstinputlisting{docsplits/splits/c12} \end{small} \end{cpdflib} \begin{pycpdflib} \clearpage \section*{Python Interface} \begin{small}\tt \lstinputlisting{docsplits/pysplits/c12} \end{small} \end{pycpdflib} \begin{dotnetcpdflib} \clearpage \section*{.NET Interface} \begin{small}\tt \lstinputlisting{dotnetsplits/c12} \end{small} \end{dotnetcpdflib} \begin{jcpdflib} \clearpage \section*{Java Interface} \begin{small}\tt \lstinputlisting{javasplits/c12} \end{small} \end{jcpdflib} \begin{jscpdflib} \clearpage \section*{JavaScript Interface} \begin{small}\tt \lstinputlisting{docsplits/javascriptsplits/c12} \end{small} \end{jscpdflib} \chapter{File Attachments}\label{chap:12}\pagestyle{fancy} \index{attachments} \begin{framed} \small\noindent\verb!cpdf -attach-file <filename> [-to-page <page number>] in.pdf -o out.pdf! \vspace{1.5mm} \small\noindent\verb!cpdf -list-attached-files in.pdf! \vspace{1.5mm} \small\noindent\verb!cpdf -remove-files in.pdf -o out.pdf! \vspace{1.5mm} \small\noindent\verb!cpdf -dump-attachments in.pdf -o <directory>! \end{framed} PDF supports adding attachments (files of any kind, including other PDFs) to an existing file. The Cpdf tool supports adding and removing \textit{document-level attachments} --- that is, ones which are associated with the document as a whole rather than with an individual page, and also \textit{page-level attachments}, associated with a particular page. \section{Adding Attachments} \index{attachments!adding} To add an attachment, use the \texttt{-attach-file} operation. For instance, \begin{framed} \noindent\small\verb!cpdf -attach-file sheet.xls in.pdf -o out.pdf! \end{framed} \noindent attaches the Excel spreadsheet \texttt{sheet.xls} to the input file. If the file already has attachments, the new file is added to their number. You can specify multiple files to be attached by using \verb!-attach-file! multiple times. They will be attached in the given order. The \texttt{-to-page} option can be used to specify that the files will be attached to the given page, rather than at the document level. The \texttt{-to-page} option may be specified at most once. \section{Listing Attachments} \index{attachments!listing} To list all document- and page-level attachments, use the \texttt{-list-attached-files} operation. The page number and filename of each attachment is given, page 0 representing a document-level attachment. \begin{framed} {\small\begin{verbatim} $cpdf -list-attached-files 14psfonts.pdf 0 utility.ml 0 utility.mli 4 notes.xls \end{verbatim}} \end{framed} \section{Removing Attachments} \index{attachments!removing} To remove all document-level and page-level attachments from a file, use the \texttt{-remove-files} operation: \begin{framed} \noindent\small\verb!cpdf -remove-files in.pdf -o out.pdf! \end{framed} \section{Dumping Attachments to File} \index{attachments!dumping to file} The \texttt{-dump-attachments} operation, when given a PDF file and a directory path as the output, will write each attachment under its filename (as displayed by \texttt{-list-attached-files} to that directory. The directory must exist prior to the call. \begin{framed} \noindent\small\verb!cpdf -dump-attachments in.pdf -o /home/fred/attachments! \end{framed} \noindent Unless either the \texttt{-raw} or \texttt{-utf8} option is given, the filenames are stripped of dubious special characters before writing. It is converted from unicode to 7 bit ASCII, and the following characters are removed, in addition to any character with ASCII code less than 32: \begin{framed} \centering \verb! / ? < > \ : * | " ^ + =! \end{framed} \ \ \ \begin{cpdflib} \clearpage \section*{C Interface} \begin{small}\tt \lstinputlisting{docsplits/splits/c13} \end{small} \end{cpdflib} \begin{pycpdflib} \clearpage \section*{Python Interface} \begin{small}\tt \lstinputlisting{docsplits/pysplits/c13} \end{small} \end{pycpdflib} \begin{dotnetcpdflib} \clearpage \section*{.NET Interface} \begin{small}\tt \lstinputlisting{dotnetsplits/c13} \end{small} \end{dotnetcpdflib} \begin{jcpdflib} \clearpage \section*{Java Interface} \begin{small}\tt \lstinputlisting{javasplits/c13} \end{small} \end{jcpdflib} \begin{jscpdflib} \clearpage \section*{JavaScript Interface} \begin{small}\tt \lstinputlisting{docsplits/javascriptsplits/c13} \end{small} \end{jscpdflib} \chapter{Images}\label{chap:13} \begin{framed} \noindent\small\verb!cpdf -extract-images in.pdf [<range>] [-im <path>] [-p2p <path>]! \noindent\small\verb! [-dedup | -dedup-perpage] [-raw] -o <path>! \vspace{1.5mm} \noindent\small\verb!cpdf -list-images[-json] in.pdf [<range>]! \vspace{1.5mm} \noindent\small\verb!cpdf -image-resolution[-json] <minimum resolution> in.pdf [<range>]! \vspace{1.5mm} \noindent\small\verb!cpdf -list-images-used[-json] in.pdf [<range>]! \vspace{1.5mm} \noindent\small\verb!cpdf -process-images [-process-images-info] in.pdf [<range>]!\\ \noindent\small\verb! [-im <filename>] [-jbig2enc <filename>]!\\ \noindent\small\verb! [-lossless-resample[-dpi] <n> | -lossless-to-jpeg <n>]!\\ \noindent\small\verb! [-jpeg-to-jpeg <n>] [-jpeg-to-jpeg-scale <n>]!\\ \noindent\small\verb! [-jpeg-to-jpeg-dpi <n>] [-1bpp-method <method>]!\\ \noindent\small\verb! [-jbig2-lossy-threshold <n>] [-pixel-threshold <n>]!\\ \noindent\small\verb! [-length-threshold <n>] [-percentage-threshold <n>]!\\ \noindent\small\verb! [-dpi-threshold <n>] [-resample-interpolate]!\\ \noindent\small\verb! -o out.pdf! \vspace{1.5mm} \noindent\small\verb!cpdf -rasterize in.pdf <range> -o out.pdf!\\ \noindent\small\verb! [-rasterize[-gray|-1bpp|-jpeg|-jpeggray]!\\ \noindent\small\verb! [-rasterize-res <n>] [-rasterize-jpeg-quality <n>]!\\ \noindent\small\verb! [-rasterize-no-antialias | -rasterize-downsample]!\\ \noindent\small\verb! [-rasterize-annots]! \vspace{1.5mm} \noindent\small\verb!cpdf -output-image in.pdf <range> -o <format>!\\ \noindent\small\verb! [-rasterize[-gray|-1bpp|-jpeg|-jpeggray]!\\ \noindent\small\verb! [-rasterize-res <n>] [-rasterize-jpeg-quality <n>]!\\ \noindent\small\verb! [-rasterize-no-antialias | -rasterize-downsample]!\\ \noindent\small\verb! [-rasterize-annots] [-tobox <BoxName>]! \end{framed} \section{Extracting images} Cpdf can extract the raster images to a given location. JPEG and JPEG2000 and lossless JBIG2 images are extracted directly. Lossy JBIG2 images are extracted likewise, but an extra \texttt{\_\_<n>} is added, giving the number of the JBIG2Global stream for this image, which is extracted as \texttt{<n>.jbig2global}. You may reconstruct the individual images with, for example, \texttt{jbig2dec}. Other images are written as PNGs, processed with either ImageMagick's ``magick'' command, or NetPBM's ``pnmtopng'' program, whichever is installed. \begin{framed} \noindent\small\verb@cpdf -extract-images in.pdf [<range>] [-im <path>] [-p2p <path]@ \noindent\small\verb@ [-dedup | -dedup-perpage] -o <path>@ \end{framed} \noindent The \texttt{-im} or \texttt{-p2p} option is used to give the path to the external tool, one of which must be installed (unless \texttt{-raw} is added, which outputs instead just JPEG or plain \texttt{.pnm} files). The output specifier, e.g \verb!-o output/%%%! gives the number format for numbering the images. Output files are named serially from 0, and include the page number too. For example, output files might be called \texttt{output/000-p1.jpg}, \texttt{output/001-p1.png}, \texttt{output/002-p3.jpg} etc. The specification \texttt{\%objnum} may also be used to insert the object number of the image. Here is an example invocation: \begin{framed} \noindent\small\verb@cpdf -extract-images in.pdf -im magick -o output/%%%@ \end{framed} \noindent The \texttt{output} directory must already exist. The \texttt{-dedup} option deduplicates images entirely; the \texttt{-dedup-perpage} option only per page. \section{Listing images} The \texttt{-list-images} operation lists all images in the file: \begin{framed} {\small\begin{verbatim} 6, 1, /Z_Im0, 3300, 2550, 13432, 1, /DeviceGray, /CCITTFaxDecode 9, 2 13 14 15, /Z_Im0, 3376, 2649, 37972, 1, /DeviceGray, /CCITTFaxDecode\end{verbatim}} \end{framed} \noindent The fields are \textit{object number, page numbers, image name, width, height, size in bytes, bits per pixel, colour space, filter (compression method)}. With \texttt{-list-images-json}, the same information is available in JSON format: \begin{framed} {\small\begin{verbatim} [ { "Object": 6, "Pages": [ 1 ], "Name": "/Z_Im0", "Width": 3300, "Height": 2550, "Bytes": 13432, "BitsPerComponent": 1, "Colourspace": "/DeviceGray", "Filter": "/CCITTFaxDecode" }, { "Object": 9, "Pages": [ 2, 13, 14, 15 ], "Name": "/Z_Im0", "Width": 3376, "Height": 2649, "Bytes": 37972, "BitsPerComponent": 1, "Colourspace": "/DeviceGray", "Filter": "/CCITTFaxDecode" } ]\end{verbatim}} \end{framed} \section{Listing images at point of use}\label{imageres} To list all images in the given range of pages which fall below a given resolution (in dots-per-inch), use the \verb!-image-resolution! function: \begin{framed} \noindent\small\verb@cpdf -image-resolution 300 in.pdf [<range>]@ \end{framed} \noindent Here is the result: \begin{framed} {\small\begin{verbatim} 2, /Im5, 531, 684, 149.935297, 150.138267, 31 2, /Im6, 184, 164, 149.999988, 150.458710, 39 2, /Im7, 171, 156, 149.999996, 150.579145, 40 2, /Im9, 65, 91, 149.999986, 151.071856, 57 2, /Im10, 94, 60, 149.999990, 152.284285, 59 2, /Im15, 184, 139, 149.960011, 150.672060, 91 4, /Im29, 53, 48, 149.970749, 151.616446, 93\end{verbatim}} \end{framed} \noindent The format is \textit{page number, image name, x pixels, y pixels, x resolution, y resolution, object number}. The resolutions refer to the image's effective resolution at point of use (taking account of scaling, rotation etc). The information is also available in JSON format: \begin{framed} {\small\begin{verbatim} [ { "Object": 240, "Page": 79, "XObject": "/Z_Im0", "W": 3326, "H": 2584, "Xdpi": 300.0, "Ydpi": 300.0 }, { "Object": 243, "Page": 80, "XObject": "/Z_Im0", "W": 3300, "H": 2550, "Xdpi": 300.0, "Ydpi": 300.0 } ] \end{verbatim}} \end{framed} \noindent To list all images regardless of resolution, use \texttt{-list-images-used} or \texttt{-list-images-used-json} instead. \section{Removing an Image} To remove a particular image, find its name using \texttt{-list-images} then apply the \texttt{-draft} and \texttt{-draft-remove-only} operations from Section \ref{draft}. \section{Processing Images} Cpdf can process images within a PDF, replacing the original with the processed version. It does this by saving out the image data, putting it through an external process, and then reading it back in and re-inserting it. This is typically used to reduce the size of image data, and thus the size of the PDF. There are a number of option to deal with lossy (e.g JPEG) and lossless images, one or more of which is specified. For example, the \texttt{-jpeg-to-jpeg} option processes existing JPEG images to a given JPEG quality level: \begin{framed} \noindent\small\verb!cpdf -process-images -im magick -jpeg-to-jpeg 65 in.pdf -o out.pdf! \end{framed} \noindent ImageMagick is required. Use \texttt{-im} to supply it. If we specify \texttt{-process-images-info} too, we can see the work being done: \begin{framed} \noindent\small\verb!cpdf -process-images -process-images-info -jpeg-to-jpeg 65!\\ \noindent\small\verb! -im magick in.pdf -o out.pdf! \end{framed} \noindent Here is sample output: \begin{framed} {\small\begin{verbatim} (20/344) Object 265 (JPEG)... JPEG to JPEG 40798 -> 33463 (82%) (38/344) Object 278 (JPEG)... JPEG to JPEG 4382 -> 3482 (79%) (87/344) Object 266 (JPEG)... JPEG to JPEG 37227 -> 30199 (81%) (243/344) Object 209 (JPEG)... no size reduction (246/344) Object 270 (JPEG)... JPEG to JPEG 202568 -> 191175 (94%) (281/344) Object 280 (JPEG)... JPEG to JPEG 12255 -> 9825 (80%) (312/344) Object 279 (JPEG)... JPEG to JPEG 4117 -> 3157 (76%) \end{verbatim}} \end{framed} \noindent Similar output appears for the other methods, when they are specified. You can see the counter of work being done, and the result for each image chosen for processing. The \texttt{-lossless-to-jpeg} option converts lossless images within PDFs to JPEG too, at the given quality level. It may be specified in addition to \texttt{-jpeg-to-jpeg}: \begin{framed} \noindent\small\verb!cpdf -process-images -jpeg-to-jpeg 65 -lossless-to-jpeg 80!\\ \noindent\small\verb! -im magick in.pdf -o out.pdf! \end{framed} \noindent Images are only processed if they meet certain thresholds. Changes to the default thresholds may be specified: \bigskip \begin{tabular}{lp{6cm}l} Option & Effect & Default value\\\hline {\small\texttt{-pixel-threshold}} & Images below this number of pixels not processed & 25 \\ {\small\texttt{-length-threshold}} & Images with less than this number of bytes of data not processed & 100 \\ {\small\texttt{-percentage-threshold}} & Results not below this percentage of original size discarded & 99 \\ {\small\texttt{-dpi-threshold}} & Only images above this threshold at all use points processed & (no dpi check) \end{tabular} \bigskip \noindent Instead of compressing lossless images with lossy JPEG compression, we can resample losslessly: \begin{framed} \noindent\small\verb!cpdf -process-images -im magick -lossless-resample 80 in.pdf -o out.pdf! \end{framed} \noindent This will resample losslessly-compressed images to be 80 percent of the original width and height. By default, there will be no interpolation. To use interpolation, which may result in slightly larger data, add \texttt{-resample-interpolate}. To use a DPI target instead, use \texttt{-lossless-resample-dpi} instead: \begin{framed} \noindent\small\verb!cpdf -process-images -im magick -lossless-resample-dpi 300!\\ \noindent\small\verb! in.pdf -o out.pdf! \end{framed} \noindent We can also use resampling with \texttt{-jpeg-to-jpeg}, buy specifying \texttt{-jpeg-to-jpeg-scale}: \begin{framed} \noindent\small\verb!cpdf -process-images -im magick -jpeg-to-jpeg 70 -jpeg-to-jpeg-scale 50!\\ \noindent\small\verb! in.pdf -o out.pdf! \end{framed} \noindent We can alternatively use a DPI target: \begin{framed} \noindent\small\verb!cpdf -process-images -im magick -jpeg-to-jpeg 70 -jpeg-to-jpeg-dpi 150!\\ \noindent\small\verb! in.pdf -o out.pdf! \end{framed} \noindent The methods so far introduced do not operate on 1 bit per pixel data. Different compression mechanisms are typically in use, and we need a different approach. The \texttt{-1bpp-method} option specifies what to do with losslessly compressed 1 bit-per-pixel images. \bigskip \begin{tabular}{lp{10cm}l} Method & Effect\\\hline {\small\texttt{JBIG2}} & Lossless JBIG2 \\ {\small\texttt{JBIG2Lossy}} & Lossy JBIG2, sharing JBIG2Globals data amongst all images. \end{tabular} \bigskip \noindent These options require the \texttt{jbig2enc} program, whose location may be specified with \texttt{-jbig2enc}. For lossy JBIG2, the threshold for similarity of data may be set with \texttt{-jbig2-lossy-threshold}. For example: \begin{framed} \noindent\small\verb!cpdf -process-images -jbig2enc jbig2enc -1bpp-method JBIG2Lossy!\\ \noindent\small\verb! -jbig2-lossy-threshold 75 in.pdf -o out.pdf! \end{framed} \noindent It is not currently possible to reprocess lossless JBIG2 into lossy JBIG2, nor is it possible to recompress into CCITT. NB: CMYK images will be converted to RGB or untouched by some of these processes. A future version of Cpdf will remove this limitation. \section{Rasterization (PDF to image conversion)} Cpdf can send individual pages of a PDF out to \texttt{gs} to rasterize them - they are then read back in and replace the original page content: \begin{framed} \noindent\small\verb!cpdf -gs gs -rasterize in.pdf -o out.pdf! \end{framed} \noindent Other metadata (for example, bookmarks) is preserved. By default, the resolution is 144dpi, and the raster data is losslessly compressed. It is the Crop Box which is rasterized, or the Media Box if absent. The following options may be added: \bigskip \noindent\begin{tabular}{lp{8cm}l} Option & Effect\\\hline {\small\texttt{-rasterize-gray}} & Use grayscale instead of colour \\ {\small\texttt{-rasterize-1bpp}} & Use monochrome instead of colour\\ {\small\texttt{-rasterize-jpeg}} & Use JPEG instead of lossless compression\\ {\small\texttt{-rasterize-jpeggray}} & Use grayscale JPEG instead of lossless compression\\ {\small\texttt{-rasterize-jpeg-quality}} & Set JPEG image quality (0..100)\\ {\small\texttt{-rasterize-res}} & Set the resolution\\ {\small\texttt{-rasterize-annots}} & Rasterize annotations instead of retaining\\ {\small\texttt{-rasterize-no-antialias}} & Turn off antialiasing\\ {\small\texttt{-rasterize-downsample}} & Use better but slower antialiasing\\ {\small\texttt{-gs-quiet}} & Don't show \texttt{gs} output\\ \end{tabular} \bigskip \noindent In addition to rasterization of pages, we can export them in PNG or JPEG format, again by the use of \texttt{gs}: \begin{framed} \noindent\small\verb!cpdf -gs gs -output-image in.pdf 10-end -o image%%%.png! \end{framed} \noindent This will extract pages 10 onwards to the files \texttt{image000.png}, \texttt{image001.png} and so on. All the options above apply, and in addition we can choose which box is rasterized: \bigskip \noindent\begin{tabular}{lp{8cm}l} Option & Effect\\\hline {\small\texttt{-tobox}} & Choose rasterization box \\ \end{tabular} \bigskip \noindent For example: \begin{framed} \noindent\small\verb!cpdf -gs gs -output-image -tobox /BleedBox -rasterize-jpeg in.pdf!\\ \noindent\small\verb! -o image%%%.jpeg! \end{framed} \ \ \ \begin{cpdflib} \clearpage \section*{C Interface} \begin{small}\tt \lstinputlisting{docsplits/splits/c14} \end{small} \end{cpdflib} \begin{pycpdflib} \clearpage \section*{Python Interface} \begin{small}\tt \lstinputlisting{docsplits/pysplits/c14} \end{small} \end{pycpdflib} \pagestyle{fancy} \begin{dotnetcpdflib} \clearpage \section*{.NET Interface} \begin{small}\tt \lstinputlisting{dotnetsplits/c14} \end{small} \end{dotnetcpdflib} \begin{jcpdflib} \clearpage \section*{Java Interface} \begin{small}\tt \lstinputlisting{javasplits/c14} \end{small} \end{jcpdflib} \begin{jscpdflib} \clearpage \section*{JavaScript Interface} \begin{small}\tt \lstinputlisting{docsplits/javascriptsplits/c14} \end{small} \end{jscpdflib} \pagestyle{empty} \thispagestyle{fancy} \chapter{Fonts}\pagestyle{fancy}\label{chap:14} {\small \begin{framed} \small\noindent\verb!cpdf -list-fonts[-json] in.pdf! \vspace{1.5mm} \noindent\verb!cpdf -print-font-table <font name> -print-font-table-page <n> in.pdf! \vspace{1.5mm} \noindent\verb!cpdf -copy-font fromfile.pdf -copy-font-page <int>!\\ \noindent\verb! -copy-font-name <name> in.pdf [<range>] -o out.pdf! \vspace{1.5mm} \noindent\verb!cpdf -remove-fonts in.pdf -o out.pdf! \vspace{1.5mm} \noindent\verb!cpdf -missing-fonts in.pdf! \vspace{1.5mm} \noindent\verb!cpdf -embed-missing-fonts -gs <path to gs> in.pdf -o out.pdf! \vspace{1.5mm} \noindent\verb!cpdf -extract-font <page number>,<pdf font name> in.pdf -o out.font! \end{framed}} \section{Listing Fonts} \index{font!listing} \label{listingfonts} The \texttt{-list-fonts} operation prints the fonts in the document, one-per-line to standard output. For example: {\small\begin{framed}\small\begin{verbatim} 1 /F245 /Type0 /Cleargothic-Bold /Identity-H 1 /F247 /Type0 /ClearGothicSerialLight /Identity-H 1 /F248 /Type1 /Times-Roman /WinAnsiEncoding 1 /F250 /Type0 /Cleargothic-RegularItalic /Identity-H 2 /F13 /Type0 /Cleargothic-Bold /Identity-H 2 /F16 /Type0 /Arial-ItalicMT /Identity-H 2 /F21 /Type0 /ArialMT /Identity-H 2 /X02 /F58 /Type1 /Times-Roman /WinAnsiEncoding 2 /F59 /Type0 /ClearGothicSerialLight /Identity-H 2 /F61 /Type0 /Cleargothic-BoldItalic /Identity-H 2 /F68 /Type0 /Cleargothic-RegularItalic /Identity-H 3 /F47 /Type0 /Cleargothic-Bold /Identity-H 3 /F49 /Type0 /ClearGothicSerialLight /Identity-H 3 /F50 /Type1 /Times-Roman /WinAnsiEncoding 3 /F52 /Type0 /Cleargothic-BoldItalic /Identity-H 3 /F54 /Type0 /TimesNewRomanPS-BoldItalicMT /Identity-H 3 /F57 /Type0 /Cleargothic-RegularItalic /Identity-H 4 /F449 /Type0 /Cleargothic-Bold /Identity-H 4 /F451 /Type0 /ClearGothicSerialLight /Identity-H 4 /F452 /Type1 /Times-Roman /WinAnsiEncoding \end{verbatim} \end{framed}} \noindent The first column gives the page number, the second the internal unique font name (or, if the font is used in a Form XObject, the path e.g \texttt{/X1/F0}), the third the type of font (Type1, TrueType etc), the fourth the PDF font name, the fifth the PDF font encoding. The information is also available in JSON format with \texttt{-list-fonts-json}: {\small\begin{framed}\small\begin{verbatim} [ { "page": 1, "name": "/F47", "subtype": "/Type1", "basefont": "/XYPLPB+NimbusSanL-Bold", "encoding": null }, { "page": 1, "name": "/F50", "subtype": "/Type0", "basefont": "/MCBERL+URWPalladioL-Roma", "encoding": "/Identity-H" } ] \end{verbatim} \end{framed}} \section{Listing characters in a font} \index{font!print table for} We can use Cpdf to find out which characters are available in a given font, and to print the map between character codes, unicode codepoints, and Adobe glyph names. This is presently a best-effort service, and does not cover all font/encoding types. We find the name of the font by using \texttt{-list-fonts}: {\small\begin{verbatim} $ ./cpdf -list-fonts cpdfmanual.pdf 1 1 /F46 /Type1 /XYPLPB+NimbusSanL-Bold 1 /F49 /Type1 /MCBERL+URWPalladioL-Roma \end{verbatim}} \noindent We may then print the table, giving either the font's name (e.g \texttt{/F46}) or basename (e.g \texttt{/XYPLPB+NimbusSanL-Bold}): {\small\begin{verbatim} $ ./cpdf -print-font-table /XYPLPB+NimbusSanL-Bold -print-font-table-page 1 cpdfmanual.pdf 67 = U+0043 (C - LATIN CAPITAL LETTER C) = /C 68 = U+0044 (D - LATIN CAPITAL LETTER D) = /D 70 = U+0046 (F - LATIN CAPITAL LETTER F) = /F 71 = U+0047 (G - LATIN CAPITAL LETTER G) = /G 76 = U+004C (L - LATIN CAPITAL LETTER L) = /L 80 = U+0050 (P - LATIN CAPITAL LETTER P) = /P 84 = U+0054 (T - LATIN CAPITAL LETTER T) = /T 97 = U+0061 (a - LATIN SMALL LETTER A) = /a 99 = U+0063 (c - LATIN SMALL LETTER C) = /c 100 = U+0064 (d - LATIN SMALL LETTER D) = /d 101 = U+0065 (e - LATIN SMALL LETTER E) = /e 104 = U+0068 (h - LATIN SMALL LETTER H) = /h 105 = U+0069 (i - LATIN SMALL LETTER I) = /i 108 = U+006C (l - LATIN SMALL LETTER L) = /l 109 = U+006D (m - LATIN SMALL LETTER M) = /m 110 = U+006E (n - LATIN SMALL LETTER N) = /n 111 = U+006F (o - LATIN SMALL LETTER O) = /o 112 = U+0070 (p - LATIN SMALL LETTER P) = /p 114 = U+0072 (r - LATIN SMALL LETTER R) = /r 115 = U+0073 (s - LATIN SMALL LETTER S) = /s 116 = U+0074 (t - LATIN SMALL LETTER T) = /t \end{verbatim}} \noindent The first column is the character code, the second the Unicode codepoint, the character itself and its Unicode name, and the third the Adobe glyph name. \section{Copying Fonts} \label{copyfont} In order to use a font other than the standard 14 with \verb!-add-text!, it must be added to the file. The font source PDF is given, together with the font's resource name on a given page, and that font is copied to all the pages in the input file's range, and then written to the output file. The font is named in the output file with its basefont name, so it can be easily used with \verb!-add-text!. For example, if the file \verb!fromfile.pdf! has a font \verb!/GHLIGA+c128! with the name \verb!/F10! on page 1 (this information can be found with \verb!-list-fonts!), the following would copy the font to the file \verb!in.pdf! on all pages, writing the output to \verb!out.pdf!: \begin{framed} \small\noindent\verb!cpdf -copy-font fromfile.pdf -copy-font-name /F10!\\ \small\noindent\verb! -copy-font-page 1 in.pdf -o out.pdf! \end{framed} \noindent Text in this font can then be added by giving \verb!-font /GHLIGA+c128!. Be aware that due to the vagaries of PDF font handling concerning which characters are present in the source font, not all characters may be available, or Cpdf may not be able to work out the conversion from UTF8 to the font's own encoding. You may add \texttt{-raw} to the command line to avoid any conversion, but the encoding (mapping from input codes to glyphs) may be non-obvious and require knowledge of the PDF format to divine. \section{Removing Fonts} \label{removefont} To remove embedded fonts from a document, use \verb!-remove-fonts!. PDF readers will substitute local fonts for the missing fonts. The use of this function is only recommended when file size is the sole consideration. \begin{framed} \small\noindent\verb!cpdf -remove-fonts in.pdf -o out.pdf! \end{framed} \section{Missing Fonts}\label{listmisingfonts} The \verb!-missing-fonts! operation lists any unembedded fonts in the document, one per line. \begin{framed} \small\noindent\verb!cpdf -missing-fonts in.pdf! \end{framed} \noindent The format is \begin{framed} \small\noindent\verb!Page number, Name, Subtype, Basefont, Encoding! \end{framed} \noindent The operation \texttt{-embed-missing-fonts} will process the file with \texttt{gs} (which must be installed) to embed missing fonts (where found): \begin{framed} \small\noindent\verb!cpdf -embed-missing-fonts -gs gs in.pdf -o out.pdf! \end{framed} \noindent\textit{Note: putting a PDF file through \texttt{gs} in this manner may not be lossless: some metadata may not be preserved.} \section{Extracting Fonts} We may extract a font file by giving the page number and the PDF font resource name, as printed by \texttt{-list-fonts} or \texttt{-list-fonts-json}. For example, for the TrueType font \texttt{/F50} on page 5: \begin{framed} \small\noindent\verb!cpdf -extract-font 5,/F50 in.pdf -o out.ttf! \end{framed} \ \ \ \begin{cpdflib} \clearpage \section*{C Interface} \begin{small}\tt \lstinputlisting{docsplits/splits/c15} \end{small} \end{cpdflib} \begin{pycpdflib} \clearpage \section*{Python Interface} \begin{small}\tt \lstinputlisting{docsplits/pysplits/c15} \end{small} \end{pycpdflib} \begin{dotnetcpdflib} \clearpage \section*{.NET Interface} \begin{small}\tt \lstinputlisting{dotnetsplits/c15} \end{small} \end{dotnetcpdflib} \begin{jcpdflib} \clearpage \section*{Java Interface} \begin{small}\tt \lstinputlisting{javasplits/c15} \end{small} \end{jcpdflib} \begin{jscpdflib} \clearpage \section*{JavaScript Interface} \begin{small}\tt \lstinputlisting{docsplits/javascriptsplits/c15} \end{small} \end{jscpdflib} \chapter{PDF and JSON}\label{chap:15}\pagestyle{fancy}\index{JSON}\index{JSON!output to}\index{JSON!input from} {\small\begin{framed} \noindent\verb!cpdf in.pdf -output-json -o out.json!\\ \noindent\verb! [-output-json-parse-content-streams]!\\ \noindent\verb! [-output-json-no-stream-data]!\\ \noindent\verb! [-output-json-decompress-streams]!\\ \noindent\verb! [-output-json-clean-strings]!\\ \noindent\verb! [-utf8]! \vspace{1.5mm} \noindent\verb!cpdf -j in.json -o out.pdf! \end{framed}} \label{cpdfjson} In addition to reading and writing PDF files in the original Adobe format, Cpdf can read and write them in its own CPDFJSON format, for somewhat easier extraction of information, modification of PDF files, and so on. \section{Converting PDF to JSON} We convert a PDF file to JSON format like this: \begin{framed} \small\noindent\verb!cpdf -output-json in.pdf -o out.json! \end{framed} \noindent The resultant JSON file is an array of arrays containing an object number followed by an object, one for each object in the file and two special ones: \begin{itemize} \item Object -1: Cpdf's own data with the PDF version number, CPDF JSON format number, and flags used when writing (which may be required when reading): \begin{itemize} \item \texttt{/CPDFJSONformatversion} (CPDFJSON integer (see below), currently 3) \item \texttt{/CPDFJSONcontentparsed} (boolean, true if content streams have been parsed) \item \texttt{/CPDFJSONstreamdataincluded} (boolean, true if stream data included. Cannot round-trip if false). \item \texttt{/CPDFJSONmajorpdfversion} (CPDFJSON integer) \item \texttt{/CPDFJSONminorpdfversion} (CPDFJSON integer) \end{itemize} \item Object 0: The PDF's trailer dictionary \item Objects 1..n: The PDF's objects. \end{itemize} \noindent Objects are formatted thus: \begin{itemize} \item PDF arrays, dictionaries, booleans, and strings are the same as in JSON. \item Integers are written as \texttt{\{"I":\ 0\}} \item Floats are written as \texttt{\{"F":\ 0.0\}} \item Names are written as \texttt{\{"N":\ "/Pages"\}} \item Indirect references are integers \item Streams are \texttt{\{"S":\ [dict, data]\}} \item Strings are converted to JSON string format in a way which, when reversed, results in the original string. For best results when editing files, use the \texttt{-utf8} option. The string representation is again reversible, but easier to edit. Unicode strings are written as \texttt{\{"U":\ "the text"\}}. \end{itemize} \noindent Here is an example of the output for a small PDF: {\small\begin{verbatim} [ [ -1, { "/CPDFJSONformatversion": { "I": 2 }, "/CPDFJSONcontentparsed": false, "/CPDFJSONstreamdataincluded": true, "/CPDFJSONmajorpdfversion": { "I": 1 }, "/CPDFJSONminorpdfversion": { "I": 1 } } ], [ 0, { "/Size": { "I": 4 }, "/Root": 4, "/ID" : [ <elided>, <elided>] } ], [ 1, { "/Type": { "N": "/Pages" }, "/Kids": [ 3 ], "/Count": { "I": 1 } } ], [ 2, {"S": [{ "/Length": { "I": 49 } }, "1 0 0 1 50 770 cm BT/F0 36 Tf(Hello, World!)Tj ET"] } ], [ 3, { "/Type": { "N": "/Page" }, "/Parent": 1, "/Resources": { "/Font": { "/F0": { "/Type": { "N": "/Font" }, "/Subtype": { "N": "/Type1" }, "/BaseFont": { "N": "/Times-Italic" } } } }, "/MediaBox": [{ "I": 0 }, { "I": 0 }, { "F": 595.2755905510001 }, { "F": 841.88976378 }], "/Rotate": { "I": 0 }, "/Contents": [ 2 ] } ], [ 4, { "/Type": { "N": "/Catalog" }, "/Pages": 1 } ] ]\end{verbatim}} \noindent The option \texttt{-output-json-parse-content-streams} will also convert content streams to JSON, so our example content stream will be expanded: {\small\begin{verbatim} 2, { "S": [ {}, [ [ { "F": 1.0 }, { "F": 0.0 }, { "F": 0.0 }, { "F": 1.0 }, { "F": 50.0 }, { "F": 770.0 }, "cm" ], [ "BT" ], [ "/F0", { "F": 36.0 }, "Tf" ], [ "Hello, World!", "Tj" ], [ "ET" ] ] ] } ] \end{verbatim}} \noindent The option \texttt{-output-json-no-stream-data} simply elides the stream data instead, leading to much smaller JSON files. But these may not be round-tripped back into PDF, of course. The option \texttt{-output-json-decompress-streams} keeps the streams intact, and decompresses them. The option \texttt{-output-json-clean-strings} converts any UTF16BE strings with no high bytes to PDFDocEncoding prior to output, so that editing them is easier. \textit{Note: this is deprecated as of version 2.6 in favour of \texttt{\textup{-utf8}}}. \section{Converting JSON to PDF} We can load a JSON PDF file with the \texttt{-j} option in place of a PDF file anywhere in a normal Cpdf command. A range may be applied, just like any other file. \begin{framed} \small\noindent\verb!cpdf -j in.json -o out.pdf! \end{framed} \noindent It is not required that \texttt{/Length} entries in CPDFJSON stream dictionaries be correctly updated when the JSON file is edited: Cpdf will fix them when loading. \begin{cpdflib} \clearpage \section*{C Interface} \begin{small}\tt \lstinputlisting{docsplits/splits/c16} \end{small} \end{cpdflib} \begin{pycpdflib} \clearpage \section*{Python Interface} \begin{small}\tt \lstinputlisting{docsplits/pysplits/c16} \end{small} \end{pycpdflib} \begin{dotnetcpdflib} \clearpage \section*{.NET Interface} \begin{small}\tt \lstinputlisting{dotnetsplits/c16} \end{small} \end{dotnetcpdflib} \begin{jcpdflib} \clearpage \section*{Java Interface} \begin{small}\tt \lstinputlisting{javasplits/c16} \end{small} \end{jcpdflib} \begin{jscpdflib} \clearpage \section*{JavaScript Interface} \begin{small}\tt \lstinputlisting{docsplits/javascriptsplits/c16} \end{small} \end{jscpdflib} \clearpage\pagestyle{empty} \chapter{Optional Content Groups}\label{chap:16}\pagestyle{fancy}\index{optional content group} {\small\begin{framed} \noindent\verb!cpdf -ocg-list in.pdf! \vspace{1.5mm} \noindent\verb!cpdf -ocg-rename -ocg-rename-from <a> -ocg-rename-to <b> in.pdf -o out.pdf! \vspace{1.5mm} \noindent\verb!cpdf -ocg-order-all in.pdf -o out.pdf! \vspace{1.5mm} \noindent\verb!cpdf -ocg-coalesce-on-name in.pdf -o out.pdf! \end{framed}} In a PDF file, optional content groups are used to group graphical elements together, so they may appear or not, depending on the preference of the user. They are similar in some ways to layers in graphics illustration programs. {\small\begin{framed} \noindent\verb!cpdf -ocg-list in.pdf! \end{framed}} \noindent List the optional content groups in the PDF, one per line, to standard output. UTF8. {\small\begin{framed} \noindent\verb!cpdf -ocg-rename -ocg-rename-from <a> -ocg-rename-to <b> in.pdf -o out.pdf! \end{framed}} \noindent Rename an optional content group. {\small\begin{framed} \noindent\verb!cpdf -ocg-coalesce-on-name in.pdf -o out.pdf! \end{framed}} \noindent Coalesce optional content groups. For example, if we merge or stamp two files both with an OCG called "Layer 1", we will have two different optional content groups. Running \texttt{-ocg-coalesce-on-name} will merge the two into a single optional content group. {\small\begin{framed} \noindent\verb!cpdf -ocg-order-all in.pdf -o out.pdf! \end{framed}} \noindent Ensure that every optional content group appears in the order list. \begin{cpdflib} \clearpage \section*{C Interface} \begin{small}\tt \lstinputlisting{docsplits/splits/c17} \end{small} \end{cpdflib} \begin{pycpdflib} \clearpage \section*{Python Interface} \begin{small}\tt \lstinputlisting{docsplits/pysplits/c17} \end{small} \end{pycpdflib} \begin{dotnetcpdflib} \clearpage \section*{.NET Interface} \begin{small}\tt \lstinputlisting{dotnetsplits/c17} \end{small} \end{dotnetcpdflib} \begin{jcpdflib} \clearpage \section*{Java Interface} \begin{small}\tt \lstinputlisting{javasplits/c17} \end{small} \end{jcpdflib} \begin{jscpdflib} \clearpage \section*{JavaScript Interface} \begin{small}\tt \lstinputlisting{docsplits/javascriptsplits/c17} \end{small} \end{jscpdflib} \clearpage\pagestyle{empty} \chapter{Creating New PDFs}\label{chap:17}\pagestyle{fancy}\index{Create} {\small\begin{framed} \noindent\verb!cpdf -create-pdf [-create-pdf-pages <n>]!\\ \noindent\verb! [-create-pdf-papersize <paper size>] -o out.pdf! \vspace{1.5mm} \noindent\verb!cpdf -typeset <text file> [-create-pdf-papersize <size>]!\\ \noindent\verb! [-font <font>] [-font-size <size>]!\\ \noindent\verb! [-subformat <subformat>] [-title <string>] -o out.pdf! \vspace{1.5mm} \noindent\verb!cpdf [-subformat <subformat>] [-title <string>] -jpeg <filename>!\\ \noindent\verb! -o out.pdf! \vspace{1.5mm} \noindent\verb!cpdf [-subformat <subformat>] [-title <string>] -png <filename>!\\ \noindent\verb! -o out.pdf! \vspace{1.5mm} \noindent\verb!cpdf [-subformat <subformat>] [-title <string>] -jpeg2000 <filename>!\\ \noindent\verb! -o out.pdf! \vspace{1.5mm} \noindent\verb!cpdf [-subformat <subformat>] [-title <string>]!\\ \noindent\verb! [-jbig2-global <filename>] -jbig2 <filename>!\\ \noindent\verb! [-jbig2-global | -jbig2-global-clear]!\\ \noindent\verb! [-jbig2 <filename>] ...!\\ \noindent\verb! -o out.pdf! \end{framed}} \section{A new blank PDF} \index{create new PDF} We can build a new PDF file, given a number of pages and a paper size. The default is one page, A4 portrait. \begin{framed} \noindent\small\verb?cpdf -create-pdf -create-pdf-pages 20?\\ \noindent\small\verb? -create-pdf-papersize usletterportrait -o out.pdf? \end{framed} \noindent The standard paper sizes are listed in Section \ref{papersizes}, or you may specify the width and height directly, as described in the same chapter. To build new PDF/UA files, see \texttt{-create-pdf-ua-1} and \texttt{-create-pdf-ua-2} in chapter \ref{chap:19}. \section{Convert a text file to PDF} \index{text!convert to PDF} A basic text to PDF convertor is included in Cpdf. It takes a UTF8 text file (ASCII is a subset of UTF8) and typesets it ragged-right, splitting on whitespace. Both Windows and Unix line endings are allowed. \begin{framed} \noindent\small\verb?cpdf -typeset file.txt -create-pdf-papersize a3portrait?\\ \noindent\small\verb? -font Courier -font-size 10 -o out.pdf? \end{framed} \noindent The standard paper sizes are listed in Section \ref{papersizes}, or you may specify the width and height directly, as described in the same chapter. The font may be specified as described in Section \ref{fonts}. The default font is Times-Roman and the default size is 12. To produce a PDF in PDF/UA-1 or PDF/UA-2 format add, say, \texttt{-subformat PDF/UA-2 -title "Thesis"} to the command line. \section{Make a PDF from a PNG, JPEG or JPEG2000 image} \index{image!convert to PDF} Simple facilities for making PDFs from PNG and JPEG images are included in Cpdf. The resulting file can be written out, or used for further operations. For PNG files, the file must have no transparency and no interlacing, and must not be palletised: \begin{framed} \noindent\small\verb?cpdf -png image.png -o out.pdf?\\ \noindent\small\verb?cpdf image.png AND -add-text "My Image" -o out.pdf? \end{framed} \noindent Notice that the \texttt{-png} can be omitted if your file has a standard file extension. Almost any JPEG file may be used with \texttt{-jpeg} or again, with a \texttt{-jpg} or \texttt{-jpeg} extension: \begin{framed} \noindent\small\verb?cpdf -jpeg image.jpg -o out.pdf? \end{framed} \noindent JPEG2000 images may be used similarly, with \texttt{-jpeg2000} or alone with a \texttt{jp2}, \texttt{jpx} or \texttt{jpf} extension: \begin{framed} \noindent\small\verb?cpdf -jpeg2000 image.jp2 -o out.pdf? \end{framed} \noindent The output file will have one point of width or height for each pixel in the input. To produce a PDF in PDF/UA-1 or PDF/UA-2 format add, say, \texttt{-subformat "PDF/UA-2" -title "Opus"} to the command line. NB this must appear before the image file on the command line. \section{Make a PDF from one or more JBIG2 images} Cpdf can build multi-pages files from one or more PDF-appropriate JBIG2 fragments, prepared by the \texttt{jbig2enc} program. In lossless mode, there is one JBIG2 fragment for each page: \begin{framed} \noindent\small\verb?cpdf -jbig2 1.jbig2 -jbig2 2.jbig2 -jbig2 3.jbig2 -o out.pdf? \end{framed} \noindent This produces a PDF of three pages. In lossy mode, a JBIG2Globals stream can be added, which contains shared data for several pages: \begin{framed} \noindent\small\verb?cpdf -jbig2-global 0.jbig2globals?\\ \noindent\small\verb! -jbig2 1.jbig2 -jbig2 2.jbig2 -jbig2 3.jbig2 -o out.pdf! \end{framed} \noindent The \texttt{-jbig2-global} option may be used to change the JBIG2Globals stream in use. The \texttt{-jbig2-global-clear} option may be used to cease use of a globals stream and return to lossless mode. To produce a PDF in PDF/UA-1 or PDF/UA-2 format add, say, \texttt{-subformat PDF/UA-2 -title "Opus"} to the command line. \begin{cpdflib} \clearpage \section*{C Interface} \begin{small}\tt \lstinputlisting{docsplits/splits/c18} \end{small} \end{cpdflib} \begin{pycpdflib} \clearpage \section*{Python Interface} \begin{small}\tt \lstinputlisting{docsplits/pysplits/c18} \end{small} \end{pycpdflib} \begin{dotnetcpdflib} \clearpage \section*{.NET Interface} \begin{small}\tt \lstinputlisting{dotnetsplits/c18} \end{small} \end{dotnetcpdflib} \begin{jcpdflib} \clearpage \section*{Java Interface} \begin{small}\tt \lstinputlisting{javasplits/c18} \end{small} \end{jcpdflib} \begin{jscpdflib} \clearpage \section*{JavaScript Interface} \begin{small}\tt \lstinputlisting{docsplits/javascriptsplits/c18} \end{small} \end{jscpdflib} \clearpage\pagestyle{empty} \chapter{Drawing on PDFs}\label{chap:18}\pagestyle{fancy}\index{Draw} \index{draw!on PDF}\index{path}\index{graphics stack}\index{XObject}\index{text!drawing} {\small\begin{framed} \noindent\verb!cpdf in.pdf [<range>] [-draw-struct-tree] [-underneath]!\\ \noindent\verb! -draw <draw operations> -o out.pdf!\\ \noindent\verb!cpdf -text-width <text> [-font <font>] [-fontsize <fontsize>]!\\ \vspace{1.5mm} \noindent \textsc{Building and showing paths}\\ \noindent\verb!-rect! Draw rectangle\\ \noindent\verb!-to! Move to\\ \noindent\verb!-line! Add line to path\\ \noindent\verb!-bez! Add Bezier curve to path\\ \noindent\verb!-bez23! Add Bezier curve to path\\ \noindent\verb!-bez13! Add Bezier curve to path\\ \noindent\verb!-circle! Add circle to path\\ \noindent\verb!-stroke! Stroke path\\ \noindent\verb!-fill! Fill path\\ \noindent\verb!-filleo! Fill path, even odd\\ \noindent\verb!-strokefill! Stroke and fill path\\ \noindent\verb!-strokefilleo! Stroke and fill path, even odd\\ \noindent\verb!-close! Close path\\ \vspace{1.5mm} \noindent \textsc{Clipping with paths}\\ \noindent\verb!-clip! Clip\\ \noindent\verb!-clipeo! Clip, even odd\\ \vspace{1.5mm} \noindent \textsc{Path parameters}\\ \noindent\verb!-strokecol! Set stroke colour\\ \noindent\verb!-fillcol! Set fill colour\\ \noindent\verb!-thick! Set stroke thickness\\ \noindent\verb!-cap! Set cap\\ \noindent\verb!-join! Set join\\ \noindent\verb!-miter! Set miter limit\\ \noindent\verb!-dash! Set dash pattern\\ \vspace{1.5mm} \noindent \textsc{The graphics stack and matrices}\\ \noindent\verb!-push! Push graphics stack\\ \noindent\verb!-pop! Pop graphics stack\\ \noindent\verb!-matrix! Append to graphics matrix\\ \noindent\verb!-mtrans! Translate the graphics matrix\\ \noindent\verb!-mrot! Rotate the graphics matrix\\ \noindent\verb!-mscale! Scale the graphics matrix\\ \noindent\verb!-mshearx! Shear the graphics matrix in X\\ \noindent\verb!-msheary! Shear the graphics matrix in Y\\ \vspace{1.5mm} \noindent \textsc{Re-use with XObjects}\\ \noindent\verb!-xobj-bbox! Specify the bounding box for xobjects\\ \noindent\verb!-xobj! Begin saving a sequence of graphics operators\\ \noindent\verb!-end-xobj! End saving a sequence of graphics operators\\ \noindent\verb!-use! Use a saved sequence of graphics operators\\ \vspace{1.5mm} \noindent \textsc{Images}\\ \noindent\verb!-draw-jpeg! Load a JPEG from file and name it\\ \noindent\verb!-draw-png! Load a PNG from file and name it\\ \noindent\verb!-image! Draw an image which has already been loaded\\ \vspace{1.5mm} \noindent \textsc{Transparency}\\ \noindent\verb!-fill-opacity! Set opacity\\ \noindent\verb!-stroke-opacity! Set stroke opacity\\ \vspace{1.5mm} \noindent \textsc{Text}\\ \noindent\verb!-bt! Begin text\\ \noindent\verb!-et! End text\\ \noindent\verb!-text! Draw text\\ \noindent\verb!-stext! Draw text with \%specials\\ \noindent\verb!-para! Typeset a paragraph\\ \noindent\verb!-paras! Typeset multiple paragraphs\\ \noindent\verb!-leading! Set leading\\ \noindent\verb!-charspace! Set character spacing\\ \noindent\verb!-wordspace! Set word space\\ \noindent\verb!-textscale! Set text scale\\ \noindent\verb!-rendermode! Set text rendering mode\\ \noindent\verb!-rise! Set text rise\\ \noindent\verb!-nl! New line\\ \vspace{1.5mm} \noindent \textsc{The next page}\\ \noindent\verb!-newpage! Move to a fresh page\\ \vspace{1.5mm} \noindent \textsc{Structure Information}\\ \noindent\verb!-draw-struct-tree! Add structure information\\ \noindent\verb!-tag! Begin marked content\\ \noindent\verb!-end-tag! End marked content\\ \noindent\verb!-stag! Begin structure tree branch\\ \noindent\verb!-end-stag! End structure tree branch\\ \noindent\verb!-auto-tags! Automatically tag paragraphs and images\\ \noindent\verb!-no-auto-tags! Refrain from automatically tagging paragraphs and images\\ \noindent\verb!-artifact! Begin manual artifact\\ \noindent\verb!-end-artifact! End manual artifact\\ \noindent\verb!-no-auto-artifacts! Prevent automatic addition of artifacts during postprocessing\\ \noindent\verb!-namespace! Set the namespace for future branches of the tree\\ \noindent\verb!-eltinfo! Set element information\\ \noindent\verb!-end-eltinfo! Erase element information\\ \noindent\verb!-rolemap! Set role map \end{framed}} \section{Basics} We can draw on an existing PDF (or a new one created with \texttt{-create-pdf} from the previous chapter) using the \texttt{-draw} operation. This provides commands for drawing vector graphics, simple text and adding images. For example: \begin{framed} \noindent\small\verb?cpdf -create-pdf AND -draw -bt -text Hello -et -o out.pdf?\\ \noindent\small\verb?cpdf in.pdf -draw -bt -text Hello -et -o out.pdf? \end{framed} \noindent The first example builds a new A4 portrait PDF with one page, and writes Hello in the default 12pt Times Roman font at the bottom left. The second does the same, but for every page of an existing PDF. \section{Building and showing paths} {\small\begin{framed} \noindent\verb!-rect "x y w h"! Draw rectangle\\ \noindent\verb!-to "x y"! Move to\\ \noindent\verb!-line "x y"! Add line to path\\ \noindent\verb!-bez "x1 y1 x2 y2 x3 y3"! Add Bezier curve to path\\ \noindent\verb!-bez23 "x2 y2 x3 y3"! Add Bezier curve to path\\ \noindent\verb!-bez13 "x1 y1 x3 y3"! Add Bezier curve to path\\ \noindent\verb!-circle "x y r"! Add circle to path\\ \noindent\verb!-stroke! Stroke path\\ \noindent\verb!-fill! Fill path\\ \noindent\verb!-filleo! Fill path, even odd\\ \noindent\verb!-strokefill! Stroke and fill path\\ \noindent\verb!-strokefilleo! Stroke and fill path, even odd\\ \noindent\verb!-close! Close path \end{framed}} \noindent To draw line art, we build paths and then stroke or fill them. For example: \begin{framed} \noindent\small\verb?cpdf -create-pdf AND -draw -to "100 100" -line "400 400" -stroke?\\ \noindent\small\verb? -line "400 100" -line "100 100" -stroke?\\ \noindent\small\verb? -o out.pdf? \end{framed} \noindent We use \texttt{-to} to start the path at a given coordinate, \texttt{-line} to extend the path with each line, and then \texttt{-stroke} to stroke the path. Coordinates in a PDF file have the origin $(0, 0)$ at the bottom-left of the page. All units are in points (1/72 inch). This creates the following PDF: \bigskip \ifdefined\HCode \fbox{\includegraphics[natwidth=298,natheight=421,alt={A single line}]{manualimages/line.pdf}} \else \fbox{\includegraphics[width=0.3\textwidth,alt={A single line}]{manualimages/line.pdf}} \fi \bigskip \noindent Alternatively, we may use \texttt{-close} to draw the final line back to the starting point: \begin{framed} \noindent\small\verb?cpdf -create-pdf AND -draw -to "100 100" -line "400 400"?\\ \noindent\small\verb? -line "400 100" -close -stroke?\\ \noindent\small\verb? -o out.pdf? \end{framed} \noindent We can have multiple such subpaths in a path, by closing and carrying on. We can fill our path with \texttt{-fill}: \begin{framed} \noindent\small\verb?cpdf -create-pdf AND -draw -to "100 100" -line "400 400"?\\ \noindent\small\verb? -line "400 100" -close -fill?\\ \noindent\small\verb? -o out.pdf? \end{framed} \noindent Now we have a filled triangle: \bigskip \ifdefined\HCode \fbox{\includegraphics[natwidth=298,natheight=421,alt={A filled triangle}]{manualimages/fill.pdf}} \else \fbox{\includegraphics[width=0.3\textwidth,alt={A filled triangle}]{manualimages/fill.pdf}} \fi \bigskip \noindent The operations \texttt{-filleo}, \texttt{-strokefill} and \texttt{-strokefilleo} provide alternative combinations of stroke, fill, and winding rule. We can save time when drawing rectangles by using the \texttt{-rect} operation, which takes the lower left coordinate, width and height. There is no need to explicitly close the rectangle. \begin{framed} \noindent\small\verb?cpdf -create-pdf AND -draw -rect "200 300 200 300" -stroke?\\ \noindent\small\verb? -o out.pdf? \end{framed} \noindent We can build bezier curves using \texttt{-bez}, \texttt{-bez23} and \texttt{-bez13}. The first adds a bezier path using six coordinates - for the control points first, and then for the end point (the start point is the current coordinate): \begin{framed} \noindent\small\verb?cpdf -create-pdf AND -draw -to "100 100" -bez "400 600 600 400 300 300"?\\ \noindent\small\verb? -stroke -o out.pdf? \end{framed} \noindent Here is the result: \bigskip \ifdefined\HCode \fbox{\includegraphics[natwidth=298,natheight=421,alt={A bezier line}]{manualimages/bez.pdf}} \else \fbox{\includegraphics[width=0.3\textwidth,alt={A bezier line}]{manualimages/bez.pdf}} \fi \bigskip \noindent The operation \texttt{-bez23} is a shorthand used when the first control point is equal to the current point. The operation \texttt{-bez13} is a shorthand used when the second control point is equal to the final point. To avoid calculating the Bezier curves for a circle manually, Cpdf can generate them automatically when given the centre and radius: \begin{framed} \noindent\small\verb?cpdf -create-pdf AND -draw -circle "200 200 100"?\\ \noindent\small\verb? -stroke -o out.pdf? \end{framed} \section{Clipping with paths} {\small\begin{framed} \noindent\verb!-clip! Clip\\ \noindent\verb!-clipeo! Clip, even odd \end{framed}} \noindent We can use a path to form a clipping region for subsequent content using \texttt{-clip} or \texttt{-clipeo}. For example: \begin{framed} \noindent\small\verb?cpdf -create-pdf AND -draw -circle "300 300 100" -clip?\\ \noindent\small\verb? -circle "300 350 100" -fill -o out.pdf? \end{framed} \noindent Here is the result: \bigskip \ifdefined\HCode \fbox{\includegraphics[natwidth=298,natheight=421,alt={One circle clipped to another}]{manualimages/clip.pdf}} \else \fbox{\includegraphics[width=0.3\textwidth,alt={One circle clipped to another}]{manualimages/clip.pdf}} \fi \bigskip \section{Path parameters} {\small\begin{framed} \noindent\verb!-strokecol "g" | "r g b" | "c y m k" | <namedcolour>! Set stroke colour\\ \noindent\verb!-fillcol "g" | "r g b" | "c y m k" | <namedcolour>! Set fill colour\\ \noindent\verb!-thick <n>! Set stroke thickness\\ \noindent\verb!-cap butt | round | square! Set cap\\ \noindent\verb!-join miter | round | bevel! Set join\\ \noindent\verb!-miter <n>! Set miter limit\\ \noindent\verb!-dash <pattern>! Set dash pattern \end{framed}} We can set stroke and fill colours for our paths, either as greyscale (one component), RGB (three components) or CMYK (four components), or by naming a colour as described in Chapter 8: \begin{framed} \noindent\small\verb?cpdf -create-pdf AND -draw -circle "200 200 100" -thick 20?\\ \noindent\small\verb? -strokecol 0.5 -fillcol "0.2 0.7 0.2" -strokefill -o out.pdf? \end{framed} \noindent Here is the result: \bigskip \ifdefined\HCode \fbox{\includegraphics[natwidth=298,natheight=421,alt={Stroke and fill colours}]{manualimages/colfill.pdf}} \else \fbox{\includegraphics[width=0.3\textwidth,alt={Stroke and fill colours}]{manualimages/colfill.pdf}} \fi \bigskip \noindent We can set line caps and joins with \texttt{-cap}, \texttt{-join}: \begin{framed} \noindent\small\verb?cpdf -create-pdf AND -draw -to "100 100"?\\ \noindent\small\verb? -join round -cap round -thick 40?\\ \noindent\small\verb? -line "200 200" -line "220 100" -stroke?\\ \noindent\small\verb? -o out.pdf? \end{framed} \noindent Then we see: \bigskip \ifdefined\HCode \fbox{\includegraphics[natwidth=298,natheight=421,alt={Caps and joins}]{manualimages/capjoins.pdf}} \else \fbox{\includegraphics[width=0.3\textwidth,alt={Caps and joins}]{manualimages/capjoins.pdf}} \fi \bigskip \noindent The miter limit (see PDF reference for details) may be set with \texttt{-miter}. Lines may have dash patterns. A dash pattern consists of one or more numbers. All save the last form the list of dash lengths and gap lengths. The last is the phase, which defines how far along the pattern we start. For example, using a dash pattern of "30 20 0" i.e black 30, white 20, phase 0: \begin{framed} \noindent\small\verb?cpdf -create-pdf AND -draw -to "100 100"?\\ \noindent\small\verb? -dash "30 20 0" -thick 20 -line "400 300" -stroke?\\ \noindent\small\verb? -o out.pdf? \end{framed} \noindent Here is the result: \bigskip \ifdefined\HCode \fbox{\includegraphics[natwidth=298,natheight=421,alt={Dash patterns}]{manualimages/dash.pdf}} \else \fbox{\includegraphics[width=0.3\textwidth,alt={Dash patterns}]{manualimages/dash.pdf}} \fi \bigskip \section{The graphics stack and matrices} {\small\begin{framed} \noindent\verb!-push! Push graphics stack\\ \noindent\verb!-pop! Pop graphics stack\\ \noindent\verb!-matrix "a b c d e f"! Append to graphics matrix\\ \noindent\verb!-mtrans "tx ty"! Translate the graphics matrix\\ \noindent\verb!-mrot "x y a"! Rotate the graphics matrix counterclockwise around \texttt{(x, y)} by angle \texttt{a} in radians\\ \noindent\verb!-mscale "x y sx sy"! Scale the graphics matrix around \texttt{(x, y)}\\ \noindent\verb!-mshearx "x y a"! Shear the graphics matrix in X around \texttt{(x, y)} by angle \texttt{a}\\ \noindent\verb!-msheary "x y a"! Shear the graphics matrix in Y around \texttt{(x, y)} by angle \texttt{a} \end{framed}} PDF maintains a stack of graphics state, which we can manipulate with \texttt{-push} which stores the current state, then modify the state for our own purposes, and then use \texttt{-pop} to restore the previous state. Such invocations may be nested. Here is a simple example: \begin{framed} \noindent\small\verb?cpdf -create-pdf AND -draw -circle "200 200 100" -fillcol red -fill?\\ \noindent\small\verb? -push -fillcol blue -circle "300 300 100" -fill?\\ \noindent\small\verb? -pop -circle "400 400 100" -fill -o out.pdf? \end{framed} \noindent When we use \texttt{-pop} the colour returns to the saved one: \bigskip \ifdefined\HCode \fbox{\includegraphics[natwidth=298,natheight=421,alt={Push and pop}]{manualimages/pop.pdf}} \else \fbox{\includegraphics[width=0.3\textwidth,alt={Push and pop}]{manualimages/pop.pdf}} \fi \bigskip \noindent One very common use for a \texttt{-push}/\texttt{-pop} pair is to isolate the effects of an operation which modifies the current transformation matrix. These operations are used to translate, rotate, scale and so on. For example: \begin{framed} \noindent\small\verb?cpdf -create-pdf AND -draw -circle "200 200 100" -stroke -push?\\ \noindent\small\verb? -mrot "0 0 -0.3" -mscale "0 0 1.5 2" -circle "200 200 100" -stroke?\\ \noindent\small\verb? -pop -circle "200 200 50" -fill -o out.pdf? \end{framed} \noindent This is the result. See how the graphics transformation is undone when \texttt{-push} is invoked: \bigskip \ifdefined\HCode \fbox{\includegraphics[natwidth=298,natheight=421,alt={Altering the graphics matrix}]{manualimages/matrix.pdf}} \else \fbox{\includegraphics[width=0.3\textwidth,alt={Altering the graphics matrix}]{manualimages/matrix.pdf}} \fi \bigskip \noindent This is important because, in the absence of \texttt{-push} and \texttt{-pop} there would be no way to reverse the effect of a graphics matrix modification except to manually calculate its inverse and apply it. NB: When writing text (see below) the \texttt{-font} option is not subject to \texttt{-push} and \texttt{-pop}. Text is set the the font most recently chosen on the command line. \section{Re-use with XObjects} {\small\begin{framed} \vspace{1.5mm} \noindent\verb!-xobj-bbox "x y w h"! Specify the bounding box for xobjects\\ \noindent\verb!-xobj <name>! Begin saving a sequence of graphics operators\\ \noindent\verb!-end-xobj! End saving a sequence of graphics operators\\ \noindent\verb!-use <name>! Use a saved sequence of graphics operators \end{framed}} In our examples, we have sometimes had to write the same operations multiple times. To avoid this, PDF has a mechanism called an XObject. This allows us to save a set of operations for re-use in different contexts, or on different pages. For example, here we store an XObject which just strokes a circle. We then \texttt{-use} it once, and alter the colour and transformation matrix and \texttt{-use} it again. \begin{framed} \noindent\small\verb?cpdf -create-pdf AND -draw -xobj-bbox "0 0 200 200" -xobj A?\\ \noindent\small\verb? -circle "100 100 50" -stroke -end-xobj?\\ \noindent\small\verb? -use A -strokecol red -mtrans "20 20" -use A -o out.pdf? \end{framed} \noindent Note that we must specify a bounding box for the XObject with \texttt{-xobj-bbox}. Here is the result: \bigskip \ifdefined\HCode \fbox{\includegraphics[natwidth=298,natheight=421,alt={An Xobject}]{manualimages/xobj.pdf}} \else \fbox{\includegraphics[width=0.3\textwidth,alt={An XObject}]{manualimages/xobj.pdf}} \fi \bigskip \noindent XObjects may be nested. \section{Images} {\small\begin{framed} \noindent\verb!-draw-jpeg <name>=<filename>! Load a JPEG from file and name it\\ \noindent\verb!-draw-png <name>=<filename>! Load a PNG from file and name it\\ \noindent\verb!-image <name>! Draw an image which has already been loaded \end{framed}} We can include a 24bit non-transparent and non-interlaced PNG, or any JPEG by using \texttt{-draw-jpeg} or \texttt{-draw-png} to load it and assign it a name. We can then use \texttt{-image} to use it at any point: \begin{framed} \noindent\small\verb?cpdf -create-pdf AND -draw -draw-png A=sheet.png?\\ \noindent\small\verb? -mscale "0 0 400 294" -image A -o out.pdf? \end{framed} \noindent Here is the result: \bigskip \ifdefined\HCode \fbox{\includegraphics[natwidth=298,natheight=421,alt={Drawing a PNG on a PDF}]{manualimages/png.pdf}} \else \fbox{\includegraphics[width=0.3\textwidth,alt={Drawing a PNG on a PDF}]{manualimages/png.pdf}} \fi \bigskip \noindent You can see we had to scale by the width and height of the image to draw it at the size we expect. \section{Transparency} {\small\begin{framed} \noindent\verb!-fill-opacity <n>! Set opacity\\ \noindent\verb!-stroke-opacity <n>! Set stroke opacity \end{framed}} We can set fill and stroke transparencies, between 0 (fully transparent) and 1 (fully opaque): \begin{framed} \noindent\small\verb?cpdf -create-pdf AND -draw -fill-opacity 0.5?\\ \noindent\small\verb? -circle "250 300 150" -fill -circle "350 300 150" -fill?\\ \noindent\small\verb? -o out.pdf? \end{framed} \noindent Here is the result: \bigskip \ifdefined\HCode \fbox{\includegraphics[natwidth=298,natheight=421,alt={Fill and stroke transparency}]{manualimages/trans.pdf}} \else \fbox{\includegraphics[width=0.3\textwidth,alt={Fill and stroke transparency}]{manualimages/trans.pdf}} \fi \bigskip \noindent Notice that we used \texttt{-fill} twice, to ensure each circle was in a different path. If they had been part of the same path, the effect would be different. \section{Text} {\small\begin{framed} \noindent\verb!-bt! Begin text\\ \noindent\verb!-et! End text\\ \noindent\verb!-text <text>! Draw text\\ \noindent\verb!-stext <text>! Draw text with \%specials\\ \noindent\verb!-font <fontname>! Set font\\ \noindent\verb!-font-size <n>! Set font size\\ \noindent\verb!-leading <n>! Set leading\\ \noindent\verb!-charspace <n>! Set character spacing\\ \noindent\verb!-wordspace <n>! Set word space\\ \noindent\verb!-textscale <n>! Set text scale\\ \noindent\verb!-rendermode <n>! Set text rendering mode\\ \noindent\verb!-rise <n>! Set text rise\\ \noindent\verb!-nl! New line\end{framed}} We can draw text in a \textit{text section}, which must start with \texttt{-bt} and end with \texttt{-et}. For example: \begin{framed} \noindent\small\verb?cpdf -create-pdf AND -draw -mtrans "50 50" -font Helvetica -font-size 144?\\ \noindent\small\verb? -bt -text "Hello" -et -o out.pdf? \end{framed} \noindent Here is the result: \bigskip \ifdefined\HCode \fbox{\includegraphics[natwidth=298,natheight=421,alt={Drawing text}]{manualimages/text.pdf}} \else \fbox{\includegraphics[width=0.3\textwidth,alt={Drawing text}]{manualimages/text.pdf}} \fi \bigskip \noindent If we use \texttt{-stext} instead of \texttt{-text} the usual special values from Chapter 8 (with the exception of URL links) may be used: \begin{framed} \noindent\small\verb?cpdf -create-pdf AND -draw -mtrans "50 50" -font-size 144?\\ \noindent\small\verb? -bt -stext "Page %Page" -et -o out.pdf? \end{framed} \noindent Now we see: \bigskip \ifdefined\HCode \fbox{\includegraphics[natwidth=298,natheight=421,alt={Using special text}]{manualimages/stext.pdf}} \else \fbox{\includegraphics[width=0.3\textwidth,alt={Using special text}]{manualimages/stext.pdf}} \fi \bigskip \noindent We can use \texttt{-text} multiple times, interspersing operators which change the text state, such as font and font size: \begin{framed} \noindent\small\verb?cpdf -create-pdf AND -draw -mtrans "10 20" -font-size 72?\\ \noindent\small\verb? -bt -text "Different " -font Times-BoldItalic -text "fonts"?\\ \noindent\small\verb? -font-size 36 -text " and sizes" -et -o out.pdf? \end{framed} \noindent Here is the result: \bigskip \ifdefined\HCode \fbox{\includegraphics[natwidth=298,natheight=421,alt={Font and font size}]{manualimages/fonts.pdf}} \else \fbox{\includegraphics[width=0.3\textwidth,alt={Font and font size}]{manualimages/fonts.pdf}} \fi \bigskip \noindent We can alter the character space, word space, horizontal scaling (100 = no scaling, less than 100 shrink, more than 100 stretch), and text rise: \begin{framed} \noindent\small\verb?cpdf -create-pdf AND -draw -mtrans "10 20" -font-size 72?\\ \noindent\small\verb? -bt -textscale 75 -charspace 5 -wordspace 20 -text "Different "?\\ \noindent\small\verb? -font Times-BoldItalic -text "fonts" -font-size 36 -rise 40?\\ \noindent\small\verb? -text " and sizes" -et -o out.pdf? \end{framed} \noindent Now we see: \bigskip \ifdefined\HCode \fbox{\includegraphics[natwidth=298,natheight=421,alt={Font parameters}]{manualimages/fontparams.pdf}} \else \fbox{\includegraphics[width=0.3\textwidth,alt={Font parameters}]{manualimages/fontparams.pdf}} \fi \bigskip \noindent Text may appear on multiple lines. We set up the line spacing with \texttt{-leading} then make new lines with \texttt{-nl}: \begin{framed} \noindent\small\verb?cpdf -create-pdf AND -draw -mtrans "100 200" -font-size 50?\\ \noindent\small\verb? -leading 55 -bt -text "This is" -nl -text "on multiple"?\\ \noindent\small\verb? -nl -text "lines" -et -o out.pdf? \end{framed} \noindent Now we have: \bigskip \ifdefined\HCode \fbox{\includegraphics[natwidth=298,natheight=421,alt={Text on multiple lines}]{manualimages/lines.pdf}} \else \fbox{\includegraphics[width=0.3\textwidth,alt={Text on multiple lines}]{manualimages/lines.pdf}} \fi \bigskip \noindent When composing text, we may need to find the width of a piece of text to see where to break it, or for right alignment. We can use \texttt{-text-width} for this: \begin{framed} \noindent\small\verb?cpdf -font Times-Roman -font-size 20 -text-width "Hello"? \end{framed} \noindent The result is in points. We can change the text rendering mode to show outline text or, in this example, to use text as a clipping region: \begin{framed} \noindent\small\verb?cpdf -create-pdf AND -draw -rendermode 7 -mtrans "100 200" -font-size 50?\\ \noindent\small\verb? -leading 55 -bt -text "This is" -nl -text "on multiple"?\\ \noindent\small\verb? -nl -text "lines" -et -circle "100 0 100" -fill -o out.pdf? \end{framed} \noindent Here is the result: \bigskip \ifdefined\HCode \fbox{\includegraphics[natwidth=298,natheight=421,alt={Clipping to text}]{manualimages/textclip.pdf}} \else \fbox{\includegraphics[width=0.3\textwidth,alt={Clipping to text}]{manualimages/textclip.pdf}} \fi \bigskip \noindent Here are the text rendering modes: \bigskip \begin{tabular}{lll} 0&Fill text (default)&\\ 1&Stroke text&\\ 2&Fill, then stroke text&\\ 3&Neither fill nor stroke (invisible)&\\ 4&Fill text and add to path for clipping&\\ 5&Stroke text and add to path for clipping&\\ 6&Fill, then stroke text and add to path for clipping&\\ 7&Add text to path for clipping& \end{tabular} \bigskip NB: When writing text the \texttt{-font} option is not subject to \texttt{-push} and \texttt{-pop}. Text is set the the font most recently chosen on the command line. NB: To use a TrueType font with \texttt{-draw}, the \texttt{-load-ttf} must appear after the \texttt{-draw}. NB: To use \texttt{-embed-std14}, put it before \texttt{-draw}. \section{Paragraphs} We can add a paragraph of text of a given width and justification (Left, Right, or Centre) using the \texttt{-para} operation: \begin{framed} \noindent\small\verb?cpdf -create-pdf AND -draw -mtrans "200 400" -font-size 20 -leading 25?\\ \noindent\small\verb? -bt -para "L200pt=This is a paragraph of width 100pt, left-justif?\\ \noindent\small\verb? ied, containing more than one line..." -et?\\ \noindent\small\verb? -o out.pdf? \end{framed} \noindent Notice the paragraph specification \texttt{L200pt=} for left justified, 200pt-wide at the beginning of the string. Notice also we must give a value for \texttt{-leading}. Here is the result: \bigskip \ifdefined\HCode \fbox{\includegraphics[natwidth=298,natheight=421,alt={A paragraph}]{manualimages/para.pdf}} \else \fbox{\includegraphics[width=0.3\textwidth,alt={A paragraph}]{manualimages/para.pdf}} \fi \bigskip \noindent Multiple paragraphs with optional indenting may be laid out with \texttt{-paras}: \begin{framed} \noindent\small\verb?cpdf -create-pdf AND -draw -mtrans "200 500" -bt -font-size 20 -leading 25?\\ \noindent\small\verb? -indent 20 -paras "L300=This is the first paragraph, which is spread ?\\ \noindent\small\verb? over multiple lines at this width...\nAnd here is the second, also ta?\\ \noindent\small\verb? king more than one line.\nHere is a little one." -et AND -decompress?\\ \noindent\small\verb? -o out.pdf? \end{framed} \noindent We specify the newlines with \texttt{\textbackslash n}, and the indentation with \texttt{-indent}. Here is the result. \noindent \bigskip \ifdefined\HCode \fbox{\includegraphics[natwidth=298,natheight=421,alt={Multiple paragraphs}]{manualimages/paras.pdf}} \else \fbox{\includegraphics[width=0.3\textwidth,alt={Multiple paragraphs}]{manualimages/paras.pdf}} \fi \bigskip \noindent Note that there is no automatic typesetting over multiple pages with \texttt{-paras}. \section{The next page} {\small\begin{framed} \vspace{1.5mm} \noindent\verb!-newpage! Move to a fresh page \end{framed}} If the drawing range is a single page, and the next page already exists, the drawing operation \texttt{-newpage} operation moves to the next page. Otherwise, it creates a fresh page of the same dimensions as the last page of the document, and sets the drawing range to just that page. For example: \begin{framed} \noindent\small\verb?cpdf -create-pdf AND -draw -bt -text "Page 1" -et?\\ \noindent\small\verb? -newpage -bt -text "Page 2" -et?\\ \noindent\small\verb? -o out.pdf? \end{framed} \noindent This will create a two page PDF with "Page 1" written on page one and "Page 2" written on page two. \section{Structure information} A PDF may contain, in addition to its graphical content, a tree of information concerning the logical organization of the document into chapters, sections, paragraphs, figures and so on. When used with a standard set of pre-defined data types, this is known as Tagged PDF. Some PDF subformats, such as PDF/UA, mandate -- amongst other things -- the full tagging of the file. When drawing on a fresh file, Cpdf can add such structure information. Partly this can happen automatically, partly it is for the user to add the tags. When drawing on an existing file, the new drawing is marked as an artifact. To enable the generation of structure information, we add \texttt{-draw-struct-tree} to our command. NB It must precede \texttt{-draw} on the command line. \begin{framed} \noindent\small\verb!cpdf -create-pdf AND!\\ \noindent\small\verb! -draw-struct-tree -draw -bt -text "Hello, World" -et -o out.pdf! \end{framed} \noindent Structure information in a PDF is in the form of a tree. We can now show the structure tree, and see that our paragraph on page one has been automatically tagged by Cpdf: \begin{verbatim} $cpdf -print-struct-tree out.pdf StructTreeRoot └── P (1)\end{verbatim} \noindent To prevent such automatic tagging, relying only on manual tags, use \texttt{-no-auto-tags}. The effect may be reversed at any point with \texttt{-auto-tags}. Unless told otherwise, Cpdf auto-tags text added using \texttt{-text}, \texttt{-stext} and \texttt{-paras} with tag P, and images with tag Figure. There are two types of tag we can add manually. One kind is used to tag individual pieces of content. We do this with a \texttt{-tag}/\texttt{-end-tag} pair. Note that nesting is not permitted here. For example, let us tag a heading: \begin{framed} \noindent\small\verb!cpdf -create-pdf AND -draw-struct-tree -draw -mtrans "50 700" !\\ \noindent\small\verb! -font-size 40 -no-auto-tags -tag H1 -bt -text "This is the heading"!\\ \noindent\small\verb! -et -end-tag -auto-tags -mtrans "0 -100" -font-size 20 -leading 25!\\ \noindent\small\verb! -bt -paras "L200pt=This is the first paragraph, which spreads over!\\ \noindent\small\verb!more than one line\nHere is the second, which also has multiple lines..."!\\ \noindent\small\verb! -et -o out.pdf! \end{framed} \noindent We turned off auto-tagging with \texttt{-no-auto-tag}, then used \texttt{-tag H1} and \texttt{-end-tag} to tag the heading. Then we turned auto-tagging back on with \texttt{-auto-tag}. Here is the result, visually: \bigskip \ifdefined\HCode \fbox{\includegraphics[natwidth=298,natheight=421,alt={Manual tagging}]{manualimages/h1.pdf}} \else \fbox{\includegraphics[width=0.3\textwidth,alt={Manual taggin}]{manualimages/h1.pdf}} \fi \bigskip \noindent And here is the structure tree: \begin{verbatim} StructTreeRoot ├── H1 (1) ├── P (1) └── P (1) \end{verbatim} \noindent Content tagging is flat - every part of the content of a page is part of only one \texttt{-tag}. The logical structure of a document, however, is a tree structure -- sections contain paragraphs, and so on. To build the logical structure tree, we add structure tags using \texttt{-stag} / \texttt{-end-stag} pairs which, of course, may be nested. For example, let's put our H1, and P sections in a Section structure tag: \begin{framed} \noindent\small\verb!cpdf -create-pdf AND -draw-struct-tree -draw -mtrans "50 700" !\\ \noindent\small\verb! -font-size 40 -no-auto-tags -stag Section -tag H1 -bt!\\ \noindent\small\verb! -text "This is the heading" -et -end-tag -auto-tags -mtrans "0 -100" !\\ \noindent\small\verb! -font-size 20 -leading 25 -bt -paras "L200pt=This is the first parag!\\ \noindent\small\verb!raph, which spreads over more than one line\nHere is the second, which al!\\ \noindent\small\verb!so has multiple lines..." -et -end-stag -o out.pdf! \end{framed} \noindent Here is the structure tree: \begin{verbatim} StructTreeRoot └──Section (1) ├── H1 (1) ├── P (1) └── P (1) \end{verbatim} \noindent Some PDF standards require that everything not marked as content (e.g paragraph, figure) etc. is marked as a an artifact. For example, a background image which is the same on every page, or a page border. This tells PDF processors that it is not logical content. By default, Cpdf with \texttt{-draw-struct-tree} will mark anything not automatically or manually tagged as content as an artifact. Should you wish to disable this, you may use \texttt{-no-auto-artifacts}. Whether or not you use \texttt{-no-auto-artifacts}, you may use \texttt{-artifact} / \texttt{end-artifact} pairs to mark artifacts manually. For example: \begin{framed} \noindent\small\verb!cpdf -create-pdf AND -draw-struct-tree -draw -no-auto-artifacts!\\ \noindent\small\verb! -artifact -mtrans "50 700" -end-artifact -bt -text "Hello" -et!\\ \noindent\small\verb! -o out.pdf! \end{framed} \noindent Here we manually tagged the \texttt{-mtrans} as being an artifact. The text section was automatically tagged as a paragraph, and so all content has been tagged or marked as an artifact. Some tags require a namespace other than the default. You can set the namespace with \texttt{-namespace}, which affects all future tags until reset. Two namespace abbreviations are available: \texttt{PDF} for the default \texttt{http://iso.org/pdf/ssn} namespace and \texttt{PDF2} for the PDF 2.0 namespace \texttt{http://iso.org/pdf2/ssn}. Extra information may be added to structure tree nodes with \texttt{-eltinfo} / \texttt{-end-eltinfo}. For example, to set the alternative description for an image, we might write (in JSON format, or prefixing with \texttt{PDF} in PDF format) \texttt{-eltinfo "Alt=PDF(A large horse)" -image A -end-eltinfo}. Multiple items may be set at once, for example Alt, ActualText, Lang etc. A role map, which maps non-standard structure types to standard ones, may be set with \texttt{-rolemap}. For example \texttt{-rolemap "/S1/H1/S2/H2"} would map the S1 structure type to the standard type H1 and so on. To build a fresh PDF/UA or PDF/UA-2 file for use with \texttt{-draw} use \texttt{-create-pdf-ua-1} or \texttt{-create-pdf-ua-2} from chapter \ref{chap:19}. \begin{cpdflib} \clearpage \section*{C Interface} \begin{small}\tt \lstinputlisting{docsplits/splits/c19} \end{small} \end{cpdflib} \begin{pycpdflib} \clearpage \section*{Python Interface} \begin{small}\tt \lstinputlisting{docsplits/pysplits/c19} \end{small} \end{pycpdflib} \begin{dotnetcpdflib} \clearpage \section*{.NET Interface} \begin{small}\tt \lstinputlisting{dotnetsplits/c19} \end{small} \end{dotnetcpdflib} \begin{jcpdflib} \clearpage \section*{Java Interface} \begin{small}\tt \lstinputlisting{javasplits/c19} \end{small} \end{jcpdflib} \begin{jscpdflib} \clearpage \section*{JavaScript Interface} \begin{small}\tt \lstinputlisting{docsplits/javascriptsplits/c19} \end{small} \end{jscpdflib} \clearpage\pagestyle{empty} \chapter{Accessible PDFs with PDF/UA}\label{chap:19}\pagestyle{fancy}\index{PDF/UA}\index{accessibility} {\small\begin{framed} \noindent\verb!cpdf -print-struct-tree in.pdf! \vspace{1.5mm} \noindent\verb!cpdf -extract-struct-tree in.pdf -o out.json! \vspace{1.5mm} \noindent\verb!cpdf -replace-struct-tree in.json in.pdf -o out.pdf! \vspace{1.5mm} \noindent\verb!cpdf -remove-struct-tree in.pdf -o out.pdf! \vspace{1.5mm} \noindent\verb!cpdf -mark-as-artifact in.pdf -o out.pdf! \vspace{1.5mm} \noindent\verb!cpdf -verify "PDF/UA-1(matterhorn)" [-json] in.pdf! \vspace{1.5mm} \noindent\verb!cpdf -verify "PDF/UA-1(matterhorn)" -verify-single <test> [-json] in.pdf! \vspace{1.5mm} \noindent\verb!cpdf -mark-as ["PDF/UA-1" | "PDF/UA-2"] in.pdf -o out.pdf! \vspace{1.5mm} \noindent\verb!cpdf -remove-mark ["PDF/UA-1" | "PDF/UA-2"] in.pdf -o out.pdf! \vspace{1.5mm} \noindent\verb!cpdf -create-pdf-ua-<1|2> <title> [-create-pdf-pages <n>]!\\ \noindent\verb! [-create-pdf-papersize <paper size>] -o out.pdf! \end{framed}} PDF/UA (Universal Accessibility) is a PDF subformat whose rules consist of a set of machine-checkable and human-checkable-only requirements to make PDF documents accessible for all users - for example, those using screen readers. Cpdf has some basic facilities for manipulating the extra PDF constructs which are used in (amongst others) PDF/UA, and a basic verifier for many of the machine-checkable requirements. \section{Structure trees} In a PDF document, the optional Structure Tree is a parallel construct which describes the logical structure of a document (as opposed to the information for rendering the document on the screen or printing it out, which every PDF of course contains.) We can print an abbreviated form of the structure tree to standard output: \begin{framed} \noindent\small\verb!cpdf -print-struct-tree in.pdf! \end{framed} \noindent This might yield: \smallgap \begin{minipage}{\linewidth} \begin{framed} \begin{verbatim} StructTreeRoot └── Document ├── Sect │ ├── P (1) │ │ ├── Span (1) │ └── Figure (1) ├── Sect │ ├── H1 (2) │ └── TOC │ ├── TOCI │ │ └── P │ │ └── Link (2) . . . . . . \end{verbatim} \end{framed} \end{minipage} \smallgap \noindent The numbers in parentheses are the page numbers for structure elements, where present. We can extract the full structure tree to JSON for inspection or manupulation: \begin{framed} \noindent\small\verb!cpdf -extract-struct-tree in.pdf -o out.json! \end{framed} \noindent Here is a typical fragment: {\small\begin{verbatim} [ [ 0, { "/CPDFJSONformatversion": 1, "/CPDFJSONpageobjnumbers": [ 52 ] } ], [ 102, { "/Type": { "N": "/StructElem" }, "/S": { "N": "/TD" }, "/P": 98, "/Pg": 52, "/K": { "I": 38 }, "/T": { "U": "row #7, col #3" }, "/A": { "/O": { "N": "/Layout" }, "/Height": { "F": 18.28 }, "/Width": { "F": 73.07689999999999 } } } ], [ 15, { "/Type": { "N": "/StructElem" }, "/S": { "N": "/TD" }, "/P": 59, "/Pg": 52, "/K": { "I": 20 }, "/T": { "U": "row #3, col #5" }, "/A": { "/O": { "N": "/Layout" }, "/Height": { "F": 18.28 }, "/Width": { "F": 73.07689999999999 } } } ], ... \end{verbatim}} \noindent This JSON file contains the structure tree objects from the file, using the format described in chapter \ref{chap:15}. There is a special entry in object \texttt{0} which gives the key to the page object numbers. In this example, there is one page with object number \texttt{52}. This JSON file can be edited, for example to change text strings, and reapplied to the same file from which it was extracted: \begin{framed} \noindent\small\verb!cpdf -replace-struct-tree out.json in.pdf -o out.pdf! \end{framed} \noindent If extra objects are required, they should be introduced with negative object numbers: Cpdf will renumber them on import so as not to clash with any existing numbers. To remove a structure tree from a PDF, we can use \texttt{-remove-struct-tree}: \begin{framed} \noindent\small\verb!cpdf -remove-struct-tree in.pdf -o out.pdf! \end{framed} \noindent This removes the structure tree and all references to it, including from inside page content. In addition we can, afterward, use \texttt{-mark-as-artifact}: \begin{framed} \noindent\small\verb!cpdf -mark-as-artifact in.pdf -o out.pdf! \end{framed} \noindent This marks all content in the file as being an artifact. \section{Verifying conformance to PDF/UA} Cpdf contains a new, experimental verifier for PDF/UA via most of the machine-checkable subset of the Matterhorn Protocol, a list of checks based on the PDF/UA-1 specification. For example, we can run: \begin{framed} \noindent\small\verb!cpdf -verify "PDF/UA-1(matterhorn)" in.pdf! \end{framed} \noindent We see: {\small\begin{verbatim} 06-001 UA1:7.1-8 Document does not contain an XMP metadata stream 07-001 UA1:7.1-9 ViewerPreferences dictionary of the Catalog dictionary does not contain a DisplayDocTitle entry 11-006 UA1:7.2-3 Natural language for document metadata cannot be determined. ("No top-level /Lang") 28-004 UA1:7.18.1-4 An annotation, other than of subtype Widget, does not have a Contents entry and does not have an alternative description (in the form of an Alt entry in the enclosing structure element). 28-008 UA1:7.18.3-1 A page containing an annotation does not contain a Tabs entry 28-011 UA1:7.18.5-1 A link annotation is not nested within a <Link> tag. 28-012 UA1:7.18.5-2 A link annotation does not include an alternate description in its Contents entry. \end{verbatim}} \noindent The first column here is the Matterhorn Protocol checkpoint, the second the reference in the PDF/UA-1 standard docunment, the third the textual description from the Matterhorn Protocol, and an optional fourth (in parentheses) any extra information available. The same information is available in JSON format by adding \texttt{-json} to the command line: {\small\begin{verbatim} [ { "name": "06-001", "section": "UA1:7.1-8", "error": "Document does not contain an XMP metadata stream", "extra": null }, { "name": "07-001", "section": "UA1:7.1-9", "error": "ViewerPreferences dictionary of the Catalog dictionary does not contain a DisplayDocTitle entry", "extra": null }, { "name": "11-006", "section": "UA1:7.2-3", "error": "Natural language for document metadata cannot be determined.", "extra": "No top-level /Lang" }, { "name": "28-004", "section": "UA1:7.18.1-4", "error": "An annotation, other than of subtype Widget, does not have a Contents entry and does not have an alternative description (in the form of an Alt entry in the enclosing structure element).", "extra": null }, { "name": "28-008", "section": "UA1:7.18.3-1", "error": "A page containing an annotation does not contain a Tabs entry", "extra": null }, { "name": "28-011", "section": "UA1:7.18.5-1", "error": "A link annotation is not nested within a <Link> tag.", "extra": null }, { "name": "28-012", "section": "UA1:7.18.5-2", "error": "A link annotation does not include an alternate description in its Contents entry.", "extra": null }\end{verbatim}} \noindent If verifying many files for a single fault, we may choose which test to run by adding\linebreak \texttt{-verify-single <testname>} to the command line. For example: \begin{framed} \noindent\small\verb!cpdf -verify "PDF/UA-1(matterhorn)" -verify-single "28-012" in.pdf! \end{framed} \noindent Presently, Matterhorn tests 31-001--016,018,030 are unimplemented. Matterhorn tests 31-027,10-001,11-001--005 are partially implemented. All others are implemented. \section{PDF/UA compliance markers} Once we are sure a file complies to PDF/UA, in terms of both machine and human checks, we can mark it as such: \begin{framed} \noindent\small\verb!cpdf -mark-as "PDF/UA-1" in.pdf -o out.pdf! \end{framed} \noindent Or, for the more recent PDF/UA-2 standard: \begin{framed} \noindent\small\verb!cpdf -mark-as "PDF/UA-2" in.pdf -o out.pdf! \end{framed} \noindent To remove such a marker we can use, for example: \begin{framed} \noindent\small\verb!cpdf -remove-mark "PDF/UA-1" in.pdf -o out.pdf! \end{framed} \section{Merging and splitting PDF/UA files} \noindent The \texttt{-process-struct-trees} option should always be used in conjunction with any splitting or merging command to preserve PDF/UA compliance. Sometimes \texttt{-subformat} may be required too. Details are given in chapter \ref{chap:2}. \section{Creating new PDF/UA files} To create a new PDF/UA-1 file, with A4 portrait paper, one page, and the title \texttt{"My Book"}, we may write: \begin{framed} \noindent\small\verb!cpdf -create-pdf-ua-1 "My Book" -o out.pdf! \end{framed} \noindent A title is needed for every PDF/UA document (even a blank one) for it to meet the standard. For \texttt{PDF/UA-2}, use \texttt{-create-pdf-ua-2} instead. To make it valid, you must also draw a top-level PDF/UA-2 Document tag as described below i.e: \begin{framed} \noindent\small\verb!cpdf -create-pdf-ua-2 "My Book" AND -draw -draw-struct-tree!\\ \noindent\small\verb! -namespace PDF2 -stag Document -end-stag -o out.pdf! \end{framed} \section{Drawing PDF/UA files} Cpdf can add PDF/UA structure data when drawing on new PDF/UA files. For example the following produces a valid PDF/UA-1 file with structure information: \begin{framed} \noindent\small\verb!cpdf -create-pdf-ua-1 "Hello" AND!\\ \noindent\small\verb! -embed-std14 /path/to/fonts -draw-struct-tree!\\ \noindent\small\verb! -draw -bt -text "Hello, World" -et -o out.pdf! \end{framed} \noindent Note we had to specify embedded fonts to make this a valid PDF/UA-1 file. To make a valid PDF/UA-2 file we must also add a top-level Document structure tag with the appropriate namespace. Here is the PDF/UA-2 version of our file: \begin{framed} \noindent\small\verb!cpdf -create-pdf-ua-2 "Hello" AND !\\ \noindent\small\verb! -embed-std14 /path/to/fonts -draw-struct-tree!\\ \noindent\small\verb! -draw -namespace PDF2 -stag Document -namespace PDF!\\ \noindent\small\verb! -bt -text "Hello, World" -et -end-stag -o out.pdf! \end{framed} \noindent See chapter \ref{chap:18} for more details about adding structure information when drawing. %FIXME PDF/UA-2 as well? \section{Remediation of PDF/UA verification errors} Remediation of a file which claims to match PDF/UA but which does not (either failing human or mechanical tests) is a complex topic. In this section, we list possible remediations for a file which fails mechanical verification with Cpdf or another verification tool. Sometimes these will be clear and simple -- for example where some piece of document metadata is missing -- and sometimes they will be almost impossible. Of course, often the truth lies between those two extremes. When all else fails, it may be possible to modify the basic structures of the PDF manually. This may be done by extracting the PDF to JSON using \texttt{-output-json} from chapter \ref{chap:15}, modifying the file manually in a text editor or automatically with a JSON processing tool such as \texttt{jq} and converting back to a PDF with \texttt{-j}. If the remediation requires altering page content streams, the option \texttt{-output-json-parse-content-streams} may be used. \subsection{Remediation List} The following table lists each mechanically-verifiable test from the Matterhorn protocol. For each, we give the number, description from the Matterhorn protocol, and the reference into the PDF/UA standard. Then we describe, if possible, how to use Cpdf to remediate the failure. Sometimes this is a definitive command, sometimes a last-ditch attempt to re-process the file (to embed missing fonts or correct font structures, for example) and sometimes simply a direction to try the manual remediation procedure described above. \newcommand{\norem}{File does not meet Tagged PDF standard - only manual remediation possible (see description above this table).} \newcommand{\noremua}{File does not meet PDF/UA tagging standard - only manual remediation possible (see description above this table).} \newcommand{\manonly}{File does not meet PDF/UA standard - only manual remediation possible (see description above this table).} \newcommand{\gsfonts}{It is possible that reprocessing the file with \texttt{gs} using \texttt{cpdf in.pdf -gs gs -gs-malformed-force -o out.pdf [-gs-quiet]} will correct the fonts.} \newcommand{\remannot}{If annotations are not required, they may be removed with \texttt{cpdf -remove-annotations in.pdf -o out.pdf}.} \newcommand{\delannot}{Alternatively, use \texttt{-output-annotations-json} and \texttt{-set-annotations-json} as described in Chapter \ref{chap:10} to remove one or more specific annotations.} \newcommand{\edittree}{Alternatively, edit the tree manually using \texttt{-extract-struct-tree} and \texttt{-replace-struct-tree} from this chapter.} \newcommand{\setlang}{Assuming the document is all in a single language, set the top-level language with, for example, \texttt{cpdf -set-language "en-US" in.pdf -o out.pdf}. If the document contains multiple languages, only manual remediation is possible.} \bgroup \def\arraystretch{1.5} \noindent\begin{longtable}{lp{10cm}l} \textbf{\textsc{Number}} & \textbf{\textsc{Description}} & \textbf{\textsc{Reference}}\\\endhead \textbf{01-003} & \textbf{Content marked as Artifact is present inside tagged content.} & \textbf{UA1:7.1-1}\\ \textbf{01-004} & \textbf{Tagged content is present inside content marked as Artifact.} & \textbf{UA1:7.1-1}\\ \textbf{01-005} & \textbf{Content is neither marked as Artifact nor tagged as real content.} & \textbf{UA1:7-1-2}\\ \multicolumn{3}{p{\dimexpr\linewidth-4\tabcolsep\relax}}{\norem}\\ \textbf{01-007} & \textbf{Suspects entry has a value of true.} & \textbf{UA1:7-1-11}\\ \multicolumn{3}{p{\dimexpr\linewidth-4\tabcolsep\relax}}{If you are sure the file conforms to tagged PDF conventions, use \texttt{cpdf -replace-obj /Root/MarkInfo/Suspects=false in.pdf -o out.pdf}.}\\ \textbf{02-001} & \textbf{One or more non-standard tag’s mapping does not terminate with a standard type.} & \textbf{UA1:7.1-3}\\ \textbf{02-003} & \textbf{A circular mapping exists.} & \textbf{UA1:7.1-3}\\ \textbf{02-004} & \textbf{One or more standard types are remapped.} & \textbf{UA1:7.1-4}\\ \multicolumn{3}{p{\dimexpr\linewidth-4\tabcolsep\relax}}{\noremua}\\ \textbf{06-001} & \textbf{Document does not contain an XMP metadata stream} & \textbf{UA1:7.1-8}\\ \multicolumn{3}{p{\dimexpr\linewidth-4\tabcolsep\relax}}{Create XMP metadata from any existing old-style metadata in the file with \texttt{cpdf -create-metadata in.pdf -o out.pdf}. This may lead to further verification errors due to empty metadata entries.}\\ \textbf{06-002} & \textbf{The XMP metadata stream in the Catalog dictionary does not include the PDF/UA identifier.} & \textbf{UA1:5}\\ \multicolumn{3}{p{\dimexpr\linewidth-4\tabcolsep\relax}}{Mark the file as PDF/UA using \texttt{cpdf -mark-as ["PDF/UA-1" | "PDF/UA-2"] in.pdf -o out.pdf}.}\\ \textbf{06-003} & \textbf{XMP metadata stream does not contain dc:title} & \textbf{UA1:7.1-8}\\ \multicolumn{3}{p{\dimexpr\linewidth-4\tabcolsep\relax}}{Add a title using \texttt{cpdf -set-title "My title" -also-set-xmp in.pdf -o out.pdf}.}\\ \textbf{07-001} & \textbf{ViewerPreferences dictionary of the Catalog dictionary does not contain a DisplayDocTitle entry} & \textbf{UA1:7.1-9}\\ \multicolumn{3}{p{\dimexpr\linewidth-4\tabcolsep\relax}}{Add the entry with \texttt{cpdf -display-doc-title true in.pdf -o out.pdf}.}\\ \textbf{07-002} & \textbf{ViewerPreferences dictionary of the Catalog dictionary contains a DisplayDocTitle entry with a value of false} & \textbf{UA1:7.1-9}\\ \multicolumn{3}{p{\dimexpr\linewidth-4\tabcolsep\relax}}{Replace the entry with \texttt{cpdf -display-doc-title true in.pdf -o out.pdf}.}\\ \textbf{09-004} & \textbf{A table-related structure element is used in a way that does not conform to the syntax defined in ISO 32000-1, Table 337.} & \textbf{UA1-7.2-1}\\ \textbf{09-005} & \textbf{A list-related structure element is used in a way that does not conform to Table 336 in ISO 32000-1.} & \textbf{UA1-7.2-1}\\ \textbf{09-006} & \textbf{A TOC-related structure element is used in a way that does not conform to Table 333 in ISO 32000-1.} & \textbf{UA1-7.2-1}\\ \textbf{09-007} & \textbf{A Ruby-related structure element is used in a way that does not conform to Table 338 in ISO 32000-1.} & \textbf{UA1-7.2-1}\\ \textbf{09-008} & \textbf{A Warichu-related structure element is used in a way that does not conform to Table 338 in ISO 32000-1.} & \textbf{UA1-7.2-1}\\ \multicolumn{3}{p{\dimexpr\linewidth-4\tabcolsep\relax}}{\noremua}\\ \textbf{10-001} & \textbf{Character code cannot be mapped to Unicode.} & \textbf{UA1:7.2-2}\\ \multicolumn{3}{p{\dimexpr\linewidth-4\tabcolsep\relax}}{\gsfonts}\\ \textbf{11-001} & \textbf{Natural language for text in page content cannot be determined.} & \textbf{UA1:7.2-3}\\ \textbf{11-002} & \textbf{Natural language for text in Alt, ActualText and E attributes cannot be determined.} & \textbf{UA1:7.2-3}\\ \textbf{11-003} & \textbf{Natural language in the Outline entries cannot be determined.} & UA1:7.2-3\\ \textbf{11-004} & \textbf{Natural language in the Contents entry for annotations cannot be determined.} & \textbf{UA1:7.2-3}\\ \textbf{11-005} & \textbf{Natural language in the TU entry for form fields cannot be determined.} & \textbf{UA1:7.2-3}\\ \textbf{11-006} & \textbf{Natural language for document metadata cannot be determined.} & \textbf{UA1:7.2-3}\\ \multicolumn{3}{p{\dimexpr\linewidth-4\tabcolsep\relax}}{\setlang}\\ \textbf{13-004} & \textbf{\textless Figure\textgreater\ tag alternative or replacement text missing.} & \textbf{UA1:7.3-3}\\ \textbf{14-002} & \textbf{Does use numbered headings, but the first heading tag is not \textless H1\textgreater .} & \textbf{UA1:7.4.2-1}\\ \textbf{14-003} & \textbf{Numbered heading levels in descending sequence are skipped (Example: \textless H3\textgreater\ follows directly after \textless H1\textgreater{}).} & \textbf{UA1:7.4-1}\\ \textbf{14-006} & \textbf{A node contains more than one \textless H\textgreater\ tag.} & \textbf{UA1:7.4.4-1}\\ \textbf{14-007} & \textbf{Document uses both \textless H\textgreater\ and \textless H\#\textgreater\ tags.} & \textbf{UA1:7.4.4-3}\\ \textbf{15-003} & \textbf{In a table not organized with Headers attributes and IDs, a \textless TH\textgreater\ cell does not contain a Scope attribute.} & \textbf{UA1:7.5-2}\\ \textbf{17-002} & \textbf{\textless Formula\textgreater\ tag is missing an Alt attribute.} & \textbf{UA1:7.7-1}\\ \multicolumn{3}{p{\dimexpr\linewidth-4\tabcolsep\relax}}{\manonly\ \edittree}\\ \textbf{17-003} & \textbf{Unicode mapping requirements are not met.} & \textbf{UA1:7.7-2}\\ \multicolumn{3}{p{\dimexpr\linewidth-4\tabcolsep\relax}}{\gsfonts}\\ \textbf{19-003} & \textbf{ID entry of the \textless Note\textgreater\ tag is not present.} & \textbf{UA1:7.9-2}\\ \textbf{19-004} & \textbf{ID entry of the \textless Note\textgreater\ tag is non-unique.} & \textbf{UA1:7.9-2}\\ \textbf{20-001} & \textbf{Name entry is missing or has an empty string as its value in an Optional Content Configuration Dictionary in the Configs entry in the OCProperties entry in the Catalog dictionary.} & \textbf{UA1:7.10-1}\\ \textbf{20-002} & \textbf{Name entry is missing or has an empty string as its value in an Optional Content Configuration Dictionary that is the value of the D entry in the OCProperties entry in the Catalog dictionary.} & \textbf{UA1:7.10-1}\\ \multicolumn{3}{p{\dimexpr\linewidth-4\tabcolsep\relax}}{\manonly\ \edittree}\\ \textbf{20-003} & \textbf{An AS entry appears in an Optional Content Configuration Dictionary.} & \textbf{UA1:7.10-2}\\ \multicolumn{3}{p{\dimexpr\linewidth-4\tabcolsep\relax}}{\manonly}\\ \textbf{21-001} & \textbf{The file specification dictionary for an embedded file does not contain F and UF entries.} & \textbf{UA1:7.11-1}\\ \multicolumn{3}{p{\dimexpr\linewidth-4\tabcolsep\relax}}{\manonly\ \edittree}\\ \textbf{25-001} & \textbf{File contains the dynamicRender element with value “required”.} & \textbf{UA1:7.15-1}\\ \multicolumn{3}{p{\dimexpr\linewidth-4\tabcolsep\relax}}{Not remediable, unless actually a wrong marker. This is an interactive PDF form which likely only works with Adobe Acrobat. If the marker is actually wrong, it may be edited manually inside the XML stream using the instructions above.}\\ \textbf{26-001} & \textbf{The file is encrypted but does not contain a P entry in its encryption dictionary.} & \textbf{UA1:7.16-1}\\ \textbf{26-002} & \textbf{The file is encrypted and does contain a P entry but the 10th bit position of the P entry is false.} & \textbf{UA1:7.16-1}\\ \multicolumn{3}{p{\dimexpr\linewidth-4\tabcolsep\relax}}{Re-encrypt the file with Cpdf as described in Chapter 4.}\\ \textbf{28-002} & \textbf{An annotation, other than of subtype Widget, Link and PrinterMark, is not a direct child of an \textless Annot\textgreater\ structure element.} & \textbf{UA1:7.18.1-2}\\ \textbf{28-004} & \textbf{An annotation, other than of subtype Widget, does not have a Contents entry and does not have an alternative description (in the form of an Alt entry in the enclosing structure element).} & \textbf{UA1:7.18.1-4}\\ \textbf{28-005} & \textbf{A form field does not have a TU entry and does not have an alternative description (in the form of an Alt entry in the enclosing structure element).} & \textbf{UA1:7.18.1-4}\\ \multicolumn{3}{p{\dimexpr\linewidth-4\tabcolsep\relax}}{\manonly\ \edittree}\\ \textbf{28-006} & \textbf{An annotation with subtype undefined in ISO 32000 does not meet 7.18.1.} & \textbf{UA1:7.18.2-1}\\ \textbf{28-007} & \textbf{An annotation of subtype TrapNet exists.} & \textbf{UA1:7.18.2-2}\\ \textbf{28-008} & \textbf{A page containing an annotation does not contain a Tabs entry} & \textbf{UA1:7.18.3-1}\\ \textbf{28-009} & \textbf{A page containing an annotation has a Tabs entry with a value other than S.} & \textbf{UA1:7.18.3-1}\\ \multicolumn{3}{p{\dimexpr\linewidth-4\tabcolsep\relax}}{\remannot\ \delannot}\\ \textbf{28-010} & \textbf{A widget annotation is not nested within a \textless Form\textgreater\ tag.} & \textbf{UA1:7.18.4-1}\\ \textbf{28-011} & \textbf{A link annotation is not nested within a \textless Link\textgreater\ tag.} & \textbf{UA1:7.18.5-1}\\ \multicolumn{3}{p{\dimexpr\linewidth-4\tabcolsep\relax}}{\remannot\ \delannot\ \edittree}\\ \textbf{28-012} & \textbf{A link annotation does not include an alternate description in its Contents entry.} & \textbf{UA1:7.18.5-2}\\ \textbf{28-014} & \textbf{CT entry is missing from the media clip data dictionary.} &\\ \textbf{28-015} & \textbf{Alt entry is missing from the media clip data dictionary.} & \textbf{UA1:7.18.6.2-1}\\ \textbf{28-016} & \textbf{File attachment annotations do not conform to 7.11.} & \textbf{UA1:7.18.7-1}\\ \multicolumn{3}{p{\dimexpr\linewidth-4\tabcolsep\relax}}{\remannot\ \delannot}\\ \textbf{28-017} & \textbf{A PrinterMark annotation is included in the logical structure.} & \textbf{UA1:7.18.8-1}\\ \multicolumn{3}{p{\dimexpr\linewidth-4\tabcolsep\relax}}{\remannot\ \delannot\ \edittree}\\ \textbf{28-018} & \textbf{The appearance stream of a PrinterMark annotation is not marked as Artifact.} & \textbf{UA1:7.18.8-2}\\ \multicolumn{3}{p{\dimexpr\linewidth-4\tabcolsep\relax}}{\remannot\ \delannot}\\ \textbf{30-001} & \textbf{A reference XObject is present.} & \textbf{UA1:7.2}\\ \multicolumn{3}{p{\dimexpr\linewidth-4\tabcolsep\relax}}{A reference XObject references a page in another file. May be cut out manually using the manual remediation instructions above.}\\ \textbf{30-002} & \textbf{Form XObject contains MCIDs and is referenced more than once.} & \textbf{UA1:7.21.3.1-1}\\ \multicolumn{3}{p{\dimexpr\linewidth-4\tabcolsep\relax}}{Unlikely to be remediable: the only option is to manually remove them, but this would then result in a tag tree pointing to non-existent MCIDs, which would be another kind of invalidity. Any PDF producer creating Tagged PDF with MCIDs like this is simply broken.}\\ \textbf{31-001} & \textbf{A Type 0 font dictionary with encoding other than Identity-H and Identity-V has values for Registry in both CIDSystemInfo dictionaries that are not identical.} & \textbf{UA1:7.21.3-1}\\ \textbf{31-002} & \textbf{A Type 0 font dictionary with encoding other than Identity-H and Identity-V has values for Ordering in both CIDSystemInfo dictionaries that are not identical.} & \textbf{UA1:7.21.3.1-1}\\ \textbf{31-003} & \textbf{A Type 0 font dictionary with encoding other than Identity-H and Identity-V has a value for Supplement in the CIDSystemInfo dictionary of the CID font that is less than the value for Supplement in the CIDSystemInfo dictionary of the CMap.} & \textbf{UA1:7.21.3.1-1}\\ \textbf{31-004} & \textbf{A Type 2 CID font contains neither a stream nor the name Identity as the value of the CIDToGIDMap entry.} & \textbf{UA1:7.21.3.2-1}\\ \textbf{31-005} & \textbf{A Type 2 CID font does not contain a CIDToGIDMap entry.} & \textbf{UA1:7.21.3.2-1}\\ \textbf{31-006} & \textbf{A CMap is neither listed as described in ISO 32000- 1:2008, 9.7.5.2, Table 118 nor is it embedded.} & \textbf{UA1:7.21.3.3-1}\\ \textbf{31-007} & \textbf{The WMode entry in a CMap dictionary is not identical to the WMode value in the CMap stream.} & \textbf{UA1:7.21.3.3-1}\\ \textbf{31-008} & \textbf{A CMap references another CMap which is not listed in ISO 32000-1:2008, 9.7.5.2, Table 118.} & \textbf{UA1:7.21.3.3-2}\\ \textbf{31-009} & \textbf{For a font used by text intended to be rendered the font program is not embedded.} & \textbf{UA1:7.21.4.1-1}\\ \textbf{31-011} & \textbf{For a font used by text the font program is embedded but it does not contain glyphs for all of the glyphs referenced by the text used for rendering.} & \textbf{UA1:7.21.4.1-3}\\ \textbf{31-012} & \textbf{The FontDescriptor dictionary of an embedded Type 1 font contains a CharSet string, but at least one of the glyphs present in the font program is not listed in the CharSet string.} & \textbf{UA1:7.21.4.2-1}\\ \textbf{31-013} & \textbf{The FontDescriptor dictionary of an embedded Type 1 font contains a CharSet string, but at least one of the glyphs listed in the CharSet string is not present in the font program.} & \textbf{UA1:7.21.4.2-2}\\ \textbf{31-014} & \textbf{The FontDescriptor dictionary of an embedded CID font contains a CIDSet string, but at least one of the glyphs present in the font program is not listed in the CIDSet string.} & \textbf{UA1:7.21.4.2-3}\\ \textbf{31-015} & \textbf{The FontDescriptor dictionary of an embedded CID font contains a CIDSet string, but at least one of the glyphs listed in the CIDSet string is not present in the font program.} & \textbf{UA1:7.21.4.2-4}\\ \textbf{31-016} & \textbf{For one or more glyphs, the glyph width information in the font dictionary and in the embedded font program differ by more than 1/1000 unit.} & \textbf{UA1:7.21.5-1}\\ \textbf{31-017} & \textbf{A non-symbolic TrueType font is used for rendering, but none of the cmap entries in the embedded font program is a non-symbolic cmap.} & \textbf{UA1:7.21.6-1}\\ \textbf{31-018} & \textbf{A non-symbolic TrueType font is used for rendering, but for at least one glyph to be rendered the glyph cannot be looked up by any of the non-symbolic cmap entries in the embedded font program.} & \textbf{UA1:7.21.6-2}\\ \textbf{31-019} & \textbf{The font dictionary for a non-symbolic TrueType font does not contain an Encoding entry.} & \textbf{UA1:7.21.6-3}\\ \textbf{31-020} & \textbf{The font dictionary for a non-symbolic TrueType font contains an Encoding dictionary which does not contain a BaseEncoding entry.} & \textbf{UA1:7.21.6-4}\\ \textbf{31-021} & \textbf{The value for either the Encoding entry or the BaseEncoding entry in the Encoding dictionary in a non-symbolic TrueType font dictionary is neither MacRomanEncoding nor WinAnsiEncoding.} & \textbf{UA1:7.21.6-5}\\ \textbf{31-022} & \textbf{The Differences array in the Encoding entry in a non-symbolic TrueType font dictionary contains one or more glyph names which are not listed in the Adobe Glyph List.} & \textbf{UA1:7.21.6-6}\\ \textbf{31-023} & \textbf{The Differences array is present in the Encoding entry in a non-symbolic TrueType font dictionary but the embedded font program does not contain a (3,1) Microsoft Unicode cmap.} & \textbf{UA1:7.21.6-7}\\ \textbf{31-024} & \textbf{The Encoding entry is present in the font dictionary for a symbolic TrueType font.} & \textbf{UA1:7.21.6-8}\\ \textbf{31-025} & \textbf{The embedded font program for a symbolic TrueType font contains no cmap.} & \textbf{UA1:7.21.6-9}\\ \textbf{31-026} & \textbf{The embedded font program for a symbolic TrueType font contains more than one cmap, but none of the cmap entries is a (3,0) Microsoft Symbol cmap.} & \textbf{UA1:7.21.6-10}\\ \textbf{31-027} & \textbf{A font dictionary does not contain the ToUnicode entry and none of the following is true: the font uses MacRomanEncoding, MacExpertEncoding or WinAnsiEncoding; the font is a Type 1 or Type 3 font and the glyph names of the glyphs referenced are all contained in the Adobe Glyph List or the set of named characters in the Symbol font, as defined in ISO 32000-1:2008, Annex D; the font is a Type 0 font, and its descendant CIDFont uses Adobe-GB1, Adobe-CNS1, Adobe-Japan1 or Adobe-Korea1 character collections; the font is a non-symbolic TrueType font.} & \textbf{UA1:7.21.7-1}\\ \textbf{31-028} & \textbf{One or more Unicode values specified in the ToUnicode CMap are zero (0).} & \textbf{UA1:7.21.7-2}\\ \textbf{31-029} & \textbf{One or more Unicode values specified in the ToUnicode CMap are equal to either U+FEFF or U+FFFE.} & \textbf{UA1:7.21.7-3}\\ \textbf{31-030} & \textbf{One or more characters used in text showing operators reference the .notdef glyph.} & \textbf{UA1:7.21.8-1}\\ \multicolumn{3}{p{\dimexpr\linewidth-4\tabcolsep\relax}}{\gsfonts}\\ \end{longtable} \egroup \clearpage\pagestyle{empty} %We wanted to call this "Chapter M", but the following commands messed up the PDF bookmarks, so this chapter will simply have to float for now, until we can return to this problem. %\setcounter{chapter}{12} %\renewcommand{\thechapter}{\Alph{chapter}}% \chapter{Miscellaneous}\label{chap:misc}\pagestyle{fancy} {\small\begin{framed} \noindent\verb!cpdf -draft [-boxes] [-draft-remove-only <n>] in.pdf [<range>] -o out.pdf! \vspace{1.5mm} \noindent\verb!cpdf -remove-all-text in.pdf [<range>] -o out.pdf! \vspace{1.5mm} \noindent\verb!cpdf -blacktext in.pdf [<range>] -o out.pdf!\\ \noindent\verb!cpdf -blacklines in.pdf [<range>] -o out.pdf!\\ \noindent\verb!cpdf -blackfills in.pdf [<range>] -o out.pdf! \vspace{1.5mm} \noindent\verb!cpdf -thinlines <minimum thickness> in.pdf [<range>] -o out.pdf! \vspace{1.5mm} \noindent\verb!cpdf -clean in.pdf -o out.pdf! \vspace{1.5mm} \noindent\verb!cpdf -set-version <version number> in.pdf -o out.pdf! \vspace{1.5mm} \noindent\verb!cpdf -copy-id-from source.pdf in.pdf -o out.pdf! \vspace{1.5mm} \noindent\verb!cpdf -remove-id in.pdf -o out.pdf! \vspace{1.5mm} \noindent\verb!cpdf -list-spot-colors in.pdf! \vspace{1.5mm} \noindent\verb!cpdf -print-dict-entry[-json] <key> in.pdf! \vspace{1.5mm} \noindent\verb!cpdf -remove-dict-entry <key> [-dict-entry-search <term>]!\\ \noindent\verb! in.pdf -o out.pdf! \vspace{1.5mm} \noindent\verb!cpdf -replace-dict-entry <key> -replace-dict-entry-value <value>!\\ \noindent\verb! [-dict-entry-search <term>] in.pdf -o out.pdf! \vspace{1.5mm} \noindent\verb!cpdf -remove-clipping [<range>] in.pdf -o out.pdf! \vspace{1.5mm} \noindent\verb!cpdf -obj[-json] <object specification> in.pdf! \vspace{1.5mm} \noindent\verb!cpdf -replace-obj <object specification>=<object> in.pdf -o out.pdf!\\ \noindent\verb!cpdf -remove-obj <object number> in.pdf -o out.pdf! \vspace{1.5mm} \noindent\verb!cpdf -extract-stream[-decompress] <object specification>!\\ \noindent\verb! in.pdf [-o out.dat | -stdout]! \vspace{1.5mm} \noindent\verb!cpdf -replace-stream <object specification>!\\ \noindent\verb! -replace-stream-with <filename>!\\ \noindent\verb! in.pdf -o out.pdf!\end{framed}} \section{Draft Documents} \index{draft} \label{draft} The \texttt{-draft} operation removes bitmap (photographic) images from a file, so that it can be printed with less ink. Optionally, the \texttt{-boxes} option can be added, filling the spaces left blank with a crossed box denoting where the image was. This is not guaranteed to be fully visible in all cases (the bitmap may be have been partially covered by vector objects or clipped in the original). For example: \begin{framed} \noindent\small\verb!cpdf -draft -boxes in.pdf -o out.pdf! \end{framed} \noindent To remove a single image only, specify \texttt{-draft-remove-only}, giving the name of the image obtained by a call to \texttt{-image-resolution} as described in Section \ref{imageres} and giving the appropriate page. For example: \begin{framed} \noindent\small\verb!cpdf -draft -boxes -draft-remove-only "/Im1" in.pdf 7 -o out.pdf! \end{framed} \noindent To remove text instead of images, use the \texttt{-remove-all-text} operation: \begin{framed} \noindent\small\verb!cpdf -remove-all-text in.pdf -o out.pdf! \end{framed} \section{Blackening Text, Lines and Fills} \index{blacken!text} Sometimes PDF output from an application (for instance, a web browser) has text in colors which would not print well on a grayscale printer. The \texttt{-blacktext} operation blackens all text on the given pages so it will be readable when printed. This will not work on text which has been converted to outlines, nor on text which is part of a form. \index{blacken!lines} \begin{framed} \noindent\small\verb!cpdf -blacktext in.pdf -o out.pdf! \end{framed} \noindent The \texttt{-blacklines} operation blackens all lines on the given pages. \index{blacken!fills} \begin{framed} \noindent\small\verb!cpdf -blacklines in.pdf -o out.pdf! \end{framed} \noindent The \texttt{-blackfills} operation blackens all fills on the given pages. \begin{framed} \noindent\small\verb!cpdf -blackfills in.pdf -o out.pdf! \end{framed} \noindent Contrary to their names, all these operations can use another color, if specified with \texttt{-color}. \section{Hairline Removal} \index{hairline removal} Quite often, applications will use very thin lines, or even the value of 0, which in PDF means "The thinnest possible line on the output device". This might be fine for on-screen work, but when printed on a high resolution device, such as by a commercial printer, they may be too faint, or disappear altogether. The \texttt{-thinlines} operation prevents this by changing all lines thinner than \texttt{<minimal~thickness>} to the given thickness. For example: \begin{framed} \small\noindent\verb!cpdf -thinlines 0.2mm in.pdf [<range>] -o out.pdf! \vspace{2.5mm} \noindent Thicken all lines less than 0.2mm to that value. \end{framed} \section{Garbage Collection} \index{garbage collection} Sometimes incremental updates to a file by an application, or bad applications can leave data in a PDF file which is no longer used. This function removes that unneeded data. \begin{framed} \small\noindent\verb!cpdf -clean in.pdf -o out.pdf! \end{framed} \noindent NB: This operation is deprecated. This work is now done by default upon writing any file. \section{Change PDF Version Number} \index{version number} \label{setversion} To change the pdf version number, use the \texttt{-set-version} operation, giving the part of the version number after the decimal point. For example: \begin{framed} \small\noindent\verb!cpdf -set-version 4 in.pdf -o out.pdf! \vspace{2.5mm} \noindent Change file to PDF 1.4. \end{framed} \noindent This does not alter any of the actual data in the file --- just the supposed version number. For PDF versions starting with 2 add ten to the number. For example, for PDF version 2.0, use \texttt{-set-version 10}. \section{Copy ID} \index{file ID!copy} The \texttt{-copy-id-from} operation copies the ID from the given file to the input, writing to the output. \begin{framed} \small\noindent\verb!cpdf -copy-id-from source.pdf in.pdf -o out.pdf! \vspace{2.5mm} \noindent Copy the id from \texttt{source.pdf} to the contents of \texttt{in.pdf}, writing to \texttt{out.pdf}. \end{framed} \noindent If there is no ID in the source file, the existing ID is retained. You cannot use \texttt{-recrypt} with \texttt{-copy-id-from}. \section{Remove ID} \index{file ID!remove} The \texttt{-remove-id} operation removes the ID from a document. \begin{framed} \small\noindent\verb!cpdf -remove-id in.pdf -o out.pdf! \vspace{2.5mm} \noindent Remove the ID from \texttt{in.pdf}, writing to \texttt{out.pdf}. \end{framed} \noindent You cannot use \texttt{-recrypt} with \texttt{-remove-id}. \section{List Spot Colours} \index{spot colour} This operation lists the name of any ``separation'' color space in the given PDF file. \begin{framed} \small\noindent\verb!cpdf -list-spot-colors in.pdf! \vspace{2.5mm} \noindent List the spot colors, one per line in \texttt{in.pdf}, writing to \texttt{stdout}. \end{framed} \section{PDF Dictionary Entries} \label{removedictentry} This is for editing data within the PDF's internal representation. Use with caution. \index{dictionary!print entry} \index{dictionary!remove entry} \index{dictionary!replace entry}To print a dictionary entry: \begin{framed} \small\noindent\verb!cpdf -print-dict-entry /URI in.pdf! \vspace{2.5mm} \noindent Print all URLs in annotation hyperlinks in \texttt{in.pdf}, one per line. \end{framed} \noindent To report data in JSON format, add \texttt{-json}. To remove a dictionary entry: \begin{framed} \small\noindent\verb!cpdf -remove-dict-entry /One in.pdf -o out.pdf! \vspace{2.5mm} \noindent Remove the entry for \texttt{/One} in every dictionary \texttt{in.pdf}, writing to \texttt{out.pdf}. \vspace{2.5mm} \small\noindent\verb!cpdf -remove-dict-entry /One -dict-entry-search "\{I : 1\}"!\\ \small\noindent\verb! in.pdf -o out.pdf! \vspace{2.5mm} \noindent Replace the entry for \texttt{/One} in every dictionary \texttt{in.pdf} if the key's value is the given CPDFJSON value, writing to \texttt{out.pdf}. Alternatively, prefix \texttt{PDF} to give the value in PDF format. \end{framed} \noindent To replace a dictionary entry, give the replacement value in JSON or format: \begin{framed} \small\noindent\verb!cpdf -replace-dict-entry /One -replace-dict-entry-value "PDF2"!\\ \small\noindent\verb! in.pdf -o out.pdf! \vspace{2.5mm} \noindent Remove the entry for \texttt{/One} in every dictionary \texttt{in.pdf}, writing to \texttt{out.pdf}. \vspace{2.5mm} \small\noindent\verb!cpdf -replace-dict-entry /One -dict-entry-search "\{I : 1\}"!\\ \small\noindent\verb! -replace-dict-entry-value "\{I : 2\}" in.pdf -o out.pdf! \vspace{2.5mm} \noindent Remove the entry for \texttt{/One} in every dictionary \texttt{in.pdf} if the key's value is the given value, writing to \texttt{out.pdf}. \end{framed} \section{Removing Clipping} The \texttt{-remove-clipping} operation removes any clipping paths on given pages from the file. \begin{framed} \small\noindent\verb!cpdf -remove-clipping in.pdf -o out.pdf! \vspace{2.5mm} \noindent Remove clipping paths in \texttt{in.pdf}, writing to \texttt{out.pdf}. \end{framed} \section{Exploring PDFs} \noindent The \texttt{-obj} operation prints an object to standard output, given the object number. Number 0 is the trailer dictionary, so we begin there: {\small\begin{verbatim} $ cpdf -obj 0 in.pdf <</Root 1256 0 R/Length 588/ID[('\029\\t>\249\157\182F_\153V\175z[\234\196) ('\029\\t>\249\157\182F_\153V\175z[\234\196)]/Info 1351 0 R/Size 1406>> $ cpdf -obj 1256 in.pdf <</OpenAction 1238 0 R/PageLabels<</Nums[0<</S/r>>16<</S/D>>]>>/PageMode /UseOutlines/Names 924 0 R/Outlines 838 0 R/Pages 851 0 R/Type/Catalog>> $ cpdf -obj 1238 out.pdf <</D[1225 0 R/Fit]/S/GoTo>> \end{verbatim}} \noindent Alternatively, we may follow a chain of dictionary entries from the trailer dictionary: {\small\begin{verbatim} $ ./cpdf -obj /Root/Pages/Count cpdfmanual.pdf 133 \end{verbatim}} \noindent Or, from a given object number: {\small\begin{verbatim} $ ./cpdf -obj 1256/PageLabels/Nums cpdfmanual.pdf [0<</S/r>>16<</S/D>>] \end{verbatim}} \noindent We may also begin at a numbered page instead of at the trailer dictionary: {\small\begin{verbatim} ./cpdf -obj P20/Resources/Font/F58/BaseFont cpdfmanual.pdf /MCBERL+URWPalladioL-Roma \end{verbatim}} \noindent To output data in JSON format instead of PDF format, add \texttt{-json}: {\small\begin{verbatim} ./cpdf -obj-json 140/Prev/Prev/Prev cpdfmanual.pdf { "/Title": 129, "/A": 126, "/Parent": 112, "/Prev": 124, "/Next": 132 } \end{verbatim}} \noindent We can follow array entries as well as dictionary entries by giving the index number into the array - here object 0 (the trailer dictionary), dictionary entry \texttt{/ID}, index number 0: {\small\begin{verbatim} ./cpdf -obj 0/ID/[0] hello.pdf (\232\20625\030\179/\176q:O\202\135\176u\137) \end{verbatim}} \noindent A stream may be extracted with \texttt{-extract-stream} or \texttt{-extract-stream-decompress}, which decompresses it first where possible: {\small\begin{verbatim} $ cpdf -obj 0 hello.pdf <</Size 4/Root 4 0 R/ID[(\232\20625\030\179/\176q:O\202\135\176u\137) (\232\20625\030\179/\176q:O\202\135\176u\137)]>> $ cpdf -obj 4 hello.pdf <</Type/Catalog/Pages 1 0 R>> $ cpdf -obj 1 hello.pdf <</Type/Pages/Kids[3 0 R]/Count 1>> $ cpdf -obj 3 hello.pdf <</Type/Page/Parent 1 0 R/Resources<</Font<</F0<</Type/Font/Subtype/Type1 /BaseFont/Times-Italic>>>>>>/MediaBox[0 0 595.275590551 841.88976378] /Rotate 0/Contents[2 0 R]>> $ cpdf -extract-stream-decompress 2 hello.pdf -stdout 1 0 0 1 50 770 cm BT/F0 36 Tf(Hello, World!)Tj ET \end{verbatim}} \noindent By these mechanisms, ad-hoc exploration of PDF files is possible. We may also edit dictionary entries with \texttt{-replace-obj} by giving an object specification, and the new value in JSON or PDF format (prefix with "PDF" to denote PDF format): \begin{framed} \small\noindent\verb!cpdf -replace-obj /Root/MarkInfo/Marked=true in.pdf -o out.pdf! \vspace{2.5mm} \noindent Replace or add dictionary entry in \texttt{in.pdf}, writing to \texttt{out.pdf}. \vspace{2.5mm} \small\noindent\verb!cpdf -replace-obj '/Root/Info/Title=PDF(New title)' in.pdf -o out.pdf! \vspace{2.5mm} \noindent Replace or add dictionary entry in \texttt{in.pdf}, writing to \texttt{out.pdf}. \end{framed} \noindent Any part of the object specification not already present will be fabricated using direct nested dictionaries. For example, if \texttt{/MarkInfo} does not exist in the root dictionary, this command adds \texttt{/MarkInfo <</Marked true>>} to the root dictionary. An object may be remove with \texttt{-remove-obj}: \begin{framed} \small\noindent\verb!cpdf -remove-obj 6 in.pdf -o out.pdf! \vspace{2.5mm} \noindent Remove object 6 from \texttt{in.pdf}, writing to \texttt{out.pdf}. \end{framed} \noindent Stream contents may be replaced with \texttt{-replace-stream}: \begin{framed} \small\noindent\verb!cpdf -replace-stream 4 -replace-stream-with in.dat in.pdf -o out.pdf! \vspace{2.5mm} \noindent Replace stream object 4's contents with the contents of \texttt{in.dat}. \end{framed} \noindent The stream dictionary is unaffected, save for any correction to its length entry. \begin{cpdflib} \clearpage \section*{C Interface} \begin{small}\tt \lstinputlisting{docsplits/splits/c20} \end{small} \end{cpdflib} \begin{pycpdflib} \clearpage \section*{Python Interface} \begin{small}\tt \lstinputlisting{docsplits/pysplits/c20} \end{small} \end{pycpdflib} \begin{dotnetcpdflib} \clearpage \section*{.NET Interface} \begin{small}\tt \lstinputlisting{dotnetsplits/c19} \end{small} \end{dotnetcpdflib} \begin{jcpdflib} \clearpage \section*{Java Interface} \begin{small}\tt \lstinputlisting{javasplits/c19} \end{small} \end{jcpdflib} \begin{jscpdflib} \clearpage \section*{JavaScript Interface} \begin{small}\tt \lstinputlisting{docsplits/javascriptsplits/c20} \end{small} \end{jscpdflib} \appendix \chapter{Dates}\pagestyle{empty} \label{dates} \index{date!defined} \section{PDF Date Format} Dates in PDF are specified according to the following format: \begin{framed} \verb!D:YYYYMMDDHHmmSSOHH'mm'!\\\\where: \begin{itemize} \item \texttt{YYYY} is the year; \item \texttt{MM} is the month; \item \texttt{DD} is the day (01-31); \item \texttt{HH} is the hour (00-23); \item \texttt{mm} is the minute (00-59); \item \texttt{SS} is the second (00-59); \item \texttt{O} is the relationship of local time to Universal Time (UT), denoted by '+', '-' or 'Z'; \item \texttt{HH} is the absolute value of the offset from UT in hours (00-23); \item \texttt{mm} is the absolute value of the offset from UT in minutes (00-59). \end{itemize} \end{framed} \noindent A contiguous prefix of the parts above can be used instead, for lower accuracy dates. For example: \begin{framed} \small\noindent\verb!D:2014! (2014) \vspace{1.5mm} \noindent\verb!D:20140103! (3rd January 2014) \vspace{1.5mm} \noindent\verb!D:201401031854-08'00'! (3rd January 2014, 6:54PM, US Pacific Standard Time) \end{framed} \section{XMP Metadata Date Format} \label{xmpdate} These are the possible data formats for \texttt{-set-metadata-date}: \begin{verbatim} YYYY YYYY-MM YYYY-MM-DD YYYY-MM-DDThh:mmTZD YYYY-MM-DDThh:mm:ssTZD \end{verbatim} \noindent where: \medskip \begin{tabular}{ll} \texttt{YYYY} & year \\ \texttt{MM} & month (01 = Jan)\\ \texttt{DD} & day of month (01 to 31)\\ \texttt{hh} & hour (00 to 23)\\ \texttt{mm} & minute (00 to 59)\\ \texttt{ss} & second (00 to 59)\\ \texttt{TZD} & time zone designator (\texttt{Z} or \texttt{+hh:mm} or \texttt{-hh::mm}) \end{tabular} \pagestyle{fancy} \ \ \ \vfill \chapter{Change logs} \section{Cpdf Change Log} {\footnotesize\begin{alltt} \input{Changes} \end{alltt}} \section{CamlPDF Change Log} (CamlPDF is the library Cpdf is based upon) {\footnotesize\begin{alltt} \input{../camlpdf/Changes} \end{alltt}} \pagestyle{empty} %\backmatter %\pagestyle{fancy} %\printindex \end{document} ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/META�������������������������������������������������������������������������������������0000664�0001750�0001750�00000000212�14771516640�011575� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������name="cpdf" description="PDF commmand line tools" version="2.8.1" requires="camlpdf" archive(byte)="cpdf.cma" archive(native)="cpdf.cmxa" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/cpdfcolours.mli��������������������������������������������������������������������������0000664�0001750�0001750�00000000160�14771516640�014154� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(** Standard CSS Colours *) (** Standard CSS Colours, names in lowercase. *) val colours : (string * int) list ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/cpdfpresent.ml���������������������������������������������������������������������������0000664�0001750�0001750�00000003774�14771516640�014013� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(* Build PDF Presentations *) open Pdfutil let change_page_effect t d horizontal inward direction effect_duration page = let checkname = function | "Split" | "Blinds" | "Box" | "Wipe" | "Dissolve" | "Glitter" -> () | _ -> Cpdferror.error "Unknown presentation type" in let rest = page.Pdfpage.rest in let transdict = match t with | None -> Pdf.Dictionary [] | Some name -> checkname name; Pdf.Dictionary [("/S", Pdf.Name ("/" ^ name))] in let transdict = Pdf.add_dict_entry transdict "/D" (Pdf.Real effect_duration) in let transdict = match t with | Some ("Split" | "Blinds") -> Pdf.add_dict_entry transdict "/Dm" (Pdf.Name (if horizontal then "/H" else "/V")) | _ -> transdict in let transdict = match t with | Some ("Split" | "Box") -> Pdf.add_dict_entry transdict "/M" (Pdf.Name (if inward then "/I" else "/O")) | _ -> transdict in let transdict = match t with | Some ("Wipe" | "Glitter") -> Pdf.add_dict_entry transdict "/Di" (Pdf.Integer direction) | _ -> transdict in let rest = Pdf.add_dict_entry rest "/Trans" transdict in let rest = match d with | None -> Pdf.remove_dict_entry rest "/Dur" | Some delay -> Pdf.add_dict_entry rest "/Dur" (Pdf.Real delay) in {page with Pdfpage.rest = rest} let presentation range t d h i dir effect_dur pdf = let pages = Pdfpage.pages_of_pagetree pdf in let pages' = map2 (fun page num -> if mem num range then change_page_effect t d h i dir effect_dur page else page) pages (indx pages) in Pdfpage.change_pages true pdf pages' ����cpdf-2.8.1/cpdfmanual.pdf���������������������������������������������������������������������������0000664�0001750�0001750�00001630307�14771516640�013750� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%PDF-1.7 % 2 0 obj << /Type /ObjStm /N 100 /First 832 /Length 1513 /Filter /FlateDecode >> stream xYn7}Wɋ�ۼE'e:na(r+Y $͒93g83T㌘0!$LhgR+&i阰L΄cDIz$1'556C 2{,-h9SOyH50%#-!Pw3 y#PW=C<R1<$3OG#d[fx<-g#| y6X󘷐ü r�YbcBi邉XHJWxbL(!߂C3jLV+o ~Ӓc`C+Ck^8!MP/6Ra .m'v@%@"prH #AL$<<R*@)fDd8b@A `\0\F2aR]F eT8T1p! |5V`͸ fxrA#lp�u1Y^<^<}Vɠ!Yj1<!$[%GϞvtؓɧb5=O'ggs3|qa?\2 ӧt<92GaGwa5pUT75ACx5-"q\p]c/u4kYjVS��.C6 WV\q$ZENTJNHla!_#5MnSvs'_m|42!k9fth\Ɗ3l6˃7j|hWv*t[CO(Kv; �_ŅӔyZ_gXbz|gtחMjqՉe/IU=&fNUQ^ 2;zs@&mF=z%5MZ>hV[`{Q鬂ݦ09lN^@yZ [h׏sb*ё^sa{٬"5 JڤY\/ ws@a<3/35MRkYA]cݾK,_z�הȚwTMI.%'je 7PDYm젚T]ni2[^vvBuDʢС MV58lT0˴ܥ]{$~aUY:|V$+{ʚ<MҖj(UMw,dk>)7UpᎣPyn1ASk"bjPLܷ];M!5^4y~՘v؟2Yo㇜TTK9;{^nt)r{uQ(eMOEod VP]�?f!mu@gio`:LTizo�ỲKpr8V5y5;*io?& ^dJAhAY_(wkhe![r%06>gQ YJe?=]dp/(t ~j]qnjȨܲ\ =̧yb1=v-b endstream endobj 203 0 obj << /Type /ObjStm /N 100 /First 886 /Length 1545 /Filter /FlateDecode >> stream xYMo7W�C @4E�5V!%R qE/\jz03o͐IRtB %2TV J~V&DZD5䄒2VB"QBi!mб2s:DlrCB92=O60LC�x b dFyL FeRr,"aЅz~!G@rdx[+b (4㄂=/aQ mF*:;w<>$G !90QG:pbCѐnx3[zC gXI&Z  $AK ZClA6NXx2^xzqA(Hfgj`rQI\" 5 {+؀l;rV`9& :` <A/^A/Yxey$";AxGfno"03=fɁ< I<б<Ep~xV<in!.>N,=<:GϟK)7͹4gr3.nYq3M97Wv %O v4~݈Y]招p`pv?O/{h2jh#ijӫ@5h%NxY0o 5R\N WL%(WIܬ9McY$?3?/ӻdFݩ?$c>q>u}*\z=E+6AqL/ ʼS6qmnCnpqM˕Cs#mq*'g'Ókoy(|txqc~nMӢվɥ;Ulƾ.]y&Z:\vQ'Cu'xQu4̿JΚEPu3<gY/>33sQR>ʽe x@p[/R뮀΃yUEB֑UTS 0C ʄXʄX΄y&ӔER\˾u|^6Kb{>w?,iI]+>HYRUC:=2RD&b~C&RSN 7P޽fu~]Ư?GTo;cbI~Zvt8ZFMM2ݴ,K?R5tLFӿM2]XCazA`3F{iz5\D{�ӆ{t2/ PQهi^*>U!D`%^UߡاiZ`k.^! 4k}`9"HjTGDH+#5MǬG}E9�UrPRTl҃c5aT9nGۤW \ӯJUcM]CU іwE 5 yt_eWsi i0.rE_ XU׆˴~L endstream endobj 404 0 obj << /Type /ObjStm /N 100 /First 883 /Length 1697 /Filter /FlateDecode >> stream xڽYے7}WȮ**` H*x|+sG#<X#y$ӭVKbiRxx&4B0)4LeS;0ЖYTz9R3혗OςF%XpOw LH+P | kW#%xڡBx4p:P/D 3n,ЫJ+˙b=ҘK:>1顽 PqL8PTC fv)U@xΔ&bBE8e f =S.`xLyiQ* `$ Nlsb٠f?/a ipk>0&u 즍ӨRۣb 7G%n"FF�A`v g(1T<4X ,h<L`\,h# ZAB1$Dրp ZK`Aka& ZHN{P (dXItS$:0pK_Xa<*9GZ3txN πhBXKLf0WaAcP+ z żz1;}N_-?,{N7ʼn'!{dr?s.TG9=↊ \Pqe|yX"XX&T\S1bk8r_l# 3n7.,ꧪ+*+׺E)GQ_2moRobm/yݠMǫt}"HJyGY>۝O=o8/czGz_uV"Gm( _}TeZl甉+ᢁhsYA&6͟]_EwoúЮbEkǮ_ >SZד]ޓn>s b;M{WcoYuSUT'Ə#^Mze:K] Q@X<-b|ZPW9t12Ov{F딱"E{Xk!,;iF6"&ԥȪّr.OzM̭5Wix*uSYDElx Vw<h\<zTQ%㇈%YW)UrΎWlL�oSӺl~aѾ'Ǽk�O6"NÖ_;nN xf,^BC+A)X>,\<x1`- jx�Prd_xԗox`/~I즅QB''ņtӼg{Х7?wP VGMЛ-|WDSݻ-뮱H8qTUW5LJ^y\MQk÷ЛdB}ud~s̲b½ic#+bWE 1JN]/V5dUv3|FAmk;ElIvңK&2W]jGjwyNVtO"y2JVQuгڳ<?dGyK.ܦ_+zVYUuN_hYlя"4];ͮz9"uLgi KT[ MdwGN-xUKP{rM!YVO9(UA4=PIp/[{yY*0aMкcil·Ew~/C(A"wu=<ː7^O7Nv1=tbo endstream endobj 629 0 obj << /Length 256 /Filter /FlateDecode >> stream xmPN0+:>RJ$ 5FGI<8 ڝٙ=3( y9v_[rs)c>YF.4dQ;@۶Pwa|je81+I sdeE/c"eXveKt UVZ[@F.1^S"J0}#i)%˫P7D*-V/@k9+QK VlZ]/v͌ *b=P/'ۡ<ør.?./] endstream endobj 627 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./logo.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 636 0 R /BBox [0 0 56.693 56.693] /Group 634 0 R /Resources << /ExtGState << /G0 637 0 R /G1 638 0 R >>/ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] >> /Length 584 /Filter /FlateDecode >> stream xTnA-?LhN?%Y0@>s|=ս$tuuw~q&^X9|pUzyzr0ͷ9=LhdzwqLUGbI qӔI:'VXp^VwK 4#TT,ddˈ3*xZ*EUkNdk*8rWIFezZ W+MԸo+)\uAwy뮇5ŶRϳCv^Ҫ#L0s8xU\#aH,rwtƁC!mX+R*C삡-"WdTF@ȒeE suۨ1Bĉ\ a1$i{hI+2bEڋRfv똏OT'7sQSl?Tf+A-.BQ3L 5xRH!(|keC,a_PY];tݜ#^Y+R|*`V 'fECw?A|{xn>\soSk endstream endobj 641 0 obj << /Length 561 /Filter /FlateDecode >> stream xmSMs Wp31V';4D3=4=YL,v_bmz}۷]=]Ub))UE2Pݢx|o;0̜XqN6uϣҌ-B/rh~|*+& ZPJ*΁Уk t/Oߙ+aM-X^VP9އ:)V-/2~R<[iNWxrT JY!Jԏ dEeN@mԖʠI^ᥘjm& |\\;e]2&:Ӵ^kݻO}`YBfR=$MQH1mVc_f3^~ g,GL=?P*du{GJ~%}ROEyJ"F='I*\/q+0� H7+% szmFx�+C12Ko,BM$n VZMӼM5&av[zu|' 3zgQc$`G?8qk=n=Գ?\x+ endstream endobj 648 0 obj << /Length 1052 /Filter /FlateDecode >> stream xWKs6Wprf,oN|4VNN, IlER%!;YrAh噎ǷO[.IG,΂X*L!*i܇_yOڍ'\㏤X-m3>VŁ!Fs bP*X 5hd<i%LW 3[Te׍Q;fjnΒ4_.G]2\cC gz:8rS-l˖?>KEY8]H%U[^Z tlxXUˆ' dNU~PTh߃7(&r̺$ooicy`"$v{ͺN<ũM2ѡ Kwd + "e"e{n܍CD0ƎׄQU\X$@J-9z2H4K8T֮[8)MDx^a P"Ĝ˽u)IA'IIދ};+nc6D{D1W�M_L<ֹtzʝ$/"OHޥȃo< :<`sw81A*N7H`TF$WB`aa.^<2_C.9t|<B. cQr- N [C@2/V~weg8T:/)7L<}C:{= >P\]rkg@ӛ 8?F(aBͣSM�"p[ó_`d+,%.r^⦖xq˰'-(([_ XorVl5nl@eB`�n<qKpmS}}ru1ɋE#{"1YL$ qP9/|sQZp & tvux^7wMWK, YNb{tÇo [gh;V߭,!1b� #FU}q\HUÃ^^>ʏ˾U=R*Pz!]B9b8 <z endstream endobj 657 0 obj << /Length 1124 /Filter /FlateDecode >> stream xڵn6~ a�`쪘A@۸t,B,ɱ&PYq >$4! 8E D( lr +h`Ĵ ˎY Eann"$:B>8Lϋ4HK*:)%4bbOj};O65.轾p1Ķ :yQw]pJߟdf U[7%$t+ 7"u?- e󉥪@hl$|=$TF0s}j$qƘt=]J{NL|+ΐ@%!\* QΗEEǃg=:Ul:PVpU~*`P[9"%d6:"bVᶥJ|rq}(޸\C7g(K\mƴypi8J;72vrC ˤ7QF:^VJ;IV̬P2rJ&rTu(\X YYw)8tBxAEcP4E2TgG De*e4A1ha 0Z_{F{bȌBU84K^|챙wz\IJIm5 ]{¾lI6a?~/Ա_Dh(ۅj>#qMmV|.Pq4jD8RZVbjW0kˬ,i{]=?(Wo%(6Vl`K_Vo \bc<)DR` SVuPhzR{ZiV)FZq5>Z7 se|'uCor--\1Qi?A"4<hxܤkSi,QY6D w>@j2[:<<%IJu7{` WjTjL)`1/gk暜A(fv jl\.~ӇG J ܱ~Yȵk94lQ/Ld״ jq9PׅKK@T?,ڐֹ?HmuipNI&aK!e wTPI> endstream endobj 665 0 obj << /Length 1014 /Filter /FlateDecode >> stream xXK:WX25~?06 mIRvBe2ʮ;ǽQDCp2V0̭An ʰվ-48o` Cj cd4C[ZXK+t-j<nӟ37+}WTg?Sߦ ~Y]<Vcf\"ZPEtupHӂ%-&x8+j43Ik;Y|Wu SM~L7U^ѷ|+z3ΪdYmK *͹Tcgey/朒~MW&i&zVD4bX 8,,T9x/&yoi2}AYb$y)p#VQlx>AHHo;:Zmn<]E&۠{&GԳ!l>cUoE:֯. (K[�,ֶ-B˜CրFXu]}Es9 |SHZy'E a0³$fZeZ)b,*ir;XQ^`؁$7S09rS/&ZJS{W Wu(.]9l(rX$4Ud_6WF\*í"ptk(Vq꘢Kݘ )z~)#r<]Ori5&9&f)Rx d> 8l5&Xi6ZBѓ0pl 1?$c*6$PM.Xj+OKb?˜`U Ӣ0eO3hUw'^K=qm Ӎ!vYWZ&:,,QMםe&A+cYT?B4YUxwq8wBYUP3.;h׸MQo_\@<s0&r%:𫓽[^>=c;$&&_7?j~ endstream endobj 675 0 obj << /Length 1332 /Filter /FlateDecode >> stream xڭWn6}W ]b!%E\EvKN-wx-ّ^y = 3s搏 a#HPObe޺X~^<g Eewk8t0B|`JD0u.~Y-~ Tz'"H!a_fH Nபkcm}i)+~IeǪkjj(;< O{8)HE|0L(*?'22Yi!&.lSm =f$ʯ kP1:sc\'LCp,�:! XW>E!y>o6+]N 1f} @u#ؿqަ2nq[sSS]7j`Qs؋I&XWem3g{T461@ uڤ;@;q_kcKPcz2iohjT뮀M"qI--P(`I,&q ȴß,lNZ!<O4H$03|B(T c�Tu7u95 n;XL.Zp@f0afKk@Bn4p(0q5M+;uYilڨͰ:�^$~I b: x`n,qa4mji?m)P7iR=P$!zGTMKKѹ.WG).ib$+SoT>5Et&bm;RVniQ=}wmUM60)W]zw]Ѵ FyoD r퇾~"~~Y�)MdJff'bULڥTG 9}yS?x|^jO�$فfM6oqM޸m+cN6%wAM8}_1O$g Cf)QpǗMIkN?V6O~۵ipmLO??Xؓ 0162ʡ dc0uֆ+t5~NLI|s�X[ڲKFLf8C$b8Z Ğv&)[h'۱r;=7x(K'a4ÑD D*ttନ& ^^Na=p6_|f{vB998OUQ � rJ@t endstream endobj 684 0 obj << /Length 1051 /Filter /FlateDecode >> stream x͘M6B.$MI&Œc8?#r+86W3ÇCaO $P-6/؋Èiˑ8/歽ɧC]R^`$'/oBi%|i8P1Aymc?Fq-M Ȍ͸6?vۼ0!<v yY2jjQ+�wB08T`?av5_knoޚ.!_,YˬvS$q3'nZt]adu3WEH \$?ԣB5GiY5_P]pNwR Jq 6_@KXꌂ8D;f?,և8;UҬbȉAKM<a/`ЕS&#eLg^8j]$D8]QUkM Yg|]r7s Ha$W6?  ț*cN,(޻nk=vW ԫ,`q@lqjۅ9!\/LP B1,p!tzzi ~Yɇ'X~Z%2ݟz;*wwiKhI] !FfQ.r E1됹K6$hd$^o7m C6JP(]>Ɵ�c]=vwsWF2m�[wDR<_Q +<TM!>gR5jr]nz!%P6yug>qc7j9|*b(zZ^cH3)jRS]brևhy^-h9?6E ǹ  hwKڗ&7.[g=* d8bQJ 4Z|4N믑�7PR C/~3`2PG$C"l 2Vwᯡ4'$15SX~s1/{7Z dd3'v&>Niݠ*ǽI3pyGRӴb?|` endstream endobj 693 0 obj << /Length 1193 /Filter /FlateDecode >> stream xXv8+X:ĊH,Gǧ7^0 118)!8@Eխ{K_&$#HHbeQZL(GFLh׼XDPĹ'N^N]DG"VHQGT"ip|rwH#-H҈AX,zlq3Ogg,oߡ['Xۺ1~?L~.8%@/`P'[^EѼ� M}3JN#./5%Ax5 a_5.F1Av:R[֦+gaLW'<F$Ҽ@ؽA2ՈY{-|[<emQ\ Zo]v鞇<:Z')zC 6T~ a<@B7Nl g'yY 9 -\q8!W\O3n z(E'CDb$e'Fm]H,NWKzk *\z[U':S[!SDB\ $ ­h'7DMM]E帊 |A EqP%{Aq o߮VƸ~XKׇ~ s픍qmIaYdy{-4nOtJrJr$g�%񽒎/GUټwj %H4#'py9aa!^L遁8z`2Fڭ=7yyXc6jOeB; <@:|p$Bh:=o~"7Ct0?;E հ](5}Ƌk[u^2\S灩1@c$'\hutGa/*ǁ'dv~io~{CS'9bvG30؇ik|kq^ҟ:IE6 lӊ qFn-i-̜ZSN^ 30()i>OheGD.ӧ9iԄa$d )& !8)X1}5 H:.B)|_}G4ߧ͕-ltbh%B:ohٶXZ^n1] 85[mÖ3$|OCWSv:`m}Z͏AKSlZA=(x|RJx endstream endobj 700 0 obj << /Length 1009 /Filter /FlateDecode >> stream xڭK6,`ǴEEm|Z-) g;)Ty0 "5b20$ 1.iXZ L FƘ` ?&,O i2KR;,'ɷ 0+,a1웙ۀ8&۠ !R P#Evp1ajJaZ{Iov63fq&c]&T'^@ZieteK٤mFUY\Ϯ@eSP "M!Zv|e[AuיrWabGs;[t4Mar•@F}T8A{UΈڭ aLCIlטg,>E:N<pqwH?�4=Rp[@ʹD\Eǰ Kh)K GBntjx@F'a|BOvYMJq:v&3B{/Sf/yb[+W[ "F(:>C'm2VH$#p| 2&_/L(qy/S8,OzacK܄&}äENh t%n5QЛPT4gS U8BiK8믿)QP2PjO]ƓTp_RW0!)K{6PY? EI_)0-] ,?sh⣢O-O:iUA^UuR�ࢬ%�ޱs!xykq -'W)ѹuZpgW;QY%?]ʖIm_n BHVsZl4C^w t$OF!OBBFIU endstream endobj 710 0 obj << /Length 1086 /Filter /FlateDecode >> stream xڭWKsH+tUdzmMbWVIh!8!80nMwus9i,q0eiGN4Yt|?8lJ-qDܤݭۙfk7jOnQ~.Y$a7mY-RJ*-+͘WmifrΗ;: ,MK3g$ ! чўTBQEPF`G76~؋87bag_EB@1ҁ#Wqi"НH TB(eQԳ81'7zjU7Z#sBQ/qsʇx�^�D,Q<`ȃCޅ[l�Q6^k0cj#2yk-'E#8u*<؞l FxBPI\@v\q!P`E,[Eכ8zq9Y ,,VmaήtcQhF,e15ʗ-dԋ0}Z>;)5Q N 9 Ysfla)ŪiVz7M\ukݝMޔcwJb<C 8Za"eijԤ ͖bē�Mcxpx;}@[-iJPJ+e2zm# ٦?Eɡ/QKD9nR7k&/nA@ɝ3"edIKi+=zહ $DᣜH)KN-~0� - MK ֲ>r)~֯mQqYsUyEnJRG/N 5J5qts|a2ߡ:.;r7Upޣ$fZTNsjbzruYUTW;84P"<qSK>b3hjn u[ 575}o%uWqA1C"Q.Z endstream endobj 719 0 obj << /Length 1123 /Filter /FlateDecode >> stream xڽXr8+PD a$r2W$r.N4EYSLB3_?MFKA <6_hG?" H)(n~4KD0zlVN Q߽U R8dtA"Čpn;VJiHj h8B7d6EH?H4i?3*G?QBg~23yE;-KF%XK$+*?M5@dGT-c%?+ D� 63YCl #! LihxC5IҏO>~",K-MeݯOɣD*B#D$Tѩ-)[j\6̿^ZhL~Jpk[;O~x6LSʳ:`:Ϭeٳ~ngmtچRDj%I/+o'nڐU?+ _0<Pkwr%֡Rruvv ބu;8y$p#"0 $)ON"*0ՑBx?g6-& NAIVm{ۭvcQv:zmaoNFvf]rDilIQpE_Tm6ne{BȲ . \Ƣb \|PF.k;)XK v<J#wFq9qF'ֿm*ռjfS8_5 Pݯ&g [$E-kVv^  ѪX38Hwtj'7j[xo]*I,b^m*r%$auWE~Yҽ +!i BXRW}W_[[cX/* 2OmqM^66*;P8pwjL|)Qh9;Ri fGijx"i4Er|DZDC[*ʼn>J!WG 1T�%Nc%;2F&Aw_|ٱw-.OCJ;~4mBq3Q慍iɯYZѣ! Zud\TO? c+ endstream endobj 725 0 obj << /Length 8 /Filter /FlateDecode >> stream x���� endstream endobj 763 0 obj << /Length 991 /Filter /FlateDecode >> stream xIs08,8ĦEWB ;IOu B6OGF8QNb'i$+s5@Gճj$p=$Z0ܮitp@}L#fh5[f~~5kBHyz zƒ;`�NJZMx-K$&e)t]PuM$Zދv8 \ //lNL:R$:kw1{ Iqƺnƨpe,3msum"!5҄6n_Ix& C2ft|1Ɂ=0nԐRetOAh ^V^"Dcjbf r|RI O[I$ry`*#$vJPu�XU՗rQ.乴Pzpiک@3唉CUVa{|w_~I$*' DjPĢ.4L[HE4;4zH<yXVa 1l-kg&~ x^%j@ȷ` 5F%h)Wb@)LelJ nRC@{;RJ�HEVU,RP�Dwh[=|&_(sBY iTI1m<bnl ~WȮ]_9r*nTpXD64b;Tԅ̿nOaJ#"shgDc(&O2z# 5]|YD*X]_փFA7)-6//RO~_af vcvlJIlPƢ\}Z&^l#S]EjTGyO! 7W5 6}RJ(by?BmYz/ZfS{oY--0_w[e]0b]4r!IXOCR(aɤ$y001MSul| endstream endobj 605 0 obj << /Type /ObjStm /N 100 /First 883 /Length 2112 /Filter /FlateDecode >> stream xZKo9W_ZH  l wgƻd"+m棋ŏ؊kM1lȋĆ$tyS4NJ1>@DŽ1xD:G#Yde4Y0Ή!1KDgQqC+d+G -:0 )�DP@KD4*`x`3gz@1B@ǜ*$ÞtTF%�;!Ai5, >1,5QPugJ!Ʀr1VXBEalxT0̺3q [l[dխK'A>x�{$MQNɃQ,.ūM9lƺr6;5A"zWY@!�X @ �&֡ 'TE dAQi0 c7dB! BfEeg *Q#`E**@�BX0₭tZ@Tw,N n :HY&r6=t:1'b( ,oߚ/faebG]{1w ~9/whA8jIG8^.=#}.+}LqHz 2S},=t,3^c v|y9\2}j6^L]=gOi1o[q wAiGжLO k>B|v0mkFx֎gwY)~zޕtWwsfzu�S5 ݇JڬWG3c⿛_Gwh|w.xWx-xLۑh֚7c25oNGӑ9Mۛ'ɧ]1\Lņc~Lg?Sl-v.c2]?,o _X8]__}6imn| 1cTzň3i~~|x 3 ~îJ{] \~,-ǥzjJ`Į,qqcQrV6VTx< )\AJ.e;-Sدÿ ?ߟQi((LkX ]hpz NRP3NV/KDBeNr/(BBa zKRrhihvA60m0]j_J 4oJ8'Sn]!2 RVR)ϒij$mÆxV<q4sg Mh20Ni 2ёq5EAuXf D0fމ"kn= ܵ\}h78"o\biMH 6!ĸ X5[8_rpSdwHqzC_c0u{ҴsY6=D^ i>%%C`RR !E$g)[Dhd�*}L%đݹgf,_%S7 ZW &fh9&<UPL[+Wރ{eoJWnFA>eX?~H(n (m+\?Z>b0QS># s;>#{7�9xwЗhp6"JX0pt'_؋/Z-&ͮ-KnϽhK+}F5 0 :Yg Ţ_%#L䘡#6RhDqq"NȢ2P}0vS.C "~VWIO6nFtO:G),#1䜠;t޵AP5{8F.!݆{ª!y|P5֬<&MEqod5ڵ6߭|ad% d%u2d|-Zr-]-}-zU~)W~rz/_|WW~ _/T~ WBWC%T~ yapM)x#=>4׌YoF%sC,$ToJp<^A-i8� 0]S`=sHG; v,?]I endstream endobj 811 0 obj << /Length 1070 /Filter /FlateDecode >> stream x]oH+[ =Z%ۨԋU/$(|hv_x<=śf8Y9 s@˅(ġϢ|.|^,K/b,4|a _s\ dCG-4EٛWq."47+ 4G(J\>Px8iI!I}]u*> 0qlpw0 (lu+MG_`ᘦQ�,.Vc)4[JaYA˪4pfql]a)E)JƌB nk�8 0<{>Uہ>y20-S|y"£.o6B|؜:#CĦBǭyƒO˴;ۧ,:W] WG/9 vY뮩Ҧ h5Q'B0ǬVE3D9gJY},DޗEF<pҽ8p毼08;xS[Ut rCQƵ(::M0s!>rgmgOm6ez)9= <`}2ﶓUcTnE�.HA뛣ğVd n q֙FCtB%F'TjCJ<3.I Mb((39.gd;X[IrpG[r+ׇ2b0Sf|Jm2[LLdP8Z|:Ks3ESwduꏱϬ&L~sqR1(TnFv/ʧ~ZcnM{}7Lf+ѫ@b Zǔ'q~鶋0:?G{n%t)x6$T1Ͷ va\臾�&@l<zEvMKQx}8'8غqžF�< N<6~#r:c+Fۀ-[PPIߺx~  endstream endobj 853 0 obj << /Length 986 /Filter /FlateDecode >> stream xOo0ǮiVZ4iہ%EJpH`L1-;. #}5gg&z" 1o",<*D f ( Y&He~ͮ=PHFx Z8! 97pP 4/q О_P  $ETl58ؐCCRmrEr 8]k七khdZ>05XBN !j4c9߭ܮ+~f.4)E\ FZ Ih靿ŀӒPd/w RFBӻ(r(L( 4Ms[1.7*RmW $#ej]h.7nlRRF.\w]bZܰ6N*~5[6,r]г7bݴxgJw Sl&bW;NVJYS۬'qS72OX.;Yn<@i/NU-O.4)XP?_΄4,KJFvȄNak{,r- Sew덝QC!Uo ~jWǽjSl+/6wwWOer>&`l q?,1fK+,}#Sc䍏Qu qv`VA 웶 #ryC(NS; _](yl?O@AUѴSwn*ʹ̞mƫ*`,"Y%,m%Is<@XTnĚOqi4kf"})ˬC{uNzΘ =@~VHۀ$'"zXgiJ5AN) ~�şSWJTؠ+ۯA4;5Nu:YQ̢Xʨoi>mbB ‡bҼѢ9IM8TwdFբZ/ȳ_/n@s endstream endobj 767 0 obj << /Type /ObjStm /N 100 /First 917 /Length 2702 /Filter /FlateDecode >> stream xڵ[߫\~߿BYif$퇶sIMýߧ#;4^-A{Vgi~if4ZHZ0 U0`kJm[CZsK!EDʩ HږC* TTC E> IC1&<)ab2]O5+%> o5ms>)/Tf 4 -q-9h\>X9yA=qN &VT;)iTZĜ!Gr{ k!k7jsȌ*6ksCn`Bp E5m�J>ɡ"iEI">JZ,h.URo`@m9xDjO� 9cإ`G -A-4OgO>@pB} ߂nXxt|RA9iAbj"%t%TKx7R|RqDr,RN4Srġ-I"9T!I>P\Vw#I^LJRwI+֐as!06f2*1==yr:7tߜrש9_ܼ{o4 hƭkiM7i߄'Oe8]8? ni+_>:5mOV7P=Np8r 9jk.-m4AQ &"7zB_OsHq= ڙ\SWX GZ#<mHiYDZیnNdt=~-5چzyG S@J2ä([épi8s"iO$ਆ7XNUJ̦YW fzC0I0@8~;tzB R%.xa9 jEb(E@;R'8ֳAyݳVlX*ykL QN`wb):,dN}X dBJTy& QUI.w01@TX-oBR&U+|7jQEX5.h8[3^I +f4XqT3a6 VvPu&G.ixME8 T{mXǟ~zŹyxۇYK䴿 !IEp~~ ϟ> W7<797wws){E>|xbo%te,PKu K:5Qƨc1111zuA=|A=|A6A zmk^ڠ6赝K6(c1ެQ\( ,:(Rr³ĦB rXxh8rf#ew5"Fz^ >V;+H^<j>@oi?rJ[ÙeCHL9\gi. F3 G�Ð̊6 \R]J>@9 q!bg$81V2g0#$XۙJ>B9cD 1]T^I~p mY!! zo YQC`8&,Y u@2ڄǁ2|*D&'8r"bC 7͖֯!PT(_4QF(q(|Do.Co,g<l'~ R{j:*؉ YX|à#<`V x+VI),5``鮬Tp~Y1^>|l=ܩ8[`D rCa$1e9^N"r Ku}zRQ2%_@J/kPlQ5k\U..?2%\r냥$y8D9,<@hjL. $qº\p Cs@,v@|PnJLO\дiŠ*Ӯvr~;#hj> YܕοS=~TWWJ٭JR+c}1iOc~4fefefefeГAO=dГAO=tAo0g8頧z:٠g z6٠g zVWu]nL[Z&AuzXQ杂Y֨{IyⰐs,<46;[Qwv#KO*r'C�9#fx4IS fg`(dE&3W>-C/,"wAAϔ[->t]6^QS_zkM pn; XWeYI"I*`Pa=4"y6KW(;Srbj0ص]�bNpkոթ"mi*F9&3P:I {C\rHucF$Xm#f\FuH{Q]3 p݀}2md"P!~<ű>2^Z1 6KqT5rbٛfg~.㈶7I,� ^Τ{ a.�Y.e3 Wf8h~ ~f8gV?]p%l%.:~2_ endstream endobj 898 0 obj << /Length 1292 /Filter /FlateDecode >> stream x[s6)gݐ\Lfngg>(D`�Wn!M F9hvpx<h6a8"nxB;Τ(Tr?@xɝܜ3L<.k X�}D1}GQjX$IO||_=[Ft&2+8|./0մEҽ�i &+ 79@dOܝYsA>#s~?g?=M]~y~$,|j&QA臀{$OIP@}1k}#(7ㇻbqgwF4<hzDrNELJ =v>rXV5'U,6 �Vt=2+F42̌H8DlH,{EgbhCë]"SY\B2"=: ~u._闟nQagqQLF(M2j<2lD/Z!e=1kгe[%P}9 ֘uPp.f xR7V쥻_Zy~.1Qn*)@!ǰ]ջUo1WUYn$R/1'pLB0f{:xnx_��OfjRQB!v1t,m]֫ű\ŪكBE�#)mw44hCtMܤ^ÊgF}]v^ZeŽ(7'hզX;U&)[>@Zߓl}Z; Mlvo(~T)8tjL'V ܓW*dDk}ڃ�|2 tLG,ENh1� � cM<E ħJɉ_g*͚Юp"L~*U5c>}B3H\\dS�k q,#g!]A#*[^ڱ^t[ w 7cV/ʼny ԯ_襏AC>0;aS昺JӵI) 6&y)>epvs9V6Dl4^J&lF{fv>Wq&T4kovCuA蝈Bǩ81+('A9GS[S2=lY؍} 堙!mj"}qܮd!D!xv { 0c rX=?*stvxK endstream endobj 904 0 obj << /Length 184 /Filter /FlateDecode >> stream xп 0O1rrZ ġP[ jA||"E ~3M٤T}TU#Q,JZ멱.wН%GlbRq1 a�,";hԴ8:c9g q&/AU[п~5~ < Br/lܖ& endstream endobj 908 0 obj << /Length 8 /Filter /FlateDecode >> stream x���� endstream endobj 912 0 obj << /Length 969 /Filter /FlateDecode >> stream xڭVMo6W(1W,�EsX.` t,I8CXmڅ)yӃK:Вq)*Xky\W~e[_?=(fxG1Ӡ,1)v\(mCqike]Yf^Jz-J 򓐋K]Tve{%VqjZlWm/yAZX@nx~KsHLJo 1�yGU?:DP"= #e bTZi{>u4}-^ &PҺ~PNKw+½d|(m?FHÕmXۍ2ɖ6wŭihȉw8 z'[uXeu[ujZY˰y޿u= Q8*d Rc&|  ldu_ڎ:B[[*СoY%СP$b0DYgϼ%fTG:fJPk"!uM~ٴEoR :\褥iKܽ("I)Pi.e*,/,f5r?~Pq>e sj?FG:D`B/F*( t)Qo$ Zw4K_{S{mgCӢtXl}m0>%%xM Rs>jcC7#C_<YF,.4K$fq,㸳-Qz]l2*e gCQ%Fx[s{.ipCw[/]Sw2ڎ 0`F)ʕ"ƭ[Zy+BwUكv<9d�_5L?P endstream endobj 918 0 obj << /Length 8 /Filter /FlateDecode >> stream x���� endstream endobj 922 0 obj << /Length 1194 /Filter /FlateDecode >> stream xڥVKo6W*W`hnу,qwJ"rRV'o> ջ 8%iʓ` и.ȸRwVOhVO%Hgi ə@Ҩ r+/뫯W 4`1$EPWw4aS@I\aD�D]$x1$ 'E @!"$i^D;1Ai-`cyFILjP1w(|jKA| kp**:7衒0.[=[ciFN1=�9ACwrtfOU ǖ[ ]m%,i3GM)6]JG9Nm<}~bl Jt6")x0b0{A9 t{-)`JسD_J"AEFxKݼ_ɏX{P+O]1BD -%Ӓd, -9wcCY|[VƠ؏jV0/ .@opiSVQVIOqYVjsT?Sʛ ]YlBS|DFOGLþZ,;CPetAt4JmԌ{C"J 4ؽgPWD>ITtm,U]o C`b/<qBr/UńQL7Q020J4xZjPL ϡ{ {^-zDQvti2E&H,\`(u�JXαa7C~վD.#o`\qqR<{9pXP|kGܫ8%E/Au֠=vNN,7 K' `΃q`q2qX pw=?Oׂt7"N3e{Oh*-N|N|`S>pvg!F v^\yi]ݖBql{UMЗqı9a?FQ4xyiL4^6i5ހ޻-_Y0Nvc\}'n%0d3=2WL枳fNھe [t|oA OXUrnKXU#~.Ք2?5i rFʘ43s endstream endobj 926 0 obj << /Length 1975 /Filter /FlateDecode >> stream xڭXK6ϯ 7\5 M24Ǫ`p wza)g|t݇'*$: HQ^LRӇŠwOKyo7jbIN Z,G՚U/2;`x PwOqR«X'G6"-Y~EFDd,'T U:IHnZa¼֫]^,%ƩQ^69tnR1Q&8`׉Q[J@2|ܘޓHW4! U0*9q4FوkDx|׎9bQ"a{ӣ9T_WO߂n f EhLmQOT_8'g%ʱ2݃wOJuQu<| q@`I=JļpǻUݪöJ8eҿ_6pv{w>g}<e;7M B;{5~\قG -T6QٺFUt ~X2*]ɽZ 0 v_vW"9"hyxq~A ovn AA6ى+DKP}1z4=̂� 5f=[UY?C=t15ak]dx:,Dvhs]:@ K {Ougq˙@L *#lzG-k'o^ 8L|Y)H(HCd, )gD^bg()$E1&֭){cIUۨgݙwqV5m)AtH^C aY0^`/˘ѐxL"g@ndjxP>l�4+|ҪktGρ寃Kep0ƒ[6сI>\ƪG*F/!c2S=Wϑʆ7t~Ia�Gx/ fy/0pwU9] <:րyS,Q!Ύa 0e ɼY:Pá- Us<ښ/B!dzKMX9ơN.](\6u...Y7't6u0*ޖ;d?s`Pn’![5ɂNISO!0@f�,?JT2m 6/B M=0A-VtypXv/ڏ!`j b^(ZƄw,K;j(a 88PfKЦm|2w p_Х nFo1WY@TSjՅ~^t}L>Pne|ز�;Tk&誯 &X(ִC qoBIK+)EJ26f}@]Jdm閆J�-fѬ}05P!AY qgS7LX:T2\k2<011(gFvq>I L,ZKxaC"{vOݾ+ %T,OPS{,Hϓ_B[ U+yKWU 3RB_'l,֓14zu%ݴHH@j . <D5caH8{ǍqugJ5s${$b$\r(AX�_bZ3d 2׌{Z6 }ggY�Ngh0[GM٬ߪ>0tY"ǂ8hs/~1]a/e�!'BUjl{v;]ijsLJ*ZO h\JnNM\rc| sWpo450Y9~FrV@k endstream endobj 932 0 obj << /Length 1598 /Filter /FlateDecode >> stream xڵXɒ6WHU0@ RTű*9$N"f|IHb,.234 %Rcs t^= #YoX0')IwֹMڕDedG1u_ˮȐ[C>{uGB'A;~H V>3 겔|E)Ip$~2~p]W }]b~'=~ڪE<j.:~.ҹ]>ubhP.@U5jSUoG{j (utF(eK0*H&Nqr8Y3JO"AX%9[f'Db&M"%"Y@@\v0|ƏVʑR؝f/3Yo,Z:x 0hCӆoEE؉x@B#?C]H?^>0aQ!NQ,Af(EL nVhwdDs A0gOF}4%Q缈 abC&~ 6ޏClܑVƆy"4!2gN!XCGLЙXxhʮ,A?lTR>lcwr# Q"J%ڞ >־Fp:a?9zU=.zIY,ʐtPZIa\/ )�[Kfْ%rI]� ^TisXS�ǒujuTy e<R]bT`K\y(0亂Tc8i}.ҀTLC̑cN+ Φ1&㪫ȕUTන8S'o,n :uRҮdwJ3Br]驗;*qT ޽Kj55e𺺹Y #JwlV9/a?꽚EX{b7cӛラLjc2E(xY<!Iv硫E^޽]}@ ,'d䰧+_~}6'K33|{?2=$WDP8d؊xG:<%8;!ղB"krpYL5ȴf^%IOz͙eр HKQ,7QvCJS F.L/!0PPp`NuZ7uv'=2yGXfmn?5XVȘY5Ēv~Gvlw{$<sM&S"3U)O,`d`*|3XR1iB0Oo$}1/[y7@='w+T-#={j:}F=FifOݐVOO%<8GceR ĝ&,$`J!7RC%D,z%+[ӓ7?˴Lw&7�QLO#ᦱQlmUoraĉ:"HldEmAJQe!WH]# {@guɲ&Q160GD[ȋׇqxֳ#\ͿNJ<A_3L endstream endobj 937 0 obj << /Length 2432 /Filter /FlateDecode >> stream xڭYs۸_R3�~tI<MZ;s=PdHIq|w d%\,㷻&eaxvi5#ݭfv2FЙn|d8_XWyW4,L0ұBb$bB !_SY=P}Up܊bU=d(!fd8TY:i7Np\ n_ӷnw3/못/fCSd/ijk;&zj--}W)tI1."} $�Z*~**k{ݪ2-tn҂`B{CuQHٽr(M:ݾiŭUԖ=SneR2JB))1_œv6:d.JGJW #0 uOQ6/6$oU0H HTPG@ȍt=}? #vMZ4T |MMzMՃMܑ oZQn(�L%##}SW|CH]NX5Ñ3nxw.̊obgTΞLKj۶ۋNI$85@ghYУ5BJA F1ht*f<,zJ8mu#ZN"�R C](]ѶeZ5/nDZ،XK)$)(VMAEId0 c y7T)Dᤷ-#3ڻFt4d?]H{/U,'̰}^bO1`+]l]mi;qM�( F~�/V/i|-+t",W9:{7h)oajHL^(bA*m2u^8u#/otoÑ$ 3NʩWE SYd%`o| ~Aଝ1Poe[:\jp!Ҳ? *&MKOyPDa:/-8egɇxN:cn]Agxv+:FZ&{k hA)�{bfEaΚ;AY$"w,y1/r[e,] =D" #LZ, žpѵL ]L/ i$ʊ`�wA۲S u_p_>@}݋jD)$_jlho^3 $o*_{ ;,?TeQ38;`mbL#N[TCbI8&&ދsZIxs憺oy :*Jv)Ǧm"8L_03'chܾsC#A 0BF"8V雄1c,zL}]{!Hov/IpBP~_0U"]R xx#R9ý齄 ~(ጌ1T;O}UGJ:|™ځ,$P�;2NF.E|T*TY*XY}#gY1Dcv_pOq=@P%0�qnt,RA(};Z|ޓ&JuMsM`AZK^E3t m@e9cc\?H3P]sʊq?,wZx%x $Iz/?uԂ<aR۽z=>Ʋ+" 4۞ r$S~UV_(2x}2ΐqgL2=4 Jg@r"H↶;y1SBp9l!M<rCQ*FL}n"Ҟ}WHqk*EdaCxh]w [dW>=x 16~}Ȳ9=ixPVC%-`B1 ~Wz9˃*9)s&MBeWXr Tϓ}.{F2b~BƁƙ4I3[*O}&Vy.oMOmN�'@Lcʴˆ42)=.,ǺwfpF_$1Qu~]pr vJϨ8܎ ύ|USp'o~iق9LWї~"L?<]_\[.cu,C] $#xj##;6wsL#6\L4yXp[H8+ꖲgN?IrA#;nQqMN)Pe ! HEy\WD~`xF"u8Ϊ_sg\z)H endstream endobj 942 0 obj << /Length 2050 /Filter /FlateDecode >> stream xڭXY6~_!I:�`91=؇I&VZO--3Lbon|2 (EmTEqƃX(TpWwۼn<Zu·yo "}ZK#<b"`AT5[e,lWcU{ݭx=6c2~έlk E ~(m,d,Ri<x*7 'J")sG3Z~,|v,D*"y$i63"|#d#b \dmBIaYql [C &hLCtig;S8Lx?ҁ4տ0_.ڌ|mOM g䘎e i3JhҔH:t ({h7;E >X)=3S m-4i%}P5e~_L]Hy?|4Of]Wnpö$ wv04tf%�"J=*&<70_-l?`� X rG@#!(&U 6ۘ|x< dQXb0[Q(E;Sw,~= %.~n1>qOq;W$}mA »[ .z>aeڞ+}*Bhw⊛TB.#o>΂sR٭E7y4JXăJAJr-vC$ycf0T4*fXƂͦmm,tr(k,X4b*&zҜd4:%cZW}|4G{ci0McpC{Qm};ZeI$R"Xf i@9z<32JNQZs|N:HaLo} ?Nz�v%́ᾪm !zJ98XwyC'; VŒ(Xv$D{00;Zۏ)_ {m`Q uO94s{Jh;<۝bXd<Z& * {Z?l`E8& E)S:~@m�K)>j ?yltZ%21BԒ}'Y+KlP==uK&Oy9B'NDQ/DmBJe%(e7x.ǺAJli >Lz+<`� 'ڱI9|6QRa.KT_/Ո/W֪ZPD3pi 6qI\`T8""&Nk߫!e:8 Spfh\y8פP]F\CB#m@\8+IWeg "I39UDb+~ 3A[,8hAB�vfQl `Dly]l%H36rrۅ]8߻Vd̗1^^3/RY(!^^fϣ{xIAP`T6Z˛3ޕT^x⯏(0sK+Y@'r3J]+YKdyXXuBt</,dl͓T:Sc*: k$=(R[8MkzmO+|<'Z ${3bf;:�#WLMOJLjr4Q �+ kyaY ڪjDꞨ}[T箧)L[< n;"D+,`< opg#D,fp]�ְ:9k¸;wfBE—2V R͇`Q_3UFmUiFg=?TBnJɄE2 b0yIh̹:1P:J=۵8-46z_{P.g",lEB鵾 \#(S{2xl8f><95?�4 endstream endobj 948 0 obj << /Length 1438 /Filter /FlateDecode >> stream xڭX]o8}H?&٭:+ͪuIH Kȴ{M 4q Ss?ν̢[?t$ 'Z9":aJDK7־Ga.;_*)'Kvg.]西wSڲ'4DR ǣѣG(©!e>��n:I4H2f0~,l(rBBwqXh}Mz.۰ D6}4:3b[5ክY e~7yvḄ�va~=٪c.!̟ԢiY'qœڅy\R&^@SO~FEN2Γct7y&#&p\B]C_e$%:3:Yt:$<S̮C.ϓZy3?A{4Z#R1L(e@|[Cv\Dfq,2=,sMCsr,,.FUhGvU/qZ'9{Bvb۷) .Q%JoXeoF*m2P�ڥy»?һX;HCr V\1dr%UCbx3 ఼ۤߥ̰ٔygs$^.T>#>a50\k<B$\v |ic ei:10S_(]_(oә)Q[*-rՐLVehV8VWv.bv 62x`L@<۵6g!EuwV1Ǥ;su>zu UkwK#5>! '0: po{_/ȌɔUNЭ) %v#'L Z۲&ܳ V2BBDٵ˗08-FiU۩ @zZLTMj=rE,swƸ%y[)HӶ) UJn sp )?,vWŘn`{ #J?5ۚz9"U4YY quTKnn L� M[8fz6y*㬳�E>y~_?c'9q7L|HǠV�+"[WGW]u3#܋vD Pޗ9PĹ8Wu" N ;#0S8C%%@nz,j 4^@um={׷__*#sWEwZgE@&-�K'e D:fY+! Q:v10`�*/.Y}`jN 1niIt1 &J'sM1hOBć$ԜrxD{8hVcx|AwA�^t.W endstream endobj 855 0 obj << /Type /ObjStm /N 100 /First 892 /Length 2250 /Filter /FlateDecode >> stream xZoU~/x,`mVB m,D-*A!H7'KruDc-U7N.%I)p2'599FI]&*Yv.-8D%tHy#+ LGWKF[b^v v8q37J[TIrT7fnح7E[O < ˮxK`.C 2V4M`MG<jI+c!6yIc./I[ i {MF! 0xɄ%Sҽ%; [jI qc(;'L!.t轧ֶGc}`zڠ0<S,@qaq/(cV 1Of Ruw!;0a:\%�`{ xҡ]Z:D[[(n4^K j*XV=h`P4qQP { A~0.A8 6.TQ Uv/$]/>rOߝ*pz?nۋ%{V5f kQڿH?<Koy&!L <:WHd0>gi=V2lq9 - sYg8z"y ݠ!.F3`!sPf sf@t=Q*bS p](!NaFݎ{zqq"tk@ Con;`kPrHC@A-z5r.2TI?l# {~gggަt3dDU}qi鳴y"oy~'^=^}<t[=y͓i"39ǻ)2F#f-DZhclct:lX(c1~6g_6 ~mk_烟~>烟~>烟~}_/^cBYQux6HC*ֹ r@a(S ȀQ VDc$#3zT~hn0X֦@z bkr Pf_f)h 3=n^TṣLҌ? (QE/I(V΀7TqW ~: Uš b0Xpm�f3 lhP[e2\Tg@'a%FJ"|4냈hERGCG\hd.ӗè|k_" ai,+q82WA/{W^h}X! !Dt}鮪ɔ<UmD A+JpfPdNDA\QOw5zWTu@ +̀w t0)Y(- |T86m |sxqY*$_-Ɔ�[g@&CcE 7vUP 2_Ʋ҇GH qvpE=-f|4l\rHY1r-^YнuT0+3 cZlrEhJ&>?&G/"΢̀idB$COC^tf0hE]՟ VeYH %WSB\I+ +T-G#-=ٲ ~;@S8y Y_paҶL֧ q^/|ox0GQFh+l¬Ƿ _?ÈM¿YD/r,"$YD܋.GZ>΀(KǍ1SFA^_š8Sw  \6 O 15⇖xSs;s�![!NzI[";*g(OSt){!4Ň{k)neB)`rZW:_l{Woe�=$F$+OZgLH⫶>~}%J`Vkl}zmqzV3} kp~mq| 9ڭ- f7!)#0⛽kЈF,rR,qhP}C)v(襏o2,"wr%vHi+_<wI4.v'fQ endstream endobj 953 0 obj << /Length 2172 /Filter /FlateDecode >> stream xXKs6WrF$s[Zof'9xrEb"5"%oEZV3sr6Fw_IR+qhfS1$Փ|r]-Uә4<l:3GYS̑[=Lq#MOǏ7Ch+Q2)L 2,<>BDnu7F&9S0.'h11aJpHDYQr =y( 4HXe #RڅCB6l=qˈaQ$|3w9N2J"uXTJۃa~ ZmhtG/@`F|M;bD mMh'*78kYz3iIT$$ ygIɣ]QHn{[Yj?AƑz'~̂NYfgo+2]7!߂-c qFL[ڿ;e=mE,Eie^g?OE+jFiZW<+S% KHٳsMHMQ +v92:G6=eU,08X﯉u?P6q:<88c#L>?L# 3&ƕk!%ȂrG7oSrfL Y8f ea) !a+z1)pHhPAFDjNĐx{ݭ44E/s!\qqC.4{4$g8^;7[6ı&UyoN֒%l]jp ? A%mt7MyTDGć0~ȶE a.C֭>nh Ei"?l*L&zmA ݅|%jT4A ?K.P]AXj k%cH'|ÜO .\ɴNjyHb0=˃i6X\zP�nLa9gRb*G7Gs5ց]T{A~F"a\4ch]K)_awyk;_U^)\+U M^[2^tЏLHR\-UKwf"{(υT%q~dl$ڛጢh:Ts Sk~}˯+"VqohNx: C>:ZSOahz$'Dy n.{(D0^ʔ6+7P[2*E]zrUH]ԕ;]!PEsc5IŬ[Ec}qkB~C^bO57 yfd<%2|6+7/i۪?Q=<1j Ut�}t� KUq S9ܗ=eeFK�~V6.7e[':lQC҃2FBLChKՃ6Mʋ_W'm6d3U(<^;bV-K/noBD13֨kRG[jNC GMfH9q!f+~^K9܅]ZZ^h%_TowH/h[tcڞP# qoSPI$!o:ddU~zI6$K`w@A:2(ÇñAztx; ThA?o7[,l~(_rb9v<0|\0:2WCc^ Vl#!pP"?g` wv "9гH'|C'D(Ä׶R$?\nSBe@ b�9]ufB֑bVG$|!]zu{d HOzRj\f% ͏d;!DmtIx!QFwTG {ɠ zE uw,i:TpPP* 1BKnf:ާ[UTAB0 <z]\$LU+Oj-'<QwW5dO~ߣJ*x[;Dx endstream endobj 957 0 obj << /Length 1906 /Filter /FlateDecode >> stream xn6Pd ")sL'E ]&Ejq$MQ-(|0H}WW: 3qwXr\0]|Օfrf)2<|6mHPR<|uEN_Lp ORäqhۅHC[%U$ܔYI$фE,JBYݕE}k+_-î"\xE>t ش=} }ZK_7us !uhːUX7=<l+ WMKwC l-7tݍ;}I$Sw}VY_45@HH!Bn$zr<fss͔Z btq1G'L*б{%\/+O?Њ8VQpw�ج-e S?tܱ><*|Jf58+7CO�uTy0CdyG5փm; Kݱq{Kв<ִCV:(@ *8r,dI*(&Rpn'bfUw-8@4Ӓ2q%HK?~}a.d⌴͌jHg**;gE<5v0e֟@zX*pKB8. ( oFO$C;AV.(?d>eI+=ֱ�-YidinxCysi:W5jb&\RC�z',YW|f9&B'1cnt4]_xw}0`Pݹ*P"bJ2xC" PLAn> hQr Ҥ!5@j8Y EL|!ǥtEvL䀣vD1RGH 1>z!  Qsini~dYOaG̫Kb 9pțvkEBLFb[3`xZv+RdY&jKbT\Ql� G+#R]ǃoTL8Pg,?Seh(#822SDRu ɳ*c<չ�)%@¿H$i"VCĢψOE%;>LX cvho)Yyvy#U!CpQnoE@DMl͋ <aVFP<@.Wu.5-׮խ.f+׭b/ڃȁ:6&.4"@*(rSOGrԓfk`7"2 gY FfR#hB{>C>UxbK<LpbneH|^x,畫tI>1zܰvr'cy;nխgݰ�7!MDcK;~Xa%&j`;Wb=@C$Ο0=t",SzOn7~)}VBVFdMLqėܗk:!rłV[ZI)7EP7 ?:8E[p{c (R) fٔE^B:Fxitզf\ܛv|1YohՁ-)?%!ļ!]SFPcz= Gٽ{^㗂2~>yR@|<ݺy 4:ѨʗشywʂN!Tݴ'K2RY虶b!sNpHKΗbL~豏nrUe/zn*V(6s$_x㽧z#W q1q61eH^֒O9ft9%8s>nsk-t{@~q endstream endobj 964 0 obj << /Length 2348 /Filter /FlateDecode >> stream xڭYK6Q]f+{$![[9tjp$= -5-$$~x{ED&","Qe^<ٌ_ʘG/GPH`^RXQ~ل`\.8" <gJhbkEE۶Q{$Wێa7 Ӷ݈S{Eah[lÍW]r.k�"*bQ 乶i@ HUMTUS`/pg8zg)SYK6^7 [g^hsLO vWptmqtm^iA5"mɜtqb͔ %ZItGIx .L+iK'J1Y|6zW0ݯwݝnh>E c B ɴvǻyHCL07;` hg\3qtΒ$Š-|t$GK O ,'qHUˎ;|vϴy ܂fqjAUxQ 50ǟ}ʀ"(; HAЁPwu�c=.D.&'! 7|֝_ʎXc*Qf"9":yF5VpJeZ9Evr+Զ^rkj#KL)~_ zJr`*@~*<^idf 71{$ƚDppuA[Y3uX- kFgT5ֶYxdվਡ!@n2Xs^ajY2zei.E+9QعZWrY\p'͎`5a" dZ(w2 OqТ!vzˏn ^=rI79�N:g ~<uXX'�KDJ `My蚆*k-]l\},46 8T536vQg%NE5j}yt^ǮcA@$HED&\r$4%m%aD]Z:  }f |Ͽŧi8wR8^ː.RyRNƼ\)zyVGG zplwk'eֵ2źf? C  +&PA73N #Ig3w%3h Lq Iiv)He,S';-C *}= >j1/ ]?rqx76AznH/Sx|5lrEvBQdܹ�TaCzHixJzƩFЇZnmi<NMK �\� gbu[푰u<b#.(+\T*!Ԯ&R )Pj!uࡀ'lvc37~H/*wnQɫL<7]iKM]vaP<vQ"c"I~#q:/Y\8ҌC#"S :4X,dlR֋9$TbFJ68W |?|Tb8+Z 8*]N6/AQJAn7)RW9T"TQ\쪺)j~4Ѱ+ -+ad=[AaFx'K]!(īv%`9Ug"#{r  ,0]s䗙^'{S:!BL'qj~�/&odLEK XB+9YE;`z_ڥ7eO8 jV �6uB媚9l|e[>w_lkmnTuEepEv@7hZh}̦}L,=ftjm[=b"؛;ϿQtC?~, ~7w'gz^{=G 7Lp/ <6/ Ⱥ7wK3W�&bH͝ҮSZ9ǀN't #:aӳ ɟ�1%pt{�ֆJG--@s? $>`8"44Xdu%UJOg'u_gIMm:|,qg c鶹k"YbI U_9 5"m.B 3k'x) M QbC>g[ژ z6ay/ 7;@h�o0캃1 ϗն1|q>J;_ � endstream endobj 969 0 obj << /Length 1688 /Filter /FlateDecode >> stream xڭXKo6W9ËǢ( hТ=${e:fW(ɿ ; p8fQ&gdHELA"X$Dˋ$̂ېGϓx\hގ(JzFc!XQx)iU < T%Ec;Ir4Qfۦڊl|0h3DY)qVdyPg`>b$\$eUps%K6 NHo C GArH<@r6S8Xu_pFW<B'msjA(d²A 8p^EI Gik=daԝMsOCd{][,ԃRLmzg*~_waֵjfFF'" [.M7X^:>MSyBi)aҙ :ϻ(O#5/#.h4"gK]3�i^rArݯj8N塦ĸ6ԺaC@ iHSf,H0U?YR";kI8/X$B$ צHLAk i~]MmoUoP8X(li\8@p]Qx ;egZ_.9x扄 wKR[ &;v:\~c3"s2~<)X}, Q[2Oa_ 3�}k,U;ɳarPU]R!w7w1x`9PpQAwK"& o2U~1'=׺;YO' ]U-R:ts|x^Eq).,Be;OxM8,qP8}fH$p&S?3]stLO~v/W=H$!m<gLOt[̒cas!Ddi-[@CN%nHb�DJmZnqhT+|ċr� a_ǟʱx gSp,|?Buv$Zc^D3m[ uHW k X/ ImY|+`<]=Qu‰ɦOqZۓS\#Dʠnxq2t}A|K/Ēx2jiw�rXq?7J3l 5�;Ӣ*J be =ņ9M33 Cbf;6V`{Nq �FO6"olOxy7t0! Z -KtnIz=qqht/lY~j2_>L^DV=t5W>oP]u_<򶙂3̡*'cCWL�B\,m6cIߑ:iVP|Q%9;_,9T)wiL廬F A>9-R R|R!pSڸ' $,B<) w<Nބ0t`@do?R0>}(x:n\!`kd3sU[X}q Srp8:]= i@"8\wm_JD?w{E W@ endstream endobj 973 0 obj << /Length 1147 /Filter /FlateDecode >> stream xڥVKo8W(1˷5A uCڃ"ёPIQ~k9€Eΐy|ݭmH$`bIt-(1+v0z Yomڗ٬7RBvmADH͝X 8RJeE 5c,4/d6/%D?F((X+BAwi“8 AݵW{rGQ8vkS' 8p2qh|4O [{za:*Oi`"زH; (WpإCiTP+Lo^8߫sي Wh808ݫϫ28Ȑ1#*:!3/-A q1a$b2PԊ="6eCh� J<*ad:fؤPK'V,4ƧoMc_ǺݤÐfEmwD8UR&/<D)f�7 f(p緶Eg 0: +$0ߞjJ Y)5Td)ޗhd%1}i܌>ǡ+]z_@!BB[P,@.%Vy~Lo0 <q֕q  zn\Q Mg><$e}�?L7N31S=ymk<( Čs"Q�HBvi)Իēp.|!y"f~~Ed'akj43-L߃mAQ rsOj@ qݷ&+]W39FWb ^Bi"{~M^(1:fNj_pvk@y B(^1 <."?ܻgklף.RTSمgӪ0OOGGâ7M_>U~vѽ(Iڮ&ޏE= @,buP|UsƜ ry͔3egO8dM[äsDBf[D_ y|b &FHVpW^G?I+sY_ϐ}(L7[R<"rvp-P0K{5Z)#09KZC?# endstream endobj 978 0 obj << /Length 8 /Filter /FlateDecode >> stream x���� endstream endobj 982 0 obj << /Length 1128 /Filter /FlateDecode >> stream xڽVˎ6+!)A`0@'hh3 Zgӯ%)ɖ-)y.f7AFp8,$A8v;E ?=˃Ql8NZ) .pFy)*af犂$ h3i*^mIPHdw8es+W_Wu0 0!eAEpp`d>P(!$D5ħl(wlxƮmt4V;p X3!D lQV4jT1Q7I;ꔑeީrՒs.$݋5,^+dJS)8W ;U*z�;ɭCJkMNet۷]-ܴ_@%^AS6(Qۊ: }2us]}FK kU껪<>_lY RW^ݒ d0` O{=/9Qqb۱8"z= M9xN S1<C 0F&v T�űQLyJ5<+/x"4HPbLdś(8Β`{P4e 4(US5Bؓv4NV~oiv(Fcn.q7�r+ m4cFS�UrQC]i5xκ]<mWJ^l K4!$,oyR=wx]ga�[&oR ̯)}P�a XKEs&u; حJ ~uv3Il+][׹R[*vlkdTtÁy.�&˾2cɻޏ2b9ci &Q Fŭk2,|u;6,?0ቷY ʗ!؆\6jJXGMPyvޱ M[6Ư]e4rTJ>4>WW\O6 Rcf0QYڿ^,tdڗyS'궋rtKڶ{wFzɛ>oxxܠX�r ? endstream endobj 986 0 obj << /Length 2476 /Filter /FlateDecode >> stream xڵYo_ᗠ `1$}(Wr ˴Ɩ|\wJ,{sIofǛ/QXxYq)qY/"lɗQ$S]~TsSIvG1 "ey:nh:<Zp' \DYƂ8Ja qv}X!o%~򃢭kvw++nȫ.nL\,Mm8*Zxʞ&,H3`@(jS@oa qQywꉧW^weaa$J᯹u1<7G$e?v@m̤>f]:42ɪ?s.orUv-κ]NM%,EG=@_9v:$,c_}ީyLYdM#*-Ύ98w`XejI_NNCLۺ5^Y:Fۭ֘Yy"XG`BzM^m@#ȈңA.:V0f,.1HB8, OQ1}~"yd3V.Q8Z){HۡZ|egnW`\};:_/8IH޹Ab>h@swBK&Ld;lISLZdqT76qQd6x^gcַp"d)1 =7tXf>0q){VhY;EQ;l ̇}R{:Vop0\w>\4LQni ZmCէx:wqtqO'3PN` �P(}\hD|v�JQ ˶-P{3@n3p޵ͧk-S&)]V>oǣZL"kbK(c&d|$2!_o~_|#7A)%ӫ<hW!BWzQ{\]҉. ZFyX7h`UMTv26i]_J<�cVR F~+ XA/ s6bQ�CR\Z7p~ sb* ޭcr`*6JvW&R2<9U_:K4IEF0`h #09 �dE!42&m)'"쎢nC"O$H{_I'cSmkNEwR=ɡ!2DF= L]S@#LÄRkl|l*@Q�{h!RW4 $<cf?T U�,upj!FUR0FUr'5+K `&ÑҌj^1Ãӈj~q`O#+B*l!\iSu+oO+mN u }y!h� pa]STqWRX4Ta6gJMj0%Q{,]6mN"H\qA¡ѢBTdf @0dA@z1KD w c3" ` PsNd9uGdT"d@eG}|1ol3꽇ĪPEYCvl4> /"LeJVU&qF'$a 16"`.ڵr b i.ϒ{p1"]֯-^o2c -g׵L#f=t)ݹQ,Qo>?zFL+^(7O>iP꼚HiP~.Dd @hE&XCQl!]!fK�M4R<qΆAfo Rކ!2/yr;Dڋ@0%AyUl亃Gzt㏟5L`Ƃ^uu ܗ12*6~W(Τ!nfa�ӡC$֡s""!sc\+ �ms^ bs|xiLsOF9M1 4*c" PͬStuf7F|SתŘXc ix?6rUKbj "2rV h]"˻}ƅE6uOG!պKO2 MX7>W/%EiO˹8rSUQjNN:iO^zL9T7}Mln.Cw (cL"%0%4--|!uݨ~=h\XrVpVh@r[3N@I 岌oJ^=>q-phU[?xZWxS *e;z~-?_>/<\0im˻)3-=#gӷ;!fd%b"ϯ[ [@kV*TrEC endstream endobj 990 0 obj << /Length 1970 /Filter /FlateDecode >> stream xڭXms۸_LtBD&7k:ߒ@1ED*vn.HQ帾@ �yvqsw=ffBgb!KOt\Da <ax,j*,ږ#.]rQQȌf!,XaRk_n'C4m6s'ƃ"oWø-i+kKr)}XXlEw_o;9SK#}}]U3#xFJLp~ѻ6Ri-ǫ"벬@HC3\ѮXn`]wj'p}l)UR,[N xw}=-}=v EsJѢSl.5*FoL^y82Hu}hN�GT,`5 5jne0ud޸cs gKig a:˫7vFfR{ג"mhZst2񈙈P*�W<ؤKmj.|.pku[۪cC�d;C44;4Jɯ?n8ީC*5UK[9#xGTZ{o%_-)iwmș2\tBwd䶪[w/7rk }++MFa[ |`zSPbhbp$: >5ufXuvEt[ئŻ_/oxx<~ g9| "Td\ ?c�О)$qxrz09T0˰]Qsba^mk߼yӍ{[J.e !C C>%3:P=opeXؑ@_HQØ$�h'"#Mɑ)"I5AW˒v$Di*WަmY`& ~SDM`r(KB9 %0Bc�\+ԕoH!Z#r\eiKә R=i{ǨecjvC6;i(p4sd禛MD\9y_G Ҙ ]Lmv$) 4Z7uֵd]&M &$gtĨϨ5x E֧:RRKƥYKV!G$!Ӊ$K=R}-(cp$#I0)W1dG'`$)%Boal\,K23tr{PI::c: TOjsPy:)~q Uڌdtf+ŧ'aw` SV�"F)wqP8dJezrK?|Y[kHKe8(.-8d^- }A!EUс@ `+2"IA45||:! |W.!P6F<P&�cn&ȀL<{E,U|g.:hżs94OHNQz7_\$8wu:_~c}y^NNVwƐFelv_O$c.& nZdǡTZ,Kš~5-xx=wa~WL``Q qlx)F M+8U# 򠅜oؗ@/Ə$$L?OzGIo`]HHѧ{]O8zW{LDg]@vlUH{ `C)Ԗ[W:Q-3MɊgRU,_rd7W>~G~,np!-/`o !Z}Ln=VJ^ endstream endobj 996 0 obj << /Length 1349 /Filter /FlateDecode >> stream xڭWK6% ^uh-➶9wFJr63%ۻH5o>7&yP"i}d\ 9 l>".+#$2a6<l%)u~hy͛7" 2*zpy)e͚-2QS|i(T"h;XpT%y$g\ĈD9T(<&{՟/8xͺce=~+7O' 9*CBlнÏvO==q?෣w1؛Ö-kiwaW(?}s̾)w3`ZT,2F?QuagHcOlrw1# UkI?e=a 9b@9EB C'O8jzX)(D1P,V$rƊɜ l"MQ<>g*L" E$ԏ3IXƅYZ2f՝uG(b( zVăuahlkH8eTR0,C4)BǿOKC蔄�ׄˡo.I򜥀D Iۂ6~wf9y{9%Ԑ<{x2rEa|VR AdHn>x۾kPݚ"蟝;b{3uOϩyq$))ɛ VxX TOWYKGƠ3qkшm$+1Jn T/+3czAXĉ6)lcG{vV9b(uL n5_e,'<lQ'E{lM4緛rzYnf#[>]U%+Ѡ /*=0tXz.f_P\?М�ݥ-pGq"I>ӉK\դ?㼐P^x-Y<Jx|<C~xEVG< m c_Bל,lc0j0R_<-x@KwZgB˛�3bZ70mСNcز ҳӾ.K[w\u /NIHK8T( Zm1aJ! @C& {GǧWLWx*u%#,_ �1nb: =U^}`dVcI8�(ϟAt)X cq)ӱVYd endstream endobj 1000 0 obj << /Length 600 /Filter /FlateDecode >> stream xڽVM W=%(O(ÞZ57+1jQfbcgM&qO�ޛܯO_#ϣ.X ppIU,sH]<Ճ ?Is 躈heeƀm @[D=�l}=P8ͽa}-=P l"F}#է @󜆳`>Ӿ|<t=gb wbOm/;3 ajm@GBFŖ/-X|T&DK$d*a*Tho&{B/' a%,UE Ӱ1K`8@'"ekD\n/ 3I *kDY-]8R۽[,1>'j4HpSyQBr8`U:Hy㱒b)sed큚ipt')s˲:DRa<Ygu卫72(*//m 6B\Ե(;"qj,1#ӯrZmy=ʰth@.hϺQR#hINNzM'IQ@j@q endstream endobj 1005 0 obj << /Length 1724 /Filter /FlateDecode >> stream xXKo6Wj/×4=-C7Z˵h%EI~}J+iPC g^]x"*qp $' Jכ&d/^3F;oւ'Buݙf Y;"bDȘ[.JJ`$1֌RB9o=<F(S2(IȺ,�]d>ޛ45j-)oqY449Ih6svFopOɻٶj{u>c"Jrj9gt[c{)e2RN .)AKS[2]%N{%oW-w F݄uh[5EvH Vԃ_ڗ1)h)QkMR jvX"PǶí@'@~1sh_yxΟӓ~:K ]nLpYR8r'>,G"䑈贈HDr$"=-Bqo .Y~yYۈN#VYauyq|KRbgI@ݽzFtVH=VGxdmo*[\} ЊLz וP|ֻ0CBŷp+OQK Ҕp&,;m pN0 %BǼ(lsC) Y P$um  2wMg PL <)@a'Suk*Ǹ" {UFwyjO:a-FgH(,'G4ٷw8�=[uUL`<E;!n+90*;Sv- VgV9lekM%iEWUrX|ҡqv\B0hB;"۸ l:D:B׫. H.f;AK/1c< fG05Hfngk,~oGѳ%+WIβj_5)xm]6|cI{I? }y~Нg*g]}: Bvg7hOD@+68Dޞ=@Åm)4ȈyW4'DD0՛-89Ǒ㘗䰹±wn2[RBez^U%//m6~6]-G$1;:HY:zD@ݝa1#XSZo;БB&) Lpf71� \M=۵ G[:qšDjW[9ǜiM`So!-b6g,#3C uηoF<;�jdA]l,;yck$6 q Š�h,~ i A"" ,GGJanOCygzR1ڣ6ʻqa~m N}GA'`8 Di;`Q1zZ);7HIe5}_N?&b*|XG 'LńC58Sx)5SZW힤0?Cck4i,̶{>S’WͩGXDR6pwOD;խt]:bRi_f`h (5@]ն7_O!6ϐ5 };d*bXϦui\ `97ݑ hsP 8)9/ڰP0?-k2%qZ}eTx+6>N@ﳽ3"_q endstream endobj 1010 0 obj << /Length 1547 /Filter /FlateDecode >> stream xڭXK6çD]4"A�Kr%n_K7^@rga*RH4Hr* #x4/Ouu;K1CD8?n052Nȑ(0FN|ݱ}bou\4[}Nnofރ\;Y6u>I'>yݢ܎TLm23 nHG")s ɐR"ZV7਀`dlOV'qn6S` 1~V8G\/&VRn,`| RNXn,IvM^`֭vFP G roӍf৲8r�#~nT> 2D% CD"ZgAIr1P$ItMf(gI`$&}(wwr*a*/ynu1lcY?4B`DNhCԩ6zڵ~ޝ9 L6P]LΝ�Lqp ;�ԭl۴}ueؼ,vzOgr:D]P0S#&Ք%e*!BGwl?gJvE/ 9_8T†?1r >u֭W ܴƷru DS6_tp+]>@8%FO>i0^;]RA Gz]*N#)ugW;O1�]\V SȪfs2?rc9pCY}-{^aJ2OqϨBX0nff)kOi [7!D̳z@f‚ g;ǴmҤ2[[BnYʠck=C?-XVj5>yN qy(Oy!!LG/T-DUvq 4B^&K+\qa8B!,pC 8@dQ#G-lo+W=`I\?+2Nj/mmg )Tu^,�]Us5Ð@ob`p\qQ/*>I^Lp,IgU8CpjqE@nvA6O< ex1Uc{o["oR(<Ko%BG/DA̟tۗK+.DHo+qZB'r8R]`~s~\H[`U(eyԷSeJwzEYCWO-LWw&I�"0+(0</|s>apOl_{ N4^6K3oktygze켂o<Epez!PxQ59 's*lO6E"^z32짦7u/ej! (u5f,lEc*{l;T\?V Y.Ηą>RXwBY,4؏)T<i?.P<N` endstream endobj 1014 0 obj << /Length 1976 /Filter /FlateDecode >> stream xڭYKs6WrI-MVeߜ(#HYi $P@?OHJRjDrx%E):yL9珟(ຐ鏛j?}Mϔ/ճ-?c ?SEzwMj9DErr wdHiٶowY&D|IM$R1/*pVHQDP&P~4io![u&](wmZ27/~ঝiPqNh3n /[}=cv|SE:퇪]SM>ܳ"5Uofngܲ\$<*)*KK0IkBw >ck7Tè30B)?3Ў "@ˇ{eZ?SSŻ{B[v>�Pq Z:1kcp^W6M;  ٷx4 KcNV. ~ȒI5jlg3`[0~ӭX X⬥XeqԵP38ƴ8i3n8u\-8]驳ñBkR@MXfyAry;) y<Cx`i[.cmwM];�11Lfgھ>Wݢ [gώ{Ld 5MKBA޵ׇfeΖR<"uN$ե>eah,<!kh1$8d,{Ȭ+N/XUQMe Xc?\k3Dz4l8lO!> CJ%njf9oV.( ǙE*I^ET|Qp\@NVn],v)a 3T0Wm8(g0~]<L{webvϧ7.C9d}W=m G^9Nfa"4m*& !bS%0v{s9j[ }hqPQCE{5kj$ W Wܻx!ՓwuBs꣠;^.-[3{ؙ|d.N3Z'hi!۶iRgDf6b a}nMQ5>%މA5*`6bA) [5[CPD*= l 09@˼H/`GRzPFs˷.DoOIoU(ױF 7!p~oܫV- e >a9{w 1xE9dp+%: 袒 )g<L8P|󦝂TV3J\<pzndn">2hA(˗#F 09{Å:Ͼ{3ؓ㮬 +Dkw@mLa~ Д.̴UJژJЯ9w…$v G Vi`JC_Y5/ x3)B<m `^l{@ºۭ6Z=-]JEd9o1|peWr#SC(G Nb ylpP#յV?D݊JEں[!jujMwK-\ }?f{S컬E&Ruۧ<&4\ ?*]Vcn*p< (K0lB?PwuC,ϰq1aGzyYKV""G/:mv0T@^uutv~GL-~ćQYM{_ׯɆξF!YXF 2:fOЭMߏ|O{>T?ȟ$;um(ǎ޲9>z^0`aDo^_%d_C hhiUËi07Yo̸ endstream endobj 1018 0 obj << /Length 1917 /Filter /FlateDecode >> stream xڭXr8+Xs,+TLtsr(bŲ링hs<N@/xww'^$! ֋E& 9 DxwܥN5%b)CNTXrgtm׻;XIEEȴ.R-9UU@.~W2y~T,ԓl@*AjpQĦ Jd (/YAG-L͵BxǗbpH.IC%"#w`3S W]v6ٮnU ](Fo &Q5]ErC?Ai}a#oKHY4 -'D sz6ߨS VWƄ b]4X^JHdYzhYkKV(5?׽KQ( syoƖvݙ _$usš ?W7?n"160!3bBu:0]A栊NL 6% “4 HR!ԱWy Q̨;35@%",&;;Ԧ%{WCdF]vV8<<R?8ɝ*<1o0rd/svۭ\ID9WWIyq`|W h`J8h!h7n;,6RO!x׼S<Ϻ~:d[7M%[GDD1@4eD b@YD€9%jPA!x/yxBFctel`w;Hlo᪁LY35MЅP^g8oշv}w ǟwb<9_l*\iᡀkak`ab&n>3AWrYL7PIoo8_Twk=Zb_cZOb\A4e.YaoPrPly}'}Ux NߎM3rf%�NhU)a^eej` X vFsY, 2"Q͠M;b' wE1h�ީ!fj9]kǐdRI%6L5cO7Ws\Eλ<-pGZKr͢@Q䝲 �t};pQ(3X W $q| ZqݏoaBAq)l(A Bm;qҲ&ƈ[sV /mZ{IT Q0&{pvp{.+plـ6� BO03e иHB/Blj | a.G$OXH*s $ T }B|us@)`ZmLO5 jEf?ls3܉Sv0[e#Kgn_0Rjs{Ju0i6q>r %[| l M<Gj<2W`k'|+GE<Kj'& Uy% OZ gH<>[4:١z h٦31zr__46&0W2 E/g% XWXLp l]w]]O YyQk`r81l_#vkSEv3ISx@:N4D>jb"jC`%ZjÁ8N�زܚ"]kG+Ajs2L�c�EzLa溰́ $ۖ" Vkr@ cqSCv^ endstream endobj 1022 0 obj << /Length 1513 /Filter /FlateDecode >> stream xڭWn8}W21M(Pg7-Plw77EBeI+u;Kobrg ;x)K#y‹dȒTyܛBLgoLQuBd@G1[j]>{!x[l{/d2Mx U+OWyi2/=@ Si,u@s$iB\]4rDa˶< lcb_?46&/2 e)V6 : [ߴY2oimd]=F Uo/_,7UWߊ+N߬Agg.Q+GWpk@rLb ) wј 붊1mue?#ISZ@ PVc(@sQ�(o OaQgTmQ $8`ay Ê=)$c&BρpЁ @ 3<LGveynhm]Q4ER~ۛ'vkSXz%~yu‘wC&2gU|u°Zr! A|6Mi#+rƥ)RfJ.g�TPlu3MCmf\9$3ls>_̓ҟ{84p;dL%f$$_. v`lƑ '6nw�*"妆D|( .e8b欚 I8KڕLFGA O3{_6wABiiLz_b nc|t$ rw^eX HUg2+r^'b= ;Yre!)S}W}.~# P_?G~2?G~�WWLB& 7zz~^~' H~%Fڞ+TǽM 80jjJ%`ǩa(&/I@aNeP#qƂyذvENs + xRѥܢLhGTg}΀zjaBQ@M1F'bh2VI1"O/ p@ͷd{اuC�SzGpν_M |/ݙF AG.X!˻qheivZy5e=<mn&mNU^%"f6v3acǽ�<L2񨟊ja= k\�/Hd(Æ �N ,MKo+FYonhs̺5˯H3!t"f�Tw¦�X3c iˬ9-z(HEv@^\S9'$AbpYW7T&p3JPEO˭9' XTj/>ẙCq#cQ}q4BFNo=<Hc;؛.Ǿ;[ۮ?A�Qw? endstream endobj 1026 0 obj << /Length 1249 /Filter /FlateDecode >> stream xڭWKo8W(KRE@Ҧ@{.=990 +ZI7Ce[RɞDR7͌t~x5g$I L䂸2XתtX\}G)A,eVI \4EiPF5%. вZ` M6Z.xPl{@Igq"_St 8#_頁deWqn# #y )DP!-QBii=MVQtM=OHA(eWQcFhTԍnS=D:14Z=EP#qݙ7OM88wa0MS3<!UwHrE Id`aK )_`<cS8y6/_BהZ)|um_5|P]e=^QHbk aPzNX8' ,#@/銳<ܭ%i؛6c.JU)<hU7TŶVxnt]SIvjA5~aÙjKpٹ?POoT"b0^, oRǛagG. <.Pb)2-AErCDrmϵ_a;̆]UCUf}'I8%NH2 60$'\s<.xxg3wE-1pQ0`.C1_݁c \m^Q=SQpN$P 5c!vJә,Klm??USZ>3a5rI7Fp*9g &){3lJ¡0#l\|Opuk-gPotDXA ȿ"(gde_ (6 ɔ22xEdd;f̦A%D1TУ.NS: s~ Q𦙐 s\!|f0Z,Bu[ &)|8s~pc.~&*'39lrtCN(vNhm<c" 8ymۚnM3B̰ o}E  q}fjssA꒒Ky0>Qkx- > Yk]:'hS*^ZG1zpb3eiX<6~o endstream endobj 1031 0 obj << /Length 1763 /Filter /FlateDecode >> stream xڥXIo8W=)@ĊzH7=�A-Ѷ0Zry#eIq9Moo.^Y<aIp # I nC&.|~|t6b$|V^.#&PH&q)v۾j\WMzذ4' Hl?eY W8,U=5uY.;$g2E{$_rjn]_Nl$>IhєdQFvN{8wiZO53N1uٝbTџdG9;wZڮ♜U֧͢Y덶G%k,yG]Gp]\"F Ǔqr6 l<UVg}ZkOW!4BU'y�q@J4ـ= rG ֪DeF~n`ve\wCAMu&,ܨe+evW<ү+-Pj3"EU ?hn_{.eۺ*#UX^c@دpP5'cm v{I) ۽ôr4Zӗ?P7ȗ- >6bo $ώd>\,ў7PL8g&RQ6іSlXo Ѥpe-8Svw=,㒉k<܁u*s0-&׌؏sJgW�I;2x ,&aСstM㜤YoqPgP}7 #Bku)hā$SG` TIQER !͒0�`4DlSW#o%<QY3r$9Ң,_Ha<䳟a}- l_q,XfVg1A &^s)C!9OaJ@JxB(E9e)z5E0�ǁ�Wl�3&5EOl `mR?]zNK5NmU&&8ǔQ -[''/!'1Cfc Z7Cn`<}^py>#u{P P9gNF2 S" $4ovz,'?HX8gOɧ/s.,ݟ~^i  y?M3*S !v bāAp�Txdu[Pb8ݖ9k[sń8t1JyX: 48Q1!d1~Wi3̑@8#2Jdxʡ܏7'R-yL*} :,܂dLTZc#v~ah:SYU6:x6O &%,L\Oq145ҡkٞ _z^MEkq9Ưpİ. pe2+ƥ+Ӗ;UK v3=*Ur&E<% u3Ħ– "@0OC qh$஧`SD@b(ݡp :J#q#1VYvsX7nۻԏ==?Qn1(!= $<r`yVxsL{i?'1^\Sn|;s /XC=/L Bu@Cǩ<Ti>JanߩFQ^u-3pt"kSc 'bL�xPmL q endstream endobj 1035 0 obj << /Length 1117 /Filter /FlateDecode >> stream xڭWn6+X")( h.�e,:Vǒ_K^J,'팳q1fݵfD).uKBSI._)l{[&\X.n>)A<cID8۝m⧛ŗ+IVF}(Iu=y:!ܹ*mD()ɩ8QNTD*Yz(J㤰 . yl{J0o3s}[{}HuY;+k )RMƄN<ȧ:#<gЩ` Sn<m\mUWKowKcYWfUVe_v�g0dqv4ஊxf]{܊~>8^R]W i@GRRM[apiٓe4ƀҸ<!&I}]+L pT24YgOc&~+KɨMLT()MIm-�ڏ#Cu(;j_ۦGw�%8G $(y7K ibR\ 5Ǎ,xo@ IzӬ>Xfo0l?Wᾳ߿\ EYF4ӯm.K9 饺|^>y}(92gSLkOAlT'dlStls|,[;080lqy2^Me]mǿol`S*tCP T3">|GDFrK!Y )f i<şfm8ǬJ:jPhoxBĺgeAMBcu;3U@@|S~8m>Sim!#5J)Osyoo#wb./{[f$eO1*�+c>8љi8(# $<}, sW2HO"=+ d\~W!s l^#B⻊?޸'K1fK&S(#CL. 7z_ endstream endobj 950 0 obj << /Type /ObjStm /N 100 /First 890 /Length 1495 /Filter /FlateDecode >> stream xXMo7 бhERD-ACZ#YA@8ڞO_v57HqƲ, sȹXDCTM ʲRu �0UJh(7T%@k $ +3%Pp  x-xau7gA+a)Hfk ̙wn�Z8I`ŕC*cS hK߅5m+ Y?F2ēf+Ŀ}- X f}0. $Hu v |.TCNĦD!c+ I D<X#ĵ`{DDQ,(y԰Lҡ0W]$WllI% Cq(uz0wv r[)a 12(q!YC0'*1`l-[q aTGZMuMg݀�T <Ɠ zZ~ $E1A9.$xҵm$F.[,dNfk(b,\HEX+W)2BѣPv(Ux GGaycSۇnWr|be8 ώeث>pb ֗tgy|\.BMzS8I(�x|eN,D:dw|y3,^|zB݅;s]Pͱ"rVXb#qG˰ijxf9r-(נX1=lbEQlmcB%V kfdP )\ߩNK"Qt@99}:c^MO>婙TYf,}qVƵ̶7:x:r=fr^rm~7H! yTv[ 82T�'QQ6zZ)=h7!MO;C3<sk٥pN2z�'UmCu2ں?Özh|{;BTs2Qm:,O欌*=hW*zuKCd�Q@(xNjjDvg f)Zf3f5!$-r%K?;N{<_O0*ԍ(-Hv^|LA&Ԯ$c)z3-Ť3PJÔq)Mb'퀜6wP?ş\;Lt_&R}+)}>TL:.fn,)QCzVφsvR�!I"\"t~"K650'tB0zSd| қ%z|�Ub4Qgܭ_f&)1Y4UraUԋC{rcCLI֭fr(Z5{3 Lh6GIvUb< KbMt_1?!M%܃|4{໤_r >I endstream endobj 1039 0 obj << /Length 1417 /Filter /FlateDecode >> stream xڭWK6Сh f#( t.[VmX_ߡf$KED8~3z}c(Yvŭb-x趌>1>~x}#u6i2Zv{wXƂ)s]W3IõUZK\R>~9:On2/k{Z,xd^I$ւUf+֬sQ Њf5|!ݫ2d\y,^W}avyK;[ -c'+"ܞ,v;߸j\�^|᱐qk�ع7۫/Wpƚh>}Q y ? Hō ju%D"*^\ C~&*JA/6!&VVCJb_cȝjYqOi Ob F>q $g(J v ,C ) RY*qRehT{ʤ߅5+|mu:v _,v!`C6}T &9)IÅg`2㌞(-vH=dǠ8%!pgRmTv%܈tI[KݹӬfCգqj7LD' CGّ\C4mCtAZ;!CK')H[ka@$0 %aPwչy/6O]5?0W-.働yȽqN#'(eڟVbD(.q>1흛D*p71%H%y&S$od'Z{V}mPj xPd*mB=aoKIȢ?]_Ę ?7g=]HJ2yU;ʼ/+B:Q5/TDAbH> +,IOנC 2իe_Cl1rck]!ܥ&(H8]=rti3 px\ I¶ս#-z(N"ԠeۂfT'&Bt%U-oQ떀$0;KnƦV Ni!t|$Tɴ)Kr֯_Ӑc?N~﫲ILjW0ˎQY9<G"Ra/n4EN]aZs8NPk1v'%ڢ/GPV;k l:bQlw?68U״)yRTr2%DKy&L46KH56%y KjjH  u<AGZھ/8!0U&:ǿ,ٳ endstream endobj 1044 0 obj << /Length 1378 /Filter /FlateDecode >> stream xڵWKs6WpU,i@U)v=lTfGY@,:> vWN~wS~qQb9͓!)sw")CD}ܤ`xv)H1TqR8r(˃{v8ދ_.<[4p)h'svBcNM}bϪ�f<*޻x HpΜ!Y9\f4k߼&{(oBqC.#-ٟFaF2jto^v3h`'DuUӜi^AuV^0adGϬZy/h~[ݵ2Ӈֽ]::ʶvţ~-8V5r;R0E0{Htݑ׋ʌKSGNew'؆u5TxeaԵ4Ʃ4J3U;-@0Q ZpSA9y xD�BP ^V0[~9KR{cLuն (͓z+[AZG{7 \ޚ FV0ج/Z ÷Gn%IњErBYNv9*}N\d`o]XA}*QfhG 8lej"}=婩beyO&)`>FE} tgRx,vfra8D 1ҹEH p1sj*6 }XkwP]qjh1&hHJ%�+`/=:Ιh"ںVX"lNFMG="T\_هn4TY<[#Խ`iч1cUk=<]g <4<; '$  뒱TL) |~FUVBQ`)DGgmX󭆥(cgh ;^` afGBDle|7G%]p &BE۩WHpV{w|!|p<QLjGd�SVVNS[)0w EjwK`QX9~dP}T??z <9?XkǢrߕ_Aw8�a&鲠w,݄gJ7C.+`ezj𱺏<ʻ D}Tmh<5]vlTe=% Ne�$E^s_!K'<"WTxxsfu0x3?֋w?3&W(; . ~X|(}~BZ/~q `.z~n|WORHKh!Gj endstream endobj 1049 0 obj << /Length 1843 /Filter /FlateDecode >> stream xڝXIsFWx T%{ҾYNNfT%E6E @1yhBoo|ۇ7wIfRFHK(UFG1燏o2sťv˄)')o6_ZI\ $ȼ[;$mEvWv8k>WGMrͤbsGKqLH ɴdet1LHeE<3 mr0*ިD<O$1,M24_S϶p(fOu7̻DpfkwD)io~ߴIjWg(%oc/-O&.2,K߸`/Y¸8<>ӨmB-~ )|jY,lƢ,_guu类yvm]Hw5~Q/߈`\oiRJpֳ52^Wr닺zqM56"UŢ^:Eps /4[4˳Z.Bz׵Ł Fp)7&,?\{mX>^eЭ߃b[-q t.p48r:,fh $4U>U&D1]튚t~7kgI ret!=n,x/ ^[ N۵][rŌHbO=PVBپH;ݻz+#pyU70ll;t8drIޮܾ,*ruPO qD!ׂCݒ W=[3QzWSj6ǘ#?Imh@oLʈv^m7Fۺ:A)9܉)svyPo8@൑'$~OBfb9w߆P *%LTk*P}ئyƻIDNJHrgTh| f0om[,pK |vs讞4%R_g{-™-[7}ͳzY>&O3=X4] ɡ +3I!Iagx`mPN\z|sjD̦}\t7\S].GP)9]^ Ax Χ9e&,x.ָ.E .bDž$ϸLG@^Sݭ~Pd}+l ZG`j_txM(kN <t>pQf)Ky>oh͋۾ ӵ U� XH[&2~."``-h(-.M\T8.{Zc[N̜SGY/@ r]D\x�>͌֐P99z G!ND+ #h=E! ;ڠp@671zw~f`kRV G ,] Hkj$ɐ;@L+W{(o,  |I -B;RpѝI&R}HgeIε:tp[ڢaᛝ_@:7< jA_9&P<c '||&]@HɄ Hkx^ = TI�CM=G K]K$Vۺr = BC8B&3NK0{sЏ~ߵye+>&͵]_Xn^?/ҾYHaqچQl? ěHjo 쫉? 4xo˨TE?mA endstream endobj 1054 0 obj << /Length 2024 /Filter /FlateDecode >> stream xڵXKs6WtUάk'lƻ3JmH"Rc+~h")RǓApht\^aFXut{Ie+,|LM\pEcM.Jlݗr!(*On$Zp(n&m.rz+MQn?o/`?YXfDlBjsqF|)DX=H$%a>^y6Qc)c2;4I՛yo'<޿'Aj?j3-#g`9YzN1@MrdnS<OTiS601% Wu9Zϙhz(¥-xLJW( eip>'J*BX1}jr7z 6R$ GD;p|pGOr^ïD}AZp0kү雁ͯRoG2£$aX=CIB0_ʙ)0R)U9tFim eƎS4*)I*&*l[ʺB]Gb 5#iPt.P"(L�j|R,7pP!x,{xqv5sy&c&F`,;erc91||wMJרqUAذ$ΊKi+vi-TBQ&xW2Msnk 021ŎM+Cu«qTd: Ⱅ(Cc@B <5]sr%_C;_g p䆆! u`,u`?VϪl:p�B^=Vh2L[u('1GBAuooT> <f�D^<<6(^N8$2pB 2Z"p0o&5Lo`/ҭ.j;\=3>&P,iw#|Q(Buy>r(\(%\%mQ ETږ6Fh6 ]katbwpG("d_vJ- DGo$Kվ|=wͨ|D-.8Փ.|ԏ!j)z9%o؜,~ua$>~liۛ CDB)qj57u-icqsqYܸ"*ƭFDHPLf>5J PzSa"#[&t1o Ooʑ,2^To %a$ډܟrA^FB~VV@. ď&Xצ9j=t"5w_wQ_KD= jhb]b=HN*JT⁆x*s"YGX |N`,,;k,N gJ[h]MO{=T][/Z1 9^sAcK p|S} صPLpPtq1+_m$ nq-ؽ:ċٌ+k쥆)Bnt E8uP"Js:h  x #+2b@Em~^\8jx ֞|`_xVD!㶥Tʲyk<Cf<N.(4-1pCH80t8ꓕ1U{G7VΔSUaGBP U6s3X⥾Å߫?~CxGѹ3Mno &\UǢD%:骽BB \EDC>0*BTf*t|#`J\|8m^?e[YlP? ר* θ0UV+dyFJ{SB?p̓~{\-#u湙Hr kv]F*/mKȝ?t;=WfH;W" }F 6}w0Z^6<^/^m W8 endstream endobj 1060 0 obj << /Length 2013 /Filter /FlateDecode >> stream xڭX[~_aIVEd!@[yAƶI겛/gHْ/l6pHaHYh,`XD2`Ibq`\ lv0"(\gwN,�~ ӔIpXVҗFb}`~|?@Tv+zmٗˉ($&E: =5\0�F5xn%=DzH1R`[>hZ[n [+LR<ibRҍ^czhfܠ`:#0ﳶ/e,&PuKgaj~<W>|7jȓqȔ$[v{'+^teI^=xfnw5x,Rn ;ZNq-95k+Ib*z07gP眥aw7d1gd~/HYųi{sSdk-s[gOHr&}X|3ͅcGo~Z}sLX$"o L}\@̥- "I)Z|m"\2x 2΢"87AGe5aʆ7N bqĿC3KRĒwW@^qV]F2zx0S׷ W]o|hqa1Շq?h3R!1,~1%N:C !vdVw}~iOX,ĜCRd\D`9IHsIDܒ\FC(+0Y#,:ǣlt֕k*B̨" A%s&"&x8m0H<|PPΎ<,,- C,%qʴ6Ein)6 nC5/{OWs>D~?(Pն c6v()9AH%,Mn(� fI`vWbRq SJz,=췂d=) ҷ6P"gEX QgM⸗ &mnrd^ȩP0κn\KrndtrSU`W[M8nWs: '?$n6:uLjuOELr Z?}e,.%|9;[Er2Dg�?@ƱG w‡VƩbzHDB6a kC!V"R\g$uzn:&ڗ9 lXH)~Kd [d}>DZrΡr\+ <';a+^u(< 9}`tܚ'QD߰ F7 j@[KO$ɍ�Cߋ-0l?;$ 5HƮaux6 [G`u8glw=3-"[hp[~>+moƶM49 я[mˊ-[ n^"%c'㿵%<͎~DE Q\qan хM[gմq6�7֛l~7�x%v3lw#]vWʀ.uL@JX(5t >3+B8 - <sX4vUJȩ.6;yro & vA79uIR]jp!K+ޕ𠎈BU :4VdCR8.Fwq~Kܺ/Tci)NύbOse{�D4;$Io>QYQd|-�Fe-%g@t?4Id)1)HC2a _X4;}'ߵO:?6.Жں:}VV.k\$fI�:&p|{&R7i4KRh9xtQlB_ wȗX_IQ% endstream endobj 1065 0 obj << /Length 913 /Filter /FlateDecode >> stream xڭVM(WrY\1 @@n;CNak,XI8X'~ZX3S$CCׯnw;.lbͳ<#iny FɮJ4~fnS3r?T,WDݻ;e.1*IRR1PNmQUZgb:2.b'owne?E$rkdIkhp6<RsMu,Pj.`I{C!s0ZI%Ҍ2TiBžq?F׍|~ңOxV0I<B(._e$bU,N KɮRnCHK*w(f|C q!ߣo<:t<{8y s4e?[1VZ8|z($4Bb6͈6өrC0b<âc_~%y|@y*BR4KT!\L*^.C*uHۇ6b⤄yfwTzG<Ϣdʰ:*% R5tWzbOzD/uPƺnL hQkG<*EU6}-S2r>lU[k{ ~w7GƲ0>[*.4V5$Bt{,Ts#JϷ֐D ],�62fWg|j0 m1Z^-_]/ qo 1᣿;1l2=`]V\>J\Ҭ e(zoy ÷LL`U(2] @3[N(n Ѕ%nA ~jb|֯\͜B=c.>9.i$ endstream endobj 1069 0 obj << /Length 8 /Filter /FlateDecode >> stream x���� endstream endobj 1073 0 obj << /Length 1596 /Filter /FlateDecode >> stream xXK6QbO=@i ("nsps-z-TTI^w;䐲d{ SOhfow98%IUE"Tvh`Œ+ϫxK4KE%/|LoAeSV_w h;$ˉdi=ܭ?Ө%"Ϣ<'R{U׹:TDu($ɘWqo}Ny<I5>DR<!T9m[,Je;qʚםtqp2{('\2Jr .(ڭKe8vUԪ M7[]3ۉ~V@yJ8bU!D5p,RXH< 8<22]Jy7wMw+xxZ?Pylƞ0[,nBCW 4ovY#E:48dt]Lipr&ntm HUluBVWָƫhQׅnTOԀek5glN J W ]y, `*OSDg'!ݱ=gL0S:]0!7HHILM�wyƶG:Y:Wд&䑵iN=:ǔgx?nXq5\wXXV.wkpr~LD@>瓄y>h Goњ%(/6-z'4idbٲLF}Q+Ը,co `dPԇQ QJ$wŹʤq +bhݳ}ӾsshV![>45^>,X+hAxuYMe;5!{>e#"J~\ɘ:T.2 Ecy> 62?Vavh3fvc&c4V($IyF}ӕ4C&z/bOTnDz~QRPIe\`3B$i 8,)qVLr}eeƢ 7.0 ;Lc*bjFLg7&ּ)`G)�(KaR ~c{1ٶTc;܀JX$ne}(x6iB2 s 8L4_;Tao*>)Xp4 5I;{:6rzxFy](87?-|LNx6 dX*h CX3_dh*1sMe=4qeh|<ЪlK;6 P~sKOHmMhnI2(y2^1̺gq| 6 sS.mYxOF9pYBx._KvOЋqcq@u(;.¥d D転Q ]nQ vL  @B@Vb y4>Q|M9vxct Xh8Wufޏl# ,=$s2`&pnS 7d endstream endobj 1077 0 obj << /Length 1198 /Filter /FlateDecode >> stream xڵWKo6W(E1@C5CvED'MGNvE&G<>~3|*DTF}D(E2zy=CjN6I*hM"$6Lf4-lյ#Znb?d2քgpkn\k9\&qp'Iyz؛]Ԍ([Ԧ}\w{jj7-.ءhjs /TNTeGS!Qcmq\G/FZ/@?B(I<dǒ.IPl/1 ,T^ҝt�3)WͱR3Yq3:Y[.WSPA%'YhMh(`R}qG5uEs* soC,G0svٻ(#L^^.Y%->x,m'`.-F@:]owFP#)/;1*/PS:JqV�)2zr (򊲎+;.ubZ;ökW.|Jy4 ) fBҜH1z'v}WK>xqPD2>F/(0{OYhvnvU u]k*_cQ_+A{ 4p^xHsKu2FC/C1 9N7GpJ$.rZk|ߛp͉57hT§Cpw2,_sE8}A-MSР&!,R""v} ^~8o;j9M tSE/^Z2vG>R͜Έ撒\\r::^$Vp(w— + 3N=Z3zb`0|mP52[`OtMvFV:vKi0ꉯcO͏fqT6)ٶ{6wif1lg%~i�~ EFr~o`T{O4sNfSFCvaNMw:VkQ8l^=;2=!@k( ~ٴj`vK4֋گ#"+]S 0׼ ^R� endstream endobj 1082 0 obj << /Length 847 /Filter /FlateDecode >> stream xV=o0+4TR4CE tp3HUCrl+i�] |H^,'gyPӔ&rd &Q$8 eXy7C4!lvrϳyhP(P(̡awLnpY*C5_ػC8f!A sWQveK zy8% DIsy #ǜ`K8&q UfRBH,SmWpl!8AH%Or]!U{hS^-Z*]IQ[g*dӀb dv-o/rdGݶHw+OS <dZtL S}@HCNhH 4H(MI+Qn{YГL:kX'Ёy<Qml3}7~ەEANJB,f6}Lㅆ}__'@Zt~= H,2<O(Q%P++3ԒAgafy%HV>M)vlsjѵ)ղb(c\L $(R߽ 99vW(n S0>:;F^f{--4꟯k@U-[g]2' Ho]B$W>psJi 7a)v>=F\#bDh>4:gRLGuM5q;ˢTU2O-7#SG|J̅BF-sLBO ArH&qh3o( endstream endobj 1088 0 obj << /Length 2189 /Filter /FlateDecode >> stream xYKs6WrL $7Iڭx+'Z$H$m Q;!' w ~yɤeVj%3rfgigw}_}*;ZxKe}M_Xlˣ晌r|tH33V:|+<8eb y~I{s|6OHjbFځ\qn�>NF)$%Yww%xT;wN"aI2.'T¤V%h In6˺rYwekWigo"ן> Qt*c=xnP щ0*+|"g0X_ kjX;^VV;ǡe[?*Ow@mqػ7'<qbws-/3TL ɴv۶7 I$ -3izIdjpj ִY@g30âYzu .Əeu.n&z.,/0B%*pAY{8O)ĥ{ YZX θ5!Qy!52!,`pf`B9s$RɆY'IÝxc[e& WW:aYO;,':qu~y>gvdMR_I*~3)q)K{ʾ*L1^y1Luc!r4Q a`yPp.@rU .bJW[-cJ\,%`Ms{(pbKL 4ecѮl`_eWlpwn8l|9,ȢbʝCGvH&QͪOj¯|{]qw`JPmw-zQtn>XM'X])04`EԅI\4I ;wBU9"#2$S75F4/hA?648Rذ ߟ,;`b5wHi( Xͤ$ 4'O8@vqO1}..x5!G} t f!~"XT Ƴd&9l<8U:)Kr*U#n)�Tn\M{U:zUʬ!c/XȹZ(Z}+TQB;!(\S�M~ wŲGr)N-53g{E˪1msט2U\giXi1D5G ۆ|M3 r_qE7m'+& <+;5GBˇƅ(G_LUݐy{S?^!9`5T|l*_Pp'&PճvHʪN&9bg [~HcsXf6;|Hġ FOFO> 2ז4Z +zdl;�AHjװb[T㮡9pSc8>DJE(7M�̬7wl Z-.j Uc[ji8d!3�~9g jGU5Qҭ I߷þ.{o|Jy,f? ǧD1`)ͯpc1up3#ix+" n["q&>-F$T}TG"ED=iWnzUHn5TsXH$Uk]=$`.7mkS[ o>Pg2zxuvTfp1ӴESL0+#f 2C7M BK84S; й\ePcCC9 a;e=FHiJD3V6mɌ`iT{Noɿ7}$hόŌʴ"=CsDAPUԴcxBe+n!jTTOda:jj&tœWeMߜގ-9m2w?j$|wsP|)Rt+nJAPr4/j~)qpk! v[?":tmkpI@#QEk8hKyfOяccgUW}ܐKgqBdQok.C3lj&wjv~::c<aA 3>m~xee:":O&L endstream endobj 1092 0 obj << /Length 1781 /Filter /FlateDecode >> stream xڥXmo6_!  *Q,Àm]ѵ!Zc"Y�;G8v0`Q|xZ\˂,!Xy) ,8 Ҍz»߬ɌOɌ%utŷ]ua_Z^m$ kEAH~9#eYSYZhR/ĊVľlFdb8CUk;׊pt3OjcgJ=jeki;6KX:46�@vu!ھoaݮ-W~N؁ƎxE!~Q ~kfQV:HX@h B0c m�dN{vMK0:lU�љٚ3s ЩsnqEw7 b1cLz R`vVH@>Wz_. F~D"lMRR7Zތ4S}g/7*K#fFASZ3*<zbe ,#c C>^>L&Kbנk9ƾ=%_l=vC14oaHD];JW\4 >LSܾl,w?ΪCmPGh܂r\FV](B6BXKQD"gENLs=ɜ&|gzD%r T=3*Θ+8&z0wڤc�j�_+c><a-MYJy/uk ʮ-1iFͼ1Q@\QD!^Hͮ˪Cӊʎؑg.|RVm�a�HQdc.,M6Ƥ , !~|]ܮE/1T2gԛi4f|[DP/C`sOYgcm Gt}} Ipj4Z9`dS b2u՚TW ^M39~ho=!*ܣՁo垜{( N*/|R"TVf9o Rt*QȟQA�QnP~p$]]5aiGaV|W}<y].;qiN$Ly/^ȷi V53$XYBHJgZiad 語nuOi~/۟>J`} rnQ(l^<.V;U|_)u_NAA!nSO;8t*yIx$"$ hV#�ot [~9Jޭ[ׯA"R3ȃ.?Kc/ !ٰ؇"ꦶƲKS@U7P jKJEpZosT3a+C憠ja)Bjr@@I~Zބ3+OXGuedSUd@_I5M7._kmmYS<]+O2aL;sQhz-T9C#ř4[ ՠaK|7F#0Q1Iĝy.,d?i},M.pG/vj1_B&ʥ:V7I]X1]snzR\o6iIdW\Sٮ5vBZaXQcu$Zux⭗^V(nZfu >!f'[35|/a�bݽ/Fhm?2d endstream endobj 1096 0 obj << /Length 1419 /Filter /FlateDecode >> stream xڽXn8}W@ŒK}hRt/EVbmmIٯ!gd[Eyш͹҉47dZzQY*o<n0}u%tm TuRs?a@G{JҬq3nj֨3,Հ :i L9߀Gj#|IW%`դ5;jƱ$Au< דj$?&aȲ3/iA?so%] Y=e%d~CbB[+6gO0dr"#˲,zoZ>`3"2rǰFFOdơ<3Κg)P ̞4ķoˆ:Ȗ*oruSnqe8)Bu 902).1w0?[#yѴttRu:=ʰ}r +m<pӏpM˶9Ȏ[ǢY2>)APu[o/ί/lF[7 Szq".RFq?~rdC??njܬ/١$ALBL.'҄YN�`\D`'MXao *o5Li2$峬ϜK"j ܛЙuMȌ6HMSyq-AvXc9s܃9Y` &ޭY9Ü?U eGrIiwBwjvZԾ &=>vYyYX;#iL C"1>vB07]~ Y&wp)!RwsgWE,RO&EܓDK; )7 L%K!p]xN30YPg?k|}߽@oG,XimU,-# =jP">˽46pZ�â"R6cL znj\&NX >/(5or6cLN?-LqDYgG264:W:p AFa:33<ͭ?@y8?b; m� 1[;ߵj$|3CyD\kJq9TTJ||3Sމ@]ܯrߏߍ 5SZAwSH²&%]mQ4:vʠ!=F)35Ji/cXat<ȄqMYBMXlڞ~,HǾ�O-MӯψX(ݴ؎=Ӊ_&f.c3DxE|g@*hGzJa[{BL(&as pbV Tw+d?vj=ĬE^݀# P4v:3n- vLukґ({NWٝ$GӃqʁ)S2? endstream endobj 1100 0 obj << /Length 1620 /Filter /FlateDecode >> stream xڭXKs6WprfB�zLROi 0! F8>e(@X,vX%yOi, 19 *|M'&8"JR4]֍z;Q51_|]~xs䃅0YD1AI[)];wtVv]<ԭr zeVuf`\~A ? `f$ +0 ypg%3ſcty8t4T5g4ȁR 9 tQx:,#D^E98|'뽏NTg f;2:﮵\[Nuymzbr0"B]h򺛅bԓLG߃@'Wf]ӠQqBTŬ٪ͼ{垉ӸӣϺ/emR!K'8)](c@y0< X!ًp(/l|4cOH1Ms#=݇26<2?Ũ{j&&b]+qkQK>Fe82'_Bܶr=w&`Gc_ pT3 `fҜ<=l^Ŵ 0M$XV`o ?:Y5ZZVgh؉oG~VlG-7b>btmd16N7S%Iz΁ymXObU-jrkG;0 M&[SLR{kIDl@C dS2W^1-`ksj݈!7TKZOYh), bFPx*yȌ)'�V.Ps'54HabqPST(F3*`b ô0|-+0.ޛN 0vV|E ٶQ^bWZe]3HӔV'9 6޿8pА3gr#g'# ]-nQJ8ȧ%j*V&-d]þ,Ӵ 3Ue{Ss Wg νSqI<)ڝsq9uG =)m bNƝ$hTγ Fͻ" J|:ښ?XSuӿp<GdB1b wsf\6P=y,_# [qo{~eHtZPO4㾇S%y{#q竬i@a%~,h%4*Umy ^E7d8=ٷN986hOw7lZ3GM9Jwm6$5gBVsa|d%SsQ_Ő[E""KgهPA8Z|5-Z>;{kNzdwn4i`̯w}@ ( @/EmI^bA.vTH&=刜,o8+I(J}'ϫ|w[={P=9c2?DՔ~`[Zh|+;puǑ)KDEE endstream endobj 1108 0 obj << /Length 1999 /Filter /FlateDecode >> stream xڽXY6~_a h^:.=ٞ$ٝv,&y%-,::-%j1=?xů*j~1҉"*d~;D| JR%'b)t5h⧐KUnm:LC %0iT uܵ~, /tzZ_v&~lؚFq1~~P"T:ٺdHiUU$LMDXF:"K{#E e{"04;7_>dK[S#r.˚5}:OI+гV;|gg`MJ|c[-Ǿ<pai۲[yEjp#EuSFV)fӕ~ZWejۍ_(=ܘoBg$)X|:YD:aW{ҵE|,_}2IR!΃%%*LG1X27EQG5ؒd(.¶+kQ6:L#(<6sFT:h`YڋZNZʙXq*W׸Z-"/߂hfo}kM0Bc(|g7i[V4 a,(|:CdG $Qc;}VBV"sM~VI̙0WzO9pGhqJ(E>u~] +$:ЬK۴fK`~Ar]6]y?ߘn5z7"PЙB:%9d5| {OP`)D`Lh4W27 4wbpin٥~¾Z;puкo;/{=@Rbo0lY\aoK#T%YR0w u`nwve@*k?:T,^5u kUOS44|h>F) Mm|unkSjOz"]њ0"9!q={%$Q;4 ȼau־â)NnLL!WA%c=DM46x'S�&RsE-HR\o66Gj/__OI3 ͓HQ�N!) u$> ֑^5!1�{c! !<AzPs3`!K",(ڱdTϪ_j/=#`o7e YYe Gp#L08D%Qf+=VW=vmW gDZ'tD%msX&hvoL1FBY->̉ mE�kn Lwv'`DrT:LeylFT"Y黎@:^vw-JNcWQ-t0i<̒OO+ �s;( <nXqAFݑ6Xj .tqA},`<6e+<\p`b?\q 8v%[ALm˻rkzPt}hFCݪۙNﶦ)'9C�pڏ' 6/}mKS �5[GaZ]AԂK @y"`J97XRERc/= I�ecy0*R{CIc͟{gnvzT9^RsnEhF%IcYUk7.A4{Y 5`Mw[,g hlEh6Y^v~S6^3{%+SUh+G{KT}B3- n;hi;Lyx(?#ߌ(P/cb+G:Rހ endstream endobj 1115 0 obj << /Length 1994 /Filter /FlateDecode >> stream xڵXݏ6߿BP@ Iշ~d=\"I%%gpFZIz,rH!\]QQ"uց3"NUGR"]yX,e~0.;XVxe=Mh7W)Zq')"eZ$R>v۪.j /n$R~ eO"X V;ڔ(EBI+K }q3e!.m]ԋeȰ-Z=?@ 0a^6OGUxW݆EΎێjMQgS]s.�n0ڲ( p R4 o 8|[^SkbPh㮬>R[u~]Y]j iΙ ]}CI]pg0mwWC"h $?bVh<5H(II5BuJW?++SSg[LO<1IQ=[S-sL-2ޞx 8}Q[-.HxA!=)8#s.u g2`>*2h;eg5ʡ|ʡ<UoEY=zq)$v4 2,h@j*ٛ<k*\*p j kB VIB%a.-Tء@n㝁QJ}h;G:VVSY% ]c`ٖkcG7�*bOw 4٧flqn6b<+4nkv<XÉ-5҇,cgu2,�_/AhrHBw2֐hՏ*2wsmywoG\d'(N\,M 'T}]%]U<R;wSpK;[Oj*oAXcK8.q_<Yrs?듩.@ -Drʋ C) UԊL"8.!d<Jѱ=f[1Xʛ`O4uUnRlpMyϥu=sSL"4˾2OJ2~A-C$dAw%=8HMvԬu ǡ_8HԋPa[`vp4P8)0| YXe&7L:r@J)ۮ Ś'Jᖆe0܋ja�-f o{'c5b'_C5$3%/jC}~? !$2'OkeH@˷^p jƄ|ɦ0B:}qi?n540yv�Ɯ<jPzT<lb\T#U#$5gdv̸iˡfϖkA"f 69\5f:trN˓sAa@aNJG(iP_ jeɷ[@.X1ݦ9t4M>?_Sۼ;('CO!;^~8$pl@pʛG>vZvܵ)NL'6XW1RB~A5^?v$cnu ,m�C^rPRpiW7Z N<6 IMoY~k 9k~!aM s=f_!sP<#1)ʇ�W {ܣDU|[$OS~uUKu(GMɂMY}=xj"7鑾+H6kk=5-n̥8н>ڎIfT{?q6M3oJ�ބl^1ؓ9lE3WȇhYו=GF4 N<ȋ0pA_% p ;EW endstream endobj 1120 0 obj << /Length 1962 /Filter /FlateDecode >> stream xڭXKV!J,I҇El6AgjEG_*%K0U$_=XϳwYfl)2i¨hc%n~xǥ-ORĿ_6Ҹ`I[#۲\Y/hKWnw-4<✙ d4J$gYFr &Ooisc[<V]wgU/*Wɡ8K0O#GY2YhA[Y-~i)W<^~ D} łXL3Vh=U-5nn6&]cm{�4ٔhlmq )-0WMlh]k[7-/b;"wk66X1χ_WnZG18B#x_ovޕjsBp< NdA,6HR =Xm9'=a5: X- "./pzԑ^sa@#up9(ә3q eg!mC<Z42[? ; >U;߷'|1, 0mm>nBCc!m '�ss"N{\wnb&oof~p)'n).Rkr)XK<R8Ƶ ,>c`gEEJ#9|XϙHS4\4j3>w�4'}Rbr!Tp<L\p .c' f2[WE})(O ΅MY!? _B?w‚e`|nGUBKٸ'XeX >�\5SyŴ0SII D:˜ʦ[$+>Ⱥ&'2(!LTeiRJviRq?&Qf!z*?-yp]oyI2Bˋ˷,(*QK 2 z{a<7ۥ,gJmH  % rm.PH]Lwe(׵L<qa5KSBНL/ӧЃ"l4D d*, Ƞ*g-_mZl2,9JPg0%OV�|(Q"r#C5|rՌO$\ .ڄ!pߊoC\@-t> pMU>�@@�*}`� R<%cQ "~","Ȼ1 a.䘌)3CiNJA�/x1^ =^5$"RH Ŵ�3U-~]ɓEU\]nΜ~Oyp{˺| ZBfK,Pvfn/sܝН=A@>B{Wmy=W>X ôk8ۆ{ mQK ;Ml,Ս{ߠ<}Nxb -/3iQvA;ְ㎅, BDsR|݆H<UU}F*vT=*~ZZ\$ |0|KM Whg!^i,N]cw`d0'4?4_@?# ZXv[9o}S;G4p`C,^H^3!tG,^LCa:zN}om,y1qEoȱq+)=rȕCBɐHݞ^wCFȐ ggzAL\%?BS<~gYU>ѳ#5#jiWaTW0zzX= �ʠS~[r^͍\BRrc/Ǹ>9q:YOCMջr(p]Or# endstream endobj 1124 0 obj << /Length 876 /Filter /FlateDecode >> stream xڽVKo6W{ T,IS!XRhkE*NF' 73>nnsPd1«<)EɃm܅OӢ_F4am?U YJ*D1AɸסҲGBVRKŗ58 ##YPԋJ`:AcfY|Z6�A%)' И!qcOi<II$gaeϦ2J0^^8len(6;Z'f|lԺE"H̲݁tU܋qdGя\01om(y/B()t/ڽW1EZ3Yb?=uv[?Ph<7m5ԍM)^WM{wjeٝy:4wf=íd#βpm.Mq}+K {Cۡ^|u]\א+Nm7d#NJsyyek<{?'"-N_Hf-ۋg`4杽Њ%2L\9"KHQg'~4>@arxtibiy>$5@jke-f¥Aj 4ݺ(nv{[Z4ޫǓ,KSP8 Sx=WψM{i0s e.1{QZ:MÏ?:wi%2bmsY >oܒdh:;u\nJ%4G= $4F.qA(-[K\N*Jg?z/7]7 jGw 1A14Rc�Ꚕx endstream endobj 1128 0 obj << /Length 1783 /Filter /FlateDecode >> stream xڭXKo6WVXDuh6@=h%:jK%'!vv, CԐ|&Zqm"I#%(ɵ>roГ W)cOЛ*)5Y%]_ۢwu_rQp M "*7iTo%Bѓ[$DJmuEt2A$/f$̳xgxVJZRF<RM e/f(JPT'i uCI״lOsg$ S%,'T*<ǪBK+p8Zbyl3 hJkbvP7M<kYWmyڛ'3ۜLq4 _3:kٚk-?38~?X-CelZ6^@p @>vbsh1NrKpԺ)߷^&p4.wh.韌i5u!%,CMKLn J)?c];)3xB G)m:|wZ+ *S"Yxcl\Og㏰~ݛ.5..qa#%=TX~DLsmH1uCxZ/Ӷ.\\pxއî6AYH0hg "Lg\ƛGs|,nz8Cۃ9=ؚ3DW.Rz`f\֭rwvtWt%_ACٚ�1s?qccCV'~:  C'/õ*&)-Uh GeUrL^,!u5}Em8桙*DKGYKfkI56l)QG17HYҊ x_<`zpSj.sSo/`D AftX*Â;^$uv?ߺ3T ̣J9f;=Թ[M_2(ؐ� D<O֓=|IwųxP ǐq wf{9V,nz�p߄DaހN6`+AED}e}Tw8E`g^LiN4@&ڐŹkg=1m (}k7/()r1JP/M=9-& @7Wsrs-l\o k=D͕SpR3X$&a1iz!x^ �hy)T5 p#yv x-/ΟBZ'.׽aiX8«gt\Pv[ < 8NP RK"$$EQ"2Q _%MUNLLAJO.3,r񧢫KaeVp}4iۆ5BN"ycq[a,/Ǣy$\.sT9Xju'wW v݆ R�THěu+$m{4mHwѵ'7*wzJ>t({~E,.f]73ֈ D}݅\kf:1_tg@q໸ʄS<㵿:!a5j1Q2Kp|rg?W': K \AOKx*?ݼp*4QbΧ $FḊ;$Y1s�%L,py S[w|mcd<;be_18]194S2w`0O endstream endobj 1132 0 obj << /Length 2100 /Filter /FlateDecode >> stream xڭXK8$1Ckf@&�k`9Ȗl ע-2喻@Yw}䯫̃Im)"H$gYU| ?e0ge_FׇbWbS7IPŋ?WԄbR%ϡK)X"$3X y=;ggypDŌq4X@j ,6G-NZ;,BCd!m6rEB8TS[u;M4bҙ1 TDT([�+Hվ,caT3vUXU# ?ȏdY$K G`|>rSybi,kcjƂ_}ٿ~h*CZpi^ܚ OڇYq / 򣂑oK]; eIX48X|*> y;@^xf+DJ4:O:zci !Bf?c𿇛pSYr˟<(a7,8ەmDĔ2?҈si%<r&DB$~5| NeS\*j|1X&YST5l Nmד DƸ"~&.Ln\7.Q36>p{,tsϹK$~zXT/r+*WJL@Ć2Á 唡TTbG\׭@ѥϟ5|_ջ{%~qR ʍrӑQEx? 7CBI=fcdU,|!r|H'Cat<$2.lEn4</ 㑱dBM7XV# =btqA?Ң[Q]</�ڔDx/s/jU%1nd&%<S�IƣWLD&A2ES^d\(L =FYna"G\c֐E6@[{漆f<8a�V,%4oP)dDCR 1ܮ)ȝRsm#"$GO.}Yo/W!DK@ qBQyjRy|7"zwe౽=gR|n~ݣIK/jZd_D3ǝ1)g8q)'I\5Ci.,OspLk,KC7;ZA*wԲUSmǩqWN܆Ε1sG0'Ș-&gd2}o|* LL<O!&�:OH}%D ĺ(5wQD'Ia&ag10/p(s r2{Jf69go@\q.ry6U(=q8+R5_<eR(Ht֕>WRFt7gXf1 fN "soNC,o+_cԦHؚնjf1A$èf񡧴e cu }zcBk:c*1S>+v)Ul&oT4MlU.{/d,^ *W6Hݑ-ǡj66&]D$jsJeWwduEB+h�t%XM< VOEk_LGAk%;pf>(+ͽ sLDAS'\kPC.h#\=*ѽToG-@f!Ӣ} @\\4Oe[' zofnuEFD\[Դx".ZMxC a&sM.SG{I/QЌ@ÛZvUWj&Ƿ8qr A P҆|tXN~B&p+wo@FOk6ܙӄL;peԖ^M1+2Lzd9rdjg W1̂Co\Jg X wXO8\wL l',R0=v+6D/G)pMiN,!s2ZLDFbz%iat`DŽ�M.Cf8d|Ymj^h Y endstream endobj 1041 0 obj << /Type /ObjStm /N 100 /First 955 /Length 1757 /Filter /FlateDecode >> stream xYnG}߯@OWU_# ɀ %DJb�f1ăk>zmxf& 9S]u=$gygJ6Ȑgd(G} KA0R`(E uMdaMR39C<pB)QALIGB)3Jp5~@1*� ńTvtoFذ[ W[]yLb.+$gXJKW) z7( S s8gU W%]R2P0&R%]}X$,T}IA$;7LJQ3+R@xJu.Ϫ>Xj^`2 PAx|x?Ȁ(d!|+A8!JZ S1AcBsބ `BVէD T#k$y%0ՍSfbt*!:b#&œz+*jEHMrumd}LD3"I4i'$fq1)<u X X*)C)FLM`3ެy4_g͓l9?[kYb~^,竄sߞ~~6GB Bx@Q]9Uxa?bB,# .>~|B{�mޞif֗q  կ:ނ=>/xz`Ku54!8z49tO5={nXSV!ց6 cC n}y7?1ܚҎL>T[V9x;=0kE^56Ϛ'GT>ǰD ׽x[ ]F D2pCҾl og,JL lxQt+؋a l aJ6~sH0loXjȵp]�y7s#] Ke\bɌ7ɑ-ώf@1Xqdm3S)o>}Gwl^ftpMWs̃>?~rLŖ6/bq\]Z&khs-O(wK4@M؂8ʁ[76f+P8Ǿ('J/5ITdbtsGG.ER9O^ 8*zi.Jwvo X>b(X&Mc˔/cv[n*U- 㫃#X(G<D6fb-/SbOc!{0G^nZfR׃p{MPv }٢[+Tq)).ZOO?7{/wK\,.y}>h<OԺ@Y(`FmGEFB5ʼnk't>mO>ΫPm&U~M_7p jE(@e뙾"LnvS5Dޕ#A$әbIsyyrx8?oۏ0r նOfMzfOm-AfŮ6Ȍĕ{pv"_Q�QAǣd|8C/!^҅[oY➋ oW]lZeV\܋Wqqcy}|WC=#-PF9 3Qy Ȅ3o<gbŏ _B` endstream endobj 1138 0 obj << /Length 1392 /Filter /FlateDecode >> stream xڽWK6r D _znEA+6YT%:ͯϐCٖbA! }=zsQIʌg|INRe|2}xsDyp6YXn]uV4.,I3mBMUF['տW,cBETon?hG"JDYD&)[}g*"gerID.ɠQAI*yqyTWt^E%% YQ'l;\fk=ч ºK Etf0vZ;Pl׸TU8Y>MvG{A&pU2تgkN.6U?cEjӒ3hJ%3pH'9>&F(J4_og(D|cz\TM2.zb'L`B<Br zDl;X%Se5]Ϻ!xN1LtPQv&@a y.X%J U hTכZ �6>rd$%e!b*^TƛPM2D)o/jڀWp VmV/:.M$cHń&h 4 0d2r77% E&$EޒY(廵a+W8LvGx x.Sg'` >HjY S.өBKq.EO8Э5HҨ W㪮 L jW^\j#ʐatHuMUlz-'nu{t7wCsä!$*A,!T( B1+ܗKƬH.V)LSc:44d yL+_'Lw^SU'L@.iR =pW k7\ x"P�vWG׸ZhW{HjYAtZ*X3_jW;=/y*84O'�ۺrqǍH 1wĒθ=-aF-LǪW@ PJJϝZ5Vvz5/` 6fG]>=;-AwNjl7qp JUmhJX XxzAǝuk}6X9iN$?/3(�h9&U󱡻K5;#bpdx6H  cJ0yr6xૂWJUiz CEԧ',x#;kxH ҽP/̠${ lݟw3ws8(#N獏{ {ЩZ/@7WOP�1 endstream endobj 1143 0 obj << /Length 1178 /Filter /FlateDecode >> stream xڵWmo6_20$E( ,k!Kz|`$:V'KDߑGYvK!Hy;WɛkNI$-<!4Ac<iFwӈ'4dtz;A5A<cV-Di%0QǦi2UVeq6g l#$ij2A k7%̃۹-ac 1$N% Ȍ<Wr봰KAD.(47:8W oTsڣs})ҷz}ݢuVG6MF+DT\J%m8Xh{Eޝmѵьie|,:jsi*7<g/ -˞+_ jQ<`� {l 9Sܪ{G: |aԻUC1g8 f+�-5*A(y F#h;cv;<,]՘Eh#'4lTҢmn f#&ؕ9Gwz]4\{mq(ިTݔa+@5p XGU,Q<zZnBpn(j6;ۅ<r_p$E[[>X`;*F1.NG:ɘ9UU;?sv1){UgyWJnYN|A-y0{6ld~\:cPڗ܈2@7CwzddA =gQ!9RXxZ4cklmm:on QP >'<tVޞphu5@Z9E⌤r\ nZHZ['gyPSЌ9]^9<r9Mm)zcשN!EM(TVo*i!1M@,�LW}$v?} Q2O pMpS xU1e?F?ܭVc `U8UO۪qT_2@b$,ԪÉyt 7Yjp@Y(;?Vc ݶ ~f\Pg=rTV*BV8јnS'+%ЍJ{[П=?')PFL l(? endstream endobj 1149 0 obj << /Length 1782 /Filter /FlateDecode >> stream xڥXIs6Wp|fLl7:IXhJBRq=> r oM9y 9yJ\* e6a":x'2|(V&i(DqBibۦG&R±4΃H0ǨF h^"g(Z.swO¥s)Zw9^]:s˺rtks{vȥU%Ϙdq'd cB3I $qw٣=�Vi6r;^ O+u$?~ .nv\ID?\֐9n}beqRaj:}||$m{PlS_ntش[SͰeiYyX^{`rpv )Y0[D"3q݄eaBpQLYxp.)d`E𠖽Z|UȖ9bѷXBY%iGvTLP48JjEHZvլA3Lyx;U7yH,*ΊC"S`THƾXډDO{w=ї,5uJeWߩʚ y/MDsתO�m~UU F[D 6zy_xA)FrUq܌W6\whq3,"9  +$N 'PP(j0*B NT]yXKK84^ [ƇviE|/x$Td,۪֛:ԒcNZ[ݐnnoe9NDNE-=ern1Хj]ʲhbJ󞼞|9A,- *؂FKq佔m\HaTLdd@J"cfE\h䡘ȍAaޥ&7u_ Aj'j n/ݍ*;g8YL5~^?4n1+Ar}&S pn$"`Q:mٓ], P%`Jj;l\Vkz\pp6mzj[#%M;++OvIK'RvpDP\=f b&+Iz(JsT`CA=!R3+܉ WGObķ Բ"7^=)[vz\k[\b1z"!nFۨa#lWO@Z[Q T@ZeԎL DŽI}/\V]ҮT"PnvFfqq*/X."O4_Jo_r365^.UU2_#r`ҾPf7Z{|pmr42 5sڂ~_s9a[v OF;u:wȆij!q6z׋a:O}8$^oЉ3n6uй{~m%Tc4alϓW.d|*՚!ϻv9,r8:N>c#r}ƯExrܭ.[|lM}Z-�?59O oߣW)mu"-#B7O}"Px5{guD1[E6F%$IS13?ʻ nI⾲)eKA|,zvu﮳0`W-oceBP!lC~|=?&}ŇSwh_>=9d; endstream endobj 1153 0 obj << /Length 392 /Filter /FlateDecode >> stream xڝR0 <ʤٱK`#E.;Ml?1p"KuvvMe3 x. VCsڱPbN e}?Lʹd !P7g %;3#QNTIڕ.…"DioQ֟2FWh~h2'Uqá$2xM-}K`>}MRO<lwO;4%86sU=f(e~֒ rL"^ُ 33ҕ4Yq1dz%A`2da)m]Dh~O1jyF܇{VB4qa`Uk^ "?<a endstream endobj 1157 0 obj << /Length 8 /Filter /FlateDecode >> stream x���� endstream endobj 1162 0 obj << /Length 730 /Filter /FlateDecode >> stream xڭVn WY@�@FjFj.n: bđm\7ԏ/<e2X=>\fל�Qr""${h. fݩ(a j#FBE}%kTչj+ UQgjQCj - hUCD GZ 2π38HV $+!Rz  4 <W6J  8ƌ HԻ6Y1sXSƝas[iu*/ZȢP�!q'(Oeqjr#;.t)roLkf9@1 F<o E٩j>~qTףK' "<:$#9"(EU;dNot#]#(2Ld#2_g,m]lL]aޗ%V\ZVcŵ<h[ё-ɄN౨3bR$/~1uh7[y[}u+͎rX??I]EwN0wή([]`W]&p}J/8״Eю+؏411vyvRD,wlZv v9y0Ass-QFy2<1Ec;(M8bkp3k? endstream endobj 1166 0 obj << /Length 1146 /Filter /FlateDecode >> stream xڥVms6_~ $ O3v:n|i\n:M wAܛq뛱v# 糣 ,G=kX.EZQ]k[8|pn`^c2<"mх,jHE<ElE,jќp~v0"!B+ʏ lŰK(r-n~݇ 9 l>( Λ Zm8F8&/s;~0MZI}0zgU٥VwZVբղJ|qbl-s Rl)e>l`e8*{k(!KUM(S45$h+ȉE\23]1|"N;a0m y>p^/ӎW<|$ {~zc.A,:H#B te"NFz5&3X\ک"j|Juo&zZ ]UĢEf #sTR<Qt. 8짝&jۊO-eɡ~_DzU6?1^Tmivdv-uVU'}B #Kgx~QwbUk)j#0[s@Ri#Bh&8$ig҄ġ%!19kzN$N.6+4[^#^,3\_Ly]7F0:[JwHg oVU-n_ҥF/ͲM!ʵҵNNFjoa҇\=*Էބ0"Sy7poi/sVuekf6"L#LEsJUpbB\}Ti q ;>^:hQ*9,8jM/ZtU5dQ`Ysr|nb8C,~Nc9S* >ڟbi/6 NJgЕQfb2n"-eMy_6xnLBx�Pq ԇwnnf̠Ͳ*_86ۿ>̓ٮIdSoW92= endstream endobj 1172 0 obj << /Length 1554 /Filter /FlateDecode >> stream xڥX[s6~` xț/t8vM�af{kI'3|G笏{NY'E=D \hYԺo٪r&�'"iK^5xQeBEXoX?'D˷{o{_0`ǵr[)ܽ0r#juy+˽߶e8 Ë\XrS8RaBOE!=ˏ0rpTp|1'E~/2/y\l^Dw:wi 7x5BS&oTo~J1˺ˡ H!T\o/ꆗXT+!Y]S^'2_)$=z!d|!Nxgcm^BZ@ d d;tN/C > T媔;RʋZLM^oO͇ttRgd  3g YʵZ*!LA֎yk�rڱԺ}JQCEYB!=]^иۡ+(K\ tۖR| \mN%@ B8(>ȣ6sZ"/|<)W? 3s<�#=.5.E.yM#tW2: dPcAqEDnL^%�$70lL1ӪtIa{%i#ֵ_*.qH!0PkF}J0޲ZtzxyX4Y,e% VtՉH9G>9FqB@ Т{9`xY:K`o]T(bj\<qz;߮oMFa[l�1g mDUw Vޕ⢂]6TYnFQH@F\̃ sK&Hwـ[Dv @=ySxb82c0RG\W^Lٲ?! uf|?}\dj$TOH6zh]P8f.Ql37U":p 3{/~Vx:;f\yg'}W? P6۴О_�g YYO3 ' dQCB"' !Ng0\eLHsFq!nYJg гD=}^&x/Ds{-<SDjVAK I@sLOJ~wBC(u JV3; Dx Rm7H6u]//"z۽jsxD};3m] L&`:QFsL?c7X?!d)ǃ5#\cCۦ g,؃h0&AFb kP߿|OqAu€DJ0Vm\voy:_/(b&wI}1yԧywCr9A=[{ܓV "pU endstream endobj 1177 0 obj << /Length 1260 /Filter /FlateDecode >> stream xڥW[o8~ϯ@<`䭝n4#e0kV{�C^>3%�.qppm ccccRgvvQ̱o~z lNebfsZ%˥B\Oyk&80m=g p"Ll#&;ˈaʰJ13L(Ը|p`ؾ}·e!_Pyq]G%u3L" Dl]2س3u"; hP|OUxn#X~,qH%d܅iy$h]o@{J `|5?6 >J.q#{Zw 6_٭Hg|2w\HG(/}m`!O+R&ysd_~:f܎J+Bvy\j1DY`o3}(h}|˴|TJz9(%i1+# `\6GlReJ-iQ N ?X'IE b/#`E-P3D<kR[ak.l{:#tUmbDo1/ �6<yg�7 TgJ؊�ZJ-3zzB"+>6 |W (%zasYTy4w3RBP̰oD3=y.MjÍ D{QyjR@2tm;@.Fā0>QXsQF>5l {5>DEӽ)NQ8\;R*# \.ֿ;ShdѲGol{c5~v8#F=rM"k2ct.&b揄eX8pQw{|d5p dcX70_Z@C+&ʒ<<B?O>ͰJ8ޝYl9y?Ԇl.I 3:{ A I۳M<o+pUSJtKSTGnj�GITlg+D,IzlZ,")82_pu0X)sWǮqSφšPD2jHs@5z=Y12*&y�8<~\>%16G`+M<v71HHL6r#o6!]q~m KxS endstream endobj 1182 0 obj << /Length 1657 /Filter /FlateDecode >> stream xڭXrF+P2Yo\NJEd@`("`C== H�\,Y)0KOwOex1?{ '3_:y~"O̙'Ν{֍3‘7qWehbYVyԤea"13,pH]Χήga;{0N}CN{P8M; 1u.sn #>`ly\(3`)+`̽0#3L.2)qv:r6^�F^CK9IU$emQ#[JMHѝoba�b=7+ Y!P z CTkg(4 g^f{lkYлҢ͸zP ri 5W=LWH&pg>|KogE{@a̰Ҧ�NϫxU֞;�?q6WsZ? j aQ ÌCH!N.x+&-g}B)l "=yr~64Vq\SlQh뵌S`0K܇JN֩ oj-ʶ$)D"1VJ 8 eY#a,Ec/܇Tn8u|mq5-Qd3pmԡ{xDkԇFM=[y̯': unfjvp".8J%1r蛝Z�Z^+(=pDE sÜ�PAfaYĦA X(_g[hϲ+*&Bb'`SݴvaGz7H~M瓫˶e=9!&Y0ˉ "oYM~~v񷌛҄OjKo]U.lJI}PgK%vLv7E|KQs̢~R>-\WQ7&$m,/Ƣו=MfN�ϓ!ԃ !`޷B c( fHBX&XOу z`zDw[l5ȭAeXEty aҽ@k'DH:Ne4tB׹@70]RTUˌ"(CKLTTok,4T|0-�f&A ٚQK`"Ic_}MM-0HƲ“Lr39Џc]@_|z컹HIwJ 몢YM-[(R0SlL=#+A'A,R ۗPh4@Z!K 7�S(&k8@8Aǀ~+Tϟ\ OC PK3;ITډ`jH#jݦ<amB|ȢZD8L $?K >P#걊0Fﻒx2L,Tf6HO l 逄 mdApCg(Qjg腕YIv-eRmV04*5s`k5$gt:LНV&SֱDq.ƏfZ`�25Rx{]E.e.5ףeeLvldP!H endstream endobj 1189 0 obj << /Length 1719 /Filter /FlateDecode >> stream xڭXo6_!I"8 uVCUNGe[6ugxOյ%.,,H83%y܄2}{uMYxь,};kIR"mjX$ܵZ۲mՅڝp (1e<닛$(wʂaab!ܶ*)@*Nxv Y&=7hqKEbB9w,J Ȗ28|߿/ ò_mSH<Z+;"N803@}s($V*ݲe$)�Й/31 y܀]=~f)pm[ϡlq~! '2}©sOr*hI8OΧnQ0'(И{rd8uT,A]5݌�P9(j �n ʰtԹY{BnuC3Ȩ7_W=~JF*T=nBB#b$y$r H yo{H-hkug! & 3dʧ< DH{{6O:$1gԇLY-t;WhGD3UI; {ϝ ORp$ ÇXwELde׫ޫhK: 25b$OW.3Jip$̛j$tzllj$Mk'KxX%N2w\;^!4eD'{C2, #))MoA|Id"Vaa*c ,fMD/�/Wo}(G^]db)D+-MޛȁXI+Nu|嚄#X``, K-1f.(Ps0Zr9 ,oIkB6^T` Pc> $ 8AX=+0�+͐cO;@.LXegQz(8ЗaC>:\Wgv,cd&ݸr{F!Rj+I[_˲.L*ȖP @"\&Y?vM޷ܷ \$o د<ˠch+ߝ Րwl-}!c*Z旧zW8;suaa+$6/8ŏuuF|u+pW kRUKG-KILAsl U/aYdLRq`Z}){>W}~ Qd ~%xgŰn m Q=UVI3NϠvv�g 9nMlaN<cO/K &SPV]X1v ;@8B|z¡0(?Z(@xf{5pPrƾ^+ڪzCtD F:g~Bɲ3Kd {�P" 't.)@TBѡ'1HiQCa)?WDꆿ�|MPTvD2V$/w7qo'3MQ>Y\7OP@Nu4wٴ߹ m ;ܖA)wGi)f[ۺ޼ 7+kN\p endstream endobj 1193 0 obj << /Length 1800 /Filter /FlateDecode >> stream xڭXKs6W7jƄ9I=NҸڙEB.�EҔ['-Ňo 婗4b\{ QJ$I,;&uj }J"QmVfͺQ>.+.[4)ePA(NI#4 l }~ܩ 2'� e1|]l7*_)Te=2t]VمmT|@,ۮ[S5x*OQ2/?p{RD[n__MI[ojm0do.zȪ@b6�ZKJ+ un)7F?t ?n|uډ, *+ !{g2V�Y/IBHC]f.Fj4m%-+ hvqlQlZ~_ x;3_eadQ;[Nz r w.8'2'[9. 9r2߰;�1Ճ Nf<irնnAO"IcmNCw= j Ew!$-Cmї5`` Yt+?m!#QĽ|{q% W[Gr 1"Wy/~`C1qc6Vk~NT O$O]AAȇqjeMN "' ?QI%0 F\SpG$ SO$]ʦr='6Lm:]+Pe_r] }h3!rg |G8 |r+ fU$ + o7s 59rOgbPٓxv9TsSxErt?R=RXٙ]4+WhgƁ6|rUI !H+S@5u$C69VمS-�F>g/ۊpQ ٽ]SyYϥL}g}q]u vqT@Lªѵ.\m ̤;Q/$<&ocaI(wǃ<‘V1-:�Al2#'#/T^4x"?AO7([ٹCkfeuf)N9LmsH?UVf$mչ -CGPQm+<k`W@ImSUeY!5^WrZ34%2ȅJK8mɠ 1}Ss=ϺQkߕ[5H`4"IꏵzTm#bƏ31zyg�&m, :^4=] /�H@NGHBآ8玖(Av=! {b84'TQ_F&To�yx$i@Hn�nqH|U W[HHg_ȴ͠'؇)_k){jtFF14ifQyM-/D bFd9N@L! >L:ȄL!C:gq5tV �KF{ש˄Q) Hv3 STJhw=(KIF?1E[jZ؍tL1r*4~cjPYeID"M{T}h ylG1wTTѫ3v^7.3zGfiL=p~\=TBO07ҾOҿrm7 vM?L`T endstream endobj 1197 0 obj << /Length 1533 /Filter /FlateDecode >> stream xڵXMs6WVj&D� ܒ8&3MF=9@dqBHFI}/vIX]}ЫxzE1!Fde `$%,kuZa XbU^8e<j4;p%A (F/QBR\0N8<0{k7S4u%/7L3孪J7}$Q~0[THpL̂exa7E(O_+x! b1{xb$ӑmg.N@ "&>mOJ31008<(rj{Z&Zb7M^Q7i#O+9w<onmYe?@#$<A"O}H[KS;֨98v1`Yz&L"H1ҧTϜNC1kӔ[)s=t.`qN<BfG/Zn:.K|H9_/CB`$K i^2ߪz՛WIS#$x vs;E^}}lAGe&̚xK(� E,A[/n bRuPB&c 4GuECź�%|uQfi0{ ^(~[GKZJej[ݷ|Ab[Q33Vf@fUvh_mglr{PzxA)]RuYƪKI}[*M(n#F§v2I,"ܔ|ܝiPD;"!aV˗E QeKg]J7=c7OH,+nՕ&2kM DjUd5B /:Ljd9cI �: #M2@+K%Olƾ7]ئB/I76Gt6 gn`\B3Lbƃ7(ؠ2%-Քec(SҺ=م{95cs!ݩZwh< IPv&^k\w:P@b09VOQO1!:A$8dwJdʈРI PxIl]/b>-{@?T$Cdu"po¤xj'nlw :-esd3%!"6ҏEiW($1j I!Cj&"BXؚLi �IPuNd ?}yc)clUrg^ZW)eVح駍NnWV~6ɡSpDpqt&Sm%xni!'$b[FղjKϋ1߉X`=ZLr?"AZ0jŸmrH[ N:W/u@ ,w9 Vx 8FI<Aw84" 4f` œigsԷ= uGSZU[9M:uv5-(lQS0J):mQR endstream endobj 1202 0 obj << /Length 1722 /Filter /FlateDecode >> stream xڭXYs6~1�xv7uS5H$N(R)]`G.@`a/tx朋,bo8Rb4p]gsljD@W S68}QNB7yU.'f=э<U66x~x1S!7^]c}X(Իu+Q(Wx-#*X`^kSE"N- I�B,- %Xȸ@tČA4e`g& Nke2XZ7nrr% г"$LW0D+W Քy)|9[t]5ЁKlJQYܖJD]M'ڋ@N7H9)S蚦- C^qh.'Q^H:Jkk{Զdc( PK^EIV:7p#_{dSh$uQ V4y")ydaŭ̏ҷV,_2MCF?#neS*~<n뺩k̛,gl̷_^/7uq+BűJ8rɞ$dIxA~W𗺜;k�'ԃe!>6ْRR=yDu#0o( mIZ~x22yH|gVBQ,{ӊ9ӊ zz|{ (6".6ب54Sqș´9Cn Dj9~Pȑ8c8IwMnD DpZ^5UYjv!'`ܥш%ڬn$َBe1 ˜K=2E@mˆ%s \Xu%atYu>u̎l)TOs6D_UZ`^/1M 5ш ʊTD큫ll-wS[_Ac{58Dy&0�PU9 }mŨ9X i^"u굂`lMG՝=#:92hU xH.i'4ONiB�! ~Ѥ�n +;mT}A4mkB@#3S.͛9퀾c c\_p` ~"?#%r}@lcG>qr8$/̃.jB4WUMu;TvݭV5lܥ6ڪzv^PFtLw *﹆PSD%Qe~GOt mg(*5խYum>W 9Llv7OHj9Z.p3eU3�a,.MX7>FDDwvGTwGχ*ہI OSg'OUW+3~/sPOR8lu}]Cu>(jv.9m5vCUݺɒp+U(N0@Z.-ɔ0'j.P(-C+8&0n];~p98EleVH4=qa{+}[h=lvxSa RM:lIj+T} >uIx[54X;kgz{J]C|_kaas:p ik6.{9KBVEQvϗ-� 迦g'KјhB4%rXA:Nt8 АDi\- O@zUn1xZ" endstream endobj 1207 0 obj << /Length 1286 /Filter /FlateDecode >> stream xڭWKs6Wp4=P3"AM3LnNLER%(i ,(%IG>],oW/^,PD%< wẢA"(T6L͋LۈeLfzәfqIC4 _mi?WwuSꮨ+$*ůӹp+P* "XWiћ` fı_>2H&HK2haIyIl̉eQBi<6ze^uԢ"{ŞqDmumK3R揺ԕ D "F E5Ή|QQ,{Y� { EeMc/H\GQMY=1TAG$M7$~VB%ρII>+�f g%zu Mw}t-qaVEKlږ [jF/I8*"rԟM ;OZjyP.z"R%BS. .f 6%lD=K%\h8PcQ6@), Le]B`YJ!, =woNc J],4MFLS$ɄD\ޓ$*\ݻ'Vf:C%m\ >?`�R_P1m{9ހeo[2{/J?l;{d 392TU nZĶ5-Sᦵ98fI, =+Z<ȋS]T Ɇ.=B.HͰ Q XJlFoݻ صO$/$ALRbKh+9uW 2,m[TӔP'z\ƤAHu 5 8K_ԴDž|v}+͗ngq63܌wVY>M!Bukfm^b 3]4&<I/?KH#㕀&R?q9+crQYk )[hcXc<0eL#s4R(O3)6L'6TߐcY4ɾo$5~L8Tz{[_ ׻FE<*EFb~w 9$<L>VXNb&'`ЉdXK'8/Vz6=+�;TU4b"'&9<M?pOKHE< endstream endobj 1212 0 obj << /Length 993 /Filter /FlateDecode >> stream xڭVmo6_! 5mMu Z%y~GQlGNd)sv>y}<K2)*1 )1H6\ۭwIL*tU+/*njۥv:OLWhB`d4+YQR^nUo%.]EPi|$3<HL2/|fZk�v1.AКCP)1qQ#zv]n/6KB ͢Kso-72T!<l׸:-b(!@8'40&~oԭ߶~}?ݧG2a胝Vݼ *瓿'>JJ0OI^Nn4YP/2AoL~9`!@�zSM(<kIǎn:S-vQߢ$ Y 6dAޗk4.w_kJG v(PD qK838&Lż6EXﱜCW%!W'ln6b@ SĜTq*ئ)V[ƲQ{&s^ @'_:G8Lti}L?t|7(!^DB~$rWKMo |#kN>\DBxx5t1p>RH'(FT\91#v2 B &� �9BOi/}Bf8A,�tSe@;!'\ ˁȀцzFbq(Qڎ1yQ$N`&zq>ȍz`.akS&yyس۬^t~]/{@@ݩ46gS` �Í-Nn̑ i& 0iIG-n~빲rqǑ! endstream endobj 1216 0 obj << /Length 8 /Filter /FlateDecode >> stream x���� endstream endobj 1220 0 obj << /Length 1389 /Filter /FlateDecode >> stream xڥWKo6W,IQ/ 1РKaHET++ɏ!g+w'9iDq\$q (b[c]ޭ2桐ϨXª`r צѸjvŧ@Ô,WTsYg۹ L)_.^ڐ`#9S<{Rr6T˓D r&Tx”˾[uBY߹;+Vح>wijn"&S@TBp1H~y2,LAP Oiۓ'XܳUf˱=�Lf'EքA ΂  Gv#అ 5Z0}W"p*ޓlgk<淜K{3.kL[6^7&p`�S?-'�+>_pm#HX0MM+ƮkPP|iBaYhe?9z*rY7AbGz"2%jHpBj6e2~\DYFE,]EX CWb6\fXW'>뮡}]M솽Au6t<!B(%noT2p/#~ !pIt~G_FSNM*bJ$H1!r$ oTfzխ5\Z,::C#8JgNjѸtjAq;ʀihK}yIB藺s&uZ$~WjGԼEED!dH0rud7< 1RG .<JA2z$ry9&9C2_"lLyTv>˴4P?6WG uA o$9P?|~Daf'\O# �ޛ$IhF=Q? 7J04wC>وV4eAK DL=<lcz ɴ!6|ִr½yдֹU6a*.mdyQKšS@OaFkg֓�Gn\휡p NF.DEUR rS4b7X6gyݑـ.C9,ik,o|ϫo->y )նF?oz0 s9\a?V).0:ΉQԒnљ+E['^NŠ8u}EH40t q35mUpȾ<>;tiOC1N\r>}rpH.l[۞o0�?f! endstream endobj 1224 0 obj << /Length 1226 /Filter /FlateDecode >> stream xڭWKo6WEr|S*dOm=eXtL@T= Ce;N,| E? H]\̯De(TFU)4 4Ѣnbg_We{7 U:oz*pL(%Bʔ|,Ň$#nX BY\|QS#XF[g8 snѧ?d)"He$@+6$APHac~Y"1t}pt tDQ&2ЛhS'#sʊ{ur*8R eE #%1g 7N倛<0,qmdH[lGCe'z9 R2LV4LV&L3ƴԗŽZc 3y iǁ[ H3MJHͺmޛ# `Y:Q(T3iyW`ݐnm=c&==>޳##yaӜk:=]:` X̓ t )$hP # m0o׺=ߙW+'̹"՚^5t;ʠBu0|ku_:$)!٭rmkzZ@~p =TȌG]\a4]ۇsZ@9:ms|*qr@F.r3Pj),y?KÌUvl:a6Cf6)c :)FHxL,Eo!S H=:*'j7zju1>rZ|?)]o ,VV3UEtkG<sTxL6ߞ֚G]i&_gvt_mf[5V|:EcAˠ&bG׷it1-[Sk \p͗Lf^YTv3mu ad| ve]붷ϕ[i_5k̲.`RmL;o>sN:ZeYov?T0ȹ:).a8}&(.YQXv*WAQƛ>:ظmod<@2c2PW<ߔԹrS 7(&%ԫo73aσ -RhM oqٷ @*?3H B1/k?. endstream endobj 1228 0 obj << /Length 842 /Filter /FlateDecode >> stream xVMs0WhH0$:7 ȶ2 _ bc/X>=`EJ�(iD)h!`ێU3H#<%lvi!'sb0FmycnB �ұdH50i[di +!5("or``xU; Ai4D!AhP8gU)f©iB:򳵿4@:=+Z @c)4JݳW0ރ|mVL=gC+2U뷴YB\- yJOK!E<ξ? jlE Q>=<h\fc@WPMSآ nڥ՝]hmŷ=v9J= 3|1'*XrSy. ƤgvvǴxQqWݛθԶ?jEi,bT4?nmۍOkRq}{ݺvkݯDkEq6ݞB?gsTI-Lk{~ItƷj_Ft鳱뵯NYp8Bф|?C,E@ό! ?10Sx;$@dft)nr'OF'fS3q2/(J;Et1iԏ'.wE.}l\+co+~sSٯ2�*s!j8|>1.|ힿ92hd+X=#Fbx.snfxAtܑ*Af̎I endstream endobj 1233 0 obj << /Length 2117 /Filter /FlateDecode >> stream xڭX[o6~*#"%u>8mmE H\:?~yH4֌f1rxx.˓7EHH"\\,BF[H8 ʓ'W>B޻ujs3xS_P+ẉ|J-хH(ÅHCج~j+PN74~fq,~WEpt8nkN~<ZExIFdua" <fj`$h_N>8.D$`|g턷wXBMY8ʭUV]QݯN[ pqD8lD67bXjtQ6˴ĎGi6n8 "[n䧝[SI3 g:V:X5o`p!©d?N5[ԣJBSD o 'ϚZ!YւFQ`|kІ}ѯϰ6zH[=`Ιl֣9'!#{Ϡ-;m"9J4}j;aO7^k&7:5OTv ?"+7xezb_Tuֹ5'9kO-i V&jΡX9Wu}Z*'O!ê#"g{H` Q�蘌`Q18| 1E!SexM'yWw5&\ݤJ}wmDlm~nY;6a/YCHp+fk*aVmZPŠ>3V!$ 6z)@eO?)<'R0LIX�ڍh3"$fsdD@D=ώnB!hb@.m_4F@jA&9xo –A7~N զְg5%1[tv=jB.u.]m"%�A7lNP`((,lvۏBv[n}2-�NǢb 롐$E)Z̭ -. =[Y **% 9Ey c$LGNnIXH*Ne0(HBN�g:>;V#uZhz7XB*h;X\YͭTz5ak8>~B9( v;c�Z$ܝHC{Q2nRrۮf|>|H#[2kTo E\�^?#>#[!m�>b ˺,5zL$n15QBb)+5_5eA4׭ގ�Mo갵B V`0P {Mb"P]w C'{q@y]9"N^̽ xʋ�;ύ^~'v _Ǎ BEȑ&l֭Q麼w٘aY!H 4Pt[ JI�p1H=䞖aihNJ8i @ǿnGp 0wc9Ơnצi.Fq8EP24|BM '01}>D\�BF@NyXVX8w IwgK3޻c%=@V&_AL? 9b!% ڝ!P}}ݶM&kRp&}t=}|>|&G/ƽ'ɵ~żNәЉ�XN`bc?x�u|1F|LebOy45<Цb m[#nH~$ы�k{"魕fv+mg\`ˎ.*Ń*Иx)y$1Q%EV5UBg,{M/HbSMvz ) 67s<c91h VQJwt3Ť .-t#LO"H<^T0BcuW'D@x(ugH$3&_} &&}ss,z~'p[ _uθs~4!~z}<|QS_H endstream endobj 1237 0 obj << /Length 1179 /Filter /FlateDecode >> stream xWYo6~RǢCM7A(4(Yp-9DRm9n<pB|8s1_f2-͑4$ #mx02Zz2TH^CRMHB&wя#`%ʂ8`nSPyc_FbP`0W0p@Aqh!6ɛP7xjn23zքxSu9Y_,L/ˬܬU'^s|>yLu2J3`zkpyy=]E'֦PrA? Zk`sk a׻>Fy~Mҫ2ڇ$}Xv!P͑{/SF/藻úF!ɷA2Ñ1k-<!#%m�&G"~N:-lI][i䨶L ' n u۽„�8R HN$á!a \j(ˬНȅ]e2|HĊ?O4^ZqA'Y䎳 MHAN 6uZ߱ލyYWUҪMmY]шfLx ֐YӲ}qmmF?]o8j.6E(;›Z>UiFOd/jqCr Kx5_;ӽ^)wB1Xm;CB)4Hm:XmRMwJ =AF;ypX:΅#NQhb -T Fv^z-܁{\hE7';0=x >fOO0d-8tSEtwP'('D}׻ A8ԂG? 35RAw> ^,S%gSVpsc IP|Bo!mG<(Иn@EMh� ̳&hxr<]>[Ud{szn&”toB}VXl2 oCƪ8/ϺtkI)' 1!L0=fg^=b̀NrAeMM}*28z/(t?PiHYGI7K< P8ia%ʪIQEYgaכ/>Z"t?c endstream endobj 1140 0 obj << /Type /ObjStm /N 100 /First 961 /Length 1609 /Filter /FlateDecode >> stream xYMo7 бhDJ"%$p[$h?Q؞ݙ,43E>>R( (fTTYbh_Ŕ0HR4<eLR\.츲V@N9qE U!`R 2mj&IAMX1F"a;224=% cD-6AdD@e nYC02IqM[F -ZbKFھ*f�Jf,,֌xQw0l*ň"5۫Q;憘Gp*PWO8bbJdx'bhK)a>sq) 1B<GI53b%"TVXj Z]6&]tm[Q` '[7:@, ErYJLVr%*r{NHPUU0HD9T�LI?F$ G';*8m% M @y Ȭ'њFihT[ihXN#]qY,_,]{^]/WW {Z\-6x~rg"' (lnW5oJ^ŋwm͇Er}qyٔ1o [Ś}G"׽sk׽v]azS[C^cԱAuoaMP-V7><,&$z=#`ٌ8B]6JdrЗO{s>{#׽_~V6aK42lŨ,*WgK?LO8oC{pC8rw:]'"RL(J9 Ӌ奧ETӽ' [Ȣ!5Cf2#ydf M{iht�<E{>eO\gMPx(j-zMD*m[yQůo[LEbg'ۊP&3B:@bKbM[$,1#+9!<Zi}Pdr?ivଂl/CaSmn唎̩yWnt98+t/󲼠V Q*qDJU=HGHް/]c8 ub:ۚUf=RfizkV�-]EhaŌ;2̰{XaE|feVl)4ukSslu4RϷK&RiW^wd }4PBXw9)]±`+L}-2>Yf)@u`v*s'9Fi~=W Z4n ,4qY匊Xd×\'NIYZ GB<->ߦo쎸OhNaoi=&&M&0`e`e%u:$̚}0I.3N۠3:ѻf_h%Е` `8_0aC݁=ᧈ; 6w דl)?LI6'$O( endstream endobj 1243 0 obj << /Length 1470 /Filter /FlateDecode >> stream xڽWo6_!I"v͖òúŠHtVTKN wQJ]}b~\ %i`$'D2UgL"T×Yۛ,⊆LYb^,{''NX@TE/OӠ%"c\q"VoN~HXʼnP p`Rqe&<`D,U4%Rh:`$* "XSOOOLޟ>E1!̱-KpSyNe>ϋ%=-MfaJimі Jfs\SOwޣO?uGݧ徇| v]ZP_S/ hr Y0_Y*f1XqUnJ_X V<Y<>jݗM}Dp+(;P~:U)zDr *!,LE4 іȣчw @p$DPe&+^HY$2NW# W Y%8Bb]Y Zg5ج <c( %W.: ~g٪/uk#TR^wug=2'S{E|oM hj3*M[ls+䒐[Fduq1K0h55h+5K_5Kz g)a;$S>.WM:žh0B-y%*lZ5wH` Z}ߖf_g) ϐд*Q;BqӬʛΪi[ ^7̪w# /z �Z4`/q*rKeCmBYي"3_`/Tu}st0:�uyi֣@ _6h0}MK`zR>jN,GXQ>p�r֗Ts Ui?`:70t_d;} r\whPL)0t[Z \#<$cZ^J ɘ()=cDzQ[ǠCzO0b91쪦6}G5WM�ٱ㎹7$IS{;8ל-sP_ uKLas=�Gsl+7D{-Д44y5Кozs ic1 tzt0P?DF14)_/ vYU̝oŨ7@ql$ؑV)ѮE"FrGODΑbkY wHj˶ P*m?zpz>KO,zpeϖr=y:`3N&dӰ[4Bf*X x&[ʋ͡!%%[zM"*EsdjYv1lBRKs>L1[}߬>ڌL7޿ (p endstream endobj 1247 0 obj << /Length 1854 /Filter /FlateDecode >> stream xڵXKs6Wy&B&CiG.I[_:iYl().[Llブ `o|7W_/<Vf9ͬU9yqݲhJ'B멱|Ӫ T ?n]JdD rÄTlua]ƙ.{;Wi׫eHac֍Lj$Fr9jkΌ Ezj9Lu3 ]7-YgӲ^4i6M&@&-8gS7ĔOD5ݞ6>2O\}ΤOI4PvO FtqIDiτHI#$p@YRvJ<0\ ˥yQhrAcc?)I k5P0뉖HwcDQ}s<.j'ɯ⥘^0pYr\GZ遃r?|eʥ̏=_QV#zq?WQ0/fBß%T"KAĈf )9T;,ss|s5{lZoh+' e(^ygrͼ8rUVE|MjHIѶXwhҎ~h*V_6}=,Cd:tms.Ü!p߮=HǻJwRV`.Jy88",xh֟ e}G伩+"zND 4m|2=T9[62" ;%^<ƩL9KAa_|UvL^VMU5L\ n4mlFaǀ +e,әoO\,!P yEO$t@"m 02fU<MaX)TIT1O}1.S~\#�E`D ϤOPҀE2zIE6>A4|Q P*Εx:|4u)~S ~SGCObWc9teS;,qªCs<, as(]<'k:D[l E)ާN5w pax6*jNÞe-,k@�-4=#�-A0~Yqi$spfuEWxڎxu�o1j>E0Yv'R ^3CHmc;!7,|b3B}/G-ǖKDŽ>\I_�@_MTx3n'v;e%o}Az}W;/vOֳP`]HJm�,.)M$ n% /̇z]ޕuQŒsEtSͨĒ%OmJǪ:S0{}�CqoQO *VyX8ye%7MYS|$'�n.6`KQw}(Pmn)myXj&:܃TuXB.y$2!ciM ރ@/$ o/ʿH!mC-a3-`9,/by>y~0 -i� BLSD(3XYUD%pvI1M6/~oQ!E~� 5<&88rbܳP -Ynx5n�5*aZLHy2@'ĩm1Jzs!8/0ϖ8rFx`oL<o),�L ®<ԯ ZhWFA)R\΂0)f_ &w E} ~'{Z(&eTG[Sdo۶SD endstream endobj 1251 0 obj << /Length 1694 /Filter /FlateDecode >> stream xڵXr6}W \I"og64L"))o);weђl+v3 سg/=MtCo:$'{$қf޵חLTˤ$LIB_U"̹wӳg̣TƅVg_c>Xyq"9Vz1V1I?z"$\Jq/BiLPı򔦄2Ʀm6!~Ю4ﺠ@[PXT8YeuytwIՖy jxj/`h]EMج{+GNItorP%*#15ϑiR$)g&,^H2p.fA]Zf N6OƨҠK2?1+H|VEHB~G([nx@Y"양 "2_M^n<+%"RJ0>Rt�Sj-ً3d8cBiyBkkӦKKWy?a:\cT<VQ<ͬQд*ʦ]YŚ(˒>. |Ã0kw0m%]Wv/pS<BMр5eR]eߴd?,j!LVHu[{"<w595$]@WBq(m�#Cq5>޴�ҘW"Rp/sq.o5;ΆcH=1v ^A[S#`ȁ%yF.>�`΁""!w4PqO(l0 J\o=?T! @v)OT;:AŌ;śjۻ؍e3^ǹ ]?T#d3tcR KB GPF͊afsʈQZX%B.e&P6(;g(8�nCJ&xMUTϒieL0-XC-Y3vEU)h8"CA#H lp-wGDxW 9xTh khCÍ(~VCù LhhHS-r+'`[pt9"|hcM6+fWC6̈Z 2Ќslo6~|S=teZߩ菼?X0vz(W$Cl7J<.,ʄߘG̔?pHo [I$S6Mm}-??G Xpuܠk*$(뎙bg7E+T$DS|ݯ]��͢]ؗT,ױj#w_rio I"D]D. !Q 93$ Uqe!Zd2(xP(;[Qju6"+nl: Pd<R'pi*4$ѩ.w_n[돒]wؙę>Kp:>'o.o.ЖIzܡ*E8活!-KjF"g%WcE H{5i0;Jq~~{r endstream endobj 1255 0 obj << /Length 1306 /Filter /FlateDecode >> stream xڵWKs6W)4c"x[&tMڨ4H,6$PwA�dюovyZ<}Iy8OXQ&p(gVE=ߩΔ2f 2 AuS˘ӄpO_HńEhIL@sm@5Q2$l*+;KZ돍?p~~I3Te,�$Ost}k(*ʭf n,)TuD*DUWֲ<cKb?˖ &7 Fh0%ߺX9z@ڸp˖hZqîN8eqFFEF+Sj[Cٚ+A+'k}7՝&u?,%,.t.&,C/m1jiqHyi?=9;' jCYG-HYA&fmiKHrX!'?7=qc)A 2{lبO;pk$)L;]w#7՛˒?WW<o_z@qx�F`C~){yrP',^ՕI!]ipYup}X$SBF]=$GLxhRmͼ2!A quAqxZK1i5 2xQ̓4jI�߾Ts0VYeG9.Tl{(5,>F›2*ͬ,>L2O03O{M(yzJ˂�-K_)_e+_r%EF4uEWn|(FyiNƍ!w]ݷz^r7jl `[ݨpe}; <8!2C�eCe<XZ&(BЩ`VU=$D fr IOMW@P,H/7K3]Z<$.m}{ɓ's }~-.i/q菓FpN9@ jz/U]4ܹٮSt{P#~=hV>I`#؍ 1ѵJEc[LI y4Y O0c}-Рݺ{ wutJLAM)EWKPktb%iNاnxzjίm[N۲&oP򲌁{[.,F[v%ϏL>cgg0&rԾdoɎ$Wd@as?AvC{;,0Cu!K; D,9}ϓ>8H$�, endstream endobj 1260 0 obj << /Length 8 /Filter /FlateDecode >> stream x���� endstream endobj 1264 0 obj << /Length 840 /Filter /FlateDecode >> stream xڭU]O0}c+c;NbOU%@tAMB<m3%N  <ʾqrǒ"Fp�S$L|Ʊ/C6O*ҧ|p_0#QFL8uRޟ{h!;RD oY Nc>B,-Ʃ}mĐ2 e-9#NxHIN^HH˳xS[wS;wil}uP[ՙvIs厇:)hW%.BfJ:)'obZ4ᱞ,H@'XX¾։Q[)t,{$ W\ٷB߄"kLv{f13wi)͚GGS'MXգ0˾pH.#}:m5 K!YV( ٚ�0Č0W"Jx$4iRfǁ@ 5~GDʷZ8ϕ5XEuϡ!FȚF _lom Ι=ƝOC9r�E-DܘD ܊~N`�*=O<w4e1)\}٫ G4<3DAS_?3fT)gJYi;-=Hy-tM0}_7Β*͡b ;B5uY$=dzRv^ +V</Lg7f8?\]2yb 982@_d|ZVsj 7=ŧV7N+vڮ ?XݿlKH1 YF h) endstream endobj 1268 0 obj << /Length 1408 /Filter /FlateDecode >> stream xڭWo6_!&CR>d mC;}%V!K%%;~ٖcq7xltrz/EiD#o4EzQQ2o{w~̆_F$L7$gb0a#_Uۨm'oF'NGuO`/ѥQ&ރV{PĘVz'M$8QJ! ˜Xg1C8AI=bIhnc‚-5z\Hb.ঞr>)TYTNF)OM y)rZ" 2ۊȬm.h?f; k_w#?FNR,p9|Xi}66oU1Z?[#3y]ND|\9={lJ ,Ih$T8giL{vb* chqT idVW-E-awU񭳒 4í>cM|B(i/~,C]#sCYZ(t0>}YΌ{(,D;3 MM焦{<JR?9fW}6:)H (Ct|\CڠB9&awҊ IJH7J#l3w/3tKMoNuܛ<ge.Ơ)"*^*A&-2-u/R^~xV PON h@_8;& C(?& (:n(NP?M"nzgBQ =;$Q_0PatLH}w ƃzM7ViVyX4R=ZWg/q܊JnwW]Yj`% ~vLޝzkQ"/+ q{ lGeYK~,.&eѠOBLEmˆ@0 ]l&"XkmDl4m0(#sd?Sv`L 4% |O F:[]kfFsDB4> (T_Rzw/i΃Ų칪LѣȄ(n8 "e ~ֹl^,j8IG@U!Uq5'&$@€ݺ0h GkoF/'j#�F.! y-mzT{ p,,Bm70\CA5v-H ӔN$4ӉMۚD0vwD+%Awa;;J;(~e3JGʰlYᵪ6!lP:5D1f1LƿSkQU(꛻thNs Lu $a_ƀ< endstream endobj 1272 0 obj << /Length 1999 /Filter /FlateDecode >> stream xڝYYs6~V1iUKTejv(XEo ('kA,/V q70ύbn-S}Ivu9lݙ=e]FПXjR+Y<~F\GI9z>cvAS'"?=-n>}ηC%)΍(Rb$⹱dCK^,&!)\.%9=Q1 B\l~<ΰ?n,{{^wl#=W 7�L`M3ƀCZd <&&p?L~0F^L^14OLQ`nwk9xi/ǀc3'瀿r6aQ؄dz"H{g:89;qgR෸D{75JL݌&nqM|$D(qGNݎ⒑xoqˉMrw$-+qvz7wwfOݏ1(d5[׼OqGnKR8i[ףgY醌XnAIcP^-¶+כd<Cf%Ue:ZrFHs ,]>zPC<c$ e.;- d)JDl:~F"{8oM+E;ëB2�7ؽ G'8ꟐKx'|,q@]%R&g�zCV5$_\|Ӊ'#ء}$M:|,.!Qv o:vO MC�nd#fW�&pt7%MCf%XL۔R5rRf(?RiD%I:8ؕ9bVB$X.PN]<_\Z钢TaR+I2ZJq׵ ybуΊ!"fQxYɁSHæjĶ֫OhW[*Vf0@+]7 WJXTy}ɴq>"[D.%ǹn#=ʃUJͅbd+5+H= hؗ|-$VBGoʤwȹ/5:8 :{;hr܏(jE< \}<{IsSudlra П~ԹṔA ՉA>D(;E^ᇦsV pNQԨ(Q]>Cz3G o> r9[YleӅ>f8 !ˋ.g BZo/~qN=6+'\+/eP)XޓY ”s%F~.}r>uC|ڔs9G^  (9NDH-Хf0"јr8QL;ns[? W1u%uӭ뫼mP`}bgQWC?S.a~W;s L=%N'<ٵX`\+*xM^}T0[`Ѓ"8-0}au/ط|Q?駈45b2-+@XdBmoA}Ei"N^(mCΨ-Daw6A4GS9i~._AuHqyF<:.3崑⨊⬄'x &sB7u&p}I'3U}]kݪQ~(^EMoֻTy9[mD7Z*n]Kd5_’NMD?bt+kn!ͳr6m+U\N<.t0:?Kq,%}Y+Sa\LJ§d endstream endobj 1276 0 obj << /Length 1372 /Filter /FlateDecode >> stream xڭWKs6WḦ́sL:Lh&'Z$vPE02)hx|X~[edh$'GZPb2-]ŏoF o|o"LE4ov-c FD0FlQJ㿋Y6[DL$3�B#TE*D)odca؁_z]7�?&nkqpݮh;}W6)iÂ*\)]?<ټ|!:S /ߢb^"_ʪBeW#OV*- vJ+JLK\!Uv3-7+[.X680LM:h`g >슰; u]M82-O㮭jl�n>-o9A,VaR:)ݶ*z"eA&enTbXeZ:b(F L+.0e_5ɔV~lt߶~J"W^` 5fĒ!B I' ΤYpp(zw' ĞL\a0T E4((O{d88&YM1M0")e[pSrMDθ9옜<^3�BzY>WMDN_unc9 _#4DPh@;Eq?}̻91~jVW|PDex`&ޣ\{3 E2!b }LQBE p*]DK=L nN}ؕZEޫ ;WU: -!A:bxX(Yv8lc>̆= 7n$aE Ug)96הopjGnqǤS@jA 4)9`o 6P(5:,%ij|'f:o_A:(M*`:Lԅ׹)�w�AUcLtg&s/* }zQ<}eʾ?M]G9Hb uQ) +8@l~<i[>9a+2f}ss<#ئ` (�=y` 4ec});h3FR.Lq3Ϯ %(e͞u n5K8ୋ_yfbra2DC0,o_@k xx%UHC,q- ZCWH[- `$c7y\,^(k}f;@`\^cDQ endstream endobj 1280 0 obj << /Length 1200 /Filter /FlateDecode >> stream xڥVK6 WVyflд-km%ёJW6I �߮o)qJj)BE)$-hUEV Oi=I9f4J"Eޡ*7\Z|^00NDTU>%UDQ$DJoDC@4E._A#*xxyTe'$TFV*0rWmIFi\wdwKM+ 2BHT0JTm`vt.\ot;<%NAeJz3 O)ѝׯoEw9]cK:^/׼@T9{^{^p"Pᙇ#-d%<쫪vX,KVFWPMzPU?Q3j\]׏u\kv7X\xiqU(0!_!%u V ǿ9`[sjF ;? 8L'ظ"/(I=[[վ^%9cl$2# xgKh  gOy W %pN<E, 7y5+ w7 S@9Bf )|_XE=FfJ.O9s#(w!~[Va0ZD (C@þqs4]< ߾_QNKZAt>)Aݾ]S@L׬)Ka2p T.擑�D簟;B ;S֞ =b6Ìy: :@AC'R>8a@pI?mqMWC (17 ]{bqѧǕg9a̱rB?LX>lM<P;m=I:y_ph+v;3XeH[ao%CUgDJ b%)M<NoZ=3P{̠sM\+iQ5M73X[d!./x7B P6\VnNBkݕ;V9BƉbG(E\Z_0MKt:N[D0RI}K<vf]wwZۍn EM ÉydJ|3(D]Z endstream endobj 1285 0 obj << /Length 1177 /Filter /FlateDecode >> stream xڵWKo6WTlZ$%Y alE6hуc6Y2$jiޑ-GNnDqHoԛl2ADx9 . #o'3 ⏓kղ83uO~:f(Yo>] :sJ|e,Sֹ\gT׺6!/,JgxCe{=HTJ@{�1Fe1M9^A.4t/j% @%~B:%Q DPn?ǽ!SN0l {nm8c,b#&.*/=}jvvUpSҊ<"6�K]lՇH[ؘ/QZ좗hKtdB߬DEDz/М<nIgm@\�qB$( ?�9\,m,Q&%ΖlCPy)n4'u;Z}&_`A0%! 8o`MoA؀6a3(X9MQ *J\ZNj}w!KL"(T\*T%Ir P+'<,/pϽ,5wd4r ,UOɡUw+ {\OO=@o̷u5TbK8Se]<nRfZ e*q+hu +R e`ΗL-&_~z녵":$ԗ!18$̎a*uiM3wL3ePʻ][L%f|yJo+ݶ^sHӶ_|!.�g.�ŅQ!&lfQ[RlCekն@ߣcB뭨ߞ_v!%ReJvuQvYz9|U0hhw7Oy24?n_p!n _dӻsïQte0h=<M%尋lUOa}oa]f+>Ѩ.?oөXlp|OfFeAinlG^ORkPEVgp- s6=eW<wak endstream endobj 1289 0 obj << /Length 1603 /Filter /FlateDecode >> stream xڭXMs6W:3&  V;4&Mkurp}IآCd߻ �J$D�~`wBgK@ 4<A AcE:<_䝒2#K7#88eFD+)JiD1Aݳ˶Q7QqC , "m&6͟:6|f݂5e& ZTV=D /h9{kWM}NuU8mh^ ,?p,@NEx<w=k .� ь1#c'q.4θzsb"]ēUIwtٓksff eM'<T/y(N?rtn,Ma 8  N`BfD+MbQVZE}D]eTGZ|ٿS ;ǪWyݷfjɕ'چcذZͱy$rn hJ;16oL(ˮf1ܺ [d;MYÒB(5 '7-֫M`)ػ@ Î=JEeȲYl~}r)Nw vsY׭]OQO.F_L=Xn%A=t/큾i-ң_�oOYW0f,TIwI8TMd^Us! MbB~.˼]+d1eQLpx<� VT0ܮ2RmnUC\;G=kSd ACFXo3~E>g_Kh)v٭d?Cq/RvI9|A^(=o@4, hP$vFWߛr$Zq2G"Z U@5:PPx5 q*|m^Gy3 _¬:R iʢ_eM ̚}R&XB{MֺUծm'fEȕAFq31+KBd"Dk@ ?J@Io)m aX pּ1u W.6 [#gaVw|O.')rOQچ')Mm̶)gvNt h<SIfX@@7fP�,f',љEW_|�alP94T^L_g! Ɉ:/C&ܹiB1V'մ+}eCxiWλr(rϖ~+YZXB/nGcEZp9P>GGSh \byt}~8Kh)J-WWG:/ ʬ3׽%8 @)bA ÷jfEؚ/;w lntwD/4qRK}ְ-w6U?M}]WfіC\-C`鯲WsR }IeUб9@e,^UaonGʲmŮ;hd9SJY�6M17~. ۀoB7y4 Xt?{ endstream endobj 1293 0 obj << /Length 8 /Filter /FlateDecode >> stream x���� endstream endobj 1297 0 obj << /Length 1082 /Filter /FlateDecode >> stream xWK6W(KR(AfҦicѶ�IT%95^nY="<yb˵f$˸(:\RD7ƴ 4f r<Ir|j5B+ ps۶2fg xiĦB+ 8Q<ڍ7H0N|Ucd"'ZʧdHQYDW/˄7H "$V-b5O2J-IUnˆ#;=:W#ysz<pу"~vx+l36qM72C/"<g?xJfg#3B=\న5d!bJye_3�v˻ ͺ3Yr`7A?>mM)d[$HUA>Ncмz<6mkzc!q+MQ6k<p ~<oѪo [ ̓x~q_eeexwu8ޙ>({R Hڮr4opDm?t)hkuO^\s@|Q""}: 8\及WT<x=gsSd EѦ><&Xγ<<k !Ax}&k>&r;ll8`ZB03Ο@K |Vo"`ٵ&Dd,7e!>�| R6_V@Sv Pq RvRp7Őiv4@}: U_O?n!!VH56B-=naWw%Bo $ah~z08'O¹{$n߃"e)vjc[�?aُD0]il1�dh -:4'Y0.GGqm5"lS7rD댜WN&L]y gz $u:.}2wgQdž ~Хklrzm endstream endobj 1301 0 obj << /Length 8 /Filter /FlateDecode >> stream x���� endstream endobj 1307 0 obj << /Length 954 /Filter /FlateDecode >> stream xWM6W(á(�msȡh=l ˴T\E|"嵽.Mў4r|hf};}pFgd"2,U$ %ݔ;8,1EHEKk7A?xz| Њ] 4T=#K<@M$-^TgW18bpVP<L7SՠDR0u&`)cBn(\n:9*N4ɮ\iݻd ϩT$VheEvo#8�Iӽ?2~w5P4Vm3;q$ב%H_n[HG8kl}+Zvz=&l-sFA|koT3nO ɺne}17wjbeOAIRպR:e4/|! UP.K铭0rV "'(cbɍfE]6)U&  E!NA3t &Mby9IPѯZqZݜ췋Gەn5'xiqB7!^00G7Ccy*S vt!xCxҌ"{r_ vlzLᾯşBc&@}vO>"NYeH!Jo^~,h5c?C,IE%զ:\7U}ԕ5m)Q w2c<fi70(xf~9Uαg40(Q�WY CCǧwBKU1\Hƣ?~;7ޏ_}kqv,ܗ \m$ ʆl-]ɞ&_MXg剆3\ 1㠳@22'E endstream endobj 1314 0 obj << /Length 1969 /Filter /FlateDecode >> stream xڭRFW(8#P�c f}-5-ɒ ͬL IYYU|Uzb{7+()/֡H37?5o>:(Sy7}.`2 C]/Vwu]凫fғFh+$z5"@J-@.۞F/ պdl= 3ݤ =jJ-(Ѱ xwc6IĄcGKnii;V( e+^6 utgwr|J'!_.?}sNS^3$-^P~^u=m]YeYîV~]wwoke:+_=m*3~R}V%2# EkU;v r7^,R8䯓=2Z(rs+` xF*a ^[{_N;'3Y"%ca iR7|R( !hR -DVɛ?%m庩۾-!2HdQF<U]1zZ]G)2owhȈ$oØ Box6~no ȥJmnK2|& 8S&X#"K}@'&~ͤ-7Үv?ȳd6K Amb)$8Ӫ�~ac&IelNts�|Вy|$c B �}T ƃcܘ +C1dbDHroלY&,&M֛@ifx 9 `vY(B׀LΝ6ovLR3fiO_IX(#`M38#l`3*pgIB\�J@㙥PNOpYHG[)!Up zۯ9t;=RWjheٌǔ.}%2Hy(KOP&gu 0|[o;ˏ 'zț|?�gMF|iYn|QrH69Ɔ pAN25&1_+,qqMD`^րRD^?6ei9-#v6ve1!V^5d#Ik%RPgl�Hiȭo]O}7㪚P+BHjHX2䘭 ݭA;I?y^ XY)7r VG[@t/wu *Ng=ZB ӃA7AȹG:ާM?0Hiu.H'<'z0�dY*}]huw ]3ZqST#Qf8 GQ^Ү MKK Aގ9*eAMݱyH\;[ &ATĉ<MRyLSYH))-]Cr[Mq}yD4JFh!!W"FEBA~x-}pOᔜ�42 $w(tڪGi2pWp _U:�yPşA)DLpvv0u)rv9>ȓ늅dGKfBHh+2df~>քZ$p{kѡ/0t@g@jO~=b%} B]BV*p,;ӰUo 7 z`..v[T"U!thG~ zM5l@Saڤh8Oθ̗|%d+e,n91"f;;%҇&%ᎈa섕 h5ΜHgN3yy愒ѧbS:U&E C9 w`$𬋳(L<4�0΢Y4S__ qG~)sJ܏|JǦitg?h8wG&6:>%c`ʤ endstream endobj 1318 0 obj << /Length 1022 /Filter /FlateDecode >> stream xVMo6W{!)"{kb uOhõ;P;YlPѐμyo&1(CQ%*D>}4eYfR~tXw\= lriuw} A P_CI3E-X,3F)M;dx-Z}1Gͺ7`RI2cPZ_z!dZn*o=4cB'21Q ± nZ׍^¿I]:(vլq`qZX!(3~0lT?LZËޝtj1>M]uܢ'qg\I 3*)'TvY| ;D0No&s0č`*%<TFAE"sHKGfK ftz#πL\!p2gS\H)(pTնD({ �uYDnͧډǀ~m #FL*]GYڪrU򸭁' s,]( +;ܿnog^:t[xD 6CrB|B>E̛+xH1|=m 7)B03siO0 r~dއAr#ӊVAbI[ s[cv_=a\s~)hNso S|T �5DBY8P +Qz9z=Ca¨q؀/^at1 1n”Ɂ֜ !up^XjiXtz& ~;|1q1ƩȄ=ȨIgsb ҫx/2)HVJ fG?X~w~ۄ`}b;M!~^|zdI endstream endobj 1322 0 obj << /Length 8 /Filter /FlateDecode >> stream x���� endstream endobj 1326 0 obj << /Length 802 /Filter /FlateDecode >> stream xڽVIs0Wg* d<IL;=> 4\N~}�Ǝ8\<i8}1 :t <"6cA ̸X-֜e}^>jEe(iU.u{: .Ď l@(x@ xVB@J^ &oD:!@ `96)- 2.@| )"]et2VYH`^Pm<cc,K؂2~@>01kJ[+me I>3-<pfG0?n>G!_0([ /r G՘8^-kB#)Vbdf:C�XqB;E7-6k&MZgO|1)M_;E7H+H~ ԙ*e}BTB`=X6ަOLBHqF0PJUߵhq!{l7";f, P%!'HʾŌ:C WReǍWy*K;}[Ċ#j\,"'5Xg'\XͥPܝ@1viXߨ븶9\ \˥Ƶ9 -#9-%(M?lQwԮ IVUTniK3P(_B;U<RKXw)b}@% 'X[VH>i&h껐x WpAu\=89> 6 sK endstream endobj 1330 0 obj << /Length 1078 /Filter /FlateDecode >> stream xڽX]s6}3�2<I6^7vIAf rJB`H-"o ѽ:p}C- Jw0E=ah|]~n1|4 t"b Jt|[e~`%ܧy?h}ͦ?0ھWǯGmQVcyi}14X Aؚﻖoq;ZH <d0X~�3զ{5Gv[ +�f:c˦qE55V;k~s3Ό o/x;g|4jk˺N`Yz"{2c"?*vKXlҸ*# [p\ȱ@o!))YQ<! >Ff"%+)ˆlYd AAc,1ca!b!>OKR^sX_B(3d濄RD+ŽL)&Gg@LوF* 'z/u,hp~NX~pw{}or@qz}%I{ްbZ0\Ja5sKECy,Wǖ*S3<I#Jdv|k?T Q8 ndI}9 :VԷ1Lz&"J:w۶l&[ѕ  Mɤ[9|.87P2 L]"$Ff+0KhڑAҳNE3iM�%V\ff g8܊ #S{O_L'Ŭ!ΊAXE$E%y_f VWyJDRs f*JZ+E j*T ]FҢQHŕt@BXV4'5T{\&Ԕ@j!8dSg xITnqrz-ld[) 4~6ϤS$ZcoNUШ9$AQ s/N;{DW5U<ssvECГr93�<7O:gd~i_º| endstream endobj 1334 0 obj << /Length 1452 /Filter /FlateDecode >> stream xX[8~_HC`:*Fڇn<`T,ǐ02V<};ǹZ]^D$ XR'$x. #FTJ |Yݲm ,_W.nV^PDžuB/p}Bۋ/_]'oxQ<[SF8r_C hp'<рADYWZ%sBP7Z݈%1棺4[4ncPZ~w]px|[i8iYo:Ā,K"*et%יVߤe@\Q7E%L.ES3I_VԶlNh"ϟ,/aXע4Ve3QNLkY=5[t>^BQ,E+ripO W1,]7G {-C#ed,ӡ(I[P6BŲiyV6보  |C6C z2}.Mp]40Qr<,qM-jN%imЙ"zYy$,l/*x^aMuO9xL7`K\24�tFp!EŻu..t f3ţY, 貫g!v}Y07`=](|IYt122U n=dj{"[q='Cyq),$=- 0HIʢFVƈ[2€!cjXfmF !: ș>:e$`|xdmANl"}H[�ߤA!]`;{GXXuLၘD{<3F� Ml[u٤zV4v` ;N> M&ФFO55TTx wВ{mc�rp?4ƻ?L(3SvevWvF*bc98gIKxmҕnHBFA^|jK#\L@R%Ս…2\ܵYnrg`  &8UY+hu:2IKڰcuHv[tTP `͖>ĚQV)M,?Ac:- {FرGR)pT<tCk.HxgXlNJ݃d8kAZKq~` ְ#aG8*WV骫ADA/  Ⱥ]ٔ{40 > 3>+;0PN=ƻ#O8T߼{w:q&]('P3:io{eN~QΎ̮ٵ7A+=1!Ƭߋgu˃_O렏MoGqG)|x.5YNwi;.x#X4Qۢ`]TibR8/q׿7_J-/`AЈ? endstream endobj 1341 0 obj << /Length 1151 /Filter /FlateDecode >> stream xWKF+=iGrH*Qr``k͂Yv}m!bf)uU}dt,t`TE)4 #mx0ɧgLk4RS~\ś*ݎ#*pH4GBibޖ{sP+#6A]9gEx[9Y>w&V;UU1a,_0y~ܽCsכ<0m2>". jDGӯ8ҧ�,3:8'qn_?@0n0pyGKoJn)ZBJDg0HbF64:xWk*`$>EB̛e~ZZ߂* `dq F{^r_!k9M#%+|F5 Hn,)bQ�bBOpK]�-�Z) 'ZJmYu ˉN9/~ԙbRujͳBTQ$\SUkb :݇>dƉ썵=6cnR6he@Dh+b/E;Ywv 6Rc;T_+PW<*ч-2VR=`% _O�6:�5T!Cg85H@ QT2!YYU:EXnL}hȪ~{3C6eV4^fGVy*i+(<5Ki8w.4Z^<6M0d|?J1 S \aeN*nhRs̿}MZ_DNCL+ Z#,j84n%̷H:(˘ujO(Pp(tEY|wOnu(_j(P4XΔV1PV濜i^;8>mf݉}&->7PbsZ4L ŀUݾnõ4;YZ-xؕ;'^<480mF|{vr|]u f:}عߞn7zƋ P8aZ7ĿWqoָu4!\3<tIKeG՚6_,.�<& endstream endobj 1337 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./manualimages/line.pdf) /PTEX.PageNumber 1 /BBox [0 0 595.2765 841.89105] /Resources << >> /Length 29 /Filter /FlateDecode >> stream x340P0\ 9`P�ld endstream endobj 1346 0 obj << /Length 1088 /Filter /FlateDecode >> stream xڭWMo6W9@p%nӠCѢzAX,y%:w!۲>&9ofpbS!т(h#E|JX&L*K>ծ 㯷wΔV"508q124O5N٧4)qcB 7:y' `ФI~v@r!^ӚL#psH08/3h?q0[]\y͓'a1`d h#øvweg0^-;G,Gd<p<YŪBJMqysCR0r =MSuU`\OM/bձS<)C8ݶhK&Fz|}4SM?vu3]4b-9.,}C% "J� mF?UaOJY/~[ZtT1fڳo.VnYdu[Fgjibq;Y,׉3+ Lve~=]/W1i0sBpB HM2*eS=ؘ|` ;RRvuDȪWuMb*Eű+MS/kL.n׻̓Swb!R% pF9 RJ%1^kU)3*mQcܔX4[3-|mq"Qf|\EٞhTtuf 纭%I ?e!@pK# ~VĘ̱uSWϾpl2MSgo1D&sfRa OX[9Ot)7|qa`GwmNu|k1N/EYDG< =+! a WG-ʣ a1s][wMXtukp<cvQpǐVP$lۓ#9#SBu,iй�7U/ ٷiZu^\+]18Lc*uJOpmXҵR'5?6 endstream endobj 1338 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./manualimages/fill.pdf) /PTEX.PageNumber 1 /BBox [0 0 595.2765 841.89105] /Resources << >> /Length 29 /Filter /FlateDecode >> stream x340P0\ 9`PH�lw endstream endobj 1239 0 obj << /Type /ObjStm /N 100 /First 961 /Length 1494 /Filter /FlateDecode >> stream xYMo6౽PpHF|m 98΢M�7X^9JMJ{oHE\p89I/bkG!Nbt\ ,JNj%3'QQ\B#\m $rUF! #`ޡJE˺ź vfx!M&P%6\s <d[Y-DSڬ KFmQ`9:dY"hl2hrr=ˎ,"@FBp*@#i* ZQlT0&/C $0AT-˚@ s6KN-bc6]6�.F&6+zDc@+5*!1 x680�6h(Crs@rcdI1ohȈg C)&K&\l3fP͎SKcuI1H\K91$M¤@g*4VvsneeB`D誴 a @ @R06)NsgAŀjjd+`�](Uȝ@B~J8/\}ru^3>n.ё#L*"mÎd)^w%MD{r={t'{u/ɞnWCL\^X7ob{u~˾=u{w /19FRzN5m3XuϮ^]/o6<~wObX<g+v B{(g2~~>:Fn<4`#iԀɏHɐV3d(%L%&AIϧ8PxMyK(} 8`` E2mc{`>]`O&]`dod;;A #  IߊQnJTFîqiqЙd\t2.@.Om|kz]`rL{Hj`|} 'Ehd4ifM3wڮT׎YhyD&/d:O] Qic1Wo d+#{w$KI=/H!qXρ.n:RWG>jT/q#5-R5+5oZga@й] MC}+`WPe:@%0J.Gpp+c)0OdO`]Un4N]}o(nƟƌcB,{"Zd1TdRݓ(%dOvM\Zy]nA~۵%իc"O>m?}}=yuʈt? {Tx~ 4}bށ|h(~݉t$JYeڃwp0FY�F=w!$#O%_bgCl!1iƄ/",q:G _D'1OgGc^m|Ly!0#`&&4vr endstream endobj 1352 0 obj << /Length 1123 /Filter /FlateDecode >> stream xڭWKo6W{÷ޚAE A+3PrH>H宛I7oNjdQL K'XVkttuGާLifMlL$ xJE&)waޅ/wZZ<-("HfX(13AkFoEv% ugv}5L�+)0L+o0zSò8pVƛLC)FKvruT_ FB~uɰ� QBZmV YRmw%$WDCz~_<S!13G 6xãMwٷ6l2nGQfIuRWa`_87O}g:>or `Ă1 r( p8"}R~}\@GO7̀7)+}l'ń?DBi0g}00v>Q) W+체 _!%rɥIR\"~-N9y1u\ B+^Rbaf~̣ݹڃm[)řQ!-lN< C2HX>1/$)l,I&_}[ZUAPXȨALK,</f\a&Dbf!PLA'2C)<$- 43kh*Qvx|kcPJH|miua-wRL1u <sР<| !B7UKmʻM;WJ,wir3 �#5\A^m}T7 9ʷðY&{8mz=_ G{LCp:}ÏRp6'*;z_e ? #n'&kMGXֻ|lڷG:Zb43ӅyWX.OxȌ/H?5G'-{:^_v_Y}VsogJ(\= |Pe>hS|Zgp[.T:NXB%q@ ~.W&۾ / endstream endobj 1343 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./manualimages/bez.pdf) /PTEX.PageNumber 1 /BBox [0 0 595.2765 841.89105] /Resources << >> /Length 29 /Filter /FlateDecode >> stream x340P0\ i 1'+�� endstream endobj 1357 0 obj << /Length 896 /Filter /FlateDecode >> stream xVo0_aJ86BHlcX%]ҤKRI\lmZ֭ ʃ>}ar4֒I4 %IN <) I*<BI'e|WJ*).gM"E4)$јY⒠1;CsЭ! BP{_0(!`w`�"+yD�⦇k�1I�(`ǬF�v),T%@ZQfH* lCL QrfȬ��4%t@dzI!(B$0XA$5 mЬSC )E㓦81ű$ާ$E6$8#}+6&ns-]W9h E i̺q<7 (4FtrwHLC=Ye{POU`YT#t%cQOb;'".4kUtjN#d^{R<B8^<A1z(VfazvKb%~F!LB }E֥Q9F~d7ߛm&E*Y"5mzjy%@*3Ӣ[6y |{w⬧Hc+mĐ3 K3۞7ltFwn|Dĝn*_>JtdnFe^;(<QawMr'% 2%ݥ )M\`y3V˔Ik!Z0}S_oDiq7#*|wZ%Xa4pkqν7}ϐnqRL27RJjr . endstream endobj 1349 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./manualimages/clip.pdf) /PTEX.PageNumber 1 /BBox [0 0 595.2765 841.89105] /Resources << >> /Length 119 /Filter /FlateDecode >> stream x} DWaR]I?S%Dj ݵ"!x*2dԒ|-(s^%:ck1tԦ)p~5vKP(CAmN(,[CA uL# endstream endobj 1362 0 obj << /Length 912 /Filter /FlateDecode >> stream xVKo8W=@%m654Ʀ#J̺j(UNiG37o82PD KFQd!WQK.lU*r-L{e*2pMi䢳EmP?V N8 rErf(gwkF6`HFðsG8DFjc<|A!' `f#@f(` TBÆ8cQq.'-̓"0ARA6/7F*EX~Qm&Y:K)DDkߥC6R;B]5mߣd _۪CKlBwS8ƣhǏg>l-lfiՌ?U=U,(!R*ZgH.FFȐ!ČS3" hkoK(sֻtRt-KQ- o8c(&$Nٴ1$@sf5ڻ?PZCYCbt/{<:4k1ӐC3(~_AƒV�EppEea rpEqouAOggjÎ <{Ű+nڣ {Ҷ/,c@-Nڬ}F{8#7MԩG>AɏL0�V;0PJۗ(7M/8v;~ۦzqm\: 8l8n\79kTS0)c0lʄRP#u51(3e`5<z@{c&DP;8Rsg Kۻ30?ˑ%a =Ĉm7Qf22[IY)K;xݾ₯lXXC`"W@Yĕ%oj JA!GHP>,/{qr endstream endobj 1354 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./manualimages/colfill.pdf) /PTEX.PageNumber 1 /BBox [0 0 595.2765 841.89105] /Resources << >> /Length 99 /Filter /FlateDecode >> stream xeN10 /QWX!$!WHUץ}ɇ*{xsoT0Lw0[L xzڬ+ endstream endobj 1359 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./manualimages/capjoins.pdf) /PTEX.PageNumber 1 /BBox [0 0 595.2765 841.89105] /Resources << >> /Length 44 /Filter /FlateDecode >> stream x340P0\C, b_r#0(A(�g endstream endobj 1368 0 obj << /Length 1304 /Filter /FlateDecode >> stream xXKo6W{˧DmCht,BlIGEJlyhH'gi9{r4>r+-rn?m¼$SIzgWԎ_.a+_̵\|_~QD"%1|"1eEwV̵B ʰn;y0!e>ǂ cͅH0@X_a$5L1+l 'dEEV-|@v72;yG 33#5(Zj[QpGd&{6IcG'ڛ8HʪZrt6D�ħWY @ƪM;c9"G<>v6nnp*֊#8Yb L`iy^ET}Xp ,{0,~0#iҹ΀�xfy dԯu.@axz:h^OƮG\gXަ}kW%r֘wE;Uh"Lte'*(.' 83E_]h0a >t5$�͟fsR Xϳ|7]QKAoae&|󸵦ɟe/@UaZ:TW=M߽\h@~Hފ*xC8$X�1$ZY吱 -f'괲1f>)M>hTy`!$WNKr$Cm3� 10 P(($Wq+۰ [joWF65c>3nR?N650e8jTz&Ǘ{Ck^6q_Eb݄L=6VF_K7R'% j�-Ԃw mTfI05++. 7oT_9aycci>Mp 6^{hĥ�c0:|GEtGtHUVI05J(!|TM+Љmv*Y7Xgdu;;Ҽ.+KJ>) 9 S86Gdgmh̕3&p�jxԝIV *S:ڴEadi.n]p{rFnHvy||B)՘(yQPCcz%T@s=I:oqm7:nlkx[nGMGuʹbQf/m_mB h%y 邜ؼ xWg"o&e ꢍNCj0:ο(` endstream endobj 1364 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./manualimages/dash.pdf) /PTEX.PageNumber 1 /BBox [0 0 595.2765 841.89105] /Resources << >> /Length 38 /Filter /FlateDecode >> stream x340P0\#hc k`4`�j endstream endobj 1374 0 obj << /Length 1221 /Filter /FlateDecode >> stream xWKs6W`|gBou=vh ؒCR$@lN.vžNjdQL %C@ ~{uG1Lif_wi2fDTX*6!>]WۻZ^}^QDGLP)b0%e#A8{FY" VI`!@W-1`|3 `_I�  3h50h W:E0b6 #_~L�xI)&,$4h]BQY2|Tr+6o]'L*[IȀv^HrWg1&Xs,^i\[vnvEڅ vKͺf6i+agU񞇂 ~oH6Bq%M%pؤU A)GMt?Br*ζA~2(�@7w[2;ܮ{hGtXpiuc,#ѝ >e]Ӿ JCP, 53wچH0$ $)Z".%"$/nȔ7q\ζkܿs*Fb 9'noC\6 ',1x8>ZϱQ,?jGfe䄶͋"ίnJOSC (dc5uHe!Xd/` $J&l/P m8ٹ&u'6 Rty?ԊpyB~q31?7)`8sD8>g\?EfO? A;f TQ^֮Ҫ6K iUf۞Jp ͔fg4`1izvAab틍w!lUүj_Z;EGI6\Lz4}z.a_U>Np2>1ueZӢ ië7?�l# ث5{ws BD}(`>Iڡσ-vhsf oŤ j.pwt(rvKo;chAEg2}>ґ?LG^LQ$'Kah}iD&qֱ;B1`Jvq٪YDlZ[-NYXq: endstream endobj 1365 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./manualimages/pop.pdf) /PTEX.PageNumber 1 /BBox [0 0 595.2765 841.89105] /Resources << >> /Length 170 /Filter /FlateDecode >> stream xeQ[ JN;C+BTv0"TTS·y16e@"ҬHQ9ΎccKc �k't~CjDV86222Y{h;6fʱ"/+7i@oǦRG%sc憼ò} ~]vq endstream endobj 1371 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./manualimages/matrix.pdf) /PTEX.PageNumber 1 /BBox [0 0 595.2765 841.89105] /Resources << >> /Length 174 /Filter /FlateDecode >> stream xP 0\xQuHG)FN؝, D qЎPZӡu.ke#ñ';&F)唯1q0/�fm,B3,8PΆ<rH*:H e1YfՃg7Ć3G+r| endstream endobj 1379 0 obj << /Length 1407 /Filter /FlateDecode >> stream xڽWn6}߯*7IdHMiE y%W.6}J{whx p^&L@$%IYJ>?-eoVӈ4dL8*۔5 ..;Pӏ痠I"d$Dd1Ji֝A]_ׯW7&;or6 J '>Ҡv'Yq"]W'V$0ν6|%:I D4EwMtuM\<gl6,0XQy~irC/|tuSwڭ0o9]XI6ѱ1xd%/u>gܮM{9׫l(.*טeM;f˦ߌq17M37uS޿."u]-S@tԡ^J gi0!dR];D&eec]@pB֦/k  }WO ^Еmz]%uX\leS[6##"ܲu_r-ɁXءaS|5eWoU;|ì>Oe`"Rڍ׾u~CatGDб;[>3JJ"?Քp\̊r>e:,4=mӛ~8Eĕ`Aêev=rX5-epoaΐ`RUp]7w p_qϩ;kFބaG I ;kv,p֕Ys|B51mo8FWYjyUla'GqBY1jHN7؜]geCfk)k$iT֒H*%\!bD+&;#<}x)t+ fy/!}n�y3B<jn<-Rl|`vgv:V2})Kmk�Y wՎ@lO7OMf:Pn&C}^H_v{Bmaj=-Rh;~o}s25&FGJ8ar/mt` Q"1%֞'ŠȈz %,Do' @:^V "6pp�RwD74jƂ4UsDԏk#Ô-E ߢJ|`pX+)u櫊+D G6nD%Xn{Uy</g%|<YeeNߴYϾ÷ES+MinuI凳r<wo3K*.\Ľ֕5D|_iRNV5~eTH<P-#/H( endstream endobj 1376 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./manualimages/xobj.pdf) /PTEX.PageNumber 1 /BBox [0 0 595.2765 841.89105] /Resources << /XObject << /X1 1381 0 R >>>> /Length 33 /Filter /FlateDecode >> stream xӏ0TpW0T0� w(P�s�$ endstream endobj 1381 0 obj << /BBox [ 0 0 200 200] /Resources << >> /Subtype /Form /Length 83 /Filter /FlateDecode >> stream xe0Wa1uoc8 {JD]Gn&ئ+䗋?snї$ endstream endobj 1386 0 obj << /Length 1106 /Filter /FlateDecode >> stream xڭVKo6W9!)>@l"(tLjeɱdPlG~IGC oF;F2F Ʉ`m8cd&fc̤f&y.Lj<$2]sүwW$ń!u cH`!ei鉼̊8pS07,2niY/吪Ȗa#-y /×O<U-/SO7z\I  EB+h]υ% &' w:nR9Շ-sTYka(U:v\l cuOK̥B%Hlmܱffશ'ܒ=y:gKl5u.< ֩sƭi*pĢ| =eBc-oa9aΝX~}BQcXBO ((Tܸi.bcBCgAHgK660~rv\m#?3kJ 1 `PL 6x z+װpfUVjva+IT%9hȜ/TG]~b߬Wš *#�N^6 2A nD;!w /�Ŕ~`F2t[kQ(3l/VG@'+P/FAp-m?GPd \;,V\P-1cZYuB&-:Ñn|[mQ:73|:k<]Mvv}㶛A*mzRu@ȄwwY=B (i, A1PV`!� )Q^$#bTB-quVJI<Pq0HhxE\-,o^<}_5[Ƕ0!:nmJͲ˾:�=Q34(ߍIGLIx%}9;O E7zLJ߾�R,dA'4 2Y!vi=(!^Yw`IzWq+1q:o\A&�17=[e-O%䧂\(.+r _ GZP�!'pc/xy+{ endstream endobj 1382 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./manualimages/png.pdf) /PTEX.PageNumber 1 /BBox [0 0 595.2765 841.89105] /Resources << /XObject << /I1 1388 0 R >>>> /Length 26 /Filter /FlateDecode >> stream x310P�A#K0i�7� endstream endobj 1388 0 obj << /Length 51977 /Filter /FlateDecode /Subtype /Image /BitsPerComponent 8 /ColorSpace /DeviceRGB /DecodeParms << /BitsPerComponent 8 /Colors 3 /Columns 400 /Predictor 15 >> /Width 400 /Height 294 >> stream x`u8\C�{b/"ը[TĖ%ıq8q8rklɒjuP{$@ {&1V͛7{)===cRq`֟MW :A3.-wZ=xI"=/ҋaa&46jXX4!͢)ĆD/E�abFZ5RUG{`mb̐k qiLF@(3,&MMc&HR٤,b&H`Y%MZtQ< =_l#y/ Hc32 A̎P,it4R<}A̠=px@/FSky'AU<S $Lk{Vx/FZ,pbk=0K bPxč=3D#1J V%Ha62jE&6&xj-hh,ymB(fȄ$�"D$PK6FۙxfHUfDbF-1+DB32D7r̐q6; 4)ل 11e /@DW0xæIf+R�#L6H˴#4EM` 7 4̀Z9hfh!:Ah$H`k1'vW3bRxE&hb�ڟ&>q[L EM'3Ac2 fڵ4lM\bh+EYdbE h"iOZh.)bPm b׼]ea1@ hĦHE0 G}ghu.0`c$ e@wƌKG9a5h$h]R 6clEFxuMIc N |"71#I={41c@<֤Ѱ Ept1ĽZ4Rw98‚|�"`qx=oaG?\CDR}&`)<Hal, Y(E+=/"%VG4ƨ<G0Z c+&s h6xnf (d@^0%ƆfalEأ16Pi؊ X[1-,6?ņf0DhI*JY,ZUV\/ɡ.Z cKv>% ~[*⓲';wwt+b^N`8z 8A\  M)f0+%%5%5?g.=NED5R]4DokP&LQԔ{gMS]u˙ζPO8a$L6"mGiO_C !$j$ВJ'kE�;A|QP'8ص$2`U|-k@-vZTIkصDyg@>R ^^UR#ŕd|^rgB5> Q2Q@vE�=kvk=rtQrUM1aDjXŃcJǤ5`x #mfq@!b24&DjX6XK6525`G`j1m̤Ѱl\xZ,(d@Z̪)\H _cKUAS)E.︌9D/$HhVD0:$T(rhX�ݎnǪOx3?QٝrF$ B<@tvtdf8|HT2+9� آ=6p `*Ql}6-qR{zzH b.)8SR‘ ib&I$C ;\HbiKldy9RקoVBa gOH X6P �#[DNG7vפ0HKLK ljP{;3NySHXe'Q 0F(�̇`wJQjmL /INweiC=yYr6[40v;גP@"tuetqzT"C@uM^=T0“Y XP };^/Z!?œMQԔT@4=$�.| U Uܣ$g+1I¸񥤵;:.]s}i))] `vTуC+{Iz!=93!-I/pBO&ź`;a*mJuᯧ!w%1`CPm]|jBM *GNLi:gzgzs:~4 :)"TYP!ai^!ʌU8^iKe{Lv_akkG֚1.6b`W3@q9ӽ^}�V(C]]�n(}^OZjj̨ŭP8ooiN'?Y R\nnF2̡ xi 1QL::`0a]nUc;ADž:(=#U8zO -,j2OJZ+z.am]aOPQxuqVyGT=]=!6Ɲg|mˋ*~\1@}I˘ay49sDM\oV}nĢ[]L8=Ꮵ:_߻aW-uVT80KJc~4,K YmUIfι|lXy|ϫ6-Tc,"D~`=eمPnwη>~+@X 8vCsj@an FB) T\ӡ62ښ[s<9.gZ[ggUSs(Xulinx�\/kY#m͡_ljqgl6`Xw&d@Q Uj+=<Ɲ [NO\UV$!I8q \tEC )667: wy\^+Y]HZBUGXJu3^waad;Me.鍊xz܃_xO@#=UM_ͻ{b٨\OW]'2F -]>PrdwaN򥥥<qJeaqqNJY%Y6F-tutWp`]թ&+R2bé ]B<Z[V}mWOZ7pdZWN^<} DHdi#EWwv044o!ARWZs)Gp5^=䪧CCԴ<3O,ȒajKZ|U޷2�zGco.*{j۫c',pl}4Q@X 8NԵ=a)#Lu1KH=MOW8 t[[2FWTnn=}(q#@Q8Ȓk=Gz<wlptEZ-Bf{[IC&x}>56{]8:223ȹRlH`w `xSYa5f ^U0N5y4>o dyYK|uK�]+')"vVT 6t7tv\*!3o=4 w] +-Յm^Щc j<^7CF/5rʿcfdXԗׯ}-6ĕnIjuM*W'UI?^g|sŔe_TCo.J/0G:d3V+s|r|s_}w|+^_^(1{J/'[y| s& .TirLlBӑ[W7J V_|n].Oqbߢ3՜pt[ p:ÐFL(u.E0Ʈ[p9r7~l@Gv:A2̕!>dD姺Ӽ':~{ڛ߳g3ݻBwm8ݯ u]OolPZ,*ɯ7Pc3OmylqfY$&|_13溭'B@iZM^f'%B e5,z#o*̢7Jh/ (CL⽲:kj3PwB=FaVNδ⑎Ǝޫ+4-XЖ2bPw(#+sJhWS+W h BÓF{2|P"77|tfsȍ m��f3ķw6_;-%cR$]fm?4a)@|X|GYVmywo,*D:U*Nr< A-SFW ^6aIbwZژҊ,_F+9"L<"ãSRC2ޫ\O;*k?ڞw兓\rG_ܿ= d1vYXEráeoۛ'88$GHb\2abO]VG;[0lO#B(<.rn -56-Lu:2\f;jlr/B@@ ozK;W=[)4iIGtp{8|+jЩdcS4gM@^Py_ 2M]_Z1_9W<"<pfKvK|C|_k}lĹ3M8Ɋa lHR͟6lz!~Mޘ~SGLqraއ4_ oX7cɘݡm٤9o=ߑځܙ~8wI L`{cO%Ԇ}%[WYF3 YYM '|蜜QL F(SXgdd ugg�?ڛySB!vzws2$"q%' }/~~Gv;O[McJ++*n5t3݆Gf2[oޘ!7oMnߩӻj/5 uw9}){u^;ѓE"zJKh{ے⠘34DCm7ahriQCF#V+:T\iY.H`H{կĎc{??+[VǙPHOiw>w3ӯ}];Gcó<͵xsN'"y LOW}̢̰pO-\nG{'rypK\]4mS:eT:exқ;[e '%uMgF,S4qnޘǯg?haQ$Au[ ƺ]'oU[znx{c*(%JtewƋ5{<_k F{^#"},H[^_n緅鹎?`,>\{_Uew]7| u-F^|-+Lnڿ}l,]tć+07hGK.ZꘕQ*#ͳ<*ؚtOX#uW)o[6_#x[<TcWȁ @F;gS]d.lEj�&ZS{| HRiޮB8Ͷ\L4o8 L̮t7LnH>Tws_g˝eS2ӖL5$ۓX/)\_{m0CܒϾcamo|1&4/0gw_ֽ.YTVvy8Sθc*;Js@,юv:3j:GV7m"큎t+6PH'+bAoSd(gZYcww6'ҭ w;246Vpg|nѰɭ.0|e̜v crduv~ #}9%<BOVB);5.1-roKw*oͫR[yPz;xuzB7g"ߝnݢ 4<e=?O-yfO=~VX>j>g:ݽAl5h;\{k2~.|ڢ;=7W Ks}Y5w|{g0PW~SgKͭ; m+.<{WGc2 l<$|oJ&R0ҕ>4m/];~!S}LJ_w}yӏyr=}:1$Е_/fHpwj:Vi8ެz:,zDm5[Q (VCo]]fd957=)X~p*ԁs:ٷ"֡W8Q8[_Z?82VKwUk݁#M ޗMu Nգpgs4#JY%C}^/;أnE%~/:Gy@7\G>'/]?qǯZV䖼w5Pt$FqodK]nvs7Pe9d ~t6fHPon ;vAC({7*K  }ў_Wo?U I/OKiא4DL 6KgATʋTYܧݚ?V6<nt.㶕]ǶPPh4_/ 9Ԯ~#O~s*&қO]uߩkn+Xxk?Ҿ;eEYy+nlr{YcXVR5k~vκWtܶ@ KnHqQm{5 9ʏn2gC.͕}!I;A%S1146x߮Bms״2lyj3}T76zѢd~Sfon(b<TdYؙN'Y"jv9B}f13dzW?|Gg1~va^9e|f]WYSUWS]\ ozz#[>ӯl[L͖ΰxD{;5YKw{cc㐲�:kbjkkn8˨kmlL4b uHmnmԝfMwd\Ҝ)n:xns*&>vϖܶCd&D5+IZn{ӎjIpbQ_i- Z x3[[VYG$GS7^v?o8"S敎!Z{r/XO3K+8_m9.fC)u?pOueWeW4uDYg[88#4?+M9};椗T[Ə=y 3JyJw0ܢ/ONz_n _94;;*δec.cg9%5lGf~}dǛk[9:Vǵ\Rʡe=/|]UЎ(ZWTXB"bqԙ5l <4CsFLwҬC'\S6UFXE7տ퟈ Xf-o`5H[SNu4t5N 4gx̡՜{a(r:Ҝ_t><tJ]֦APѤ宬57<{t~jJǮ>1H<\~׍[ u>SzkGjN<.? ̆Wt4i{|d|on({Ц|kc~Lӳss$r)&xڿ\.Ԟt&\OgG0#1?=KzDg+NuFqM"Î#Gq5[a2  ]O~pq[S! \i"ELwztZpTfEYcr6.,VWe3ΌVB,W%%_9Feo7<2HIG8f\_{n7qb[6<{kzy"iaȅ|lаtyp4OB_ӑ f zUW8t%VH{cg ]6a.OW=\w:K//<o=;z6>ۿw nݿ v'=˝yKʸfO`q8_/-r0lKr-SCS~xd˚O<r//+дnonP]=,[enI` @D,0k<XSGm=GkquxwFIf>#{!ˑMd;Z|<gȺlj3ݙ9b65u3 6 [`f^R$�T o7R]M]mYx$t]Q=u Yhe?hzF!g]G#/ͦz}M 39iطwpG9<̗՞4d]-]cʇRlmm=xH}GK/]\u&9'hJE)n[6V_o< _!<ξXO, 'w7>޷U^\<,wud(;PoDc_|߬y7={~1˛IY_Qaaq:fnm:sG3V}SJZCqtue}?4֞:wI84[#XunUGm \4>yvCJ<2%c^y}shǮIemhjIжZz?2&;5u6Ԣx<][ ojcGz] v-,]>M]hWȃgck/_6|r7nhhÆ e<sϝKy@-lNo`9 ;(pf;3ױc><nK3ȳL\s<FIO?()tؔ3w2BY{}<K�H\6r5 als!^Wfv& &ZEfG" P7t<R?zIsFƅg:V;"Ι F|du`j6>$/lt?^QOZ ,07Hb_a \xi""C_~n<{9#V}[饣y }{CUwT8JZнE7k~6GNokiTGAV^Mә̔;f-.9, :[zGx -lE@kajOmA N?l 9sW(/!J`Y*2X;t<8ɀz;oa ZQ$hݡmn|tQFQh ~e Tnp者9ʪȡCJPmaCG+�}aLˋe_xKa*uL^Bz ϙx i5n0ş䣕bMĄLFk}W`G✜^ʍ3]C<0iSK 1[B- ,ct>jk+,oҲkz"Silx3 Fɘ�F&WU-'d~4`ۚS{6#A/xcK`\lb:Y'À_2 .6K"!AKBwfQQ33 ؆Uu6(;BUmn?y瘼-|taq3D+3f!,Βxc�u r,5hssbP&TxiU&;ѶN@*Wlf,I/62UM%02>d ŠWq }(FGJ:Ox[}L\._}+-G wnV"3!.^3oS\Q :wX"Mb79BTz3J$2:R•aE,?rb~mXW]3Lo$Šo%]JC`?RYo ^Hla$p9.1MV>F%A*8- I2 3 Og'ވh+Lѕ,xsR}`HG+�!C0fl2bV4U}^H6ò'A('DwB쒰]wHЉӅ%@SقC WO$$D_$$9:G8ۑʶ"#8+H &E wd΀L2M #ZOh DhՌ<DfRp4ZAj &"Ӕ,UIF˧ʄ5 0$=m|oLTr3�'S_</DfQs BJSS _< UxB$1BJbƯw q0 чnw455 >^ճriFDqDU c54)Rˡ$6#x4E,ѰM$3aD11 .A/~1^Nf#;<Ft] ($XaE5y4&Ɔ1րcLd&R`�c$eD6Eb<z̄>- H �$'Nh,Fb2.- K}q-L[Q4:H&_lR̢fIMLA)s4\^�h# ]�aL$)7uPoEC"W !땓c1>QgRFI�6/`iEE 6`2}rWqY4d&^Nk=/xUDцk*0f-3zcZa#)xVTT$z9l6R@gk1?Q$' ^U%l:h&1fbK@BT`l41E](>SZc5i G5551==@&NǙlkEѼ&׻ۏ`s"杕-M$R/j9ܕ_PxV.1|&sěMFtk )6v(1D T(0m� HSm7ka$̜]6Q6#MIȧ3V<"1I6)ѥhS :::֬Y"//=s΅F E> ](<LVYg;Œ!{7\4"-P4JeCE Yw(uYo^ϝޝi^,Q3WrlИJmrR}I#Ql EE l[]hX@FdA-V}LӧO `C@qС q>=(9dN�3հDJEH"JE.+U�T) rLR˙'?^eE@LB0&oL4y(k^~… aΈ"۷P%7`?]vرcZ~ZrV ;vzx?lB><S/ٲ¢&T]]1(E*FAfQZTFTP> #$B3?8ku&Uah9RWU }YSV4G1]1+@%Ɇ.ڬ"gƍ׮]/}~ɯ|+<@ii)b xȘ� dfZ$��hHQGUV񶩛o2H\`6>= Yj9SKQ @k+hkk+Z#L)۷o<y23쮻-EDP �Nͦi+AWII p{{;v2 XmM>~yD+dfΜ=,AXc0ט;wN2q9X{amYryP:4!Ј#ڥș"*0ݐwm'6ZLL]>Jt5SWr_ bKaդU1#-QkBEh ~J+ۊS>~ޔ#&�k&  ^h67 MvV*&" D[UR+gh,+�=''qLx #F>l^^GE_>}:1!ʖ-[_{=ֵZ Iu̙~3:lٲqƝ8q .#.^i&vyD\j2 "W_}W"?5k.]# ̞= y4|@p/uHPq:vA2sU0�,,,"n'*_hZ'{ėضbŊBT<Ä63gˆ? 4.>~޽{tvv\ӹtի(KQdt]9uM#{ZXVQmlI9Ș`ĥR쇏(_/lu7 V,}d=a(Q/ъ7}=}GzOsu3Mwն4L:vDIŞC'kBs$NeolniR6nRYШ.}5&h@k 19ChxG|Af#yꫯK*O<ӆɣeLڟw3gnÆ =ܭJ-Zm`>կ~U\\<vDwsbAUU3'd1~19vĉ$#d+p_949,E>52ӦM#$y SąxΧ4 ̈́!]8s`?FPK!=]'ȁb@+NE -AP~ǹSѣ* geeя#f\Cd+1"<1Xkm?<P{tK}ؙ*r4w x%!UmMH`)b[DtXKQ%h <lzps^>#xx=l4$$3[~ [z=|=Kd/=w1jno~ :h,mזVQkgM;6*Ȱ`h6  0su]Gj4&1] -0aÚ 8%{Wl3q v=Ӏe!6E1وX4HK, ELfS0/_N@K >H1�i?j"  $v`$!կ F-^4d4 ʵAϓYzEP^8iT F۹" >A b [\xH"rs.N%u<GP6E!0f j fM)H,3 ,!J9k7voWS{ahᐟ|H|_'u/2픲Q.wٿu푝&+_yx۵c.au# uƲaEeySGVLYr٨ɯ|~ơqYm_EUPveWEj4[=R+9ඣ{4]=ygZVդ7{5&̚<tmhm>RW>tWY[7j ,yω5ؖx;1AY}S ~pefȠ]$V[,:Ӄl/0c@'` 2iWu"hJm1334i҇>!֘@/L$S<�H&6"fYJֆMxGp@Ley a1x1_H8h;(Eɏ=Bq˖͙Yƍ C @Oa1W@zZa' s` r-2kVB 4 t*Fe!* [}rp{aӭTXmrj^1"_3zk;ն6z3_޾PS_+Wa>|#ɫ?t|oʁM$;UcgϨ7ٱĒ3[p77^1fґGOyiǚ-yڢd9\u`m9hCcVǾ;-b ,-~Z{` /⛇}`;_cK+oy1k۱^-9ui_{wZ8PF mQ%U,QRQ˰V[ӆ.2+[<3 �ŷ-ww}UBϥ%8yз ;;SNM<{M3tI gzCJKds$g/hIs B62$6hמ={HpH$=씳&%6}`*[Eb' zxD�F"fEi`1jhҚmvY62]D:o"{w@bMߨ \`92yZT!8Z_q`GQv3 %m'=Mk'?O as][㬊q|tqۏ#`M)fU]V)JGP[RYTVSPiƉ jeN񈒡|5EciǗA;._o[S2lJk.N#LXi$h|^dsLn|cmPD1C{//Њe|ntq=';;P*f籯Dzʻ]8S bsĪQ8]eQ#v',Km�BfzO@f$J& t9Ԃ'0g\bΚ5-$CuT4WoXqc7 dt!;`Rm!GLB`dUHڿ�%�ș6"awy.5\CС$cTJ, !zXcZHijmm!666N[Hb<BDv0"̦p =J A 4 �OBFci Qlذa9mI =.[W|2Y+ΗFWT gʌ|*,?$_P4_5|"_]{;)1b_?r2[<U_}tʛ-|lQ|oG~l=[-9pݫQ]iN`yI YБXac}uHmW4FWN`>pPdORXCЗ )/xta%cgn>G6~饻f]ځMc +O,3 [<< {b@2O[Iy_dtF�9Q�61"ep>b,A=Fc1s<LD՛0yH(6 } BVǶ,E(i` �Dg".)DLcd#EC08ha]L].Z*!�33y* Q"}W4~ F䰓'O***ƌxwQ L.X8 OBAH8!ƳlЀj@[456kؐztlw޵|!YBTq`ړyvz^ۻq˧/|@6;#K,A38d(v'TosUYHR # 2"/+}ssc+B(x+`YXPXGNWS=qut_ڶ8+?/33`#>cFCJ,to=aѺc G kϙ.oeq9kBw>t6q X4FC,�•,FCM@m! VκhԉA&g�,�,x4`\4j,&!K]%TA�"ߑRXcnE6Uy6�<d�5JdfQ`r ų=]D)0f-PR%jLLX"&d$>&ҧb64$EQ bzAjwdegklYYZv"Qlt9DlEs(v[ P0VH[>!a"HQ^GEB"+AIMkyv[\Lb 8s@ g�} XThb=,HH3lt*mY ,@D0R�{\UF0|>VY E-VI&ƄmJRY!EjIHJ`҆&iXi8&ge$MEԘȗSWV}M/5 TMTjQ&S U1R;!d4Qc@οq_4J3N)RK=H:b5}jyFA{KhR%gBՄd tlD"8!SGOemo`I9J Y?E7V (J�5X,b/ W#BlI53"T,PaH#Bo h@Kn [CZ؋!YU+grAO(֠#&A4 '/B=t~7gc{ݎ?=򊙋SqIyHϜ!.uG{GVYBRk4K0pփ[Z^G=߱`!@.V$G'I) &Ti-+,y_ bժASS  2W91C]/:yt/-yW:G4agu4C$<P sd$dД8$5! L_ndĘU[{\TyIXl23գ_yV}b+J<5Ri[{ڳH"8VD<,zzBʶ eϠs�#-I)mMFnrZkɊқ[Ⱦ^hZVHszF0H9$hSٮ�11*SB EfXh-` 쑢,a xMf[_P Я.~_,1V_?'X/ %4lZ2%9L'cRRͩ{g[H"bO](5EDHv(&jtdѢ{5֠u̲۫Ovрf`Pf,">hD[ г`�6z&T=J9&MDL$Ev{;P $5Kc8ػUS1Z31F7ǫPE% <P+ތnEO8f` &ٮa<a<sۗx~Kr`vu%c~ h �&t_btIoIh3.l*=V] d[CǠ$< #'6&~vꀯ(30<X Ǚ'ۤ v�Gi;x-1 ~K M`tQ`$zp-M]$ X<G7ۂJ.$=$F&-*&ĬҌ as^X p_zoC_jG~7.0 e#:$o~. pc`VzDBg_&+g Q"T?N${:qbͻveȈɐ@cUs@ɯx /<oM @+8+E P@4.xJcI-7o}Ȼro&ǯ :ݽoܹ(z5Q 4Y<4`0�HXĺG]T #88#EՈ~~PdI<[}C6}:۷͙;[ <7/B, Zݱcwʿ-XPE_9A:48[tK"xO%ÈS \~x'K8AsL3D?v3f6ۜ>nëgJ-)qNu{=h^˭|ֲ1`e])�`yQ`*^1)"k3g3Y b6aip=AjCsX(rDxN�]+fuQ$x< >gڸb~0(2hKL'4ɖcW}E.ѣUWZ 2;; MҲ2F+YWf@hЇIfP\P%@d>`u<q)}51kOl�U<yA^WRRWx=%3Ey򬙳@6ʒcǎ|'OttOCǶ>ɪg̔ЉWx o^8G!sD'/fן$XޏnݺQFe`LTy鮼Op9#"�r`iM q,cOfmCy"riBF1ؠrA x#y8 ۶m8d`. EWF=`%f6b̒=+g˱TFs+++}`|cm/(t'\`BxL䜘 2/?!ot Č*;N5a1@=Y\%ɰj͔AQƇh"`'em,dJ՝;~FԩO<Xaa�\*k̥֭aÇsem.THVzznQ +8Sw !#ge9ULc^ /y <« :lwZTb <A\5F|a78O @w"7^ /o(-PljJ$E[ 7x#WY)/g"[#F֐xx--$M|?sFm0n޼@F FW\ c$+!e cJGtYovM b( W`l)3y_JɋS*Vzw;rgtgb흩=YνC16tQ`ec1F}6ES=A8A`X\6>_׽{0y"�Ld޼\{c}^wL$폶l@FL!%G :C=^K֩'3gj%^`9) 7xfm݆y|'2QM>D/ߓi|DŽD@>o%e�z ?a1 &ʌ3=>'殸 ")&j|v9|WzUdyD"0H6,'O?ĉtD7y&`-6`  5ܰӺbXc‹2+NL!&r@_BYi5(Z P=t8S&Zv-;Y:ALBQW0yewů(岬GTH#|1,k ZFQ<#._ ԩӞ|+&]OVg#0+ߊ:M,EXU.`Qf5$`9hbL{61EB&\WU'7@9|2N/2jрiO4 ^Gikg=-;\]ޝ}'* #9,[KD&</&"0yɕHIAG$ Y'AOtB[k n`_9r$!H'(SR<W&O!r@ɶ0'1W0Fi)! ^ (�0�&}wihߚ}a ldhXzV]/`Adhj$U )uiY- XJA]uui@e1HSi<Bo5 a={vqݣ3>r0 ,EKi@i#6&, #G & XȘ?~aZ(2Mm(hx*A�.4sQKKҥK*Syӧv˦陙$G=Me){?v Hy )f>@̂A6d7$/|ǂdZv"$X?dĕPHX';UW]EA ^7`|#r # "c�Aބ<IA"2]j",YR c92V{X1. 0D.qKgܢmKwgrǓx_w/Y3G#sh/0Q��yVjғ?ΙL EEtcU& >՗hA M`<3Ӧ͐}+lN<EStx4 )F FbҘHF!S,TLj*Bpص%"ԥ*L xL={4SL؀'xfpdž+_;wC8F"N`1l‹%TgSv*4%lxK z*+M½w1s'UaaE?1��tU0 ǽFXI ;\B'A،(A> g&aG;]PD q ];"Ք@LU0�9("ޑG/; nAaIF- !# ef& e̘Ģ 4QT!LQ(EeXTKLd`f+"eQ.ԧtgx449ZLVQ=6oF*b {wR@ˤI˟NdcvF 1@$FP"#88Eh* DPzfΜvLƏcq׮EL!-GS)8 l#<cS'SNՄsx/Dں`)wZKo=R᳏HkeP#�|Ŧ;K .2 rV^IЀ .ICr_`B0]Lj�)*$XExr=��)5*K=R+�p> &TY^^[Ir`L 4ji8TED>VbɁƣR0=m<FvAw'NF rAo2&\dpfr#'ӶO$۽{7raUC _'ixC>rH-AIL  Jr] ,jX. Lq9h}A)Tee%Kwkg'v#ޱ"r$ұF87pCD"\(/7wݓkKlub%#B"i (qHg4*`MO%l" @`D F|EA(E,6R((ha Dgf(4#辿(,羊̻CPHcM"T}Hdxtc8C%KW \/2TzT=HSO=<tO2ڣŚ3вyklNf5@?}:7t֑C@\{7+26/Lg :ք0H1 t�cƲ u]]Hϳ7&b 0"sY~ĉʘ3X}@cK �駟& b&YT.XIka(u8*"X5"mP`$^E>\ xX4`cAJہM#ũ`_"f10%ģIoX6!4ҌVK(PvEt1) dU=裬Չ xl؊6.j8& zI/1\Q LKvpӟ]knkb3Vd2Fɦ&i1 ph"EfųPkG0Kw1Iի&awٲ+X`&Y,Apo?9H/@LHe*G~%?W7Y<)vSE(YcF{B%$`*A|깄Ks�"gUd_bg%hbHVN[l:e*I"P�O*WY9rr`'4e>y1V4qԀIF/Ti1#>GD1EDFnⱍ7̟rLO?uM7>}}"3, OYeCPԸA Ih  9KNVm߶]j적OR9*QX0r6)vR%rh fu^~b" vgbJEy=e'?Qwy JpϘpƦG>\Ru Y09~YcE,ЈDjm٪h�^+yvaȘBfC͛jTZui^ $cd24Z x_^~ѣ@S 21ζk+Px*5#c ]S --Xeg4G̮o)5F\\Oxeæ͑(&ţvQK6r͒�z! Oc</,8_CԒᶗh^$�a&Rc#oH&oܬw]lUp|UJx'UbaCFC<q "5@KY 3?ZN?Ha@c�b-Ttڴi#M/Iٲe[YD >:qCVDZDbL3&Z<= Np6O/)>S4ŰgWK)GW 5/6˨ڻ _$w_x wz 0Q;_ؓgDh1aMBڅWq9-p5[m6*ޤ1aH58Lfnb[�iQ[\@ձb¡6Z1H:~+Hj877ke=kVȒKID@bZ2*S9I[+Lx0,& G.ر<C O۷;0D4)vDXWC'~ʮYIƆ]6{6a/shLhX �2]OFF-\$d x99-_K|JlTc6s3&ZB<x{Bwj({mYxg")"\rEcy ?b EG"kV߯u2FVXL 4r" AC$Ǔ8XL.6d$`7C׮]˯p &9s֣>9&oy<}%2C&ЀYk%gc;=#F2t\yP OfrRb'͑h$! 9KhLT^ I!C8\QxGUI !۾};k@BX`M� *k5&V4R�?x=dbLaOp6)1U+8<tC)6RuAG@3}b|4o hz0 Gڌ6n0{,s-<GIAtU2& dύq0 !ȴ9p ;m ^ !`A.bj4Κ@8ɧkwlߞtqX}qFK[g=KyAJ!1l"a')0 _{<`~By$ 'xfTɽuyZ^{gEy=ܯ 0` BxDH,r&FSjTԩSoJir,&h<M(6way?k}~^]oY=駟[?^z+>E|!Nqx9CK8$zDB̆QGޜaXQMU.D ^aSZ:I!/E;;lf'W3jq|pMa90x^]BgHavD$QŠp6 &N/S!!}?#oz|I"F83vbFT0.y,Ȼ LsQ7_d9Kb"zozb#/<U˶?׮~]w}ՕWsy2ܬ15_cbq B +Eh\nGf:!V߱00SЊDlBû2S3M^`~bA|.#F- |m[@lP4i7 Q %ĐQ2^`X#XYE!PIP5DމǟwϙSGa vdG"Y3uO|S<HXk׮oR $1 V1$p``my2uF#goϬ={/>nٳr[_U|`*EӞpUЇ>ĩM6i/Tb5voҗD M]w/*0 dr'3Zm@xIE�QD=X>BX \'b"ɷgJt}ޏ'{㥙0 $20ccc 7-WG `H.KoA;Xl\^:ۖ ;Af(N X:ַP2,T7*2¡+6VbKx,y#)sg/\ykVrC[o8{7q.q8U"] IX# BRUU<2Do}VL k8LC24�nJ,Ebͅ"͚d5U(Fһb0xi2c#%q8| l3%J~+_gZcYN&&1RRpBUYm 3$fYxa&ucab*3$_r/x7o{뎹뗛򶋯sMvK`Ą?�멯~cQC-0wgDJHN ##`X|bZZ>EPJHqXpQ$l-->h Ll6ȸmadFG>"X{AWš DXVXX+nJqt$] q. @0KeKA_Ix "e\YfȸԅѫKTmo 6t50-1 ܘBLTv[1 36FvKH`qx2!9vv#?>{ܹoKλCyC5K:bFR@}~F-J9Oqt 5 2d%9$-g2HfD&R`$02C GE+[�3]Cz&C[XrE|xFfZ`N@N}B E2b #b)A k~V^PQ0BxM0Ac@mzO�4{ =c\DA-yEC^H*ާ% )-1Kc'wӷ?Vm}ã;4C;;ix`(f�?� %Ez瓳�tȁUuUUs%B50�줖$cf"5\``45eNA+,~YS�:^ E:FS�fKz`y$uqFVhE,C堔6IC8�ʡF3 u"�Ы^M'"LaH0x{QG^ 4F3 RoLV|~[%/'v3_}肳f?稅xg:N+cUkҨrR4ʄP uń(`TY2)˶^ZVBU$P<0lc^x!_a.AFh ao?�@2�?{凂,1Zn% T͂^ a4bM9^zeaBU*_KGl(!kCmFKe cEBj0 zb<;(vIF@ 7 ~�{<F"np Ϡ,0\u�hTI F4h�Lb 1\{ʹX—uPĦ+sf7>+ƀj=2WIBM#YfƘޚL!%*7k"V2F"8$aqeg](ْdf4O?`{R_Xa1];ErR""&̆|vIh AM1nٳi7S)\Α Zl ќM\@C"c�(<¥pC`$!sd SQ <8Tb _τ9> ̞.ӟ4ۢ`0IFk,$ppggV I/M9=9=ľ2Ҵnξ(�r=CN`a3I?\O2:|$Y&DHK,ס|)mC6mM( T+L!qnp)5nf;hw<asF-K2!#(0WSdf,Ƭ@NNαsy)rek 2 bҬ  drr*A\ذaKV08�/a"-`�fpӆD 5_7e;S w oB [K^W %Wt/c!$e]-0Ǹl𔍾$$0rqO$BQQ TGw�0CylO\ WƘ)h,anJtdUTnJUDNVݙD#pfChĞ]aK /KH5 yibyV=}X2:,Є,+J �!`JV@kJ˝g +0 tL?T򘮚dnpryp'v0? Qm6 X^Yabm/Xꡈ.D5WȵEn q $qx"NbI|q 0"<C䂘i5B0l6[<~xD"dFFŵ74̣J0�z8Aзn,1YSpl@bM�I4Bzz#X#3 @!hKx #!AVǘ"_a .Ë�A-aah�,4,'PXpK4S+2)&ӕG.ڜ9x1k.8=<vAw"LBL k+~c7rlFf3Ee3ZE,$tICx23o=2n""2E5b%k ` Qp#! 4i!|LFx,Z|FS $0y "�]hlE-V-Rz (t@A�mZ =ȣh<o*(4q4@;w  S+>g2o1 cb{Md.%RnvZlp'u D0b@x07@2AY,1N�* 0(rc$)I5?4j sp2h!vVIԢKHM=ƙ U,Xha90<8�!T#w`',3zڋ zpQB X³r~`|ta9UXEgU@rJ 9՚[n>uj?u;saeu=wQ,i; ϫ X=ȧuK|RH,dR FN ^iP4.PXN6?P\~"^�yY* 1 Czk @ZI`{B̊x�z*`XS@C۸sg3F$̀ 4AB ;AAUHD@B 7 jˊ@ju̠HX�3aɉ؃X1o F(4䠈")P%Ѓ.`H0� h9b`$X0R"iHȽi6JTc E)"\ _D8, 0<袍;vl{o^8ʫf͟7[7s:?(BJX.T˷r&JNVW Ɂ`- )F�V5:�F F)E ;!WHbbxq$ P`;9,} J˸:X,XF326<eӄbTIIF�9BL�) HZ(z59+X˶&FPkdRKN ^ S}b.iT)1`o$3صs=:$_W{v|ꅇ-^8U'j@O9,,'/OZpʵ Op,@ص,vxqXT(q.ώx@SKۑIϑI;E1$�NP3aҠd+-W<o!R4b+g@ @# J!%ª~k 0 nQ<#>75Ċ =x2؉G?굧n뽯:n]/N;Evs4 QB^*7|Yك#t2b 9C"xqvDh.ZV|-Hv?gێXVg$hHe%yؘMߴ.@: sy0m ŨS2<E =Av)ȉ_O?~Y޶uf6vnUK @VQqI| D+04,׿umzCII<14 AR Ո ~8eJ |(*l5[ס0` +Vq7`NnDah9{X/L:}ُmڱɕ-'dI܋}:b cq6l@|!BiX*}ԁu#H-Ā5�wd K,߰Z܂4"UB'~Vx{J2À[Z&I5LV5kRݻHv2Cp< 09m}|sx#y];f7lJB  '¾/"Ta?&hh"fAF-!'le$5h8h}HM-n*,9!C+e9bٷ=N%hZ*2>Hoס2gƒ{EOu=8l׶M +o�n'p'},#92 !BYYPl]I4�i +B`d-.r"Dt3p:/fc2=`ITet<<GuB-KV9s=v;߼78º{m;DLUD%"t@*(AB[NQ Ex1x $Q<,#4W@0#AM6 07)#`f7ɰ0ՠi 'vs N[aqzP#1eK,~`o߹经hêx;= _WkXI <0Uh hdd @%ÒsT4;Y@Mҍ*-$)lL )EtpfF#Fͪ4w!l.sټ;O0#V,\d 50.s)0 8Ps/U#s]3WkII(`M` N&LY#6&ALbDSŞ:{KcN2]5"j<0|[>`,"#`>%TZj$RJAqQ edn IeioC0RA!]X"0Ta731I2춼iea o5Vz(YPM)lHuX\@z@0"T"ڊh,L\Zy#BΟ=^`[D(`ܷ3,h%2=/qԐsjF ʛ֞C@WDF -I% X10ū #sC.f5⦶xz`Kճtو8ZM3(HsÇ:ZNk*f dt+#`1I VPΔixd">?]z,{#T =(qav}v(n=0XԟDit쐁Jۑ-)Q$/wƵ^瘻۫1Jo,jk"­^AP |䌏l0ٴzYlL`_$v:.)lRAW"%-4|ų׿kk| $F#T)L'jԙ�"~-/aag}704|�7y/*)F>ryf^rX_|A[:#AB:`$~ҥ2`KX}J,*L9WyJauYL_Q|+QiEe|+LLPyҢ65ZIzL%6( 񎘅,NS=E .x@co2hNf}iځXU=)O_?̗X[A^[2 cHmnЎpmذn ضcxR/ju˥:!>#]n Y/~rZC�2|*M~p% Ć0` *J9UY~nDHr;b>(ui_E)Mk/1 "`b=dde0 gE0RcmEᷡ%e\ _|m|XOO3m=0phʰ"TWO|K.1-(@4[ ynGGS.brF+Vze2 5 %42ZmZ > Ա;82GKl.a`Cl 2_5Ҭ><TSNS[�Sɯ Ó"z ߮wa QYga:}6Ce1?}#`7`La-чe ~"FL%^7vribivߧ ?WAriz%2Ù>Yچ@#>!JHIu=vhy4 s7 w­ �VjᴮZI榚-M(�>uk׉t"8؆Qb,KP%,ʹN=S(b=�mx DT?lAg�Sz`E)?1|8a#E/sZ b`0[Q&Gb!yi% zM[*~7h #fy6_*R:dQ`kҝDRXrnԿtEOI$RѰ0U<}tt8ѿ-eJh`+ Xi~MJ#E}XЛC톩lXӛ@6,I2س{{8ޒXZ@??"Hv+.,"=�?Q(z󴳖CӼƲ^)\-M<`#ր@eL`0w,`(H%΂SU=8| M>Qf ߈FygZWΞ5;kKdx'2i1/,ifEf#ɦctk _?f4 Q`t9 XFh:V(#@"qڨ, 9q^l,Ƥ-}, zg Hl{m˰e� 7=/7w^am,}}@.ŝ^ k{`.g_0Yye!22ZF'Y8ijMXޑMfځNAh,ե=2U'0zBC 3ZUMg (blD D1 XK4*_Pz1 H688N*i+aLW-X�{88:"whx S#Ƭy@9O@f~$cM96<(@q$tkK̮,yQy9mFbU ˤdcrjvሧ8$b&pgN38S[v"|'p}K29“OvM^r;<(eg9gL&B|g!$K(19XaX]&oyc€-U/E5<k`pr|< =``rAo6mN4/,ּsW<rrdCB򠖢U>e!Fޞg05\۾{4 פ{1&+ IELꪔ5]Y̒Ited>}r|Maf,hH{Nh#~0`ɒA< aCb:L!)i.ȘBEuاhRQ_ VR$Zz d2 k'd,q2/>4.êܤԒ !^<c�_[M!݀@/BEbx�6K2L2F(ɩQkǤW9 g]o^zM&9ÀU(DP+ S |'lWD{V_ϟ^hBt5WRLaQ۹cEP,"8%^#)A` i@)|¥1`2 Ⱦn 2jmBxG1`=>BBBkbxc?]M7^�k0#Qx`5 -AȌ� � pd p{galR=9ÀR٘ܢ &!:js 3̟�\p9{Y{4 it{N׫b$F+|?s9]*3;"x1qFޠ+Yy!JS5X$;9wzv Txъ .ATfEj`e%z+?f y 90w.K"|ail!~ARRM/K(VzT|{_72;lE,JDh`~�`7y__l$THUv<LQlӌXAm۾/lذk֭y �Ίy3yKEfpP lMF*_;$`ɕdZ3 ʫ( ފπkxhi�{pF95H Pto %f(3oIOexXTk/DXUŐͷ$7}]2 SUmjdi3l<+9sQri"(\aIJe)U1z/Fѿh[?qў=w>p9'ݽ-!kh̤E[A, %jjRY,SU䘡(@C/l8?_|A=z6_81&2́րH&*CQ,^Zd'ԛXY2NHt,Qn<&ik'n.i|$ cB<,QQ&�D)� jI3;X�t5d$l< 2 jm%*7u/X;o& ]]0疰+}:+ހ8 6 HuBާB%Ո4ФƂ1PqF-)UV;13| z|OL{i2$|"o*5%~,k-~;:"0,c^،JGXQv /xz9jD[ݼ+.+iQ"c4ZAַ05W:'ws3K f"33ə"3Eo_T#Xp 5Hiƴl8Na-fLϚO 0Ƙ)S1,z3mnKb LW] 5e9Yv jq &4 o]r `VfSŕj2̀X&8#T{e,X}6ёV^}<o-?|gm϶[<g:5kv&"pΊ|&#S�u/^0~: ~>L7ф)q8 W @YXGA'NnN8@*$,bÆ @5)X$L vQl^-A#Wnrw]zwy BcBXY ib +TPK$J(9lyi:yILc@֚&;([t)kNA61=o5ق`߾ysuwȝ ?zS,x&{,zX]XK 83<aIYK%z.6urȄі ;fNk48cKRfS�}f6kj72Tz'i"9d(=$Mt Z Ҍgye˲[~=>i~%x\~=|EW 'ar�KV3 |}aB7?h ʈ)"ч,B^ˀ < 5!Y ާ^Jt% 3#uV`rUKY؀βn 29exC Nav;6<y q摩(!#AB R%>чtIŘP|_KX9 XiE Rlk%%VSq2pMUbչշNBkf`mb_ҞXX4>-A.pHߖ83p&>  ;L:B9aBzˆnM|F*+~XNj, "4qC(fw03KP։4;M%- <"xON1wcZfH”L7cRqVi32y#e �ٟ/dNɮ3!fd\uNVd3K2+4%0#ŤUfL5+3ZxDuڟ]&;+'8$lȌHnxM3t7 6c)Wc?sac1]J1.<#C&`d{>(b|& X^Fo4 {݄>4i=3R?k#2ػvڕM_֭fQ҈)i Sɡ2EForߤ7LӢї6C,bj.P.\}ka=ÝK/f[n>N]:"siFiJ,yh)TA| 8dN@aH!GY<pݹse4#)dLVN{#+}b|bǎ .-lIsa >SGt $ւ$T[M.�51sjVq?ᘣfj�y?u 68~Q8p 2{~ >z?,#2z~Ǩ3$MG}m$Jlr ;F`vP !ezúc nEĬ9s沐7v}KOa�`3wd/kG;y��3d(X1uz1 3kpS<` hHXwt"=o(&!A�y |知m SK l: #43fZvYҔ;:6`1� ˂C;S<ay`ɛzBun<3-A|b[ݠtc4T6^*^H)daU+-qׂU?f?}ÇgvzϲZh=y*;VPv8V.]Z8 *tJ/%`aU75S j`RKKz@bVSB|08%TUa;r/|ᱵG~aYقt7h֠OZaJBw^f}{Ϯ: Um͈٠OcDoКAA�#G7bL}wXeАTӎ50oE�r� 1` 6!E3FĒ qHl U/1/+eN 1y*?u‹/1f,m~r۶KV6LBWJEӱ 'W�K_  6f_s; ^ $6;֏ؚaJL]H>9rH2?V*蹼 'Y sޚ/g7 %<\A7hW`,658OxAow0]+TÈ k0H1m`o\-}Z&*R0Y& mIƒ_!bƛb$m`2%Q23MlOk5 S U0M_h�wM"Ͼ7�ba�뻆c i2+Xrh7roH4kfT"@zA@Sf`T^+ϨY=#5Hz�F93.CH^4^a}ptP_>e]-3.W:S@SIi7`Y.AFe5 fX1mk7`&yY$eӧ|ԁ;Y# d�oŀcO�QSOロO4{߃-KzY}YgůR&~83|o`ձ bs<^:XRyeXe {z83>�O3;VX|Љ}-b??+ӏQXBi=z�))f|p见a?J}K_ⱱ1>b칁~h=Е$X<Еq-t,/)#0<+XXqC{ZN֤Uƕrhi7`t%ĎX%}2:f'rE34H@8<:2,3>+JX"e?&jN#"% WC .j-q+FdHLmX�P 0`QgiH"#YcDSOky#p҆\!1G}CPWr%Pf`Î$k1teAb !ZB5lk43,X3^(BpDAmϑƌH0oYU!}T gxIv*1'AuhdV-l8HYPh=f& aEmbIaK<Ӹ%ؠAwp02Cd8˴` ]aXVBtè\g׈' p= yDry m[r%K<}#0NQ+ʕ+=O2ThNG6kûKVjDW%$ pa,)E 8,�/%hoCRņk-gRdxkE㷄i!,p& F-2PeX ]#Klcba m=U X`w ( JՂ[6my0.j5݀L))c֔qK0qp7CԱnbw;,¶&.l*qE\rɷ->d-ZT7b\b2G)5s1[n}7K Wh[8<CDW ;VWbb `W=K-6J\7z@)+gSdԪh!V~͛_6V!ol=z@Q{ZYYPx5\C"`q<dgB?:t8 NAL5@ȃV!'�#€U^�VK{^xqٲyjFd쾐m!QyH53Jf,3D n4C5cu)z$BG! V'TF��Y,_,8aD d^!- l�4KɅ1|nɸa>.i&@c|QQLnMظh2\LKlehdC`@|K0�c 1%xT1@Tf7R X�ȅ$x$*T&&̣6`~'jWZHb6#8$$` Ya.iqU>&a2Zkldr*,˿NΝ;9Q &5L 6l߾c0z]x-۠%hk~-};vUw0a X' W$ WX)bQ=`:B*5DINC$޹kڵk.m7yfv #jX2iVf(A`ca~ӈ9WN yM^3Gm5k֘ ]@ BDa+s\0~&4_PHL>pbJ \r}fCwQ~ߧ5XQU tK6 ' Yӭep�P 8�u�4ÀQ4A~>2%,8UӎL�ꫯ?3wq0AbwAYW<*OPU:V8GPbA΋.^[ZbNG ʢb!B؞fn's o{ Wن@@,X-Y!zy�g?w0kTfvk%Zq裏ԧ>GyNWs*]=|hPjƏam+K:3q]BZ_4|:C aG;QsɼZfG AC6`!zCE-aڔt(�v܉SgɗDgdfCju.m-Ns> 6hT`I,ZCJ쮁Pґ Gr@ef %ZO>K^&a]#H/~0瘛2W?Fb5l)g-A5Oؓի9XQxIAOad kgyJ̫9cn!eg?ZƐ8!߱ס+V07  jДpݿk.u`,>H'鹡YPa'߭?W;43QMbPV?Cp!aj2ee!-*wPFVr"Q`̣iʅ/h(3ϛWOŸBㆀ ,!^4Cw/e*p $ȆP%o`t%T,Gc]Cx܄+Q Lm,a,\$4.aZcl1,jpv%V8)Hz[K X WX'Q6b|BU$Qꋣ<+gWs? ÁTn`jҦ�k@om{AUGMWe!<cwkڵbPYxWĭZH ձ;`i 7Y?׿un [hZ8h<*,$%(/G?7a„۪,,ٴ0`ūF~_<O=wX9(lpz=0߱E3]b%1kӦMoy=DM4dCLCT>KA3qc&3>Q4; h L0x {€eqYp/!!3G Q+b(XB|W|;s$ !f}@kA>%~`S<� SU$X1 XV�M1, :sc*ZgKj[zzfe~5gJc]K8XTa:8`` ̼||_ٷag zAB5~2Z?2Q\HX7g \rbfAA+X5ysr^+ȌQhh%ON,f$$5I0Z4\ OwQ�e>O,E /ԑI\x3_jᡤiC3o 2KMi7t<We˚3:gjif(C$|"):#B7RrFiLd?H.a V?>\Y�~UE T,2",a,6h f` h </JZ1?"dDoxK4l&oX=Up݋ 0<{CA!Ȏei7`pd yH2&M*dt0W7I{8Kp`J NQfsLSi=zŸSDNѪべs9|_=sWsYKz�4#`U N@ke- CB}5'p][l=p`{R< V\,#Z|ʌz@( de eUeCƪPw_O<7m,o5̲!5fHi7`T1 fXћ7)qf1a7do@Ǧ;"PoKoUeꍑA"駟~)p36E]$T� _&ʫQAKUh!R7uXgtޱi�fI0Hg$J.: Xe|2(mv:Xpq!dBg;1wċ_3k2c$g?$Nlʁi{?p .f]%(/xMf&] Nb,D` gG+[i8$$`3&Mu4!&(ǔ„P1S[gj |͙ÌxX4;+Gsg70?` XӠ?4YcIK4/ iUpm|5$ W=đi "À/3<G05of׬]hQ,3XSWavFF+|Ҹ%x3Aو1 3X T&PlT)8د\1C@Ǽ2VVĆ R!�reS3.'F{޼XB%Y9 ]3RY3l+ѓ[T}[{DmC€Jmh.A三4̹K%%^SH/f�%v@0˘;fS K=HwyLcRX0KB0"gymn1p9uՙ3jTgg~|yN*ݲtJeV)ή-5JYIѢm�6x 0i0 hrLW J(/D^Wl(b4&� EfH0F!Lފx2^…@Lo H aLѫJ=`={h|Y>:8(!䓭۟=RFkc%e@ '#`�qwڃ@끄kċ~wNP\ @9}S֦Ec/;p/--h=нbL4z^[1 Oo= jLpFvؖ-[PT/h_j=pyIʭ̪U4Ii-0 X cq/}GR,-:OKwK˜sOhd3$pJI^9,ܿa2M})ŅUկ~5/43\ҹ+] cy,  Aoמ<nw:jaX+{`#ИJxÈ@2`0\y81 e$d$�$Ha@@(aAr.6Zz^KP$(73Z{C;%�kF#[pZ],Bk!I8vJO:$@̣8#X"!c_^Z!]y~' d u7 ~'1Sа_0RU LGB[0?p*rUXO?4b|$a~ U\h5945d� hRJ jZԢIK(=x8/Uv$@@#pґ�(-JUe3"ƇLn%H%$C'nГdr?;+͖4ؼ7x%TK4cj J`z0 dMAUGN39gt-dtc4@ E#^Z`֔z�pcfOq'wLi7L@ei=P`bvD>%b(B$AӃ{|O{76xjgvdDY#E_#d1E$]?Ӄ`/4<6o|?яMx2![`XmKDDb5~y,r `r˶m )+ Ͽ}Oi>83Ww+7\͛qf?fO޻Mt7rԾ4?m2x顇Q2hix`s㖰1)Kx<3E77oQc=Jxs?mkVqōV,\O~LoH_\7tq/o{Ĭ}U:rͺno)}JC @Z{p>3DVXwm=0ŵ]fNBn X2M"hUp1'٥{g/>|銗'1+7_}3yɟgv~G߾{NYa=?u٧:vՒ-mm+hw&~qK/]\oo;s%򗿤 -8=;Js% =+6w`L6e헿߸_p[:W[]0oۏ?~l=t wx=mͫ_Ğ+מdVuªW,^K.a[3[gu__qk_ښ5kַ{el=0^9U`n78 Bp͵azqC8[|r#a/g:,N<r/Z4o+[tΆS8ڰlђUn^|ɲ_|سw^K#<}J&`P#} FBZ Qd!+XlA^t-˥իWX>dr@v1SI_&(=o\~WO{+^(/Xʥ+'?_b)U~ޗ[bѲ_syBl_;۫Ɓ4}+p bǫ-hzlF7hPzC\˾EΥpo4˞s{onLlϟp 5*g,,<S\qCVUVX09jˌg}+fh,6["S3y z)||@­33XʈUV�\� 6;)a0(c�`7A5y 1lAF-q7h%upXC=Ҽ9YQD( ъZ$'ZePN<fyL'|<0a#h#s`Ix f0`hgH&i_(0&enX lmc46(f1$!:3 4oq+y0I;D&͋ bL!{1zi7nȚ^`BDZƲZU :)&G r_XBi=0"i`lȌȎU{&c 3VԈ% lq X}oJq~%DUfo!I#[ gl�1sU²dn\0-1ޞ4Z ͕+2/z1t8ASGi*F!&6 �]xeLJb#�oqJ ",-0`Μ` �=i&M%q�DCDH Ib l.D4qI؃ =6:6e =#0`t`Ά XKMQLagTci,nU~ˉb_p`oYczk8$+J+ZrИjMBU͜Wdy/ɛ Ba8c賳-Ψl94wn; S �qS` Ñ%C"Ҙe$aIVT yhEKWNO/ມPd={ِ hzd�+F.WH`$BBF L/l@@cp@O<% `^+!YGj@<裄?Tg d&GժVk/QyccX0?;p 23r#y"/a0}wؑ]=Jng*dQSgl j*X&B$'-D4V V` V@VR };9ŌR$̈M1 2xɏ }ccc\>~8yŁ{8(#/E/�s믻W\%(T.=K/2`ߥ8ӷܿQ'|n'N]7KyiQH&K`OE9Vp,풀+x\؃.z';5+Y&vr@$H9S@"`0BU kA$ F|H?9zEUN1PD"Ȧ7hNULBdk@`>18/|8E{ppyb^4vΛ?Ͼmm -dq4;w^3dmÆ  fC!~']xg𕇿 oxg_ua޺u+ᵎ(h ? E±V5C�."bVZ3`~_Xfxx㍷~;8|'? R|''[Qd3jѨ(ey\xchpQoyjcœ8<05}{BVc=Ƥ$Ҁ"XCW*= xE_?}'b>b}_BvL-G林0cpX[5w"[DI2!)ĊE: k C q3@1ţ`ԩi^-yv;.K-exĪbz �Dַ\o|f-K#A b`U7$k`D25F)(;?# YF'q |{-[s9~D{wܱSC؊{4{I~a6gso  : F3&SbQ̐l7,\0L%/'!+,cDXa#K{^eD##7�*̷ 2{N� T`_J9֭cˇōwy'q�c~~}ʵ ۘeL.D{܃* ( &<_z$S :8!馛fF¢T*,TH`1辎Q\[F-^ pۏp4/gF]{GX|q`ԲFxvWh ?q=k.H7Wt1xgg1coEPcDvF*w⸎Z#+<a;D xX&Xaąޭmݴqς6Yk֬ 1 ?Bŋa7qUXB&+JtQ[,GLF2 (5Xk,bu?]_~ze*`nn0Gk;u4E&;�}:5\* mL!0�`W`Tj}UGHux�d& (ˊeo;�p8 'MoRvmROy(@$g,t\H˫2 ϘE(ǙE|pϪZ|[Ҋ�ؾ3B 2 izfk`gx҉>9d#iE]`d4dr($D;xX^11[$bi"-EF•W]IӾ寜zک\L"ِP!X(.+,eMF뮻c5,%W' cKȴ5I0E˰PCg2�2%:R}S i"кm|l%"{\K*nY1 Y&�Xկ~dW I~F2p,x;&u]U7`C*Wǘ^~rv\ Dd(!9sfnha<2`+lBCu{] lB*0,h�{SH-T3Qoӏ\ğe$& ".`,,qGӟٕ)ücߓ ̺3*uahPDŽ$c0`y:DKTN%ǕC魶\@, @4 w-o^z�{~h,*!o~3ŕ\vxQW]h+< :j U >#�RA:/V䜜G�t[,e 9J``6눂yEdbG#ͪ5TLSK` nHw: ._$"ܦ+[oe&B|IJ{% \04AcEfm� *H#fR9M )4.&= h:>cldT1 Eԑk\ &@9\`u4wQ4zL]�C�:`z=WiRA%KY[qfl֬yzu?H3텀Dq?e4:d!\P( qcJWp IוFXHt1f}c�h ZL� `]t+;>= �$$Q LR5� 9"*X�9I^Ô.Ĭg4"+etP @$p�e 1θB2{ X{vX|-ʼ͵-_[ȷ_O7݊*?H\2YsK ^ƫ ̨c0$Dɓ_$0҈ S|,T9< 6 o �ekJ:94ct_ (QddbbH F V`$VM%J$$`4/KE!$F�R삥e6 Bw0&#L0*RU}'G -`j2jZ5hx`^{-b$GK4Wh 0D.f&Ea$!i^ #;}Xi7yA#*o`Hׂ*#Pn!N*O&W�:Z l3ND19P @mcg4 )i^lha#�0�+z^րB! mp=!( «J2b%01DLnH R4<2E`d1�!X ȠUgB@]Flܪ vz + ) H~`1 ZrB$b Yt2"G+-faO<Af c�%[p> ]p)4 *q!v$8HQ !-+H EV-i!>L�dV J#V"p$,:.+0Id{Lz�e|zcԛ~4-�>1SҘFKЫ Ʊ l!x<y S#�;4C$by [pr}☒2 `l[Q�y4"8 P�ﵨ6P "lc8`fy`,l!  �{F=[hL�a,O E*|a€%:[,1@d`�0؅G+1Ly=[h�/ ,l9b4\b~0Ap1�l"*Y>+j=0Q,sRZT%X1L)U%Z$9:!A`4f!M0!C`4ѷ`%<Di(z0$@lj@ W 1SA7:Fc( q@� @ l.,ȍF�y|iHi$4K@@D$Z@W, �T`_2ՆI{"`3,H0啇@)z)HMX#6$\Qd 'H  TxH`Z^AfxS؃m C<A"!l9@h%3D 3LPA `A"–`$.` 6-A}1$ &$5| TRu% 6| Qx_, ف o@@PXkVE>(|WEpހN^y@0y:$,bSh .BRT(C*�UZ C 6F(|Q \ե )X\Fq\b [L�a[NC v^EdU"jPE2f`x܊�bbEW1Z-z(x@BdANQ B@x .L+, @Z|)$OS+d5BJ~2)EuLSK1 >i-Zח* $ EK`bTk4>P>#A(aI7J!uTTj$TA *34fD|OCϑo*T]Ab�s5J ^x CĀpgрkl 4Z3gI6@@SI[x=6JL-1 1 ,=&!ӪT,޳bk^hh }En@ odF`U@ x o@@UL Ė፬(ʈ ol $ (1 * 1XUAʀCJZP TL0QH!dLf48LU&� cz+T{+Vj$MoU XX?A�9-v 3fRI4L<O p"%ͪLx!б)0$ 3X@dq-h=0RHG_kjHPcʚEBH㥧4R@ 4]2v#+$,PaOh13LK@ !&AE EcZDbB' LcBB{3dX !U $t[<3ʴaVP$$\`|j В .^!B/- Xz5Ջ>UkckV%<E@*#�o,!כj,1`Ztū=nLE@YFSI`2`0+VO@w&$ �o!e `4Ңn5L=FSh1z F6WLfU@KRG2<d@H[l=z`=@ѤN2|=, MǠtmڬ@W(]nuǧӤq-Uk9c9(J/ ?AjkPغ�Y)@caq8Z U{df !N"Xj{�Zay}2`,-zAFVX(<FύF\IȯYLQUL`x\IFMl,c LP,'Eh*Ybb!Fy2Ki1  ?0Vڔ&^)2*!mUjz``5dZmu-c@V_={\e endstream endobj 1392 0 obj << /Length 1025 /Filter /FlateDecode >> stream xڥWKo8W!%"AC؃#ѕ�Yr%nw(Rbȁcq3w %X  "EK]6~ <#NZZ <)_fo3Q$A'S"P-'Dp(ukDX*ٿ# J�‚g0[pM:=BØ":d ķH,x1"^}!�]4�|Sc`b �oȹ;HL0Xa9SNb !<&k3Zj} mSۇ83L!!(IK1>lw`gJeO]6zNL*,]xILݩ^==|eVcek7 Cʽ+O+OZƕc!dfoTݺX,Ѩ78]-RK>9#}X(\px`_6 Ʊ +!x9?8fP�K5EX�r L?$1%:?C*鯹F�*2L{_:6eȿO9 y-M,GIN.*{,!oONCo_i(5d/+)J!u^2v٨dFF%05)Uu:UȘu+SIT1E>Ѭe-.S]uj\a鰮P7Ti/IGK}w+kQ6$Լj00ıt <7lB{AY4B^f L*_X,O\ [o^lwi</TuO/By@ʕ֛ByrRՒD5_cͰ?)!c+Ì01N6ʖZ>}w76nkU6MD,w"t]bF7@*أ\Փ+^*{VO; ! <"Pk:WHh/m?FA endstream endobj 1383 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./manualimages/trans.pdf) /PTEX.PageNumber 1 /BBox [0 0 595.2765 841.89105] /Resources << /ExtGState << /G1 << /ca 0.5 >> >>>> /Length 131 /Filter /FlateDecode >> stream xe DWv$Rկ/&3pgS*m{ piڙW<w-zc)kjO;[/EᴅE[ kh0EO#�CyN endstream endobj 1397 0 obj << /Length 898 /Filter /FlateDecode >> stream xVMo7W .7spPi7DYHvU%.)y-JPfW嵲Q&2ΉZ'xJn3`l~]͹e/Ūaa4Fb[Vwk] PǃO (CD3GY2Yn32ųWQ,v70-WY?bh-0}C1x2%ƂwӀrf.h>\,AQkD$YwNZš=q�WQ&Db; (2^"nf@鲭0vCi6:=8CDzBbֳaѕ:@X(w}bf'ebM<`zwa ř?Lmn?O-qD0}-jճ8D# *>ؤqKVSNrRR#ӆQi^ M 6bp ЯjjƲ|E^&v]TM\( .ڼ))ٴΑ CC"]#.ݭZoZ=~q%:"h3v()_șmN'Zp˟RjJBA ,T=G]{=*"^"CdzIQr:LCQN>8pE E[)~[.}k %t_M"߼S} hHvlQn9# 8$URVh ^:KiW.Q$$A%XBKXZٓQ9vj4ǁU޴ŢCED<HNct F<[!kdo}MM endstream endobj 1389 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./manualimages/text.pdf) /PTEX.PageNumber 1 /BBox [0 0 595.2765 841.89105] /Resources << /Font << /F1 1399 0 R>> >> /Length 45 /Filter /FlateDecode >> stream x3T0�BCSJUp w3T041QIH Rp � endstream endobj 1394 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./manualimages/stext.pdf) /PTEX.PageNumber 1 /BBox [0 0 595.2765 841.89105] /Resources << /Font << /F1 1400 0 R>> >> /Length 46 /Filter /FlateDecode >> stream x3T0�BCSJUp w3T041QIHLOU0 Rp � endstream endobj 1405 0 obj << /Length 893 /Filter /FlateDecode >> stream xVM0WX\xKYI\&%ɪg;m-ce ,k # iAKtn~2bf2SUU)M_z3ʖ//! #JE� 8lBT7(-_ Q�lRFT(*A2tw5 QJH*I} P& "g��eA8͍wQ5٥;Ѫ[qM,g(N8fyCt>G)le Oiv2)ɐ0h!zI~"X5Qpu ʭ\q\X2ć`qyRF۶+\){(9NǡiomL0Grhr3X1>E(  @1~U燑v 7 \c5e_Dgh?yr"/q"%;C{ !L1&?@ ɷ@ !9}YfRwώ O^;$sM'z껏1H(gd1dwQ?@:q>-23תl|i>:AS࣫Qv.ۺ|aoNQgqvqlor^ܸCQn&CLѻ˄b̯CC_\[k*/J7!Mw;b;9unݹ^Zӕ}g@}{x&B8>a㘺KH{S`P V{Pmsڻ2�{•pp"m LɝގfcYSqJ/ endstream endobj 1401 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./manualimages/fonts.pdf) /PTEX.PageNumber 1 /BBox [0 0 595.2765 841.89105] /Resources << /Font << /F1 1408 0 R/F2 1409 0 R>> >> /Length 78 /Filter /FlateDecode >> stream x3T0�BCC#\}7Cs#4 ̴ԢԼ͐,}7#pZ~^I1T $PY Vp �Q endstream endobj 1402 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./manualimages/fontparams.pdf) /PTEX.PageNumber 1 /BBox [0 0 595.2765 841.89105] /Resources << /Font << /F1 1410 0 R/F2 1411 0 R>> >> /Length 97 /Filter /FlateDecode >> stream x3T0�BCC#\sS*  )w3T07RIpLKK-J+Q w3 ELʋAf qļ̪Tk�p endstream endobj 1416 0 obj << /Length 966 /Filter /FlateDecode >> stream xWKs6W`tfL�ȭIs9C*ͯ Je+USG,n9}PjbHA$FeFhc((1yn "T1 w龨7mjh?l*0""j F#ɾ_Xm+_O!nR ML`sHV,[SQQ#jaXv6lxPdn-~9c( ~-ZVEnH5ʠ鰴i_< 2/͢ : 'TOeWlK;vEmv8BcQ*IGv5ei=WJ(D :c-y}s P%jR@gJ08":] אx!T$\:3Z~H짆m^qs5o�p|,gCpMku# 24:�Z8<`ѕH8 ' !=DMYHop,*_ՠD=rYY*maW~03lρ0'PguyBBgϻAC1-M]ٺJ8 >,|ROOEr<v[?D5'ix<5yEkԫ]οA.؂qJQ\mߚ*lFc$֖e3,W ̅e ҏjMQw-ꤌMDz?>Pvn+ گ3;!&58@piftZ HKZw3B q9o?"t-aISe>l~-J_/ΡϮO)KH_ZUi.y֚T_O'xcGy�R endstream endobj 1412 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./manualimages/lines.pdf) /PTEX.PageNumber 1 /BBox [0 0 595.2765 841.89105] /Resources << /Font << /F1 1418 0 R>> >> /Length 78 /Filter /FlateDecode >> stream x3T0�BCC# NU05UQp w3T05PI,V, RB)d䤢Kd楂ջ�� endstream endobj 1422 0 obj << /Length 1325 /Filter /FlateDecode >> stream xڭW[o6~$CR$%C,؊"V} KtNTN^$K4C޾sz%a%(Tx3$8a*w۴Q]chp6}*[WJ/_Wo a/Vq c/-`/Fa{O# ++O?FcD�g0vAaBFc#@G07F9߹w$nj@E/cCWg�u F]kGxg08a8 ؗ֕x=!QU.! vu.+tjL!e@(mQhasI p矔a]=i>pڽ",H@d^XL{GcR҉1IZjmRԦ瞕EhG0 sYWG DLPh+xĄ"-Ԓ6 `x6yyQJcllJ7|KE9E\LՍ*LEgU@~UfLB.>8hf!v$viN 'ǜF,3hH!j05.prEʜiݤeRw7ۺ냻DVvC\E%eϠg1Zw \tx82^{L'Q3&7A {ƺ!QO?.4X;{;M#SYfŸ Y#:/wk ;gft(w-u0}~y 8=d0BF0 AP>mЦͶ�gaDYԄ$*D:vYoi_*;Ch@=sMB,u5Nu 7.,&dmk9wC)1$?IwhNFiHy|491gf/0(`kC {3.1H EM &J( ɚ" DƝ`Nihbqt_iJ榙]n9=]BM@ZԨ_V±(v$�.!`$(d.fKZTػujër[#A9v iC?D~p/~U=E)?!QfZ ĸ 0wY|fla KFcp` zbe3=UGCQUn�:fJעF3)<;Uv<Cqқr/C.2k[3*a 7/ endstream endobj 1413 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./manualimages/textclip.pdf) /PTEX.PageNumber 1 /BBox [0 0 595.2765 841.89105] /Resources << /Font << /F1 1424 0 R>> >> /Length 154 /Filter /FlateDecode >> stream x]O 0 {T5^}106lS%2ܚ%wM@88"�f'_ FniBrcٷ%է,aЛz_MOœ B1:LX+VNgĒFn'57YB鯽ͼ¦B endstream endobj 1428 0 obj << /Length 822 /Filter /FlateDecode >> stream xUMo0ﯰ8Jk;c#qh)TPX҃6n\V3t?+2HbG&!,d))&7ӫK5YxLV/'ɘ < bNK͝[lZч~D8'S"мnJa JVe(Њ}}< @ =�c"A2"܏0#ڰO%#uVq@c(`X y ' ġHGg�kK|a~vyPؼ.]nqUn3Q&/գzB?`נ:%lS`7n{lvWK AqA{&Ze8)DB% q, *x "(s&>:]L '|pv}wRx=~Xڥ2aQLopk`Q4̛Vin5n@BJPD,n sHȻiyr/~ˉ|mkj?D8&ﶞ6vVFwp<' #sfR>ʤ* J>8Uh3eܨ2k ;!8<j XBfg[ 8 /P{4}{:?Z}k1l CSyբKR;0z峾Y)hR}5_*'Ot>T[8' h!%cɼٺm6 s|32N1WuF.$I^E /ioOP 󚽮}Y6كJ[?ֺIz׵˭{z䠪Vk endstream endobj 1419 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./manualimages/para.pdf) /PTEX.PageNumber 1 /BBox [0 0 595.2765 841.89105] /Resources << /Font << /F1 1430 0 R>> >> /Length 145 /Filter /FlateDecode >> stream x}10 EP)i@/`Iu4P<lShoOڀ#NJ I"%EW$is<d(\ٺ|^kfveXB =hb~�i$i& endstream endobj 1425 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./manualimages/paras.pdf) /PTEX.PageNumber 1 /BBox [0 0 595.2765 841.89105] /Resources << /Font << /F1 1431 0 R>> >> /Length 213 /Filter /FlateDecode >> stream xڵ 0_\V]t8t+d;) bvE!$N+8 7QJ(6`BRv^a̡FT-L،Nbi1z3Xj#xzS͍HAϻἫ SejMƕ]»6eBj*2"+}Vv8IN S endstream endobj 1434 0 obj << /Length 2344 /Filter /FlateDecode >> stream xڥYKs8W@WY0^ɹ%uLfÓiԒTϯnt"eIv6*2,nv0Kp9#E}1ʷ}^u,#ydU֦7wq6R2;0i\AB)͍bZ�d*u=WR~USi/Kt^?5Kc!aqjLlY8o={ 2b%N/ɐ3ذ1xUS0VD,vF(mHy]ot4Wֶo硽ViTvKY"t?":+zNQBH"p0ǯ͢1۫9}:. ő<vƣdʼx[ͥ4۲ Hɠ2k4!6g*SKuGt uT΁_E ~v_uh#! 6@_}%Qy\uGLOXS>ڔuZJ򎽛ZEo_4oX?g(te,P ?^{jczE͜>[ٮ˟"4.!BėC®=@VXiaT&bt:DŶ�:E ޾4"?\轇aw~޲f0<p,Ύ0%@ɲRPw,~"ECS$vڌ\~-N}^c)E'8I1R߾WIknCڪ˚ڛz* �QlM%eұ$7 N:a+a _#क़5}[TCnF`|lo6��]cAa?Ra}^7TjEQ1Cczԁ²ͷj@&щT8((ۚ;!rM)E*%o!K/!y$Id�TU5;LFI m^IJq Y?P^A"1:>vוǃ_! ? HKl7yQ {?nC8n39e-jC*<ʄ\J>&v93|D[+?^\T@:j7MT֤ 6Jk`ao]c R33ȎP/Vߨ:"X%ޏlA8x(<*u| (<#Q!q`׏K$c2sҙ`Kh7( )e"O@,_yRߎ`7$FnHHLʍX<S$4L̘ sӳ֡7w )1^L[ SM~m9@!_|C;'�)]g&*'Pf 2ѲG40Rg6܃=O͍EOIμe޷3&Rx"gŚI$f/ Ʊ |L+S@J%(OCwDgOwqrNʺ)OWmިW-c{'sK$I"z}>9QusCM.F /eo"?DCb?G\|LR ч)hC~8dѵnX }FER S[ xi,NŦJܕF(}H)U@j8KH2 $G@nhǻ2EԫGg+b0Mӟ@.49vxN=uD$L <@ { .'%._B+J" ʟd,S3q6tI�D]X t nCСQ:\?Rvȯo9A 4HC.H09n渗9 y.;ZDY D@4To>R3`/@{d<tT5OjgE&dϩ:hW'2e1oּf ub^JN>g ~ ݜӝ 8?;;puk3b2Jhe$=1 íL'"JyHH]GzP BFDRX"c{ !|}pX5`l*(f1T3W+nwM &Rut4PbB) *ΦQ/�8κtsJY/X Od2sW5m^yPpeJHdmniv:hGܸv? K>сO:2/`7;� endstream endobj 1439 0 obj << /Length 1524 /Filter /FlateDecode >> stream xnF r)9c8E6zsEJ"J 8 g(QEKu{( ԛyw3\ i%lq$Hib'XN>^{7*UrP}4eK -rt{WRfa#K,̛'_G#^\{PĹA˼ϓID{ 2J{FG $7j QEx1 $~0/N-ݯ$.yeu]Q^o/!oM<* FZh8XyT_wHA^QSA-Aj>y{}3[{+G|D1JI:ZIX b',1*}hw%T UgQqDEZV .hzk?ʾVplpoF`)L:Q0r<y ֑DU2/X( Nu&B#T452zuP3+(GK2jGS 9!j(~ݔyw)Qt Oi r|Ǭ((eqO J3ecJ)7έMžaf2yT%`=((ۼ ԅK@7&\[WkY05t>>1YN8=sd|5mX9= Zj,{>N-"̈́"gV hH<!;NER; -\@j _'PB=5mb(: A/kG#`<RXgKtdCTjƧʇNGr=i 9RQ,,0Q*peaI !mIƋ *0e+uxt8P\Lvqw^1X`iB"8| !԰^2NZBOgHqʶq0!טe /R 'M.d z~#!{z6UN&\@],(!B`n-X8"R 'mOuhdMGhw3Č#CC>ZpiqV,yّF}3*$Ey\V*G\̛54AlU<KNC;1~VOaJw c(E2bfN9({Iw*W4473cfq9שNWNv؞ow9o*#o; } ǻ :8c3xqFɩ[p f ]eƋef리\Ghlfu9{IYRPكMS[| j!F|7vg& 4??Áqv'r"qOc`t:H_B 4mc\碑-ж[μvK3$ɹ;4/o ̀vs;ZD/۹ 0@2 endstream endobj 1436 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./manualimages/h1.pdf) /PTEX.PageNumber 1 /BBox [0 0 595.2765 841.89105] /Resources << /Font << /F1 1441 0 R>> >> /Length 272 /Filter /FlateDecode >> stream xڥRJ0}WAe6Iq2ۘ`@h%6%&paܜs=<[kQzȊp,(<Q e "';\"Y]uNƞ =dl<R-WA($()*;lxTpIG1`v5zaފ^͢tr$OCAkmm69#_J*t 9a̧+ѝDwi:l&b'D-\@/MV3~4^</$9Ftߍe: endstream endobj 1445 0 obj << /Length 2305 /Filter /FlateDecode >> stream xڥYo8~_!I*D!nQw{{>(b +K^Kn-)lQ9 ~w(sF1'"8NGw>ibȔ²$5<ϟzM_?|leѱwS;X3m(J([|vh0Kp(9nE0G"qid,5:Zn }mSg0r DUt{e sBk* A2J0̹Op #$JXv<\?ܘBXS@uޘ~(t'^!MAQk xɜBr^Č=$Ra([Re@C >2eMZ/Rz__aINxoH܏e Z/R:fyِ9Ӄ^8g%mgo^W-~CP�]�~.o݆r!|GμžeSwEM3i|nGƹ\S ź%�oMeJB^9wc Q*vWoGUsIn66rz 03Bͷ aDŝMve2rXCY=ׅC.ܜDnsEUǔOqˢm1W!wN^qլe^ #bЪ<v2:>懪j!vG* ;!yʌc XMƐt@f@-x* 5𱂭#Ze];vv[f64kc?c#4<OjnCE5l<7\mP �&WlsRg,o%i MH2|$IZ;?B ȥ؎t&呂3-N]PAHLK5nUh586e\O#QH|%D/fVGW@ǣ<(bg {!,|7C)܁[1qj3LDL39.\MmCm;/ rb�gd/H7|/`MHˁ R 3>[|yrld#GbC芯| 9 .h?7M>v`=-^5zv&D Zq*~ L[2!՞aU%zB4l29 > )(2BC"&џԋ'6djנi뜔0!Ƶy5N<]  cTy(ř*2>qf6s(T˗m0o,9AJD|-w1KЍfMЗX F%,Y(bc= 1فn@o;h<,FCݕ4  wV Pޗ2/2K^V `䡚9;N'y~z @ʌg=4644|"huwE6ٯ�/J(|:4,esK k0w)CuT$dMTsl)^S(%prTJ�ˆe o-Y*%W+EF9pUͪ pkB<R1)v!Qh1s~t)`߹#t tEenFZXfhUxl ~!`ܑ<"Rs1 ~"1rk_vo?@0(@1Ԡ8V _ |̬% \&hT�5�+Sp''<)' �)M zC`WDV7Pć#ҭD |L vW�,-wUc 0 "UBS/ !z_nm@hΫk'aDbx3Ri%d?bkp " ;[lM/ wY\}4 !ϧ6u҂d#K6w )%K3KH%BTO raq^ ŭX|[$\ʔ֍=mW(]s+c;&4 ##Du$rI@j{Yf^>ʰ3ڷD4/s#zľDGy@x!?G bU;L) b:wẃCadSŝDz 8ުͲLR3QԱ8?j endstream endobj 1450 0 obj << /Length 8 /Filter /FlateDecode >> stream x���� endstream endobj 1454 0 obj << /Length 1198 /Filter /FlateDecode >> stream xڽVKo6|#RO$m쁫zY"?CZk;ۢX,H= fzӀ$YlA8Aa}p=a,)_o7Q,%EYP+ńye4CU%VZ/?ӸS8^}xm5~ڬ>hÏNnAլqAL^wAץ:>}K0 0MKƔxJ8 ^lëaqFZi3 %UK,&" DzD4ruv!A:7 |A6g]>Ha#HH F rP{<!"1F@Z83与lR/({H0Rjˋx{_TpkY R!EtA)ur^Hr $0 V`Berꏩ0{K>rd0̪ϛGc%0z=720Xng%q|RRPo ~F,EVL4 oU+sodqqw@?e8U]\aLi(OQU+#WJ[FD9'eaHQV¿747DZm4F][Ͱe(? 7lڈ[c;ƙ3♣!ۯk8eyvYx@ף[$pP~M_s<,%HC)[<c$bJ:Jhu=e]5V7+*[m%=Տ0s(2C2G!Tf!`*)wGU=CjS-ڛC`kŹ/CG`Ў $<!s p΁N8]@0~_d~)IҜf1$rPFF̛+Ȏh[nAt1mX2_ LPJ]oT׺Y�RWX.hOTج9 =(x�] k$><R^Nzޕ<Uz 邜u[ #/TZx9GD'Ck @P-7e vlX =TV~kyF 溺�翾ݗ} oGs${�)qrG#Tk"W O Of Z͖zoVnV{qExq@^ ), b=Ac>pf endstream endobj 1458 0 obj << /Length 1470 /Filter /FlateDecode >> stream xڥYKS8+\%"Zoq1NͰK!C<&ΰmEr 6T![j}ԜWDXT{#ESbz} nW;Ű?Ky$m%Tu6ċE0?$pz氏>9/dk�`|tF8tQ­^VH�#BiM 6> 1IiD>p@ KK U2=>;Vg6O&igΗ'dv& jl[?A #sG7\{$05N|Mv&$G 1@@iab(E CbfCjN=(K hY "L iq�G>M 4#�$:mDe]k4* (a/8rnRTW�rטB8ƨ"mB_W i(/+IWA1П(f]ira[[`_QHS+ C7D*D4eQ/*)(fC+V7c FA)c0AaFZ C (:D s.36!IU0[V';LSLB;Ҙl]%y|0!F5IB”h0@(K!IOEYsC= E8mf\؞'=_Û- Z5 Bl]KшrR6BQe*CEAa@fٶ!*24ɶٶ*DqExX�x Th$�Qˋ¥D0PCep>C:`:D*^ErxP# c W1cl-!e.!Teu]�Px% ?%sRD"ϝ4iwЇ)Nܪ_1XSYZS5xa Vs, \n*g r%v֟I:qt}Y9i:t6 ]zHbW:YWzGgesNU[:R6}+ Ri9E9AM}{ss? dQ4ed9[n䴨0A.èwCz.s5xTXXRSN)@uvxGo�*:(j6y^gɠivV{P�6xM 둕o{q{yL lO#a8sn7}|. o o'렶ljs�/s*pl)>g]_q"һ,|ZS$HV >f|o{|Kvu[dY/{^Zocjmx߾%@s<(c?twC*g7d endstream endobj 1463 0 obj << /Length 1585 /Filter /FlateDecode >> stream xڭXKs6Wp 5c�rӤiN�ńx:]`AJdN ]pXBfgW,$27[x"$d^P"d2TN7)$LOTm>/4*޿jqɻ 4 |J'`84+2F4`$pOfG)DFV$v ;?|4痳>2Ɣ<8 /?t:^<GѿGW'^<~n$q3LLm߃W8\ 'ӭw'FE~Ͳ۷r \Wu{ $I,sƬg<?" V h[t2B9lz�5 HFDļY ͖`?{kF7Bi]u*ZtK'nf"|Hu3aN/i/.R0<ͫ Ru(t6\g+Bi0")H$PQ;L* %(An�OeoW:U2]uaI+­ ̴m=Ǐg𞋄$YWou`|@E;׺N##oZsݴC8!2tB>0A`re�k?-?#GBxm?,C 0$5HSU`" !7_aҩo.YPU0Bj*rΩU>zaOw(0gBQÉuJagOg/gg_WƑgןRx;BI cؠ! q*"gi"F]$# �Azt-C^*i1}+|+0ƒ�2?!XH#bh#0mj6q$)&Ζ_ qARȞpuce[:hp9c :]St7e �ۢ8 %:.,{*qi]ƥv[v)B}Q] s!dABEePQ]S9H;iY:*a!4l `h6n*2 ֭Ə!T9'π=8MGr�}~?aMď/18$ q;)׎j<uF:}REkovf]Iʻ b!Nu'3ƶ0}"4Jb4G$%Q"q*m=E/SNU wg,IeAEp!g@CC`{{4060 e[ !&L6WFn׉Xg>$)AsƁ!$& } "1&_ V%{UT ? @ YQL$CBb,w[UEӂb{Vmz* QtWz.uEn\{̉ݮ筶CZMH0]օzU2zP[GZUk;3%n)᛽әa*Wus"Cw{AL\ 5 endstream endobj 1467 0 obj << /Length 1272 /Filter /FlateDecode >> stream xXn6}W~!{PpCXo@DJӠw!˖NQxϜ9$.oЊHsߚ/,[CI<'-sGS:X7ܣt2cYS&qmYucf(@=¸c (qzn seZYG?], "~Gxi׊[!*N$^'S:J/cD6z4 в*zliAÐ=>iS\HhR Ij|F|YKyQE >M)?U@b]orY4KJYc(P\H 6rوD4{uSI+L(H#D9ϲzBV $,DZ\7+6+m 8Hu&^ydzb BwCⶃ{l*a'r#ݢ ]<Ƣ>酉!i!2F}|_jʵɭ.:�C+yqԄ=22BQ]$՛eNl.6�g%TCCJvNj  `ZUV!ဢ(Bl�d/Gjϲ�3=gelbPͤ9p/QO ?NiZn 'y:<+\z{p: +UȺ:{p&\,2>$~"R&9"A đ={grBNB׳93Wq!&/pB_L[}\N>O甅|C/yu<O uzuӷ;m7/^Z<aZ#3;,q=8Dpo#f-IR@oH.B;ߌ{Fluݮ͏2[k\gchs/ x#G';deiSŦ25T{Bx+Y˺յl@4fZKK5ڊ4P`.\ s8  #nzϝMj4>$R2Ki9;6%:i ʸJ85mm�}D ( l݌ߟJXV/n1_wuמ,:3eUj1,ktp*W�W?p ^= 9:%Zߔ(kOÙS <mn #GqoUk=p̐oiē endstream endobj 1471 0 obj << /Length 1175 /Filter /FlateDecode >> stream xWKo6W>I d ТnQ)#ѱ=\IlPwIvuCO$Gp7%$⑳82 QœHP"YgΕavn<e 0Eo >xb>ﶏЧ.c2掄t|HKk#Jj_f3JoPԿW'j ZòR/)ˣ.N'`1a=D7M<.vn5ҺT^-U5U)Z6,Y;MW]\L߇2y#(;�JE^,V g+zNݒxt)<|#|˫gzTR5gM|7: ၊4;|�"]?@i=#8a aH,]1s&y+XJU=u)允ǘ7uV3 X/鶮[k]ƓBۍ]6((!7Nhp&̓?ؓgVW`8vkU=K�#PH F*w>7.?. r)/0D: 'A`ߧ>A9xu8̕u\m{& H@G^14. 6/[2xo욆T~[7r2}PC1� !LR:D\08ɹC %b qDxLR-<Ƹ2/z\G-v]sQ(+*(T:q-ybGyE$<DbO9; Mh*ɚ " @Ǟu=vEz-Usg;Usf,k�Ч`v.~<Rؠa#-PuuSyۛFRx}PE{ڽ:kWxE;T% ZDȞ@gOOK",z$&"N$$ɤvIS}5{YtN;p_v}|q0l8@qxN.WS(w@6| LƯ"D-8$K0`_yeF}񯽄t~f[ciKeP},?R endstream endobj 1478 0 obj << /Length 1677 /Filter /FlateDecode >> stream xXKo8W=)@/=6ZYAXKt%:n9lv\' ,| 5G.nEeaػ{^̢0͸wWz_}BWe;~ h/e@E, DE!-%.qslS "sgDH(+a,K}8!frXEB2O$Y9GEHST3.I17v ,(Cr~Qգ }@4+ oj GVoa|>Cp=#!1u`tq!O{fޔ8VJAlߢ.e4J<[(Pfxw5|n!qfg0U&NB'LRv6VVR -zi䱟/7SDٺ%J%jY7VyrZs6Pq xޭW-5@Pv Vfʾ$;>J\نnM!_}(L/ֳj\6L3\Ox7Nhea]LМ '.Rրȿ:qr| Grc`4ēqycHa}+m7rsNփrPY1߆Zkks/r7RO̿(YVyQW`~"|j7V=`=%@R4ͧ'wJ=9Q56[$ⴕ3̰̿H[G$>Ufx LaL ֹ -5cgWb?sFsK^Z %&.B4ufUc#eieCG>t@ KUkh|H" 2oP c-e/YuPlS"c qY`L@mfF  59I@Ḽф▶x(|p:|YOjz龬v geo V"<�}&XHb2q6H}C)f}ɥr$^iqb٫xZg!D%'SF~7q޸|㶠ۇndNcd^`JpL49t ۍt rgyl4p/Zcڂص7[( aNA5*'yYd�!\@^m�u뛅tNwNb3Q^J8IR4a-ؔr m$!v]]M=ŶF 1XI|>8̀O?pA7w{rpo_rj=hjf=wVD^hu݉Zk g]o\[տn%j6صxN[w.4-(pZlƦi靨 5Y@5"VOF93Qjm$X̐-qKF>dS w,͋ZW.Vme@TCjb*І 97.Mh";ÃqQN!A.WqJ,NO~�)J!@)1I/)MyYC9;z{}ʦc#� Hyj)菔e9ENjk<ޅ r endstream endobj 1348 0 obj << /Type /ObjStm /N 100 /First 970 /Length 1603 /Filter /FlateDecode >> stream xݚKoG slݝ9�yԍ Mk؋T-R>:Z;+l\r#] 2ָ8ِhEѐ/"ɰHr#io\H4IAe5IXPa9{;R1Zk oGb5$da EUm⃡/%0*R 9h_;6 :$2yU(d]!82�rGpK'RřJ-`+dSF?ODB@6@`[6!z/`Ās4RQ+hRJƑ:D"A'A3Z}:xGnD!  З)e`tclh4UHAT[pEU`I[|YBK 8aif)>$,g.} gU(D[@iF:bpN`pw =ZW@(R<TD.8!c (=&>CwLtAq.@�җ8/L` N� DrJ +\R% SA HF0!$sޤ_̗foHBa̚x„}uZ<o}Ws~vp&뗯.'o92>l>-o&snK^ԯNj-"t6}dIc^k5樔24|d+?.U3Wٯ:hV@(J:5!+H&=xDʆ|Ua.AX­j n+|׹麀=[ɶ8"l4֝5<8/ XEB: :W)|d J۲SOH s=7 Be_R+,r "mC6a9V>kV$KG9uʉxّm@UD-}Zز 9;W}omnd"v(߆jFn5rV#V[ ~ݲ<j?O{S6?_ξtLg˦p_6g4tggy7~񁪲`eYw9yEBA!#+; Y|8;=XNf'jPMV+ELϽv\#Z9z4yV;~u7__Q]vؤ1=(w]ad0RO0Xek5f^^zyLDž0q4!loPC*fvsGy\u)m;h?vބxn-+isQe}P??rA?</#8h|J'T2S8\D໓?Ee54tۜaO8ލ~s=ՋMoRz]Uʷo➥rroe+bXޮzw໪JfXM*w^+_%w|]ؤ'l}ZR\yExǿh`;WG J/WA襧"I mhҟ)sK9R|Sw0(�z ȕtwHkCdmwWvs '$KV,+gܒ5 endstream endobj 1489 0 obj << /Length 2367 /Filter /FlateDecode >> stream xڭXKo8me bDJ=2~ .гZcȢGNoUda *UO~U_6onx\ VH!W*O,Jˋd٭v4 xa*mYꮫƉ:0~} tyy;`'RXP*9pL#0!(xGT_4@m{rNi;d3#V*?Si&(S~d`itecto{T=N˙igwFQi%> jv+".Hk1v{".JU xp:V4S~sJp}}C$N^7xēѺz91T`]<LgQQUeT8Pю3R`QN=RzO7Viu_5q}SIĒX[>PҪER5;$߅H̀?4dE& RJDbPwpԍ 9&N w{{xsV9K2rN7t<#(8|U}4.d})h}AO{(vچF`"u ί<t~A=JpRA?{[j].>(a$uprt 7HW=<3_Q.3jO+QiEuU:4@(r+1~ @ yͣ"x\,櫤Lr28Q8Nf;3 Q3~ `'�ٙ߾|# 8ޙQdpRfOC~Lsg:%BrsCEv$I1J<C7%"C1f hk7SQRLEzC)(~/@'-uB}\%B�0ۛȜeGT 2y#9bQpުy-/(_ !E<\+ˋT,|ϡ]B;G=[CIjL! ycr'^1 nE\bKNTqV@:v*q<qTӖ^S=QdRx衬7umƂW[_ٺ)|5U9|c!:,9 pVʐXoJ$bEK( r cC1A34KZ]V'oD-HZ .F op*S=MIUe-c1X(w"DN@ h�Xm]n/}yq'Nnsn7@ <8_k6V u2<vQq_ZWyj~t'�;2xwyUׇ�0 ;ze gоpԛp>f tOPˣ!vTk=�D,Mb i );n.TT9vaЎp Ih"YQσpl sܞ0;[CO84"ge+\2*Eumq<xr[_: w~qsȽ;7nIkDpOGÈA[Ny"aQR!c9/`JZQuoomUU;\�D -;$-"TBBmPO2U'+$3%f6<Rٓ1z3*$$ L(zY.hRjz1dLbP@S ӾnNIh޻Mbhb;XMY1AgB¸ƃ΄J X4u֔ #x=G rx PZf_0Iǀ;<|QCՃ|T<y<U "4eK,lKdFa l(@p/j0{)5ÞqOI78eKW l'KKW<H(TVjUl]�hg Z+]1= 護?=jt/TnJ\4K_z[ןC9 l/.¥MK# tv8:M +Ûf=VΓl8\R4Sۨ;E8_ 0F_<Fmd@QrUAkc/O!@2-8,V�s֓=o_j+휠!$&wAtx$Y, ñz WgHa`@}`c+9 _40:Ϟ31?LggrӺ0MJ͛ck endstream endobj 1494 0 obj << /Length 1887 /Filter /FlateDecode >> stream xX[۶~ϯ0$#^Emr\:mm*[>gȡdk%=@aFp7!,^zL15[,g љ-MD]5hM!ytyoi1ID32J0]W_|z{a W_.PwFGI\l0JI& P<27 iڛiߞr?{ɻ/?qFȊSګMuT&8W1'љDdLh�e;:2fo?ens|Z°4jo8|:;QY˸W`J]x{:L]Ov zj|-pJRI<֭+> +ߏl%Ay 5JZ 4YUXhSĞm\u+QL[9V/M Ѱr?iC9n*ך{Xme:r KT !hB~0+ FcΟ,H ,8bo7\V7+U=,Mc' 0 q4챸3U xi)#Če6}-NIJ x�EX ~a[yⳄ OSc=ݼD1}`Ӌ˯.T‚9EM؈DAϒ{ሌ5}V%sRJh(!3^(wMNC(װdu#tA;^uۓi{IgDI6uҏ:Bd( \2Sk5;ir5KcAv:ZN7ZbvLUۦX(F(]A" Z%\} k,ָl11l3?#=윛D*fݻY|<Z~Nz+v6ѧ9 }~A23|6`Taa<o<={^J@CPǭt*QzW]kf LJk1T:|>˳ � bj9$eӮn4vۍ Q'w?gI'|Z)Zv8vp/@8%,<A<W0qƵ#ETC<FOcE@Z H>Hi> -YYm>}e@X~lm Ő.>^>4~< Yb(a:$c&2!H# UywpR98pTa%qT=jQ 88rF(cRck Tg# i<xln73Lt�Fr`P)0aqV G q}\W~z5ԅJA6Ƣh8ā櫕qp/:oܟK8{.QkSVl Ȥ3pʖtE[mP(T SPIPWx\ۼnˊ?fmZ/}Dఔf"T>,fOE8߿T{.'ENbŻ 眄c4<rRDщ%; BNy<!s(&E* H#ƏVkn)nw_Oy¬-\أ2h k[@vD3!&,$9,;EuYQPE5-|ހv; r�s  }O\hK _WPIq$GӜ=x^[iMaeܓ_\Emz]Z[H*B,A*UxnwLNIOE18kS1I sp(9tN}&OAGc2uj endstream endobj 1498 0 obj << /Length 2008 /Filter /FlateDecode >> stream xXYoF~$/`R}  (kXzr$b9,ɱ[UKrv :_^ro(ODd*JrI$\mO= EG'a(Lו@;96S2 8OO~%0DqoB"NfQ2ng} ܜ¿ ~v7σ_VrűpG˹Q\ѯ{n$!'\%KgxXY$T 9*%j1e'oxXaT$U,0AeA&SiPH 6Λ7u0?piu_65M*YY$Q$-ր+l#Hqx<Ż9?EUȣ,K'* hXKЀLi4`Np}ݒ~eLj!TF@UU|"C~TA*&*HHTH>u)ȴ@6arcogzսI^D;rK '0sċd`3N/l>u.Bc1`;N6hWk̓fV泩gVZ-|PYLn~׻}9S1MƑu~{XȆ%`)h9eWƧ`]F+�ItYSFL^c?hK a3 Kp`V�-Rz<y6Xok\֬. ^#ਁ$tC5Jƻ-,1SkWvG$IJT)#)S4EcR:5b-̑&G:Cpvl6M(K-PL x_d�xSXj)=ˌ`GkLG2x�=�6H,jvI@̿. _~G, Dlۯ,fo]~Zwrɏ[RkBA-[S>vMGŒO Щ  3dn jZPe^,7`@�gI ZCĹdC$mi]o_|ƏߠT<hf4񼂏Rp͡րPk]il:h4ؐ][�CvA߷%q}t.,0kQJ ˟0%m=K)h`ϡl/9eC9+DžU#!�$H4+(eŎ-Xn~ ԮѮ/Ԥ<k"bSCg<wrRT}{.AG9d}۸EٚiPnl,rEy5�W_wA8`߃X@p2B=oY1/pLyZ͎C B{fcʇNfLR|M: bH;>B�)wG7t>C 6*_u2XN…N5B:q,8&r',lX9+3i|ѳZgX4޵fw8T& ܡ`Vӕ}!0>Y';liߎz֗uѴw�ݚ (n_xles7nD͟F/Rz7),UJ|L+1yl 5$]T<tv(04q{Aw w|(dhZS㳮tVY[yx A&߻Ϗ_:3/-ǜ(sGUvQ'7%}m3-7m_bh5f^Wͽ ,K"$х.癒,bYacÌc]l$f bJܰ$}@kUpAsS㔥O<={'(?z rWYdm&Qw\[NkՖ\/ endstream endobj 1503 0 obj << /Length 1898 /Filter /FlateDecode >> stream xXY6~ϯ ^s,I-􁶴Y!^ٕ$; eJVAIQpKO֏_&`E*f%R.RY^ź\ȗ|)T%׉ޚC_X&<[Iʣv[u]Ueu;=^!BSIfdx5Peȸ@R]/TF/EfXc;:.ObiOr[_W'I%EH1s.Qω9X*<\Y�.8Bpr-,οUUZD8VMi;|-]#C}ov94(T4ey c2bn,BV$ z%~ɘD5Y΀Pϸ}:*C}KwUE3{)MyTJDfwOMs:/auW5^'=OxWy9nև3yU 0Qz"okr�c`) ,8!B" BxDY\k֞qGPmkYTn-NLcuʲ*2oXFE/P- ^ Ni"s#X||t^0? |zr,c1t!Bjѻ>U Et V7{.(1=UŀTs&5{#+ұqoͶ=зTL3Z8!#nl#nm[JmߒߦX)J0GE1wMՔ6ڥjHb˟HK*>sD u[@ObuYי5/jOfp@.8'�'YZAbSW5mTCNx=;qgo7O'D�Oc@G cGb-rڢ;y }CM'\3IKr.B) \h?pґr11p�<:t@xJ:x OQY’\INe.лd˛c*x t+qο'ijJ<̐ؿR/[,K ,@OrS1@',-F)<'E)*>!0JfLQ0!Hp]F4ꓪ7T]ҺG*Aj&Z%sڜf9ݾbD^$a IxS!0lyhBM,Yrܝ�.pa4P2ꎛ@s Q7=WU Зy /!]EUG Yhmsj+7 jI׹ @%٦v DcK|P3W\ZOEe γz.Yփo=Wjrځd=x[/(R:̀3&),H\7qw5'ȴʟ`CԧBv*͡Ԛ5"%1VUyh& ۟<�nʃ@*b@1Alzpt&eʄtf{ Lks1-Qa,0i۾qf]~>q7vmTdT,clQ]xM1Z9a7YMaT6 .=5S\=$S!{‘'L~0 zB%sêuCd(3Zx'Jro"g=yp,c280||  K!DԚ+/P` T*Jhdq0=C0_zPٌ>OPZFI4=ɩHQsrgMN) IAN+.'qÐBH#nR =eCʣtѿ5<& endstream endobj 1507 0 obj << /Length 1534 /Filter /FlateDecode >> stream xXYoF~ϯ#(R4R(V6TI*}gZ\EeAc gWs7|6{031H*'Ds$ H6|2O>fϯuoiNΈA\Hbi^wn~8s3BoOAVDBI8"QޛU [140ud3O'a1'Nv<~3??盽(D#fv͍ _B{0`LzgE]7}WM 3픨)֙gSbsγ^%"P"ɮU㌏WXѱQ[.lGr=_=pf!y%1㬪 fӣ>c bDHA HaΖuOIV}):wpT-i 2D zӏ?uM}c0T[dSLw9ƈQ#<+E +F!9E8ûo{>a7$-0e C{ 4SXH#s�T*/m-\xv|*.,ljt �/!;o=ٯĹeZY!ω>CIj貪?o3w22S0if`5jXH 0Q +(f@.\�NA`*xLE_g`RPнC:tc(Fct!vΫ>ʾ~ NcK`sHMW՗D@"seRoϻo# @NX<` ٕ(9T6 f|rj1e ١e 2DA.rM܁Jv DU;fL9)2ݍ)S<ozjh) f2F\#VG3<ֵ1Χ,Z+_ZbcP\V@͋>ͫ^#1TeTs|.N@Gɨy5Ɗ/ʫU5;@ ׬$]&݈H4 )KN}"͈@Si҂H'+ҩt*>WYQ?=e|xUھk+uGtY6UY,nZ E],􁇙 %0'>aP<R>̔QD(=aN8vST=;nJA})yMFtr\ǝ8Nq6u@74|t:ֻz\OMxEV׶hc_sE&G8vuِӈI=dDy"YW NL<dO}0d'] *N� À=~<ӥ~ |cm¶C-?[븄 C˵Lb+D hdtݠRqi"W4pNלEdg"n)7f %˭l�?*wI8y�Smѭ=y9{?: endstream endobj 1512 0 obj << /Length 1995 /Filter /FlateDecode >> stream xXmo6_2P|~fˀCn}Pl&jK,ͿߑweEN:`[a$ŻųYf33-r) gc"$ťPvc*6*y.wk4<Srfp׋=Tݺ burgL~W\2|Lކm?¿bzuu$Ws_CW]eMRIaxL.ÖozC[#xSΤTJO9~L�3?1\B3iT/ KMݕUǩ.[+\Quuґ|۴guY2VdGYX&aZ΄`T+2gR0D*PzuݡJMmd:Km;EnU@ΗplMMkv]zږJwa3mKq/a sf2Iz>FҙMoDҕw8pѮꮪ\mԩZ;Wnk7cY7pۨi թZU\PDwS$D:,Û@DJR$UIyw 2{q@ <#PHH [.` |'W{'Fq)O~yQ$;#mj"̪Zz-ё&kVh E@W+� 4y5\: Du p(đ7MG_ɶWm�5潂�W5oةmH�@Gr3K5(9Iߟl|$*5JE�*RɻvZ=Tj*EπY`GwaHv:]Bs&JQ�m d #9(ke}Ω, ,<qg(!6L dz\sB MK93,u'PIF:kaHgޖ*وyprjGc-22)W w}7TˏjW00|+4o6r뎮!Yf(+*6iǫDo4?^]MQ XL%cKˊbhb4hCmȣ 90ކ@&YIoTOn셃GlP{!GZr` 'JZre[DŷWﰣ$<žx 4Lepݘ|QE"t"-gV߂zwjtfiu1CmrOwyWؠ|LÑ#P)ؐJڙ!YNoC op d|`dU8:B#m3ǜ&2 h% ^g@k dkiȓd|ȲlV qҟOI& cx4FАsa=JsPez:m~6pBBu Aܵ' (9p][I? nc+ qJ\2kE+8h%KVbJq<A5hFρ^X~)Djtr߭ 2xqu|ÏA)E^ K62<E |# I8[߈3eq af5-co|ɇ y1a�s1>/c:}dLw^u}ơ/n\nS~Xڹ@2bǏƑ_?Nf4S8[y'jt>"gbv� nƁ;8%-CءvSv@DV)fY,s X?`ϓG]>>z<Ę<≌Pə|MWHuWEfy,x硖s�l w>w6;?%Twzsˣb\ ~foWn endstream endobj 1516 0 obj << /Length 1708 /Filter /FlateDecode >> stream xXKoFWHz\vMDFiDD- % 9>7O۽c"Ork11%ZPbrc|.͖+lJz/zx*q]؏]_L0)l;`Qd+$aev׭"}[ecnf,ŝ~v#韜sM\p"-;2(<U㷔p'[  L #'X¤$Bf 1?ݣ'K|Svz>7Lj}5NjCy8}pzԠ$7bhzvpܗҝ#V8r ,:/6u#>}2ox3jҪ:Z*Irt^'+ou'۲+kWР omq"j+"Yp7"짌pF$[V+Y%#FƔG 6g#p͆KZ㧦#]2>̻Q\:8gѪ>6savf\@ GvPpGp$< W|9T 3(xǺ\ BXxRWˬ-YrPҀ<U{;CbK4}}.qC[ms0ttDâe,@k5yl #V؟g+35Gmn;vWϛwC0%3F8@E�MV44Z3ߒJ&ŧ4)H, MnũM0`H|j>Psc`ދVύwCȸ k<9<~G !, ʽY75lx"}0*j3n ]9d`$䫦#H[FEx >ɿ,{ &�e[&a2sJA)zg<c$Ws-c"z8\HXC1>_'i*#Z��r’H?VG?і21ybENۗJ+/K5KCdZ &OE z[P`]tvbկ2 �Hu8õz@_' g0kKPA eʰ ^~+SQvXظەA'+=3u!Xqx(XAVeGcx۶x]}bV"7Y H 0FhhdfAѠB7ڧEΊuq* ! $PPCy f5<xgfA Vޮ/yXs0Q <bWdjήZC}k|)S,z_)aG;D<RIŨBPf ;ĉ?-qڷMʥ+g8}1uiS³<viȎJ{hI ͭ- -Y\Z6!_эe FbB1~RV iJD&Bm,*>~bPf(g?6_E"(?aYwc(vcCǍY56FQh4q]:_jB8 _ .4Ԯzs{/~ endstream endobj 1520 0 obj << /Length 1228 /Filter /FlateDecode >> stream xVKS8ϯѩB˶Sd 9[W+c;;~[j9qBǭTYVIOs'bĜP΃DP8Xc8X|=3FKu;!SdɄӢ]W='];~UFw0؊B'$q0_*%* HD0^»a#f^5x޻({4W雓N德{s0QRpBFf>P| QcD  QZ~,`L3!+N'�- Q*LJ&Um*4MURn!Nޔ JT_P,I4MҎ3XԵU5p۵>Qɱ]^w]ŝy͛YB !<B6{[ Zvy?'" ft`g0ŀʕ $7cG7 NW@`yW/(6Ƞf:Tz[<Z�%H;QK<g0-͓@zC%v)ǫ xۼ�vKb,FԨ@XQ/wJ9e~u҈ QIISB?{MpwUU+sE$Zx3֯ ݔrn9 %'ƭ3.nQk.n6VlO ²cn&&01K#Q6* �bA`JRxa@H2J ^&LfC?RD.mwմ^!Q篼^]�nkCtm8&L6aW;K#Cs|in Jߩ> %1:.|He#XqX$B,\{|~;g9fg<q�t G+)c,v١?'Da~Qӽ ׬ w_KwA䄂<nȌӡK.${dxޤ#bWJ"3WW.1K \`+3;w~,+78M Б3@p 8a<w^>cv$/bX�mBJ6rܡ@K*.,am5k4h65t0-\;8^WkOŧ�t endstream endobj 1524 0 obj << /Length 669 /Filter /FlateDecode >> stream xڭVn0+xLd)j>hz(M T):~|G[K'-3|f\-&_~db$ bҘ0C1 HEny饻,^LiP!aӴ=SUBj͍۪֟|_LLУ(mDtJ!QL+r]#J,Ef(i{kjI8!a!\.OJI$Q=HD#f`q@'^oߗxmj5"da$FZ;er渹iс Q `Dgkό\ B"øZY} 8; QZWgUY*EBqj~fBKn1ǁT*e;ltZa㍳]T*uB>}+rѪ*ںaP:e<ΕXvK|WY%uv/w`?h{0BH wӁy[@1B5Q+Nr;ʾyc%$^1|ӵw?A Ъ,9؋/H�U)(=8zzk'ѶfGy�; ȿ(wX fK>9βisR8W@Qv]Q;ܖlJX_u.@`,o5lK,%$Ɲ=_ endstream endobj 1529 0 obj << /Length 1762 /Filter /FlateDecode >> stream xڭXKs6 WhzgbHcvvi;[Zc6zUͿ/HP~YL">{t/ #d2x@I3<cH|{=W,ɲ$Pɔ(dL?LTn=.h@9dvyDxӘF7t2Q_:5P&_Vs)XDrFi A8 *Pи(aۋ H,i6>(x.lZݩ4dGiMhy= ffT"fh:.LgLpEΝ5.XooP8,\y;f.� @ɘ)Cԃ.lY2G{;`c?[* ,7f 95C6dIi1vcRUVh~}rݏ>"@مkVpށd̟TL]A�  �j8;V)~9PnW2_qӛYG"b?'>F2mh.`َ+/Bi]\( &rH C:^t>4ʚٿyiWek{=h󮱔DTzt�hm9G})KWU[꟭_nSDc((`&T r/VpnכwU$4 x3* R5YfI!+$Y0 yfb>JK[8rcS; 7 $^n~Ȭ^ڹ$.@jd%dlY_yWz0;ljK]E-_q;`ħwꔞ5bH]%΄8|2/#y.Vh|oT#<e'{)ҠLm&f rvXt D&SVAߔKgC$\Y٣F+M@VDVuM "IpնpA#ĥ^+I!b$CX"%#u>Zџ#?.v A:# ax6U6fEG G77F2lf.O- YrbN}ޠn&Q*�ˍ=hb )^-`M|rWY׾Œ�^Rwޔ۽ lRp`*-__@@cH\`g\a R7[sR`a+= r+\(oxyS6]?n͒y9WͲ,p%.ؑi)h^{4J& oо,5k:Gz"[\OloVh !:zo4z!Q=DJd48^�9]o+Sĵ2n6ɩBJ/&dT]Y׈?θ$<^ڵ!B7OˊEhXX4L"p@[M ̀=9v2s;nyzQ/@nxks(/09Ef賫ȗf}4�eP$cAir3e5~ |W%dǼ)7f &.c"8`GvD 4DT&?G1%Dpqd(|eʃ8`0fVG*%.\[:սkh|Gh_>̏- V\_]4IxUfSaqƨ5q endstream endobj 1533 0 obj << /Length 1759 /Filter /FlateDecode >> stream xڭXIs6WHX� 䐤2Lhzqr)bí\(VA�o\xςKH"6;/D&̓%q"ֻӦWjCsJVPRTQ΢$>$kV0 ) VkF)I+Te}H d,(1/ HަL]ki<K:<ϋφT~Wxu-AU#MAi-jEl[%{<+U . H(B/wsq´vU_MumZm:C hy4Wd@1e~n-ϔrv^]֮X+j}u v8 Юߴyի`;lpEbС=Eˍ"2{5WV2jgyZnWQ[64KVelDA8ZKqF;mӢ2@(}ħxŧ$%(%Q׍jSLЩnD[gƓ?ۧ]^yy/\+m#൅N ޘWe^奎j}#W[FrpB̨*Ӳ)K?WsYH( p.fPq!4]}xʃ$`%P)-7,SbQ mc" !BX@fCL0`)e˼"㵛W-Nbjq=J]#ۚń [7ڗα~XXf ~جBqJ{\IC ¨Y0&F&A&P\Eۺ(TfRS1`|K%:T@m-!/M o5۴w7ЧT+i e0b sn[{]Q`TzAWKyp%\H[S![$,s b6UQomvl M^cl֝<AH�XzN2$q/c8Vz Yg<z9⹧b1NԚK1V5V٦]�Jغ81G4]:1u=6<]) n@$KDhK[<,Z1|vqp'ULPl lJQCJ aaPQ|T(.8�1;[ H Ducт YS1V3ҶǕe=!cth·]IBӇhj<:pH?p7Zԉ}΄謌LevwՔ٤@O)Χ5 GA7h?D1:e$tc]UuFd^Vu:{Y?iY'OK<߃{wbbH_k<'0c$[_]hR^_3b07p Wdc:&V ._W.^X/-uF^b0Ŷ拱KWƶ_}WIg@puCV$$ $zeIyJ?R܀ZrW6Lٱ~{_׈Z}Fj^5y*pig7KFDk_7 *xV)TqT|-yn5CclG# &qx ڑ 'yUoGQ֪f`}(}aw<9 Ο�!VJ3 endstream endobj 1538 0 obj << /Length 1396 /Filter /FlateDecode >> stream xXKoFWͭcF|(P$KRvJ%Q�\-w|3CON/C)xq0`IŽ̛ї%astH?&F O1oi=M,ΓbY[DyVR/T 1:jx7 D~b}}^]\?>n7b ?u1Yw*M sJ&Nd^1?F Ҿy^4vdDN:nŠJժlqhS<ҧPȈ1iQt̫bGGvWJ.ަH�#h,Ćە`0ܧE?jb�(Z"عDs(*n"jMͥnZsnWlb\$yc>y?>l#յ(= 82mDGE qxH3HEӂkC Hi9~hb٘ЍlD"̅ۍ0m6bl\]-TmZA1(i`xE1ByTPU 쐅Am�uƚ C?¤dWiKv&td�Z}[T9擖#i7nUu]Sꤌ`kDuO4I>&nťi`5`#yjxJDB! jL`P0C+h5J:V#qe4 C̠@[',D 6,]ɹZK9zS"괎+J! GC)!$\ڞƕi?7d֢ .)v혤ei^g}M ͬ:wL20ZG=SV 6T$^zjn0՗1bM,Cvk�kn\ ]2C] M߇x~"y<;AqkhgUӸfYT_ǚ׷>iq�g6g]:``3Q ^F(F0E!kwI'ϙtAV&$I+ܻ @UP'q5}o >獩T `0$B &=eb0 n2_]pa7bm33oȁw +n\Ъ].`.P ҥbKX(*m{8|KV1Ζ${MaeqØ'uo*#UԿ_33q4`PBZJCjM蕂-ű_#=ױWif>˲GҡVE}XY?*ncf\w] endstream endobj 1542 0 obj << /Length 1331 /Filter /FlateDecode >> stream xWioF_A*r/;.$qj(JfKHuD( kf7wÃ0 $"yép E Dpo8FԲ(F}?pSZU\bqja#^" N""B77FL$ޝ98s..~lڠ` ">df =;}Șz 1# 0ad#{R-29V$Wʫr9ſ r|B_i< F"U>Ue:aMp&[&ydMyqT7mUN58Ȍcilݪږ>cZ]&݉ZeZԍèZVaK[ܺR]%aSxmD}EDILbf`777ƒA7A:£IPa45;is ( (p@՛ Az(a;0~Wߗ]M4қ*cfڡYGٹLa3º@oJ(1H^{:mpPgPH ##j3iX�>GYX8y78cި5r9nmAPK#na'I,-m̝­-BV7nFtztV|G/1Bi(4bDz `ZܢM_"SIrЋAi'Q߻|m"&=blC=EV,@@5Rd[4ꋙ1Pp#^\' @fO KYs]W],q6rͳd>@DћjmcM-7*ۙPg>3Ia[k6,ܯ2Jy+B- nɵE"ҡbw|[؛7;n+oEQʆQcyQCaǣKKb]`*CO & =ն_Gf]DDH7Wi>uREm"j4q4ԻIzރp-Tvl#.cF@b(UV|r"X$2oǃ``&~*&USVU >˹NUڼ|]=˶ԃ{ *8̊d mp f#(&'iuPP 븥Ht1AQRkm9˭T)8Ϧ,+\uՍYLxJ) :dGAbW2_ɬ cXX;tfpr8H+v'NkO=_+cy_vCfxohU|ڦ4^Pu?!*e endstream endobj 1546 0 obj << /Length 1722 /Filter /FlateDecode >> stream xXKs6WI $x4N\Y BRN{JLqUύX['y[$ b>rZ٘̚ģ[֙C$%[9$@6A Bd_MʋU\}<"V C*O#& U9!B#_t oSxjޘ5\&yd՚$,d9 \N.Ư'~mXY.9Q2-ZOr}X%F(!wvnu?c-ӽ۫uo!꒵jr ^:y,˶i֜/DOuG<dMP 1Eeov*7DxӼ-INp;yj^Lv+|wn~_.1,ܙt0ikZG 9v�(FOftDsޘyn3YX=tln&?7# Yۥ!2~պ+gRӭ픊ǻ;p%仉;u"K+XS O5"|B2Y^tn z,zo^ i^YJ6h۰!`е-1{}J|@vqx >wZ#a#>4qILS9>vadgu ^nv9&pB\G}V�3^YI>DQÓ$K]d<M àO1Bh#ƙ7<] ՜VFy43wD 6}Xw~>{]pz!L"=0ٿo;\x1!Mߧ 3yU"} {K53;G&yj`IAiV̠Ml7P{P?g91%Q$(H1n'QG hY˻~Z͌h{z<urf}i3�uCUz0L'-u;ͻ.,4QEӁ 5X|lr/ƄKVMlѷBL#SFb*~8tuuM"BX$SDéD'1aE LE`냤x$%7.8;5_,ʑVpQL &;s͊Sy:�,VeW2otk~``]k&IQ vRJP8(\tI-,Oeӓ'+8rQZiy2FVKoeIeFm,-*uJº:O"QbcYo CH`?6؞[QԻ`oP=o뵉2yB]U&Ǟ:pKVl "Y:{ 7uj zk�j>‡ ֬ҪK{|/[nj4*mxU@('x&PAsFCMRH[S]JB$= zf:+#'6.u#9PՏdnLp< sk#TEz(&.o r 5smUb";_WhE#7TX$g:JK 7R Ds0J! n DjyGj\g~/ m3=nr�8~qeu+F}楸{觴Z<5Z endstream endobj 1550 0 obj << /Length 542 /Filter /FlateDecode >> stream xڭTr0E+$!NsLmyr b: 7 c;3;{ͣ;HRX *P^#ɰPDJT Z_W~PNbJ"ߛuiY$c~}ˣ @cHh6Z>T{Dp$z-b@1ck8Ġcя0b 3XCKT0PbE"^Nӯ!txcjoo (  :`].R iAK0,ol=k"Oyc0?B"w.ɽdztцKY!|kxyuQjҮ7v\A0>6l?R_<W<Sak85Mv,bQtx`qaS|�S4Ycu^9 gKG�&4 j3JVMi4ͤζ+1v:jObj3E:dvYg[�v? endstream endobj 1554 0 obj << /Length 109 /Filter /FlateDecode >> stream xs w3PԳ432SIS01302R036г4QIQ046Ќ w34DRkdniiᜑXPZkdjadkjfY_Z � endstream endobj 1558 0 obj << /Length 854 /Filter /FlateDecode >> stream xڽVKS0WgZz2=LvmA i]Y!2 rە>;_Nc>h<GJ`Lf&Ax4EB&Ipܻ97#QF""Ɗ 5еZ[*0}آPF}tL{!%ºiuHbYa G=k\}hzգ*SBIlV6IZܸ߅wYV޵&#U۸C!(R#O,LJ` BweeX뗡Qv 1(1g P�)>ƉfĞD  |'aF(LTb 1.8V>P0ɔ1m4 ED`W_ (;sk*v:?!/z ! HL ҐS11z@ _eeZ7m{̬,{?;Ӳ͖sʙμGHoͪ{Rئٷ)zsi]V~nо_ݏ-}]Y[[[K�敩ِV枆m{MQqі~8Lѷ\/DƠL"BlE1  [�]ެue` D*{,,v!N,P_~v 76~]َ3iQF'\FV4ȲCJܯ>p^>"J=cDXbuE=XzCcWU0̈x b9X`ˑڪ3BE鏶笁m<FF]0B 5 w/&gX땿BnYxQ _g3 PVML endstream endobj 1563 0 obj << /Length 640 /Filter /FlateDecode >> stream xڥTMo0 WhcJö"@uIZj]tݯI:Y@,Z{ttrxD%$-IY9 :9>կr) &6~}+ !dQf@2uA ǍcI$r& #W/!bD1G!i\1' ,IQf+_d% LA�ߋ`!65AXTf /θKX›W2J248,z< |ϡl$HP2!#5ÒqyIO)mK_4oMfZ-+~u^Kn5&q"o8WgEfv| K5<mv{[Zv̥:Y0�E1~?ih+N#[t29Ÿ,ӛnѰ۸i:"K쓎}c{mBZ2T(}/E)7Cjk KPU[۱O8dr"3K>-/9a΢~X1s.VUYnU=c6ġ80G/*=X^w]7i=:Nkfl%u endstream endobj 1567 0 obj << /Length 1044 /Filter /FlateDecode >> stream xڝWKs6W;SP$%JdfrLf&"A Hp�В}ƒ%f/6ľvzXLWY4`ɺ 'I< ,_mKPw?yLV 4L&(s͖ƷkE`6_G-H4Cݡ( ۏmQա/|k,2ȖadqH&}+(3q' AgF̡` "߻S,9; Y$(e#AjLTRcȥyUY9nQA[F4`Iv٧ XDX",-q)-ے'43r�ǽ G9y';v+]! F!5wA1;I60u_O3tѠ_ [}I+m6&Sg|sD wPAwQER=hONغd|a͏ƚr]P`DmD_;g(ҡm>ޛX)"*.lDВXb۰*Һe#I1i|61A]x6% U>IiZbtlkQ,U{Vmtv4'sbAG,[mHx%h}oAD9dpQ /0Mk�ҿړ8F3zߒFb^nʨ:s}xUĖxGm@!/ձdm"J?� mj=wDT$s̈8*zIsoc L?"(++m_o7;+Z,s# 3`bJu`W#>C @n$+EH;((\ipI91=݊+лQ=Z|{ypQow){ ᗖc ?Sމ,[Ǿ}5^渥~ayRO޳:bO`l|ږ N֊ ׊/ QfOR0-4 "?_�l<otl endstream endobj 1571 0 obj << /Length 1274 /Filter /FlateDecode >> stream xڭW[S6~W3v.Np2AX K^I鏯d) tɊ"}7ǣhԛ-zFQ?ƃ,<k'?Nh{0vORĖڣ|)+ QA!=o~ )q6ǢډhwC#\ q4]#U,tWga/La)-̖_.9,fPn!J`4Z~e(,t"I]!I(.NO!J [x*~rncArՍl+ N..g?Aq)ԎAs D>Du@sё*w1AM"lPj&Hc5N{OP7%زċysI{w[҉4 s�4jc#W-ՂbfB)RiBVB]^_5nrUr$6M1_'̵ dVYwHt_9py QZ5&%1ҹ"?`{rE9sj*r<y.QmOF*s&w¿ =]Q  W6QE+SWڱ=WtQXS*.kHLDVPEr[%S~M5眬ޮF'')rHcLk4Z sJǙ12,gk*f;}m!7JmeŴH\b2dۤYU)ϙ޸hLmM[V_ͱ?5"5>^3`\-FWG7s.팶ہG�/-xaPW?4w+;Ȭ,$*pc, S /0ulFTg'VHliʺ)bLkFMb 7X Ɩ:ZOZnβ8}5<ť/O^#Xu4QDZ܁ٳztX yZkh8αKe;3ul$A0mlׇ3ǫd%!l!4</lL3i'7詆%H8z|FlAm5|Bǽl݈VGXg`59E'͍6#C/8I ,i{=̩px-znHmX4oM@7}lj~d„7<)b Is\Lwyl;h endstream endobj 1575 0 obj << /Length 1143 /Filter /FlateDecode >> stream xW[o8~]5iH�2jڭv4<8Nlt:% !\ss2]\ͺqg쏇ᰳXvF?P^"P np\Ookdjͯ> :^/}cu`tL&70ȍf+/$⼧ x]v0>ly BLR baQ2qd,< 1@KHq ^'ya_E# ^;0_+2̒T^fP< Gʮ.~`<IlLAW;];ǡ ܚ[ RS&JS̜C}O J4 oO\ީ]b^|$&π•0kRF*au\kJ<+`SGi _ g dk)ʈ 0z ` 2ĺ(X֛fjXkfH\\e钴jm68pG\I#V4|N ʁUHi"8&PQ#V.EM^jVΑ (Gz1!;tAْTs M@d*"hZJ- `[at*2}Ǘ_a5v(L3Z ~A%SoKSE(r§Zŭz3!l4bTy9hK#GDƶSADr'ѼRao. FLlg"m]E5;0+D˟1Ӝ2Q\ҝ݅ D.J{+*8b꜕C |U١vZu+VO?_ ւ>힖ה0 [l$(3&GeXY_6P7NbFf ufN)?2TP3פgR_ W;5¬5%Av€]q~ՇGϡk{BL{VD�vT?j ]&Oj\^JVQiu NJbWRV2qD?kl0;";L$Zx0էoyS^=.M endstream endobj 1579 0 obj << /Length 1397 /Filter /FlateDecode >> stream xڝXn6WxS "ǖcAFy(,hf"*Iqя/%Ri"s.stz=ԟQo'~o:gqoz8;_>yl4){dpt?&ņ5b `0ya2)co=J(<AvӎyoJ@y4!kKevA?rx:x,ܝ1a*H\3[;ݘ<W^$6Ó7c;3*M<ܜ?@ʅe <WDQΌKueoqB@qE$?9TF֩&ɿ3̆, ¢ؘx AŋԆYlAZj},I7Dϳ81O*i)Mj+֔u)f c~8yi3[$PI�ڳ$(�2UV){ɳ8\Q6 !ooPK Fxr5Ÿ%s`Wj##1nOȫ| g|TZdTAաÎ:�qy=3v@$ buolݫ0.~)j$o'2/tV Í!DvJhE[RUcADYljιRdܧƩ[a1':g*js CcĒF&�xR~M6eՙ#5oߞ}n킳-Viz+z5e":vRኳA ܖ[ȩKla~-ds{hv�rؓ XW k#/gL;xKt^A2VjExzf4b,&_H: ]chCS9(E&#.rhҤH9VM=]]Q΢[gqT91kXWdFh);ADn,]牯Bgmq�bk>?Knpm cVZӪJQArLuLXϊĂDzKzDf a1#mw2"iKa@sP agZ;`f!"Yp_LiG~Τŀȋ݂'|˂I̟<:Hz_iu-~ P']?^Ww(\iyJZ1=<++KkmIq6x޴ X9A]9B'zDʐ]cFпLZՔ%rGP u4c.Xi5Mir$YJR?]-?F endstream endobj 1583 0 obj << /Length 1412 /Filter /FlateDecode >> stream xڝX[S6~_`F3N(총Ŗ,id;ǖ|:tNf/xڛӳYo.&�6bz[."dco4co2]XQ*xrz4ֿ9`X;yC0W?<7"2s1F9,n)t45r))ti0)ۚjjIJDHth"),q+djK+eB*0JO}G㮈@UX(RdoOwh5k^Pzv©,$u\фڻG҈FJ㴩/q֟4Yr E2&.V88FZ6RD&c &msteŠNqf}J3zE{5[Wl(2XȐL׊_)k|wX-Bҵ<d-Rފ�x*N@z?r oX*/0_@bJ_)2֬'5 ]4P~quPٙv>KUbjk砳9%W^}P؏\yiDs$ Y"$$mY3qTXu۶p :Ұi݂ vd vI+�'p#ol;gx.b�8@;}iF¡A,7` sT"Ag4.]Z_ dcJ�xFuM;GP~I8&1ۉPbLW5 DQשGSꫦ9ڒo`|:bMV˘V#p#4FnQ VJ lCj)i$,hV=7Jlt=A ๧(i&h̩hKԈWZ &:tOۥ ęM+iUjIMBZ`r[O@�4,%MOҗtFf.6LKQ Ѭ"^W@d<ﯟ~\_.O-=Rjㇼr==m]lG( ~QGTk$ Nj]O3\�X,EP�YM3g ;s_'-8m4=W<$ pit$bi['OQETVuSX1WfA@`NGo+/q&�%m&;{SCuHh0;Ѧz7Xu7ܦn :AE vwr!s'Kd{.5t=3F& 4S" .9]S۩%ŶaXT!Qw/[p(/&yVDkNoڗW endstream endobj 1588 0 obj << /Length 1278 /Filter /FlateDecode >> stream xڕWMs(ϯp) [LVe7ݪ=`@1 Pb 93'c ׯ_nV_e,/Gj4+y9r6Zяtqo鲳(ZJRc=||vSx|}'1񤽅rtU,g`<I1kbz.my%?\[_8dQ,˥7'{%/͓_m(T-U8& Q_R#i{Ee1gw_3&ނa 10d^T"eSCE Yhífe<q!6cLA?NJVHX(6@+tQ@FJFn3'41=58R_+syHʭm h9 .éZ`p{xPqD&@>:xN${;G*kbMtPwI6?~8ڟ$=)(mE<R?n_+09.wCɩJ%Rׁ|fx 1:&Թڠ;yJ�r*9d7I֔ۊAQCN}Qc 2&8Gt\@kh9ϛXbblEsal[J4QU_~S*>.'_а_vIUQDzay/ڶak]B`/0cJ;k՝Sy*vc=N(BecbEQ Vu&:%AڥdiNrAT rk4JI``j6ݪϰe+T=.q6Y A1=YS+[L&Ã\ ; ^ [7ɖjKl;戯O�Sde:V̆|TQeLuܘ-yÑ!߹a-wp{ÑJ) -9a-JQc&0-F0=75jh$^ Fqɩ 쏥ڑrf DQgm[�?Kr[7Tˇ/8M ;v!=dEi\jǬyڊr)qXQӷi3'LOLOZ>P:kޠ8ȺeQC�J"A@>�dAA81NZD;i-#5;xa{vdd<lvؓɍ_) 5WIpcURt߁G㐜Ը!n'q_ endstream endobj 1480 0 obj << /Type /ObjStm /N 100 /First 964 /Length 1442 /Filter /FlateDecode >> stream xYKoGcrztd!H1ym$U ^vg�TUuUB!bA AZ $h҂TWm4wfmAC+9T"Jh\)um<&X#M9iCbKkHaʁJrݕʮR5P+% RRC.)$G0uCn(%,r}M B-5JcwG+n%sT笁b)S!C s ̒E,+HRgCPcҌl7T \+vDX) ALK Bέ2A'A^EAb38?IJH %< :6E-3 {ҸtSuFvԳvAr- H IP `[0 2 {)/F=uUS0TKݘ5wj6͘}+\1 &7(=Yw10)` ; 3v~Pbi%[FJP(RrO<lsNN["̎fÓp�gaxreX۷ftU8: ñ:.^t!'%7?9J6pOb*|4wsp|6<VK?ߟ 旋gek_9}N<6:^x|k'|mW y՟}slxx=ӫ  Hd1ᠡ�Ɗ,B-4XMS< ?-^,wWHrGD"Q%&Pk"*j(֕uZD) 3I'Rjwej܊gr+=t@(#nm|+I鿂|/`Xla;v8ν6x5Wް: ^ t-ȍ76R1lH{;˕1ݮ;z@DZAp SITo5է:7#E6(A"5Hee?'GeѦѾ 諔>-[ciSS;ܡCЭf>֮*aDݭiۓF([7bɲY*o@G*oYGk4I/w^@Ft93\CHx4y⠩k y_Q7,P̹6M0# \HlikGZc0ǒej1|�]TFI.XQ(XtY fYw5=82 @onǹԑHnۿB{ڴ=ZSkuHe|_Q7)޻ F3gyzZѽB!|WZe1AJ(ߗR#ʒ-2^am\I oF쀩VHS\]y5ՑWmL_ TƷ endstream endobj 1593 0 obj << /Length 1346 /Filter /FlateDecode >> stream xڭWn6}WP$@%CMl1R-zA@ID" ~}Im%[%dis3r1s> U:M@ߘ6Vk1M 'M52z5M:߫U8W hO&6":w OX칲W+¨]+g es<B?aH.rPW&Pa]~Д5Ӝ Taa/8.!e»{Ruܻg{RH匼gHmWpUo$cˈEN49;$ޖMSIeBd_ HP D?8mB !KZxg1#*kO <C1@Ō*.0Qoa@2Fk,jJnQ;ʐpby|8x:͎Gd}7 ʭvalmMf O^W W0 Za<DK“\ Ielf3hq0悸VA88x<LR?$)sAvj~h/Owu:た0G1_"JC&AK=h}F~fҺZ%=[Q\_g؟ 5JnPNY Pt]hEm:ȁoD[gVw9WWwz"A(ٜ`n[A�ܦ.OV~Ǹ&)qJޕn2g { ; p\L*-G0ْ$4ۃ xr,ixr˪R"VMX#+# /muYc`cFyf#oFJ�<f{,y9zrm1@y�)&>&\Cu,u d5FyO(I',2]oY\<iZ-R bmvp\ KZи}g7,N5"XO>Yr Np8G"$)N7C?@T(&P-KV _-Aw<"Z"q]38< =N8СFGչk,)$V_\E+NՄ갴_K.3JPW9j|P-O Vԩ1ZH1NJ3{R?uO55;rݚ`OzxNb͗>c9YE5tPӀcUqi˘Hj |'DOH\~w\->/}25qG}F{`sv`M3 gw<\ endstream endobj 1597 0 obj << /Length 1579 /Filter /FlateDecode >> stream xڭXKs8ϯT-H$;N&9nQ–&#maV aKujw3LL;a4vdY&'QlR;<NEAE^Nq*:نϸtyŰsM.wA=Dq)Ev7-pgA2J6>F7h.i2gvJ\Xa5$e9X&.`| BecS>0L뜦Q+ZoRŚCq-SNԓnj& /c̦\&,6x[3)*AQLd )j̙@+* .pR4m/{ * ZP ov*'?M6_7{z-!h](1rV6*⍷W,Io궿f4,Ġ6LSYAR^׹aj$~-lܘg;Hi\Y"kЏ*2 3$!4:̆LˣP[H2r%_ʿ+H8o6bLgBCqo Od'pII NQv 8Pxf$&L9[t�Sk]; W>L5hB*sPDC6v}Oʩ͠0Z1�1~F55H>9<[ndpcABՑsoa/CA݋(MWbRвނE&$ֻ* |X~V΀7[70p _T y|Sx`&Ua[`e?X[zg99/ wˍ IL1P0>t.bW)5"z.X?hjJk�gpn y,WX}W쯁6MZz\&6;{Ԯ` 4 +t:N׌ݨk\rƫVVF>`規r<0IF@~nathh6gDB6ljѼW~|ې03D! Rϯx-7y.c:OԊĿAF1lSoCvg�ޓyK%ӘZX54@dW%)35@[ 됡/7):7 C{ďuQ2R:iΛ{MVAJ#w [VQQ[&[fʚtp%*?g^i K-d 9H[Bm w93j uoʋZJѼ*[2]țP+3+6i?.;NFQ*-H L(F֨lzxtp}p7kzZJٷm-3uB2Cˊ#pNB- tVkzǸaz|wcb { MdUB3R)69:{Ƥ<mz�ju^`t r�~;rWD}A<0ȳA"DoWWo ĮO| 8R%?KɈ Tt/;xz endstream endobj 1601 0 obj << /Length 1414 /Filter /FlateDecode >> stream xڽXMs6Whrg",ۚtuǞXmIK5 hY]Xâd_z2 o.qʛF3gv⟌l길p2qhdȟ={p0C&;/~?:G*h<鴶OG\jP,< R[yIC]?ZK%1bP̜ۍ1& C,ҘUVJ *& U\m](g18&\ճ10cCf+0�dc#\h.Y|F,-%l )(@=˵EN1Ѷ,Yڵ 2 f''u[(zqRfփz_?/1K/^ox wYw&o͙O`0]߽m_b2H_3 g�%wCU %Q%lHd!3)<H0Ł.VvU5ϣq ~Z(Ў߷Ms*n:"%K<$h@YvWYQx@ilIW'Lغh6U҂osP�ij!elR܉ESgPh⛀r*u!ۯG]W DwUB.R<,YEx`Tz0JiPRdF/5q($b"(kd_sE ׃_!]!8S)Xνj`a2&e۝ H>eq�QVAv2ejPca❇ Khw`\'Ay)/Y kub}i}E�fŊ ⾐!Mu lk�}ަx/ch,R"<_nR©XhfekVsPm]E0,=7@7(>\sN"МBְox S-9U?aE dͩƷU 7X" ˊߍm*[G)ek tWkN}'Dmn]8ii{+c)5/uN*ڕN*_`'^v,jPW6 4-ҺȔB\JoeBcm;ڰ0Q*K{_,A]hUlZ0Fwݍ yjtn b{:0~blo~uriDq3$]YV3-S&KrYfS;ܮU?a8S).k-6Ӧ5L\/2.ɞq_yt*,{ӻ`vQh[FvQ NvfLzpߡ*68 AEoL;~D8�Y0ߘU%jB?0f${wxy endstream endobj 1605 0 obj << /Length 148 /Filter /FlateDecode >> stream x]= _qc;i ոfTh%)T14=m%Zǂ55Za s˪!hMSǯ]GӨ3^&=&_~]*/*Yi ej8)Do; endstream endobj 1619 0 obj << /Length1 1427 /Length2 6389 /Length3 0 /Length 7362 /Filter /FlateDecode >> stream xڍwT6ҤAZTIAIJB7&]w)R*RHQQz{oe䝙gf<{m`̯hԐ,?H�(P@�(DaǺSp8!e4 TX<P�hy@�H\ h) n�h!0 2僆;:ar@|n04 F�tX'~E(`aXqbQR^^^`7�(c�F0 vM`#^`4 w¡0⁰ƚ:�} 9��_d,GJCH7G80��#$> !x�5EC�?0P4`?gYͪ{e POA#p]H/ߖas {)T(sa@ qa Q��: \tgE!Q�0 C{�X?(@ =@`pſ06po%O?�'k<WTRBz|�B@�("?D8 ?Q\ g1=$0�׿nB_3hHW7>xz`2Eŀo9vuapjbx9("�E~57�:oO0$gë ꂿF0xn1xaO?PE@?'$*�` -Q//S{/vH,>DS<hQI ^n_ & P4/u`0(Ň)$T:Ĺ&JɋeXd+BІ ۣ:f`5LC7Hƹ]O0gݎr-[>?ښ#$nbD)&')JR%hry{c*j'zqҕkuTf3K}dm2qRUd^m#Jꅾn -χ+ð4*"+fxnfBԯ+l<N9vZ޴͕!d;bA) V?愳5%`̺?hjLOt.zhjZp&Ȟ-xFWU Ͳ*/}Cp~/k>W脹DS\dHKUOxZ5}Dwڔ8+1'[ ue_Nȿ&uͣ-F{TH,@KK{eqzyϏw"[ )<Kb7qg�= T ivGJB|?ZRDCgF S<tm-˴4pݤe}*']}Hg8Uqa97{iR 2ɧ6wnd^cle\ mo|Wb6+?}8xaWFW u}5~<wHR!ǖvWދq =d{%_kZW r_Xzikzks-<:'} 9thIu?0e�LR0wF; ,0ZB_J|9\QrQ_zRy.y|61f20`uڙc4%/5B(dIH6owǖl&FQ'4YWeLf773[L}@i{"R|KǞtwڏyfyq#7.[T⮺�n{ȁ{!b+XamjPyɃxو ڧ]\8lwح%Vnuܚ9J31� ~h2GmbrՁ4׼rHMΈlɥorAקL#ye/JQfš(#[X;}N6] ǮN[vdž,8wЮ&qWI[$ܤ 9'۴.Pst\yl+7+WVT 9(x\me/ 0]kD`Qzy24sMRO" 䄵ow rm-ŮSl!׃>3kE K1d72S^@4ĸlѺw#6Äp΅t ON6<vߋ^Kw@;S_Ydͪ;b:k{qDbOlͪ_\8$X"0 vQJ=w&0g!I^lU/'jw2!tq.*Ftmߵu¦le=}qRڙ gEL;DZpg5\ş ( ko $aj\GqG hi-i.zgc]*8+E+=|OT?s3!ǐ3KM`m'}UK�pc ~عOf7̴H< ffTZ/2ᚃf*8o%O% F5/m؋M jsv_c!~!XqXyz[wA4"+znMZ GlL.<Kz̐CZu m;MYKFYB]ZzqnO+ݟU4s[߿ȚE͌6܏g1/x`�up k蕯.N/zqI*_-||}M=UcIik4#+WV~skޕ!;=sQ-j~`(N {-M{\݌׮hY2$8LQI<tt\0|٘DX>rgJqgǕΥ<6-8o_;)ПęI}Tm&,2wNꌡXG2\k!g Qu6#EMtD}̵pc;K Cd+p;LZW-k'<Qt]3gǮW'ćSaAݳv/ Q-,w&laԪ׌WL_(/*D?DRy먼iWLjxp֣Wֈ 5ˡ{UH+"fz*#|&ծsdUD;O][ . ½LYy Xc/RzFC(YI~053P)gl!Q$&e$rUӋΗpW9qi}ќӛR{B-zVaζPw[;h؍`n*D#)I-f$q>g۷IYN` M(mCͷhbTV/6Q4@71>;6g)AJ›k^s1YiPZ]LX1aG9v{uaCysBg9E=1kZC)^a57.o  R,�^ aKW҉dT2mMVDpO?P&Ks;5]YF͹Ba2 <ӕrL9]*Pr0 �Q_^]Ty~ۥ2N.?T<V#d?˸͹rIdU>vV-UVnPwY<q`F8d+O}3fAfD1džW__|:1!<[7Q_F&**&oV?j6'GM츐+Qs}]f|GCENM?gT>:\:;Gy'Ĉc?8:t1B=~Щ }aG&%yH]isMFp(B]rd4N"$K ^-S0~[+&O˕/v*Zxm-a)\{7j#X0$Pْ$%d-bѐ+M NHW{$<kG0c|84)&bZ Ss"CT_=Ou=dnf(hd1^Q7Lrg{tӞ9 A|Z̠"x㪨@)FͺIZC"ek{] v`6?-xLXr̙ˉ<h2s8z7DK_$9h"Qí7{uH'#^C7Do?Ki&G}VB>~WBʃ'u;b\*YGuAGkpcm[?Sʮ51ꎏӎ^3IQ)J]ѷ(wڻL+^8f#Pjp~TM[&'(S�-7zë̞_j|TN=Xwz~*k#\>G}vޞIC갎WK&H\6;5TeK"�-4|e{(8|ǒ*b2qlj@#dz&=,į`"e:nnt.=,OЏ (5JzЭJ[if GIIZV:ٯ5.)rUa^;Tsp͜U>j$IGEQjoTEBvoz'qmH:Wu4\9б7̟(9'3 MC .O*?QV[^EǍڥles Y϶ג,_KP6in_j^ȫj3efrD؅-zO6?3}RLRCh<=P,O4A0W@;CF1H!J /ִk}.qk1&'*53J L*[,:ɂ{k.a=ۛ\tT`ک.YF`?!>^RXVP;1}olݹܷ̽]~'hϊ*!}u'ˮe]`8�9Q@YOD۪av{U^#AE y~ZVLt|Ic*2܁)[օgߒ_|O(431Ä}MSw' C^DPůnح^Bx.5RQrVn%\^Vi٫<IPQa5.{oӢRnB*?S^KVS"F7Y߮P%cSs dkZzH/]푽H>Mӗ\ SbxbEcC'mܔ'bdJK!WTH^3[>QI~ͼn$|Mi@UZ&; > /(HJJؑEM;D#ް1b{h(�6\2)jo9NxTlb_q1c] >U Mحp3*HY2w~z=,+XM R3W*dĘS'ra9h8\vK�sy|y29:\TPwIDz_i,'> os tRWAuCvLirih.toOUjߐm" 2. <nBok+  l5=/N;c/ +<~&>X"ڸUU#cEPK:xX1x;cR4hy}ē.I{K 4 f'픯<wdҗ@(Q(lMX\.y컈7wg-%lkoM!wq߇R}歼ĩڵS&^bMڜ7u9EuDj_μp"<iXOJI_dsFѓidLc`ښ\ե�4rO,D\sI/1 2i=oSlZHda!:FM9W.q ~pj]j34(8zmia_:DQZ๐t2Qu;7FjW'm: Dm *ݛ:>MuJ ] 1F 6\;VЫټ%vwi{>![%y cqZ׬T+juQdUJ iB9 /Ӂ2u39 n Y{s}iAQVH0 {`!2{ju À[< _6*+3V0R< t `4مLQ)Jv '; :[E\@l W*?Zqpw\N TDϾ- =\d-g>wbAJMD܄{NDP.|7VyYwc2f)?7V�<pCØIMG~mv9 c ōPn:aXc泌jz߈=˃r_ť^']E珼ORrxc;Io#*m)0D|�ˑQyomHxVqs3sL,╡'U-)Sq<c3f༊a$ӻ}1q75hR mܨ#IyM!C;hd΃KONpTz);ЏVXxA C:_.<Z(;pH4xH@7ZjfKՖ@T)=oT`@b& @ppq^4vKiT#J=OM@ͻ:B6O63G,\l⅐}Dش>7>+1B\^'O{CmqNG*kON'Lpd-g/ JԟfM2o恇tlnxlfeW}y^ip><E.4H]1glf<A6wjUHt6YMlE_f!JWud*j.jFµ=8K*uWcI7Xe}$+y42mf.fwsYND1Ƭ\-)}MMнs?:Q endstream endobj 1621 0 obj << /Length1 1366 /Length2 5993 /Length3 0 /Length 6927 /Filter /FlateDecode >> stream xڍwT6 HР Ht8L0CtJH( 4RR"! J}9=gyמ>.#S8x@Dr* `% Da1rQ!^x: bh�"@ r`0  �u 7'%rr'„�ow@ C@pgAр)Bx#+ u_3`D|pWӀ wo|3�^FO7􀩎`�+_޿00Ga�$ � 5D( E{bP( u~4U(ſP^(&AYWú!0^SG0+ Da_A0(o_ :' � wuF($ �/7"0? (!�y'j򏌧�؀ �_ϿNvxῧ 221Qwb�$ "&  b)@g #(BW2_5EDg,,@dKa]L'F�P7/^UP ğVŢmB'DB,GD!F(/C={ d~?P-�!%I �887M(wH,Ĥ�ӯ%|7x�7;@!`._, IPuPX,j0*?6 k]-w1NV5"S-b}[wbܩ3=P*챷4%_WvTC.P)zh >9%&2*#:[5~wI.tN YשuIF4CC=RJuW3&'V4]:(ު5'̧p]51:V'm s%>"+ 0e~86zT1J)k"j4L9D] '*l K"EY6H\z٢Ժ+0 9& 10=S_7Q$%9(Lϧ&ɚTO VЮnĴ)j=[lFO/Nt2ٰ-Mr< k|FϘwBol>iT٭hC@P[a+v.'J͑lqUi =!ւ^>7GI\DiZs ~#f4_BqqFfGWf\@Rl(Gv>rz"w^S0~~2v6n fo_%bU_vϰ 1|QDRf}ʸ)Yft8ϻS4Z;OJ;  A{?FM5u17#oYX60@:'u]^rv<Ji7hT@9('mm2xšϜޓhۓGtC͸!}9 Փ/[CrS*v9){~Kf0_?%Q:-pEO4{]]ހ˒:23+ߛƬ|174Ŵᣡʽ% &o} ۹ӣ 9YOsgVRql28SC(;5Ҍ bRu ?Vd}SY_0jOlD#IGS;/'9{v{aE$`Dtf rI`"|xu`'#c:h&Fȅcnyn.ܺ0hb ~oĥg>T@{C $v$Q+s8 p_A-Wɤo0h XxmM}Vh꫽4{rcUjq:d/DMyݖIş<2]BH^YǗeOkQ)F}(ny\1" w<!yZP'M*h<cm)8َEҦ{ J j'朷3ͿrotJu366wSG#̜G'[!g0 P;m*n "sODK+*k0FJ8^yLAIФBrG򾹪b19ƔLfr(4;Tq>}X с?(lm0tjTyfX{E`/ssv6IsD>´u;UhκKg v\yGߤ5|"<'9&3;%l~@׸EYg>iMh*+Ȁv '] _?xl8PD/cyI| q&FF- OfI}-V. uW̖ǝB 5&mRˋ-s gOId)[:Wh.iq\ Ix될-_=lI_M~9uәT`8m]0=;(L2j4zn:p3u4ڜyTCN{i7{Cwwh7e7�]w/nPHhƣ+Hxq6XL \֢AWWc-4&Xzaf)v ގ`JA VLk+CX=\[^ @2{j#V*I6*0VSQ>o.c;J! xŠ3]GV**./ʟyᨌ2̓51 |biMxA͒AfnQȋ:E7qF^k 5gƝ�/@Q:dT|'i?{Բisʽ*cIM v i.Lx8>8&GR# b[NCeybNH5ʸ!k@D-ʣJ0U{C Md4}Lel"xb^5 dX"J׹ۻD߷PEBY(Qk~~FMw3dNxNUL_󌸍BFmU_aO=ZR g(CDB|(1r#]7DT޾df$.n)jYf5ݵ)99K_8_{m y$70"m=ֵac]IYŭ!nVB+E'rkK:Ɋǒ9' %.; }*uܞx~*z,hzrQ3oZaFKNtS?2Wjn(W]ϣFw:H1wO"qɴo/^t|'AO~ cqbǽTK 9݀|4Gg,j('M և*i'-G5+0t7l0?%"Gxϛ'x/гnpsF4& kS^(?~:6l<C[IV-=p=WԪf)V>%iŏ60NYm塯5S,Ugb²r[}57\(iϧO;JX/Ƅ{KM %7 ~XwIR0EDȲWg 7ǓrTt`gAVd}{uirmLY KOӑ"2h5( pQO)u(/N:p4G!Es@^:/KtkH]~)cRU>!v *7zdOÚmKjioʳ<$#ܶi5_ blZ7U&,NfR?~ ׊~T|< g_MZP"\%1}`]mbT+ Pȝ[%*R$T$cVhgC]ŮFc7ICwhHWEE)J~r(x]xݰU 1_YШvϔǼ/)颴".72*{sU D#>J8uaЇ?Tќeؤjdbu%d{2n~a<lӜD+Cӎ밸w'}g孎 ßh3NRUJ1M[n=Ձ`7]\+_#62VytEx̽+2g!fN@.wRS~SNwCٗJ/WN =0?fk; dB~iފE|![I;֦ұ,?SGW=D iz$@ kǏ[xq<3?ҭFey5{y){TY/yMoH,| LPd!X3{lg>IN9'RvS|4ML򅜧d ZMg?{aEjΰJ21?vSMpu¥Grˇ܄!GgK4uxqgYƋ۾tB⼛Of8BgPP9),#)4sQR3 *u.! c.2&BR;Xr*f>E&ݳ2:�ႦV"鰬2ؐ7'j0</׻eS~P ik ?y@ ]pGR;=Gub̍##T5R ! @齫j;\D{/Ne~?%K1.ƔRM%9SJR/}Ͷ"E)] e\ze|\P][8V5!ZW4 eW4%AӣġM<LVp` $N1]`/[qBWnҫmqyqVP ^P3EܴXv:^ْ='mӮlk,$Z _*]s'= /įWsv[\>:5GO#G ( -A^i9" [x4k+a7L.OuLeE.=p.uQ Iͻ/_Zm+6fuCն(Βi/)HK!~.,>Cr5v]U.V\ّNrQ"02poNв,UE>6z/{vyЬJӿy\$ZSM:CQYs^ "۷l`I5=rMIA0p�WNRB\c 9\Sx(_x jK6' })=.*8TѠMbѵ-^lK[S#Pk1_L=pYCIsC{A_ĝi4[R@ƕ1<q?> e xHܻ3=&]tlZ]!,j<[g* mbb+g*}~ H.%fӽ Vz܂υ_z2 07+bR&TPi/HQ4q1TZqQ3Д XQ{:zKa%τt\V~r[{f`}RhGPf#u:Eԣ AϪLO紏hZwsA]KS;\Y6;8R0896>v?O<'aLFwZkO} ),bSX% ! u2vm5flFZn>Z[,>xst 6EXE1SYjb)>Z`׮X|3n8-; C<v[E962֏‘J Dt[C–Wlq]4;L]~ϧ2A֝b4b/mnk'&c.Xk;Q;tar8ȯOTy`!3~uHQ?,ҳxR,#mJSprfW|ホ{}oHXj/ZyA3.vpv^5NEwzF ~Z7}rݡ=PVGYKQE?<#*%whgnxJNS\<:Moq.Lu$Jɧ)ykL 6z%۹>"2ҏfT =W7)╻J1:-o2i:J n(ka'ӹс,3˄̽U'3RHs +spTX�xDx'ۨePZv9Mq"pFF7Oir^f3s GN%N(UH6bgcE*7綁l3&'#<g'_oALz6xx%ߕư$EҌ?4noS*AZTV T_1̊衔R {ʱǴгN*+ f\Ê?cm J"yfeO`Sk9|j~s? endstream endobj 1623 0 obj << /Length1 1411 /Length2 6231 /Length3 0 /Length 7191 /Filter /FlateDecode >> stream xڍt46GԨnK0QCQB0 !DMF;;)o[oyg.v#SADAB" H%2п0)C"dA q:#/� IY *""/"% C`.D@}HԐ^(;w̿�3�xBQ0gЇݡ!p Wx!Qn|? @}(? `� S)`"]p3E@Q�pT[0"w@W 3An+  zB���A"B>H?CpߙC�1�<g #*QW-k \ԐPڇW~0w:{Gݸ.p6G})8? HHɈPo�.+Y U\qE@CaPi Qm\`h C':㚏�"8�_nDC_aS K>mSUE�"�%2)"a i/_m+-_> 8BNDBKMῢD }f pE@S-Vo6.F0M!}`@ךFI pF1Q I�BAIqM$`n]E  !h +/pEHu' a/ C]ѿLP_O KAP74}Q86Pp9k{�3Y.ʣ< A%|W<+͸7WyD5<vVSq%6ٸ$IRX޼5w,$̂f!g!wj?pe{J_5zEsߢ33d\*KvL4`f+)s-B|z+rhoe~D`9чGAf> LL6,{]): Sj^RN R LUe~]Aπ(i hPtu 42;PՏ2.! k ς1U oZA4m&eYR 1K PmZ* gҧh{?UDDl Hd|287tmO};"RSVcF oNFG<rʡH^H0M/i^bggfhIGݽ@#\X ݫ-2.EEtߐG[X8Վ_ͤr4 cpp3 3U?vϪGf O0\<cCo73 WW.Z<j!W$MU?ϯ05;|u3hyt{Kg0kFxF�>bgVAk|JsYgz{e՛W>*ky<3z#YAlJ|gh䣋9gՕ̿-J>{9ch+"iV54}TO6ŵ݅0>VW%-ж?JiBc$%([vyUR!r5<49Xd澆; …Wn`q^D {VzRラd]}ܬ:˘pߚɎ~ '|6]QiG*e̡+�#yq0ˎP oBN2: &v\ B - dd9e7nW[,n(np]S EfYu_Zw= e|:bw \Bx!Ƥp@4lZWhJ{_�fn0$NFU3)+K$x]fQCAIm#NNɷjd9Ƶ!hwGaub&ݮQnQ.NA:]LiȻŢ-A3IiٱC^zMDQ!`V%W)3ރv[n/Xn…-'"5.vjy=#lz.% 7kwAUv7EsAGG}m\-Ot_gFbg3%m/9?D c).ą큒&f�0EABt۟PpmmifawFvEޮzSw㊑ECjs'!uw;w*,csʉKd9ckWZrg]34DsdY-TLU1?$h0jY*p/ d7kǬ`$xQ&cȤk-f [TtCd4#fϙ|\_ /.p�Ag+r3?ٞ dL?ڧjs6mKY|Q�FDB q4(@/Y>Te]{|yʴ}$1fӄ>C8�(Sh˯l{,1gR]EfB;'Gܓ}>zN|�5>y )v]kdMe7g"-b["u#}6'iLIX~Bn,;n*uaL^Zh5r9&œ2xX|htGp^[Ic�6qz32D.P$3m_+H򱿳a:jГF+ܕ<f maPd0~5d8`*cn7":$$KkFyUT;bf௸W*F+x{,'"^DLt/a$_Mjm-A*Z/Imj _,&KWV<tL)3.a�άU>MʑzwH_.?z^~ZB{j5TMf׭oἬ** )i__ ;r[aA\Ⱥ�v>3Q[?VSgs'{39n ˘o"%IXkJU>'Z :nAc\oH1J}=(}(>%"{`_nkyq~tV}9Zih0> e+5Qi8F[|{>842-2GX̨̺ML,>b5ay$k4gpi2k$y=t4?u!<lsHr:󺡌E4ݖͷԷ_;bu<3~t| 33jo�8;FŘr3ՕzTJo6nO?mkٰ֗1'Y5^?ԍlzS^ocC=>]Hh-jxރ$/cf34 izo 64&p@<#ˡ'#MQ&-_[i ܲ4ӄ~~Q46$$<54o~Sovvx.9g S3ڦ;Y[iu >{[tZ''#djjl Ba67YEdsN^n>F]8K{ҹ>]ӐM^=hIyXա\53e̮P=1ѥ;{V\vi<OҔXF7q+ćRK`k@wF=#UG'dVŃ#=Q1 zh Miܤ&-5 W-;"[CPJOچ KQTJNlGG{7�:chEےydMY6NےqǞ%|JxoM z-&,&w٣֙oJ/.݌BKYy#D#/zu<=t5unKv∱U '.v$}XhܚB尻h"hxV1 ԣ@$*:;DO&U͢H.ёmFj̖$}[jRŧO^Ob kyyT-(wŔܾfOv}YC;m@ѻH ^NZIcK ۞1ʢ˒}1멁Z�멤OF[#@j ̹F滬ЎKdbE:)Q?+9YkKž^RgɱHV vΦfT7<SkJn9%w#!|m!륂L\' ]ڷo;ܯvc5EB$�}#k>9Vˉ̷/3X'D+K'M^'=xHYաjEw/`*tYIqo4NjE;ċ|tǪ*W xʦZ)I?.Cx4{v eV=0~A ?m3{na=^_]CfS׾n[,L]q2fei~z_YUmRhO>4Ʈq3P낸!':~9W#nO$QsWH2e<cr21"\6M%9>i_ϻWh:cQ,~ɏıG}6WƾTq7hԹFM/Ȫ=YĘ̪ ^Xi)Nv3_RPgf~gӷ3o6_5Dg-d?FL8@ #->{+εj}ec|o/hqjb W|{19zOZCzA¨ȳ;&Bk{g~<mB<ݦ Mu]S6FdW{#jﰭ*ߗjJ8h_9>D ?";K"_"NC]1n2,7j4u$./j7U \UZ_7M/6o\FQ}cQۗ}8z$`HVA_#_<囯`:j{el^0&1E]k1-Xq.u$7pû-276oEvseh;k yަu։Ίmd{6WZzZ3@+aІmʗ\.^g~BGVvxҞx*ǁ]YM !7saz(Pη+'Ka˛ -!b}>Aܺ|dS:AzEzKP=`SQp(jrLycSFKg{FΌ;8FOBr$1'q Y|طݟ&Lcu8])t|RZ/_noփ"3o%?OJR\xu�"-X=D^X}ڶ{:䎌nknaF?E ?k+7)TB߿75sҙ40aZJ̼J1I=0C_zZa/ gSү7'KR/{XQJ_?h> 3Xhk WzW4_wJY|tdZ^V&;RH?'o_x1W܆pHjmeh5T|;gvU2WƳKss yb]u|plr~(:\ICw@ݮqYsLcv'vLd1N6&:O+v^`AYD41~[CT7v8<@v%,G%`]C++30nckP2Po2\]1j)/s! ZVr4)4)a k4?L,ƠZO ̚,фZ4%V?`G~ q~nUCz@cb$yVHURe[l26[ZԾlɥ2EB+87'>]gtEti<wjqWF{Hvf~M]6z$`r.ԣlq_e`}/4Eo”&>_63YIElȖ)hӓw.Ucɧ:vSYG!D_=@UVPt% %L]:~Ml!$ѽ,f? }~nUa;5#oh%|Ĥ3>\ɆAݔLad;DLGHK;UoӋND8DŇ|ti Qf|nT GḈPRA�_2 |,>CW]Ai|%&Od }1û.Mѱ>-#FR Erp־.V^γeGQD%f\ u=[8/ڮ syqo1+}O$) 6z\Nt˺rilwf ܬSCk %rDqnmܔ&ObIPy㼓=Tq^fJ?Zҗ7Mn̅@W;�a֟d>R;\G}KD`鯞Zi>r}Aj =Ýp" li8(aNo\|@ ޟ&A_t}<;\{-ut D/3iL'YIYk)#5TՉr¿4w[vʭNHV\@RsJ=1weu ۞!Fuak. d7rͽ-讞aIlr{d'åk"7-gc$? %Ըa=aGp#W;N2J7.|?WN]OkMz!:+r{UY]շjee/4KjؕQQ2+ $ e(G.N:|h8pe6)Y{Gal #TP>1p]It�< endstream endobj 1625 0 obj << /Length1 1455 /Length2 6457 /Length3 0 /Length 7446 /Filter /FlateDecode >> stream xڍxT[.Ik{ޫԐ$޻ Az" Ett"=|w{WJ3g<n#Sa( DA"@Y5�E@1nn3747NmF!PL�$eAR@ @ }ݠ�}Cp!\\ј}~A )�O�Ѯ0O̎0` 'F{Ɋ=Q"HoE~!`C}aP`O؟DHfn Hg�p7 ¸ 0o�fw Ap� +3Azzn0A�` G!1`_!N T11vBDPn_5 9f T CQ$SwA0 " 9L[� �C\Em`m cj Bz1eBܜa @{B A�'o7 #?�OvAx?-7Rka!5"Ab2�aI �I$�!cvj#�Ŝ)�ߟ;\%[]o*)Hmn? r}И)GbfTK_xU L hamp7? j䆆p_wC(_7 /f [o 3CWAB $�  �0S 3@TDc\�C�Ho_b~ c 0BuC<Pp0(l(r”� $˯h'ݗM*~[Sk hŇAzw^Su6ܜx`T;:Y崿maJV KcxCXti drzAuaJhgÛe:Fj@|v^]}'#RܻdL16zڝ5`&5o#Ot%biiu8'2G2 uxT%j9+<cyVpV͗<is1Pa:ӂxP<rY`UfGfP.UF(xQ8d @<ZM{2ahKǔ ]\z#UI#8ׄkl� 76-!/سg/⎑\X^F[e<Ֆ8Ee!!n]D9͇=#wWYfi3BԌjLo+׀Z6F%|S 7";ÁogՍ(7n|ŷOw>#-Xe־~j2XJ0Po_vڎJTZ px4sw$%`oV91Q x]{Ds^YsWRͅ/6#oTK12 <2Axad_mb"X$p%7e6\IT-WwYt5B.p+"5 je("@)tz~'Aժ2봅2+#cbb7:kZA$ c{}>ϐdW&O*:qξȅk ӣ1q=f,v\0"'STV#fu^@F :,?do +@V9?5؇oznRr֭5{ʡ}#o;7Pp@[M~QUa0(xf57T%:SRza]2q( d˃]J-6+LS٨ڞ0grkTWhJH> T<J?QHAM QѾ4ǩm[ΧjizA.ģ%Ei8NLbH?MY7vؔv~[b6,Uӊ͢_1My467cAhռJ_e_i-Ku/"[#*dErAxvVsW,)2.Ӑ?(5<8iUI#SAqT7˂U'^\=Y.F979>lajF0Ib֍apN9 \R#iaU�=\7WOvm"$oQIó6:yE9̶d8kg[#zL9Kv}LHT$N$Uޖ"m55ts]؉L ύ)&仑cco7Z?,ՒDbr~<.`u.Gnn[ٜ۝*-8KY? }L>NȤq9.ә/:%/*Zl.xPҷiex1-n�A&v )qrGWq6LILTrm?'Un~pY(0sjHrs;RωƻLCez3ϖS m3He=W]Nۋs+\| zVQRMB?QXHmApymZ=VNUzlEGe3ta`fPsI~W5%GAUC7 3bKܔ@ϰ)>ƒ=/jn3ou5Dge> M//aI}d7SdQ᜕~{ˏ]6Rkkidi'’b6P C;M| WTå"u-iWK ⭽=k9{(}9ul_׀^LwM:NUF[^1.ulA{`EXcZ`5iΕX~on]j8Sf"K?"Z-OwG*?S",<G1ޫtQg88Zzޕ-l,^m%Ltڕ1_d8| <=Tto4?=w/!"t5~tP�wd|W<H<>ᕟY% D/ɓK"4$n=}.G٩*r$tᘍxšwO|%l-pby"6g>ūP�dOC):1hz`T"!KO2Z8x̎@1Ycn,aL^χS Q8"VQi,/f)3+=Ī<tK<&߇Օ1# wKx4=SIU9Sـ8Z;�8HoV°M֭r(["35꪿4yCRT/qed(v L:L d3Ygߨd 6 EX༵h \{:|F˂Y}zӫ:G'ݪTˢu p|]1 .ʹEU"zy<qQD`3F|Ul![Y$.^*BMB ubTjcR_H3r,P|լff�M ׺qD8Y`L}Fa=N>![s"~:塚 Z7اfqu,QE@d- ot2rH5ow@zޓ +sg?9|E\*tDlwyM~_mR/p,a؛ )휾1yi5û^ͩH  =";~C &]|IdAm)Zq̆}Wӓ[|i{Y$ʃa!_> |pgXrmZ1{BᡢmϠInZ:gB@S-`:{ QƢXyt,X~uzE/aϽZv�^|/^*7_6y+ * WO=wkF[)*-+\`8!XS18Y)r.K &MyT_"/O6;/I{42+"D,v\Ѕ\\v!W,sO&N?b7>2KsZ:n;}buWsNǂ Ufb2O @9bϓ 7Gy߳ 7F=NDj<'f:.nm4:r e6f+V;ϜwT4Vlso\ uYRq]q=QeXUSډ2-,`q h 2}(S>ZalѺ/Ѥb싇ĠXهwx/ls ~:S7/u^T"ik&78~%nծwgfAi4*N.j)5OzЬ҈tl`]K^/ ̜*A(Og- w|哜ζ,lkZNgZA~Q&sB$4_h/X0)y=5ZTx90:Gp|^zGwȵ%ԠզO{a/>\،>p3|lۘoe kkCL (" ߄VSy8O>:REa{'k{}gao- WĕRjOZ2RP[Gg'TYѤi)pDn<Em>TJq{Dpp}bBcFno=YzYŻ~9\}}m{vT2ƢUj#FS ut.M?w9=_B[tfjrJ4wpG9#>>F#uk9&% ߋ$'$,'jZ*7<fJl1GE?~]35>EhV&q}eݜ`Rb+-A2OpSZ[_"Qh;KJ }VUQ�3eχvv87c 2=E62" om5,? a8+]5+nͻͦW3[>PCA\hV > v4 PbG=0+<'Uv|U!a}Jc<p3N#Y掬�R:4d]LӦCbGEYM΄U#oԓOtUO J!oQqy>̡yt2RDydad"8#)-U@|qb s!h>qi Ii*!o QȬ4pd&%O/}J=S7N3'zC% CW$\W#CeE*[`JKc{/ڰ(\7q+|W'&?w93"Gyfm)lg)Qc\έ ]ٶK`)17xoI79-衽%f)R@9{9~&kU^[9Yպ})5I ݼ^k N55] RBʃnG-0BL[,z3T#BX^Sjc3n еF]ٛ1XB+s–wqun>mW|gU&p]JmF :&h�9tWf'8澺!lvT1 Y):\P؏H$6yߑz+37cZ[A-G_S'-aݻqW\ͩ靕ftdX)! R nsģ&}(y9{jAt@1AjAs73NaɆ5>u]6CB8>e?;Jd׏l*ģ/YŰ}II:V&in`d.p@o=$@MTc,72wv]KaPKns,$UO:W{uM$ -{㳹g50͙vi<C7`k `#o/ =5Ll2|}%FiR=Jbw=xOe6cg@\[E/j}ҧ0ųs hӋ!nֈC]Q/˕絜7|Hr5`CM'LD͝U_r?8?a:;n2S }(WCEhtm hKw7.56`b/4:Q/̗:@/8)-F~2q[0[rΚz M¾}y/T$ګ٢Jדykdv`HLϩv%3L8w=Wl.kO| C|B+E$SYhr?.[*!ruYy^ԩi:zP5_! ?E wK T 6Ƚ"4gc{o~f%/.?abBL0SwؗۺUd:M 0#@C$1=h\Γ3;`'Q?0?ZLlp[k5teU4 ?S$v\khaդ0E S(\"\D vin lyғc\X{mĔ|dJ=mbՒo0{#1%D%Ea@Xا\ ļ6M狦$?_` }q!Z1NzyKa>Jµ/]]Vtzk H1>{|a|@,<9@NRk{]<D¸ ׺Rt.*]p{ڶߢZaZB`r[eCa~;ܡZ"fx5MĨؙrݣY1񄒔T"ͣC޶ZBt Q[| Q<I4NckBW&Hn?:+vw/lYܿ ]lQ]Pti]w/!Xki[{pB8� Rb몯e,jL@\50G "иoʩr\kW PX}{v-LEBץ'B+ ҞɲTO̶Zr)7Ŋ[?zf,ghs endstream endobj 1627 0 obj << /Length1 1612 /Length2 19461 /Length3 0 /Length 20298 /Filter /FlateDecode >> stream xڬct.[wbtl\mIǶ͎m۶n>g{sk߬SԜk+ EmmֆΎ26t@Sg_#F PF�ff�@ @FECC_B�w hzp2Ḽ�!9y Y1� @ ht0;Z͍6@* ?9p�F݌vhv@ksGǿ�sG8m!nb/Bv#::999f7O'3r;ulMF9Sҿ|az mN@7rvVss0 gGsb@ p�8[;U'_m8;9Lᘘ4rA101nl?}.@5򟙡K` 4cu@2 "?qS= -le%k`w�}�0�i?w+?Հ&#d6agQ h,odd01۩UlV6�:&F)Yz6IH -.$&Fw꿢jn(E-ux=t,� 9_k's7ߒUJ?`Dll%' נn@#%[# Ԍ4Z a&`|jn԰ `)V3IÑL+dU7 UoMv�Ĵs(mMvF Ew(vg*?|?t';$XFڂs_'OCݷ4ٱd<X>IgDN Fo.< (牿G5<!8-f|ʔr0GDo'z׏dlT;- :ۆ0-|1?J"Ymz" H~޶q_8E[eޗ1 K;�9J'ꚶ^6hiaC^^l~� Ɓ2 :;̦PZjejWG{oo``Y֬YlAH=\@C* mB! ˶poG^␼iD{ 1o&ѥd0@կ }AqsݾK?@ؓ3uŠ&x3\ jcVT~z=b ZL;(>%f8MG # $5d} |vpz-~(Ԯb84*!AFv_\ZWW-|o'<:;ŅCL-cKEezxڇ 5\Tş߱]Wo(nu0:ӨĤ׍ܜy|r8GZLw;3QJ89 ftC[UK4$=IX7ppMV>MVQh)(o" ɽfִՇn99ip*4nn5O(LUz&v7,y -6NV"4T4*xXGSwU1nܶ3qث %=~oLC+pIc=YrUk;B]pЛ:6OD)Ürxk ,I#YRt"f݊_y:\;YLybh0x]kC(hُˮϜ ͇Nrp[H,NSwRౠ^We^2uYu I!({3e-MZcFy3n+54^C ?Y@ fnE5ZjKЉOT+hIW+9&�`OrlO!@*͚n~ 0M66)4aaH,lp|$eX/ƯAa<ًX49l^0rMlw! R\'@yUN_ 1ɓv׶-\6(s D*tPuNپx|­u7]b@uAkrn}\QQXKʭ(s$Y1ˮ/x~&wh)!nؐ'x(r ˼1hZ !>꒨U^s!d=A>+I`-.s>S:'k$Tĺ}MuP8&C qx!H5T }5wsݢTƶ:=wYB 3hH$f02zKe)EoE]/7j @aQ构rX\+7_4Y彠f>gJ ꥾!4s/d*{ǏX 2n!-̨i9=#!$)l+#Ȉr350LSׁgv�yAAd{ĬV2Nsʵ. *ㆸC|EMeZm9KN~姚Zs4fA2iayl~]'Nښ/C7ӍZi;97Ba?yvH_:Ůeut}jB'EZPfW7 bml@@TVVvD 3Ɨ``zVsuΤēr*`<D]44g.|);Mgy|S4aQz@Y~Bk09F<>C;QdѨ:['i 1!z%! ~X/Tl Ў8HjSf8.jaPMx:pJ1 xFu`#D cT 2 <bKf9(�8z,+C=ۋ_bz R7$)յW60TLSwZD*e `w7\Ѐu/_X!VvH"7NoeiM- hL0͌69LlgXs<LW,J Q\cBl@= o'J{b=hOZJDpIH\K-=4fԁ]9ʒﻣfNj3%/Myi:x]Mf<uBuFEA)v+F[q&hv/|n _(eY_4iԓLqﳙ@=$%1^~=٠7 9yomzo!f!m+@* _n+ע`z->Y q[o{%b]P'$_֤R1`i@t} װy0O2/"0}E{IIi[GX("ѧb˾7e)H F6}O=We#Eg %q˼EE=J*i INMKAb[7JPf @5>ޯAi-F?o MAH2bw�!ζ2ÿy&tR,-I <N q >GO+ӓ)7MCؐP::SUO @[Geڽ!OLD'ߞؤ -NcEkVDE4{âc>Dv01sۊGi:\'#د\רwn(U M,}"I&[@ްHIe3c )@agR<ψ"6YЊ; >ˌ}8E{*/k,qZeM? 9jLSjX ]ga#T13o~gX{,!\s%�]LG䈈mSkbDeD;bQ #DHIKiT68SǑr$ۮU۵:H?8 ͕JxOuΌ8t_E;R\z4?K%c%QOCD`>>H{z\SB PԨ{^݋ZP P3DVZZT jm-&]Y{I /B*:5{~]ەu >% )Oå!I C&'WE1'-eJHT_2vZl\l{Ok8TFl\?PqƗfv_ES0Yq M(f`/ #"Iczcj@b}ɑz7fVfG}5A #d^{ߥVZd BTb%ӊ gi%(u/5 s@yք|L BOQzPy[pȒ8ļ|sH/9̪AE]) m*/Uږ:b t~2-ij hX7{oDUf d&:۰a_20vd ug*,4 Jxa*v秎"  <T@Υx}͏>"r([wgZh(Pհ^ -iy0R& ~ u= T״uG.T5}5ԨF^�<x8醓& )zs)_tGcŹ(3 qRsH%sEw>볡v-4(&c&b)7kve(mtY')|-H0Sl I/4ZoO960~4ei +IUs(ٰUR}!@(h'U�xGO fۤ5aF i߉<N3+e2e~ךOM& S= c�d΢5dEb-G {RVhU(,_}MuF//~̔4ӳqD\E<LUI_B/,Px agLUz ZӮF #u657]haw8)/r\!RXs"U:`usa.D/2A D$>IǾoUSmk#TBCTYD<uU^,sU/^kL9"u$mg). �=D/6"+"ze7|άMJK5U9 Hv,As!sWW!D%kі hdZB8^_S6U!Y{7kfQhҧ{8 iBl5F1*Ӏ)aT3@CGI|z7di+^лxsE=!H 0gP]CYg@&W`ьXu��zº| ރ<.14OY۳uw_CkpY]jHU^g; Z Z @nvϤO5 @#mϖ>fq%: )c*{nw/hh94/)BGm[hX,\{ 7G"vk(yݨ2Gu7?\{sy+.9]ذH /5nBokB_j #rpL[$Op*j03J_k~n^/;S-NZU(SgpCBزwpB]iFd|צg6|7K4@t"$9 e v.Xb8-+{n!@Y5!O.}5qFK)lfs2ɜcge(UA˧ wCp6$cj|`/`7EժCb60 D܏s /xG+''<|mk]v< ݞHďKf0P.ٮsϯfC8=l,dKs]qʦ(mm.iBIOXb+vtjHm <$:TsPátIJ:NzpYi_U}jrF&y<)a;O7@WK$0APL;l4] %P̱ i2x9'E$Ih7L]bU#g/LFN4UJ� 1n (B? n>i4Qz!j7S|ݨoЀ}>$auvʼnJ0*꥿",OuJ~nn/#GLtλ]rhQ-hYCOSCƙ@5P Y6q|p|1by)Z%uOV۳Nw͒VC9麃n@?'0>;v38g:_ jF?0!T䟦$2}"%Kϡk `鏐$3~w�5`tSW}rg3R)9<=9Vՙ%˥Rj'ik+@- PĐC74z i+z79PZW1bņOާkO6qحI^B3Pv) :j1%40Edn13j:NI>׼Dj?7|3%Ӡ�gڂ6G"$} @0wOnCmB.Q#ҟzTa<Y4.u SCj^t+vP2vkyw]lVIJi7V*E-R ,,ܽ)XsP?Eզh*Xɋ?eQ&ԜnOr^ [=%ܟ'wUR,ƴv!SşF +I]lR0{NXluE-A}jH։kLƢ(rfKkL2ٹ>;wޫy%vʜ\\`: x PvW~95ʚ@^:e٤zcN\*l( !g-7abHyPі<nv9zi@-A'%uC!o<3P+-FN֨1ͮT>]tki#\X⏝m6a$$_ ;IL~ʳxpq G$>A{.C q5z6m>S+8,ٮB(wHLQs&GWLxE+HW81'<JmyhT} F+PPaE,ML:"?ħwS.ETхS?B,zfZ,fw!R$t6;3ɢ3e[sD' Z۠H`5`g^q}f-0K cQ)WŮahL)|kV6 205#i61Vv`Ie.�4+^P1k2b+w6]tG*Xt9 +JTVk"ΰTRʇߥ!b^i%0i ^<[0?ٱgrY7" r-1g,q#Á@02EGvՓD5>? BϖeC"~)ΫRϫpMZL@{% GM"o~~r,dElhAΤqH�+m"b; N9(D^&'GS@*ƍFEF^ˀZT!˻} ݪϼ3#p, rxFNI0dY4;W(Dmk.4/KF;K8l-02…jn`&rڑ%|6֕{4X`hB|ӳ٢fl]Ȋ<O,+Mf Ѕ%C*8~Xx:7`a ahYF۽Xu;$ gRN~YrWGeA`N.eitPIƵѦd!ߨi酽WҤi;pYF5 g߿8/W�~\!"jUKct%;Q% /M53E%~LAjj!v腢BZ#V}RWNIP<#ǾҲ{!'냡QT󡈫B12P("P&;T\ Mb>VFKuE1 v%l/0-D4߉=嵑/'hKvYs\\rL7o|0/h1i>v v5[hg} uWU Լ]^Ъ<el TLl!%lª}_,: x0-<f'>_'` ⼈xlMI%iRc:9S%3]dn@ G* %$MG"/͏Nqt5p_j6/lym�{/5IHCI#hVu"b䁶8OPeZvMkEip6;C^\ypKpJ+'(7r 9޶%C/JkX]-0(_T*ύ҂\Vvy G4A Ej#%SLɣ6>1q+lFlzIK#ouY͕ԉic"ԾEJE@Mo򨺾_,<}-ӄV\;L Kr/Zw<=@yȬ <3|($vnQWaFxJ =m v ҫ_޴ eqJO G }{'Q p'v&g;IFA$ɎFxU@JZƊHSq!/fx촗"*Y^L1zY[ԺTT%R"cׯ }~h9U]5^R0W@o"-tzrVgUSo(Ȱe$&ngK tת.|P5>b1J }m(3˖f30OOÌt&CLdLlq[R%F>[6S!G2Hנ@OG5 8`<,ܸoL=9t@דNFa9GSi(U`V6MƬJG/ȖiI6s[fTOXDn @̌%WVǭǔ [WOK|ߖbfM8,u WI, 1UjV꾘6`,(J<]n,'v>FqOA*5Ξ(jy8LK+T5?| =qߡhWQJ) |A:C~k Ϣ%@ e'RX ܮ7(�Ho߲!=  K9 ^�"EMp!q c DXX~Ԃcҁ6F)1y'5q[pB2݄5f1uu~%JZ¹g'=ϝJwOzFyCʡ^RbcqX87~dB)|j6~C\lXw>0݄2<A^gp1>YhI |i}+=/넟h䐎-9Œ0XTXIkjTp'×;MXsJ'I19@nI!W fUr DWτ`%uA CӻN &/U ,L|Sެ۟C :  +aێ%*ٿxŲqa#<?)H)FjwrgU-kfq bp̲#Ml| swkOX 1qQIPwqT^jM. 1B S2VjS=EhDɃr^wrZ6,[SSRm9$ـr=kk^qiEmģպǩ6 HZE*1Czn| `+ a%2潈+E( v;$MAkͺݖ&jh~[<Pzˏw&C]헖Ӭ Pj[TR,ѬI`qDBdMŅfB=4YSxye"sΞљ}L_[.EB z8)_td"!d2qޟR[<q JN,\E:=@&,9SD\aTz1{9(O>~/!\\$Ǚ_р o>/Zgfk!%%eՔT771VmlS6Gq,h|;ϜoрG8}&仛 4^z|զcߵzybXl̒٠4q1˝7U X.Sv> Kplb=\c'Y3joBK}E{e *B_L%4'DMS(5,BơAذ}ASÏgb.m~n#lR»AL z^^J)v*|{U!ΏZ z bDAcQA[;>X%vpfZ Ko[KN6Ӎ"q,Oxpn<Ió\֖R|QHȲ+T~2]!60X,ѕU4Jf:ݘ FZxM[ )i7Q}rJpx$MΑz `Wve%v^ n7@M}ƒ*o#0(`?EI%y�9f 0%~w<١>l|;z.@~jI.-wa&Jg'4@;! 7_־1뇞4q7*HXt)u AG`^pV;?k;"]^H,"a #yQ0r 8!¤ؒ׆rr;U D+RANoBGpƟD-Ý*Rb EMGY'L"SD:j\«Z" 7G=NUD򹔵pVqnA 'm쒃i<XFm̉}y&0L.ͳ*g|*lz=?Rd{OQ}5XZC&)?:i\N*+_nC] , y->sw.=Db kmDVekki#58SIZk!k^քufi $W|f]1x=\OZ.2qB͂[?^Mds+q` ۺX41r,ޠ {FݶAvKH!-\wڬ'.V}MPaNH&)�s�̧VFKww5&daU}bEꖹ̺ͻUDxl[0шbyɺ&"[>foT)},iſy)viu߶) !/5E 2W'e#ˍ1.O ))cqm$ 5~MVv_`͌[6ZpZm왛]Mow{/0u5f4}~O<{~)w{o: V:5r~qebLuqǷ39cCuş|Tn[P~<5u1Bh]hҚ oz&uimp&B,>\@޽ x@B=Xwoq{ԝ&mT5wIcC3<CvfbTbg3+�+Kzؖ.n<1,E9:s  Vʢwϴ8:}7(ݡ~Q`u Q#zԫM /I~ @࿝ѓA=Nc^E(mɏ4\+V~_L}HRP-, Պob| WGAcj~;Hѹa-m(Q-/-GHx6|nz;`9%)&XIT]v;]R FAJ>KMy+IRN^;`@O#>!x9Z5:T p< y_ jk)]O΋FPFpANBr҅ s"p uh~Qb), QLWjom} I2VM%n:Xݻ.N[  GxdmqxE܀83x0|k:IkpW]nG9U:5l趄i?!.g0 y+ R%lIX&hKhÔVԙ k5"X(b:47%k .!t# r(<T!M3U=bǂ0 8o ci r ?p7Y -Yo̎c_3P'2+Wg~ 9GP^#o_#o->bu͝1'`E 1az<T[>VT7{@yliт]'"nӴ?.8.IW*3eT(ZfjE5ң<ƪϘ.5YސkjOsT!W]"$W$!V՛G]. _ h|;?]'c#]2R]g4 Hkg&T)ah7|rNv~A"$ }?zpv 3B&}m( J,>WL8ZGiJn;?]j48& ٱ띝UŞ2ԨLb[ ^1X-Iǖ_(:wԞ)a'ɰr ܜ,Xf`Tϓ(|t FXz1z B9-x�!f(D'6>B{'H[{3V 'Dȁ{tUU3q!4YIHܭ+Df[E҃ YddHBָS/\ ޘگiĥL!<:fX%Vmà|4t@(j@[L<j/ \sW_cc78W(A4 mĺP9d]*Ժ2 ^qps Ƀ+y].ps9C;y)Ҹ;3zKAu Ÿ'+ٚS_ƏEv\^Id 6(*K!R�ih^r2ؾ`J)5S�c݊iaB7۶  WZ4t#~4Nć%Ld-:U٣L61`O׵3i+SeRfiD>ǵnʫ7a v~}pԖorVygzd.; Т�:s碅XWCaL=tsuUe4H)u3&S@,[G'HE푐x;dlhRl}',sSP+Gx*gxsГAyEonLYa üT#4ֺXM%SlHmOӣ- Btю',V!֔ϰ}{ �a?5 ܶNFCt4q * AGt5TqgȘ DLj[꼞3xI T ޱdo£KJNJg]nW>.J3Zd>Q 1 o&$J&aG!,Er?֧G~qVtyWM6ا{ʯy'js+^_JBUQ5@@D^)#,q ny@'$[=?䍮CW=UA%M~5U\|B`'kH|P\]>QyҢ@ﮏIdtP~G폟0-ٕ: >)by}Xu=p\~v,#<NQ-W SLѶY*3$rKs3�t jQnՍ<3 W,eqg ['1F9P/8< a-蓓>%V߻8$N݊%·& -mC�y5y\­U9 "`T/X5+ѹFg�|}wWЂ8HT?$:AMEy[LҴhͳ;;2-7֔;Lx<HIZ0o/YR0 o;?C8~89}\+C!%ʿ%RϷϺN?$L t}@9Ќy01zxg37ЎƘ 1FTzj+K>Voh}-E\K]VRKrg |u(+y_Ӂ0U \󙮭OQ?P5;EƁꍡi8;E0HN\-uىm,5xF@0q-0OXE2!Sp'1 o\<o<-ɴ.fWh2~?;xz@'M,Bhؒ@X1ք((OP)thg. UV2b)va WsYHѝB*.nCPQR32ս_R+-J=H{&kG߾2k@RNa\z^E{p_jo0 &E>l^[eȳzҺ1#0pLgN|<ךL(h5ploT ]9N,"e 4`g ||Q]ԞȬ'*i{37<:USxRA-|Pu@"_E;z6~,Ey:6v_E|9=5+FZ:c/z>WvSYħwQ抳uoq;!ڳڍ'~OrewwL>$lݐmQ-VA̖qҌ`U'}GHJDüĻKSv FH[>Dv6i}8&Ϋ%6O"c^5a7PGYZ" ojp2 '3qQbin,{oi jkm5iNQ褡Y0:I̧^h7FE<(Pښr1UZƒMe]9z/aI[/nPj(B>&+*l]kh DC+%mm"-pd'Ѡ.]Tc"]3ʶۀP=Jv-Xgx =&C)Ⱦ PR�� ʀcb; P8qJzNЂїʑ Tf&| d+S|О~Fņ|~<\Y\aA�gP 8vMAG- S3)'ЃNѷo:^P|0t)ؽJWa*YX,`ëڢ@u K]zp=9UEsĂV &tcǽD"e6~;eڸ>=.k;zOԬ#X4Գ(Hzq('+8zwkZx$L~- Z4ʢܖBt4*C .?jJgW:b3k+'Z) 3G:aulfrA9yrOxҺXVU5ȑߛ"6J+5q };t'e_!TKz6%Q?c61,BV1 *=淓68Xn;=>.db;sE}$8_^M\dn@zjC|#®KSx?żkc sxkם`hLLVF;ymŻ |@RmPgig~XhtqwNBid\g{6.k8p&P<4z&AEI1JG+,"&e'}Ǧ�Ed4h|ٺ̲uq'O.<0oaɺ;5XLdWx^XB/'l;P`eJ)qkO"\@w00;%xyD4,!}wL)Cf*Hd5=mj$ 7tS٩Mx:5k=T6}|$̕mLj) T"3$V‚Q׷2#*5-T�4L V0^mXZ.VR}5>G"Qm+"pfM|{,oWOޡ!hYZ,8R4!HRjJ]-D'Ll*PwKX5kUKRkv,mCF=Tp߿{n-z Bw_رI2y}.'@@YRcҿ9ղ<[&FmcdԼ�?y˦ao{\ƤΛ݊ʭ β@(4UV={pk7zpU߹6TA(P<P蕯y3\+xnC"긿q{Lrj?ՍL+RU4=Hhy [6b>Q}XgȞ_ա -hLʦRX|=D!fȯrY܋%&ߔHbz֩]DeQj@'OFNꗤMAZeߪN\|™mk햹έzBut-&mblG*co#..TrώDֲ#R. h0RŖ2W#Oka�exkÌ[`{q큗l�dT;8X̩Y *n:ȭ8cyʂޥ.ddf#sI@o}: v:^4츄nE d2 }UO.y#=`><z&k q' 2wṍM'CQsH8�A&YTE8cy6-n[kI(H ÚvV\}e,@x m(V !_ӜMzJC6肟RAF&)Kt& Ŋ[@lU%@p ]HDg@;3P.Y?~ch©Z-jubI덀nw;TgHI&Y{5ApdԎ擯ɏ9Nu.^z RSLQSF&'hiП1gbjq"qjQ ÿOTO ЙR=kGڎ9&;dV["ζTSuҝşxڭ̎#wTs֟@a&KpQ55Ʉ@Jw&gMzXBQh1.3=m]iz^u Hh9ńbM/9OϠNKXxٮSْ Wca@{tO׃%o�#Z\GgFiE Q!yNM[ 'Q֣˛Mb t{ %f#U~|S&Lۊ$&`m<|WTR_W^5Kir`*wC5YB) ]4Eq!Z߻ED&C|DwDD*t4_g³k&>n`>QqF¬=).?w&u1?U5?f�uA7RU$/^JgYvhX)Brn>%_zI)k7554 hƅD{>{R*^YݚZ#)ܤD0( |#Hcݍ:55vSE΁13I!y&~V](eNM|s bQ0J$ͼ+ /w\n2}M5J )�J I&y0ƚɭycL eK:o }S- 5eW/r`a|9]>joQUE'SSbP^%^X>MےmSp u \iEWm4PPs9DV5?J(tz$ '@k+t{F'??aeצZ{d2 5YzvE2J$V.Y\&fX >ʧi'.9`|["Y@<ŜFf Dc>݋wHma D)%ׄ 8*^XȢ ݉ש ɟ&i9]=3=V$h-R%{1놲[oGfչzOpiz R,_!̭gLX3N3mdټ`YmC" hwAkQWۈ*G'+ WT'+&wѠ#(SZBTS'5%%8Zdz0꼾xWd@ cQUgPl&/a#/vjU'QnW g,o=Ċݨ=:#:QY0sNW)&:~B�xp(rvLo̷Wۂ*�\rր ۇ$MM{'F:? _WpU`>#8�Z}8|k# VWϏ)B%v+`mkjZHiBgϑ>lx^L&yL7J .mqQh¿]�.D{r]?rn)a|&1я f+@>bt9ZH 7t5a}ضLIjDk$;WԙӶf}1l4L໩<MQe@"}oku쌡Zkh"p"q$),ڠ˹&6bJ"ek`U7ʙ}Fia9r\J_dRNW`:pdԚ%t)$FdmZ.8!gku䐕'<A[?+B3֋4{]Z[,inb4jUɴ>;'fS>QGsS3IHE@ÕG)kQ99L;GP3SN 0s+R﹩MߺO7D1Xڡt[3&ɣ [S<^-5;yO؞mEﱛDDց*.$V[gIֈH.2w%hZk\f9-#tRFjGz*]8saT"q}x SΗŁ9)ؙYxg(rqgeép[iw+HnF\ځGK$ڙ.@tD(})n8|01s{ $iqվCaӁ%"&Fk7-ax&)X|2C(uRyX,7rSBUU>˕0Iha=ѧ7%}qU˙,N|H endstream endobj 1629 0 obj << /Length1 1630 /Length2 3805 /Length3 0 /Length 4617 /Filter /FlateDecode >> stream xڭTgXS[֦ M#:;{DCHh" HT ҥ*) ҬTtpy<gwwwwRL u1h8T0Az}qk G! KǧH Z[  yej>@ AzxAk [!ѿ,'.�<OCz~‡`@4@_Z w$ LM�A=k@D>0`Kh!  �� 0h7Ik8q8,@�=D,�xx �F|N 1a}0/F 38YʹuՉOr<0ߓN1 Ðh' aQ@BnyZ/Q@@C>_}= EFcNUQԒR<!M-q,hw ew><!B07 &<!% ߩ,7HFv;/ e",G 28ygP0_ ;ڂ'>Fڃ 8EnfH<p3;[@ =+! D"ODh'uZzaO= Ă?cu8�Abr< //(HJ4axd�p*J?~A#0n'c/ !h|z My>]{ �0k)r']}WZ$I"Orn=4L].v=,P<]5iaF 4'߳9yZsE%ҦM9Am- )8}nb҅ U޹PMt<wyޮ@GowWgy,;g`,!/=lW!o3<C;5j4bs^\cK}g_dY7?dLFhãV.@͜XX e7 ~T'#zK#G6Υv7s3%.aة\ov#6R,pA ,ߏ F(*VZM 檡ܢgVH^Izzps6i /BrOn&rFt}V7vx63PZyh}Wȩtk}Mϐ!нp d-wժH w W>X=$lvЭuZ/Bլ^<>hj :3do*c!q6fLi/ު:nè71e0_O6 FM)C3hΖg�=76lhWƒ1b#;Xq*`QÑh7oogPjۉg}3M޷<tӧgSHksd~gъQN#^SE2[ЀascAW3{/0(rioo p:zn.jl'Qy٪p~hRD셨1fܨh/Nre'' r6*g&w0JiNB6uIܴ@g=?f̣�E$Vr7{yډCF-􇽿ޘ82BsnFUnX&lC:0%OtGإEmCjk 1kGi(P5$'Hݤ8H7肸yK/&59^p^i"~܂[j [}$oe>1/=XiCpB^aʴceqKffR_bWS#iXV:sOY ]r-)'4bQ!i0ݐ YI)}է}z. B6c7#V&%mAt.lQ#,_]�Jt!h-3ߒ@D$3>`ó> 'dZ&2PI^?"&?f7 40TB~_\?|^٦ {:8k65(מ&jKK9%q#[krJ܏?\l5)I@ʦq1EtW>! El{`Sj.Tx\EHtxYBs R:1&~- вKg_UL+^,=f/_ a/k.Jlϯu}_xS%#HQ+r(PNSsq+ubTAHC 57欵VVJNi3elE;ДΆ/&# %K9n~vJ{iVI7t^GP?ܺi_}@5 zmWo5J-yijd7_[f ֘+&7sƎ Q84 ~2;kW8SETFBL!^#<&,( ߺLY.x&7?#SK0VUw@�-3WA}:$ff;z >4lnu0>e6s/ VbQ * @&r|0sy*+BAJC{=ϡų[,yȀ+uDEbJi"7rg2vnʫ5uQn&:2ۦ@ B7FE+:W} R}鎯5ΑS̏圅')cl^[c z؟2K!t7(ۻP_!Sp6" f-%w~iG಴A3Tr2@V6Tz2M`UhBJK8T.Vm]ԍ֡sH57Y 2U$Ѿw;ZD /!ϢS}8Y({qpeMͷ%EIeRJsc*gUTptg)/~kNMk=Vj7)jD]H̆}gvYOe9_\_݉ R(4]+6s`D/z`lj}g3 rYQ٩Jџ-.Bn7'PJq<54D̸ ᮾ3HW C?q:5S(N<D8`BqaJqrL}|y^uQ&働kdߙ)g;gKiR? =|-!qrvxO?ի.*O?7G-k0\V;IAc+"O.jntTڦnj6y9JMn{wtx u._R3+`ku yI N{M&uZS/Q@BlJJR;5EZ70Ԁ[r(ez˶oғ*Sѱǒ ω {(e<oU;JvBq:WI$ez5V@W-a[]VU]8/GYjx?|MH5Y{'d91\~p;4קa'*̧1IBh'kR&c% WW *dLx6?vy'7&wo5zp2_ސ"bP6ʋk@\k>?{_{ܬD9If;rOQsdWʧC͘x:oM I_^Ӯ"q*5)@+,h"cs'uo9V%cRUJQY/ES=wq~�ikd.L jwi£rTt8ȼ^dϝ\;gs RŭiIx$WĬ5#Wf0" o:*muҷw',8GS CȨΦ9FץsZ1=}<ⵣ+Z׫xTÓ6jG^D՚WWْz3W؂ڰT%heNo&*#k?aUZ0:kh<_\t%gcw.מC.dQi{OnyuUgZGQr]L~C>ADwfPxsB[7͏lEsrLf<b!G}|`oģwu$O:BξX:E<?Pfڲح= K]#q)3?W}![0w}E-0"`YxiWx :=oD9ҡ@%KWP]fl=B${^eCsmq5<s!NۏznveƢtNo 4?u%EVsrRRt]nԪ)򂳷 \,UhѱEi呪nzb5o(ma׈36lͽ_%RX~g=:[COɈHaЅ W=ZNԥ'+N'{8%R2aqù-^3 pՈ(5A0os endstream endobj 1631 0 obj << /Length1 1608 /Length2 6351 /Length3 0 /Length 7168 /Filter /FlateDecode >> stream xڭWgTSݶ#W.Jo"7 !@0$! "4& "ґ".]]҅޽_gZ{\{sx8u# B]F 2�%IyxTP09 @YYYR 酂:9c�|&fB{Ã݉:w/ cF� 8BaOCCP @t` 8"P�_ �w. -RB@�4bA<o� ABh;�8@p � ~!Ql+ևG1h0 �YUqa~FCn��. b@P8xb~粇�h$ ͍Chp1 N  Fcaؿ:z '4(B cpR߃wD�bܑy@P{f$@8 �q$E`)|7Es"$'5{\0hbAP׿{/D ¶A BLD/#8C1`g# AJJg ?nwXy5Wm'J: %u<B8sCY JK�%ĤML {WzEϿV6Q;`G럆n; Uiǖ!@<!` X>%)5S_ժ-7+F4H Y-, BZXia6'@v߳pfݩ\ͥH6 F`)%fo`hsI>X/wGwI N,{C@]s؍cގV7$< F-8G9SbؠNp[YmJλ6I BU_}TY6?ٸGV6 U)3fݽȳmL9{Pr a$qe~y@z.OzKx%yeS׫GdTi Hg 'ܟ4wa1?T|l︫ߐ&a=J$4ȏ2W4G:(Zƨ9P*]܁Вwf<p F[GyKwSgiu69N=ڸ%)3硸8cnr K,wX'wE^Vmg,{ʼCf{WB*KBf ?Z5ptkYvfu֗ӄ|yh>,O &?kѬ P: [{hٔEY{ qߝESh::4~%GK_+u^.flYҾzu*Ni%As>\?=hZh60N s|`K3D3͠p}aHR; OI>F-4}?*ӡ8ذpX{+0w.jqM\Qp? Q={4o׀vP+ 9>j 6;כU۴> .҉)w)Ѿڸ0+\icr PM!{Ns:ՄCrQy wa@~3A@%2ngnAϣu8Fʤ=o^Ľ玈�f1I9mͫMn/D2Fs!O|4{;ߞ z9WͽZi.> &1RA' g9h63Q*{kߐV,xSjLND+zOkj,K2OX_%㛙XL@H՛E)nt8Rkv#ԩ;16 34rUjJjzt_H,O']A"/He3zk0Qyac`2!!pW׶cZP-CDI3/'o<GDX_DaŮNZ$z6,OTxL(Ҭ]992?Rku}Ӳm%!FwSb,y\y8h{sI (Ba oyQ4 k;A3g¹ •#(AHt9iebJ[Lf"r6}y"І5yydv+UnRlWKd;5V1aňEYZΩ}iK-wjA;5:Rd IpP9D ⍓[^IĶW8^䆫YR n/ש|@>6lnGӨIIwڢ8̴:a32 D9g(7GN0uS^K3=8S1koGna["de$ua7I^і/=~AY$YZy8êu[yj;@diO=|<5iIÕYiF]bwTKbtD.7Ĕ>i;uW5!Z٧uL*<}�%<~$\ZKq~69+;I6cc΁8=ڵ%_5Av/uNݩ7%h<#dU7"odH21z]TS#}_(fP'Sj@d:ݾÚ LG*5&Q@fniGQ?%Ҏ5# 8&^C-ٯIY7n~᏿c6Te~gƆUkemg nMY6Pv 7[Z<prux$W'ɦʷ+ktLNg3M(8FҐ9CVUvC4m9bZ򀟨A#l(ҽ *KWㅘc^HB33{lF‘dG AkJ2\\X%/2Qo7&;+ Qj_rbb<WEH?j2bD-BsyJƗo]_R2MX}T?bVxXu87Zk`|PMvmͤd)sL6¦÷怜v u&e&a?]d]اd6=Mk�#xR>*ru% *LȭE s s!>)->v#^6Կlp*؛,`je<;磓rϴ{u>{,WzTT%'eyλ+|rMjrzH^ a$ݞMr3#tOB~e^A#FƎQ|Š.~q\gTkS9;=MNbQyGt"\ 'yݕ/%m֚` Fn00X$m=\wWP8Q0T+!]jQ| v"u9{z16X>PLY^&yuwxQG~ n&W`D[MeRxv\攷Ɂj%  Ou顆i*R+l$< \ˊ<�XQ{ 7z>yŻ\$MF;(aer)>\v1D�ֵөWc,,lS4Sw5,BvKބF/`xeDt'31ɓ MFQT lǬXSa'Zs֏gQ^&4|M*Ab<+2J+sOlhح_! FI2d:LQ:ux3G{Ы퐮YHJi&H_&uFI褝 b" vUVZ 5];^.3UZzO$d m./Ys/|+h2UG%ơR-hVRM+Q|2Gv$݈B=2"X@OCmXRt4|cc={0pcJ?' ˉdZȯeiIK+'DD[˿bf9=!`KJڈQ$}6!v=l??rAB ?<XfB%{0@iZ}m ثKV1xxUulje si 2 GB=QW\f4t/@RtbnV$B0<d媨lecjnنW&-)2 1@fY 9MJʵTI<!OۨJ."&иAkmϔ()=2OѩǾg`�LԛYǩ:cp;Fl *nVA}qu' Blېۯ˜(!eS] l53C'F_qo <a2)9a%]8t !Yr=tc2HcK`z Xϙ T:s(~OB?qs:d~q!$\ e| I}[YPn5'N%1<Q9BQm=t`*Gŭ|CV} b^ Sotm~֓'}๵,_t$BfgH٬DŽfhNаJ:W .RP>m~O~ۂ@ZaM =#Ʋ {"ǽ][$^hwzBVbh)e߻RP6`y(!/ dgrb>~^Dή@qY/r},4|g>.Y`{m@\EY|2s;3yxe$/Ό57n̿px(IiHo;-!b<an+wG//U(2o4 ia<ZaN+&/{M~&YK>C2>{S#Ie#NYw} P`.ybBuw2̱v˼P0%}Eiaz@"3"b8 h@)*ToHWjv[u47Ţjȗ v}Ks"![78_Q71HQ gIlFWm Mqy q`:|ć"eі*rL 4R/J38=6@qR\\SNhf} 0xBBeEԗ+ݳEwP ˦*/tI)jVFS1M|7kcR97(>c;&<b q>|\mVm塌rV'5n_,F:$59*c@|>1:O!Xi;x')rbū|~\3Hޘ'ofҘt3 ذ' HZh~S2!4qdO^✊MeNG*d 8P|Cr.$͕5,*p)V85% E iPy!>^.<,8X?F#p *j$|j(lR!;QtMKE)9Tifsb-*}#H|*f_^/YN𯘧NȚ;] ^M*^򨼖ZaAȔn 696HVwD=M,E1,ST&lbKgckZiMmQx5LI @Tr9)aƗNϦt5!fi O tH,G=+sd=A#YO)Iy_e>h>DP>Ġԓ,z8TGNGED |y'|'Ǚtr3D0o1y9^~sU3)Sn ZoR,tsInpCs6fز9 мq|@cminaQAp`>i.̴n(Ab5`^ESW⡢n$i 9J8o9hw}2F#wR|vVEAmDJTOB1qE&dlo bWZT ͚ݰdT`$bm=e)@-i4?fIǫ$6Zژ&c-ť12f0Wj 7C0軐t߀RvWx\?,QD^{`dcEN&<mQ9X:=~0hyz])g|hXKT?s$dzϦ=.wP)"E5m7s{G;)_e1oj-%,[O籦(9,gtygjI Oq]4<"~ d}Q,}ᠼs_Ɍl~2&2mBU,;^5><mo/_z\:b9Sw޺Kޅ qѠ$w+凔c�Mkfg:urVHy0y  J2A%G;wvq-g1Dڵ!o‡ }fft<o$g}c/7~K;52)sJ / rzWGiXlZgϩ8ʣYI !!́GW G{PgW-aNݽϐc~P>+0h7soع-6q׃3`M%c$\1ɪZY3Q08ZݍȸiSee) #ot`mmB`9/�6-lcOI?p=8dGMxJ}3gak`!?a+1p(b^h%[U>kX#qJt4hߊ$w܅\2dLdy`зEҼ-$Ad_XŒjw_ڹYnsq{]?뜀 |Cޒ'nB�N;W&垵;\fk endstream endobj 1633 0 obj << /Length1 1614 /Length2 22069 /Length3 0 /Length 22900 /Filter /FlateDecode >> stream xڬctf]%b۶m;|b۪ضmF6+v1^k52"Ee:!;#3=#7OuECkkC ;Y:a;k¿f622G3P`B( 0&df&d!#p03w&AECC_B<7̖+`:Q� t6ZXE5%)%U %��GCkBE#k cBY cΑ?v&DKȉА`l7 n EKhpprNhDhhhwv.&k7`vNNƎ΄*OgsCj;Yuڙ43v}az -l2X8[z_.Nfŀ`fhb pr WKf?9X8;Ma4v[៭"ekjGv?{/ C;[kB) ߒw*O"?qF!{; $ce d`C kSTAٚ?N�E gcsBSCS׮jkpUA1127?cgS+пeEi8ſ;x?:3P ؘ X|X|b;߶fxk`lL+Ά&46vqt'ow��ce;c ˴t:ܑIQ>&Б`F^]J`iv3iñ>tkU> Uy'a ^)\z;ޤONGg*T'{x_ԆX.& ³sē'ё[Xh2C 3$gLJF/7Wrhy\w<I A' 9|D5'8~-8ga(<? ""8 ?I 6TGBQ�G@<I;DXrq) 34sIc#f5x7~,J?解\YlW~S}u|;WN:7o@V֓Rɞˁ1>},th6iε!l^5*2|&8G 5Tj,:mȝD)l:, ?"bw$"s2E'3#|'>qmU@v wϝ '<M^TXOg(ZZ9SdwDOq-a:eb4 "g7a|Y,@y_APxy!P#;|/i-V%ƶS8`e[o;Q~`٢> DI(fPp8jU$<Oi'yޗqRoA u~H=t=N%`=Y+J5z.}r�ebFnp݁j=#f~01{|jHT3<<C0d\:&2n_˂ÊEO50{pyt0Vr.m`%XYg46iJ9r؏ӏ +x$² ! ؘMM2 ze8cemN*-\gIn !i_;}[~s6 /j1V'uv9 PZVha#qq:˄/LGiHQD9C;uhSe,ڴilοՂVU1'7sV K_:ScHOy'*bt E{:GNdsnwծ'{Lz*>sYsALljWM#>(z> DRl c~P{ TjnCQUUM!c3!5XM[ iD~4)*_x6zoԭDݵs=呫ixsylK7_ @<slDe;_Q)oP8;ZrݭC]NMb �5a, Hj_8 iVR<Z Y?~d!X,+vc+o8D}RG*5Y>;ꧡFCŬX.M*~}ӌMx`lF"QZ/b}ӂPܺ*gkޱɎV\z_tgAp�[x3hzSȖ<q/:.E^ q΁cMKa8볺VڀQ ?1ՌXRvd�x'|4-p-5efܑdMMïSR 6R,L|fݑzB^Ds:]ےpD6}}$,F౜ؖ씕ĔgMA:֋J[`C^0z>*a୺\-cI9aT$`.ZV Z5\Ԟk9~3'GLvI:{ _lZ- "϶~ۧ%D_^%ⶸo4J75>H]Ck/@g$3QF�˘E 3:Pw U2 `}+U/sx23 #y9sLNℚ alWƏDO�%h_Ų\^O^d$#,fޙEN?NyD33]@F j%?kX(m %([T_tcF1aXH4ŝKVj]AecAH'0Dh5u6*-RGOb.UapظMB~{[ν#2H5T*vQ,pGM6' F[�|e<eXߥM<uv,y,VW> @ϣVap8 80I8"4*08 A%t@I4b*v㿦Lp-=Yi.45A A3wo h"kxTԧlhw5AD\H~_CФi~regsRt'gOF^Gp+;n&6?CT&XΌ1Vf:~9jiik&5':QˍPRɌ 5m_+[[I>JL8cO}7AN>{ֵcF?.Dm>�K�\WíY=Q|%ʔg/~ 6ނsπzgwWwAj+f1_[IT<:B[(lwի~W`~)TPD Juɴ"D>Jx"jA%&<m)X8.28E~cTO9)ۛm9Q6hUx3ݑDŽVO"2lKN\�C@,J|V*HAc93tppFg.j 1 [r MV(:K|诚F(-%igO]Grx`*Ab%K3Sa-.{A-]@vep3  -"[ '7[:~).S2-YꡊQyT-T>?G\9#ߢ($\-#HNM CH4$ץ+69J~B闭4ưEdN(-~ Il jIRA76 3S-tQN  \5:TJ6Y&i-*䦱 ͣlR=7{dLZ{7q6 (j:N.V?hNycızg")ȍ6~*@4ߺODj 'C53߸J^1i ~A>[O'Q]7~H+טԝ7+s7,-,M~㳞n`jaݣ:Ss0i¢R6iQ6Ďj ,w;9E7+Ӿ-⸊a`D9$[yx}kDM77PZtRSV..6088㔖 8~FicyX=pw2EV 릁ߕvFwc~WȪT^YOZ5CHOԻP# Qx m'xkZ`7;fѷPgL? zъA,wzw>.$zD9[1.Z 6C@D-V$Yi x*2=SCef<Rhy{^~'BLMsX֦N&،i!SaI1ņ8M]aB9_3cDZr];|m)iR=RyfZ%_VwejGX?vVyzb ; 򈟢g0gb,GrYK&H*CGD�@,0a0[-j$]ʥ?8x<%ūWɅ{F\KF1/y]K&͉F]dJZSr`ss2_XHKF[ݕmS]?S H)sB%콘rc(Uc9wpIQ>J&&DTb7o͏RyJBeL@bMN/x5/8PpelK}jT(1�NO0"(N5df-U{_鸕ەpn9E].YyM 6}' u˞2 ;H8 (˦9oGȗ.w@ZỲd"iz?A0l9AͰyn[h-3Q&ԟGg܄GL?C[M xuru1?95=e=p~X05PP> %y!.ڧw zJ,6;VŖ֋Э%kZ p~U/B-sS҂ysHt s�{LH/e3̜z^ ?w|{>'J2Dh>G*TW˗cL&ϤaUzWX�h@L͗ԋں筦o!^97#VO`dEN Uh(ۣBTXd'+3M[Ok8 !-C%t|9r=R*_׋5O1U8ɂR7 }7JPbAVҢlAx\2_ R9d4$j/KH6'P-K!̖d$D_yq1>W�o Nwϙ,%)ԂCe+IحӰP_q1먛^ \.L<{\q߰%6$wk1^w!U@P49Dcn6̋ޚ9gFS'NhaA8v z zg pXm\c"(|@WG}}wr:.N$DAC3`0 b5scԈb9R:5KM/h&JE//~\|gU>-x5R^=EՠFKEh"Ijk`XUcG@=k+s~hal=oSL#tWW#  :2c=HNYl\ '8[Dx| reGǝ%Eoم6`"i״Y=J))LpsƮ/Ya #�]cߣT=թiwvs?F/4L/ҿ *Y'ۣn:hǽf?yd%ÒOJ9I*v󈝊< t#QpWsp wM8鑹rSurjq XZx:AghyLx%"4}2ҙG}$ZNK22[+UNI~N`C" ϶恋e.pOMJMݫյJ ${3t̛rԠFu~c"ՙZNXc;�yEH3e�-`?3xCg9fp ܊±-3@w,uʽ1xA2N @(V`c~vTkZ2$Y_6H bEpѴ[s"i(+2 [Ƌ;ܱk9=G4' wB|W%1!۴ƪT&V@(^< V/5֔8qeClnYN<|x;ci9-cj xĚ645P\q#DPu0~DB/̔ǧwP$.{x2qtnDY_><N?HuLUa^eŀ)m|^Slhޡ۷g))M R^#G’ezgrėC+Gir:D^ 9 q(rpu \2hc\^_1( RiOw,dIޣQF~xR3ɳY`4QרA't`+$VL"P"A/$Mtl{Wӳ J])"ҹ^*#_\in 'T,^?NLvFYTĘ~-mSpiX-0_9 ~$1)0kne9 ֿ~mq#!s-k9 4%hv3ŗDEn(nE[9?IQ -?6<s̶_4C ΣH.;qI]ع;s)ʊՍ yee)>+>2OOLX=R7880 Be\YGbnu#I _ D :ID8n%jd;}I 7'DY ͫԘ֌}Ϝkor,(DUS';8/}^fLy+VruE~/7)E bC)Aj@J:2Flm)çRY)Y�Ch!k&?yZ+ K<5F)٥Srsn\-o^ Ek_{A]|noiF!!wCyV4#{8/rPX^V`i "xqkqN¤Gz4$qL<o!mUT (Xz/$ϱW07* ղW+A#I*^{p8eae$${o i]7|Jp"6kE5|fǃzr�*S.d>B蒷/^/2g]I6k4WNrZ2D 0/TFȣhhe^`(r æVF>'AH4Cb)|S&ā6iN&XRՉt71eq !f|BXĦmeRt,*^hThT t \>i" 7x>^<9+`c:%m'/I"vb C^EUn5ijgKSʜ s'b (u O\e*BNnR@-ңH%'s/,ꂣNvt I][ͷ҅؁A8INܡ[EH8))0miJosίE+o%QnZS9yFA0+WN.mxOs@ҽ m0Ğ:#\S6�: $vl^<V*ׅ(|eȰI.K̯B͈?+w&vv#"&0˂‹FX'єDzGN9rO 4Lc#k1hМ aSnۥkjjp}1K' X"aE4wbذb2Ϛn))}Ot#^R!qE`~`'Hs򝰤3*No)`+/e~z :y{uti\ndN\n|+?r}< +D5^g65CJ1)կH9}dž"ݿ$wy,`f # 8ƕQ|pK/^:ªwsMG5)0b4::8@jg~#nB"]X# zL3/0S} W~.dJ[4<MB+f;٘:>O"?x>T .쪉Di ]'!MVG(L%S0ōWD|6;?<?m]niG< P-\rSvoZƜ4~9B%'8AL)TԨܚ@Ѥ@\۝sɡp6_>x5kgih-ՙK'`@Ҿzԍ+,?&$nO "(mm'JtI$V̴t$ny,~ 3BQo6O8Uwj $kIn" r]H$Q:GRJgZu K!חy_( ^(l_?KfУ_IT"lzI(I(<, .I`\)&UϏ_| .FF0c`Vп\X&ehR{%V;I%CP޷e]5zX%*ATQPjUxmذ#ItKhk,ʕVe,[\7࿗VtӼ<:[\?h.kS>vMX46fq':;GmΛї`x{Rr E4CɨQ;tتGĄF]1rq~bQ ?s{C65gOl̞e S?o񨷅j�OcZSM9`Cr?tYie`,;VN'Һm;{_'.6N r!.*/>M&;#,C 4E{-l(k~7n7(ռ's3T\v~LCPs1Teb6%ϑOF_|_?K!~8GDYL0-�Ύ"a:RW=_%xdCDzsSΏFPqIoO Ԅ_3Wأ [d1 J,(OW:Bu [o׶Ć3Fg75P~K3hIo."{Ұi}|)bȤW;ȕRkKI9?ѐ|J,T5l_184ܭCڦ/h}_-)I.~  p _"HWl˷gԥbFw=&tlon[6FyQɬ$kk?è+2 |n$*V_zɶ4٧ze*BWkM:KHP,*V71f3KK�}qGR g9E֋pgN[oƺe4}١}:Kc!Ou췈:^V;X46{D8u<o=#0_xp@]%wl zm4؋߮[\W9 c̶NF4VhQ�'ܹr?K}6Kɗڳ!'bФ,.*�; '@Ӗ_WdӶtQ[C>XRufFH5_tV c/4N߲BYT):&CL*LRSB{(0QX2ݣj vwW)zKi$qꀓ4̦{s!ϵ#1~\'t{ROU=+5q}w̬BXų�+mZ[3R;q76+NWZޓԹ`S ¸ <(g}֡ ǫRp}(*iPXWOhX_ƭP^<1U ]uooQ؋I^z"۱6+(@qVcZ >ISro"nT<L]e ֭EE[l"ͼ5,2z_x[ '.{e8s6?>2|6ř _#W9kQ)}=\+DnȥBqV"nBxP1f 3fPc\ɊcET&F4�wֱd�KVbwhEo۔_V%[=YB1AŘgWy<;Dڇc$jX f6 ìTf߮*i`×,7h%nv�c:4ۡ%5yFK #B҃&{NCa(^Պn5_;X5jN_ <b=x4]^ LL 0 CDLObmhmV[woF/^M)T":T9Losv|76Q_@)%1tK˶7%(&VůVYT[ti{x龴$ju@<ބ3s'rݡ0Zl=E4g9 jZ8l�X]C6U5{Mħ"6HśE%&_k�C^#o+1MxolJBna?nҙnS2UqWo/AVΤ3P֣�%ҝRA3Lb"p47H^ɧIf?+00nl[x*V6^RI jQ7{#iDռwݥ πKfWDHz:'I2|TW0j4ZOkW <(T/!+E `r܂#f~1#25=qf,s2s>tq:#^3[ қ �'⪡ɐ퇔\9n5stq?|L6zdQi`h⍙fRNqghL)yUm7/Dv?O3UѻH\>|_rv, 4r}jo͐kGaQv`h@?#DBى$Rjtg iEu`ZLw-&qpצ3#Ud4ڬ}8I~pfRt1z+dy^,>t%K[#Qj^7>:�x)L+ ;g.JdUmϢ(6m!z2)$r ض)Aae%5Q>Q#'Eo   ~ZS>Kvni~7-:3u(ȺweM@ Cp3i mO*c>Z.<goNܠ8y (h. \n\h+xљ(OGO5a~ym3kUMX`Z[)wS`}D,zc*6ٝbvdži}V VY 2di" YüOHkb<vzxG1Oևs1*)>`qIk2,z?D(PW,1 _)j~atv3*.(`{#zb&ʝ۞M͎__T/dj=  K$}k K HP &'g+^}=T fe=ˊ.ü*w[@h*90byl~eU3t)`~6]#Ŏ.|S,\(~F4DV{ݷa]yG6B+mb Wj�i!4KH(h;_ #6tG}&`ڰ, x@7Ӆ;$JGqTi~z]{9no:-]"-\ڻ?d�93bsEibNicFC@a>O1Nar֤΄zummcm% %Nߍ !sN1}#Q4[lsln 4c>wFzy-V<De7.e*df Xh RT7 mX ~yg[ӰAtC`f~\/8jG,Y2!Xkp ]IebWVi.֓o@ZS_/ a{8^�`q*vsV@Q/5sLzۡY}]Z<zQ ?*:ËhSٖk h_> "*>v W [}?(Z""S&N*Bi7]Ի]^= �= A[g=Dr@R@nč4cG8XBd'WM0/$T繵0)5O7P~]iB`V܇w`T](]i:v[MT%[pgMY3b(|./6x Vu=4fhTG%u DB;`P` .2bRpҒ(qq5;ĕnLB.>^m<挳j PRYlZj..8m*Y$O8֣p\$<N�q }A fKҭaȍ6dcG­Z5BvGJ`snXcE+ 9Ov&}f~ =ҕ/MDOuF?[%J2|'Ѯ?35RPULW5~+u㒆#}6 @*u;\ˣm~SoSVqڧ33v{,Ie[Z |SB:c p3KuEvD_h5,lV 9ɋjQb~u1JHr[ q\hAƲMܐ.tmbtB,Dx#ɀ,[tDΦ?8WIў~Mo3сڻMve- z}5#ES-!Vw)  6ᎷqM�IL&RIwӞ&Qr+ 6I˜1h~J= #u"캼[ p8#!ޢjBF»OvȐ<%907 _{J06W^8T<ʫF7n)N*n5L+RwmZ8U6p<AoF-d]TS~w4i~'A%_O`JQIWeHDB Veri*{?w *|*-72`C<Gf͐=D7RBYpȣ" K]ݺU Mo>5W,2Fۭ<~6q;^#ˠ58mbRx'eGQBq=LE)1bq|d-bѕ q< ځ"T܀Rʴ}C/χ<^%-(pݚnr:;2JQ/̼�x2j11H1!3*3L`W<szy}&g?36i~mX=ZDtԵJtD4HHˇz!mRρJ6L]q_حÀi'xjWܢ8yZQ5(�۴`)h!pQL骇c0^$c%~DVDOs ۬nW#ik[yJMkRO˖Qo HHN ޓ_Gl<(-r2ǗnAHbzêܱl2tuNg"K;C|7{V}e@ vǣ*IV#lڛ?]щ8v+*ߕl_Í?,O0>q$,XGi\3$:E_|83i�zᄙbhhGs۠ Pq.ݒߌs.$̰@b3,fɦdEr@%TtS#+>rx.3~XOGbBSBJ E30m¡Mj4;X{vZw|ŁKI'n'6B `ɛ"֪G=2. \0^R >);֐hy̱VI_Hx[Q5J0K3>H&pocaHmFYv/~&Fh{Css;ed;'Y<R `J;רVuR\zsJݦEYD_Q+1_jrS /k5)ȊK1 qMs/m^`5ɗ nd]mHR4|>Q[\ߖs7k9�¬'J\bv-7T+ü5׺<PXi4ʅW%i^xdjcXhwWCH7[:|L+*٨x8l)Rۅ !VC8IZu=%LꉂwK%p*}c ?Jaü0�e Eb!'r@Fs9[ش!5EϢ>VG zCT?:!ȸ+gZC!ۗ/HPǎ%f<fN\8GRAvKlxdV'Zl 79h|.Vf 2w<-#?x,eԎ$Z J,̟5rO8|d 10ہ!jT4y fwۑqHgs5w12,G�\II x6>ړv5.9hξuHdV2jEMx3CEU8S릿01{Ļp|3R?zv{zDoܩ/\0_[^Dd[XrX/˃h-9U>DŽsj+\tXhO6nb>"P6Vurru\GY|Sw,*ӹʆ<=0eD=p[D'|"éMZFu%Z;Yk9QqT3E*g?p2cLkrwU$XSI.c$#2'o܂hWQ)f'#Ȑ؉|ӏ.um#7hRnP]Wu]w8? qw}srJ\9-sX '_g{.Bpϧ@ϋ.^f:f,R sq~TWRkHt_,*{Ɠۄ?QUL LAbMr旺 2[fj'wJng 5QF!YW`X BYk k(fDp|kK ( <b=^"~lsթ;V d8È(!ŠÙX<9v`<2~fUh#XZObU^#MtnZ;+"]Ɉuh&(tIv1y*|",^ 21S*g:X$S5\Poo/kP�,X%M\)5Z!O}XAyU_ݯ>!!>͸J܎#l@\ylĒN@�Omu9Uo;OQpzC6v5c)I9ہ8҃mbb`S@-fv҃Q}=}Z^` cڿ/Ccz̢%A leqW-4ׁVxD&^FqљYjޒx]FFo.Ƌ?5߬.wAzC2/{EeH &?{x+�usuy@CB%UO( 7 CA/u}d! {%` fv&d8JoJ]RjF1֠widh#5rmI͕RFP7S2"�*3)povC"˖CB2/#rDolWSK,90b`ԵvlVbk0o#]jA)$}H H^?>7?S3{jWg`Өu/̋Ygai'3Y6Gu> N>:U4 FhȀ%`5nV:󔟃\ކ�5QN*)BwfA ϼRߪy# -3dCv9iv@`,lYtmUgSq9'ސ{ @{Sfp*¯mz<X+tAukKޏnvpt&Ӿ]{4wUvYo(T4<Lw"\B;Li'~v-|6)RvQ4cn*pL0ev!q ]}wݶ\-4Z{a/Rн`ZxJ6!S7UC3Omyz2rJALīWs ъP,L89͜R2KZ Ǵr u5I5Әf[Ձ]oAوiS!y#)kS;X8 G(66e['V@j<وK'NNϩZ06-W?OL ֔IRX&3Ju(dVc"bZ0pSver%JMec82 ^iNP\-{# LLJǒҊlFӬYN;sIW~p�/umFzWP c5%sqi7`)?u�yܦNa#C3x%{v#3Kl'M>Zުf~nsnX)j] Q̕!I;IOd<Zb%.J ӭWv g@:<DAj]6̽F_ x*TO"Qw ժàSmq X_Y4Ϣ$^c!ޙ/anP*Jzfh;v)M RေL3`k$f+pVmK'|)n̮SʼzHN<[eZ0g]T=?d3i(*3+�_M3]z 7.u x֐LpPAVQ&JdI M!Cݴ^i#ܒוp[RN:A6$TBLN! 3wY1H<N!,(C N\[x�tժ2:]+ŷK]vzXH ȩל-NI;vч|QAHޯZBA;H@# S)zv6vqMcIEN|Gr/߷V9~ t))[]FjyIa% \B֨=9UfyuT?2&$Y$hTIxtu�3A6!: XLSgrxIj)%c_ + SLDUYc<1*8#$(C , u\Kȗ/?õ']B(1$8F8cs:ݶ,0yHvD$"zĎRR_t`S2"#hNFW` ً ADdҳ}>-lZ\�ǥ%N 2wXBY{ O޳r"vp`e"Uuh&&RAJ;CStQIV3gi6lT{lR#rG=L2m0%@x3<wKМRLJ6/|q%2ǝXOߩ K&92Q*}TݲTĊRyYR$*̬QV\?äӭJ]:+:*Ƃ:F�&W@[]-ZPϸ~ dIXm.Ļck{wfxVzP|axP#z<xjgiEgknL;UY鵴w-| YF{*­\RdP,Z \><j,M=x #-nj.2L6:x<Tnc'5zk/xҖmq ?xs T (& `l:0J|S1ݩN-kH#~Q&i͹bko9X{g/ ڹl=Hw=OIʏ |"s'Re!vgBnj_ruLр*rD>J*8"CT_?fh }i=[A]V,>^щMBw$E"O%'B4i՜wٚnv?ҟ'םqj 7'K*iY~n{sgF||st&ՑYf }B5 (A\CX .Fٚα/mw7aubfn0Fr) @2kbKݟ%`"܈]1,{#8R3Eޕp;DT67aE d#6`vq~C\.,$րu0ԓXP G݋5%5x=- 5 6< t%ylA5^mxZ}ER׷Υe\YAwyJǤ%-GE /gOL|g'Y@p&X_x0M;)**e3Qtl_mKauxc^[b{Ԯ:mr)b}o%h: Log{vT*gi@+IT7Lk00FE$y "g1)2cx<9ebEW<0)$%Q51L#<j4Ջ@>K;Gq{uER9JO"BZD)>pf)Rg?nD׌TjxZi,TM $m0T :8a2>ӱ%zC%)% -C&Do^T#S1Z!_\<2R i?(s37 b<dAHȀ^u@S&> `g-GST4Yb _w:jWw{58L2cU-)A]?o=s2|jd#Oj߾GXط!tPc!wPIX 4m5X5bjc�"矴уmU!/c#,ӗMǿق5>r]} BGK3Uݻy3|ޭ34$LջY{yFn. cUKNn|54m'XF| ;#{#$ ls2wv@ HsV?ݍ|Fy_ q/$_m7+ENPay GdqK-kx{p+GTLcG@C_qe\YcN^@i3ݦ$N.=mK[-K-+);N̶ASiIfhzYR;9P1f h;[iwP|"4v- wHtn#2A W8A.(*vU*D?.uW\,3<+ZP֠dgǣk˱`'P%, -9w|slhBv,U9ZYe(PO%*rȞTk>c-M �\'B sU$]%;XⲀ`2|^} I{9tʆIMixr/'Uiҝ%l>;i)GY׽5Ơڀ^.sFT$:p4AQn<^5pGuM}m�Mc4ЈZWh1 eL<۬lZ /= nyrZԅ2km=ÀV%Ͻ9U8;0 s:!,8& 4~5ZMi&vR^iY0*ڥW7+U2�SD!jϛģ6fvU-SE"f?]lj s؅iv 1;v(cs0OI# *.U{* Kv5#Ŀ'Kԩ0":ޠlAsm=t*E[0z?hv@"z cr26Z\QƳcgvP[ResLBc$GGB|D^<Yۥ |I񡕽88/Kd \NJaAV#D_b:Oq՛U%fu|Lҕl+ma_FO{>g2ԕൌ>Wx(nw(i\ 35\dk"f<t=Xzb2KQ[^^*J9Bֻ"b�xԸ&%h 2^x޴"7BDb`'[dOuwGIbՙu,j93QDw5CR졖Қ}8Mfl˔yZ2G xu{C`nŤ%<.gPK6yyGUw4 "I6U?2ʚj1|؄ڳ<zKvח|臈{tJ7d؂ FUQup*=¾ ዦ -[ݲQxCCRx ˡ ܁D?ZU<KH_Dȱ �(~.(U1; T*$$((;#/ Rnj-'&|X WLľh"Hǩ͠T^QSQAU@a^dr!q>>[xTqLGI Dze ._Ҋ?ɢqM(;]TcXu[uov̫Ȼ{7]NU&'#Yn밞vb(~x+PcYᔋT73ti |L<r/φ]0~[*u:r.`|U9 I[FC$$|�@֥"cFrRf)cU Qz8t!JsZ+nɴ8z%D&#Ca>-ڙt%!n^X9$oNz vs^&4~G!C zAGܠ6$f"w H5P TG$)R}ad<:0}~ acƐ:^y3;Ƥ3Xv %ITH,e>#b)^4eF,˞M՜zm1ԕFy޽YZFTdK"d}b)ͽ`9\UnU!$ǽTwREr)eBtD�ya0>4!t}1OY`vp7l=U#rWJÚy#\ZRU iΖ5Gd4^F:g2tj ?2U2+c+~w0!L+HAӧ-, ȕ}!jYO5O(4-]K.-:$F2Nh%Qo*l ?^G ,#XkU"32ǩ/ۮlspJ;1~BҌ>jTmR_X.r>t`"?([QT7o4rm,81nP̷SG&(x Wtpx]$ `{U5( endstream endobj 1635 0 obj << /Length1 1616 /Length2 23874 /Length3 0 /Length 24709 /Filter /FlateDecode >> stream xڬUpK%*b-ffɒ,f,-ibffffffff~>Ν;qgGGtef\;)HUm A6 ,̼�5euEVAk性mmD ^: 2Xxxx)�"vnf�4tte'`3Mm�oAVv ǿU@ `bn((jJK�%� = dhen578h�&��lm)́/�pr5؁�@ǿ=pY9C_Bv#):8:ٛ9fUf@r;ulMF9Sҿ0@s#\ o`vpr01/�{) /?:K@;;+g?9;:LYX4r韥"ecb `aA65C ` 2gu@2;HD'klC;YYANso@ks+ST##o+lLFsqsWhOlAV6zJ� 3󩚙Yxpl;˜IQBVTB?SS_j9[9EX ``fXY�<l^Xho [63˿F Fբ1_]Kr-Zf9b Oj@ٕ4VT|16Nns[:<=ŲI]xnQvp3|M;W^݆dq;WC8f{LKAdmRىV[pvNpD5862<s wOGN:#Itt3h0 bԩ^֖~UOfi?KEV$MY Cަh6zo&Qpld!k϶\%^To5$ 㼦wׇL\c$Uu)*^ l3MjDv$ NWoV7ӨsJA?OZNɅ8Ŷjz;s I{^Oo&wݴH#0` -lT/Q7[fcCL�-WD'',0DPÜcBO!0#Pхw̲ސcV3Vi;QSgSPj\Z b~O8nכX'[AIHEc{mɇHu{VR툿fɔQ ԔԮ8[�M; Jh|I6m'Rtm;+dYS3m�܂m^O֭k[U _?}'iЭX-3;_s`B̓q`-H ȓ&[gSek G ׯ,=|AjVNҊpk&;Tf9c\ {;&a]682P~[_oSuHscd|.*k/-fGI6}T>jO.<k<_ G{^-h0A;TPEK^]3|fPϷя5Ȧ>y>Vz!й{bmM5DTKB;C藚?A^u`6)8t+`4tW Gu٦&3Nqp0R 0U~݋Fsv8XJ 0N4`XvR[ԑD*:b_pN+հs o*iV?k=3 bی`狊FHOW UYGrToS/K]q$%i;Ⴌi;GDki qT0?|6tO ˑWa4hPz V>.Ț#՞oD8#n#RL4HzfD]=\Dҙ^S+{\ikTHB3LV/JC~];~P5B{vUuKӏzUM};u!vjMk۫ڻ[lt}ɲ_F O+%$o*%}'(2Yo+i2ykhY~=f 01Op ٻ8d- oz(HMG vkW36]|uj {O /AC=HDGzHYNG 9K$1�ϲH0Z5PkgCYdhnwܴ1AXv(DOn|ڴ̻сrT{n~tXY]!b̗6@SX3׉ &c'x1CTނՔ)Sr#<V"K. 8yU(e8kg%h8)†{"d@iXYz?ޞ&# uSO.sn SĠIX礗H zݤp#\MTzVC5cK`zmق`-}@c(%!EJ-5K}E[c 4 [i{Po]1c=Y$fS6-PN,(ǪJ%Irɽp7V+7f, j/;g3x1ro~z\ s6.uto t ؟xǖz?kJ7D*8P:%! z+;n 1`P.7C'e l>8$/91~Ü5d dEb.ܬ̈́3͔A 3(3) !C~;0 5u3aWEPn'" @'_JІk 51`:"jDGaV 9[:?OG<9xHy =p/`#VvQd%h(7P*ׯu?Y鶮ٽJYg> KQ/[#j`X>96%+ o)Ek)d.{E/X'N{?t/DB&CoO ] L#%2U?goLѨ H)66 6[>3~${JdIW.<`7s)[k8!wSdX֏01<m�k6B\9b{tNPSA_$_u'0$qԑq2:ȌvE)X6}EͰ|qs+|]i2n=`dpπbMgK5*wFmN VgZ'!nz leѿӆʼn~$<geE3 5ҘӞڢɹ\B%Ĺ+gFoSaj(<ZNgSēJq*Qf 3b+:tF>6:EF )Bgk8v%&6)t-М%bZDK^hAa'?Ws�Ø[La VQ:qSfrńZ8@Tlsw +1}}S.sGv )D7ں�Υ@F$xHݿurdH-!q?cwB`af<'D3F/W,Ȑ [^TWNGLtx;!ճ80 {L|9K q= bqRFb3,(?$gjIٽAsC܊ 8LpqsYڔ^H;fn 3pir ghlB3j)œ Cl8ũb7dĤ=KW@p&mb^JB@cա@\Q<sFC=oGȖ(͸Jf; 1׼:-t:#w%9GNVI)!tJu4-Ck4] <O_DZnGb'·ГىJ fx�#ңx<=\]p:(ޙܕلp8oi$zSA(&<BBb͞c!MǷ ~{xs ~L~ICqmug*/UzE9Ho("!9=!uâКۚCIOnfyvY[xX oCM4 >Y <<f/1A:a5:g?G^u]K$VW.CK&o�jNh6?<v]_m &[4;jd-]6W8t4/}Ge<y&-I5UfUDTsu.4aBӼ_%>Z9X:I0jhlG3cj;狂'A>62bޯÓJ DmD._.2}Wdw~5I؛jfQt%~R_U<r:革T-ɬ[~Eڍ}ܟu[IàB^:t?1ԕ9]Ba<IhjR-X( #J 26JL!QgZ܀!ge=4>ރ2ѹ;+f^,ycqUo=~ك?K3M0[V=I|58Q%ݧN{{WI,4׋1#82<6j(ΆB94$nJR2ce4 T=kOjh"8j%|8'!*pfFR(k?}5ʬ(g_hkK=vo!'K.99oc/샠|jR 1֓P6Rz~|Ϛ7`m%ʔC>V+̯]V�JVJsS0 *) FC {s4L3#S2&. <h0u]/xfIݵj2ݼ:>-<�lyWQfQwRp.��(a8 7)<y'kx-:lO%lcFTo~T`[`6 S 5?MuiadS'=noyV)K6O#ůM$5F6(8?"ٻk\YVCRe1oLZg@ԈޘKVSU S<SHѮ=c+քCG<g'ھ Y E8gG_FZBVدaFp>2Bf)`[]Q'gZ=GcJEKKf0 8XbcUR D4kC_w+8s;x}λގՉ?`:JG~|ǹPfZW}Wh̆0ޚrvY r Lʋ 'BB$2:fDW%D8*026cȑ0s>& "{.$KҊ< `,Ҷ`(=T:!ڋRLh6 !D 1oE %ۼ]U@Ó E45td:9ROJ9UЉ׾E M'ڤ5!^Wgn8Xx\ږS.SLz:nٵ%Sk{ì8}u_+3 zANúQ{a/ u{adk4o/=Ǽq+<TzMohnhDN|R)'Xke=(}O>/NWr%JD6Ώ!f-=j\r7ГJcF3 e(KHPpZ3VQ00T֩;o :Y񂩴.\Mϛ37|QphԷ .T]w yDaLe>7Oj] xs!tsڷV~ϧ4H@ƸbIQo"f,ĦDᾦ[<zm|Z+sRQ<q5|jms:o.1;ٯBoIfwxb c g2 7BKpUYPΆ(oUdW�r yLɥ w<:sp|TqJ7Qv}8,YuK|[K<ŨBII3 Q[>U{Ys'i&0{`̹/*W?k̔ėCP]E�j:}iey%sܘ2zfl GWÌg7V^ܭұDA#޲"Inqk v?VLͷ,h}WP "zM U񟖋/܍پtENEv]9|~3s<,?}|e{=/s)gYĪ0oMףHPjd!7{x yk,^rҗ`b2V8(,\H/v,3lo0P4Tr̼a߆hXn'ToǕSvPok^7.knc3wѐKd%%HM4Ѭ evtIAܒ,&Wl\+->2yNp=&{saQ|֟IW{4Yr#~o&Էlnml*!s숕UnS|K]?; š̷!Xe4^ 5Ln P<W%r!ˑsRNJ,˺՛!d\=[]LRE*P%'WPx=BcEț.+D=&U'*{S}^ԯp!n|/~Z1ڈq[LdPj*<dZ,(c`NSZuWv i4,@QUBm=ԷSI8@:׆#27_X0KVNC6Áʤw,[o {?WXjz+ Bj zHcx`Ǣ$:jʼnb/%x<y[fL %u_/0&L#31#A!U\.6Yr}gE+]nڡh 9,�g,ܻ%s/1nYmqGgwcsgD~=e }"("`F(t-1 3kŒR5F}S=^!D$Dw乭_9ly|і(_ujH$ˬvힶ>h]Z4 .IX}yEEHW"= e z(7!Q}ɭZ 3ξ! :sUPQ>lbRjrUQc]gP~Ԅ\5=EƇA�M.-ּh_9hH}l+v lˌQGdǟܥc1%Bgޫ%2S}܃*(˓TW5-JCSme):=2 >aZZl{,%&m<nދyY-R^ߡ+.lٚ$qV1T>EI~Qm 6arZXph%lA~Ob#xnJ97ܙFAwx<c,2%ϵRⷰy3n||aDzn\s0&SI1Q&1-g -ۛN*= C0ƲD#0M5ǝ؁e^q<B^i&znŞ=hU=].H4E/El:\$xܞDp#џx5iVS<.W&rSxm4lXSʙ^@L^r Io#qO#Qz`ԦFF|]##;vd9 O䟯@RB;׷s;Eeq:Gy 6oԧߔ7?]XnLUBo9S:M8b%#EBiG;<�,_\,Pu jdi-еw^45*f@U81*:[PjkK}iIs |+|88f]V WH ʯR"\+)3\ϾJP 퓸7f#d n^u4VtwԀc_S)߃,se] T`\n1tn; \{:vm�071?<ш6oe8 M=n]572vacGId%=u&J iÝIY<=3gﰘCiNïVJc8ɳr%_|qĉ ˡΣn>ScY~-JpbxMQ#gзt qk'$dTK042lrJs/Q0Ƈ^{=or+;wE#B<Q$#$& o'sRWR@܌>1"<׾Z,Ǵ (qָQE_&*{bp *dJ4MQ1> h~κ"ҿaLcu0yZ~-~;,Bq'$wŤd{$fu,7M_r\b>΅s{۠J :)T'lv5Ot} ȧP~+RHBNVP3{PH[{C`[h@ 8+P:Wrw0B^IyWe+RO[񵍜+$恇/7Jax{SzCJZjQzVw< oU","b7M)CvicO_c$.&dB7a{}~ t,'%썋I!PVHՐw0ޭ}5!2(8fnB 0 y0-Vt7&$[hp0'6W}ɧW@w{t{B$4ܺ~k?$�P_t~.NbHh'h00G S;uKOsig S~f͒i Xud c{ћhFچ1b X6Ti u I iNjW}"Rl#xL\"DeW(@fJWDEVS=^Г5R4 }gUO+#-nSe3x1LYosS4􎇋BhCW}ZS8l 3LB Z )X#̪޼00.AuCs+s c0D= %ci6 X۹pl8Cfp, e(HQFlHZ$S*5+ƀ@X voԾ\cv<X^F~^4h'7h+m4=їMqyhYf`۽ = ,LZ\ vtn83c2Z1g@g:/ω)kzAWt=ec>]+۰APd.M"-A5ݵ"F=ͪhSEvOI ^WqGkmX6ÊA'cpz�K#kI#b*(2,ۃ Ddm} ڠ#'՞ j@Aܯ +V܋`2='k3 65^(7P@!Tm|9 +'fl 1w~B輺W_O>Ԑ,31*Y7ɰ{Џ33+7&̧IW(Fg &T# 'UUθbyڰZWb ͩQ0ڃ^i]ҕ?ѱcTr0t5>]E I "*)O7dVV+4db[SfZ[u faDMy8b :I+GGJQsp@0+Ll&LwLnF 1[%6xP] 8{*'W˄!٭8r:4҂RZfRfKLQ):�13j۶Ji׎bM1%|cTpz>ՅĔO&e겎8mѭfKBe1/{Aw%I^ Nk/UQq9EubP> Ɛ�Qp2H'-lmjr_2-FLh+PUGC1'Kyb9O&S.>,%k]y뻫Fn{ B{ƥ0(4R{b՟J d}&; ]ߡgx̷mLNԫnSi,DC m⊳[ SV>s:z0< k[AmriprgUA[GX9Bp'kew/i/! /ˏ↪|zAuD$)KQ&dakU3[q>_:70?^W8`*}cö��] r.F*km! 9e@#a{D+ ߢ2+&]QEnZ "hqh܃⻣/>I9+] m[O; f\XmojNvgMFk:OSpz挾0A-+UV@6a;\KЄljT+MWŌ,x6�gv3A^ξ%$;]~} :L4u1Sdw'x1+;3K]|UQxO78!= )SU&Pӈ+p^6Z#wÛdopѢO?",f2Ql_R#ol*^ FZl—uAJ}y_c C+qA pXi ܤ7NF9V[g w_c{,/]wąnQolh8#>V98Hs}gjwl*]`};E(c*4 2{Æywh?Ȋ5n_r7T@79y$3n(\LcPs^Q1}~^er pKi=Oc^s<Rb(׎s)/Z?:4EgD00X[ $Pp%unwT&7k /!kF ~I:-Q ʇӥF|N߀&r,ۻ|XPFe@rr+_߂fa&!9y} WN:*S`]ҭr y!lfePaQo@Orip! {c=GJFX;i%F}PJ ko#J4GBz:PWU+1[Ġhsy=G>۹&w/l]RoFWx/sLW.1~`1p.{[>n1"�G9a,7T*KT/Bda(.-ko&dqNAF[7E33Ky�vm0}-( jUd`,kP/JQ4V I-PnK&F)4[z m~pMQC('-MqN.RBzSv \ߌb"ɤ.b֚%\-5c~'ٹگO@||i;)@M;&{SQ._c`Gװ&bӟo KȲĔ>C=K=lb0Y W fYFtcm.mE+CN҄(j0Qw+z(2Z2tg&Hp_ŇkDt|c6 "zmq~ ΔK}uyE԰2᷊5jIulo6S^Q[T2<;V^%@ӎkSQ6Ö˞=ooEB?�׏'3޻eX6 uC:R46Am29'uX5;1@@]3&(b-"@?}&O)-b1Sjf{z%N]/6z[$\D*0ѪiedZ7a=K{j'^8gis{)2tcfMKLT CËxE}Gac(D#I$b 4];Le �OВܗ!ԃG>I7iF;wt]Vۤjo[9x˦ L >$6 P*3i7#J ozQ 9Y)Th7{8: {�;Pg+9A 40eK!7Q&עEx(|AR(=_u  ? 9 l;x}UM.PkDgyjкf^o`$z+,X.qG$/t.zˏb!l﬿K#Z&MAn' $ (c&O(br=*F/!-n~gzb0d7}Gn06]"Á3jm)wo 4Nߟ1uçsUlGm/Ģi?'+BⲡzvWX)^췪^VؓY!V`RLqWWlu3]3&D"vzTvJnXGYNP~.Ѐ;ĸCfw)|1Mb GYL){)%Y-1,\HAn2ؘdV`t>TҽP,x)[Ȭֿ49aؚmeICwE1Vqv|c)ɺtm+Gf;4.&a5|*8od@Gɱgޛ@M:%l#q6[Wδ5"O=*Ws0µ&aB׆΢CQHֻQ9rEB.AMQ  R #�\ps!s😏\ϩzwjAAKavSq6ZI/@sOEX/_>*̻iYa<Q4ؒZ4gCKs0_xDf?LjQ*J:dc:.d8d5r:vZqŬ9|G7/E~ѥJr}BCv ntc~ǺCdџ@6p^i0>Pem%Zؠ<5O Yy H$ +LE5_<v@EBz?"ٲlK=y^f <t:'_ywjЭnJ#y//66ᕋH })u _Dj{ȺԾPc19K:,U5N�1Dz2zbCP2To)]  4{QBK{x2-~Ca6.FϽ/ ;e=51`ec{Vd'Crg(L7wY6|w&H/UPsjYd=W ?J_X&7lyyNkk5\hd7M!1,C%zFӈ@+L-yH|h#2j3/K[h`p x|G@º $pZfe[)8;rt~$zHi E6 qa3?)vzQh_Bf ~:v'P; ]02OY|s0gKn0&m`ъEyO}"Zxл?]zQҐ34gVn,eg3d¹7Z5~j rڔe?++${GT*׃֜^kQfo-MzVŸH Vs\1G[QoP;Y J^ZpSg0z<I)E?Kq,6 I:di=eCF>gfÕa3_LkiFXn#e?\ 7aI槣UWu<P^cM&G`_kj!>U pa,KzAʦ=ZN _Q !{»BмKLټUp;<hb\qqeW!myE$!f-4p zHO}U j.p9@Dw-R0Ŀfr X,Xj$lJ9[z*0BUm.i7l^چ.ȢW\ڽĭ\"j)cTv!:Ʃ5Zy_tQ*$9QS,~SR՝=nePK[0F!\}ro>h5J>_'v!_R ,ShvQ]j~3~!aUn}YPO s$6Oc[n!HiW +H:AC&Nt)ߩ#ˎcE1]eP'Q?N>r&c6hH3h~_{7%[ ff![ oa+S͛ Zs\XV0h.L[ Ol]`\B~-T94:3|-P{ vޗ䢹`ֳx"KVkuj>\2+ztnDhju8=8 yV�X8.SE%|~!(m&<b~-}^Kr? f[<5'Z8[h` eHI Mh)͖b>%tCd2;J;']ͯlG/l%%Oʿ2%Y| vAX& \Y:@#ԋ@`@Iyh0L9q_NTgPiojhH_I ]Q(;IKnvo/=͆*iY.io}w4[׾@A&"AR'vu|%( !0k!*Jd)[Vfxty ո)(u](قi"􂚯B1I50AƉ Efh^[=>V 3ff ˸5Q'$R%{;XS926h$Sх}lwsr<_EnXEل8&!l[UD6RxQaO k$p'W Z)OV*^BU:-$jeU*(W;ٵ`Ws4gwvuJiX=zy6QL,M64Cʼn4gDK,5Ȅ+:(4y(x-Ͽށd_-BhPNڼg2˷!E+eY-S헯{洱GE+[)94zؑ=;ɕeZH5jQ9^F4\0[x!D9x4SjYu)ic<(AƳ�{Fccdm3q'v'84G/ܷK"jKPiOM , $GZ145x3`O).sQe)7(@ӽ$V@o'ɗ" z?@x{2'%5f-] Kmf)Q;Q}|R0ʈ:nUwsO-AK-;bkƠ4`[hLY&9όo O=5g _L Y[H"yx3ĕ*^ xx#*^Uv3$5 g5sr9ږslN;r-d+"1uSu: Iw8.@47zUaǾ3#mEn)y�&xB]˩tu�.3D9tHA٫.V{"�-E )d!Daڄ]sTLfw/w&}(r[Ee W,|0eJxC=WτNRDG",Ğy R4R|z#sţ!GoPDJCI"Ni;~R /?LWȜK)$W#ó=΍n>W32;rc|ڨqt T!,KT-{J<#0hcqc*#ٵ"0}ğ-(ݸ1k.İWxOPrb-SO It%4DB$÷�ƱBx2ASț9ar+S_Og.R^2~`xsiRc>)."[jڮ+ 1 k^ݍg]v;1H6,8\'+ɔ'@R4>Yν?ՄRdRC֍348c%L -zNӶ"y.#ڷl�RAȶ4ƴ!߁61^ V(ng .oG2_22PRAŝIZ[;ȑs)c@j.[_PO3a &J&em~91 EFɉ?�'S_YRڼRx2R k_b &buP"RP\f]_UXJYSwy0؜mU#`f͏A>ߋi,OLԪkw={q j8"y떶NFb mI: {iWrEwo[ i;̴P Gn9р0CCAZ}ZC}P(~ZFdøsࡗD>&e N 7 AN@AMJ ʾeP>˵|"g<+?cEnB}$0<%`)onO=xC2EHD!IrHP:'zgZhd[jNFf*'ԼAo3zr:7|>uH"'݀3w͡U7"Hn{?I�,A[k,a=n C̆H+`+pKD[#'1־sSQ>x9ֲ~wH|y@90tQ$NeT=u`s50ɢTxг֫kUu96]'>8 ;hP&Ljzlwpe\đ[N hP| 0W t?u;)uu3a2B=/;r-9q="}M2vúZR,ٹZY3H*ݺEE~@i I%o7o8*#\ N_> )SrE!"P_o%#z2+:<UwHꍝ< ÜdXږ`vD5L!q=ÙKކr wLZкk)&l6r#KQu�6^PO�8ЅP TX5jDEaPn2ʌ{Ǥ'2)0ecA]M3v�v}] phҤB.eqT_o<WkacJ'0�fJ=j.|$f4#[=$ f66S0Z&Di%Anڱ|؃XN(_. ؝\[Km׏V#c^ᑖ1+3xod(n땰Mѻlfdr:{[*35TI%wd{-GbA8Y?m"ˤҶ B*4-]. @S2a%[9LrViA>'# !qs"K7Y/@C꾗 z9vY "jXnʳu O A tv.ƺi 3Ԑ66brKq; Zf<bzPw*l=À dERxG;.viǧp%׮_S/I!O"^mJxK鯚 (uO[h!v~=&$5V}_'}CHysU>oLOX'VFEw*(A7kG++dh}bp d`ebm NF#M&+/eB WL/Nצc}ltn+>(>GnXPRVY)1$L,PY :'m-j {[ άb|pLF *16Ss[ S Л <kN2'cP[&nqqA.ky&[`"Hʨcd7[[n#UZ|!?6�@:g.t+F1Z[S wqp4'$[V%)X .KCmLY TMS;l9@F9`j=&58%7�_< ?yo_@]PTtIJ*f<##,mxMm)XRٶ*jA9Y)%@G)w D!ÞaK4{PdiA^X̯GºD-ATh0ф.b~2%izz~yPA3U?gjsPZ$K̸jˌ'̴3z>E { " ^|<g?g5fz8ΘӗmBIZME ,#?^N*WY wr2s,uPd}`#aL<#tz]C"O>HӁT f$t^5KysJvD{"ě+]A"d5 m9 u̳yC cY^%F0naX#[1Z &K( lƀ|!uwyu3-˰5Aj'%pB[M#ʬ$7 L/ג3I;:I L{lwjmP ?aDV90byFjsR&YSWnfxp]vWMSBUe Z\Ҽ󕢓2FoCNvux(""jJ-m3"4ClzٞfiP_N/es=I8$F{ I<BJnPZda8nbL)M7e[t4wϏe[.έQi!OT||~26veDŽ\f}x:񾡶qp -ջidn?h;̲j% aqUJkQije¾1>;\8%|ҚŔ X(uɐU!0$bRFqЯGw@%?8l@H碰-#}ZY{EɷڒaSƽ!&"g}HO`5 mӂYU9=eȁ&U&9hT`W6"CDU%&e7;VXG/!Uvjy5zIP{$ŷW}wۋRi窸j/aJN÷'|hK)r2k\3aw?fwClnX8Gn¼K.r@a7Q6 gPթxh#*m=-ǖ.97GzNu@4X9;a# qr7qHڇ}($oÕw1?Ŀ v}8&d(RkۂbY!cckT}7 C 'oJ6dM{k 2{rTǀybИrO罾bZ<[ekl(\T\ۇ-ǣ, xEk 0D)b)]|mCdn:qfD:jPyDeyOҢ2Cs0]zE%v]b�4Entn.؃T/sA'^-!BT_a+Ln -xoB^3°9~<$F/U2kUZOnM8ez f-nAWbc.woc'7q5Z0UNUl} ۓBmV/[y馴=iqcJ<Qի 6D?Kc}LX-L*I=OW8&||b=>d&ԲB3+)t>L/)ex* e2=1=R["r# p]AHnoiLǾ M5uN13�NMBhks0Q/h[낭ocyC3Pᲅfih3]/ Ѱ3 3E`H t<>]5N $ǴYM_C} JUWv67y엿C/7l6ݲ}XSPY}VGVgxBt6T+YPyj'!BXE "c\tv ஥ُic~g70<:6XݹNm+b 7.D1SdX1J73 "q nn$ܤI9lNXڽ&> 34H0)uTzP 7Ve?9%HE=76ޏK%Ybc_i�[6Fɑ16qe�Ŧ/Jn\):Ik<F+N&qe?iSO1q1Y1)HyV5 gVGzjm( 2wKNj$ꭕEc8?<ς꬜~?^+%ٮe49<n.CFわ@5vmFI9ϟU 9 eԃ"^ew<&ag܍ARa98"6}ʨSw]s{-N}kx;rϵqZc1l %KD{ Z!-R`] 6~-XAe5"�xؓ'7SG}Q~%CGyI9%9Uf9*@IN_ԄpugC$I /%iy1Pf}'FYS>8vnQ=yAzxj hJmK\żbZ}{UT_GB=#odu-cC| 3fƈBg܀TKSQ8gzCPs/QM#<;ci [W Z@W>r|P*=h&.=boO8WT, N %?hl7Hd/d `GL|@4!:9^=,( HA|92\j1Oz pPՌg 1ս&N9SWv&9Fc= ߠVQtۃ[>D>ѳj2. Z9[U4k V`l@*,/"Yul+1۪_i . K{,^4`lgpBDѤs{ᆮ7HlqW浿PޚGhќa%uj8Tr;ؖ-^oiډH=P:Di  EmTfbNC@UY8o<d"}�w]6໏&="ctuqӉrin�n.ō$] ̼M=F6J|rY qHnr ҝ\˙f?e\A!+`:wr@iD% ;F�[#hK٤ԍZ&?)-30K)A w(k�nTpkoix,?5J,ʐel;zK~?)$ó{i*f;YttE練cۚ9Ե1OQ6aa?FB< dBBhJftwhIE�B;]!B0\&%hr\mjdG&9]E{07h@yCЛaA@5O;,.*x:0ۙen?;.ЯGuqXI\uǹbZkk;4,sE=z�Qhgs A)c7yʅ�A^tMҀD\q\|ATEմ VĭH8O?wI/v\w^M2ƪ40OOhՠ乩b?]V?fN ǒgLah- .Z| Fߩo"I;U{TD<gU\'9±]3/M;,d,K'J/,>p]7ԱFlvmqv+X[$5~re4/tD{G>SD72@@|G |Q=_FWe@\>Ӡ>N9|∄ T@ߌ_T`gɿphqݣ)T3o; @Ջ!𡞮ޅ�RYVzkOp ؤܣow-t|\U Jp8%[~iখЬt;% <JG핎贒`̏)58 -n&hX``ƾ9Sn.%Ct}5fj$"?^ZA[$5XdQʷM_9R2(QNi;DZ&ߓ{DclH~C4g/"o!|$B9UF?vKf08.}yI`W, *Z7 8a2ZF1m= }J*yW;9 n)VA߁J"“+!aF 33̛>"_$"=I{{7A/IYtFݽ1f ~F#Gj(vCB\;Œh{vj v1Eu*{2A#lYsW{0-ӄhݗnu4+ɻRWӸ^NH!]Ap4ArBFU Ti?+iwZ%lIwCjؘS8Ԙ"^&m;D?G0ӜQ"5 x !0 o&F=^mixs{f&OaI#x�UQ4Bxt<MfR%<* vqε6(\FjyS: JkPvl٦`;_hu)J3ڴLJ_#Ӫ Dlj﫞8Ho}Ctr@<Ä{LvZ=(_`}W0k@ -\r~.݈F@tzoQuHŖjyС0%h8eY�kʱObZYl+ca-"7y }.`4L/NL`*.2( Sy8�: ^0^'`V^4V 7"[5pDW.abѧ9HlgTHfBFO7ơCK/.CC?{ĪtJ2 endstream endobj 1637 0 obj << /Length1 1630 /Length2 18059 /Length3 0 /Length 18909 /Filter /FlateDecode >> stream xڬc]%m۶m<i۶mҶQi3+{5ӿνcECNJ/ljo sgf`!RWT212W5"kf!'uXۉ�x4Db�""fnnnr"Q{O'Ks "ԴteDž?ΖvD?�6�;ׁ��@$% ID%N$ 8)XY�DfND6>ۙZӚ3_.ag"#"g0 dkҙ \,Ll\M)_98%Swvq6qtp!UILuX/LdoY9�<\e 2tv1/pu3 舜�FN6�g4Ito`hyg .�3f9M\6agU쉘m7uu Q302$20*ػMID2?"]N-jc`d W1DrD<2v{j]F(AoY`dbbAdfdwVۙl,�58虙faibm L{eWҒ"겴ۻJjw 98w\<�D:My{<'"bAMAD0qrF.ND:L LLIe'?bdgwlW���؛XedgcL 3:7gDrW~ԅ24|ux.;|cP |I)8i3/4cov94U> gXnH݊ȞLѻP/(O(GG~݁Cax:i2scOx1Nd֬m$51 Z/ͪ"`7@I0W@wfSM" Ev5 e7;\R/j^ ?P5}gvޖ6~9'xK ϋ4Q'(] pog1DΨi#7@9mfL6Bⶁ+rҠK"$7H؇gt'.KFQ ~7zF9*Qr㳢1wkE!*^ГF#p*!ݰSBpzlKhhі>7#j C&8=e~P �c~"  Wr7dg-{9c.yӦ貖^% N$nEًbPhP:f8Ցv@ְo$ pu8WK|⤉+ro~qцH߲ˡ"̛*fap*-5S]A۱:C{G%3&C/g{8oz31WH}S "fcE$̦CfY`-R6CYNepɖ[o\[]x1m\e,'Fv)7+-9 aj8wx"5{68ɩtwgON_Vx7F;$9摣BroL=2v>dmosBcߟ|k ڟ=z8V?}-~M)umG@Rʁ.j T.Z==ԍ!",|ѷ^`'n29WG@, Jݰd{I}^ ⇞Q5,=)THbYv&c @28.$Iw2``V.IX%])$xa6Z(5yR6n]${i& G'h47# /UD0Zh=ϯ'Ijʊh~zڲ NE9N@(| Iㇺ.;2bdc+}$+ 8 ѝQ#]@=h¢&nXu�wqP`C߂ oY*h3@&ķfzuu$s]2 Axp[~8F!Ep [wyB.UQR XTȾgMmedęZO͖݆np52Vځ49Q@ '3izjɅYxo0'*(;ZtZ0ڶ|�`3c.ۡ#ܨUYp8U|w 3帉w~gvI ط0 >Aڽ##B IN(ߩQI9stO2s)!0̛Kd ;QBj',ڻW{Acd͹4Mw 2g,fŏ%A?Vb; Dƈ'GåBf/;t؆CYnFfNJ2=SYgaK{5POh؈.+b U`KǠǕ\�[u2 plG8%Ǵr2t1rG.752ߞ& C{2\N*cMHpXe=!3#5J+Xg콣j@3[ѓ$1xP :qJ嶜e)X;M;rɦr; 'j7вq\bA66S0Jf"+5ˏT~h[vogOVb PY*Q. Yx@}BN�wv'&m2_J hmS-uو~D6{fysKfhRwx͍8hikyJ5\p1zTVp3T2,'GhK0=WYɆ^bSPC BllH;)нbBC)"" ߡEJIO0*r|s&g6!q A *+hbEqm;{ CҚMVB%[q, {JC;ʟNNb^'u{ SYFF,sD)k.˱d^A/g0@sc ?r?휊W~J7M҈^=mNJJg:W`SFoOèp=YɌ 5s( Ŀc{7{})-P?r8}GZzIT/<c6Tr*-tpG1JfviP8FGv;$j_^":. 2'z m6l ፄ&2Ox"qaJJ>vԅǬJ;PxwW.-5=tq~6#\Tn*]{: Y'.eXyG2&?�,5o0k\]q2<E[VAzWok݊++9p"IeV))ؖx ?0oD3JDd( DBT /r]y ='}x C^ v`)0JOY͕hMeEn 1{T_g5Nn([_))WΝr餁-Pm"[~(9'cUA3-_ŇA1l]f5@ _y0 rnY3oW$mtӞW䍦m2n4KN&޳ՑWoџC+!X"iw%le_n퓝\qI(YQE<tJN*_9/ =mHu̴y,u!n$ ~4(PXg,O_=u,WFcĐwSf|bwl&f�#5{oܘ~2Ij V3fq_ B.?^44]8i{Ou5}ؼOACt6lI-TN\x#f GF)BbOي@\2c^�P�$ Eqvw0.~tӆ[ P"ZF ˴qţJo$^RɅPKr"sZCxm2.>tkqUE1sTe\ JE0L✺N֢4~QТCULb=msG?)^7,BXTƤ^I{J?̨-~e!*_ |ǴqӣŕĐ0zu_�in 4Bo$@Z@ *1m>y_ oHk`?Z~bz�^qG/1i=28wDԹzkLÓ/ȅ}7 "ɥвZ\upgE&GM'-OeYJJ7T\-8S6sUY RS(=yf3;( exsB k[H>hgc2_,$=u<y33%Oe%ݑ㜀ZIR nUҠP_1|Z(x.eNl#Uȍ^E).R`%(+6 ^P,A ܆3jNBD8_3?dޖlF)՜I^i^EXqGs|B>T+ڠslgEg QEN1ըQuAy e/ME B\JJpkU!*ꁋ7x J4f{ D#c6 \J+F"LL\ꊞr.ۊF$f):=zĿjoyTC_|9-Y6xYzvS#O temԒ MӂZpx+r(pb_jJ<7QU�2A/mRբ|Ŀʹ'dX-(VZoھ=U#v߱xЈޯM70>A~"B ̡j#gC _mHúU$ rM9od>X$=u&\hNꖎqXݱnUK]\..[zil]j۫+I<񐔀| @;WE*2-a;],rfmJ‡({N$WHoicE?t҆ OP!:"1ŭ20aHZ9Aa=IP1Q,p:Il֖ɚl%.*Q/UEQ#_&~!t9-qOwf* :HJ)EnJV|9rW8[2/,m%C̖mYv+k-Go!>wP!DkiH '{-o;ʡm>t1Ks�򧝭؆Mu<ФEw5ofCpQ}j T4yNmxwo-jƯ00p&GFyn2~#tqxx@O|j'P^M[XLg\2p6hfJW}z<j%[ Y3@qPl)(S6d7/\(;&P<XDب"Cm)? mGne$`稴u.TgҞY(;Bl|@Jm0A5N#+&. .5p 7Y5U Lx9b`VLJlt0_ϛhCe)<ۈ@N+<yΐf /,uИ#uX:(nc4ؘn؝#N,/ĬWߨzUP40gQ$ݝOׄ~UՈ PK oЁt(UBSؕ!׵W g͌ht+5a~bihp<f_~ 1n509|JllT (,8�ghybQ|Fzkޙsu**z"% JfZ-&Sw6K:I/&ȋF|2w}~%k]SY{.xr/7<ۉ %ykkYK;~w--X}tr 4R?F^U`r_L3`qtaddvdlϺwb0hF5< E<(EQݶh$/\.6a0i8d+=5|R^rMH` R v'h0LV"A_j$[jSf[RljY7ydF&av:GX]:\U:bMծ`w$6L; 1=ES'E+R+YS}مT]`BgE4}ӌ" .>ݨlKGhz/p8R>_&lG!ByltAI@-*dl*JDm}# ͣ W-ݴKhX=1#M,&!1~rNCGM�O+Z`:Л?Ք9xe 91|8ABtFƵ@!6}//0GI**mƂ֕6vW?o]Ó)qzxLDch9͚#dHܺmx7yÖ K {xf ,bJTF]>v-kG"ɚ }P,LK 5�bthv ş & Z_T|Zn]ï4$"T-= wb. N;~I~pY'䌓C]q:|j7boVAP0Sh`C tP}oͫRM5\b>X\}1rڦ.u j{>@#lxf jlJNN Q'l0VكަdG"~̿\tEPPzWxRjV;cUzOn33 [W) _'Uѫ)D  A۶*@֣kƉOt4b~z|S.jԖ]Gfr}1U6ŧb^D ȴ<3X&&6Y2<v&,rgXTg:C'V)`{=^罅 awlj}^C+3=xt`uOO43OSl :&Dlݚmc9E_FV6?d_jA_9XhjޘQIF‘0gdJ#2l o�6^5Ee ?BY0 rw5uб ҧGh[ Ad?ec%`_�1twv0x5r4sCZx:Eۡ"[c<A=Gk|:;CMfF1jq|rhRAMYվƺ^rQ9,ÍG"l`JzC ^zq2b|.OS8v?uQ l%//}Ǻ`]vEW‚W`W6 sc,@/YAEhԹ "B遣x\6FOÖvSuSxNs>jYDK0 H7`j4E"l,les\|>%24)}+HFu2oOl7x4?[y*c;M-e2w<wg b۵fmKfI\~G-Lr˳`.awA$?<z|;eoh^Xl(zUiv_d "Фxp@,U}-L g_nkۯDA"lo\4 e]@ ёYkΎ'>}_JI?yTWFH>!OPK 8}egqP!+fN~' &?LT{ Ja4?4dcU?s^/_Nyġ :q3&i;'39ˣ~z/u=<;[. n#OEduGUB&mf&],HY:l0^-+IҧάADLL>'P)PHc_V؏C;Js0~읫l$x1)`cHeP: q=jhpO/=:0LZ.IgR`KIpl  D&Jeڼu`LiCwhL%29:\N�AU`!n0n]X�#=A/ bZhoc{mW- HQp*bQ봭{'Ul;"{㽾y٭ l7pW`b҅*ޙ4cbz<)/}S)hɪxHT ""�=C-Yme$KZ9m4� q<Uq<]faeUƳ@E?~rûُrG7l^1E{<-UCW$ 'NW0,e !4oFn1JzL$qj\UQ<Z BE+E\_aLך2rwsR; {*0Y ̗^X8'wV=ZkB@eg'@ D<P*AgdrZmg4A6\qZ}gZ};9~gݯSvO3 4Sܣ^HK<YI}<pp3.Ir!T33!OX;]pڅxwZ}w w}y^ ;gpN{X) H[.&baxVb'bxGcCo %Xt!y; ?1A@1[\DKZgChY@|9rFv%u}xTj-Cn[=)X4B6wSPy^&v03#e)1O}iOፘ+]/r+Z(1Y$V }{oi"ILv=o " q ٔԢ EvWYKVjOV^5]-AEr?g\.gXWQ@J%8C#PKK;bUC(طc,F[jn$Oh<9@zR"Զc!eAHCF&Ϻ05z^>M qۻ E=nf$@7tX6΍4YZQ8;0#qXΏ Cm| l50ygyRe]bYϽ$ShSښU/U_r65]E;^T_)Ai#U6 ?I]o!sPs?,y` uQ\K4q30vQOoMyp5&sN[hFjiphY<H-e/܇#IU:ֶR ,Пg-44ֳ uww?m@ԩR\9,nյy3 d ģ>c[Y֥,(Vxy MhCDOJ?y:tw]{)cuB~emr6֦Ӫ ڳ> 7AX]](ωH|c9Co̱eiI!Y&槸z'ﭾ;A^ՏwH�̣M|\.L])lk>O˼EYɗ %~GBIjZB/N\$U+m!9c}A]2wL(§)[Ϡ@=e"+[Qq�Gᅦ(0lN]zBrbͯ1M=fXbT@<'+N!XuڥZu a 'Iuuos=P.J&'s)q@^FiXJHVn{E)FS6%dyx2YlZf;WVb1F\W~ČyL,?I:Ŷd췼%*|ΥtX9+4`K~p`h_D*c|m JrM3coR&|C:v`h٦V}` Ŏ^5</{Y28Q X>ǹ2<jnszcNܣ`U勯Gn6$~s ?Pm㌫ ʢT<SS?ϋ;:&V0%xcuٱwnsuI^,]y{ވt_6{bH"Na>Wq9Z;j.dfUg91YՌ2ׯ-%j.8$f6BiTǼ$do@=B:iOW2sFHd`Cp^1 Z$歩-PDl_ͨ'$!A9Q�vƐU.Lֶag c/t'bs-o?PdGp!7.- pJr:P4YS*wh]m1b hd$yI 9`dmY7֓O싚 ,}A?C7{q2> νڽ='BƲH2Htf�>_r3)}Q,쉉^ b\3>O3/Zڍи޽_9߆z!򲉨@DL}d@EDk}:{憁/ \UAwgiE\qdEM"$g>tswװk!\s5(1 zfiSʲ^/Zi8%?e ŷU7xGI #_7eRWp:'NH 9\n+ CcgSsr'ӈxxE>Ĵ\ 2lIdPkj`%rE H ͍~$LyɌaC*|_R!wuQ9( W2c8v/RS`Wk_h Df06czQ䁚-ÍgiNZ\YxOd H6Ѭ7G;QK=JHϣkI38 Pa/JnMSkzIL~zQ5'Rzq;VZ2)he׽m1et~^jJq,"/5~gYsRK/}o}R?P)-nwGY;'5Ty֐q\ iqfxc\˨މ:Uz<xm1@W8%TS^§"XV~;4[~(޵&!khcn>\w%.2tZhCjɁ+bijhkb83>@mYt.7c]F,-<7Ks vᑘ5 v eqy2S?թ;Yж <`jq -.uA ::.k2 AAL'jcMj∔@a<0G+c m覑It~?[8jsiܮǽGT,;W\PWx1.+-<LR 3xjyKD[.ZK_1v=kuśO&?N{P5ZWI'PfPzU"!ܶXZbu-I*hxA'Vc1"xy[ttDp�_%sLlY &徟$~$8a.;A|agvͰOKX6u-WzO!V=1LLv) =B鳹^!%A0-əuQ;n 2; 9ލJB;m uPem$�Bi,ƐM! CoJtXBpuDOCl\6Ŏ1;C^O ׼;z+*t;S5 sKQA+!xIOUr"A|=JV%hxTtg!!K3 k=f ߣF=Ѵy5 z~?><U[Ď~=$[/x҄y4>,s!nHe<>Ox{EnKXP74jusrN4gw(fU AQ!jtsK3G+=Q-D!*A=Š| KחYΏ _PI-ظc2Uv=[jG nޗ\2/h܆;Uu CѳBV$˜4<>3omXJzq{b+9!'lk?>7[{-1~h 6$/ [o]^vd5A׵SըE\rup<Fl뒝M>p:3ҌvoK A@tX[P^b݇kjƆSYVBT/.Nx7G0Xq%.K-";/kOI{L>YTGw3hp~w_5+p -"B38OQg9q-W4vkThV XoUHM}a^jBCN_/*OV]BXm_3'd!~Qb%Ǵ} rF7-)#˯Ӷ>件=VgLZ[=B'B5XcJPC8.^/DMmP W9TϋZUV%Lvv-v){RVլ:ՌɈj'xڋ[@8Z1S]E[eL{Y¨ Q u[=: 9O"L3s%Etg?Mup )i~3_̇_oD.FC1BEJ!kpT;=Q5[ѿ2ȶUsG�FdəT<RÖVM6#rRam[rgzL9`sӌP*$Uz;lcR6o\UÒ^c<H34O_&dIB2(rkc$Y-~vUqz|$ -E7pW<M ɀmR$؇C=]N/*p>*߈݋6t?8HG*;{ӲǷ{v왊�a%t>_T XBVx-n'`*xW^ʵ*7́ckӼO,=c{2¨" p A1_%F~j҉y H؁Xnz8Ct3HWf}j~E#oSޑQ w'εCѤ.l=N}b-VEF؏OdIc: -dP2 TuR $4PH4~]̻{z%@ n%4pzZ ɥ4B ޹#_VU39ܒ)~=]9h3FTV|FLs){Bi5H32~͇P2sP P(LBSܻ˓δšo<L=N 9y_肜m Gޗ\ cF#MG_OM hԋقoa Pi5ix0.p@](Z\W"J  S)?9?{vh45.8]rdJ,:{5l6ܑ!AFn+?* �I2 *Dh"A>F_:n[{:Í&Ս/{ c?Uٰ[#qN Zi KЗ `҆/nj>!nb/\ԙ<- t)IP' 4? FS'*FN;ot:lV]bO ɍqCiPhpR6aQǴTc'̍9z$L^?gUΐT3I$;tlzY|GNvIt39eڥţgqu.kmn*!F&H@1)28m?l]D LˏmOb ǕDQ\ԲĵF#('hbL">;π3Z ]\b�J7| .!bl w,v{_vi*\A|!>>r޻K({`n_й6V~4J �>GC||yg 6+낤BFxd bKX_ p]yHABxJw&/ eѸ<"$ߗ̖9J5&>q`'ӽ]JS&21M$ ?9"6 z n -ήجLPf?tҏ?L+t#6mq}3fA%Mm;g9>௘ECr;Szj+lun D ՠP$Cbv`;dDm*"CQMh6&iC1:*C'ryS,IŒU�5AxZ&qFZ:0[)nO-uG;^BUVq7l:t BN݇;TEZ_DN/X> ZoԾWАb6i%%%͜,<d5'ʥZŹTE B1U^lQ$suI0 aXFI;a#B{h* [H@m{FvpZ})a`DVBxm!2 {pboC6fYR?# bZPqeM(/tyҢ w`)'d͙PZpl ?ڻ7.Q3@S± #%q&t\1l?Q`Otc,HtЯ Yj{YY,BK2Y\+_HڥFpY.d{)ua�h7ܻhƠ2!#nA,)\AʋEڟ@Nԕ;CV|rdw1^2 ^{_) .4*1ZsI~W9;`u<A6h{,F'c0rV5`}SFb͹:cj>ב3Gv{^Ddé'03Cc\ 3+6X%8 @_g.ak9Կ()$/ !>!N4"Mѧ;/Nl=ZxK ޚplJ>} MUMD#8 $-Յ!)V%9_~;sΪ7 |CJ*1z0Omcʭ5b`?- 0UMl/*{G+8mp9Ik>^y98MͪvLUuS+N?}ͫ H "�g݃#|xh?4Vgsv~ߖhe9O.-4y/&Ng;!@ٓ N iUe8嵟5q9jUUQ$5.dC4�{ݖ,BLڱmsd%4h;?kwGw#in+K~I\2)e bk3(�` Y 7ZokrM:\wgVxԊXN$Bf31g6Pa&zq)'unq @O\f9i5*3_/,*ى O8z,K a@ f=颠^ʨm=nLUc[=өLRXڞRP↩cP]j%%[̊5R%~}('Y h%4 ?B JqKLi,M iQ8@p|I>:KtٷX*^PdqlyapՅ. Q^U *,FGSTq!xAjyz{~/.~iuN7XF27{P}Q={ 1} 0#ԟ|%1(& \/|:*C-WWoh+\(h0D#ef݁XlDwd̡l`U3<Be J7d}MY_ 5~P,Y=>httCii$CgYBs`$;%Z8cVFd 3ltQ(XӼIuI_$ jT=ϬaWI/7NLJGtKn(2ALr:d(ZAr3_OZϝ -D Qݶf^3kd.0ܸQEf!Ӛ(#$(+ ^Vq0~=b1,e.\ "]TwղZ&4<2Zݓ,;h�KF~9ݧurKff8ЅF #m{e%,(kyW<Lף"%<D3j!JfJ['rå5rEgڙ)Ť(E@:M̉-b$+{EH biLJnfRt䵉0$qawۺ$P)1OE]ŅG;9- a%6 ^@f:k}JdG䐤L7ڳR_ƫ>]đ%x3hƽD<[eh3JU?w| O!]4S 9Q'J,_:N ɼ r=ls j4AL'7ɞ@~ݕVn'(J؁!C<Bݱ, T!%IsVgzDZ 8ZKy'8_b;c- ZK@6_1r|Rcax/N8\9F҆sTWxnXii|c(5}ơQ'%(16X] }Ԗ DѤ<RRxn>og:2ch` Ȯx7g2*|J>0=5Ddm)` $[N*/g6.⣜�M f[t4 Ri[tBc[꛲.7F8U:_xS0PLCyT+Oqv'"x3]< ?ϧ 6x\<U0 jԎ8|%`gt <f=S&LК6&b|GL̮,&pb#�cy&ٮvrX2XAg`9MKC㹒M% ̞-t|hb*h޸ EoJ<i NU> F#ve yBffr;Z&9ϖz#>z C WX#Xt,x+kYt('$f76bfw굠[2A3!-R`~L}qR O?" ؔ (z<-M~'L=&Yx4)?Gt<C1_V(>dQ`|3"zȋ:lжƿ 1{>zSFe7lщ5bzΦт:{_Je}c.gVR4-X/ [#tg~n n Ë| :tIX3*hQ GŃRcvZZ~ 5JSŠ֛>u~SsVR¹AE?V\q:<fQ ثx Dbc(zI�ҝMݙVIXpȊ[$)$ξ_b͐'ʿVtD$`l|V -;f9 `snm.oOܹkmhdyg6a002st %gL"7',/'+ܵL;mu͏|[7^b8H@ӠS=#AF ?lN%^& ╄<جtokIK|->T,w `>Kbʏ)OPެ˭W_Y6BpE maM+,bZvD gϪd]Nk)=yXW`~C|W\M;^'g:,Y#sduϚikbd zyܺ#мZ8 |�~-̧X!x(ky\^ZdJL Q endstream endobj 1639 0 obj << /Length1 1620 /Length2 14470 /Length3 0 /Length 15308 /Filter /FlateDecode >> stream xڭcx]-Žm6JRm۶cضt~{ksֺ(IDL팁v ,̼� U-e#kk#S<5௙Rh 7r�q Ã@ p[8r #@�@k;{_@5 l�1%eE)�@ h tۄ5 2:i�fv�/�&vZsb%08M@À&@ z=�r;:�dkbbOfv*_/#7t0r'/ 3ijgOKE@N�g?�SA* dk_F@'4 _7WݿڌoN翹ALl[3;� .5  "Ll=�@3&E;)w*3ω? #5_yԒ.֊F6d@& =RhbmӋؚUV$h r6�Yտ@Gk-'a +ohk+ӿgRԥ)Yh)ؙQQ;w 3{xY|E_k#gG;@?>2o4&v5g#[ӿ? &.׹݁@w ꒝ _ezVs-nЄ^/ P}Izq]_zO[McG,H/מTU9M_!&Ua ӷshm(]Nf o?`:ᮟh] (Q|M;0jΩN @S&;{:7|@r9L!v[EUʝy~ Qh{%[gjWdyE> `ėV)1I=Cy􏰓"MCt #R⬧{1=HVX ux**͛F!":TaaǪӽ bgfO MKpi +ի= a!Z7if?6A4ˢZCx7Ei*?[.z5T BŊTB1M-`  FWjؚW霰ᣛB5sсʓRx.Mꡇ~U˹HΪG~Zͩ(СabF-sw4w2~ECz~ a9_~;mOܯh4Q_c\Qd'zw^p(|YWv[K7`3k1OAU*-IBڲ-RD~,a0#qc:�үSB(aa{{5اscVs�R9fST4?UW[I[QvlkQ-bhv\^d.ds/,]+uᛷwx%0jY#1P&g)'mAnh ;)ܿ*vꢧ<ah>3oӑ$lXn;u;#5C_yHSs~! E=̜5-�ً6)[JJ8LhUeY=?{5W& '4 ̮/^xYY �'t1ml%41ѹCk&@MG#&{Q+Se: Pދ/&UWqsH 4j½ɑu4膀Q_w߳b:лح)+P<cN/5sLDŽTjH({϶A#VDj&lT>~reu|O94�iDbԂWv: ⤎z?C1sP{ZL+PMb н 伊g*s.vg{5~B;k 83cgtK9pr~P�%YA\_%u5%_i>nuϟKN8x9 {ұ1qwiGmf9˧Μx m,p zu^IK&iwjwtB2{{4-lƈP쮎hQW3;K#ܛ8j?\R<6z2ƮU ԋh<EFջK/ZwSg}Jw9OeCYv[j$!p^1Đ_5GXIcwBECGXV*rsmu`Cqzᛤw^ :%T1Ӗrn~\w76(v͜|)a/톢|CI\%R. N ?.Q,3YggX^6ƟaeNǡ2ٚP,d1Q۫Xpq~2Xy(+mjrQťnz1xT,kqՄ;_vaCY6R${* ɥYX*ٹ Ia23h#2߮/)84!)/ucʅZ sK)C6+jy_&^C=dL�&�v >nM^;r(x`l_+]σՋ>�jP^TB6:o2ǻwnt93|c.<X;~7/D-*pZ‹J—EYCSaEQMK`Ph{`J)22g 7KBW\NǶ]BH,XsE/ַ+ZX^aV{`חHXMi߆u' !Ѝ6'$ޘHI]w490~h)R:#2[,ٶ3K%#"LΕY>  w!TON/ۛSh( Fco9N gXG1oX<x8m~[IW\˻'N[NM0ݝ}\P;ep Kv Lm>VZs$(Xr(eT\(t69E_yXھ,_F4Y<Ԥ]'Uuo-\aԕ'>l UDwnQD9ؾ}F W-+wNr7EOof$\""->8ހ@i!> *�e$bqfwѶP䜵3&Y8+s9V^T|stTG[`kaĞfb$9XRX t^|]Ď'*=wzY�ƈ]X}+AY~^: @X83#T3 4ڡz 'vr#us<C7W zp04ǹE#N띢 Q\`6 ;!2Kfp%q*ỲnN 'A0 y8fx4%ewXznD1[}sK/0պ)nW`hDv 1XH2s݈pT;,, o)}ӮEox+B !-cUP-Ȝ9+}:0 E;*BE41z.O@gS [R.aiмC}6>5TlB*ctK]#o F8jML4yBR->%p Dı� : UaP/f\{lWE}&QFʿS6XKyӸ+4wgܦ'|'~Uacbʃ<gv?F7n~G*L8![":8tѐ$:3v )3 2 '%q AW:Ёt|Y=P[!(eclkN(GGZ+Li%V#u |(WQHlDK4}WOdn^MP81=3v1 ++]GZbu0D՗mAT81haR)EDyA#'lN6%T fCw+W",ŝY1 rX# }E[V6B{ge5+:@o:r%`rE#;&[8܇L؈G(~dZ~.Tљj^6SylK2.>sէ OKDokp,B:v@OLƢPBb z#]r/y3JXBSR]/\dŰO2_st囄//I˒-^H)zgO<HB{{$ n=ęџiN!aA}n]>; NT8!c$2|=l,Qm%H9AS5"[ӕA#R*R}'YǼܹv7jHlk-B\Ҭm%mp5eG. i¾J[JO`*c:pPDavUC-b>P.;gE "їH F- O'lҏy"}f<,E[zy?-2+v`ܭE:uT_IOVN>u H E"rƓ'M4''Ji -ȃGa"őX|QƨM}JZmYJL;D" 2Rܱ (pkL]V #뭖(Mbf4+jg,tG2mI$mx2o=wCu038䞖J~#&2hIJJ5?}'AF74C;2PgD%^UЏ5|9(9Zke6 eaҟkUC/mE)I*G̥5G,پ"N{ q8DS/:SD$+vi`$J*e0ZǕ"7Ȝ;17㴸v) TtYtM=V+b. (߫~ 'rGQ/1�F7PGvО^/!y,񃛇)NC(�S=N0$}¥zT6A s^_pˬK"nk%*]hh]PCE1�OևhV!rp΁AS#9 loNT;ݥr 1Pw,tL@>]Y#6COh|t?ĽUUiYg ::yݶ;1prp5ȩG*,_ Ydd`EviO`ΎBws͑,K#=U5-5I]ZC̡w #@oX؜W?li28D?VQ\ڭ|O` n?Wj;st~ ylxתMrU9(6CPQz˭pȾ=[M뱂 mn-Rj-B8ՠ̍wHL̽lrGq9 >8;i?JNϪxAh jAS:Qe kmQ=ȣK`YɅ G)=4\״Q x Ps tZgiPܥsضi_lO1rO҄Kj]˸n14UZLR $`Lz$KK G)R,!]BQZ&.!Md-XN+N) J;5^Ḥ%ME*G?Qz"ȑm{ ZKcZWnߓġqr*NÕ )P ^d %G}@ٽ*w "c|`A´˦2 0% W> y 3-S~;5Kf6tdNUx󃔥PGӁ7o(Sij<s9-]W,}/e2fB+O(hJue0QiQ}Ty#Qs/n5nȓmZ#?(˳%|PuDvV![x]4@rX*x& uV.^#[q}"gKџl'ҷ/^Sst 8Ncn,ؾZP&r$ 7vBͬ6/DW꺺!7b~ &bcV]s[hI?+ponFX3 \m<Q ViL\TA^z!݀ 8ΧmK1 T@䂄="0_ɦ L?=d9#`=6ޒ9ɍ[vdmmf>QYT nIw$2߳ˎߥ0{otVY[dyOЧ.i7chE~-_G)Eȶ~bVӭ6*9Z/F٬2 `jJޜ:AΤ@hW~OayNP=(.R'R; *ю#C(^ԗ7yVc)&YE9lZw 'j.eI Y35vz!xU7>+e,VKQ/hf GXe}:YooXUYDu*2\|\"L<b z]% \</Y[ߖݜXR3QuOqmS^?H i-_X>F t԰Yٛ+$"/Om*>'O<GDfF&. :ע-R=f:"]&x ژ5y�2keL&hHz oϥr R@Jp}Ĝv``FK-2YtƸ^g֐Ƅ4(p/3B\/Y*Or:M333D)n$4x x$�"ѺъzWD849ptQi0B( | svȌ!`TƳUh}&U~[Bեз5ʼڧb1z-s XSV͙Ol}dg1avRkvb{fE_O>/? {U+k't/E 70 <;yeK-7SVf&bsE_%R[X0S(s̠ܿp-Em1ϼCg/‰-IΒIKN]["Nj}e ]9v<#w|1I^6*p0\ȾcܳC˃]x0M5uرjHs`MG}p 2 a!yKͧvtsw[cAZ>oVfĢͻ<HƜ_\ԘXB v,^3H k!^1zuu#*#~iڪgϢ T*nvH;%W.;Ug׎[)˨ e^@LpjT2Э XFhoweE"},CcCE-Mۚ0 ?%\Bayf_`nh$1t 3СN1!Vv8Dv3Ҏ~JoT޹#a׋ĝcvQ]*:hGyC}_ lb9uHsACzORnSRB 2ãj)^7KU|52՟ lBKSMHsј9!__3^TnF\[9_DŻ[K%"EgA#:0~*uZunvC(]S&;x&'.Y%|n2j<$M?ϲjHs&�)ƚU BN"|a%˱I3UBgbnΤHNa#J:j[&MI?GLtC :huA+R~3V geߑd?Hwכ_"idtjżH=Һ<u*~]tRPky\;\uՈ P^;^EzRG4`>pI bӍyڨāãHNwS2ânC/<.g"ȐQH<&GO.8+ZmA(ƲHvYCfPHDY2Mz{qu3?c8$Ӕ$N6-u�#ɿJ$vf&/wO*xlgAt!=oox$S؇N jzy^էj0z?Y&֩D$:fVjpVYw~"^G5W `}j ЀARb(F6Ku "} t,_˼hZ~޸c[ ݳucX k qdˑѮZWZ$TE 6A4zӇ`IOO e:{ip mk˅-2Ɨ۞D KTb0y?=Gc-6oKiL%B_ Ջ/͹'"6t &ffŎOc˜zBu ֱ(j@|`Z?rHs 0-ZVbiy}H QWzqvR 4)qOnwGO#zB\͙ffM a-5gp: 2}7} _17P}VAH±@P6o)0{CR0O@W䔦f k+}ή#8͠9V6BQ"XN8J,޻+lNo*rLQQޝUyEq  .8֕Ǥ/R3NFmu'kh(Anw[§Zb9G #8Yɫ@hW0 C&Z(jdؾOvJG?tFR?f-D[T mZ|'G~.N-/Ƴ!ݖkI 7 b0"Yf"yR_H$C9ɦ~ ﯐\\u:rw P-8ݜM; &E^tq�1\1_1i/x7qFF{Q_n۫=daN sإU~됖KeI?{ijɇ퓾_!5_jK@rԔua gAGIЧH{>1!*F;rOZLzoEANhgߩr]f_tbB(!t0 / r0Hv?ҏ^Nz=pzzE{I%6UZ$>m'�k"qg _X.wl-֣ V4)y=7i`i*]d[& k(u/R_okO-TjdzTUeS[ 1 u^HQ>5U 8 !w_՝N+=ahz?7)Ѽ,9r;B؜X+bIdƭW�Z1_Wp;e@>ߦ })�7r莾nζL}n+~ &J.Pye0>u uh j}c4I)Ta.UM Cw);C^_/HJ !aAKj:zgm A)3̱oA<]ĵ;"u5?͞aZ{}W=[Y9.M7RR,a֓XLO_CҦAFСi'ڴ>1 `{\fI^<' Xc+?Z6Fҫwli}͗H,{ݳksٷP%DNx{rXsx5lq<BTh Ms]`Xԋʖqݮ=Q(3F䈑/JiH.kKˡQ:sCL, kdC {x6 Qd,ׁ߱ݏ%_{(-b u/!V|68:p|K%G&(''ܗtJ]btEut)IM'Dj娃Nxu 8νd8I*pjd{L=E-?J\+jOaU_rC8NhǦ'40 Qw1K6۫w[&IT%*9]'N}*,o11(,4Ժ^3QPbNvaX1_^7/X3p2PҕW_Bte?_Bd-܁ࢻ9"Q_l .SgdA}NG2F#FA?Dߚ:ݎT=mLs粑E<(|c&rUkIʏWW:s v$<#'XR\ir k/guejYe/:+y͆=;_2&3Z.!Kk<TpV"8ݟlOSC:WPWo>FhCpuZk=ӚQ\Ct( -!L2i;ߥLu5ǩ \z ; Vc-> j }أT8 (<I[`=Z꼵 T5ƒ.U I愷ZƑi7PHcoǾR^@T>El;Ef�-MJ7PLj^1�n--?8fO6,Gv=󷭷>pc>xâhb`د4f/^Za7MĕQUc?@9DPo>jD,P/Id9 ÿ`'Nɽ|%_P qـ(vD_X%|dlGո0 qRO!zm`N3;˩btGRK[*#TMO[`t w[}١ߡI_p!(Z]m7D6Ѯ*/lvNėן^t@x㖟OܓG߆@KY: M{ϔ#N2&r:Đ'3jf5@@ee[zGۨ:ϸ4rP* @[,lAAD6ʆw.gb@"ϱФTz_ΛqsћG%!3$zBК>4p\$ӧ $ L6쏆ibY/}f/I-;yXy]T?;ˍ"W_2.HϚ<^1J*٦tii9 d3u.5 C?us?3/Z3//k*_U$ P{S˨[wB~7rgƳ 삼4-) s%jZ[/d3Ƅ$<�H|OAR.LH+>`p+TG/ 9EJkea"Gy %ףC3GǴ#Beݼch:EF[ 浰`U&(E,źy#w{=C!kv+,rbC\|__&7U*~ kk3Z eб+X$~+6p6twpdQӸ(:ӫVV~(>fz y$]Z MqXS[wfoq|}`olmU8v_~7"u`xSjԯI*jU44ð!ƓzZ|A -c9#Ro'e;[BtjbiJI0.3/ZtwRPgw35I]y;Q*Ac&`F{ҽißAYmf0Z 'QHktOXqs 2^f: x`8ZS0= c_96 fYqxUKAԓn+2E("9z\i -QpBq3 7 ])E.| >հ[dYK7?'{WL2+UmV˜k_/R/щf^S\n 0l P8TKUN4 /B9 벪`wE6im-r: kr&bnD 9V۴2vSc=%<'O>(K/= @lg J%mP<!~fM GmLOmZR')À\Ptp<d+HB+L-d9 @Iǀ9ٌPGbaH{({ Y9 ! j{-Do EZ*B`G<Ǧh-$\u3u)ӳ!5^`Vά|wGt4Zt V&V[cg5;|jRWcz82^p^Nu]fW4D?5sMgTVx5fE5Xq^|D%v4DCUe9Qwo0n~2D|}$ �xGdWRT3 gù]lef }$Ğ)5vYHaTdF>%mndJԤ>@7U!:1H*֗R{&RR &Eϣ^A9˺=}&4%TbHȑ}{LdVRA"J퉞9iH6RR8J'oM/UA>s_'G#k^.T>< ZfTʢ{ҨYuQFΰ6ح:kœ+zS0Hm>eنӜTܼ >06n1; ڰܿ@HB~n{Ao'&(On<@ϩ/<l8 :m>n|dؤax mfɑ<˶%"+dTOVՄ뭨u/I{GOlyk _e�,-e. q iz 4x ^ci8q ڥ%j(.8_g_"mAJ"XK' ,c%gݷH=|bV6؈DL=v= r<ƺUMRP=A�^=]#Pc?+ד5, YcE"1:cҙcz{i kʤ�~v}K#+X0up5\}G5DiV\Y4c-iwPpͶ\)<v$;B&%X>m0ʘ1a;gr|m[ʜZƱ;>G+\c\#$tkko''r+=}>ڙn.q:I-`o°-\;@ȶӆKfFg9mNW:pq(JS7+ӝ r> 0${̡8]E?f�`ʩuC(壥74[0ѱU-)z294mҘ nJ, z>~b2̩&5zLJq2KɅv<`�l5r"_$̐&KW� ܍ <6  86/4/Y=Ĕa({,E-FE7zCo&: #;qp^%IvnwI^^@?Y ٪ 2uƚ]XoWRu'l{im+7AyHnSڮIYTD/,9nnQuxqӪ*/FO𝛎@ԯ2'%%4`߆#2kZD7ݬpԤ> [Vj}z3!wf%G>>ECy41ǁO*3t?߇7zob!Su2Ye1/৛N[ZPQ>R0C\SŚ~Mƀ<J炯6-Y(N@.:T*Aܬo'g~D'<V*ڮk\JEH$Q5tϐqHOH]dH@序l[ItV6yOC^!%Q2sT@dzu[?wVvp^GF?+h* Y}1eÅN{G;4Z'XX1EW.77b.jZ8e¶ao]QPӭym</9"F"YJR])hm)ǹBIYXRF{oH|SL2FgµbE|,j88KZ9> qO/D1#J"lc;ЏVl)?84gE_`+HZo8W)U9hB<<F#ҁ-=`$)Oio ($:ڵ$SNPgNONACnqE2+)^Fpםip,APn!Y13 endstream endobj 1641 0 obj << /Length 696 /Filter /FlateDecode >> stream xmTMo0Wx$ ! 8l[jWHL7IPV=M̼ su;Uٛ=w]yil;<[[j<=?׾+v`&ߴț<^*;~&Q>MS >_P{=s@dkx;`VY`s4JaQܡn.Uu9\Y6><ٴ.Z.4>Dӗ}~r:-d0VWk,8yLһʮӮђ[*mLr?q 5F8@=�@)&� 8�Rx uD\j2�H�V0CzL] bctI g$`htы0\F0s jd< I�6zg W qȐ+#k .bsrbmXK7ǵH7Gnb>&jؐu1VljOu$՟qWS/%1{\xB!K(hHTЖ枃Jρϯv=k2UKς_:~$/ ~E+7ˢ/ l(/} -+ZXukoԝE?ZKq endstream endobj 1642 0 obj << /Length 696 /Filter /FlateDecode >> stream xmTn@+fa؆!XI^9w3.WwWwA?zNtD=saݥ/$;EyW^Vߞ_{ߕ[;lozxrM[/Y?@AiNʦO8턃YGPFilgιmu &9Gӫ6ꯒ#!YUƭ`M{M?ʧhW/xͽ^NƣՊUJ˦?y#}~,,+mkl|ŖEl[ݽܧ#7u\>Ǘ�# PMH� EX�d�j @b)<:@"].5�KC�Ph\!=.|a11$304ENc.#pF ҍ 9up52$�um}\l>p@ )9r9b_ia|F-(:(($,/0 >7{os%\9"}u[]8)cC֒qfHWp[eWs'>ՑT7^Jb18B�OPАR/-=Jρϯv~i*g/tiK΃_F"_ˢ_ٸDQ^:Wt&p .ک;!>t 󋧷"# endstream endobj 1643 0 obj << /Length 739 /Filter /FlateDecode >> stream xmUMo0WxvHUdCmU^!1H#x�?gx]OTm$|͜s_Iss :L;<Sz==׾f`*_`ɫڟk3'iѴ}=M;7rfnj-eSӵOL<rmh;)^tl״uö.#]a`4êuA雝< SL_Moٙx`<X.Ymv96y4L UUWqS~~ |Ҳ\Khv7RKs|*Z -1 b[d08A  i$C#.CZ\wF|TT<\`Gc)y ,<$g v1a粳[ RHדL1>g~8 )ok A8 $`I\3`Af<Z]! xNky"7 _㓧q H`nḱRONH=CpB:# =%888QA~!*zƜАT?!~> tw8y*sύ }nFE>7*QύR>7G];~<6OIyktg>O:yұϓN|I/|yIg>O:y҅ϓ.}2 L<e띹_m;z}s=״#V{ǿ ^/P endstream endobj 1644 0 obj << /Length 900 /Filter /FlateDecode >> stream xmUMo:W�5?$R. d9M eCkmCp;;w~>|3E_?O]5߶w]Occ]=~?}Oyh9%?۹׬B|Ɯ>);vw%g43>\ 6 EJ78 1{~`W(-;]%=xe_,b+-O;q\L}UI--=BKE1p[! Mߊyu>.N5K)Wb٬8i[_uʕMzQ)V(T�xޢjy!�Z�2�P="Zd0\ÃGR\).2*Шa!U,H`+j�.�5�Nα@VK-x%3%AYӀzΚ>kP#5m0Woþj.ZT$X�/)n)#Wo(oRZ $Kp4Z-b\1ܰJ P"GXQi/8k^Zq:Zs9dB )sL-7xJ`aɽ)f$1 dъcCZC<73JgznHȰYɚTa,_-O87}KԴܗLloK+gJ.GZyVc48Wt]:P~`rZq.n1] S/Pu7Ue:?&?!d&1yHn5)yғBx#1ޞ]Go׏M?X endstream endobj 1645 0 obj << /Length 699 /Filter /FlateDecode >> stream xmTn0CƆ@LE"h.R$Λ1iZ)Ayo7?^$ŝPIs77EW]=?:Wz==硫nMi%oR1I+ִ)Q;{W` 4vo)ZZq/7}P^kMݧ`tTshz+&TuSՑ @tvM{BM_ht>X]0}j74훺"t{wJ˥݁ѬSC]wS!ڝ}}悅K(e۞0&xYF\20/0b# !ڇ\)&�q)% 1ϹN"ۂ%481`r�H%Dd#C �k Ю%�"l %RQ F'b=:SuX$Q:\CAfpGR~m%^!N%$h&՚R #ƿp'XϾ>AI }3Nh25gNE'bkkؿs %|V !3?fc91ӊ9|u 6ZcWCab d1׮eF-9Ag깐3Z=I= 6-7p?)pegT<?}pq\2 tS ķ�uKzTo r{ endstream endobj 1646 0 obj << /Length 700 /Filter /FlateDecode >> stream xmTn0CƆ@LE"j.RC~8M])A̼7W?^$ɍi$냫N]}~;ީǡMi %oTsVi/)QÄ~S 8ƦkZn;@L=훶E UTGgu P}i]X;k C톦}UYoO} A`TS7~wpjmS!詺ڍrî}uBZ2pm;KPaffIq XMJ0Lfhr�dĥ�P<F:ASl PJ҈tƀ # Gs =2+ (@s5.W PL�KF1 :;3՟@>_E OB%? 2;::k+ q*qx%1D뜝5!֌jD01;zi+&f.pdk_ ΜN0VG9m9t~h18kg?l(9L&XN e1FA͸ؕ``{B?Y̵kyKgЙz.~`R˸?Bsܦs's.: ]|-i5w= Rt endstream endobj 1647 0 obj << /Length 700 /Filter /FlateDecode >> stream xmTn0+Jb'$8B 8l[jWHL$Q;o.Z ̼7/o~<GYm(PQs77EW=>:W{xPCWQb6;J^ǩv'-[~Gݾߣ#i6ڿRV_n84]֚̽e[sYͮi P[ L:?=v8|`4nh7u{QE sU5Y7{C]_?{B^QSu; 3jV՞d;&xD\20-0b# !ڇ\)&�q)% 1ON"ۂ%480`r�H%Dd#C �K .%�"l %RQ NLHI($ux-LJ@J!^H :ggM597F7FN|[{}&Ff*pdk_ΜN0VG9ʱwDK4X=CaCɁg2)4X(rb0/s4lƵ.b]ʌ[r<s!?f*{.z.I=mZoJ+9R Ϩx?Wr\io|M.T?n2 7rX endstream endobj 1648 0 obj << /Length 698 /Filter /FlateDecode >> stream xmTn0CƆ@LE"j.R$Λ1iZ)A337?nkNe$냛.Gמ]=U[wVش7m~X{kW{{;LQڜi\]sťpjA{5λ#tVQ͡i P{ L:Ց @tvM{BM_ht>X]0}j74훺"t{ArjwaѩM]_?zB΍ڝ]]悅K(eۚeks<, X#.KIɌC<H'jQmJKQ09�TRa"2raFy\5hRQv]`"l %RQ F'b=:S uX$$<!^FfpG~m%^!N%$h&՚R [7FNϾ^Š$ᾙ '\4ǚW3袓@1Qνr9t݁?cV !{2)4X(rbO+^i4،{Y]  y&ܻ=2o :SυԿ7>2O0'\8i!+e8I++7>\ÇzTao 7^R}ף|'2 rN endstream endobj 1649 0 obj << /Length 698 /Filter /FlateDecode >> stream xmTn0CƆ@LE"h.R$Λ1iZ)A337?^$ŝPIs77EW]=?:Wz\==硫nMioRE+ִ%Q;{&Ө5wZ(W\q/7}P^kMݧ`tTshz+&TuS}Hyq:=tb/x:.> M^UP@`T;0˻ީs#jv~_a߾`R-rfbiy= 9ff ؤdF@!i @E\ ` H s ` %(Ng �*R0fd90#üb.k(@.o @u)(A:,RxVs}e#3cgWCYjxM#ƿp'g_rbhyp̅.c+StI(^Z9Bh?+q ~Pj=?fc91ا/s4lƽǮ<b]xB}Tz\'\z.۴2WsQr0M7]/S/Ar endstream endobj 1650 0 obj << /Length 699 /Filter /FlateDecode >> stream xmTn0CƆ@LE"j.RC~8M])A̼7W?^$PIsWWEW]}~{SCWmݨMi7mv9I+ڴg{oCc 4S 8M)s&`ywc0jzoz &TuS~@x~a`P'zywvL M/ޞh A`TS7~wpjmS!詺]]ꂅK(ew&97\=̒5⒁yAa>:M1ȈK,x΍t,@F*&" C,zdWXPv-hakH/]�d"btv"gg?|�2JB^G5kdwt,uVT Jb9;kBX!00a0bw3W M";\88̿9Earʱs ށ?c>+q p~PrL  hi˜c>:q-+01~k2#Ϡ3\OLqRυ>¹M \)s9O \Y!O>\\/Au*[�ӺkzT%Ct endstream endobj 1651 0 obj << /Length 699 /Filter /FlateDecode >> stream xmTn0CƆ@LE"j.RC~8M])A̼7W?^$PIsWWEW]}~{SCWmݨMi7mv9I+ڴg{oCg 4S 8M)s&`ywc0jzoz &TuS~@x~a`P'zywvL M/ޞh A`TS7~wpjmS!詺]]ꂅK(ew&97\=̒5⒁yAa>:M1ȈK,x΍t,@F*&" C,zdWXPv-hakH/]�d"btv"gg?|�2JB^G5kdwt,uVT Jb9;kBX!00a0bw3W M";\88̿9Earʱs ށ?c>+q p~PrL  hi˜c>:q-+01~k2#Ϡ3\OLqRυ>¹M \)s9O \Y!O>\\/Au*[�ӺkzT%C3t endstream endobj 1590 0 obj << /Type /ObjStm /N 100 /First 1007 /Length 4141 /Filter /FlateDecode >> stream x[Yo~ׯ 0YV$߆PHfL2>U]C&yYQWWh(mpL0ibAa2bJYL41RO`ilXfg lP�Cyǰ $6 1, "Ђ\t؂ aKK(HdfJZy�-Byi!%u3#LZ:3!fV-ìV9fx3It� pvGt`>&nFRX¤Q)bQZF+V@_�@�$)q4p$ B"%4HE#RQ€x@#:d"/\"ɈAPB",PO ;hjĦQ8 AUVc{g@FM:0*"l '-0-Api 6U�nԄ)ha"}NZDQ$"F(HzbTOTo(hSHNF&ϡjaxH�IgƤ )&5d #ۭ,٢{ZzGk`d<? R )y|o~Mj>0~շx�CH z7?h6j:O4g:@/0&: 'هpo߽g BHƣp{MM GL՚@�~RcjC@c-5ȪL\_Y?,02=NvE'edٽ9T�=>|!EXGj(^Gq >"wтB T<$oÑe^#:%1$tp5:DGXD/`f8Rq4Ojk/ΰ2=A6Qǚ+7/F: (3*]HQ bby mPf#e瘂<!!_"[:` : +fzi ^bh$^!pdPZb>toE&'6YyFR y6< sц˜ph3<M2 8P2,-n:PHPbd`<.I< �)D@SŐY ^Zk2gJ7]e}*_5@cz7)դHW<z@9*۶1Nއ }ȁ7.[6}|u ](Hۨ# 8~4i;>}'`.g0g`Tዼq-Ib5 IDS+qt@ʍjt d3}̂&,A.R28OX0Y;YJ2?K(20/q�m<Kb5(�  A80B7a2/Hh^&4y;9B+$:I?9Zft9Bv %s'`:{'C)(^.mD$:觛uUP?o%&)$K`JrsPoN@rW+?FٶJ㠘W $a`ֲ9lyyx𸴹IcӢ2.e:yNmHɻWo)6)&/^I)7?a!׏i2'w #O^yugϞJ͔<Q:Jap0wk5AÙczAfXAt\̪�[V-ȧm8R~ٓ󋧏VԒZjIzfRfՄ鴭ۨv˛'@. {bϰ?xIETxץ0ov#(Oѩeo2u?O'~9zj%6Z=~xtzx^;|C 3)V6rMG?ʟ)Ɵ ynɴ7)x`�&|ZSs5?xT@I^}n5|x>7u~⟾}F|?aK~G|4U|47#>c[%b߃Χ 2e>UWKRs:@ iĘ ̌>M+>s>]4_opOý;pӁn;쳜,oߝ=**^@GUGLy5KFNQ`T+d3VM00N!^B+"z<c)j㓟^9A\  (̨IUVR-�@5 >y٣u0r0[w+s8YtӈA};Ȳvw MѬv[O޷m}>u90\HOL]@EAu:qǰo s0ly1,NE`,djɳG~[uËao4t  7%5,~XU*/,(U&cdldg5rQׇAj=Du%Fe7gN˨?-(> J1=dZ6wYpc_ċk#6תTlSg $EL8PW5&Kޗ}7y(�B)Mskńm.[[gʲ,sv]«mlY+M5vLvm=lY?F%.Jՠ(_-vB<MCV 'tQ,DiH fݾ4D3۶MB<XJ-KDC*B5BZz"Y4E2)RX#^+2enBIF(PŠt)mZQU(70W 0,^c[ڦ~B<ޭ*%k '^ WBI~]PbEbQb-$8n/}ֲFlV{ك8IO5e  s|ҳx_1N~\֫YV0e%<%kΧ1 @Wzu]C_ڝ DB,r_fe1 ~w&1Ϣ,DUόY>ՎLL!Rl&$ {0/LBa&!&~DCKQ&MȍG܍Lr 9aӄ}XY"cIG*BêXRH rKn %S,؇)HSzCi'Vn;4mVx"L@#1nVJJVJR(ت J+jOVɵmWVh2ٻ+O$)2*?%Z죕&iJCҐ.)q+VJRbA-"NÊ =@'YJ\nӐF}XbeJRVx"Lh", f=XY@KIlv�6+JVx+ZZ+2%XGzjU TGUЯY6-^>bKc .uqRl%YѾI !E܇ڤ^yjrhG~gn$]ql8!tcюGPz`6X�!׊Hz٤ʖߧ*E˫㯯ɫCV&s|SR4,$BOZIF"[52CLJDꬡVjICKۄB̶Ţr j52U[jqhlcXGKִBD+ure6R-Zb-%6I+5mmoZ:Z F} {{m޵w F] {{m޶w밷 me:m6Ʀlj9SlRPlJL6_ endstream endobj 1659 0 obj << /Type /ObjStm /N 100 /First 883 /Length 1822 /Filter /FlateDecode >> stream xڅY, ߧn` & \?S3=)ŷsUS}JIG:C: G`.x#'{:rkGa,+?# '9ZjBht rPjA3zL%g.iL#KtRx擊-u `q]OpA >fvEm1hp , ׌5h![GgFo<*Ca_|xM /ЛȜ/ "\T[ }\N, ;qqQB3 ?Y1)֔cgSLX\Z^0+H+C=S<}ʜX I'I\s&PKEvFxmޚi }LAxTA5 p`%N/FF}khfyK}Էhhe4XK-4X[pQa]̱Í5MЂZ=3 Z42*'bqcC9Gk$o}} l_|z񇟾~}\/M׋]O+?}M@'ɚ$__<n\Xb8*[ĺtXJ<W%(`KܟM6Y s(e>I`E̴:it]|NU*w{%!]t2SCRla]IuHi5큕UdܪȨ[,GXExJus/}'VXb"X[ۓUj}r`E7moqߔ+:b*U\}~ykOݮ>R,b/QE(umE(2Bu΁-w.~,B__B{^=/!T=%gQw,Α]ȃE=XFFwUENrXZWIΔ 8wvƫ%jQl.`찌*,ޑ-qdYԑeǺ#X6=~|RaKf>V|6Smμ|,&L9WhE(xz ҍV1XQ]'Vb=UYU:,UVkXMnؾ)Vm磘Xw]{>棩*թRL5귪5o5ҡe찊!XWtCQ^d~I|PWL0A+əR~Eu6:HyӰ:dÊ>r˳iF=}-ƺJX-lsyD3*me 8T*[,98Xg4E2ʐnkub֪dR}N*3;ɵ~մٙatHfΌ=!՚Y#3f5c{aI|pypjLNrI6Φ]ilզٴ+KMi[V].Zu{%thOVϟtPfgl#MimK4M;*9VMh1ԕH_v뱊R3fgi13c ۑ1-LDSy˽f՚ȨYy˽1URWtĶz.;İ]Wscϩ8ovțY›g?=ԛ9.'Վp/yF#84Zl*IVVs~P[d8*Q]m=usKyu_=GMo3G0_le,> c2)#%*IQHTlIl)ԫ ի83w[vbF�\ѱ endstream endobj 1660 0 obj << /Type /ObjStm /N 100 /First 940 /Length 3282 /Filter /FlateDecode >> stream xڅ[]% }_я[*0݄$-amɀ?xR}\VKGRݾ>6VKDz\ǰE_6xU"۲<^kV87y6bVcje‰[>ՍEY\I"׍@%7C2O+lSbG\r\U.! 'N%şGnqs �)?ş7J[ q%\#])o*Ivy{\IL WEJADh Er[ q兾C >e1%Qb(oe#hQo9#BUdb5-WnVG Y8o)@tbcJM'Gީg,U63~+Dv"U%Pj8A\ժHu gB1ɲKYaHhTT\I7r6I9.+H5JQ $]W4AS)ix@J> )meD鳓`]EьjZ ;JhW4:FWEXE ѣL!|͛ӆq?|N.~~yV*Io5O`.؍3?/ϟ~C>|_G_>?cF1 {X&#]OO|˗{+pk+\C_fUlUµ*!<Z_wKmPm_4/B3wjMVGK}YR.E9b칻YZ=l"s*=U3N\1k&kQϥn۪S^~._'Χ<Y䉰|JLn-NʟX4ɐN-,4r:RNKX{i/˩|楗ts>kAs[eRT7My5HZ]3RginjMuV4Qq)y ɸV |cXkFl2^15Cq6V׌4Z]3Skuc"/\GoЋswQ==y>OmϿտ^>|z/>|ˏϯo z𽀻?ǗO_݀!܄@x;aKG~3Dh\&;׃,{C H=nrgېhMdy|܁,`z^mKA̹SWԑZq|$]\ZQtI[]%;J5AǜG~tFR_�21h:FQ"w,`2%˝x^ .M۪ ))ĩ!UbT}]&$/-}XѢwLu#^uF#UV"y1 W40 ٛ"^1S,E}fe $1\ -GQލfBQRn9Y[UF`p.hbX U7[Qu5U7[Qu{CT!I^ӒʶZec#oT2R2W٪KЁ2[pLT+δS \} H͹J#i ȷs28F66m1h9*-vdw<ah9Ubvm <l;.ƚ{vSzp͜MlFƕVLmWZ3 FmG0;M\m4^~q]iW e O{/ /;L\m0ؒF: GV(mo6ЮBJ )[Z5mN,c* v 2&)Vh4t(y-LU.LU.XVXLDsvNdN�Yu2jV̦Sp-=lvU8d4+*_BPBSb%)ԖX z=y"iG|JPXQRk%USaBv$=Ϗ|ɑ e1RJ PUT(SwBQ+:i<N<Hj VA*)EPrBd&#':G}޸PO 1 BvckϷ\fa~JKmEUPˤP[5<Y>X]BͭPȪ E eUbXs3^ߴ1wmzx~mI\YIp0S`a~bBD9'5ɽj\2^`WjFf{E@6$_5.N5ǑW%tG~{_W/BPшeX݉u3B?=Z%T*a6zM>*>c1/m!a &d-I]S.ÝsGdH} 30a<.<24x9"T4$ QBw6u-! s 7=2d#Ʉ6ݬ֢@@bHbOϡHB �5oS(nW 1Zч~_`i_9Yu1A 1,I1h^ 0*nWY':rRTJT 0(q`74arJ]{ $8�, $_y`/SfM FDj�:Fye&�=,!RJӰR*uӰ2tv{qOU7"VE HP�<1|W_]/ۍgZ904j"bu1RP!G [gNBFc;&C[-AKՔx4e}9=A9O`I_6a`~M_y7%0*iQ 4RŒҘ?Jmd~{Qǚgq? )yf͗uǁf8I[Oi?.>I|M?h:_('OCE=e(c$^x`&Ӧ6uQMGXԊPTtԑm<4CHM<gw=(>'{"^Mwgpq[pp=k =6UBgƴ.n>᣻?cez Vu" ,@={!$9U|L ?i'ͳ/g^>|Ӥ#gV}Q E<.qo?9ဏz~dt}+ 4 qp3Ee>(A`Q|b^�!AAՃF-^/ Tn endstream endobj 1734 0 obj << /Producer (pdfTeX-1.40.27) /Author()/Title()/Subject()/Creator(LaTeX with hyperref)/Keywords() /CreationDate (D:20250327164041Z) /ModDate (D:20250327164041Z) /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.141592653-2.6-1.40.27 (TeX Live 2025) kpathsea version 6.4.1) >> endobj 1725 0 obj << /Type /ObjStm /N 9 /First 79 /Length 357 /Filter /FlateDecode >> stream xڅ=o0PwIlG"ѲBUX(R NS~?⠡! l M B!HPAڭ!NB6 4oŮxO`R @-9-E?nQ@3e$:ȲQ!D 1f0 W$@a5k @b@340Օr hrM)DEq (k4ϋ&?7_86'C?*@;Tݒڟ~]7yY?.m 痦,Y~puw{sv|N+4ˡ^) y2iekAO8� endstream endobj 1735 0 obj << /Type /XRef /Index [0 1736] /Size 1736 /W [1 3 1] /Root 1733 0 R /Info 1734 0 R /ID [<B6D2D0C19BFFA7BD2EC5E83575AC8013> <B6D2D0C19BFFA7BD2EC5E83575AC8013>] /Length 4246 /Filter /FlateDecode >> stream x%{pgyݳ:ْ.dI,ٖdKe[+b[W˖|dǒ-ɖfpL{NvL r -$В` %390ۆ3I餄ҤPfuis~<{yɟT { hѺS @IXhKh A*Za%BNX @EԠDk#hhPFk! hh; v f m ZvmE.V:]hMhzLZ3Z.D'ZMq.:½`^4V7AۇGۏKr�D!rѶ#h!(86VE8BQ4M8v p` m-MxD;&hZ@8&5Yo Lk> 8vMgвhY09h4<Ix, EAx ,^ /+h4FWi: XEÓkumhu >*|m~dO@'Wиjs4_&d4a47b chK$B;ƵpXmmwF5h#h\gGN] $+:4Lg"2*j@4sdc ߈L.NKhx#"٣Ve3${ 2Hm4!udDG{Ѧ IhL#=J=ȥ& Ih? B.D${ԇB'$٣h,Zy("٣h5h' IZ91hc${@߈d@!$٣4y %P?t%A!Npm M36vP4$NArM8B C[@ HXPt2 J ƂeI>B%ɞӂ)#"=e?!Y챇&#=.C!$#=!k+e$$ٷHܭ{ q+Za qZ'a =h swV=no'${eV@2Ra- #h@Z(Zkw6=Bk&HXfh"�ϡi})kN"c%^'CǚB]=^Cӡ"&lZI\GCS봺Asa/؏ֈKr�iE!єa4%p((8"! 4M8Ɠ`piFU8k%hZ 0v M֛I> 8mg4%shx294n_x"X@& \Kh K`/\' p0  W*`xP" јPӏ@c«:M4'גd? yѸ S @.4wa9fbpTj=̫S[�%.q?!3aP AyM46ݼU 0V h29v=`/._7@~@y='t28 B0Fyh`c'$cs|S` }È`84Qs捾O\�Xsa\2o}Yɂ:X5oFun``B~95��_ nr` %8\Ⱄˀ:P�q~qa'%G!~q#]! 8\Ⰿ_qaAraUVqx1o8ᰏ-p#�Ӹ17>pa7[8& 7.ɀ{tnXa ->pVq$G8,ఀU;�>p>pN0&B uP0(jT5T1kޕW}ɚ״z@џm? (-b>(=Pg�Ezv/4v l/ �~@ɝ=(:{PTgtvaռ(T1(es8;nޯM�T}_%r;ԏE|O5Ja5HyNI19mQv,y^Wu5w_ X I_>(1Zڿ-PLHBR*3i@ !|PT/֚W|ZkꗨD5Qd-=KMy+Ef0RT/oIEuX -0 EK{'t!6??*MwZ ~<K:15CHJS-Λy_&[\0xE j.wYO4 HYK H&oN֖Zف),j lf_@5?IQ_c6|P PxfT嫄7xFJxfg?4]#ўc)m/б�f+wz9a�3[Ki <3`fJ{N 0f�n53nk?* %r83 R3$jCMf\3@#!M'u5p 0x\j\2ݏќo~OU ̞_!!wj0W})i@9k0G19&>Ǭv$?@3`sfYK.ҿkR{5Y `\/PsӀ/jjo6 5{iE>1=)M1ɹfWjgu5FZujc̚u8 4u5. @meOH ܊'UMn~57bM&oU;Ab.er># [*8+M};54!W(V_g/j�LwܘhN~;iAAbf?e;awCXbf:14e7-_�a71=w}Csy1+WƣXg_#[Ę!&y0c;+ 39𥳐bR<^0?M"`/%פѫW@\>H1`Z5JN=Tnx#07SiN+L aL|RJ>j"3G0ʗk6i{A\PXe^}OUX '� l3ݮj*,Vi-4*l6dwZVf=-|:,ЗvݠR_R8�Z)AcZnPp'ִ!gGSO_9-)TgR4(znPfRFG-7wNASzΔM�5ptc,ݧ5Uj`RXZ4Z.i`\h^/)Kz74@ezd-/W^zmR̪�j[zvi-4�dɷKI9J *4PjKxɉe)j-h֏fPgAhņlti�Z͂CvNaA$ k]KN,mR'74 ~ f>&ׅht̂sj`҈K m) J%&-h6tZ3CijߩwƂ9itfCRRw.E vԇSC엖Wkj]SҰJ&ذ)ܴ[9Mt�q e|yiz<(<+M/:fuS{zȻPuz_tCڽ!Mɂ[-朶b7je6+5m{ne3muX٫nK:-V,O'xB?+ ~xw+H ^(6qHG=T/ᢕ/{V^Cv.-^kwڴ }赶cӊ-{-l-.𾱠7zwִS 7(PLΚvji7Kjn^(xPzS}̂3@o1MS-$Z9Zb.4UA.*aA]^]B7!BA@vrۮroo1m:qm1mz[{Oy�f endstream endobj startxref 466732 %%EOF �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/README.md��������������������������������������������������������������������������������0000664�0001750�0001750�00000006545�14771516640�012422� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Coherent PDF Command Line Tools =============================== CPDF is distributed under the AGPL - see LICENSE.md. If you are unable to abide by the terms of the AGPL, you will need a commercial license. For commercial licenses, email [contact@coherentgraphics.co.uk](mailto:contact@coherentgraphics.co.uk) or visit [https://www.coherentpdf.com/](https://www.coherentpdf.com/) Copyright Coherent Graphics Ltd 2025. This code builds two things: a) The CPDF PDF command line tool for editing PDF files. b) cpdf as an OCaml library, for which documentation is here: [https://coherentpdf.com/cpdf/](https://coherentpdf.com/cpdf/) Prerequisites to build ---------------------- The OCaml compiler [http://ocaml.org](http://ocaml.org) The camlpdf library [http://github.com/johnwhitington/camlpdf](http://www.github.com/johnwhitington/camlpdf) The ocamlfind library manager [http://projects.camlcity.org/projects/findlib.html](http://projects.camlcity.org/projects/findlib.html) If you are using the OPAM package manager: [http://opam.ocamlpro.com](http://opam.ocamlpro.com) these can be installed by: ``` opam install camlpdf ``` To build -------- If downloading from Github, obtain the correct source. This means choosing the tag for a particular version, such as "v2.8.1". The head of the master branch is unstable. 1. Type `make` to make the cpdf executable and the library 2. Type `make install` to install the OCaml cpdf library. The `cpdf` executable should be manually placed somewhere suitable. Alternatively, the library and command-line binary can be installed by ``` opam install cpdf ``` Documentation ------------- The file `cpdfmanual.pdf` in this folder is the documentation for the command line tools. The documentation for the cpdf OCaml library is in `doc/html/cpdf/` in this folder once the library has been built. C API ----- A C interface to cpdf is available, in source and binary form: [https://github.com/johnwhitington/cpdflib-source](https://github.com/johnwhitington/cpdflib-source) [https://github.com/coherentgraphics/cpdflib-binary](https://github.com/coherentgraphics/cpdflib-binary) Python API ---------- A Python interface to cpdf is available: [https://pypi.org/project/pycpdflib](https://pypi.org/project/pycpdflib) Java API -------- A Java interface to cpdf is available: [https://github.com/coherentgraphics/jcpdf](https://github.com/coherentgraphics/jcpdf) .NET API -------- A .NET interface to cpdf is available: [https://github.com/coherentgraphics/dotnet-libcpdf](https://github.com/coherentgraphics/dotnet-libcpdf) JavaScript API -------------- A JavaScript version of cpdf, for server and client side is available: Distribution: [https://www.npmjs.com/package/coherentpdf](https://www.npmjs.com/package/coherentpdf) Source: [https://github.com/coherentgraphics/coherentpdf.js](https://github.com/coherentgraphics/coherentpdf.js) Acknowledgments --------------- The file [cpdfxmlm.ml](cpdfxmlm.ml) was written by Daniel Bünzli. The file [cpdfyojson.ml](cpdfyojson.ml) was written by Martin Jambon and others. The error descriptions for -verify "PDF/UA-1(matterhorn)" come from the PDF Association, and are licensed under the Creative Commons Attribution 4.0 International license. PDF/UA support in Cpdf was implemented under NLnet grant 2023-12-031. Contact ------- [contact@coherentgraphics.co.uk](mailto:contact@coherentgraphics.co.uk) �����������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/cpdfextracttext.mli����������������������������������������������������������������������0000664�0001750�0001750�00000000413�14771516640�015046� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(** Experimental text extractor *) (** Extract page text for a given page. *) val extract_page_text : float option -> Pdf.t -> 'a -> Pdfpage.t -> string (** Extract page text for given page range. *) val extract_text : float option -> Pdf.t -> int list -> string �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/hello.pdf��������������������������������������������������������������������������������0000664�0001750�0001750�00000001163�14771516640�012730� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%PDF-1.1 % 1 0 obj <</Length 49>> stream 1 0 0 1 50 770 cm BT/F0 36 Tf(Hello, World!)Tj ET endstream endobj 2 0 obj <</Type/Pages/Kids[4 0 R]/Count 1>> endobj 3 0 obj <</Type/Catalog/Pages 2 0 R>> endobj 4 0 obj <</Type/Page/Parent 2 0 R/Resources<</Font<</F0<</Type/Font/Subtype/Type1/BaseFont/Times-Italic>>>>>>/MediaBox[0 0 595.275590551 841.88976378]/Rotate 0/Contents[1 0 R]>> endobj xref 0 5 0000000000 65535 f 0000000015 00000 n 0000000112 00000 n 0000000163 00000 n 0000000208 00000 n trailer <</Size 5/Root 3 0 R/ID[<e8ce32351eb32fb0713a4fca87b07589><e8ce32351eb32fb0713a4fca87b07589>]>> startxref 393 %%EOF �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/cpdfpagespec.mli�������������������������������������������������������������������������0000664�0001750�0001750�00000004137�14771516640�014265� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(** Page specifications and ranges *) (** Here are the rules for building input ranges: {ul {- Page numbers can be given plain, like 1 or 2, or as page labels, like <1> or <iii> (backslash to escape intended angle bracket)} {- A page label may be used in place of a number e.g [[iii]] represents the first page found which is labelled [iii]. } {- A dash (-) defines ranges e.g 1-5 or 6-3.} {- A comma (,) allows one to specify several ranges, e.g. 1-2,4-5.} {- The word end represents the last page number.} {- The words odd and even can be used in place of or at the end of a page range to restrict to just the odd or even pages. } {- The words portrait and landscape can be used in place of or at the end of a page range to restrict to just those pages which are portrait or landscape. Note that the meaning of portrait and landscape does not take account of any viewing rotation in place. A page with equal width and height is considered neither portrait nor landscape.} {- The word reverse is the same as end-1.} {- The word all is the same as 1-end.} {- A range must contain no spaces.} {- A tilde (~) defines a page number counting from the end of the document rather than the beginning. Page ~1 is the last page, ~2 the penultimate page etc.} {- Prepending NOT to a whole page range inverts it, once the whole is parsed. } {- Appending DUP2 to a whole page range duplicates each page twice (or 3, or 4 etc. times), once the whole is parsed. } } *) (** Parse a (valid) page specification to a page range *) val parse_pagespec : Pdf.t -> string -> int list (** Same, but without a PDF. Thus 'end' etc. don't work *) val parse_pagespec_without_pdf : string -> int list (** Is a page specification, in theory, valid? This is the most we can find out without supplying a PDF, and thus knowing how many pages there are in it. *) val validate_pagespec : string -> bool (** Return a string for the given range. Knows how to identify all, odd, even, x-y ranges etc. *) val string_of_pagespec : Pdf.t -> int list -> string (** Invert a range, given the maximum page number and the range. *) val invert_range : int -> int list -> int list ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/cpdfcoord.ml�����������������������������������������������������������������������������0000664�0001750�0001750�00000026765�14771516640�013446� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������open Pdfutil let emptypage = Pdfpage.blankpage Pdfpaper.a4 let error s = raise (Pdf.PDFError s) (* Unit conversions to points. *) let mm x = ((x /. 10.) /. 2.54) *. 72. let cm x = (x /. 2.54) *. 72. let inch x = x *. 72. let points_of_papersize p = let u = Pdfpaper.unit p in let w = Pdfunits.points (Pdfpaper.width p) u in let h = Pdfunits.points (Pdfpaper.height p) u in w, h let box name pdf page = match Pdf.lookup_direct pdf name page.Pdfpage.rest with | Some pdfobject -> Pdf.direct pdf pdfobject | None -> page.Pdfpage.mediabox let width pdf box = let minx, miny, maxx, maxy = Pdf.parse_rectangle pdf box in maxx -. minx let height pdf box = let minx, miny, maxx, maxy = Pdf.parse_rectangle pdf box in maxy -. miny let minx pdf box = let minx, miny, maxx, maxy = Pdf.parse_rectangle pdf box in minx let miny pdf box = let minx, miny, maxx, maxy = Pdf.parse_rectangle pdf box in miny let maxx pdf box = let minx, miny, maxx, maxy = Pdf.parse_rectangle pdf box in maxx let maxy pdf box = let minx, miny, maxx, maxy = Pdf.parse_rectangle pdf box in maxy let find_page_characteristic pdf page = function | "PW" -> width pdf page.Pdfpage.mediabox | "PH" -> height pdf page.Pdfpage.mediabox | "CW" -> width pdf (box "/CropBox" pdf page) | "CH" -> height pdf (box "/CropBox" pdf page) | "AW" -> width pdf (box "/ArtBox" pdf page) | "AH" -> height pdf (box "/ArtBox" pdf page) | "TW" -> width pdf (box "/TrimBox" pdf page) | "TH" -> height pdf (box "/TrimBox" pdf page) | "BW" -> width pdf (box "/BleedBox" pdf page) | "BH" -> height pdf (box "/BleedBox" pdf page) | "PMINX" -> minx pdf page.Pdfpage.mediabox | "PMINY" -> miny pdf page.Pdfpage.mediabox | "PMAXX" -> maxx pdf page.Pdfpage.mediabox | "PMAXY" -> maxy pdf page.Pdfpage.mediabox | "CMINX" -> minx pdf (box "/CropBox" pdf page) | "CMINY" -> miny pdf (box "/CropBox" pdf page) | "CMAXX" -> maxx pdf (box "/CropBox" pdf page) | "CMAXY" -> maxy pdf (box "/CropBox" pdf page) | "AMINX" -> minx pdf (box "/ArtBox" pdf page) | "AMINY" -> miny pdf (box "/ArtBox" pdf page) | "AMAXX" -> maxx pdf (box "/ArtBox" pdf page) | "AMAXY" -> maxy pdf (box "/ArtBox" pdf page) | "TMINX" -> minx pdf (box "/TrimBox" pdf page) | "TMINY" -> miny pdf (box "/TrimBox" pdf page) | "TMAXX" -> maxx pdf (box "/TrimBox" pdf page) | "TMAXY" -> maxy pdf (box "/TrimBox" pdf page) | "BMINX" -> minx pdf (box "/BleedBox" pdf page) | "BMINY" -> miny pdf (box "/BleedBox" pdf page) | "BMAXX" -> maxx pdf (box "/BleedBox" pdf page) | "BMAXY" -> maxy pdf (box "/BleedBox" pdf page) | _ -> failwith "find_page_characteristic" let is_page_characteristic = function | "PW" | "PH" | "CW" | "CH" | "AW" | "AH" | "TW" | "TH" | "BW" | "BH" | "PMINX" | "PMINY" | "PMAXX" | "PMAXY" | "CMINX" | "CMINY" | "CMAXX" | "CMAXY" | "AMINX" | "AMINY" | "AMAXX" | "AMAXY" | "TMINX" | "TMINY" | "TMAXX" | "TMAXY" | "BMINX" | "BMINY" | "BMAXX" | "BMAXY" -> true | _ -> false let make_num pdf page unt num = let f = match num with | Pdfgenlex.LexInt i -> float_of_int i | Pdfgenlex.LexReal r -> r | Pdfgenlex.LexName (( "PW" | "PH" | "CW" | "CH" | "PMINX" | "PMINY" | "PMAXX" | "PMAXY" | "CMINX" | "CMINY" | "CMAXX" | "CMAXY") as page_characteristic) -> find_page_characteristic pdf page page_characteristic | _ -> failwith "make_num" in match unt with | Pdfgenlex.LexName "pt" -> f | Pdfgenlex.LexName "cm" -> cm f | Pdfgenlex.LexName "mm" -> mm f | Pdfgenlex.LexName "in" -> inch f | _ -> failwith "make_num" let update_last_number pdf page unt op num = function [] -> [] | h::t -> let final_num = make_num pdf page unt num in let h' = match op with Pdfgenlex.LexName "add" -> h +. final_num | Pdfgenlex.LexName "sub" -> h -. final_num | Pdfgenlex.LexName "mul" -> h *. final_num | Pdfgenlex.LexName "div" -> h /. final_num | _ -> failwith "update_last_number" in h'::t let rec parse_units_again pdf page numbers papersize more = let w, h = points_of_papersize papersize in parse_units pdf page (h::w::numbers) more and parse_units pdf page numbers = function | Pdfgenlex.LexName "a10portrait"::more -> parse_units_again pdf page numbers Pdfpaper.a10 more | Pdfgenlex.LexName "a9portrait"::more -> parse_units_again pdf page numbers Pdfpaper.a9 more | Pdfgenlex.LexName "a8portrait"::more -> parse_units_again pdf page numbers Pdfpaper.a8 more | Pdfgenlex.LexName "a7portrait"::more -> parse_units_again pdf page numbers Pdfpaper.a7 more | Pdfgenlex.LexName "a6portrait"::more -> parse_units_again pdf page numbers Pdfpaper.a6 more | Pdfgenlex.LexName "a5portrait"::more -> parse_units_again pdf page numbers Pdfpaper.a5 more | Pdfgenlex.LexName "a4portrait"::more -> parse_units_again pdf page numbers Pdfpaper.a4 more | Pdfgenlex.LexName "a3portrait"::more -> parse_units_again pdf page numbers Pdfpaper.a3 more | Pdfgenlex.LexName "a2portrait"::more -> parse_units_again pdf page numbers Pdfpaper.a2 more | Pdfgenlex.LexName "a1portrait"::more -> parse_units_again pdf page numbers Pdfpaper.a1 more | Pdfgenlex.LexName "a0portrait"::more -> parse_units_again pdf page numbers Pdfpaper.a0 more | Pdfgenlex.LexName "a10landscape"::more -> parse_units_again pdf page numbers (Pdfpaper.landscape Pdfpaper.a10) more | Pdfgenlex.LexName "a9landscape"::more -> parse_units_again pdf page numbers (Pdfpaper.landscape Pdfpaper.a9) more | Pdfgenlex.LexName "a8landscape"::more -> parse_units_again pdf page numbers (Pdfpaper.landscape Pdfpaper.a8) more | Pdfgenlex.LexName "a7landscape"::more -> parse_units_again pdf page numbers (Pdfpaper.landscape Pdfpaper.a7) more | Pdfgenlex.LexName "a6landscape"::more -> parse_units_again pdf page numbers (Pdfpaper.landscape Pdfpaper.a6) more | Pdfgenlex.LexName "a5landscape"::more -> parse_units_again pdf page numbers (Pdfpaper.landscape Pdfpaper.a5) more | Pdfgenlex.LexName "a4landscape"::more -> parse_units_again pdf page numbers (Pdfpaper.landscape Pdfpaper.a4) more | Pdfgenlex.LexName "a3landscape"::more -> parse_units_again pdf page numbers (Pdfpaper.landscape Pdfpaper.a3) more | Pdfgenlex.LexName "a2landscape"::more -> parse_units_again pdf page numbers (Pdfpaper.landscape Pdfpaper.a2) more | Pdfgenlex.LexName "a1landscape"::more -> parse_units_again pdf page numbers (Pdfpaper.landscape Pdfpaper.a1) more | Pdfgenlex.LexName "a0landscape"::more -> parse_units_again pdf page numbers (Pdfpaper.landscape Pdfpaper.a0) more | Pdfgenlex.LexName "uslegalportrait"::more -> parse_units_again pdf page numbers Pdfpaper.uslegal more | Pdfgenlex.LexName "usletterportrait"::more -> parse_units_again pdf page numbers Pdfpaper.usletter more | Pdfgenlex.LexName "uslegallandscape"::more -> parse_units_again pdf page numbers (Pdfpaper.landscape Pdfpaper.uslegal) more | Pdfgenlex.LexName "usletterlandscape"::more -> parse_units_again pdf page numbers (Pdfpaper.landscape Pdfpaper.usletter) more | Pdfgenlex.LexInt x::Pdfgenlex.LexName "mm"::more -> parse_units pdf page ((mm <| float_of_int x)::numbers) more | Pdfgenlex.LexReal x::Pdfgenlex.LexName "mm"::more -> parse_units pdf page (mm x::numbers) more | Pdfgenlex.LexInt x::Pdfgenlex.LexName "cm"::more -> parse_units pdf page ((cm <| float_of_int x)::numbers) more | Pdfgenlex.LexReal x::Pdfgenlex.LexName "cm"::more -> parse_units pdf page (cm x::numbers) more | Pdfgenlex.LexInt x::Pdfgenlex.LexName "in"::more -> parse_units pdf page ((inch <| float_of_int x)::numbers) more | Pdfgenlex.LexReal x::Pdfgenlex.LexName "in"::more -> parse_units pdf page (inch x::numbers) more | Pdfgenlex.LexInt x::more -> parse_units pdf page (float_of_int x::numbers) more | Pdfgenlex.LexReal x::more -> parse_units pdf page (x::numbers) more | Pdfgenlex.LexName "pt"::more -> parse_units pdf page numbers more | Pdfgenlex.LexName (( "PW" | "PH" | "CW" | "CH" | "PMINX" | "PMINY" | "PMAXX" | "PMAXY" | "CMINX" | "CMINY" | "CMAXX" | "CMAXY") as page_characteristic)::more -> let r = find_page_characteristic pdf page page_characteristic in parse_units pdf page (r::numbers) more | Pdfgenlex.LexName ("add" | "sub" | "mul" | "div") as op:: ((Pdfgenlex.LexInt _ | Pdfgenlex.LexReal _ | Pdfgenlex.LexName ( "PW" | "PH" | "CW" | "CH" | "PMINX" | "PMINY" | "PMAXX" | "PMAXY" | "CMINX" | "CMINY" | "CMAXX" | "CMAXY")) as num):: (Pdfgenlex.LexName ("pt" | "mm" | "cm" | "in") as unt)::more -> parse_units pdf page (update_last_number pdf page unt op num numbers) more | Pdfgenlex.LexName ("add" | "sub" | "mul" | "div") as op:: ((Pdfgenlex.LexInt _ | Pdfgenlex.LexReal _ | Pdfgenlex.LexName ( "PW" | "PH" | "CW" | "CH" | "PMINX" | "PMINY" | "PMAXX" | "PMAXY" | "CMINX" | "CMINY" | "CMAXX" | "CMAXY")) as num)::more -> parse_units pdf page (update_last_number pdf page (Pdfgenlex.LexName "pt") op num numbers) more | _ -> rev numbers let rec space_units_inner = function | [] -> [] | 'm'::'m'::t -> ' '::'m'::'m'::' '::space_units_inner t | 'c'::'m'::t -> ' '::'c'::'m'::' '::space_units_inner t | 'i'::'n'::t -> ' '::'i'::'n'::' '::space_units_inner t | 'p'::'t'::t -> ' '::'p'::'t'::' '::space_units_inner t | h::t -> h::space_units_inner t let space_units s = implode (space_units_inner (explode s)) let parse_units_string pdf page s = let fs = parse_units pdf page [] (Pdfgenlex.lex_string <| space_units s) in (*(List.fold_left (fun x y -> x ^ " " ^ y) "" (List.map string_of_float * fs));*) fs let parse_rectangle pdf s = (* If it begins with ? it's absolute *) let s, absolute = match explode s with | '?'::r -> implode r, true | _ -> s, false in try match parse_units_string pdf emptypage s with | [x; y; w; h] -> if absolute then x, y, w -. x, h -. y else x, y, w, h | _ -> error ("Bad rectangle specification " ^ s) with e -> error ("Bad rectangle specification " ^ s ^ " : " ^ Printexc.to_string e) let parse_rectangles pdf s = (* If it begins with ? it's absolute *) let s, absolute = match explode s with | '?'::r -> implode r, true | _ -> s, false in try let pages = Pdfpage.pages_of_pagetree pdf in let groups = List.map (fun page -> parse_units_string pdf page s) pages in List.map (function | [x; y; w; h] -> if absolute then x, y, w -. x, h -. y else x, y, w, h | _ -> error ("Bad rectangle specification " ^ s)) groups with e -> error ("Bad rectangle specification " ^ s ^ " : " ^ Printexc.to_string e) let parse_coordinate pdf s = try match parse_units_string pdf emptypage s with | [dx; dy] -> (*Printf.printf "result = %f, %f\n" dx dy;*) dx, dy | _ -> error ("Bad coordinate specification " ^ s) with _ -> error ("Bad coordinate specification " ^ s) let parse_coordinates pdf s = try let pages = Pdfpage.pages_of_pagetree pdf in let groups = List.map (fun page -> parse_units_string pdf page s) pages in List.map (function | [dx; dy] -> (dx, dy) | _ -> error ("Bad coordinate specification " ^ s)) groups with _ -> error ("Bad coordinate specification " ^ s) let parse_single_number pdf s = try match parse_units_string pdf emptypage s with | [x] -> x | _ -> error ("Bad number argument " ^ s) with _ -> error ("Bad number argument " ^ s) �����������cpdf-2.8.1/cpdfxobject.mli��������������������������������������������������������������������������0000664�0001750�0001750�00000000202�14771516640�014121� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(** XObjects *) (** Stamp a PDF as an xobject in another. *) val stamp_as_xobject : Pdf.t -> int list -> Pdf.t -> Pdf.t * string ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/cpdfimpose.mli���������������������������������������������������������������������������0000664�0001750�0001750�00000001443�14771516640�013767� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(** Imposition *) (** Imposition. See cpdfmanual.pdf for details. *) val impose : process_struct_tree:bool -> x:float -> y:float -> fit:bool -> columns:bool -> rtl:bool -> btt:bool -> center:bool -> margin:float -> spacing:float -> linewidth:float -> fast:bool -> Pdf.t -> Pdf.t (** The legacy twoup_stack operation puts two logical pages on each physical page, rotating them 90 degrees to do so. The new mediabox is thus larger. Bool true (fast) if assume well-formed ISO content streams. *) val twoup_stack : process_struct_tree:bool -> bool -> Pdf.t -> Pdf.t (** The legacy twoup operation does the same, but scales the new sides down so that the media box is unchanged. Bool true (fast) if assume well-formed ISO content streams. *) val twoup : process_struct_tree:bool -> bool -> Pdf.t -> Pdf.t �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/cpdfocg.mli������������������������������������������������������������������������������0000664�0001750�0001750�00000000644�14771516640�013245� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(** Optional content groups *) (** Return list of OCG names. *) val ocg_get_list : Pdf.t -> string list (** Print OCG list to Standard Output. *) val ocg_list : Pdf.t -> unit (** Coalesce same-named OCGs resulting from merge. *) val ocg_coalesce : Pdf.t -> unit (** Rename an OCG. *) val ocg_rename : string -> string -> Pdf.t -> unit (** Make sure every OCG is in the /Order. *) val ocg_order_all : Pdf.t -> unit ��������������������������������������������������������������������������������������������cpdf-2.8.1/cpdfchop.mli�����������������������������������������������������������������������������0000664�0001750�0001750�00000000466�14771516640�013430� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(** Chop *) (** Chop pages in the given range into pieces. *) val chop : x:int -> y:int -> columns:bool -> btt:bool -> rtl:bool -> Pdf.t -> int list -> Pdf.t (** Chop a page in the given range horizontally or vertically. *) val chop_hv : is_h:bool -> line:float -> columns:bool -> Pdf.t -> int list -> Pdf.t ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/cpdfpad.ml�������������������������������������������������������������������������������0000664�0001750�0001750�00000007624�14771516640�013075� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������open Pdfutil (* Padding with blank pages. *) let insert_after pos page pages = let before, after = cleave pages pos in before @ [page] @ after (* Insert many. *) let rec insert_after_many pages = function | [] -> pages | (pos, page)::more -> let pages' = insert_after pos page pages in insert_after_many pages' (map (fun (p, pa) -> p + 1, pa) more) (* For each pagenum in the range, increment the count by padsize, and carry on. e.g insert_after_many_changes 1 0 [2] [1; 2; 3] --> [(1, 1); (2, 2); (3, 4)] *) let rec insert_after_many_changes isbefore padsize offset range = function [] -> [] | h::t -> let item = (h, h + offset + if isbefore && mem h range then 1 else 0) in if mem h range then item::insert_after_many_changes isbefore padsize (offset + padsize) range t else item::insert_after_many_changes isbefore padsize offset range t let pad_with_pdf (range : int list) (pdf : Pdf.t) (isbefore : bool) (padfile : Pdf.t) = let range = sort compare (setify range) in let merged = Pdfmerge.merge_pdfs false false ["a"; "b"] [pdf; padfile] [ilist 1 (Pdfpage.endpage pdf); ilist 1 (Pdfpage.endpage padfile)] in let original_pages, padpages = cleave (Pdfpage.pages_of_pagetree merged) (Pdfpage.endpage pdf) in let newpages = map (fun (pagenum, page) -> if mem pagenum range then (if isbefore then padpages @ [page] else [page] @ padpages) else [page]) (combine (indx original_pages) original_pages) in (* FIXME Provide ~changes here? *) Pdfpage.change_pages false merged (flatten newpages) let pad padwith range pdf isbefore = match padwith with Some padfile -> pad_with_pdf range pdf isbefore padfile | None -> let i = if isbefore then 1 else 0 in let pages = Pdfpage.pages_of_pagetree pdf in let blankpages = map (fun n -> {Pdfpage.content = []; Pdfpage.mediabox = (select (n + i) pages).Pdfpage.mediabox; Pdfpage.resources = Pdf.Dictionary []; Pdfpage.rotate = (select (n + i) pages).Pdfpage.rotate; Pdfpage.rest = Pdf.remove_dict_entry ((select (n + i) pages).Pdfpage.rest) "/Annots"}) range in let pages' = insert_after_many pages (combine range blankpages) in let changes = insert_after_many_changes isbefore 1 0 (map (fun x -> x + i) range) (ilist 1 (length pages)) in Pdfpage.change_pages ~changes true pdf pages' let padafter ?padwith range pdf = let isinpdf n = mem n (ilist 1 (Pdfpage.endpage pdf)) in if not (fold_left ( && ) true (map isinpdf range)) then raise (Failure "padafter: range contains pages not present in pdf"); pad padwith range pdf false let padbefore ?padwith range pdf = let isinpdf n = mem n (ilist 1 (Pdfpage.endpage pdf)) in if not (fold_left ( && ) true (map isinpdf range)) then raise (Failure "padbefore: range contains pages not present in pdf"); pad padwith (map pred range) pdf true let padmultiple n pdf = let neg, n = n < 0, if n < 0 then -n else n in let pages = Pdfpage.pages_of_pagetree pdf in let len = length pages in let pages_to_add = if len / n * n = len then 0 else n - (len mod n) in if pages_to_add > 0 then let blankpages = many {Pdfpage.content = []; Pdfpage.mediabox = (select len pages).Pdfpage.mediabox; Pdfpage.resources = Pdf.Dictionary []; Pdfpage.rotate = (select len pages).Pdfpage.rotate; Pdfpage.rest = Pdf.Dictionary []} pages_to_add in let changes = map (fun x -> (x, x)) (ilist 1 (length pages)) in Pdfpage.change_pages ~changes true pdf (if neg then blankpages @ pages else pages @ blankpages) else pdf ������������������������������������������������������������������������������������������������������������cpdf-2.8.1/cpdfdraft.mli����������������������������������������������������������������������������0000664�0001750�0001750�00000000230�14771516640�013564� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(** Remove images *) (** Remove images from a PDF, optionally adding crossed boxes. *) val draft : string option -> bool -> int list -> Pdf.t -> Pdf.t ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/cpdffont.ml������������������������������������������������������������������������������0000664�0001750�0001750�00000032001�14771516640�013262� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������open Pdfutil open Cpdferror open Pdfio (* Embed missing fonts with Ghostscript. *) let embed_missing_fonts path_to_ghostscript gs_quiet fi fo = if path_to_ghostscript = "" then begin Pdfe.log "Please supply path to gs with -gs\n"; exit 2 end; let gscall = Filename.quote_command path_to_ghostscript ((if gs_quiet then ["-dQUIET"] else []) @ ["-dNOPAUSE"; "-sDEVICE=pdfwrite"; ("-sOUTPUTFILE=" ^ fo); "-dBATCH"; fi]) in match Sys.command gscall with | 0 -> exit 0 | _ -> Pdfe.log "Font embedding failed.\n"; exit 2 (* Return any font dictionary from a page or xobject given a chain and the page number. *) let font_from_name pdf fontname pagenumber = try let resources = ref (select pagenumber (Pdfpage.pages_of_pagetree pdf)).Pdfpage.resources in let chain = ref (tl (String.split_on_char '/' fontname)) in let font = ref Pdf.Null in while !chain <> [] do match !chain with | [f] -> font := unopt (Pdf.lookup_chain pdf !resources ["/Font"; ("/" ^ f)]); chain := [] | x::xs -> resources := unopt (Pdf.lookup_chain pdf !resources ["/XObject"; "/" ^ x; "/Resources"]); chain := xs | [] -> () done; !font with _ -> Pdfe.log (Printf.sprintf "Not found: font %s on page %i\n" fontname pagenumber); Pdf.Null (* Copy a font from [frompdf] with name [fontname] on page [fontpage] to [pdf] on all pages in [range] *) let copy_font frompdf fontname fontpage range pdf = match Pdf.renumber_pdfs [frompdf; pdf] with | [] | [_] | _::_::_::_ -> assert false | [frompdf; pdf] -> (* Get font and name *) let fromfont = font_from_name frompdf fontname fontpage in let basefontname = match Pdf.lookup_direct frompdf "/BaseFont" fromfont with | Some (Pdf.Name n) -> n | _ -> "/CopyFontAddedNoName" in (* Get all objects forming font (except main /Font one) *) let objnumbers = Pdf.objects_referenced [] [] frompdf fromfont in (* Copy them to from frompdf to pdf. *) iter (function objnum -> Pdf.addobj_given_num pdf (objnum, Pdf.lookup_obj frompdf objnum)) objnumbers; (* Get pages from pdf *) let pdf_pages = Pdfpage.pages_of_pagetree pdf in (* Add the font to pages in range *) let pages' = map (function (page, pagenum) -> if mem pagenum range then let font = match Pdf.lookup_direct pdf "/Font" page.Pdfpage.resources with | Some f -> f | None -> Pdf.Dictionary [] in let font' = match font with | (Pdf.Dictionary _) as d -> Pdf.add_dict_entry d basefontname fromfont | _ -> failwith "copy_font: error" in let resources' = Pdf.add_dict_entry page.Pdfpage.resources "/Font" font' in {page with Pdfpage.resources = resources'} else page) (combine pdf_pages (indx pdf_pages)); in (* Put the pages back into the pdf, and return *) let pdf, root = Pdfpage.add_pagetree pages' pdf in Pdfpage.add_root root [] pdf (* Missing Fonts *) let is_missing pdf dict = match Pdf.lookup_direct pdf "/Subtype" dict with | Some (Pdf.Name "/Type3") -> false | _ -> match Pdf.lookup_direct pdf "/FontDescriptor" dict with | None -> true | Some d -> match Pdf.lookup_direct pdf "/FontFile" d with | Some _ -> false | None -> match Pdf.lookup_direct pdf "/FontFile2" d with | Some _ -> false | None -> match Pdf.lookup_direct pdf "/FontFile3" d with | Some _ -> false | None -> true let missing_font ?l pdf page (name, dict) = if is_missing pdf dict then let subtype = match Pdf.lookup_direct pdf "/Subtype" dict with | Some (Pdf.Name n) -> n | _ -> "" and basefont = match Pdf.lookup_direct pdf "/BaseFont" dict with | Some (Pdf.Name n) -> n | _ -> "" and encoding = match Pdf.lookup_direct pdf "/Encoding" dict with | Some (Pdf.Name n) -> n | _ -> "Built-in" in match l with | None -> Printf.printf "%i, %s, %s, %s, %s\n" page name subtype basefont encoding | Some r -> r := (page, name, subtype, basefont, encoding)::!r (* FIXME We must look at fonts in Form xobjects too. And process them only once. Plus, process fonts from pages only once too. So, introduce object numbers as the key (fonts can be direct too though! *) let missing_fonts ?l pdf range = Cpdfpage.iter_pages (fun num page -> match Pdf.lookup_direct pdf "/Font" page.Pdfpage.resources with | Some (Pdf.Dictionary fontdict) -> (* Extract descendant fonts *) let name_dict_pairs = flatten (map (fun (name, dict) -> match Pdf.lookup_direct pdf "/DescendantFonts" dict with | Some (Pdf.Array desc_fonts) -> map (fun d -> name, d) desc_fonts | _ -> [(name, dict)]) fontdict) in iter (missing_font ?l pdf num) name_dict_pairs | _ -> ()) pdf range let missing_fonts_return pdf range = let l = ref [] in missing_fonts ~l pdf range; !l let print_font_table pdf fontname pagenumber = let fontdict = font_from_name pdf fontname pagenumber in (* For each item in the fontdict, follow its value and find the basename. If it matches, return that font *) let font = ref (Some fontdict) in iter (fun (k, v) -> match Pdf.lookup_direct pdf "/BaseFont" v with | Some (Pdf.Name n) when n = fontname -> font := Some v | _ -> ()) (match fontdict with Pdf.Dictionary d -> d | _ -> []); let font = match !font with Some f -> f | None -> failwith (Printf.sprintf "print_font_encoding: font %s not found" fontname) in let pdftextfont = Pdftext.read_font pdf font in let charset = match pdftextfont with | Pdftext.SimpleFont {Pdftext.fontdescriptor = Some {Pdftext.charset = Some cs}} -> Some cs | _ -> None in let extractor = Pdftext.text_extractor_of_font_real pdftextfont in let unicodedata = Cpdfunicodedata.unicodedata () in let unicodetable = Hashtbl.create 16000 in iter (fun x -> Hashtbl.add unicodetable (int_of_string ("0x" ^ x.Cpdfunicodedata.code_value)) (x.Cpdfunicodedata.code_value, x.Cpdfunicodedata.general_category, x.Cpdfunicodedata.character_name, x.Cpdfunicodedata.iso_10646_comment_field)) unicodedata; for x = 0 to 255 do let str = (if Pdftext.is_identity_h pdftextfont then "\000" else "") ^ string_of_char (char_of_int x) in let codepoints = Pdftext.codepoints_of_text extractor str in let unicodenumber, unicodename, is_control = match codepoints with | [c] -> begin try let codeval, category, character_name, comment = Hashtbl.find unicodetable c in codeval, character_name, category = "Cc" with Not_found -> "", "", false end | _ -> "***multiple", "***multiple", false in let utf8 = if is_control then "<nonprintable>" else Pdftext.utf8_of_codepoints codepoints in let glyphnames = fold_left ( ^ ) "" (Pdftext.glyphnames_of_text extractor str) in let is_in_charset s = match charset with None -> true | Some cs -> mem s cs in if glyphnames <> ".notdef" && is_in_charset glyphnames then Printf.printf "%i = U+%s (%s - %s) = %s\n" x unicodenumber utf8 unicodename glyphnames done let extract_fontfile pagenumber fontname filename pdf = match Pdftext.read_font pdf (font_from_name pdf fontname pagenumber) with | Pdftext.CIDKeyedFont (_, {Pdftext.cid_fontdescriptor = {Pdftext.fontfile = Some fontfile}}, _) | Pdftext.SimpleFont {Pdftext.fontdescriptor = Some {Pdftext.fontfile = Some fontfile}} -> begin let objnum = match fontfile with | Pdftext.FontFile i | Pdftext.FontFile2 i | Pdftext.FontFile3 i -> i in match Pdf.lookup_obj pdf objnum with | Pdf.Stream s as obj -> Pdfcodec.decode_pdfstream pdf obj; begin match s with | {contents = (_, Pdf.Got bytes)} -> let fh = open_out_bin filename in for x = 0 to bytes_size bytes - 1 do output_byte fh (bget bytes x) done; close_out fh | _ -> failwith "extract_fontfile" end | _ -> failwith "extract_fontfile" end | _ -> failwith "unsupported or unfound font" (* Remove Embedded fonts. This is done by removing the Font Descriptor. *) let remove_fontdescriptor pdf = function | Pdf.Dictionary d as font -> begin match lookup "/Type" d with | Some (Pdf.Name "/Font") -> (match Pdf.lookup_direct pdf "/FontDescriptor" font with | Some fontdes -> let fontdescriptor' = Pdf.remove_dict_entry (Pdf.remove_dict_entry (Pdf.remove_dict_entry fontdes "/FontFile") "/FontFile2") "/FontFile3" in Pdf.add_dict_entry font "/FontDescriptor" (Pdf.Indirect (Pdf.addobj pdf fontdescriptor')) | _ -> font) | _ -> font end | x -> x let remove_fonts pdf = Pdf.objiter (fun k v -> ignore (Pdf.addobj_given_num pdf (k, remove_fontdescriptor pdf v))) pdf; pdf (* List fonts *) let list_font pdf page (name, dict) = let subtype = match Pdf.lookup_direct pdf "/Subtype" dict with | Some (Pdf.Name n) -> Pdfwrite.string_of_pdf (Pdf.Name n) | _ -> "" in let basefont = match Pdf.lookup_direct pdf "/BaseFont" dict with | Some (Pdf.Name n) -> Pdfwrite.string_of_pdf (Pdf.Name n) | _ -> "" in let encoding = match Pdf.lookup_direct pdf "/Encoding" dict with | Some (Pdf.Name n) -> Pdfwrite.string_of_pdf (Pdf.Name n) | _ -> "" in (page, name, subtype, basefont, encoding, Pdf.direct pdf dict) (* List the fonts used in an xobject, and in any of the xobjects it has. Do not process an xobject twice. *) let xobjs_processed = null_hash () let rec list_fonts_xobject pdf pagenum xobjname xobjnum = match Hashtbl.find_opt xobjs_processed xobjnum with | None -> let from_xobjs = match Pdf.lookup_direct pdf "/Resources" (Pdf.lookup_obj pdf xobjnum) with | Some r -> begin match Pdf.lookup_direct pdf "/XObject" r with | Some (Pdf.Dictionary xobjs) -> flatten (option_map (function (n, Pdf.Indirect i) -> Some (list_fonts_xobject pdf pagenum (xobjname ^ n) i) | _ -> None) xobjs) | _ -> [] end | _ -> [] in begin match Pdf.lookup_direct pdf "/Resources" (Pdf.lookup_obj pdf xobjnum) with | Some r -> begin match Pdf.lookup_direct pdf "/Font" r with | Some (Pdf.Dictionary fonts) -> map (list_font pdf pagenum) (map (function (n, f) -> (xobjname ^ n, f)) fonts) @ from_xobjs | _ -> from_xobjs end | None -> from_xobjs end | Some _ -> Hashtbl.add xobjs_processed xobjnum (); [] let list_fonts pdf range = Hashtbl.clear xobjs_processed; let pages = Pdfpage.pages_of_pagetree pdf in flatten (map (fun (num, page) -> if mem num range then let from_xobjs = match Pdf.lookup_direct pdf "/XObject" page.Pdfpage.resources with | Some (Pdf.Dictionary xobjs) -> flatten (option_map (function (n, Pdf.Indirect i) -> Some (list_fonts_xobject pdf num n i) | _ -> None) xobjs) | _ -> [] in begin match Pdf.lookup_direct pdf "/Font" page.Pdfpage.resources with | Some (Pdf.Dictionary fontdict) -> map (list_font pdf num) fontdict @ from_xobjs | _ -> from_xobjs end else []) (combine (ilist 1 (length pages)) pages)) let string_of_font (p, n, s, b, e, _) = Printf.sprintf "%i %s %s %s %s\n" p n s b e let json_of_font (pagenum, name, subtype, basefont, encoding, _) = `Assoc [("page", `Int pagenum); ("name", `String name); ("subtype", if subtype = "" then `Null else `String subtype); ("basefont", if basefont = "" then `Null else `String basefont); ("encoding", if encoding = "" then `Null else `String encoding)] let json_fonts pdf range = `List (map json_of_font (list_fonts pdf range)) let print_fonts ?(json=false) pdf range = if json then flprint (Cpdfyojson.Safe.pretty_to_string (`List (map json_of_font (list_fonts pdf range)))) else flprint (fold_left ( ^ ) "" (map string_of_font (list_fonts pdf range))) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/cpdfcreate.mli���������������������������������������������������������������������������0000664�0001750�0001750�00000000426�14771516640�013736� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(** Making new documents *) (** Make a blank document given x and y page dimensions in points and a number of pages *) val blank_document : float -> float -> int -> Pdf.t (** The same, but give a Pdfpaper.t paper size. *) val blank_document_paper : Pdfpaper.t -> int -> Pdf.t ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/logo.pdf���������������������������������������������������������������������������������0000664�0001750�0001750�00000004116�14771516640�012566� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%PDF-1.4 % 4 0 obj <</E 1662/H [ 546 123 ]/L 2126/Linearized 1/N 1/O 7/T 1925>> endobj xref 4 9 0000000016 00000 n 0000000393 00000 n 0000000487 00000 n 0000000669 00000 n 0000000903 00000 n 0000000942 00000 n 0000000977 00000 n 0000001009 00000 n 0000000546 00000 n trailer <</Info 2 0 R/Prev 1917/Root 5 0 R/Size 13>>startxref 0 %%EOF 5 0 obj <</OpenAction 6 0 R/PageMode /UseNone/Pages 1 0 R/Type /Catalog/Version /1.4>> endobj 6 0 obj <</D [7 0 R /XYZ -32768 -32768 1]/S /GoTo>> endobj 12 0 obj <</Filter /FlateDecode/Length 50/S 39>> stream xc```e``Rb� Y8Z@F +30(0p50v��c"endstream endobj 7 0 obj <</BleedBox [0 0 56.693 56.693]/Contents 11 0 R/Group 3 0 R/MediaBox [0 0 56.693 56.693]/Parent 1 0 R/Resources <</ExtGState 8 0 R/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]>>/TrimBox [0 0 56.693 56.693]/Type /Page>> endobj 8 0 obj <</G0 9 0 R/G1 10 0 R>> endobj 9 0 obj <</BM /Compatible>> endobj 10 0 obj <</BM /Normal>> endobj 11 0 obj <</Filter /FlateDecode/Length 584>> stream xTnA-?LhN?%Y0@>s|=ս$tuuw~q&^X9|pUzyzr0ͷ9=LhdzwqLUGbI qӔI:'VXp^VwK 4#TT,ddˈ3*xZ*EUkNdk*8rWIFezZ W+MԸo+)\uAwy뮇5ŶRϳCv^Ҫ#L0s8xU\#aH,rwtƁC!mX+R*C삡-"WdTF@ȒeE suۨ1Bĉ\ a1$i{hI+2bEڋRfv똏OT'7sQSl?Tf+A-.BQ3L 5xRH!(|keC,a_PY];tݜ#^Y+R|*`V 'fECw?A|{xn>\soSkendstream endobj 1 0 obj <</Count 1/Kids [7 0 R]/Type /Pages>> endobj 2 0 obj <</CreationDate ()/Creator (Xara Xtreme)/ModDate ()/Producer (Xara Xtreme \(Xara.com\) PDF export 2.0.0.19)>> endobj 3 0 obj <</CS /DeviceRGB/I true/K false/S /Transparency/Type /Group>> endobj xref 0 8 0000000000 65535 f 0000001662 00000 n 0000001715 00000 n 0000001840 00000 n 0000000016 00000 n 0000000393 00000 n 0000000487 00000 n 0000000669 00000 n trailer <</Size 8>> startxref 127 %%EOF ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/cpdftype.ml������������������������������������������������������������������������������0000664�0001750�0001750�00000031462�14771516640�013307� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(* A typesetter for cpdf. A list of elements is manipulated zero or more times to lay it out, paginate it, and so on. It is then typeset to produce a list of pages. For now, this is just an experiment for -table-of-contents and -typeset. To be continued... *) (* TODO At the moment, structure tree support is limited. Cpdftoc.ml and Cpdftexttopdf do it by post-processing. We need to fix this, which might involve returning more than just a list of pages, but in fact working on the document. *) (* TODO Should be able to take any box to typeset in. This papersize/margins combination is very limiting, for example in Cpdftoc. *) open Pdfutil (* Main type *) type element = Text of char list (* charcodes 0..255 *) | HGlue of float | VGlue of float | NewLine | NewPage | Font of string * Pdftext.font * float | BeginDest of Pdfdest.t * string option | EndDest | BeginDocument | Tag of string * int | EndTag let to_string_elt = function | Text t -> implode t | HGlue len -> "HGLUE" ^ string_of_float len | VGlue _ -> "VGLUE" | NewLine -> "NewLine" | NewPage -> "NewPage" | Font _ -> "Font" | BeginDest _ -> "BeginDest" | EndDest -> "EndDest" | BeginDocument -> "BeginDocument" | Tag (s, i) -> "Tag " ^ s ^ " " ^ string_of_int i | EndTag -> "EndTag" let to_string es = fold_left (fun a b -> a ^ "\n" ^ b) "" (map to_string_elt es) type t = element list type state = {mutable font : Pdftext.font option; mutable fontid : string option; mutable fontsize : float; mutable width_table : float array; (* Widths for charcodes 0..255 *) mutable xpos : float; mutable ypos : float; mutable dest : (Pdfdest.t * string option) option} let width_table_cache = null_hash () let initial_state () = {font = None; fontid = None; fontsize = 0.; width_table = [||]; xpos = 0.; ypos = 0.; dest = None} (* Mark as an artifact anything not already marked. *) let add_artifacts ops = let content = ref false in let artifact = ref false in let rec loop a = function | [] -> (* The end. Must end artifact if in artifact. *) if !artifact then rev (Pdfops.Op_EMC::a) else rev a | Pdfops.Op_BMC "/BeginArtifact"::t -> (* Convert back-channel artifact beginning. *) set artifact; loop (Pdfops.Op_BMC "/Artifact"::a) t | Pdfops.Op_BMC "/EndArtifact"::t -> (* Convert back-channel artifact ending. *) clear artifact; loop (Pdfops.Op_EMC::a) t | Pdfops.Op_BDC _ as h::t -> (* Entering content. If in artifact, must end artifact. *) let a' = if !artifact then h::Pdfops.Op_EMC::a else h::a in set content; clear artifact; loop a' t | Pdfops.Op_EMC as h::t -> (* Exiting content. *) clear content; loop (h::a) t | h::t -> (* A normal operation. If not in content or artifact must start artifact. *) let a' = if not (!content || !artifact) then (set artifact; h::Pdfops.Op_BMC "/Artifact"::a) else h::a in loop a' t in loop [] ops let font_widths id f fontsize = match Hashtbl.find width_table_cache (id, fontsize) with | x -> x | exception Not_found -> let newtable = match f with | Pdftext.StandardFont (sf, encoding) -> Array.init 256 (fun x -> fontsize *. float_of_int (Pdfstandard14.textwidth false encoding sf (string_of_char (char_of_int x))) /. 1000.) | Pdftext.SimpleFont {fontmetrics = Some m} -> Array.map (fun x -> fontsize *. x /. 1000. ) m | _ -> raise (Pdf.PDFError "Cpdftype: Unsupported font") in Hashtbl.add width_table_cache (id, fontsize) newtable; newtable let width_of_string ws s = let w = ref 0. in iter (fun s -> w := !w +. ws.(int_of_char s)) s; !w (* For now, split each text element into words, and lay them out ragged right on one long page. Words longer than a whole line just fall off the margin. Turn text newlines into real newlines. *) (* Split into words on spaces. Find how many words (at least one, to make progress) fit into the available space. We set needs_newline if the next word would overflow. Return (text, needs_newline, remaining_text) *) let split_text space_left widths t = let chars = ref t in let words = ref [] in let space_left = ref space_left in let return needs_newline = (flatten (rev !words), needs_newline, !chars) in try while !chars <> [] do let word, rest = cleavewhile (neq ' ') !chars in let w = width_of_string widths word in if !words = [] || w < !space_left then let is_last_word = rest = [] in let new_word = if is_last_word then word else word @ [' '] in begin words := new_word::!words; space_left := !space_left -. w -. (if is_last_word then 0. else width_of_string widths [' ']) end else raise Exit; chars := if rest = [] then [] else tl rest; done; return false with Exit -> return true let layout lmargin rmargin papersize i = let width = Pdfunits.points (Pdfpaper.width papersize) (Pdfpaper.unit papersize) in let o = ref [] in let s = initial_state () in let xpos_max = width -. lmargin in s.xpos <- lmargin; let rec layout_element = function | Font (id, f, fontsize) -> s.width_table <- font_widths id f fontsize; o := Font (id, f, fontsize) :: !o | Text text -> if text = [] then () else begin let this_line, needs_newline, remaining_text = split_text (xpos_max -. s.xpos) s.width_table text in o := Text this_line :: !o; s.xpos <- s.xpos +. width_of_string s.width_table this_line; if needs_newline then layout_element NewLine; if remaining_text <> [] then layout_element (Text remaining_text) end | HGlue len as glue -> s.xpos <- s.xpos +. len; o := glue :: !o; if s.xpos >= xpos_max then layout_element NewLine | NewLine -> s.xpos <- lmargin; o := NewLine :: !o | x -> o := x :: !o in iter layout_element i; rev !o (* Paginate, simply line-based. When ypos + lineheight exceeds max_ypos, we insert a page break. In addition, we re-write any paragraph tag/endtag to make sure they appear on both pages. *) let paginate tmargin bmargin papersize i = let height = Pdfunits.points (Pdfpaper.height papersize) (Pdfpaper.unit papersize) in let o = ref [] in let s = initial_state () in s.ypos <- tmargin; let max_ypos = height -. bmargin in let tag = ref None in let rec process = function | VGlue len as glue -> s.ypos <- s.ypos +. len; o := glue :: !o; if s.ypos > max_ypos then process NewPage | NewLine -> s.ypos <- s.ypos +. s.fontsize *. 1.3; o := NewLine::!o; if s.ypos > max_ypos then process NewPage | Font (id, f, fs) -> s.font <- Some f; s.fontid <- Some id; s.fontsize <- fs; o := Font (id, f, fs)::!o | NewPage -> s.ypos <- tmargin +. s.fontsize; begin match !tag with Some (s, i) -> o := EndTag::!o | None -> () end; o := NewPage::!o; begin match !tag with Some (s, i) -> o := Tag (s, i)::!o | None -> () end | BeginDocument -> s.ypos <- tmargin +. s.fontsize; o := BeginDocument::!o | Tag (s, i) -> tag := Some (s, i); o := Tag (s, i)::!o | EndTag -> tag := None; o := EndTag::!o | x -> o := x::!o in iter process i; rev !o let make_resources fontobjnums = Pdf.Dictionary [("/Font", Pdf.Dictionary (map (fun fo -> ("/F" ^ string_of_int fo, Pdf.Indirect fo)) (setify fontobjnums)))] let make_annotations pdf annots = if annots = [] then Pdf.Dictionary [] else Pdf.Dictionary ["/Annots", Pdf.Array (map (function a -> Pdf.Indirect (Pdf.addobj pdf a)) annots); "/Tabs", Pdf.Name "/S"] let rec number_tags n = function | Tag (s, _)::t -> Tag (s, n)::number_tags (n + 1) t | h::t -> h::number_tags n t | [] -> [] (* At this stage, just Font and Text and HGlue 0. and VGlue 0. and Newline and NewPage elements. Split on NewPages, typeset each page, add font dictionaries. New page only creates a page when that page has content. *) let typeset ~process_struct_tree lmargin rmargin tmargin bmargin papersize pdf i = Hashtbl.clear width_table_cache; let debug = false in if debug then (print_endline "***input:\n\n"; print_endline (to_string i)); let i = number_tags 0 i in let i = layout lmargin rmargin papersize i in if debug then (print_endline "***after layout:\n\n"; print_endline (to_string i)); let i = paginate tmargin bmargin papersize i in if debug then (print_endline "***after pagination:\n\n"; print_endline (to_string i)); let height = Pdfunits.points (Pdfpaper.height papersize) (Pdfpaper.unit papersize) in let s = initial_state () in s.xpos <- lmargin; s.ypos <- tmargin; let mcidr = ref ~-1 in let mcid () = incr mcidr; !mcidr in let ops = ref [] in let fonts = ref [] in let thispagefontnums = ref [] in let thispageannotations = ref [] in let thisdestrectangles = ref [] in let pages = ref [] in let tags = ref [] in let tagsout = ref [] in let write_page () = let ops = if process_struct_tree then add_artifacts (rev !ops) else rev !ops in let page = {Pdfpage.content = if ops = [] then [] else [Pdfops.stream_of_ops ops]; Pdfpage.mediabox = Pdfpage.rectangle_of_paper papersize; Pdfpage.resources = make_resources !thispagefontnums; Pdfpage.rotate = Pdfpage.Rotate0; Pdfpage.rest = make_annotations pdf !thispageannotations} in pages := page::!pages; tagsout := rev !tags::!tagsout; tags := [] in let rec typeset_element = function | Text cps -> ops := Pdfops.Op_Q ::Pdfops.Op_ET ::Pdfops.Op_Tj (implode cps) ::Pdfops.Op_BT ::Pdfops.Op_cm (Pdftransform.mktranslate s.xpos (height -. s.ypos)) ::Pdfops.Op_q ::!ops; (* If a destination, add the rectangle to the pile of rectangles for this annotation. *) if s.dest <> None then begin let minx, miny = s.xpos, height -. s.ypos in thisdestrectangles := (minx, miny, minx +. width_of_string s.width_table cps, miny +. s.fontsize)::!thisdestrectangles end; s.xpos <- s.xpos +. width_of_string s.width_table cps | Font (id, f, fontsize) -> let name, objnum = match List.assoc_opt id !fonts with | Some objnum -> ("/F" ^ string_of_int objnum, objnum) | None -> let num = Pdftext.write_font pdf f in let n = "/F" ^ string_of_int num in fonts := (id, num) :: !fonts; (n, num) in s.width_table <- font_widths id f fontsize; s.font <- Some f; s.fontid <- Some id; s.fontsize <- fontsize; thispagefontnums := objnum :: !thispagefontnums; ops := Pdfops.Op_Tf (name, fontsize)::!ops | HGlue len -> s.xpos <- s.xpos +. len | VGlue len -> s.ypos <- s.ypos +. len | NewLine -> s.xpos <- lmargin; typeset_element (VGlue (s.fontsize *. 1.3)) | NewPage -> write_page (); thispagefontnums := []; thispageannotations := []; ops := []; mcidr := -1; if s.font <> None && s.fontid <> None then typeset_element (Font (unopt s.fontid, unopt s.font, s.fontsize)); s.xpos <- lmargin; s.ypos <- tmargin +. s.fontsize | BeginDocument -> s.ypos <- tmargin +. s.fontsize | BeginDest (dest, contents) -> s.dest <- Some (dest, contents) | EndDest -> if !thisdestrectangles <> [] && s.dest <> None then let annot (minx, miny, maxx, maxy) = let dest, contents = unopt s.dest in Pdf.Dictionary ((match contents with None -> [] | Some s -> [("/Contents", Pdf.String s)]) @ [("/Type", Pdf.Name "/Annot"); ("/Subtype", Pdf.Name "/Link"); ("/Border", Pdf.Array [Pdf.Real 0.; Pdf.Real 0.; Pdf.Real 0.]); ("/Rect", Pdf.Array [Pdf.Real minx; Pdf.Real miny; Pdf.Real maxx; Pdf.Real maxy]); ("/Dest", Pdfdest.pdfobject_of_destination dest)]) in thispageannotations := map annot !thisdestrectangles @ !thispageannotations; s.dest <- None; thisdestrectangles := [] | Tag (s, i) -> tags := (s, i)::!tags; ops := Pdfops.Op_BDC ("/" ^ s, Pdf.Dictionary [("/MCID", Pdf.Integer (mcid ()))])::!ops | EndTag -> ops := Pdfops.Op_EMC::!ops in iter typeset_element i; write_page (); (rev !pages, rev !tagsout) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/cpdferror.ml�����������������������������������������������������������������������������0000664�0001750�0001750�00000000234�14771516640�013450� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(** Two exceptions recommended for use with the library. *) exception SoftError of string exception HardError of string let error s = raise (SoftError s) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/cpdfimage.ml�����������������������������������������������������������������������������0000664�0001750�0001750�00000157105�14771516640�013413� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������open Pdfutil open Pdfio open Cpdferror let debug_image_processing = ref false let complain_jbig2enc path = if path = "" then error "Specify jbig2enc location with -jbig2enc" let complain_convert path = if path = "" then error "Specify magick location with -im" let remove x = try (*Printf.printf "%s\n" x;*) Sys.remove x with _ -> () let pnm_white ch = output_char ch ' ' let pnm_newline ch = output_char ch '\n' let pnm_output_string = Stdlib.output_string let pnm_header ch w h = pnm_white ch; pnm_output_string ch (string_of_int w); pnm_white ch; pnm_output_string ch (string_of_int h); pnm_white ch let pnm_to_channel_24 ch w h s = pnm_output_string ch "P6"; pnm_header ch w h; pnm_output_string ch "255"; pnm_newline ch; bytes_to_output_channel ch s let pnm_to_channel_8 ch w h s = pnm_output_string ch "P5"; pnm_header ch w h; pnm_output_string ch "255"; pnm_newline ch; bytes_to_output_channel ch s let pnm_to_channel_1_inverted ch w h s = pnm_output_string ch "P4"; pnm_header ch w h; pnm_newline ch; let inverted = Pdfio.copybytes s in Pdfio.bytes_selfmap lnot inverted; bytes_to_output_channel ch inverted let cmyk_to_channel_32 ch w h s = let inverted = Pdfio.copybytes s in Pdfio.bytes_selfmap (fun x -> 255 - x) inverted; bytes_to_output_channel ch inverted let jbig2_serial = ref 0 let jbig2_globals = null_hash () let write_stream name stream = let fh = open_out_bin name in Pdfio.bytes_to_output_channel fh stream; close_out fh let write_image ~raw ?path_to_p2p ?path_to_im pdf resources name image = match Pdfimage.get_image_24bpp pdf resources image with | Pdfimage.JPEG (stream, _) -> write_stream (name ^ ".jpg") stream | Pdfimage.JPEG2000 (stream, _) -> write_stream (name ^ ".jpx") stream | Pdfimage.JBIG2 (stream, _, global) -> begin match global with | None -> (*Printf.printf "JBIG2: No global, writing plain\n";*) write_stream (name ^ ".jbig2") stream | Some g -> (*Printf.printf "JBIG2: there is a global\n";*) let go () = let serial, _ = Hashtbl.find jbig2_globals g in write_stream (name ^ ".jbig2__" ^ string_of_int serial) stream in try go () with Not_found -> jbig2_serial += 1; let globaldata = let obj = Pdf.lookup_obj pdf g in Pdfcodec.decode_pdfstream_until_unknown pdf obj; match obj with | Pdf.Stream {contents = (_, Got b)} -> Some b | _ -> None in match globaldata with | Some d -> Hashtbl.add jbig2_globals g (!jbig2_serial, d); let filename = Filename.concat (Filename.dirname name) (string_of_int !jbig2_serial ^ ".jbig2global") in write_stream filename d; go () | None -> Pdfe.log "Could not extract JBIG2Globals. Skipping this image." end | Pdfimage.Raw (w, h, Pdfimage.BPP24, stream) -> let pnm = name ^ ".pnm" in let png = name ^ ".png" in let fh = open_out_bin pnm in pnm_to_channel_24 fh w h stream; close_out fh; begin match path_to_p2p with | None -> begin match path_to_im with None -> if not raw then Pdfe.log "Neither pnm2png nor imagemagick found. Specify with -p2p or -im\n" | Some path_to_im -> begin match Sys.command (Filename.quote_command path_to_im [pnm; png]) with 0 -> remove pnm | _ -> Pdfe.log "Call to imagemagick failed: did you specify -p2p or -im correctly?\n"; remove pnm end end | Some path_to_p2p -> begin match Sys.command (Filename.quote_command path_to_p2p ~stdout:png ["-gamma"; "0.45"; "-quiet"; pnm]) with | 0 -> remove pnm | _ -> Pdfe.log "Call to pnmtopng failed: did you specify -p2p correctly?\n"; remove pnm end end | _ -> Pdfe.log (Printf.sprintf "Unsupported image type when extracting image %s " name) let written = ref [] let extract_images_inner ~raw ?path_to_p2p ?path_to_im encoding serial pdf resources stem pnum images = let names = map (fun image -> (* Abuse @S *) let stem = string_replace_all "%objnum" "@S" stem in Cpdfbookmarks.name_of_spec encoding [] pdf 0 (stem ^ "-p" ^ string_of_int pnum) (let r = !serial in serial := !serial + 1; r) "" (match image with Pdf.Indirect i -> i | _ -> 0) 0) images in iter2 (write_image ~raw ?path_to_p2p ?path_to_im pdf resources) names images let rec extract_images_form_xobject ~raw ?path_to_p2p ?path_to_im encoding dedup dedup_per_page pdf serial stem pnum form = let resources = match Pdf.lookup_direct pdf "/Resources" form with Some (Pdf.Dictionary d) -> Pdf.Dictionary d | _ -> Pdf.Dictionary [] in let images, forms = let xobjects = match Pdf.lookup_direct pdf "/XObject" resources with | Some (Pdf.Dictionary elts) -> map snd elts | _ -> [] in (* Remove any already in !written. Add any remaining to !written, if !args.dedup or !args.dedup_page *) let images, forms = List.partition (fun o -> Pdf.lookup_direct pdf "/Subtype" o = Some (Pdf.Name "/Image")) xobjects in let already_written, images = List.partition (function Pdf.Indirect n -> mem n !written | _ -> false) images in if dedup || dedup_per_page then written := (option_map (function Pdf.Indirect n -> Some n | _ -> None) images) @ !written; images, forms in iter (extract_images_form_xobject ~raw ?path_to_p2p ?path_to_im encoding dedup dedup_per_page pdf serial stem pnum) forms; extract_images_inner ~raw ?path_to_p2p ?path_to_im encoding serial pdf resources stem pnum images let extract_images ?(raw=false) ?path_to_p2p ?path_to_im encoding dedup dedup_per_page pdf range stem = Hashtbl.clear jbig2_globals; jbig2_serial := 0; if dedup || dedup_per_page then written := []; let pdf_pages = Pdfpage.pages_of_pagetree pdf in let pages = option_map (function (i, pdf_pages) -> if mem i range then Some pdf_pages else None) (combine (indx pdf_pages) pdf_pages) in let serial = ref 0 in iter2 (fun page pnum -> if dedup_per_page then written := []; let xobjects = match Pdf.lookup_direct pdf "/XObject" page.Pdfpage.resources with | Some (Pdf.Dictionary elts) -> map snd elts | _ -> [] in let images = keep (fun o -> Pdf.lookup_direct pdf "/Subtype" o = Some (Pdf.Name "/Image")) xobjects in let already_written, images = List.partition (function Pdf.Indirect n -> mem n !written | _ -> false) images in if dedup || dedup_per_page then written := (option_map (function Pdf.Indirect n -> Some n | _ -> None) images) @ !written; let forms = keep (fun o -> Pdf.lookup_direct pdf "/Subtype" o = Some (Pdf.Name "/Form")) xobjects in extract_images_inner ~raw ?path_to_p2p ?path_to_im encoding serial pdf page.Pdfpage.resources stem pnum images; iter (extract_images_form_xobject ~raw ?path_to_p2p ?path_to_im encoding dedup dedup_per_page pdf serial stem pnum) forms) pages (indx pages) (* Image resolution *) type xobj = | Image of int * int (* width, height *) | Form of Pdftransform.transform_matrix * Pdf.pdfobject * Pdf.pdfobject (* Will add actual data later. *) let image_results = ref [] let rec image_resolution_page pdf page pagenum images = try let pageops = Pdfops.parse_operators pdf page.Pdfpage.resources page.Pdfpage.content and transform = ref [ref Pdftransform.i_matrix] in iter (function | Pdfops.Op_cm matrix -> begin match !transform with | [] -> raise (Failure "no transform") | _ -> (hd !transform) := Pdftransform.matrix_compose !(hd !transform) matrix end | Pdfops.Op_Do xobject -> let trans (x, y) = match !transform with | [] -> raise (Failure "no transform") | _ -> Pdftransform.transform_matrix !(hd !transform) (x, y) in let o = trans (0., 0.) and x = trans (1., 0.) and y = trans (0., 1.) in (*i Printf.printf "o = %f, %f, x = %f, %f, y = %f, %f\n" (fst o) (snd o) (fst x) (snd x) (fst y) (snd y); i*) let rec lookup_image k = function | [] -> assert false | (_, a, _, _) as h::_ when a = k -> h | _::t -> lookup_image k t in begin match lookup_image xobject images with | (pagenum, name, Form (xobj_matrix, content, resources), objnum) -> let content = (* Add in matrix etc. *) let total_matrix = Pdftransform.matrix_compose xobj_matrix !(hd !transform) in let ops = Pdfops.Op_cm total_matrix:: Pdfops.parse_operators pdf resources [content] in Pdfops.stream_of_ops ops in let page = {Pdfpage.content = [content]; Pdfpage.mediabox = Pdfpage.rectangle_of_paper Pdfpaper.a4; Pdfpage.resources = resources; Pdfpage.rotate = Pdfpage.Rotate0; Pdfpage.rest = Pdf.Dictionary []} in let newpdf = Pdfpage.change_pages false pdf [page] in image_resolution newpdf [1] pagenum | (pagenum, name, Image (w, h), objnum) -> let lx = Pdfunits.inches (distance_between o x) Pdfunits.PdfPoint in let ly = Pdfunits.inches (distance_between o y) Pdfunits.PdfPoint in let wdpi = float w /. lx and hdpi = float h /. ly in image_results := (pagenum, xobject, w, h, wdpi, hdpi, objnum)::!image_results; (*Printf.printf "%i, %s, %i, %i, %f, %f\n" pagenum xobject w h wdpi hdpi;*) end | Pdfops.Op_q -> begin match !transform with | [] -> raise (Failure "Unbalanced q/Q ops") | h::t -> let h' = ref Pdftransform.i_matrix in h' := !h; transform := h'::h::t end | Pdfops.Op_Q -> begin match !transform with | [] -> raise (Failure "Unbalanced q/Q ops") | _ -> transform := tl !transform end | _ -> ()) pageops with e -> Printf.printf "Error %s\n" (Printexc.to_string e); flprint "\n" and image_resolution pdf range real_pagenum = let images = ref [] in Cpdfpage.iter_pages (fun pagenum page -> let pagenum = if real_pagenum > 0 then real_pagenum else pagenum in (* 1. Get all image names and their native resolutions from resources as string * int * int *) match Pdf.lookup_direct pdf "/XObject" page.Pdfpage.resources with | Some (Pdf.Dictionary xobjects) -> iter (function (name, xobject) -> let objnum = match xobject with Pdf.Indirect i -> i | _ -> 0 in match Pdf.lookup_direct pdf "/Subtype" xobject with | Some (Pdf.Name "/Image") -> let width = match Pdf.lookup_direct pdf "/Width" xobject with | Some x -> Pdf.getnum pdf x | None -> 1. and height = match Pdf.lookup_direct pdf "/Height" xobject with | Some x -> Pdf.getnum pdf x | None -> 1. in images := (pagenum, name, Image (int_of_float width, int_of_float height), objnum)::!images | Some (Pdf.Name "/Form") -> let resources = match Pdf.lookup_direct pdf "/Resources" xobject with | None -> page.Pdfpage.resources (* Inherit from page or form above. *) | Some r -> r and contents = xobject and matrix = match Pdf.lookup_direct pdf "/Matrix" xobject with | Some (Pdf.Array [a; b; c; d; e; f]) -> {Pdftransform.a = Pdf.getnum pdf a; Pdftransform.b = Pdf.getnum pdf b; Pdftransform.c = Pdf.getnum pdf c; Pdftransform.d = Pdf.getnum pdf d; Pdftransform.e = Pdf.getnum pdf e; Pdftransform.f = Pdf.getnum pdf f} | _ -> Pdftransform.i_matrix in images := (pagenum, name, Form (matrix, contents, resources), objnum)::!images | _ -> () ) xobjects | _ -> ()) pdf (if real_pagenum = 0 then range else [1]); (* Now, split into differing pages, and call [image_resolution_page] on each one *) let pagesplits = map (function (a, _, _, _)::_ as ls -> (a, ls) | _ -> assert false) (collate (fun (a, _, _, _) (b, _, _, _) -> compare a b) (rev !images)) and pages = Pdfpage.pages_of_pagetree pdf in iter (function (pagenum, images) -> let pagenum = if real_pagenum > 0 then 1 else pagenum in let page = select pagenum pages in image_resolution_page pdf page pagenum images) pagesplits let is_below_dpi dpi (_, _, _, _, wdpi, hdpi, _) = wdpi < dpi || hdpi < dpi let image_resolution pdf range dpi = image_results := []; image_resolution pdf range 0; sort compare (rev (keep (is_below_dpi dpi) !image_results)) let image_resolution_json pdf range dpi = let images = image_resolution pdf range dpi in Pdfio.bytes_of_string (Cpdfyojson.Safe.pretty_to_string (`List (map (fun (pagenum, xobject, w, h, wdpi, hdpi, objnum) -> `Assoc [("Object", `Int objnum); ("Page", `Int pagenum); ("XObject", `String xobject); ("W", `Int w); ("H", `Int h); ("Xdpi", `Float wdpi); ("Ydpi", `Float hdpi)]) images))) (* All the images in file referenced at least once from the given range of pages. *) let images pdf range = let images = null_hash () in let formnums = null_hash () in let rec process_xobject resources pagenum page (name, xobject) = match Pdf.lookup_direct pdf "/Subtype" xobject with | Some (Pdf.Name "/Image") -> begin match xobject with | Pdf.Indirect i -> begin match Hashtbl.find images i with | (pagenums, n, w, h, s, bpc, cs, f) -> Hashtbl.replace images i (pagenum::pagenums, n, w, h, s, bpc, cs, f) | exception Not_found -> let width = match Pdf.lookup_direct pdf "/Width" xobject with | Some x -> Pdf.getnum pdf x | None -> 1. and height = match Pdf.lookup_direct pdf "/Height" xobject with | Some x -> Pdf.getnum pdf x | None -> 1. and size = match Pdf.lookup_direct pdf "/Length" xobject with | Some (Pdf.Integer x) -> x | _ -> 0 and bpc = match Pdf.lookup_direct pdf "/BitsPerComponent" xobject with | Some (Pdf.Integer x) -> Some x | _ -> None and colourspace = match Pdf.lookup_direct pdf "/ColorSpace" xobject with | Some x -> Some (Pdfspace.string_of_colourspace (Pdfspace.read_colourspace pdf resources x)) | None -> None and filter = match Pdf.lookup_direct pdf "/Filter" xobject with | Some (Pdf.Array [x]) | Some x -> Some (Pdfwrite.string_of_pdf x) | None -> None in Hashtbl.replace images i ([pagenum], name, int_of_float width, int_of_float height, size, bpc, colourspace, filter) end | _ -> () end | Some (Pdf.Name "/Form") -> begin match xobject with | Pdf.Indirect i -> begin match Hashtbl.find formnums i with | () -> () | exception Not_found -> Hashtbl.add formnums i (); begin match Pdf.lookup_direct pdf "/Resources" xobject with | Some r -> begin match Pdf.lookup_direct pdf "/XObject" r with | Some (Pdf.Dictionary xobjects) -> iter (process_xobject r pagenum page) xobjects | _ -> () end | None -> () end end | _ -> () end | _ -> () in Cpdfpage.iter_pages (fun pagenum page -> match Pdf.lookup_direct pdf "/XObject" page.Pdfpage.resources with | Some (Pdf.Dictionary xobjects) -> iter (process_xobject page.Pdfpage.resources pagenum page) xobjects | _ -> ()) pdf range; let images = list_of_hashtbl images in let images = map (fun (i, (pnums, n, w, h, s, bpc, c, filter)) -> (i, (setify (sort compare pnums), n, w, h, s, bpc, c, filter))) images in let images = sort (fun (_, (pnums, _, _, _, _, _, _, _)) (_, (pnums', _, _, _, _, _, _, _)) -> compare (hd pnums) (hd pnums')) images in `List (map (fun (i, (pnums, n, w, h, size, bpc, cs, filter)) -> `Assoc [("Object", `Int i); ("Pages", `List (map (fun x -> `Int x) pnums)); ("Name", `String n); ("Width", `Int w); ("Height", `Int h); ("Bytes", `Int size); ("BitsPerComponent", match bpc with None -> `Null | Some bpc -> `Int bpc); ("Colourspace", match cs with None -> `Null | Some s -> `String s); ("Filter", match filter with None -> `Null | Some s -> `String s)]) images) let obj_of_jpeg_data data = let w, h = Cpdfjpeg.jpeg_dimensions data in let d = ["/Length", Pdf.Integer (Pdfio.bytes_size data); "/Filter", Pdf.Name "/DCTDecode"; "/BitsPerComponent", Pdf.Integer 8; "/ColorSpace", Pdf.Name "/DeviceRGB"; "/Subtype", Pdf.Name "/Image"; "/Width", Pdf.Integer w; "/Height", Pdf.Integer h] in Pdf.Stream {contents = (Pdf.Dictionary d, Pdf.Got data)}, [] let obj_of_png_data data = let png = Cpdfpng.read_png (Pdfio.input_of_bytes data) in let d = ["/Length", Pdf.Integer (Pdfio.bytes_size png.idat); "/Filter", Pdf.Name "/FlateDecode"; "/Subtype", Pdf.Name "/Image"; "/BitsPerComponent", Pdf.Integer png.bitdepth; "/ColorSpace", Pdf.Name (match png.colortype with 0 -> "/DeviceGray" | 2 -> "/DeviceRGB" | _ -> error "obj_of_png_data 1"); "/DecodeParms", Pdf.Dictionary ["/BitsPerComponent", Pdf.Integer png.bitdepth; "/Colors", Pdf.Integer (match png.colortype with 0 -> 1 | 2 -> 3 | _ -> error "obj_of_png_data 2"); "/Columns", Pdf.Integer png.width; "/Predictor", Pdf.Integer 15]; "/Width", Pdf.Integer png.width; "/Height", Pdf.Integer png.height] in Pdf.Stream {contents = (Pdf.Dictionary d, Pdf.Got png.idat)}, [] let obj_of_jpeg2000_data data = let w, h = Cpdfjpeg2000.jpeg2000_dimensions data in let d = ["/Length", Pdf.Integer (Pdfio.bytes_size data); "/Filter", Pdf.Name "/JPXDecode"; "/Subtype", Pdf.Name "/Image"; "/Width", Pdf.Integer w; "/Height", Pdf.Integer h] in Pdf.Stream {contents = (Pdf.Dictionary d, Pdf.Got data)}, [] let jbig2_dimensions data = (bget data 11 * 256 * 256 * 256 + bget data 12 * 256 * 256 + bget data 13 * 256 + bget data 14, bget data 15 * 256 * 256 * 256 + bget data 16 * 256 * 256 + bget data 17 * 256 + bget data 18) let obj_of_jbig2_data ?global data = let d, extra = let decodeparms, extra = match global with | Some data -> [("/DecodeParms", Pdf.Dictionary [("/JBIG2Globals", Pdf.Indirect 10000)])], [(10000, Pdf.Stream {contents = (Pdf.Dictionary [("/Length", Pdf.Integer (bytes_size data))], Pdf.Got data)})] | None -> [], [] in let w, h = jbig2_dimensions data in [("/Length", Pdf.Integer (Pdfio.bytes_size data)); ("/Filter", Pdf.Name "/JBIG2Decode"); ("/Subtype", Pdf.Name "/Image"); ("/BitsPerComponent", Pdf.Integer 1); ("/ColorSpace", Pdf.Name "/DeviceGray"); ("/Width", Pdf.Integer w); ("/Height", Pdf.Integer h)] @ decodeparms, extra in Pdf.Stream {contents = (Pdf.Dictionary d, Pdf.Got data)}, extra let image_of_input ?subformat ?title ~process_struct_tree fobj i = let pdf, title = match subformat with | None -> Pdf.empty (), begin match title with Some x -> x | None -> "" end | Some Cpdfua.PDFUA1 -> begin match title with | None -> error "no -title given" | Some title -> Cpdfua.create_pdfua1 title Pdfpaper.a4 1, title end | Some Cpdfua.PDFUA2 -> begin match title with | None -> error "no -title given" | Some title -> Cpdfua.create_pdfua2 title Pdfpaper.a4 1, title end in let data = Pdfio.bytes_of_input i 0 i.Pdfio.in_channel_length in let obj, extras = fobj () data in iter (Pdf.addobj_given_num pdf) extras; let w = match Pdf.lookup_direct pdf "/Width" obj with Some x -> Pdf.getnum pdf x | _ -> assert false in let h = match Pdf.lookup_direct pdf "/Height" obj with Some x -> Pdf.getnum pdf x | _ -> assert false in let structinfo = match process_struct_tree, subformat with | _, (Some Cpdfua.PDFUA1 | Some Cpdfua.PDFUA2) | true, _ -> true | _ -> false in if subformat = Some Cpdfua.PDFUA2 then begin let str = Pdf.addobj pdf Pdf.Null in let figure = Pdf.addobj pdf Pdf.Null in let parent_tree = Pdf.addobj pdf Pdf.Null in let namespace = Pdf.addobj pdf (Pdf.Dictionary [("/NS", Pdf.String "http://iso.org/pdf2/ssn")]) in let document = Pdf.addobj pdf Pdf.Null in Pdf.addobj_given_num pdf (document, Pdf.Dictionary [("/K", Pdf.Array [Pdf.Indirect figure]); ("/P", Pdf.Indirect str); ("/S", Pdf.Name "/Document"); ("/NS", Pdf.Indirect namespace)]); Pdf.addobj_given_num pdf (parent_tree, Pdf.Dictionary [("/Nums", Pdf.Array [Pdf.Integer 1; Pdf.Array [Pdf.Indirect figure]])]); Pdf.addobj_given_num pdf (figure, Pdf.Dictionary [("/K", Pdf.Array [Pdf.Integer 0]); ("/P", Pdf.Indirect document); ("/S", Pdf.Name "/Figure"); ("/Alt", Pdf.String title)]); Pdf.addobj_given_num pdf (str, Pdf.Dictionary [("/Namespaces", Pdf.Array [Pdf.Indirect namespace]); ("/Type", Pdf.Name "/StructTreeRoot"); ("/K", Pdf.Array [Pdf.Indirect document]); ("/ParentTree", Pdf.Indirect parent_tree)]); Pdf.replace_chain pdf ["/Root"; "/StructTreeRoot"] (Pdf.Indirect str) end else if process_struct_tree || subformat = Some Cpdfua.PDFUA1 then begin let str = Pdf.addobj pdf Pdf.Null in let figure = Pdf.addobj pdf Pdf.Null in let parent_tree = Pdf.addobj pdf Pdf.Null in Pdf.addobj_given_num pdf (parent_tree, Pdf.Dictionary [("/Nums", Pdf.Array [Pdf.Integer 1; Pdf.Array [Pdf.Indirect figure]])]); Pdf.addobj_given_num pdf (figure, Pdf.Dictionary [("/K", Pdf.Array [Pdf.Integer 0]); ("/P", Pdf.Indirect str); ("/S", Pdf.Name "/Figure"); ("/Alt", Pdf.String title)]); Pdf.addobj_given_num pdf (str, Pdf.Dictionary [("/Type", Pdf.Name "/StructTreeRoot"); ("/K", Pdf.Array [Pdf.Indirect figure]); ("/ParentTree", Pdf.Indirect parent_tree)]); Pdf.replace_chain pdf ["/Root"; "/StructTreeRoot"] (Pdf.Indirect str) end; let ops = (if structinfo then [Pdfops.Op_BDC ("/Figure", Pdf.Dictionary [("/MCID", Pdf.Integer 0)])] else []) @ [Pdfops.Op_cm (Pdftransform.matrix_of_transform [Pdftransform.Translate (0., 0.); Pdftransform.Scale ((0., 0.), w, h)]); Pdfops.Op_Do "/I0"] @ (if structinfo then [Pdfops.Op_EMC] else []) in let page = {Pdfpage.content = [Pdfops.stream_of_ops ops]; Pdfpage.mediabox = Pdf.Array [Pdf.Real 0.; Pdf.Real 0.; Pdf.Real w; Pdf.Real h]; Pdfpage.resources = Pdf.Dictionary ["/XObject", Pdf.Dictionary ["/I0", Pdf.Indirect (Pdf.addobj pdf obj)]]; Pdfpage.rotate = Pdfpage.Rotate0; Pdfpage.rest = if structinfo then Pdf.Dictionary [("/StructParents", Pdf.Integer 1)] else Pdf.Dictionary []} in let pdf, pageroot = Pdfpage.add_pagetree [page] pdf in Pdfpage.add_root pageroot [] pdf let backup_jpeg_dimensions ~path_to_convert filename = let tmp = Filename.temp_file "cpdf" "info" in let command = Filename.quote_command path_to_convert ["-format"; "%[width] %[height]"; filename; "info:"] ^ " >" ^ tmp in let out = Sys.command command in if out > 0 then (Pdfe.log "unable to find JPEG dimensions"; (0, 0)) else let w, h = let w, rest = cleavewhile (neq ' ') (explode (contents_of_file tmp)) in let h = tl rest in int_of_string (implode w), int_of_string (implode h) in remove tmp; (w, h) let jpeg_to_jpeg pdf ~pixel_threshold ~length_threshold ~percentage_threshold ~jpeg_to_jpeg_scale ~interpolate ~q ~path_to_convert s dict reference = if q < 0. || q > 100. then error "Out of range quality"; complain_convert path_to_convert; let w = match Pdf.lookup_direct pdf "/Width" dict with Some (Pdf.Integer i) -> i | _ -> error "bad width" in let h = match Pdf.lookup_direct pdf "/Height" dict with Some (Pdf.Integer i) -> i | _ -> error "bad height" in if w * h < pixel_threshold then (if !debug_image_processing then Printf.printf "pixel threshold not met\n%!") else Pdf.getstream s; let size = match Pdf.lookup_direct pdf "/Length" dict with Some (Pdf.Integer i) -> i | _ -> 0 in if size < length_threshold then (if !debug_image_processing then Printf.printf "length threshold not met\n%!") else let out = Filename.temp_file "cpdf" "convertin.jpg" in let out2 = Filename.temp_file "cpdf" "convertout.jpg" in let fh = open_out_bin out in begin match s with Pdf.Stream {contents = _, Pdf.Got d} -> Pdfio.bytes_to_output_channel fh d | _ -> () end; close_out fh; let retcode = let scaling = if jpeg_to_jpeg_scale <> 100. then [(if interpolate then "-sample" else "-resize"); string_of_float jpeg_to_jpeg_scale ^ "%"] else [] in let command = Filename.quote_command path_to_convert ([out] @ scaling @ ["-quality"; string_of_float q ^ "%"; out2]) in (*Printf.printf "%S\n" command;*) Sys.command command in if retcode = 0 then begin try let result = open_in_bin out2 in let newsize = in_channel_length result in let perc_ok = float newsize /. float size < percentage_threshold /. 100. in if newsize < size && perc_ok then begin let data = Pdfio.bytes_of_input_channel result in let w, h = try Cpdfjpeg.jpeg_dimensions data with e -> try close_in result; backup_jpeg_dimensions ~path_to_convert out2 with e -> (-1, -1) in if (w, h) = (-1, -1) then Printf.printf "Could not determine JPEG dimensions. Skipping.\n%!" else begin if !debug_image_processing then Printf.printf "JPEG to JPEG %i -> %i (%i%%)\n%!" size newsize (int_of_float (float newsize /. float size *. 100.)); reference := Pdf.add_dict_entry (Pdf.add_dict_entry (Pdf.add_dict_entry dict "/Length" (Pdf.Integer newsize)) "/Width" (Pdf.Integer w)) "/Height" (Pdf.Integer h), Pdf.Got data end end else begin if !debug_image_processing then Printf.printf "no size reduction\n%!" end; close_in result with e -> if !debug_image_processing then Printf.printf "Error %S\n%!" (Printexc.to_string e); remove out; remove out2 end else if !debug_image_processing then Printf.printf "external process failed\n%!"; remove out; remove out2 let suitable_num pdf dict = match Pdf.lookup_direct pdf "/ColorSpace" dict with | Some (Pdf.Name ("/DeviceRGB" | "/CalRGB")) -> 3 | Some (Pdf.Name ("/DeviceGray" | "/CalGray")) -> 1 | Some (Pdf.Name "/DeviceCMYK") -> 4 | Some (Pdf.Array [Pdf.Name "/Lab"; _]) -> 3 | Some (Pdf.Array [Pdf.Name "/ICCBased"; stream]) -> begin match Pdf.lookup_direct pdf "/N" stream with | Some (Pdf.Integer 3) -> 3 | Some (Pdf.Integer 1) -> 1 | Some (Pdf.Integer 4) -> 4 | _ -> 0 end | Some (Pdf.Array (Pdf.Name ("/Separation")::_)) -> ~-1 | Some (Pdf.Array (Pdf.Name ("/Indexed")::_)) -> ~-2 | _ -> 0 let lossless_out pdf ~pixel_threshold ~length_threshold extension s dict reference = let old = !reference in let restore () = reference := old in let bpc = Pdf.lookup_direct pdf "/BitsPerComponent" dict in let components = suitable_num pdf dict in match components, bpc with | (1 | 3 | 4 | -1 | -2), Some (Pdf.Integer 8) -> let w = match Pdf.lookup_direct pdf "/Width" dict with Some (Pdf.Integer i) -> i | _ -> error "bad width" in let h = match Pdf.lookup_direct pdf "/Height" dict with Some (Pdf.Integer i) -> i | _ -> error "bad height" in if w * h < pixel_threshold then (if !debug_image_processing then Printf.printf "pixel threshold not met\n%!"; None) else let size = match Pdf.lookup_direct pdf "/Length" dict with Some (Pdf.Integer i) -> i | _ -> 0 in if size < length_threshold then (if !debug_image_processing then Printf.printf "length threshold not met\n%!"; None) else begin Pdfcodec.decode_pdfstream_until_unknown pdf s; match Pdf.lookup_direct pdf "/Filter" (fst !reference) with Some x -> restore (); if !debug_image_processing then Printf.printf "%S Unable to decompress\n%!" (Pdfwrite.string_of_pdf x); None | None -> let out = Filename.temp_file "cpdf" ("convertin" ^ (if suitable_num pdf dict < 4 then ".pnm" else ".cmyk")) in let out2 = Filename.temp_file "cpdf" ("convertout" ^ extension) in let fh = open_out_bin out in let data = match s with Pdf.Stream {contents = _, Pdf.Got d} -> d | _ -> assert false in (if components = 3 then pnm_to_channel_24 else if components = 4 then cmyk_to_channel_32 else pnm_to_channel_8) fh w h data; close_out fh; Some (out, out2, size, components, w, h) end | colspace, bpc -> (*let colspace = Pdf.lookup_direct pdf "/ColorSpace" dict in let colspace, bpc, filter = (match colspace with None -> "none" | Some x -> Pdfwrite.string_of_pdf x), (match bpc with None -> "none" | Some x -> Pdfwrite.string_of_pdf x), (match Pdf.lookup_direct pdf "/Filter" dict with None -> "none" | Some x -> Pdfwrite.string_of_pdf x) in print_string (Pdfwrite.string_of_pdf dict); print_string (Printf.sprintf "%s (%s) [%s]\n" colspace bpc filter);*) if !debug_image_processing then Printf.printf "colourspace not suitable\n%!"; restore (); None (* an image we cannot or do not handle *) let lossless_to_jpeg pdf ~pixel_threshold ~length_threshold ~percentage_threshold ~qlossless ~path_to_convert s dict reference = complain_convert path_to_convert; match lossless_out pdf ~pixel_threshold ~length_threshold ".jpg" s dict reference with | None -> () | Some (_, _, _, -2, _, _) -> if !debug_image_processing then Printf.printf "skipping indexed colorspace\n%!" | Some (out, out2, size, components, w, h) -> let retcode = let command = (Filename.quote_command path_to_convert ((if components = 4 then ["-depth"; "8"; "-size"; string_of_int w ^ "x" ^ string_of_int h] else []) @ [out; "-quality"; string_of_float qlossless ^ "%"] @ (if components = 1 then ["-colorspace"; "Gray"] else if components = 4 then ["-colorspace"; "CMYK"] else ["-type"; "truecolor"]) @ [out2])) in (*Printf.printf "%S\n" command;*) Sys.command command in if retcode = 0 then begin try let result = open_in_bin out2 in let newsize = in_channel_length result in let perc_ok = float newsize /. float size < percentage_threshold /. 100. in if newsize < size && perc_ok then begin if !debug_image_processing then Printf.printf "lossless to JPEG %i -> %i (%i%%)\n%!" size newsize (int_of_float (float newsize /. float size *. 100.)); reference := (Pdf.add_dict_entry (Pdf.add_dict_entry dict "/Length" (Pdf.Integer newsize)) "/Filter" (Pdf.Name "/DCTDecode")), Pdf.Got (Pdfio.bytes_of_input_channel result) end else begin if !debug_image_processing then Printf.printf "no size reduction\n%!" end; close_in result with e -> if !debug_image_processing then Printf.printf "Failed with %S\n%!" (Printexc.to_string e); remove out; remove out2 end else if !debug_image_processing then Printf.printf "Return code not zero\n%!"; remove out; remove out2 let test_components pdf dict = match suitable_num pdf dict with -1 | -2 -> 1 | x -> x let test_bpc pdf dict = match Pdf.lookup_direct pdf "/BitsPerComponent" dict with | Some (Pdf.Integer i) -> i | _ -> 0 let lossless_resample pdf ~pixel_threshold ~length_threshold ~factor ~interpolate ~path_to_convert s dict reference = complain_convert path_to_convert; let in_components = test_components pdf dict in let in_bpc = test_bpc pdf dict in (*Printf.printf "***lossless_resample IN dictionary: %S\n" (Pdfwrite.string_of_pdf dict); *) (*Printf.printf "\n***IN components = %i, bpc = %i\n" in_components in_bpc;*) match lossless_out pdf ~pixel_threshold ~length_threshold ".png" s dict reference with | None -> () | Some (_, _, _, 4, _, _) -> if !debug_image_processing then Printf.printf "lossless resampling for CMYK not supported yet\n%!" | Some (out, out2, size, components, w, h) -> let retcode = let command = Filename.quote_command path_to_convert ([out] @ (if components = 4 then ["-depth"; "8"; "-size"; string_of_int w ^ "x" ^ string_of_int h] else []) @ (if components = 1 then ["-define"; "png:color-type=0"; "-colorspace"; "Gray"] else if components = 3 then ["-define"; "-png:color-type=2"; "-colorspace"; "RGB"] else if components = 4 then ["-colorspace"; "CMYK"] else []) @ [if interpolate && components > -2 then "-resize" else "-sample"; string_of_float factor ^ "%"; out2]) in (*Printf.printf "%S\n" command;*) Sys.command command in try if retcode = 0 then begin let result = open_in_bin out2 in let newsize = in_channel_length result in if newsize < size then begin reference := (match fst (obj_of_png_data (Pdfio.bytes_of_input_channel result)) with | Pdf.Stream {contents = Pdf.Dictionary d, data} as s -> let out_components = test_components pdf s in let out_bpc = test_bpc pdf s in (*Printf.printf "***OUT components = %i, bpc = %i\n" out_components out_bpc;*) let rgb_to_grey_special = let was_rgb = match Pdf.lookup_direct pdf "/ColorSpace" dict with | Some (Pdf.Name ("/DeviceRGB" | "/CalRGB")) -> true | _ -> false in in_bpc = out_bpc && in_components = 3 && out_components = 1 && was_rgb in (*Printf.printf "***rgb_to_grey_special = %b\n" rgb_to_grey_special;*) if (out_components <> in_components || in_bpc <> out_bpc) && not rgb_to_grey_special then begin if !debug_image_processing then Printf.printf "wrong bpc / components returned. Skipping.\n%!"; !reference end else begin if !debug_image_processing then Printf.printf "lossless resample %i -> %i (%i%%)\n%!" size newsize (int_of_float (float newsize /. float size *. 100.)); let d' = fold_right (fun (k, v) d -> if k <> "/ColorSpace" || rgb_to_grey_special then add k v d else d) d (match dict with Pdf.Dictionary x -> x | _ -> []) in (*Printf.printf "***lossless_resample OUT dictionary: %S\n" (Pdfwrite.string_of_pdf (Pdf.Dictionary d')); *) (Pdf.Dictionary d', data) end | _ -> assert false) end else begin if !debug_image_processing then Printf.printf "no size reduction\n%!" end; close_in result end; remove out; remove out2 with e -> if !debug_image_processing then Printf.printf "Unable: %S\n" (Printexc.to_string e); remove out; remove out2 let lossless_resample_target_dpi objnum pdf ~pixel_threshold ~length_threshold ~factor ~target_dpi_info ~interpolate ~path_to_convert s dict reference = try let real_factor = factor /. Hashtbl.find target_dpi_info objnum *. 100. in if real_factor < 100. then lossless_resample pdf ~pixel_threshold ~length_threshold ~factor:real_factor ~interpolate ~path_to_convert s dict reference else if !debug_image_processing then Printf.printf "failed to meet dpi target\n%!" with Not_found -> if !debug_image_processing then Printf.printf "Warning: orphaned image, skipping\n" (* Could not find DPI data - an orphan image. *) let jpeg_to_jpeg_wrapper objnum pdf ~target_dpi_info ~pixel_threshold ~length_threshold ~percentage_threshold ~jpeg_to_jpeg_scale ~jpeg_to_jpeg_dpi ~interpolate ~q ~path_to_convert s dict reference = if jpeg_to_jpeg_dpi = 0. then jpeg_to_jpeg pdf ~pixel_threshold ~length_threshold ~percentage_threshold ~jpeg_to_jpeg_scale ~interpolate ~q ~path_to_convert s dict reference else try let factor = jpeg_to_jpeg_dpi in let real_factor = factor /. Hashtbl.find target_dpi_info objnum *. 100. in if real_factor < 100. then jpeg_to_jpeg pdf ~pixel_threshold ~length_threshold ~percentage_threshold ~jpeg_to_jpeg_scale:real_factor ~interpolate ~q ~path_to_convert s dict reference else if !debug_image_processing then Printf.printf "failed to meet dpi target\n%!" with Not_found -> if !debug_image_processing then Printf.printf "Warning: orphaned image, skipping\n" (* Could not find DPI data - an orphan image. *) let recompress_1bpp_ccitt_lossless ~pixel_threshold ~length_threshold pdf s dict reference = let old = !reference in let restore () = reference := old in let w = match Pdf.lookup_direct pdf "/Width" dict with Some (Pdf.Integer i) -> i | _ -> error "bad width" in (*let h = match Pdf.lookup_direct pdf "/Height" dict with Some (Pdf.Integer i) -> i | _ -> error "bad height" in*) (*if w * h < pixel_threshold then (if !debug_image_processing then Printf.printf "pixel threshold not met\n%!") else*) let size = match Pdf.lookup_direct pdf "/Length" dict with Some (Pdf.Integer i) -> i | _ -> 0 in (*if size < length_threshold then (if !debug_image_processing then Printf.printf "length threshold not met\n%!") else*) begin Pdfcodec.decode_pdfstream_until_unknown pdf s; match Pdf.lookup_direct pdf "/Filter" (fst !reference) with | Some x -> if !debug_image_processing then Printf.printf "could not decode - skipping %s length %i\n%!" (Pdfwrite.string_of_pdf x) size; restore () | None -> let data = match s with Pdf.Stream {contents = _, Pdf.Got d} -> d | _ -> assert false in let compressed = Pdfcodec.encode_ccitt w data in let newsize = bytes_size compressed in if true (*newsize < size*) then begin if !debug_image_processing then Printf.printf "1bpp to CCITT %i -> %i (%i%%)\n%!" size newsize (int_of_float (float newsize /. float size *. 100.)); reference := (Pdf.add_dict_entry (Pdf.add_dict_entry (Pdf.add_dict_entry dict "/Length" (Pdf.Integer newsize)) "/Filter" (Pdf.Array [Pdf.Name "/CCITTFaxDecode"])) "/DecodeParms" (Pdf.Array [Pdf.Dictionary [("/K", Pdf.Integer 0); ("/Columns", Pdf.Integer w)]])), Pdf.Got (compressed) end else if !debug_image_processing then Printf.printf "no size reduction\n%!" end let recompress_1bpp_ccittg4_lossless ~pixel_threshold ~length_threshold pdf s dict reference = let old = !reference in let restore () = reference := old in let w = match Pdf.lookup_direct pdf "/Width" dict with Some (Pdf.Integer i) -> i | _ -> error "bad width" in let h = match Pdf.lookup_direct pdf "/Height" dict with Some (Pdf.Integer i) -> i | _ -> error "bad height" in if w * h < pixel_threshold then (if !debug_image_processing then Printf.printf "pixel threshold not met\n%!") else let size = match Pdf.lookup_direct pdf "/Length" dict with Some (Pdf.Integer i) -> i | _ -> 0 in if size < length_threshold then (if !debug_image_processing then Printf.printf "length threshold not met\n%!") else begin Pdfcodec.decode_pdfstream_until_unknown pdf s; match Pdf.lookup_direct pdf "/Filter" (fst !reference) with | Some x -> if !debug_image_processing then Printf.printf "could not decode - skipping %s length %i\n%!" (Pdfwrite.string_of_pdf x) size; restore () | None -> let data = match s with Pdf.Stream {contents = _, Pdf.Got d} -> d | _ -> assert false in let compressed = Pdfcodec.encode_ccitt w data in let newsize = bytes_size compressed in if newsize < size then begin if !debug_image_processing then Printf.printf "1bpp to CCITT G4 %i -> %i (%i%%)\n%!" size newsize (int_of_float (float newsize /. float size *. 100.)); reference := (Pdf.add_dict_entry (Pdf.add_dict_entry (Pdf.add_dict_entry dict "/Length" (Pdf.Integer newsize)) "/Filter" (Pdf.Array [Pdf.Name "/CCITTFaxDecode"])) "/DecodeParms" (Pdf.Array [Pdf.Dictionary [("/K", Pdf.Integer ~-1); ("/Columns", Pdf.Integer w)]])), Pdf.Got (compressed) end else if !debug_image_processing then Printf.printf "no size reduction\n%!" end let recompress_1bpp_jbig2_lossless ~pixel_threshold ~length_threshold ~path_to_jbig2enc pdf s dict reference = complain_jbig2enc path_to_jbig2enc; let old = !reference in let restore () = reference := old in let w = match Pdf.lookup_direct pdf "/Width" dict with Some (Pdf.Integer i) -> i | _ -> error "bad width" in let h = match Pdf.lookup_direct pdf "/Height" dict with Some (Pdf.Integer i) -> i | _ -> error "bad height" in if w * h < pixel_threshold then (if !debug_image_processing then Printf.printf "pixel threshold not met\n%!") else (* (but also, jbig2enc fails on tiny images) *) let size = match Pdf.lookup_direct pdf "/Length" dict with Some (Pdf.Integer i) -> i | _ -> 0 in if size < length_threshold then (if !debug_image_processing then Printf.printf "length threshold not met\n%!") else begin Pdfcodec.decode_pdfstream_until_unknown pdf s; match Pdf.lookup_direct pdf "/Filter" (fst !reference) with | Some x -> if !debug_image_processing then Printf.printf "could not decode - skipping %s length %i\n%!" (Pdfwrite.string_of_pdf x) size; restore () | None -> let out = Filename.temp_file "cpdf" "convertin.pnm" in let out2 = Filename.temp_file "cpdf" "convertout.jbig2" in let fh = open_out_bin out in let data = match s with Pdf.Stream {contents = _, Pdf.Got d} -> d | _ -> assert false in pnm_to_channel_1_inverted fh w h data; close_out fh; let retcode = let command = Filename.quote_command ~stdout:out2 path_to_jbig2enc ["-d"; "-p"; out] in (*Printf.printf "%S\n" command;*) Sys.command command in if retcode <> 0 then restore () else begin let result = open_in_bin out2 in let newsize = in_channel_length result in if newsize < size then begin if !debug_image_processing then Printf.printf "1bpp to JBIG2 %i -> %i (%i%%)\n%!" size newsize (int_of_float (float newsize /. float size *. 100.)); reference := (Pdf.remove_dict_entry (Pdf.add_dict_entry (Pdf.add_dict_entry dict "/Length" (Pdf.Integer newsize)) "/Filter" (Pdf.Name "/JBIG2Decode")) "/DecodeParms"), Pdf.Got (Pdfio.bytes_of_input_channel result) end else begin if !debug_image_processing then Printf.printf "no size reduction\n%!" end; close_in result end; remove out; remove out2 end (* Recompress 1bpp images (except existing JBIG2 compressed ones) to lossy jbig2 *) let preprocess_jbig2_lossy ~path_to_jbig2enc ~jbig2_lossy_threshold ~length_threshold ~pixel_threshold ~dpi_threshold inrange highdpi pdf = complain_jbig2enc path_to_jbig2enc; let objnum_name_pairs = ref [] in let process_obj objnum s = match s with | Pdf.Stream ({contents = dict, _} as reference) -> let old = !reference in let restore () = reference := old in if Hashtbl.mem inrange objnum && (dpi_threshold = 0. || Hashtbl.mem highdpi objnum) then begin match Pdf.lookup_direct pdf "/Subtype" dict, Pdf.lookup_direct pdf "/BitsPerComponent" dict, Pdf.lookup_direct pdf "/ImageMask" dict with | Some (Pdf.Name "/Image"), Some (Pdf.Integer 1), _ | Some (Pdf.Name "/Image"), _, Some (Pdf.Boolean true) -> let w = match Pdf.lookup_direct pdf "/Width" dict with Some (Pdf.Integer i) -> i | _ -> error "bad width" in let h = match Pdf.lookup_direct pdf "/Height" dict with Some (Pdf.Integer i) -> i | _ -> error "bad height" in if w * h < pixel_threshold then (if !debug_image_processing then Printf.printf "pixel threshold not met\n%!") else (* (but also, jbig2enc fails on tiny images) *) let size = match Pdf.lookup_direct pdf "/Length" dict with Some (Pdf.Integer i) -> i | _ -> 0 in if size < length_threshold then (if !debug_image_processing then Printf.printf "length threshold not met\n%!") else begin Pdfcodec.decode_pdfstream_until_unknown pdf s; match Pdf.lookup_direct pdf "/Filter" (fst !reference) with | Some x -> if !debug_image_processing then Printf.printf "could not decode - skipping %s length %i\n%!" (Pdfwrite.string_of_pdf x) size; restore () | None -> let out = Filename.temp_file "cpdf" "convertin.pnm" in let fh = open_out_bin out in let data = match s with Pdf.Stream {contents = _, Pdf.Got d} -> d | _ -> assert false in pnm_to_channel_1_inverted fh w h data; close_out fh; if !debug_image_processing then Printf.printf "JBIG2Lossy: obj %i is suitable\n%!" objnum; objnum_name_pairs := (objnum, out)::!objnum_name_pairs end | _ -> () (* not a 1bpp image *) end | _ -> () (* not a stream *) in Pdf.objiter process_obj pdf; if length !objnum_name_pairs > 10000 then Pdfe.log "Too many jbig2 streams" else if length !objnum_name_pairs = 0 then () else let jbig2out = Filename.temp_file "cpdf" "jbig2" in let retcode = let command = Filename.quote_command path_to_jbig2enc ?stderr:(if !debug_image_processing then None else Some Filename.null) (["-p"; "-s"; "-d"; "-t"; string_of_float jbig2_lossy_threshold; "-b"; jbig2out] @ map snd !objnum_name_pairs) in (*Printf.printf "%S\n" command;*) Sys.command command in iter remove (map snd !objnum_name_pairs); if retcode = 0 then begin let globals = bytes_of_string (contents_of_file (jbig2out ^ ".sym")) in let globalobj = Pdf.addobj pdf (Pdf.Stream {contents = Pdf.Dictionary [("/Length", Pdf.Integer (bytes_size globals))], Pdf.Got globals}) in iter2 (fun (objnum, _) i -> let data = bytes_of_string (contents_of_file (jbig2out ^ Printf.sprintf ".%04i" i)) in let basic_obj = Pdf.Stream {contents = Pdf.Dictionary [("/Length", Pdf.Integer (bytes_size data)); ("/Filter", Pdf.Name "/JBIG2Decode"); ("/DecodeParms", Pdf.Dictionary [("/JBIG2Globals", Pdf.Indirect globalobj)])], Pdf.Got data} in let dict = match Pdf.lookup_obj pdf objnum with Pdf.Stream {contents = d, _} -> d | _ -> Pdf.Dictionary [] in Pdf.addobj_given_num pdf (objnum, (match basic_obj with | Pdf.Stream {contents = Pdf.Dictionary d, data} -> let d' = fold_right (fun (k, v) d -> add k v d) d (match dict with Pdf.Dictionary x -> x | _ -> []) in Pdf.Stream {contents = Pdf.Dictionary d', data} | _ -> assert false))) !objnum_name_pairs (indx0 !objnum_name_pairs) end else begin Pdfe.log "Call to jbig2enc failed" end; iter (fun i -> remove (jbig2out ^ Printf.sprintf ".%04i" i)) (indx0 !objnum_name_pairs); remove (jbig2out ^ ".sym") let process ~q ~qlossless ~onebppmethod ~jbig2_lossy_threshold ~length_threshold ~percentage_threshold ~pixel_threshold ~dpi_threshold ~factor ~interpolate ~jpeg_to_jpeg_scale ~jpeg_to_jpeg_dpi ~path_to_jbig2enc ~path_to_convert range pdf = let inrange = match images pdf range with | `List l -> hashset_of_list (map (function `Assoc (("Object", `Int i)::_) -> i | _ -> assert false) l) | _ -> assert false in let highdpi, target_dpi_info = let objnums, dpi = if dpi_threshold = 0. && factor > 0. && jpeg_to_jpeg_dpi = 0. then ([], []) else let results = image_resolution pdf range max_float in (*iter (fun (_, _, _, _, wdpi, hdpi, objnum) -> Printf.printf "From image_resolution %f %f %i\n" wdpi hdpi objnum) results;*) let cmp (_, _, _, _, _, _, a) (_, _, _, _, _, _, b) = compare a b in let sets = collate cmp (sort cmp results) in let heads = map hd (map (sort (fun (_, _, _, _, a, b, _) (_, _, _, _, c, d, _) -> compare (fmin a b) (fmin c d))) sets) in (*iter (fun (_, _, _, _, wdpi, hdpi, objnum) -> Printf.printf "Lowest resolution exemplar %f %f %i\n" wdpi hdpi objnum) heads;*) let needed = keep (fun (_, _, _, _, wdpi, hdpi, objnum) -> fmin wdpi hdpi > dpi_threshold) heads in (*iter (fun (_, _, _, _, wdpi, hdpi, objnum) -> Printf.printf "keep %f %f %i\n" wdpi hdpi objnum) needed;*) map (fun (_, _, _, _, _, _, objnum) -> objnum) needed, map (fun (_, _, _, _, wdpi, hdpi, objnum) -> (objnum, fmin wdpi hdpi)) heads (*iter (fun (x, d) -> Printf.printf "obj %i at %f dpi\n" x d) r; r*) in hashset_of_list objnums, hashtable_of_dictionary dpi in begin match onebppmethod with "JBIG2Lossy" -> preprocess_jbig2_lossy ~path_to_jbig2enc ~jbig2_lossy_threshold ~dpi_threshold ~length_threshold ~pixel_threshold inrange highdpi pdf | _ -> () end; let nobjects = Pdf.objcard pdf in let ndone = ref 0 in let process_obj objnum s = match s with | Pdf.Stream ({contents = dict, _} as reference) -> ndone += 1; if Hashtbl.mem inrange objnum && (dpi_threshold = 0. || Hashtbl.mem highdpi objnum) then begin match Pdf.lookup_direct pdf "/Subtype" dict, Pdf.lookup_direct pdf "/Filter" dict, Pdf.lookup_direct pdf "/BitsPerComponent" dict, Pdf.lookup_direct pdf "/ImageMask" dict with | Some (Pdf.Name "/Image"), Some (Pdf.Name "/DCTDecode" | Pdf.Array [Pdf.Name "/DCTDecode"]), _, _ -> if q < 100. || jpeg_to_jpeg_scale <> 100. || jpeg_to_jpeg_dpi <> 0. then begin if !debug_image_processing then Printf.printf "(%i/%i) Object %i (JPEG)... %!" !ndone nobjects objnum; jpeg_to_jpeg_wrapper objnum pdf ~target_dpi_info ~pixel_threshold ~length_threshold ~percentage_threshold ~jpeg_to_jpeg_scale ~jpeg_to_jpeg_dpi ~interpolate ~q ~path_to_convert s dict reference end | Some (Pdf.Name "/Image"), _, Some (Pdf.Integer 1), _ | Some (Pdf.Name "/Image"), _, _, Some (Pdf.Boolean true) -> begin match onebppmethod with | "JBIG2" -> begin if !debug_image_processing then Printf.printf "(%i/%i) Object %i (1bpp)... %!" !ndone nobjects objnum; recompress_1bpp_jbig2_lossless ~pixel_threshold ~length_threshold ~path_to_jbig2enc pdf s dict reference end | "CCITT" -> begin if !debug_image_processing then Printf.printf "(%i/%i) Object %i (1bpp)... %!" !ndone nobjects objnum; recompress_1bpp_ccitt_lossless ~pixel_threshold ~length_threshold pdf s dict reference end | "CCITTG4" -> begin if !debug_image_processing then Printf.printf "(%i/%i) Object %i (1bpp)... %!" !ndone nobjects objnum; recompress_1bpp_ccittg4_lossless ~pixel_threshold ~length_threshold pdf s dict reference end | "JBIG2Lossy" -> () | _ -> error "unknown 1bpp method" end | Some (Pdf.Name "/Image"), _, _, _ -> if qlossless < 101. then begin if !debug_image_processing then Printf.printf "(%i/%i) Object %i (lossless)... %!" !ndone nobjects objnum; lossless_to_jpeg pdf ~pixel_threshold ~length_threshold ~percentage_threshold ~qlossless ~path_to_convert s dict reference end else begin if factor < 101. then begin if !debug_image_processing then Printf.printf "(%i/%i) Object %i (lossless)... %!" !ndone nobjects objnum; if factor < 0. then lossless_resample_target_dpi objnum pdf ~pixel_threshold ~length_threshold ~factor:~-.factor ~target_dpi_info ~interpolate ~path_to_convert s dict reference else lossless_resample pdf ~pixel_threshold ~length_threshold ~factor ~interpolate ~path_to_convert s dict reference end end | _ -> () (* not an image *) end | _ -> ndone += 1 (* not a stream *) in Pdf.objiter process_obj pdf �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/cpdfremovetext.mli�����������������������������������������������������������������������0000664�0001750�0001750�00000000356�14771516640�014677� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(** Remove text from documents *) (** Remove text added by [Cpdfaddtext] from the given pages. *) val removetext : int list -> Pdf.t -> Pdf.t (** Remove all text from the given pages *) val remove_all_text : int list -> Pdf.t -> Pdf.t ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/cpdfcommand.mli��������������������������������������������������������������������������0000664�0001750�0001750�00000000460�14771516640�014107� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(** PDF Command Line Tools in library form *) (** Call the command line tools with the contents of [Sys.argv] *) val go : unit -> unit (** Call the command line tools with a specialised [argv] of our own *) val go_withargv : string array -> unit (**/**) exception StayOnError val null : unit -> unit ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/cpdfdebug.ml�����������������������������������������������������������������������������0000664�0001750�0001750�00000001324�14771516640�013406� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������open Pdfutil let print_pdf_objs pdf = Printf.printf "Trailerdict: %s\n" (Pdfwrite.string_of_pdf pdf.Pdf.trailerdict); Printf.printf "Root: %i\n" pdf.Pdf.root; begin match Pdf.lookup_direct pdf "/Root" pdf.Pdf.trailerdict with | Some catalog -> Printf.printf "Catalog: %s\n" (Pdfwrite.string_of_pdf catalog); begin match Pdf.lookup_direct pdf "/Pages" catalog with | Some pages -> Printf.printf "Pages: %s\n" (Pdfwrite.string_of_pdf pages) | None -> flprint "no catalog\n" end | None -> flprint "No catalog!\n" end; Pdf.objiter (fun n obj -> Printf.printf "%i 0 obj:\n\n" n; Printf.printf "%s\n" (Pdfwrite.string_of_pdf obj)) pdf ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/cpdfjpeg.ml������������������������������������������������������������������������������0000664�0001750�0001750�00000003221�14771516640�013243� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������open Pdfutil open Pdfio (* Return the width and height of a JPEG image, per Michael Petrov's C version. Altered to accept Exif too. *) exception Answer of int * int let jpeg_dimensions bs = try let get = bget bs in let i = ref 0 in if get !i = 0xFF && get (!i + 1) = 0xD8 && get (!i + 2) = 0xFF && (get (!i + 3) = 0xE0 || get (!i + 3) = 0xE1) then begin i += 4; if get (!i + 2) = int_of_char 'J' && get (!i + 3) = int_of_char 'F' && get (!i + 4) = int_of_char 'I' && get (!i + 5) = int_of_char 'F' && get (!i + 6) = 0 || get (!i + 2) = int_of_char 'E' && get (!i + 3) = int_of_char 'x' && get (!i + 4) = int_of_char 'i' && get (!i + 5) = int_of_char 'f' && get (!i + 6) = 0 then let block_length = ref (get !i * 256 + get (!i + 1)) in while !i < bytes_size bs do i := !i + !block_length; if !i > bytes_size bs then raise (Pdf.PDFError "jpeg_dimensions: too short") else if get !i <> 0xFF then raise (Pdf.PDFError "jpeg_dimensions: not a valid block") else if get (!i + 1) = 0xC0 then raise (Answer (get (!i + 7) * 256 + get (!i + 8), (get (!i + 5) * 256 + get (!i + 6)))) else begin i += 2; block_length := get !i * 256 + get (!i + 1) end done else raise (Pdf.PDFError "jpeg_dimensions: Not a valid JFIF string") end else raise (Pdf.PDFError "jpeg_dimensions: Not a valid SOI header"); assert false with Answer (w, h) -> (w, h) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/fixcpdfmanual����������������������������������������������������������������������������0000755�0001750�0001750�00000000305�14771516640�013674� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#Set the language and document title cpdf cpdfmanual.pdf -set-language "en-US" AND -set-title "Coherent PDF Command Line Tools Manual" -also-set-xmp -o out.pdf cp out.pdf cpdfmanual.pdf rm out.pdf ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/cpdfcommand.ml���������������������������������������������������������������������������0000664�0001750�0001750�00000570433�14771516640�013752� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(* cpdf command line tools *) let demo = false let agpl = true let major_version = 2 let minor_version = 8 let minor_minor_version = 1 let version_date = "(28th March 2025)" open Pdfutil open Pdfio let combine_with_spaces strs = String.trim (fold_left (fun x y -> x ^ (if x <> "" then " " else "") ^ y) "" strs) let tempfiles = ref [] let exit n = begin try iter Sys.remove !tempfiles with _ -> exit n end; exit n let null () = () let initial_file_size = ref 0 let empty = Pdf.empty () (* Wrap up the file reading functions to exit with code 1 when an encryption problem occurs. This happens when object streams are in an encrypted document and so it can't be read without the right password... The existing error handling only dealt with the case where the document couldn't be decrypted once it had been loaded. *) let pdfread_pdf_of_input ?revision a b c = try Pdfread.pdf_of_input ?revision a b c with Pdf.PDFError s when String.length s >=10 && String.sub s 0 10 = "Encryption" -> raise (Cpdferror.SoftError "Bad owner or user password when reading document") let pdfread_pdf_of_channel_lazy ?revision ?source b c d = try Pdfread.pdf_of_channel_lazy ?revision ?source b c d with Pdf.PDFError s when String.length s >=10 && String.sub s 0 10 = "Encryption" -> raise (Cpdferror.SoftError "Bad owner or user password when reading document") let pdfread_pdf_of_file ?revision a b c = try Pdfread.pdf_of_file ?revision a b c with Pdf.PDFError s when String.length s >=10 && String.sub s 0 10 = "Encryption" -> raise (Cpdferror.SoftError "Bad owner or user password when reading document") let optstring = function | "" -> None | x -> Some x let _ = set_binary_mode_in stdin true; set_binary_mode_out stdout true let stay_on_error = ref false exception StayOnError (* Fatal error reporting. *) let error s = Pdfe.log (s ^ "\nUse -help for help.\n"); if not !stay_on_error then exit 2 else raise StayOnError let soft_error s = Pdfe.log (Printf.sprintf "%s\n" s); if not !stay_on_error then exit 1 else raise StayOnError let parse_pagespec pdf spec = try Cpdfpagespec.parse_pagespec pdf spec with Failure x -> error x (* We allow an operation such as ScaleToFit on a range such as 'portrait' to be silently null to allow, for example: cpdf -scale-to-fit a4portrait in.pdf portrait AND -scale-to-fit a4landscape landscape -o out.pdf *) let parse_pagespec_allow_empty pdf spec = try Cpdfpagespec.parse_pagespec pdf spec with Pdf.PDFError ("Page range specifies no pages") -> [] (* Operations. *) type op = | CopyFont of string | CountPages | Version | Encrypt | Decrypt | StampOn of string | StampUnder of string | CombinePages of string | TwoUp | TwoUpStack | Impose of bool | RemoveBookmarks | AddBookmarks of string | AddText of string | AddRectangle | RemoveText | Draft | PadBefore | PadAfter | PadEvery of int | PadMultiple of int | PadMultipleBefore of int | Shift | ShiftBoxes | Scale | ScaleToFit | Stretch | CenterToFit | ScaleContents of float | AttachFile of string list | RemoveAttachedFiles | ListAttachedFiles | DumpAttachedFiles | RemoveAnnotations | ListAnnotations | CopyAnnotations of string | SetAnnotations of string | Merge | Split | SplitOnBookmarks of int | SplitMax of int | Spray | Clean | Info | PageInfo | Metadata | SetMetadata of string | RemoveMetadata | Fonts | RemoveFonts | Compress | Decompress | Crop | Trim | Bleed | Art | RemoveCrop | RemoveArt | RemoveTrim | RemoveBleed | CopyBox | MediaBox | HardBox of string | Rotate of int | Rotateby of int | RotateContents of float | Upright | VFlip | HFlip | ThinLines of float | SetAuthor of string | SetTitle of string | SetSubject of string | SetKeywords of string | SetCreate of string | SetModify of string | SetCreator of string | SetProducer of string | SetTrapped | SetUntrapped | SetVersion of int | ListBookmarks | SetPageLayout of string | SetPageMode of string | SetNonFullScreenPageMode of string | HideToolbar of bool | HideMenubar of bool | HideWindowUI of bool | FitWindow of bool | CenterWindow of bool | DisplayDocTitle of bool | Presentation | ChangeId | RemoveId | CopyId of string | BlackText | BlackLines | BlackFills | ExtractImages | ListImages | ImageResolution of float | MissingFonts | ExtractFontFile of string | ExtractText | OpenAtPage of string | OpenAtPageFit of string | OpenAtPageCustom of string | AddPageLabels | RemovePageLabels | PrintPageLabels | RemoveDictEntry of string | ReplaceDictEntry of string | PrintDictEntry of string | ListSpotColours | RemoveClipping | SetMetadataDate of string | CreateMetadata | EmbedMissingFonts | BookmarksOpenToLevel of int | CreatePDF | RemoveAllText | ShowBoxes | TrimMarks | Prepend of string | Postpend of string | OutputJSON | OCGCoalesce | OCGList | OCGRename | OCGOrderAll | StampAsXObject of string | PrintFontEncoding of string | TableOfContents | Typeset of string | TextWidth of string | Draw | Composition of bool | Chop of int * int | ChopHV of bool * float | ProcessImages | ExtractStream of string | ReplaceStream of string | PrintObj of string | ReplaceObj of string * string | RemoveObj of string | Verify of string | MarkAs of Cpdfua.subformat | RemoveMark of Cpdfua.subformat | PrintStructTree | ExtractStructTree | ReplaceStructTree of string | RemoveStructTree | MarkAsArtifact | SetLanguage of string | Redact | Rasterize | OutputImage let string_of_op = function | PrintFontEncoding _ -> "PrintFontEncoding" | PrintDictEntry _ -> "PrintDictEntry" | Impose _ -> "Impose" | CopyFont _ -> "CopyFont" | CountPages -> "CountPages" | Version -> "Version" | Encrypt -> "Encrypt" | Decrypt -> "Decrypt" | StampOn _ -> "StampOn" | StampUnder _ -> "StampUnder" | CombinePages _ -> "CombinePages" | TwoUp -> "TwoUp" | TwoUpStack -> "TwoUpStack" | RemoveBookmarks -> "RemoveBookmarks" | AddBookmarks _ -> "AddBookmarks" | AddText _ -> "AddText" | AddRectangle -> "AddRectangle" | RemoveText -> "RemoveText" | Draft -> "Draft" | PadBefore -> "PadBefore" | PadAfter -> "PadAfter" | PadEvery _ -> "PadEvery" | PadMultiple _ -> "PadMultiple" | PadMultipleBefore _ -> "PadMultipleBefore" | Shift -> "Shift" | ShiftBoxes -> "ShiftBoxes" | Scale -> "Scale" | ScaleToFit -> "ScaleToFit" | Stretch -> "Stretch" | CenterToFit -> "CenterToFit" | ScaleContents _ -> "ScaleContents" | AttachFile _ -> "AttachFile" | RemoveAttachedFiles -> "RemoveAttachedFiles" | ListAttachedFiles -> "ListAttachedFiles" | DumpAttachedFiles -> "DumpAttachedFiles" | RemoveAnnotations -> "RemoveAnnotations" | ListAnnotations -> "ListAnnotations" | CopyAnnotations _ -> "CopyAnnotations" | SetAnnotations _ -> "SetAnnotations" | Merge -> "Merge" | Split -> "Split" | SplitOnBookmarks _ -> "SplitOnBookmarks" | SplitMax _ -> "SplitMax" | Spray -> "Spray" | Clean -> "Clean" | Info -> "Info" | PageInfo -> "PageInfo" | Metadata -> "Metadata" | SetMetadata _ -> "SetMetadata" | RemoveMetadata -> "RemoveMetadata" | Fonts -> "Fonts" | RemoveFonts -> "RemoveFonts" | Compress -> "Compress" | Decompress -> "Decompress" | Crop -> "Crop" | RemoveCrop -> "RemoveCrop" | CopyBox -> "CopyBox" | MediaBox -> "MediaBox" | HardBox _ -> "HardBox" | Rotate _ -> "Rotate" | Rotateby _ -> "Rotateby" | RotateContents _ -> "RotateContents" | Upright -> "Upright" | VFlip -> "VFlip" | HFlip -> "HFlip" | ThinLines _ -> "ThinLines" | SetAuthor _ -> "SetAuthor" | SetTitle _ -> "SetTitle" | SetSubject _ -> "SetSubject" | SetKeywords _ -> "SetKeywords" | SetCreate _ -> "SetCreate" | SetModify _ -> "SetModify" | SetCreator _ -> "SetCreator" | SetProducer _ -> "SetProducer" | SetTrapped -> "SetTrapped" | SetUntrapped -> "SetUntrapped" | SetVersion _ -> "SetVersion" | ListBookmarks -> "ListBookmarks" | SetPageLayout _ -> "SetPageLayout" | SetPageMode _ -> "SetPageMode" | SetNonFullScreenPageMode _ -> "SetNonFullScreenPageMode" | HideToolbar _ -> "HideToolbar" | HideMenubar _ -> "HideMenubar" | HideWindowUI _ -> "HideWindowUI" | FitWindow _ -> "FitWindow" | CenterWindow _ -> "CenterWindow" | DisplayDocTitle _ -> "DisplayDocTitle" | Presentation -> "Presentation" | ChangeId -> "ChangeId" | RemoveId -> "RemoveId" | CopyId _ -> "CopyId" | BlackText -> "BlackText" | BlackLines -> "BlackLines" | BlackFills -> "BlackFills" | ExtractImages -> "ExtractImages" | ListImages -> "ListImages" | ImageResolution _ -> "ImageResolution" | MissingFonts -> "MissingFonts" | ExtractFontFile _ -> "ExtractFontFile" | ExtractText -> "ExtractText" | OpenAtPage _ -> "OpenAtPage" | OpenAtPageFit _ -> "OpenAtPageFit" | OpenAtPageCustom _ -> "OpenAtPageCustom" | AddPageLabels -> "AddPageLabels" | RemovePageLabels -> "RemovePageLabels" | PrintPageLabels -> "PrintPageLabels" | RemoveDictEntry _ -> "RemoveDictEntry" | ReplaceDictEntry _ -> "ReplaceDictEntry" | ListSpotColours -> "ListSpotColours" | RemoveClipping -> "RemoveClipping" | Trim -> "Trim" | Art -> "Art" | Bleed -> "Bleed" | RemoveArt -> "RemoveArt" | RemoveTrim -> "RemoveTrim" | RemoveBleed -> "RemoveBleed" | SetMetadataDate _ -> "SetMetadataDate" | CreateMetadata -> "CreateMetadata" | EmbedMissingFonts -> "EmbedMissingFonts" | BookmarksOpenToLevel _ -> "BookmarksOpenToLevel" | CreatePDF -> "CreatePDF" | RemoveAllText -> "RemoveAllText" | ShowBoxes -> "ShowBoxes" | TrimMarks -> "TrimMarks" | Prepend _ -> "Prepend" | Postpend _ -> "Postpend" | OutputJSON -> "OutputJSON" | OCGCoalesce -> "OCGCoalesce" | OCGList -> "OCGList" | OCGRename -> "OCGRename" | OCGOrderAll -> "OCGOrderAll" | StampAsXObject _ -> "StampAsXObject" | TableOfContents -> "TableOfContents" | Typeset _ -> "Typeset" | TextWidth _ -> "TextWidth" | Draw -> "Draw" | Composition _ -> "Composition" | Chop _ -> "Chop" | ChopHV _ -> "ChopHV" | ProcessImages -> "ProcessImages" | ExtractStream _ -> "ExtractStream" | ReplaceStream _ -> "ReplaceStream" | PrintObj _ -> "PrintObj" | ReplaceObj _ -> "ReplaceObj" | Verify _ -> "Verify" | MarkAs _ -> "MarkAs" | RemoveMark _ -> "RemoveMark" | PrintStructTree -> "PrintStructTree" | ExtractStructTree -> "ExtractStructTree" | ReplaceStructTree _ -> "ReplaceStructTree" | RemoveStructTree -> "RemoveStructTree" | MarkAsArtifact -> "MarkAsArtifact" | SetLanguage _ -> "SetLanguage" | Redact -> "Redact" | Rasterize -> "Rasterize" | OutputImage -> "OutputImage" | RemoveObj _ -> "RemoveObj" (* Inputs: filename, pagespec. *) type input_kind = | AlreadyInMemory of Pdf.t * string | InFile of string | StdIn let string_of_input_kind = function | AlreadyInMemory (_, s) -> s | InFile s -> s | StdIn -> "Stdin" type input = input_kind * string * string * string * bool ref * int option (* input kind, range, user_pw, owner_pw, was_decrypted_with_owner, revision *) type output_method = | NoOutputSpecified | Stdout | File of string (* Outputs are also added here, in case -spray is in use. *) let spray_outputs = ref [] (* A list of PDFs to be output, if no output method was specified. *) let output_pdfs : Pdf.t list ref = ref [] let standard_namespace = "http://iso.org/pdf/ssn" let pdf2_namespace = "http://iso.org/pdf2/ssn" type font = | StandardFont of Pdftext.standard_font | EmbeddedFont of string | OtherFont of string type args = {mutable op : op option; mutable preserve_objstm : bool; mutable create_objstm : bool; mutable out : output_method; mutable inputs : input list; mutable chunksize : int; mutable linearize : bool; mutable keeplinearize : bool; mutable rectangle : string; mutable coord : string; mutable duration : float option; mutable transition : string option; mutable horizontal : bool; mutable inward : bool; mutable direction : int; mutable effect_duration : float; mutable font : font; mutable fontname : string; mutable fontencoding : Pdftext.encoding; mutable fontsize : float; mutable embedstd14 : string option; mutable color : Cpdfaddtext.colour; mutable opacity : float; mutable position : Cpdfposition.position; mutable underneath : bool; mutable linespacing : float; mutable midline : bool; mutable topline : bool; mutable justification : Cpdfaddtext.justification; mutable bates : int; mutable batespad : int option; mutable prerotate : bool; mutable relative_to_cropbox : bool; mutable keepversion : bool; mutable bycolumns : bool; mutable pagerotation : int; mutable crypt_method : string; mutable owner : string; mutable user : string; mutable no_edit : bool; mutable no_print : bool; mutable no_copy : bool; mutable no_annot : bool; mutable no_forms : bool; mutable no_extract : bool; mutable no_assemble : bool; mutable no_hq_print : bool; mutable debug : bool; mutable debugcrypt : bool; mutable debugforce : bool; mutable boxes : bool; mutable encrypt_metadata : bool; mutable retain_numbering : bool; mutable process_struct_trees : bool; mutable remove_duplicate_fonts : bool; mutable remove_duplicate_streams : bool; mutable encoding : Cpdfmetadata.encoding; mutable scale : float; mutable copyfontpage : int; mutable copyfontname : string option; mutable fast : bool; mutable dashrange : string; mutable outline : bool; mutable linewidth : float; mutable path_to_ghostscript : string; mutable path_to_im : string; mutable path_to_p2p : string; mutable path_to_jbig2enc : string; mutable frombox : string option; mutable tobox : string option; mutable mediabox_if_missing : bool; mutable topage : string option; mutable scale_stamp_to_fit : bool; mutable labelstyle : Pdfpagelabels.labelstyle; mutable labelprefix : string option; mutable labelstartval : int; mutable labelsprogress : bool; mutable squeeze : bool; mutable squeeze_recompress : bool; mutable squeeze_pagedata: bool; mutable original_filename : string; mutable was_encrypted : bool; mutable cpdflin : string option; mutable recrypt : bool; mutable was_decrypted_with_owner : bool; mutable creator : string option; mutable producer : string option; mutable extract_text_font_size : float option; mutable padwith : string option; mutable alsosetxml : bool; mutable justsetxml : bool; mutable gs_malformed : bool; mutable gs_quiet : bool; mutable merge_add_bookmarks : bool; mutable merge_add_bookmarks_use_titles : bool; mutable createpdf_pages : int; mutable createpdf_pagesize : Pdfpaper.t; mutable removeonly : string option; mutable jsonparsecontentstreams : bool; mutable jsonnostreamdata : bool; mutable jsondecompressstreams : bool; mutable jsoncleanstrings : bool; mutable ocgrenamefrom : string; mutable ocgrenameto : string; mutable dedup : bool; mutable dedup_per_page : bool; mutable collate : int; mutable impose_columns : bool; mutable impose_rtl : bool; mutable impose_btt : bool; mutable impose_center : bool; mutable impose_margin : float; mutable impose_spacing : float; mutable impose_linewidth : float; mutable format_json : bool; mutable replace_dict_entry_value : Pdf.pdfobject; mutable dict_entry_search : Pdf.pdfobject option; mutable toc_title : string; mutable toc_bookmark : bool; mutable idir_only_pdfs : bool; mutable no_warn_rotate : bool; mutable jpegquality : float; mutable jpegqualitylossless : float; mutable jpegtojpegscale : float; mutable jpegtojpegdpi : float; mutable onebppmethod : string; mutable pixel_threshold : int; mutable length_threshold : int; mutable percentage_threshold : float; mutable dpi_threshold : float; mutable resample_factor : float; mutable resample_interpolate : bool; mutable jbig2_lossy_threshold : float; mutable extract_stream_decompress : bool; mutable verify_single : string option; mutable draw_struct_tree : bool; mutable subformat : Cpdfua.subformat option; mutable indent : float option; mutable title : string option; mutable rast_device : string; mutable rast_res : float; mutable rast_annots : bool; mutable rast_antialias : bool; mutable rast_jpeg_quality : int; mutable rast_downsample : bool; mutable replace_stream_with : string; mutable output_unit : Pdfunits.t; mutable dot_leader : bool; mutable preserve_actions : bool} let args = {op = None; preserve_objstm = true; create_objstm = false; out = NoOutputSpecified; inputs = []; chunksize = 1; linearize = false; keeplinearize = false; rectangle = "0 0 0 0"; coord = "0 0"; duration = None; transition = None; horizontal = true; inward = true; direction = 0; effect_duration = 1.; font = StandardFont Pdftext.TimesRoman; fontname = "Times-Roman"; fontsize = 12.; fontencoding = Pdftext.WinAnsiEncoding; color = Cpdfaddtext.RGB (0., 0., 0.); opacity = 1.; position = Cpdfposition.TopLeft (100., 100.); underneath = false; linespacing = 1.; midline = false; topline = false; justification = Cpdfaddtext.LeftJustify; bates = 0; batespad = None; prerotate = false; relative_to_cropbox = false; keepversion = false; bycolumns = false; pagerotation = 0; crypt_method = ""; owner = ""; user = ""; no_edit = false; no_print = false; no_copy = false; no_annot = false; no_forms = false; no_extract = false; no_assemble = false; no_hq_print = false; debug = false; debugcrypt = false; debugforce = false; boxes = false; encrypt_metadata = true; retain_numbering = false; process_struct_trees = false; remove_duplicate_fonts = false; remove_duplicate_streams = false; encoding = Cpdfmetadata.Stripped; scale = 1.; copyfontpage = 1; copyfontname = None; fast = false; dashrange = "all"; outline = false; linewidth = 1.0; path_to_ghostscript = ""; path_to_im = ""; path_to_p2p = ""; path_to_jbig2enc = ""; frombox = None; tobox = None; mediabox_if_missing = false; topage = None; scale_stamp_to_fit = false; labelstyle = Pdfpagelabels.DecimalArabic; labelprefix = None; labelstartval = 1; labelsprogress = false; squeeze = false; squeeze_recompress = true; squeeze_pagedata = true; original_filename = ""; was_encrypted = false; cpdflin = None; recrypt = false; was_decrypted_with_owner = false; producer = None; creator = None; embedstd14 = None; extract_text_font_size = None; padwith = None; alsosetxml = false; justsetxml = false; gs_malformed = false; gs_quiet = false; merge_add_bookmarks = false; merge_add_bookmarks_use_titles = false; createpdf_pages = 1; createpdf_pagesize = Pdfpaper.a4; removeonly = None; jsonparsecontentstreams = false; jsonnostreamdata = false; jsondecompressstreams = false; jsoncleanstrings = false; ocgrenamefrom = ""; ocgrenameto = ""; dedup = false; dedup_per_page = false; collate = 0; impose_columns = false; impose_rtl = false; impose_btt = false; impose_center = false; impose_margin = 0.; impose_spacing = 0.; impose_linewidth = 0.; format_json = false; replace_dict_entry_value = Pdf.Null; dict_entry_search = None; toc_title = "Table of Contents"; toc_bookmark = true; idir_only_pdfs = false; no_warn_rotate = false; jpegquality = 100.; jpegqualitylossless = 101.; jpegtojpegscale = 100.; jpegtojpegdpi = 0.; onebppmethod = ""; pixel_threshold = 25; length_threshold = 100; percentage_threshold = 99.; dpi_threshold = 0.; resample_factor = 101.; resample_interpolate = false; jbig2_lossy_threshold = 0.85; extract_stream_decompress = false; verify_single = None; draw_struct_tree = false; subformat = None; indent = None; title = None; rast_device = "png16m"; rast_res = 144.; rast_annots = false; rast_antialias = true; rast_jpeg_quality = 75; rast_downsample = false; replace_stream_with = ""; output_unit = Pdfunits.PdfPoint; dot_leader = false; preserve_actions = false} (* Do not reset original_filename or cpdflin or was_encrypted or was_decrypted_with_owner or recrypt or producer or creator or path_to_* or gs_malformed or gs_quiet or no-warn-rotate, since we want these to work across ANDs. Or squeeze options: a little odd, but we want it to happen on eventual output. Or -debug-force (from v2.6). *) let reset_arguments () = args.op <- None; args.preserve_objstm <- true; args.create_objstm <- false; args.out <- NoOutputSpecified; args.inputs <- []; args.chunksize <- 1; args.linearize <- false; args.keeplinearize <- false; args.rectangle <- "0 0 0 0"; args.coord <- "0 0"; args.duration <- None; args.transition <- None; args.horizontal <- true; args.inward <- true; args.direction <- 0; args.effect_duration <- 1.; args.font <- StandardFont Pdftext.TimesRoman; args.fontname <- "Times-Roman"; args.fontsize <- 12.; args.fontencoding <- Pdftext.WinAnsiEncoding; args.color <- Cpdfaddtext.RGB (0., 0., 0.); args.opacity <- 1.; args.position <- Cpdfposition.TopLeft (100., 100.); args.underneath <- false; args.linespacing <- 1.; args.midline <- false; args.topline <- false; args.justification <- Cpdfaddtext.LeftJustify; args.bates <- 0; args.batespad <- None; args.prerotate <- false; args.relative_to_cropbox <- false; args.keepversion <- false; args.bycolumns <- false; args.pagerotation <- 0; args.crypt_method <- ""; args.owner <- ""; args.user <- ""; args.no_edit <- false; args.no_print <- false; args.no_copy <- false; args.no_annot <- false; args.no_forms <- false; args.no_extract <- false; args.no_assemble <- false; args.no_hq_print <- false; args.debug <- false; args.debugcrypt <- false; args.boxes <- false; args.encrypt_metadata <- true; args.retain_numbering <- false; args.process_struct_trees <- false; args.remove_duplicate_fonts <- false; args.remove_duplicate_streams <- false; args.encoding <- Cpdfmetadata.Stripped; args.scale <- 1.; args.copyfontpage <- 1; args.copyfontname <- None; args.fast <- false; args.dashrange <- "all"; args.outline <- false; args.linewidth <- 1.0; args.frombox <- None; args.tobox <- None; args.mediabox_if_missing <- false; args.topage <- None; args.scale_stamp_to_fit <- false; args.labelstyle <- Pdfpagelabels.DecimalArabic; args.labelprefix <- None; args.labelstartval <- 1; args.labelsprogress <- false; args.embedstd14 <- None; args.extract_text_font_size <- None; args.padwith <- None; args.alsosetxml <- false; args.justsetxml <- false; args.merge_add_bookmarks <- false; args.merge_add_bookmarks_use_titles <- false; args.createpdf_pages <- 1; args.createpdf_pagesize <- Pdfpaper.a4; args.removeonly <- None; args.jsonparsecontentstreams <- false; args.jsonnostreamdata <- false; args.jsondecompressstreams <- false; args.jsoncleanstrings <- false; args.ocgrenamefrom <- ""; args.ocgrenameto <- ""; args.dedup <- false; args.dedup_per_page <- false; args.collate <- 0; args.impose_columns <- false; args.impose_rtl <- false; args.impose_btt <- false; args.impose_center <- false; args.impose_margin <- 0.; args.impose_spacing <- 0.; args.impose_linewidth <- 0.; args.format_json <- false; args.replace_dict_entry_value <- Pdf.Null; args.dict_entry_search <- None; args.toc_title <- "Table of Contents"; args.toc_bookmark <- true; args.idir_only_pdfs <- false; args.jpegquality <- 100.; args.jpegqualitylossless <- 101.; args.onebppmethod <- ""; args.pixel_threshold <- 25; args.length_threshold <- 100; args.percentage_threshold <- 99.; args.dpi_threshold <- 0.; args.resample_factor <- 101.; args.resample_interpolate <- false; args.jbig2_lossy_threshold <- 0.85; args.extract_stream_decompress <- false; clear Cpdfdrawcontrol.fontpack_initialised; args.verify_single <- None; args.draw_struct_tree <- false; args.subformat <- None; args.indent <- None; args.title <- None; args.rast_device <- "png16m"; args.rast_res <- 144.; args.rast_annots <- false; args.rast_antialias <- true; args.rast_jpeg_quality <- 75; args.rast_downsample <- false; args.replace_stream_with <- ""; args.output_unit <- Pdfunits.PdfPoint; args.dot_leader <- false; args.preserve_actions <- false (* Prefer a) the one given with -cpdflin b) a local cpdflin, c) otherwise assume installed at a system place *) let find_cpdflin provided = match provided with Some x -> x | None -> let dotslash = match Sys.os_type with "Win32" -> "" | _ -> "./" in if Sys.file_exists "cpdflin" then (dotslash ^ "cpdflin") else if Sys.file_exists "cpdflin.exe" then (dotslash ^ "cpdflin.exe") else match Sys.os_type with "Win32" -> "cpdflin.exe" | _ -> "cpdflin" (* Call cpdflin, given the (temp) input name, the output name, and the location of the cpdflin binary. Returns the exit code. *) let call_cpdflin cpdflin temp output best_password = let command = Filename.quote_command cpdflin ["--linearize"; ("--password=" ^ best_password); temp; output] in match Sys.os_type with "Win32" -> (* On windows, don't use LD_LIBRARY_PATH - it will happen automatically *) if args.debug then Pdfe.log (command ^ "\n"); Sys.command command | _ -> (* On other platforms, if -cpdflin was provided, or cpdflin was in the current folder, set up LD_LIBRARY_PATH: *) match cpdflin with "cpdflin" -> if args.debug then Pdfe.log (command ^ "\n"); Sys.command command | _ -> let command = "DYLD_FALLBACK_LIBRARY_PATH=" ^ Filename.quote (Filename.dirname cpdflin) ^ " " ^ "LD_LIBRARY_PATH=" ^ Filename.quote (Filename.dirname cpdflin) ^ " " ^ command in if args.debug then Pdfe.log (command ^ "\n"); Sys.command command let get_pagespec () = match args.inputs with | (_, ps, _, _, _, _)::_ -> ps | _ -> error "No range specified for input, or specified too late." let string_of_permission = function | Pdfcrypt.NoEdit -> "No edit" | Pdfcrypt.NoPrint -> "No print" | Pdfcrypt.NoCopy -> "No copy" | Pdfcrypt.NoAnnot -> "No annotate" | Pdfcrypt.NoForms -> "No edit forms" | Pdfcrypt.NoExtract -> "No extract" | Pdfcrypt.NoAssemble -> "No assemble" | Pdfcrypt.NoHqPrint -> "No high-quality print" let getpermissions pdf = fold_left (fun x y -> if x = "" then x ^ y else x ^ ", " ^ y) "" (map string_of_permission (Pdfread.permissions pdf)) let banlist_of_args () = let l = ref [] in if args.no_edit then l =| Pdfcrypt.NoEdit; if args.no_print then l =| Pdfcrypt.NoPrint; if args.no_copy then l =| Pdfcrypt.NoCopy; if args.no_annot then l =| Pdfcrypt.NoAnnot; if args.no_forms then l =| Pdfcrypt.NoForms; if args.no_extract then l =| Pdfcrypt.NoExtract; if args.no_assemble then l =| Pdfcrypt.NoAssemble; if args.no_hq_print then l =| Pdfcrypt.NoHqPrint; !l (* If a file is encrypted, decrypt it using the owner password or, if not present, the user password. If the user password is used, the operation to be performed is checked to see if it's allowable under the permissions regime. *) (* The bans. Each function has a list of bans. If any of these is present in the bans list in the input file, the operation cannot proceed. Other operations cannot proceed at all without owner password. *) let banned banlist = function | Fonts | Info | Metadata | PageInfo | CountPages | ListAttachedFiles | ListAnnotations | ListBookmarks | ImageResolution _ | ListImages | MissingFonts | PrintPageLabels | Clean | Compress | Decompress | ChangeId | CopyId _ | ListSpotColours | Version | DumpAttachedFiles | RemoveMetadata | EmbedMissingFonts | BookmarksOpenToLevel _ | CreatePDF | SetPageMode _ | SetNonFullScreenPageMode _ | HideToolbar _ | HideMenubar _ | HideWindowUI _ | FitWindow _ | CenterWindow _ | DisplayDocTitle _ | RemoveId | OpenAtPageFit _ | OpenAtPage _ | OpenAtPageCustom _ | SetPageLayout _ | ShowBoxes | TrimMarks | CreateMetadata | SetMetadataDate _ | SetVersion _ | SetAuthor _|SetTitle _|SetSubject _|SetKeywords _|SetCreate _ | SetModify _|SetCreator _|SetProducer _|RemoveDictEntry _ | ReplaceDictEntry _ | PrintDictEntry _ | SetMetadata _ | ExtractText | ExtractImages | ExtractFontFile _ | AddPageLabels | RemovePageLabels | OutputJSON | OCGCoalesce | OCGRename | OCGList | OCGOrderAll | PrintFontEncoding _ | TableOfContents | Typeset _ | Composition _ | TextWidth _ | SetAnnotations _ | CopyAnnotations _ | ExtractStream _ | ReplaceStream _ | PrintObj _ | ReplaceObj _ | RemoveObj _ | Verify _ | MarkAs _ | RemoveMark _ | ExtractStructTree | ReplaceStructTree _ | SetLanguage _ | PrintStructTree | Rasterize | OutputImage | RemoveStructTree | MarkAsArtifact -> false (* Always allowed *) (* Combine pages is not allowed because we would not know where to get the -recrypt from -- the first or second file? *) | Decrypt | Encrypt | CombinePages _ -> true (* Never allowed *) | AddBookmarks _ | PadBefore | PadAfter | PadEvery _ | PadMultiple _ | PadMultipleBefore _ | Merge | Split | SplitOnBookmarks _ | SplitMax _ | Spray | RotateContents _ | Rotate _ | Rotateby _ | Upright | VFlip | HFlip | Impose _ | Chop _ | ChopHV _ | Redact -> mem Pdfcrypt.NoAssemble banlist | TwoUp | TwoUpStack | RemoveBookmarks | AddRectangle | RemoveText| Draft | Shift | ShiftBoxes | Scale | ScaleToFit|Stretch|CenterToFit|RemoveAttachedFiles| RemoveAnnotations|RemoveFonts|Crop|RemoveCrop|Trim|RemoveTrim|Bleed|RemoveBleed|Art|RemoveArt| CopyBox|MediaBox|HardBox _|SetTrapped|SetUntrapped|Presentation| BlackText|BlackLines|BlackFills|CopyFont _|StampOn _|StampUnder _|StampAsXObject _| AddText _|ScaleContents _|AttachFile _| ThinLines _ | RemoveClipping | RemoveAllText | Prepend _ | Postpend _ | Draw | ProcessImages -> mem Pdfcrypt.NoEdit banlist let operation_allowed pdf banlist op = args.debugforce || match op with | None -> if args.debugcrypt then Printf.printf "operation is None, so allowed!\n"; true (* Merge *) (* changed to allow it *) | Some op -> if args.debugcrypt then Printf.printf "operation_allowed: op = %s\n" (string_of_op op); if args.debugcrypt then Printf.printf "Permissions: %s\n" (getpermissions pdf); not (banned banlist op) let decrypt_if_necessary (_, _, user_pw, owner_pw, was_dec_with_owner, _) op pdf = if args.debugcrypt then begin match op with None -> flprint "decrypt_if_necessary: op = None\n" | Some x -> Printf.printf "decrypt_if_necessary: op = %s\n" (string_of_op x) end; if not (Pdfcrypt.is_encrypted pdf) then pdf else match op with Some (CombinePages _) -> (* This is a hack because we don't have support for recryption on combine * pages. This is prevented by permissions above, but in the case that the * owner password is blank (e.g christmas_tree_lights.pdf), we would end * up here. *) soft_error "Combine pages: both files must be unencrypted for this operation, or add -decrypt-force" | _ -> match Pdfcrypt.decrypt_pdf_owner owner_pw pdf with | Some pdf -> args.was_decrypted_with_owner <- true; was_dec_with_owner := true; if args.debugcrypt then Printf.printf "Managed to decrypt with owner password\n"; pdf | _ -> if args.debugcrypt then Printf.printf "Couldn't decrypt with owner password %s\n" owner_pw; match if args.debugcrypt then Printf.printf "call decrypt_pdf user\n"; let r = Pdfcrypt.decrypt_pdf user_pw pdf in if args.debugcrypt then Printf.printf "returned from decrypt_pdf\n"; r with | Some pdf, permissions -> if args.debugcrypt then Printf.printf "Managed to decrypt with user password\n"; if operation_allowed pdf permissions op then pdf else soft_error "User password cannot give permission for this operation. Supply owner or add -decrypt-force." | _ -> if args.debugcrypt then Printf.printf "Failed to decrypt with user password: raising soft_error"; soft_error "Failed to decrypt file: wrong password?" (* Output Page Count *) let output_page_count pdf = Printf.printf "%i\n" ((if args.fast then Pdfpage.endpage_fast else Pdfpage.endpage) pdf) let detect_duplicate_op op = match args.op with None | Some Shift -> () | _ -> Pdfe.log (Printf.sprintf "Operation %s already specified, so cannot specify operation %s.\nUse AND from Chapter 1 of the manual to chain commands together.\n" (string_of_op (unopt args.op)) (string_of_op op)); exit 1 let setop op () = detect_duplicate_op op; args.op <- Some op let setout name = args.out <- File name; spray_outputs := name::!spray_outputs let setchunk c = if c > 0 then args.chunksize <- c else error "invalid chunk size" let fixdashes s = let bufferdashes chars = let buf = ref [] in iter (function '-' -> buf =@ [' '; '-'; ' '] | x -> buf =| x) chars; rev !buf in let chars = explode s in implode (bufferdashes chars) let set_input_image f s = try let fh = open_in_bin s in let pdf = Cpdfimage.image_of_input ?subformat:args.subformat ?title:args.title ~process_struct_tree:args.process_struct_trees f (Pdfio.input_of_channel fh) in begin try close_in fh with _ -> () end; args.original_filename <- s; args.create_objstm <- true; args.inputs <- (AlreadyInMemory (pdf, s), "all", "", "", ref false, None)::args.inputs with Sys_error _ -> error "Image file not found" let jbig2_global = ref None let set_input_png s = set_input_image (fun () -> Cpdfimage.obj_of_png_data) s let set_input_jpeg s = set_input_image (fun () -> Cpdfimage.obj_of_jpeg_data) s let set_input_jpeg2000 s = set_input_image (fun () -> Cpdfimage.obj_of_jpeg2000_data) s let set_input_jbig2 s = set_input_image (fun () -> Cpdfimage.obj_of_jbig2_data ?global:!jbig2_global) s; args.remove_duplicate_streams <- true let encrypt_to_collect = ref 0 let setmethod s = detect_duplicate_op Encrypt; if args.op = None then args.op <- Some Encrypt; (* Could be additional to -split *) match s with | "40bit" | "128bit" | "AES" | "AES256" | "AES256ISO" -> args.crypt_method <- s | _ -> error ("Unsupported encryption method " ^ s) let anon_fun s = try match !encrypt_to_collect with | 3 -> setmethod s; decr encrypt_to_collect | 2 -> args.owner <- s; decr encrypt_to_collect | 1 -> args.user <- s; decr encrypt_to_collect | 0 -> let before, after = cleavewhile (neq '=') (explode s) in begin match implode before with | "user" -> begin match args.inputs with | [] -> () | (a, b, _, e, f, g)::more -> args.inputs <- (a, b, implode (tl after), e, f, g)::more end | "owner" -> begin match args.inputs with | [] -> () | (a, b, d, _, f, g)::more -> args.inputs <- (a, b, d, implode (tl after), f, g)::more end | _ -> raise Not_found end | _ -> assert false with Not_found -> try ignore (String.index s '.'); begin match rev (explode s) with | a::b::c::d::e::'.'::r when implode (map Char.uppercase_ascii [e; d; c; b; a]) = "JBIG2" -> set_input_jbig2 s | a::b::c::d::'.'::r when implode (map Char.uppercase_ascii [d; c; b; a]) = "JPEG" -> set_input_jpeg s | a::b::c::'.'::r when implode (map Char.uppercase_ascii [c; b; a]) = "JPG" -> set_input_jpeg s | a::b::c::'.'::r when implode (map Char.uppercase_ascii [c; b; a]) = "JP2" -> set_input_jpeg2000 s | a::b::c::'.'::r when implode (map Char.uppercase_ascii [c; b; a]) = "JPX" -> set_input_jpeg2000 s | a::b::c::'.'::r when implode (map Char.uppercase_ascii [c; b; a]) = "JPF" -> set_input_jpeg2000 s | a::b::c::'.'::r when implode (map Char.uppercase_ascii [c; b; a]) = "PNG" -> set_input_png s | _ -> args.inputs <- (InFile s, "all", "", "", ref false, None)::args.inputs end; args.original_filename <- s with Not_found -> match args.inputs with | [] -> Pdfe.log (Printf.sprintf "Warning: '%s' ignored\n" s) | (a, _, d, e, f, g)::t -> args.inputs <- (a, fixdashes s, d, e, f, g)::t (* If a password begins with a dash, we allow -pw=<password> too *) let setdashpassword = anon_fun (* Setting operations *) let setcrop s = setop Crop (); args.rectangle <- s let settrim s = setop Trim (); args.rectangle <- s let setbleed s = setop Bleed (); args.rectangle <- s let setart s = setop Art (); args.rectangle <- s let setmediabox s = setop MediaBox (); args.rectangle <- s let setrectangle s = setop AddRectangle (); args.coord <- s let setrotate i = if i = 0 || i = 90 || i = 180 || i = 270 then setop (Rotate i) () else error "bad rotation" let setrotateby i = if i = 0 || i = 90 || i = 180 || i = 270 then setop (Rotateby i) () else error "bad rotation" let hidetoolbar b = try setop (HideToolbar (bool_of_string b)) () with _ -> failwith "HideToolBar: must use true or false" let hidemenubar b = try setop (HideMenubar (bool_of_string b)) () with _ -> failwith "HideMenuBar: must use true or false" let hidewindowui b = try setop (HideWindowUI (bool_of_string b)) () with _ -> failwith "HideWindowUI: must use true or false" let fitwindow b = try setop (FitWindow (bool_of_string b)) () with _ -> failwith "FitWindow: must use true or false" let centerwindow b = try setop (CenterWindow (bool_of_string b)) () with _ -> failwith "CenterWindow: must use true or false" let displaydoctitle b = try setop (DisplayDocTitle (bool_of_string b)) () with _ -> failwith "DisplayDocTitle: must use true or false" let read_file_size s = let read_int s' = try int_of_string (implode (rev s')) with _ -> error (Printf.sprintf "Could not read file size specification %s" s) in match rev (explode (String.uppercase_ascii s)) with | 'B'::'I'::'G'::s -> 1024 * 1024 * 1024 * read_int s | 'B'::'G'::s -> 1000 * 1000 * 1000 * read_int s | 'B'::'I'::'M'::s -> 1024 * 1024 * read_int s | 'B'::'M'::s -> 1000 * 1000 * read_int s | 'B'::'I'::'K'::s -> 1024 * read_int s | 'B'::'K'::s -> 1000 * read_int s | s -> read_int s let setsplitmax i = setop (SplitMax (read_file_size i)) () let setstdout () = args.out <- Stdout let setstdin () = args.inputs <- [StdIn, "all", "", "", ref false, None] let settrans s = args.transition <- Some s let setduration f = args.duration <- Some f let setvertical () = args.horizontal <- false let setoutward () = args.inward <- false let setdirection i = args.direction <- match i with | 0 | 90 | 180 | 270 | 315 -> i | _ -> error "Bad direction" let seteffectduration f = args.effect_duration <- f let setcopyid s = setop (CopyId s) () let setthinlines s = setop (ThinLines (Cpdfcoord.parse_single_number empty s)) () let setcopyannotations s = setop (CopyAnnotations s) () let setsetannotations s = setop (SetAnnotations s) () let setshift s = setop Shift (); args.coord <- s let setshiftboxes s = setop ShiftBoxes (); args.coord <- s let setscale s = setop Scale (); args.coord <- s let setscaletofit s = setop ScaleToFit (); args.coord <- s let setstretch s = setop Stretch (); args.coord <- s let setcentertofit s = setop CenterToFit (); args.coord <- s let setattachfile s = match args.op with | Some (AttachFile t) -> args.op <- Some (AttachFile (s::t)) | None -> setop (AttachFile [s]) () | Some _ -> detect_duplicate_op (AttachFile [s]) let setextracttextfontsize f = args.extract_text_font_size <- Some f let setfontsize s = let f = Cpdfcoord.parse_single_number (Pdf.empty ()) s in if f > 0. then args.fontsize <- f else error "Negative font size specified" let setlinewidth s = let f = Cpdfcoord.parse_single_number (Pdf.empty ()) s in if f > 0. then args.linewidth <- f else error "Negative line width specified" let setimposemargin s = let f = Cpdfcoord.parse_single_number (Pdf.empty ()) s in args.impose_margin <- f let setimposelinewidth s = let f = Cpdfcoord.parse_single_number (Pdf.empty ()) s in if f > 0. then args.impose_linewidth <- f else error "Negative impose line width specified" let setimposespacing s = let f = Cpdfcoord.parse_single_number (Pdf.empty ()) s in args.impose_spacing <- f let setleading s = let f = Cpdfcoord.parse_single_number (Pdf.empty ()) s in Cpdfdrawcontrol.addop (Cpdfdraw.Leading f) let setcharspace s = let f = Cpdfcoord.parse_single_number (Pdf.empty ()) s in Cpdfdrawcontrol.addop (Cpdfdraw.CharSpace f) let setwordspace s = let f = Cpdfcoord.parse_single_number (Pdf.empty ()) s in Cpdfdrawcontrol.addop (Cpdfdraw.WordSpace f) let setrise s = let f = Cpdfcoord.parse_single_number (Pdf.empty ()) s in Cpdfdrawcontrol.addop (Cpdfdraw.Rise f) let setaddtext s = setop (AddText s) () let setcolor s = args.color <- Cpdfdrawcontrol.parse_colour s let setopacity o = args.opacity <- o let setaddbookmarks s = setop (AddBookmarks s) () let setaddbookmarksjson s = setop (AddBookmarks s) (); args.format_json <- true let setlistfontsjson () = setop Fonts (); args.format_json <- true let setinfojson () = setop Info (); args.format_json <- true let setpageinfojson () = setop PageInfo (); args.format_json <- true let setprintpagelabelsjson () = setop PrintPageLabels (); args.format_json <- true let setlistbookmarksjson () = setop ListBookmarks (); args.format_json <- true let setlistannotationsjson () = setop ListAnnotations (); args.format_json <- true let setstampon f = setop (StampOn f) (); (* Due to an earlier bad decision (default position), we have this nasty hack *) if args.position = Cpdfposition.TopLeft (100., 100.) then args.position <- Cpdfposition.BottomLeft (0., 0.) let setstampunder f = setop (StampUnder f) (); if args.position = Cpdfposition.TopLeft (100., 100.) then args.position <- Cpdfposition.BottomLeft (0., 0.) let setstampasxobject f = setop (StampAsXObject f) () let setcombinepages f = setop (CombinePages f) () let setposcenter s = let x, y = Cpdfcoord.parse_coordinate empty s in args.position <- Cpdfposition.PosCentre (x, y) let setposleft s = let x, y = Cpdfcoord.parse_coordinate empty s in args.position <- Cpdfposition.PosLeft (x, y) let setposright s = let x, y = Cpdfcoord.parse_coordinate empty s in args.position <- Cpdfposition.PosRight (x, y) let settop n = args.position <- Cpdfposition.Top (Cpdfcoord.parse_single_number empty n); args.justification <- Cpdfaddtext.CentreJustify let settopleft n = let coord = match Cpdfcoord.parse_coordinate empty n with | (a, b) -> Cpdfposition.TopLeft (a, b) | exception _ -> let x = Cpdfcoord.parse_single_number empty n in Cpdfposition.TopLeft (x, x) in args.position <- coord; args.justification <- Cpdfaddtext.LeftJustify let settopright n = let coord = match Cpdfcoord.parse_coordinate empty n with | (a, b) -> Cpdfposition.TopRight (a, b) | exception _ -> let x = Cpdfcoord.parse_single_number empty n in Cpdfposition.TopRight (x, x) in args.position <- coord; args.justification <- Cpdfaddtext.RightJustify let setleft n = args.position <- Cpdfposition.Left (Cpdfcoord.parse_single_number empty n); args.justification <- Cpdfaddtext.LeftJustify let setbottomleft n = let coord = match Cpdfcoord.parse_coordinate empty n with | (a, b) -> Cpdfposition.BottomLeft (a, b) | exception _ -> let x = Cpdfcoord.parse_single_number empty n in Cpdfposition.BottomLeft (x, x) in args.position <- coord; args.justification <- Cpdfaddtext.LeftJustify let setbottom n = args.position <- Cpdfposition.Bottom (Cpdfcoord.parse_single_number empty n); args.justification <- Cpdfaddtext.CentreJustify let setbottomright n = let coord = match Cpdfcoord.parse_coordinate empty n with | (a, b) -> Cpdfposition.BottomRight (a, b) | exception _ -> let x = Cpdfcoord.parse_single_number empty n in Cpdfposition.BottomRight (x, x) in args.position <- coord; args.justification <- Cpdfaddtext.RightJustify let setright n = args.position <- Cpdfposition.Right (Cpdfcoord.parse_single_number empty n); args.justification <- Cpdfaddtext.RightJustify let setdiagonal n = args.position <- Cpdfposition.Diagonal; args.justification <- Cpdfaddtext.CentreJustify let setreversediagonal n = args.position <- Cpdfposition.ReverseDiagonal; args.justification <- Cpdfaddtext.CentreJustify let setcenter n = args.position <- Cpdfposition.Centre; args.justification <- Cpdfaddtext.CentreJustify (* Calculate -bates automatically so that n is applied to the first page in the range *) let setbatesrange n = let first_page = let range = Cpdfpagespec.parse_pagespec_without_pdf (get_pagespec ()) in fold_left min max_int range in args.bates <- n + 1 - first_page let set_input s = args.original_filename <- s; args.inputs <- (InFile s, "all", "", "", ref false, None)::args.inputs let set_json_input s = args.original_filename <- s; args.create_objstm <- true; let fh = open_in_bin s in let pdf = Cpdfjson.of_input (Pdfio.input_of_channel fh) in close_in fh; args.inputs <- (AlreadyInMemory (pdf, s), "all", "", "", ref false, None)::args.inputs let set_input_dir s = let names = sort compare (leafnames_of_dir s) in let names = if args.idir_only_pdfs then option_map (fun x -> if String.length x > 4 && String.lowercase_ascii (String.sub x (String.length x - 4) 4) = ".pdf" then Some x else None) names else names in args.inputs <- (rev (map (fun n -> (InFile (s ^ Filename.dir_sep ^ n), "all", "", "", ref false, None)) names)) @ args.inputs let setdebug () = set Pdfread.read_debug; set Pdfwrite.write_debug; set Pdfcrypt.crypt_debug; set Pdfops.debug; args.debug <- true let setboxes () = args.boxes <- true let set_no_encrypt_metadata () = args.encrypt_metadata <- false let set_retain_numbering () = args.retain_numbering <- true let set_remove_duplicate_fonts () = args.remove_duplicate_fonts <- true let setencoding enc () = args.encoding <- enc let setscaletofitscale f = args.scale <- f let setscalecontents f = detect_duplicate_op (ScaleContents f); args.op <- Some (ScaleContents f); args.position <- Cpdfposition.Diagonal (* Will be center *) let setsqueeze () = args.squeeze <- true; args.create_objstm <- true let setcreatoraswego s = args.creator <- Some s let setproduceraswego s = args.producer <- Some s let setprepend s = args.op <- Some (Prepend s) let setpostpend s = args.op <- Some (Postpend s) (* Parsing the control file *) let rec getuntilendquote prev = function | [] -> implode (rev prev), [] | '"'::t -> implode (rev prev), t | '\\'::'"'::t -> getuntilendquote ('"'::prev) t | h::t -> getuntilendquote (h::prev) t let rec getarg prev = function | [] -> implode (rev prev), [] | h::t -> if Pdf.is_whitespace h then implode (rev prev), t else getarg (h::prev) t let rec parse_chars args = function | [] -> rev args | h::more when Pdf.is_whitespace h -> parse_chars args more | '"'::more -> let this, rest = getuntilendquote [] more in parse_chars (this::args) rest | h::t -> let this, rest = getarg [] (h::t) in parse_chars (this::args) rest let parse_control_file name = (parse_chars [] (charlist_of_bytes (Pdfio.bytes_of_input_channel (open_in_bin name)))) let parse_control_file_json name = try match Cpdfyojson.Safe.from_file name with | `List ls -> map (function `String s -> s | _ -> raise Exit) ls | _ -> raise Exit with Exit -> error "Syntax error in JSON control file." let setencryptcollect () = encrypt_to_collect := 3 let setcopyfont s = detect_duplicate_op (CopyFont s); args.op <- Some (CopyFont s) let setfontpage i = args.copyfontpage <- i let setcopyfontname s = args.copyfontname <- Some s let setpadevery i = detect_duplicate_op (PadEvery i); if i > 0 then args.op <- Some (PadEvery i) else error "PadEvery: must be > 0" let setpadwith filename = args.padwith <- Some filename let setpadmultiple i = detect_duplicate_op (PadMultiple i); args.op <- Some (PadMultiple i) let setpadmultiplebefore i = detect_duplicate_op (PadMultipleBefore i); args.op <- Some (PadMultipleBefore i) let setfast () = args.fast <- true (* Explicitly add a range. Parse it and replace the top input file with the range. *) let setrange spec = args.dashrange <- spec; match args.inputs with (x, _, c, d, e, f)::more -> args.inputs <- (x, spec, c, d, e, f) :: more | x -> () let setrevision n = match args.inputs with (a, b, c, d, e, _)::more -> args.inputs <- (a, b, c, d, e, Some n) :: more | [] -> Pdfe.log "Warning. -revision ignored. Put it after the filename.\n" let setimageresolution f = detect_duplicate_op (ImageResolution f); args.op <- Some (ImageResolution f) let setimpath p = args.path_to_im <- p let setjbig2encpath p = args.path_to_jbig2enc <- p let setp2ppath p = args.path_to_p2p <- p let setfrombox s = detect_duplicate_op CopyBox; args.op <- Some CopyBox; args.frombox <- Some s let settobox s = args.tobox <- Some s let setmediaboxifmissing () = args.mediabox_if_missing <- true let settopage s = args.topage <- Some s let setstdinuser u = match args.inputs with | (StdIn, x, _, o, f, g)::t -> args.inputs <- (StdIn, x, u, o, f, g)::t | _ -> error "-stdin-user: must follow -stdin" let setstdinowner o = match args.inputs with | (StdIn, x, u, _, f, g)::t -> args.inputs <- (StdIn, x, u, o, f, g)::t | _ -> error "-stdin-owner: must follow -stdin" let setopenatpage n = detect_duplicate_op (OpenAtPage n); args.op <- Some (OpenAtPage n) let setopenatpagefit n = detect_duplicate_op (OpenAtPageFit n); args.op <- Some (OpenAtPageFit n) let setopenatpagecustom n = detect_duplicate_op (OpenAtPageCustom n); args.op <- Some (OpenAtPageCustom n) let setlabelstyle s = let style = match s with | "DecimalArabic" -> Pdfpagelabels.DecimalArabic | "UppercaseRoman" -> Pdfpagelabels.UppercaseRoman | "LowercaseRoman" -> Pdfpagelabels.LowercaseRoman | "UppercaseLetters" -> Pdfpagelabels.UppercaseLetters | "LowercaseLetters" -> Pdfpagelabels.LowercaseLetters | "NoLabelPrefixOnly" -> Pdfpagelabels.NoLabelPrefixOnly | _ -> error "Unknown label style" in args.labelstyle <- style let setlabelprefix s = args.labelprefix <- Some s let setlabelstartval i = args.labelstartval <- i let setlabelsprogress () = args.labelsprogress <- true let setcpdflin s = args.cpdflin <- Some s let setrecrypt () = args.recrypt <- true let setremovedictentry s = detect_duplicate_op (RemoveDictEntry s); args.op <- Some (RemoveDictEntry s) let logto = ref None let setsqueezelogto s = logto := Some s let setstayonerror () = set stay_on_error let setembedstd14 s = args.embedstd14 <- Some s let _ = Cpdfdrawcontrol.setembedstd14 := (fun b dir -> if b then args.embedstd14 <- Some dir else args.embedstd14 <- None) let sethardbox box = detect_duplicate_op (HardBox box); args.op <- Some (HardBox box) let setalsosetxml () = args.alsosetxml <- true let setjustsetxml () = args.justsetxml <- true let setsetmetadatadate d = detect_duplicate_op (SetMetadataDate d); args.op <- Some (SetMetadataDate d) let setgsmalformed () = args.gs_malformed <- true let setmergeaddbookmarks () = args.merge_add_bookmarks <- true let setmergeaddbookmarksusetitles () = args.merge_add_bookmarks_use_titles <- true let setbookmarksopentolevel l = detect_duplicate_op (BookmarksOpenToLevel l); args.op <- Some (BookmarksOpenToLevel l) let setcreatepdfpages i = args.createpdf_pages <- i let setcreatepdfpapersize s = args.createpdf_pagesize <- let w, h = Cpdfcoord.parse_coordinate (Pdf.empty ()) s in Pdfpaper.make Pdfunits.PdfPoint w h let setimpose s = setop (Impose true) (); args.coord <- s let setimposexy s = setop (Impose false) (); args.coord <- s let setchop s = let x, y = Cpdfcoord.parse_coordinate empty s in setop (Chop (int_of_float x, int_of_float y)) () let setchopv x = setop (ChopHV (false, Cpdfcoord.parse_single_number (Pdf.empty ()) x)) () let setchoph y = setop (ChopHV (true, Cpdfcoord.parse_single_number (Pdf.empty ()) y)) () let setreplacedictentry s = setop (ReplaceDictEntry s) () let setprintdictentry s = setop (PrintDictEntry s) () let pdf_or_json s = match explode s with | 'P'::'D'::'F'::r -> Pdfread.parse_single_object (implode r) | _ -> Cpdfjson.object_of_json (Cpdfyojson.Safe.from_string s) let setreplacedictentryvalue s = try let pdfobj = pdf_or_json s in args.replace_dict_entry_value <- pdfobj with e -> error (Printf.sprintf "Failed to parse replacement value: %s\n" (Printexc.to_string e)) let setdictentrysearch s = try let pdfobj = pdf_or_json s in args.dict_entry_search <- Some pdfobj with e -> error (Printf.sprintf "Failed to parse search term: %s\n" (Printexc.to_string e)) let setprintfontencoding s = setop (PrintFontEncoding s) () let settypeset s = setop (Typeset s) () let setsubformat s = args.subformat <- Some (Cpdfua.subformat_of_string s) let settableofcontentstitle s = args.toc_title <- s let settocnobookmark () = args.toc_bookmark <- false let setidironlypdfs () = args.idir_only_pdfs <- true let setnowarnrotate () = args.no_warn_rotate <- true let whingemalformed () = Pdfe.log "Command line must be of exactly the form\ncpdf <infile> -gs <path> -gs-malformed-force -o <outfile>\n"; exit 1 let addop o = begin match o with Cpdfdraw.FontPack _ -> set Cpdfdrawcontrol.fontpack_initialised | _ -> () end; begin match args.op with Some Draw -> () | _ -> error "Need to be in drawing mode for this." end; Cpdfdrawcontrol.addop o let embed_font_inner font = match font with | StandardFont f -> (* Printf.printf "embed_font: StandardFont\n";*) begin match args.embedstd14 with | Some dirname -> begin try let fontfile, fontname = Cpdfembed.load_substitute dirname f in Cpdfembed.EmbedInfo {fontfile; fontname; encoding = args.fontencoding} with e -> error (Printf.sprintf "Can't load font for embedding: %s\n" (Printexc.to_string e)) end | None -> PreMadeFontPack (Cpdfembed.fontpack_of_standardfont (Pdftext.StandardFont (f, args.fontencoding))) end | OtherFont f -> ExistingNamedFont | EmbeddedFont name -> (*Printf.printf "embed_font: TTF\n";*) try let fontname, font = Hashtbl.find Cpdfdrawcontrol.ttfs name in args.fontname <- fontname; font with Not_found -> error (Printf.sprintf "Font %s not found" name) let embed_font () = embed_font_inner args.font let _ = Cpdfdrawcontrol.embed_font := embed_font let _ = Cpdfdrawcontrol.setdrawing := (fun () -> args.op <- Some Draw) let setfont f = (*Printf.printf "Cpdfcommand.setfont: |%s|\n%!" f;*) try let fontname, _ = Hashtbl.find Cpdfdrawcontrol.ttfs f in args.font <- EmbeddedFont f; args.fontname <- fontname with Not_found -> let convert f = (* convert from written PDF representation to internal PDF string e.g # sequences *) match Pdfread.lex_name (Pdfio.input_of_string f) with Pdfgenlex.LexName s -> s | _ -> assert false in args.font <- begin match Pdftext.standard_font_of_name ("/" ^ f) with | Some x -> StandardFont x | None -> if f <> "" && hd (explode f) <> '/' then error "Font not found"; OtherFont (convert f) end; args.fontname <- begin match Pdftext.standard_font_of_name ("/" ^ f) with | Some x -> f | None -> convert f end; (* If drawing, add the font pack as an op. *) begin match args.op with Some Draw -> addop (Cpdfdraw.FontPack (f, embed_font (), null_hash ())) | _ -> () end let loadttf n = (*Printf.printf "loadttf: %s\n" n;*) let name, filename = match String.split_on_char '=' n with | [name; filename] -> name, filename | _ -> error "loadttf: bad file specification. Should be <name>=<filename>" in try let fontfile = Pdfio.bytes_of_string (contents_of_file filename) in let fontname = Filename.remove_extension (Filename.basename filename) in Hashtbl.replace Cpdfdrawcontrol.ttfs name (fontname, Cpdfembed.EmbedInfo {fontfile; fontname; encoding = args.fontencoding}); (* If drawing, add the font pack as an op. *) begin match args.op with Some Draw -> addop (Cpdfdraw.FontPack (fontname, embed_font_inner (EmbeddedFont name), null_hash ())) | _ -> () end with _ -> error "addtff: could not load TTF" let () = Cpdfdrawcontrol.loadttf := loadttf let setstderrtostdout () = Pdfe.logger := (fun s -> print_string s; flush stdout) let settextwidth s = args.op <- Some (TextWidth s) let setdraw () = args.op <- Some Draw let setdrawstructtree () = args.draw_struct_tree <- true let setextractfontfile s = args.op <- Some (ExtractFontFile s) let () = Cpdfdrawcontrol.getfontname := fun () -> args.fontname let () = Cpdfdrawcontrol.getfontsize := fun () -> args.fontsize let () = Cpdfdrawcontrol.setfontname := setfont let () = Cpdfdrawcontrol.setfontsize := fun s -> args.fontsize <- s let () = Cpdfdrawcontrol.getindent := fun () -> args.indent let setlistimagesjson () = setop ListImages (); args.format_json <- true let set_jbig2_global f = jbig2_global := Some (Pdfio.bytes_of_string (contents_of_file f)) let clear_jbig2_global () = jbig2_global := None let setjpegquality q = args.jpegquality <- q let setjpegqualitylossless q = args.jpegqualitylossless <- q let setjpegtojpegscale q = args.jpegtojpegscale <- q let setjpegtojpegdpi q = args.jpegtojpegdpi <- q let set1bppmethod m = args.onebppmethod <- m let setpixelthreshold i = args.pixel_threshold <- i let setlengththreshold i = args.length_threshold <- i let setpercentagethreshold i = args.percentage_threshold <- i let setdpithreshold i = args.dpi_threshold <- i let setlosslessresample i = args.resample_factor <- i let setlosslessresampledpi i = args.resample_factor <- -.i let setresampleinterpolate () = args.resample_interpolate <- true let setjbig2_lossy_threshold f = args.jbig2_lossy_threshold <- f let setprocessimagesinfo () = set Cpdfimage.debug_image_processing let setextractstream s = args.op <- Some (ExtractStream s) let setextractstreamdecomp s = args.op <- Some (ExtractStream s); args.extract_stream_decompress <- true let setprintobj s = args.op <- Some (PrintObj s) let setprintobjjson s = args.format_json <- true; args.op <- Some (PrintObj s) let setreplaceobj s = match String.split_on_char '=' s with | [a; b] -> args.op <- Some (ReplaceObj (a, b)) | _ -> error "replace_obj: bad specification" let expand_namespace = function | "PDF" -> standard_namespace | "PDF2" -> pdf2_namespace | x -> x let setreadableops () = Pdfops.whitespace := "\n"; Pdfops.always_add_whitespace := true; Pdfops.write_comments := true let addeltinfo s = match String.split_on_char '=' s with | h::t -> let pdfobj = pdf_or_json (String.concat "" t) in Cpdfdrawcontrol.eltinfo h pdfobj | [] -> error "addeltinfo: bad format" let specs = [("-version", Arg.Unit (setop Version), " Print the cpdf version number"); ("-o", Arg.String setout, " Set the output file, if appropriate"); ("-i", Arg.String set_input, " Add an input file"); ("-png", Arg.String set_input_png, " Load from a PNG file, converting to PDF"); ("-jpeg", Arg.String set_input_jpeg, " Load from a JPEG file, converting to PDF"); ("-jpeg2000", Arg.String set_input_jpeg2000, " Load from a JPEG2000 file, converting to PDF"); ("-jbig2", Arg.String set_input_jbig2, " Load from a JBIG2 fragment, converting to PDF"); ("-jbig2-global", Arg.String set_jbig2_global, " Load a JBIG2 global stream"); ("-jbig2-global-clear", Arg.Unit clear_jbig2_global, " Forget any JBIG2 global stream"); ("-idir", Arg.String set_input_dir, " Add a directory of files"); ("-idir-only-pdfs", Arg.Unit setidironlypdfs, " Have -idir ignore files not ending in .pdf"); ("-pw", Arg.String setdashpassword, " Supply a password explicitly -pw=<password>"); ("-stdin", Arg.Unit setstdin, " Read input from standard input"); ("-stdin-owner", Arg.String setstdinowner, " Owner password for -stdin"); ("-stdin-user", Arg.String setstdinuser, " User password for -stdin"); ("-stdout", Arg.Unit setstdout, " Send result to standard output"); ("-error-on-malformed", Arg.Set Pdfread.error_on_malformed, " Do not try to read malformed files"); ("-range", Arg.String setrange, " Explicitly add a range"); ("-collate", Arg.Unit (fun () -> args.collate <- 1), " Collate ranges when merging"); ("-collate-n", Arg.Int (fun n -> args.collate <- n), " Collate ranges in multiples when merging"); ("-revision", Arg.Int setrevision, ""); ("-change-id", Arg.Unit (setop ChangeId), " Change the file's /ID tag"); ("-no-preserve-objstm", Arg.Unit (fun () -> args.preserve_objstm <- false), " Don't preserve object streams"); ("-create-objstm", Arg.Unit (fun () -> args.create_objstm <- true), " Create object streams anew"); ("-keep-version", Arg.Unit (fun () -> args.keepversion <- true), " Don't change the version number"); ("-l", Arg.Unit (fun () -> args.linearize <- true), " Linearize output file"); ("-keep-l", Arg.Unit (fun () -> args.keeplinearize <- true), " Linearize if the input file was linearized"); ("-cpdflin", Arg.String setcpdflin, " Set location of 'cpdflin'"); ("-recrypt", Arg.Unit setrecrypt, " Keep this file's encryption when writing"); ("-raw", Arg.Unit (setencoding Cpdfmetadata.Raw), " Do not process text"); ("-stripped", Arg.Unit (setencoding Cpdfmetadata.Stripped), " Process text by simple stripping to ASCII"); ("-utf8", Arg.Unit (setencoding Cpdfmetadata.UTF8), " Process text by conversion to UTF8 Unicode"); ("-fast", Arg.Unit setfast, " Speed over correctness with malformed documents"); ("-args", Arg.Unit (fun () -> ()), " Get arguments from a file."); ("-args-json", Arg.Unit (fun () -> ()), " Get arguments from a JSON file."); ("-merge", Arg.Unit (setop Merge), " Merge a number of files into one"); ("-retain-numbering", Arg.Unit set_retain_numbering, " Don't renumber pages when merging"); ("-merge-add-bookmarks", Arg.Unit setmergeaddbookmarks, " Add bookmarks for each file to merged file"); ("-merge-add-bookmarks-use-titles", Arg.Unit setmergeaddbookmarksusetitles, " Use title of document rather than filename"); ("-process-struct-trees", Arg.Unit (fun () -> args.process_struct_trees <- true), " Process structure trees"); ("-remove-duplicate-fonts", Arg.Unit set_remove_duplicate_fonts, " Remove duplicate fonts when merging"); ("-split", Arg.Unit (setop Split), " Split a file into individual pages"); ("-chunk", Arg.Int setchunk, " Set chunk size for -split (default 1)"); ("-split-bookmarks", Arg.Int (fun i -> setop (SplitOnBookmarks i) ()), " Split a file at bookmarks at a given level"); ("-split-max", Arg.String setsplitmax, " Split a file to files of a given size"); ("-spray", Arg.Unit (setop Spray), " Split a file by alternating pages"); ("-scale-page", Arg.String setscale, " -scale-page \"sx sy\" scales by (sx, sy)"); ("-scale-to-fit", Arg.String setscaletofit, " -scale-to-fit \"x y\" scales to page size (x, y)"); ("-stretch", Arg.String setstretch, " -stretch \"x y\" scales without preserving aspect ratio"); ("-center-to-fit", Arg.String setcentertofit, " -center-to-fit \"x y\" centers pages on page size (x, y)"); ("-scale-contents", Arg.Float setscalecontents, " Scale contents by the given factor"); ("-scale-to-fit-scale", Arg.Float setscaletofitscale, " -scale-to-fit-scale (1.0 = 100%)"); ("-shift", Arg.String setshift, " -shift \"dx dy\" shifts the chosen pages"); ("-shift-boxes", Arg.String setshiftboxes, " -shift-boxes \"dx dy\" shifts boxes on the chosen pages"); ("-rotate", Arg.Int setrotate, " Set rotation of pages to 0, 90, 180, 270"); ("-rotateby", Arg.Int setrotateby, " Rotate pages by 90, 180 or 270 degrees"); ("-rotate-contents", Arg.Float (fun f -> setop (RotateContents f) ()), " Rotate contents of pages"); ("-upright", Arg.Unit (setop Upright), " Make pages upright"); ("-prerotate", Arg.Unit (fun () -> args.prerotate <- true), " Calls -upright on pages before modifying them, if required"); ("-no-warn-rotate", Arg.Unit setnowarnrotate, " Do not warn on pages of PDFs which are not upright"); ("-hflip", Arg.Unit (setop HFlip), " Flip pages horizontally"); ("-vflip", Arg.Unit (setop VFlip), " Flip pages vertically"); ("-crop", Arg.String setcrop, " Crop specified pages (synonym for -cropbox)"); ("-cropbox", Arg.String setcrop, " Crop specified pages"); ("-artbox", Arg.String setart, " Set art box for specified pages"); ("-bleedbox", Arg.String setbleed, " Set bleed box for specified pages"); ("-trimbox", Arg.String settrim, " Set trim box for specified pages"); ("-hard-box", Arg.String sethardbox, " Hard crop specified pages to the given box"); ("-show-boxes", Arg.Unit (setop ShowBoxes), " Show boxes by adding rectangles to pages"); ("-trim-marks", Arg.Unit (setop TrimMarks), " Add trim marks"); ("-remove-crop", Arg.Unit (setop RemoveCrop), " Remove cropping on specified pages"); ("-remove-cropbox", Arg.Unit (setop RemoveCrop), " Synonym for -remove-crop"); ("-remove-trimbox", Arg.Unit (setop RemoveTrim), " Remove trim box on specified pages"); ("-remove-bleedbox", Arg.Unit (setop RemoveBleed), " Remove bleed box on specified pages"); ("-remove-artbox", Arg.Unit (setop RemoveArt), " Remove art box on specified pages"); ("-frombox", Arg.String setfrombox, " Set box to copy from"); ("-tobox", Arg.String settobox, " Set box to copy to"); ("-mediabox-if-missing", Arg.Unit setmediaboxifmissing, " If copy from box missing, substitute media box"); ("-mediabox", Arg.String setmediabox, " Set media box on specified pages"); ("-encrypt", Arg.Unit setencryptcollect, " Encrypt a document"); ("-decrypt", Arg.Unit (setop Decrypt), " Decrypt a file"); ("-decrypt-force", Arg.Unit (fun () -> args.debugforce <- true), " Decrypt a file even without password"); ("-no-edit", Arg.Unit (fun () -> args.no_edit <- true) , " No edits"); ("-no-print", Arg.Unit (fun () -> args.no_print <- true), " No printing"); ("-no-copy", Arg.Unit (fun () -> args.no_copy <- true), " No copying"); ("-no-annot", Arg.Unit (fun () -> args.no_annot <- true), " No annotations"); ("-no-forms", Arg.Unit (fun () -> args.no_forms <- true), " No forms"); ("-no-extract", Arg.Unit (fun () -> args.no_extract <- true), " No extracting"); ("-no-assemble", Arg.Unit (fun () -> args.no_assemble <- true), " No assembling"); ("-no-hq-print", Arg.Unit (fun () -> args.no_hq_print <- true), " No high quality printing"); ("-no-encrypt-metadata", Arg.Unit set_no_encrypt_metadata, " Don't encrypt metadata (AES only)"); ("-decompress", Arg.Unit (setop Decompress), " Decompress"); ("-compress", Arg.Unit (setop Compress), " Compress streams, leaving metadata alone"); ("-remove-duplicate-streams", Arg.Unit (fun () -> args.remove_duplicate_streams <- true), ""); ("-list-bookmarks", Arg.Unit (setop ListBookmarks), " List Bookmarks"); ("-list-bookmarks-json", Arg.Unit setlistbookmarksjson, " List Bookmarks in JSON format"); ("-preserve-actions", Arg.Unit (fun () -> args.preserve_actions <- true), " Preserve actions when listing bookmarks"); ("-remove-bookmarks", Arg.Unit (setop RemoveBookmarks), " Remove bookmarks from a file"); ("-add-bookmarks", Arg.String setaddbookmarks, " Add bookmarks from the given file"); ("-add-bookmarks-json", Arg.String setaddbookmarksjson, " Add bookmarks from the given file in JSON format"); ("-bookmarks-open-to-level", Arg.Int setbookmarksopentolevel, " Open bookmarks to this level (0 = all closed)"); ("-presentation", Arg.Unit (setop Presentation), " Make a presentation"); ("-trans", Arg.String settrans, " Set the transition method for -presentation"); ("-duration", Arg.Float setduration, " Set the display duration for -presentation"); ("-vertical", Arg.Unit setvertical, " Set dimension for Split and Blinds styles"); ("-outward", Arg.Unit setoutward, " Set direction for Split and Box styles"); ("-direction", Arg.Int setdirection, " Set direction for Wipe and Glitter styles"); ("-effect-duration", Arg.Float seteffectduration, " Set the effect duration in seconds"); ("-stamp-on", Arg.String setstampon, " Stamp a file on some pages of another"); ("-stamp-under", Arg.String setstampunder, " Stamp a file under some pages of another"); ("-scale-stamp-to-fit", Arg.Unit (fun () -> args.scale_stamp_to_fit <- true), " Scale the stamp to fit the page"); ("-combine-pages", Arg.String setcombinepages, " Combine two files by merging individual pages"); ("-add-text", Arg.String setaddtext, " Superimpose text on the given range of pages"); ("-remove-text", Arg.Unit (setop RemoveText), " Remove text previously added by cpdf"); ("-add-rectangle", Arg.String setrectangle, " Add a rectangle to the page"); ("-bates", Arg.Int (fun n -> args.bates <- n), " Set the base bates number"); ("-bates-at-range", Arg.Int setbatesrange, " Set the base bates number at first page in range"); ("-bates-pad-to", Arg.Int (fun n -> args.batespad <- Some n), " Pad the bates number with leading zeroes to width"); ("-font", Arg.String setfont, " Set the font"); ("-font-size", Arg.String setfontsize, " Set the font size"); ("-load-ttf", Arg.String loadttf, " Use a TrueType font"); ("-embed-std14", Arg.String setembedstd14, " Embed standard 14 fonts"); ("-color", Arg.String setcolor, " Set the color"); ("-opacity", Arg.Float setopacity, " Set the text opacity"); ("-outline", Arg.Unit (fun () -> args.outline <- true), " Use outline mode for text"); ("-linewidth", Arg.String setlinewidth, " Set line width for outline text"); ("-pos-center", Arg.String setposcenter, " Set position relative to center of baseline"); ("-pos-left", Arg.String setposleft, " Set position relative to left of baseline"); ("-pos-right", Arg.String setposright, " Set position relative to right of baseline"); ("-top", Arg.String settop, " Set position relative to center top of page"); ("-topleft", Arg.String settopleft, " Set position relative to top left of page"); ("-topright", Arg.String settopright, " Set position relative to top right of page"); ("-left", Arg.String setleft, " Set position relative to center left of page"); ("-bottomleft", Arg.String setbottomleft, " Set position relative to bottom left of page"); ("-bottom", Arg.String setbottom, " Set position relative to center bottom of page"); ("-bottomright", Arg.String setbottomright, " Set position relative to bottom right of page"); ("-right", Arg.String setright, " Set position relative to center right of page"); ("-diagonal", Arg.Unit setdiagonal, " Place text diagonally across page"); ("-reverse-diagonal", Arg.Unit setreversediagonal, " Place text diagonally across page from top left"); ("-center", Arg.Unit setcenter, " Place text in the center of the page"); ("-justify-left", Arg.Unit (fun () -> args.justification <- Cpdfaddtext.LeftJustify), " Justify multiline text left"); ("-justify-right", Arg.Unit (fun () -> args.justification <- Cpdfaddtext.RightJustify), " Justify multiline text right"); ("-justify-center", Arg.Unit (fun () -> args.justification <- Cpdfaddtext.CentreJustify), " Justify multiline text center"); ("-underneath", Arg.Unit (fun () -> args.underneath <- true), " Text stamp is underneath content"); ("-line-spacing", Arg.Float (fun f -> args.linespacing <- f), " Line spacing (1 is normal)"); ("-midline", Arg.Unit (fun () -> args.midline <- true), " Adjust text to midline rather than baseline"); ("-topline", Arg.Unit (fun () -> args.topline <- true), " Adjust text to topline rather than baseline"); ("-relative-to-cropbox", Arg.Unit (fun () -> args.relative_to_cropbox <- true), " Add text relative to Crop Box not Media Box"); ("-embed-missing-fonts", Arg.Unit (setop EmbedMissingFonts), " Embed missing fonts by calling gs"); ("-twoup", Arg.Unit (setop TwoUp), " Put 2 pages onto one"); ("-twoup-stack", Arg.Unit (setop TwoUpStack), " Stack 2 pages onto one twice the size"); ("-impose", Arg.String setimpose, " Impose onto given page size"); ("-impose-xy", Arg.String setimposexy, " Impose x by y (zero means unlimited)"); ("-impose-columns", Arg.Unit (fun () -> args.impose_columns <- true), " Impose in columns rather than rows"); ("-impose-rtl", Arg.Unit (fun () -> args.impose_rtl <- true), " Impose right-to-left"); ("-impose-btt", Arg.Unit (fun () -> args.impose_btt <- true), " Impose bottom-to-top"); ("-impose-margin", Arg.String setimposemargin, " Add margin around whole imposed page"); ("-impose-spacing", Arg.String setimposespacing, " Add spacing around each imposed page"); ("-impose-linewidth", Arg.String setimposelinewidth, " Imposition divider line width (0=none)"); ("-chop", Arg.String setchop, " Chop x by y"); ("-chop-h", Arg.String setchoph, " Chop horizontally"); ("-chop-v", Arg.String setchopv, " Chop horizontally"); ("-chop-columns", Arg.Unit (fun () -> args.impose_columns <- true), " Chop in columns rather than rows"); ("-chop-rtl", Arg.Unit (fun () -> args.impose_rtl <- true), " Chop right-to-left"); ("-chop-btt", Arg.Unit (fun () -> args.impose_btt <- true), " Chop bottom-to-top"); ("-pad-before", Arg.Unit (setop PadBefore), " Add a blank page before the given pages"); ("-pad-after", Arg.Unit (setop PadAfter), " Add a blank page after the given pages"); ("-pad-every", Arg.Int setpadevery, " Add a blank page after every n pages"); ("-pad-with", Arg.String setpadwith, " Use a given PDF instead of a blank page"); ("-pad-multiple", Arg.Int setpadmultiple, " Pad the document to a multiple of n pages"); ("-pad-multiple-before", Arg.Int setpadmultiplebefore, " Pad the document at beginning to a multiple of n pages"); ("-list-annotations", Arg.Unit (setop ListAnnotations), " List annotations"); ("-list-annotations-json", Arg.Unit setlistannotationsjson, " List annotations in JSON format"); ("-copy-annotations", Arg.String setcopyannotations, " Copy annotations from given file"); ("-remove-annotations", Arg.Unit (setop RemoveAnnotations), " Remove annotations"); ("-set-annotations", Arg.String setsetannotations, " Set annotations from JSON file"); ("-list-fonts", Arg.Unit (setop Fonts), " Output font list"); ("-list-fonts-json", Arg.Unit setlistfontsjson, " Output font list in JSON format"); ("-info", Arg.Unit (setop Info), " Output file information"); ("-info-json", Arg.Unit setinfojson, " Output file information in JSON format"); ("-page-info", Arg.Unit (setop PageInfo), " Output page information"); ("-page-info-json", Arg.Unit setpageinfojson, " Output page information in JSON format"); ("-set-author", Arg.String (fun s -> setop (SetAuthor s) ()), " Set Author"); ("-set-title", Arg.String (fun s -> setop (SetTitle s) ()), " Set Title"); ("-set-subject", Arg.String (fun s -> setop (SetSubject s) ()), " Set Subject"); ("-set-keywords", Arg.String (fun s -> setop (SetKeywords s) ()), " Set Keywords"); ("-set-create", Arg.String (fun s -> setop (SetCreate s) ()), " Set Creation date"); ("-set-modify", Arg.String (fun s -> setop (SetModify s) ()), " Set Modification date"); ("-set-creator", Arg.String (fun s -> setop (SetCreator s) ()), " Set Creator"); ("-set-producer", Arg.String (fun s -> setop (SetProducer s) ()), " Set Producer"); ("-set-trapped", Arg.Unit (setop SetTrapped), " Mark as trapped"); ("-set-untrapped", Arg.Unit (setop SetUntrapped), " Mark as not trapped"); ("-also-set-xmp", Arg.Unit setalsosetxml, " Also set XMP metadata"); ("-just-set-xmp", Arg.Unit setjustsetxml, " Just set XMP metadata, not old-fashioned metadata"); ("-create-metadata", Arg.Unit (setop CreateMetadata), " Create XMP metadata from scratch."); ("-set-page-layout", Arg.String (fun s -> setop (SetPageLayout s) ()), " Set page layout upon document opening"); ("-set-page-mode", Arg.String (fun s -> setop (SetPageMode s) ()), " Set page mode upon document opening"); ("-set-non-full-screen-page-mode", Arg.String (fun s -> setop (SetNonFullScreenPageMode s) ()), " Set non full screen page mode if page mode is FullScreen"); ("-open-at-page", Arg.String setopenatpage, " Set initial page"); ("-open-at-page-fit", Arg.String setopenatpagefit, " Set initial page, scaling to fit"); ("-open-at-page-custom", Arg.String setopenatpagecustom, " Set initial page, with custom scaling"); ("-set-metadata", Arg.String (fun s -> setop (SetMetadata s) ()), " Set metadata to the contents of a file"); ("-print-metadata", Arg.Unit (setop Metadata), " Output metadata information"); ("-remove-metadata", Arg.Unit (setop RemoveMetadata), " Remove document metadata"); ("-set-metadata-date", Arg.String setsetmetadatadate, " Set the XMP metadata date property"); ("-hide-toolbar", Arg.String hidetoolbar, " Hide the viewer's toolbar"); ("-hide-menubar", Arg.String hidemenubar, " Hide the viewer's menubar"); ("-hide-window-ui", Arg.String hidewindowui, " Hide the viewer's scroll bars etc."); ("-fit-window", Arg.String fitwindow, " Resize document's window to fit size of page"); ("-center-window", Arg.String centerwindow, " Position window in the center of screen"); ("-display-doc-title", Arg.String displaydoctitle, " Display document's title in the title bar"); ("-set-language", Arg.String (fun s -> setop (SetLanguage s) ()), " Set the document's language"); ("-pages", Arg.Unit (setop CountPages), " Count pages"); ("-list-attached-files", Arg.Unit (setop ListAttachedFiles), " List attached files"); ("-dump-attachments", Arg.Unit (setop DumpAttachedFiles), " Dump attachments to disk"); ("-attach-file", Arg.String setattachfile, " Attach a file"); ("-to-page", Arg.String settopage, " Attach file to given page instead of document"); ("-remove-files", Arg.Unit (setop RemoveAttachedFiles), " Remove embedded attached document-level files"); ("-list-images", Arg.Unit (setop ListImages), " List images"); ("-list-images-json", Arg.Unit setlistimagesjson, " List images in JSON format"); ("-list-images-used", Arg.Unit (fun () -> setop (ImageResolution max_float) ()), " List images at point of use"); ("-list-images-used-json", Arg.Unit (fun () -> args.format_json <- true; setop (ImageResolution max_float) ()), " List images at point of use in JSON format"); ("-image-resolution", Arg.Float setimageresolution, " List images at point of use under a given dpi"); ("-image-resolution-json", Arg.Float (fun f -> setimageresolution f; args.format_json <- true), " List images at point of use under a given dpi"); ("-copy-font", Arg.String setcopyfont, " Copy a named font"); ("-copy-font-page", Arg.Int setfontpage, " Set the page a copied font is drawn from"); ("-copy-font-name", Arg.String setcopyfontname, " Set the name of the font to copy"); ("-remove-fonts", Arg.Unit (setop RemoveFonts), " Remove embedded fonts"); ("-missing-fonts", Arg.Unit (setop MissingFonts), " List missing fonts"); ("-remove-id", Arg.Unit (setop RemoveId), " Remove the file's /ID tag"); ("-draft", Arg.Unit (setop Draft), " Remove images from the file"); ("-draft-remove-only", Arg.String (fun s -> args.removeonly <- Some s), " Only remove named image"); ("-boxes", Arg.Unit setboxes, " Add crossed boxes to -draft option"); ("-remove-all-text", Arg.Unit (setop RemoveAllText), " Remove all text"); ("-blacktext", Arg.Unit (setop BlackText), " Blacken document text"); ("-blacklines", Arg.Unit (setop BlackLines), " Blacken lines in document"); ("-blackfills", Arg.Unit (setop BlackFills), " Blacken fills in document"); ("-thinlines", Arg.String setthinlines, " Set minimum line thickness to the given width"); ("-remove-clipping", Arg.Unit (setop RemoveClipping), " Remove clipping paths"); ("-clean", Arg.Unit (setop Clean), " Garbage-collect a file"); ("-set-version", Arg.Int (fun i -> setop (SetVersion i) ()), " Set PDF version number"); ("-copy-id-from", Arg.String setcopyid, " Copy one file's ID tag to another"); ("-print-page-labels", Arg.Unit (setop PrintPageLabels), " Print page labels"); ("-print-page-labels-json", Arg.Unit setprintpagelabelsjson, " Print page labels in JSON format"); ("-remove-page-labels", Arg.Unit (setop RemovePageLabels), " Remove page labels"); ("-add-page-labels", Arg.Unit (setop AddPageLabels), " Add or replace page labels"); ("-label-style", Arg.String setlabelstyle, " Set label style (default DecimalArabic)"); ("-label-prefix", Arg.String setlabelprefix, " Set label prefix (default none)"); ("-label-startval", Arg.Int setlabelstartval, " Set label start value (default 1)"); ("-labels-progress", Arg.Unit setlabelsprogress, " Label start value progresses with multiple ranges"); ("-remove-dict-entry", Arg.String setremovedictentry, " Remove an entry from all dictionaries"); ("-replace-dict-entry", Arg.String setreplacedictentry, " Remove an entry from all dictionaries"); ("-replace-dict-entry-value", Arg.String setreplacedictentryvalue, " Replacement value for -replace-dict-entry"); ("-dict-entry-search", Arg.String setdictentrysearch, " Search string for -remove-dict-entry and -replace-dict-entry"); ("-print-dict-entry", Arg.String setprintdictentry, " Print dictionary values of a given key"); ("-producer", Arg.String setproduceraswego, " Change the /Producer entry in the /Info dictionary"); ("-creator", Arg.String setcreatoraswego, " Change the /Creator entry in the /Info dictionary"); ("-list-spot-colors", Arg.Unit (setop ListSpotColours), " List spot colors"); ("-create-pdf", Arg.Unit (setop CreatePDF), " Create a new PDF"); ("-create-pdf-ua-1", Arg.String (fun s -> args.subformat <- Some Cpdfua.PDFUA1; args.title <- Some s; setop CreatePDF ()), " Create a new PDF/UA-1 with the given title"); ("-create-pdf-ua-2", Arg.String (fun s -> args.subformat <- Some Cpdfua.PDFUA2; args.title <- Some s; setop CreatePDF ()), " Create a new PDF/UA-2 with the given title"); ("-create-pdf-pages", Arg.Int setcreatepdfpages, " Number of pages for new PDF"); ("-create-pdf-papersize", Arg.String setcreatepdfpapersize, " Paper size for new PDF"); ("-prepend-content", Arg.String setprepend, " Prepend content to page"); ("-postpend-content", Arg.String setpostpend, " Postpend content to page"); ("-gs", Arg.String (fun s -> args.path_to_ghostscript <- s), " Path to gs executable"); ("-gs-malformed", Arg.Unit setgsmalformed, " Also try to reconstruct malformed files with gs"); ("-gs-quiet", Arg.Unit (fun () -> args.gs_quiet <- true), " Make gs go into quiet mode"); ("-gs-malformed-force", Arg.Unit whingemalformed, " See manual for usage."); ("-im", Arg.String setimpath, " Path to magick executable"); ("-p2p", Arg.String setp2ppath, " Path to pnmtopng executable"); ("-extract-images", Arg.Unit (setop ExtractImages), " Extract images to file"); ("-dedup", Arg.Unit (fun () -> args.dedup <- true), " Deduplicate extracted images fully"); ("-dedup-perpage", Arg.Unit (fun () -> args.dedup_per_page <- true), " Deduplicate extracted images per page only"); ("-process-images", Arg.Unit (setop ProcessImages), " Process images within PDF"); ("-process-images-info", Arg.Unit setprocessimagesinfo, " Show info when processing images"); ("-jbig2enc", Arg.String setjbig2encpath, " Path to jbig2enc executable"); ("-jpeg-to-jpeg", Arg.Float setjpegquality, " Set JPEG quality for existing JPEGs"); ("-jpeg-to-jpeg-scale", Arg.Float setjpegtojpegscale, " Set the percentage scale for -jpeg-to-jpeg"); ("-jpeg-to-jpeg-dpi", Arg.Float setjpegtojpegdpi, " Set the DPI target for -jpeg-to-jpeg"); ("-lossless-to-jpeg", Arg.Float setjpegqualitylossless, " Set JPEG quality for existing lossless images"); ("-1bpp-method", Arg.String set1bppmethod, " Set 1bpp compression method for existing images"); ("-jbig2-lossy-threshold", Arg.Float setjbig2_lossy_threshold, " Set jbig2enc lossy threshold"); ("-pixel-threshold", Arg.Int setpixelthreshold, " Only process images with more pixels than this"); ("-length-threshold", Arg.Int setlengththreshold, " Only process images with data longer than this"); ("-percentage-threshold", Arg.Float setpercentagethreshold, " Only substitute lossy image when smaller than this"); ("-dpi-threshold", Arg.Float setdpithreshold, " Only process image when always higher than this dpi"); ("-lossless-resample", Arg.Float setlosslessresample, " Resample lossless images to given part of original"); ("-lossless-resample-dpi", Arg.Float setlosslessresampledpi, " Resample lossless images to given DPI"); ("-resample-interpolate", Arg.Unit setresampleinterpolate, " Interpolate when resampling"); ("-squeeze", Arg.Unit setsqueeze, " Squeeze"); ("-squeeze-log-to", Arg.String setsqueezelogto, " Squeeze log location"); ("-squeeze-no-pagedata", Arg.Unit (fun () -> args.squeeze_pagedata <- false), " Don't recompress pages"); ("-squeeze-no-recompress", Arg.Unit (fun () -> args.squeeze_recompress <- false), " Don't recompress streams"); ("-output-json", Arg.Unit (setop OutputJSON), " Export PDF file as JSON data"); ("-output-json-parse-content-streams", Arg.Unit (fun () -> args.jsonparsecontentstreams <- true), " Parse content streams"); ("-output-json-no-stream-data", Arg.Unit (fun () -> args.jsonnostreamdata <- true), " Skip stream data for brevity"); ("-output-json-decompress-streams", Arg.Unit (fun () -> args.jsondecompressstreams <- true), " Skip stream data for brevity"); ("-output-json-clean-strings", Arg.Unit (fun () -> args.jsoncleanstrings <- true), " Convert UTF16BE strings to PDFDocEncoding when possible"); ("-j", Arg.String set_json_input, " Load a PDF JSON file"); ("-ocg-list", Arg.Unit (setop OCGList), " List optional content groups"); ("-ocg-rename", Arg.Unit (setop OCGRename), " Rename optional content group"); ("-ocg-rename-from", Arg.String (fun s -> args.ocgrenamefrom <- s), " Rename from (with -ocg-rename)"); ("-ocg-rename-to", Arg.String (fun s -> args.ocgrenameto <- s), " Rename to (with -ocg-rename)"); ("-ocg-order-all", Arg.Unit (setop OCGOrderAll), " Repair /Order so all OCGs listed "); ("-ocg-coalesce-on-name", Arg.Unit (setop OCGCoalesce), " Coalesce OCGs with like name"); ("-stamp-as-xobject", Arg.String setstampasxobject, " Stamp a file as a form xobject in another"); ("-print-font-table", Arg.String setprintfontencoding, " Print the /ToUnicode table for a given font, if present."); ("-print-font-table-page", Arg.Int setfontpage, " Set page for -print-font-table"); ("-extract-font", Arg.String setextractfontfile, " Extract a font"); ("-table-of-contents", Arg.Unit (setop TableOfContents), " Typeset a table of contents from bookmarks"); ("-toc-title", Arg.String settableofcontentstitle, " Set (or clear if empty) the TOC title"); ("-toc-no-bookmark", Arg.Unit settocnobookmark, " Don't add the table of contents to the bookmarks"); ("-toc-dot-leaders", Arg.Unit (fun () -> args.dot_leader <- true), " Add a dot leader to TOC entries"); ("-typeset", Arg.String settypeset, " Typeset a text file as a PDF"); ("-subformat", Arg.String setsubformat, " Set subformat"); ("-title", Arg.String (fun s -> args.title <- Some s), " Set PDF/UA title"); ("-composition", Arg.Unit (setop (Composition false)), " Show composition of PDF"); ("-composition-json", Arg.Unit (setop (Composition true)), " Show composition of PDF in JSON format"); ("-text-width", Arg.String settextwidth, " Find width of a line of text"); ("-draw", Arg.Unit setdraw, " Begin drawing"); ("-draw-struct-tree", Arg.Unit setdrawstructtree, " Build structure trees when drawing."); ("-tag", Arg.String Cpdfdrawcontrol.addtag, " Begin structure item"); ("-stag", Arg.String Cpdfdrawcontrol.addstag, " Begin struture branch"); ("-end-tag", Arg.Unit Cpdfdrawcontrol.endtag, " End structure item"); ("-end-stag", Arg.Unit Cpdfdrawcontrol.endstag, " End structure branch"); ("-auto-tags", Arg.Unit (fun _ -> Cpdfdrawcontrol.autotags true), " Auto-tag paragraphs and figures"); ("-no-auto-tags", Arg.Unit (fun _ -> Cpdfdrawcontrol.autotags false), " Don't auto-tag paragraphs and figures"); ("-artifact", Arg.Unit (fun _ -> Cpdfdrawcontrol.artifact ()), " Begin an artifact"); ("-end-artifact", Arg.Unit (fun _ -> Cpdfdrawcontrol.endartifact ()), "End an artifact"); ("-no-auto-artifacts", Arg.Unit (fun _ -> Cpdfdrawcontrol.autoartifacts false), " Don't mark untagged content as artifacts"); ("-eltinfo", Arg.String addeltinfo, " Add element information"); ("-end-eltinfo", Arg.String (fun s -> Cpdfdrawcontrol.endeltinfo s), " Erase element information"); ("-namespace", Arg.String (fun s -> Cpdfdrawcontrol.addnamespace (expand_namespace s)), " Set the structure tree namespace"); ("-rolemap", Arg.String (fun s -> Cpdfdrawcontrol.setrolemap s), " Set a role map"); ("-rect", Arg.String Cpdfdrawcontrol.addrect, " Draw rectangle"); ("-to", Arg.String Cpdfdrawcontrol.addto, " Move to"); ("-line", Arg.String Cpdfdrawcontrol.addline, " Add line to"); ("-bez", Arg.String Cpdfdrawcontrol.addbezier, " Add Bezier curve to path"); ("-bez23", Arg.String Cpdfdrawcontrol.addbezier23, " Add Bezier v-op to path"); ("-bez13", Arg.String Cpdfdrawcontrol.addbezier13, " Add Bezier y-op to path"); ("-circle", Arg.String Cpdfdrawcontrol.addcircle, " Add circle to path"); ("-strokecol", Arg.String Cpdfdrawcontrol.setstroke, " Set stroke colour"); ("-fillcol", Arg.String Cpdfdrawcontrol.setfill, " Set fill colour"); ("-stroke", Arg.Unit Cpdfdrawcontrol.stroke, " Stroke path"); ("-fill", Arg.Unit Cpdfdrawcontrol.fill, " Fill path"); ("-filleo", Arg.Unit Cpdfdrawcontrol.fillevenodd, " Fill path, even odd"); ("-strokefill", Arg.Unit Cpdfdrawcontrol.strokefill, " Stroke and fill path"); ("-strokefilleo", Arg.Unit Cpdfdrawcontrol.strokefillevenodd, " Stroke and fill path, even odd"); ("-clip", Arg.Unit Cpdfdrawcontrol.clip, " Clip"); ("-clipeo", Arg.Unit Cpdfdrawcontrol.clipevenodd, " Clip, even odd"); ("-close", Arg.Unit Cpdfdrawcontrol.closepath, " Close path"); ("-thick", Arg.String Cpdfdrawcontrol.setthickness, " Set stroke thickness"); ("-cap", Arg.String Cpdfdrawcontrol.setcap, " Set cap"); ("-join", Arg.String Cpdfdrawcontrol.setjoin, " Set join"); ("-miter", Arg.String Cpdfdrawcontrol.setmiter, " Set miter limit"); ("-dash", Arg.String Cpdfdrawcontrol.setdash, " Set dash pattern"); ("-push", Arg.Unit Cpdfdrawcontrol.push, " Push graphics stack"); ("-pop", Arg.Unit Cpdfdrawcontrol.pop, " Pop graphics stack"); ("-matrix", Arg.String Cpdfdrawcontrol.setmatrix, " Append to graphics matrix"); ("-mtrans", Arg.String Cpdfdrawcontrol.setmtranslate, " Translate the graphics matrix"); ("-mrot", Arg.String Cpdfdrawcontrol.setmrotate, " Rotate the graphics matrix"); ("-mscale", Arg.String Cpdfdrawcontrol.setmscale, " Scale the graphics matrix"); ("-mshearx", Arg.String Cpdfdrawcontrol.setmshearx, " Shear the graphics matrix in X"); ("-msheary", Arg.String Cpdfdrawcontrol.setmsheary, " Shear the graphics matrix in Y"); ("-xobj-bbox", Arg.String Cpdfdrawcontrol.xobjbbox, " Specify the bounding box for xobjects"); ("-xobj", Arg.String Cpdfdrawcontrol.startxobj, " Begin saving a sequence of graphics operators"); ("-end-xobj", Arg.Unit Cpdfdrawcontrol.endxobj, " End saving a sequence of graphics operators"); ("-use", Arg.String Cpdfdrawcontrol.usexobj, " Use a saved sequence of graphics operators"); ("-draw-jpeg", Arg.String Cpdfdrawcontrol.addjpeg, " Load a JPEG from file and name it"); ("-draw-png", Arg.String Cpdfdrawcontrol.addpng, " Load a PNG from file and name it"); ("-image", Arg.String (fun s -> Cpdfdrawcontrol.addimage s), " Draw an image which has already been loaded"); ("-fill-opacity", Arg.Float Cpdfdrawcontrol.addopacity, " Set opacity"); ("-stroke-opacity", Arg.Float Cpdfdrawcontrol.addsopacity, " Set stroke opacity"); ("-bt", Arg.Unit Cpdfdrawcontrol.addbt, " Begin text"); ("-et", Arg.Unit Cpdfdrawcontrol.addet, " End text"); ("-text", Arg.String Cpdfdrawcontrol.addtext, " Draw text"); ("-stext", Arg.String Cpdfdrawcontrol.addspecialtext, " Draw text with %specials"); ("-para", Arg.String Cpdfdrawcontrol.addpara, " Add a paragraph of text"); ("-paras", Arg.String Cpdfdrawcontrol.addparas, " Add paragraphs of text, splitting on newlines"); ("-indent", Arg.Float (fun f -> args.indent <- Some f), " Set indent for paragraphs"); ("-leading", Arg.String setleading, " Set leading"); ("-charspace", Arg.String setcharspace, " Set character spacing"); ("-wordspace", Arg.String setwordspace, " Set word space"); ("-textscale", Arg.Float (fun f -> Cpdfdrawcontrol.addop (Cpdfdraw.TextScale f)), " Set text scale"); ("-rendermode", Arg.Int (fun i -> Cpdfdrawcontrol.addop (Cpdfdraw.RenderMode i)), " Set text rendering mode"); ("-rise", Arg.String setrise, " Set text rise"); ("-nl", Arg.Unit (fun () -> Cpdfdrawcontrol.addop Cpdfdraw.Newline), " New line"); ("-newpage", Arg.Unit Cpdfdrawcontrol.addnewpage, " Move to a fresh page"); ("-extract-stream", Arg.String setextractstream, " Extract a stream"); ("-extract-stream-decompress", Arg.String setextractstreamdecomp, " Extract a stream, decompressing"); ("-replace-stream", Arg.String (fun s -> args.op <- Some (ReplaceStream s)), " Replace a stream"); ("-replace-stream-with", Arg.String (fun s -> args.replace_stream_with <- s), " File to replace stream with"); ("-obj", Arg.String setprintobj, " Print object"); ("-obj-json", Arg.String setprintobjjson, " Print object in JSON format"); ("-replace-obj", Arg.String setreplaceobj, " Replace object"); ("-remove-obj", Arg.String (fun s -> setop (RemoveObj s) ()), " Remove object"); ("-json", Arg.Unit (fun () -> args.format_json <- true), " Format output as JSON"); ("-verify", Arg.String (fun s -> setop (Verify s) ()), " Verify conformance to a standard"); ("-verify-single", Arg.String (fun s -> args.verify_single <- Some s), " Verify a single test"); ("-mark-as", Arg.String (fun s -> setop (MarkAs (Cpdfua.subformat_of_string s)) ()), " Mark as conforming to a standard"); ("-remove-mark", Arg.String (fun s -> setop (RemoveMark (Cpdfua.subformat_of_string s)) ()), " Remove conformance mark"); ("-print-struct-tree", Arg.Unit (fun () -> setop PrintStructTree ()), " Print structure tree"); ("-extract-struct-tree", Arg.Unit (fun () -> setop ExtractStructTree ()), " Extract structure tree in JSON format"); ("-replace-struct-tree", Arg.String (fun s -> setop (ReplaceStructTree s) ()), " Replace structure tree from JSON"); ("-remove-struct-tree", Arg.Unit (fun () -> setop RemoveStructTree ()), " Remove entire structure tree"); ("-mark-as-artifact", Arg.Unit (fun () -> setop MarkAsArtifact ()), " Mark whole file as artifact"); ("-redact", Arg.Unit (fun () -> setop Redact ()), " Redact entire pages"); ("-rasterize", Arg.Unit (fun () -> setop Rasterize ()), " Rasterize pages"); ("-rasterize-gray", Arg.Unit (fun () -> args.rast_device <- "pnggray"), " Rasterize in grayscale"); ("-rasterize-1bpp", Arg.Unit (fun () -> args.rast_device <- "pngmono"), " Rasterize in monochrome"); ("-rasterize-jpeg", Arg.Unit (fun () -> args.rast_device <- "jpeg"), " Rasterize as JPEG"); ("-rasterize-jpeg-gray", Arg.Unit (fun () -> args.rast_device <- "jpeggray"), " Rasterize as JPEG in grayscale"); ("-rasterize-res", Arg.Float (fun f -> args.rast_res <- f), " Rastierization resolution"); ("-rasterize-annots", Arg.Unit (fun () -> args.rast_annots <- true), " Rasterize annotations"); ("-rasterize-no-antialias", Arg.Unit (fun () -> args.rast_antialias <- false), " Don't antialias when rasterizing"); ("-rasterize-downsample", Arg.Unit (fun () -> args.rast_downsample <- true), " Antialias by downsampling"); ("-rasterize-jpeg-quality", Arg.Int (fun i -> args.rast_jpeg_quality <- i), " Set JPEG quality"); ("-output-image", Arg.Unit (fun () -> args.op <- Some OutputImage), " Output pages as images"); ("-in", Arg.Unit (fun () -> args.output_unit <- Pdfunits.Inch), " Output dimensions in inches"); ("-cm", Arg.Unit (fun () -> args.output_unit <- Pdfunits.Centimetre), " Output dimensions in centimetres"); ("-mm", Arg.Unit (fun () -> args.output_unit <- Pdfunits.Millimetre), " Output dimensions in millimetres"); (* These items are undocumented *) ("-debug", Arg.Unit setdebug, ""); ("-debug-crypt", Arg.Unit (fun () -> args.debugcrypt <- true), ""); ("-debug-force", Arg.Unit (fun () -> args.debugforce <- true), ""); ("-debug-malformed", Arg.Set Pdfread.debug_always_treat_malformed, ""); ("-debug-stderr-to-stdout", Arg.Unit setstderrtostdout, ""); ("-debug-readable-ops", Arg.Unit setreadableops, ""); ("-stay-on-error", Arg.Unit setstayonerror, ""); (* These items are unfinished *) ("-extract-text", Arg.Unit (setop ExtractText), ""); ("-extract-text-font-size", Arg.Float setextracttextfontsize, ""); ] and usage_msg = "Syntax: cpdf [<operation>] <input files> [-o <output file>]\n\n\ Copyright Coherent Graphics Ltd.\n\n\ Version " ^ (if agpl then "AGPLv3-licensed " else "") ^ string_of_int major_version ^ "." ^ string_of_int minor_version ^ "." ^ (if minor_minor_version = 0 then "" else string_of_int minor_minor_version) ^ " " ^ version_date ^ "\n\n\ https://www.coherentpdf.com/\n\n\ Input names are distinguished by containing a '.' and may be\n\ followed by a page range specification, for instance \"1,2,3\"\n\ or \"1-6,9-end\" or \"even\" or \"odd\" or \"reverse\".\n\nOperations (See \ manual for full details):\n" (* Reading and writing *) let filesize name = try let x = open_in_bin name in let r = in_channel_length x in close_in x; r with _ -> 0 (* Mend PDF file with Ghostscript. We use this if a file is malformed and CPDF * cannot mend it. It is copied to a temporary file, fixed, then we return None or Some (pdf). *) let mend_pdf_file_with_ghostscript filename = match args.path_to_ghostscript with | "" -> Pdfe.log "Please supply path to gs with -gs\n"; exit 2 | _ -> Pdfe.log "CPDF could not mend. Attempting to mend file with gs\n"; let tmpout = Filename.temp_file "cpdf" ".pdf" in tempfiles := tmpout::!tempfiles; let gscall = Filename.quote_command args.path_to_ghostscript ((if args.gs_quiet then ["-dQUIET"] else []) @ ["-dNOPAUSE"; "-sDEVICE=pdfwrite"; "-sOUTPUTFILE=" ^ tmpout; "-dBATCH"; filename]) in match Sys.command gscall with | 0 -> Pdfe.log "Succeeded!\n"; tmpout | _ -> Pdfe.log "Could not fix malformed PDF file, even with gs\n"; exit 2 exception StdInBytes of bytes let pdf_of_stdin ?revision user_pw owner_pw = let rbytes = ref (mkbytes 0) in try let user_pw = Some user_pw and owner_pw = if owner_pw = "" then None else Some owner_pw in let o, bytes = Pdfio.input_output_of_bytes 16384 in try while true do o.Pdfio.output_char (input_char stdin) done; Pdf.empty () with End_of_file -> let thebytes = Pdfio.extract_bytes_from_input_output o bytes in rbytes := thebytes; let i = Pdfio.input_of_bytes thebytes in pdfread_pdf_of_input ?revision user_pw owner_pw i with _ -> raise (StdInBytes !rbytes) let rec get_single_pdf ?(decrypt=true) ?(fail=false) op read_lazy = let failout () = if fail then begin (* Reconstructed with ghostscript, but then we couldn't read it even then. Do not loop. *) Pdfe.log "Failed to read gs-reconstructed PDF even though gs succeeded\n"; exit 2 end in let warn_gs () = begin match args.inputs with (InFile inname, _, _, _, _, _)::_ -> begin try ignore (close_in (open_in_bin inname)) with _ -> Pdfe.log (Printf.sprintf "File %s does not exist\n" inname); exit 2 end | _ -> () end; Pdfe.log "get_single_pdf: failed to read malformed PDF file. Consider using -gs-malformed\n"; exit 2 in match args.inputs with | (InFile inname, x, u, o, y, revision) as input::more -> if args.squeeze then Printf.printf "Initial file size is %i bytes\n" (filesize inname); let pdf = try if read_lazy then pdfread_pdf_of_channel_lazy ?revision (optstring u) (optstring o) (open_in_bin inname) else pdfread_pdf_of_file ?revision (optstring u) (optstring o) inname with | Cpdferror.SoftError _ as e -> raise e (* Bad owner or user password *) | _ -> if args.gs_malformed then begin failout (); let newname = mend_pdf_file_with_ghostscript inname in args.inputs <- (InFile newname, x, u, o, y, revision)::more; get_single_pdf ~fail:true op read_lazy end else warn_gs () in args.was_encrypted <- Pdfcrypt.is_encrypted pdf; if decrypt then decrypt_if_necessary input op pdf else pdf | (StdIn, x, u, o, y, revision) as input::more -> let pdf = try pdf_of_stdin ?revision u o with StdInBytes b -> if args.gs_malformed then begin failout (); let inname = Filename.temp_file "cpdf" ".pdf" in tempfiles := inname::!tempfiles; let fh = open_out_bin inname in Pdfio.bytes_to_output_channel fh b; close_out fh; let newname = mend_pdf_file_with_ghostscript inname in args.inputs <- (InFile newname, x, u, o, y, revision)::more; get_single_pdf ~fail:true op read_lazy end else warn_gs () in args.was_encrypted <- Pdfcrypt.is_encrypted pdf; if decrypt then decrypt_if_necessary input op pdf else pdf | (AlreadyInMemory (pdf, s), _, _, _, _, _)::_ -> pdf | _ -> raise (Arg.Bad "cpdf: No input specified.\n") let filenames = null_hash () let squeeze_logto filename x = let fh = open_out_gen [Open_wronly; Open_creat] 0o666 filename in seek_out fh (out_channel_length fh); output_string fh x; close_out fh (* This now memoizes on the name of the file to make sure we only load each file once *) let rec get_pdf_from_input_kind ?(read_lazy=false) ?(decrypt=true) ?(fail=false) ((_, x, u, o, y, revision) as input) op ik = let failout () = if fail then begin (* Reconstructed with ghostscript, but then we couldn't read it even then. Do not loop. *) Pdfe.log "Failed to read gs-reconstructed PDF even though gs succeeded\n"; exit 2 end in let warn_gs () = begin match input with (InFile inname, _, _, _, _, _) -> begin try ignore (close_in (open_in_bin inname)) with _ -> Pdfe.log (Printf.sprintf "File %s does not exist\n" inname); exit 2 end | _ -> () end; Pdfe.log "get_pdf_from_input_kind: failed to read malformed PDF file. Consider using -gs-malformed\n"; exit 2 in match ik with | AlreadyInMemory (pdf, _) -> pdf | InFile s -> if args.squeeze then begin let size = filesize s in initial_file_size := size; let str = Printf.sprintf "Initial file size is %i bytes\n" size in begin match !logto with | None -> print_string str | Some filename -> squeeze_logto filename str end end; begin try Hashtbl.find filenames s with Not_found -> let pdf = try if read_lazy then pdfread_pdf_of_channel_lazy ?revision (optstring u) (optstring o) (open_in_bin s) else pdfread_pdf_of_file ?revision (optstring u) (optstring o) s with | Cpdferror.SoftError _ as e -> raise e (* Bad owner or user password *) | e -> Printf.printf "%s\n" (Printexc.to_string e); if args.gs_malformed then begin failout (); let newname = mend_pdf_file_with_ghostscript s in get_pdf_from_input_kind ~fail:true (InFile newname, x, u, o, y, revision) op (InFile newname); end else warn_gs () in args.was_encrypted <- Pdfcrypt.is_encrypted pdf; let pdf = if decrypt then decrypt_if_necessary input op pdf else pdf in Hashtbl.add filenames s pdf; pdf end | StdIn -> let pdf = try pdf_of_stdin ?revision u o with StdInBytes b -> if args.gs_malformed then begin failout (); let inname = Filename.temp_file "cpdf" ".pdf" in tempfiles := inname::!tempfiles; let fh = open_out_bin inname in Pdfio.bytes_to_output_channel fh b; close_out fh; let newname = mend_pdf_file_with_ghostscript inname in get_pdf_from_input_kind ~fail:true (InFile newname, x, u, o, y, revision) op (InFile newname); end else warn_gs () in args.was_encrypted <- Pdfcrypt.is_encrypted pdf; if decrypt then decrypt_if_necessary input op pdf else pdf let rec unescape_octals prev = function | [] -> rev prev | '\\'::('0'..'9' as a)::('0'..'9' as b)::('0'..'9' as c)::t -> let chr = char_of_int (int_of_string ("0o" ^ implode [a;b;c])) in unescape_octals (chr::prev) t | '\\'::'\\'::t -> unescape_octals ('\\'::prev) t | h::t -> unescape_octals (h::prev) t let unescape_octals s = implode (unescape_octals [] (explode s)) let process s = if args.encoding <> Cpdfmetadata.Raw then Pdftext.pdfdocstring_of_utf8 s else unescape_octals s let set_producer s pdf = ignore (Cpdfmetadata.set_pdf_info ("/Producer", Pdf.String (process s), 0) pdf) let set_creator s pdf = ignore (Cpdfmetadata.set_pdf_info ("/Creator", Pdf.String (process s), 0) pdf) let really_write_pdf ?(encryption = None) ?(is_decompress=false) mk_id pdf outname = if args.producer <> None then set_producer (unopt args.producer) pdf; if args.creator <> None then set_creator (unopt args.creator) pdf; if args.debugcrypt then Printf.printf "really_write_pdf\n"; let will_linearize = args.linearize || args.keeplinearize && pdf.Pdf.was_linearized in let outname' = if will_linearize then Filename.temp_file "cpdflin" ".pdf" else outname in if args.debugcrypt then Printf.printf "args.recrypt = %b, args.was_encrypted = %b\n" args.recrypt args.was_encrypted; begin if args.recrypt && args.was_encrypted then begin if args.debugcrypt then Printf.printf "Recrypting in really_write_pdf\n"; match args.inputs with [] -> raise (Pdf.PDFError "no input in recryption") | (_, _, user_pw, owner_pw, _, _)::_ -> let best_password = if owner_pw <> "" then owner_pw else user_pw in Pdfwrite.pdf_to_file_options ~preserve_objstm:args.preserve_objstm ~generate_objstm:args.create_objstm ~compress_objstm:(not is_decompress) ~recrypt:(Some best_password) None mk_id pdf outname' end else begin if args.debugforce || not args.was_encrypted || args.was_decrypted_with_owner then begin if args.debugcrypt then Printf.printf "Pdf to file in really_write_pdf\n"; Pdfwrite.pdf_to_file_options ~preserve_objstm:args.preserve_objstm ~generate_objstm:args.create_objstm ~compress_objstm:(not is_decompress) encryption mk_id pdf outname' end else soft_error "You must supply -recrypt here, or add -decrypt-force, or provide the owner password." end end; begin if will_linearize then let cpdflin = find_cpdflin args.cpdflin in match args.inputs with [] -> raise (Pdf.PDFError "no input in recryption") | (_, _, user_pw, owner_pw, _, _)::_ -> let best_password = if owner_pw <> "" then owner_pw else user_pw in let code = call_cpdflin cpdflin outname' outname best_password in if code > 0 then begin begin try Sys.remove outname with _ -> () end; Sys.rename outname' outname; soft_error "Linearizer failed with above error. \ File written without linearization." end else begin try Sys.remove outname' with _ -> () end; end; if args.squeeze then let s = filesize outname in begin let str = Printf.sprintf "Final file size is %i bytes, %.2f%% of original.\n" s ((float s /. float !initial_file_size) *. 100.) in match !logto with | None -> print_string str | Some filename -> squeeze_logto filename str end let write_pdf ?(encryption = None) ?(is_decompress=false) mk_id pdf = if args.debugcrypt then Printf.printf "write_pdf\n"; if args.create_objstm && not (args.keepversion || pdf.Pdf.major > 1) then pdf.Pdf.minor <- max pdf.Pdf.minor 5; match args.out with | NoOutputSpecified -> output_pdfs =| pdf | File outname -> begin match encryption with None -> if not is_decompress then begin ignore (Cpdfsqueeze.recompress_pdf pdf); if args.squeeze then Cpdfsqueeze.squeeze ~pagedata:args.squeeze_pagedata ?logto:!logto pdf; end; Pdf.remove_unreferenced pdf; really_write_pdf ~is_decompress mk_id pdf outname | Some _ -> really_write_pdf ~encryption ~is_decompress mk_id pdf outname end | Stdout -> let temp = Filename.temp_file "cpdfstdout" ".pdf" in begin match encryption with None -> if not is_decompress then begin ignore (Cpdfsqueeze.recompress_pdf pdf); if args.squeeze then Cpdfsqueeze.squeeze ~pagedata:args.squeeze_pagedata ?logto:!logto pdf; Pdf.remove_unreferenced pdf end; really_write_pdf ~encryption ~is_decompress mk_id pdf temp; | Some _ -> really_write_pdf ~encryption ~is_decompress mk_id pdf temp end; let temp_file = open_in_bin temp in try while true do output_char stdout (input_char temp_file) done; assert false with End_of_file -> begin try close_in temp_file; Sys.remove temp with e -> Pdfe.log (Printf.sprintf "Failed to remove temp file %s (%s)\n" temp (Printexc.to_string e)) end; flush stdout (*r For Windows *) (* Find the stem of a filename *) let stem s = implode (rev (tail_no_fail (dropwhile (neq '.') (rev (explode (Filename.basename s)))))) let fast_write_split_pdfs ?(names=[]) enc splitlevel original_filename sq spec main_pdf pagenums pdf_pages = let marks = Pdfmarks.read_bookmarks ~preserve_actions:true main_pdf in iter2 (fun number pagenums -> let pdf = Pdfpage.pdf_of_pages ~retain_numbering:args.retain_numbering ~process_struct_tree:args.process_struct_trees main_pdf pagenums in let startpage, endpage = extremes pagenums in let name = if names <> [] then List.nth names (number - 1) else Cpdfbookmarks.name_of_spec args.encoding marks main_pdf splitlevel spec number (stem original_filename) startpage endpage in Pdf.remove_unreferenced pdf; if sq then Cpdfsqueeze.squeeze ~pagedata:args.squeeze_pagedata ?logto:!logto pdf; really_write_pdf ~encryption:enc (not (enc = None)) pdf name) (indx pagenums) pagenums (* Return list, in order, a *set* of page numbers of bookmarks at a given level *) let bookmark_pages level pdf = let refnums = Pdf.page_reference_numbers pdf in let fastrefnums = hashtable_of_dictionary (combine refnums (indx refnums)) in setify_preserving_order (option_map (function l when l.Pdfmarks.level = level -> Some (Pdfpage.pagenumber_of_target ~fastrefnums pdf l.Pdfmarks.target) | _ -> None) (Pdfmarks.read_bookmarks ~preserve_actions:false pdf)) let split_at_bookmarks enc original_filename ~squeeze level spec pdf = let pdf_pages = Pdfpage.pages_of_pagetree pdf in let points = bookmark_pages level pdf in let points = lose (fun x -> x <= 0 || x > Pdfpage.endpage pdf) (map pred points) in let pts = splitat points (indx pdf_pages) in fast_write_split_pdfs enc level original_filename squeeze spec pdf pts pdf_pages let split_pdf enc original_filename chunksize linearize ~cpdflin ~squeeze spec pdf = let pdf_pages = Pdfpage.pages_of_pagetree pdf in fast_write_split_pdfs enc 0 original_filename squeeze spec pdf (splitinto chunksize (indx pdf_pages)) pdf_pages (* Given a PDF, write the split as if we had selected pages, and return its filesize. Delete it. *) let split_max_fits pdf s p q = if q < p then error "split_max_fits" else let filename = Filename.temp_file "cpdf" "sm" in let range = ilist p q in let newpdf = Pdfpage.pdf_of_pages ~process_struct_tree:args.process_struct_trees ~retain_numbering:args.retain_numbering pdf range in let r = args.out in args.out <- File filename; write_pdf false newpdf; args.out <- r; let fh = open_in_bin filename in let size = in_channel_length fh in begin try close_in fh; Sys.remove filename with _ -> () end; size <= s (* Binary search on q from current value down to p to find max which fits. Returns q. Upon failure, returns -1 *) let rec split_max_search pdf s b p q = if p = q then if split_max_fits pdf s b q then q else -1 else let half = (q + p) / 2 in if split_max_fits pdf s b (half + 1) then split_max_search pdf s b (half + 1) q else split_max_search pdf s b p half let split_max enc original_filename ~squeeze output_spec s pdf = let outs = ref [] in let p = ref 1 in let endpage = Pdfpage.endpage pdf in let q = ref endpage in while !p < !q || !p = endpage do let newq = split_max_search pdf s !p !p !q in if newq = -1 then (Printf.eprintf "Failed to make small enough split at page %i. No files written.\n" !p; exit 2) else begin (*Printf.printf "Pages %i-%i will fit...\n%!" !p newq;*) outs := ilist !p newq::!outs; p := newq + 1; q := endpage end done; fast_write_split_pdfs enc 0 original_filename squeeze output_spec pdf (rev !outs) (Pdfpage.pages_of_pagetree pdf) let getencryption pdf = match Pdfread.what_encryption pdf with | None | Some Pdfwrite.AlreadyEncrypted -> "Not encrypted" | Some Pdfwrite.PDF40bit -> "40bit" | Some Pdfwrite.PDF128bit -> "128bit" | Some (Pdfwrite.AES128bit true) -> "128bit AES, Metadata encrypted" | Some (Pdfwrite.AES128bit false) -> "128bit AES, Metadata not encrypted" | Some (Pdfwrite.AES256bit true) -> "256bit AES, Metadata encrypted" | Some (Pdfwrite.AES256bit false) -> "256bit AES, Metadata not encrypted" | Some (Pdfwrite.AES256bitISO true) -> "256bit AES ISO, Metadata encrypted" | Some (Pdfwrite.AES256bitISO false) -> "256bit AES ISO, Metadata not encrypted" let write_json output pdf = match output with | NoOutputSpecified -> error "-output-json: no output name specified" | Stdout -> Cpdfjson.to_output (Pdfio.output_of_channel stdout) ~utf8:(args.encoding = Cpdfmetadata.UTF8) ~parse_content:args.jsonparsecontentstreams ~no_stream_data:args.jsonnostreamdata ~decompress_streams:args.jsondecompressstreams ~clean_strings:args.jsoncleanstrings pdf | File filename -> let f = open_out filename in Cpdfjson.to_output (Pdfio.output_of_channel f) ~utf8:(args.encoding = Cpdfmetadata.UTF8) ~parse_content:args.jsonparsecontentstreams ~no_stream_data:args.jsonnostreamdata ~decompress_streams:args.jsondecompressstreams ~clean_strings:args.jsoncleanstrings pdf; close_out f let json_to_output json = function | NoOutputSpecified -> error "no output name specified" | Stdout -> output_string stdout (Cpdfyojson.Safe.pretty_to_string json); | File filename -> let f = open_out filename in output_string f (Cpdfyojson.Safe.pretty_to_string json); close_out f let collate n (names, pdfs, ranges) = let ois = map ref (combine3 names pdfs ranges) in let nis = ref [] in while flatten (map (fun {contents = (_, _, r)} -> r) ois) <> [] do iter (fun ({contents = (name, pdf, range)} as r) -> match range with | [] -> () | l -> if length l > n then begin nis := (name, pdf, take l n)::!nis; r := (name, pdf, drop l n) end else begin nis := (name, pdf, l)::!nis; r := (name, pdf, []) end) ois done; split3 (rev !nis) let warn_prerotate range pdf = if not args.prerotate && not (Cpdfpage.alluprightonly range pdf) then Pdfe.log "Some pages in the range have non-zero rotation. \ Consider adding -prerotate or pre-processing with -upright. \ To silence this warning use -no-warn-rotate\n" let prerotate range pdf = Cpdfpage.upright ~fast:args.fast range pdf let check_bookmarks_mistake () = if args.merge_add_bookmarks_use_titles && not args.merge_add_bookmarks then Pdfe.log "Warning: -merge-add-bookmarks-use-titles is for use with -merge-add-bookmarks\n" let check_clashing_output_name () = match args.out with | File s -> if (List.exists (function (InFile s', _, _, _, _, _) when s = s' -> true | _ -> false) args.inputs) then Pdfe.log "Warning: output file name clashes with input file name. Malformed file may result.\n" | _ -> () let build_enc () = match args.crypt_method with | "" -> None | _ -> Some {Pdfwrite.encryption_method = (match args.crypt_method with | "40bit" -> Pdfwrite.PDF40bit | "128bit" -> Pdfwrite.PDF128bit | "AES" -> Pdfwrite.AES128bit args.encrypt_metadata | "AES256" -> Pdfwrite.AES256bit args.encrypt_metadata | "AES256ISO" -> Pdfwrite.AES256bitISO args.encrypt_metadata | _ -> assert false (* Pre-checked *)); Pdfwrite.owner_password = args.owner; Pdfwrite.user_password = args.user; Pdfwrite.permissions = banlist_of_args ()} let print_obj json pdf objspec = let obj = Cpdftweak.find_obj pdf objspec in let trim s = implode (rev (tl (rev (tl (explode s))))) in if json then print_string (Cpdfyojson.Safe.pretty_to_string (Cpdfjson.json_of_object ~utf8:true pdf (fun _ -> ()) ~no_stream_data:false ~parse_content:false obj)) else print_endline (trim (Printf.sprintf "%S" (Pdfwrite.string_of_pdf obj))) let extract_stream_find_obj pdf objspec = int_of_string objspec let extract_stream pdf decomp objspec = let obj = Cpdftweak.find_obj pdf objspec in Pdf.getstream obj; if decomp then Pdfcodec.decode_pdfstream_until_unknown pdf obj; let data = match obj with | Pdf.Stream {contents = (_, Pdf.Got x)} -> x | _ -> raise (Pdf.PDFError "Stream not found") in match args.out with | NoOutputSpecified -> raise (Pdf.PDFError "No output specified") | File outname -> let fh = open_out_bin outname in output_string fh (Pdfio.string_of_bytes data); close_out fh | Stdout -> output_string stdout (Pdfio.string_of_bytes data) let print_version () = flprint ("cpdf " ^ (if agpl then "AGPL " else "") ^ "Version " ^ string_of_int major_version ^ "." ^ string_of_int minor_version ^ (if minor_minor_version = 0 then "" else "." ^ string_of_int minor_minor_version) ^ " " ^ version_date ^ "\n") (* Call out to GhostScript to rasterize. Read back in and replace the page contents with the resultant PNG. *) let rasterize antialias downsample device res annots quality pdf range = if args.path_to_ghostscript = "" then begin Pdfe.log "Please supply path to gs with -gs\n"; exit 2 end; let tmppdf = Filename.temp_file "cpdf" ".pdf" in tempfiles := tmppdf::!tempfiles; Pdfwrite.pdf_to_file (Pdf.deep_copy pdf) tmppdf; let pdf = Pdfpage.change_pages true pdf (map2 (fun page pnum -> if not (mem pnum range) then page else let tmpout = Filename.temp_file "cpdf" ".png" in tempfiles := tmpout::!tempfiles; let antialias, res = if downsample then ["-dDownScaleFactor=4"], res *. 4. else let bits = if antialias then "4" else "1" in ["-dTextAlphaBits=" ^ bits; "-dGraphicsAlphaBits=" ^ bits], res in let gscall = Filename.quote_command args.path_to_ghostscript ((if args.gs_quiet then ["-dQUIET"] else []) @ antialias @ ["-dBATCH"; "-dNOPAUSE"; "-sDEVICE=" ^ device; "-dUseCropBox"; "-dShowAnnots=" ^ string_of_bool annots; "-dJPEGQ=" ^ string_of_int quality; "-sOutputFile=" ^ tmpout; "-sPageList=" ^ string_of_int pnum; "-r" ^ string_of_float res; tmppdf]) in (*Printf.printf "CALL: %S\n" gscall;*) begin match Sys.command gscall with | 0 -> () | _ -> Pdfe.log "Rasterization failed\n"; exit 2 end; let data = Pdfio.bytes_of_string (Pdfutil.contents_of_file tmpout) in Sys.remove tmpout; let image, _ = (if device = "jpeg" || device = "jpeggray" then Cpdfimage.obj_of_jpeg_data else Cpdfimage.obj_of_png_data) data in let imageobj = Pdf.addobj pdf image in let w, h = match device with | "jpeg" | "jpeggray" -> Cpdfjpeg.jpeg_dimensions data | _ -> let png = Cpdfpng.read_png (Pdfio.input_of_bytes data) in (png.Cpdfpng.width, png.Cpdfpng.height) in let w, h = match page.Pdfpage.rotate with | Pdfpage.Rotate90 | Pdfpage.Rotate270 -> h, w | _ -> w, h in let w, h = if downsample then w * 4, h * 4 else w, h in let (minx, miny, maxx, maxy) = Pdf.parse_rectangle pdf (match Pdf.lookup_direct pdf "/CropBox" page.Pdfpage.rest with | Some r -> r | None -> page.Pdfpage.mediabox) in let rotation = rad_of_deg (float_of_int (Pdfpage.int_of_rotation page.Pdfpage.rotate)) in let tx, ty = match page.Pdfpage.rotate with | Pdfpage.Rotate0 -> (minx, miny) | Pdfpage.Rotate270 -> (minx, miny +. (maxy -. miny)) | Pdfpage.Rotate90 -> (minx +. (maxx -. minx), miny) | Pdfpage.Rotate180 -> (minx +. (maxx -. minx), miny +. (maxy -. miny)) in let ops = [Pdfops.Op_cm (Pdftransform.matrix_of_transform [Pdftransform.Translate (tx, ty); Pdftransform.Scale ((0., 0.), float_of_int w *. 72. /. res, float_of_int h *. 72. /. res); Pdftransform.Rotate ((0., 0.), rotation)]); Pdfops.Op_BMC "/Artifact"; Pdfops.Op_Do "/I0"; Pdfops.Op_EMC] in {page with Pdfpage.content = [Pdfops.stream_of_ops ops]; Pdfpage.resources = Pdf.Dictionary [("/XObject", Pdf.Dictionary [("/I0", Pdf.Indirect imageobj)])]}) (Pdfpage.pages_of_pagetree pdf) (ilist 1 (Pdfpage.endpage pdf))) in let pdf = if annots then Cpdfannot.remove_annotations range pdf else pdf in Sys.remove tmppdf; pdf let write_images device res quality boxname annots antialias downsample spec pdf range = if args.path_to_ghostscript = "" then begin Pdfe.log "Please supply path to gs with -gs\n"; exit 2 end; let tmppdf = Filename.temp_file "cpdf" ".pdf" in tempfiles := tmppdf::!tempfiles; Pdfwrite.pdf_to_file (Pdf.deep_copy pdf) tmppdf; let endpage = Pdfpage.endpage pdf in iter2 (fun page pnum -> if not (mem pnum range) then () else let out = Cpdfbookmarks.name_of_spec Cpdfmetadata.UTF8 [] pdf 0 spec pnum "" 0 0 in let antialias, res = if downsample then ["-dDownScaleFactor=4"], res *. 4. else let bits = if antialias then "4" else "1" in ["-dTextAlphaBits=" ^ bits; "-dGraphicsAlphaBits=" ^ bits], res in let gscall = Filename.quote_command args.path_to_ghostscript ((if args.gs_quiet then ["-dQUIET"] else []) @ (if boxname = None then [] else ["-dUse" ^ (implode (tl (explode (unopt boxname))))]) @ antialias @ ["-dBATCH"; "-dNOPAUSE"; "-sDEVICE=" ^ device; "-dShowAnnots=" ^ string_of_bool annots; "-dJPEGQ=" ^ string_of_int quality; "-sOutputFile=" ^ out; "-sPageList=" ^ string_of_int pnum; "-r" ^ string_of_float res; tmppdf]) in (*Printf.printf "CALL: %S\n" gscall;*) begin match Sys.command gscall with | 0 -> () | _ -> Pdfe.log "Rasterization failed\n"; exit 2 end) (Pdfpage.pages_of_pagetree pdf) (ilist 1 endpage); Sys.remove tmppdf (* Main function *) let go () = check_bookmarks_mistake (); check_clashing_output_name (); match args.op with | Some Version -> print_version () | None | Some Merge -> begin match args.out, args.inputs with | _, (_::_ as inputs) -> let op = match inputs with [_] -> None | _ -> Some Merge in let names, ranges, rotations, _, _, _ = split6 inputs in let pdfs = map2 (fun i -> get_pdf_from_input_kind i op) inputs names in (* If at least one file had object streams and args.preserve_objstm is true, set -objstm-create *) if args.preserve_objstm then iter (fun pdf -> if Hashtbl.length pdf.Pdf.objects.Pdf.object_stream_ids > 0 then args.create_objstm <- true) pdfs; begin match pdfs with | [pdf] -> if hd ranges <> "all" then let range = parse_pagespec pdf (hd ranges) in let newpdf = Pdfpage.pdf_of_pages ~process_struct_tree:args.process_struct_trees ~retain_numbering:args.retain_numbering pdf range in write_pdf false newpdf else write_pdf false pdf | _ -> (* We check permissions. A merge is allowed if each file included was (a) not encrypted (detected by the absence of saved encryption information in the PDF, or (b) decrypted using the owner password (stored in the input) *) if (not args.debugforce) && (not (fold_left ( && ) true (map2 (fun (_, _, _, _, was_dec_with_owner, _) pdf -> !was_dec_with_owner || pdf.Pdf.saved_encryption = None) inputs pdfs))) then soft_error "Merge requires the owner password for all encrypted files, or -decrypt-force." else let pdfs = if args.merge_add_bookmarks then map2 (fun filename pdf -> Cpdfbookmarks.add_bookmark_title filename args.merge_add_bookmarks_use_titles pdf) (map (function InFile s -> s | StdIn -> "" | AlreadyInMemory (_, s) -> s) names) pdfs else pdfs in (* If args.keep_this_id is set, change the ID to the one from the kept one *) let rangenums = map2 parse_pagespec pdfs ranges in (* At this point, we have the information for collation. *) let names = map string_of_input_kind names in let names, pdfs, rangenums = (if args.collate > 0 then collate args.collate else Fun.id) (names, pdfs, rangenums) in let outpdf = Pdfmerge.merge_pdfs args.retain_numbering args.remove_duplicate_fonts ~process_struct_trees:args.process_struct_trees ~add_toplevel_document:(args.subformat = Some Cpdfua.PDFUA2) names pdfs rangenums in if args.remove_duplicate_streams then Pdfmerge.remove_duplicate_fonts outpdf; (* JBIG2 Globals *) write_pdf false outpdf end | _ -> match args.op with | Some Merge -> error "Merge: Must specify one output and at least one input" | None -> error "Must specify one output and at least one input" | _ -> assert false end | Some (CopyFont fromfile) -> begin match args.inputs, args.out with | (_, pagespec, u, o, _, _)::_, _ -> let pdf = get_single_pdf (Some (CopyFont fromfile)) false and frompdf = pdfread_pdf_of_file (optstring u) (optstring o) fromfile in let range = parse_pagespec_allow_empty pdf pagespec in let copyfontname = match args.copyfontname with | Some x -> x | None -> failwith "copy_font: no font name given" in let outpdf = Cpdffont.copy_font frompdf copyfontname args.copyfontpage range pdf in write_pdf true outpdf | _ -> error "copyfont: bad command line" end | Some RemoveFonts -> begin match args.inputs, args.out with | (_, pagespec, _, _, _, _)::_, _ -> let pdf = get_single_pdf (Some RemoveFonts) false in write_pdf true (Cpdffont.remove_fonts pdf) | _ -> error "remove fonts: bad command line" end | Some (ExtractFontFile spec) -> begin match args.inputs, args.out with | (_, pagespec, u, o, _, _)::_, File filename -> let pdf = get_single_pdf (Some (ExtractFontFile spec)) false in begin match String.split_on_char ',' spec with | [pnum; name] -> begin try Cpdffont.extract_fontfile (int_of_string pnum) name filename pdf with Failure _ (*"int_of_string"*) -> error "extract font: bad page number" end | _ -> error "extract font: bad specification" end | _ -> error "extract fontfile: bad command line" end | Some CountPages -> begin match args.inputs with [(ik, _, _, _, _, _) as input] -> let pdf = get_pdf_from_input_kind ~read_lazy:true ~decrypt:false input (Some CountPages) ik in output_page_count pdf | _ -> raise (Arg.Bad "CountPages: must have a single input file only") end | Some Clean -> let pdf' = get_single_pdf (Some Clean) false in write_pdf false pdf' | Some Info -> let pdf, inname, input = match args.inputs with | (InFile inname, _, u, o, _, _) as input::_ -> pdfread_pdf_of_channel_lazy (optstring u) (optstring o) (open_in_bin inname), inname, input | (StdIn, _, u, o, _, _) as input::_ -> pdf_of_stdin u o, "", input | (AlreadyInMemory (pdf, _), _, _, _, _, _) as input::_ -> pdf, "", input | _ -> raise (Arg.Bad "cpdf: No input specified.\n") in let json = ref [] in if args.format_json then json =| ("Encryption", `String (getencryption pdf)) else Printf.printf "Encryption: %s\n" (getencryption pdf); if args.format_json then json =| ("Permissions", `List (map (fun p -> `String (string_of_permission p)) (Pdfread.permissions pdf))) else Printf.printf "Permissions: %s\n" (getpermissions pdf); if inname <> "" then let lin = Pdfread.is_linearized (Pdfio.input_of_channel (open_in_bin inname)) in if args.format_json then json =| ("Linearized", `Bool lin) else Printf.printf "Linearized: %b\n" lin; let objstm = length (list_of_hashtbl pdf.Pdf.objects.Pdf.object_stream_ids) > 0 in if args.format_json then json =| ("Object streams", `Bool objstm) else Printf.printf "Object streams: %b\n" objstm; let ida, idb = match Pdf.lookup_direct pdf "/ID" pdf.Pdf.trailerdict with | Some (Pdf.Array [Pdf.String s; Pdf.String s']) -> (Pdfwrite.make_hex_pdf_string s, Pdfwrite.make_hex_pdf_string s') | _ -> "", "" in let fixid s = implode (rev (tl (rev (tl (explode s))))) in if args.format_json then json =| ("ID", if ida ^ idb = "" then `Null else `List [`String (fixid ida); `String (fixid idb)]) else (if ida ^ idb = "" then Printf.printf "ID: None\n" else Printf.printf "ID: %s %s\n" ida idb); let pdf = decrypt_if_necessary input (Some Info) pdf in if args.format_json then begin Cpdfmetadata.output_info ~json Cpdfmetadata.UTF8 args.output_unit pdf; Cpdfmetadata.output_xmp_info ~json Cpdfmetadata.UTF8 args.output_unit pdf; flprint (Cpdfyojson.Safe.pretty_to_string (`Assoc (rev !json))) end else begin Cpdfmetadata.output_info args.encoding args.output_unit pdf; Cpdfmetadata.output_xmp_info args.encoding args.output_unit pdf end | Some PageInfo -> begin match args.inputs, args.out with | (_, pagespec, _, _, _, _)::_, _ -> let pdf = get_single_pdf args.op true in let range = parse_pagespec_allow_empty pdf pagespec in Cpdfpage.output_page_info ~json:args.format_json args.output_unit pdf range | _ -> error "list-bookmarks: bad command line" end | Some Metadata -> Cpdfmetadata.print_metadata (get_single_pdf (Some Metadata) true) | Some Fonts -> begin match args.inputs, args.out with | (_, pagespec, _, _, _, _)::_, _ -> let pdf = get_single_pdf (Some Fonts) true in let range = parse_pagespec_allow_empty pdf pagespec in Cpdffont.print_fonts ~json:args.format_json pdf range | _ -> error "-list-fonts: bad command line" end | Some ListBookmarks -> begin match args.inputs, args.out with | (_, pagespec, _, _, _, _)::_, _ -> let pdf = get_single_pdf args.op true in let range = parse_pagespec_allow_empty pdf pagespec in Cpdfbookmarks.list_bookmarks ~json:args.format_json ~json_preserve_actions:args.preserve_actions args.encoding range pdf (Pdfio.output_of_channel stdout); flush stdout | _ -> error "list-bookmarks: bad command line" end | Some Crop -> begin match args.inputs, args.out with | (_, pagespec, _, _, _, _)::_, _ -> let pdf = get_single_pdf (Some Crop) false in let xywhlist = Cpdfcoord.parse_rectangles pdf args.rectangle in let range = parse_pagespec_allow_empty pdf pagespec in let pdf = Cpdfpage.crop_pdf xywhlist pdf range in write_pdf false pdf | _ -> error "crop: bad command line" end | Some Art -> begin match args.inputs, args.out with | (_, pagespec, _, _, _, _)::_, _ -> let pdf = get_single_pdf (Some Art) false in let xywhlist = Cpdfcoord.parse_rectangles pdf args.rectangle in let range = parse_pagespec_allow_empty pdf pagespec in let pdf = Cpdfpage.crop_pdf ~box:"/ArtBox" xywhlist pdf range in write_pdf false pdf | _ -> error "art: bad command line" end | Some Bleed -> begin match args.inputs, args.out with | (_, pagespec, _, _, _, _)::_, _ -> let pdf = get_single_pdf (Some Bleed) false in let xywhlist = Cpdfcoord.parse_rectangles pdf args.rectangle in let range = parse_pagespec_allow_empty pdf pagespec in let pdf = Cpdfpage.crop_pdf ~box:"/BleedBox" xywhlist pdf range in write_pdf false pdf | _ -> error "bleed: bad command line" end | Some Trim -> begin match args.inputs, args.out with | (_, pagespec, _, _, _, _)::_, _ -> let pdf = get_single_pdf (Some Trim) false in let xywhlist = Cpdfcoord.parse_rectangles pdf args.rectangle in let range = parse_pagespec_allow_empty pdf pagespec in let pdf = Cpdfpage.crop_pdf ~box:"/TrimBox" xywhlist pdf range in write_pdf false pdf | _ -> error "trim: bad command line" end | Some MediaBox -> begin match args.inputs, args.out with | (_, pagespec, _, _, _, _)::_, _ -> let pdf = get_single_pdf (Some MediaBox) false in let xywhlist = Cpdfcoord.parse_rectangles pdf args.rectangle in let range = parse_pagespec_allow_empty pdf pagespec in let pdf = Cpdfpage.set_mediabox xywhlist pdf range in write_pdf false pdf | _ -> error "set media box: bad command line" end | Some (HardBox box) -> begin match args.inputs, args.out with | (_, pagespec, _, _, _, _)::_, _ -> let pdf = get_single_pdf (Some (HardBox box)) false in let range = parse_pagespec_allow_empty pdf pagespec in let pdf = Cpdfpage.hard_box pdf range box args.mediabox_if_missing args.fast in write_pdf false pdf | _ -> error "hard box: bad command line" end | Some CopyBox -> begin match args.inputs, args.out with | (_, pagespec, _, _, _, _)::_, _ -> let pdf = get_single_pdf (Some CopyBox) false in let range = parse_pagespec_allow_empty pdf pagespec in let f, t = begin match args.frombox, args.tobox with | Some f, Some t -> f, t | _ -> error "Copy box: no tobox or no frombox specified" end in let pdf = Cpdfpage.copy_box f t args.mediabox_if_missing pdf range in write_pdf false pdf | _ -> error "Copy Box: bad command line" end | Some Decompress -> let pdf = get_single_pdf (Some Decompress) false in Pdf.iter_stream (function stream -> try Pdfcodec.decode_pdfstream_until_unknown pdf stream with e -> Pdfe.log (Printf.sprintf "Decode failure: %s. Carrying on...\n" (Printexc.to_string e)); ()) pdf; write_pdf ~is_decompress:true false pdf | Some Compress -> let pdf = get_single_pdf (Some Compress) false in if args.remove_duplicate_streams then Pdfmerge.remove_duplicate_fonts pdf; write_pdf false (Cpdfsqueeze.recompress_pdf pdf) | Some RemoveCrop -> begin match args.inputs, args.out with | (_, pagespec, _, _, _, _)::_, _ -> let pdf = get_single_pdf (Some RemoveCrop) false in let range = parse_pagespec_allow_empty pdf pagespec in let pdf = Cpdfpage.remove_cropping_pdf pdf range in write_pdf false pdf | _ -> error "remove-crop: bad command line" end | Some RemoveArt -> begin match args.inputs, args.out with | (_, pagespec, _, _, _, _)::_, _ -> let pdf = get_single_pdf (Some RemoveArt) false in let range = parse_pagespec_allow_empty pdf pagespec in let pdf = Cpdfpage.remove_art_pdf pdf range in write_pdf false pdf | _ -> error "remove-crop: bad command line" end | Some RemoveTrim -> begin match args.inputs, args.out with | (_, pagespec, _, _, _, _)::_, _ -> let pdf = get_single_pdf (Some RemoveTrim) false in let range = parse_pagespec_allow_empty pdf pagespec in let pdf = Cpdfpage.remove_trim_pdf pdf range in write_pdf false pdf | _ -> error "remove-crop: bad command line" end | Some RemoveBleed -> begin match args.inputs, args.out with | (_, pagespec, _, _, _, _)::_, _ -> let pdf = get_single_pdf (Some RemoveBleed) false in let range = parse_pagespec_allow_empty pdf pagespec in let pdf = Cpdfpage.remove_bleed_pdf pdf range in write_pdf false pdf | _ -> error "remove-crop: bad command line" end | Some (Rotate _) | Some (Rotateby _) -> begin match args.inputs, args.out with | (_, pagespec, _, _, _, _)::_, _ -> let pdf = get_single_pdf args.op false in let range = parse_pagespec_allow_empty pdf pagespec in let rotate = match args.op with | Some (Rotate i) -> Cpdfpage.rotate_pdf i | Some (Rotateby i) -> Cpdfpage.rotate_pdf_by i | _ -> assert false in let pdf = rotate pdf range in write_pdf false pdf | _ -> error "rotate: bad command line" end | Some (RotateContents a) -> begin match args.inputs, args.out with | (_, pagespec, _, _, _, _)::_, _ -> let pdf = get_single_pdf args.op false in let range = parse_pagespec_allow_empty pdf pagespec in let pdf = Cpdfpage.rotate_contents ~fast:args.fast a pdf range in write_pdf false pdf | _ -> error "rotate-contents: bad command line" end | Some Upright -> begin match args.inputs, args.out with | (_, pagespec, _, _, _, _)::_, _ -> let pdf = get_single_pdf args.op false in let range = parse_pagespec_allow_empty pdf pagespec in let pdf = Cpdfpage.upright ~fast:args.fast range pdf in write_pdf false pdf | _ -> error "rotate-contents: bad command line" end | Some ((VFlip | HFlip) as flip) -> begin match args.inputs, args.out with | (_, pagespec, _, _, _, _)::_, _ -> let pdf = get_single_pdf args.op false in let range = parse_pagespec_allow_empty pdf pagespec in let pdf = if flip = VFlip then Cpdfpage.vflip_pdf ~fast:args.fast pdf range else Cpdfpage.hflip_pdf ~fast:args.fast pdf range in write_pdf false pdf | _ -> error "flip: bad command line" end | Some ((SetAuthor _ | SetTitle _ | SetSubject _ | SetKeywords _ | SetCreate _ | SetModify _ | SetCreator _ | SetProducer _ | SetTrapped | SetUntrapped) as op) -> let key, value, version = let f s = if args.encoding <> Cpdfmetadata.Raw then Pdftext.pdfdocstring_of_utf8 s else unescape_octals s in match op with | SetAuthor s -> "/Author", Pdf.String (f s), 0 | SetTitle s -> "/Title", Pdf.String (f s), 1 | SetSubject s -> "/Subject", Pdf.String (f s), 1 | SetKeywords s -> "/Keywords", Pdf.String (f s), 1 | SetCreate s -> "/CreationDate", Pdf.String (Cpdfmetadata.expand_date s), 0 | SetModify s -> "/ModDate", Pdf.String (Cpdfmetadata.expand_date s), 0 | SetCreator s -> "/Creator", Pdf.String (f s), 0 | SetProducer s -> "/Producer", Pdf.String (f s), 0 | SetTrapped -> "/Trapped", Pdf.Boolean true, 3 | SetUntrapped -> "/Trapped", Pdf.Boolean false, 3 | _ -> assert false in let pdf = get_single_pdf args.op false in let version = if args.keepversion || pdf.Pdf.major > 1 then pdf.Pdf.minor else version in write_pdf false (Cpdfmetadata.set_pdf_info ~xmp_also:args.alsosetxml ~xmp_just_set:args.justsetxml (key, value, version) pdf) | Some (SetMetadataDate date) -> write_pdf false (Cpdfmetadata.set_metadata_date (get_single_pdf args.op false) date) | Some ((HideToolbar _ | HideMenubar _ | HideWindowUI _ | FitWindow _ | CenterWindow _ | DisplayDocTitle _) as op) -> begin match args.out with | _ -> let key, value, version = match op with | HideToolbar s -> "/HideToolbar", Pdf.Boolean s, 0 | HideMenubar s -> "/HideMenubar", Pdf.Boolean s, 0 | HideWindowUI s -> "/HideWindowUI", Pdf.Boolean s, 0 | FitWindow s -> "/FitWindow", Pdf.Boolean s, 0 | CenterWindow s -> "/CenterWindow", Pdf.Boolean s, 0 | DisplayDocTitle s -> "/DisplayDocTitle", Pdf.Boolean s, 4 | _ -> assert false in let pdf = get_single_pdf args.op false in let version = if args.keepversion || pdf.Pdf.major > 1 then pdf.Pdf.minor else version in write_pdf false (Cpdfmetadata.set_viewer_preference (key, value, version) pdf) end | Some (OpenAtPage str) -> let pdf = get_single_pdf args.op false in let range = parse_pagespec_allow_empty pdf str in let n = match range with [x] -> x | _ -> error "open_at_page: range does not specify single page" in write_pdf false (Cpdfmetadata.set_open_action pdf false n) | Some (OpenAtPageFit str) -> let pdf = get_single_pdf args.op false in let range = parse_pagespec_allow_empty pdf str in let n = match range with [x] -> x | _ -> error "open_at_page_fit: range does not specify single page" in write_pdf false (Cpdfmetadata.set_open_action pdf true n) | Some (OpenAtPageCustom dest) -> let pdf = get_single_pdf args.op false in write_pdf false (Cpdfmetadata.set_open_action ~dest pdf true 1) | Some (SetMetadata metadata_file) -> write_pdf false (Cpdfmetadata.set_metadata args.keepversion metadata_file (get_single_pdf args.op false)) | Some (SetVersion v) -> let pdf = get_single_pdf args.op false in let pdf = if v >= 10 then {pdf with Pdf.major = 2; Pdf.minor = v - 10} else {pdf with Pdf.major = 1; Pdf.minor = v} in write_pdf false pdf | Some (SetPageLayout s) -> write_pdf false (Cpdfmetadata.set_page_layout (get_single_pdf args.op false) s) | Some (SetPageMode s) -> write_pdf false (Cpdfmetadata.set_page_mode (get_single_pdf args.op false) s) | Some (SetNonFullScreenPageMode s) -> write_pdf false (Cpdfmetadata.set_non_full_screen_page_mode (get_single_pdf args.op false) s) | Some Split -> begin match args.inputs, args.out with | [(f, ranges, _, _, _, _)], File output_spec -> let pdf = get_single_pdf args.op true in let enc = build_enc () in if args.preserve_objstm then args.create_objstm <- true; (* For split, always create if preserving *) split_pdf enc args.original_filename args.chunksize args.linearize ~cpdflin:args.cpdflin ~squeeze:args.squeeze output_spec pdf | _, Stdout -> error "Can't split to standard output" | _, NoOutputSpecified -> error "Split: No output format specified" | _ -> error "Split: bad parameters" end | Some (SplitOnBookmarks level) -> begin match args.out with | File output_spec -> let pdf = get_single_pdf args.op false in let enc = build_enc () in args.create_objstm <- args.preserve_objstm; split_at_bookmarks enc args.original_filename ~squeeze:args.squeeze level output_spec pdf | Stdout -> error "Can't split to standard output" | NoOutputSpecified -> error "Split: No output format specified" end | Some (SplitMax s) -> begin match args.out with | File output_spec -> let pdf = get_single_pdf args.op false in let enc = build_enc () in args.create_objstm <- args.preserve_objstm; split_max enc args.original_filename ~squeeze:args.squeeze output_spec s pdf | Stdout -> error "Can't split to standard output" | NoOutputSpecified -> error "Split: No output format specified" end | Some Spray -> begin match args.inputs, args.out with | (_, pagespec, _, _, _, _)::_, File output_spec -> let pdf = get_single_pdf args.op false in let range = ref (parse_pagespec pdf pagespec) in let enc = build_enc () in let pagenums = map ref (many [] (length !spray_outputs)) in let n = ref 0 in while !range <> [] do List.nth pagenums (!n mod (length !spray_outputs)) =| hd !range; range := tl !range; n += 1; done; let names = rev !spray_outputs in iter (fun x -> if !x = [] then error "Spray: must have at least one page for each output") pagenums; args.create_objstm <- args.preserve_objstm; fast_write_split_pdfs ~names enc 0 args.original_filename args.squeeze output_spec pdf (map rev (map (!) pagenums)) (Pdfpage.pages_of_pagetree pdf) | _, Stdout -> error "Can't spray to standard output" | _, NoOutputSpecified -> error "Spray: No output format specified" | _, _ -> error "Spray: no input" end | Some Presentation -> let pdf = get_single_pdf args.op false in let range = parse_pagespec_allow_empty pdf (get_pagespec ()) in let pdf' = Cpdfpresent.presentation range args.transition args.duration args.horizontal args.inward args.direction args.effect_duration pdf in pdf.Pdf.minor <- if args.keepversion || pdf.Pdf.major > 1 then pdf.Pdf.minor else max pdf.Pdf.minor 1; write_pdf false pdf' | Some ChangeId -> if args.recrypt then soft_error "Cannot recrypt with change id: an id is part of encryption information"; begin match args.inputs, args.out with | [(k, _, _, _, _, _) as input], File s -> let pdf = get_pdf_from_input_kind input args.op k in write_pdf true pdf | [(k, _, _, _, _, _) as input], Stdout -> let pdf = get_pdf_from_input_kind input args.op k in write_pdf true pdf | _ -> error "ChangeId: exactly one input file and output file required." end | Some RemoveId -> if args.recrypt then soft_error "Cannot recrypt with remove id: an id is part of encryption information"; let pdf = get_single_pdf args.op false in pdf.Pdf.trailerdict <- Pdf.remove_dict_entry pdf.Pdf.trailerdict "/ID"; write_pdf false pdf | Some (CopyId getfrom) -> if args.recrypt then soft_error "Cannot recrypt with copy id: an id is part of encryption information"; begin match args.inputs with | [(k, _, u, o, _, _) as input] -> let pdf = Cpdfmetadata.copy_id args.keepversion (pdfread_pdf_of_file (optstring u) (optstring o) getfrom) (get_pdf_from_input_kind input args.op k) in write_pdf false pdf | _ -> error "copy-id: No input file specified" end | Some (ThinLines w) -> let pdf = get_single_pdf args.op false in let range = parse_pagespec_allow_empty pdf (get_pagespec ()) in write_pdf false (Cpdftweak.thinlines range w pdf) | Some BlackText -> let pdf = get_single_pdf args.op false in let range = parse_pagespec_allow_empty pdf (get_pagespec ()) in write_pdf false (Cpdftweak.blacktext args.color range pdf) | Some BlackLines -> let pdf = get_single_pdf args.op false in let range = parse_pagespec_allow_empty pdf (get_pagespec ()) in write_pdf false (Cpdftweak.blacklines args.color range pdf) | Some BlackFills -> let pdf = get_single_pdf args.op false in let range = parse_pagespec_allow_empty pdf (get_pagespec ()) in write_pdf false (Cpdftweak.blackfills args.color range pdf) | Some RemoveAnnotations -> let pdf = get_single_pdf args.op false in let range = parse_pagespec_allow_empty pdf (get_pagespec ()) in write_pdf false (Cpdfannot.remove_annotations range pdf) | Some (CopyAnnotations getfrom) -> begin match args.inputs with | [(k, _, u, o, _, _) as input] -> let input_pdf = get_pdf_from_input_kind input args.op k in let range = parse_pagespec_allow_empty input_pdf (get_pagespec ()) in Cpdfannot.copy_annotations range (pdfread_pdf_of_file (optstring u) (optstring o) getfrom) input_pdf; write_pdf false input_pdf | _ -> error "copy-annotations: No input file specified" end | Some (SetAnnotations json) -> let data = Pdfio.input_of_channel (open_in_bin json) in let pdf = get_single_pdf args.op false in Cpdfannot.set_annotations_json pdf data; write_pdf false pdf | Some ListAnnotations -> let pdf = get_single_pdf args.op true in let range = parse_pagespec_allow_empty pdf (get_pagespec ()) in if args.format_json then flprint (Pdfio.string_of_bytes (Cpdfannot.get_annotations_json pdf range)) else Cpdfannot.list_annotations range args.encoding pdf | Some Shift -> let pdf = get_single_pdf args.op false in let range = parse_pagespec_allow_empty pdf (get_pagespec ()) in let dxdylist = Cpdfcoord.parse_coordinates pdf args.coord in write_pdf false (Cpdfpage.shift_pdf ~fast:args.fast dxdylist pdf range) | Some ShiftBoxes -> let pdf = get_single_pdf args.op false in let range = parse_pagespec_allow_empty pdf (get_pagespec ()) in let dxdylist = Cpdfcoord.parse_coordinates pdf args.coord in write_pdf false (Cpdfpage.shift_boxes dxdylist pdf range) | Some Scale -> let pdf = get_single_pdf args.op false in let range = parse_pagespec_allow_empty pdf (get_pagespec ()) in let sxsylist = Cpdfcoord.parse_coordinates pdf args.coord in write_pdf false (Cpdfpage.scale_pdf ~fast:args.fast sxsylist pdf range) | Some ScaleToFit -> let pdf = get_single_pdf args.op false in let range = parse_pagespec_allow_empty pdf (get_pagespec ()) in warn_prerotate range pdf; let pdf = if args.prerotate then prerotate range pdf else pdf in let xylist = Cpdfcoord.parse_coordinates pdf args.coord and scale = args.scale in write_pdf false (Cpdfpage.scale_to_fit_pdf ~fast:args.fast args.position scale xylist args.op pdf range) | Some Stretch -> let pdf = get_single_pdf args.op false in let range = parse_pagespec_allow_empty pdf (get_pagespec ()) in warn_prerotate range pdf; let pdf = if args.prerotate then prerotate range pdf else pdf in let xylist = Cpdfcoord.parse_coordinates pdf args.coord in write_pdf false (Cpdfpage.stretch ~fast:args.fast xylist pdf range) | Some CenterToFit -> let pdf = get_single_pdf args.op false in let range = parse_pagespec_allow_empty pdf (get_pagespec ()) in warn_prerotate range pdf; let pdf = if args.prerotate then prerotate range pdf else pdf in let xylist = Cpdfcoord.parse_coordinates pdf args.coord in write_pdf false (Cpdfpage.center_to_fit xylist pdf range) | Some (ScaleContents scale) -> let pdf = get_single_pdf args.op false in let range = parse_pagespec_allow_empty pdf (get_pagespec ()) in write_pdf false (Cpdfpage.scale_contents ~fast:args.fast args.position scale pdf range) | Some ListAttachedFiles -> let pdf = get_single_pdf args.op false in let attachments = Cpdfattach.list_attached_files pdf in iter (fun a -> Printf.printf "%i %s\n" a.Cpdfattach.pagenumber a.Cpdfattach.name) attachments; flprint "" | Some DumpAttachedFiles -> let pdf = get_single_pdf args.op false in begin match args.out with | NoOutputSpecified -> Cpdfattach.dump_attached_files pdf "" | File n -> Cpdfattach.dump_attached_files pdf n | Stdout -> error "Can't dump attachments to stdout" end | Some RemoveAttachedFiles -> write_pdf false (Cpdfattach.remove_attached_files (get_single_pdf args.op false)) | Some (AttachFile files) -> begin match args.inputs with | [(k, _, _, _, _, _) as input] -> let pdf = get_pdf_from_input_kind input args.op k in let topage = try match args.topage with | None -> None | Some "end" -> Some (Pdfpage.endpage pdf) | Some s -> Some (int_of_string s) with _ -> error "Bad -to-page" in let pdf = fold_left (Cpdfattach.attach_file args.keepversion topage) pdf (rev files) in write_pdf false pdf | _ -> error "attach file: No input file specified" end | Some PadBefore -> let pdf = get_single_pdf args.op false in let range = parse_pagespec_allow_empty pdf (get_pagespec ()) in let padwith = match args.padwith with None -> None | Some filename -> Some (pdfread_pdf_of_file None None filename) in write_pdf false (Cpdfpad.padbefore ?padwith range pdf) | Some PadAfter -> let pdf = get_single_pdf args.op false in let range = parse_pagespec_allow_empty pdf (get_pagespec ()) in let padwith = match args.padwith with None -> None | Some filename -> Some (pdfread_pdf_of_file None None filename) in write_pdf false (Cpdfpad.padafter ?padwith range pdf) | Some (PadEvery n) -> let pdf = get_single_pdf args.op false in let range = match keep (function m -> m mod n = 0) (ilist 1 (Pdfpage.endpage pdf)) with | [] -> [] | l -> if last l = Pdfpage.endpage pdf then all_but_last l else l in let padwith = match args.padwith with None -> None | Some filename -> Some (pdfread_pdf_of_file None None filename) in write_pdf false (Cpdfpad.padafter ?padwith range pdf) | Some (PadMultiple n) -> let pdf = get_single_pdf args.op false in write_pdf false (Cpdfpad.padmultiple n pdf) | Some (PadMultipleBefore n) -> let pdf = get_single_pdf args.op false in write_pdf false (Cpdfpad.padmultiple (-n) pdf) | Some Draft -> let pdf = get_single_pdf args.op false in let range = parse_pagespec_allow_empty pdf (get_pagespec ()) in write_pdf false (Cpdfdraft.draft args.removeonly args.boxes range pdf) | Some (AddText text) -> let pdf = get_single_pdf args.op false in let range = parse_pagespec_allow_empty pdf (get_pagespec ()) in let cpdffont = embed_font () in warn_prerotate range pdf; let pdf = if args.prerotate then prerotate range pdf else pdf and filename = match args.inputs with | (InFile inname, _, _, _, _, _)::_ -> inname | _ -> "" in write_pdf false (Cpdfaddtext.addtexts args.linewidth args.outline args.fast args.fontname cpdffont args.bates args.batespad args.color args.position args.linespacing args.fontsize args.underneath text range args.relative_to_cropbox args.opacity args.justification args.midline args.topline filename args.extract_text_font_size args.coord ~raw:(args.encoding = Raw) pdf) | Some RemoveText -> let pdf = get_single_pdf args.op false in let range = parse_pagespec_allow_empty pdf (get_pagespec ()) in write_pdf false (Cpdfremovetext.removetext range pdf) | Some AddRectangle -> let pdf = get_single_pdf args.op false in let range = parse_pagespec_allow_empty pdf (get_pagespec ()) in write_pdf false (Cpdfaddtext.addrectangle args.fast (Cpdfcoord.parse_coordinate pdf args.coord) args.color args.outline args.linewidth args.opacity args.position args.relative_to_cropbox args.underneath range pdf) | Some (AddBookmarks file) -> write_pdf false (Cpdfbookmarks.add_bookmarks ~json:args.format_json true (Pdfio.input_of_channel (open_in_bin file)) (get_single_pdf args.op false)) | Some RemoveBookmarks -> write_pdf false (Pdfmarks.remove_bookmarks (get_single_pdf args.op false)) | Some TwoUp -> write_pdf false (Cpdfimpose.twoup ~process_struct_tree:args.process_struct_trees args.fast (get_single_pdf args.op false)) | Some TwoUpStack -> write_pdf false (Cpdfimpose.twoup_stack ~process_struct_tree:args.process_struct_trees args.fast (get_single_pdf args.op false)) | Some Impose fit -> let pdf = get_single_pdf args.op false in let x, y = Cpdfcoord.parse_coordinate pdf args.coord in if not fit && (x < 0.0 || y < 0.0) then error "Negative imposition parameters not allowed." else write_pdf false (Cpdfimpose.impose ~process_struct_tree:args.process_struct_trees ~x ~y ~fit ~columns:args.impose_columns ~rtl:args.impose_rtl ~btt:args.impose_btt ~center:args.impose_center ~margin:args.impose_margin ~spacing:args.impose_spacing ~linewidth:args.impose_linewidth ~fast:args.fast pdf) | Some (StampOn over) -> let overpdf = match over with | "stamp_use_stdin" -> pdf_of_stdin "" "" | x -> pdfread_pdf_of_file None None x in let pdf = get_single_pdf args.op false in let range = parse_pagespec_allow_empty pdf (get_pagespec ()) in let pdf = Cpdfpage.stamp ~process_struct_tree:args.process_struct_trees args.relative_to_cropbox args.position args.topline args.midline args.fast args.scale_stamp_to_fit true range overpdf pdf in write_pdf false pdf | Some (StampUnder under) -> let underpdf = match under with | "stamp_use_stdin" -> pdf_of_stdin "" "" | x -> pdfread_pdf_of_file None None x in let pdf = get_single_pdf args.op false in let range = parse_pagespec_allow_empty pdf (get_pagespec ()) in let pdf = Cpdfpage.stamp ~process_struct_tree:args.process_struct_trees args.relative_to_cropbox args.position args.topline args.midline args.fast args.scale_stamp_to_fit false range underpdf pdf in write_pdf false pdf | Some (CombinePages over) -> let underpdf = get_single_pdf args.op false in let overpdf = pdfread_pdf_of_file None None over in warn_prerotate (parse_pagespec underpdf "all") underpdf; warn_prerotate (parse_pagespec overpdf "all") overpdf; write_pdf false (Cpdfpage.combine_pages ~process_struct_tree:args.process_struct_trees args.fast (prerotate (parse_pagespec underpdf "all") underpdf) (prerotate (parse_pagespec overpdf "all") overpdf) args.scale_stamp_to_fit args.underneath) | Some Encrypt -> let pdf = get_single_pdf args.op false in let pdf = Cpdfsqueeze.recompress_pdf pdf and encryption = build_enc () in Pdf.remove_unreferenced pdf; if not args.keepversion then begin let newversion = match args.crypt_method with "40bit" -> 1 | "128bit" -> 4 | "AES" -> 6 | "AES256" | "AES256ISO" -> 7 | _ -> 0 in let newversion = if args.create_objstm then 5 else newversion in if pdf.Pdf.major = 1 then pdf.Pdf.minor <- max pdf.Pdf.minor newversion end; write_pdf ~encryption false pdf | Some Decrypt -> args.recrypt <- false; write_pdf false (get_single_pdf args.op false) | Some RemoveMetadata -> write_pdf false (Cpdfmetadata.remove_metadata (get_single_pdf args.op false)) | Some ExtractImages -> let output_spec = begin match args.out with | File output_spec -> output_spec | _ -> "" end in let pdf = get_single_pdf args.op true in let range = parse_pagespec_allow_empty pdf (get_pagespec ()) in Cpdfimage.extract_images ~raw:(args.encoding = Cpdfmetadata.Raw) ?path_to_p2p:(match args.path_to_p2p with "" -> None | x -> Some x) ?path_to_im:(match args.path_to_im with "" -> None | x -> Some x) args.encoding args.dedup args.dedup_per_page pdf range output_spec | Some (ImageResolution f) -> let pdf = get_single_pdf args.op true in let range = parse_pagespec_allow_empty pdf (get_pagespec ()) in if args.format_json then flprint (Pdfio.string_of_bytes (Cpdfimage.image_resolution_json pdf range f)) else let images = Cpdfimage.image_resolution pdf range f in iter (function (pagenum, xobject, w, h, wdpi, hdpi, objnum) -> Printf.printf "%i, %s, %i, %i, %f, %f, %i\n" pagenum xobject w h wdpi hdpi objnum) images | Some ListImages -> let pdf = get_single_pdf args.op true in let range = parse_pagespec_allow_empty pdf (get_pagespec ()) in let json = Cpdfimage.images pdf range in if args.format_json then flprint (Cpdfyojson.Safe.pretty_to_string json) else begin match json with | `List l -> iter (function (`Assoc [(_, `Int i); (_, `List pages); (_, `String name); (_, `Int w); (_, `Int h); (_, `Int size); (_, bpc); (_, cs); (_, filter)]) -> let pages = combine_with_spaces (map (function `Int i -> string_of_int i | _ -> "") pages) in let filter = match filter with `String s -> s | _ -> "none" in let bpc = match bpc with `Int bpc -> string_of_int bpc | _ -> "none" in let cs = match cs with `String cs -> cs | _ -> "none" in flprint (Printf.sprintf "%i, %s, %s, %i, %i, %i, %s, %s, %s\n" i pages name w h size bpc cs filter) | _ -> ()) l | _ -> () end | Some MissingFonts -> let pdf = get_single_pdf args.op true in let range = parse_pagespec_allow_empty pdf (get_pagespec ()) in Cpdffont.missing_fonts pdf range | Some ExtractText -> let pdf = get_single_pdf args.op true in let range = parse_pagespec_allow_empty pdf (get_pagespec ()) in let text = Cpdfextracttext.extract_text args.extract_text_font_size pdf range in begin match args.out with | File filename -> let fh = open_out_bin filename in output_string fh text; close_out fh | NoOutputSpecified | Stdout -> print_string text; print_newline () end | Some AddPageLabels -> let pdf = get_single_pdf args.op false in let range = parse_pagespec pdf (get_pagespec ()) in Cpdfpagelabels.add_page_labels pdf args.labelsprogress args.labelstyle args.labelprefix args.labelstartval range; write_pdf false pdf | Some RemovePageLabels -> let pdf = get_single_pdf args.op false in Pdfpagelabels.remove pdf; write_pdf false pdf | Some PrintPageLabels -> let pdf = get_single_pdf args.op true in if args.format_json then let json_of_pagelabel l = `Assoc [("labelstyle", `String (Pdfpagelabels.string_of_labelstyle l.Pdfpagelabels.labelstyle)); ("labelprefix", begin match l.Pdfpagelabels.labelprefix with None -> `Null | Some s -> `String s end); ("startpage", `Int l.Pdfpagelabels.startpage); ("startvalue", `Int l.Pdfpagelabels.startvalue)] in flprint (Cpdfyojson.Safe.pretty_to_string (`List (map json_of_pagelabel (Pdfpagelabels.read pdf)))) else iter print_string (map Pdfpagelabels.string_of_pagelabel (Pdfpagelabels.read pdf)) | Some (RemoveDictEntry key) -> let pdf = get_single_pdf args.op true in Cpdfutil.remove_dict_entry pdf key args.dict_entry_search; write_pdf false pdf | Some (ReplaceDictEntry key) -> let pdf = get_single_pdf args.op true in Cpdfutil.replace_dict_entry pdf key args.replace_dict_entry_value args.dict_entry_search; write_pdf false pdf | Some (PrintDictEntry key) -> let pdf = get_single_pdf args.op true in if args.format_json then print_string (Pdfio.string_of_bytes (Cpdftweak.get_dict_entries ~utf8:(args.encoding = Cpdfmetadata.UTF8) pdf key)) else Cpdftweak.print_dict_entry ~utf8:(args.encoding = Cpdfmetadata.UTF8) pdf key | Some ListSpotColours -> let pdf = get_single_pdf args.op false in Cpdfspot.list_spot_colours pdf | Some RemoveClipping -> let pdf = get_single_pdf args.op false in let range = parse_pagespec_allow_empty pdf (get_pagespec ()) in write_pdf false (Cpdftweak.remove_clipping pdf range) | Some CreateMetadata -> let pdf = get_single_pdf args.op false in write_pdf false (Cpdfmetadata.create_metadata pdf) | Some EmbedMissingFonts -> let fi = match args.inputs with [(InFile fi, _, _, _, _, _)] -> fi | _ -> error "Input method not supported for -embed-missing-fonts" in let fo = match args.out with File fo -> fo | _ -> error "Output method not supported for -embed-missing-fonts" in Cpdffont.embed_missing_fonts args.path_to_ghostscript args.gs_quiet fi fo | Some (BookmarksOpenToLevel n) -> let pdf = get_single_pdf args.op false in write_pdf false (Cpdfbookmarks.bookmarks_open_to_level n pdf) | Some CreatePDF -> begin match args.subformat with | Some Cpdfua.PDFUA1 -> begin match args.title with None -> error "Provide -title" | _ -> () end; let pdf = Cpdfua.create_pdfua1 (unopt args.title) args.createpdf_pagesize args.createpdf_pages in write_pdf false pdf | Some Cpdfua.PDFUA2 -> begin match args.title with None -> error "Provide -title" | _ -> () end; let pdf = Cpdfua.create_pdfua2 (unopt args.title) args.createpdf_pagesize args.createpdf_pages in write_pdf false pdf | None -> let pdf = Cpdfcreate.blank_document_paper args.createpdf_pagesize args.createpdf_pages in write_pdf false pdf end | Some RemoveAllText -> let pdf = get_single_pdf args.op false in let range = parse_pagespec_allow_empty pdf (get_pagespec ()) in write_pdf false (Cpdfremovetext.remove_all_text range pdf) | Some ShowBoxes -> let pdf = get_single_pdf args.op false in let range = parse_pagespec_allow_empty pdf (get_pagespec ()) in write_pdf false (Cpdfpage.show_boxes pdf range) | Some TrimMarks -> let pdf = get_single_pdf args.op false in let range = parse_pagespec_allow_empty pdf (get_pagespec ()) in write_pdf false (Cpdfpage.trim_marks pdf range) | Some (Postpend s | Prepend s as x) -> let pdf = get_single_pdf args.op false in let range = parse_pagespec_allow_empty pdf (get_pagespec ()) in let before = match x with Prepend _ -> true | _ -> false in write_pdf false (Cpdftweak.append_page_content s before args.fast range pdf) | Some OutputJSON -> let pdf = get_single_pdf args.op false in write_json args.out pdf | Some OCGCoalesce -> let pdf = get_single_pdf args.op false in Cpdfocg.ocg_coalesce pdf; write_pdf false pdf | Some OCGList -> let pdf = get_single_pdf args.op true in Cpdfocg.ocg_list pdf | Some OCGRename -> let pdf = get_single_pdf args.op false in Cpdfocg.ocg_rename args.ocgrenamefrom args.ocgrenameto pdf; write_pdf false pdf | Some OCGOrderAll -> let pdf = get_single_pdf args.op false in Cpdfocg.ocg_order_all pdf; write_pdf false pdf | Some (StampAsXObject stamp) -> let stamp_pdf = match stamp with | "stamp_use_stdin" -> pdf_of_stdin "" "" | x -> pdfread_pdf_of_file None None x in let pdf = get_single_pdf args.op false in let range = parse_pagespec_allow_empty pdf (get_pagespec ()) in let pdf, xobj_name = Cpdfxobject.stamp_as_xobject pdf range stamp_pdf in Printf.printf "%s\n" xobj_name; flush stdout; write_pdf false pdf | Some (PrintFontEncoding fontname) -> let pdf = get_single_pdf args.op true in Cpdffont.print_font_table pdf fontname args.copyfontpage | Some TableOfContents -> let pdf = get_single_pdf args.op false in let cpdffont = embed_font () in let pdf = Cpdftoc.typeset_table_of_contents ~font:cpdffont ~fontsize:args.fontsize ~title:args.toc_title ~bookmark:args.toc_bookmark ~dotleader:args.dot_leader ~process_struct_tree:args.process_struct_trees ?subformat:args.subformat pdf in write_pdf false pdf | Some (Typeset filename) -> let text = Pdfio.bytes_of_input_channel (open_in_bin filename) in let cpdffont = embed_font () in let pdf = Cpdftexttopdf.typeset ~process_struct_tree:args.process_struct_trees ?subformat:args.subformat ?title:args.title ~font:cpdffont ~papersize:args.createpdf_pagesize ~fontsize:args.fontsize text in write_pdf false pdf | Some (TextWidth s) -> let rawwidth = match args.font with | StandardFont f -> Pdfstandard14.textwidth false WinAnsiEncoding f s | _ -> error "-text-width only works for the standard 14 fonts" in let w = (float rawwidth *. args.fontsize) /. 1000. in Printf.printf "%f\n" w | Some Draw -> let pdf = get_single_pdf args.op false in let range = parse_pagespec_allow_empty pdf (get_pagespec ()) in let ops = match !Cpdfdrawcontrol.drawops with [("_MAIN", ops)] -> rev ops | _ -> error "not enough -end-xobj or -et" in write_pdf false (Cpdfdraw.draw ~struct_tree:args.draw_struct_tree ~fast:args.fast ~underneath:args.underneath ~filename:args.original_filename ~bates:args.bates ~batespad:args.batespad range pdf ops) | Some (Composition json) -> let pdf = get_single_pdf args.op false in let filesize = match args.inputs with | (InFile inname, _, _, _, _, _)::_ -> filesize inname | _ -> 0 in Cpdfcomposition.show_composition filesize json pdf | Some (Chop (x, y)) -> let pdf = get_single_pdf args.op false in let range = parse_pagespec_allow_empty pdf (get_pagespec ()) in write_pdf false (Cpdfchop.chop ~x ~y ~columns:args.impose_columns ~btt:args.impose_btt ~rtl:args.impose_rtl pdf range) | Some (ChopHV (is_h, line)) -> let pdf = get_single_pdf args.op false in let range = parse_pagespec_allow_empty pdf (get_pagespec ()) in write_pdf false (Cpdfchop.chop_hv ~is_h ~line ~columns:args.impose_columns pdf range) | Some ProcessImages -> let pdf = get_single_pdf args.op false in let range = parse_pagespec_allow_empty pdf (get_pagespec ()) in Cpdfimage.process ~q:args.jpegquality ~qlossless:args.jpegqualitylossless ~onebppmethod:args.onebppmethod ~jbig2_lossy_threshold:args.jbig2_lossy_threshold ~length_threshold:args.length_threshold ~percentage_threshold:args.percentage_threshold ~pixel_threshold:args.pixel_threshold ~dpi_threshold:args.dpi_threshold ~factor:args.resample_factor ~interpolate:args.resample_interpolate ~jpeg_to_jpeg_scale:args.jpegtojpegscale ~jpeg_to_jpeg_dpi:args.jpegtojpegdpi ~path_to_jbig2enc:args.path_to_jbig2enc ~path_to_convert:args.path_to_im range pdf; write_pdf false pdf | Some (ExtractStream s) -> let pdf = get_single_pdf args.op true in extract_stream pdf args.extract_stream_decompress s | Some (ReplaceStream s) -> let pdf = get_single_pdf args.op false in Cpdftweak.replace_stream pdf s args.replace_stream_with; write_pdf false pdf | Some (PrintObj s) -> let pdf = get_single_pdf args.op true in print_obj args.format_json pdf s | Some (ReplaceObj (a, b)) -> let pdf = get_single_pdf args.op false in let pdfobj = pdf_or_json b in Cpdftweak.replace_obj pdf a pdfobj; write_pdf false pdf | Some (RemoveObj s) -> let pdf = get_single_pdf args.op true in Cpdftweak.remove_obj pdf s; write_pdf false pdf | Some (Verify standard) -> begin match standard with | "PDF/UA-1(matterhorn)" -> let pdf = get_single_pdf args.op false in let testname = match args.verify_single with None -> "" | Some x -> x in if args.format_json then flprint (Cpdfyojson.Safe.pretty_to_string (Cpdfua.test_matterhorn_json pdf testname)) else Cpdfua.test_matterhorn_print pdf testname | _ -> error "Unknown verification type." end | Some (MarkAs standard) -> begin match standard with | Cpdfua.PDFUA1 -> let pdf = get_single_pdf args.op false in Cpdfua.mark pdf; write_pdf false pdf | Cpdfua.PDFUA2 -> let pdf = get_single_pdf args.op false in Cpdfua.mark2 2024 pdf; write_pdf false pdf end | Some (RemoveMark standard) -> begin match standard with | Cpdfua.PDFUA1 | Cpdfua.PDFUA2 -> let pdf = get_single_pdf args.op false in Cpdfua.remove_mark pdf; write_pdf false pdf end | Some PrintStructTree -> let pdf = get_single_pdf args.op true in Cpdfua.print_struct_tree pdf | Some ExtractStructTree -> let pdf = get_single_pdf args.op true in let json = Cpdfua.extract_struct_tree pdf in json_to_output json args.out | Some (ReplaceStructTree s) -> let pdf = get_single_pdf args.op false in let json = Cpdfyojson.Safe.from_file s in Cpdfua.replace_struct_tree pdf json; write_pdf false pdf | Some RemoveStructTree -> let pdf = get_single_pdf args.op false in let pdf = Cpdfpage.remove_struct_tree pdf in write_pdf false pdf | Some MarkAsArtifact -> let pdf = get_single_pdf args.op false in let pdf = Cpdfpage.mark_all_as_artifact pdf in write_pdf false pdf | Some (SetLanguage s) -> let pdf = get_single_pdf args.op false in Cpdfmetadata.set_language pdf s; write_pdf false pdf | Some Redact -> let pdf = get_single_pdf args.op false in let range = parse_pagespec_allow_empty pdf (get_pagespec ()) in write_pdf false (Cpdfpage.redact ~process_struct_tree:args.process_struct_trees pdf range) | Some Rasterize -> let pdf = get_single_pdf args.op false in let range = parse_pagespec_allow_empty pdf (get_pagespec ()) in write_pdf false (rasterize args.rast_antialias args.rast_downsample args.rast_device args.rast_res args.rast_annots args.rast_jpeg_quality pdf range) | Some OutputImage -> let spec = match args.out with File spec -> spec | _ -> error "Output must be to a file" in let pdf = get_single_pdf args.op false in let range = parse_pagespec_allow_empty pdf (get_pagespec ()) in write_images args.rast_device args.rast_res args.rast_jpeg_quality args.tobox args.rast_annots args.rast_antialias args.rast_downsample spec pdf range (* Advise the user if a combination of command line flags makes little sense, or error out if it make no sense at all. *) let check_command_line () = if args.gs_malformed && !Pdfread.error_on_malformed then error "Setting both -gs-malformed and -error-on-malformed makes no sense" let parse_argv () s specs anon_fun usage_msg = if args.debug then Array.iter (fun s -> Pdfe.log (Printf.sprintf "arg: %s\n" s)) Sys.argv; Arg.parse_argv ~current:(ref 0) s specs anon_fun usage_msg; check_command_line () let align_specs s = Arg.align s (* The old -control mechanism clashed with AND, but must be retained for backwards compatibility. There is a new mechanism -args file which performs direct textual substitution of the file, before any expansion of ANDs *) let rec expand_args_inner prev = function [] -> rev prev | "-args"::filename::r -> expand_args_inner (rev (parse_control_file filename) @ prev) r | "-args-json"::filename::r -> expand_args_inner (rev (parse_control_file_json filename) @ prev) r | h::t -> expand_args_inner (h::prev) t let expand_args argv = let l = Array.to_list argv in Array.of_list (expand_args_inner [] l) let gs_malformed_force fi fo = if args.path_to_ghostscript = "" then begin Pdfe.log "Please supply path to gs with -gs\n"; exit 2 end; let gscall = Filename.quote_command args.path_to_ghostscript ((if args.gs_quiet then ["-dQUIET"] else []) @ ["-dNOPAUSE"; "-sDEVICE=pdfwrite"; "-sOUTPUTFILE=" ^ fo; "-dBATCH"; fi]) in match Sys.command gscall with | 0 -> exit 0 | _ -> Pdfe.log "Failed to mend file.\n"; exit 2 let process_env_vars () = match Sys.getenv_opt "CPDF_DEBUG" with | Some "true" -> args.debug <- true | Some "false" -> args.debug <- false | _ -> () (* Main function. *) let go_withargv argv = (* Check for the standalone -gs-malformed-force special command line. This * has exactly one file input and exactly one output and just -gs <gs> * -gs-malformed-force between. *) match argv with | [|_|] -> print_version () | [|_; inputfilename; "-gs"; gslocation; "-gs-malformed-force"; "-o"; outputfilename|] -> args.path_to_ghostscript <- gslocation; ignore (gs_malformed_force inputfilename outputfilename); exit 0 | [|_; inputfilename; "-gs"; gslocation; "-gs-malformed-force"; "-o"; outputfilename; "-gs-quiet"|] -> args.path_to_ghostscript <- gslocation; args.gs_quiet <- true; ignore (gs_malformed_force inputfilename outputfilename); exit 0 | _ -> Hashtbl.clear filenames; if demo then flprint "This demo functions normally, but is for evaluation only. https://www.coherentpdf.com/\n"; try (* Pre-expand -args *) let argv = expand_args argv in (* Split the arguments into sets either side of ANDs *) let sets = let args = (map (fun l -> "cpdf"::l) (split_around (eq "AND") (tl (Array.to_list argv)))) in match args with | [] -> [] | _ -> combine (map Array.of_list args) (map (eq (length args)) (ilist 1 (length args))) in iter (fun (s, islast) -> (*Printf.printf "AND:%b, %s\n" islast (Array.fold_left (fun x y -> x ^ " " ^ y) "" s); flprint "\n";*) reset_arguments (); Cpdfdrawcontrol.drawops := [("_MAIN", [])]; process_env_vars (); parse_argv () s (align_specs specs) anon_fun usage_msg; let addrange pdf = AlreadyInMemory (pdf, "fromAND"), args.dashrange, "", "", ref false, None in args.inputs <- rev (map addrange !output_pdfs) @ rev args.inputs; output_pdfs := []; go ()) sets; flush stdout; (*r for Windows *) exit 0 with | Arg.Bad s -> Pdfe.log (implode (takewhile (neq '\n') (explode s)) ^ " Use -help for help.\n\n"); if not !stay_on_error then exit 2 else raise StayOnError | Arg.Help _ -> Arg.usage (align_specs specs) usage_msg; flush stderr (*r for Windows *) | Sys_error s as e -> Pdfe.log (s ^ "\n\n"); if not !stay_on_error then (if args.debug then raise e else exit 2) else raise StayOnError | Pdf.PDFError s as e -> Pdfe.log ("cpdf encountered an error. Technical details follow:\n\n" ^ s ^ "\n\n"); if not !stay_on_error then if args.debug then raise e else exit 2 else raise StayOnError | Cpdferror.SoftError s -> soft_error s | Cpdferror.HardError s -> error s | e -> Pdfe.log ("cpdf encountered an unexpected error. Technical Details follow:\n" ^ Printexc.to_string e ^ "\n\n"); if not !stay_on_error then (if args.debug then raise e else exit 2) else raise StayOnError let go () = go_withargv Sys.argv �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/cpdfshape.ml�����������������������������������������������������������������������������0000664�0001750�0001750�00000006261�14771516640�013425� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(* Stroking lines and making shapes *) (* This module provides for the stroking of lines, and production of shape primitives (circles, regular polygons etc). *) open Pdfutil type fpoint = float * float type winding_rule = EvenOdd | NonZero type segment = | Straight of fpoint * fpoint | Bezier of fpoint * fpoint * fpoint * fpoint (* Each segment list may be marked as a hole or not. *) type hole = Hole | Not_hole (* A [subpath] is either closed or open. *) type closure = Closed | Open (* A [subpath] is the pair of a hole and a list of segments. *) type subpath = hole * closure * segment list (* A path is made from a number of subpaths. *) type path = winding_rule * subpath list (* \section{Common geometric functions} *) (* The factor by which we multiply the radius to find the length of the bezier control lines when approximating quarter arcs to make semicircles and circles. *) let kappa = ((sqrt 2. -. 1.) /. 3.) *. 4. (* Restrict an angle [a] to one of those at $s, 2s, 3s\ldots$. We find the two candidate angles, and see which [a] is numerically closer to. The candidate points are taken modulo $2\pi$ for this to work. *) let restrict_angle s a = let p = mod_float (floor (a /. s) *. s) (2. *. pi) in let p' = mod_float (p +. s) (2. *. pi) in if abs_float (p -. a) < abs_float (p' -. a) then p else p' (* Some Useful Shapes *) (* Make a quarter-circle from a single bezier curve from [s] to $(s + \pi / 2) \bmod 2\pi$ with centre [c] and radius [r]. We cheat by making the standard quarter from [(1, 0)] to [(0, 1)] and rotating using the [Transform] module. *) let quarter s (cx, cy) r = let standard_quarter_points = [(1., 0.); (1., kappa); (kappa, 1.); (0., 1.)] and transform = [Pdftransform.Translate(cx, cy); Pdftransform.Scale((0., 0.), r, r); Pdftransform.Rotate((0., 0.), s)] in match map (Pdftransform.transform transform) standard_quarter_points with | [p; q; r; s] -> Bezier(p, q, r, s) | _ -> raise (Pdf.PDFError ("Shapes.quarter: inconsistency")) (* Some of the following functions generate what is supposed to be a connected list of segments. However, since they operate by calculating each segment seperately, floating point inaccuracies can arise, making the end of one segment misalign with the start of the next. This function corrects the defect by copying the end of one segment to the beginning of the next. We only need to deal with bezier segments for now. *) let rec joinsegs segments = match segments with | [] -> [] | [x] -> [x] | Bezier(_, _, _, d) as s::Bezier(_, b', c', d')::rest -> s::joinsegs (Bezier(d, b', c', d')::rest) | _ -> raise (Pdf.PDFError "PDFShapes.joinsegs: Segment not supported") (* Approximate a circle using four bezier curves.*) let circle x y r = NonZero, [(Not_hole, Closed, joinsegs [quarter 0. (x, y) r; quarter (pi /. 2.) (x, y) r; quarter pi (x, y) r; quarter (3. *. pi /. 2.) (x, y) r ])] let rectangle x y w h = (EvenOdd, ([(Not_hole, Closed, [Straight ((x, y), (x +. w, y)); Straight ((x +. w, y), (x +. w, y +. h)); Straight ((x +. w, y +. h), (x, y +. h)); Straight ((x, y +. h), (x, y))])])) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/cpdfcoord.mli����������������������������������������������������������������������������0000664�0001750�0001750�00000001274�14771516640�013603� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(** Parsing coordinates, numbers, positions etc.*) (** See cpdfmanual.pdf for examples of things these functions can parse, such as page sizes. *) (** Read a single rectangles from a string. *) val parse_rectangle : Pdf.t -> string -> (float * float * float * float) (** Read a list of rectangles from a string. *) val parse_rectangles : Pdf.t -> string -> (float * float * float * float) list (** Read a coordinate from a string *) val parse_coordinate : Pdf.t -> string -> float * float (** Read a list of coordinates from a string *) val parse_coordinates : Pdf.t -> string -> (float * float) list (** Read a single number from a string *) val parse_single_number : Pdf.t -> string -> float ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/cpdfaddtext.ml���������������������������������������������������������������������������0000664�0001750�0001750�00000070373�14771516640�013767� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(* Superimpose text, page numbers etc. *) open Pdfutil open Cpdferror type colour = Grey of float | RGB of float * float * float | CYMK of float * float * float * float (* Process UTF8 text to charcodes, given a font. *) let charcodes_of_utf8 font s = let extractor = Pdftext.charcode_extractor_of_font_real ~debug:false font in let codepoints = Pdftext.codepoints_of_utf8 s in let charcodes = option_map (fun codepoint -> match extractor codepoint with | Some cc -> Some cc | None -> Pdfe.log (Printf.sprintf "Warning: character not found in font for unicode codepoint 0x%X\n" codepoint); None) codepoints in implode (map char_of_int charcodes) (* Get the width of some text in the given font *) let width_of_text font text = match font with | Pdftext.SimpleFont {Pdftext.fontmetrics = Some fontmetrics} -> begin try fsum (map (fun c -> fontmetrics.(int_of_char c)) (explode text)) with _ -> 0. end | _ -> 0. let colour_op = function | RGB (r, g, b) -> Pdfops.Op_rg (r, g, b) | Grey g -> Pdfops.Op_g g | CYMK (c, y, m, k) -> Pdfops.Op_k (c, y, m, k) let colour_op_stroke = function | RGB (r, g, b) -> Pdfops.Op_RG (r, g, b) | Grey g -> Pdfops.Op_G g | CYMK (c, y, m, k) -> Pdfops.Op_K (c, y, m, k) let ops font fontpack fontpackpdfobjs fontname longest_w x y rotate hoffset voffset outline linewidth unique_fontname unique_fontnames unique_extgstatename colour fontsize text = let textops = match fontpack with | Some fontpack -> let codepoints = Pdftext.codepoints_of_utf8 text in let triples = option_map (Cpdfembed.get_char fontpack) codepoints in let collated = Cpdfembed.collate_runs triples in flatten (map (fun l -> let (_, fontnum, _) = hd l in [Pdfops.Op_Tf (List.nth unique_fontnames fontnum, fontsize); Pdfops.Op_Tj (implode (map (fun (charcode, _, _) -> char_of_int charcode) l))]) collated) | None -> match font with | Some font -> [Pdfops.Op_Tf (unique_fontname, fontsize); Pdfops.Op_Tj (charcodes_of_utf8 font text)] | None -> [Pdfops.Op_Tf (unique_fontname, fontsize); Pdfops.Op_Tj text] in [Pdfops.begin_artifact; Pdfops.Op_q; Pdfops.Op_BMC "/CPDFSTAMP"; Pdfops.Op_cm (Pdftransform.matrix_of_transform [Pdftransform.Translate (x -. hoffset, y -. voffset); Pdftransform.Rotate ((0., 0.), rotate)]); Pdfops.Op_BT] @ (if outline then [Pdfops.Op_w linewidth; Pdfops.Op_Tr 1] else [Pdfops.Op_Tr 0]) @ [colour_op colour; colour_op_stroke colour] @ (match unique_extgstatename with None -> [] | Some n -> [Pdfops.Op_gs n]) @ textops @ [Pdfops.Op_ET; Pdfops.Op_EMC; Pdfops.Op_Q; Pdfops.end_artifact] type justification = LeftJustify | CentreJustify | RightJustify (* Find the h-offset for justification based on the longest width, the current width, the justification and the position. *) let find_justification_offsets longest_w w position j = let open Cpdfposition in match j with | LeftJustify -> begin match position with | TopLeft _ | Left _ | PosLeft _ | BottomLeft _ -> 0. | Top _ | PosCentre _ | Bottom _ | Centre -> (longest_w -. w) /. 2. | TopRight _ | BottomRight _ | PosRight _ | Right _ -> longest_w -. w | Diagonal -> 0. | ReverseDiagonal -> 0. end | RightJustify -> begin match position with | TopLeft _ | Left _ | PosLeft _ | BottomLeft _ -> ~-.(longest_w -. w) | Top _ | PosCentre _ | Bottom _ | Centre -> ~-.((longest_w -. w) /. 2.) | TopRight _ | BottomRight _ | PosRight _ | Right _ -> 0. | Diagonal -> 0. | ReverseDiagonal -> 0. end | CentreJustify -> begin match position with | TopLeft _ | Left _ | PosLeft _ | BottomLeft _ -> ~-.((longest_w -. w) /. 2.) | Top _ | PosCentre _ | Bottom _ | Centre -> 0. | TopRight _ | BottomRight _ | PosRight _ | Right _ -> (longest_w -. w) /. 2. | Diagonal -> 0. | ReverseDiagonal -> 0. end (* Lex an integer from the table *) let extract_num header s = match Pdfgenlex.lex_string (Hashtbl.find header s) with [Pdfgenlex.LexInt i] -> Pdf.Integer i | [Pdfgenlex.LexReal f] -> Pdf.Real f | _ -> raise (Failure ("extract_num: " ^ s)) (* For finding the height for URL links, we try to find the Cap Height for the font. We fall back to using the font size alone if we cannot get the cap height. *) let cap_height font fontname = match font with | Some (Pdftext.SimpleFont {fontdescriptor = Some {capheight}}) -> Some capheight | _ -> try let font = unopt (Pdftext.standard_font_of_name ("/" ^ fontname)) in let header, _, _, _ = Pdfstandard14.afm_data font in let capheight = try extract_num header "CapHeight" with _ -> Pdf.Integer 0 in Some (match capheight with Pdf.Integer i -> float_of_int i | Pdf.Real r -> r | _ -> 0.) with _ -> None let rec process_text time text m = match m with | [] -> Cpdfstrftime.strftime ~time text | (s, r)::t -> process_text time (string_replace_all_lazy s r text) t (* Find any %URL, sub in the text and return the new text together with a list of ordered (line num, URL, startpos, endpos) data. This will be used after any other %Specials have been processed, so that the positions do not change. *) (* text|url]abc -> text, url, abc *) let extract_url line = let text, rest = cleavewhile (neq '|') line in if rest = [] then error "bad URL syntax in text" else let url, rest = cleavewhile (neq ']') (tl rest) in if rest = [] then error "bad URL syntax in text" else (text, url, tl rest) (* multiple %URL[a|b] *) let get_urls_line line = let line = explode line in let urls = ref [] in let pos = ref 0 in let outline = ref [] in let rec loop = function | '%'::'U'::'R'::'L'::'['::t -> let text, url, rest = extract_url t in outline := rev text @ !outline; urls := (implode url, !pos, !pos + length text)::!urls; pos += length text; loop rest | h::t -> outline := h::!outline; pos += 1; loop t | [] -> () in loop line; (implode (rev !outline), rev !urls) (* Return page label at pdf page num, or page number in arabic if no label *) let pagelabel pdf num = Pdfpagelabels.pagelabeltext_of_pagenumber num (Pdfpagelabels.complete (Pdfpagelabels.read pdf)) (*let debug pdf fastrefnums = iter (fun m -> Printf.printf "%i %s (%i)\n" m.Pdfmarks.level (Pdftext.utf8_of_pdfdocstring m.Pdfmarks.text) (Pdfpage.pagenumber_of_target ~fastrefnums pdf m.Pdfmarks.target))*) (* Return UTF8 of current bookmark at given level at start of page. No bookmark available = empty string. Method: Remove from the list anything from end up to the last mark which is at higher level. This prevents sections in an earlier chapter showing up as bookmarks in a later chapter if no section has yet been introduced in that chapter. Do this by reversing, then keeping everything up to any higher level. Then re-reverse and filter to only the level required. Then, We want the first which is on the target page or, if none, the last available. *) let bookmark marks fastrefnums level pdf num = let before = takewhile (fun mark -> Pdfpage.pagenumber_of_target ~fastrefnums pdf mark.Pdfmarks.target <= num) marks in let pickfrom = keep (fun mark -> mark.Pdfmarks.level = level) (rev (fst (cleavewhile (fun mark -> mark.Pdfmarks.level >= level) (rev before)))) in let on_target_page, before_target_page = List.partition (fun mark -> Pdfpage.pagenumber_of_target ~fastrefnums pdf mark.Pdfmarks.target = num) pickfrom in match on_target_page with | h::_ -> Pdftext.utf8_of_pdfdocstring h.Pdfmarks.text | [] -> match before_target_page with | _::_ -> Pdftext.utf8_of_pdfdocstring (last before_target_page).Pdfmarks.text | [] -> "" let replace_pairs marks fastrefnums pdf endpage extract_text_font_size filename bates batespad num page = [ "%PageDiv2", (fun () -> string_of_int ((num + 1) / 2)); "%Page", (fun () -> string_of_int num); "%Roman", (fun () -> roman_upper num); "%roman", (fun () -> roman_lower num); "%filename", (fun () -> filename); "%Label", (fun () -> pagelabel pdf num); "%EndPage", (fun () -> string_of_int endpage); "%EndLabel", (fun () -> pagelabel pdf endpage); "%Bookmark0", (fun () -> bookmark marks fastrefnums 0 pdf num); "%Bookmark1", (fun () -> bookmark marks fastrefnums 1 pdf num); "%Bookmark2", (fun () -> bookmark marks fastrefnums 2 pdf num); "%Bookmark3", (fun () -> bookmark marks fastrefnums 3 pdf num); "%Bookmark4", (fun () -> bookmark marks fastrefnums 4 pdf num); "%ExtractedText", (fun () -> Cpdfextracttext.extract_page_text extract_text_font_size pdf num page); "%Bates", (fun () -> (let numstring = string_of_int (bates + num - 1) in match batespad with None -> numstring | Some w -> if String.length numstring >= w then numstring else implode (many '0' (w - String.length numstring)) ^ numstring))] let expand_lines text time pdf endpage extract_text_font_size filename bates batespad num page lines = let refnums = Pdf.page_reference_numbers pdf in let fastrefnums = hashtable_of_dictionary (combine refnums (indx refnums)) in let marks = Pdfmarks.read_bookmarks ~preserve_actions:false pdf in let expanded_lines = map (function text -> process_text time text (replace_pairs marks fastrefnums pdf endpage extract_text_font_size filename bates batespad num page)) lines in (* process URLs for justification too *) map (fun line -> fst (get_urls_line line)) expanded_lines let addtext time lines linewidth outline fast colour fontname encoding bates batespad fontsize fontpack font fontpdfobj fontpackpdfobjs underneath position hoffset voffset text pages cropbox opacity justification filename extract_text_font_size shift raw pdf = let endpage = Pdfpage.endpage pdf in let shifts = Cpdfcoord.parse_coordinates pdf shift in let addtext_page num page = let shift_x, shift_y = List.nth shifts (num - 1) in let resources', unique_extgstatename = if opacity < 1.0 then let dict = match Pdf.lookup_direct pdf "/ExtGState" page.Pdfpage.resources with | Some d -> d | None -> Pdf.Dictionary [] in let unique_extgstatename = Pdf.unique_key "gs" dict in let dict' = Pdf.add_dict_entry dict unique_extgstatename (Pdf.Dictionary [("/ca", Pdf.Real opacity); ("/CA", Pdf.Real opacity)]) in Pdf.add_dict_entry page.Pdfpage.resources "/ExtGState" dict', Some unique_extgstatename else page.Pdfpage.resources, None in let fontdict = match Pdf.lookup_direct pdf "/Font" page.Pdfpage.resources with | None -> Pdf.Dictionary [] | Some d -> d in let calc_textwidth text = match fontpack with | Some fontpack -> let widthss = map2 (fun n font -> Cpdftype.font_widths (fontname ^ string_of_int n) font fontsize) (indx (fst fontpack)) (fst fontpack) in let triples = option_map (Cpdfembed.get_char fontpack) (Pdftext.codepoints_of_utf8 text) in let widths = map (fun (charcode, fontnum, _) -> (List.nth widthss fontnum).(charcode)) triples in fsum widths | None -> match font with | Some (Pdftext.StandardFont (f, _)) -> let rawwidth = Pdfstandard14.textwidth false encoding f text in (float rawwidth *. fontsize) /. 1000. | Some font -> let rawwidth = width_of_text font text in (rawwidth *. fontsize) /. 1000. | None -> let font = match Pdf.lookup_direct pdf "/Font" page.Pdfpage.resources with | Some fontdict -> begin match Pdf.lookup_direct pdf fontname fontdict with | Some font -> font | None -> (* For each item in the fontdict, follow its value and find the basename. If it matches, return that font *) let font = ref None in iter (fun (k, v) -> match Pdf.lookup_direct pdf "/BaseFont" v with | Some (Pdf.Name n) when n = fontname -> font := Some v | _ -> ()) (match fontdict with Pdf.Dictionary d -> d | _ -> []); match !font with Some f -> f | None -> failwith (Printf.sprintf "addtext: font %s not found" fontname) end | _ -> failwith "addtext: font not found for width" in let rawwidth = width_of_text (Pdftext.read_font pdf font) text in (rawwidth *. fontsize) /. 1000. in let unique_fontname = Pdf.unique_key "F" fontdict in let fd = ref fontdict in let unique_fontnames = match fontpack with None -> [] | Some fontpack -> map (fun _ -> let key = Pdf.unique_key "F" !fd in fd := Pdf.add_dict_entry !fd key Pdf.Null; key) (indx0 (fst fontpack)) in let ops, urls, x, y, hoffset, voffset, text, joffset = let refnums = Pdf.page_reference_numbers pdf in let fastrefnums = hashtable_of_dictionary (combine refnums (indx refnums)) in let marks = Pdfmarks.read_bookmarks ~preserve_actions:false pdf in let text = process_text time text (replace_pairs marks fastrefnums pdf endpage extract_text_font_size filename bates batespad num page) in let text, urls = get_urls_line text in let lines = map (fun text -> if raw || fontpack <> None then text else charcodes_of_utf8 (Pdftext.read_font pdf fontpdfobj) text) lines in let expanded_lines = expand_lines text time pdf endpage extract_text_font_size filename bates batespad num page lines in let textwidth = calc_textwidth text and allwidths = map calc_textwidth expanded_lines in let longest_w = last (sort compare allwidths) in let joffset = find_justification_offsets longest_w textwidth position justification in let mediabox = if cropbox then match Pdf.lookup_direct pdf "/CropBox" page.Pdfpage.rest with | Some pdfobject -> Pdf.parse_rectangle pdf (Pdf.direct pdf pdfobject) | None -> Pdf.parse_rectangle pdf page.Pdfpage.mediabox else Pdf.parse_rectangle pdf page.Pdfpage.mediabox in let x, y, rotate = Cpdfposition.calculate_position false textwidth mediabox position in let hoffset, voffset = if position = Diagonal || position = ReverseDiagonal then -. (cos ((pi /. 2.) -. rotate) *. voffset), sin ((pi /. 2.) -. rotate) *. voffset else hoffset, voffset in match font with | Some f -> ops font fontpack fontpackpdfobjs fontname longest_w (x +. shift_x) (y +. shift_y) rotate (hoffset +. joffset) voffset outline linewidth unique_fontname unique_fontnames unique_extgstatename colour fontsize text, urls, x, y, hoffset, voffset, text, joffset | None -> ops font fontpack fontpackpdfobjs fontname longest_w (x +. shift_x) (y +. shift_y) rotate (hoffset +. joffset) voffset outline linewidth fontname unique_fontnames None colour fontsize text, urls, x, y, hoffset, voffset, text, joffset in let newresources = match fontpack with | Some fontpack -> let newfontdict = let fd = ref fontdict in iter2 (fun i n -> fd := Pdf.add_dict_entry !fd (List.nth unique_fontnames n) (Pdf.Indirect i)) fontpackpdfobjs (indx0 fontpackpdfobjs); !fd in Pdf.add_dict_entry resources' "/Font" newfontdict | None -> match font with | Some (Pdftext.StandardFont _ as font) -> let newfontdict = Pdf.add_dict_entry fontdict unique_fontname (Pdf.Indirect (Pdftext.write_font pdf font)) in Pdf.add_dict_entry resources' "/Font" newfontdict | Some f -> let newfontdict = Pdf.add_dict_entry fontdict unique_fontname fontpdfobj in Pdf.add_dict_entry resources' "/Font" newfontdict | None -> page.Pdfpage.resources in (* Build annotations from URL data (get_urls and some sense of metrics) *) let annot (minx, miny, maxx, maxy) url = Pdf.Dictionary [("/Subtype", Pdf.Name "/Link"); ("/Rect", Pdf.Array [Pdf.Real minx; Pdf.Real miny; Pdf.Real maxx; Pdf.Real maxy]); ("/BS", Pdf.Dictionary [("/W", Pdf.Integer 0)]); ("/A", Pdf.Dictionary [("/URI", Pdf.String url); ("/Type", Pdf.Name "/Action"); ("/S", Pdf.Name "/URI")])] in let annots = let annot_coord text pos = let before = take (explode text) pos in calc_textwidth (implode before) in map (fun (url, s, e) -> let sx = annot_coord text s in let ex = annot_coord text e in let x, y = x -. hoffset -. joffset, y -. voffset in let height = match cap_height font fontname with | Some c -> (c *. fontsize) /. 1000. | None -> fontsize in Pdf.Indirect (Pdf.addobj pdf (annot (x +. sx, y, x +. ex, y +. height) url))) urls in let newrest = if annots = [] then page.Pdfpage.rest else let existing = match Pdf.lookup_direct pdf "/Annots" page.Pdfpage.rest with | Some (Pdf.Array a) -> a | _ -> [] in Pdf.add_dict_entry page.Pdfpage.rest "/Annots" (Pdf.Array (annots @ existing)) in let page = {page with Pdfpage.resources = newresources; Pdfpage.rest = newrest} in if underneath then Pdfpage.prepend_operators pdf ops ~fast:fast page else Pdfpage.postpend_operators pdf ops ~fast:fast page in Cpdfpage.process_pages (Pdfpage.ppstub addtext_page) pdf pages (* Prev is a list of lists of characters *) let split_at_newline t = let rec split_at_newline_inner prev = function | [] -> rev (map implode (map rev prev)) | '\\'::'\\'::'n'::t -> split_at_newline_inner (('n'::'\\'::'\\'::hd prev)::tl prev) t | '\\'::'n'::t -> split_at_newline_inner ([]::prev) t | h::t -> split_at_newline_inner ((h::hd prev)::tl prev) t in split_at_newline_inner [[]] (explode t) let rec unescape_chars prev = function | [] -> rev prev | '\\'::('0'..'7' as a)::('0'..'7' as b)::('0'..'7' as c)::t -> let chr = char_of_int (int_of_string ("0o" ^ implode [a;b;c])) in unescape_chars (chr::prev) t | '\\'::'\\'::t -> unescape_chars ('\\'::prev) t | '\\'::c::t when c <> 'n' -> unescape_chars (c::prev) t | h::t -> unescape_chars (h::prev) t let unescape_string s = implode (unescape_chars [] (explode s)) let addtexts linewidth outline fast fontname (cpdffont : Cpdfembed.cpdffont) bates batespad colour position linespacing fontsize underneath text pages cropbox opacity justification midline topline filename extract_text_font_size shift ?(raw=false) pdf = if pages = [] then error "addtexts: empty page range" else let time = Cpdfstrftime.current_time () in let endpage = Pdfpage.endpage pdf in let ps = Pdfpage.pages_of_pagetree pdf in let used = null_hash () in let lines = map unescape_string (split_at_newline text) in iter2 (fun num page -> let expanded_lines = expand_lines text time pdf endpage extract_text_font_size filename bates batespad num page lines in let codepoints = map Pdftext.codepoints_of_utf8 expanded_lines in iter (iter (fun x -> Hashtbl.replace used x ())) codepoints) pages (map (fun x -> List.nth ps (x - 1)) pages); if Hashtbl.length used = 0 then pdf else (* Avoid trying to build truetype font with no used set. *) let realfontname = ref fontname in let font, fontpack = match cpdffont with | Cpdfembed.PreMadeFontPack f -> Some (hd (fst f)), None | Cpdfembed.EmbedInfo {fontfile; fontname; encoding} -> let embedded = Cpdfembed.embed_truetype pdf ~fontfile ~fontname ~codepoints:(map fst (list_of_hashtbl used)) ~encoding in Some (hd (fst embedded)), Some embedded | Cpdfembed.ExistingNamedFont -> None, None in let fontpdfobj = match font with | Some (Pdftext.StandardFont _ as font) -> Pdf.Indirect (Pdftext.write_font pdf font) | Some f -> Pdf.Indirect (Pdftext.write_font pdf f) | None -> let firstpage = List.nth (Pdfpage.pages_of_pagetree pdf) (hd pages - 1) in match Pdf.lookup_direct pdf "/Font" firstpage.Pdfpage.resources with | Some fontdict -> begin match Pdf.lookup_direct pdf fontname fontdict with | Some font -> font | _ -> (* For each item in the fontdict, follow its value and find the basename. If it matches, return that font *) let font = ref None in iter (fun (k, v) -> match Pdf.lookup_direct pdf "/BaseFont" v with | Some (Pdf.Name n) when n = fontname -> font := Some v; realfontname := k | _ -> ()) (match fontdict with Pdf.Dictionary d -> d | _ -> []); match !font with Some f -> f | None -> failwith (Printf.sprintf "addtext: font %s not found" fontname) end | _ -> failwith "addtext: font dictionary not present" in let lines = map unescape_string (split_at_newline text) in let pdf = ref pdf in let voffset = let open Cpdfposition in match position with | Bottom _ | BottomLeft _ | BottomRight _ -> ref (0. -. (linespacing *. fontsize *. (float (length lines) -. 1.))) | Left _ | Right _ -> (* Vertically align *) ref (0. -. (linespacing *. ((fontsize *. (float (length lines) -. 1.)) /. 2.))) | Diagonal | ReverseDiagonal -> (* Change so that the whole paragraph sits on the centre... *) ref (0. -. ((linespacing *. fontsize *. (float (length lines) -. 1.)) /. 2.)) | _ -> ref 0. in if midline then begin match font with | Some (Pdftext.StandardFont (font, _)) -> let baseline_adjustment = (fontsize *. float (Pdfstandard14.baseline_adjustment font)) /. 1000. in voffset := !voffset +. baseline_adjustment | Some (Pdftext.SimpleFont {fontdescriptor = Some {capheight}}) -> voffset := !voffset +. capheight /. 2. /. 1000. | _ -> Pdfe.log "Unable to find midline adjustment in this font\n" end else if topline then begin match font with | Some (Pdftext.StandardFont (font, _)) -> let baseline_adjustment = (fontsize *. float (Pdfstandard14.baseline_adjustment font) *. 2.0) /. 1000. in voffset := !voffset +. baseline_adjustment | Some (Pdftext.SimpleFont {fontdescriptor = Some {capheight}}) -> voffset := !voffset +. capheight /. 1000. | _ -> Pdfe.log "Unable to find topline adjustment in this font\n" end; let encoding = match font with | Some (Pdftext.StandardFont (_, e)) -> e | Some (Pdftext.SimpleFont {encoding}) -> encoding | _ -> Pdftext.WinAnsiEncoding in let fontpackpdfobjs = match cpdffont with | Cpdfembed.EmbedInfo {fontfile; fontname; encoding} -> let codepoints = map fst (list_of_hashtbl used) in let fonts = fst (Cpdfembed.embed_truetype !pdf ~fontfile ~fontname ~codepoints ~encoding) in map (Pdftext.write_font !pdf) fonts | _ -> [] in iter (fun line -> let voff, hoff = !voffset, 0. in pdf := addtext time lines linewidth outline fast colour !realfontname encoding bates batespad fontsize fontpack font fontpdfobj fontpackpdfobjs underneath position hoff voff line pages cropbox opacity justification filename extract_text_font_size shift raw !pdf; voffset := !voffset +. (linespacing *. fontsize)) lines; !pdf let addrectangle fast (w, h) colour outline linewidth opacity position relative_to_cropbox underneath range pdf = let addrectangle_page _ page = let resources', unique_extgstatename = if opacity < 1.0 then let dict = match Pdf.lookup_direct pdf "/ExtGState" page.Pdfpage.resources with | Some d -> d | None -> Pdf.Dictionary [] in let unique_extgstatename = Pdf.unique_key "gs" dict in let dict' = Pdf.add_dict_entry dict unique_extgstatename (Pdf.Dictionary [("/ca", Pdf.Real opacity); ("/CA", Pdf.Real opacity)]) in Pdf.add_dict_entry page.Pdfpage.resources "/ExtGState" dict', Some unique_extgstatename else page.Pdfpage.resources, None in let mediabox = if relative_to_cropbox then match Pdf.lookup_direct pdf "/CropBox" page.Pdfpage.rest with | Some pdfobject -> Pdf.parse_rectangle pdf (Pdf.direct pdf pdfobject) | None -> Pdf.parse_rectangle pdf page.Pdfpage.mediabox else Pdf.parse_rectangle pdf page.Pdfpage.mediabox in let x, y, _ = Cpdfposition.calculate_position false w mediabox position in let x, y = match position with Cpdfposition.Top _ | Cpdfposition.TopLeft _ | Cpdfposition.TopRight _ -> (x, y -. h) | Cpdfposition.Centre | Cpdfposition.PosCentre _ -> (x, y -. (h /. 2.)) | _ -> (x, y) in let ops = Pdfops.begin_artifact:: [ Pdfops.Op_q; Pdfops.Op_BMC "/CPDFSTAMP"; colour_op colour; colour_op_stroke colour; ] @ (if outline then [Pdfops.Op_w linewidth] else []) @ (match unique_extgstatename with None -> [] | Some n -> [Pdfops.Op_gs n]) @ [ Pdfops.Op_re (x, y, w, h); (if outline then Pdfops.Op_s else Pdfops.Op_f); Pdfops.Op_EMC; Pdfops.Op_Q ] @ [Pdfops.end_artifact] in let page = {page with Pdfpage.resources = resources'} in if underneath then Pdfpage.prepend_operators pdf ops ~fast:fast page else Pdfpage.postpend_operators pdf ops ~fast:fast page in Cpdfpage.process_pages (Pdfpage.ppstub addrectangle_page) pdf range ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/mkinstall��������������������������������������������������������������������������������0000755�0001750�0001750�00000000102�14771516640�013044� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/bash make clean; make; ocamlfind remove cpdf; make install ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/cpdftoc.mli������������������������������������������������������������������������������0000664�0001750�0001750�00000000444�14771516640�013260� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(** Table of contents *) (** Typeset a table of contents and prepend to the document. *) val typeset_table_of_contents : font:Cpdfembed.cpdffont -> fontsize:float -> title:string -> bookmark:bool -> dotleader:bool -> process_struct_tree:bool -> ?subformat:Cpdfua.subformat -> Pdf.t -> Pdf.t ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/cpdfposition.ml��������������������������������������������������������������������������0000664�0001750�0001750�00000006337�14771516640�014175� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������open Pdfutil type position = | PosCentre of float * float | PosLeft of float * float | PosRight of float * float | Top of float | TopLeft of float * float | TopRight of float * float | Left of float | BottomLeft of float * float | Bottom of float | BottomRight of float * float | Right of float | Diagonal | ReverseDiagonal | Centre let string_of_position = function | PosCentre (a, b) -> Printf.sprintf "PosCentre %f %f" a b | PosLeft (a, b) -> Printf.sprintf "PosLeft %f %f" a b | PosRight (a, b) -> Printf.sprintf "PosRight %f %f" a b | Top a -> Printf.sprintf "Top %f" a | TopLeft (a, b) -> Printf.sprintf "TopLeft %f %f" a b | TopRight (a, b) -> Printf.sprintf "TopRight %f %f" a b | Left a -> Printf.sprintf "Left %f" a | BottomLeft (a, b) -> Printf.sprintf "BottomLeft %f %f" a b | Bottom a -> Printf.sprintf "Bottom %f" a | BottomRight (a, b) -> Printf.sprintf "BottomRight %f %f" a b | Right a -> Printf.sprintf "Right %f" a | Diagonal -> "Diagonal" | ReverseDiagonal -> "Reverse Diagonal" | Centre -> "Centre" (* Given the mediabox, calculate an absolute position for the text. *) let calculate_position ignore_d w (xmin, ymin, xmax, ymax) pos = let rot = 0. in match pos with | Centre -> (xmin +. xmax) /. 2. -. w /. 2., (ymin +. ymax) /. 2., rot | Diagonal -> let angle = atan ((ymax -. ymin) /. (xmax -. xmin)) in let cx, cy = (xmax +. xmin) /. 2., (ymax +. ymin) /. 2. in let dl = w /. 2. in let dx = dl *. cos angle in let dy = dl *. sin angle in cx -. dx, cy -. dy, angle | ReverseDiagonal -> let angle = atan ((ymax -. ymin) /. (xmax -. xmin)) in let cx, cy = (xmax +. xmin) /. 2., (ymax +. ymin) /. 2. in let dl = w /. 2. in let dx = dl *. cos angle in let dy = dl *. sin angle in cx -. dx, (ymax +. ymin) -. (cy -. dy), angle -. ((2. *. pi) -. ((pi -. (2. *. angle)) *. 2.) /. 2.) +. pi | PosLeft (x, y) -> xmin +. x, ymin +. y, rot | PosCentre (x, y) -> xmin +. x -. (w /. 2.), ymin +. y, rot | PosRight (x, y) -> xmin +. x -. w, ymin +. y, rot | Top d -> let d = if ignore_d then 0. else d in (xmin +. xmax) /. 2. -. w /. 2., ymax -. d, rot | TopLeft (a, b) -> let a = if ignore_d then 0. else a in let b = if ignore_d then 0. else b in xmin +. a, ymax -. b, rot | TopRight (a, b) -> let a = if ignore_d then 0. else a in let b = if ignore_d then 0. else b in xmax -. a -. w, ymax -. b, rot | Left d -> let d = if ignore_d then 0. else d in xmin +. d, (ymax +. ymin) /. 2., rot | BottomLeft (a, b) -> let a = if ignore_d then 0. else a in let b = if ignore_d then 0. else b in xmin +. a, ymin +. b, rot | Bottom d -> let d = if ignore_d then 0. else d in (xmin +. xmax) /. 2. -. w /. 2., ymin +. d, rot | BottomRight (a, b) -> let a = if ignore_d then 0. else a in let b = if ignore_d then 0. else b in xmax -. a -. w, ymin +. b, rot | Right d -> let d = if ignore_d then 0. else d in xmax -. d -. w, (ymax +. ymin) /. 2., rot �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/OCamlMakefile����������������������������������������������������������������������������0000664�0001750�0001750�00000105246�14771516640�013515� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������########################################################################### # OCamlMakefile # Copyright (C) 1999- Markus Mottl # # For updates see: # http://www.ocaml.info/home/ocaml_sources.html # ########################################################################### # Modified by damien for .glade.ml compilation # Set these variables to the names of the sources to be processed and # the result variable. Order matters during linkage! ifndef SOURCES SOURCES := foo.ml endif export SOURCES ifndef RES_CLIB_SUF RES_CLIB_SUF := _stubs endif export RES_CLIB_SUF ifndef RESULT RESULT := foo endif export RESULT := $(strip $(RESULT)) export LIB_PACK_NAME ifndef DOC_FILES DOC_FILES := $(filter %.mli, $(SOURCES)) endif export DOC_FILES FIRST_DOC_FILE := $(firstword $(DOC_FILES)) export BCSUFFIX export NCSUFFIX ifndef TOPSUFFIX TOPSUFFIX := .top endif export TOPSUFFIX # Eventually set include- and library-paths, libraries to link, # additional compilation-, link- and ocamlyacc-flags # Path- and library information needs not be written with "-I" and such... # Define THREADS if you need it, otherwise leave it unset (same for # USE_CAMLP4)! export THREADS export VMTHREADS export ANNOTATE export USE_CAMLP4 export INCDIRS export LIBDIRS export EXTLIBDIRS export RESULTDEPS export OCAML_DEFAULT_DIRS export LIBS export CLIBS export CFRAMEWORKS export OCAMLFLAGS export OCAMLNCFLAGS export OCAMLBCFLAGS export OCAMLLDFLAGS export OCAMLNLDFLAGS export OCAMLBLDFLAGS export OCAMLMKLIB_FLAGS ifndef OCAMLCPFLAGS OCAMLCPFLAGS := a endif export OCAMLCPFLAGS ifndef DOC_DIR DOC_DIR := doc endif export DOC_DIR export PPFLAGS export LFLAGS export YFLAGS export IDLFLAGS export OCAMLDOCFLAGS export OCAMLFIND_INSTFLAGS export DVIPSFLAGS export STATIC # Add a list of optional trash files that should be deleted by "make clean" export TRASH ECHO := echo ifdef REALLY_QUIET export REALLY_QUIET ECHO := true LFLAGS := $(LFLAGS) -q YFLAGS := $(YFLAGS) -q endif #################### variables depending on your OCaml-installation SYSTEM := $(shell ocamlc -config 2>/dev/null | grep system | sed 's/system: //') # This may be # - mingw # - mingw64 # - win32 # - cygwin # - some other string means Unix # - empty means ocamlc does not support -config ifeq ($(SYSTEM),$(filter $(SYSTEM),mingw mingw64)) MINGW=1 endif ifeq ($(SYSTEM),win32) MSVC=1 endif ifdef MINGW export MINGW WIN32 := 1 # The default value 'cc' makes 'ocamlc -cc "cc"' raises the error 'The # NTVDM CPU has encountered an illegal instruction'. ifndef CC MNO_CYGWIN := $(shell gcc -Wextra -v --help 2>/dev/null | grep -q '\-mno-cygwin'; echo $$?) CC := gcc else MNO_CYGWIN := $(shell $$CC -Wextra -v --help 2>/dev/null | grep -q '\-mno-cygwin'; echo $$?) endif # We are compiling with cygwin tools: ifeq ($(MNO_CYGWIN),0) CFLAGS_WIN32 := -mno-cygwin endif # The OCaml C header files use this flag: CFLAGS += -D__MINGW32__ endif ifdef MSVC export MSVC WIN32 := 1 ifndef STATIC CPPFLAGS_WIN32 := -DCAML_DLL endif CFLAGS_WIN32 += -nologo EXT_OBJ := obj EXT_LIB := lib ifeq ($(CC),gcc) # work around GNU Make default value ifdef THREADS CC := cl -MT else CC := cl endif endif ifeq ($(CXX),g++) # work around GNU Make default value CXX := $(CC) endif CFLAG_O := -Fo endif ifdef WIN32 EXT_CXX := cpp EXE := .exe endif ifndef EXT_OBJ EXT_OBJ := o endif ifndef EXT_LIB EXT_LIB := a endif ifndef EXT_CXX EXT_CXX := cc endif ifndef EXE EXE := # empty endif ifndef CFLAG_O CFLAG_O := -o # do not delete this comment (preserves trailing whitespace)! endif export CC export CXX export CFLAGS export CXXFLAGS export LDFLAGS export CPPFLAGS ifndef RPATH_FLAG ifdef ELF_RPATH_FLAG RPATH_FLAG := $(ELF_RPATH_FLAG) else RPATH_FLAG := -R endif endif export RPATH_FLAG ifndef MSVC ifndef PIC_CFLAGS PIC_CFLAGS := -fPIC endif ifndef PIC_CPPFLAGS PIC_CPPFLAGS := -DPIC endif endif export PIC_CFLAGS export PIC_CPPFLAGS BCRESULT := $(addsuffix $(BCSUFFIX), $(RESULT)) NCRESULT := $(addsuffix $(NCSUFFIX), $(RESULT)) TOPRESULT := $(addsuffix $(TOPSUFFIX), $(RESULT)) ifndef OCAMLFIND OCAMLFIND := ocamlfind endif export OCAMLFIND ifndef OCAML OCAML := ocaml endif export OCAML ifndef OCAMLC OCAMLC := ocamlc endif export OCAMLC ifndef OCAMLOPT OCAMLOPT := ocamlopt endif export OCAMLOPT ifndef OCAMLMKTOP OCAMLMKTOP := ocamlmktop endif export OCAMLMKTOP ifndef OCAMLCP OCAMLCP := ocamlcp endif export OCAMLCP ifndef OCAMLDEP OCAMLDEP := ocamldep endif export OCAMLDEP ifndef OCAMLLEX OCAMLLEX := ocamllex endif export OCAMLLEX ifndef OCAMLYACC OCAMLYACC := ocamlyacc endif export OCAMLYACC ifndef OCAMLMKLIB OCAMLMKLIB := ocamlmklib endif export OCAMLMKLIB ifndef OCAML_GLADECC OCAML_GLADECC := lablgladecc2 endif export OCAML_GLADECC ifndef OCAML_GLADECC_FLAGS OCAML_GLADECC_FLAGS := endif export OCAML_GLADECC_FLAGS ifndef CAMELEON_REPORT CAMELEON_REPORT := report endif export CAMELEON_REPORT ifndef CAMELEON_REPORT_FLAGS CAMELEON_REPORT_FLAGS := endif export CAMELEON_REPORT_FLAGS ifndef CAMELEON_ZOGGY CAMELEON_ZOGGY := camlp4o pa_zog.cma pr_o.cmo endif export CAMELEON_ZOGGY ifndef CAMELEON_ZOGGY_FLAGS CAMELEON_ZOGGY_FLAGS := endif export CAMELEON_ZOGGY_FLAGS ifndef OXRIDL OXRIDL := oxridl endif export OXRIDL ifndef CAMLIDL CAMLIDL := camlidl endif export CAMLIDL ifndef CAMLIDLDLL CAMLIDLDLL := camlidldll endif export CAMLIDLDLL ifndef NOIDLHEADER MAYBE_IDL_HEADER := -header endif export NOIDLHEADER export NO_CUSTOM ifndef CAMLP4 CAMLP4 := camlp4 endif export CAMLP4 ifndef REAL_OCAMLFIND ifdef PACKS ifndef CREATE_LIB ifdef THREADS PACKS += threads endif endif empty := space := $(empty) $(empty) comma := , ifdef PREDS PRE_OCAML_FIND_PREDICATES := $(subst $(space),$(comma),$(PREDS)) PRE_OCAML_FIND_PACKAGES := $(subst $(space),$(comma),$(PACKS)) OCAML_FIND_PREDICATES := -predicates $(PRE_OCAML_FIND_PREDICATES) # OCAML_DEP_PREDICATES := -syntax $(PRE_OCAML_FIND_PREDICATES) OCAML_FIND_PACKAGES := $(OCAML_FIND_PREDICATES) -package $(PRE_OCAML_FIND_PACKAGES) OCAML_DEP_PACKAGES := $(OCAML_DEP_PREDICATES) -package $(PRE_OCAML_FIND_PACKAGES) else OCAML_FIND_PACKAGES := -package $(subst $(space),$(comma),$(PACKS)) OCAML_DEP_PACKAGES := endif OCAML_FIND_LINKPKG := -linkpkg REAL_OCAMLFIND := $(OCAMLFIND) endif endif export OCAML_FIND_PACKAGES export OCAML_DEP_PACKAGES export OCAML_FIND_LINKPKG export REAL_OCAMLFIND ifndef OCAMLDOC OCAMLDOC := ocamldoc endif export OCAMLDOC ifndef LATEX LATEX := latex endif export LATEX ifndef DVIPS DVIPS := dvips endif export DVIPS ifndef PS2PDF PS2PDF := ps2pdf endif export PS2PDF ifndef OCAMLMAKEFILE OCAMLMAKEFILE := OCamlMakefile endif export OCAMLMAKEFILE ifndef OCAMLLIBPATH OCAMLLIBPATH := \ $(shell $(OCAMLC) 2>/dev/null -where || echo /usr/local/lib/ocaml) endif export OCAMLLIBPATH ifndef OCAML_LIB_INSTALL OCAML_LIB_INSTALL := $(OCAMLLIBPATH)/contrib endif export OCAML_LIB_INSTALL ########################################################################### #################### change following sections only if #################### you know what you are doing! # delete target files when a build command fails .PHONY: .DELETE_ON_ERROR .DELETE_ON_ERROR: # for pedants using "--warn-undefined-variables" export MAYBE_IDL export REAL_RESULT export CAMLIDLFLAGS export THREAD_FLAG export RES_CLIB export MAKEDLL export ANNOT_FLAG export C_OXRIDL export SUBPROJS export CFLAGS_WIN32 export CPPFLAGS_WIN32 INCFLAGS := SHELL := /bin/sh MLDEPDIR := ._d BCDIDIR := ._bcdi NCDIDIR := ._ncdi FILTER_EXTNS := %.mli %.ml %.mll %.mly %.idl %.oxridl %.c %.m %.$(EXT_CXX) %.rep %.zog %.glade FILTERED := $(filter $(FILTER_EXTNS), $(SOURCES)) SOURCE_DIRS := $(filter-out ./, $(sort $(dir $(FILTERED)))) FILTERED_REP := $(filter %.rep, $(FILTERED)) DEP_REP := $(FILTERED_REP:%.rep=$(MLDEPDIR)/%.d) AUTO_REP := $(FILTERED_REP:.rep=.ml) FILTERED_ZOG := $(filter %.zog, $(FILTERED)) DEP_ZOG := $(FILTERED_ZOG:%.zog=$(MLDEPDIR)/%.d) AUTO_ZOG := $(FILTERED_ZOG:.zog=.ml) FILTERED_GLADE := $(filter %.glade, $(FILTERED)) DEP_GLADE := $(FILTERED_GLADE:%.glade=$(MLDEPDIR)/%.d) AUTO_GLADE := $(FILTERED_GLADE:.glade=.ml) FILTERED_ML := $(filter %.ml, $(FILTERED)) DEP_ML := $(FILTERED_ML:%.ml=$(MLDEPDIR)/%.d) FILTERED_MLI := $(filter %.mli, $(FILTERED)) DEP_MLI := $(FILTERED_MLI:.mli=.di) FILTERED_MLL := $(filter %.mll, $(FILTERED)) DEP_MLL := $(FILTERED_MLL:%.mll=$(MLDEPDIR)/%.d) AUTO_MLL := $(FILTERED_MLL:.mll=.ml) FILTERED_MLY := $(filter %.mly, $(FILTERED)) DEP_MLY := $(FILTERED_MLY:%.mly=$(MLDEPDIR)/%.d) $(FILTERED_MLY:.mly=.di) AUTO_MLY := $(FILTERED_MLY:.mly=.mli) $(FILTERED_MLY:.mly=.ml) FILTERED_IDL := $(filter %.idl, $(FILTERED)) DEP_IDL := $(FILTERED_IDL:%.idl=$(MLDEPDIR)/%.d) $(FILTERED_IDL:.idl=.di) C_IDL := $(FILTERED_IDL:%.idl=%_stubs.c) ifndef NOIDLHEADER C_IDL += $(FILTERED_IDL:.idl=.h) endif OBJ_C_IDL := $(FILTERED_IDL:%.idl=%_stubs.$(EXT_OBJ)) AUTO_IDL := $(FILTERED_IDL:.idl=.mli) $(FILTERED_IDL:.idl=.ml) $(C_IDL) FILTERED_OXRIDL := $(filter %.oxridl, $(FILTERED)) DEP_OXRIDL := $(FILTERED_OXRIDL:%.oxridl=$(MLDEPDIR)/%.d) $(FILTERED_OXRIDL:.oxridl=.di) AUTO_OXRIDL := $(FILTERED_OXRIDL:.oxridl=.mli) $(FILTERED_OXRIDL:.oxridl=.ml) $(C_OXRIDL) FILTERED_C_CXX := $(filter %.c %.m %.$(EXT_CXX), $(FILTERED)) OBJ_C_CXX := $(FILTERED_C_CXX:.c=.$(EXT_OBJ)) OBJ_C_CXX := $(OBJ_C_CXX:.m=.$(EXT_OBJ)) OBJ_C_CXX := $(OBJ_C_CXX:.$(EXT_CXX)=.$(EXT_OBJ)) PRE_TARGETS += $(AUTO_MLL) $(AUTO_MLY) $(AUTO_IDL) $(AUTO_OXRIDL) $(AUTO_ZOG) $(AUTO_REP) $(AUTO_GLADE) ALL_DEPS := $(DEP_ML) $(DEP_MLI) $(DEP_MLL) $(DEP_MLY) $(DEP_IDL) $(DEP_OXRIDL) $(DEP_ZOG) $(DEP_REP) $(DEP_GLADE) MLDEPS := $(filter %.d, $(ALL_DEPS)) MLIDEPS := $(filter %.di, $(ALL_DEPS)) BCDEPIS := $(MLIDEPS:%.di=$(BCDIDIR)/%.di) NCDEPIS := $(MLIDEPS:%.di=$(NCDIDIR)/%.di) ALLML := $(filter %.mli %.ml %.mll %.mly %.idl %.oxridl %.rep %.zog %.glade, $(FILTERED)) IMPLO_INTF := $(ALLML:%.mli=%.mli.__) IMPLO_INTF := $(foreach file, $(IMPLO_INTF), \ $(basename $(file)).cmi $(basename $(file)).cmo) IMPLO_INTF := $(filter-out %.mli.cmo, $(IMPLO_INTF)) IMPLO_INTF := $(IMPLO_INTF:%.mli.cmi=%.cmi) IMPLX_INTF := $(IMPLO_INTF:.cmo=.cmx) INTF := $(filter %.cmi, $(IMPLO_INTF)) IMPL_CMO := $(filter %.cmo, $(IMPLO_INTF)) IMPL_CMX := $(IMPL_CMO:.cmo=.cmx) IMPL_ASM := $(IMPL_CMO:.cmo=.asm) IMPL_S := $(IMPL_CMO:.cmo=.s) OBJ_LINK := $(OBJ_C_IDL) $(OBJ_C_CXX) OBJ_FILES := $(IMPL_CMO:.cmo=.$(EXT_OBJ)) $(OBJ_LINK) EXECS := $(addsuffix $(EXE), \ $(sort $(TOPRESULT) $(BCRESULT) $(NCRESULT))) ifdef WIN32 EXECS += $(BCRESULT).dll $(NCRESULT).dll endif CLIB_BASE := $(RESULT)$(RES_CLIB_SUF) ifneq ($(strip $(OBJ_LINK)),) RES_CLIB := lib$(CLIB_BASE).$(EXT_LIB) endif ifdef WIN32 DLLSONAME := dll$(CLIB_BASE).dll else DLLSONAME := dll$(CLIB_BASE).so endif NONEXECS := $(INTF) $(IMPL_CMO) $(IMPL_CMX) $(IMPL_ASM) $(IMPL_S) \ $(OBJ_FILES) $(PRE_TARGETS) $(BCRESULT).cma $(NCRESULT).cmxa \ $(NCRESULT).$(EXT_LIB) $(BCRESULT).cmi $(BCRESULT).cmo \ $(NCRESULT).cmi $(NCRESULT).cmx $(NCRESULT).$(EXT_OBJ) \ $(RES_CLIB) $(IMPL_CMO:.cmo=.annot) \ $(LIB_PACK_NAME).cmi $(LIB_PACK_NAME).cmo $(LIB_PACK_NAME).cmx \ $(LIB_PACK_NAME).$(EXT_OBJ) ifndef STATIC NONEXECS += $(DLLSONAME) endif ifndef LIBINSTALL_FILES LIBINSTALL_FILES := $(RESULT).mli $(RESULT).cmi $(RESULT).cma \ $(RESULT).cmxa $(RESULT).$(EXT_LIB) $(RES_CLIB) ifndef STATIC ifneq ($(strip $(OBJ_LINK)),) LIBINSTALL_FILES += $(DLLSONAME) endif endif endif export LIBINSTALL_FILES ifdef WIN32 # some extra stuff is created while linking DLLs NONEXECS += $(BCRESULT).$(EXT_LIB) $(BCRESULT).exp $(NCRESULT).exp $(CLIB_BASE).exp $(CLIB_BASE).lib endif TARGETS := $(EXECS) $(NONEXECS) # If there are IDL-files ifneq ($(strip $(FILTERED_IDL)),) MAYBE_IDL := -cclib -lcamlidl endif ifdef USE_CAMLP4 CAMLP4PATH := \ $(shell $(CAMLP4) -where 2>/dev/null || echo /usr/local/lib/camlp4) INCFLAGS := -I $(CAMLP4PATH) CINCFLAGS := -I$(CAMLP4PATH) endif INCFLAGS := $(INCFLAGS) $(INCDIRS:%=-I %) $(SOURCE_DIRS:%=-I %) $(OCAML_DEFAULT_DIRS:%=-I %) CINCFLAGS += $(SOURCE_DIRS:%=-I%) $(INCDIRS:%=-I%) $(OCAML_DEFAULT_DIRS:%=-I%) ifndef MSVC CLIBFLAGS += $(SOURCE_DIRS:%=-L%) $(LIBDIRS:%=-L%) \ $(EXTLIBDIRS:%=-L%) $(OCAML_DEFAULT_DIRS:%=-L%) ifeq ($(ELF_RPATH), yes) CLIBFLAGS += $(EXTLIBDIRS:%=-Wl,$(RPATH_FLAG)%) endif endif ifndef PROFILING INTF_OCAMLC := $(OCAMLC) else ifndef THREADS INTF_OCAMLC := $(OCAMLCP) -p $(OCAMLCPFLAGS) else # OCaml does not support profiling byte code # with threads (yet), therefore we force an error. ifndef REAL_OCAMLC $(error Profiling of multithreaded byte code not yet supported by OCaml) endif INTF_OCAMLC := $(OCAMLC) endif endif ifndef MSVC COMMON_LDFLAGS := $(LDFLAGS:%=-ccopt %) $(SOURCE_DIRS:%=-ccopt -L%) \ $(LIBDIRS:%=-ccopt -L%) $(EXTLIBDIRS:%=-ccopt -L%) \ $(EXTLIBDIRS:%=-ccopt -Wl $(OCAML_DEFAULT_DIRS:%=-ccopt -L%)) ifeq ($(ELF_RPATH),yes) COMMON_LDFLAGS += $(EXTLIBDIRS:%=-ccopt -Wl,$(RPATH_FLAG)%) endif else COMMON_LDFLAGS := -ccopt "/link -NODEFAULTLIB:LIBC $(LDFLAGS:%=%) $(SOURCE_DIRS:%=-LIBPATH:%) \ $(LIBDIRS:%=-LIBPATH:%) $(EXTLIBDIRS:%=-LIBPATH:%) \ $(OCAML_DEFAULT_DIRS:%=-LIBPATH:%) " endif CLIBS_OPTS := $(CLIBS:%=-cclib -l%) $(CFRAMEWORKS:%=-cclib '-framework %') ifdef MSVC ifndef STATIC # MSVC libraries do not have 'lib' prefix CLIBS_OPTS := $(CLIBS:%=-cclib %.lib) endif endif ifneq ($(strip $(OBJ_LINK)),) ifdef CREATE_LIB OBJS_LIBS := -cclib -l$(CLIB_BASE) $(CLIBS_OPTS) $(MAYBE_IDL) else OBJS_LIBS := $(OBJ_LINK) $(CLIBS_OPTS) $(MAYBE_IDL) endif else OBJS_LIBS := $(CLIBS_OPTS) $(MAYBE_IDL) endif ifdef LIB_PACK_NAME FOR_PACK_NAME := $(shell echo $(LIB_PACK_NAME) | awk '{print toupper(substr($$0,1,1))substr($$0,2)}') endif # If we have to make byte-code ifndef REAL_OCAMLC BYTE_OCAML := y # EXTRADEPS is added dependencies we have to insert for all # executable files we generate. Ideally it should be all of the # libraries we use, but it's hard to find the ones that get searched on # the path since I don't know the paths built into the compiler, so # just include the ones with slashes in their names. EXTRADEPS := $(addsuffix .cma,$(foreach i,$(LIBS),$(if $(findstring /,$(i)),$(i)))) ifndef LIB_PACK_NAME SPECIAL_OCAMLFLAGS := $(OCAMLBCFLAGS) else SPECIAL_OCAMLFLAGS := -for-pack $(FOR_PACK_NAME) $(OCAMLBCFLAGS) endif REAL_OCAMLC := $(INTF_OCAMLC) REAL_IMPL := $(IMPL_CMO) REAL_IMPL_INTF := $(IMPLO_INTF) IMPL_SUF := .cmo DEPFLAGS := MAKE_DEPS := $(MLDEPS) $(BCDEPIS) ifdef CREATE_LIB override CFLAGS := $(PIC_CFLAGS) $(CFLAGS) override CPPFLAGS := $(PIC_CPPFLAGS) $(CPPFLAGS) ifndef STATIC ifneq ($(strip $(OBJ_LINK)),) MAKEDLL := $(DLLSONAME) ALL_LDFLAGS := -dllib $(DLLSONAME) endif endif endif ifndef NO_CUSTOM ifneq "$(strip $(OBJ_LINK) $(THREADS) $(MAYBE_IDL) $(CLIBS) $(CFRAMEWORKS))" "" ALL_LDFLAGS += -custom endif endif ALL_LDFLAGS += $(INCFLAGS) $(OCAMLLDFLAGS) $(OCAMLBLDFLAGS) \ $(COMMON_LDFLAGS) $(LIBS:%=%.cma) CAMLIDLDLLFLAGS := ifdef THREADS ifdef VMTHREADS THREAD_FLAG := -vmthread else THREAD_FLAG := -thread endif ALL_LDFLAGS := $(THREAD_FLAG) $(ALL_LDFLAGS) ifndef CREATE_LIB ifndef REAL_OCAMLFIND ALL_LDFLAGS := unix.cma threads.cma $(ALL_LDFLAGS) endif endif endif # we have to make native-code else EXTRADEPS := $(addsuffix .cmxa,$(foreach i,$(LIBS),$(if $(findstring /,$(i)),$(i)))) ifndef PROFILING SPECIAL_OCAMLFLAGS := $(OCAMLNCFLAGS) PLDFLAGS := else SPECIAL_OCAMLFLAGS := -p $(OCAMLNCFLAGS) PLDFLAGS := -p endif ifndef LIB_PACK_NAME SPECIAL_OCAMLFLAGS := $(OCAMLNCFLAGS) else SPECIAL_OCAMLFLAGS := -for-pack $(FOR_PACK_NAME) $(OCAMLNCFLAGS) endif REAL_IMPL := $(IMPL_CMX) REAL_IMPL_INTF := $(IMPLX_INTF) IMPL_SUF := .cmx override CPPFLAGS := -DNATIVE_CODE $(CPPFLAGS) DEPFLAGS := -native MAKE_DEPS := $(MLDEPS) $(NCDEPIS) ALL_LDFLAGS := $(PLDFLAGS) $(INCFLAGS) $(OCAMLLDFLAGS) \ $(OCAMLNLDFLAGS) $(COMMON_LDFLAGS) CAMLIDLDLLFLAGS := -opt ifndef CREATE_LIB ALL_LDFLAGS += $(LIBS:%=%.cmxa) else override CFLAGS := $(PIC_CFLAGS) $(CFLAGS) override CPPFLAGS := $(PIC_CPPFLAGS) $(CPPFLAGS) endif ifdef THREADS THREAD_FLAG := -thread ALL_LDFLAGS := $(THREAD_FLAG) $(ALL_LDFLAGS) ifndef CREATE_LIB ifndef REAL_OCAMLFIND ALL_LDFLAGS := unix.cmxa threads.cmxa $(ALL_LDFLAGS) endif endif endif endif export MAKE_DEPS ifdef ANNOTATE ANNOT_FLAG := -annot -bin-annot else endif ALL_OCAMLCFLAGS := $(THREAD_FLAG) $(ANNOT_FLAG) $(OCAMLFLAGS) \ $(INCFLAGS) $(SPECIAL_OCAMLFLAGS) ifdef make_deps -include $(MAKE_DEPS) PRE_TARGETS := endif ########################################################################### # USER RULES # Call "OCamlMakefile QUIET=" to get rid of all of the @'s. QUIET=@ # generates byte-code (default) byte-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(BCRESULT) \ REAL_RESULT="$(BCRESULT)" make_deps=yes bc: byte-code byte-code-nolink: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) nolink \ REAL_RESULT="$(BCRESULT)" make_deps=yes bcnl: byte-code-nolink top: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(TOPRESULT) \ REAL_RESULT="$(BCRESULT)" make_deps=yes # generates native-code native-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(NCRESULT) \ REAL_RESULT="$(NCRESULT)" \ REAL_OCAMLC="$(OCAMLOPT)" \ make_deps=yes nc: native-code native-code-nolink: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) nolink \ REAL_RESULT="$(NCRESULT)" \ REAL_OCAMLC="$(OCAMLOPT)" \ make_deps=yes ncnl: native-code-nolink # generates byte-code libraries byte-code-library: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(BCRESULT).cma \ REAL_RESULT="$(BCRESULT)" \ CREATE_LIB=yes \ make_deps=yes bcl: byte-code-library # generates native-code libraries native-code-library: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(NCRESULT).cmxa \ REAL_RESULT="$(NCRESULT)" \ REAL_OCAMLC="$(OCAMLOPT)" \ CREATE_LIB=yes \ make_deps=yes ncl: native-code-library ifdef WIN32 # generates byte-code dll byte-code-dll: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(BCRESULT).dll \ REAL_RESULT="$(BCRESULT)" \ make_deps=yes bcd: byte-code-dll # generates native-code dll native-code-dll: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(NCRESULT).dll \ REAL_RESULT="$(NCRESULT)" \ REAL_OCAMLC="$(OCAMLOPT)" \ make_deps=yes ncd: native-code-dll endif # generates byte-code with debugging information debug-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(BCRESULT) \ REAL_RESULT="$(BCRESULT)" make_deps=yes \ OCAMLFLAGS="-g $(OCAMLFLAGS)" \ OCAMLLDFLAGS="-g $(OCAMLLDFLAGS)" dc: debug-code debug-code-nolink: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) nolink \ REAL_RESULT="$(BCRESULT)" make_deps=yes \ OCAMLFLAGS="-g $(OCAMLFLAGS)" \ OCAMLLDFLAGS="-g $(OCAMLLDFLAGS)" dcnl: debug-code-nolink # generates byte-code with debugging information (native code) debug-native-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(NCRESULT) \ REAL_RESULT="$(NCRESULT)" make_deps=yes \ REAL_OCAMLC="$(OCAMLOPT)" \ OCAMLFLAGS="-g $(OCAMLFLAGS)" \ OCAMLLDFLAGS="-g $(OCAMLLDFLAGS)" dnc: debug-native-code debug-native-code-nolink: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) nolink \ REAL_RESULT="$(NCRESULT)" make_deps=yes \ REAL_OCAMLC="$(OCAMLOPT)" \ OCAMLFLAGS="-g $(OCAMLFLAGS)" \ OCAMLLDFLAGS="-g $(OCAMLLDFLAGS)" dncnl: debug-native-code-nolink # generates byte-code libraries with debugging information debug-code-library: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(BCRESULT).cma \ REAL_RESULT="$(BCRESULT)" make_deps=yes \ CREATE_LIB=yes \ OCAMLFLAGS="-g $(OCAMLFLAGS)" \ OCAMLLDFLAGS="-g $(OCAMLLDFLAGS)" dcl: debug-code-library # generates byte-code libraries with debugging information (native code) debug-native-code-library: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(NCRESULT).cmxa \ REAL_RESULT="$(NCRESULT)" make_deps=yes \ REAL_OCAMLC="$(OCAMLOPT)" \ CREATE_LIB=yes \ OCAMLFLAGS="-g $(OCAMLFLAGS)" \ OCAMLLDFLAGS="-g $(OCAMLLDFLAGS)" dncl: debug-native-code-library # generates byte-code for profiling profiling-byte-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(BCRESULT) \ REAL_RESULT="$(BCRESULT)" PROFILING="y" \ make_deps=yes pbc: profiling-byte-code # generates native-code profiling-native-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(NCRESULT) \ REAL_RESULT="$(NCRESULT)" \ REAL_OCAMLC="$(OCAMLOPT)" \ PROFILING="y" \ make_deps=yes pnc: profiling-native-code # generates byte-code libraries profiling-byte-code-library: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(BCRESULT).cma \ REAL_RESULT="$(BCRESULT)" PROFILING="y" \ CREATE_LIB=yes \ make_deps=yes pbcl: profiling-byte-code-library # generates native-code libraries profiling-native-code-library: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(NCRESULT).cmxa \ REAL_RESULT="$(NCRESULT)" PROFILING="y" \ REAL_OCAMLC="$(OCAMLOPT)" \ CREATE_LIB=yes \ make_deps=yes pncl: profiling-native-code-library # packs byte-code objects pack-byte-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(BCRESULT).cmo \ REAL_RESULT="$(BCRESULT)" \ PACK_LIB=yes make_deps=yes pabc: pack-byte-code # packs native-code objects pack-native-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(NCRESULT).cmx $(NCRESULT).$(EXT_OBJ) \ REAL_RESULT="$(NCRESULT)" \ REAL_OCAMLC="$(OCAMLOPT)" \ PACK_LIB=yes make_deps=yes panc: pack-native-code # generates HTML-documentation htdoc: $(DOC_DIR)/$(RESULT)/html/index.html # generates Latex-documentation ladoc: $(DOC_DIR)/$(RESULT)/latex/doc.tex # generates PostScript-documentation psdoc: $(DOC_DIR)/$(RESULT)/latex/doc.ps # generates PDF-documentation pdfdoc: $(DOC_DIR)/$(RESULT)/latex/doc.pdf # generates all supported forms of documentation doc: htdoc ladoc psdoc pdfdoc ########################################################################### # LOW LEVEL RULES $(REAL_RESULT): $(REAL_IMPL_INTF) $(OBJ_LINK) $(EXTRADEPS) $(RESULTDEPS) $(REAL_OCAMLFIND) $(REAL_OCAMLC) \ $(OCAML_FIND_PACKAGES) $(OCAML_FIND_LINKPKG) \ $(OBJS_LIBS) $(ALL_LDFLAGS) -o $@$(EXE) \ $(REAL_IMPL) nolink: $(REAL_IMPL_INTF) $(OBJ_LINK) ifdef WIN32 $(REAL_RESULT).dll: $(REAL_IMPL_INTF) $(OBJ_LINK) $(CAMLIDLDLL) $(CAMLIDLDLLFLAGS) $(OBJ_LINK) $(CLIBS) \ -o $@ $(REAL_IMPL) endif %$(TOPSUFFIX): $(REAL_IMPL_INTF) $(OBJ_LINK) $(EXTRADEPS) $(REAL_OCAMLFIND) $(OCAMLMKTOP) \ $(OCAML_FIND_PACKAGES) $(OCAML_FIND_LINKPKG) \ $(OBJS_LIBS) $(ALL_LDFLAGS) -o $@$(EXE) \ $(REAL_IMPL) .SUFFIXES: .mli .ml .cmi .cmo .cmx .cma .cmxa .$(EXT_OBJ) \ .mly .di .d .$(EXT_LIB) .idl %.oxridl .c .m .$(EXT_CXX) .h .so \ .rep .zog .glade ifndef STATIC ifdef MINGW # From OCaml 3.11.0, ocamlmklib is available on windows OCAMLMLIB_EXISTS = $(shell which $(OCAMLMKLIB)) ifeq ($(strip $(OCAMLMLIB_EXISTS)),) $(DLLSONAME): $(OBJ_LINK) $(CC) $(CFLAGS) $(CFLAGS_WIN32) $(OBJ_LINK) -shared -o $@ \ $(wildcard $(foreach dir,$(LIBDIRS),$(CLIBS:%=$(dir)/lib%.a))) \ '$(OCAMLLIBPATH)/ocamlrun.a' \ -Wl,--whole-archive \ -Wl,--export-all-symbols \ -Wl,--allow-multiple-definition \ -Wl,--enable-auto-import else $(DLLSONAME): $(OBJ_LINK) $(OCAMLMKLIB) $(INCFLAGS) $(CLIBFLAGS) \ -o $(CLIB_BASE) $(OBJ_LINK) $(CLIBS:%=-l%) \ $(CFRAMEWORKS:%=-framework %) \ $(OCAMLMKLIB_FLAGS) endif else ifdef MSVC $(DLLSONAME): $(OBJ_LINK) link /NOLOGO /DLL /OUT:$@ $(OBJ_LINK) \ $(wildcard $(foreach dir,$(LIBDIRS),$(CLIBS:%=$(dir)/%.lib))) \ '$(OCAMLLIBPATH)/ocamlrun.lib' else $(DLLSONAME): $(OBJ_LINK) $(OCAMLMKLIB) $(INCFLAGS) $(CLIBFLAGS) \ -o $(CLIB_BASE) $(OBJ_LINK) $(CLIBS:%=-l%) $(CFRAMEWORKS:%=-framework %) \ $(OCAMLMKLIB_FLAGS) endif endif endif ifndef LIB_PACK_NAME $(RESULT).cma: $(REAL_IMPL_INTF) $(MAKEDLL) $(EXTRADEPS) $(RESULTDEPS) $(REAL_OCAMLFIND) $(REAL_OCAMLC) -a $(OBJS_LIBS) $(ALL_LDFLAGS) -o $@ $(REAL_IMPL) $(RESULT).cmxa $(RESULT).$(EXT_LIB): $(REAL_IMPL_INTF) $(EXTRADEPS) $(RESULTDEPS) $(REAL_OCAMLFIND) $(OCAMLOPT) -a $(OBJS_LIBS) $(ALL_LDFLAGS) -o $@ $(REAL_IMPL) else # Packing a bytecode library LIB_PACK_NAME_MLI = $(wildcard $(LIB_PACK_NAME).mli) ifeq ($(LIB_PACK_NAME_MLI),) LIB_PACK_NAME_CMI = $(LIB_PACK_NAME).cmi else # $(LIB_PACK_NAME).mli exists, it likely depends on other compiled interfaces LIB_PACK_NAME_CMI = $(LIB_PACK_NAME).cmi: $(REAL_IMPL_INTF) endif ifdef BYTE_OCAML $(LIB_PACK_NAME_CMI) $(LIB_PACK_NAME).cmo: $(REAL_IMPL_INTF) $(REAL_OCAMLFIND) $(REAL_OCAMLC) -pack -o $(LIB_PACK_NAME).cmo $(OCAMLLDFLAGS) $(REAL_IMPL) # Packing into a unit which can be transformed into a library # Remember the .ml's must have been compiled with -for-pack $(LIB_PACK_NAME) else $(LIB_PACK_NAME_CMI) $(LIB_PACK_NAME).cmx: $(REAL_IMPL_INTF) $(REAL_OCAMLFIND) $(OCAMLOPT) -pack -o $(LIB_PACK_NAME).cmx $(OCAMLLDFLAGS) $(REAL_IMPL) endif $(RESULT).cma: $(LIB_PACK_NAME).cmi $(LIB_PACK_NAME).cmo $(MAKEDLL) $(EXTRADEPS) $(RESULTDEPS) $(REAL_OCAMLFIND) $(REAL_OCAMLC) -a $(OBJS_LIBS) $(ALL_LDFLAGS) -o $@ $(LIB_PACK_NAME).cmo $(RESULT).cmxa $(RESULT).$(EXT_LIB): $(LIB_PACK_NAME).cmi $(LIB_PACK_NAME).cmx $(EXTRADEPS) $(RESULTDEPS) $(REAL_OCAMLFIND) $(OCAMLOPT) -a $(OBJS_LIBS) $(filter-out -custom, $(ALL_LDFLAGS)) -o $@ $(LIB_PACK_NAME).cmx endif $(RES_CLIB): $(OBJ_LINK) ifndef MSVC ifneq ($(strip $(OBJ_LINK)),) $(AR) rcs $@ $(OBJ_LINK) endif else ifneq ($(strip $(OBJ_LINK)),) lib -nologo -debugtype:cv -out:$(RES_CLIB) $(OBJ_LINK) endif endif %.cmi: %.mli $(EXTRADEPS) $(QUIET)pp=`sed -n -e '/^#/d' -e 's/(\*pp \([^*]*\) \*)/\1/p;q' $<`; \ if [ -z "$$pp" ]; then \ $(ECHO) $(REAL_OCAMLFIND) $(INTF_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c $(THREAD_FLAG) $(ANNOT_FLAG) \ $(OCAMLFLAGS) $(INCFLAGS) $<; \ $(REAL_OCAMLFIND) $(INTF_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c $(THREAD_FLAG) $(ANNOT_FLAG) \ $(OCAMLFLAGS) $(INCFLAGS) $<; \ else \ $(ECHO) $(REAL_OCAMLFIND) $(INTF_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c -pp \"$$pp $(PPFLAGS)\" $(THREAD_FLAG) $(ANNOT_FLAG) \ $(OCAMLFLAGS) $(INCFLAGS) $<; \ $(REAL_OCAMLFIND) $(INTF_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c -pp "$$pp $(PPFLAGS)" $(THREAD_FLAG) $(ANNOT_FLAG) \ $(OCAMLFLAGS) $(INCFLAGS) $<; \ fi %.cmi: %$(IMPL_SUF); %$(IMPL_SUF) %.$(EXT_OBJ): %.ml $(EXTRADEPS) $(QUIET)pp=`sed -n -e '/^#/d' -e 's/(\*pp \([^*]*\) \*)/\1/p;q' $<`; \ if [ -z "$$pp" ]; then \ $(ECHO) $(REAL_OCAMLFIND) $(REAL_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c $(ALL_OCAMLCFLAGS) $<; \ $(REAL_OCAMLFIND) $(REAL_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c $(ALL_OCAMLCFLAGS) $<; \ else \ $(ECHO) $(REAL_OCAMLFIND) $(REAL_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c -pp \"$$pp $(PPFLAGS)\" $(ALL_OCAMLCFLAGS) $<; \ $(REAL_OCAMLFIND) $(REAL_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c -pp "$$pp $(PPFLAGS)" $(ALL_OCAMLCFLAGS) $<; \ fi .PRECIOUS: %.ml %.ml: %.mll $(OCAMLLEX) $(LFLAGS) $< .PRECIOUS: %.ml %.mli %.ml %.mli: %.mly $(OCAMLYACC) $(YFLAGS) $< $(QUIET)pp=`sed -n -e 's/.*(\*pp \([^*]*\) \*).*/\1/p;q' $<`; \ if [ ! -z "$$pp" ]; then \ mv $*.ml $*.ml.temporary; \ echo "(*pp $$pp $(PPFLAGS)*)" > $*.ml; \ cat $*.ml.temporary >> $*.ml; \ rm $*.ml.temporary; \ mv $*.mli $*.mli.temporary; \ echo "(*pp $$pp $(PPFLAGS)*)" > $*.mli; \ cat $*.mli.temporary >> $*.mli; \ rm $*.mli.temporary; \ fi .PRECIOUS: %.ml %.ml: %.rep $(CAMELEON_REPORT) $(CAMELEON_REPORT_FLAGS) -gen $< .PRECIOUS: %.ml %.ml: %.zog $(CAMELEON_ZOGGY) $(CAMELEON_ZOGGY_FLAGS) -impl $< > $@ .PRECIOUS: %.ml %.ml: %.glade $(OCAML_GLADECC) $(OCAML_GLADECC_FLAGS) $< > $@ .PRECIOUS: %.ml %.mli %.ml %.mli: %.oxridl $(OXRIDL) $< .PRECIOUS: %.ml %.mli %_stubs.c %.h %.ml %.mli %_stubs.c %.h: %.idl $(CAMLIDL) $(MAYBE_IDL_HEADER) $(IDLFLAGS) \ $(CAMLIDLFLAGS) $< $(QUIET)if [ $(NOIDLHEADER) ]; then touch $*.h; fi %.$(EXT_OBJ): %.c $(REAL_OCAMLFIND) $(REAL_OCAMLC) $(THREAD_FLAG) $(OCAML_FIND_PACKAGES) \ -c -cc "$(CC)" $(INCFLAGS) -ccopt "$(CFLAGS) \ $(CPPFLAGS) $(CPPFLAGS_WIN32) \ $(CFLAGS_WIN32) $(CINCFLAGS) $(CFLAG_O)$@ " $< %.$(EXT_OBJ): %.m $(CC) -c $(CFLAGS) $(CINCFLAGS) $(CPPFLAGS) \ -I'$(OCAMLLIBPATH)' \ $< $(CFLAG_O)$@ %.$(EXT_OBJ): %.$(EXT_CXX) $(CXX) -c $(CXXFLAGS) $(CINCFLAGS) $(CPPFLAGS) \ -I'$(OCAMLLIBPATH)' \ $< $(CFLAG_O)$@ $(MLDEPDIR)/%.d: %.ml $(QUIET)if [ ! -d $(@D) ]; then mkdir -p $(@D); fi $(QUIET)pp=`sed -n -e '/^#/d' -e 's/(\*pp \([^*]*\) \*)/\1/p;q' $<`; \ if [ -z "$$pp" ]; then \ $(ECHO) $(REAL_OCAMLFIND) $(OCAMLDEP) $(OCAML_DEP_PACKAGES) \ $(INCFLAGS) $< \> $@; \ $(REAL_OCAMLFIND) $(OCAMLDEP) $(OCAML_DEP_PACKAGES) \ $(INCFLAGS) $< > $@; \ else \ $(ECHO) $(REAL_OCAMLFIND) $(OCAMLDEP) $(OCAML_DEP_PACKAGES) \ -pp \"$$pp $(PPFLAGS)\" $(INCFLAGS) $< \> $@; \ $(REAL_OCAMLFIND) $(OCAMLDEP) $(OCAML_DEP_PACKAGES) \ -pp "$$pp $(PPFLAGS)" $(INCFLAGS) $< > $@; \ fi $(BCDIDIR)/%.di $(NCDIDIR)/%.di: %.mli $(QUIET)if [ ! -d $(@D) ]; then mkdir -p $(@D); fi $(QUIET)pp=`sed -n -e '/^#/d' -e 's/(\*pp \([^*]*\) \*)/\1/p;q' $<`; \ if [ -z "$$pp" ]; then \ $(ECHO) $(REAL_OCAMLFIND) $(OCAMLDEP) $(DEPFLAGS) $(INCFLAGS) $< \> $@; \ $(REAL_OCAMLFIND) $(OCAMLDEP) $(DEPFLAGS) $(INCFLAGS) $< > $@; \ else \ $(ECHO) $(REAL_OCAMLFIND) $(OCAMLDEP) $(DEPFLAGS) \ -pp \"$$pp $(PPFLAGS)\" $(INCFLAGS) $< \> $@; \ $(REAL_OCAMLFIND) $(OCAMLDEP) $(DEPFLAGS) \ -pp "$$pp $(PPFLAGS)" $(INCFLAGS) $< > $@; \ fi $(DOC_DIR)/$(RESULT)/html: mkdir -p $@ $(DOC_DIR)/$(RESULT)/html/index.html: $(DOC_DIR)/$(RESULT)/html $(DOC_FILES) rm -rf $</* $(QUIET)pp=`sed -n -e '/^#/d' -e 's/(\*pp \([^*]*\) \*)/\1/p;q' $(FIRST_DOC_FILE)`; \ if [ -z "$$pp" ]; then \ $(ECHO) $(REAL_OCAMLFIND) $(OCAMLDOC) $(OCAML_FIND_PACKAGES) -html -d $< $(OCAMLDOCFLAGS) $(INCFLAGS) $(DOC_FILES); \ $(REAL_OCAMLFIND) $(OCAMLDOC) $(OCAML_FIND_PACKAGES) -html -d $< $(OCAMLDOCFLAGS) $(INCFLAGS) $(DOC_FILES); \ else \ $(ECHO) $(REAL_OCAMLFIND) $(OCAMLDOC) $(OCAML_FIND_PACKAGES) -pp \"$$pp $(PPFLAGS)\" -html -d $< $(OCAMLDOCFLAGS) \ $(INCFLAGS) $(DOC_FILES); \ $(REAL_OCAMLFIND) $(OCAMLDOC) $(OCAML_FIND_PACKAGES) -pp "$$pp $(PPFLAGS)" -html -d $< $(OCAMLDOCFLAGS) \ $(INCFLAGS) $(DOC_FILES); \ fi $(DOC_DIR)/$(RESULT)/latex: mkdir -p $@ $(DOC_DIR)/$(RESULT)/latex/doc.tex: $(DOC_DIR)/$(RESULT)/latex $(DOC_FILES) rm -rf $</* $(QUIET)pp=`sed -n -e '/^#/d' -e 's/(\*pp \([^*]*\) \*)/\1/p;q' $(FIRST_DOC_FILE)`; \ if [ -z "$$pp" ]; then \ $(ECHO) $(REAL_OCAMLFIND) $(OCAMLDOC) $(OCAML_FIND_PACKAGES) -latex $(OCAMLDOCFLAGS) $(INCFLAGS) \ $(DOC_FILES) -o $@; \ $(REAL_OCAMLFIND) $(OCAMLDOC) $(OCAML_FIND_PACKAGES) -latex $(OCAMLDOCFLAGS) $(INCFLAGS) $(DOC_FILES) \ -o $@; \ else \ $(ECHO) $(REAL_OCAMLFIND) $(OCAMLDOC) $(OCAML_FIND_PACKAGES) -pp \"$$pp $(PPFLAGS)\" -latex $(OCAMLDOCFLAGS) \ $(INCFLAGS) $(DOC_FILES) -o $@; \ $(REAL_OCAMLFIND) $(OCAMLDOC) $(OCAML_FIND_PACKAGES) -pp "$$pp $(PPFLAGS)" -latex $(OCAMLDOCFLAGS) \ $(INCFLAGS) $(DOC_FILES) -o $@; \ fi $(DOC_DIR)/$(RESULT)/latex/doc.ps: $(DOC_DIR)/$(RESULT)/latex/doc.tex cd $(DOC_DIR)/$(RESULT)/latex && \ $(LATEX) doc.tex && \ $(LATEX) doc.tex && \ $(DVIPS) $(DVIPSFLAGS) doc.dvi -o $(@F) $(DOC_DIR)/$(RESULT)/latex/doc.pdf: $(DOC_DIR)/$(RESULT)/latex/doc.ps cd $(DOC_DIR)/$(RESULT)/latex && $(PS2PDF) $(<F) define make_subproj .PHONY: subproj_$(1): $$(eval $$(call PROJ_$(1))) $(QUIET)if [ "$(SUBTARGET)" != "all" ]; then \ $(MAKE) -f $(OCAMLMAKEFILE) $(SUBTARGET); \ fi endef $(foreach subproj,$(SUBPROJS),$(eval $(call make_subproj,$(subproj)))) .PHONY: subprojs: $(SUBPROJS:%=subproj_%) ########################################################################### # (UN)INSTALL RULES FOR LIBRARIES .PHONY: libinstall libinstall: all $(QUIET)printf "\nInstalling library with ocamlfind\n" $(OCAMLFIND) install $(OCAMLFIND_INSTFLAGS) $(RESULT) META $(LIBINSTALL_FILES) $(QUIET)printf "\nInstallation successful.\n" .PHONY: libinstall-byte-code libinstall-byte-code: all $(QUIET)printf "\nInstalling byte-code library with ocamlfind\n" $(OCAMLFIND) install $(OCAMLFIND_INSTFLAGS) $(RESULT) META \ $(filter-out $(RESULT).$(EXT_LIB) $(RESULT).cmxa, $(LIBINSTALL_FILES)) $(QUIET)printf "\nInstallation successful.\n" .PHONY: libinstall-native-code libinstall-native-code: all $(QUIET)printf "\nInstalling native-code library with ocamlfind\n" $(OCAMLFIND) install $(OCAMLFIND_INSTFLAGS) $(RESULT) META \ $(filter-out $(DLLSONAME) $(RESULT).cma, $(LIBINSTALL_FILES)) $(QUIET)printf "\nInstallation successful.\n" .PHONY: libuninstall libuninstall: $(QUIET)printf "\nUninstalling library with ocamlfind\n" $(OCAMLFIND) remove $(OCAMLFIND_INSTFLAGS) $(RESULT) $(QUIET)printf "\nUninstallation successful.\n" .PHONY: rawinstall rawinstall: all $(QUIET)printf "\nInstalling library to: $(OCAML_LIB_INSTALL)\n" -install -d $(OCAML_LIB_INSTALL) for i in $(LIBINSTALL_FILES); do \ if [ -f $$i ]; then \ install -c -m 0644 $$i $(OCAML_LIB_INSTALL); \ fi; \ done $(QUIET)printf "\nInstallation successful.\n" .PHONY: rawuninstall rawuninstall: $(QUIET)printf "\nUninstalling library from: $(OCAML_LIB_INSTALL)\n" cd $(OCAML_LIB_INSTALL) && rm $(notdir $(LIBINSTALL_FILES)) $(QUIET)printf "\nUninstallation successful.\n" ########################################################################### # MAINTENANCE RULES .PHONY: clean clean:: rm -f $(TARGETS) $(TRASH) rm -rf $(BCDIDIR) $(NCDIDIR) $(MLDEPDIR) .PHONY: cleanup cleanup:: rm -f $(NONEXECS) $(TRASH) rm -rf $(BCDIDIR) $(NCDIDIR) $(MLDEPDIR) .PHONY: clean-doc clean-doc:: rm -rf $(DOC_DIR)/$(RESULT) .PHONY: clean-all clean-all:: clean clean-doc .PHONY: nobackup nobackup: rm -f *.bak *~ *.dup ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/cpdf.opam��������������������������������������������������������������������������������0000664�0001750�0001750�00000000765�14771516640�012733� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������opam-version: "2.0" name: "cpdf" version: "2.8.1" maintainer: "contact@coherentgraphics.co.uk" license: "AGPL-3.0-or-later" build: [[make]] depends: [ "ocaml" {>= "4.10.0"} "ocamlfind" {build} "camlpdf" {= version} ] homepage: "http://github.com/johnwhitington/cpdf-source" authors: ["John Whitington"] bug-reports: "http://github.com/johnwhitington/cpdf-source/issues" dev-repo: "git+https://github.com/johnwhitington/cpdf-source" install: [[make "install"]] synopsis: "PDF command line tools" �����������cpdf-2.8.1/cpdfposition.mli�������������������������������������������������������������������������0000664�0001750�0001750�00000001651�14771516640�014340� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(** Positions *) (** Possible positions for adding text and other uses. See cpdfmanual.pdf *) type position = PosCentre of float * float | PosLeft of float * float | PosRight of float * float | Top of float | TopLeft of float * float | TopRight of float * float | Left of float | BottomLeft of float * float | Bottom of float | BottomRight of float * float | Right of float | Diagonal | ReverseDiagonal | Centre (** Produce a debug string of a [position] *) val string_of_position : position -> string (** [calculate_position ignore_d w (xmin, ymin, xmax, ymax) orientation pos] calculates the absolute position of text given its width, bounding box, orientation and position. If [ignore_d] is true, the distance from the position (e.g 10 in TopLeft 10) is ignored (considered zero). *) val calculate_position : bool -> float -> float * float * float * float -> position -> float * float * float ���������������������������������������������������������������������������������������cpdf-2.8.1/cpdfattach.ml����������������������������������������������������������������������������0000664�0001750�0001750�00000036310�14771516640�013567� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������open Pdfutil open Pdfio open Cpdferror (* Remove characters which might not make good filenames. In, UTF8, out UTF8. *) let remove_unsafe_characters s = let codepoints = Pdftext.codepoints_of_utf8 s in let codepoints = lose (function x -> x = int_of_char '/' || x = int_of_char '?' || x = int_of_char '<' || x = int_of_char '>' || x = int_of_char '\\' || x = int_of_char ':' || x = int_of_char '*' || x = int_of_char '|' || x = int_of_char '\"' || x = int_of_char '^' || x = int_of_char '+' || x = int_of_char '=' || x < 32 || x = 127) codepoints in match codepoints with | 46::more -> Pdftext.utf8_of_codepoints codepoints (* Don't produce a dotfile *) | chars -> Pdftext.utf8_of_codepoints codepoints (* Attaching files *) let attach_file ?memory keepversion topage pdf file = let data = match memory with Some data -> data | None -> let ch = open_in_bin file in let len = in_channel_length ch in let stream = mkbytes len in let i = input_of_channel ch in setinit i stream 0 len; close_in ch; stream in let filestream = Pdf.Stream (ref (Pdf.Dictionary [("/Length", Pdf.Integer (bytes_size data)); ("/Type", Pdf.Name "/EmbeddedFile"); ("/Params", Pdf.Dictionary [("/Size", Pdf.Integer (bytes_size data)); ("/CheckSum", Pdf.String (Digest.string (string_of_bytes data))) ])], Pdf.Got data)) in let filestream_num = Pdf.addobj pdf filestream in let basename = Pdftext.pdfdocstring_of_utf8 (Filename.basename file) in let filespec = Pdf.Dictionary [("/EF", Pdf.Dictionary ["/F", Pdf.Indirect filestream_num]); ("/F", Pdf.String basename); ("/Type", Pdf.Name "/Filespec"); ("/Desc", Pdf.String ""); ("/UF", Pdf.String basename)] in match topage with | None -> (* Look up /Names and /EmbeddedFiles and /Names. *) let rootdict = Pdf.lookup_obj pdf pdf.Pdf.root in let namedict = match Pdf.lookup_direct pdf "/Names" rootdict with | None -> Pdf.Dictionary [] | Some namedict -> namedict in let embeddednamedict = match Pdf.lookup_direct pdf "/EmbeddedFiles" namedict with | None -> Pdf.Dictionary [] | Some embeddednamedict -> embeddednamedict in let elts = match Pdf.lookup_direct pdf "/Names" embeddednamedict with | Some (Pdf.Array elts) -> elts | _ -> [] in let filespecobj = Pdf.addobj pdf filespec in let names' = Pdf.Array (elts @ [Pdf.String basename; Pdf.Indirect filespecobj]) in let embeddednamedict' = Pdf.add_dict_entry embeddednamedict "/Names" names' in let namedict' = Pdf.add_dict_entry namedict "/EmbeddedFiles" embeddednamedict' in let rootdict' = Pdf.add_dict_entry rootdict "/Names" namedict' in let rootnum = Pdf.addobj pdf rootdict' in {pdf with Pdf.minor = if keepversion || pdf.Pdf.major > 1 then pdf.Pdf.minor else max pdf.Pdf.minor 4; Pdf.root = rootnum; Pdf.trailerdict = Pdf.add_dict_entry pdf.Pdf.trailerdict "/Root" (Pdf.Indirect rootnum)} | Some pagenumber -> let pages = Pdfpage.pages_of_pagetree pdf in if pagenumber < 0 || pagenumber > length pages then error "attach_file: Page not found" else let page = select pagenumber pages in let annots = match Pdf.lookup_direct pdf "/Annots" page.Pdfpage.rest with | Some (Pdf.Array annots) -> annots | _ -> [] in let rect = let minx, miny, maxx, maxy = Pdf.parse_rectangle pdf page.Pdfpage.mediabox in Pdf.Array [Pdf.Real 18.; Pdf.Real (maxy -. 45.); Pdf.Real 45.; Pdf.Real (maxy -. 18.)] in let filespecobj = Pdf.addobj pdf filespec in let annot = Pdf.Dictionary [("/FS", Pdf.Indirect filespecobj); ("/Subtype", Pdf.Name "/FileAttachment"); ("/Contents", Pdf.String basename); ("/Rect", rect)] in let annots' = Pdf.Array (annot::annots) in let page' = {page with Pdfpage.rest = Pdf.add_dict_entry page.Pdfpage.rest "/Annots" annots'} in let pages' = replace_number pagenumber page' pages in let pdf = Pdfpage.change_pages true pdf pages' in {pdf with Pdf.minor = if keepversion || pdf.Pdf.major > 1 then pdf.Pdf.minor else max pdf.Pdf.minor 4} type attachment = {name : string; pagenumber : int; data : unit -> Pdfio.bytes} let list_attached_files pdf = let toplevel = match Pdf.lookup_direct pdf "/Root" pdf.Pdf.trailerdict with | None -> [] | Some rootdict -> match Pdf.lookup_direct pdf "/Names" rootdict with | None -> [] | Some namedict -> match Pdf.lookup_direct pdf "/EmbeddedFiles" namedict with | Some nametree -> map (function (x, ef) -> match Pdf.lookup_direct pdf "/EF" ef with | Some ((Pdf.Dictionary _) as d) -> begin match Pdf.lookup_direct pdf "/F" d with | Some stream -> {name = Pdftext.utf8_of_pdfdocstring x; pagenumber = 0; data = (fun () -> try Pdf.getstream stream; Pdfcodec.decode_pdfstream pdf stream; match stream with Pdf.Stream {contents = (_, Pdf.Got data)} -> data | _ -> raise Not_found with _ -> raise (Pdf.PDFError "could not retreive attachment data"))} | None -> raise (Pdf.PDFError "/F not found") end | _ -> raise (Pdf.PDFError "/EF not found")) (option_map (function (Pdf.String s, ef) -> Some (s, ef) | _ -> None) (Pdf.contents_of_nametree pdf nametree)) | _ -> [] in let pagelevel = let pages = Pdfpage.pages_of_pagetree pdf in flatten (map2 (fun page pagenumber -> option_map (function annot -> match Pdf.lookup_direct pdf "/Subtype" annot with | Some (Pdf.Name "/FileAttachment") -> (match Pdf.lookup_direct pdf "/Contents" annot with | Some (Pdf.String s) -> begin match Pdf.lookup_direct pdf "/FS" annot with | Some ((Pdf.Dictionary _) as d) -> (*Pdfe.log (Printf.sprintf "%s\n" (Pdfwrite.string_of_pdf d));*) begin match Pdf.lookup_direct pdf "/EF" d with | Some ((Pdf.Dictionary _) as d) -> begin match Pdf.lookup_direct pdf "/F" d with | Some stream -> Some {name = Pdftext.utf8_of_pdfdocstring s; pagenumber = pagenumber; data = (fun () -> try Pdf.getstream stream; Pdfcodec.decode_pdfstream pdf stream; match stream with Pdf.Stream {contents = (_, Pdf.Got data)} -> data | _ -> raise Not_found with _ -> raise (Pdf.PDFError "could not retreive attachment data"))} | _ -> raise (Pdf.PDFError "no /F found in attachment") end | _ -> Some {name = Pdftext.utf8_of_pdfdocstring s; pagenumber = pagenumber; data = (fun () -> raise (Pdf.PDFError "no attachment data"))} end | _ -> None end | _ -> None) | _ -> None) (match Pdf.lookup_direct pdf "/Annots" page.Pdfpage.rest with | Some (Pdf.Array annots) -> annots | _ -> [])) pages (indx pages)) in toplevel @ pagelevel (* Remove Attached files *) let remove_attached_files_on_pages pdf = let remove_from_page page = {page with Pdfpage.rest = Pdf.add_dict_entry page.Pdfpage.rest "/Annots" (Pdf.Array (option_map (function annot -> match Pdf.lookup_direct pdf "/Subtype" annot with | Some (Pdf.Name "/FileAttachment") -> None | _ -> Some annot) (match Pdf.lookup_direct pdf "/Annots" page.Pdfpage.rest with | Some (Pdf.Array annots) -> annots | _ -> [])))} in Pdfpage.change_pages true pdf (map remove_from_page (Pdfpage.pages_of_pagetree pdf)) let remove_attached_files pdf = let pdf = remove_attached_files_on_pages pdf in match Pdf.lookup_direct pdf "/Root" pdf.Pdf.trailerdict with | None -> pdf | Some rootdict -> match Pdf.lookup_direct pdf "/Names" rootdict with | None -> pdf | Some namedict -> let namedict' = Pdf.remove_dict_entry namedict "/EmbeddedFiles" in let rootdict' = Pdf.add_dict_entry rootdict "/Names" namedict' in let rootdict'num = Pdf.addobj pdf rootdict' in {pdf with Pdf.root = rootdict'num; Pdf.trailerdict = Pdf.add_dict_entry pdf.Pdf.trailerdict "/Root" (Pdf.Indirect rootdict'num)} let dump_attachment out pdf (_, embeddedfile) = match Pdf.lookup_direct pdf "/F" embeddedfile with | Some (Pdf.String s) -> let efdata = begin match Pdf.lookup_direct pdf "/EF" embeddedfile with | Some d -> let stream = match Pdf.lookup_direct pdf "/F" d with | Some s -> s | None -> error "Bad embedded file stream" in Pdfcodec.decode_pdfstream_until_unknown pdf stream; begin match stream with Pdf.Stream {contents = (_, Pdf.Got b)} -> b | _ -> error "Bad embedded file stream" end | _ -> error "Bad embedded file stream" end in let s = remove_unsafe_characters (Pdftext.utf8_of_pdfdocstring s) in let filename = if out = "" then s else out ^ Filename.dir_sep ^ s in begin try let fh = open_out_bin filename in for x = 0 to bytes_size efdata - 1 do output_byte fh (bget efdata x) done; close_out fh with e -> Pdfe.log (Printf.sprintf "Failed to write attachment to %s\n" filename); end | _ -> () let dump_attached_document pdf out = let root = Pdf.lookup_obj pdf pdf.Pdf.root in let names = match Pdf.lookup_direct pdf "/Names" root with Some n -> n | _ -> Pdf.Dictionary [] in match Pdf.lookup_direct pdf "/EmbeddedFiles" names with | Some x -> iter (dump_attachment out pdf) (Pdf.contents_of_nametree pdf x) | None -> () let dump_attached_page pdf out page = let annots = match Pdf.lookup_direct pdf "/Annots" page.Pdfpage.rest with | Some (Pdf.Array l) -> l | _ -> [] in let efannots = keep (fun annot -> match Pdf.lookup_direct pdf "/Subtype" annot with | Some (Pdf.Name "/FileAttachment") -> true | _ -> false) annots in let fsannots = option_map (Pdf.lookup_direct pdf "/FS") efannots in iter (dump_attachment out pdf) (map (fun x -> 0, x) fsannots) (* Dump both document-level and page-level attached files to file, using their file names *) let dump_attached_files pdf out = try dump_attached_document pdf out; iter (dump_attached_page pdf out) (Pdfpage.pages_of_pagetree pdf) with e -> error (Printf.sprintf "Couldn't dump attached files: %s\n" (Printexc.to_string e)) let size_attachment pdf (_, embeddedfile) = match Pdf.lookup_direct pdf "/F" embeddedfile with | Some (Pdf.String s) -> begin match Pdf.lookup_direct pdf "/EF" embeddedfile with | Some d -> let stream = match Pdf.lookup_direct pdf "/F" d with | Some s -> s | None -> error "Bad embedded file stream" in begin match stream with Pdf.Stream {contents = (_, Pdf.Got b)} -> bytes_size b | _ -> error "Bad embedded file stream" end | _ -> error "Bad embedded file stream" end | _ -> 0 let size_page_files pdf page = let annots = match Pdf.lookup_direct pdf "/Annots" page.Pdfpage.rest with | Some (Pdf.Array l) -> l | _ -> [] in let efannots = keep (fun annot -> match Pdf.lookup_direct pdf "/Subtype" annot with | Some (Pdf.Name "/FileAttachment") -> true | _ -> false) annots in let fsannots = option_map (Pdf.lookup_direct pdf "/FS") efannots in map (size_attachment pdf) (map (fun x -> 0, x) fsannots) let size_document_files pdf = let root = Pdf.lookup_obj pdf pdf.Pdf.root in let names = match Pdf.lookup_direct pdf "/Names" root with Some n -> n | _ -> Pdf.Dictionary [] in match Pdf.lookup_direct pdf "/EmbeddedFiles" names with | Some x -> sum (map (size_attachment pdf) (Pdf.contents_of_nametree pdf x)) | None -> 0 let size_attached_files pdf = size_document_files pdf + sum (flatten (map (size_page_files pdf) (Pdfpage.pages_of_pagetree pdf))) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/cpdfcommandrun.ml������������������������������������������������������������������������0000664�0001750�0001750�00000000144�14771516640�014462� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������let _ = match Filename.basename Sys.argv.(0) with "cpdf.top" -> () | _ -> Cpdfcommand.go () ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/cpdftweak.ml�����������������������������������������������������������������������������0000664�0001750�0001750�00000027312�14771516640�013440� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������open Pdfutil open Pdfio open Cpdferror (* Blacken text *) (* Algorithm: Change BT <ops> ET ...to... BT Op_g 0. <ops minus any color, shading or gs operators> ET <ops minus any text positioning or text rendering ones> *) let blacktext_ops colour pdf resources content = let not_text = function | Pdfops.Op_Tj _ | Pdfops.Op_TJ _ | Pdfops.Op_' _ | Pdfops.Op_'' (_, _, _) | Pdfops.Op_Td (_, _) | Pdfops.Op_TD (_, _) | Pdfops.Op_Tm _ | Pdfops.Op_T' | Pdfops.Op_Tc _ | Pdfops.Op_Tw _ | Pdfops.Op_Tz _ | Pdfops.Op_TL _ | Pdfops.Op_Tf (_, _) | Pdfops.Op_Tr _ | Pdfops.Op_Ts _ -> false | _ -> true in let textlevel = ref 0 in let removed = ref [] in let operators = Pdfops.parse_operators pdf resources content in let rec remove_colourops prev = function | [] -> rev prev | Pdfops.Op_BT::more -> incr textlevel; remove_colourops (Cpdfaddtext.colour_op colour::Pdfops.Op_BT::prev) more | Pdfops.Op_ET::more -> decr textlevel; let prev' = !removed @ Pdfops.Op_ET::prev in removed := []; remove_colourops prev' more | (Pdfops.Op_G _ | Pdfops.Op_g _ | Pdfops.Op_RG (_, _, _) | Pdfops.Op_rg (_, _, _) | Pdfops.Op_k (_, _, _, _) | Pdfops.Op_K (_, _, _, _) | Pdfops.Op_SCN _ | Pdfops.Op_SC _ | Pdfops.Op_scn _ | Pdfops.Op_sc _ | Pdfops.Op_SCNName (_, _) | Pdfops.Op_scnName (_, _) | Pdfops.Op_CS _ | Pdfops.Op_cs _ | Pdfops.Op_sh _ | Pdfops.Op_gs _) as op::more -> if !textlevel > 0 then begin removed =| op; remove_colourops prev more end else remove_colourops (op::prev) more | op::more -> if !textlevel > 0 && not_text op then removed =| op; remove_colourops (op::prev) more in let operators' = remove_colourops [] operators in [Pdfops.stream_of_ops operators'] (* Blacken a form xobject, writing it to the same object. *) let blacktext c range pdf = let blacktext_page _ page = let content' = blacktext_ops c pdf page.Pdfpage.resources page.Pdfpage.content in Pdfpage.process_xobjects pdf page (blacktext_ops c); {page with Pdfpage.content = content'} in Cpdfpage.process_pages (Pdfpage.ppstub blacktext_page) pdf range (* Blacken lines. FIXME Why doesn't this do xobjects like the other two? *) let blacklines_ops c pdf resources content = let rec blacken_strokeops prev = function | [] -> rev prev | Pdfops.Op_CS _::t -> blacken_strokeops (Pdfops.Op_CS "/DeviceRGB"::prev) t | (Pdfops.Op_SC _ | Pdfops.Op_SCN _ | Pdfops.Op_SCNName _ | Pdfops.Op_G _ | Pdfops.Op_RG _ | Pdfops.Op_K _)::t -> blacken_strokeops (Cpdfaddtext.colour_op_stroke c::prev) t | h::t -> blacken_strokeops (h::prev) t and operators = Pdfops.parse_operators pdf resources content in let operators' = blacken_strokeops [] operators in [Pdfops.stream_of_ops operators'] let blacklines c range pdf = let blacklines_page _ page = let content' = blacklines_ops c pdf page.Pdfpage.resources page.Pdfpage.content in Pdfpage.process_xobjects pdf page (blacklines_ops c); {page with Pdfpage.content = content'} in Cpdfpage.process_pages (Pdfpage.ppstub blacklines_page) pdf range (* Blacken Fills *) let blackfills_ops c pdf resources content = let rec blacken_fillops prev = function | [] -> rev prev | Pdfops.Op_cs _::t -> blacken_fillops (Pdfops.Op_cs "/DeviceRGB"::prev) t | (Pdfops.Op_sc _ | Pdfops.Op_scn _ | Pdfops.Op_scnName _ | Pdfops.Op_g _ | Pdfops.Op_rg _ | Pdfops.Op_k _)::t -> blacken_fillops (Cpdfaddtext.colour_op c::prev) t | h::t -> blacken_fillops (h::prev) t and operators = Pdfops.parse_operators pdf resources content in let operators' = blacken_fillops [] operators in [Pdfops.stream_of_ops operators'] let blackfills c range pdf = let blackfills_page _ page = let content' = blackfills_ops c pdf page.Pdfpage.resources page.Pdfpage.content in Pdfpage.process_xobjects pdf page (blackfills_ops c); {page with Pdfpage.content = content'} in Cpdfpage.process_pages (Pdfpage.ppstub blackfills_page) pdf range (* Set a minimum line width to avoid dropout *) let thinlines range width pdf = let thinpage _ page = let operators = Pdfops.parse_operators pdf page.Pdfpage.resources page.Pdfpage.content in let ctmstack = ref [ref Pdftransform.i_matrix] in let scaleof_ctm () = try match Pdftransform.decompose (!(hd !ctmstack)) with (scale, _, _, _, _, _) -> scale with Failure _ (*"hd"*) -> 1. in let rec replace_operators prev = function | [] -> rev prev | (Pdfops.Op_w w)::more -> (* Alter width. *) let width' = width /. scaleof_ctm () in let w' = if w >= width' then Pdfops.Op_w w else Pdfops.Op_w width' in replace_operators (w'::prev) more | (Pdfops.Op_cm m)::more -> (* Update CTM *) begin try let top = hd !ctmstack in top := Pdftransform.matrix_compose !top m with Failure _ (*"hd"*) -> error "Malformed file." end; replace_operators ((Pdfops.Op_cm m)::prev) more | Pdfops.Op_q::more -> (* Push stack *) begin try ctmstack =| ref (!(hd !ctmstack)) with Failure _ (*"hd"*) -> error "Malformed file" end; replace_operators (Pdfops.Op_q::prev) more | Pdfops.Op_Q::more -> (* Pop stack *) begin try ctmstack := tl !ctmstack with Failure _ (*"tl"*) -> error "Malformed file" end; replace_operators (Pdfops.Op_Q::prev) more | (Pdfops.Op_gs gsname)::more -> (* Perhaps insert [Op_w]. *) let opw = match Pdf.lookup_direct pdf "/ExtGState" page.Pdfpage.resources with | None -> [] | Some ext_state_dict -> match Pdf.lookup_direct pdf gsname ext_state_dict with | None -> [] | Some gdict -> match Pdf.lookup_direct pdf "/LW" gdict with | Some s -> (try [Pdfops.Op_w (Pdf.getnum pdf s)] with _ -> []) | None -> [] in replace_operators (opw @ ((Pdfops.Op_gs gsname)::prev)) more | x::more -> replace_operators (x::prev) more in let operators = replace_operators [] operators in (* 2. Add an initial 'w' if width more than default width *) let operators = if width > 1. then (Pdfops.Op_w width)::operators else operators in let content' = [Pdfops.stream_of_ops operators] in {page with Pdfpage.content = content'} in Cpdfpage.process_pages (Pdfpage.ppstub thinpage) pdf range (* Parse the new content to make sure syntactically ok, append * as required. Rewrite the content *) let append_page_content_page fast s before pdf n page = let ops = Pdfops.parse_stream pdf page.Pdfpage.resources [bytes_of_string s] in (if before then Pdfpage.prepend_operators else Pdfpage.postpend_operators) pdf ops ~fast page let append_page_content s before fast range pdf = Cpdfpage.process_pages (Pdfpage.ppstub (append_page_content_page fast s before pdf)) pdf range let rec dict_entry_single_object f pdf = function | (Pdf.Dictionary d) -> f (Pdf.recurse_dict (dict_entry_single_object f pdf) d) | (Pdf.Stream {contents = (Pdf.Dictionary dict, data)}) -> f (Pdf.Stream {contents = (Pdf.recurse_dict (dict_entry_single_object f pdf) dict, data)}) | Pdf.Array a -> Pdf.recurse_array (dict_entry_single_object f pdf) a | x -> x let print_dict_entry ~utf8 pdf key = let f d = match Pdf.lookup_direct pdf key d with | Some v -> Printf.printf "%s\n" (Pdfwrite.string_of_pdf v); d | None -> d in Pdf.objselfmap (dict_entry_single_object f pdf) pdf; pdf.Pdf.trailerdict <- dict_entry_single_object f pdf pdf.Pdf.trailerdict let get_dict_entries ~utf8 pdf key = let es = ref [] in let f d = match Pdf.lookup_direct pdf key d with | Some v -> es := Cpdfjson.json_of_object ~utf8 ~clean_strings:true pdf (fun _ -> ()) ~no_stream_data:false ~parse_content:false v::!es; d | None -> d in Pdf.objselfmap (dict_entry_single_object f pdf) pdf; pdf.Pdf.trailerdict <- dict_entry_single_object f pdf pdf.Pdf.trailerdict; let arr = `List (rev !es) in (Pdfio.bytes_of_string (Cpdfyojson.Safe.to_string arr)) let remove_clipping_ops pdf resources content = let ops = Pdfops.parse_operators pdf resources content in let rec process a = function Pdfops.Op_W::Pdfops.Op_n::t -> process (Pdfops.Op_n::a) t | h::t -> process (h::a) t | [] -> rev a in [Pdfops.stream_of_ops (process [] ops)] let remove_clipping pdf range = let remove_clipping_page _ page = let content' = remove_clipping_ops pdf page.Pdfpage.resources page.Pdfpage.content in Pdfpage.process_xobjects pdf page remove_clipping_ops; {page with Pdfpage.content = content'} in Cpdfpage.process_pages (Pdfpage.ppstub remove_clipping_page) pdf range (* Empty string is trailerdict. Begins with / and it's a chain separated by commas. Begins with P and it's a page number then a (possibly empty) chain. Otherwise it's an object number (0 = trailerdict) then a (possibly empty) chain. *) let split_chain str = map (fun x -> "/" ^ x) (tl (String.split_on_char '/' str)) let find_obj pdf objspec = let simple_obj obj = if obj = 0 then pdf.Pdf.trailerdict else Pdf.lookup_obj pdf obj in let chain_obj objnum chain = let obj = if objnum = 0 then pdf.Pdf.trailerdict else Pdf.lookup_obj pdf objnum in match Pdf.lookup_chain pdf obj chain with | Some x -> x | None -> raise (Pdf.PDFError "Chain not found") in match explode objspec with | 'P'::more -> let number, chain = let digits, rest = cleavewhile isdigit more in List.nth (Pdf.page_reference_numbers pdf) (int_of_string (implode digits) - 1), begin match split_chain (implode rest) with [""] -> [] | x -> x end in chain_obj number chain | '/'::more -> chain_obj 0 (split_chain (implode ('/'::more))) | [] -> simple_obj 0 | l -> let digits, rest = cleavewhile isdigit l in chain_obj (int_of_string (implode digits)) (split_chain (implode rest)) let replace_obj pdf objspec obj = try Pdf.replace_chain pdf (split_chain objspec) obj with _ -> raise (Pdf.PDFError "Chain not found") let remove_obj pdf objspec = Pdf.removeobj pdf (int_of_string objspec) (* Replace a stream from a file e.g 4=data.dat replaces contents of object 4. The stream dictionary is altered only to correct the length. *) let replace_stream pdf objspec filename = let data = Pdfio.bytes_of_string (contents_of_file filename) in begin match find_obj pdf objspec with | Pdf.Stream ({contents = dict, stream} as s) -> s := (Pdf.add_dict_entry dict "/Length" (Pdf.Integer (bytes_size data)), Pdf.Got data) | _ -> error "not a stream" end ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/cpdf.install�����������������������������������������������������������������������������0000664�0001750�0001750�00000000016�14771516640�013432� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������bin: ["cpdf"] ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/cpdfcolours.ml���������������������������������������������������������������������������0000664�0001750�0001750�00000010676�14771516640�014020� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(* Standard CSS Colours *) open Pdfutil let colours = map (fun (a, b) -> (String.lowercase_ascii b, a)) [(0xF0F8FF, "AliceBlue"); (0xFAEBD7, "AntiqueWhite"); (0x00FFFF, "Aqua"); (0x7FFFD4, "Aquamarine"); (0xF0FFFF, "Azure"); (0xF5F5DC, "Beige"); (0xFFE4C4, "Bisque"); (0x000000, "Black"); (0xFFEBCD, "BlanchedAlmond"); (0x0000FF, "Blue"); (0x8A2BE2, "BlueViolet"); (0xA52A2A, "Brown"); (0xDEB887, "BurlyWood"); (0x5F9EA0, "CadetBlue"); (0x7FFF00, "Chartreuse"); (0xD2691E, "Chocolate"); (0xFF7F50, "Coral"); (0x6495ED, "CornflowerBlue"); (0xFFF8DC, "Cornsilk"); (0xDC143C, "Crimson"); (0x00FFFF, "Cyan"); (0x00008B, "DarkBlue"); (0x008B8B, "DarkCyan"); (0xB8860B, "DarkGoldenRod"); (0xA9A9A9, "DarkGray"); (0xA9A9A9, "DarkGrey"); (0x006400, "DarkGreen"); (0xBDB76B, "DarkKhaki"); (0x8B008B, "DarkMagenta"); (0x556B2F, "DarkOliveGreen"); (0xFF8C00, "DarkOrange"); (0x9932CC, "DarkOrchid"); (0x8B0000, "DarkRed"); (0xE9967A, "DarkSalmon"); (0x8FBC8F, "DarkSeaGreen"); (0x483D8B, "DarkSlateBlue"); (0x2F4F4F, "DarkSlateGray"); (0x2F4F4F, "DarkSlateGrey"); (0x00CED1, "DarkTurquoise"); (0x9400D3, "DarkViolet"); (0xFF1493, "DeepPink"); (0x00BFFF, "DeepSkyBlue"); (0x696969, "DimGray"); (0x696969, "DimGrey"); (0x1E90FF, "DodgerBlue"); (0xB22222, "FireBrick"); (0xFFFAF0, "FloralWhite"); (0x228B22, "ForestGreen"); (0xFF00FF, "Fuchsia"); (0xDCDCDC, "Gainsboro"); (0xF8F8FF, "GhostWhite"); (0xFFD700, "Gold"); (0xDAA520, "GoldenRod"); (0x808080, "Gray"); (0x808080, "Grey"); (0x008000, "Green"); (0xADFF2F, "GreenYellow"); (0xF0FFF0, "HoneyDew"); (0xFF69B4, "HotPink"); (0xCD5C5C, "IndianRed"); (0x4B0082, "Indigo"); (0xFFFFF0, "Ivory"); (0xF0E68C, "Khaki"); (0xE6E6FA, "Lavender"); (0xFFF0F5, "LavenderBlush"); (0x7CFC00, "LawnGreen"); (0xFFFACD, "LemonChiffon"); (0xADD8E6, "LightBlue"); (0xF08080, "LightCoral"); (0xE0FFFF, "LightCyan"); (0xFAFAD2, "LightGoldenRodYellow"); (0xD3D3D3, "LightGray"); (0xD3D3D3, "LightGrey"); (0x90EE90, "LightGreen"); (0xFFB6C1, "LightPink"); (0xFFA07A, "LightSalmon"); (0x20B2AA, "LightSeaGreen"); (0x87CEFA, "LightSkyBlue"); (0x778899, "LightSlateGray"); (0x778899, "LightSlateGrey"); (0xB0C4DE, "LightSteelBlue"); (0xFFFFE0, "LightYellow"); (0x00FF00, "Lime"); (0x32CD32, "LimeGreen"); (0xFAF0E6, "Linen"); (0xFF00FF, "Magenta"); (0x800000, "Maroon"); (0x66CDAA, "MediumAquaMarine"); (0x0000CD, "MediumBlue"); (0xBA55D3, "MediumOrchid"); (0x9370DB, "MediumPurple"); (0x3CB371, "MediumSeaGreen"); (0x7B68EE, "MediumSlateBlue"); (0x00FA9A, "MediumSpringGreen"); (0x48D1CC, "MediumTurquoise"); (0xC71585, "MediumVioletRed"); (0x191970, "MidnightBlue"); (0xF5FFFA, "MintCream"); (0xFFE4E1, "MistyRose"); (0xFFE4B5, "Moccasin"); (0xFFDEAD, "NavajoWhite"); (0x000080, "Navy"); (0xFDF5E6, "OldLace"); (0x808000, "Olive"); (0x6B8E23, "OliveDrab"); (0xFFA500, "Orange"); (0xFF4500, "OrangeRed"); (0xDA70D6, "Orchid"); (0xEEE8AA, "PaleGoldenRod"); (0x98FB98, "PaleGreen"); (0xAFEEEE, "PaleTurquoise"); (0xDB7093, "PaleVioletRed"); (0xFFEFD5, "PapayaWhip"); (0xFFDAB9, "PeachPuff"); (0xCD853F, "Peru"); (0xFFC0CB, "Pink"); (0xDDA0DD, "Plum"); (0xB0E0E6, "PowderBlue"); (0x800080, "Purple"); (0x663399, "RebeccaPurple"); (0xFF0000, "Red"); (0xBC8F8F, "RosyBrown"); (0x4169E1, "RoyalBlue"); (0x8B4513, "SaddleBrown"); (0xFA8072, "Salmon"); (0xF4A460, "SandyBrown"); (0x2E8B57, "SeaGreen"); (0xFFF5EE, "SeaShell"); (0xA0522D, "Sienna"); (0xC0C0C0, "Silver"); (0x87CEEB, "SkyBlue"); (0x6A5ACD, "SlateBlue"); (0x708090, "SlateGray"); (0x708090, "SlateGrey"); (0xFFFAFA, "Snow"); (0x00FF7F, "SpringGreen"); (0x4682B4, "SteelBlue"); (0xD2B48C, "Tan"); (0x008080, "Teal"); (0xD8BFD8, "Thistle"); (0xFF6347, "Tomato"); (0x40E0D0, "Turquoise"); (0xEE82EE, "Violet"); (0xF5DEB3, "Wheat"); (0xFFFFFF, "White"); (0xF5F5F5, "WhiteSmoke"); (0xFFFF00, "Yellow"); (0x9ACD32, "YellowGreen")] ������������������������������������������������������������������cpdf-2.8.1/cpdfstrftime.ml��������������������������������������������������������������������������0000664�0001750�0001750�00000014446�14771516640�014166� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(* C-Style strftime *) open Pdfutil type t = {_tm_sec : int; _tm_min : int; _tm_hour : int; _tm_mday : int; _tm_mon : int; _tm_year : int; _tm_wday : int; _tm_yday : int; _tm_isdst : bool} let dummy = {_tm_sec = 0; _tm_min = 0; _tm_hour = 0; _tm_mday = 1; _tm_mon = 0; _tm_year = 2000; _tm_wday = 0; _tm_yday = 0; _tm_isdst = false} let strf_A t = match t._tm_wday with | 0 -> "Sunday" | 1 -> "Monday" | 2 -> "Tuesday" | 3 -> "Wednesday" | 4 -> "Thursday" | 5 -> "Friday" | 6 -> "Saturday" | _ -> "strf_AFail" let strf_a t = String.sub (strf_A t) 0 3 let strf_B t = match t._tm_mon with | 0 -> "January" | 1 -> "February" | 2 -> "March" | 3 -> "April" | 4 -> "May" | 5 -> "June" | 6 -> "July" | 7 -> "August" | 8 -> "September" | 9 -> "October" | 10 -> "November" | 11 -> "December" | _ -> "strf_Bfail" let strf_b t = String.sub (strf_B t) 0 3 let strf_d t = let s = string_of_int t._tm_mday in if String.length s = 1 then "0" ^ s else s let strf_e t = let s = string_of_int t._tm_mday in if String.length s = 1 then " " ^ s else s let strf_H t = let s = string_of_int t._tm_hour in if String.length s = 1 then "0" ^ s else s let strf_I t = let s = string_of_int (t._tm_hour mod 12) in if String.length s = 1 then "0" ^ s else s let strf_j t = let s = string_of_int t._tm_yday in match String.length s with | 1 -> "00" ^ s | 2 -> "0" ^ s | _ -> s let strf_m t = let s = string_of_int (t._tm_mon + 1) in if String.length s = 1 then "0" ^ s else s let strf_M t = let s = string_of_int t._tm_min in if String.length s = 1 then "0" ^ s else s let strf_p t = if t._tm_hour >= 12 then "p.m" else "a.m" let strf_S t = let s = string_of_int t._tm_sec in if String.length s = 1 then "0" ^ s else s let strf_T t = strf_H t ^ ":" ^ strf_M t ^ ":" ^ strf_S t let strf_u t = match t._tm_wday with | 0 -> "7" | n -> string_of_int (n + 1) let strf_w t = string_of_int t._tm_wday let strf_Y t = string_of_int (t._tm_year + 1900) let strf_percent _ = "%" let strftime_pairs = ["%a", strf_a; "%A", strf_A; "%b", strf_b; "%B", strf_B; "%d", strf_d; "%e", strf_e; "%H", strf_H; "%I", strf_I; "%j", strf_j; "%m", strf_m; "%M", strf_M; "%p", strf_p; "%S", strf_S; "%T", strf_T; "%u", strf_u; "%w", strf_w; "%Y", strf_Y; "%%", strf_percent] let contents_of_file filename = let ch = open_in_bin filename in let s = really_input_string ch (in_channel_length ch) in close_in ch; s (* Platform-independent current time and date with no Unix module *) let utf8_of_utf16le s = implode (drop_evens (tl (tl (explode s)))) let year_day d m y = let n1 = 275 * m / 9 in let n2 = (m + 9) / 12 in let n3 = 1 + (y - 4 * (y / 4) + 2) / 3 in n1 - n2 * n3 + d - 30 (* OCAML *) let js_date () = dummy (* JS *) (* let js_date () = let d = Unix.localtime (Unix.time ()) in {_tm_sec = d.tm_sec; _tm_min = d.tm_min; _tm_hour = d.tm_hour; _tm_mday = d.tm_mday; _tm_mon = d.tm_mon; _tm_year = d.tm_year; _tm_wday = d.tm_wday; _tm_yday = d.tm_yday; _tm_isdst = d.tm_isdst} *) let return_date () = match Sys.backend_type with Sys.Other "js_of_ocaml" -> js_date () | _ -> match Sys.os_type with "Unix" -> (* Call the POSIX 'date' program, redirected to a temp file, and parse. *) let tempfile = Filename.temp_file "cpdf" "strftime" in let command = Filename.quote_command "date" ~stdout:tempfile ["+%S-%M-%H-%d-%m-%Y-%w-%j"] in let outcode = Sys.command command in if outcode > 0 then raise (Failure "Date command returned non-zero exit code") else let r = contents_of_file tempfile in let get_int o l = int_of_string (String.sub r o l) in Sys.remove tempfile; {_tm_sec = get_int 0 2; _tm_min = get_int 3 2; _tm_hour = get_int 6 2; _tm_mday = get_int 9 2; _tm_mon = get_int 12 2 - 1; _tm_year = get_int 15 4 - 1900; _tm_wday = get_int 20 1; _tm_yday = get_int 22 3 - 1; _tm_isdst = false} | "Win32" | "Cygwin" -> (* Run 'wmic os get LocalDateTime' (exists on XP Pro or later, Vista or later). *) let get_int r o l = int_of_string (String.sub r o l) in let tempfile = Filename.temp_file "cpdf" "strftime" in let command = Filename.quote_command "wmic.exe" ~stdout:tempfile ["os"; "get"; "LocalDateTime"] in let outcode = Sys.command command in if outcode > 0 then raise (Failure "wmic.exe os get LocalDateTime command returned non-zero exit code") else let r = contents_of_file tempfile in Sys.remove tempfile; let r = utf8_of_utf16le r in (* Run 'wmic path win32_localtime get dayofweek' (exists on XP Pro or later, Vista or later). *) let tempfile = Filename.temp_file "cpdf" "strftime" in let command = Filename.quote_command "wmic.exe" ~stdout:tempfile ["path"; "win32_localtime"; "get"; "dayofweek"] in let outcode = Sys.command command in if outcode > 0 then raise (Failure "wmic.exe path win32_localtime get dayofweek returned non-zero exit code") else let r2 = contents_of_file tempfile in Sys.remove tempfile; let r2 = utf8_of_utf16le r2 in let day = get_int r 35 2 in let month = get_int r 33 2 in let year = get_int r 29 4 in {_tm_sec = get_int r 41 2; _tm_min = get_int r 39 2; _tm_hour = get_int r 37 2; _tm_mday = day; _tm_mon = month - 1; _tm_year = year - 1900; _tm_wday = get_int r2 13 1; _tm_yday = year_day day month year - 1; _tm_isdst = false} | _ -> failwith "Unknown Sys.os_type in Cpdfstrftime.return_date" let current_time () = try return_date () with e -> Pdfe.log (Printf.sprintf "Failed to retrieve time due to %s\n" (Printexc.to_string e)); {_tm_sec = 0; _tm_min = 0; _tm_hour = 0; _tm_mday = 1; _tm_mon = 0; _tm_year = 0; _tm_wday = 0; _tm_yday = 0; _tm_isdst = false} let strftime ?time text = let time = match time with None -> current_time () | Some t -> t in let text = ref text in iter (fun (search, replace_fun) -> text := string_replace_all search (replace_fun time) !text) strftime_pairs; !text ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/cpdfspot.mli�����������������������������������������������������������������������������0000664�0001750�0001750�00000000150�14771516640�013452� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(** Spot colours *) (** List spot colours to Standard Output. *) val list_spot_colours : Pdf.t -> unit ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/cpdfjson.mli�����������������������������������������������������������������������������0000664�0001750�0001750�00000002267�14771516640�013451� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(** Read and write PDFs in CPDFJSON format *) (** Write a PDF in CPDFJSON format. [parse_content] parses page content streams, [no_stream_data] will omit stream data, [decompress_streams] decompresses all streams, [clean_strings] will convert any UTF16BE strings to PDFDocEncoding if it can. If [utf8] is set, CPDFJSON UTF8 format is used instead. *) val to_output : Pdfio.output -> utf8:bool -> parse_content:bool -> no_stream_data:bool -> decompress_streams:bool -> ?clean_strings:bool -> Pdf.t -> unit (** Read a CPDFJSON PDF from an input. /Length entries will be corrected automatically. *) val of_input : Pdfio.input -> Pdf.t (** Convert a single PDF object to CPDFJSON format. [clean_strings] and [utf8] are as above. Then the PDF file, then a function which is usually [function _ -> ()], then [no_stream_data] as above, then [parse_content_streams] as above, and finally the object itself. *) val json_of_object : utf8:bool -> ?clean_strings:bool -> Pdf.t -> (int -> unit) -> no_stream_data:bool -> parse_content:bool -> Pdf.pdfobject -> Cpdfyojson.Safe.t (** Convert a single CPDFJSON object to a PDF object *) val object_of_json : Cpdfyojson.Safe.t -> Pdf.pdfobject �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/cpdftexttopdf.mli������������������������������������������������������������������������0000664�0001750�0001750�00000000355�14771516640�014515� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(** Text to PDF *) (** Typeset a text file as a PDF. *) val typeset : process_struct_tree:bool -> ?subformat:Cpdfua.subformat -> ?title:string -> papersize:Pdfpaper.t -> font:Cpdfembed.cpdffont -> fontsize:float -> Pdfio.bytes -> Pdf.t �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/cpdfbookmarks.ml�������������������������������������������������������������������������0000664�0001750�0001750�00000042260�14771516640�014314� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������open Pdfutil open Cpdferror (* Verify a list of bookmarks. Positive jumps of > 1 not allowed, no numbers smaller than 0. *) let rec verify_bookmarks pdf lastlevel fastrefnums endpage = function | [] -> true | {Pdfmarks.level = level; Pdfmarks.target = target}::more -> let page = Pdfpage.pagenumber_of_target pdf ~fastrefnums target in level < lastlevel + 2 && level >= 0 && page <= endpage && page >= 0 && verify_bookmarks pdf level fastrefnums endpage more let verify_bookmarks pdf lastlevel endpage marks = let refnums = Pdf.page_reference_numbers pdf in let fastrefnums = hashtable_of_dictionary (combine refnums (indx refnums)) in match marks with | [] -> true | m::more -> m.Pdfmarks.level = 0 && verify_bookmarks pdf lastlevel fastrefnums endpage more (* Parse a line of the bookmarks file. *) (* Un-escape things which are escaped. Quotes, newlines and backslashes *) let rec fixup_characters prev = function | [] -> rev prev | '\\'::'\\'::t -> fixup_characters ('\\'::prev) t | '\\'::'"'::t -> fixup_characters ('"'::prev) t | '\\'::'n'::t -> fixup_characters ('\n'::prev) t | h::t -> fixup_characters (h::prev) t (* If optionaldest = [Pdfgenlex.LexString s], we parse the string, convert the * integer to an indirect of the real page target, and then put it in. *) let target_of_markfile_obj pdf i' pdfobj = (*Printf.printf "Parsed %s\n" (Pdfwrite.string_of_pdf pdfobj);*) match pdfobj with Pdf.Array (Pdf.Integer x::more) -> let pageobjnum = Pdfpage.page_object_number pdf i' in begin match pageobjnum with None -> raise (Pdf.PDFError "bookmark_of_data: page obj num not found") | Some p -> Pdfdest.read_destination pdf (Pdf.Array (Pdf.Indirect p::more)) end (* Need to deal with "null", "(string)", and "<<other thing like action" *) | Pdf.Null -> Pdfdest.NullDestination | Pdf.String s -> Pdfdest.NamedDestination s | x -> Pdfdest.Action x let target_of_markfile_target pdf i' = function | [Pdfgenlex.LexString s] -> let pdfobj = Pdfread.parse_single_object s in target_of_markfile_obj pdf i' pdfobj | _ -> Pdfpage.target_of_pagenumber pdf i' let bookmark_of_data pdf i s i' isopen optionaldest = {Pdfmarks.level = i; Pdfmarks.text = Pdftext.pdfdocstring_of_utf8 (implode (fixup_characters [] (explode s))); Pdfmarks.target = target_of_markfile_target pdf i' optionaldest; Pdfmarks.isopen = isopen; Pdfmarks.colour = (0., 0., 0.); Pdfmarks.flags = 0} (* Old bookmark file format does not support colour or flags *) let target_of_json_target pdf pagenumber target = target_of_markfile_obj pdf pagenumber (Cpdfjson.object_of_json target) let mark_of_json pdf = function | `Assoc [("bold", `Bool bold); ("colour", `List [`Float r; `Float g; `Float b]); ("italic", `Bool italic); ("level", `Int level); ("open", `Bool openstatus); ("page", `Int pagenumber); ("target", target); ("text", `String text)] -> {Pdfmarks.level = level; Pdfmarks.text = Pdftext.pdfdocstring_of_utf8 text; Pdfmarks.target = target_of_json_target pdf pagenumber target; Pdfmarks.isopen = openstatus; Pdfmarks.colour = (r, g, b); Pdfmarks.flags = (if italic then 1 else 0) lor ((if bold then 1 else 0) lsl 1)} | _ -> error "malformed mark in mark_of_json" let mark_of_json_sort pdf = function | `Assoc l -> mark_of_json pdf (`Assoc (sort compare l)) | _ -> error "malformed mark in mark_of_json_sort" let marks_of_json pdf = function | `List ms -> map (mark_of_json_sort pdf) ms | _ -> error "top level of JSON boomark file not a list" let parse_bookmark_file_json verify pdf i = let module J = Cpdfyojson.Safe in try let json = match i.Pdfio.caml_channel with | Some ch -> J.from_channel ch | None -> let content = Pdfio.string_of_input i in J.from_string content in let marks = marks_of_json pdf json in if verify then if verify_bookmarks pdf 0 (Pdfpage.endpage pdf) marks then marks else error "Bad bookmark file (References non-existant pages or is malformed)" else marks with e -> error (Printf.sprintf "Malformed JSON bookmark file (%s)" (Printexc.to_string e)) let parse_bookmark_file verify pdf input = let currline = ref 0 in try let lines = Pdfio.read_lines input in let currline = ref 0 in let bookmarks = ref [] in iter (function line -> match incr currline; Pdfgenlex.lex_string line with | Pdfgenlex.LexInt i::Pdfgenlex.LexString s::Pdfgenlex.LexInt i'::Pdfgenlex.LexName "open"::optionaldest -> bookmarks =| bookmark_of_data pdf i s i' true optionaldest | Pdfgenlex.LexInt i::Pdfgenlex.LexString s::Pdfgenlex.LexInt i'::optionaldest -> bookmarks =| bookmark_of_data pdf i s i' false optionaldest | [] -> () (* ignore blank lines *) | _ -> error ("Bad bookmark file, line " ^ (string_of_int !currline))) lines; let bookmarks = rev !bookmarks in if verify then if verify_bookmarks pdf 0 (Pdfpage.endpage pdf) bookmarks then bookmarks else error "Bad bookmark file (References non-existant pages or is malformed)" else bookmarks with e -> error (Printf.sprintf "Bad bookmark file (syntax) at line %i (error was %s)" !currline (Printexc.to_string e)) let add_bookmarks ~json verify input pdf = let parsed = (if json then parse_bookmark_file_json else parse_bookmark_file) verify pdf input in (*iter (fun b -> flprint (Pdfmarks.string_of_bookmark b); flprint "\n") parsed;*) Pdfmarks.add_bookmarks parsed pdf (* List bookmarks *) let output_string_of_target pdf fastrefnums x = match Pdfdest.pdfobject_of_destination x with | Pdf.Array (_::more) -> let a = Pdf.Array (Pdf.Integer (Pdfpage.pagenumber_of_target ~fastrefnums pdf x)::more) in "\"" ^ Pdfwrite.string_of_pdf a ^ "\"" | x -> "\"" ^ Pdfwrite.string_of_pdf x ^ "\"" let json_of_target pdf fastrefnums x = match Pdfdest.pdfobject_of_destination x with | Pdf.Array (_::more) -> let a = Pdf.Array (Pdf.Integer (Pdfpage.pagenumber_of_target ~fastrefnums pdf x)::more) in Cpdfjson.json_of_object pdf (fun _ -> ()) ~utf8:false ~no_stream_data:false ~parse_content:false a | x -> Cpdfjson.json_of_object pdf (fun _ -> ()) ~utf8:false ~no_stream_data:false ~parse_content:false x let output_json_marks output calculate_page_number pdf fastrefnums marks = let module J = Cpdfyojson.Safe in let json_of_mark m = let r, g, b = m.Pdfmarks.colour in `Assoc [("level", `Int m.Pdfmarks.level); ("text", `String (Pdftext.utf8_of_pdfdocstring (Pdftext.simplify_utf16be m.Pdfmarks.text))); ("page", `Int (calculate_page_number m)); ("open", `Bool m.Pdfmarks.isopen); ("target", json_of_target pdf fastrefnums m.Pdfmarks.target); ("colour", `List [`Float r; `Float g; `Float b]); ("italic", `Bool (m.Pdfmarks.flags land 1 > 0)); ("bold", `Bool (m.Pdfmarks.flags land 2 > 0))] in let json = `List (map json_of_mark marks) in output.Pdfio.output_string (J.pretty_to_string json) let process_string encoding s = let rec replace c x y = function | [] -> [] | h::t when h = c -> x::y::replace c x y t | h::t -> h::replace c x y t in (* Convert to UTF8, raw, or stripped, and escape backslashed and quotation marks *) let codepoints = Pdftext.codepoints_of_pdfdocstring s in let escaped = let bs = int_of_char '\\' and nl = int_of_char '\n' and n = int_of_char 'n' and q = int_of_char '\"' in replace q bs q (replace nl bs n (replace bs bs bs codepoints)) in let process_stripped escaped = let b = Buffer.create 200 in iter (fun x -> if x <= 127 then Buffer.add_char b (char_of_int x)) escaped; Buffer.contents b in match encoding with | Cpdfmetadata.UTF8 -> Pdftext.utf8_of_codepoints escaped | Cpdfmetadata.Stripped -> process_stripped escaped | Cpdfmetadata.Raw -> s (* List the bookmarks in the given range to the given output *) let list_bookmarks ~json ~json_preserve_actions encoding range pdf output = let bookmarks = Pdfmarks.read_bookmarks ~preserve_actions:(json && json_preserve_actions) pdf in let refnums = Pdf.page_reference_numbers pdf in let rangetable = hashset_of_list range in let range_is_all = range = ilist 1 (Pdfpage.endpage pdf) in let fastrefnums = hashtable_of_dictionary (combine refnums (indx refnums)) in (* Find the pagenumber of each bookmark target. If it is in the range, * keep that bookmark. Also keep the bookmark if its target is the null * destination. *) let inrange = keep (function x -> range_is_all || x.Pdfmarks.target = Pdfdest.NullDestination || (match x.Pdfmarks.target with Pdfdest.NamedDestination _ -> true | _ -> false) || Hashtbl.mem rangetable (Pdfpage.pagenumber_of_target ~fastrefnums pdf x.Pdfmarks.target)) bookmarks in let calculate_page_number mark = (* Some buggy PDFs use integers for page numbers instead of page * object references. Adobe Reader and Preview seem to support * this, for presumably historical reasons. So if we see a * OtherDocPageNumber (which is what Pdfdest parses these as, * because that's what they are legitimately, we use this as the * page number. It is zero based, though, and we are one-based, so * we add one. Pdfpage.pagenumber_of_target has been modified to support this.*) Pdfpage.pagenumber_of_target ~fastrefnums pdf mark.Pdfmarks.target in if json then output_json_marks output calculate_page_number pdf fastrefnums inrange else iter (function mark -> output.Pdfio.output_string (Printf.sprintf "%i \"%s\" %i%s %s\n" mark.Pdfmarks.level (process_string encoding mark.Pdfmarks.text) (calculate_page_number mark) (if mark.Pdfmarks.isopen then " open" else "") (output_string_of_target pdf fastrefnums mark.Pdfmarks.target))) inrange let get_bookmarks_json ~json_preserve_actions pdf = let o, br = Pdfio.input_output_of_bytes (20 * 1024) in list_bookmarks ~json:true ~json_preserve_actions Cpdfmetadata.UTF8 (ilist 1 (Pdfpage.endpage pdf)) pdf o; Pdfio.extract_bytes_from_input_output o br let get_bookmark_name encoding pdf marks splitlevel n _ = let refnums = Pdf.page_reference_numbers pdf in let fastrefnums = hashtable_of_dictionary (combine refnums (indx refnums)) in match keep (function m -> n = Pdfpage.pagenumber_of_target ~fastrefnums pdf m.Pdfmarks.target && m.Pdfmarks.level <= splitlevel) marks with | {Pdfmarks.text = title}::_ -> Cpdfattach.remove_unsafe_characters (Pdftext.utf8_of_pdfdocstring title) | _ -> "" (* @F means filename without extension *) (* @N means sequence number with no padding *) (* @S means start page of this section *) (* @E means end page of this section *) (* @B means bookmark name at start page *) (* @b52@ means bookmark name at start page truncated to 52 characters using crude UTF8 truncation. *) let process_others encoding marks pdf splitlevel filename sequence startpage endpage s = let trim_utf8 len l = let l = try take l len with _ -> l in (* This truncator is far from perfect, but it does yield a valid UTF8 string, when given one. *) match rev l with | b2::b1::b0::t -> if int_of_char b2 land 0x80 > 0 then begin if int_of_char b2 land 0x40 > 0 then rev (b1::b0::t) else if int_of_char b1 land 0xe0 = 0xe0 then rev (b0::t) else if int_of_char b0 land 0xf0 = 0xf0 then rev t else l end else l | _ -> l in let rec find_ats p = function '@'::r -> find_ats (p + 1) r | r -> (p, r) in let string_of_int_width w i = if w < 0 then raise (Pdf.PDFError "width of field too narrow") else if w > 8 then raise (Pdf.PDFError "width of field too broad") else let formats = [|format_of_string "%i"; format_of_string "%i"; format_of_string "%02i"; format_of_string "%03i"; format_of_string "%04i"; format_of_string "%05i"; format_of_string "%06i"; format_of_string "%07i"; format_of_string "%08i"|] in Printf.sprintf formats.(w) i in let rec procss prev = function | [] -> rev prev | '@'::'F'::t -> procss (rev (explode filename) @ prev) t | '@'::'N'::t -> let width, rest = find_ats 0 t in procss (rev (explode (string_of_int_width width sequence)) @ prev) rest | '@'::'S'::t -> let width, rest = find_ats 0 t in procss (rev (explode (string_of_int_width width startpage)) @ prev) rest | '@'::'E'::t -> let width, rest = find_ats 0 t in procss (rev (explode (string_of_int_width width endpage)) @ prev) rest | '@'::'B'::t -> procss (rev (explode (get_bookmark_name encoding pdf marks splitlevel startpage pdf)) @ prev) t | '@'::'b'::t -> let number, rest = cleavewhile (function '0'..'9' -> true | _ -> false) t in begin try ignore (int_of_string (implode number)) with _ -> error "Bad @b spec" end; let text = trim_utf8 (int_of_string (implode number)) (explode (get_bookmark_name encoding pdf marks splitlevel startpage pdf)) in procss (rev text @ prev) (if rest = [] then [] else tl rest) | h::t -> procss (h::prev) t in implode (procss [] (explode s)) let name_of_spec encoding marks (pdf : Pdf.t) splitlevel spec n filename startpage endpage = let fill l n = let chars = explode (string_of_int n) in if length chars > l then implode (drop chars (length chars - l)) else implode ((many '0' (l - length chars)) @ chars) in let chars = explode spec in let before, including = cleavewhile (neq '%') chars in let percents, after = cleavewhile (eq '%') including in if percents = [] then process_others encoding marks pdf splitlevel filename n startpage endpage spec else process_others encoding marks pdf splitlevel filename n startpage endpage (implode before ^ fill (length percents) n ^ implode after) (* Indent bookmarks in each file by one and add a title bookmark pointing to the first page. *) let add_bookmark_title filename use_title pdf = let title = if use_title then match Cpdfmetadata.get_info_utf8 pdf "/Title", Cpdfmetadata.get_xmp_info pdf "/Title" with "", x | x, "" | _, x -> x else Filename.basename filename in let marks = Pdfmarks.read_bookmarks ~preserve_actions:true pdf in let page1objnum = match Pdfpage.page_object_number pdf 1 with None -> error "add_bookmark_title: page not found" | Some x -> x in let newmarks = {Pdfmarks.level = 0; Pdfmarks.text = Pdftext.pdfdocstring_of_utf8 title; Pdfmarks.target = Pdfdest.XYZ (Pdfdest.PageObject page1objnum, None, None, None); Pdfmarks.isopen = false; Pdfmarks.colour = (0., 0., 0.); Pdfmarks.flags = 0} ::map (function m -> {m with Pdfmarks.level = m.Pdfmarks.level + 1}) marks in Pdfmarks.add_bookmarks newmarks pdf let bookmarks_open_to_level n pdf = let marks = Pdfmarks.read_bookmarks ~preserve_actions:true pdf in let newmarks = map (fun m -> {m with Pdfmarks.isopen = m.Pdfmarks.level < n}) marks in Pdfmarks.add_bookmarks newmarks pdf (* Alter bookmark destinations given a hash table of (old page reference * number, new page reference number) pairings *) let change_destination t = function Pdfdest.XYZ (Pdfdest.PageObject p, a, b, c) -> Pdfdest.XYZ (Pdfdest.PageObject (Hashtbl.find t p), a, b, c) | Pdfdest.Fit (Pdfdest.PageObject p) -> Pdfdest.Fit (Pdfdest.PageObject (Hashtbl.find t p)) | Pdfdest.FitH (Pdfdest.PageObject p, x) -> Pdfdest.FitH (Pdfdest.PageObject (Hashtbl.find t p), x) | Pdfdest.FitV (Pdfdest.PageObject p, x) -> Pdfdest.FitV (Pdfdest.PageObject (Hashtbl.find t p), x) | Pdfdest.FitR (Pdfdest.PageObject p, a, b, c, d) -> Pdfdest.FitR (Pdfdest.PageObject (Hashtbl.find t p), a, b, c, d) | Pdfdest.FitB (Pdfdest.PageObject p) -> Pdfdest.Fit (Pdfdest.PageObject (Hashtbl.find t p)) | Pdfdest.FitBH (Pdfdest.PageObject p, x) -> Pdfdest.FitBH (Pdfdest.PageObject (Hashtbl.find t p), x) | Pdfdest.FitBV (Pdfdest.PageObject p, x) -> Pdfdest.FitBV (Pdfdest.PageObject (Hashtbl.find t p), x) | x -> x let change_bookmark t m = {m with Pdfmarks.target = try change_destination t m.Pdfmarks.target with Not_found -> m.Pdfmarks.target} ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/cpdfprinttree.ml�������������������������������������������������������������������������0000664�0001750�0001750�00000001551�14771516640�014336� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(* Courtesy Martin Jambon, in the public domain. *) let rec titer f = function | [] -> () | [x] -> f true x | x :: tl -> f false x; titer f tl let to_buffer ?(line_prefix = "") ~get_name ~get_children buf x = let rec print_root indent x = Printf.bprintf buf "%s\n" (get_name x); let children = get_children x in titer (print_child indent) children and print_child indent is_last x = let line = if is_last then "└── " else "├── " in Printf.bprintf buf "%s%s" indent line; let extra_indent = if is_last then " " else "│ " in print_root (indent ^ extra_indent) x in Buffer.add_string buf line_prefix; print_root line_prefix x let to_string ?line_prefix ~get_name ~get_children x = let buf = Buffer.create 1000 in to_buffer ?line_prefix ~get_name ~get_children buf x; Buffer.contents buf �������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/cpdfdraft.ml�����������������������������������������������������������������������������0000664�0001750�0001750�00000013113�14771516640�013417� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������open Pdfutil open Pdfio (* Making draft documents *) (* Predicate on an xobject: true if an image xobject. *) let isimage pdf (_, xobj) = match Pdf.lookup_direct pdf "/Subtype" xobj with | Some (Pdf.Name "/Image") -> true | _ -> false (* Given a set of resources for a page, and the name of a resource, determine if that name refers to an image xobject. *) let xobject_isimage pdf resources name = match resources with | Pdf.Dictionary _ -> begin match Pdf.lookup_direct pdf "/XObject" resources with | Some xobjects -> isimage pdf ("", Pdf.lookup_fail "xobject not there" pdf name xobjects) | _ -> false end | _ -> failwith "bad resources" (* The subsitute for an image. *) let substitute boxes = if boxes then rev [Pdfops.Op_q; Pdfops.Op_w 0.; Pdfops.Op_G 0.; Pdfops.Op_re (0., 0., 1., 1.); Pdfops.Op_m (0., 0.); Pdfops.Op_l (1., 1.); Pdfops.Op_m (0., 1.); Pdfops.Op_l (1., 0.); Pdfops.Op_S; Pdfops.Op_Q] else [] (* Remove references to images from a graphics stream. *) let rec remove_images_stream onlyremove boxes pdf resources prev = function | [] -> rev prev | (Pdfops.Op_Do name) as h::t -> if xobject_isimage pdf resources name && (match onlyremove with None -> true | Some x -> x = name) then remove_images_stream onlyremove boxes pdf resources (substitute boxes @ prev) t else remove_images_stream onlyremove boxes pdf resources (h::prev) t | Pdfops.InlineImage _ as h::t -> if onlyremove <> None then remove_images_stream onlyremove boxes pdf resources (h::prev) t else remove_images_stream onlyremove boxes pdf resources (substitute boxes @ prev) t | h::t -> remove_images_stream onlyremove boxes pdf resources (h::prev) t let rec process_form_xobject onlyremove boxes pdf form = let form = Pdf.direct pdf form in let page = {Pdfpage.content = [form]; Pdfpage.mediabox = Pdf.Null; Pdfpage.resources = begin match Pdf.lookup_direct pdf "/Resources" form with | Some r -> r | None -> Pdf.Dictionary [] end; Pdfpage.rotate = Pdfpage.Rotate0; Pdfpage.rest = Pdf.Dictionary []} in let page', pdf = remove_images_page onlyremove boxes pdf page in let form' = match form with | Pdf.Stream {contents = (dict, _)} -> begin match Pdfops.stream_of_ops (Pdfops.parse_operators pdf (Pdf.Dictionary []) page'.Pdfpage.content) with | Pdf.Stream {contents = (_, Pdf.Got data)} -> let dict' = Pdf.add_dict_entry dict "/Length" (Pdf.Integer (bytes_size data)) in Pdf.Stream {contents = (dict', Pdf.Got data)} | _ -> assert false end | _ -> raise (Pdf.PDFError "not a stream") in form', pdf (* Remove images from a page. *) and remove_images_page onlyremove boxes pdf page = let isform pdf xobj = match Pdf.lookup_direct pdf "/Subtype" xobj with Some (Pdf.Name "/Form") -> true | _ -> false in let isimage pdf xobj = match Pdf.lookup_direct pdf "/Subtype" xobj with Some (Pdf.Name "/Image") -> true | _ -> false in (* Remove image xobjects and look into form ones *) let form_xobjects, image_xobjects = match Pdf.lookup_direct pdf "/XObject" page.Pdfpage.resources with | Some (Pdf.Dictionary elts) -> keep (function (_, p) -> isform pdf p) elts, keep (function (_, p) -> isimage pdf p) elts | _ -> [], [] in let resources', pdf = let names, pointers = split form_xobjects in let form_xobjects', pdf = let pdf = ref pdf in let outputs = ref [] in iter (fun p -> let p', pdf' = process_form_xobject onlyremove boxes !pdf p in pdf := pdf'; outputs =| p') pointers; rev !outputs, !pdf in let nums = ref [] in iter (fun xobj -> let objnum = Pdf.addobj pdf xobj in nums =| objnum) form_xobjects'; let image_xobjects' = match onlyremove with None -> [] | Some n -> option_map (function (n', _) as xobj -> if n = n' then None else Some xobj) image_xobjects in let newdict = Pdf.Dictionary (image_xobjects' @ combine names (map (fun x -> Pdf.Indirect x) (rev !nums))) in Pdf.add_dict_entry page.Pdfpage.resources "/XObject" newdict, pdf in let content' = remove_images_stream onlyremove boxes pdf page.Pdfpage.resources [] (Pdfops.parse_operators pdf page.Pdfpage.resources page.Pdfpage.content) in {page with Pdfpage.content = (let stream = Pdfops.stream_of_ops content' in Pdfcodec.encode_pdfstream ~only_if_smaller:true pdf Pdfcodec.Flate stream; [stream]); Pdfpage.resources = resources'}, pdf (* Remove images from all pages in a document. *) let draft onlyremove boxes range pdf = let pages = Pdfpage.pages_of_pagetree pdf in let pagenums = indx pages in let pdf = ref pdf in let pages' = ref [] in iter2 (fun p pagenum -> let p', pdf' = if mem pagenum range then remove_images_page onlyremove boxes !pdf p else p, !pdf in pdf := pdf'; pages' =| p') pages pagenums; Pdfpage.change_pages true !pdf (rev !pages') �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/cpdfunicodedata.ml�����������������������������������������������������������������������0000664�0001750�0001750�00003003650�14771516640�014607� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(* UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE Unicode Data Files include all data files under the directories http://www.unicode.org/Public/, http://www.unicode.org/reports/, and http://www.unicode.org/cldr/data/. Unicode Data Files do not include PDF online code charts under the directory http://www.unicode.org/Public/. Software includes any source code published in the Unicode Standard or under the directories http://www.unicode.org/Public/, http://www.unicode.org/reports/, and http://www.unicode.org/cldr/data/. NOTICE TO USER: Carefully read the following legal agreement. BY DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING UNICODE INC.'S DATA FILES ("DATA FILES"), AND/OR SOFTWARE ("SOFTWARE"), YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE. COPYRIGHT AND PERMISSION NOTICE Copyright © 1991-2015 Unicode, Inc. All rights reserved. Distributed under the Terms of Use in http://www.unicode.org/copyright.html. Permission is hereby granted, free of charge, to any person obtaining a copy of the Unicode data files and any associated documentation (the "Data Files") or Unicode software and any associated documentation (the "Software") to deal in the Data Files or Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, and/or sell copies of the Data Files or Software, and to permit persons to whom the Data Files or Software are furnished to do so, provided that (a) this copyright and permission notice appear with all copies of the Data Files or Software, (b) this copyright and permission notice appear in associated documentation, and (c) there is clear notice in each modified Data File or in the Software as well as in the documentation associated with the Data File(s) or Software that the data or software has been modified. THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA FILES OR SOFTWARE. Except as contained in this notice, the name of a copyright holder shall not be used in advertising or otherwise to promote the sale, use or other dealings in these Data Files or Software without prior written authorization of the copyright holder. *) open Pdfutil let unicodedata_source = "x\001\164\253[\147\228:r%\140\190\199\175\200\1999\015\219\190\224\157\180\148\141\025H\130\025\172\140[\197\165jg\189\233h4\199>\155n\245\152.\255\255\000NF\004\t\172\005\178\182\166$\140\186s-\007\224pw\000\014\016\177\221n\183\239\255\244/\255\248\183\255\252\247\127\252\237\127\1907\255\242\190}\175\143\239\255\252\254\255}\255\151\247\255\245~|?\222\247\251\247\127}\255\223\239\255\191\247\141\193F\000l\255\223\241\253zS\151\219\219\169{\219i\213\246\199\015\251\223ZF\188\204\184\233?o\015xB\225\250\216\186\224t\017|Q\199\235\161\191^\251\211\241A\202\002\164\239\247\254\242\245\000\230\020\168\154\207\227\233\231^\183\031\250\001.(\184\214F\131#\170\228(#\243zV\205S`\229B\175#\178\217\169\139jn\250\242vS\245}\175n\147\190)O\254H\218\247G\253\214i\221\190\253\143}\247\255y\192kV\135\192}\241\141\139\255\249 t\167\203a\148\223\189\228\183\1729\141\186\\z\245\161\223.\250v\191\028\223\254Gsy\14647\152]\223\025\131\185?\199\191[\128\246\143\150G[\138l\213M\189\153\254~\190\233k\163\206\015\253G\220\210[\253\163o\244[s:\222.\167\253\219\233\248\228\196k9\183\159\167\007'Y\205\217]\244\179\166t-\171;\221/\015\018\183\252\163\2540\003\253C\191\249\150\029q7\184~\029\155\221\229t<\221\175o}\187\1272\138\223q\203\183z\127j>\031T\238 \141:6\250\225HQ\181T\197A\183\253\253\240\128+\222\135{}\189\245\183\251\237\217\250\154\139\158\025H\195\140\187?Zo\016\199y\187\234\179\241\214\219\2332\027\136\246\247\168\179\145\215\191\201}YZ\199\188\0293_v\029\027\168\132\166_\2551\245\249\199_\163w\253g\179W\163\128\131\186|\190\159\255a\128\167\163\003\140\223\191\223O\183EXb&\157Cm\226\219\181\2558\014\024}s0\233{{\218\239\213\136\185\254\011\194d\239g}i\244\241\022\018\148\191\171\131\129]\213\177%\205)\222\213\249t5\206t\222i\007\242\250\195\031\182gO}\149\239{m\194\143\209\164\169}\167\175\253\245\253\252\031/\226\215\251\233\172\143f\142\156!Fn\245~\233?v\014\249_\167\228f\127\186\018\178zWW33\244W\166\219\250\253\1887\222:h\237\239V!\238h6\239\205\233pP\003\191q\255\218\190\239\190Lw\143\127\028\250\227\2214\236\127!\017\250\1893\171\134\183\235\237tv\196\024M\247\167\246\129\235\222\175\167}\223Z93\212u\175\174\187\017\148l\223\219\254\163\191\189\253\210\151\211\251Q\23435m\229\223\179\202$\026Q\214h\159\160H\254\189@\241\b\178>\241\004\197\242\239\005J\030 q\186',\145\127/X:\194\196\173\159\168T\254\189P\217\003eb\235\011\149\201\191\023*\031Q\215\254\207\023(\151\127/P\241\000\233\031\230\207OX!\255^\176r\132ikD/X)\255^\176j\132\025+\1564\172\146\127/\1482\182\176?\029\177-$\245\251U\031\250\t\194\181\182\1641~p\189\254q\219\169\227\196\228\158\134\252\128\181\239\250\251]\237\175>\230%J\191\127\\\1802\182\189(\1733QF_\023\130L\186\02137\241\161W\2517u#\168\232\221.\128\142o&\238\2477\003\220\235\155]x\169\247\253\127\025\248\254\1336\171\197H\0241f\212\136\017\011#\193\140\0061\018a\164\152\209\"F*\140\01234bd\194\2001\163C\140\\\024\005f| F!\140\0183v\136Q\n\163\194\140\0301*a(\204\248\134\024J\0245f|\"F-\140\0063\246\136\209\b\163\197\140\003b\180\194\208\152qD\012-\140\0143N\136\209YF\182\197\1403`\020[a\016\255\248\142\024\226\031\025\241\143\011b\136\127d\196?\174\136!\254\145\017\255\184!\134\248GF\252\227\142\024\226\031\025\241\143\031\136!\254\145\017\255\248\137\024\226\031\025\241\143?\017C\252##\254\241\133\024\226\031\025\241\143_\136!\254\145\213\195\226\230jB\246E\191\213f/\250iVUx}\227\128\222%\170f\205\251\197Lb\151\171~\155\205\255\167\217^x\178\006\200\218qM\228\214\t\151E\184N\253\222\244\151\230~\232\246\250O\179\203\177\203\194\247\235\255\153\214j\151\184\150\255\194=\184\198\147N?\237\030\209\172\255\254\005Q\238\199\214t\1679]\030+\192|k\166+%\251\169@M\002y0\030\174t=\168\253t\162\249\219l\024dN\146r#\019\b\224\212\128\019\015\229F\166\016\192i\000'\025\202\141L\"\128\211\002N:\148\027\153F\000G\003N6\148\027\153H\000\167\003\156|(72\149\000\206\007\224\020C\185\145\201\004pv\128S\014\229F\166\019\192\233\001\167\026\202\141L(\128\243\rp\212PndJ\001\156O\192\169\135r#\147\n\224\236\001\167\025\202\141L+\128s\000\156v(72\177\000\206\017p\244Pndj\001\156\019\224tC\185\145\201\005p\206>\199\204XRndz\001\156\239\128\019\r\229F&\024\192\185\000N<\148\027\153b\000\231\n8\201Pnd\146\001\156\027\224\164C\185\145i\006p\238\128\147\r\229F&\026\192\249\0018\249Pnd\170\001\156\159\128S\012\229F&\027\192\249\019p\202\161\220\200t\0038_\128S\r\229F&\028\192\249\0058j(-g\156\158\154\251e\255\1810;\2051C\028.\154w35\221\250\198\206\1336\226\207\183#\207\191\213\234\145\205)\030\179\147S%\156\156`\149\250\253\214\239[\141w>E\023H\245\025\149<&\144\146\1678\031\136h\017\193\019\152\181\217}}\190\153\253\251\1617\163\208\154,\255s\178+y\n\243xz\027\136Sx\186\216\140\140\229\184\142&\249/\195\242\246?\142z\255H\025\151\249\242\025\195\213\232\170\177\r7k\003\245\224-&*!+\144\163\004\169y#\2271\208e\245{\204\159\253m\247\246\237n\246\178\157\177\185I\"\190\228\249L's?\173\157'6M&\233\214\143\006o2\026\151\159\234\242H\210\148\205:\150]\179Mi-\165=\214~\207#\137\007%\144\2487\174\1797\171EI\234\1912\154e\183\1461\201\159V\219\181\153s\147\217{\029cU\220w\206\151\254\135IL\188\221M\159^9\211*^Exu\166\226^d\198\240\14527k`\147@}V\146.\164\203\223\158v\245`\2403\128\131I\213\216#\153\159\170\191M:\190\194\183>\204\130\187\157;I\181\232Z\136T\174\240\227\217\168TK\161\164RK&\242\242\188\222\142{{o^\202\226\030\2434\018\147\185\210F\211\128\220\004:c\251`N2M0=\218\\\251\131\194\157\198LY\023;\021\154\237\205\151\201\240\030\222$I{|\248N\165\195\214\214|\189\141\195\251 p\215Q\231\243~\0127o\231\203\201lR\220\218\148\201\188\158\254\024\002\251\228`\192$\b\255\233\223\254Q\255\251\191\254\243\255\249\159orj\240>\204\001\199\001+\173\159\028q\170\200\156<\216\t\213X\193\186\019\004\021\191\191\242\2490\233\175\146\247\243\201l\199B\144\244\221\204\194&un\148\018@e\239_\250\024\002\228fN<}\026\140]\n\\\231\027\216\225\015`\177\160\n\227\205\205\016\153\159\135\018^7m\018W\153\025\211f\246\031[G3\\\127\255\191\255\252\159\131f\223L^\188\028\141i\220L\190\024\163\144\202\024\233\249k\2208K7`]\234\1893Y\\\155\007~;]\204\193\189in\127l\173\001\024\187\220\255CVZ\255\244\031\255\245\127\255\245\223m\213f\155:c\015\171\173?\206'c\255\210\138\211\1896N\165\196\181\220\211\158\255w\186\"\026NH\030\188\143{\191\223\235\195s\178R\141\177\155[ !\172Zsx`$\012\199\017\239\205\255\006\206\175\180\153l>z{\"\162[\164\131\201_M|m\181\180s\000\142\018\186\247\131j\204\017'\031\134t>\012#|\160\215\230\240B\155\188\181\158T\238\218Q\029\201\145\204p\1602=\152y\224\228\175\167\203\02002cszi\207\174\154K\127\030O5\164\134\227d\192\204\161\199x\1921\197\190\206AFQ\201\\\212p\246\225\011K\222\199c\016 l2\201\214\233\187j\204\145\170\155\254\240\148\023\205\149'\164\135\140\236\221\028.\\NC\143\199%\255K@R7\0155\154\211\140f(--\127?\247{\195\251\137\028\204\158m\154\128v\222\205\244X\152\154Zs~m\172\151\028\004\212\165\t<\1731QE\251b\206\tg}y\224G\001\213LerL\229\1717z\031O\172|\245\190V\022\18126ym\238\251\181.\219\205\187R\015\219\149\149>\251\191\167>;\158L2\1675C\242\227\190\2550\167\178\157\157R\173\016\211\2367\155\143\179+\144\227\168\217\127\250\223\255\254\207\255\242\159\255\239?\254m\232\243[l2For\164f\186\255\255\216\2273H\031\235ha\029;\181\239\022+\136\165\130\216\173@\184\163t\237I\023\187~4\226J\234Hf\157H\230\157p$\1405u\175\201o\197yUCr\243j\216$\012\153\1961ek\179\131\214\185\198\249\151\240\030\201\199\237VK.\191\137\1305\012\174\233\212\016\005kxx\179\169Ar\255M\028\172a\146wu\170\137\131\213\204\242\181\166.95h\146`]\195~\219\169&\tV3P\164\0069eh\210`\r\175\233\216\169\165\012\2142\157\197MMr:\209d\193\154d-\169\234\147o\000*X\213\184\1426\181\200\137FCN4\148sHH\164\141\170\145\163\142\134\028u4\227@\143\145\241\213\218d\018?\t\243\021NM-r<\210\144\227\017\141]\"[r\t=u\t9Ni\170`\r\174KdK.\161\167.!\199/\141\n\214\000]\"[r\t\237\185\132\028\2204u\176.d\176\217\146\193j\215`\229@\180!\007\162=\030\153jid\250\233\200\200\001j\211\006kpG\166Z\026\153~:2r\224\218\232`\rpd\170\165\145\233\189\145\145\163\218\166\011\214\133F\166Z\026\153\222\029\0259\226m\2014\162o\232\208\189\147\137\161%\019\195\017\135R\189\020J\143\147P\218\201\196\208\146\137\225\132\237\165[\178\151\211\196^:\153\014\218$X\131k/\221\146\189\156&\246\210\201t\208\166\193\026\160\189tK\246rr\237\165\147\t\161\205\130u\185#\210-\141\200i:\"2\025\180y\176\006d\145\221\146E\158\028\139\236d\174h\205\226\251\190\191\245\175\156\003\223\243\181e\176U\246*\222\231\154\217\202\236)\198\211e\211\n\137\244-\137\244wh\129\217\226\\r\159Z\160D\250V\005kp,0[\156K\238S\011\148\248\222\214\193\026\144\005f\139s\201\221\179@\137\240m\019\172\011\216G\1828\151\220]\251\144H\223\146H\255\133\245\182\024\233\191\166z\147H\223\146H\127\219\157.\232zM'1\187\133\231\154W\147L<\251\167\129b\189\026\158j\206\023\240\127\027\251\145\251\011x\1355\218\151\236\012\164\220\2002\155\2150jj^C\020\168a\212\147\236\012\164\220\200\226\154\2150\181\176y5q\160\154\169}\201\030A\202\141,\179y]c\140\155W\147\004\170\025#\156\236\012\164\220\200\242\154\2150\177\225y-e\160\150\137\005\203\014A\202\141,\177yM\211\005\252\188*\021\168jX\190\203\238@\202\141\172\190\017\212\185t\001\165\r\170\201\135r#KltM\196Y\192?[\235/\224\029\222s\249.\187\003)7\178\204F\151D\176Kda\151\208\019\151(\135r#\203l^\131\235\018Y\216%\244\196%\170\161\220\200\226\154\215\000]\"\011\187\132v]b\208\154=\220\214u\160.d\176Y\216`\181c\176\245Pnd\153\141\174\187\224\145\169\194#\211OF\166\025\202\141,\179y\r\238\200T\225\145\233'#\211\014\229F\022\215\188\00682Uxdzwd\134\026\2375\023\221\005\234B#S\133G\166wF\166\027\202\141,\202\209H\222\192\245\165v;\148\027Yh\163\171;8\152\234p0=\190\130i\027\r\229F\022\218\232\162\015\182\152.l1\167\151\197\180\241Pnd\161\205kp-\166\011[\204\233e1m2\148\027Y^\243\026\160\197ta\13999\022\211\166C\185\145\1336\175\203\029\145.<\"\167\201\136dC\185\145\0056\175\001\217d\023\182\201\211\220&\219|(mM\246\227\132\031\2535\188|\239\202@{\030\139\247\133\153\234\185t\151\221\128\148\027Yb\163\203R\208\246\138\133y\228>\177\189j(7\178\196\23058\182W,\204#\247\137\237\169\161\220\200\194\154\215\128l\175X\152G\238\174\237\213C\185\145\1655\175\011XF\1770\143\220\029\203h\134r#Klt\237\011\235m!\202\127M\244\214\014\229F\150\227\232r\221\176x\247\"\226\192\182\017\187\235\002-C:X\136\216_3\029DE9\148\155m\180\r\231\238\199\019C'w\155\006\2460\234u\202h\164\219\020\138-\249\002\243Q\195|q\153\006\150\131\015\249\210x)m\029\225\252}m/\246\184\221\200\131\221\024(RA\"\189\b-\249G\249\243N\228\129N\140\210\165\225R\218\026\194Y\251\211\1359\016\250t:\017\135S\246#G\170\200\164\023\161\197\254\163\134Y7\226\208\158\226!_\026/\165\173#\015\166\216\221\132V\178\180-n^\219\226h[H/B;\000w\182M\194\158\251\148.\r\151\210\214P\134\143\tP\202,YJX4N\194\"\218V\210\155*\180\159A3{\018\142\174\243z\1643R\218\186T\176_\230\144\217;\174\145\202\194\007 \246lZ\170\168\165?u\160?\147\026\230\221\t\237\208D\1904^J[G\019\030\0315\015[RC\019\236\195N5\015Oi\165\023mhT\212<h\249\242\029\214(]\026.\165\173\129$wZ\220\135t\169\015\237\180\015\157\244\001\206#-\238C\026\238C;\233\195\224-f\166\138\162m\176\015\171\211\158\237x\015\201H\1489#\138\002-_\185\030\027eJ#\165\180r\201<\161\201|\151-\205wz:\223E2SDI`'\236\205wYx\190\211\147\249.\138\135\210\214\145\006\251\225\206w\217\210|\167'\243]$3E\148\005z\225\206wYx\190\211\175\249.J\135\210\214\144\007\251\128bQ\182\020\139\2443\022E2SDE(+\001bQ\022\142E\250\017\139\162|(m\029\225\195^o\222\206\150\230m=\157\183#\153#\162P\174\200\155\183\179\240\188\173'\243vT\014\165\173c\225\192W\001\215h\130\221x\197\163Hf\134(\148#r\227Q\022\142G\250\021\143\"5\148\182\0062/|\004\230\237bi\222\254p\231\237Hf\136\b\206\016\031\129y\187\b\207\219\031\206\188\0295Ci\235\210\193~\185\254^,\249\251\199\212\223e\174\136\186@o\\\127/\194\254\2541\241\247\17745\196\219`\031\144\191\023K\254\254\241\244\247X\230\1418\n\244\002\249{\017\246\247\143\135\191\199\219\161\180u\196a\027\243\174\144\020KWH\1667\242\140|\153E\226$d]^\150\187\bg\185'5H\007\164\180\181\144yd\023\240\151r\201_v\174\191\1962\163\196pF\217\005\252\165\012\251\203\206\241\1518\029J[W\030\236\215\234u\201\238\185.\137e>\137\139@\031V\174Kv\143uI\156\015\165\149K\230\144\030\031\155WK\199\230\253\235\216<\138e\006\137\241G\1628\167W\133szO\233\210p)m\r*\216\007omU-\173\173\250\233\218*\150\025$\174\003\189\240\214VUxm\213O\214V\241\224\025v\014\137\195W\132\220X[-\197\218~\018kc\1539\226\208\249\130\027k\171p\172\237_\1776n\134\210\214\016\190\"\228\173I\170\1655I?]\147\1962c\196\161s\005oMR\133\215$\253dM\018\015\189\177sF\178\r\246\003\205\025\213\210\156\209?\230\140\225\029\142(\193{\141\211\205>\016\019\254\140:J\188\185\160\255P\183\251E\191\245\207g<&\183\177m\227\228\139\234@\227\190\137\138\019\153\004\018g\018\152\n\255\155+\220\170\216~\215\205U\252M$\199Ci\197\147\232\255-\016\253\213R\244\255\230F\255D\162\127\002\163\255\183@\244W\225\232\255\205\137\254I:\148\182.\018\253?\217\012]/\205\208\159\179\025:\145\185 \129s\193'\155\161\235\240\012\2539\157\161\147|(m-\240d\226\243\162\208E\142(!\151\133\2468\247\214,\229\222\246\147\220[\162\164\006x\218\176\199\185\183&\156{\219\191roI5\148\182\134:\216\007\127\244\154\165\209\219\207G\175\145~4\129~\248\163\215\132Go?\027\189z(m-m\184/\206\158\170Y\218S\237'{\170DK?t\168\031\206\158\170\t\239\169\246\175=U\210\014\165\173\161\011\246a\242}\n\bx\166F\251\017\203\195F\183Qj/n\218\146\183z*\209\143rs\137\210<)\173\212(\216\210\213\171\190\253\235\018^\148\198\210\2228\208\222\149\235\190\167Ti\168\148V2\185\254y\196\030\171\151<\2468\241\2164\149\182\195\147\227#\246X\029\246\216\227\203c\229\017\150\200>\194\018\1777\188\142\204c\245\146\199\030g\030\155\230\210\143<\208\015\223cu\216c\143S\143\149\135^\"\251\208K\196\222\n;b\143\213K\030{\156xlZJ?\202P?\028\143\213a\143=\190<V\030\145\137\236#2QZa\236\249\162M\167\181I\140\154\243\202\215\195\145\158\147\197\181u\178\\\211j_\228\183\241K\181\136\189f\166\143\224\149\181(\149\213|\138\243AG\255\137\156(\029\198\201\174\207\217\155f'\178\207\232\150\246\025\167\233>#\149\021z\nW\232'\178\207\232\194\251\140\211d\159!\207\220D\246\153\155\136\189\155v\194\251\140ni\159q\154\2363RY\161\167]\160\023\238>\163\011\2393N\175}F:\150\166\006\246.\219\227&\199\248\249\030\186\195^\007\1872c\218\2342\201\239dQ\160G\243\218\230\029\171\003\029\155\215%\157\146\210\214G\215\247\167u\183\185\199\198\203j>#\171\249\211\154\187%C\203\226\161\180\194\200\218\253\130/\031\199K\243\198e\170kY\177gp\197~\193\247#\226\240\188q\153h7\029J[C\030\236\1317oH/\130\243\198e6od\178N\207\138@?\188y\163\136\195\243\198e:o\200cE\145}\172(b/\226]\224\1881\140G\019\236\201k\222\200d\159\154U\161~\204\231\141\"\014\207\027\151\215\188!\015!E\246!\164\136\189\184w\1976\181xr\127\157\218\148D\252\012F\252+\182\169\133\147\251\235\196\166\134\209\176\179C\214\004\251\000?5X<\185\191\186{\218Lf\137\172\r\244\006\222\139Z8\185\191:{\218\172\025J[\151\014\247\203\243\149\197\015\023\175s_\145\025#\235B=\242|e\225n\245u\230+\195H\217Y#\223\134\251\226\248\202\226\233\253u\226+\242\214m\132\159,\188b_Y8\189\191\190|%\223\014\165\173\129\156\002\220\216x\164K\227q\155\141\135\188\167\027\225'\017ol<\210\240x\220\166\227\145\199CikI\195}q\198c\241&\194m:\0302\151\224'\023ox<\022n\"\220&\227\145\014\165\173!\015\246a\245\222\239\246\204\248\203K\192\017~\196\241\246[;\191\219#\227\159\231Ci\229\146\249\226\0143\254\195'J\161\140\255}\146\241\031\242\154y\232\230\169\147\241/\178p\198\255\254\202\248\231\229P\218\026\194\031\142\185+\241l\2416\197}\186\018\151\023\140\163<t\247\212]\137\023\011\183)\238\147\149x>x\129\1573\242\240'c\206J<[\188Mq\159\172\196\229\141\228\b?iy\135+\241b\2256\197\253\181\018\207\155\161\1805\232`\031\208\151\248CGT\176#\143/\241#y\1359\194Of\130:\230\157Q\129\206\140\031\011\217\014Hij)\182\193\190\224]\197\208\155:\216\027oW!/?G\248\129\206{hWQd\225]\197\221\219U\020\219\161\180\245\197\193\254\185\1673\217\226\141\145\251\244tF^\154\142\240c\160w|:S,\220\024\185ONg\138x(m\029d\222\248\025Xk-\222\182\248\233\174\181\228U\235\b?:\2503\176\214Z\184m\241\211Yk\021\233P\218\186\200\\\242\021\232\215\226\007\246_^\191d~\193\143\156~\005\250\181\240%\208\151\219\175|(7r\241;\212/\244i\236\226\199\252_\238\167\177\018'\nr\014\241\011\239$\212\210N\226\215\212g\229\028\130<\192\138w\018*\188\147\2485\241\210j(m\ru\176\015\224\236q\232G\017\236\199\227\190J!\167\016E\019\232\005\184\175R\168\240}\149_\143\251*E=\148\182\1426\216\015wu\167\150Vw\191&\171\187B\206 \n\029\232\133\187\186S\225\213\221\175\215\234\174h\135\210\214\000\231\157\253\201>\219\007\014\t\138q%\243\254>}\2368*\225\169C\253[k\185z\\\203\197\146\255\142%\255]\146s\135Q\242\238t\250\\\177\242\172\007\160\149:\228\139\2028(\246v:\219\166\172\017<B\173:\203At\018\208\196C\240\162&\030b\165\169RZ\209l3a\223\179\178?#\227g\131K\137\240%\222#<i\127sR\194e:\148\150\202\222\1328\235#\250U\1378\147\147\1452\252\024\208\202qk\158\227\022\149\146\224/a\130\127&tA\181\015\145\210D)\173X\018SUw\233\027uD\191\177\018grrR\146uz\251[\253l'\246)SWY\007\197\174\182\207vf\159\018\023K\024\023\219\223\178\207vj\159\245PZ\209p)n\127\234\207\028\140\180z\127\195'\235%Y_\143O\006\183o\1716\151C-\195<\214\202\206\160$\167\171\215f\247S\161\017\149\189]\181\r\024\252\154\150\232\243\181\223\015\027\173xH\205U$\136u\191e$\221\203\025*99\173\224\201i\247\027\2060\1905(\199\188U4\148V098\253\248\173\246~\188\140:\151\147\233\138\132\175\015e\127y\204\031\143!OS\225\187\141?V\\\006\252a{\212\229CiE\145X\214\159n\176\254\193\030H$\235\1273\251a\220\197\1908\218\015\162%\154Ud\209\248\249[z\254\156\216\197\208b\152\157\248\252\r\187\248|\006\201\170\028J+6t=e\213\1726h`o\021 \151 b\185\004Q\1934\196^\029\234V\253\222\250a\148/\2041\182TM0\\\028\208\176\2032\187\"K\187\2410Y\222\177]9@\199\151#\020\131\227\226_\212\024%\219\149\215\240\228\230^\251\199\181\177\\\151\142\229\186t\197~\236iv\217c\150\239Z6\208\211\208PY7\168\240\025\228\244\169\156\241\2361\n\159=\n\195Z\148\146\236\128\n\1579N\191\229\029\207\026\163\208Y\227 [\026-\165\149\207\158\024\235W\1570\246CS%\012)\252\012A\191\226|\177\023)\241PZQ$\014\158\127\203\237\207/\183W\195`\193@y\254\r\183??\221^\165Ci\197>\130\230cW\n\215\029\207-\171,5\226R\002\190*\002\235U\251\012\177\191^U\018\024UI\215\171Bs\215\171\170\024JKe\1757^\193[w\241\176dWj\222\139\215\194\227j\253\241t\134\203\022U\007\210\215ge\254fj_\165\247\219\028>\138g\145\235\183\172\2286\177\018Y\020\1696\208\234\149\173}ZI3\148V\172\014\182\246\162M\b\151\031\225Z\221n\135\"\1635\024G\023L\241\205\131\146$\248\162p\234\242\025\148j\177\218z\027H\239\205\131R\145\133\131\210\253\021\148\186\161\180\242\201j\240>\174\027\129\149JZ\166&\193\236\199o\025\196\184\228\2511\b\150\229i\157\004sW+\005\127\189,\173\150-`\157\006\210o\171,\237\235iiu2\148Vl\022\204\185\172^\143\253z\158F\213\178\147\171\243@\166e\229\n\228\215\2274\170\206\134\210\202%AP\255\218\173\209\234\233C.K\198\195\146\191.\169\176g\212Z!\245\025\224\030\226\163ZV\1425\254\022r&|A\005\151\185hi\178\148V\188b\226\135\205\167\234\247\2036a\196N\224C\172\172\235y\0007\147\196|\220\254\193&,\139|\254NCT7\129\tK~\205\215\159\177j\t\171uKg\172\129\231NYu3\148\150\171\231mz\190\016\254\177?\221l+\236O*/\217a\144;\233a7\199\255\252:\030\253\198u\197P\026\194\243\t\242\199\214_\031\173\216f\2237\159\001\189\158\251\199O\166G\207'\198\159+{S\174\0161\158\242L%\197s\132\218\255\208'\251s\224kZ\243\144\247\210\197\243\181\240\167\233>f\156%y\222\239\150\140\002\217O\244\162|\240\244*\1839\150\151\148l \1433M\r7\185-lpa\143\132?>\231\231I\227\255\196\141\208\160\183\015\217\237(o\146G6=\1585\007\198\208\022\165\171\167\247\206\253\154\157l\211\188\198gm$\178\238\191\177\235\242\193\239\131\246\227\247AMe\011\027\175\216[\227{\160\221oH\165\141\247\217\144\163\210\253(D>\0312\253\153\213\014\131\241\254\027\187\185\031\248>\233U\193S8\201[\030\161\238\244\146\238\142\015\2215\182\176\185@\246\238\248q\173\238\244\146\238\1423\221\169y\2370\201y\132\186\211a\221\029\159\021<\133\147\212\128\194\247\216\163\165S\0315um9\245i`\130@\225{\236Q\248\212GM|\167\029J[C\248\241q\183\015\213R\031\250I\031ZYF\183p\025\221\227>T\225>\244\147>tCik\136\130\217\t\183\015\221R\031N\211>\200r\171\r\189n\232\246\161\011\247\225\244\234\131\188\159\024\217\247\019#\246D\249\029\159 .\190\012q\159\246A\150\225m\026\216\206\184'\136\011/C\220'}H\134\210\214\144\005\251\240<\196~S\199\214\187\185\2126\2037\151^\018&w\152ZY\181\183y\160w\184\230Gg\187f\233F\147_\175tVJ[w\241\027\253v\206\229\219\197\239\003\167\213\191N\232[\217\002\183\229\234^;\231\245\221\194w\131\160V\233\168\148\182\230\2347\250\236Xo\219,[\239K\192\196\142e\251\219\170\213}v\172\186k\150\172\218\171U:*\165\173\185\254\141>;\143\198\015}\222\174\236\243\243\249\248\168\149\179\186\182Y\221g\231\189\203\206\175\151\246\249\241\242e$oEF\246\173\200\168\r\029\229\129\237L\169\135\210Rupz\012\135\131&]\n\007\138\132\003\201\218\227\247\217\213\154p\160\211\183\133\231\017a8\024\020g\251\173\183\225~?\174\156\160~\199q\190\162\223F\194\164\199\242\243JQ\240\245w\\\231\223\030u\022\139=\158\212(\029\148\210\214\202\030\133$\175}5+\1867{\239K~m)\"\143\193\147\007\191t\190\212\159\233\147_:\030J[\r;\152\252\205\148\210\1993\165$?\174\020\225\247\223?~+\165\244\241H)\233t(\173\220<\216^w\225S,\133\221\143I\176\149_Y\138\240C\240\031x\225S\132\195\235\199+\168\234|(m\r\225\179O\183\015\245R\031>\167}\144d\150\014\029\131\186}\168\195}\248\156\244\161\028J[\131\n.@\189\167@\186\165\203\166\167\233eS\249U\165\b?\254~\194\151M\243.|\217\2444\185l\170\213P\218:\154\021\253@a\203\208\151\191\000\029\233S\231\150\148\153n\023{\134\194\150\209\200\2107\161N\141\210A)m\173\154gP\129\229\153\244\237\146\229IFrb|2\017\225\151\225\221J\030\145\184Z\248\166lZ\133tAJS\r~\022\254\027\182\241\133\235\129\223\158\157\176\029\232\"\150\203\"\t\172m\166\030\203\001\155;Lla\131k\023\255F\138\138\228\165\182\133z-5L\203f\242\019\156s\"\137&W\212SLx\014p\191\179-&\203\232A\148D\252.\020\241\221\175g\2312\164\tRn\228\210\nl\205\238\167\234/ \t]\r\181\147\r\201\144\228\2453\215b\169]\025L\212\184?\195\165'\235\202\161\213\018l;\242]\252T\198\179\227s\025\210\004)\173\028\021\\D\189\190\131@\155\170&\243FEb(~d=(\242\185\166\200\220ARCi\1976\225E\144\219\186\220k\157\196A\252X\186\194\191V\162s\183=\205PZA\225\175\222\135\005\007\220\140\150^\203\006\211\b}\228\238\139{\238=J\183\141z(7\219x\187\180H\150\028=\252a\211\215\015\218\0261v\237\027o\195k\223\169\168y\182\236)J\026$\165\021\023~\233\252y\180\130\158<\143\162i\235\018i]\232YsW\216\172}/a\210()\173\192\240\203\180Dw\153\167\187LZ\023z\132\150\232.su\151\014\165\021\023~q\150\234.\243tWH\235B\143\203R\221e\174\238\242\161\180\002\195\175\000\018\221U\158\238*i]\232\193?\162\187\202\213]9\148V\\\248u?\170\187\202\211]-\173\011=\228GuW\185\186SCi\005\134\151\135Dw\157\167\187VZ\023Z\245\017\221u\174\238\154\161\180\226\1941\143\234\174\243t\215I\235B\017\143\234\174su\167\135\210\bd\175x_B\186\027\1580\152\234N\158\238\142\241\211\221\151\144\238\138\216\209\157\188\216\029\219\023\187c\246b\247%\172;i\221Lw\2428w\140\031\231\190\132uW\196\142\238\228%\238\216\190\196\029\179\151\184\239A\221y\241N\030\221\142\241\163\219\247\160\238\220x'/l\199\246\133\237\152\189\176}_\208\157\023\239\2281\237\024?\166}_\208\157\027\239\228\229\236\216\190\156\029\179\151\179\031\223\233\159\014\007\245V\235\253\233\167\251\174A>m\156\132;\252B6\146\244l\217\\\1464GJ+\141D\187[\168e\169\2152\tuQ\232\n\030nY\234\182L\r\165\149\214\240\r\030\184\149%OU\199\248\169\234\129\226$Icyu:\182\175N\199\236\213\233\029N\127\148\147\173\219 J\194\021~Yz\135\183\127s\025\210\004)7r\1678\180\007p\175$\251\219\015{j\025\199\161_\022h\238\151=\186F\025\1797\159Ow\160sy\1929\198\0158[\130\171qy\1439\182\2391\199\236=\230_\236\150\219 @\130\007~_\249\023\187\202&\196t(-;_\151\024v\023\188\197\180\029\018&\240\027\201\138~\211\152\207\229HS\164\180\178\194o\235\251/\203e\147\0230\006a\018\029\226\208\251\249\254\219qs)\210\012)\173\164p:m\225\028q\154\252\029$K\136\136C\249\179\133\003\194\185Hi\160\148VlxM$w\238q;3\175\157\018G\226\208\186\200\023\247lc\230\182\177\025J+R/\172\219|\187\235<\187\1478\019w\193E\155ow\157kwz(\141,\246\238\240i\2131\137v\181\151\200\202(\137\2144\016\159\130t\142\006\147\237PZ\177$6}\225S\142\172\242Z'\241*\129\241\234\011\159b\020\149\219\158x(\173 x\150\191_\136\176\248}\224\227\018+\015\205\173\148\005#\212\227\197\231o\152\003O\179\219\218\184\167Y\145\157w\152\004\195\206\247s\152\020\206.\161\131\030\243\255\226F^\218\137\217\235\185M\144mx\141\176\225Yn\195\015\131\132Z\015\229F\190\152\130\181O?\192\242'f%U\135/\231\155(h\018\230rW\148\245?\0231\161\023\172\174?\213\021]\225\181t{\183\207\150F\006~\157\246\215\n\025\221PZ\025$5=\189\242\n\134A\158\155\141\241s\179s\170;\n\242\166ll\223\148\141\217\155\178u\216\006\"\249 &N\233\142\006\014_\\\202\012\203\222\128\029O\227\127 \162\152\\\026N\202P\131Me\177\145\134r0\204`\211|(-\159,0\190-\213>t\186\n\156l\208\218\203\161\180|\246\224\158\136\251\254Z\186\141\246\2307C\150\015\248\029U\159\238\181D\r\165\021\209\004\183\217\\\015\178.\192\207\165^\022\244\208\012\165\229\235\224\020\198k\151\137?\r\253\\&\173]\015\165\225g\208\221G\195U\190\151\231\221PZ*N\238\238\207;\181\246\187f%\194\218\161\180\"\227PkVI\030\193\211\n\236\235C\182\220\200\227\018\128S\191\173\255\228\165~=O\016\r\229F\158T@\171\155\241\005\134\191\185Wq\242\161\180\196,0\231\248s8\196\nl\152>\179<\176\193[\245\245F\235}\214%\143/H\185\145\199\015x\005\171\244\215\190\196\170\161\180b\225\002c\250\188\000X+\2247A\199\183\003<\157wCiy\138\242~\163\031\003\254\2459`\140\159\247|<J\176 \237\249$\129<o \165\021\217\004\213\178R\246K\141\143JT\161\234\161\180\149\180+*\249\r\197\184\213\205t\004\175M7\251\147\197\255n\191\\\218\235Y\007\169\170\011\174s\127\235\138\207\139\245\2526%\206\183\129\131\228U\138\250x}\195\159\012\165\021\027\005\194\165\247\177\185\025\194f(-\213\249\248f\144\240\152U>\160\015\22576\199\247\030\\\031\170\210\161\180<\024\240.\234p}\243\127\225\025EQU\127\141\213\140\r\201\002\193|\231\247\187l\135\210R\243@\142m\213H\1400\171H5\148V,\254\185+}\252\1571\022\248\196\001\2422p\244\243{\175(\200G\235U1\148\027y\012\003\137>\221\208H\230Cii*d5=\1768=\148\150[\007v\187\243\199\r\188uD<\148VJ\232\215HLv\248\182\168\145\253\000\179\205j\135\210\138m\003b\221\207\157\023+\240>v\150\209\132\225l/\031\142.J\028\191\236\0209]\192\248\015`\248\154\1614\212\"\180~;L\178\195\224\169\n\169\027\191\255x\248\r\027?\140*1\195\169\135r#\239h\240\148\198\228m\142\005\217\199W\140l\135\210\202N\002\178\127sd\143xd\159\175;B\1758bMf\001o\005\203\192jx\213\199.I\138<T\221)\244=\169\003}\211\143\214\020\1299\243t\208\031\nw\002\006\168\243\174\199\232*`}\023LQ!\202\026\131\173\151\005\172{&\225A\153\142{\019\216\204\133\155\021\218\006\174Zz_^~\148\014\165\021\171\003b\187\254\186[\213\213\007\240\237\177z\193o\n>\151R\191+\255I\244*z>;\b\205\245\226{\133\202\135\210r\163\224\212\2448t\197vV\198\129\\\216\186\021\254sU\208dC\185\145\247H\208\242\253\186\003=\169\134\210\178\210\213\139QI\129\175\219IMW\165S#\198\143\t^\191\223\213m\246r\n\214[N:\248\027{R\139\158\236J\203\"\224~7\127\133QGC\185\145\007Ex\142\2517C\253\rlm\149\030\202\141\164\242\000\233\238?\156%\185\147t(7\242\246\007\226=\222\nq\173\162\142\134r#\143{\000\230\143\223\218\132>\222\n\145\215G\164\220Hr\145+\252\007\232M6\148\150\026\250\172\232'\182\024\029\160|aJ\023\242l\204\169B\137\233\2234\133_x\214\175\162@\021\171,\255\215\212\238\241\243\127kV\135\207\1679\138\161\180\194\018\"\2367Z'\183\212\167\rtV9\243$\251?\192\024ds\130I\200]\190\142\031\218p~\156\250\198N\000\246=\206\155\247\160\198\140\245\140A\179\250\198\026\156\149\016|.\003\219G\225\216\212\205\140q\1793\212\006\227\2039\190\238\247\170\238_\207^\208\230\215\247\253\254\170\191\030\011\173\231c~\208\150k\\\183\n-\206~+\2531\207zTu0\007\016\014-\1323u\144&\004\197\019J\213\006\206\t\204\201\234\213\244\226\143U\011\164)\216~\243o\230\136x(m5\161(\244\t&\153\237PZj0\026\225cT\181]8vX\236\205\247\169bU\196=q)9\128(\175<\149\138W8\223\202*0wR\023\249\210\003\031\249\194\228\240\175\135(\188b\178\241n\189\176\201\022\027\191\189\247j\218oD\209v\030\229\021>\134\191\174n\231\237\237\250\016\133\023Jv9\181^\152\190>\251\140\023O\205_\232\243m~\206\160\224Z\169\179\201\174\208\233\190\194\015\148^\195$\156d\250\021&5$\184\159\245\165\185_\175\224\197\167\129\215\186\188\2419\165%^(\250\236B\187\169\135\128n\189\000\217\"\160SM\145d\002\219\225\212\246]/\169\168I@3\154\250\187\192\255\233?\254\235\255\254\235\191\203\247V\229\156\0261\2344\1749Bl\254U\1320\234$\204\153x\141Q\223@\219\212\188m\t\161^|j\017\207\169)\161\190\018\021n\159\236O!L%d\011\018B\250)\234\144~P\022\162\206\t\024\237}\221\234\202h\222\244\130\200\250\t\244V\204\169%\161~\001\170\163\176\202\163\158/\253A\015\196a\1852A+\015\253x[,@\170=\210\168K\185W\252h\226\156\211x\156\233o\193\"F\2351\158\179`\160\030\237\179\228v\238N\237\187\225W\127 \173\243hC\1704\200j|\135\159/\150\017'\226\221Z&\199\184\153&\211y\250\185\211&\134^\255\015\024\176&!JY\226\249\238{?/\1462`R?\143\1394\223\243^\191(\243\166\154\198\204\006\1429r\252Cf\241>\222\244\014\242&\223\246\198\141\239y\214\225\205\214\202L\r\253\145xD\227;\221\227\238\"\132\251^'\223\t\174\235\230\227\197\027\145\228\187\162|\169\177N\210\227M\021\145\228;\232\254\244sU\231[\200\012*@C\202o4\253\t\127H\236 \2287\212\250\132\143\018[\223\185o\151^\029?\238\242\172\226i\255\232\156\227\163m\004\012\204D\145ud\223\193m\211\2379\134\027\198\230^\132X\026\209\198z\018Z\143\019\247VV\227\176\198Z`\252\184)\179\201\1351\160%\161#\192\240\163\198y\127\191\190]\251\143#a\248\179\242\161?\134)\229\251\240y\209\227\175\147\239\230\227\237\228g\243\174g\213\216O\166\031\191\195'\228\234\253u\011\156\n(\230\002^\140Q\136z\159\252\204\029\149\162\230R&\148QL\253>>r\193D<\030\200x\136x\190\185!\244\230}\\9\201\2012mF2\151\241\248\133H\017\209\190O\127\161\238\225\153TT\237\234e\246Kz\"\017L\248\187\147\137Y\195\178\014\015\168\031,$\195\2256gF\210lu?\222\217\240\022\231\201\156\206V\248{\176\000o\230T\182v\191\130\213\160S+[\187\255\t\168\243-\137fk\247\224r\229\213\127\147\177\156\137\243}[\255y\187\168?v&@\r\175\001\219t\006V\189\239\229kX\200\211\219%R\t'\134\005RE\250\182\130\234/\005\190\204^\180\213ge&^\235=\150.\015\233b\190\191\000\248R\214SV\011\240\231}\155P~.y=\188?\219\223\143\234z\238/\202l\139H\029\154\2372\022\246\000\026\207\234k\214\147\221\022R\151\215\175]\004\137k\214\217]\012\169\171\214\218]B\184\222\028\252 \164\200\188\219\199\183\186\193X\214e\140;\253\2207,\"_\016\001\003\252\\D\129}m6\187\204\025\190w^T?\236\b\237\146\n\147|\239\172\245\135q\178g\012!<\2235\181=!^`\213\164\182G, \180\006V\182@\242}\241\186\211\251\142\160}/\148\003\143\016\165[\240\005H\179\015\216\152\029z\221\031m\252\153\153\210\225\223\222\237Gd\199\235ad\028O\199?\030\179\251d=o\223Hy\137\152\153RP\196de`\127\173\244%\194\223K\006\229\184[I\187\168y\t\027,4(`\178\232\177_\172\189\184\227\182(H~\190\007&\236l\1946k\185\139\236\196\130|\139\1866\167\203\179\001\249D\196\1768\r\242'\235W\1874}q_\235\210 \223Y\190\218\159r\157\200x\254pkX\198\228\247]EF5\1451\228b\151\0272\193\141R\212D\202d}\028\148\226\174\163\237\178t\170\019?\220-h\199]\196\218o\207'\166\170\022\rd\146\177H\182\237\132;\219\174\175\233\027\"\140r\181\223\201\223\022\031\224\141\181t~-\235#\198\236q\138A`\180\157\169\242\216^\204\241\195\177\189/\248\251\0048\202\153\006 \231\153\137\160(\007;J\155\198\162i\178t\141\018\001~\148:\rJ\171\197\0019\211\0005O\178\174\242\015\196\024%g\184\133\195\154h\016\027/\183s\132\1432s2\187\140\015ZX\161qp\142\025\129\163\184\130\2044k\196\r\248\153\184i\172\147\137\210f/\214\200r\193\163\188j\022\177\236Jr\173@\015=JTn\011\205\134a?s\2318\212\196)z\148X\207b\243e\136^f\156XT\190<&\183\168q\219\242\204!\173V\153\203\024%O\195\226\152uZ#r\014\029e\205C\225\152\145Z#\205\005\143\242\166A\239\153\175Z#\207\005\015\242\226i\204{e\179\214\b\244\208\163\196i\244\027\127\129\173\255\165\135\251\145\019\185[f)\1323J\143g\241fz\031l\141l\200\024%'\206je\213\024\221\2302R\180ZY'I\166#O`\230.:V9\175c\208q\238\133\210\021b\166\192Q\2064\222=\030!\t\234\251\001\026\249\211\0007\230\007\131\244i\0141\137+\186ZY\209\027D\024\229\170\217\018\183o?V\t\156!GI5\154\248\031\139\182K\179[#7\192\027k\241V|k\196\202\186o.\167\rmrVY\200\1394\019\172\221=\195:}jgz\141;\186\142\250-E\250\146\147\173\187%[#p\n\028\229D\222\246lU\228\156\"GI\211\184&\027\229\199V\141O7\199v\190WK\018\127A\188N\212\b\246%\166\158\158d\027\169\190\172\188(\168\167\007p\1484\rdW3\141\223\030W\231W\b\028\240\246\194\188#4\159)\205\"W\203\0208\016Y\248\237<\237\251\214\204t\171\027z\221\219\0077\028\185\165\215\212\245b\007<\146\234\175\240~k\017\132)\163l\133\189om|\196\148Q\2464P\218o\028.\171D\206\144\163\164i0\188jeNI\247\171D\205\160\163\172i@\252s\205\246\229\207\217Z6\209h\130Z\145\241q\176\1634\176\189]\151\195\153\128\167\206\156\250\169\181W\130\127\"p\251|E\218\223\253\188\b\163L?\215\198dF\190L\1510\202\140g\237\212f\218:\235K\127=\159\014\250\216\251]\127\208\018\143\246y2av\158-\146\157\239\140\150z4\179p\219\127\221\250Oe\155vr\232\219\2333\204\003\030\230\158F\238XI\230U\242u>}h\163\212\195\179S\233\180S\190d\251Q\240\195\\\183IU\r\165\021\158\251\235\023b\187\143\230L\131\1566N\181\015\175\250\031\180r)\173\179\192\175\240\238q\1295\141CG\179>\030\159m\011\247p\190\173<\156n;m\015v\023X\211`\162\246\007s\1924\168\199\012\230\018\181u\25169\186Y\234\161\158\2377\127\170K{]G\236\230\030m\206\194\014\250\237\219\201\012\197\197\146\000%\219z3\198\243ti\161\139Y\1967\220\011\204\169Gw\250r0\251;\014NfQ8\172\129,\245L\234\217\155\005f\022P\196\0025\015\233\208\028\189LO\n\151d\021\129\025|A\171%J\175\179\244\216\1314\245Au\189\217\192\250\185\212F\229\251}h\133\241\160M}\240W\255\241K-\246\168\241+r\151\251f\145\235\243Z\194\027\024)`\128\012\245\244x\005Q:FYh]\190\245\137\147E\001\168*\143|\006\202##j\140\198\202X\004\142*\176\189S\007\004\247\219\185\235\230i\152\201G>\207\194L>\237\231y\152y\226\204\"\204\188sf\025f6\156Y\133\153-g\1700s\199\153u\152y\224\204&\204\188pf\027f\2228S\135\153?8\179\0113\255\164\204b;\174\183\220g\163\245M\249\143\184%E$\164h$9o\199\128\167[l\005RZZ\140\235\178i\030eV(Wu8\247\168\210D*MP\165\014\215\171=\030J\203O\031+\203\251A~.\\\174.>n\235\200'\000\239\175\229\231\253l\022\222s\232\168\176lD\1528\226\"\224\177~\145\227^\159M\139w_\251^\029\237\151A\195m8\191\235\133\136(P\215\145\000\175\255\249PZ!\234\029-\191\0317\208\156;\132i6\213\006Z\136\015\157\171g-{\158i\237\239Ge\2467F+&\143z\253:\212'\255I\195\164k\135\210\202ifr\204\148~[-E\015\165\149\210\226\214\252\150\184n(\1738=\138\251~\215\215\215O\179\159\2551\154\2046\169\231#\221\225\145\254:\221\192\208vb\213\229\195*\135=\019\189\210\025\161\225\152\238\179\202\135]\186[\184\135\200\237V\149T\018\222\187\149\196t\229e\195\241\165\016\129?\030,N\170\200\171\002r\031\181l\019\213HM\015\011W\199\211\219M\239u\175&z\174g\223\249$e\137E?\030p\131\r\203\150\026\246`O\154\214Jm\021\193\223\136\n\138\197\154n3\005h\169Ea\172x\028\172\166Z\170F\168\147z:\169\167\193\224\211\161\151\245\028\172\170[\170\234\193~\213\214\012\195\1701\254\030\024)\1818Rwo\164\154a\164:\214:\253\129\149\168\170\229\158Y\238\164&\025\173j\139\002\242k\172^>(\159>\014\149\254m\172\180Q\190\027zb\176CVQ\192\169@\140\169e\186\174\200\188[\2279\190\142\133\148`\018\155\169j\tgU\138Y\173\222\227\186RaeA\151D\188Lx$>\253\"\029\203\133TP\175D\028\153\128+\018qnd\153T\151\194\170\184c\"R%$\018\b>\213\249\012YJX5f\237\213\161uX\012W\183j\016X\139@\018'\014w\212\006q\246\170\197\148#\164\136\199V$>\252\137\150\129\245\224z]0\004!\158\004>E\022\186p\197\217l\133B\188\237\178;!\142\248\154\"n#\139\014\196\018\183Q\196mn\n\233\174\017\167QY0:\"\1588\141b\235\209\029\212\132\248\140\">\211`\142\248\140\">c\154\1358\2261\170\nDa\196\018\151Q\139s\2313\030\187\243g\025\240\137y\028\030\234\019gS\245\138Y\rT9\204l\161*\031\018\156Z\197#U\003\247?\222R\2361\205\212Qx\154\153-\196d\173'\229F\214=\000\143VW\207\186\178p]\206\218J\150pRnd\253\131\0247\210\171b\161\166\219\180O\213Pnd\245\019\156\177\221j\170\021s\244\171\0305\148\166\158\026\174\012\176e\192\197A\029\174\216\179\144\217\250\160\142\232H\251;\157*\026\202\141L\249\128W\195\r}\021\015\229F\230|@#[Qy48\177\143\006\219Y\031\240\1985\130\199K\135r#\179>7.\192\204\134r#S?`\254\194\029\204\135r#\179?\1821\192*\134r#\179?`\221p~\164*\135r#\011\000bj\128\246:\004\171\021\162\141\235\005\143\167\134r#\019=\224\141+\134\191y+\006\023%\235\005YyH\185\145e\000\128\030\238\160\021\205Pnd!\000HGDj\135r#K\001@\250\019$\128*=\148\027Y\007\000\210s\221\2241\187\161\220\200r\000\229_@uj;\148\027Y\015\000\146\172\029<V4\148\150\005=\177\235\143C\142\t9\150J\134r#\171\t\192^\193\131\014)\171\015\143\149\014\229F\214\019<B\001f6\148\027YU \133\238\144F\243\161\220\200\186\002\176\026\200*\134r#+\011T\215\021\177\202\161\220\200\202\002\026\011x\135V\150-Rnd\133\176ng\232\2065ex\174\153\172\bd\193#\229F\214\006\171\231\155\201,\147\133\171\004\235\016Y\246H\185\145\221=w%<\161v\225y\205\201 H\162B\202\141\236\238\151\250\232\206\162\217\186Y\244U\155\030\202\141\236\240\217\200\227\186\170\165\158M2\b\146\164\144\210\214\228ne>U\255\204Kzk\221VV\213\237#\020\217\201\217Ib\190\146\134vBg\237\177\207b\217\1794;\027\205\167\243\246\017\177d\170\n\b\231\1343>\2409\204u\243\217\173\141\159\169\245\201\192\201]\228y\159'5\169Y\022\154,\150_\015\017%m\130\234\024?O\024\223\169uj\179\r[\155p\026~\158g\178\222jST\223\252G\000\003u\150k\235t?\235j\031\145\215\132L>NM\1904N6\226\206cl\251\136\204\231\144\224\237\130\181\159{g2l\031\161{j\226n\024m\186\161\180\248G\208v\142y>O8\011\210\202F\176\173BGD#\215\173\181-\135\210\242\213\188V\147\244\247v\237xw?\000E\144l\214Z\024\150\031\242\188&\168\161\180\196f\222\004x4\132Sl\253\227\247)\140\020\201\174\1800n\210\179\162\182\025J\203\212\243V\000\181\227$\149\224D\140$]Z\184\228b\003\161\135\210\240\244\214\025\b\255d\016\143\131\224\172\024-\217\024\r\215`\228\172Po\135\210\242\236U\130\179\1895\229V\176\211\171\218aa\"M\210;:y\136\155\183C\132-\172\180\007Q\210$)\173\184\148\180\174[\213\184\238\2096I\007\233\012\182\173[\209\180nlY:\148VXNZ\246\185No\159O\189\201d\167\011\216\182\2075z\251|\232-\031J+\174$\173\219\157.kZ'0\145&\209FW\176u\131\176\133\214\r\162\164IRZq\138\180\238C\029?\2505\2227\002E\162D!]\195\022>\004.\180\241!N\154&\165\021\217P\207\232\215\133J\193\137<\tR\186%\190\209\031\212\n\231\016a\210,)\173@MZ\216\1742\193\246a\129\018\192t\007[\215\1740\192v\180?=\148FX\183}N\130&\000\006\214Wji\222\0306\247\243\237|\247\136uf\139\025\152\186\249B\213\190\208i\159\1902;\212\249\158\180{\172\220\002\007\232\211*\248\218s*\192\138\239\170\161\220\200q\248,\228\203\161\185w\157\161\027J\139wS\230\243E\171\183\148\172^\239\244<\206g\186l\222\175G\150\146\015L\246j\202$\185\212=\214L\238\245\007G\224\021\188\012\147t\005\243\019t\200\208\r\r/\1773\128\212BW\012\229F\148\237\212\132\134\211_\131'\211\250\229l\176Sl\250E\199\014\157\196\162\014\175\136\020H\020t\131m\136Q7\019\163\158\254\234\004^C\014\026u\207\161\194\183R\252;7C{\221\163\169\208%\018_\134\156\136u\029k\201\239\t\179\1292\181\207\131|]\250\253\222\143l\253\248{w\195\023\253\143MF\026\201.x\251\146\148f[\145\020qI'\151^N\233\145\208cJo\191\129_\254L\179Xh\t\165}|\155\182:\153l\199\006~\"\252\148\242\239\159\023\213\031\237E\168\222\169\1591\244 8\021\193\025\239\207/\216\159Lh9\165\213_z\127\186\216\231\151\213\241\143I\227\214\181\173\031*\201\165\146\130\194\190\250\151\206\182\1857T\133\208KJ\199#U\n\171\162\172=\166UBS\148v\1964%\180\154\210n\215\029\228\213\194k(\239sfO\202\179\167F\248-\031\001\236N\165\231N\131cj*h\248(\238\254\146\017'\147\135\015\007\025Zdt\001\027\196J\176\235\1474\226A\001l\147\211D\252?\226\254_\163\170\018q\251\136\187\253\015\200\018\175\143\002^\191[\233\172\031\131\183\202O\223\167\017\015\003-l\134\248x\148\005\130'b\137\139G\220\197\241\160$\226\180\017wZ\024O\018\241\213\168\012D\132u\129c\136\028\1378qT-Xe\239Zv\030\150>\178\198:\196\227#\238\241\159\208\252\196\225#\238\240z\143X\226\238\017ww}@,q\242\136;\185>\"\150xt\196=\250\132H\226\194\017w\2253\028uq\224\152;\176\006?\224\158\166\226\1931\247`}E,\241\224\152{\240\r\181P~\223>\141\185\007\223\017I\1884\230^j\182T\128%^\026s/u\175\183Q\187\219\169A\1608p\156\007\230\022\216eq\224\152;p\003\253^~\223>\141\203\128\243 \127H\197S\227\144\1676\152(\238\023\171\128\186.\237x\193\221'\139\023\198\220\011\191\244\229\190N\219\0069\196\003\249m\2514\230>z=u7\218 q\2138\224\170\235Z3\249\253m\017+\190\028s_\254Z\217\203\254>\200\0197\143\185\155\127\173\180\209~4Q\t\000\201$\0008\223\026\185\027#;\219K\185\1459\025\211j\rx\209PndV\198\188\031\136\023\015\229F&_\204\147Y\252o\168\215s\152\022Q\201Pnd^\198\200\0225$\029\202\141\204\204\152\215#^6\148\027\153\1541\239\215\014\017\243\161\220\200\236L\136\136W\012\229F\166a\210\2085\250\178\243\172\172\t\164\220\200\140\139\145\207\217|<\1444\021\163\217\028q\134:\170\161\220\200\252\140\241\159\200\024\213Pnd\134\198<\189\007\188z(72G\019\222\001\240\154\161\220\200,MxG\192k\135r#\0195\230\157\000m0X\189\145\153\026\211\206\200\002\186\161\220\200\\M\154\233\255B\163]\bH\185\145\217\154\240\174\128\023\r\229F\230k\204\187\129v\198\241Pnd\202\198\188;\160%C\185\1459\1554\179\003\188t(725c\158{I\141\216\226N\012/\206\134r#\1476\233\247\021u<\031\202\141L\219\152\216\160\152\016\023C\185\145\137\1559\022\240\148\184\028\202\141L\220\140\216@j5\148\027\153\182\153\218\158s\189G\031Te}4e>:\204\246\203z\031\230zY8H\185\145\137\155\244\2305\219{Mj\134r#\01941\1605\237\153\206\246\178z\144r#\2434\233\193\170~\218\217^\150\rRnd\158&\242V\217k?\140A7\148\027I\194\177\025l\150wx\198\243y\026O2\129Rn$#Gd\157\\\001\229D@4\148\027\201\205\145i\248\027p\129m<\148\027I\202\145\153\254\219\180\237\243d\158d\001\165\220H\246\141\132\157Y:oY\1952T\219t(7\146\159#}BS\2466\027\202\141\228\220\200\162\138&\244V\140\191\136\207\135r#\1539bN\1479<\203\221!+\134r#I:,\000\142X9\148\027\201\210a\222\030\018\171\161\220H\158\014\019\143\144\168\134r#\137:\022\152Q\128\221\214C\185\145\020\029\137\2543\235R\174u5C\185\145\220\028\025\015\236d\165\235d\237Pn$E\023ZF\221_R\210yzOr\131Rn$a\199\172\018*\163\027J\195\204y\142\128|\024\145\230\178\225\207Yt\192\247\024mERZj\028\216\230\220P\141\178\239\207\019\026+o\160\190x(-1\r\156I\220\236[\234\237\027\218y\231\178\207\207\233\166`\194\245jO\135\210\242y\158`\223\223n{m\230\014\148W\201e\223\1593\143\158r\189\218\243\161\180\252r\185\239\225fH: \175\150\148\016lO9\148V\016\207+\212\253\007k\131d\000r\230\241O\162W\175\026JKn\150\245\016h\128l\247\243vI\t\188%\205PZ)<i\240\137>_Js\217\203\231\204\197?\193mc[\137\148\134Xp\015\135\159K\165\242\014\131-\201\198\004\213'/1\164\246%\134\180\224\222\221\245\232\227\196T\222`\176%\174p`y5\198Ci\153\001\255\254\181\235oWX\1698wA\157\251A\244\234M\135\210\146\243\165z\199;\155\224\017\245g~\188H\223\228\205\245\247`Vg\020\231\188\174n\216\018$\138\"\220\139@3\030\179K\145\161f@a\243F\136\026\164\180\r\225\209\230\254\185.\129u\255|\254\152\173\136\149\240STt9\183f\1534\149)\141\148\210\202\229\209\232r\186\031[:\007\2029\190-\201\254aJ\246,H\r\165\021\208\132g\223\241Rx\127\219\159\214io\188\016.\004\169E\002W\209\134\230\234Y%\203\202\156U!]\144\210V\0198\218@\211z!\129\173`\129\r\\\210\177UHix%\143k\228&oZJd+Yd\195wGmERZ\234$\182\221v\167\251U\029\219\199\239\212\253c^\155\2124\2515\128'QT\231=\154\243\252\251\252\205\215a$EZ\138\164=\159\245V\246\021\145\149b\029\210(?C\242[e6&o\231\163\190\227\231\229\160|\1354\202\207a\251\175\253\190\255]\249\014i\148_@\249\167\207\203\215\173\167od\165e\137h;\227\192\246W\020\157Q>\252\235;\018Q!\017\007\251\255\157\142a\166\n\156\207H\030u\244N\249\133k\223\160%\012\149u8\021;\021\225\025\183\026J+&p\194\162\015}\232\148\165\1480S\1780\227\208\18964CiE\232\192\145\229#P5\159\168\t\018L\202\142\166E\167l\175\005z(\141\132\138\135\021s\0281\b\185\159\237\015\128\172\189`0\227\216z*\tCU\196O=\230\213\1729\001\153W\"\221\144\210V\020/\247h\184\249\182\186G\246\199\243D\190\172\220\170d\169'\015\241\171z\"\194\165\217R\218\n\210\229\030\140?u6\252\236\248\202n\140_\247\152\nd1XeK\253\152U\178\1703C\021\210\005)m5\193\155\031\227ZM_\205\250\172u\143\233\023y\195S\151/\182T*k\196\170\224gT^\157\203]\2275J\007\165\180\181\242\005\225\175\191\216U=\249\245\003S\129\172\015\171\138\158\163\253\149\190M\170\144.Hi\171\t\221I\249K\189y\208\224\184Ip\175jzn\246\023\186F\235\147\206Ii\235l\022\027\252|\160\248w\"\135!?y\207\016\"SG\213.4\216\171oU_\231\181I\199\164\1805\234\197>\254f\215\158=\146\153\168\234\022z\244[\029y\180_\015\165\145\175\248<U\171\235\238\179\247\239I\209\173\206\243\231c\181\229\216*\148LQ\138^\004\152\212\240\027\167)\163|i\188\148\182\014>;\233\227_\242\169\007\r\249\148\146\tK\177\t\011\212\184\226\136\224H}J\197Ci\235DsX\255\161\204\132\173\173\136\2137\022-v\216\252+\153\181\148?k\185bW\245a\184E!\159\224\167\246\019\252T\241y\234\252W'\221\243d\210U2/)6/\157\255\218\156{~\205\185\242\233ij?=M\021\159\135TmN}\237\225\203\234{`\167I\031d\250Ql\250\153\203^\177\183~\181\189\028J+\157\207:\250\250\215<\228:\155C\149L4\138^\180\184\254\021\167\184N\231P5\150\182\026>\183\220\254\218\138\224\022X\251\2003\139\182$gE\127eyp\227+\031\213\012\165\1733ps\251f\014\249,\023\221q\148\167\020mI\182R\019\174\187\139Q\131\007\219\217\161\222\174\168\253\247g\185\t\2471\219\2013\128\182\\j\239\239\206zn]\210))m}|\214\216\253\197\149\216.\176\020\147\007\bm\137\155\186\251KK\177\029_\139\213\241P\218JC\243\134\253\153\143\171^\237&\022+\130e\226\168\249\196\241\144\187\202\025D\1704TJ+\153\207\028\205_\220\2254\161\029\142<\164hK\220\198\230/\237p\154\192\014\167\206\135\210\214Z.\183\249/-\150-\219[-\203;\142\182\\h\243_X.\251\245I\231\164\180u\1342Ukg\206!\167/\175@\218\146e\173\214M\150\146\204\175\213PZ\129\205\1389\190Y\187\204\234'+\021yP\210\150K\179|\179n\181\213\191\214(u3\148V\190^\215\254\191\228?c\149\175\159\2543\245\201LSwkz\245\023\252\199\173Q:(\165\169\181\153\204O\143\133\155\218\159\154\029\221\179<\164J\211\027iz\019-'D\134\159ux}\141\146\175\254\026\197\222\156\144\186\228K\133&^J\132\1405=/}\228+o\202J=\210\025)m]\201\226\214t\253\138\2190\158v,\143{\2182\1883]\187\212~\138\150&Ki\197\243\015-\244>\152\205\150\247@mI\150\148\251P\"\187\201\134\210J(\022\247\134\235\245\167\143\019\253\2017\021M\185\176\017\\\171\191\167hi\178\148V|\181\216z\166?\249\248\162Q\011\205#\250\171\134\210J\168C\171\164Ou\253\189H\250\012\031\242CB\243\153[\158\242\182%]#\205\170\251\141Y\219\173L\186%\165\1730\240=\200!\172c\249P\163a\183\182\230lO\199\237Pn$\130\145\253\2353\012z\236\237P\026v\027\2484\019\199\189\173\251mh+\235\246\150\173\219\021\014j[\231\014Z\187\029J+*^j\211\235\165)\167]\211\143\139[Yj\183I\184]\019Q\243\182M\1745\182\241PZq\161E\180\194\159i\182\178Hn\249\"Y\193\207B\218t(-7\015M\199p\1522o\152di\219\022|\146\133\227\148\185\227\148\015\165\149\021\248\146\172\217\253D\231\230\242\002\150-\201<6\208<M\148Ci\169*\\'\181\143\182\244\236C\022\143m\029j\011\181\145\182rmD\r\165\021\217\1728\150\001\022\236}\030/\015d\217r\233\188\005\216\176{5W\222\205J\237\187Yi\171\151\143R@\243\n\175y\178vj\187\165\019\019\208\186\194m\157\030J#OoW,^\241\147\007\242\156\150-\151\214\161\240\138\181\188\172\149\218\151\181R\205#\208x\006>\254\022\153\243qr:m\140\132\031\205\194\143#g~\1957\157\180*\030J++]j\021\0266\207\238\229E-[\006\027\134F\173tFM\222\212J\237\155Z\169\206\003IN\2186\237\181M\130\148.hV\147\182M\187m\203\135\210\138+\003\007\028\023{7\003}/-\207g\217\146\029\\<\152\158\029\149Ci\217j\177f\170\028\237\015\156\004,]/\180\136\234H\1871K^\204J\237\139Y\169\014|\184N\155\024\183^\019%bi\250\201\012m[\218\186mk\134\210\138\227\241\234\142\189qx\192b\230\141\018\1714\139Uw\236\141i\226z\163\030J#\171\219.\181\ni,q5\214I\204\234\162p\195\144\198\018Gc\221v(\173\184x\177m\227o\215\219GG\221\230\213\211\230I\020\235\146\133\230\205\164\205[XOZ\024\015\165\149\152\174H\236\001\253y\147P'\209\172\203\0223v@\131\238,\212\165Ci\005\242x\246\177\1448\025DI \235X \251XH\132\136\136|(\173\028\030\193\236\135q\\]\181\167.\137j\029\139jP\218S_\181\171\175r(\173D\181\172\175\241Q\172\199s\179Hk\018\225\186zIk\158$Owj(\173\180f1\193\207Z#\193\172k\023r\245\164\005\205PZ\tz\177\005(\157;\136\145\184\213u\011m@\201Y\161\235\161\220l\179m\232\150\235\161\135\239\210d[\027\157\178-\191\231:\018\157z3\249\248/\179\031\255e\129\135\184\006\2507Xq\"\021'\193\138\191\161\154\227\161\180\2364\\\243/\\s&5g\161\154\127\193\154\211\161\180\236|\161\207\164\234B\170.\130\157\198u\231Ci\233e\184\238=\174\186\146\170\171P\213{Xs9\148\150\173\1945\031q\205\181\212\\\135j>\194\154\213PZv\019\174\249\138kn\165\2306T\243\021\214\220\012\165e\235p\2057\\s'5w\161\154o\176f=\148\134\029xT\235yM\006\237\146\178H|:b>=#\187\245\203\219\030\153}\219#\011\188\180\245\200\175\226\184\154E\226\219Q\178\144\157\133q5\147\215>2\251\218G\022xdk\143\030\164\201\"q\237\136\185\246\030|\219\158\201\163\030\153}\212#\011<\180u\193\245\137?G\204\159/\176\190|(-10\235+8\178\226\196\017\157\220\021\026\209r(-\145\251\239w\216=\241\220\136y\238w\212;5\148\150\199}\246'\236\156xk\196\188\245'\234[3\148\150\0238\018\219\235\251\r>\005\150E\226\167\017=\216z2\189\154\245P\026v\232\237\172\253\194\229'\145\021\139\191\198\209\130\187\208\219M\"c;\148V\208\2425\185\133\246\136\251\198K7\223\194\237\137\135\210\n\226^|^^hg\177\248t\204|\250\188\184\206\206\228\209\143\204>\250\145\005^\226\178g\201+Z#\030\031\023\129\003\233\229\246\228Ci\005\149\139c%\167\019l\164$\030\196\213\194HMDxm)\135\210\138\225\209\161\253\005\031\026\204b\t\0161\011\016#\205\171S\r\165\165\242\024\2096\184J\137\0181\139\018m\003kl\134\2102\245\162\183\006\199_\002F\220-\248jh\244\245P\0261I\244\174.\246\231\175\237\161\149\019\179\190jP\187|O\159%1\165\213\2329\193,\143\133\150P\218G\127@4\137\003IJi-\n\169y*\172\140\178t\179C4q\243$\167\180_\176\178\\X\005\175\012\214%N\156\148\156uC\172RX\021e\221N\136%.\154(\222/h\230\185\018ZMi\253\177G4q\200\164\161\180}\255\019ZH#\188\150\242\254\196\138\020gL4\1655p\208\180\176:\202\250\196V,\174\151n)\r=U\158\021[aqO\251\134\154(\031\182g)w\180\143\157j\231<\170q\003\020\145\226\132)wB\019\185\144\142\229\147\247,\229^x\128\218*\196\rS\238\134_\200~\228S\247,\229^x<\253D4q\195\148\187!|x2\147O\210\179\148\251\225\0158\162\226\135i\021P$\172L\0281\229\142x\198\234\023GL\185#~#\195&\158\152rO\188\192F\138\031\166\220\015\175\1842\241\195\148\251\225\015\r\135M\0281\229\142x\195\209B\190\198\2062\238\137\023\216\202R\\1\227\174\216\160\225\150/\177\179,\014\0242ld)\254\150q\127;\247?\209\012_\138\191ei :\193\206\137\191e\220\223N\144%\254\150q\127\235pe\226o\217\196\005\014\167\214\190+ryF\029Y\242\169}\247v\233\143\031\239\251\191\207E\b}\226\n\234|\178\025\198\179\153\139\206\255@A\205\149?\220t}U0\138\156\184\137>\156\237a\236\213\156\185\\>\231R\031\232\137s\232?\155\189:\2007\230\001\194\212/N\246\215\163 j\226\006\223\239\250\186 sb\253\170\182\151#\250\133V\228\019\187\159_p\190_\142&\173\"K\183\191\001^Dx\128 kC)7\178|\195\196\026<4iW\135Rnd\001\135\137\178\222\243\136\201Pnd\r\135\137-\216\n'\233Pnd\017\135y\178\230\243\136\217Pnd\029\135\137\191P\133\249Pnd%G*D\245\021C\185\145\181\028\225\221\000\175\028\202\141\172\230\200\216\159\000\175\026\202\141,\231H\255\208v%QC\185\145\005\029&\202\250\207#\214C\185\145\021\029&\014+@\143\217\012\229F\022u\152\249'Tj;\148\027Y\215ab\131\006Q\015\229F\022v\152\247\t\237\187\027\202\141\172\2370\017\252\004\141]8J\185\145\213\029\230}\003\rM\163\161\220\200\018\142\248\147\172\006\255\134\002\231\\\247J\180\149\198C\185\145\213\029\209\217\014i;M\134r#\011<\204< \173\165\233Pnd\141\135\137_\192\162\210l(7\178\200\195<Y\019z\196|(7\178\204\195D\244L\169]EJ\185\145\149\030&\254@\227[\014\229F\150zL\169\168\194j(7\178\216\195\1963\028\0125\148\027Y\237\017\139\194\195X\015\229FV|\152yAMm\134r#K>\162TX\225`w\214K\011\230\165\178F\244\136z(7\178\234#\177\015F\148\180\027\202\141,\252H\031Q[\179\237Pnd\237G\006\018\024@\022\r\229F\214~\204\196QS\179x(7\178\250#\022 \171E\143\153\012\229F\022\128,\138\161N\166C\185\1455 &\158\016/\027\202\141,\0021\175\131\021\230Ci\137\190?>?\003nv3\029\189~\128\203\204\237o\162\216\247\201\146\166,\169\158C\199\214\003w\226\164\221}o\191?:\157\201\234\243\172/\253\169}\016'N\186\2512K\214\227\251\249\127\189{?i\150\149\237\187\172R\255\232\134\151\128^kM\211\194c\127\251\154\188\198\228qM\155\205\n\250/Q'n\210^\212a\132\254\139\129\154\197\197\012ZE\239;m\150\156?\1997\214\140\248\163\218\141O\027\197\254\027@Y\021;\132\171\2548\237\217{EY\149\184p\179`\191\238\180\025$\206I\029\206/\245]w\230\172\231\166\142\156\148A\210\135jC\173\203\029\210\1737a6\208\249\194\193\203Z\157\139/\1896]\190\007\224\149\003?\171\235\238\022\192+\007\255\165o\253\143\161\2411\128\215ngM\227/\188\175\141\003\255\176wuv\1885-\196\191\029\238\223[u\2244\237\211\140\141|\245\001J\231P\190+\179\235\2492\234\186pe\169\173\215\251}o*2\245\025\011\t\240\"oP~\233\011\135\187\238\161\172?\153]jw\255\220Q]+\215K\014w\195\226p\215A\014j\167\206*T\129\235\029\007}\249\012\024\186\202!\222L$&N\006h\174\127\180\234\242\017\128\151\222@\182\135\192PTd\b\191k\019\025\002<\223O.fL\204\214\245\237\235t8\241\230\185\014s\218k^\137\235.\253\254\254\197\209\174\179\180z\215S\207U\174\143\252\234\143\167\209sK\000\127\250\135M \152\226z\186\168\183\166\1914\129\246\215O\2558\159z\137\211\250\135\1684B\224h\014\222\153\208\220\189f\130(\002\148\024Q\206\166\020\171\141@\183\235\004Q\190\219\028\205U8\t\224\164\014\167\191\244\223\005\156\002p6\007\223\174&d\t8\003\224\220Q\208\179\1839\000\023s\240\171\159\005\000\151s\240\164\135`t\235\202\233\161\137^\018+\163\n\128\021\000\027E^\237\026\237d\022\220\234\007\165\214N\171\238\245}h\021\242\149\186\153\163[\245a\131\191\169\226`\178\1372\002\241\212*\000\248!\169\157\255\241`\022<\031\131\173\131j\159\158q\190\031\155\219\253\1457\251n|@Vd\023\007\223\205\133_T7\186\132/\187\217\"\217fN\214\223\1355\226\005\245e\248\251(!r}\170?\218\031<\149\026\129=6\142\143\\'p`\145M\130\026x=Y\183\186\222\157F>8\233,6\220\207g\155R;\241\197X\147\205\b\251\211\207\t\001YB\147\163V\029\239\199q\018T\184]\005\242\129\215\154\015yB\251\028\160\215]\153\238}\015\164\183\145\131\172m\146\r\001c\007h\210\148\246\167{\0164q\160\173\2183\169\169\003\181\0257\132\203\028\156uO\b\204\029\224/\179`:bh\225\213M\026Y:\192\027\003V\014\240\203\236\139 P9\192\174?\154c\133OE\006\169v\224\020\2168@\019\2114iB\011\155p\176?\171\132\224\218\129S`\007\229\026+\135p\237Z*\005\186\134z5]3\235:\136um\149\218\128N`k\207\216\n\181k\173\012\151A\169\183\171j{Lp\1736\000u\173\246\251\t\219\130v\173V\246(\016\233\154\173\141\198\024\233\218\237\141\184\161~Z\129q\129\183\219\197\236\183?\246XY\221\203\002\030\137\142\175\190m\205\242\245\241a\139\231\235Nty\161F\137\017\149h@\190Sz\145E \163\172x\169u\011\226&\168Q\"\156\155\198-$\154\000\186\148\016\198\205 \224\228[\155\212Su\223\024\127:\212vHm\158\163\249\223\006\169\142\0144z@-\198\254\218\186Y\143ad\252@v\167\211\237x\186i\153\249\204\158\015\195\019Gpgf8\140L\029\228\225\135\186\017h\230tL\230^U\159~hB\200G\194\031\253\177\181\215\202\238\181~\187\152\246\191_\255\238'\136\242m1\135w\167\251\197\190\029\196\t\229\163A\023\2455@\212\222\129Ts\153vaa\031\149\214\195\168\200\2489\217\167|\171|\206\205l\203\030\239X\135\168&\221\221\153C\143c?\201nymj\030\205\158\156\2136W\007\212>@\173\252\004\189\182y\132\155\217_\t\218\019\169\031\232\243\201\164[\1547\185\201\206\147q\249\182\155\r\251\161\191\154,\005DF[\199@\246{\251?F\023fe\163\190\236\135I\234*\255-\205\141\228\209\220\206G\2222-\158\209\204\246\216,\191\238\182\242Q\004g&\014\179\237\223\158\173>\238\238\1568w\135\155I_\024\222\253\202\tO\167\024\242\188;\147Y}\027\183U\152\144\003\194\235A\004\179X\028\239\166\170\241\029\140/\029\016V\000a\191T\127\228\140r\206\232\212m\200\184@p5\007\155\148\217\144\tI\"\000Vs\240\167\186\014\153\175$\006\224\250\t\214\135\1909\237OGl\217\209\211Y\030\139\031{\253`\b7.\244\2332\218\254rDg\156\246\207\219\228\186\130\135\127:\141\153$\207&$\152\r\132\179c\163\212\167\251\128\139\020.8\222:]0\154\217\029L\n@\134v\015)\145C\217\169\131=\241\159a\001b\247\224\199\206__vuPm\171\198\168\253\144g\b\197\2196\183\1356\190`!\152M\243q\216\201\140\021$\180\002i\b\169 \229-w+H\029\212O\2453$?-W\20072\030\226\179\133\246\215zoOo\157\246g\001\249w{\173y\214\133\220\001\154\225\014vA\173\232\194\151zH/@\015\1365\149\014\180\246\236\206\249\187z\214R9\127\186ikB\023\147u\t\155\227M\169\007\238i\148\202\151\181$\227A\173\221?\237\150\184\187\023\217\r!\223\244c\003\229i\170\245\020\191[\240\186g-\218\245\242%\238\231\132\2209\1273\219v\220\194d\235w\148A\221 rY\208\217\229\209\156\196\r\0312\165\224J\220@p\213\154A]\1516\217\\\138u\253\243\170Z\130\204=\2131d\225\217\023\t\191I\233\245?\172\185v\247\180\242\196\245\024\174:\215\031\204\194\145b]\0070\135\231\143hr\251y\178S\215\213\t(s~\019\224\239.Z\015\018\230Qo.\193u\141N]\174\253+\166\245G\251\242\165n\223~\016\190\014\243W\245\162[\144\241\234I@J\250t\161\155\186\253\2126\147\134\182\014\169\235>\221\130\251t\015\247I]\247\249\174HdN\019oi\208\005\235h\212cvI]o\178+i\\\137\235K\007\026\255R\215\153\142\167\019\177\200\212\245\166\165\136\188{\170\167\244\167vRG\133f\233\131\250\188\222/\225\233g\004~\183\192\135g\166\202\159\143\131B\158sm\250\244>Y.?N\252\253S\147<m^\219\182\195\225\137,\001\242\233O\178P~ +\128\212\179\218\189\197\250\244\143\207\190v\179vxk\246\233\031\031\156l;k\145\183t\159\254\241\201y\237\236vv\157(\164\196'\r\127}\178^\027\187\251\231]:\158\248'\015y\246\244\142q\r:85\219\218dO\143\152\174\175(:\155\163\135\208G\206\015\242\236\181k\187\215\215\198\236\023n\195\130\139\018\158\238\241\012\140\207\145\192\237)_\1575i\021\235xfB\184\031\143\001\202\211=~\2534\255\199\167\250\226\208\167\237\2550g%\251q//\251\180\031K\138\170\001\245\217\169\1492\026 \195n\183\022\180\254\244\145\231\183\249\011J\156\187\202|f\225\172\167\179\252T?\190V\217C\190\157\231\136\218\254\1637'\224\250rz?\254\1751\021\182\149\127/J\132(\167\163~1\"\249\247b\196\136a\186\243b\196\242\239\197H \195N\139/N\"\255^\156\020ql\242\237EI\229\223\139\146AJ\255cRK&\255^\148\028Q\174\253\159/F.\255^\140\0022\140!\028_\156B\254\1898%\226h{\219\237\197)\229\223\139S!\206\177\159\014L%\255^\148\1677\153\220\224p\129\140\166\004\243\167\251\180\186\233\015\246=q'\151\231$\220\242\167\175L~8o\129\242\244\019;\006\195a\165\245\205\155\"\249\194\220]\140\025\255\216\235\235\021\236\012\031\140\1420\232\218\166pw*\215\187\209\150\019;\147\204\159+d\238\030\226\201()\130\155uu\221\175H\137\220\004\232d\023\n\158\031\153\132\000\180\134tW.\015\176\155\191(\14655\160\2456\175\193\2030\020\238\026P\242\127+rEO\216cF.2\n\153'\022^\023_\135\148H\145.T0ko\206k\153.\002'\149H^g\185\146Wf\167p\215\165w\158s\153\212\211\020k\235\025?d\159\174\156\138\146\247k\186\200\156\246K\173\170\239\185\004-\188D\204\138\236\201x\215X\166\232W\030\166P@\212Za\207m\218\243w\014f\158Z{\153\166\229T\019\019<8\199(\184\001y\168\241\167%\236g|k\154\254\250\030//Z&\206\221B\154\255\243\231\209\172\174\218\235J\2530\254\163f7\242\158Wk\222\221\166\143\002;\191+kE\218I~\186]\030$\150[o\016wkG\241%q\218\198\210Og\0072\1614\148K\140}%\205\202\152IeF\186\144\201[c\225\165\027\215\143_\139\251^5{\023\230\185\028\029\005\1861\188\253\171\002\159\r~H\206\168~\194y\018\166\024\1515V\227\006\245[\179\251\221\030\188$;\238R\022H\248o\138\127\026\229C\168\027\174[?\221\234\230\020\2478\150\150\021C\130\184\244\224(\198y\237\1360\177^$\202\203\144\175Fb1\141'f\183\182\255N\150n\020\216\250\250\252}\137\179\128\225\173O\239k\197\017#\237\214\018V\006\252e\254Xs\181eL7\250\194\193\170\188$\254r\022\031\155j\229\134\203\203c\206\027\247\240\191!\245\199Cf\194d.N\203\023\127V\174R&\1419\006\022\249B\143r\179\133\158\255\134\2369c\148\159/\182[\252\210\254\167\229x\235\245\194\225\142u\022\172\206`\"\029W\005\189\186r\163\228\183\149\134G\\\176\170X\139\195\142\128+\193K\151\202\r\173\2464\234w\134\226!\167\166r\214\157\150T\205j\001\210\158u'\023\149\027h\205\169\024\140\162\152\173){]\237\222JS\253\214\185\139r#\1619\237\250-~DR\016K\0073O\220c\229\168\220P\216M\029\246`Z\208\174\b\t\157\194\156\177\142$T\199\239I\159\201u\131\228\143\197c\169\160[\170\140\181s\193\210\023k\153\181:\247\183=+\219\141=]\185\241\207\228\161^\n\011YQ\201\136+\173\208\rc\159\139=9\157\245qrr\167\188 e2T\187\197\163\191\0015\017\227\029\t?:\1788\24763\228(\174a\226\214M[\141\015\031\005\187Akm\227\152\193j\214\208\2232\216\134\178\198j\220h\247\193\018\157\245\214G.\237\001\234\200S\202i\193\138\158R\225l]\199\139\240\192\212P\187\193\234\227\254\219\173\129y\155:\165\188U\222V\187\209\233y-\018/Z\031\180\156\209\022\162C]0\226\202\246\150+\248\161\129p\163\139\156\003\174\217\028\214\n1\199\019\1965\179\163\028\245\143\178\220\208r\001\247\000\184\020\188\255\168\027\218\181\128\159\180\148\180r@\220ha\175\189\180'\213\236\236%L\029\142i\159\199\211\205\030\164<\175.\212\029JG\172\178\172f\011\026\242\184\224\235\221\005l\179\021w\001\159\205j\" \251\227\180\176\005\183\159\153\159\158\217\162&&2BW\022\155hU3g\245$ \245:\222\020\\n\243\244Z\225L*\189.\202m\171qc\203g\127\249\216\245\191\222NK\135>\163\232\225\023\133E\148\027o\214\138\152o\167\027\239\236b\157\148\217aD\227\134\160\175\149R\188s\183\166\"\nZ+\209\189%\240\144\171\024a\205%\176\166\246\022\192\235ZC\214\019M\227-<\199Ke\171\002\222\243\132\166qC\213\235Z\154\252\146e\240\162\209\0048J\211L\218\154l\205\023\204\2144\0295\160p\236j\221\216\165\215u'\1844h#\170\175\223Y\199}\1337\030m\012j\145\031\012[\236\195\136\026\229$TN(@\182\241\170;\221N]\207`\230\188\255\227\182u\250\252\143\1532\220\2375\027\205\224\023(\207\164\192s\2292\187t\199\238\208\180EH\232s\143\245\155BK \212\222^\180\175\252\221zcP\221\233\194\191\031j+\212&\211\130\231\205-\200R\128%W\198)\163\006\140\151=r^\003xr\127\1542\220O\\\212\023\251b\176}\006\016{\r\228f\193\151{m\031b7\017\188\198\223z\181\029h\208\229d\239\029\180\195\229&\2140\189\005\204\251yx\r\245\162\155\155:~\220\247\234\178 %\002R\030\129v\167\149tY\238\213S\t1\181\152\235i\175\236\\\0204\025\157\204\2496?\247\028\017t\017L\167\168\194\199UH\\\135\243\201\152\220|@7\144\181\227\1682%A r\190\208wc\0269\150\172\241)\227\233K\231\189j\180\029\136\171\250f\175tBK\210O'\210\135\243\237\235\205^\1462q@\212i\195\025Ug\ry\131g<\136\176}O_z\216\235\1473\166\145\236W\159\237(\144\139i\253\241?<|\0316\216;\169z\172\152\151.\196\235\142\229\195\151\152\221\246]\255y\211\210\203A\004\185\133\168'\183\016\181\186\154J\142\1480\138\142\130\162\159\183\021\245\228\182b@\178\197\143\130\227\160\224\231\165F=\185\212\024\016l\241\163\224$,\248u\247QO\238>\134D\239^3q\151\006\133\191.I\234\201%\201\128l!\140\162\179\176\232\231eJ=\185L\025\018\221?W\180]\030\020\253\188t\169'\151.\003\146-~\020\\\132\005\191\238f\234\201\221\204\144ha\140\194\203\160\240\201%N=\185\196\025\016>0F\225UP\248\235\182\167\158\220\246\012\200\022\194(\218K\231\238\252C'\226\200\254\129~\187\142\232\238Y\228\211\161u\212W\132\147;\224\166W\187\254M\029\236\221Ls\0185\132s\143\164\017\201\190\141n\254\183\031\190\127\213G\194\237X\226c!\206\021\219\237\251\245\235\210\171\231j\199^\130\253\184\168\243\014\222j-\182\209\003\1275K\015\1817cdV\028l\r\253 \197/R\189\146\146\160z\248G\204\1976\245\235\b\193\179\007|w\186\244\191NG\251\238}\b\159?\240\002z\187~\234\159F\171\246\161NB( AVk\132Q\210.\175\168\174\"\221_S\177z5\213\204\220\170\177\198F\160\245Sm\234\242\185\215\234\248v2\142p\191\018x\227\193\015\250\022d\180\030C\"D\127m(\165{P\2527\244\209G\236E\244\180\249\199.no\237\029\250G\0209\216\249\rk\203\179W\172\253\151\224\138(v\152\181\190\177J\018\007\250\161\014jO\176)\194\154\242r5y\232\158\1442\135dVP\138\182&w\193\227\238` \025K\1862f\2250w\154\000K\007\200>O+\162\202A\210\207d\139Hy\181\211.\214\014\244\198\161\r\128.\169\187u8_\247\150\137\215\000\202\245\2149\232Oj\184\177k\228\246'.X+b\215\202\015\253\129 ]\171~>h\229!]\163\190\234\195'5\186\2165\235\225M\1690\199\181j\162\181\2165\2323\003\186\246\251\252$\1382\\C6\169\0296x\177k\202\223\249\224\185\166\204}.vM\249\245\186\149\007\245L\153y]\220z\0263\249Z\019\139k\238S\177&\028\179n\162\209,\238\b\169\221\005\"T\242\180\237\179\253\030s\2253\196\"\137\028x\240\187\179\"\137\029x+'T\\\252\211\208\127\217\017]lM\234\192\023Z\1479\240\165\214<\141\253R\171\235bc\1389z\161-Ok\031\026\241\246\203\006\149\201\n\1383+\200\0283V\156\246\244\131\221\154\206\212s\244Bg\154\025\250\015}\181\156\137v!\233\233\024\003|\161Az\142^h\208\211\023.?\213\142\230\182\138\244i\253\157>\244v\151\020z\199\179H\159\214\255\253~\221\217G\213\002\162\159\166\127\185\127~\170\192C\209E\250\180z{\004\241<}\152\028\253\208JR\206\012k(}\250\130w\206D+\203\001e\161\150\167O\156\204J\250\251\221\164\212\172\142\023\234)!i\161\166\167W\028\238\215\190\225\194\159n g\024\159;\142t\003\247\245\244\209\218x\250\139\190{Q\164\154p\204\240\179\t*\237\b\167#\147_\230\030o\213\224$\234\021H\246_\129\253u\145EL\216\252\006\234\170\235\011E\022\175h\154|\239i\127\142\225~\150\139\235\193\230%\127Y\224\208\236\229\019\218\"Ki\029\179\187H+n\226\022Y\198dy\159\160\135z\1573)\161kDE\230\189q\161\214\191VRd%e\255\197\177\163\031\155x'\173\015\027]\241=H\145\169\197\020\246\026\021\215,\157\253\248\173\019\200\226\247\164\215|\030Qd\238\161\251\235N\241\154\017\210\148\rF\232\249aHPd\183\216\160\201\024\005\004\229[z/w\249B_\145G\148\253\215l/\143\209\181\2155\183\007\138<\225\212uQ0OWI\248\173\254\160Gq\214u'\0152Cu\022\2522\219\1541-)}\193\195\243j\129I\226_\174\216mF{\245\tSh\024\248]\251o\152 \254\205\232\131\218\210\160\242\187\141\208,\132\015zs/\167\237\130\227\215\253\174\176\233\132\139e\250\143,<\187\250\223\016\026\209P\254\215e\198\191\221y>,\129\199\021\022\014\025\131R\211\191&U\002PHn\198.\152\253\247\155\156\2557D/\182\187\248\235\194e\242\014\248B\001\222\000\251\239k\163\250KB\023\245\160\022\174~\253w\154\\\255wd/\182\188aN\247\223\026;\030^\023\197\134\026\171\169\216\165\131B\239\r\132O\242\173\004d\151\219w\251Z\232Q\189\180\164\b2r\144&c\241\163\255R,\215^\198\014\222\206\187w\130M\028\236\133\182\"u\1445Ef\014r\191\208\222\220\193\127*\213\177\246\022\014\214\028\nRl\233`\127(\245\131a+\007k\151W\012\171\028l\023ho\237`M\022W\237\025\184q\1927n\019\173\171c\165h{\181\131\253\b\180\183s\177\199\224\216U\174\021[\247!\178+\215\142\219\176h\215\140\127\133\225\174%\223\194p\215\156\191\152\170+\215\156\207a\193\1745\127\011\195]\131n\194\206R\185F}\187\209\134\1876\189\163\230T\185&\253\201\16150Rf\209U\227\141!\019\219zA.`I\174E_\1499db\224\2063;\014V\174=\219_\018\135@\215\152\1271\160k\198fk\206*wMX\238\2150\176k\192\223\185W+\215\132\127\242H\168\158\246\171j\213\245{\249)>\144WUO\195U\006\024D>M\182\175\251\016\238i\175Z\215Z\135\144Os\189\215\247\016\238i\171\167S}:\133\144OC5U\135pO3\213_\181\254\n!\1596j\170\014\225\158\230y2\171\133\144\030\235\167m>\223/E(\2150\143\204\229\026\195\254<y\2157/\238\027\146E\019M\128\207\203\152\023\247\229\200\162\137'\184\231\221\202\139\251^d\209$S\220\235\170\228\197}%\178h\210\t\242u\239\241\226\190\rY4\217\020\248\188\197xq_\132,\154|\002|\222I\188\184\239@\022M1\197\189\174\024^\220\215\031\139\166\156 '\247\005/\238\155\143ESM\144\175\203\127\023\247\165\199\162Q\002|\004\140a\248.\206\232\213S\140\214\024\212LA=\198\1803A\024\163\167\152;\198tS\204\233\004A\237v\006\194\152h\138i\213\1359\140\236\159\223\147\186\224x\n>bL2\197\212DP:\005\157\t(\155\130n\004\148OA\223\b\168\152\130\204\164\143Q\229\\\021\024TMA\023\002\154\153\212\133\161fFu%\160\153Q}0}\206\204\170#\160\153]}\018\208\204\176\246\024\164g\134e\162\223\207\211\254t\197\006\166g\006v \002\231\134\245EP\201\188Z\012\154\153\022\025j=3\173\159\00443-\214\166\194iyP\0233\011\251v2\154#\022\171+\015\201\204V+\015J\012N\015\006\215\156\014\181=\183\2550\203\190\211\2296~\203d\167\026v\172\171\027H\180\135Oa^\011y\151\254j\255C\152\170\029\234\254d\207g\244\1811\217\135ev\135\216\203\029\237\182\136\183\216\207.B\1805\221\236b\135yTW\179\203\2545\185C\202N\239\187\196\161\142\191\133\247:\219\160\149\014.\242T\199\155\178\215\188/\167\179\189:\246w\223n\186\209[F5,\194\007\191\185~\029\234\211\222\204Mf\212\142G\141\127\165\172\232\138)\216\196\183\207\251\229n\209g\136.\031}~\252\168\154\135\024\028G\255\217\216\027>\206\2076y\224\209u\2127e<w\175\142\184?\131\021\183\234xS\003\138\014\201`\180\237\233r:\232\201\207\195\185\002\007\235\188\153\006\030)\170\180W\227\r\226\210\223\012\234\153\128\193?MZ\218{\241.\184\238o\024\027\251X{\139\247\136\209\137\143\150\155\184\024\157\250\232\254\011C3\208d\16506\247\177\1914ip\001\154@Z[\250\208\027\195V>\246\235N\176\202\199\218<\027\006\215>xovyDt\227\163\159\183e]l\235c\201\015\192\150[\237cm\248R\172\029\029\2082\022\029\001C\238z\012\005f|\179\249\006bC\0170\229\239w\172\231\b\024\242\235^\171\011\006vl2\193\164\131\192\146ol\184\163\169)\203\239@\240\159\242+\163\194\007\255!A\1282J\151qj\154\253\253\218\159\002\181T.g\252atJ\152\218\247\225\212\154D\1315\218qSs\214\199\219N~\162R\252\227\239@\007\181[\161C\162\021O\173\127\242;\0192\223jNk1-\192\208\152a\166\213\139T\166\020\231v\129F\006x\241\022\243B\148h\169\153\156\026\135Z\201i\ti$g\164\001c\025\022\132\nZI\156\225\170\030\028Za\030\232\217\157\211\nL\0110\202@\207z\220\167*\208\182\158\215\1640-\192\168\137ep\006\241\173g\254\011\179Z\215\149\143\250\251\189\r\216l25\243\233oq>\136\224\023\151\203$\"$\213\153\233\225;\230\196\140s\2520;\019HI\b\165VwLHY\029\183\131b\156\140p\174\187\254\203\156\140\236\153\014\166v\237\127k\006)\005\169\234`\206~\237\185\237\247\222L\175\152Z\018\234\175\254;k`E(\129Z\020\171E\153=\028d\212\132q3\027\007\204h\216\024]\204\162\236HH-\027\164\147}\212\228\186\235\236\202\b255\187#3\137t\251n\214\223\173\154\030\227\239\191\227\181p\026\185X\147y\135\192\216\003~``\226\001[\012L= ^>\165\153\011\188\155#&\146V,\211\220\019\251\011\003\011\023H\022\235i\233I\188\017d\229!?\175\164\153\202\135b`\237\001\247\024\216x@\188\146O[\015\136\151\162\169\246\128W\012\236<Ub\137\153g\154\234\140\129\190]^\2410f\190a~\199@\2230/\024\232\027&Y\216g\153o\025\024\232\025e\027\178\225\2043\205O\226D\153o\155L\245/\219T]w\233\155\229\172P\153\189\140\244\199\169Y\151J*\179\151\193~\216oz\214P^\1346\137q0\184\229\238\167\160\007\251\211\238\202^45\251Kx\\V\230\017\229|c\148\152W\243\1978\t\229\220n\140\147\242z\142\140\147\0058\148\148SR\189c\156\130r.\140RR\202~\2078U\128CI\138\146\174W\194\241.\191\190.l\154\136\174\154\157}\237I~2\019\211\163e\186}>hx\196*$\136\255\154\216\192\029\127\135$\240!D\025\184\210j\031VX%\"]\238\207\240\203\158\152\158-\211\235\211\237v:\140\189\n\201\202\151e\201;M\011\151\237\203\162X!hxd\236!\142\b*\151\005\137\162\151\228T\191\2113~\139\178\244n\149\190\004-\233\164\254m\187]\241\165U\233]\022\rZ\241*\137\237_\177\168U\146\245_S\1930\194\236E\216\210\187G\186\172\130\005\137\229\246/\171`Ir\180\2143\208\239\001>\132\196+\189\"$\227\025\185\198\159\211\030\2486\203d\244to>\131\228t\137\204^\223(_?o5\163\174\248\146\166\244\127\178j\215\031\193\139\175\015\2483\b\213\234\170\229\219\217\133(\241\250\133\169\139\234\175\211\144\240~\253?\b\207?\208\241\222\208\197\021*v\211\2517\190\225+\189\031\152z\254\194\199B0\243~R\n\2534H\136\223\006>\240b\2236\018Q\207\208\240\252z\027\188\191;\130_?\206t\150\001\146\028\213\016w\208\163\154\229\235\215\152\206\189\186\218\151\t\023\025\232\165\197\159\167Kk\\\237\143o\247_4\019VU\254K\132\1943\167\018&{D_$,+\197\136\007\155>\226\188\154\240n\202\222\000\221s\226s\240\229\221K{\165\241[_\243\142\189\030 s~\016\214\164I?w\202,\247\174\156\252\028\221\225@\187\r\191\181Y\190~\179\198\228L\186\177\1296\186,\240\188\223\170\169\215\252d\212\131L?\001_\250t\173\244~\153\230\219\243\227\194\021\1592\148\222\143\206\220~\227\131\229\210\251i\153\238\191\241\233z\233\253\176\204\236\023ZB\234\011\252x\131\\b`\031\031\150\222\143\194\188>\205\\\217\230\018|\142\195\190\\_\030\204\2347\164-\172x\188\031\141y~\147\183?\157\206\132S\179\239\161le\246\255 \207.\148\222\143\193\\N\006\251\241\165\248$\233\253\204\139tl\250\211\193s8}7u\221\140\225\253<\011\2501\171\000\159\255h\203k\194\012\236\181\188\223o1`%\171-\186^\241~\161\229\215\243\211\240\215\247M!\019\240~\164\005}\173\030\234r\202\190\146Zp\200z\217\147\197\132\143\203!\166^x\136A\0286\196w=\252\252\155|\215\193os\254M\239\130\244*\252e\172,\219B|\245\027\017a\165Ho7(\201\192#\248U\180\007\163!\012\246S\238\165\247+,\015\006\248Y\152\007E\135\007\138\172c\235.<>\132\230\253\184\202m%\207u\227\201\239\185\132\137\129\231\016\194\196\132\191\220\186n\142\242~\234d2|\191%'\227K\141u\002\2425\002\002q\165\161?\182\244\251\223\132\151\222\207\158|\\\15297\206\210z\242\131\031\127Gp\244\131\000/\014[B6\232W\001\220\207{\157\221*\149\213\176]\196U\005Z\208\002\214\175\016\225\229\180\234\242\161\189\020\029\229u\140\023|c\170|\253\174\136\220#XBG\243Z\154\254\210\236\245\018)fM\235\143\215\190]+\005\252,\128\157\232)>\165\187\190\203\031\151;\223\028\181\025 \154\165\r'\160\031\243P\129[c\240\135:\190\007.\141\181\236\183\002\006\011\030\178\192\148\012v\177\171\185\138*\241\182\251\2276<\194\024\160\215\148~\253C~\187\128S\169\187\169\227\031\199\254\026PV\203\029\245\243\022\168Q3\222\247>P[\199X?\213\247\142\215\006\127\173\163;\157n\199\211mHi\232\011'\163\031\233\024.\003\169.0\030\175\159\230h\251\235\249n\151\187K?bR\190~\142\227v\191\028\rC~\233j\193Y_?\201\209\220/&Y\212\005\205\228\245k\028\003Zj\224\232|\142~Y0lI\001ZrS\2209_\191\2031iL\144P\129\246\220\248-\244\242\245\195\028r[\255t\\\241M@\249\250U\014!9\185\004\202jf,\187O]b\180\176q\011\195\173q\227\022X\157\223\1840\163{:\141\252\158\235l,\011\000\143f\240\217H\150\000\030\207\224\179q\172\000<A\158\175\248\n\162{\253\166\148\156\134\140\135\026\230t\12922\192X\182\149\238\233!\195Q\134\179\193\164\218\157\172\005\205y\131Y\"\157~\202/\254,\212\246J\180\203\238{5\175\"\213-\180R\177\234\022x\245<m\249\187\173m\214\208\159\170\230r\218\160\182V\bx\165_%\016/\019\186Wn\216$\202\237\138\235\167\250\186\206~\156\148p\171\237\246\189\213?\212Q}\168K?^i}$J\204~\167\181r\143\237\029\127}]m#\143\189\130\020{$u\188_\127\168!\200#F\2261~\244W\179\2124\004\251\221\206\222\129\167S\184{\207\249\031\128\144\001\002\129\230\bJ\176\005\192\246\024Z\"(\193V\000{\199P\133\160\004[\003\236p\131\201\1522\1664\001\202\030SZ@\025l\230\2411\182\203\208t4\t\161\003\004\012\141\182h4\177\218\163\136\183\252\132\0251m9!$\128@\160\200\198\021\030\217\b\153\247'\182\217\b\217\247\231\142\128\145\129\127\016,\178\240\015&\024\153\248\145IVp`0\022\025y\195Z\129\204\251\027\193\"\187\254\198\004#\147~^\145s\193\200\156\159w\227\028p\188\133`\210\142\024\153t\219\018p\012\193L42\229\231E;\023\140\140\153\245\016\0253\237 \178f\214?d\204\180{\200\154Y\239\1601Ota\197\189m\171\164\153\211\144Y\159I\021\200\172\207\172\237\200\172k\130Ef]3\193\200\172\015\004\139\172\154x@\130\140\250B\176\200\164/\151\137\174\147\173\175\235\004\217\246\158\212\128,{\207\192)\004\239\167\237I@{\144\145\255 U\228p\150!`d\228\207\187\159.\024\0259\195\"#g\141\152Y\246\244\211(M\022\128I\205\024\150\002\150\128I\227\173\024\143\24717T\000\249\173\191$\253a\127\005\141\245@\147\246(\188\"M:\130\239!<\22128\193G\004\207\150\224i\204\b\148\145\016\198k\133H\136\233\018\14523\194|.\023\t/'\188\199\162\145\208\nB\163\132\146\025A\207\024U\184G'<\186*\216\031B\162\030\131\225\r\235\203\029\227[\176#\187\168!\169W\129\1583\1359\219\015\192o\246\007\130n\195\144\162\202\152\247\216T\012\192g3\2479\029\160\011g\243\173\235\237b\127\224l\240\129\214^\203\164;\230,fD\179\139}QcD\1579\145\t/&\029\160\026\251k\185\188\182\153\251\168\198\164t\023)\011~\243\250T\027\145\153\243\220)\163\160\177\132R\208\196\242}2'F\153?'f\021\220\153\236\166\180\028\208\020\220w\204h\005\160\161\021\213\175)\169\001\164\006.\145\219ieq\004xh\149u\153\177b\192B\203\173nJ\170\001\t\174\187\190\166\172\206g\229\219Pn\000'\007\242(\148\028\192\217\129<^\152,\246\196\162\242\165\233iO\1533\007k\237\023U\1957Tn\211f^\245x\233\135\195g~\228>:\184w\031\029\172\242\194\199?\223\030\220\187o\015Vy\233\195\159O\016\238\221'\b\171\188\002\240\215K\132{\247%\194*W>\225\245 \225\222}\144\176\202k\128\127\190K\184w\223%\172\242\198\199?\159'\220\187\207\019Vy\011\224\175W\n\247\238+\133U\174}\194\228\177\194\189\251Xa\149w>\225\245f\225\222}\179\176*f\0301\251\022\\\222\019B6Q\248\217\210\225\\\239\172\154\225\249\168\241\177\014\151\023\243\204\019^\159\0220\145\132s`\005\218\162\156\024\024fJ\127b,\218\152\220\137\220\002&*\t\184\132\251\204\203O\025:\178\189/\208\244\241\139\172\239\0114i\152\028\254\143/\182G-\208|\241A2V\005L,\145\204R\129&\135\143\253\233f\127\176X~?\025\1784\158\138H\029hV\168IN\160\220\190\215\218$\227\246\198\238\143\223p\178\180\140\158\152\149\167\002e<g\188\142\004\192\n\175L\230\224\208i@\153=\177\193\204~\153{8\002,\\ \209A\233\225\b\176r\1298\143[*\015G\128\181\011\012\231\241\203\134\225\2414]v.\030;j\181\245T\1385P%.\016g\189\171\212\019\1365Py\131N\242\221\1497\234,\217]y\195N\188\187\242\198\157\165\185+o\224Y\142\187\242\134\158$\184+o\232Yv\187\242\006\157\004\160\170\245\128L\164\246\250C\194e\229Y\016\203h\171\173\143$\213\171\200\133\178x\167b\031\201\132z\166\201\178\216\2023N\214%\2078i\143<\235d\029\242\140\147\246\199\179N\214\029\207\228H\242Yy&\1992\207\202392\197(\207\228X\206Yy&G\018\206\202\1798b\154\181gp$\213\\{FD\146\192\1817\138,=[{\195\200r\179\1817\140\012\232\197\024Vw3\159SC\249\210\186u&\235P\178\180~\r\209r\166\180\238\016\024\167=\155-\196\018p\132\192l5\210\196\016M\225\t\130/\165F\1554\200\162\180\002\209p\234\172)\161\238\137\138j\004~&\012m\205o2\1563R\003k\184;\172\182\152\179Zw\001\023H\0306\026\204\209f\227\205\226k\251R\144\186\027\202\241\227\182\027\223R\001\189n\189\1604;.R6_S\207\211!\173\023\158f\201\026\021\003\138\031~\166I\023\213\249\020\189\165\1718\188\140\211\017]\198\225u\156\142C\006\2002&:h\2364\209\162_Qp9\029\162\011\007\028\200\133\232\210\193\006\018!\186r\177\161,\136V\014:\148\002\209\181\011\014\228?t\227\128\003\201\015\221\186\216P\230Ck\007\029L{\232\206A\135r\030\029\152\025\135\219i\227\147\rm\175>NG\133\141\173\139\024{o\172\232B\200\174Ac\202X\195\203\156/\247\179\030.Y\015/;\235\155\211\152\196\129\190\030\129\246\160\175(\221\220/\023}l\190\204\220x\208\023u;]\006\187|68\250\127\162\201\192uY\136)V:aNF\165\203\131\196\193d\159\212d^i\017\226\014\006<\169ub\192]\185\208Q3\b\230\168\195\172U\143\166\208\246Q\241\147<Uu\186\204Z3\021Y\249\"'4k\2457mm\249\213\162iW^\238\215_\205\146\2332<`\238\218\213\203\239>dV\b\140\186\191\207\213\246\r\198g\174\001\218\237\203\253\214\165\249\186\151\007^M\131v\253\235\029/p\\\163\182\209\251\199\253r\184\127\238\030\139\169V}\190\217T\t9FT\219\216a\004\193\137\003\014\228J\2126{\129C\201\018\181\205} A\022\030\178\199\192\210\007\018d\229!\239\024\168| Av\030R\195\156\134\138\182~\207q3\163\196C\158N\024\153\2502q;#\127\128pbCE\254\b\145\204\134\138\252!\250 H\127\140>\152P\127\144\142L\170?L\rA\214>\146\213\223x\208o\004\217\250H&T\251\157\250\"P\223\162H\138C\197[\000%-\136#\015K\146\028*\142\001\148\137\245m\149\1649T\236\027+\235\151o\172\180[\190\181\178^\249\198J;\229[+\235\147o\129g\130\244-\240\204\170\247-\176&H\223\002k&\212\183\192\003A\250\006HL5\241\237\239B\144\190I\237\t\2107\168\233\1737#\233\205\020\205\156\227\219\203\015\"\2217\151IJ\197\252\189\004\210}k\184\018\233~\232\"\163\1454\206\228\026H\154\168d2t\139\137\016\149t\016\rw\238*\221b0AG\016M\146\027*\1411\156\226\011\136\215\154\225K\172\023\182\162Ik\136?\157\024\190\193\242i\251[o\197\196\147\019*s\151o\246\005\245\027\017\157U`R\158\026\174\189\193\226\026n\166\192\164;#\021\128\228\199\169_SJ\003(~\188\186\1448\144\249Qhr\241D\217\139'\174\244|\226\178\139\251\127\149\023.\154'\000T^\186`\158\001Py\229\129\003)\000\149+\023\030\200\001\168\188\246\208<\t\160\242\198E\243,\128\202[\015\028H\003\168\\\187\240P\030@\229\157\011\015$\002T1\t7\183\254|f\158ZL|\195\190\004\246\201p\147\b\211_\240j\186\152L(wb\150\197di\162?\141\201|\170\011\006f\142\211~\169O5\252\220\nj\222\196tWm\001Ui;\254\205\236(ok\207\191U\025;\148\2407q\170L\028|h_Wf/pp_W\230>\144 \011\015\137\007\174,} AV\030\018\239\130J\229\003\t\178\246\144\193\163pU6\148\176\199\132\246E\024f\151\208\215l\170\236<\249\024Xm\253\145\192j\171\"\210\002\188\217\172\018O0\001\166~\011\176\150+\223\188\200\174\180\242\237\139\237J+\223\192\200\254\177\242-\140\237J+\223\196\216\174\180\242\141\140\236J+\223\200\216\174\180\242\205\139\236J\171\214G2\161\218\239\020Y\234W\190\249\177]\169\218\002(i\129\138<,\219\149\170\024@\153X\223T\217\174T\249\198\202\250\229\027+\237\150o\173\172W\190\177\210N\249\214\202\250\228[ \217\149*\223\002\217\174T\249\022Hv\165\202\183@\182+U\190\005\146]\169\242\r\144\152j\237\219\031\153\246k\223\164\200\174\180\246\rj\207\160\190\153\144\205h\237[\t9\223W\181o&\228\128_\213\190\1530\164\031\211X\245\141\179f\bmW\235\214]\144\004\014\249U\173\221I(\180\185\173;\136\198\219\213f\139\193\004\029A4[v51\134S|\002\241\011G\253\170I\1954\202\203 /\252\005\148j\n\200\162\240\018\143\029[\2147U\168Q'<,5\228\016p\131\027t\199\232\214[\t\007\246\235\237\196\154\240\167AJo\249\162\017\175\026u\196W\141x\217\168\227\160A\144Ct\165\195\230\183\167\188I\140Z\222}\235\194E\007v\223\186t\193\129\221\183\174<ph\247\173\149\011\015\237\190u\237\161\003\187o\221\184\232\192\238[\183\0308\180\251\214\218\133\007w\223\186s\225\161\221w71\207u\219\209nb\158\011\199\221\170\243g\019rK^u\202q\188\231\015\021\002\011\236j\023\188{<\014\142\208\238L%/\137\179\rz\231F\0001\170?\236\131H2\195\189^\254Ad\237\238\213\135\199\nW0;\183\218\159\167?\214\178ks\238{\186\244_je\130\1606\167\190\019|\232z|m\206|'\208@b\1606\007\190\0032\148\021\168\205i\239\028E`\197\028\214cT\233\160\b\172\154\195\238\024\165\028\020\129\213sX0\007Po\027\140\222ct7G\195\237|m\142\141\231*\196\189\142\1469\236\132Q\169#\012\247:r\006\023\239\201\235\200\025]\178!\175#gx?\b\204\025\223\015&\206\025\224#\147\231\012qC`\206\0167\172Zgp\191\017X\235\192\1528\237\244\226\139\224\028+!\187\238:\222\1868Rq\028\205\129d\191]\199\177\139c\002\029\211#;\237:v\140\143u\1961>\218\015\199\250X7\028\227\163\189p\172\143u\1941\1703\1299Fuf\181:FU\019\152cT5\019\231\024\213\129\192\028\155\"\166\1518&u!0\199P\246\004\230\152\201\158\225\156\241\255A`\206\240\147\157s\1578\227O\182\205u\226\140?\1319\193\135\213\218L'\210\192n\185N\218\217\236\028\216*\215\201ct\023\247\201u\210\249P\178+\171\211-\192\194=r\157F>\148-;\210\024`)8\241\193\011[\227:M\003\028J*|\146\198}-\129\182\159j\177\146\222\182u\150\2079\181\20799\148D\207)\r\168\230\238VS\2049\237|\153\198w\173u\150M\161\242\227\242v\135\128\149\147=|J\217%\252\228\246;F?T\185|W\190\206\15687\189)_\219\151\r\234\249\169o\1579\017ozO\190\182\143\026x\0047\166\145\160\150o\201\138\014/\233\242\136,\233\240\154.\143\185M\146-v\157\007l\127OI\143\161Z\220\148\215y1\131\242\029y\157\1513$\223\142\215y5G\006\246\226u\174f\216\192F\188\206\2359\148\239\194\235\188\153A\249\022\188\206\21992\176\255\174s=\195\1346\223u\222\205\176\129\157w]<\140\142_G\174\011\199\210~b\251-\030\022\214]T#\187w{\193\250\251]]\012\137\220\208\174\139\004\145\236\143n\205\024\147\001.R\1511\252j\196X\209\149\\\220\174\139\012\2134^\215\190\237\216\149\247\186\200\017O\244\191#\183\221\235\162\192m|\214ve\151\221ksh~S\135~\191\230\196\1886'\230\019\240cW\140\006\199\028\151\015\200\224\174\216\156\149\207Q\004V\204ax\227gN\201\231(\002\171\2300\188\2413\231\227s\020\129\2339\012\239\\\205\137\245\028\133a\230\188z\174\r\220\129*\158\195\240\006\183J\028\020\129\165N\157\247\215\228R\217\201e\254\213Y]9\227J6\196\149\163d\1823\173\0285\147\157\1699\243\157\193\200\142\179rF\131\237$+g<\216NR9:d\2519\229(\145\137s\012\148IsuG\171u\148Gv`\202\209\n\217\n)G)Dw\181c\164d+TG\014\140\225\028c&[\161\218\025\t\182e\170S\023\199\128\142\029\147\189U\237\004(\182\183\170\157\b\197\246V\181c\002\012\230\152\000\171\2451\178\203\219\160\186\243\161xg\211l\001\146\237\152\154\200\007\223\177\216\024 \t4\247\161xg\210\020\000I\160%\208\021\209\128\242\161\147\189K\147\191\137\234g\148\026P\166\156\002p\026\208\162\187S\143\019~\205A\221l\002\014\236w\218\1998\226#:+y\248\251\138M\139~\140\200\242\026[\0233h`\141\173\203\0252\176\198\214\213\028\025Zck5\195\134\214\216\186\158C\003kl\221\204\160\1295\182n\231\200\208\026[\235\0256\184\198\214\221\012\027Zcw\143\145?\222\015\181\157\142\230\159\007N\006\171\139\230HY\011\223\2051\138\233\197\1481\165\196>\229\182;\221\237wzs\206\148\244\b\223\173\250\026\015\206,\242t\156\155Y\247\136\222\135\211\241\182\011\001\031\209\251K\171K\b\247\180[]\203\176Q\224\195j\027\211\2450\242a\181j\252]\153\016\246a\183\011'\134u\167\230J\165\"\027\163\213\155\222\223?\238\227\153\215\233`\014\188\236\203g\147\211\175\208\153Yc\206\204f\002\166\135f\190\2317\230\200l\n\015\157\1535\230\204l\138\r\028\1545\219\148t\227QA\184\015\217\131\029\218]4\230\204\205\129\017\\\225\224z\012+]\024\193U\014\238\142a\202\133\017\\\237\224\130'o\1419y\195\240=\134k\007\1741\172sa\024\023m]\149c\029E\177\131;aX\226\194\b.u\171\197\186\140\\\195\193\219\151&r-\135\028\2325\145k:\031\004\231\218\206\007\019\232\026\207\145It\205\167!8\215|\026V\179k8\223\b\174uqL\160kZd;\214D\174q\145\253X\019o= \169;\142\028$9\219k\226\216\0032\145\174-\146mY\019\187\198\200z\227\026#\237\140k\141\172/\1741\210\174\184\214\200z\226\218\216\153\224\\\027;\179\138]\027\171\t\206\181\177\154\ttm\236@p\174\137\017SL\\\011\187\016\156k_\023\006t\237kOp\174u\237\0250\245\128\012\233\218\215\015\130s\205\139lr\155\196\181/\178\203m\018\215\190\024\206\rv\172\226f\182Z\b\028\"6I;_\175\004N\017\155\228i<\206\254\025.:\146\014\160\201\190\184I\183\bL\209\017@\227\245X\026#(\193&\000;9KD\1484D!\156\028p\216\210--\016\152\162K4B\0195\218\218\223\182\205\252\240\177I\021\160\157X\0295\002St\131Ztg\232\214Y\017\243\253z\147M\220uv\224X\166\000\252\212\185\127@YE\000\239z\228\141\184d\230\186d\251\139\000\149\023\001I\b\204Zo\182\249Tv\137\127>\237\247x\157\150o\217\154\023/z\243\136-z\241\1707\143\003fN\014\026\155<\228N{\202z\142\212b\238\164\201\1399\150'O\154\188\156Cy\246\164\201+\007\026H\1594\185\154\131\003\249\147&\175\029,O\1604y3\199\242\012J\147\183\0144\144Bir=\007\135r(M\222\205\193\129$JS\0203\215\189\246vax@w\131\155\2269\022\207\227\183\215X\027\r\154mK\219\026k\255iN\011\237\239\b\191^\144\026v\247\019\011(*\"\202\166Y\150%M\012\164PD\146\253\225\217eI\019\251)j&I\206\024\151eM\204\171h\022\250g\199ze\007\219\133\014.\136\154\246P/\246pA\216\180\139\221\204pn\247\251\225\142\142\185\155r\251\254\169\204&\162\029\175\164<\222\176\159\166dP\240*\1639o\241\222sc\206xg\140`\022\199\156\241\206\192\1614\142\153\154\230]\bx\1379\017~`\131Y\027s&\236\226\b\176p\1298\215`\206\133]\028\001V.\144\012\128\242p\004X\187\192p\238\166l\024\030Oc\230\244\217\193\227\172\1409\127vq\024Xm=\221cUU\177\011\196\137\153*\241p\004\152z5c\157V\158\025\145\028N\229\217\017K\226T\158!\145\156K\229Y\018K\227T\158)\177<N\229\025\019I\228T\1581\177LN\229\153\017I\229T\173\007d\"=Kc\201\156\202\1795\150\205Q[\031I\170W\145\011e\249\028\021\251H&\212\179M\150\209Q\158q\178.y\198I{\228Y'\235\144g\156\180?\158u\178\238x&G\242:\20239\150\216Q\158\201\145\204\142\242L\142\165v\148gr$\183\163<\139#\166Y{\006Gv,\181gnloS{\230F\1461\181gl,mS{6D\2426\181gB,qS{6\19627\181gC\012\232\0058Vw3_\"\132\1467u\235\172SB\217\155\250e\031\139\215\031\154\186C\2241\145\224`\155-\196\190.<\027i&\231\208fsV\132X81\211\196\016K\192\t\002\135\2118M\026\228\016R\142H\026\235\168\128X\253\210\145\189\189\224\233\168\132C\214\187\172y6\167Q\136urHF\1673R\rIS\150\002\rl`\003\217\186\186i\221\165r \191\211N\253:x\221\194*\224\001u\211;\b\221\250q\127)\193\210z\193\181\195^\166\183t\t\139\215\176:\162kX\188\136\213q\200VYZE\007\189\130fc\244K\179\203\233\024]8\224@>F\151\0146\144\144\209\149\139\red\180r\208\161\148\140\174]p '\163\027\007\028H\202\232\214\197\134\1782Z;\232`ZFw\014:\148\151\233\156\221\239\183~\247C\029\238\251\158L\250\157\179\247\189\159U\187;\168#\193\183\219\237\251A\237\213\151\249\223\195_\185\156\208n#O\192\210\006\189\221\198.'\180Eo\183\137\011\015l\210\219m:A?|r\241\209\238v\155\2494\130\204\001\146@\011\031\218cd\t\144\004Z\249\208;F*\128$\208\026h-\180{o\183\rg\2361C\251\012\141\145\029@bh\180\005\163\129\021\023\197>\244\132\145\t@\018(07\188\151o#`bx7\223F\192\198\200~\190\141\128\145}\016(\176\178\015&\022\152\217\145\201\005\134\214\016(0\180\1345\001\152\2167\002m\001\148\137\005vH\246\247m\004,\145\236\240\219x\139\176\164\017q\228\131\201.\191\141c\132e\130\129\237\146\157~\027\003\227e\157\003\198K\251\006\172\151u\r\024/\237\025\176^\2141d\188T\011\192z\207\004\n\172\247\204\154\011\172\183&P`\1895\019\011\172\247@\160\192x\137\157'\192v\201L\153\000\203\1890,\176\220=\129\002\187\2213l\138\176\012\012,\247\007\129\002\195%Y\1346\001\150K\242\012m\002,\151A\129\229\178\022(\020o\136\255&\181\183\136\210\151[o\230kc\148\151\224^\174M\026o\141\215_\154\251~\145\215z\235\188@\138\163M\166\150\189\152\228h\147\014\195\225W\014m\186%h\002\1430\156-i\211\152\224)!\193\132\133\143\223\2194]\224Qb\142\137\026\247\191 h\002/\201\208\017\237*\012\127\229+Z{\209\165\157\1272\223\1665\161My\005\2245\164uw\167\190\249\231\246m\218\250\027\143\128\185\167 2\219\023\165.\250\188\131\006\159v\174\252\179\221\158\128\211\2116K\209\178\1697\t\1437\248\189K\155e\148\240\133\t9%\236q.\195\170\235EY\254\174\166\205\166V2\251\222\215\252\239\031\227\151\024\127\152\237\227\031\246K\222^{\159\ro'\178*&\203\156_\251\220tJU\136:\028~\203\206\221\178\231\159\016\151Sz\205j\190\253\212G\191\234x\202m(\215\255Jz\202ky\147\159\181\206\155<\171VSe\245\157Sm6\161\129\245\131\186\152\213\186\1373ds\154o\003\251H\188\145\204\163\192F\018\027^\030\135\131 \201\135\181\249B\208\221S\226\2129\022Sim^xp\158Lk\243\210C\243tZ\155W>:\144Pks\229\225\003)\1816\175}8O\170\181y\227\193yZ\173\205[\031\029H\172\181\185\246\240\161\212Z\155w\030>\144\\k\139\169\177.}=\214\022\145\143^\254\130\172-bL[\250\138\172-\018\230\180\225G\031\218\"e\196\192\195\015m\145\241\016\179\240\248C[\228\172\198\197\007 \218\162`\220\224#\016mQ\242\246.?\004\209\02237R\183\199o?\130hS(:3\030\1430>\0215g`BC\t$j\022-\159\1741A\007\230w\204\232(\227\019\018\202\232\253\218\031\141\145\173\189\170\213\150\241\156\241H\209~\225%\127\153\204\225c\030\152\161\179'\2501y})\150\004(s\015\028B\023\030Z\007\208\165\143\014\193+\023\222\007\192\202\003\135\208\181\139\190\007\192\141\007\014\161[\175!\151\016\\\003x\b\223y\248}\000^m\001<\132\143\\|`\128\170\216\003\135\208\1377\250\129\017\170R\023}\n\128=\011?\133\208\190\137\1354\226\025\150\218\159\213\249\162\212Q\153\180u\128\232\217\216\193\236\248W1\155@\149\031!b\027\1702\200\244\204\208\028\159\221\2127e2\139\234\218\127~)\1460\171<{4\147\185\253Q\160`uj\027\232a\019\"F\161\030\006\153q\160\202o!b\018\1702\200\244l\248\166\212\254\190\172T\1491\162U\238\233\244!\018>\131\"r6.\193\022\023\001%\153\148Z\128Y\134\180\020\166V\129J\205Y@\128\169B\149\134\169\190w\222\239\023\147r\151\209\t\240\026\166\215pumH\177!\162\014\2345\196\236Bj\r\016\235mP\171!\166\231\157\2373\138\004X\tUi\136\149\006\186w\014\017\179P\247\130\204<Pe\029\"\022\161*\131L\224V\001\180\239I\135z\161\002\207\133\190Bh\207k.!t\203\204a\031`5\158\249\253\b\161#\030*\003\172\152{\127\144\151\176\030\005Y\158\169\238B\232\140\183-\1687\207:\187\016Z9;\142\253\031{\245y?\178\164n\243\138&\211\204\177\222\171?\206\189=rB;\143v\139H\159\166u\189\161\182Aj\132\168&\151\161\022\1531\175\180\191>\136p\027\214&\180\210%f\202+=+\021\230\230\180\214Ej\137\168\031\202\212\027TQ\005[{:\212\247\031\132\161h\027\029\154\149\254&\2465\227\215\180\198\183V\127\146J\155@3\141\015)`\127\143\234\187\185\164vI\210hY@\\\003z\163\151\196\201\226\247\254\217\219c\200y\203Z\167e\029\030A\143>c\233\137\175\247\230\168a9\021\171\011\196\bdcu\137\b\129\132\172\174 !\148\147\213\nQBiY]CF 3\171\027\196\b$gu\011\t\161\252\172\214\136\018L\209\234\014QBY\218.\166.\184\232\240]\018\224\134M\173{E\182\243\253\216\220\238\195O\230\152\169\194\004\005\185\127\t>\251\211\246\189)s>b\1754\217\148\164\221O\158\204\150\2109,\017\200c\1919\252}\164\199\030}w\1787\191B\002\030\136QD\130E\152\246/\201\176\144QH\138\133\252\\n\200\207WK2,\228t\\\1461|ejE\228H\196E\153\254\030?\194R\030\160QP\225\n:~\156\204\255\222\185\144\007`\020P\186\002\026S\137\249O\129\206<\017\163\136\n\139\232C]yAF!\138\181\227c\185!O!\181+\228z2\255\195\005\012\127\030\201\rn\193I/5\224\164\031\"ZW\196\215\233\237+\168\135\007`\020\160]\001\173\244\208\189e6\149\240D\140\":W\196\237d\214\0297\245\201E<\017\131\b\251\252\151#\194\244\243\022\180\137'b\020\017!\017G3T\242(\224),h\130\027\197\197H\220yw7\255\237\130\172\007h\020\228E\145\163\169N\007:6\254}\164\167`|\204z'8:\246\239#=\003cs\011\246`\248\251H\207\241\184\220C\006\246\130\140B\n2\184k\134w2\192%\022sZn\203\233\213\150\n\141\198=<\024\143\200\021y\017\163>\153\173q\127\b\197\242\023d\020\226E\140\1791\153}\192\221\198\191\143t/f\156\007\147\011i\225\005\025\133xQ\163;y\031\242L\005\012\127\030\201\026\183 4\152O\196(\162\131\245\031\023\026\240\160\199[\212\130\171:\156\131\1909\005\141\130\188\152q8yW@\167\"\134?\143\228\024\133\222P\208\027\255>\210\189\184p1S\237=P\249\248\247\145\238\197\133K\192\138/\015\019\142\189x\176?\153\229c\200x\030\128Q\128\023\017\246\129z\247\207z\189\024\240\243\244\246S\133\194\224\0030\n(\209D\171B~\243\000\140\002* \224r\191\246A\001\002\024\005(\212\130\251B\003^\003\230\249\1891\199]\127\230\244\241\239#\189\001\003\215\236\238!\005<\017\163\b\207\235Oo\193\197\206\240\231\145\172A\243\143'\179\212\253\012\246\192@\222,f\148\2269\254y8\194;\161a0\1273\014s|\179\127\029\248\137\231\249W\249\172\n\144'\187\148\0173\138\240}\222\252'\019\155\2540\249\226\155\155%qE\205\176\163\192\024\183iU\163\158\173J\176\144\231\149\196\127\250\151\127\252\253\255\254\243\127\254\207\183\173N\2197\1695 \246\240\016\155B\177\253R7G\212($\195BVJy\138\201\161\152\187^%\230\254X\241&\005\017\179V\206SP\137\005Y1\145\217\251-\tz\136\169\176\152\213r\158\130\148?\171\245fEzw\243\169\174\152\007l\020\243p\177\251\229\162\143\205\215\219\245\235P\159\236\221t\147J\152?\"-8\251\223\015\239F\015\252\020\187\152^a\205\015\205\166\0176\23052\212S\bv\171\211\n\025\143\233=%N\213[7>\220\225z\195\149e\029^\160\163\2004$\210\2046\253Z\153\130\029\133\250\147\178\250\148=\247\023^\207\168\2077\249\243\219\215s)\147\230 \172}\169\195\201\132\231\191\187\002\014\018X\237\223Fr\001\2007\213\127\238\238k\002\162A\218\156\199CX\137\002\172\254\028\252\161pe\221\236\005\181\0171\n\168\144\000\1875[\144\240\218\189\165\n\138\184\244\139\".\207A\169\145\b\243\159L\154\235\167Z\146\243\196\141\194\026\127\239b\142}v6\179\130\231\156\233\223G\025\222\244}4\003\164v=\022`\2548\254u\164{\019\184\177\000cf\234\b\233\207?\142l\176b7;f\229\252\232\181`\030\127\025\152\217\024O\022\019\204:\139\166H\158X\214Y<\005\242\132\178\206\146\0250\144H\214Y:\133\006\018\200:\203fH\1588\214Y>E\242\132\177\206\138\0250\144(\214Y9\133\134\018\196:\171\166\208@bXg\158\187\152\224b#\140\245j\127\128'\127\028\249\158\175\152\188\225\225~\003\220\241\015\003\175\140\222\247\234\244\202\223\162sF]\1983\144\221\196y\155\221\0074u\1617u\192\200|\138<\15544\251|W\151\197\020jr\153\024UNQ\r\001U^\173\r\171UM\161\215@O\026O\2307&\179\157\245\228\1394R{\002\2017\189\186\236<(\249jNW[\000%\237\172\"\015K>\232\213U\012\160Ll\226w\236H\1603Cj\177\162\170l\n\186\017\208\204\208n!\235\173\n\023\202\198\188*\253^\179N\207L\238H\02693\182\154\128\234Y\165\0044\183\198`wg\214\216\005z\171]\153\020\2179\"i\229\2027G\242\153\176V3k<\224~\171\153\029\018\207R3\003\132\137\151\0072s\145\167\211\r#gF\243\147T<\179\151\171:^?/v\162a=\1740\252J\224n\168\226Z\159\153P\2008\148\031\213\200W\201Z\205\236\136(@;\0213\011R\131\005\233\253\190?_\251+\196\212\131\237L/\177`\\\228\226\236\202\016,\184\030\248\216\147K\004'\030\016\229\t\026\155'\168\22795u\169=kM\230!)4w\161_\012YxH\n-]\232\176\1636\199\000>\182\242\176\001\240`\174\227W\162\198\176B\159\162\234\186\134\131x\162\1318\024\238U\031\250\tg\127b\240\022\193\217\212\220x\150\1671\206\179<\221c\160gr\164b\223\226\1900\208\179/Ej\030l\198\156\217[\183\254;\000\012\227?\221\030\218\0175YwO\137M5\135>\182\138\016\171\028l\207\161\245\028\218\168\231\206\015\194\135\145o\212\1771\225c\184\227\192\127\251\219x\167\192\143\253\199\135\221\165\145\251Y\186\029\134|y\247\212F\019``\243\212\198\019\\`\239\212&S\\h\235\212\166\019dh\231\212fS``\227\212\230\019``\223\212\022S\\h\219\212\150\019dp\215\212V\019dh\211\212\014\227-9n\016}U\253&\171\175\217`\182\015\202\129R\204rcF\209\243-\205\225\254Fv m\231!I\028\233\236\143\193\245\181\190\153\220\250\245\203\216j\189\215\228\215\030;{\rg\132Zc~\251\144\245M\255\241v\2480\174q\185\031\141W\232\246\r~k\223\217K8\148\252\199\253\240v9\170\195[\221\168\214\030\171A\t\201\130\004\249/n\215\157\254\160\"\210\185\136\254\216\223z\181\127J9\180w\251\023g\175\250P\143Y\161Y\229\216\134\234\227\237!2\155\139l\246'\011|\138\188~\152\161<\192{M\157\189\1363\227\170\139\190=\153\230\148V\030Ji)\189\152\211\159C!*\b2\2039\243Z_\238{a\224\174_L\246\241(\127\030\249\213\156__?\239\207\177\1925*\135\241\169\2540\021\158>\194\172\218\029/3\196\131\153\246\205\208O\220\224\219U\127<d4s\025\173\222\247\135\254e*\245\245\166.\015)\255\244o\255\168\255\253_\255\249\255\024\023\180\149\207\218\210::\163\218\154*J\207I\199\175\254\026`\182\167\187\245\191\169\128n.\2245\182Pa\209\022\212\183\196q\220\250\210\031M*B\219\031\0190K\242Ps\r\210^\128\146\235\004\1476G\142\171[\235y\251\184\216\2318h\027\018\228\t\127\180\191\238\237\219\229\166L+\014\218\172\156\134_6\128\174\029\165 :\004,\1649\029\030\199\247]\244\242\225\253\233\227t\251:\235\241[[\235CR?\1743'\188\253N}\132x/\199U\215\219\229d\200\242f\208p,`4\245\246a\186\249\246\135\205\161\133\196\148\0011\127|\238\190\140\242\206\178\152\136c\1279\209EU\168\021\173U\182\209\223\221TN%\168Ip4\164\139\241\173\183\246\2114\250\163\233?p\155kJ\177\182\1389\r\229\\\239\007Li\001\229h\006\1337L3\006oW\199\218\245 CZ\252\242\209\197\165\\\023G\014\152/\231\1868v\176|I\215\197\137\139\r,\235\1868u\208\129\165]\023g.\152/\239\1868w\192|\137\215\197\133\139\r,\243\186\184t\208\161\165^\023W\014:\176\220\235b\229\128\237\019\016\195\200<\199{\250\012D\023\215\136 \195\243$$3B\003\t\195\024=)\217\140\210\"\202\235Gf\132Q\204\024\0262d\180\158\140j\198\232\016C\134\236\213\241Y\207\147-d\012\003\247\226\204:\159D\1363\014\223\1393\235}\018#\2060\136/\202\172\251I\130(\1313>)\127\204{\147\186\235\158\246~\rD\232\196Y\028\030?\212\245\173\254e\166K;3\191\253\218\131\232\252 \236N\199\211\165\239\204:\231~l\237\189\173\231\197\171.\201\151f\203\250\215\206\028\237\246|\186L\n\218\178\235\199\2331\235\208\198\249MrV\148f\001!\171:Xw\229\174i\212\219\031\231\221E\2424\177}O\196\171o\175\237J\253\177\139\030\1978K\202\143\2518\231\190}|\153\156\204\249?\222\159?}\253\245\172\186\230\028u}?\255+\2268\011H{\216>\028\185\131z^\r\238no\1819\001\211\015)-\151\226\213\252Z`\025\155\159\139q\166\169/5\172r\174\232s\139.qf\168C\016\157n'\205\031?\219\135\027\1934\242\128;\130\140]\228\007\001&\030\240%\210\2021\011\242\186\152SR\151rd\1943\023\217\016`\238\001Y\199\n\023\249\141\000+\175\149_\004\169\\\164w\128\230\252\253b\194\232\229j\182\220\183\199J6\173}\025\187\181BvO)\141\011\242\206\220\152\144\246)\163\245e\204F\180\001#\170=]\029W\214{|\214\219y\026\192\234\206<k'g\144]\230\153{K\128\158\181\207\186\156E~\1513\207\238\143D\182g\237g\002\244\140\253\204\250\229Y{M\128\158\177\215\179~\229\160_\165K9\016\217\158\127\144\159\021\2372\223?\174\172g\158\027\144\159 \2372\223\212\127\205\250V\131\190y\166\253\147\b\247\236\249\023k\176g\181\164\189\185g\181\127\132=\228q\173\180\203=+&q(\247\172\248B\128\158\237\238\t\208\179]6p\185g\188\222I#\139\000\215g\248\202=\187&\022\149{v\205\154\229Y3\193y\198\2529i\191\157a\1735es\142g\214]\255\167n\255\232N\151\003\213\188g\223\159d\170\206=\251&\175Jw\197\203>\188\159\178\142b\2558\172+bD\024\206P\018\144-(\018\136\159\254\018\179i\196\155\b\158\241R\196\027\014\245\146\024\212\147A\252\221\175'\157\243r\196\003O\007\155!\180\203\145r;\167\023A\250\132\255J\243\143\130\162\185\1602$h?kG\002\218Q\005\233{\220\142\004\180C!A\154\143o\r\241\128\128\236\172\127Hi\208\159O\188\214\022\226O\235j\189?\164\184\217\159o\218$>\239vE\249v\241\014l\159i\179\199o\159\140B\220|\208\227Dc\190\218~\182c\252\189\149\129\\nQ\003\159\209\173_\213\031\147P\191\220\030\151\245\237x\006E\250\158\231\152R\025\207;4\238Y\237sQv\tdwk\176E\147'\n\223~\218\239\209\1573\1472\153\203\189\030\213\219\190\029.C,J|\200p\182\226\246\155\242\227\205;\186\127)[\014\246G\174\179-7G\255\247\0279\245ivw\155\0127\167\020\143-X\153\207[\191o\250\201v\025\217hY\184\155\182\227\199\018\165t+\209\178On\020|\235\178++g\167g\218\205\193N\222\246\227\"X\155\1687;\250+\230\212>\231`\172(\200q\018\183\253\209>\143oH\225\214Mr\183\247\250\219\201\228pZ_\t\240\136\188+5\227>\171$\196\142\017\253Fc\t\213\022Hx\237\163\t)\n\144v\148\021s\214\007%%\001\210\180*+\223_\244V)\167\031y\165\025g5\148\148\007H\\)\005g}\163\164*\208\171/\202R\156u\187QV\029b\241~5\156\214\182\148\213\134X\206p\131\173x\165\003\1389\210Z\187@\023\025I\005\028\135\171E\005<\135jE\005\028\199Q\138\002\155u\021p!\170\019\021p\1563%\005\252\230\204u\018p\156\154\146\002~S;:\001\027}Ur\250\129\214\025p;\187\253'\172\144\219]\185V\002~g\211\002\132\021r\187_\142^@\146@\005\028\240'\1734\224u\191x\007\003^G\251W\007\188\238\015J\n8\029\141\150u\192\233.\148\020p\181=%\005\\\141\219G\029\240\181+5\198:\224k\156\020\2405\222\190\128\135QN\192\193>g\157\178\011\023?)Q\007\\m\146\158\160\134\\\215\171\248\220f\154U|n>/G\250\188\191\153\165\170]L\161\179\168\186\243\129\203\167g\205v\1863\185\245\143;\158\178`\220i\245\227\235\173\214\234\134\185Q\128\187\031\014|(7\014p\027\187\171\184\233?\238\152\154\004\168\215\250^\203u\147=\230N\252j\248\130\184\189\244\251\183\154\212\148\185\232K{\178;j\140\206]\244Y\181\007\245\246\241\216\015\162\139'MA\170x\2215\194\149\149^e\246\146\221\025\219FS\185hs\"K{\1730x\184\130eo\227\244D\1855!\218\203-AbC\136b\190!\"\187\234\242\188\192\130i\029\161\209[8\173s\027\173\190>o\253}\244rUQ.\022\194\027a\173s+\237`\150\227\007\185,\184Lu\238\159\189.\193a\184s\247\236q)\180\190\180&\249s\252\154\222\230\132\023D\031r\156\140\196\227&(\146\019\186\021\218f\239r\238\251\135Y\131X\142I1]o\253\240]>\212r\254nO\155W\195\011*~H\214\180\167\027\190\205`/N\227\138\150\136\206\129\255^\171\214J8\216\219\131c\"\004j\1949\225\191]T\191_&\202/\190\028\140u\216\227\238\208I\182\001F\030pG\144\177\139\252 \192\196\0032\145\169\139<2\153\153\139l\b0\247\128\172\242\194E~#\192\210\0032\145\149\215\159/\130T\030\146Bk\023\138?+5\200\198G\178\150\182.\020\127Tj\144\218G2\161\157\223)\140\140<\243$]\138<\243d=\138<\243$\029\138<\243d\253\137|\243$@\207:\207\004\232Y\231\153\213\237YgM\128\158u\214L\164g\157\007\002\244\140\147\152f\228\153\230\133\000=\203\220\019\160g\151?\t\2083\203+\001zFI\212\019{6\185'\141\140=\163$8\207$\1756j\019\176g\150=\198yF\217\019\160g\148w\140\243l\242\245c\238V\202\155)\244\156\225\217\166\198\146=\211<\156\142\012\235\025\231\t\227<\219T\164[/\219\156\156\253\220\212~\143\127\249\2130\026\196`\224\022\129\241G\161\162@\132\166\240\014\193\239\004\157l!\154\194#\004\215\176\151I\012U\194\218\157$\bn\007\157v5I\025\229\196\024\025l\255\155\170O?4\227\188l|\246\131`\012^\204\225\246\231Vk\189?\253\180\248\002\224\2039\254q\176\tUZ\185X\250\193\173\001+\167\221\215\225\133\028\004}\217{s:^OG\179\199\029\149\169[\249\196\139\180\167Y\224]\b\175]\224\253\164\218\213\011\204\029ez\177\252\227b2\005,\244\167/\199X\250\206\192\128#\007L\19130\216\216\193\210\239\012\0126q\177\252;\003\131N\0294\255\206\192\1283\023L\19130\224\220\001\211\239\012\012\182p\177\252;\003\131.\029t\224;\003\131\174\0284\255\206\192\128\029\251\223\247\183\155\253<L\203\2072\194\157OZ\207)A\236\203\246\199\004\194\254\212\152\172\144\209\"\132\183.\1889\029\206\198\018u\139\241\218\197+\147\180\211\246\030\128i\017#u.\233C\174~\1476e[\176\198\128\222\144y\171\150+\241\155\204[\183\188\238\000A|B\241\132\1442\194\030\2273\138'\132\028\205\017\147\155L \160eE\144CHe\136\180'q,\171\130,JSh=\197\182\204Y\141\208l\235\1545\b]\147MG\214b4^\219e<\224\159\158A\255\200\130~\214\173`\031\024;\223\174`\239)\219\247\153\015\245\211\228R.\250H\029-\135\139\166\tQ\223\161-\229/7\026\159Y\176\031\217\190h;u\219\245\152\153\134\153\159\218\190\020\132\169\158k\253\212W\243\255\029\223\206?O#\157m\185\243|\153{&\251\183\028z\155\207g\186*\215\209\239x]\155;\1390\208g\251\219\241\017&\171U\228\024\147\235U\228\004\147\155U\228\020\147\219U\228\012\147\189\237\182V.\157%{\242n\153\251E\204\164\216.s?v\140\012w:\031\186V#\147mJ\n\232\193\2467Fwo'\182\199(\018Nb{\177\"\229\028M+\202`Z\129$x\139\028\163\137O\023\005\132\1479\166(!\154\228f\139\n\162\127\017\180\130h\150&-j\b'I\192\162\193\194\t\186\133h\150\187+4\132w\004\221A4\153y\203-D\179\016]F\016\206\2081\155,\133\181\180\177+\161\007\0129/\188\137,S\202\192\129\187\2048!\152\001(sJ\236\250\163\221\0303\162\147\011\024\212\205\003|Y2<\142\233e\197\2408\018\151\138\225s\140\175\001\1909\221\143\1419\192\014\245\163Y\226\145\254\180\001\158\182?8q\179/\151\216\2215>\2206\"<\255\185\220\015\242\004\254^\217\239s\137#\149\221\188\2309)\160\210\234\229SC\204XL\022T\017b\0042\006U\140\b\129\180A\149@B(wP\165\136\018J T\025d\004\178\bU\142\024\129TBU@B(\159P\149\136\018L*T\021\162\1322\011\149\227Ff><\220\250\208\178\175\1709\003\187B\133\019\202\189\161\188\225xX\181\001\006[\173T^\154At`\173\241\n\220\164\234 \\\255\217\236M\"Rr%\136\166\182\239\031\250t\249\232e~?\2477\187o\0263\240\199\247\253\127\205\025qkN\160-+\162\172\026\211\"\161\197\148\246\129i\177\208\018JkO\144\150\b-\1654\rY\169\1762\202\250\209CZ&\180\156\210~\225\218r\161\021\148v\195\026)\132VR\026nc)\172\138\178>qe\149\208\020\165\237\213\021\209\148\208jJ;\224\218j\1615\148vT\023Dk\132\214R\0266\145VX\154\178\206\1842-\180\142\015\246\014\243:\203\171\185\179]\236\243\173\030-\018o\171\185\183]\161&#\241\182:\014\216\022jd$\222Vso\187\195\202\196\217j\238lg\172\146H\220\173\230\238\246Ix\226o5\247\183\143\029V\1388\\\205\029\238;\174N\028\174\230\014w\221A\151\139\196\229j\238r\r\225\137\207\213\220\231\026\220;\241\185\154\251\220\183~\143h\226s5\247\185\006\211\196\231\2346\2089\172L\241\186\154{\221\159\184s\226u5\247\186od\200\197\235\026\238u;\232u\177x]\195\189n\007Y\226t\rw\186]\015i\226t\rw\186\159\144%N\215\164\129\158!\253\199\226s\r\2479\249]N\159&.\215p\215\249B\218\143\197s\026n$\nN\140\177\216H;\025\180\201z\228o\019\244\243\239\215\131=\254\127\161\222\163\198\172\253\223\173\016+)\242$\213\235D\213\163\172HdEVV\236\201\250X'\235c\148\021\139\172\216\202J<Y\178\154Y\150eaVV\"\178\018++\245d\233U\162\244 )\021I\169\149\148y\146d\217\179,\202\194\172\172LdeVV\238\201\250\181\174Y\191\198v\229\"+\183\178\nO\214m\157\230o\163\230\011\145UXY\165'k]\023\199\030\150\"\169\180\146*O\210\231\186V}\142\173\170DVee)O\150,\175\150eY\152\149\165D\150\178\178jO\214a]\187\014c\187j\145U[Y\141'K\022b\203\178,\204\202jDVce\181\158\172u&?Z|+\146Z+I{\146\206\235Zu\030[\165E\150\182\178:\223Nw\235\132\t\206J\235DZg\164i?r\201\226nY\152\133\025YJb\151\182\177K\251\177\235\186n\028\175\1958*\137]\218\198.\029\003\015\186\172\243 \233\163\146\216\165m\236\210~\236\186\175j\214}h\149D.m#\151\246#\215y\165\238\207\163\238\149D/m\163\151\246\163\215\231Ji\159\015i\018\191\180\141_\218\143_\195\218rE\184\223\141\250\151\b\166m\004\211~\004\251\190\174i\223\199\150I\004\2116\130i?\130\r\203\208\021\134\177\027\162\152\146(\166m\020\211~\020kVJk\030\210$\142i\027\199\180\031\199\154uJkF\157I\028\2116\142i?\142\201:vY\150\133YY\018\199\180\141c\218\143c\205:Y\205(K\226\152\182qL\183@c\235\006\179y\216\153\1962mc\153\246c\217\159\2354\246\231\1681\137e\218\1982\237\199\178o+m\246\219\195f%\150i\027\203:?\150\237\214\197\178\221\016\203j\137e\157\141e\157\031\203v\235D\r\146$\146u6\146u~$\147\181\245\nQ\253 K\"Yg#Y\231G\178\159\171D\253\028$I$\235l$\235R\160\171\203:]\137E\212\018\199:\027\199:?\142\201\202|\133\172\211\208.\137b\157\141b\157\031\197\186~\141(\131\178\146$\130u6\130u~\004\251r,K\024\018\167:\027\167:?N\233}\239V/$\tG\157\rG\157\031\142n\247\139\253P\210[k\011SBOgCO\231\135\030\213#\138D\152\206F\152n\018a\204\202@}\\\212yg\018\217\246\255\190\157.\240rVg\018\192\167\214tC\191.,>d\200\210h\248\169\143\127\250\143\255\250\191\255\250\239\255\243M\150P3\190\031=\148F\205\148\016\209\217\016\209id\\\195K\030\128(\241\160\179\241\160\235\192\170\178\238\199\231\176\001U\156\1913\206\031\153T\175}\199\243\19071\235t\213\246\221\236\207\254K\159>\2091Md2\188.\250z\181\191\162\023\160\196\030\229\216\235\251\017\131\019\015|\235?\245\253\134\209)nM\136\146y\148\139i\205\030\131s\015|0\224\003\006\023\030\248l\192g\012.q\203\003\140\202g\244\167+\198*,\157\019j\143`\135\232\003\131\027\015\220\024t\131\193-nJ\128\161}\241;\139\222ax\231\219\175\133\127bx\228\155\251\205\194o\004\238\219\251\217\194\207\004\238\219\186E\019p\130\029\227\143\1283E\196\226\185GE\025\169%\224$QN8\220<\163\1308n\1767%v\198?\002\221\169\176\002\184\019G\138T\018\024\025\223\029>\213\217t\227~\012\212\211\224`\017RZK\235\225q&\2108\206\004\021\221\017\014Wt\188%\148\128\221\196\017\225\208\192\019\199\001F\168Gq\018\"\134\218\152\134\136|\172\226\140\241\130\1455\206C\213\241(\024\147\217$D)\025%\016>\227\138\rs *\198\138\144B\1771\230N\021\208zCI\011\243e\220\194\2492hS\026S\002N\210aF\192\254\146-\166\240\192\146D\152\193CD\018c\006\215V\146\004\024!\157%)&\134\189\"\2010\139/:\146\0283\184;$\005a\004\188!)\137\209\004V\020IEl \224@\137\"\234\014\248ORc\014\159\198\146\006\173\164nwc6|dZ\206\t\015)X\182\217R\212\029\168\175\011\210\130U\166`\138RG\014\143\240\"7d\222iL8\001\015O\019\194\225\014\155\166\132\194=6\205\b\133\247?g\149\132\148V\224\245\022\247\212\180$\213pWM+F\t\248j\170\216\208\004\028/\173\153\014\002\158\151\250~\244\165\175\001\r\180x\131\020\bo\169\166n\023P[\023\246U\206\204\182!\175\011\240\162Eo\r\144c\182\177\011\198\215,\1614\030\250\178\148\2353`SY\022\212K\136\153\179\141b\192\135\179\130/\137\002\246\152\145\228A@\029\021\176\224\211\165?\006(\138\228\133B\161/\171\201\198\145\198\151\172!\140\128\029\181\132\018\232\140f\187S\190\236\202|\239\234\250\253^\195\175\"\163\252\233Q\223\236\207\t.\194#\031\17402\006H\141\161\137\015\253\"RS\004%b3\031\171O\024\154\003(F\022\160\001Lj\137\176\024Z\249P\"T\249\200\159DY5\130\146\0064\160\001\004\218\130n\145\198j\031z\199\200\014\180\149\232\181\216\",\134\002{\253\217c(0\216/\220\216\002\024\172&Pd\176\164\001\192^\t\018\152\171\250\131(\171@X\210Xd\176Tp\005\193\196\018\n\133\156\145\137\174!\1524\186\129`6\030-\244_\214\016\141\209D6\176a\211\016,\186\220B0\198F\bKBI\025#0iD\130\176\184w%\178d\211\n\028{\202\140\160I\163s\012g\202+ \156\128K\b\198\174U\002\171\190\255A\250\168 \150\244\176F`n\168e\131\240l\204[\004&\130\145M\211.v\016L\134\165\218b4\006G\016\204\134\188\138\t\028\163\019\136\198\026\169R\b\198\006R\161U\005\149\156C0\025\242\nYu\207D\003\171\238\201(V\021\194\018\207\173\020\002\147A\169\017\1504\184AX\166\138\022\246\238\1624i40\234\000\186#hf\216j\203\b\184\249*bxlT\n\024\183l\141x\031T\130\230u\162N\005\151\205\172\241\025\158\244\136\189\168\028NN\004\\`0\246b\245\178\241\211\003\029Hz\169\202\135/\157\242+\197\170\224{?U\251\028\158kW\rA\007\182\138\170e\028\190WT\218\231\004\182\188\170\243\225|SYo\t:\148\132\172#F\226\025\197:f\028\158\142\168\019\198\161CX\167\140\018\202\194\213\025m\\ \237Q\231\140\197\007\179.|N@i\192O\002\234\170\b:\160.\224%\028\\\0197\228\012\224\"<\231X\003\231\224\174T\003\183\b%\196j\224\023\1614_\003<#dC\rp\138\144\2454\192!\184\2214\t\rg\220\185\1554\024\003C.\222d,P\133H9#\005\226US0\0185\171\166d\148\208\201AS\209\214\133\134U\177\232\027\212DMY\129\225j\194\1778\160\144\1501\249\244\213h\026)\003\131\213\133I\129\200\215nI\244\224\ni\195\243Lh\000\2188L\165\170l\147\224<\021 \166ab@3t\246Y\190\143\208\2109(\028\153\219\130\1826\224BmI[\026\136\164m\197XK9\255V\145\21728\2445#\005,\173a\156\128\234[\198\225\250\211\148\018\030\173\1426/0Zz\203X\161yRG\140\197\199I\003o[\1908\166\019\182^\225\003\165S\198\t\205\181:c\172@\159r\222'n\020\186\192\011\170\144\193\234\146p\002\129XW\132\019P\029Y\235\005L\\\003W\nZ\028[\239\005\187\2232\210\210\030Ok2\165\2405\166\238h\011\003\017\172\003\158\020<q\239\"N\224\225\161\139\003\172\144\222\187\132\174=\003\163\219\165\001\011\015xS\151\145\149k`\181\209\229\140\195\r\182+\024\135\199\148\174d\156\128\030*\164\246\240\204\212\241\244B@\t5%\005Z\215PR(\140w-\165\005-]SZ@\025\029\241C\170\138x\187}\215f\217}:\247\205\219\245k\191W\245^\147\135\228\226m\132\176w\140\141\017\182\199\216\004\182\1294\"E`\17318\131`\140\205\017\246\132\177\005\196\146\022\151\000\188'\216\na\137\138\021\194\018\021\215\176\r\164\017\r\0023\021\183\016\140\177\026a\137\138;\132\197\007\241q\004\173\152\152q\004\205\152\216q\004\237\152\024r\148\224f\144v@Kf\166\028e\024\141\193\208\150\1371G\208\152wL\213\200\154\015\004\139\172\249@\020\141\172\249@\244\\\1956\144F k>0-\183\016\140\177\200\154\015D\199\200\154\015D\1971\178\230\235/\002\142 \024+9\142!\024k9Np3H;R\136&z\1423\140\198\224\028\130\177\166\227\002\130\153\170\1455_\b\022Y\243\133(\026Y\243\133\232\185\134m \141@\214|aZn!\024c\1455_\136\142\1455_\136\138\019h\205\004\011\141\025\1718\129\182\140U\156@S&*N\160%\019\021'\208\144\t\022\2181Vq\002\205\152\169\024Y1y\200>N*\b&JV\016L\180\\\227f\144v4\016\205\244\220b4\006k\b&\154\238 \152\168:E\214\252\157`\1455\127\199\138N\1455\127\199zN\019\216\006\210\bd\205\223\137\150\211\012\1301\022Y\243w\172\227\180\128X\210bd\205\223\217x(\b&\138\171\177d\"\186\129h\166\186\022\163!8\131VD\0286\131fD\0286\131vD\0286Kp3H;\160%1\135\2052\140\198`hK\196a3h\031\204a3\133\209D#5\145M\1327\024\206t\210\0188D\231\200H\240\003\242q\142l\164\198&\146#\019\169\177>\242\004\182\1294\002\025HMt\145g\016\140\177\200<jl\0299\n551\142\028\153\210\015\130E\243\230\015\162bdt?\136\138k\216\006\210\bdp?\152\138[\b\198X4e\254 *F3\230\015\162\226\002Y\241\141`\145\021\223\176\138\011d\1977\172\226\"\129m \141@V|#*.2\b\198Xd\1977\172\226\002Y\241\141\169\024YqC\176\200\138\027\162bd\197\rQq\r\219@\026\129\172\184a*n!\024c\145\0217D\197\200\138\027\162\226\018Y\241\159\004\139\172\248O\172\226\018Y\241\159X\197e\002\219@\026\129\172\248O\162\2262\131`\140EV\252'VqY@,i1\178\226?\217x(\b&\138\171\177d\"\186\129h\166\186\022\163!\184BV\132\127\157&\174\144\021\029\177\021U\200\138\142X\025U\002\219@\026\129\172\232HTQe\016\140\177\200\138\142\216\138*dEGb\024\021\178\"\242\235BqUA0Q\178\130`\162\229\0267\131\180\163\129h\166\231\022\1631XC0\209t\007\193D\213\nY\243\199\254t\179o<\019J\020\160`\181\1718@\193\202WI\168a\164ei\128C\006Be!\014\166\228\001\n\030\020U\004(lh\144\023|\018,r\130O2\024\200\007>\201(\212\176\r\164\017\200\003>\153\222[\b\198Xd\255\159D\211\029\196\226\022\215\200\250?\201x\2121\004c\197\213\t\150LD\167\016MTWg\024\141\193\208\138\200\170\167\134fD\150=5\180#\178\238\169k\220\012\210\014hIl\229S\183\024\141\193\208\150\200\218\167\129\246\193\2143M\140\209X#MBd\019\225)\134\019\1574\025\129c42\018\214Kd#?\177\1374\200D\152>j\216\006\210\bd T\023-\004c,2\143\159\196::\136\197-n\145)\217\231\175\191\142\031\154\206\181m\020fa\181\183q\152\133\007\160M\022ZH\154\152\134idP\218l\129\134Yy\152\133\007\170E\230M\142b[d\222\228$\182E\230M\014b\219\026\182\1294\002\1537;\134m[\b\198Xd\222\228\016\182E\230\205\206`52\239_$\025\174#\b\198J\2141\004c-\235\0047\131\180#\133h\162g\157a4\006\231\016\1405\173\011\bf\170F\214L6G\026Y3\217\027id\205dk\164k\216\006\210\bd\205lc\164[\b\198Xd\205d[\164;\136\197-\238\1445\183\004\139\140\185\197*\238\144-\183X\197]\002\219@\026\129,\185%*\2382\b\198Xd\199-Vq\135\204\184%V\220!+n\153\142+\b&JV\016L\180\\\227f\144v4\016\205\244\220b4\006k\b&\154\238 \024\171:\129\215C\191\017,\178\230ow\140E\214\252\173\199\216\004\182\1294\002Y\2437\172\229\004^\015\253F\176\200\154\191\1570\022Y\2437\166bd\205\031\004\139\140\249\131\168\024\217\242\007Qq\r\219@\026\129,\249\131\169\184\133`\140Ev\252AT\220A,n1\188\030\250A\198\003\222\248\252\192;\143\004\222\248\252 [\143\004\222\248\252 {\143\004\222\248\252\248I\192\208\138\136\025\193{\153\031\196\142\224\197\204\015bH\240f\230\007\179$x5\243\131\153\018\188\155\249Al\t^\206\252 \198\004og~\208a\132\2473\201o\181'\240~\230\r/X\019x?\243\134\023\172\t\188\159y\219\177F\195cM\178`M\224\253\204\219\142\128\225\193&^\176&\240~\230\141,X\019x?\179a\170\134g\155L\213\240p\147\169\186\198\205 \237\128\199\155T\213-Fc0<\224d\170\134'\156L\213\t\2012`0N.`U'8\167\128U\157\144T\002i\007\206 \016U'8q@\1928_\128U\r\175k\158\169\170\145U\223\174\004\\A0Q\181\130`\162\234\0267\131\180\163\129h\166\234\022\1631XC0Qu\007\193D\213\240\190\230\237\023\001\195X\14138\t\188\177y\195)\156\004^\217\188\145\028N\002\239l\222H\018'\129\1516o\191\b\024\198j\156\198I\224\181M\003&\173FV\221\017,2\234\142(\026\217tG\244\\\1956\144F \139\238\152\150[\b\198Xd\207\029\20912\231\142X3\1887z&X\024\162\177\138\225\173\2093V1\1884z&*\134wF\207D\197\240\202\232\153`at\198*\206`pf*\134_\132|\0170\252\192\137\129\161\0293\240\196\220\154\211\161\238\143\253\241\195l\156\014\253Q\221\250\211\241M\029\219\183\031\167\159\218\254^\219\241\227\182{;\168\203\231\251\225\223\222\237\007\023\199\235\193\017\167\145\184\223\224w\011\205\t\178g7Yu\243\"\128\159WK\166WY\127\158.\237\245\172\204\201\nDN\172\182\187\239\247o\215\219\233\140\145\201\172\249\007\133QSc5]kN\251\211\017#\179\169<\138\154\216\232\249\162;\211\143\016zb\165\223\239\250\186\160\165\137\153\174\252\225\186dz\131\181\237?\250\219\219\233\168\223\143\015dd\254\189\176\202\197\222\204Q\214\019\027\155\127/l\237aw\246\147\164':1\255^\232\198Ew\167\251\229\005N\205\191\023\184\245\192\253\143\137\228\204\252{\129\181\011\190\246\127\190\176\185\249\247\194v\030V\255\208\199\023\1860\255\158\232\233%\214\001\173\251\143\221\237\133.\205\191\023:r\209\198[&\141\174\204\191\023xb\196\199\251\161\182?w8m\199\187I^\188\192\137\015\254\169\143\183\175\t>\158\226S\031\191\235/3|2\197g\030\190;\205\225\233\020\158\251\240\190\155\193\179)\188\240\224f\128f\240|\n/}\184\029\163\025\161\152\018*\143 \1954\197\151S\188\242\240v\160f\248j\138\175=\252\238~l/\230\220a:\\SF\131\006\215\238\141\239W\019\192\231\180)\017\2227\189\234Z\221jm\236\137|9\154\192\171\167\007\146\187\130wO\015,\027\005o\159\030H6\170L\131\205\175Y\243\2257\001\172\249\240\163\000\218|\252Y\000\001\151\193\230\179\213Y\t\023\181\172\249p5@\155_c4\0067\193\230\179\149\015\188\202zf\205\215\016\204\154\223a4\004Oo\201\222NGs4ogAs\156\248K\223\222\175\150p::\140\b2Z}\161\140\0242.\253\167\249\031BI \229\1863\0012LLq\235\250N\177\214e\144\241\169\143\148\145C\134\201gq\021\020\144\178\235[\202(\185\154\255\b\241*\220\157\251\133\016\212\246\221$\192.\167O\173\159\191\144\251\190\255\175\185\169\168\218\196~\011\142<\176F\224H\192\177\007\238\0178\022p\226\129O\b\156\b8\245\192w\004N\005\156y\224\031\b\156\t8\247\192\031P\029\185\160\011\015\253\t\209\133\160K_6\212^)\232\202GC\245U\130V>\026\234O\t\186\246\209P\129\181\160\027\031\r5\216\b\186\245\208;\168\147V\208\218GC\157hAw>\026\234\164\179\232\218\183\236\029\210I)\166]\251\166\189C:)\197\182k\223\182wH'\165\024w\237\027\247\030\233\164\020\235\174}\235\222#\157\148b\222\181o\222{\164\147R\236\187\246\237{\015u\"\246]\251\246\189\135:\017\251\174}\251\222C\157\136}\215\190}\031\160N\196\190k\223\190\015P'b\223\181o\223\007\168\019\177\239\218\183\239\003\212\137\216w\237\219\247\001\234D\236\187\246\237\251\b{)\246]\003\251\198p1\240f\011\132\239\000\188\018\011o|\011?\"\029Vb\225\141o\225G\164\195J,\188\241-\252\136tX\137\1337\190\133\031\145\014+\177\240\198\183\240#\178\171J,\188\241-\252\251\029\233\176\018\019o\n\000\135Z\017\027oJ\000\135j\017#o*\000\135z\017+o\020\128C\197\136\15375\128C\205\136\1577\190\157_\161b\196\206\027\223\206\175\b,f\222\248f~\133J\0203o|3\191B\029\138\149\183\190\149_\145\n\149\024y\235\027\249\021iP\137\145\183\190\145_\145\002\149\024y\235\027y\139\020\168\196\200[\223\200o\016-F\222\250F\222\"\r*1\242\2147\242\027D\139\141\183\190\141\183H\223JL\188\245M\252\006\209b\225\173o\225-\028\0291\240\2147\240\022\142\142\216w\235\219w\011GG\204\187\245\205\187\133\179\172\018\251n}\251\190a\184Xx\171\001\028\170\\L\188\237\000\028jQl\\o\001\028\169\177\022#\215\017\128#=\214b\229:\006p\164\200Z\204\\\251f~\131\129\162\022;\215\192\206\161\243\215b\232:\003p\164\153Z,]\003K\135\238_\139\169\235\002\192\161f\196\2145\176u\024\000j1v\237\027\251O\168\0241v\237\027\251O\168\0231v\237\027\251O\168\0221v\237\027\251O\168\021\177u\237\219\250O\168\0201u\237\155\250O\168\019\177t\237[\250\023\212\137\024z\231\027\250\151\175\019\131\019}w\190\157\127\245\b-\250\238|3\255:!\180\232\187\243\173\252\235\142\208\162\239\2067\242\175\031\b-\250\238|\027?@\180\232\187\155\024\225\245\160\246\251\169f\2546\227\136\002\165\220H\175\t\175\007\188h(7\210\127\194;\001^<\148\027\209\004\225\221\001/\025\202\141\232\132\240~\000^:\148\027\209\014\230\029\016/\027\202M\148\154\220n\163\142\170\237\213qL\128\245\205\245m\247u\222\153\\\255\249\127\2499\144t\027!\006\204\152\165\219\024a\149\2341:Ah\130M!\150\1283\004>al\014\177\004\\ \240\215\031\1419e\162\156\018q\026u\185\2446CD\020Y\133H\164\215\n*\031ck<P\024\220 \240O\210\242\022\131\175\183AK\140\166!\141\244\180[\168\003\211\162-\174\131\160\163\165J\b\015\250\000\254\252.\141\146\133J\b-\197u\016t\182T\t\225A\2158\170\235\167:\247\156\005}\004\167\250\211\168\\h\026\161U\184\014\130VK\149\016^\029\236?cAo!!0j\003\001\229'\166@Oy|\135/7\015 \r\250L\215\219,\184j\238\248\169\1604\222r\1509\233\255AX\017g\213\166\157\167\131I{\238;sX\129_\203O\227\152\0110\029\\b'\156}\177\231\176K\2524\196g\164\140\147\218\211\221\1583\005\212\156/\146\135\227\157\031\250r\235\027\025g;\247_\177\180\130K;\244m+_?\2210\181\228\212\161\005\166\232\127\157\142\183g\027\176\156\138\2039\239\239\164\221*\164\133\159\230\184Z5\159\152\t=U\0311\024:hO\192\208AO\004\012]S\0170tH|\203,M\160\031\158\217\202*\129\014x&\224\024\131\t\026:\023\190\240\150&)\006\019t\022\b\134\148\148\135VJ\228\002v\154\020A\022\233z\137\007\001\131+2b\024\rM\159\028L\167I\029\158\208(\175\193\181\144\238\182K\181\016\158&\181\016x\183X\r&\166\216'\200\146)\141\150\170!\188\152\212B\224\201b5\132\136]\133,\128\210l\169\026\194\203I-\004^,VC\136e\200\149)\011\251\012\198.,\234\b\171\014\250=\230@\175!3y\n\157\230\198\002u\n}\229F\192\029\006ct\006\221\003?\243\152f\017\006\019t\028\024]JJB\170'\223\031\167Y\026d\145\174gx\01608'#\134\209\208#n$\224f\011\219\027\202\171p-\164\187j\169\022\194\171I-\004\222,VC\136\216'H\192\205\244R5\132\215\145Z0<\223.VC\136\216UH\192\205\227\165j\b/!\181\016x\186X\r!f\161=.\167a\167\193X\2362$\128\230%Fc\211\202\177\163\144(\151+\140&}\132\238A6<9t\142O\022\247s\232\018\159\004\1721\152\160\161\031\224\151\230\210b\139\193\004\029\005\226>%\197X3\024\156\0165b4\180z\242\138\\Z,\172\153(/\199\181`\245\023\197R-\132W\146Z\b\188Z\172\134\016\021\174\135\012^\189T\r\2255\164\022\002o\023\171!D\236\026$\168\022\221R5\152WnI-\004\030-VC\136q(\024s\026v\026\140%.\131\193\208c\174\167\251m\247\199uo\178\127_&\028\226Es\153/S{B-\150\169'B-\151\169\138P\241\137\011\014\t\165\194\171R\018\237K\188\235 \224\006\131\t\026z\014~i<-5\006\019t\023\136\246\140Tm\177f08\"j\196h\232\029\r\137\218\213\194F\156\242\240\134\131D\237*[\170\133\240rR\011\129\023\139\213\016\">|$Q\187\170\150\170!<Ej!\240z\177\026B\196\174A\162v\213.UCx\154\212B\224\221b5\152\168\182\161h\207i\216i0\022\186\204U}\245W\179\184\199\129PA\199\193?=\152*\232-\007\022\b\021t\151\003\001\231\024L\208\208E\014\216\144T\137\193\004]\005\002!%)\172\025\012\174\137\0261\026\186\001\249\004.U\011n@y\026\215B\212\223-\213\130y\245\150\212B\224\209b5\132\024\227z\240\224\213\201R5\132\151\146Z\b<[\172\134\016\177k\144\128V\023K\213\016^Ij!\240j\177\026BT\161@\200i\216i0v!wEX\208u\0148n\214\248\240\239\182Sgu5\127aut\129\016\141)\r\1588\176\0277\017V.\137\208\r\222\130\016p\130\193\004\r\157\003\255\214F\218\224\188\020\241\135&\015DhJ*\176f0\184$j\196h\232\nG\018i\155\133\252-\229\225\251)\196\155\155f\169\022\194kI-\004\174\023\171!\196.\020\005(\173\197\206\128\177Q\2320\129\\\236h\177G\224 \208B\143\192\191B\158\182\208!\246\2045[\232\018{\002\2061\152\160\161+\224\031DO\219\018\131\t:\180x\162$\1335\131\1935Q#FC7\216\019\023k\023\022O\148\167q-D\253\221R-\152\167\183\164\022\002\143\022\171!\196\024\215\131\007O'K\213\016^Jj!\240l\177\026B\196\174A\194\159.\150\170!\188\146\212B\224\213b5\132\136]\005c\0236\222\132\133\183\027\218\252\023{F\129n\131\031\221K\181\198+ \018\0065^0ap\183\197`\130\142p\250\016\131\241\222\154\024]\151\004\194 %\165X3\024\156\0175b4\206\207\146p\214-8\001\229\225|,\tg]\181T\011\225)R\011\129\215\139\213\016b\131\235!\131\215.UCx\154\212B\224\221b5\144\152\225/A\200\243\149\2176Z\170\134\240bR\011\129'\139\213\016b\026Z=r\026v\026\140\205\0236x\132\134\1433~b0t\152z\175\154\207\238t\186\177**\146\206\186\234Qm\159\152\023\220x_?I\027\131\215\226\175\127\016V\019d\157\153\253\180A\218\141\209\244B\207\b-\184\007\185\146\140q\134?,\185\226\247|3\252a\201\021_:\205\240\231$\006M\224\t\134\227\024\128\191#1h\002\199\222\178#Z\201\t\154\192\177\159\144\031%\207\150\190\028\225\196\138\212C\020\170\022\235!\196\154\213C\240\205rE\132\217\146\154\200(\234\197\138\b\177c\245`|\188]\174\1360\137\139\016\255\139\227\197\138\b1a\245\016|\186\\\017a\018\215\193`\156\206\194\246\140\191\246\248\"\203\231\012\127\225\241E\192x\243N\236\016\127\191\241E\134\184\198`\130n\002\203gJ\194\031W\145\001\210D\141\024\141\207\198I\200I\022\028\129\242\240}+\018p\146x\169\022\194KH-\004\158.VC\136\248\243\014\018l\240w\029\211j\b\175 \181\016x\185X\r!b\215 \129&QK\213\016^Mj!\240f\177\026B\012.\1798\r;\r\198B\151\169\251z?.R1-]\242\029\204\194\019\200p\170B\130\029\254\210\227\130]\019\127\231q\025\218\1968\011\158\179'4\2327\023\022\224\241'\030\023\002.0\152\160\161\179\\\176\131\224\1439.\196\157\150>\231\216\019Z\141u\131\193\rQ$F/\165~\t\r\186\196\133yP\186\176}\167D\252y\199\005c\0236\239\132\021\007\242~\132\130\191\188\197v\141?\237\232\152]g\228\003[\012&\031\212\0184\254`\022\155\028\254\166\163#v\141\191\228\232\200\152*\162\017\140\134\182\223Q\131Y\152\0278\017:B\135\177\248{&\178\019\198\159l\028\199O\022\b\t\127\184A~\155*\195_k<\171 \164\152TA\224I\184\014\194Jq%\216\142\240w\0267\182S'\223g\144\157:\249B\131\237\212\201'\026t\239\147/\228u\003L\252\193\006\2225\225\2395n\212\142\026\002'\195\213\0188\025\000M\224\164\163\029\129C4\254j\227F6\136\248\171\141\027Y\005\225\2075nd\023\135\191\215\184\145=\022\254^\227x?\170\031\253\231\027\025'\252\217\198\147Dz\145\135I\132U\004YD\005e\152DXU\144E\244\167\194$\194\170\131,\204i(\231~c\028\232!;\156z\198\031n|g\147?\254r\227;\006\227\2075\190\147A\199_k|\199\195\134\191\208\248N\006\025\127\152\241\029\015\019\2542\227;\025T\252i\198w\140\197\147\193\1588\028\254\254\194\192\137\254J\002':\169\b\156\244sa_@\182Z\229\194\025\031\217\014\149\011k$\178\213)\023\182\nd?\130?\1998~0'\192\031d\028\241/\160f\248K\012\131&p\188P\194?T\154\225o1\012\154\192\019\210S\140N\153^0\028O\016\031\024\140'\006\134.\002i\004v\190\131\191\185x\146\136\250\171 \137\168U\005ID]\2165N\167\246\026^x\227\175/fD\210\183v\145H\250\167\023\137\164\143\221\"\017\242\240'\025,\242\225/1\246lu\129?\198`q\018\127\134\177g\235\t\252!\006\139\170\248;\140=[A\224/1\246D\135d3\0176.U\134YD\165\213\002\139\208T\152FT\\/\176\b\173\t\211\136\202\219\005\022\161\2330\r\147\160\183\168\254G\1917\011\196\026r\240w\027\175\139\nx\148\241\231\027/\022\030.\252\237\198\139\133\245\142\191\225x\177\176\002\241\023\028/\0229\169\193_rLh\164g\249\002\141t\173X\160\145\190-\\.9\146\190U\0114\2107\181@#}\171\023h\164oM\152\246I\250\214.\208H\223\244\002\141\244\173[\160\225\190\225\239=\198i\158\196\211&t\000B\162i\019\250Z\144\004E\252\t\200\131C\250\019|\211\231\003\255xw\134\191\by\177H\251\2420\139h\175X`\017Z\025\166\017\181Wa\022Q\162\n\177.D\135\193\231\175\200\238\006\1278\242$\017U\180a\018a\233 \139\232\175\011\146\176\250\218m\136\244\019\171/\252\253\b\t\214\248\251\145'\t+\162M\194$\194\n:\022\153\131\218\160_\145\169\164\r\191\186\200\244\023~u\145)\176\012\179\136.\170\005\022\161\1690\141\2320\252\172\028Sb\208\177n$\014\182m\152E\148\168\195,\162\141n\129\133iz\027\166a%\234(\204\194J\212A\247\186\221\176\018u\018fa%\2344\204\"\218\200\022X\132\150\135iD\137E\152E\148\024t\1773\209a\208\195\206D\133A\255:\019U\212a\018a\005\221\235L\244\023\244\1743Q_\208\185\206\152\019t\173\015\172\242.\232X$W\215\005\253\234\003+\175\139\195$\194\n\186\021ITv\225\229 Vy\023t\170O\018;\187<\204\"\n,\194,\162\139r\129EhU\152Ft\168\194,\162\196\160_}~\018%6a\022Qb\027f\017m\232\005\022\161ua\026Tb\190\221\134Y\n\179\1620\011\147\130\238u\188cR\208\187\240~:\223\006\189\011o\249\243m\022&\017V\208\187\142D\233A\231:\018\157\007}\235@\212\023\244\172\003Q_\208\177\014D\017u\152DXA\191:\016\245\005\221\234@\212\023\244\170/\162\190\160O\225\251\001y\020t)|a!\143\1620\137\176\130.\133o;\228Q\208\165\2405\134<\n\186\2127\172>\242\237\204\144(a\156\160C}#*\015:\2127\162\1882L\"\172\160G}#*\015\029Z1N\208\161\190\145a\n\250\2117\166\2436\204\"J\215a\022\209_\183\192\194\180x\027\166a\029\198Q\152\133\149\024\007\189j\143u\024\007\189\n_\229\205\227\160W\237\137*\1780\137\176\130~\181'\250\011\250\213\158\168/\232W-\211_\021f\017\005\1700\139\232\162^`\017Z\019\166\017\029\182a\022Qb\208\185\246;\162\196.\204\194JL\182a\022\214F\018-\176\b-\236\\x\173\159'a\239\194k\253<\t\231.\152\022\147l\129F\212\152/\208\136B\138%\026\225\149\011<\162\201j\129FT\169\1944\162\201:\204\"\138\012\231\b\137S'\237\002\139\208\194IB\226\212I8IH\156:\r:\218/\172\1954\232g\191\176\n\211\160\151\253\194\170H\1470\137\176\130N\246\011\235/\r\186\216/\162\190\160\131\253\194\156\160w\245\199\254f\191\236 \220\240D\198\198+<\145\177\001\011Odl\196\234\005\022\161\133'26f\225\137\140\rZ\208\191\174D\135A\247\194\143\211\228Y\208\187\240C<y\022\133I\132\021t/\252.O\030\2541\024\252\194M\030\254-\152+\153\193\178,\204\"\n\204\195,\162\139b\129Ehe\152FtX\133YD\137*\204\194\164\240\220E,7\011\207]\204t\195s\023\179]\189\192\"\180\240\220E\1727\015\159o\017\243\205\131\238\213\016\243\205\2270\011+1O\194,\172\141<]`\017Z\022\166\017%\230a\022Q\226\194\249\0221\197\188\\\160\0175V\0114\162\016\181D#\188z\129G4\217,\208\136*\177\163\237z\019\180?\142\239WD\129^\214\221\247\227\015\207\158\017\007\127\186\129\239\184\231\005\185\181\206\224\248\214:\185\019\159\227\143\155\142\236R|\142?o:\146[\2419\249\190\137]\139\207\201\167M\228^|^\176\187\235\138\224\241\171m\211[\208\228\026D\142?j\154S\137\202\170\021LBU\203T\162\200z\005\147P\151o\181\255$\234mW0\tu\233b\251\248S\199x6.\022\174\017\194\007\184\242r\251~\250\216\169\195\219\245\172\026m\142\006.\159\239\191\254\195\224~^\029`4\002\247\250v3\001\164\214=iH\025\207\145\251{\127\197\192d\014\236\180\186\02812\157#\175\170\223c`6\007\030\251\019\145\152\207\129w\197zS\204\129\173\234/\024X\206\129\183\254H\206\209\202j\142lN{\210\027\229\000u\127\185ad=G\030\238=\233w3\007~\156\152\196\214\209\228\135V\173\"\237\212\206\240\220.\170\2390\180\155C/\2048\170\237\028hF\252\128\129\142a\158\142\184\231\149c\150w<\140\149c\148\166\215;\243?\024\235\152e\127\n`3Wn\205\177\142q\158HS\029\211\188\247\251\189V\172\251\142y\246\029\177\144\170r\027z\216\169\163YR\018#\173\028#=\211\192P=\140\2128\250m'\007\145&\218\156m\1809\r\160\255?k\239\186\2278\175d\137\254\175\167\200\023(\028\235.A\141\001(\137J\171\210\182\252\201vee\253\155\221\179\027\024\156\190\161{\230\253\015/\146\204KD\144\174}\144\r\245\254\202k-\134\168\136\224U\212\215\014\221\220t\225?\249r\227\131\195\249;\192a\135vy\\\166\254\153N\142\015q\153\143\226\002\031LP\178\196\166\252\132Q\169\141z,\143\223\226\242\006w*Yf\163\191\224\135\199r\007\006\163\n\027\005'qV\218\168\251\241\177L7\246[\253\015u\030\000\146WYe\0199\242\228Xm\227\216\229&\170\000n\197Xcc\231\027\252*F)ZA[\180\199\020;\007\200o=\012\236m\224i\190\188\127\239\022\233\189\223\231\027j\199`\179\212\023\237\191\223?\167w\138\196\157\187\132Q\163\131\130\027\132\206\241\\\164\205\234\028o\021Iv\152\197u\016Q2\r\240\225+e\2318\239\007{ \219':\199q{\142\152\145\251\138\240w\229\202\206q\223w\024\229\184/\191 8\199[\223y7\191\189\127\141\015L\215\241\218w\134T\145\227\177\159\143\203\143\249\237\243\235rA\226\173s<\247\200\222O\"\218\224\216\233:\023\204\223O\024\150p`Q\b;\161D\220\135i\158\227\198\023\246\024\166\223o\151\175A\253\2077\196\003F\1804\130\213;^>\204\226\255\r\223\017\176\227\235*\157M7\241\1277\248}\176\178w\028\029\014\181\222q\242\031\\\212\238\219\015\024\155\187\254\006\251O_\224O\141\201t\005\179J\180\018%\t\2308\0170}\138Z\225\240g\015\203\222q\255+_DK \254\159(\231\b\239?-{'\020\216\233}\146%\156\142\191`\188\019\t\183\249s:\205\240\129\196e\239D\130\152P\224'\171\182n\243\t\227\246hm\017$'*\224V\163wb\000^\234\232\029\159\191\171\186\191O\226\127}-\2407\142\203\225\128\026M\144\028\207\031`\148\227\237\029_>\196\232\239\"\254\199\188\244o\221\015&\255\027~M\179\0282\212\174\0001\007C\024\246\165\193\t\139\249\202/\024\212m\001\142\202\177\143H\016\015N\024\156E\167W\224\197\255\131\191\141T\0145\030\161g6,\024\173A\235\137b91qb\143\015a\221\137\189?D\193\239\011\252u\132r\232\192\186E\192N8L\151wQc0t\240\1600\206\t\131A\180\027\191\197\149\191c.\232vn\238Gv\018\143@t\"EX\195\029\"\238D\004G\154d\238\166\127d\b\196\1570\232?Uv\131\177n\255\134\157\224\132\192s\183#\132\"\029\023\191\221\025\220\156\241\018w@d\128\192+\212\2490\134\227\229S\207\197\243\024\166\030%8\254\253\023\140r\252\025n\t\248\230\1907\225`'\254v}\\\250\187\152U\145\0190\208\0040\223<\248\2528\221\167k\012cs\228~\145\253\242 |\243g\182\136\b|\023sb\231n>\181\151\127\221\160Ie\1287_\190\255\156Dh\139\193\157\015\175\159\240qs\227\142\159\222\229\240\n\1287\006\220\241f\184\179<\166\238\003\135a\142\027#3\152\163\227\196\163p\182\0159\255\127\251\224w1(\131I\005EBfj\198\146\"q\228.*\138\196\224p\027k\146\132\012\011\171\195\161\189\203N\240\252\190wk`\\\226\226&\024\151\186\184\007\140\203\\\220\007Rp\238\002\223\017`\225\002/\024\178t\145w\004X\185\192\001\001\214^\217\b\176q\129W\004\200\\`\135\000;\023xF\128\189\011\252B\128\131\011\\\016 w\129'\0048\186@x\129\160J<o\188!@\207\029\143\b\240\233\143?\231O\209\246\202\149:\225\187\231\127\023\216\203\237\236\1603\b\253\192\208O\215T\184\159\211\194D\229\011p\003\128\011\027|e\231\199p\157\135\246\252\207\002\238Z\237U\024[\196\250\174\136n\228Q\164\135VLD>.\243L\135q\154\18488\140\211\212\197\193a\156f.\014\t\2274w\129Hp\166\133\011\196\1948-]$\018\198i\229\002\1450Nk\175l\004\216\184@$\140S\230\002\1450N;\023\136\132q\218\187@$\140\211\193\005b\190\195] \018\198\233\232\002\1450\206<oD\1948\243\220\017\t\227\236\233\143\017a\156e\016\026\011\227\236\233\154\225\200\204\138\246z\156N\211\245:]xd\127\174\202J\1474\204\143.\130\148\031\218\238q\020s\151d@\231\137\141\130\1959Om\020\028\204yf\163\144P\206s\027\134\132g^\2160,\140\243\210\198!A\156W6\012\t\225\188vJE`\141\rC\1947g6\012\t\222\188\179aH\232\230\189\rC\0027\031l\024\018\1829\183aH\208\230\163\rCB\182p\188\r\t\216\194q7$\\\139\205\223\"\130\181\200|,\022\170\165\234\031t\236\242\201\232\176(\019\015\bGF\153z@88\202\204\003\"\241Q\230\030\018q\253\178\240\144X\148\148\165\007E\002\165\172<$\018+e\237\023\143 \027\015\137DL\201<$\0184e\231!\145\184){\015\137\132N\201=$\018\022\229\232!\145\200\168|\159C\130\1632|)\194\241\171\012\132c\190_\031\218\143\227Y\222\017\233}u\226\192\144\016\173S\0077\195\176\204\149Cp\185\141C6|Uua\227z\196\186\210\129awQ98\164\212\218\149Cp\141s\023_\b\142\2178$\192\234\206\134a\135\153Wu\239\232!\197\014\158\030\002\228\206}\\\016\220\232\b\194\2305\142\235a\183\2098\190\007\031\nS5\169+\135\224\028\223Cn\162q\\\015\2017\141\227yW\236&\028\215\187\"\165V\174\028\130s\\\239\140\192\028\207C\028\175q\028oA`\142\227\157\016\152\227v?\017\152\227v7\172\230\028\175\187\221\016=\199\235\144t\202\028\175CJe\142\211!\t\1599N\247\023\002\219|n\186\012\\,\202\012\252r_\179\243_\236/\152\146\019\020\164\148\002\167\192\253\020V\018\012\132R\225\020\184\143\195j\130\241\001S\026\130\130\148\194(\202O\152\211\161\156\229\011f\244\004\003\161\012(\229\13208\193@(#~\247\224\138^\213\029\b\255\130\031}\151\224\0201\204\189\127]\249\219|A\138K\195\220;\188\171\184\234\168\232\129\189\161\219\162G\195\166\203\145/\146%\130\r\238\007u\005B`\024\161\180\b\170\147%\193\255\012\024S\249P\172\251\214\213\000\022\0057>\248\011\1952\000\139\130;\031\140\245 \187\030\192\162\224\001\000\163U\204}\240\204\225*\030\129\187\131\159F\127\000j\024V\237\019\031\138 S\192\027\016h\006@'\024\154\003\0210\195\208\002P}\192\208\205s\021\2322}\176\227tG\030A_\153\216\133\179\227Y\164lP\1816\145_\015\177\002\127\226LLM\221\017+\026\019\127~<n\194\144\251,Vs\017K\152\137\191/\211tcW\012\219\153X1\022\186\207=\006\237\173\027\156;\134V\197`\025 ,\029\216\199q\194\241\220\196\127\176\015Fh\143&\150\029o\003\022\019\195\193D\222\216\249k\254\016\255\239r\249B\025\137\201\016\171\t\019;c\208\212\132\246\179\220\022\b\175;\012\153]\195\162\239~f7\244\254\134\220\170\01111\nNN\014\133\173\186L_\243|\195\192\150\027\247\236|y\244o\215iz\251x<\1420\195r\230\019\255\016OQ\1808\255\006 -g\238\248\215\023;\193\146\150\023_\143\023&T\207\015\204d\203\135?\230Y\184\253\029Fn\030\220?\022\209\014\245_\235r\247\2192\241S{\147\241\196\239\014\197\242d\246\147},\236(\158\201\005\153\213\024,\127fr\020\217\235\232K3\224\017\242\205\241\134\233}\186\191\253\230b\144p\249_Z\246\160\254\158\208\196\130\202.\193\134L\212\223\019\153ZH\217\001\216\144\169\250{\"3\027y\148G\023o\216L\253=\177\185\133\029\231\199\178Cs\245\247\132\0226t\250\249T-\212\223\019ZZ\208\219\244kG\150\234\239\137\172l$\255\201/;\182R\127Olma\249\244~\188\239\216Z\253=\177\141\133\189LF\1976\234o\135\142{\154\208n#\157]<b&r\133X\024\184Hw\208\155\249\141\1996&\024\231\252\152\191L\146\241\004\199\020#\137P49\198\179\0283\140\211q\139c<\2111G9\015\251\142\140\167;\022\168qbM\213$\025\207y,)\210w\183.\140\231>V$\211\169\016\195\t\198\154$:\181bx\196\216\208D\167j\158\014R\031\014\237y\022\211i'\249\242Z7-b\130\248\250\004\026\184\196\192\241\147Xm\186M7\004\154\026\208~>\1591\201\204\1929\239\172z\216\220\210<m\171Z\030\17405E\192\203\205|\152\157\165\129\189\207\131X\160\155\199\251\219\241\235z\020qz\253_\016\1652(\183\169\227\235\251~b\193\173\155\031\162#\176|\169\215d\248\130\020Y\027\252\179\220\131\246 k\168\241\225\161\138b\006\2292-\143\247\007\002\236\204\154\146\2398\254\020\237\172Z0\020\153\234\196\251\251\188\168\148\r\182\228\245\161\143\160\203<\142\208\135\024\186J\238\136\0007\004\214\190.\191\178Et\029\151\182\255\023A\233\220\027\030#\138Tm\004\\bbFJ\176\241\171\147\196\131\227\r`\157\164\030\026o\004\235$\243\209DCX'\185\135'\026\195:)|8\222 \214I\233\193\241F\177N*\031M4\140uR{x\170q\172\147\198\195\019\rd\157\154O\149Z\244\171\211\196Gr\024\153\250\200\tFf>r\134\145\185\143|\192\200\002\208D\012-\001Q\004Z\001w\143@k\031zA\234\180\001j\031\222%]\167\204\199v\136l\231C\175\b\180\247\161\127!\208\193\135\190#P\238C\207\bt\244\161\240$s\157\001\190zC\160\128\179\"\019\235u\006\184\235\029\129\002\254: P\192a{\204\002\192e\127 P\192e\191\016(\224\178\011\002\005\\\246\019\129\002.;\"P\192c?\016(\224\177\031Xm\001.{\199\252\000\240\217\223\b\020\240Y\228\179fu\0068\237o\164ns\192k\145\147\252\234\028p\219\223\240y5u\158B\014\134`\001\191U=>\2496\1281U\006M\002\212y\142\144\225\244\151\023\b\0281\173D\224p;\144W\b\028n\012\242\026SG\140o0y\004\207\016<\150\197\243\014! \169<\239\017<\146\207\243\001\193#I=\231\b\030\201\236\249\136\224\145\244^\028\016<\146a\139\004\193#i\182H\017<\150k\011,\020\144\132[`\222\143\165\156\002\243\127$M\023X\000 \t\184\192\"\000I\173E\141>a\132\128\197\000\150\r\011,\b~L\b\001\011\130\011F\192\162\0009\217\176.\1280P\227U8\140\011\142\192\225\156U\140\024\028\\\149\172\203\003\130G\178J\153`x\024\158\"p,\t\149\025B@\\\168\204\017<\146$\202\002\193#1Y\150\b\030Ire\133\224\177.^Y#\004$\011\149\r\130G\178P\201\016<\146T\202\014\193#=\169\178G\031\000B\024\208'\128\016\176\b\192\210\\\137\197\000\018\145\021\022\003\011bQ\133\005\001\150\217+,\012~c\004 \012\214Y&8\238\171\028% \145S\021(\003\233.V%\202@\156\163\170P\006z\2315\212wdo\159\211\253('^\244\172!\196\172\161\249\130\211$\028Q\\\216\229q\019\147J\012\219\253P\215\t\193\254)V2\197\252+NN\t\242 \214\221\224\143L\214uF\240\030\029\147T\152\152\019\196\233\242\147/w>\208\n\005\161\208\177\211\003[\223\172\235\146`\170\201\174\000\191\162\158\019llM\221.Li\b\n\018\0185#8\200\006\237\186\238\bR\143pz\170\n\145\204_\015$\t\137\167\154S\174\1374\026\245HU\0042c\212P\241\135\220S\147\144\129\003s\168`C\154\229\134\n4dCh\221PAvC\026\159\134\138+,\2335TH!\173VC\134\209\017\230`\029\238\224sjBD\244\214\024\218\004\236\220w\140\219\133\185XX6}\152\139Dg3\132\169?0\147y\152\139\005x3\134\185\195\128\020\204\014\017\005#\212$\162\\\172\2164\204\197B\133e\017\143\b\025\154\178<\204\197\\\146\021\017\\\132J\005\234\145\157Fd\028\196\170\016\015\187\207:lk\135\221gC&W\241\255\222U\027\157\138e\001\175\149f\017q\139\205\021v\224\201\1963<\002\237\192s\137\025\002\006O%f\024\026<\147\248\019C\131G\018_1\179\193\003\137\175\1526x\030\241\245\019\019\007\143#\190c\226\224\t\196\031\024\026<u\248\003\173\021\240\164\2253\134\006O\023\190`\183\t\030(|\193\180\193C\132O\024\026<7\248\134Y2\"_Z\003\209=\232\223\183#\"\222'0\028SOa8\230,=\232\229_\024\026\244\242/\204\022\208\203\023\012\r\159\186\r\031\127]\247\160\147\207?\166N\248\"\206\170\1452\016x\019(\004\1611\184\020x\230\191\239\232B\016V\143\148\129\192\135@!\b\r\140\131\0059\205\188\238G\024\014W\211p@\208\b<\129\225\176\229C\138\160\017x\006\195\225&j\200\169\218\188\194\156\130\226\220aNIq>`\014\025\024=\204\169)\206\025\230\208\177\001s\024\197\129'f\0062<\224\019\157\234\001\140\014\206n\162#\130\028AZ\015\2401\243\156\228\192\223iP\135\202\223\206\242\144\208\0059\028\174\030F\156\186\176I\030\208,&\171@*\135\003G\159h/\130\019&%\216\237i\222\t\137\012\158\006x\2004'\007#J~\t\001\134\231\b\028Q\007\163\233\142\203\151\b\030\187\235\n\193cw\011F\208\253\132\218\211 x\204\030\234c\1747\180\148\142dae\245\004\011%\145_\019z\255\132G6\156\252\154\208\192/b%\000ik8\249E!l\253`<\208f\"\172\132\168\145\031\240\011\139\245H~P\232\007V\020\0246\029g?\183\n9\193\188<\196[`^\017x\002w\134\156\005\219\028\196\191L\231\238\161\247Y|\127~\012V\014\247`F\1782\200M3\205!u`G\004\151\217\184w\004\150;0L\174\176q\023L\175\180q=\002\171\028\024Vlm\227~ \176\198\129ar\204\198}\193\231g6\135\206\198\221\017\185\222\129a\197\0146n@`\220\129ar\163\243,`Xr\176aW\004\230\248\0292g\219$\142\227u\b\204\241\187\014\147s\028\239\140\192\n\247\137\1930\199\237\022\004\230\184\221\t\1299^\247\137\192\028\175\187a\183\234x\0292k\215$\142\215a0\199\235\176R\029\167{\199\156=q\220\238\142T^j\165\180\245\205)x%\170I\019\031;a\216\212\199>0l\230c9\248\170i\147\230\128\185\019\012-|(\252\170i\147\150\128\234\003\134V\128\173\216}\213\128\005\024vs\187\219\163\2511O\023n\158~\005\026\1940\194\130\016:\140\240\t\019\178\2055t\191\254\217\130\129\224\004\002\203\006\005D\167\016z[tF\170(\203 \210\029)!\007\237A\192\005\004\190\"\224\018\002\159\017p\005\129\145'\148\213\016\248\132\128w\135\209o\027\127\\\197R\178~\1875\021\193\231\215\0303\241\031\252l\2243\168\182;\019\127c\223'-\r@\243\131\t\149\195*\245\133?\231=\157&\223\030\t\255\213\159\196:\187z_E\127\138\007\132o\015\229\175\135\024z\005\176\2193\t\190\205\210\228\149\005\197\223di\242\218B\226o\1774yc#\1377X\154\156YX\226\237\149&\239l(\254\230J\147\247\022\020\127k\165\201\007\027I\188\177\210\228\220\194Ro\1714\249ha\1377U\154B\158\020&\150Cx\160W\\$\014\238\023\130K\029\028\214\143-2\007\136l\137j\138\220\001b\184\194\193!=\153\162t\011Fp\149\139C\250\001E\237\000\145NO\20988\164\191X0\023\135\021\2209@\164\139W\244\014nDp\131\131\251\137\224\184\131\195\236\027\029\028\188[\186)=\031D\004\203\196\243\025\012\233\185!\130s\189\016\129\185>8\1930\215\005\225\217\131\166t]\016>T\189)]\023|\1920\215\001\225Y\146\166t\029\016\129\185\254\247@\238\194u?\004\230z\031\195\244\\\247\131\015\nj*\215]\238\162\225\248\158\194\216\004\194f06\133\1769\140\205 l\001cs\b[\130\216Z\180\142\252\243M\225\031\207\248\018\201\030\011\158:\129\024\167\249\019%\164h\017H\238\1753\148\129\180\002u\1422\176\246\160.\176\251\192\172*1\002fT\133\017P\155j\2446\176\214\170nP\n\198`(\003i\193\234\014\187\017\212\170\030c`\132\001#`6q\188\170\016\198\1363\144\172\222\224\209\129\228\247\006\141\014\196\170&E\t\152Q\025\234V\b\001\015\014\164G\208\0208\003\179\170D)H/\161A\195\003\179\170F\t\152Q\r\198\192l\194c\003\233\1954\029\202@z3M\1432\144\142\\\131\006\007f\020\199\b\152M#F@Lbxd \207\130%(\003\153=ex\195\129LU2440\163r\140\128\217\132\182\026\152Ix\\| \015\131Ux\243\135Q\208\208@\011AC\003-\003\143\141\219\003\161\160\r\007\198\232l\1912&\207\214\255)?b%\214w\224\021\151.\193\216\012).\197\b\240\182\140\166\2030\002\220U\238r\020\143\016\n\140\000wb\187\018\189e\132Pa\004\184w\222\213(\030\169\211\006\189e\196\"\134\222\194\023L\232\240\199\1400z\212&\1320\160w\141\0168^M\bc\196\235\tf\244hpL\b\001\204\185z\215\197O\152\145\226\012xkG\211g\004\005f\2288\227\0123\n\156\241\0013J\1561\192\140\ngt0\195\014\r9\204R\243\148\223\019\024\222 px(9\216O;<\1879$\000\129\152\227\028R\000O\204t\014\025\132\167\230;\135\028`P\179\158C\001\017\136\185\207\161\004\b\196\012\232PAxj\030t\168\001\0069\027:4\000\131\154\019\029\236\004(O\1594\159\222\230\027\246\195\179\243\141\158}\023)\031\156}\031F\016\252\019Fs\231\180\189\235\243<L\024\239\156\180'\207\148{\251\1529\006w\206\216S\135\\\226h\231t\189\142\147h\231\\=yd\028\005wN\212\147\199\204Q\240\210\135\127\015\221m\005p\002\183\\\003\148\192}7\016%p\243\204\230\012\236J\161;\015\029\188\245\222\167\004\238|\240\025\129\027\231\000#p\223#`\022\253\224\221\243'\239\143;\255\194\003b\132\002b\153{\004\r\196\003\014\006\194\001\007C\209\128\163\161`\192\209h,\224\020,\020p\006\022\t8\003\r\004\156\002\196\001\014\198\194\000g Q\128\019\144 \192\tX\012\224\012,\0040\006;\200O_\189\1396\236\022X\184c\135\196C\190#\200\212C^0h\006@1\003r\015{E\144\133\135\236\016d\233!\207\b\178\242\145X\241\181\007\189#\200\198C\014\b\146\249\021\133 ;\031\185 \208\222\131\246\br\240\144?\016$\247\139\255B\160#\000E\012H|?ET\019\223O\145\219O|?=!H\223M\127\"H\223Io\b\210wR\004\232\251\232\017A\026>\234n\231\130\246\131\176\164\006\t\015lW\bK\026\144\000\238\235b\t\003\1933\012\238@0C\246a\177\196\240\179+;\157\216'\131\142(g\137\225d\2522\188\205\163\024\022\244\216\135'Y\170\215\004UW=\188\162\197\210\004\129#O(M\017\252/\004\159yx|%\139\1659\140\198\196\011\024\142\217^zp,\173\167\021|\155Hp\1675\002\199,i@\1951u\006\162\145\176L;X\0273\165\247+\005IL\233\224A\023\1344\012)\135kdaw\204\144\209c MIv\000\239\016\151\206\018\192p\164\245\201\016\007G\2383\203\0168f\n\236\225\152:\236\224\1688\224\224\b\210\247o\164\131\145!\174\141t\029\178\006\129c&3\024?\"p\216\1851cz\016\141i\015\1766f\185\239\225H\207+\027Aa$\202r$\129cp\200\183a\164\239\217\011<\241\205r k#\162\128?c\162\1903\127\"\162%\\\005\200\030'\150#\217\026\217\253\206r\196\16718\226\211\1525@\186\198j\207wg\004\b{2f\129\239\201\019\012\244}xB\144\190\015\131\203D\172\240\221\247\129 }\207\133w\137\177\194\247\\xc\023+ \199ED}\207}_8\187c^P\024\238\219\207\151\219|a\151\251\186\207\153\015\147z]\020\236\024\022e\136xB6\151\179\162B\169'&\026\141\203\187\248\255\019\\\170\225\227\186,&\143\204\218\024pq\rZ\220\182\208\130Z\202pKu\130Fx\029\202{\246\023\222\230%\160\210\227U\140r\006\148\211\161\028\142rn\024\167<8\015\226\198>\230;\252\189'V\0261a\191\251\002<\2262\005\193\242A\163\159\136be\006\151\128\020\145\131\232\187|\019\000\163\020 \005\243\185\178\132\225(\190\002\241\015l\152U\2140\030'40\001\1313D\031\195w ~\198\224=\012gb\130U\132\004\198\026`\214\023\252\1968\136\134\199\196\229\b\251\015\140\174\014\176!\240\016\186B\188\031\206p\021\236\254\234\1911J\134\213&\235\230\159\152GT9\146J1|\225\224\2136\215\004\157\196\168J\b\159\226\248\202\193\127\028\031\252\178m\232EY5\206\202qV\131\179\n\156\197\028\214\194\228\201\176g\156\208\001U|\163\b=d\215w\185\136\248\193\022\252\251j\172\026\205\020~\238&\177\254\249\254\214/_\215\251\252.f\154\207S\175\014|\192&\144j\195\163\143\179\184\175\224\2427\171\019\144\130/\128\179:\005\025\248\0188\1713\152A,\130\179:\0079\19628\171\011\152\130/\132\179\186\004)\248R8\171+\152A,\134\179\186\0069\212r8\171\027\144C,\136\179\198x\250\198j8\245\244\155\004\164\016O\191IA\006\241\244\155\012fPO\191\201A\014\245\244\155\002\166\016O\191)A\n\241\244\155\nfPO\191\169A\014\249\244\155\006\228PO\159\185]\185\207I\182\002\2084,K \232'c\0310<\245:\137\159\240\199-\025\203\220\204\199E?\000D\186\237\150<\219\012\004\186\r\2140\127\136\004\012c\221\198j\017\015f\145\199\228,\243\157\201\003\139\213\212\026H\173\128$\255\197\206\243\007\244]\016\198\188\006\139aU\210\000\200\143\199\003\0063\175\170\239\184r\007\131Qq\183Y:\162\01428\200\158aPy\018\227\222R\r\243\163;\137Z\238\167\165\127\156\199\019\255\245\198\250\158_\238h\139'\207f|\210'\198\023~\155n\223\213\137H('58\211E\140\254\166\251\023\142\206,\003?/\159l\025nolYt\015\021&\229\006\233\190L\215\019\223\027^\016_\024\248_\223\127=;\192`;-\015k\220\225\159\211\251\251\233\235\237$b;D\171\012\218|\229\250\253\222\016\169\246\030P<\1831\184'\153\176\222\228\211\\\216i\250\189~<\239\190\204\031A\187\153!#\025\178S\243':\157\161se\242\219\236G\177\242t{v\144\225\135\211\2515\240\002{@\n\r\216\202\017\154(k\145GJ\158\255\014u\207\2291\145\207\026\023us\177_m\255\012\020\219\031h\254\253\177\200c\012\1302fX\158\248x\127\222\194\180V\152\250g\180\214z3F\023\2299\190\130\250w\\\"\163lP\246?m\000o\"'m\208\nO\027@\t3\174o\127=\004\253\173[X\255\193\239!\191\233\205\024\191<\206\029\223\190\178L\211*+\185\173\231\236\175^\203\150\254\024\226\155\225~==nQ\1336@\132\196r\025\197\r\184Y\231\167Y\214?\238<\212l\244=\237\230\211\229\246811i\138+\012q\n\011\174\192\227\020\208\187\232\228\246 v\210\171\231zb\230\244\016\014\217s\228\219\236\157\220%\228\017zv\025\176\019@:\185[\200b\244\188\231\031\0248s\192\183\199\130\206$tr\199\144\133\238\166\027;BS\027\157\2202\180A\183\165\0049\018\134\230\178;\185k\b\002\191\137@x<w\211K\213\183\164\019\171\144\022\185\242\200\019^R\r\131\253\146*\160\164\198#?\240\146\024\012\246Kj\128\146:\143,\152\011\191\"e\245\024\220/\173\003J\027<\186\152\206?qd7B'\183$!x\191\188\001(o\244\248\028\173\199\228\224\251\006\254|\147\196C\20788\133\193\222M$\137\127\019I\230\145?\144br\000)\250bGv\197\150\253\187\196\015\031\228a$%\128|{\159\177{\246\163\005{\204\137\031+=\130l\000\164\240\t\012\238\135\198\015\004\217\001\200\183\031\028\1879?\014\144\205#]\226\251\252\157\169\156\254\001\2279\132??\150!\248(}o\0316&;]\tfz\192\153t\153\169\031\006\023\145\016\216\185cw\152\144\002\183\007#3\168\"\238\236\019\129\231\192=\192\200\002\188[6<`x\t\220\"\140\244]\030\201\163i\r E\176^\217\t\198\251~\223!\202\012@\202\003\166:\228\163u]\234\187\254\025\209\246\189\030q\250t\000\218\t\024\t\165x\024\233\1877\226\n\153\239\2067&\254\015I?Y\002\195\145g\151\165\000\028F\250\030|D\144n\127g\017\147\021\031z6\191\242\187G\153\225\193\230\n\144nM\160^RV\130\012\209\199Cz`Y\133\017\196\221.\019\198\170A\214\237\241\129\150\211\160\140\183\233\244\184c4\006\210\182\190\011B\234(\146S}\178\012\1911\206zPb\239\197 \005\015$\203/\185\007J\230\2403\151\255\134<\243\145`\172\245\004\208\242\003E\243L\229\190\169y\018*\216\151\025\001\153\020\148\185\242+\199\220\"\207p\138Wf\158\002e\026\129\200\006\254\174.\146\210x\213T\000\157\173Q\004\199\141\193\r{\238\183#\031\199\249N1\252\246\228\254{Z(\134\223\174p\210&\191]\017s'\004\222o]~\203\243\153q\130\223\184\176\219\151\024\250Q\028\191\153\145\147\019L,P\254\192zY\133\225\180\193\165\169\174H\\4\190*\213\021\169\011\198\023\164\186\"\243\192\196ZTW\228.\156X\134\234\138\194C\227+P]Q\186h|\241\169+*\015L\172;uE\237\194\169%\167\174h\\8\177\218\212\021\134\147]\217\229\014\174\199tEg\162D\239\141\1930\195\153>\167\203\240\128QF\130\238E\243\246!%\031\242\133\166#\140\231.\2546} v\142\190\180l\221\193u\151\174<Xw\197/\028^\027\233J\195\133\207\143\219\212\2030\\\223\029\019s\224\250\1571\151\147\226\028\142q2\156\243\19289\206a\024\167 9\219t\017H-q\234\132q*\1628\180.j\162\254\208\202h\136\146P\243\024]\027\239|\2240\177C\137\198l(\127\231Gt\230\176\236#$\248e\224Wl\238\181+\135\b\ty\232\237\227\132\155\193#5N\019\1741Fh\252\224\239\243;\190q\166\171\014\2097\163\191\243\027\020L\162\239,R0\141\016\236\228#\195%\178\b\137\247\025_9\237*<\232\213:\200w\177\"<\232\213\193\225\001{}U\196K0D\162\140\145\232O\179\\\184\191?>`\145\234\021\017\134\136\224\201B\174,\025\247r\197\018[\213DK`\217\167b\017\018\235\157\\O\216\173t\175\136`\149\218G\223\012\150\021\171\193\233\024\136\017\212\229\142\236\030\232*\238v\016Hx}ho\143\139\200\174\251\024\\\020\241E\172h\212\t@x\023\203\175l\193\024)\196\248\020K\027\0038\018\1713\003O\189&\209\213\185\143\156`d\225#\225y\175\186\004J\2310\180\242\1613\140\172}$\162\217\000H\196R\230C\145)\242\186\243\161\127!\208\222\135\"3H\245\224C\177\201\238\154\251Xd\250\186\030}(2\127\221\028|\232o\004\154\000\198\"\195\170&\245\177\200tm\0038+2\001\219\000\222\138L\1696\128\187\"\243r\r\224\175#\002\005\252\245'\002\005\028\022\153zm\000\143EfR\027\192c\177G\000x,2\151\218\000\030\139L\1666\128\199\"\179\169\r\224\176\200\132g\0038,\252\ns\199\000\135E&G\153\233\176\206\219'\"\177Or\152v\002\019(K)\166p\250\015tq\155e4uBg4\153\233\221\230$\148\200\245G|\194\149\021(\237\011\159>e%\202b\252\164F2`\197T(m>\205\024\169\198HgbJ\1425hQ\252qR\195&\132\200\252\214\242\204\024?\130\211q\172s\209?'\177\012\197\224\247\141:\214S\143\247&\030\021\195_\161\234\216\016\193\254D\217@@}`\190\015D\212\r\201\020\157\025R\225I\176.\241\224\196,X\151zhb\026\172\203|45\015\214\229\030\158\154\b\235\n\031N\204\132u\165\007'\166\194\186\202GSsa]\237\225\201\201\176\174\241\240\212lXg\134\001\251\201\222\023\134\248J\007\181\020H\151\169\131\154\n\012\011\180\021\029f\003\224\219\196\161\144]7bx\240\216\201\174\151\131q1\228\162\187\195}b\163n\211\153\157D\166y\\0Bj\019\144\187\2353T\023c\2286\227,F9lR\235 \024\163\176\025Hg\163/m\216\007[f\020[\217X\164\003\213\215\232\221a\140\198f \157\184\158\161\149\1281:\155\129tM\250\030\181\024c\012nU|\136\255C\209\220F#]\250~D\205@\024\131\227\198H\175~p\252\024\233O\015\142\247\"\221\195\001\247^\140\225y/\012+Pa\140\225x\239m~\220\143\2423\199\200\224bp<\2482/4\222ue\004\214\160\134c\012\220\1491\134\227\202H\227=\224\174\1401\028W\198\006\156\131\227\196\200\136`\192\157\024ap\199\137\177A$w\188\024\025\237r\199\139/\136\183s\199\141\207H\214\227\142\243\194\243!\220\241]\184\t\228\155\191\174\175\169\158\175\019\1785\131o\158\026z\161\184\227\181\143\\\211\017\242Bn\199\027@\028\0053\031<\193\150t>R\181'\b\188\247\2253\140\028\016\225\025\179\153\251\132\007,=\002H\209it\131\024.g\220\\\215\233\188\163\131\1451\129\tG\012\1919\179\028\245\205'y*\0010h\025\179'J\140\186\164.\140\219j|;6T.d\202\141vg~\231\224\139u\2218@\0201\181\202\150n^\216\r&q\136\244\2271\136u\026\016?\130\133l\183\012Pz\249\209f~\021\171\249\244D]/?\213l\227N\b0u\129G\004\1529\192w\004\151\1878\172\228\194\001^0\197\210\001\246\b\174rq\216\173\212\014\240\007\130k\\\011\191\016 s\128w\004\215\1858\204\194\222\001\014\bnp-Dp\220\193]\017\220\232\226\144\135\151\184~\136\028w\213'\174#\142\b\206\245\195\017+\217\245\195\014\193\185~\216a\130\174\031\158\017\156\235\134gL\208\245C\228\163R}R{@\172\022]O\028~#@\215\019\017\143M\\O\\\016\156\235\136\216=\187\142\136\221\136\235\136GL\208\245Dx\130\185O]GD\234:u\253\016\171\234\212u\196O\004\231\250!\002\219\2210\242[\200}Z\160\140\005a\236\158\025<\153\167O+\000;\193\208\026\128\2060\180\129\160\b\150\001\216\007\012\237 (\130\237\001,\210\185\235\211\221]\157\014\201\007F\224\b\225\140\017F\132pB\b\217\001!\\0B\130\016\174\024!E\b\011F\200\016\194\029#\228\216=|M\151\239\003\236\015Y\129=\011\006\207\164\247\217\238\239\235\006d\180\138*\011xy|\220\025<\240\232\179\221\213\174\143K\127\127\232w\159\239\236\2512\131\157\183>\235!\130X\242\150s\181_\243|&\201\003D\238\249\242\029>\205\183\2078h\222\2378\207\031$o\196y !\223\22108\005\222\231\137\141\197\231\191\251<\181\161\248\228w\159g\014\148\152\249\238\243\220\006\019\211\222}^8X|\206\187\207K\027\139Ox\247y\229@\137\217\238>\175m05\213\221\231\141\r&\230\185\251\220m\128\239H\0314\231\030\016i\ts\183\t\030\144^hqh\229F\167\227\2441ExM\145\184h\194o\138\212\005\019\158Sd\030\152\242\157\"w\225\148\247\020\133\135&\252\167(]4\225AE\229\129)\031*j\023NzQ\209\184p\202\143\n\246D\211]\190\162\243\144\240Kk}\209\251\200w\0249\248\200\011\002\229>\244\004#G\224\150\224{*\015\190(\188\205\190/\019\000\250\003\134\166\000\244\012C3\000\250\tCs\255\182&\024Yx\200\233\006#K\031y\132\145\149\143\188|\193\208\218\135.0\178\241o\233\001#}7}\2440\210w\211\199\000#}7}\\.0\212\247\211\007r\243\190\155\1588\140\244\221\148_Ad\229{)\031\224{\170|/\229\240-U\190\147\242\005~L\149\239\164\167\025F\250>:\223\225$Q\249N:w0\210w\210\249'\140\244\157t\134\221\1852|\244\252\016m\226c\144{d\129\243\165\250\202p\210w\198\196\000\150\173x\140\192L\237\239q\028\195k\023\174\210\021\1322<VL\192\176\229\003\003\026\254*\214\191\007\024d\184\170\217[<?zy\236\020\212[\172F\152\178\0306B0\235C\219\127-\211\2334\245\246\217\028\203,\022\180\197\144W\180\173\167\127\181x\135\\L\018\169\171\228'\b_\238\191\249~\226\239\239\242l\022H#\215W\169\145\"\026\023u\004\149\220\131\233\177\185\190Jv\134\176?\167\129\191\241\155O\022s\016\234*\2019BVG\228\222\001\187\211T_%\185\192\200\178\187\179\221|H\164\164,8\178eP\131&@\131\233\171\212\168(\141/\217\029p\217e\170\175\146]#\236\199E8\143r\130\199\135\171\192\202\156\233\171Ph\014\237;\159\151\247I\2386\186\179\159\203\2274\137\217\225\235tg\167g\255\161=\253_\219\255\146\131X@\150\244$L\239`~\162\248i\152\255\014\243S\197\207\194\252a\006\249\153\226\231a>\007\233\185\162\023a\250\207\t\228\023\138_\134\249\191\225\242K\197\175\194\252;\\}\149\226\215a>l~\173\232M\152\254\001\023\223(>\011\243Ob\165\b\2243\197\239\194\2523\\~\167\248}\152/\018\025\196\239\021\127\b\243a\231\027\020\157\135\233W\184x\174\248c\132\247\028a\129Q\n\176\136\224_\228\142{\143\207U\244\179\136\232\191\129\245\207U\244\1794\198}!\251\185\138~\022\017\253\015\176x\021\252,\"\248\175p\253q\021\254,\"\252?\016\001\021\255,\"\254\223\143p\r\170\004\192\"\018\192_\176\001*\001\176\136\004p;\130)\128\171\020\192\"R@\143\b\168\028\192\"r@\015\215\128\202\001,\"\007\252\152N\016_\229\000\022\145\003z\152\175r\000\027b*\000~\004*\011\176\136,\240\011\174\000\149\005XD\022\248\129\248\144\202\002]D\0228\130Y`TY\160\139\200\002G\144\174\146@\023\145\004\142\019\200WI\160\139H\002\159 ]%\129.\143\185{\232\241\141*\007t\0179\2248\131\229\171\020\208E\164\128q\130\232*\001t\017\t\224\011z\246\163\138\255.\"\254\249i\130\rP\t\160\139H\000\235\185\156pGnTi\160\139H\003\012L#\163J\003]D\0242\176'5\170(\236x\148\027l=z_E\197b\023\017\139'\214\201/\207`:*${s#\1899*\212\251[n\143\229\011^\172\232\019\146\168\222\015\156\225\247\015\251>\165\185\226!\202\215\025@jFR{\245\154\011H\204I\226\137\203\195~\228\027\147\b\189 \233\031\140f\151${\b\176+\146\221\209l1|\250\201\0071l\147\223s\144[\210\196b\250\133a\2396\247b\180d\192\005v!\176\169\137\189.\252\"7$\161\232lE\235\245\189\233x;\254d7\196\232\220\196~\177\031\143E\255\247y\026\228{\174o\183\159l\153\244\002a\002\020U\152\134\025t\246\254\190\176\159\234\b\243I\190\214/G\174r\t\243\169\006\189\228\223\1391\016\172\247\146H\133\136|\200\239\031\t\015zI\1726\197\244\217\165\244)\177\189\024\t\189\\\254\219\173?.3\031\248\130\2032Sv\157L2\205\007}\1613I\235\145\181ARo{\178\182\154]\030\003\187SU5\216\006\222C\245\196-\219>g\201\185\133H\163E\146s;14n\005\2312\189oO\228v<O\203\132\186\004T=\220\138\\Y;\203OF\184)\176X\207S3\236~N7\182\188\179@\172\241\012\226<\159\tD\177\162{\255\184@\028\183\128\1383\157\000\"\149d\129!v\133\223\161>\181\226\206\166\019F\174){\195\244\198\164\011\154|\024\146/F\171\239\243\249\129\237\000\229\012\228u\2368\209\188\014\228\253\020\2371I\235C4\227NA\129\193\020\184O\162\219\241\129G\r7\193G\254k\026\231\229\172f\147\247\178\225RF\147\024\198\143\007\203o\238G\245m\1890-\001k\227\209\029\153\152g\157\223\240z\028\173\000\020\189\192#[]\006\134[\177\183}\156#L\203\129\198\131<\158\188\031\173\176\2511\137\166\251,\186\156\200\142\197\209\138\183\199\149\rG1;\134\162\173\248\146\167\197\234\183Y\129\0045\214v\190\148O\130\182\187\001Z\167\024\158\021?\219\185\241\177\2257\200\173\223\234(\243mfCM\153o\253s\230N\148kNBr8LJ[\252\243\004\024'\163\n\234\196z\138\224v05\167\168=\204)(\206\000sJ\138\195\239G\152U\145,\152S\019\021\168\206hAx\r\193\155`\n\163\204\251\001s:\138\243\001sz\138\179\158\220\164\191\020\002\243\007\138\127\1349\156\226\236-\238\005&\143\020y\0069\t\025a\234\193!\196\004zp7\177\014\248\201\190n\024)\165IDq\025\205\012>\141$\167\028\020\225\144!7?`R\t\0224_\197t\196i\196n\175\130H\221|\191\207g\146WS\022^aN\019\229c\011L&\131o\173N\132J\198\224\029\230\1441\136<\128\129t\021\132\196I\210\246-\168\223r\129\022\022\024I\129\181f\224\168O\201 \252\ts\200f\238\019\230\164\020\2317\204![9\254\027nBR\167\129\2519O\189\220\211\207\150\175\203;\151\179i\215i\017\205?Lv\194NM#B81\019+\006\136\031\176i\239\236|\134{\biE\241N\236< \188\154\226]\225\214*m(\210r\132\227:edQ7\164\172\238\185\187\000~\\'\152\215\183\231y\016\147\198j\167\214\186\130\179\247\177\244\182\153\127\250\239\255\251\159\127\255\175\255\241v8\228\137M\030p2\247\217b\014\207bs\148\221\001E\1676y\196\201{\247\203\223\2453\136\158*\198\027\128Bs\155\156\160d\224v\243\194&\167(yO\188\190JRs[%CU\222\001\019*\155\156\163\228#@\174mr\129\146'\128\220\216\228\018%\255\000\200\204&W(\249\003 w6\185F\201'\128\220\219\228\006%\159\001\242`\147\025J\190\000d\2319wao\185\192\030\142G\244\012\020;\218d<\162e\159\199a\167\169\029\148\025\030\209W\191\232\226`\147\241\136^\000\178]r\142\135\245\029 \219a\157\227a\253\000\200vX\231xX\127\002d; s?\154u\214\006roi\231\222<G\168\219\200\213\127ZN\133\231\005V\248I\189\222\234\209\029\003\202\128\001^2ScmK\162B$\128\252_:\212\026\161\002Y\188t\030w\131P\129\028^:\015\155!T1\201\255\tU\153\157\005\243\014\161o\163d\143o\231\178\188\167\171\028\149\177\179Z> 2@\011R:\014\203i\011&0%\229#\194\002\210wi\223rq@\168@\254-\237\252[$\216s\190\2487\1548\205F\145b\143\n(\215\206\161EF=\229\025x<\182\127\022hd\027\003I7\178\018\187oU`\177\237\140+=\025\251q\023X\140\003\233\188\178\179K\129\1976\144\143+\167\002\176\216\006\178qe\007h\129\197\1829\006\244n\218\241\027F\251\184\239y\169\235\001X\156\255\004n\192ypX\136\171\145\144ky\234\220=\022\216\029\191\251\217)\235\236\148Z`\177\173\135#\235\160\202\019\201l\017,\212\007~\002m\176\031}y m\184\030\253\174f\230\012+J,\236{\144l;|\185\207R=\186[/\022U\239\206\1674\r\133\191\169\216\1833|\153\209\252\197\229W\2463(s\154\255\240\248\182\007\148\005\205\255\233\241\157\202\219\198\213\b\223q\164\191\001nTV\180\132\235G\127\003\188\168\172i\r5v\182\021z\187wR6\180\130\237I\127\131\252\136\209\n=\160\2248S\007\205\011=\224\t\199\178\007\167\001\245\228\230y\026\006\177zr\159N\003\194\006'\190\134X68\0036\198\178\193\233\175s$\187:@\236K,\027\156\138\190\198\178\1939\233%\150\157\017\236q\186\029\213\219\234\242\160\250\176\0208C}\1395\164\000\167\157c\217\224\164\245\239XvE\204\173\191\195\020`D\190M]q\127d\156gv\243\\\129\203F\207\239,\187o\208T\213\160\175\146\203@k\143\251\018\194\244!V\198\150\249\241\014\207mVvD\187o_\004W\"*0\200\167y\219\198@Q\007\194\211a^*\223\175UW\201\231\148\233\143p\249`\148?\196|\164X\205\015\178\235\003\145\221\174L\252&\231\160\228)\r ;!\178[\152\157\018\217-\204\006\163\252=\150\r\006\246G,\027\012\236S,\187$\242r\152]\017y9\204\174\to\r\179\027\"\179\134\217\140H\166a6\216h\243\2191\150\015\134\248\207X6\024\229\191b\217\156H\229\020\155U\178\243#\175R\005\140\2445C-\\\004\249x\226\191p+\0260\214\213\164R\188\006\021\241{\187\170\247BAt0\228y|\241`\208\235\233\149x\0170\246\247\217\219W\213\192\\\160\230\157\2265\192\1400\197\243+\180Z\230x\145\154\012\176\024\0050=<\226\249`\130\016\235\153\241\n]`\238\019\153A\181GJ\r6\214\239\1299&{\128\212`#\253^\223C\255XN@\249\246`\177\193\006\252jw\144k\193h\207\2394\216@\223q\240\224l$\195\134\252#P\011\246\016\141aC\253a\190\159\248\237\246\246\195\238\152x\150\216\2116,Egw\213\240\239\029\152\248\177G\157,\163\253\226\b(\216\207\132a\147\127\019}+\165\189X\199\176\249?\217\215\004\216\246,\006\195\166\253\240\005\191\180\180\215\236X\021\146\160\238G\245\180-9lJp}\194\2532\223\132\207}\215-\130k[c\143 \0246Ix\130\019\128w\171\142\028\163\229\236\134\215\189\209\218y\254]\160\222\160\219s\220\024K+\231g\243\233\139T\142'\015\129IP\173\165v\242\1588\016\025\206t0\195r\205\218\163\148_u\195,\179\179&\027i\165\208\211\171\236L\218\029\002\021~\001$\236I\203\014KC\235N\004`\202\223\153\182\235\176\204\003Mx\166\149\029\235\029\150tn\212\243\174\237Z\237\176\188#\026f\128\236\212!\150m\238\225\b8$\204\014\245\014K>\242=\173\005\176\197\206]\029\150x\214\161* `g\174\174\0148\004\180\130`7i\029\150`~\146O\196\169\135\1922\196O@\1931\003\203%\191\129e\b\167\018\176\028\242;.\200\026;\250\187\129\150\131\187+\141\157\146:\180\187\242\027p\209\198\241o,k\220\143\240\218\136\029c\253\161}~\217T\244.\228K\002\242=8\254\198\250\158_\238\216.\248ALK{D\214?\238abj\016o\023\246\193\233\023\161\134>3\t\143\155\232}\221\212yFl\249\192K\201\r\210\153\137f\244\242]\153\1353\n\131\161\170\224\187\230\225\140\210/C\017qFe0\1489\1932j\207*\205\011\020\212x\005\025d\156\198\012\0268S\017xT\157\193\239d\1359x\127\189_\135\138\1363\006\203\241\212\219\023\253\180\244\143\179\n[\227\221\141\028 s\131<\191\207\023\177\012\242d$\016c4\024\191\167\247\223\236=P\t\131\025R\147\249\154\223!\005\208f\028=\022\250\221\147a0\131\231q\011\1613\250q\142\226\223\238|\223`\193Br9-\199\bj\017\160\2068\181\012P\127\226\212\138\166\246o=\031\196\252<\195\021jZa\155\157\031p\133\134V\144CR\148\027\b\199w\156\217yL\176\201'\020z\186l<\245\014\003\205<\225L\030g5\1610\198)\156Q\005~\160\173\199S\025O\226\202&\020\2108\133\005W\200B\t|\153\239\242\192\000\\!\016\2287\156\025\136q5\164\"\232\1298\255\1413\003a\174'\173Pv \196;\156\025\bm\181\167\000%\007b[o\188C\217] \179\227\204@\\\175c\251\237\228Gs\153\020\149\012\004\252:\133z\146\167\027\191\201\190\225\194N\211o}N\197:M\130JsZ\250\1383\199@\222\189\225yw\012\228\128\199\159\223\208\152\208\210\15983\rx\249\250\224\214\183z\240@\027\179\168\199\021!\148GUS\132\144\1539\030W\177\252\209\127\004\250\"\163\153->\216\207\175\143\181\247\"OJ8\174\163\015\160\1875V\024ON\212\232>]\r\208j{\180\019\1971\211\131:Lt\186\136\025d9P\234\150ix\015\141{F\230\148\169\224\2072\019\168L3/\012\\<\136\224Hi\236\253\254\180a\168\232\138\027vf\025 `\134?;\157\231\219\253\141\255\245\144;\212\231\208-Z\225-g\202\212\137\173G\206\134\208\2437\195[=r\147*\150\208\134\249\243b\252\019i\007\223\223\201v\015kZ'\005\212pF)\172\135%\2017\134\196`\218\216\166(D\018%\149P\139\140\134\208\191\174B\165-\164\140QW)\150\194vu[\146^\029\2090+\021j\135\2024+Sfe\196>\005Cg\183\202\214Q\166\168\171\212\202\131V\185\149%\213\210\204\180\170PV\021\001\171\220\186\178u\148)\234*\181J\210*u4\016dV\150\152fU\202\172\1380\203\020\178\236z\n)c\212U\138\213\176]\219\130\150\030\129(\159\213\131\243\221\188\190\146\207\1922\175Q\230\129\203\132\184\222f%\183\245\148i\234*5\025l\229\128{Z\238yZ\167\172\235\136\021n\200\211r\215\211\152\190J\173>h\149\251Hs\207\211\006e\213\016\176\202}\162\185\235i\189\190J-NZ\005zZ\238y\218\168\204\026\t\179@O\203]O\227\250*\196\146\003i\2156\214u\234\202|\130\137Ja\t\181GaW\177k\202x~\201A_\165RJ[\244\156\182\001\031\227`\154\166\210\024\252\202<*g\2198\0246\166\250*%\145l\182\238`\208sR*\156\244\148\219fc\146\168\020y0mTI-)\136=\026\190\220\191nr\153%\167\012SW)Y\198\218h\167\144\213F\211\239\018\149\225\224w\243Q9\219F\195\251\146R_\165dM\218H<\235\194{\214*\205%\ra#\241\172\011\247Y\215\250*%\025i\163\026\230\128\230e\214cVy.\233\b\243,%\203\178\204|\194L_\165ZO\215\158\145\213\245\244\232f\159\232z\202gR\154\246\169\140\007\031\025\128\235\253\235\166\215Xz\2024u\149\154H\230\027\241V\162t[\137D%>\248h\129\017o%J\167\149H\184\190\n\173\020\201{\239\166;\027&\169f07LJU\218K\019bC\228&\178\219c\139(#\212U\n!Y\239\136\215R\237\214R\170\210]\n\166\187#^K\181SKi\170\175R+\015Z\229z~\237\182\165\169Jpi\017\176\202\245\251\218iK\211\\_\165VI[\181\143\029\157\186\170M\171TJK+\202\170\167\142]W\181aU\169\175R\171&\173\242[\210\218mIS\149\194\210\134\176\201oIk\167%Mk}\149J\140\180\200\028\1679Vq\211*\149\185\210\142\176\202R\178-\227\134eL_\165\026\146\185&*\1676nNMU\206J\007b\031\031\156S\027'\167\166\189\190J5NZ\182\251\004\216\247\030\221\1343Uy+\029\t\011A\197\189\247=:mg\202\245U\168fH\006[\247S;\182\229\157k[\166\018X\150\016{\178\029k\202\206\177&;\232\171\212IIk\160L\209\185\153\"S\249+\203\b\139\160L\2099\153\"K\245Uj\229\164U`\175\187s{\221\153J`YA\152\005\246\186;\167\215\157\229\250*\197\144\012v\194k\171\247jKe\176\172j\169\tY\191\182z\183\182J}\149Zu\156U\2505\030\171\133\148\nn\011\153\169t\15051\006Z\146\255\186I\186\237eV\235\171\148e\164\173\224\147\237\189'\171R[\214\017\022\130O\182w\159,\211W)\214\147v\017=\218\222\237\209f*\189e\003a\029\209\163\237\157\030m\214\235\171\148Dr\220\025\206\028\131\1519TV\203\1687\221\220\2041\184\153\131\235\171\208\201\015\1645P\207gp{>\185\202eyBX\004\245|\006\167\231\147\031\244Uj\165A\171\220\0078\184\017\154\171|\150g\001\171\220'78\017\154\167\250*\181\144|v\193\235\138{u\165\210Y^\016o\180@u\197\221\186\202\245Uj\149A\171\220\186\226^]\169l\150W\001\171\220\186\226n]\149\250*\181j\210*0Cp7C\228*\135\229\ra\022\152!\184\147!\242Z_\165\024#\237\"2\004w3D\174\242W\222\017\214\017\025\130;\025\"g\250*%\145,6\155\189*\160\0074\020n\174\200U\018\203\193$\134\169m\022\142\133\1475\242^_\165\"\143\180\016\024\rh+\205\209@\1742Z>FY\t\140\011\198\194\025\023\228\\_\133jq -\197\231\138T\139`\205\021\021*\205\021\ta&>W\164\179\166\209\235-\014\250*%\211X\027\157\185\"m\163\249\192\011\149\244\138,\206Fg\174(w\219\137\"\213W)\137\228\190+\216j\021\007\2070\149\247\138\130x\023\207\241\191\234\224Z\147\235\171\212)Ik\128L\172-23q\161r^Q\017\022\001\153\184:8\153\184(\245Uj!9o\193\173\242\214~\n\149\242\n\234\173C\200*w\237\167\168\245Uj\177\160UN\170+\188\181\159B\165\186\162\011X\229\228\184\202]\251)\152\190J\173>\206*\176\183[0\183\183[\168DW\0121\006\130\189\221\162sz\187E\175\175R\150\147\182BmY\225\173S\021*\201\021#a!\212\150U\238:U\193\245U\136\149Hn\187\225\254\150\185\254V\170\164V\194\199\232\226\254\1509\254V\030\244Uj\165A\171\220\202\202\\\127+U\026+\179\128Un]e\142\191\149\169\190J\173\156\180j\221\007\173V\161\221ZK\180\187Y\181\166\178YY\016\246\129\138[\166\213\222f\214_\174\175R\181$-\237\217\150\189\001KK/\203\149*\203\149\021a)\168\184Y\170\214\186-KK}\149\170u\220\147\134\173\149\015\198\179Ve\191\178\137y\238\176\197\210k\\\139k}\149\202H.\188\227\017\227\173\153\150*\023\194\007\170\220\241\136q\215LK\166\175R\171\015Z\229F\140\183fZ\170\004\b\159\189r\199#\198]3-{}\149Z\156\180\n\204z\222\154i\169\178\030|,\203\157\200z\238\154i\201\245U\136U\007\210.\188\007_x+\148\149J~\240\193-\247P\015\190rW(\171\131\190JI$\007\186\251\171<\019\213J\152\217\176U*\019\194\231\187`j\187\133\182\1542K]\165bNZ\b\206\001\023\222\186Z\165\242 |\232\203\131\152\003\174\220u\181*\215W\169V\146\150\017\207\215[\149\172T\242\131\207\133y\004\159\175\187*Y\149\250*%\235\136\218\003:\236z\005\195\012\144Je\188\170\t\214 \208_W3\233f\015\185\170\245U*2\210Bc\016\224\015\209\146\146\185C\180J%\189\170#\204\132%w[;g\140V1}\149\178H\254\251i\220\191\241\152\213T\167\153\251*\149\251\224Sil\141\253\217\218\026\202\004u\149:\156\180\006\202\198\165\155\141+\149\246\224sj~\226\217\184t\178q\197\245Uh\213H\214\251\212j\246\224\245PT\238\224\181V\169\014>\189\198\214\216\173\169\156\017k}\208W\169\147\146\214\184\163AoWT\173\178\026|\158\205'<\026twB\213\169\190J\157\156\180\006\152\131\208\022\153\014^\171L\006\159r\243\137\174HV\149\227\213u\174\175R\171\164\173\002\250\026\149\219\215\168U\002\131\207\191\249\196\251\026\149\211\215\168K}\149Zu\208*\215\187+\215\187k\149\179\224\147q>q\239\174\028\239\174k}\149ZH\182\250\133\215\149\183\254^\171\020\005\159\153\243\011\175+w\253\189f\250*\181z\218*\192\175\188\149\238Z\229&\242,\029\200\175\220\149\238\186\215W\169\133\228\167/\188\174\026\175\174T~\130O\215\249\194\235\170q\235\138\235\171\208j\144\252\244\219mf\r\179T+\147\026f5*I\193\007\238\000B\187]\182\1442F]\165XJ\218\005\249;s\253\189Q\217\n>\136\2317\238\239\204\241\247&\213W\169\149\147V\129}k\230\246\173\027\149\178\224\195x~\019}k\230\244\173\155\\_\165XI\2363\000\167\218k\219*eQE\rB\000g\207\237\160Q\0265\145\\\140/~99\143\217\"\r\225\223\160H\003\136\128'\244\236\187\195\2296vu\130\177\212\219\148\254\233\159\255\227\223\254\243\127\254\031}T\250\219!\237\184-\t/y\170\151\173\176\224K\170\017\159ri\250\160\224\196\222\231\139p4\252`<\222\012!\149\163\184]R\001IM\242\195\179\215\183\155\247\221b\177\024\160\018Q\003\239\169\213\199\244\002\2290$\2170|\201+q\131\154\169\\\195\168\189\255\208\146W\226\0045;\232\171\212JI\171\244Qa\206\250\160\154]iL\179T\174a\025a\150)d\217\245\020R\198\168\171\020\203I\187\2047\177\129]5\222vT\166\210\014+\b\011a\201\205V\158:]9\150\235\171\148-_\177\213\233\245\246\222\246^\166\250O\172\138\183\213\233\004\243\212\233\004\179R_\165l\253\138\173\208\227\215\006[\143_u\173X\019o0\228\r<u\189\161\214W\169\205^\177\218\025{i\131\1730R\189.\214\197\027\236\012\197x\234\012\197\024\211W)\219\191b\171\023\2462.\221.\006S\25316\196\219\235e\001\1535\156\014\007\235\245UJs\210f\189Y\015\152\0268\248\129\166r#\163\142@\244\212\182\214\226\224n\251f\\_\133bw\136\180\208Y\017=x\225\213\169\028\218%Q\022:\011\162\007w\243|w\208W\169\152FZ\b\004\213j\166\025T\157\202\169]\022e&\016O\171\173F<u\169\190J\217<\210V;\148V3\205P\234Tb\237\138(3\237(Z-4\162\168\203\245U*\150\145\022\162\001dnU\239TJ\237\170(+\209\21616\171w\165\190JU\250\133\004\168]/\220v\189S\025\180\163\222D\128\218\245\194i\215\187Z_\165\022\253\n\002\216\174\023\158\015\170<\217Qo \128\237z\225z\030\211W)F\191\128\224\164nm\146US*\021v\212K\007N\174.\011\215\203z}\149:\156\180&\208\203`n\242\235T\242\235F\194\184@/\1319\025\176\227\250*d\251\195+\182\186\189\012\230\166\193^\165\193>\137\183\213\237e0'\023\246\007}\149\178\233+\182\130\189\012\230:c\175\018b\159\197\027\012\2462\152\227\155}\170\175R;\127\197j\183\151\193\\W\237Uj\236\139x\131\221^\006s<\183\207\245U\202\150\175\216\n$\201\174v{\025\189J\146}\021o/\144)\187\198\233e\244\165\190Ji$SNDNj<7P\169\178\135\015\177'rR\227>\247Z_\165\024#\237\1302x\227f\240^\165\202\190#\204\1302x\227d\240\158\233\171\212\1627\212AV\141\158U*[\246\212V:\200\170\209\181\170\215W\169Eo\162\003\159\225\232=C\149'{j\239\028\248\012G\247\025r}\021b\195\129\180\139\206\228C\238f\242Ae\199\129\2186Gg\2421w2\249p\208W)\155\190b\171\147\201\181\173f&\031Tb\028\178x[\157L>\230N&\031R}\149\178\249+\182B\143_\027l>\254A%\198\161\1367\024\242\1341w\188a\200\245Uj\151\175X\237drm\176\025F\131\202\140C\021o\176\147\201\199\220\201\228C\169\175R\182~\197V \147\247\189\155\201\007\149#\135&\222^ \147\247\131\147\201\135Z_\1654\011d\129\005\220\250\201\188\029\150\131J\155CGf\130\005\220\248\169\251\228f\1321}\149\130}\156}\206`Q\219g\197\150J\160\195\016c\1593V\212\246\153Q\213\235\171\020\228q\246ACEm\164\021O*\157\014c\140\145\208H\145\185\243p\003\215W\161\202\015q\150:\003Em\164\025C\\eT\158\196\024\233\140\019\181}F\244\240\131\190J\1934\206>\191\185\2126Z\205%W\153\148g16\250\237\166\182\211l7y\170\175R\148\222\186\002-\233x\163D\174\242&\1676\174@K:\238(\145\231\250*\181\232m+P:/\188Q\"W\217\145S\027V\160\252]\185\163D^\234\171\020\171\003v!\249\197{\155\146\171L\200\027\21068\191t\238Vn^\235\171\020dq\246\185\249et\243\011W\249\143w1\2469\249\165;8\249\1333}\149\130}\156}`~\241\186k\\%A>\196\024\t\229\151\238\224>\233^_\165*\143\179\212\205/\163\151_T\018\228c\140\145N~\233\014n~\225\250*\004\199C\156}P~\241\186\227\163\202\129c\018c#\144_\186\131\019\201\227A_\165hJ.\176\187[m\026\215\017G\149\250\198\140X|t\183\2184\142\255\141\169\190J\157<\184\220\239f;oD5\170l7\022\129\229~7\219\185#\1701\215W\169U\146V\129\217\206\027\127\142*\219\141\021a\022\152\237\220\241\231X\234\171\020\171I\187\220\173d\141\235\250\163Jr#\181p\236n%k\028\143\031k}\149:Hn\211g4~\255\228\167\155XV?y\235\162\130\169\146\217\b&3\143\253\175\022[\021\171\174R\161\143\176\224'd\128JT\227\0164\224'P~\175\175R\128\222\172r\154\231+T\184J@#\181=E3\189\146\185\190~KF\017N\23573\173\025\234\231\167\159\228\025\252\211\254\028\179N\2468\146\231s\028\213Q[\163<jk\020M\023\1735\176\219\196\\\173\220\208j\244Uj\1651v\169\188\245\147-OUyGv\150\024\213\177[\163<vk\020\014\024a!\168\154\184\170\157\190J\213<\218\214\249\151ojb\136\246\250*E\139hS\029\209\196\021\029\244U\138\150\209\150^\2492\221\174\243\153_&\199\224<5\180\185\190J\237*\218`X;q\181G}\253\166\156Lk\187k3\158\159\1749+kl?U\182\183\223\148\139\133\148V/\181\149rS)QJ,\206&\211\155\254\239v\175\181\211\026J\127\255\166\156*\202:P\179\24143\165\217\191`\167v%\219\204\196\148\204\149\228\240\130\153\142d\227I\022J\146\191`\165\229?\150\177yj*\151Jy|\193XX\185\241\148e\147<&`\238\228\230\0076\221\236Y8\217S\029\2255\202#\188\198$\t\170\185\249\179p\242g\210\232\171TK\227l\131r]\226fPu\156\215(\143\243\026\147,\206JP\215\205\161I\167\175R7\127\193^;\225%n\022U\231z\141\242\\\1751)^0\215\145u\243h2\232\2357\245\216@\159\130\158\253\158G\n7#%*#%M\132\150\155\147\n7'\169\003\014\229\131\138\180\011\202 \137\151\149\018\149\149\146.\214BP\213\203K\234\196C\249\148^\177\213N#\137\151\153\018\149\153\146\225%S\029Q/7\169s\015\199\020\142\243;\210C\170\156\024W\135]\141\242\176\1711MH%7\190+'\190\211F_\165R\026\182\t\138\193\212\141mu\224\213(\015\188\026\211,l\029\168\233\198u\218\233\171\212\204#\237\180\131/ucZ\157~5\202\211\175\198\180\1364\211\145t\2279\029\244UJ\150\145V\130=\151\212\237\021\169\003\176Fy\000\214\152V\145\198\194\202n\159(\029\245\245\155r+\216\213\239H\143\168r\243O\170\242O\218\004t\220\220S\185\185G\1572(\029)\194\030(C\164^\222IU\222I\187\024\203@E/\231\168c\007\165\023\197\218h\167\134\212\2037\169\2027\233\016m\162#\232\229\154T\231\026\030m!\216WI\189^P\170zA\233\024m(\172\235\245\129\212\225\132c\006\230\198\231\247\209\221\228\2168\201Q\157\1505\202\211\178\198,\161\165\220\236\2168\2171k\244UJ\165\017VA\169,s\211\163:5k\148\167f\141Y\022a\031(\234\230\199\172\211W)\154\199Zjg\179\204M\144\234\232\172Q\030\1575fE\172\161\142\166\155!\179A_\165f\025k'\152\20027E\170\179\181Fy\182\214\152U\177\230\194\210n\142\204F}\253\166\188\011\244z\207?\247\228\214\184I2SI2kBBn\150l\220,\169\1422\148\254\020c\017\148\2122/Mf*Mf]\148m\160\164\151'\213\241\134\210\153\162\173\180\243Z\230%\202L%\202l\1367\210Q\2442\165:\235PzP\180\141`J\203\188T\153\169T\153\141\241\166\194\194^\174T\199 \1429\152+\231\243\164\222\b\006\211\229\232\164KuD\215(\143\232\026\243$\168\230f\204\209\201\152y\163\175R-\141\179\r\202o\185\1554\213!]\163<\164k\204\1798+A]7o\230\157\190J\221\252\005{\2374\151\187\169S\157\2165\202\019\187\198\188x\193\\G\214\205\158\249\160\175\223\212c\003]\nz\246{\006\025\221T\148\171T\1487\017Zn6\026\221l\164\014#\148\015*\210.({\228^B\202UB\202\187X\011AU/'\169#\n\229Sz\197V;\137\228^Z\202UZ\202\135\151LuD\189\204\164\142-\028\0110\206\031\196\188P\239\204\r(\149$\168\226\196w\239\206\007\021\141\190J\1814\206&(\014\011g\147\138\178.\139\179\014\212s\227\186\232\244U\234\230/\216i\007\160{\154\1542\179x\193LG\206\141\231b\208W)[\190`%\216k)\236\014\1456\182z\193XX\213\237\011\021\163\190~S\206\000\186\250\131\152gb\222<\147:\221O>\176H-(\194\189\181\224Q\157\199'+\248\021U;\024\011/\024\011\029\140\227K\162`\131^x\r\186:\021o,\145\006\157\191\195\163\159\222\029\253\1683\151Fy\230\210X&\001-7\216\221\225O\217\232\171\212Jc\236\130B\179t\155ru\254\210(\207_\026\203,\198BP\213\r\248\178\211W\169\154G\219j\199g\2336\227\234P\166Q\030\2024\150E\180\169\142\168\027\244\229\160\175R\180\140\182\020\012\206\210\029\003\149\\_\165v\021m0\172\237\006~9\234\2357\229dH\027\231\250\233\030\246\222(\168T]\143\178\t*\185\t\196\027\006\169\147\244\164[E\217\004\165\143\210\235v\148\170\219Qvq\214\129\154^JRg\235I\159\138\183\211NH\222!F\210\213\191)\143\1387\211\145\244r\156:aO:R\188\149`\134+\189\177P\169\198B\229\248\130\177\176\178\151;\213Y{c\021\218x`\229\144u\179\128\153C\212+^\163|\197k\172B\027\015\204 \023N\217\027*\157\190J\149\240\146\153kS\225\216\164^\241\024\229+\030c\021^(s\172\026\012\157F_\165\014=\129\238ZT\185\0221}\149J\244\188\185c\r74:}\149\026\129i \215\028g\199\214\168vL\143\1312'0\237\227\2163\026\"\157\190J\145:8^sM\026\029\147\212F\164qT\207\172\t\170\217V\245\134'\141\141\190J\029\022\236\2009V\245\174'\169\173\149#W\021\213\005\213\028\171\012O\226\157\190J\157>\208\198\1846\185\015Om\152\026Ge\211\016\208r,2\188i\236\244U\168\212Q\155\143Tn\249\186\206\239\252}aghC\202\243\027\147\163:-i\148\167%\141u\212v$R=q\213\027}\149\234/nP\"\203I\221r\152\190\202r^\220\178D\150\147\185\229t\250*\203ym\019\019YL\238\022\211\235\171,\230\181mMd1\133[\204\160\175\178\152?\218\232D\150V\186\165q}\149\165\253\209\214'\178\180\202-m\212\215o\202\197_\216*\179\2047\179\128\255c\237\1501\190\242*\131\241\155\242\240\023v\203`\226\141'\174z}\245\203[\166\232b\152W\140\234\b\214/\239\162\162\139\233\188bT\223\176~uc\021]J\239\149\162\186\139\245\171{\173\232R\006\175\020\213\131\172\255p\251\021]\024\247\nS\157\202\250\015wd\209\133\141^a\170\159\217Dl\222\160\"1u[\152\166\214W\169\029\177\157\131\212v\219\151\166\209W\169\253\210\006\015\178\020\183ui\152\190\202R^\218\242A\150\226\182-M\167\175\178\148W6\129\144\133\184-K\211\235\171,\228\149m!d!n\187\210\012\250*\011\249\131\141\"dYn\171\210p}\149e\253\193\214\017\178,\183MiF}\253\166\156:z\219\001\018\128\169\215\1624\170Ei\162\246\151\208\210^{\162\142@\148\142\252\210\150\019\186\016\1755iTk\210\188\184\011\133.\196kK\212\169\137\210\143_\217\152B\151\225\181$\141jI\154\215\246\170\208ex\237\136:fQ\186\239\031l_\161\139\242Z\145F\181\"\205\031\237h\161\139\242\218\144F\181!,j\158\151\138\189\210mE\212Qc\163<jldQ3\191\164\186\219\142\176F_\165\250\139s\193d9nK\162\014!\027\229!d#{qv\152,\199mKX\167\175\178\156\215\230\139\201b\220\214D\157O6\202\243\201F\246\218\0122Y\140\219\158\176A_e1\1274\167L\150\230\182(\234H\179Q\030i6\178?\154e&Ks\219\0206\234\2357\229\226/\204J\"!Yz\173\nS\173\n\139\156\138\166\197\189vE\029w)\221\250\197\217i\186\024\175ea\170ea/OX\211\197xm\139:%Sz\245ks\216t)^\235\194T\235\194^\157\214\166K\241\218\023u\158\166t\230?\154\233\166\011\243Z\024\166Z\024\246\135\147\223ta^\027\163N\223\028\187\224|\248\194\250\227\151;!\254<!nTg\177\141\242,\182\177\011M}9_\253^\197\140\213\196\174\209W)\022\154\233\n\230\243\202n\253\212bw\023\154\215\002\181VK\205\140\163\014W\027\229\225jc\023\154\195\162S\181\\\025\000\012\rN%\249\011r\155\153\246\250~W\197+Q\213\217\149\128\149\225I\161\205\129\172\023\219\204C\011\165\015~S\143>$\229|y~\1492\151\249\212\153\151r\141&h\149\185\016\183)\153\011q\1496*<\167c\174\149\029\178\218\188\177J[\0191a\003F\237j\150\021\181\234\180\204\177\219\178\222\199,*d\186\181\183\255W0D\213\024g[\171\025\004gsO\183\2291\183\192\231\202\201\134\151{I\245U\242\182\148\164Wl#K\235\183\220b\186*\198u\156\182\223R\2010\177\211\215}\250\240\215\2506\165\195\129\213\128@\026^\192\"\147G\238{{OO[`\169\195\237\172\168S\198Fy\202\216\216\231\193\19712qp\192\200\192\\\001\1526*\160\002\171X\029\170\026{ i\2441\175\177\185\001Zx\001\170:3}\204klN\136\214\166\138\138\167>4\162w\173\169<kTo\164\015\r\218\029K\026SA\2454\250\224\136\028K\021\149\155*z}k\131\025\186\198&\132-|dt\191y\027\237z\238\209\148\237.\203\222\247\214\143\030\011\138\216\149\2368\220\016x\167\195\235\1374NOD\157\2195\202s\187\198!\240R\135\215\017i\156\142\200\208\232\171\212\n\188\213ag(w5\147\249u;d\175\b\218K\154\141#\021z?\002\140\246\006\168\252\234\021\155@Yu\171\174l\240M\b\175{\208\184\221\131A\181\196C\240U\b\175w\208\184\189\003u\216\161\220\012\016\178\201\137vo\151N\165:\234C\240\r\b'\220\153)\161\186\223\195\022\157\238\022\161g\168\140\028\240 \238\209\156\232\212,;:\135\209c\193\209\169\200\206\147\228\225\221\197n\128\234\221\005F\128\170\131\165Fy\176\212\200\195\219\140\221\024\213rF\140\242F_\165\\x\1591\029\166\157_\201<{Q\211\142\212\206Q\003[\250\2298\195[6\019\191;\197\011R\193\221\168\233\158r\162\206\162\026\229YT#\143\216G\012Fx\001\248E\245b-\193\202\029\160\140\228\014\208\231\172\173\195V\250\224*}\240\152m\200n\006a\133\155A\212\225~r\151L\132ev\018a~\007\134)\173\152=\205N\030\225\166J\167T\144n\131\235\029\1875\222\233\"\234\204\189\145\015`\183\219\206Ik\135\219\r\023\014R\173\188$l\183\187\130|KIn\t\165->\134\166\147\195\253y`\140=\134&\143\145nw\2238=zu\166\210(\207T\026\199\208Dq\168O\223\003}\25018_\011\006\021\208\206\143U\188\018U\157#\208\175\031c^7r\219\214\209\011\139Zi\197\188n\228\132Eo\1704J%<\163\234\134\169\223\214\247J)<i\234X3\154\026\131\210\136\152\017Ez\247\204\1552V\231\216\141\227\022\175v\152\029\186\220~2V\127\001\031\191\155\172\244 \170\129_\222\254z\1369\214\223\255-\024\159\183V\252cjc\146\150\159=LfcR\169s\18721\168\216@V\2096:\147\138\209\232\188\189\031\197\173}\023~\251\253\021^\209\142\243cy\153V\182\183\233\215\203\172\170\029\167\247\199\194]\198\191\255G\247_\127\255\159\255/D\169\219\235\227\210\223\031\236>\205/T^#\170cz\001\207\218#\155\150x|\215\254\230\139lS\006\225\173\154\213\255\139`u\026\242\004\246&\2402_\190\255\152\167\011_\016\244`\162I$oO|\188\127\191\207\223\245\231\221\206l\249\208\208\147\131\028[\133\144PI1\144\139\141L\014\237\241\235z\228\151\246\250\191t`\216?'\173\180\191[8\251\144\159\165s\176\207\135\168\148,f\186=w\017wGD=\147\193A\252\158\203p ~/\218\227\188L\191\231\139\204(\029[\028\216_\0151\026Q>\1644VR\217\014\243\163;\241\183\159|\185O\189\204E\162\206\219\235\127\152T\023\"\197W~\181\253(?\245nQ\221\156\146\173\185@\250\138\172\189\149\247\184\012|\185\245\243\1947\201Z=\216\183\155\000\137\223\159f\171\199v\253\223\166a+\230\254X.|x\235\231\243\153\185\132U\180\209>\128\169\254\011\160J\201\177\r$n\251{\227\201\253\183)'k&B\178\219$\229\231\251\190\203o\243,7>\000\226P\rlp\178\132^W\236Z\241\164\236\138\137\168\216a\173XD\245_\000UJ\142\027\254\020S\177\017\146\227&\249R\197\174\156\152\138\021\169q`\239\239\"S\217a\179\253\156lb$*m\187\199It\004\144\159\179\246.\250'\151\247\199\137-o$2\023\255\196\213I\177'\206\006\163<3\"\185\205)\218\251\231\028\228\000\196\210L:\252t\154\174\242\163\1618\027\144\168\214\164\171\235\245*r>vg\"3\200\143\155\222\248\149-\236>/\237\239\127\213\237\148\rkZ\249\187\232;]\143&\246?e+\226@\153\211\136\240s\199\135A~#T\183$:+\025\132\206iK\028\194rr\t}{\157\175b(\180\240^\222\159\168\165q^\206\236~\2239\215at8\131c\213,|p\153\006\190\0255;x\238\024e\227\151\147\139\031\219\011[\022\017=\151Y\183ff\179\223\147\221\145L\216\203\229\217\178\194\001EV{\191\232G%\156\209\134%\nv\023-\218\2538?nr\000A\160\211\246\186Lg\142\252\154m\241c\131v\231\146\002\234b\211r\0251\215\b\026\192-\218=\240\r\182\235\144Y\249\132\249&\154\254/%\213\197\230WO\190o+\200\007D\234\182g\011\150\r\178fo\169\164K\169\232R\159\212\r5\174_\186\177\216\t\171\202\251C>\249\179~FR\127o\t\181\011\006\n\248\023\179\000\237\220\193\018D\200\241\145/\252\"\006\196Z\005\188\209~\243\018\254\171?\177\179Y*\144\141\018u\177\021\134VX\"\"g\238\132\241H)\188\149\193Evt\014\235\243\217::\146`vp\178\177U\157\158\251$4\254\025($\023Ax\020Y\171\151cB\028\149\232\231\2546]nR\140\206\157b\244\207nw9\164?#\128lM\195d\227\146\231\237(\rSC\145\147\236G\222\254M\231\012\027V\172}81\030\020\157\222NP>\248\250i\233\191\228\243\181Z\242\175\157Vn\1894\156\247w\136\183\247B\255z\240\027\249\224\179Q]lk\235v\231\1978\143\210p\156'oZ\147\026\180C9\160k\007k\239\147\\\198g\023\149,\223\208\167\208\025\233i:\245\139\234an\217\213C\247mw\018\021\1692\192'[\134\027\253\136\135\021\174\030E\004\158\171\142\216\234]Ht\230\227\211\226\027\023S7\179\152\210\132\161\133p\167\211|\019#\131+\002HTge+\240\246\198N\226\222\133\2406>9}!\196\180\149\1898\190\244bbR4a\151\199MW\155\242a\015\157\181\183\207\135\028\168\168!\023(\152\139\140!K\021\133\211!]\136Y\006QK\"\158\205\193<\158\205\138R\207f\168.\153AA\208U+'^\150\007\221\130\164T\147W\212j\030$\178\192F\140g\127\198Z\199\246\206e\024\219=\173 jG\230\250\187\172u\225\250\183\027\002\026d\251O9\026o\247\017\237V(\1665\182g>L\143\1790\234~\2282\200%+v\178D\204a\127\206\203@\206g\148I;\202\218\145~\193\174\215\147(@U\019\012N\165\227M\183I\r\210\196\243\190!\184\204\192=\187\194067\176\215\211\003\147,\157\206\233t\155O\236\190\247M'\007^9}S\011.\026R\007.\188pZnw\245\249z\017{\022z\188\185\232\198\235\\[\132\235\224\018\152\184\199\227\212M\162\128/\145\t\164\131\188\221>E}\239\189q\239~\187V\182w?\133h<\167\223\139\0175\222\t\188\236\243\191\221\142\140\224\012\207r\226I\188\213\195&q\231\195\244.oK\192Qo\016\253~1m\030\007\174\014\237\237q\149=\023\2091\189\191\201Y\185\246\162\186\208\"\169\252\247\255\253\207\191\255\151j\n\133\163\031\196\223\197\002kuEY\197\018\235w\232\139\145\237\233\223\212\212\221S\187ll\131rKCF,d\144\152\185\206\197\031d\144\162\172b\133-&\146\025$&zr\133\248\003\197$e\021+\173\223\197\1880\164%\150\"K\241\007iI\198*U\217R\162\205\188@bU\219V\226\015\020S\156U\174\182\000\\F\"$'\150\227k\241\007\201i\206*\215X\128\139\236\005\003j\226\1855\226\015RS\148U\140Y\191\203\140c\180\198\194-\159\138ig{Bg1UC\238\177\2104Y\0278\019\171\187\184\2235eU\235\237:\018-\233\201\233\023\024\2476\216\150\012\182_\171\017\147\232\185^D#\161\230A\254\219\021H\213\158\179/\1396_\197\018\143Hv&s\213\231\022p\0290\153\005\252\221+\160\241\011\144\253)\164\1281\020\152\023 0\237\t\156Zf\138\014\201\019\127s\179D\135\229\136:1~\157m\207\210*\162\199\157\136?_e\222\157\170N\141\031E\175\195\023\017N\145\138?_D\162W\145\204\020\145\2210_FLfg\226\015\144Q\248U(7~v\019\214\223\220t\213a\201\170.L\025'U\253\205MT\029\150\166\234\210\248\213IR\127sST\135$\168\1862E\220\244\244779uhj\170k\227g/1\253\205MK\029\154\148\234\198\248\217MI\127s\019R\135\165\163\154\025\191\130\201\232o@*\170;\131\229%\162\191\217i\168\195\147P\221\155\181\001\167\160\191\001\t\168\030\012\030\149~\254f'\159.\152zjn\192\200\196\2437;\237t\193\164\211\028\182/F==\201z#\193H9J\188\180\199\218MB\243\185\199\183g\204\154\148\230\207\030\223\030\1677\025\205\255\229\242\171\218\230\2314\255\214\031?\221:H\011\1877\212\020\180\198\209\187\007\199\134\146\230\127x|\219\241\155\138\230\159<~o\243k\154\127\246\248\182\2277\r\205\191x|\187\209j\024\205\191z\207\208\030\2105]\224\025z|{+D\211\211\252\187\199\183\183d0\145c\030\203\252\189\127,rf\244k\205\022\255\012\204\15931Q(G\193\020D\204\140,\143\223\\\204>Q\168LL\254\137\194\142ob\014\240\210SH\225\225\211\194(D\209\2025\004\n!\026\"\022\016\169\196*\195M\238\136'0u+\230E8\183!\198X\189H\253\167\195\0261`'+\140\181\023.&\221\142\252/N\222D'f*\212\2206\138\232\213\131\164\016C\2511])\000o\239\143\247e\250\1600b\021T\238\144<Su%\223\001\228bqJ\204$\243\203\133\242\169N\174\239\220(\171\229[{b\018\151]&\n\148\181\236!\134\250\140\170\195.o\143\203\215O1-J\129\138\182\02334\020Bd\188\233\167\152U\190\139\158\213e\158n\020V\244r\196\253\t\015%o\177n\197\002\215;\167 \141\152\t\024\228\132.\224\1326R\204\146=\150\143I~,\146\246\250\174\019\195\248e\016\019\004r\134\140\002\246\173x\150\236NA\196\242\189\1548' \242\219\144\011Y\179c+\166:\250y\162\"\166\023\163\132\249L\000\134\131\156\157\237&\213\031Q]\025\177\006r\157\229t\152\250\176\232\249\223\219T\012$.b\001C\243\228^\156m\141\005\192\175\170\137\161\170\1871/\200B\132U75\173\149!nm\160Q\139>'\246%\229\019\204f\139\213\137e\253\141\180\022\145\025E\220\1962\251\253\2452\028\026PHn\020\194\196B\156\232\182\245\031\159\211M\206B\201u\133\136Z\194ik\025\133Q\198\031\232\147\218\165\2355\209\178\030zU\172<\143\137\150\244\225\171fmi\174\139\130\129gg\225V\157\006\172\201XE\132\177j3\212\019b\245\t\214ZFg\148\177/p\220b\170\214C\175\138\189\161\184\207\226\199\b\186\224Uo0\244D_g\029\196\244\211\210\159\132\160\028\245<\229\188\223W\r\014j\232EM\\c\253}\213\024A\r\209\148\156\231\203\128\139l\000\173\194\015\196\221\136l\208\127\232E\220\192}\173K\189\171f\226F\220\139A\130pV\245\020\174\187^<\253\139k\231\198\201@\206\007\255\234\217\021\227\228 \231q\149\011\158\207=\tz\207\149\255\2287\0213\179\173\011\156ob\005b\026\196\252\001\0180\027\213L\\\238\006K\185\250\241\193C\n\149\021\176\151\199t\255\146K\020\221|\242\031\192\1981\019\209\186\229D\173\\\138@P\164\020\"\153Y\231s\026\228\194\2524\136~\015\242\1767\026s\028E\175%\235g\030\184\181\206m]\215\026\138\172\219\222M\225\186\232\173!W\251\tD[\216\t\217\207\139\250\r\191\249\001\188\139?\146\226p[\165?\232\142\178F\164=\162i\163\025\250\219Z9\253\196\146\195A\172A\245\243\227\"&\134\196\196\176\191k\161T\219f\228\246\1352\179\153I\203\134a\2257\181\149i\022\217\154\203\145\237\015\177.G\235T\142N\186\238\228\248.B\224\209?\223\144\232\183\023*\254\233_\254\227\223\149F\1902\029\252&\148\181\003\151\175:\188\245\252t\155\228\188\156oFw0u\020\252&\240\"\244\223\0236\240MJ\164\n\241ob\228\160w\031\234\b\187Y\235\196\253\219i\251a%\021jw\014V\143\217^\143\163}\255\"+\176\129\137\152d4\175*l^%F\145'1o\208\207\151\219]\180\195{u\237\228d{cX\001o\027QL\195\246j\227\128sG\219\239\205V\143#\019-\240\229\200\167;^\149\165]\149\006eUc\1735\217\241\190\189G\180?U\177^l\021\223m\132\205\017\142\190#\1723[\219\236\234F]\183\189|_gT\194\002\022|\151\025\016\143\196ul\252.\196\219\235IL\155|\024\207\200\189\249\218\190\249\209e\168\188'W*\222\174\147\203N\210\181\234@N*\025Z69\184u:\249\183\210Xu\186S\019\184Nq\001\011\190\203\164\174\005'_\160\183,\216\226*\201l\015:\249\149hM4&\137\152\138z\235\212\200\007\140\220\rV \143\249\226[\198\161\199|\217\132\196\180\213\227\204\247\025\029?Trn\196\189\198n\\1\237 \178\239 \186\018\189\028\225\203\014\216|\253RI\0311\187vk\242\234\236f\218V46B\131\220\231\213\187\207\226\000\221\231.\196\016\161\191|\161\004\018\250k\019\242B|\241\021R\235f\150\141\138\1328.`\193w\025,\196q\029\027\191\011\137\016\023m\1602R\238\227\185\179\015$\173&r?\220\237*B\020\001\136&\253\198\151\159\211\182\231u\247\163}\021\182\144mA>\216\172D\204H\157\248\245(\223\000\192\252\175\200%\1770bL,9\185\237W\154\182w\217\006\154sL\190\t\185a\130\130?\223\138H\210Ln\175\186M=\214\180\1649R\237\191\253jgP\181\255\222\132\138VDM\239\220\177f\168\0316\\\217\206\199u\n\202x\207s\005\030egH\190+\171\160\213sg\223\206\177\149\207\199-l\197\178\026\232\134\248}X\240\2536\154v}\223\0069\128\003\169F\214~\240\211\207m\242m\1871\185I\1805\027c\r\146\247(\215r$\177k\197\216F\0145\156:9\244k\231b\255\249qQM\248A\014x$\179wC\182\243\179\164\029\178\221f\237\000\215\021\222\191\179\225\155\012o\229\006\2193\147\015\200\204\235\206\172b\146\142v{\193\253\246\194\238Ie^\235\200}\211\n\235\2226\255\202\018\151:\250\212\210\162\142\0275\221\158\189G]\163K\255*\241i\"Z \201\201\220\226\206~q\131U\220y+.\183ke\246k\197\238\151fE\203\196\136e\171\234\211\1278\157\203bX\027\011\189{O\228\130\203m\020c\143\187\232\1273\217\146\177-\177de\219\241;!\1806\0227\209\004^\006R\169j\223\1673?\017Z\171\015\222\143\211BK\213\237 \238\1432k\245F9k$F|\148\150\156\242\215\239\248\168]\242\130\208\003^\215\216\245\203\218E\190)a8\192_p\184g];\178\2546\137\181\t<\197\231\165\188\200AVaw)\247\183$\182\028\170\159\191\223\155\204\250\131M\028@\226;;\159\153\199\237\236A]\198\145D\191\178m\159\205\026\135=b=\022\175\215\1531\219\232\252\224v\210\190\179E\204\145<\206\250\225<wWh\129T4\204\146\250\181\011$[\224\221\196\243\254.Z\228i|Z\015\238\027O\242\148\224\156\016Nfl\143\143g\229DI_\b\199\237\231J\176XJ\218h\131\159Br[\160\132\005\180?\012\190\163;\244\138\162\007\179\179\024b\017\244)\020fyC\209\127\248tf\211\153\232\223\205W\209-\248\210\239:\131\017*\026\222\245\177\176\179\220Z\199\196t,\252,z\245\146\028\208\183\216\000C\203>\238\147X\226>\221>\196R2\012\226\187\023\168\187\024\183\187\216P\170uQW\137\022\237\161\202qrw\177\240\027\209a\019u\176\167\169\219\127\180\238\251\243\137\024\007\252|\156\222\197\000j\127\245Gu/\229f\174\251Q\239\182R1\244_\255\243\159\255\207\255\254\143\127\215{\245\222\228\203B\235n\1766\249\127*C/\001\245\196DU\132Z\163\212\026C-\005\213\238Q\182%\235\230D!\153\028\012\205\012\214\148\205HP3Srrk @^\245sO_\142\233\021\228\134\020\144Z\005\164v\001\006{-\161\000\239`\156\198\136Z)\212\029\020\238\029h\242\170_\130w\160 \225;(\212\029\020\238\029\172\236\181\132\202/A-\001\145edV\025\153S\134\201_K\169\189R\212\186\016YHn\021\146\219\133\152\244\181\140\006\142\159\233W\196\179(\213\179(\221g\161\201\171>\243\239A\190\156\1630\216=\020V\t\133]\130I_\203\232\192{P\2510\1957Q\171\155\168\221\155X\217k\t=\242\1885*\252\192k\245\192k\255\129o\002k9\003\\[t1\133ULa\023c\241\215R\184W\138\202\151\129b*\171\152\202.\198\022X\203\025\159\191\171\169$\249~\207s\2474\242L\228\227xf\187\242 \250\158r\211\143\0228i\250\191:=`=\163\183\210\210D\158\138,\168\137CU[\174\001\234\198Ow~\162\248\169\203\215\187\1731\133M&\219eR%\14792z\1755\172RH\135\207w\129L\t\228\174\128\218e\237\t(n\177ss\197-\028\174\218Z\rP7\227\203\157\175\006\211e\233\242\245\174jLa\147\169v\153R\201T\142\204\186\167\154\148\217\180\234]\171RZ\181\163\165\183U#\245)]\181\217\005j%\208\184\207\021\190#\149\024\014;WM\189\148\204\189\145\019V!\245\238\150O\191dJ\163\243\252R\204~p\\c\023z:\168\154#\017\147\201\174c\140\247/\168*\228\204D\241\188\149^\177\007?\178\222\142b\130w\017\171\138\128\134\234:\028\158\"\131\018\225\128oR*\185\178\228\169\162&\011\196x\2227e;\154\001R\025\180-O\153Q\202\200\183\194T/3&c\148\207\140\161\178\140\186~S\177\015\137\192\185C~#C+\165\155R\162\175\223T\248\131JH\022Y\1816\193l\019L\245\245\155J\007\144 \146O\148T\245\204'*\019\169\2357\149\029@)8\179T\207\204\162\210\145\186~S9\002R\129sLUn\183VnJ\133\190~Si\002TB\130k\213\218\004\171M\176\212\215o*W@\130X\2221\0057\213zS\173\244\245\155J \144*\146\129\244\019xf \149\187\212\245\155\202'\160w\192\247k\228\"\149\192\212\245\155\202(\224mbY\169\170w\215\223}\159\233\2357\149V`\223G\242\211\170\182K\238A\208\233\2357\149k`G\1313Uid*\149\224\212\245\155J7Hl\019\217\1664s\150\202x\234\250M\229\029\204\255)=3{\169\228\167\174\223T\002\194\204#\242Xi\2291\149\007\213U\b\214\007\"%\190\245o\187\156\149\te\022\172\019(%\187V\232\0271i\169\223*B,Y\152Is{7\251T\145\249h\172\217bu\171\181\234\158\212\251\203&\214a\193\251\177V\254lA\157\233\171$\003}\027\249\146 W\239&\027&\151\134\185%\212d\190q\182\156\190\\Za\222f\005\242\144Z5\1375\222\202\162\213k\242\253\241\153:\131\144\028\142\031\172\225\184\169\198\182\233\152\231k\133\224\188M\2219@\213h\129P\249\194\148\189\127\202\153Pzn&\218\024I\171\183\178\193\248\199\213F\167\173\177K\n\"\024\251\1426\142<\149i\221\241\004R\228\1756#o\221\173\127\240\188XSH\003\r>\\)\165\220\006/\230\226?\197J\016\b|\\\229\244\154_7\213J\228\140$\002\247\\\203\245y\138\169\207\248\000\152\205\202D\141\213L\223X\230>z\189\229L\239\016\220\235O\250\136<c\177v\253\193B\175\146\157\247\1801\205\212\2084\183\158\001\162\189a\231'\251\201\225\155\148v\025\191\174\220\1934\b%k\003|67J\150\211HGy\130\221\128\151\239aV\157q\015\153\128\138pNDC\172?\024w\226\203\0001\133)%Fx\005\236Q\145\130\233\164\176\255\220\217t\130*\199\133\172*\025\2262Z\006K\021\190N\238Y3\202\245ey\160(j\204\142X5\n;\181a\n[\142\243\248\165\127/O\t\244V\\\149\202M\127\152\029\207<\230i\212v\158\2196\147b{BX\003?\203\227<\127\004\158\165\130\172*\012y\150\128\140\247,M\157\014\182\2304\207\215\1285\n\178\170\244\1365\128\140g\141\1693\152\141\011\154C64\247\154\",\005\230F\n\220\216\163\241\236\127O\239\191\217;\030\151\214\239\154\223\029\028\015\214a2]\159\251\1391_\182\144\155\\\130\201=k6\168\183<\223\168O\186\212\243\237\160\133\174\023\1876f\184$j%\164i\217\153#\190\211\207\162_\181\024;\178\003~d\2247\233\002\182wE\198\214\130\001\223\132\203\214~K\230>_\245\137h\250M\011\194i\187\170\253#Z\237\245\147\228\014m\181\171\030\202\154v\159\201\130\174\130~\026\018\160\237\213\1787\239\145\232\031\241\148\224\145m\222Z(s\234M\158\\\240\022q\247]\251:\199\236\203\248\027\253\215`\131n\b\002o\162C\027\247\246@\148\172\233\170|\015\127\031Ge\000\004\189\201\142\132,\145\167`\240*\218[\253\163\216\170\181\223\194\004\234\182O\218\200\183<\226\132\141\218\237\205\\\248B\253\170L@\215p\159\145\210d\142\161k\025\200\139*\186\188A$\154\022w\184\213p\245n\215\235)8\143o\222p\016nr\244\t\197\227\1557>\236\203\022zK\232\205\031\154b\153\196M!\155pe\b_\217\180l}d0\216l\192\170P\2397N\241\197=\130\236\198|\030\148\192v\206\n\160\193\012g\161$T\181\130\n\029\144\128\220\n^\255\157JBF%o\232\181\128\030\138B\199\241\224\002\236@|:\159S\128\153B\215\023\194\128\190\219\127l}\183\193\027\018\163\164\181\000\171[\136\151\176\247\014\007\160w\216\143f5\196\136\248\163\236\128\157\195\001\169\b\232\185Y\191\175\252g\143\145`\171\177\137\207M\177\219\003\007O\144\130\153\247\136\242\149'C\252\028{J\240t\210\240\156N\"J\219\192\214\172\018Y;{G\t\178\209\154c\n\202\224ue\2058Q\143\218\152x\130t\172\249\167\160\014z[\230l\212\250\250(>\207b\254\190\242\173\169'B`\157\027\001\020\204\190\217\237\175\199\244\254N\217\224 V\rk\190\137\020\217\143\163\006T84\236\218\222S\181sQ\219\250\163.\027\185j\142\240\176\131Ru\199\028\144.\183\018\006\187\029\169\2491\235\247\149o$\012\156-\163\012\224\218\t\003\167\175\206\011(X\t\003\023\208!\014\240sd\192\018\026\147l\252\162\141\027\212\160\163\023nvm>\143\211\029\2466\253\139\215\237\226\213^\251!\1743\177\207kkf5@\246{N\1881j>D\247:t\156Avc\243d\246\r\184se\188\003\181\228\161\247|\0169\141!\239\245\241>\196\219&\182\172O'\193ZC\156\150\245\157$X\137;J\225\134\137\143\004%\\\015\227\001\241\004]\209\159bm\016!&\224\244\129\158\217@(\169\183L\018\164d{\027\141\187\217\134\205\129\181\b\181\184\185\158\194\001\246\002F\127F\199\026\189P\203e\155\196v(\187\155\rn\b\190\130gH\157c\030\016r\141Ln\197\177\027d\1303\142\141,:\193\199T \026\216*\211K\"=r\027/\137\152\195\0069\005\244\157X\148\2178\220\180>\1504\154\214\198\145R\177\018-w\226\171\248\003\127W\199\173\\\229\023Q.w\011\242\181CR\249\193\163\251\164\206\245\030\213\167R\228\127 \224L8\177\128\188\241_\211\237~C@\249\n\026f~{\187\204w\141~\014Z\132\204>hy\178\138\150\159\175\242\016\018~Gn\166l\167K\191\248\247\242D\136\1423\235N\012\249\181n\185\174\tu\176\002hz\211J{\217\229\r@J\005\192\238m\135OP[\030K\"\218\136\233\"<\250\246v\150\031\127Z\016\168|\209j\173\187\149\003P\164$`\207\182\017'\1860\222r\249\133\221Q~6\2121\254Ywc\171_\127\018\152\225\209#\245/w@)T?\211\184\164\197^\166\178LK\210\214\253\208\006\1919R\153\134|\159\151\239\238\193\187w\007*_\025\214\199\243\"f\137,?\201\143\024\216\223\167\241\172*[\225\163\230\129\189\030\162j\247CS\228\027?\234\187\tp\1452Q\203\147\174hT\179~\222-\132\019\190\168?~#\158$\018\239\137p\195GG\"\250\237EE\0023\168\151\153\230e\253~\192}Fp\\\190\207(_u\252BL\030\183\246X\157\148\004\138\164\135\150\2505i\207\162\175\240PsV\004L\244+\174\"-\169\140O\2252\229\004\162;\004\027\172^<_cS\003\141\128L\129\196\150\022\234\139r\226\241y\213\244\020-U\222\129pR\000\016\021\189\131\249}\189\151\001\017\173w\012\2300i\163\191Zu\211\159\192@@\162'~\193\127\237\148\196\251\130\181\025\233\254m-\015\247\252\190\140\144Q\023\1559l\031a\139`\002t\174\018\174|\165&`\161<\199~\025Y\031(\136\171\139E\205\014\237\207\249\2448G1\001zb,0\209Ff\169\001\141\187\175,s\150\189\"ik\251=\202\175\142\129\207<+\218\142\247\236q\195~/\219E\166u\228\215\202\200\029\b\164V\169\218O\177O\132\250d\022\191!\0258c\237;\159\215\239\173\004K\235\218\227|\158\197M\139\202B\244\250\246>\157\006\014'\224'l0\190\201'\241\b\140?\015\1368\177\223\162\029Dp\163\252>\030W;\018`D~h?\023\206\2447\191\189\006\247\tKT~\177M\146w\229g\150|ks\t\251s\225X\183/\209[\155\215Of\233S\231\209V \207u\183*\192\145\194\128AE\203\174\226\238~\169\003\027\194e\149\014\188{\220U\178f\242\227Q\017\182\138>$\159d\000\188\217:\023\217\209F5\164\157\128\237u\203N\231\249v\015\021\186\246;\017\172\020\002\196\153-.\236\011\148\210m\249\148z\182}\171z\179\180\210\208\n\192\244\147\157d\143\023k\213r\254\012\194\173\214\130\0281\137\185\014CD:\238\248\253S\030\221\bB\139\131~\210\172?\138\246X\030\026w\154\206\019\210\229,\018\223\022\1347\200E\1388\157\172eY\148\248\247w\142\246\245\139\172\221\000\146\240\138\255\022\249z\224\186\254\144\131\0032~\218\240E\187~\242A\127\173\204\198\235\178\244/+\190\212=\206\233\018\170\130J\003\003(y&\228\162\143#\146\179\242\024\172\217\143\\A\018z\193\148Km\031)F\133\186V\204S-P\237<1\162\199\193Ow\0222}h\247\167\218}\189\r\\\245S\209V\162\224\207~f\135\244f\139q\255\024\164@\209\015\186<\168\152\247@\2423\029~\176\151I+\186\154\023=a\129\221Q\153*I\016(%\000\217LT\167\b\137{\\t\150r2\252v\251~?\138!2\158o$\230\205\195\172\018E\251.[,\190\132TV\024*T\154\182\200U\223\1765\022j\149\169\028{\b%\219\"H\1726l\218\026\158\160Y\030p\021kl\203\002z\150q\152$k\207\143\254\248\182\027\233h\236?*\149\141\212\233\1277\141\129x\166\001\027\181o\201\020^\014[\012\000\158'\155\025o\133<\149_\173S_\026w\239@\196\141\217\157\217@\1509\163\250g\240F\004\157;t\224\134\170\195\222;x>\232\011\228\1952XL=\131\245\230\179V\245d\199YO\030+\160\000\n\176\220\000*#\245B\024\137z?\142\r\224*\150A\193\140\234\001\017\237K\230x\r\131NR\1651\213\236\151S\144u\r\023\149EV\184_Zi\215:\017KV\165C.Xyu\142\133\179[\223n<T5R\215\160y\242.\130U\r\025\220\2245\237[.o0\166\150\189{\145\199\235\240\158\187\0197{S\167>\252\215\247\156\015\024\160\223\021\194}i\245\241>\173\022\001\230\1742\026\"\027ct\229C\140\250\240\156\151Z\0113\235\148\249m\127\157<\025ka&\003\152[^?\144\199\241In\245\245;yn\017\133YG\131o\190\150,\002(\182\216\t\190\180,\019\160\148OK\195\207\167\174L\171#\240\207\1841\238\002K\211u\t\216\215X\n\207\1781\141\n\208`\198=\170\133-\162w`\213\006\2083\168;\171\n\194rVuA\130\189\232\021\156\238\147\187\156\2434\127\216\001o\234\127<?[\012\246\021j\254\196\019\243\145\245\184\205\129\211C\180\230\176\225\196\226\253\187\250\174-\nM\\\201\176\1394) \031A\2036\154\252\250\000x\131M\190C\030\024\164h\245j\246@\172v4\229\014\"\230\217\154jG\233OE\195\168zG\197\172\1604\205\019>\135\0225\026\182\131#\150J\154nGG.\1934\253\206\160\006\149\205\240\180\217\189\177'\136\175\207\134\172\248q\007\017\021\207\014;\138\168x\150\236\168pM\178t\219\026\199\250\015\248\201\176l\221~\135#\242\245\149A\023\241,Fm\153$~\0233t\183\027_\240u?V\181\231Y\012\225\145\134\154\213b\030\235\129\204_\177F.\137\247X/\128\177m\014\204\250\174\209Z/\143\229\"\006\239\216\210\144\250\030\155\189u@r\215\127\139\147\232\205Vz\254i\182\209\012h\250\152\030 Y\183++\000@\242\167\178\170\000\019\223\000x1\022\226\239\234\208\208?\184)Y\025\190fwx\246s\212\135A\222\022~\"\214w\187\228\217\203\137\194\203\249\141\229,\183l<\186\247e\022n\134\229\236.\179V\219\029\026\194\201\001\249p\206\150_\143\195\139\138\224\151m\176\t\234\170\150n\206\186Z\183\142g\134\221\\\211\138\222\134\152\031\149\223\147\019\246\254x\200\135\255&f\228\150\233\023\028\168\029\211\171\131\194'\004\020\193t\237/,\223t}{AW';\233\217\024\145\155\139\194\1863\194\022di\166\027\159\027~\137u\221~\219\155\016\\7\237\019\007\137\153\217\167+0\188\134\218g+\148\232\185\244\"\179\234\0150\005\242x_\180\225d\223\151z\1624\128\170\158[\030\136f\166\175\219n\254\188O\136\019\244\235\134\177\213\245\197J\170<HN\190a8L\"\031\220\233\197\169~}\167\248O\233\221\186[;\022\223o\027\179c\t\238\162\030<5\191\161\197\170\243C\158V\018\244\158\209\001\162\0149l'\017\175c\r\184\224!y\162t\231\028\193\165\230z<\237\182\234m\011\133%\252v\200\219\235t\239\143\162\213AZ\252a]\163\144\183\248\022\220\0121\152s%\235\134\189;:I\178\003V\1783;\130\240\173\233\004W\162\150\223\030\248z#gJm\1329\01714\198\143\196<\143\007\178D\152Q\007\230\218S\212\196\017@\176\196;\187\142Lx\212T\146K\176\196\2516F\143\148\024\218\200[\014\221(\183\016\244\252\2080Z`z\174\136\251\179-{CoN\162\000\011\236\220\159v\001\169\192\"\016\215\235;1\131Q9j\005\0042S 42\149\163X@#\135F\195\196\\\193\198+\144\017q\004\181\132\151U\"&\174a\244*[\161\011,qS\216\164x\253\236\011\199\bo\180\230\217%~\133\198\212\131%z\199\178\247\012<\204\014\220i\138u\151e\191\026\016\233\145\194\017\175\234r@c\1361\004\n\148\014\216w\193y\187\143f\248\2334]o\019\210\179\225c+z\001\234\219l\198[\0284g\148Gpl\175\203M\236]\237\128\004)\187A\163>\145\231ERjlX\222\014-\0173 \134\161\192\214\245'=\243\232\214\016\143\t\207\210\027\127c\005so\171\243\255/\178\133g\167\236\222\234\175\r\194\140\210c\200\213X\247\012\158'\190B\012\167Y\181W\138\026\164\226\132\198#\168\131\149\220j\192\0307{\142#_\127\216\157C\254\007\159I\239\238\"\255\255Ctpl\164\171\159\131&\208\156\177\253-S\136\254zJ\199\222\215\157\239\183\227\004\015\139\179\195A\r\186\248\157\250\150BvH\228\147\237\213nB\252\229\162\236\144\182\242\196@\142\252\154\237/q\2027;\016Pn\188\147I\192\n\185\135R~!S\158\b\011CJ\249\129\136\219\149\196T\237'\251I|\143\";\212zt\213\243I\128\222\219\235\127C\149\184\158Q\240D\253\029B\233\023\131\222\198\211,\198D\176\208\250\222\207\134\001ez1\022\189\223\231\243\154L\251\197;\235iC\014\027R\223\002\014\228\173<\018'\1687*X@,9<\135\139\170\179\133zU\178\175+\156\230\223\252\242\142<\130$m\213\228\007\248\155X/\224\239\250\141\024\240\247\\~\011I\r\255\193\159\011\227\147o\250\187\129\028\131\nw\154oj\127\148\0248\014r\169\006U\173\218\159\019\255\028\216\157m\223\165\134q\181\252\220d\175\186\144j,*_\018\004\170\171\159\207g9r\252\224_\027s\255\218Y\160\134\153\240o14E~\149\251~\031\203\187X\168\184!\136\222x\226\248\027\136Y2\152\014D\001\185\237\146\020tt\252\156\192\166\007U\254\145\157Fzsw\150&\155j\0128m\199E\030g\003\023*\143\187\158\144\015\244eine\187m+\167\219\"\138T\238\214=\151\174`<l\249\133>\253ID\249opa\162C\1760u\178\149\218\157\t}\244R\172'\136,o!\204B\170\246\151\220\019\201d\024\220\245\188c7\255r=\241\196\153eZ\221\138\255\232f\182 y:\2133c\223\247o\130\175\202\139X\029\017\0194[\018\020\205\208\218\129\021\191l\212uZ\012\229\254}\2316\154\251\193\239\027\183\179\235C\157\239CU\135\242F\227\190\228\190\173\139\200I\\\173\185!\247&\154\243/\145\238\007\209*\170\247{@\016W\219\137\217\"?M\250]\180Y#\2381\234\235Br\139.\162\149I/W\159\214|\\\230\007\146\2412\209\211\022\019\153\0235\165\169G\154\bP~,\254\162\183I\178+\022Y\242;y'1\135\138\252*7\235>\164\191v3\150\229\178b\195\220\166\203\007\130\145\155\214\197\204\231\227\210\175/T\173\223Y\154\190w\156\1575\233\228p*\132#\015\156\184\029\223D\226\029`b\141\016%c\027^A\188\134\226m\239BADF\019\213\1567\204\236(\230\143\249\014\179z\138\181\189\231\r\017\007\132\184\030\251\182\174\129ALN3QSG\236!\202\213\243\231\025\000\014-? \180N\228\134\0005\161*g]\180\135x)\197\219\203\133\185\025\1975\166\b!nNq\237\185A\136^ \244\231[\221?\217\005~\1689\022\149\198\219\2218\185\162\239\0258L\205U \227\020>\216\204\149hh\183\012<6,n\247\r\000\198\128\024\226c\209\171w\231\227\209\148\147\001\172J\239E\175\018\014\169| \201\178h\152\199\131w\139Eq\142E\241v.\004\234%\197\1292\2149V\002\226'h\201\218\228}\184\012\145S\252\249\016O\167\200h\155\137gS\228\129g\003\179\138\192Mb\207\165(\137G\026z2U\200\007\131\207\006\143\223Y\030VC\133N\209\144\161Cs\209\176]W\151i6\022\180\162\146\003\204\158N64y\192\159\241\2378\227-h\193\201ZF{A\197\024j\235\017KK2d\215\151\176 ^(T\197\227\145C\224\233\006\211\169`\rP\177\128U\027\004\002\220\156p\135\000\181\160k8\192\166bW\187\004\158\162\202\138h\245\131d,n\245\226\127\192l,p\173\149\166\128\006\022\192j\"\004\237\217\149Ds\187\189\241\t\209\176\176\253\141S\006\212\161\166\231\219\165\016\017\011Vu\026\181z\183\145\204\018\229H\197\222\190\144\br+2n\183\215\246`jB\249\162j\238\136\155\174R<\240\131\\,t\167\025\233\198TX\192.\199\025&`a:\159\249;R\006\022\155\236t=\006Z\167\n\011M.\022\194\130\014P\213D}\004\168\ru\159\001.\163n\024\166tjQ\180?r\145\218\207lAF\254U\239ou\195\190\015\240o\016_\180nb\018S\248\143\220\003\172\206(\247\167\1736\172\152|\020+\142\219w\234a\204\248\\9U\171\162\202\"\177D:\200\140=#\147.\245\161\021\0114zK/)_'j\th\186<\196:\137\174sU\n\201I\197\140\206\237uZ&\015\148:2\145ei\\\174\206\200\218\230\182Ih\177\0304\184N\219\235c\250\197|\229b\236\158\197\215R\234r\157\219$\203\016\241q\018\160\011\147\2036rN\142\134\215\237\145\159\2064\230\185\221\222\158y\221_\243\192f\200\235\231\222\251mw\165>\223\028Fwb\250R\172\254\237\199\228\175\242\203\253\136~\185h\163\246\173x\1703}\027C+\186\175\179\232\180\168Mn\020\146\183\199\175\219]7\1774rl\213Qk\210\224\199t\255.\166\021\175\143\251\219\241\251\253\235J\151\209\028@\230)\130\153\180W\177\226 \158\238\247\235\227t\250.+t\163\147\188\212\230=\174Q,y\158\145\218\228\216?\022y\184\219\219\243\019\238g\244\003c\153|\203dVs\020\252\251\150\246\232r\n\162y\0053dS\138I\232~R\251;\184\220\021(w}\134\252\189\145\135\199\240\159\147\204\003W\134-\1535\242\005\173_w\n\209\b\157I\214F\191\200e\t\178L\182N\252\199`\187\237 xY\215G\229\128\250\152f\253\133\028(\135\175\159\191\1788\194z=\135\141P\006\159\162O_&\138\225\251\017\241/\2166\002\164\128q\219\135\172^\178\142%\251\161\2032\181\174\171\028\171}\219\218\023HLAb\200\198\012di+\201\226\242\231\185\206/\026Z\192\204\144\165%L\1390\181Z\215\238\2136c\219P\226A\212\016k\237\001\\'\222s\132\215@\188\224cg\173M\b\213\198\182C\224\197\155\234AZ\196]\r 1x[|?\021-xGck\180\202\170[\019`\168O@\237\007\200\203\r\180\198\249\237\182\157\212\238\238L}\251\233y\130\252.\004<FZ'm\247\131\028\229\183\133\016Tf\160\244\0264\002\204\213b\182\237\238p\182\237\138m5;\n]\194h}\148Gt\153U\187\176A\031\028\187.\186\1727\003\162\215hz\238\156\154\127\017]\196n\219I\019\139g\166\243\220z1\183 \193\223\019\004\222\193\240\012\129\2470\188B\224\003\012o\0168o\213A5\183\251\242\181\207\207\2167/w}\236\027+\016\1491J\197\220J\001\011\245\135\160\144\238\239\027\235\135\158F\130i\232M]\023\171\007\030\150K19\185\181\226U\177,\238\254\158\175Q\129*\249\203w\024\016,^\188\199\128\\\025\229\014\250D=P\160z\249\006\t\177\250\197\155#\164\154\023\236B$X\1805\136@\023\029\177\192\142\147M\164\127%`\t\157a\219=7\206\216\188\132h\213\197\252\218c\161\251\236\253\216r\185\149\146\004\r\007gb\196h\164A\188<\150V\1596'\218\019\142=\214!}\194\212~_\213\022\137)\157\005\185\165!{\018\020l\253\226\209\140m\211\025r\168\004\185\rK\209\145\157oC\241d=\177\193\178J\144\245c\022\021\134\236\144\026*\131\178Lb\"\024\171\169\218\000\138\255\193\bh\243\132\1381\250\157\130\178V\140\236\238\242%,\185C\t\001u\237\136n\235\029\244\030Ac\172\003wk\134}7j\024\170\247\163Z]0\004\185o\018\140\000s\189KP\012\179\239\179<\014\246v\148\179\1294e\223.\248\018+]\231\201\196S\186\242\223\211\003\233\028\241\204\218f\022n\195\228\187GBSf\139\011\1996m\242\162\029O\140\002\136\233\235~\155\014A \213\190\225[\248\144\253\162$\136\175\247\185\012\254\235:_\158\243,\b\190i\187\147\\\244s\182\248\173o[\210m\028g+\217\222Z\024\199\237V\174\152=z\145\217\175L5_\245\"w\136\186\221\200/\160d\156\199T@\180\218\b\027g\235\000\135$\192r\163Xg:11\183\166\206]F0\162\127.B\145\216\155<\166\173|\031{!U\178\231\254em\228(\006p\210\244\027\195R\217\152\1757{\230\131\136K\167\006\233\1678\0226\023\169/\132\\\218d\211\255\002\204\202f\218\254\023\224\214m\252\131\219br\239V\136\134\248\142m\243\031\183 \\\231\186%Z\239\160G\240]{U\163k*-\140\253\n\154\197\140\2408\210\216a\199\2108\190\021|\226\252JC\197lx'\150q\212\201\150_\228,v~8\180\207\137\228\183\203\195\251\004\144\152\251\184\030\167\254\249\243\202KL\158\220\129\160\222\150\146{\196\253\157\198\166\134\007]\245RP\239.\186g1b\n\183*e\166\210\250jS@\199D\173*9\164\178\176\203\237<\221\128\238\"\164f\162W\213\194V\253\2351y\187\164m%\141X\217\165\201\022N{\153?\197\154\14277n*\152\168U\1652U\228J\"AW?\175\188\218\226\201-\135W\214Se?1\171Bc*\024c&\177\020\244\216\014\140A\213`\252\170\204Le\213\175\031\185\215U5\213\158\152U\1613\021\246,\019e\025\132^U{SU-\213\004\236zbV\133\193T\232\197\218\219$\223\214\214\195!B\199E\174j\220\138\178\227$'\030\031d\132\237\152Ua\244\021\166KP`\218,H\172|\163\222-\018\143\226\227\141\139y\166+\229L\030t\213\179\242\208 \150\148z\253\129\132En\t\184\144\138>x\213L\tM\127\169\141\208\148\224U3\1634\229\023\197^PU\240U7't\229\247_\226e\021zU\181\242\148:`J\174b\199\165\028\016\190\234Z\025\236\246u\233\143\139X\011\022\139\128\211p\1624=\232\170W\005\178\244[\007\244\187\002\185z\229\172%\212v\252]z~\"\195N\001Vn\003X\167{?a\139V\220\170d\2297y|\204}\186?\238d\141=A\171\134\149\225\130\241fG\153\157\199\228\238\176}\173\151Jf6p\213\1782\154>\015 F\204E\174jVF\211=\183(9\015\186\234Y\249\237q\153\238Qj\014Pk\165V\174\011\181\150fK\153:YM\190\227E\006\178\002\172\220T\246hE\158\004\187}\234\167\r\153\181\228N\163<\205\2374\240\t\172`\216\145\175\017+\187\240o\130\222\174\144\167%\236\231\001Z.\254\169\223\214\241@@\162\000\253\145M\011\130H\021B\031~\004\0022\005\216?\248B s\133\020]\167\251[\247\232?\144AM\158\023\026'\191\1409a\152RcDz\234\229\203@\226\177\234\207\002\140\251!\171 \173R4v\150o\172\201l\162\246\175!\216Za\135\253\245\017\015\208\232\202{\136Q\148\028\202\178^\189\b'F\003\250kt \135iQ=hs\222Oq\193\229\1938v\244]\004\146l\138/+\242\159\254\249\127\255\215?\255\235\223\255\199\219\225\144%m\155\136\191'1q\136\210C b\218\182\169\248{\018S\151\168\154T\136\154\181m&\254\158\212\204\161\170f\019b\230m\155\139\191'3w\153\242\133~\136Y\180m!\254\158\204\194a\222\166_ \177l\219R\252=\137\165K\0203\216\023\144Z\181m%\254\158\212\202\161r\181\230\006Q\235\182\173\197\223\147Z;\212\203\132<\208\166m\027\241\247d>\183\184i\239\018C2\216\220D^\014\130%?V\184\211\153K\023I\231'\165\144H\005\211\163:\207\128O~B\030S\178\186V\155\152\174\213{\n\199Id\012\202\138Lj\152>6\184\026\234K~\164F.5Lo\227\158\134\232\136\147\018\133\1480\221nt%\132\223\209\018\165\1480\028\176:x\018\242\129\208\"\149\0201\\\177J\188\199*}\145\212\144\239a'\134OV\169\171!\157\146\214\144\239c'\134wV\025\224\028\151\251\023\156r6\007M\r\007\173\242\246\185j\240\027\201w\235\247\230\014\135\180\222LI\027'\243U\005(d\231?G(]\133\172LX\149\176\144\147\015\029\169l\149\1782cU\129RN~t\148\242U\201\202\148U\r+\217\249\210Q*V%+sV\r\168d\231OG\168\\\133\172L*\191K\000\t9\233\197\145\170V)+\179V\029(\229\230WG\170^\165\172L+\191u\000H9\249\214QjV%+\243V\131\163\004\230_\1925\179\195*geb\249\169\004H\206\203\199\144b\178+\154\030?\"\006\186\249\025RLwE\195\245\235\003\162\232\231kH3\2195\141\024\168\019X\019\200\223\144f\190k\026\209P\167\136\166\151\207!\201b\1514\194\162\206`I?\191C\146\229.i\004H\157#\146@\190\135D\171]\212\b\149\186@\220\200\207\255\144f\189k\0261S\151\176&\208\030@\154\205\174iDO]\161\206i\183\015@J~\006\144\217R\212b\197ck\027\222\198\135|\221C\174a(%n)\233p\225[\003\241d]\2492\205\219<b\221\180{\019\017\208KW=\221N<Y\182\030k\141\150\"\160\152\173\138\186\1850y\182f\215>\155\140\128d\190J\234v\195\160\217\138}\251l:\002\138\197\170\168\219\015\131f+\014\237\222\132\004\004\203UP\183#O\150\173\199[\163%\t(V\171\162nNL\158\1739\182F\147\018\208\172WM\221\174\152<K\1799\180\207\182% \217\172\146\186\1291h\182\162\240\214\189\141\137pq\029'|kh\012\174-\155\182V[\019\163\156\236\202\201Sy\165\219\226Yk5;1\226\233.\158\026fk\186-\158\183N\011\020#\159\237\242\153!\191\t\216\005\020\173\211\028\197\020\144\239\005\228\207\002v\001\187\128\178\181\219\166\024\253b\215/\012\253\149o\203W\173\221N\197\200\151\187|\249\148\223\248\182|\221\186mVL\001\213^@e\020\176+\216E4\173\211\130\197\148P\239%\212\134{n\002v\001\172u\154\179\152\002\154\189\128\230Y\192.`\023\208\181V\219\022\209\150<\0037=X\017 \233\182\184\219\157\149\139ibY\\\157\031)\166\015\229Kw\251k\154ncZ\238\221\198g+\218\012a\193\014\021L\001A\030\022\236Q\193\012\016\028\195\130\003*\152\251\130\236\016\022\228\168`\001\b&a\193\017\021,\001\1934,\248\142\nV\128`\022\022<\162\1305 \152\135\005'T\176\001\004\139\176\224\015T\144\001\130eX\240\003\021\236\000\193*,xB\005{@\176\014\011\158Q\193\001\016l\194\130\023T\144\003\130,,8\163\130# \216\133\005\175\152`u\000\004#\242\225_\168 \144\015YD>\\PA \031\178\136|xC\005\129|\200\"\242\225\029\021\004\242a\023\145\015\031\168 \144\015\187\136|\248\019\021\004\242a\023\145\015?QA \031v\017\249\240\023*\b\228\195.\"\031~\161\130@>\236\"\242\225oT\016\200\135\221s\161CK\137\197\235I\189\136\231\245\026\246)\218<\217%\210|8(\153\138\150\233 \153\212\148I\148LM\203\244\144Lf\202\164J\166\161e\006H&7e2%\195h\025\014\201\020\166L\174d:Zf\132dJS\166P2=-\243\014\201T\166L\169d\006Z\230\b\201\212\166L\165d8-3A2\141)S+\153\145\150\249\001\2010S\166\1452\253\129\150\249\128d:S\134)\153\132\1509A2\189)\211)\153\148\1509C2\131)\211+\153\140\150\185@2\220\148\025\148LN\203\204\144\204h\202p%S\2082W@\1668\1522\163\146\t\228\155\191 \0253\223p\149o\250@\190Y \0253\223p\149o\250@\190\185A2f\190\225*\223\244\129|s\135d\204|\195U\190\233\003\249\230\001\201\152\249\134\171|\211\007\242\205OH\198\2047\\\229\155>\144o>!\0253\223p\149o\250@\190\249\005\201\152\249\134\171|\211\007\242\205\023$c\230\027\174\242M\031\2007\191!\0253\223p\149o\0067\223`#\237]\164\220}X\181\185\234\250M5{\132\016\212j\150\169!T\233\2357\213\240\017BP\187Yf\134P\173\175\223T\211G\bA-g\153\027B\141\190~S\141\031!\004\181\157ea\b1}\253\166\154?B\bj=\203\210\016\234\244\245\155j\000\t!\168\253,+C\168\215\215o\170\t$\132\160\022\180\172\r\161A_\191\169F\144\016\130\218\208\1781\132\184\190~S\205 !\004\181\162%3\132F}\253\166\026BB\bjG\203\238)$\218au\253\166\154BB\bjI\203\222\016J\244\245\155j\012\t!\168--\007C(\213\215o\1709$\132\160\214\180\228\134P\166\175\223T\131H\bA\237i9\026B\185\190~SM\"!\004\181\168\213\193\016*\244\245\155j\020\t!\168M\173\140|\212\151\250\250M5\139\132\016\212\170VF>\234+}\253\166\026FB\bjW+#\031\245\181\190~SM#!\004\181\172\149\145\143\250F_\191\169\198\145\016\130\218\214\202\200G=\211\215o\170y$\132\160\214\1812\242Q\223\233\2357\213@\018BP\251Z\025\249\168\239\245\245\155j\"\t!\168\133\173\140|\212\015\250\250M5\146\132\016\212\198VF>\234\185\190~S\205$!\004\181\178\149\145\143\250Q_\165\016s\182\196\253\230\011\188UQD\198\1615\022\130y\215\238\027\234\233\205m\173\189aB~\206\r!:{&Z{_\004\031p\162\1875\162\181\183?\200=C\b\213\219\001\209\218\187\028\248\136S\157\141\014\173\189\153a<\160Lw?Ck\239Y\024\019\156\233m[h\237\173\tc\138?\023wwBk\239@\0243\148\234mBh\237\141\006cN=Ts\175Ak\239'\024\139\237\rJ|\171\173\179\199l,a\138\185\201\204\217M6V\b\197\218N\230\236\027{\190\220Il\172uv\136\141\r\194\153,\191\182\246\130\141\012\230\152\155\193\156]_c\135P\156\192\179\246w\141=L\1787x9;\185\198\001&Y[\185\156=[#w9\192\166\173\214\222\1525\002a\006d$;\t\021\135C+\0150\026\022&\223K\190\173\007}\160\231\140\200\221\250\000h\213Jl\173#\151\159.\011hy\160U+\133\236\218\222\199#\172\218!\171N\006\217D\2348\144U'\135\236\185/\211U\158\184)\191\231\017Ug\ba-\163\128l}\161\012\146\176\150Q\134\238#\162\142A\248\170_\133\238!\162\238)\253\026\178_\030a\185<^{\0208g-\169\129\238\228\181\146B\156\181$\022qO\017\143\005c\172\165t\017\247\019\241p\002\165\244\208\189\236' A\199{\153\183\224\000W\205\193\214T\160\211z(\243\n\213\198\129\202\004|\213\231\128\190\190\217'\225\132ZN\192W\253\017\170\249\136:\001\129Z39\144\245\012\156\202\004V\179\194\173\138\tY\203\234\144\188\232J6\208\171zJ\214\177\194GW\177\129^\2133\178\134\209\218\128p\171\"\152\239\215c\184B^l\193V='\183\011H\188\007\163\224U\187\244\180\227\189\023\005\175\218`>\015\214\003\000[\245j\162^\003^k\162V\181\134\168\213\128\199b\216U\153\017u\026\240V\012\187*wD\141\006<\021\168\129\158\234'Ey+\000^\181\157\188k\028\175\022\235\185\001\202Z\014\015\250\2393\189\196:\177\193XK\025#\178\252\230\020\241\137~g\232R\210\003Rg\241\017\025\160\172\229$\017m\226V-\241\205\226\206XKI\131Y\235Y)\177\169\203`\172\165\144}\244\168L\131\250p\154\007\227#\144u|\236\170\\\004\163#\144\129h\198ZJ\025\202C\175\132\134KX\203\168\194m\243+\129a\019\2142\234`\\\004\178*\205XKi\194}\152W\130\194&\172e\176P\155\243JH\184\132\181\140.\024\017\129\150\002\245Z\186\127\0305r\130\208\171\186\211b<\2219>\151\1358kIN\155a\180*\209\161\017\226\172%\141\164O\025\135\023E\187\149\199\209%e\0072\014\173C\200#C\209\227\172%%P\237\189\230\198!\206ZR\nx\196\139mH\136\179\150D\143\001\162F\234\184gg\212x *j|\236\170\\D\196\012\153~i\198ZJ\025\017/d)4c-\165\"rcT\164\208\140\181\148\154h\019\163\162\132f\172\1654\0171B6&4c-\133E\196\007Y\n\205XK\161\198\028Q\145\129zox\252\017\021\029\024c-%\166]\177\187S\241\145\226\240\214\018c\218\151\136\018cxk\137c\176?\025\021A1<]b~ \226H\231\215\151\131\t\166\173\229%d\251&u\254\160\137\131hkyi\176\207\025U`\012o-1\003\252\244\245\225l\004m-/\135\188\244\2291B\004m-\015j\171^\031HG\208\214\242\192V\235\229\241I\004m-\175\"\251z\182\171Ew\247 \218Z^M\180\151n(E6\1540m-/\166M\179\221=\190esxk\1371\237[D\1371\188\181\196\240\216)\170\197\163[\164\028\025G\169E\219\248E(\132\176\1501\192=\218\2322H\194Z\006\015\221G\196\194\019\b_\245\199\208=D,9\017\250\1337fR\208@\197\248\168U-\001\213H\019]\204\170\004\173w\220&u\\\185\153\208%\023\207!\024a-#\003\202X\205yR\180\006^\006FX\203\200\193\026\137X\188\130\145\171jA\215\206\218@DW\142\137_K(\233\186\209\223\150\139\175\026\019\191\150P\2095\131N\208\128\192U\211o\015^\241\025\002\190\234\251\235%\175\248\011\001_\245\025X'\193\229\"\b\183*vT\141\132\252\004G\175\234=U\031!\031\193\209\171\250@\213F\200?\252\181\158\130#\253\217W|$HZ\203\194F#\175\248K\144\164\203*\015d\214\141\243\029t\005\160L\194\181\022\242\163\016g-)\r\215Y\200\167B\156\181\164,\\c!\255\194f\136\203\156\206\205F\215\242\133\012\237\179\214\210\n:O\155\223\171\139\207\214>k-\173\164sv\\\183\001\159%,+*[\197\213\\\136\179\150TS\153+\174\214B\156\181\164\134\202bq5\134\205\030\149,\028\155q\181\022\199\\K\237\194q\026W\131q\204\181\212>\028\179q\181I\143L\202\001\234\209\179\165\143\233\180\161\224U\155\007\181\003\171\169>vU\0301\229\184\189!.R\171V\135\128jLM\000\189\146*\001GM\019{W\031\2146?\218z\159\141\143\182Rc\1680y-;\141([5\025;;\184\235.L^\203\206\200\178\251e\246>\233\005\150\163\129\171&\184\178\018\168-\179>\nxe\134\\\138\217\184\224n\216PuY5Ra\235\169\129\005\212\141_C\227\227\192\226\174y\247\r<\179ON\229o\\\006qC[-\172\187\239\1765\183\192\"\219\198\239\177g\175s[\192 \002\190\234\015\212\170\029m,\134]\1499\246\220t\014\n8\018\001_\245Gj\151\024\237d\024V+\215\219\199\169\143\2364\130_\209\216\128I{Z\191_\197\245+\014G\018\158\026p\249\129.\245\1300\129\207V\188>/R\023p#\025\249\202\bZ^\172@u\202c\140ri\217\178Z\015S\000\160\249]\145\162\174V\136>\1911\166\244\186Ug\173Q\144\245\219\237\241\154L\019bn\200\195\217\247\211iDt]\246\026\031|H\131Yr\1400\215\132X\255\026\159\240\176\2476\135\245\187\222!\179\027\017\021z\b{d\003G0\242\155\177\234Sx\020(k\007\182|\144\144|\r\213\200{(\214{\136\132\151\173\218\203\207.w\188\139\178a+\023\139\127\168\187h\234'\248\217\163@\176\r\132\213\153\235\249\173\251\231\127R\197\178\128\020\197\237P\174\217\031\179\205B\164\250\023\165(\179\006W\139\002s\016\028g\244\024\195\1413\154\029\172\2074\"\160d\253\002-\tJ-\144\254\132\166\250\0120\031\222\250y\185\136\148\13403\155)\191\132\197\166\139hJ\223V\219\212\235\190d\225yk\022k\012\235\198\233tB8\133\197\217\007j\004\163\180\024\243r?\206F\031\249(?@J\209+\139\142\246\223)\137\026\144\000\134\031\148DcI\216\221\252\224-l\223\233\140x$\221\246T\195\208\237c\184\011\239\239\248\247G\0116\172\146!\220\246E\219\253\153\134\b\227*\028K\232\182\176\145\159\154:\157\248i~_\216\025\193n\209\019\131M\129\015\n#\031e\221\128o>p\021\219\226*Bl\003\226b9`\153~\180\209\2469\240U\184\000\172$\133}[a\225\146\254\0181h\174\142%\180\018\170\205\0011\201\127\243\r\rH\214\176\149\017U\235\b\195\149\208\192\022GTp\148<\131\173W\255\195\251*\021h\246\006]\005;\216^X\0164\212\017\132?\180MV\172\154\243B\031\216\150\132\162\004\159P\\\144\131\022F8\128-\011?\160\017\1806\226\241G\136\247\007\240\203\225\164\205\170u\194\170\162\223R%&\b\132\023-\152\130\022F\212\173-\011\223~\006Z\027Q\1831\2269h9\021X\182\170\029\006}\001\218J\133\021)\183\229V\209}8\207\200\231\209\139~K\1514\170\182QX\255\143\022i\218q\186\029\249\023\210`\247b\136=\255\230\151w\236\247-\239\232\211\024\016\144<R\226.?;H\162\182\147\161\162\251\149\189\200\000bN\225\134[?Z\159G\135A\2511r\186\\s\\\207\176a\229~b\220\218]7G\2138)\181\0112\167ypRf\145\172Y-\156\148\003$m\228>\002\162\232\133E\151N\212=\172\129^\148J\217:uI?\134\170u\171\145\198\215\173\250\154\229\141\191I'\224\200@mhvX\216Q\007fN\027\190\192\235\204I\187\023x}\011U\170\164<Nl\145+3\bqh\193\135\026\193\228\1739dz\1339\182\198@\233\005\"\183&c\169\250\224\137Y\143$ro\160\140\155A\218\142\141\146Y\020=\128\164\025\207\190\2515\146QX\140(\179\2025\131R^\204\237!pT\142\226\246\1527.G\241\006\027k\239\003\222\160\004\179m5\030P\188F\007L\138\236-B7\221\1960S\182s\192\023}7\133\158\024\196\173C\248\249\030=\154{2Vy\025\128\1520\253xpy\151\183\022\197\137\162\002O\021/\203#\174\133\137 g\203;\157\182\198\003\240t\128D\134\176\019\128\rd\022\132\157\162l;\163!\244\0125=\138\158[\221\157W\239\188\000\216\241w^\162\236(\211+\212\244(z\221\130Y\240\223 l\211\194\249\015\004\179\022L\200 vK\011\219\202\195:9\006b\183\001l\012vpt\173\1697\144\193\029\2450cl\225\182\n\000\151\135}z\249qY\227\149}\193\211\192\229A\244EO\243c@~M\219\199\185[\248\233\196\016@\214\222.\243\231\153]\144\223E_r>#\rSy\216\026\188\219\157-\bd\243[\002R\233\245&9vA\016u{?\2029\241\229v\023\235\191\bH4^\015\2366X\203n=\191\0122\021^fd5\170<t\237\192cp\189\168\149\203\143\199\165G?c^\030\134v\190^\231\219D@67\186\243\019\191\030\231\011V\2206\029\017\192\201\019\147\132#\206\162c>\255B \137\001\209\190\133\127^\189\148G\0269hLW\248\017;\221\167\0053-\223\029q\243\232\233\"\214\254\231+\226\215I\209\030e\185b5xa\239\152\234\238\\bIaz\187N\188\199\144\213\230\169A\164\2328\029\217y\153\209Ji\218\133\171>\254 Vj\238L\142l\199\211\188\232\151t\150;\213\149+\019\006N;L\194\183\177\154\237\224\025@\138\210\131\147\017\020c\000z?\020\158\195\179\136\020e\004\167\200\bFzho\031r\215\128\\\147S\011-\157p}\196_R\145\007\217C\198\218\219mzG\002.M\219\133\r\211\204zu\134$\001\020\163\133i>\178\223l\025(\152\200\142lx\244\252\129YU\180\236\242qD~,[\181\0246\136\216\130\246\149m\176\170\237\143\211\219r\156\145\223\235V\177\223\230Qt\b\022\025X\136k\167\205\019\249\131/\015\017\177\028I\166\169h/\238rX\167\170^\229D\196\163\211\174\029\217r\155\222n_\231nv\231j\244?\202\002'\209\187\216(}+\158\130\220\022\240q\159\016\213\161\021Ax\230\218\130\219\212\127\156\176\155\226\237\149\179\158\195\229o\160\177\253\018\249\230\139a-LvhE\155,\151\152\222\198yQ\251\1398\242\208\179\196\130\158\216\007bY\150Z\192\017M\142Yf\001\215\166\014\193\230\022\246sB\230\246\202\172\176\129\236\142J\150\022\242,V\159\229L\"\002\174,\176Lx\136{gr\134\146s\245\240\135#[\206H\023$\219\022[\198Ed\006\153\019F\134%\231\140\237\203\163\211)\000\237\246E\215 t\203\151\017\253\173l\016S\166\162\027\178\239\2079\207X\243\158\137\201\022\022\135\028[\225\234\253c\249\130\127\207\015\237\200E\031\147JYy\210\018\015#O\219\016?k\127<\174\019\234%y.Z\248\251c\193\232E\251\016\017\142%\194\188l/\252z\127`\169)\175\218\235\233qGR\\^\183l\153\176\212\1597\237\157=\022\180h\214\190\243\179\152\025G~\238D\014\191\244\232m\203\189^\152YC\251sZ\222\177_\197\227\159\186\005\241\250|lo\253\188\\'\204\236B\180~\236}\186\139,\140cd\163w]&\185Q\004A\164-\147\254\135Kd\237u\018\233\029\251y\031\242\030\185h8>\208.zQX\192\191\030\028\203\159Ei!\151yF:ZEe\001\197\188\207q\190\"\208\2186\243\130\238\221)\139\198\130^\217'f\231\214U\011\222zg\001\169[\239-$q\235\131\005$o\157\219fR\183>ZP\252\214\203}\000ze\131L\139\019\162Xn\1799\186\231K\000Sg\185\138\128n3\181\253\233\209Q\184\2055\131Fn\163\212\160\145\206\250\028\005\221}3`d\173\13417\017\164\151w$\198J\181AP5\017\151\249\142$\200\146\181\235~G\002#\028\14531'\241f@\221B;\182,.b\165\247\027}\253\244\000\173\224\130V\145\161=?D\127M\012\137\216\029jn\228\191oX\190b/\178aQo\019y\240\245\167\1411\174\012\209w\\\174+\222\154BQ?\172\232J\204Tr\209\000\223\190\196tKO\245\177+\217x\198!\197\140\202e\146\195?\189\223\233\171W\157\011\170\243Ye\173\011\212\253\188\175+\255\158\188]e'a\234\177\242r\130\156\134\200\005A\206B\228\146 \231!rE\144\139\016\185&\200e\136\220\016\228*Df0\249\157_\184hf\223\206\178\023=\177\019F\223Z\130\151]\164_\203\021quer\242\148D\171/\225\222\133\029\167\175\239\175\240\228PI\244\195/\"j78\218\031\172F\221}\239\143l\162e\235C;L\\\245\175\191'\b$yBR\004\146>!\025\002\201\158\144\028\129\228OH\129@\138'\164D \208d\187X\254!\246\004\15154\195~\255\156%\015q\151\186\1826(h\2026IB\023\214\000LY\216\206\198\138d\173h\217\230}\252\134\143\136\235\206Ab#\194\186\023\245\185\195\222\023\206\212\135\138p\225\193\196\159DO\132S\234\028B\227\226#h\012\166\222lkY\162UB\020\155d\173j\002\146\154\147\021\215\t\1559l21\027\212\031gd\168\209\228zzF\182\173\159\2432 \143\176)\228\212\2048\202q5\01933b\249\029\031E4\194\195\197\162)\214\189o\170V\206\001uS\143\252^\139\246Z\174[ ?7bh\133M\2357\236i\231Q\164\029\212\134\174e\247\249L\166\152\166\023v\240\199\242}\224\223O\019&$f\220\031w\185(<\188\133\214\028\026\222\234\183r$\252&7O\137|\253.\2114\017u\205\136\145\208\215\014J&<\140-jZ\003\207\181,i\143\162\216\183\159\243\233.&\187)d\186~6G\2049\135f\004X\182cC\200\188U\251\212\228\1554Oe\233\204!b\209\238\208\176=\165\006\171du\187/\243\007\137\174|\244nQ\\yu\187o\026x\165\224\1665\222\132x\133\200\182w\162\130{\127J\214m\216\224^\167\146\245\173\181\206\232\171\159\028\130\232\131\139>\250\164\\\137\136*&s\235\207y\tL\158\178Qty\149\160\234e,w\249R\202q\186\146\164\238 \150\200\198\017K\188]\210\142b2Hv\250\209)\165N~\165\236\129NHuY+fm\176\172\162>\251.V\155\176\159\0111\219uAfn\186R8\142\200\029\200\175j>~\193\230\242\246\173\233r\186Od\138\211\132\205\201ub\193\146\255\186O\216s\239\132\001b\226\138\198\200\183\186\166K\255\184 \139(\157\200\236\\\172LOz\129\031\027:vb\022y\238{\249\190!;a\143T\2044\176\027'\000\227\186\247gx\251\224\200Tf\191\181\184\194\152\135\200\180\1837t\237y\223\215\188C\2419\152}\203r\132l\230B\t\217|[\030W9@4/o\242\191\017p!\023\160\197\146\229q\146\171&\248\170|/FV\232\004{\191\175TR\235\242\253\190\"\174\011\210\2317\224\162b\138T\196\217\179a\012\173\130\246l#D.\155\238[\129\183\185\019\249\193I\252\237\165R~\218ZvvT\235\201\208e\189^v\022oL5b=\214\152\011\155\230\235qz\244G\172\027\212\143-\222-\147[\128\197R\215\2374\r\168#\012\162\133\230\1673\191\155\157tb\154\192\248\022t\204m\202}\190b\156u\193~\206\219\203\252&Fm\216\002\193 \214\025O\"S\138\217\018.\223\141\253\254\201\214w\239\229\255\184/\162\027\134u\241\134m\210K\012\031^\161m\195\157\023i\181\185\254-k\228M\244\155\177\245\253\1611\023\178\131h\214\014\139Z\215\021]V\162\157\030\186V\159\031\240\194\027)\027u}\243[\196\156\236\166SOd\216s!\1851b\224b\249\244\164&\b\246\253\145\"t\172\161\164\248\239\224\235\166\229\176M\238\222\151\007\230\233\252 \166\025D?f\234\229\166\005u'\234\022\176a;O\016<2\134\231b\181Av\147.\243Y\159T\244\156A\161\022\135x\182>\016s4kt\249\182Q\244\027\235\230\159\200\237s\209\222\011\219\024\250\150`\201\215w\199\191\031\153z\187V\247x\197,\128\232\212\004\152z/\251\031\016+\189\253\252\030\001\221\231\002\244\n\189\200\158\199\137\159\144\022Dn\212\021\173\204}\022\168\005]\239\151\031\238=>\150\030\233\127p\185\242u\187c\190\206{1(\145\251\173\228t\235\132u\028\248\160\134\128{\243x|t\b\144?\129o\178&\209A)\023\147\188\236j:\143\218\030&\228o\136\017\227\161\165W\173\199\228\185\253HT\237\187z\195\026\129\166\237Hker\014[\238\\y;\206X\229\141\185X\177]\176\2280\138\158\002\155N\221\204\144Q\227\184\1913-?$K\190\b^\142U{\251\152\176^\242X\183\147\236\223\127\160]\191\177\145\179\130\183y]\250\198\187w\163\232\019\160\219@\198\174\253\193\174\178\133\227B\226\242A\014\014\198^\006\252 \156Kdt\017\019?\249\151\218hCQ\196\186\251\131\159\222\174\1433\178\0166\242\182\127\\\229\227\r'\203q4\230}\188\183\223\207\211 \188s\147\145\159\234\132e\170\231FM6\242\251\215\219\173\159n\183\025yP\213!Y7\198\n\142\\\176\162\193[\1356\000\219\142\152\137\210\220W\204hX\241\\\212\147IY\238\015\020\221\233\229\003\129\151\237\190/\241M\204 0z\019Vu\168\196r\253U\246\234\167\159X\189\138\245\254i\185\202\006\031\0014-\023\137\2454\163O\134\201.\182l\163G\145\195\016L\183ad:B0\189X\226\239E\018\252\162@C\251\185L\170\251@\128\236WoDs\208O'\004:\182\212\207\201\193\218`MB\183!\212e\234\016\196\230g8B\246Mi\023H\2426\206W\0181_\244\016\189\161\235iZ\253\228\023\002,W\197Hx\181mT\197\000\245\170\023\1285\207)D1y\204?\136>~\149\176U3\140\236\196\000\133_\222\228.\186\005\0307\236\191\203\017\221\243\236\184*\233\215BB\002\014\202\149\025Z\177\238*\154,\202J.WOEwx\031&\134)\227\179\190\130\224\244 g\244\238\178\133\160P\137\222y(w\141\177\159\019\018M\169j\165\229\215\194E\195\177\204\215\239\183\235,\167.E\127F,\208\221\016\247K3\205RN0_\"I\155s\255\001\181\208\229\201M\002\145\140m4\166x\250\245\225\001\159\199\174\210m\024\022\139\175\219\155\152\194\251\192:_U*z\150\194\197d\0234r.\189J\217>\214\rB\237@@_\0300\221\216\000\173\"\251.\026\173\130\022\250D\t\025\003\181\202\024\203\005\129\183\024\170\148o\241\021\205\1443\014\023\189\001\018Ge\0077\228\bl\178\218@{P\150ZU\140\128\205\n\222!\171@\166w\154\188E9l\150\175\232\205\247B\021\147\021\014!\166\154Dwx\250\021_D\229\020!\207\165\145\155@\229\248#H\222Z\138\127@B\204\182}\242\147\152\137\136\182\152\181\235v\154\157\018\168\246\174}-\245e\189\229\022\145d\211MP\202Z\192\176\214\219\139vq\253h\249]\158\242\179\213\148\028\245o\029\244y\225wd\236Re\227\1908K\193\242\2312/\tK6\191\217\172q\194=@\127\206\249\153Um\251\017\224\003\030IT6@Z\011\201\144j\222\195\136\174\239\\\207h\143\232\182\245*/\218\251\246\146\2188\159&9\165\024\162\148\207\254\223\207E\246\254\003\248jk\133\144\223\183\024\164QM\251Rk\156\175[\232\252\170\019\255[L\r\152\169\016\022\232\172\212\240\1992\235\2127\209O\206\007\183] \022\b\171\156\139\133\178w\166\223iY'\029\131%\216/$\234\251p\154\"|\000]\021\246\024\228ezb\149\254\n3\181\n~\133\185\173\251\252\245\016s\154r0!k\231ML\173\17636\173Q\237\251\159_\"m\003h\254\171?\1773\139\230\185\251O\207\147\1523]o\r\025\177\020\213\230\147nY\196lJU\212\173\243Q\194\014k\154\138f[}\142\192n#\162\b\232\022K\235i\246\235jS?\159\207LT\182|\175.\182\214z[\233O$\182\182k=~\254\0310\134\219J\127\"1\174\018z\021\227O\239\169<\0242\127nM\153\136Y\181\229\167j\132\248Y\157\198'&\236\174G5\193\019\226\166\152o\006x[\027\1677l\191\202\222\198k\198\166o\004)V\004\214\0238=\006\245\022gU\150\173\249\198'\002\170\218W_\015\173\202z\0116\253\234\166Hf\151\251\145\223\166\219\243\166\175\255\253$~\237\196=J\215I!\144\249w\136\185\239Z\145;\179\197\004\239\182\210\243B\225\157/\241\178\025\189y\231\207\2458}hE\183\136\007#\022_\003v\012V%\132E@C\182\b\134\236\192B\0076g\011d\208\026T\n2\170:\016F\197UN\149P\214\196\213M\149\182\198\129\244bV\244>\139\249S\209\bsyHT\156\025Yk\028\005\031\214\000\205\200\173(\017\249\233\244\021[|a\199\t\198\005\139-[\185A\160c\247\183\189\187\181\245\221\135\233}R\167R\183\151=\174\019\241w\217\207\159\242\145\171j\021R\021\203\159\134j*\2540U\137\\U\235\160\170\220\201h\232f\226\015\213U\216U\185\t)\203\169(C8\023\127\152\176\130\174\186,\168+\215\011\158\186\133\248Cu%t\213\237B\186b\252i\200\150\226\015\147\149\200U\181\015\170\202s\236\r\221J\252\161\186\n\187*\015!e5\2500\148k\241\135)\243\231\007\023\170\138\135\148/\147\229\192\141\248\195\132\021t\213\029q\221\139XvUs\007fU\180b\005\195\2155\160ZW\189W\160u7\204\141]n\223obl5\018\017G\130W\233$,\r\133\029\t^\165\211\bi0\246\002\240U>\011\203\131\001H\163W\241<B\028\138B\026\189\138\023aq(\020I\240*]FH\131\241\024\128\175\242UX\030\014\202\000|\149\175\195\242`d\210\232U\188\161\196\137\240\164\209\1718\145\179\163B\213\205\001T\200v/\148\021\211dR1\220\191RVTCJ\007\245\240ByQ\205+\025\229\252\149\210b\026]2\236\199\023J\139i\138\137<\208\028^)+\170\129&\019C\147\188P^\\\179Mf\138&}\161\188\168\198\156J\029M\022U\218\011M<\149K\154m\216\2549\r\252\187\220\030\180\141\"?\1974\235\237\141-\139\183\241\026!\172\216U\183Xa\215\147\152K\195\183\1654\251\142\0035\233F\000\183\025\183a\2509\221\232\189.\205>\145-V\018\142o\234\029c\252F\204)Q\235\022\026s\232\022\170\014\128\191M\203]\228yC!+\172\143\163\152*\"\001/l|\158k\0292\007B\219\138\219\204\157\218\142\247\253>\137\146#\159\185\207\176\149\135v\219\200\027\233J \220\214\220&\006^T&H\182\190H\148L\012\131\135W\011\160XV\tl\155E\248\179r\194\\\187\180\196<\184\012\1515O7\179\248\169~\219\238\187(L\172.\168Y\003\192HY\190\251,1\154\193X\203\200vp7\223\239\243\249O\138\129\152~I9R\027\128\176W#\166Na\205n\174s\179r\015\251\170y\137|\142\030\223\248v\181\245\024J\136\240\184\254#\197\153\223\027\181\011\211'\029\175'\139\135\148=\168\173\181\229\222~\190\244\236'\255n/\198GYMP\237\178\154uo\185\250\212\217\182\026\021(\002c\216\202\250+w/\t#\004[\183\019\139\167\253\135H\161'\181\194l\175\163\133B6\192\180K\234\219Q\172\t\223\255\172\168 \213.k\240\155\210\239\175\021\024\199\183K\229~\211\249G\165\134\248v\169c{\153\239\189L\198\127~\183\177\nV\201\242\221N5o*\214\222\225\205\216U\151\236\210\127^)\177\n\182q\207]\024\230[>\129\162P\138\173\189\158\031\253}\228L\172j,\2256\019\132\219\154k\195`\128\002\157E\023\142u\027\187\194\131\1984\197\180\181\165\007\nt*]8\214\189\236*\179\165\136\175\r\152\132\214I\141\016\226\0271\186~\026\004\026\213\245\142\174+\246\220\253%V\216\187\136\238-\004\1835;oc\209\145]>\162\251\183 \203.\161oE\224\190\243\239w6\157\"B\199\195\218j[\170\127E\019c\216\202\\\237{\251\190o\254\n\136\002`[ol\183\245\247@\214\236\015\235\001\019\195$\150\161\228\216\146\157\222\252\131\194\247\021\169\253\r\233\253t\127\227+@\230a\001\228y\227U\159\2027\128\174\242\216k\2451\015\004\149\233\237\128\183Gw\147\235\215\160A\249\134\145\175\020\161\168b\253\212\175t\0229\128\235\216\251\219\192O\211Y\029?\t.\220\201w\166\245\142\031\132\004\173\216\245U;/\207\211{&Q\165\003V\007\245v\170\179H8\167i\016S\000\215\133\247\\\157\004N\222\178<v\\\223\173\201\208\026\b\133\181\230\006\025\239\253#\253\234#b\167Xk\151\233A\238\135P\159\\\156n\230\187\163H\129}{\154\021J\207X \168\193\150v\223KEX|\127\209\2454\191+\162z\007\0064~\244\1763\226m\195\193y\159\\\159U\174\182T\014\250\227\029 -i\217\006\198Ai\203O\\.\244\202\183\012\164\195\202\219\\\1354\b%\1796\172\233\023\242\224b\246\154\025r\243\163\tq\14852fy\236\197\219\143yB\030\213\176EC\016X\233\015o#\184\231\253\213\235\151?\196\208\236\174\190$\002\162\154\021\165\198\139\004n\2534\247s\144gl\172\186\233\211,@^\231\242\1362\214W\177\213\011BgvE\238\127\208\158\143\168=q\\\227\244\198\006\0286\182k\005\173\254\168_X^\223K\134\204\228\135\237\019j*\250\228\144\172\2512\131}y`\181\193\183\236\190\141Bo\138\190\127\209\r\228\164\020\231\249\161\025\221\154\221'\236Fy\022\2141\154EB(\135\190\216\018cA\001}\0259\170\200\210\206c\250d\002Sk\221\239\001\1834\188r3\172t\029\152\0155:\188\006\138\183v\217 \2296P\185\014\017,\144\001\005\174\001\023Sn\007\149\011\243\193\226{\180\186\225\221=\136\025\003^\237\152\014h\014\007\204y\238K3v\164!v\140\144\029\136\000d\192(\183Fk\031Ug\238<\174\178\030u\191\017\n\217Q,\"\237\211wq\140T4r\194:y\\\215\167\172\150w\166\230\193\183lD0\179\246OXyk\244j\205\2047\168U\021\132U<S\170\213y\006\193\165\145\167\195\232\202\200\214f\135\027F\215\174!\155s\019\156\198\179'\130\196<\179\"H\029XM\2424\252\179\222>\r\178z\184\190B\180\129\170\138\016\153\147u\018b\143\030[\030K\245\254NVO-_\177_\196H\237$\191\004~\151G\220\200Q\242e}\171\225\228\128\019\015,\207\r\217\1427q\209)\140Nat\134h#\240\028\134g0\186@\196\017x\137X\142\192+\204t\004_\195\248\028F7\136:\002g\136\237\b\188\195lG\240=R\239\b|\192*\030\193s\172\230\017\252\136V=LH\0140\161\128\209\152\195#p\204\227\0178\234\242\b\030\243y\004\142:=\130G\189\030\193\227n\143\0160\191G\224\168\227#x\212\243\017<\238\250\b\001\245}\004\143;?B\192\189\031!\016\238\0153R\196\255K\024\141\249?\002\199\252\031\129\163\254\143\2241\255G\224\168\255#x\212\255\017<\238\255\b\001\243\127\004\142\250?\130G\253\031\193\227\254\143\016P\255G\240\184\255#\004\220\255\017\002\225\2550#\195\242?\002G\027\000\004\143\182\000\b\030o\002\016\002\218\006 x\188\017@\bx+\128\016\136f\000a\160\237\000\130\199\027\002\132\128\183\004\b\129h\n\016\006\222\022 \004\1621@\024Dk\1280\168\230\000\166\228H<T0\026\011\007\004\142E\003\002G\131\001\193c\177\128\192\209P@\240h$ x<\016\016\002\022\007\b\028\r\003\004\143F\001\130\199\131\000!\1601\128\224\241\016@\bx\004 \004\"\000`F\129\181\007\b\028m\015\016<\218\030 x\188=@\bh{\128\224\241\246\000!\224\237\001B \218\003\132\129\182\007\b\030o\015\016\002\222\030 \004\162=@\024x{\128\016\136\246\000a\016\237\001\194\160\218\003\152Rb\227\003\004\142\014\016\016<:B@\240\248\016\001!\160c\004\004\143\015\018\016\002>J@\b\1960\001a\160\227\004\004\143\015\020\016\002>R@\b\196P\001a\224c\005\132@\012\022\016\0061Z@\024\212p\001\166T\232x\001\193\227\003\006\132\128\143\024\016\0021d@\024\248\152\001!\016\131\006\132A\140\026\016\0065l@(\248\184\001!\016\003\007\132A\140\028\016\0065t@(\196\216\001aP\131\007\132B\141\030\016\n9|\12895\018\0315\140\198\162\003\129c\177\129\192\209\200@\240X\\ p4*\016<\026\019\b\030\143\b\132\128\197\003\002G\163\001\193\163\177\128\224\241H@\bh\028 x<\n\016\002\030\003\b\129\136\000\152\209`\237\003\002G\155\007\004\143\182\014\b\030o\028\016\002\2186 x\188i@\bx\203\128\016\136\134\001a\160\237\002\130\199\155\005\132\128\183\n\b\129h\020\016\006\222& \004\162I@\024D\139\1280\168\006\001\1660l\252\128\192\209\241\003\130G\199\015\b\030\031? \004t\252\128\224\241\241\003B\192\199\015\b\129\024? \012t\252\128\224\241\241\003B\192\199\015\b\129\024? \012|\252\128\016\136\241\003\194 \198\015\b\131\026?\192\148\014\029? x|\252\128\016\240\241\003B \198\015\b\003\031? \004b\252\1280\136\241\003\194\160\198\015\b\005\031? \004b\252\1280\136\241\003\194\160\198\015\b\133\024? \012j\252\128P\168\241\003B!\199\0150\167\199\214\031\0168\186\000\129\224\209\021\b\004\143/A \004t\r\002\193\227\139\016\b\001_\133@\b\1962\004\194@\215!\016<\190\016\129\016\240\149\b\132@,E \012|-\002!\016\139\017\b\131X\141@\024\212r\004L\025\208\245\b\004\143/H \004|E\002!\016K\018\b\003_\147@\b\196\162\004\194 V%\016\006\181,\129P\240u\t\132@,L \012be\002aPK\019\b\133X\155@\024\212\226\004B\161V'\016\n\185<\001s8\186>\129\224\241\005\n\132\128\175P \004b\137\002a\224k\020\b\129X\164@\024\196*\005\194\160\150)\016\n\190N\129\016\136\133\n\132A\172T \012j\169\002\161\016k\021\b\131Z\172@(\212j\005B!\151+`\206\136\175W \004b\193\002a\016+\022\b\131Z\178@(\196\154\005\194\160\022-\016\n\181j\129P\200e\011\132C\172[ \012j\225\002\161P+\023\b\133\\\186@8\212\218\005B!\023/\016\014\185z\129p\232\229\011\144\212\028\014\173\249\210\219\231\188\029\184d\188\139\179\191LL\1888\220\028\146\176\208\250:G\156^\218\"o\145\188`S\214b/\147\188 \146\183\200\0117\175\136\020d\237\144\175\1824\135\178\253\147\023j\154C\213\254\209\1874\205\1616^\0253n5\238\029\242\230\208\236o\168\253\001\153\237d\249e\204\019\245\246Ns\232\012C#\224\189_\145\242\1881\1463\000\149\024$q\163\160\213\174 g\180\\$\142\148`\225\027\203\183\162\214\n\213\187\2542\016?#\204\212y\200\247\025w\168$\243\028\138\132\231\136U\242L\141\023\162.)\130:\175\164\164\164\012\1678\169\140\176\1718\246+\247W\191\"\249\210\1736\173\243\194\224w\226\206\152W\205\020\186C\178\025\197\233\177LF\145\006\247\030\148\211\153_\192A\136\220w\155H\230\216b\239YF*\164\135\022}\2312VB\158\141%O\003\250\2287}\214\129\127\196\017\200K[\243\020\161\157\167e\b^f\149gf\252\249\003\161\228\173{`Q\144R\180\238m\004)e\235\222A\144R\249\247\"k\194?^\td\215\254m\189P\255\141\127\135/<\005\230\223\236\211\242 \187k\157\147^\244\023\190\228\191\144\231\180<\021\250\214\005>%\168Sd\158\n\131\127\255\187B\228\003\224\254\003\216%\"\159\194H\220G\156\021\217\001\175\2048#\178\132\184\143\184'\154\165\190'\191z\031Y\251\201~n]\198\253\139.\195$?VyZO\002F\168y\235\176\204\134\234(?D\248X~\134\142\197i\178\"Vf\239^ B\165+d\244\027M\157=}#:U\164\206\211ND\168\222\206\231\156\006Y\195\253\219\243\224\004\234\1454\235\233\155\027\203>\168\129b\178\246>__\228\136\001\178:|\246EZ\191\023\229\224u\250U'`#\212\129\178R\211\209#!\154\204\254\006\250\141\159'y\142\132<s,\178z\183\175\022\234\243\195L~\244\221\231\007\231\244\012\241\191n1\231`4y\210\254\t+\245{\012\234\192\160\183\155\024r\221\163\206\199h\242\204\235\184\152\026Q\199f4\242\219\159 |\213\138\179\004\235\179\171\243\213;~B\137\165w\011q\188\n\232\237\029\151\249\241~\148\031E\004)u\235\030\r\178S\244\177x\219\2314A\246sx\012O\004DH\172\007`\201\211\022\229\145Z\218\016\245_\234\232\172#[\174\243|A\200\157AVp\131.\196hr/O\168R\208mBD\b\168\255V\1624y\216\201\235!B\027Wk\209d\142\222s\208\232\0175:\162\224\226@\212W\184\186\139\004\187\233p\133\021\230$\216\138\212^\189\22175\140.\172\233\175\215\233\249\238\167>w=\240\140\162\023\198\152\255\143\004J\242\230\245\025q\020\191\162o?,P\019\021\176~\162\142`7\228\253\135\249,\244\236\233I\188\162\011>\253\128@\031|\254\001\129!\194\003\002\018<\236\003\001\1331\194\011h\137\242\016\242\131\000?\t{B@!\152\007\220\022\022\190QD=\011\221_\199U\1353\224\014\136z\030\244Cm|\2401!\250E\184vW\251\131\222\136\148P\198\213~\2246\017\241*\236\225\255X\253\212\145\245O\223#\"\222DD\215?\228\155,\210\243\213\249\179b\182\027\145\233\194\181\172\250\136A\161>\1826\003:CD\197\197Y\196#\163\247O\189\127\140\142\175?\202\015\213:\227\t,\173\169\175\240\232S\243\145\185\206*i\249_\015v\210\031T\242\003\133\024hTi{\159N\194\234\249\202\023v\159\151\215\216\216\128\201\214D\20096d\139b\023\024\155\157\206\179\152\210Q5\"\250\022\b]f\179\219\237\251\253\200.\175\012\204\170\202\159N_\199<\187\030\194\172\219\247\1333\177\"m\022\026Y\207\242\248ky:\246k,\134\218\n\156\181\253\164u\207\179\182_\169\153\245\168\224q\186Q\011@\213\026\242A\156\012\232 HGe\bV\031\218u%\208:\017\252y\1749\204J\218\223b\142p\253~\244\237\138\028t\221\212\169\137\187\127]\229y\190'l0S\235\144Y\207\\\181\190\140\012\030\149\218\212\219\185\160 \227\239\016\1630\139\b\157\197\218\212\165U@\232\232\213\166\174\204\251U%Mg\246\206\003\183Q\155,]\160C\003\011k\188\194\186\233\162N\127\167\139c~q\030\017,p\157\023\176\015!\214\153X\230\225EvO\225\"\251\237\240|\146\n\022:\224\133\202#\152\223&9F\187\174\199\155#\197s\162\248Md\157\200\220t@[\198\176-\142\012dNs\1360\199\188'\200\150&i\253\131\157\159\167\187\195\005\167-p\168\179A\002\011Z\163RN\185>\219\005\210\195\154\231y\189\253\155\149\217I\255j\138\237;\021{\1290\025,\179\220\200\207\162\001s\193r\171u\254F-\157\190pft\211\172]\231\000\021,T\142\254\213\022\138\145_zd\026\1751>\212\240{z\255\205\196\250\131\252>&\012\238\218\179X\177y\200\239\019\232\007\188}Y@\222\157\197yZ\209[\030\241\147\201\239t\172\030\161\189\019\225\r\207\178L\001\242\235\002M\195[\003v\131\190\135\241\196\142-\235\031wN|~\164a\135\246v=\242e\253\232C\220-\179\004%a\131\024\249%\192\199r\217\234\021\209\205\182\015x\208\176\220\172\131=\247\193\216\194\145\140\"\149\237\220\157\166\191\030\156\190\187'\161B\b\222\160\235I\169]WS\134\169O\175\176\229\252\198uk2]\220\165A\243\195{\136t\243\143I\019\015\158\253\161\178\253qBD\188\251G\197\t\195\251?\212\222\"s\192\159\253\240\135\210\251g2Pe\254\015\027M\248\223\248\143\154\141kw\135g\208\241\243\245\254\245\134\014\007:1\184\220\016\171\005?\253\200|\194S\023n.\228\016\031\241h\186\204e\154+K\0201w\137k\211\026\226\021\235\023\233\188\173\153\248\221\149\251G\236\204\161\004\002\174v\176\232T\139J\224\200\248\164\171w\160\243y$\228\2335O\225\224'\165\154\142m\183\t\127\027\165S\235\186\234C\174b\206\2264\154\176\136\155\236\172JT#\199\233|U\203\182\200\194a\215\239\230[k\196\223\023\217_W\031@\177\190\249\012j\168E4{PK\173\021v|/S\015s\186\135x\030\152\203\143;\152\130\245\135\029\006\143\253\247\007\214';\210\236\236!\224\212\174Q3|\196R\137\024\154Q9\186\207,\182X[\245\247\028\223bt\242\253+R\2386\158\219\201\157\134{\178\138\157\229\237\031\162h\229Nc7Q;\211\r\217\153\214W;0\188>\220\215O\176\223\205{\194\154V\214\146\252l\211\142D\002\175g\251'\172\159\031<#2L\2239x\176W\243\132\247\237M\r\139\168\015\2015\253\224\136\170o\189\139\185\153\251:.Ch\219\248p'?'w\224\018\159\183\189\014\tw\230:\211\137f\135\1579\028\236\143\176\173D\219\016\132\154\180\221\252y\159\140\175\025\233\244\164\134!\b'\1818\219\178v\128\148\173\223\130\214T\184\246\134\\\204\147\158E\228\188`LaR\"m)\215\2391\029\231\199\242.\002\006\217\227#\223cU6\135p\235\030\141O\249\t\144\175u\020\006\142\242\134f\155\005\178\160\208\168n\251\240\216:\020\141\208\238\236\201\237\136\"\250v\186\244\243Y\204\217\137\202\152.\227t\153\238_H\157\137x\016O\\\246J`\228\1796x\187\001\222.\252]\1815\246>s44\135\237\243\146\223\185\154\140\007?\136\182\163\249\1615?\168%\191\0239\171~\220\250\001K\132\149\200\155\022\237\195M8\rCR\016O\219\219\2411\142\242\253\166e\030\030=\2108\241\204^\019\144[hOL}_\027\236\140<\011\200\131\196m\018G\206\210\251\217\239\169T\180\"\216/\186fE\139\243\130\re+\242\194\212\139\220vg\011\210\022\240\170\149_p=\207\195\215\133\157\167\030A\233\183x\190\239\189c;wFE2oH\141\184\208\150/\177\154\219\214\183\006\228\243B\205\170\203\023Y\021k\253\190\029\130\234\183\015\201\025M\127PzX\165_\"\241\150\139_\023\249\137\219e\239LQ\205+\031m\134.\147b\140\007\168\012r\183\255\152@\133\208\148\020*\133\234O\140\025T\b\201\016s\132\015\1453\196J\003\251\226\003\236\024c\225}\020\021\\\250z\018\228\142~\rD\199cOp\229\169G\188\136\246\164\215m7\209_Zm\228{\170\002\0195t\025\2176\131\137o`\029\187m\185\134\192\232\213\166gH\202-\199\251@\153\156\207\028\215\021\168\016\023j\151F.\218\154\011\210\188\140b\192\142\253\200\014\135\246\242\157-_\2517\221d\215\145\\\226d\135\196\161\168M\156\001N\234pt\023$@\202V\210\227\"G]\251R0\249\129Wv\200\t\022\250\228\216\161Xik\011)\158\129t\155\254n\138 \212\210\166\218\005#\156J\245\238\141\175\230\134\b\181E\0167\020\1927\171QQ5-\166\231D\163}\154\213\192\236\2468\131Q\194\014r\t\246|\214\139W\170>e-\189/\200\231\129\217\161o\159\2234\220\160\190)\255\244\207\255\241o\255\249?\255\207\255xK\211\180s.\182\222\208\170n\146Z\r\188\135\n\151\189\170\181H\243\021;\"\173\176\195\248\2280\1456\228:\160\030\203\160\131D\150\232\225\182\152\232P\2132>.\202g\016p\226\236?_\139#\024i+\187f&pm\222\133o\138\212\160\246\191_\217]\190I*wd\136\2496d\232\194\146\012\145\178\246\210Gj\229\190\214E}f\187?=\212\004\160\028\200\019\252\194\168i]\024\211S\133t+\195\146R\250\148|\129^\022\137;\149M\170\028_\0007\163{o\158=\249\181\195\215A\229\205\003=\t\141C0\211\tBa\014E\165\017\004\2199X\170\173eI\239)\015\020|h\209oE\179\132\175_\129\182G\222\129\234\031\173-\011\189\252\192\234\155\028F\205\183\t\175\144\244\000\176\174\211U8\023BH \1942\255\160\170=M[\213~\169Q\197+\019\195,\205\\\166\138\161\179\024\003\253zc\189\252\\9I\207]zh\228\194\210\194\165\200\214\026\127}\130\165%\\\134Oy\150Qy\245\241\232n\189\232\248\220e\227\128\148S\187\164uQ\150\1541bi\211\170\183\141\204\026\156E\243BV\001\2438\161:\232<\198>\0078\223oH1\189G\218\166\027q\206`T\194t1\198p@_\252\201\2266\203\024\181\145\180Q\204`\245\178_#\254O\189:H\142\187Yvh\213\220\192\245$\186\015\247m\018;f\182\144e\tN%'\014Y&&\005D\211\162\223I\220\236[\253c\221\170\161^\164B\216Y+B\241v\012\220X\014Z\023]\255Y\129\241#\159D\246\\{A\171\201K\012\200\189T\152-k\223\133\024\212\177\236\185Z\019^\168`Yc\187\029\029\169\153\021uax\135\221G\128\167\027\170e\018>\r=\244g\157\175c\165\163\2367GR\184\181\243\138\235\238\154|\2517\212\014ec\203D\147\240\206\214\142\175\012\184\153\244\201\252\208Z\195\007z\192\146'\173\0301<\223\191$\030\\\158\154hj\205\147\229\025`\006\205\200\001\1341FAX\133i\210s\132\130\160\203\021\173\231\249\209\142\209\147P\217Fi\158\223;z\018j\171\004\181\144\024[V\003\149\245T\160Jek\169\235b\130t\205u\241\006\233\206=\169\157]*\162\016a~\223\174\175\166\026\015D\175\195 \132a#\248\207\157\228\241m\190\004\024.#\148\209\161\016\021R\028\208\251\208\211\181\225v\161HZsp\029\211\208\201\023\250\158\195\235(F\182\239\154\011\005I\145\187P,@\138B\141\244\1595*\247N\004\229K\156\132\022$V-O\243UAU\159\030\235\191\203\227\244-\160k\198\019\217\152U(s\205\137]\175qw\192\252\007&\250\014\131\026\178#\007\029\177\162\243\030Y\152\211\251\005\025\211\142\232\203\028\172\024\188\194\226x\028rE\229\011d6.F\159Gw\184\202\003ZR\128\152\180z\216\243\147\243\168\130\160P\t\223Q\153a\180@q\185\217x\015\243\153\201\237Eb\"E,\137\139.\0051\188+\011\171\217\023\157\015\030I,\173\245\166\152\145FY\025\011K1\233\163\172\183\025eg\223\139Y31GB\177\178\161\148\220\183\012H%\230\190yC\220\201\179\182:\144\021\0283\149byl:Or\222i\235\248\168\255B\208\162\181\154/\239\203\131_\238qf\241\237!*4\185\137\131\149\162\159g\191\163\019\211y\223\203\170\014\173Hu\203\252K\172\191\222\185XG\214*\162*\192W~\158<\232-\169\189o\014\155Z\153\147\022\154ah \156\012(\135x\165\233i\224\222r\169\247GtI\254\228\237\225\144\177\2532\216\n\186E\019\207N4M\143\251d\155{\003\181\134]\230y\007\162\141;.\156\255\137\016\160V\249\001.\173\148\206\186\189\178%\183\159m\255D\004~UK\169\233';\237\1429\138\133uC\n\2255\198\219^\187\175\169\185rts6\171\152\253\194V4\175s\011\251\235!\146\160L\139g\177\152M\133Q\213\003E\198\179\007\163`\017\014\219Z{ ,\184]f<q\164\139{&\014\170\182\234C\176\248H\161$\214\028\162\n\235\244\005k(\157\236%c\136\141x\172\206_5\t\223e\205\212\171a\134]F\"E\b\165Wz\152S\153\239V\202Q\196$\167\"\190\171u\012\185vA\251U\237\190(\249\186B\227\024 )a\179\153_n\028\177\243\222%]\247\n){\181\173\250\223\131\187?Y\221C\175\137bz\244\190SV\015\158e[/`k.\017\"\135\172\136\228\142h\161\177\149\208\028\168\226\163n\189I<+b\234\021\017K!{\130\015\029\017\203\252\250\177\002\026\181\214\130!\226y\027\"\"\214\199\136\023\173\151z\230%\248$J\144\021\225\005\021]\\\\\187\208\212\193\226#\133\154\214\015\195\184\026`(3\162\022:\139\252'\015\160\015*D\1521\180F\248\135J\228&8B|l\145\224\014t\186w\005\249\150\028\154d\162E\146\173\003~\017]\174\224\182~\198R\007\031\190S\150aE\196\172\0243\183/`\206\251\144\199\0150V\216\212u\2343\1962\143IXg\n\187/\189a\n1\177\178\203\137#\213x1\241\233\1375d\209/\b1=I\195\1517\226Ivz\129\158\196\244\150Px\140\202\006S4\002\207\253\177U\2478_\191\168\209\016\027\219\171X(\228\003\191\237-\235\179{\021\140\146N\132\218C\140\207\249\240g\244\132*=\220\185\235R\170\248\b~\230\150\03169w\139\012S\n\183\148\b\203J\183\152\bN\229\150C\029\127\242\164\213nQq\180\006\186\1718*\131n.\142\218\237{F\215\194\017\\\191/|\172%!\184a;M\133|\147\155u\252y\016J\0009Z\138\207)#b\255G\127p\212\227X\137U\018\180\250K\177S\167\204W\249\217V\250<\154\201)jL,\223(\219\n\255\019za\148\029\025\133\242\1892\163\200XV\229\149\0203}'_7\243\n\139\"6^yQq\2093\160\1928f\231\149\024N5\242\2374\175\184\b\218\176\189\011\163\246\137\168\215\151\187\249W\168N\248\198\210\187Cbi\227\182\158\t\156p\180\163\134\195\019\165o\b\193%\182Z\184=\030RW9\130\147\217\135;\005l\202\221\211\153\200;-\\m\002[\250\202\164%\213\019\191\246&\137c\165\216P{pc\221]t\210\212WZ\246\141p\168L\211\242\019?\203\249_\153D\140S\028\240s\198\217\192\218\235t\239\143\227,fP\245\0044\151/\211^\017\184|\001\129]n\242}\006\241\224\194K\238C\223Jis\195\164\248G1\023\158e\181]gC{\153/.\214\214\226\237\243\200\234\183;\246>\017\027\198\021\167Opuq\187\158|\023M\225\228A\1838J\244\202\204W\201\215\007\129\128S\251\173\206u\217k}\171\243\177\\\196|5\182\139\139\239\003 KB\223l\128\154\219\197\154\231\232\132\168\005X\234+\nb$\180\029A\168\207)U\1723?w\162\183.\\\209\209GT*\247\161El\022\226\181\253\004c\214\141y\227p\204\131\204C\030\179\191\163\019\002\238\0293\218\183\158\2532\181\030\170\026\r\188\249\229\195\243l\138\151xr\171\140\232\152J\148>\194`\219\191\191\138\169W>U7\007\127\201\128\143O\031S\003\ns\213\135\024S\141\007\130G\172h\141\250T\\\227\185Fp\196\162\164\245&f\220G\197\216\152\181\208\027\156t\139:\230\224\217y\221t\145\239\188l\219\251\144\002\011\144\251\146\205\229&\161\215D\233\215k\198jC\199M\224\140\181\131\015O\224\140\r8\153f\173\170\208\237\253\200@\005w\153% \178\191#\183\189\213G=\145'\173_\223*\128\158K\160n\135=\138c\222Rd#_\223I\r\190\\\205\198q}\133*\146\208\201\151\233\158\031o\209\172\245\165\213\255\128\224\214\183\160\194\240\212\252\004O\024\158\153\223\028\n\195\173/)\134\225\133q\136\167\222\236O\161\203\253\024\2200\1822\142\180\r\163\173\175:\133\225\141Y\229a83\171<\012\239\204*\015\195{\179\202\195pu\182\140>{8\136\229\216\199\245\166\171\217+\005\185#\193\221\191\b\0041\147\003\252\149\143\136B\147\004\167\210e\166\214\153\006\251iA\235+\239 %\179(\235\171\bAVn\177\030\215\235\254-\155\253,\153\160Fai\024\159\179\137\151([\235M}\239\164\000\144T\217$\255h\000\144U\219\172\168\186mlNl\229\178\237D\198\237\r|\016\181\159:\160\026\011\018\186\029=\016\001\221\014\028\016\t\254k}\251\139\196\027-H\020~\\\245\1970\230.\1592\012K\015\171l\000\150lG\177\240_\004*\221\014b!QYkn\023\140 \228\214\003\216^G\001\161\197\n=\243az\156\159\135\030\128\224\237|\153(pe+\239GP\128\224\218V\166\193\205\170\172\031*m\005\179\176\180n\183\026\017\131\237\247#t\246'\195O\167\233z\195\b\195~6O$\129?\253]whh\248\232v\152Hxvh\141c\238\188\023*\225\142S\150\172;\251\1566\224\134\192S\175\012\243,\002\132\148\233\145\242\179\b\017\180\242\196\031\234\003^]\150\155\031\011\254\227/pwY\017\212ya\191o\151\149\148\028\249\189\146.\171`n\220W\137\187\172\134[\234\208G\137\187\172A\154\248\151\190\171\219e,$\243REv\193\231\130\030\224\222e}\020\249\149\155\027^P|\233>9z\232\254/\1321\210\031\152\244v\243\237\204\252\000\2364\1429\172\191\203\147\253T\024\240\243\015q\")\242\245\135M:\230K\012]\158\225_\158C\135\227Ov\142\179\193\233\235'\211L\020\207\2113\136\190~n}\249:\142R\209\245\028\245!\135.\175\177o]\188V\211M\251\015<l\134<\236\184\162\187\128\171D|\242\163\203\251P5D\169\152\223\227\218^\147\221\194\127=\127\156z\162\219\244\2526o\163\135\185\020c\155\168\239D_`c\233\225+\193*\014v\127J\030\132\134 \019\171\131D\000S\171wD\000\183\019\017\157s\146\232\014s\145\175\242\175\177\138V\212\253\207\175\136\158nQ\174\208\249\231\2438\014\181>\1637\237\129\156j\229\152\135\1569\155\248A^m\241\016Pc\129\196Se'\249\198\019\130f-\2243\207\019Q\246O\252\128d1\"\131\221\199\018\208M((\208S\165\239\029ZB`\bY\016#\"\186\196\234\184\014\242\243\193\207\137&De\143\168\127\\\1714\167R\220t@\196g\153<\191_\250\002\203\250L\237+\196\140\200Z\020\207\154m|\133X\236\147`\175\176Js\218\239\021beN/\190B\172\205\153\195W\136\1419\135\248\n\145\017\030#;\245\001z\135:N\004\185\167\252'\130O5~\017tn|\155\217\165\171-\026\246\151\154A\141\2099\153\235\015u\170`\224\238\031\022\005\233\129\248\165\201\2250\166\249\193h\166\233\225(\163\249\225`\163\249\225\152\163\249\225\208\163\249,\248\232\205q\027\176\212\b\170v\001\143\248\019\205>\236(\127\";\004\253\231OTyk5\226\221\219\007\255B\160\19829\t\172\195Q\170\014n\254\179V\177\014\005\241\179l\181C\227\015\026\208:\"\212\213\029\252Q/\162\014'\002\235\022\254\160\203Q\231\196\019\184\178i\217\232\200\186O]\160u\028\195.\169\234\139\017\168\136\026\138\225\215\222\250\169\253!\b\170\234\026g55\158\201\204\219~\149\220y\011\179\241\220>\208\186\234\142\224\227\251\237\200\174\001\199\025\002R\235\146S\148\022\015h\169Nj\148R\168\251 \023\207b\132\228\007\234\184\220\244\181N\176\129\152d\195\172/\232\130\160\180\189\240O\181\151\131P\202v\016%\149\183\234}v\253M\188\213\175\245\195\151C\027\235\198\017\133\194w<\170\018\170\246\246u\238\230\211\219(\166\131\212\183+\153Xv\016\019\143\203|\153z$\166\154Z\175\"|W\181\253\253$\011\\\159\161.W\190\164\127\1463w\234\208QQ:>\176m\154]K\207\027lj[\228\189\162\197@\187\140\nyE\172\219\197\212I\211\155\21834_\017\219\022\155\254\172\142\182\133\211?\169\019n\206\229\188N\223\214T\255\232\182\217!\174\159\162\214\139\228\014\132\189z\016\189\228E\189\231M#\130iL\159/\218\188\236%\181\160qy\\7w\023$\247o\176\"\178+\026)W\190h\\`_\n\171^5/$Xo\1597\208\167\187?\029g\251\016\1575\231\rJ4\148\132?w\015j0[cs\144x#:\\ \210\132\222V0\138\189\024z\132\192`\011\152\197F*p\202\004\163^\t\137\1454\"JC~\246n\234\186y\251d\158\154\222\194\027\237.\001\224D\243\221\1656\254q\165\1963\015LI\2316Z\247\151\174\b\184\176\193k\159\015C\151\128\180\254t \b\175 q\002_\239I\209\232\189\238K\231\222\2281:\234\239\154\253\147o2+\168\015\031n\135\179\203\r\211\243/\132\199Z\243=i\243\139%H\234\232:\128!\157\204\252v\t\198\237-n\012CN\172\159N\242\200\179\249\215\154\227T\157b\247\243\252\148\029\1340\190_7\159PX\127hM\243\222\228\145[\011G\154\242>q>_C\163\247\143\201\198\236\200\234\129\237QsO\017\182\237Q4\202\217\025\245\184\002_\240\161o\163t\246V\193_\001\1625\220]T\214gK\"5j[\195Ya\139\020i\196\016\228z\127\136!\136\232\236\159\245!\227 Pt\163\173\029\136\228\"\216\255G\218\155-\185\174cY\130\239\231+\252\003\250Z\1393i\030\150f \tJt\151(\029\r\238\215\253-:3\170:\172\"#\178c\232\225\239\155 %\146\216X\139\208\169\202\147\137\188\247\158\1816@p\237\141i\131\170\250\241I\230\030\174\019\170\215Q\223\195Rgx\136I'\213\237B\162TU\191>~\030\242\127\134\253H%\180X+\248f\170\237\151x\245\244\195_\143O\029\191\152\031\157\175\198\227h\2000\031%\174\250\1894\213\219\254\186_o\129@\243\r\154c\031\001\015\195/bA\200\240\161\252~\231t\253\253\214\177\0053\139\028\002L\150@\211\005\004\151Z\184\246\131\217\203\198{u\003\152@\242\215\211\249x\209\231>z*\002)^\251m\231\179\185\166\132\255^\189\238\190\182-\253\235\242\245\180;\014\217k\240\175\171\222K.\023\250\215\143$\192\195\209\\$\234\151\202\180\153Z\004\204\030?|?\158\192\155\190on\250.\238\193\186\234E\129\193z\243Z\221NmM:Q\007\175;U\179\241F\135\175\223\154=\159\142^\223\251\165\255\145\253u\252\170N\199~\176\"\"\213\201\171\170\015\250J\249\233\235\199m_\169\142\214\159\189\154\223\142\237\031\141\213p\255E\195E\176\225\137\012\250\241\163\134\207\161\251\222\190>f$O\165{\235r\193x.\215[?\145\2026\253@\231c\174\195:\171\158\215\155\255\139\150\172k\012\255\171\198\154\229*\253\127\205\214\240[p\237e\140,\199\142\004\150\225\231\223\030(\026\247\026\243+\t5\243\215\166\159\143\223.\151\214|.\200\156\146<\190\159{\223\031\251h\183f\180e\131\218\240Ko\156\221\029?85Y\165\246\187-k\245\166\171\228\178]\1739[%_V'mM\190J6\243\016]\241\170\011\247\1955\211os\222\239>B\222\240\241\247!\001e\168\135\160z\191\212\230\174\163\023\248\184\154\234\129\213\175'u\185\248Pz\190\184\250\248\129\247\173\232\128\175\t\220\188\238\244~\127\169\250\225\1835W\136O\234f~<\143\219\1756\155\215\237\190\127!\251~bQ\189T\234\212\154\233\242^_\175f\175\248\251\246\186\255W\207\218\207\164\176\1386\0031X!\150\183\247/\196\012\006f\184\194\236W\225\0261\195\129\025\1730\239\127\131\200\209@\142W\200\245\177<\031\0175\030\168\201\n\245\171?o\134\221\148\012\212t\133\250\189\235\1675W\248\188\233@\206\214\154\252\221+\026Q\179\129\154\175\213\171\015\2517\133\184\249\192-V\184\237\247\0146\184\024\152j\141\217\251XkR\235\136\0055X(\215, Z9\208\170\181\158z\211\231\015\200\173\006n\189\194}W\239\176\147\235\129\169W\152\251\183[\221\190\193'\213\003\185Y!\031\190.\253\127\135\228\198\144\1315\183\237\212e\135\0307\030\0287Xs\220c\135\164\028\015~\027\172\249\237\233\248~|\131\149\014\158\027\172y\238\185\189^ u\240\219`\205o/\251\227\007z?\241\224\183\193\154\223^?\206f\178\011\184\131\227\006k\142{{\135\22148m\176\230\180M\255\172\144:8m\176\230\180;}\134\204\193e\1315\151=\226*\007\143\r\214<\246\132\004\024\015~\026\172\249\233ewE\209%\030\\5XsU\"\132\193O\1315?\237\135\188\022\250x<xj\160W\155\011[;xi\208\172\134~\252J\006\023\r7\235L\212\216d\240\208p\205C\191\212\0212\007\023\r\215\\\244\210/\238\204\165G\248\180\201\224\166\225\154\155~\161gM\006\031\rW}t\200\012\255\234Wg\128>\248i\152<C_\\\232\001\134\006\167\r\215\156\246\0119{2\248l\184\230\179\237}\211f\2459\006\255\r\215\252\215\252\1561!\015.\028\022O\180a\197\200\224\206\225\154;7-t\203dp\232\176\\\031\244\251\024\r\201\131O\135\149'\026\156\218\n\145\007\191\014\215\252\218\164\150\221\174\253b\160}\129\213\015\222\029\174\142\195\189\195t\202\236\174\20815\025\\=\\s\245J\221jc\132\198\153dp\250\200r\250\251\141\209\197d\250/\022m\152~\015\229\143ar\204\168\227t\218\225\006c\249c\152\0303\2388\161v\184\225X\254\024f\199\140;M\169\029z4\150?\134\0252\163\223'\213\0149\030\203\031\195\028\153\145\239\211j\135\156\140\229\143a\142\204\200\211\196\218\161\167c\249c\152'\211\134\143Sk\135\156\141\229\143a\162L\235\190O\174\029v>\150?\134\2012c\143\147c\135[\140\229\143a\154L\185\214\004\219\177\161\198\242\1990g\1666\000\177\028\203\031\195\132\153\246\217}\146\237\176\171\177\2521L\154\025{\156f;\220z,\127\012sf\198\157&\218\014]\143\229\143a\214\204\232SXp\232\205X\254\024f\206\140~\159lKr\176\025\203\031\195\236\153\145\135\233\182C\r\198\242\1990yf\212\199\132\219a\135c\249c\152?3\246}\202\237\144\163\177\2521\204\160\025\249>\233v\200\241X\254\024\166\208\140\252\152v;\236d,\127\012\243h\198\030&\222\0145\029\203\031\195<\154Q\239So\135\156\141\229\143a*\205\200\227\228\219\225\230c\249c\152M\211\151\012\171-\198\242\1990\161\166/\025\2002Pc\249c\152P\211w4L\193\029n9\150?\13495}EP\026\213X\254\024\166\212\140\250\024\030\029v=\150?\134y5o4j\179\030\203\031\195\196\154\015\023\240\0055c\249c\152Z\175pA\147\195\205X\254\024&\215\148;L\199\029n0\150?\134\1375}\220\197\132\220\177\016\142\229\143a\138Mk\007\207\028Fc\249c\152]\211\186\231\201\172c \030\203\031\195\172\218k`9-wL%c\249c\152h\211\167\000\225 L\199\242\1990\183\166\163\149;5w\012ec\249c\152g\211\025\214c^\237\208\243\177\2521\204\176}\237\224f\138\177\2521L\183i\136j\145\211\134j,\127\012\179\237\149\137\1958Ew\232\229X\254\024\230\219k\241b\152\164;\244j,\127\012\147m\0262\172i\186c\163\030\203\031\195T\155\142\227\206D\221\177\163\199\242\1990\221\1661HL\213\029+\205X\246V\204EMS\171\179f\176\174\186\152\236!w\194\159\014+\238\190\028-\216\143\226\242e+\210\205X\026\027\225j+\238\191\1379\220Cw\218\177\t\211a\005f~\156\017\2178\221\191\2262^\209\145\236\160\206\134\005\148\185\209\137\216\231\1495\247&\188s\019\212\003\202\174\215~\250M\216\207b\135\210\240S\196\127|\029\253\241e-jH\143\1651\148\225\135\184\127\000\184?\187\174\180\249\190)z\151\195\n\188/AK\\\186\243*\179\1774&\n\220\134\247'\2180,\195\205EP\183\r\239\2546\020ciL\148\184\r\223O\180aX\144\167\021j\195\183\191\r\229X\026\0195n\131\218\159\192\246\211&\028\183\175R\141Y\135\249>:\146\225\200m0\247\1582\006+\029v\219\178\205:\145\181x\2160\203\160\251\127X\135\247C\171\237\190\026\142\2222\226\246\159+O\219\179\134\r\183,B\245ZL\249v\178p,\r;^iuu;\239q{\019\226_&;a\135\154:\236\173e\208\191\031$\167\149\201X\026b\006\003C\031\139\204\135Q_N\238\178kl&\244\226\251W\026\186\227\181\218aZ\001k\027Ep\230\147\156\145\012\189\2468}(\176\151B\183}|\027\002\026x\248\1725\187zt\244\189\021\132:y\235\173\188T\231\246t\181[\241\246\186\255\207\129\245\135\127\252\235\2550?\170\217\135\024\139_\191\030\142u\219\180f\196y\140\160c\189\031\011\234\127\253\233\239\134\220O\227,2\241\216\251\172\240\242i\190GE\134\143\241$+kV\163\213\170\133\241@+\223\188V\199\019:\190\2227h\2070\031\226E_\222Y\246\1845p\164*\243\205X\026^Hj\251hkX\219\224\175}\137j\0279Nm\225X\026^Lj\219\170\195\001V7\236\131\247%\170\238Nr\234\139\199\210\016SR_\173\246\248\241\134\141\239\190D\245\221IN}\233X\026bN\234\211-\218\168\205\135M\238\190D\181\r\020\167\174|,\rM\145\186.Gt\178\145\015\243\170\190Du\r\020\167.5\150\134V\145\186\190\021\220\131\207\135\169T^\195\202F\142S[5\150\134\167Im;\005\247\187\243\193\243\250\018\2136r\156\218\244X\246\188\130\249\219u\167\175\240h\191\024<\174\192\030\247`\201\026\139\205X\026&\243\185\214L\245Q\133\131\211\021\216\233\238$\167\190p,\r\145y\221\187:\193\234\006\167+\176\211\141\028\167\182x,\r\143\249\220^\221\246\176\186\193\231\n\236sw\146S_:\150\134\200|\238\128\2065\138\193\229\n\236r\007\176\188*\242\1774,\230q\029\172ip\184\002;\\\135jRciX\204\223\222\225\129r1\184[\129\221\237\029m\127\021\213X\026\026\2436t\190X\012\174V`W\003\251\030\133\030\203\158\164\152\159\157\208#\169\193\199\020\246\177\019x\"\181\025K\195b\254\005s\162\212\224\\\n;\023:\240Q\225X\026\022\243\172K\011\13535x\150\194\1585r\156\218\226\1774<\230YW\133\"\190\026\252Ja\191\026(N]\233X\026\026\243\170\027|\174\193\171\020\246\170\027z\170|,\r\139yU\003u1x\149\194^\213 ]\168\1774,\234U0\191H\r^\165\136W\161S\018U\141\165\1611\175:A\015V\131_)\236W'\228\193J\143eO+\153g\029\225L\160\028\\\171\196\174uD3\129r3\150\134\198|\171\223\2180w\226\127;\245sN\221\160j\007?+\177\159I\182\211\130p,\141\005\230s\230\026\215\253oT\219\161\022\012\222Wb\239\147l\167\005\241X\026\011\204\015\171\243\215\233z\220\158\251yi\255\151x\206W\014^Yb\175\004\006\156v\164ci\140\228\222wAF\248r\240\215\178\240\188\011<\214\151\249X\026\011\202\219\00286\150\131\023\151\165\167~4J\150j,\r\191z\234=\224\022\012\206]\214O\188\006\216\138j,\141\r\237\215#q\196\193\233\203\198\167G\236\147z,{\011\021\243\255\139:\192\193\181\026\"@\133#\192\157$\235\1716ci\136!\237\247\227\152\001\190\211\176\218!\002T\017\233\243%\215\169=\028K\195\127\194\255Y\003\134\000Py\003\000iC<\150\198D\234o\131\190\160M\164jp\255*\2435a`;-H\199\210X`\190\175\222w\135\214\200\246\157\244\193\224\250\021v}Av\234\207\199\210\024\240{\190\185\175\138\0260\248~\229\243\253\145\237\180@\141\165\177P\249\223\001k\194\224\252U\237{\t\164\r\213X\026\019O\248>\204O\172\006\215\175\188\174\143\206R+=\150\189\129\154y\254\254\241u\031X{=\248\127\141\253\223\162\202\186\235\205X\026z\248\196\179C\t\214C\028\168#\239\195#\r\214\225X\026\011\2413\189\127E-\024\002A\157\248\187\255\nZ\016\143\165\177\240D\028\216\170n\219\194\1830\132\130\218\027\n\030\006\156v\164ci\140\228\254v\212\240\138D=\132\131\186\2405\162F9`u>\150\198\130z&*\227UQ=D\132\186\244\135e\184B\170\213X\026\027k1\161\187\149\230&\022m\197\016\020j\030\020l\190\211\138j,\141\r\237oE\255JQ\027\134\176P7\1906\012l\167\005z,{\011z\243D\011\190P\011\244\016\026t\224m\193\023h\129\222\140\165\177\016\250[\240\t\151\173z\136\014:\242\181\224\019\173`u8\150\198\194\020\029\238\215\237\222\021>a\209\137\000\030Z\179\238\135\247\203t*\176\167\021l&\176\151~\209}&\215~+\157\011t\015\230\166\011\249l\187\149v(\217\014\163\224q\187\001\019\202\167\230\213d\146\165\135CW]=1\179\198\243,]\142\165\177R?\213\018\026b\245\144\t\173\245\019maQV\215ci\236L~Y\029\015e;\252\170n\215\222\127\242\242\240\215\2150\218\188v\151\131\221\153\205\198%]N\173\201\222\187\188\168\203\169?y\166\212`\133\186\215]{\225T\230~\229q\167z\011tz\216\012\222\215`\239\019d\217UM8\150\198\192$\208\133\1996\183\225\147\250\199\211\235\t\201\174Q\1283\254\196\199\203\207\155\190\012\159\138\024\190\236\128\233%\160\155/K<m\160\002\006\198\031M\024\127+\245Lx\147H\155\179\026~\001\217\220\194\030\142\132_\187\153\016\252\239\225\1303I\210\215)\147\230\014\199\179\249(\195\253\n\241Z\139js\011V\031\207\219a\184\178\230\247\206\198F\1761\027\167\1664\188\128\240JH\012\198\210\016CB\220Bb8\150\134\024\017\162\249\184\129K\140\198\210\016cB\212\136\023\143\165\225%\132\247\209\"b2\150\134\152\018\2267\1721\029KC\204\b\241\n\251&\027KC\204\t\017\1824\031K\195+\b\239\029VX\140\165!*B\220\171\011 \170\1774\196\146\016\015\176\198r,\r\177\"\196\206\2051\235)\213X\026bM\136P6\245X\026\158&\188\019\172P\143\165!6\236\245\239 \179\025\203\158\0250g<+\237\018\203\205X\026\"\243\198\011\234\2132\024KC\012\169\226@S\203p,\r\145y\227\rU\024\141\165\2251g<\193\206)\227\1774L\230\142\239\152\153\140\165a2\127\220\238`\247\164ci\152\204!\127\194*\179\1774D\230\144\253\132\nU\153\143\165a2\151\1720\179\024K\195d>Y\193\167Tci\136\204'\223\220\164\159\158R\142\165!2\159\172 \177\026KC\172\233C\194\142\173\199\2100\153W\254\014\031R\143\165!2\175|\195\"h\198\178g\134\204+w\200+\171\205X\026\"\243\202\029\226\005cix\204)w-\"\134ci\136\204)?\017/\026K\195\139\233\019\130\183Q\197ci\136\204'wGTc2\150\134\200\028\235\011\188\139*\027K\195c\194Qhh\173\234\177\236\137\253\204\247\2186m\167\182\187\169\170~\n\2557g\141W\155\031ut\144%\134\134\b\186\195\216\b`\183\024\026#\232\142\216M\028p\169\207\230\019(\170?\144\212\135\175\158\251\134\153)\168\134@3\000\17314GP\210\246\002a\137]\005\177\196p\233\130\245\023\134V\192n\131\1615\128\190c\168v\160W\243!\187-g4\2008y\2331R3\129\006~}\016f\200\159\1290\144\198\217# \145c\143\140\019\2165\024\155\174t<\161 q\255\196\208\156['\012 \241\022#\145\192\191I\147]}\171\157\218n\213\026\167\226mg\020$\248=\134j\000=`(Rz\007\161\201\134\183yK(\001\167t8\222&(\140\1590\020(\252\134\145H\223g\012E\250>\019l\n\199\006\140\205Vz\143P\\\129\171\175\213:P\b\191`(\018\248\133`K\132%M@\017\252\138\161H\208Wb\022)\186\"X$\233+nC\138b\247\007\134\162\169\200'\134\"\r\227\017/EQ\250\027C]\017_\213\167\222\239\245A_9\011\233\249\155`\129\1585F\1300}\196\200\197\219\144\t\254{\213\239\213\237\219o5\239\240\137L\255\161\219\151\230\178\197\011\187\127\007\239x^l\014\138\218\179E\237\213\177\187\028;\213]_\222\142m7\238\223\022\206\022l\157o^\245u\215\030O\195\198\251\190o\227^\191\236\143x4\204\003\000>0p\b\192g\006\142\000\248\194\1921\002\239\024:\001\232\146\129S\000\1902p\006\192\021\003\231\000\2201p\129\192_\012\173\000z\187?^\205\142:\227\148\128\243\205\192\021\000\215\012\\#0Ek\128~c\224\006\189\029\246\226\011$\237\138\162\145\182O\020\141\196}b`$\238\237\246\147\160c\140\198S\183\"\193h\141#Y\145\0188D+\212\131\151\011n\183\n \024OQT\b\193\248\025U\132\155A\218\001\163\195\133t\136J0\026\131S\b\198C\129B\014oR\131 \184\128`\210y\n\130I\231\149\184\025\164\029\021D\179\206\1711\026\1315\004\227\206+\145\242\190\191q\163\203\000\130q\231\149!\004\227\206+#\220\012\210\142\024\162I\231\149\tFcp\n\193\164\243\176\242v\164\213Xz;\210}X{;\210\127%i\ti\nV\223\142\245`M\224\024\141\245\183\195}X!\001\254$\251vU\000\193\184\007\171\016\130q\007V\017n\006iG\012\209\164\251\170\004\16318\133`\210yH\128\239\172\243\n\b&\157\167 \152t^\137\155A\218QA4\235\188\026\1631XC0\238\188\026)\239w\210yu\000\193\184\243\234\016\130q\231\213\017n\006iG\012\209\164\243\234\004\16318\133`\210yHy[\214y\005\004\147\206\131\147l\214y%n\006iG\005\209\172\243j\140\198`\r\193\184\243\134|\188G\nO\245un\247\251\1586\237\220\1784\158z\200\195c\188\143\021^\184\194\219\238V\136\209\n\177^\225\197+\188\239\181\n\1475\226\n/]\225\189+\206\203Vxz\207y\249\026\239\192y\197\026\175\227<\181\194;rZ\185B;\173tg\181\214\2043\231\213k\188\011\231\233\021\222u\165\157\205\no\199_{\179\230\128\215\011\175\176Y\243\192jE\216\205\154\011^\214\154\026\173\018\1715\234\154\023\014_\227\162\204d\245=\254\182\242J\1545O\\\169q\205\017\219\149\234\214\028q\248j'\167\174\249\226\225\216\153\\\208\211\238\229\246\206-\172y\165\217\159\166\1965\191\236\199E\202[\243\203\246h\246$\135\175\001Q\254\154\127\238\219\235\181\031\180\204\023\222(\127\205O\031\159\135\163\228\230\153\198{\172\232\205\230u\241K!\195ga\174\237\2456m\245\146$H\189\t,^\221o\218\153\235eO\211\195\241G\148,ByV\213\187\190\190\158\254\252\234\252\\\137\222D\247\n1\229\191!\202\248\243\181\176q\235u\221\127\169v\157\t\171L_\207\17057\237\204\015\181\157O\199\189\242\247E\246\224\220\171\251\005j\254z\231\140?k\246\248\201\183UN1\246\138\205X\239\143\251\143\2013\014\236\137\242\241T\227\239\209\145\198\140?F\245r\135\030\015m\191\153\230mN}o\014e\193\006\245S\202\186\237\207!\204W\143\171\163\249y\241\011iT\243j\142,\134xu$\152`\243\218\028\251N\174_\252\208`\254U\158\1679\225\235\238\235\212\031\196\168\203\245\184'\157\023D\143\183\1274?X\196L\197\175\203\159\r\238\159\\\017`\242:\255\180\239\n,}\212*~\004r\252\173!\204\201\238\191r\212\183t\223\254\188\233\151\254\233v\253\004\237\244\031\b\157\191\182]\223a\147/\156\143\1659\136\198\166\139\254e\237\015\230\221w\253Q#\198\152\031\2283\245M\223\t\212g}1\175\031Vo\014R\247\181~|\151\205<\218p\t\001\219\190+\216|\184\203\188\214\211\238\172.z]\192\193C\192\140\132\244\027\232e\179\250W\176\218\170F\130\199\159\180\130\224p3>\130\233\242!\253}\250U\\\243C\235{\252\012\225c\000\160,\244\016a8\252\178\231\226\183\237\030\143\252\015\132\142\006\244\242w\237\030\240?!x\252\248!\208g\237'\015\194\211U\164\247q\171\173\245\167\250\186\188\220<5d\143Q\011\016`\005\249c\204\026\220\165\023\135\238\174\187Q\172\176\130b\026\170\\\002\172@\189^?\143F\018\151\023\243;\193\195m\n#\144\211\173\171\174\183a\204!2)_\031\216\1298\153\2413\171\251\143\146\214\227\207\152>W]\253j~\200s\000\211k%:\\\252\228\153\255\022\138\014\155\215I\175\247o\164\254'\128EfV\212\251\253\016\219\176\165(x\253<\158\235\229\241\246\248\233\213\190\189\1321\253$q?o;\144\232\026E\139\201\000\129\196\015\200\154\157\228Q\217E\031\218\234\184g\221\028\245\225\\m\183z\249\171\147\219\254]\213\004\158Y\240Q{k\248\252\209\142\145FP\197\252\131\191\023=\222\242\025~\136\022\163\007\t\255\166\015\189\205\203\014\007q\147\206h~W\214\131\234\133y\213\247\165\137\247\186\144\142\234Y=\151\246\247A\253\004\169_?\219\237v\2555\135\199}\219\145`\029\2453ys\143\236\182\191\0290\"\222<\198\207\181q3^L4V\164\017\135\015c\253\136\240\219\131\241[\209\251\143\2492\245\236@\255@\228~\206a>\1788\139\229v2/\152T\021?\170\186\220.'\221]\214\1893N\230\129\223\012\141\239\234\227\235\157=E\138\176c\187\238\255\1882>\198\217\171\183\130\252U\218\165.\025\023\211s^Mp_\239\127\245\152@]\142\251\182\190\017\t\153\132\197s{2\017e\197s\226\234\213\252$\183\254\024&\181\188\206z\158\210\222.k\175\160\239\176!2_\250\253\186\222\234u\029m\214\160\231~\"\189{\226*\159N\250m\"\243\029\146~\144\186^\191\150\001d\248\207%\249Y\\\157\004.o\144\158\135f\242\187\2044_\141\193d\186\172\169\201[L\162\185/\245\239\213^\029\148g8I\226\153\241\196\232\147$\247\217\195\248\011\221\247\137\128\245\241k8\200'\233c\022\177BD\131}\146\241\n'\193\174\212\155\175\212+\248\176\250EX\031\218\225\157\206$\139_~\031\171\246Nh\018\251\231\223\159\172\167\178H\207VU\191>\179~1\223\152}{\239W\167\245\016\248\207\250\164\251\205+\168Q\243a\217\005\180\218\183\253\182\014F\134\022\178\031%\199\159\244\214\004\030!8\251ebm>\029\011\224\244\151\217\181\249h\236\130p\234\189\255\216\017hjA\203\227\239\004\151Y\184\1719\243!\200\220B\190wm\163W\186\162\000h\222\019\202B\155\128\214\141\179T\012/E\199\169=\001V6p\184\137\195\219\\\0034o\179\182\208}\224Z\235\142\198\005S\203\197\006\128\185*\138\192\133\155\025?A\011Iw\234\157\217\181\213lZ\160j\002\021J\238\142\183+\239\140\"\001h\222\027\182\146wZ\157\215lg\000\205m\219\154\222\169\142=\160-\231~D'8[\153\213\238H{WH\243F\180^\216\162<\028\153S\020\182\030\251\227\182\235\142 \027a\178\015\191\179Z\254\240\239\127\251\207\255\250\227?\255\237%-\205\189\180\005O\217\186\172z/\221\247\227<\174D\217\170\252T\227Uf\210\027*\004h\250\218\148\173\204\166=3\179\182.O\234s\165\t\137\131\229\r\1765yi\015\167\253\184\245?\140l\215\222W\251\226\214\189\019\186-\210\138\252\236\185V\182<\235\227\150\224lu\190\169\154=\163\018\163\194\190w\165\166\031\001\143L+\202\022\180\254b\150\133\156\135oz\172tv\141\224\188\191mm\151\234P\030\025\180\017\175fO^B)\212\252\219\226-\174\176lYwz\229!\203\208\193\210',#\023\203C~\025;h\030\241K[\216\007\243\029>\012\020\170\222iM\194\\\153\137px 8[\192\250\147=\143-\224\227\158\132\225R\232\247|\235\023A\188\255K\128\230o\160\018\221\196\166\143\165\140\200\231+[\r\149\182n\251\149`\191\160\226\237m\000\154\182\183\218 4\215Le+\247\218n5iu\021\138\249\177\025 .\004k\235\246\179_\142\241\007\172b\023\204\159/Y\241O\250\144<0\247Kf\194\017S\006\014\204WZt\210\186\"~U\021+\188\157\222\147\201ke\139\1899\030\137 \171\146\219\175\250\249\015aU\172\171>\021\139~U-\134\233\253\251\202\219\214.\152\191\237F\204-\174_\024X\175\132\237-\r\028\181\152#\031\251}f\218\240:t\193\180\225u\196\219c\152\132\021\175<\133\249y\007\204\018\145\252x[[\141\214)@\243\231\144!\189%^P\219^P\238o\172\254\021\217_Ug\182\167\247f\146\202\194P\173Vz\214\140\243\152\181\226\012\159-\155\223\215\021g5{&E\219\027\250gYy\025\218\193\242W\209\184X\030\215\245\138C\2081L\007r\153D:F\135\220z\031)/\172Q\145\152h\178~\209\182#l\251\195y\214\228\149\241\160i\217\156F\167\156U\182g\246\212\217J\196V{\214\194\156F\212\029\127\019\005#}\245#\003[\025\232\021\223h\206l\157\160m\223x\179\164\242\161\137\195\235\021\223Xa\213\188\174\235\145\1747\180^\t\026+\180\134\215V\159\205/\020b^\179\226<\171<1\153\186\157\175l\223\172\tW:b\141\1832\176\b\222\180d/\154~m\1910\210l6\175\239\170\219\254\222\206s\235\014\240b\147\146f\241\002\201\027N\210\000\209\252\252\234\146\024Jb\189\152\182,xQj\243\"\201\187\236\213\194\169\151L\241\136\177\195\0286R\017\181\223\027\183\168\137\164\014?\204\007\136\253\206\171EL%q\025\204\151\188\202\230en\183\194\134*\241:r\201;,\246]\022\188R\217\188\194\169Oo/.1\td\167*I\212&'\b1S\2095\165\1954\251\252\144Y\218\204\202\149\206ggm]/\200\230'\216\150\228Z\146+\147/\129\152\133P\158\150\204\182\210\136\167Ds\027G\003\214\230\249\130\169\237\183\025\184N\217\031\211\178\007m\236\254\r\028\207\028\246\214\0013\020>\0298\174y:~\194.\n\011\251Q\003\1999?\151;\160\011bc;X\224\250\230i\185\12993\163@<\166\227\154\227q\209JOE\129-\254\192q\210][\155\004\019\221\245K\218\203\237\140:-\138\236x\0228\030{\213\176\253q`\243\028\143\005\135\026\011zb\007\138\160p\131\218\226\144cALE\143;\142k\031o-\152\194\131\002\199qO\231\246c\185\022YpK\219\135\002\199u\213v\185\128X0+\209\191\142\223\246\235\148\235\0141\2519\165\197\212n\136\226\2395\237\2157\022\219\241^sR\128\234\205\002;4\134\142\247^\250m\254\189B\142\148k\219\145B\199y\183`\216H\138\141\253j\194\208\165\245\227\227\241s\1772Y\178m?\b\029\2395\179\182v\1774]p\133\027\134\142\003\151-\228\133v\247\134\142\251~\030\225\144\149\020\153\253ZC\199k\171]\187\007\131dR&v|\011\029W=\031\143H\249e.\136\142\175\182]\133\164P6\182xC\215K\205\153!`V\027!\"\199M\205\177\029\"\134B\n\165;\206\157O\023H\021\161,\172\220`|\238\157\rQSmS\145\151vW\236\226\230'\151-\178vC9\030\154\205UH\139\217\184*:\191#\162\182e\027\161i\239E\239\145\026\204}(\139\235\248h?\219.\161v\205]\018\139\234N~\207\200Cuf\191\212\200\157\252\246k\235\171<r]\026\176]<\138\193\172\219$;\177\224\1753[\143\145\227\175\195\174\215\229znk\164-\221\1966\031M\136\135\243\212\011d\139~\203\192\243\163eCb\166\151\022\211q\221r\177d^\240\002;\202D\174\231v\216\021\026\017e\"\199s\203s{\129\171\177\164I\133\180\028\231\189\\5\154G5\"(F\142\235\014\007\219\136Y\t\166\227\185\253\te\169\207@Ui\184\177\003F\164]U\029\209Aq(\022sQ\227V\218\193\026c\251u\198\027\183s\021\140\197i?\215\180\169\142\219\194)j\218\207\212l^\232\014\231\230'\186\0175\183\007\1858r\231x\167\019<J\239\1359\155\2348\172\250]#\158\018\173u\252\244~\209\007PK{f\024;.\218\029\225S\138\213J\236:\231\173\131<;\006\199\142k^\020\b\134i\218\136\250\nw\172As\2304\019r\141\029\207\188.7M\023D\177g\017\151\238`\\\129a&-C\209TwD5i\204\128\152\218\001?v\188\210N\215X03\241\022\029\159\252\212\234\004\251\167,\237P\0167\174;\019\r\148\149\237\151\201\198\157u\028NXwemK6q\028\179\185\193l\0191\248'\161\187\146A\163p*\231VI\004\162\236\226\132z\193\012DS\029\175\028\018Q\016SD\145\196\241K+)e\"f\027\177\233\145\164\224)\193\b\150\133\161=\228'\142[6\n\231\241d2<'\238\218tL+\253\029\146E\131\0110\160\192\148\151\165\r\241\134\148\187\217\0077]\1780\182\227fR\186O\141\0222Y(\182\250\146\202U0\236\230D<\174\235\169GX\159\178\023\240\137vW\211\199\198\028\193\001r\148\01159\158j\165\244,\137\246S\166\142\159\030\244\030\005\135,\174\237\246\166\238\172\183Es\154,\214\182\152Rw\252\252\212\026\004\149\172\223\179\179\153\145\187\025\1386\178z\162-\159\212q\211\219\005\242D\156O\129\147j\180\180\204\146\200\014\244i\234N3Q\234\212\194Bn\235(uG\209\182z\239\023%\023D.\236\225\"\205\201\244\190\223\139B=\157f\226\0299>\251\185k\209\198N\207\172m\166\235\169\239h\209\151\165\202\158\210\167\165;7B\219\249YZ\138\151\2358\2342\231l\193\211\162\194\218]\221j\180)\147eb\160I\029WU\2313\012\014\153\022\239\165\001\227?:&\201\178\198\030\1393w\019iH\129\003\212\"\178\003\127\230z\234\025NW\178\162\180\245\159\185\219Hg\184\132\239\153v\231f\142\171V\234\003=\167\202\236H\150\185\027\192W\184\020\200\148\152rd\142\179\138\172\191\005U\236:g\169\187\225\000G\151J,\1792\224\164{\212\179\149\216\b\202r7`#\2335b$\206\028\199\236`\2324\147(\139\231\186\165\149\172\183`\230B=\238\000\170\217\188\161)\237`\1449\174yD\2093\223lDk\029\215\132\018\232y\246\152\148\185c\232\030\249e\190\tl\191\204\208\230.\226E\246\251\207\193\242\243\134\162V\190\017\251'y\224\014\188\234\138\136b\196\206\029\159<\180]\191\159\128^H\030\136-\240\220\157\233\194=\174\158h\171 \143A\200k\145G\231\129\136\\y\226.\207\172\004\200%\213~\159\185\187I\212o2\221P\173\161\144B\158\185Gf\167\227\005R\003;\144\228`\139\b\190\154PL3\242\002\173\238Np\227<\015\197\142i\238\158\195\028\247h\243$\015\197f`^\130(\141\166\t=\211\142By\229\206\225\182PHil{v^\187;\224\230J0\162\138\005L\2388i\185?\030\145{\231\177=\169\202\221\221]\147\"\184r\138\211\155\176eQ\184\235R\145\172\186\224\166\182\144\139\192]I_\208\019\023\153\253j\011w\198\139\182\025\242BL\001\011\199[\173T\211\005\177\182\021Q\128ST+\219t\166*q\230[8\222\250\209\031Ph\176\015\147W\145\189\212*\2209\175F\235\239\188\138\237A\173p|\245\132\206\140\242*\1777\140\n\215QU\141\245[\t\229\023\005\024\015\209AL^\021\182\242\011\199O\207\026\137\215\252\196\128\197s\188\244\140v\197r\243U~\139\231\248h\003w\186\243Z\236\222\020\181\027\198j\244\030\181\200S(\180;wC[\199\185I8\182\136\141{\246w\197\003S#\018\006\212\006\012\018\248\2001oJ\187\135T\128\194\002$\218\250Q\238\134\2092\139x\"\022\155\194\158\159(7\189\001&;\021Al\015\222*\006\139\028\243Y\158\027\\\235\020Ae{\138r\189\179\221\239\213\022\214]\217\161O9\238\185\133\179\177\"\168\197\211f\232\168\007\016\147\204\014\b\202\241\207-\204\014(\018q\190\170\ntz\136\218\154\006\226!\193F\017\\x\020\169\200HP%9RS\253\182\134H\253\\Z\017/\184r\015\021\208\130\169H\181\029\144\148\235\173{4\209)21\179W\238\254\238\025\191\158,\177\135%\213\184[c\021\172RlF\151\142\179\238\217\146\160\231\218\029T\186\139Q\156\217\1890!\022ze\232V\175\223\017Q\219\161\187tg\191DVr\245]\198\224\137\193\188\185\200\197J\166L@\164@5\230\202\214C\233xk\131r7\138\\\236M\148\153\187\146\185B\158=w-sp`\136\026Z\136l\184\210\241\213f\248\130\005\218g\234\201B\r\n\204p\208$\189(\196viY\186\163\027\012\193Jv\172;\231\133\025\024\133\170\005\017\028\140\182gH\020]\171\221]D\152\224X\148\161=@\149\238v\145\234\207\026\155\182j\249\152S\138s\206\202\157\242\170\219\190>\163]\222\162\140lW\175\220\252#+\225~\201\180_P\021\186O\r\199\1842\177g\017U\228\206\"`\236\173\196\249a\229\206z\151\153\2473Qg\130\152\184\135k0\018\201$\136*u\183I\177\187\153\203\194\0223s\221\237pB\196\210\246\239\202\241S\145\245\191\160\138\147\253\202\029U\251\201\131\134\205\181/r7\149\155\195\128O<\011-&\015\149\155\221{(\207G\243\249\025\020\206\180\216\153\171\220\217\239\025\029\167\244D\209\226\218\221\244lOh\153Y\152\132^\139\234f1\156o\007D\0209\"U\227\014\254\168w\027q*\\;\030\218\193\157\138\162\017Gk\181\227\157\214\245\138\0051\182}\172\014\221\141\021x,Q\152SU\139\233\1660\216\183\030\022\212\220~%\181\227\159+\183\018\236`R\187\0071\251\027\156J6\"\017\190\217\188\246Z\155>\029V\2351Y\195|\001\200\252$\179\170\134\143\000\015_Z=\142\025\195\147Q\219N\240\132\157\225SV\198\208\248\025Gl(\252\133\006\221?V\215\239~\174\182-\250\149\182-l\17453~\194\230\248!\182[\127\248q#\247\228\154&y\194\206\195\132q\238\195\253\131`\216Z\250\203\214\214\1581\251ek\230\197\016c\249/\027\187\153\220\1595\147\197\255\164\2015\173\168_\127f\147\244\191\214\204\242\t\147\230n\197^\181P%\209fc{\233\229d\022\"\223\230\147P\159\151\215?\252?\127\254\143?\253\219\203fc\133\205\200\028\026,I\244\187j=\210\2469\246\253\192%\166\239\198\246X?\248\209k\221\239d\028\233G\195zH\252\250\166N\202$\141\246[\161\245\205$B>\014\175\148\249\000\229W\127\022\181'Oo\251H\127\208zv\127\197\209f\216~`\246?\205=\133\017\2557\128\183\149\222\221\014\229\240\211\018\231\227k7\253\182\248f\129\191\127\223T\r\159\r\199\223N5\023+\166\015\nO\152;\191\176\190;\142\191\165\250h54\160\172\015\172>\211\014\b\189[+\237\207\175>\211\1705s\247\143\t\155\143\234\153O\192\1756K\128\238\022\030\159\022\150&`S\176\t=6b8\152\127\174)\016z\183\214\220\027\132\205\193f\173\152\011\238\223*\030f\137}\232\232\174mu\219+_\003)\252n\245\2411cn\0226\212g6|\237O\134\204'\007\007\255\129.\218\207\244\182\250\170\214\016\247\207\216_\251M\163c{\209\227\134\178\231\129\t\248n\241\241}{f\018>\236\186\201t)\154\167\223\011\133\223\173f\150x\158~/>\179\249\178\177\191\212\175\171\148\187\245\194j\244/\245\2413\230\213\178\241\246\151\025W\027-\160wk\165\213Xin\165\145\216\\\245\250\169\204G\155\201'w{D=\127\164\246\241\205\234s{\208O|}\182'\235\215U\206\159\016\167\025\190\227\250\203\188~N\176p^{\007\211\006\006\175\187>\152\127\239\14273\254\245C\236x\181y\030\255\130\0058t\193\230\194\238\012\014\023\224\b\128\135\207/\204\240h\001\143]\248\240-\166\025\029/\208\t@\155\131\247\025\157,\208\169\139\190\180\191/\192\233\002\156\001\240\176\128\156\225\217\002\158\187\240\241\166\238\012\207\023\240\194\133w\173\213\225\197\002mOK\247}3\134\195~=\190z\243\187(}8\016\191\139\210\211\236\169\231\185\189\135\192%/D\188JLYO\253\t\151K\2377\195\\jmQ\135[\206\160R\196\212C\143\220\204+y\252\028\203\146\246\239=-\1503\183~3\239N\186\187\1983\164hc\252\251k\197\191\163`\254Fv\191\178V\247\207\159\242\025g\223\021\1440|d\246\227\216V\195\135\146\205\154\129\155\136x\157\247\133\139\201\012\198\220\248W\170\247ZKVZ2.w87}\173\218se\206\132\208\172a\218\137\136\236\028\163\158h\207\193\175z\175\199\223Z2\031Jxi\180^~\165~m\185\016\001G\188\206^;\181\224~\1978X\204\235\163\002\197\181^\195_\136m\014\176\195%[\161@\215\1581\219lxFKv9w\250/.w\250\173\229\131\186\220\248\250&\026>\156\221/7\246\189\177n\253{\208=Z[o\226C\245K\181\129\210/\220\250\230]\143g\210\241\141\197\027\210\216\155\214\172%Ot\216\233_A\223CjkT\246\248\253\178\2253\177\n>H\028:p\002\140\136\221\022\195c\007N\128\t\177{\195\240\212\129\019`F\236j\012\207\0298\001\022\196\238\017\195\149\003'\192\210\001\190\1477Q9\200\237\1324\134\250P`\029{\245\255\173v\141\147\215\161]\227\237\194x\r\1407\174q\252N\146\141k\252\1820\222\184\198\019W\206\239\248\197$\174\146\183z6\158\004\192\184\171\233w\252v\018W\206\219\227\194x\004\140\003a\227\023\154\184\154\254^\188\208$\001\198\129\186\241\011M\\a\127/^h\146\001\227@\226\228\133\186\234\254^\188\208\164\000\198]\157_\200\011uu\254\189|\161@\231\137\171\243\011y\161\174\206\191\151/\020\232<qu~\197/4uu^/_(\208y\234\234\252\138_h\234\234\188^\188\208\020\232<e\177\251\138_k\234\170\157!]\145\215\011\001\1641h\140\171\246+\022@\234\138\188^\b M\129qW\237W,\128\212\021y\189\016@\154\003\227\174\218;\"\000W\228\029y\155\174\200;\210\213\174\182;\210o\174\182;\210\t\174\164w\248\1372W\210\229B\210)\144t\230J\250\228P\148Mq\181\189\195\253\150\185\146.\023^\144\133\160=\174\170O\014E\180\199\149\247\014\191\157\204Uu\185p\132\012\196\240\204\149\247\201\161\136\246\184\242\222a\rd\174\188\203\133\239d@\222\153+\239\147C\017\237qu\190\195J\203\\\157\151\011w\203@0\207\\\193\159\028\138h\143\171\252\003\209\179\171\252\003VZ\238*\255\1285\144\187\130?\224\183\147\187:?\224~\203Y\232\254\194\207\149\187\"gH6\241\254\"O\231*\156!\217\212\251\139<\163\171j\134tU}&O\231\138\249L\222\175\171\2253y.W\195g\242~]\233\158\201\019i\210W\159\228\185\\\221\018d\225\234\246\019\247@\225\234\246\019?W\225\234\246\019?W\225\234\182\195@W\176\031\2035\001\024\228\011\166\\\178`*R\134'O\185\252\201\234wuUf\203\230\183\201\132\187\249\212o\192-\247\252\186c\247\155Y\161?K\191\215\170Vk5\191\215\247\219\255b\213\196\198\189~\1478\229o\236\229\127\136}'sL\014\222Q\245\250t\253\212\164\029\220\139\133S=\177\135S,<\235^'f\025\203\224\001\022\142V\183\227\198\217\215q\142!\127\248\191\255\244\247\127\254\249\223\255\248\023\179\243\150\155\1771\183\155;\2200\144=\224\253\185\190\158\023L\188g6p\134;\0056\156\000#b\023\007\133\225\230\128\r'\192\132\216\197At\184\021`\195\t0#v\177\211\014\185\2556\156\000\011b\023\007\178!\193\223\134\019`\233\000I<R\149\131\\n\224(0\023\026\178\245\133q\242:\180k|1\203U@\234C^\1900\142\223I\185q\141/\130\181\002\171\128\210\1493\t\187\165\171\228\229\006N\t\022\182\165\171i\178\129S\186r^n\224\148`\003\167\004\194\198/\180t5\189\220\192)\193\228\191\004\234\198/\180t\133\189\220\192)\193\006N\t$N^\168\171\238\229\006N\t6pJW\231d\003\167tu\190\220\192)\129\206KW\231d\003\167tu\190\220\192)\129\206KW\231d\003\167ru\190\220\192)\129\206+W\231d\003\167ru\190\220\192\169\128\206+\022\187\201\182L\229\170\157!]\145/7p*\176\129S\185j'\0278\149+\242\229\006N\005\230v\149\171v\178\129S\185\"_n\224T`\133[\185j'\0278\149+r\178\129S\185\"'\0278\149\171m\178\129S\185\218&\0278\149+i\178\129S\187\146^n\224T@\210\181+\233\147C\177'=\181\171m\178\129S\187\146^n\224\212`\003\167vU}r(\162=\174\188\201\006N\237\170z\185\129S\131\024^\187\242>9\020\209\030W\222d\003\167v\229\189\220\192\169\129\188kW\222'\135\"\218\227\234\156l\224\212\174\206\151\02785\b\230\181+\248\147C\017\237q\149O6pjW\249d\003G\187\202'\0278\218\021<\217\192\209\174\206\201\006\142f\161\155l\203hW\228\012\201&\222d[F\187\ngH6\245&\2192\218U5C\186\170&\0278\218\0213\217\192\209\174\134\201\006\142v5L6p\180+]\178\129\1635\233+\178-\163]\221\018d\227\234\150l\2244\174n\201\006N\227\234\150l\2244\174n\241\006N\227\nv\185\129\163\192 \2230\229\146\005S\1472<yJW\191\031\139\129K\131\177\174q%\252\177\024[\026\176\197\209\184Z\254X\132\219\006\204\227\026W\212\031\139\136\216\128A\175Y\168\251~\147\134\252\222|\143E\155.\167\243\209\\\159\247\167K5\011\205?\177\191\210,\132\239\217_i\192d\188Y\248\193c\127\229\2538\207\245\172\253\149ayf}\151?\n6\201ky<\029\015\199\2308\rHH\r\193&u\128'\012\204\028\224\001\003s\007\216``\225\000k\012T\014\240\138\129\165\003\2360\176r\128{\012\172\029\224\022\003\181\003|\199\192\198\001\238 0\2168\1927\012\012\028\224O\012\012\029\224\239\024\0249\192o\210\200\216AV\004\233*\242B\144\174$\207\024\232J\242\027\003]IV\024\232J\242\130\129\174$\021\006\186\146<b\160+I\141\129\174$5\233HW\147\170\197HW\148\026#CW\149\234\134\145\174,\143\004\233\234Ra\191\r]aj\130\140\129M\236\186a\002\140\018\168+M\141\181\025\186\218$\029\234j\147\244\146\171\205\150 ]q~` \136\151\228\193]unI\199\187\242l\177<CW\158\1991\133\216dU\143\247N!\207\021k\135\219\018\005\143t\237i[\248K\031\167\184<\029\169\244\177\246~\153\209\134o\r|\2510\022\138\191\189\\\250\127\229\022\003dq\224\b\187\017l\228o\151\246x\001v\149\226-}\0258w\179\177\128t\173\190u\168\161\161\221g\t\226\253V\245e\133\154S\161\230\012\156\151\183\190|{\152M\161\217]_\238\144\217\154\155\0299w\179\153\128\\\219w}\187\162\199\140\144\197~r\165o\245\195X\142\222\022\183\024\2437l\219-\004\230\220?\193\030YL\144\197\253\128\190\155R\200\212oT\133\229\134Z\020*,\161\225C_\030\144\221\128\219\0299w\179\0214{\234\203\0192\027r\179e_\150\015\17954K\\\166\140\184\213\165\199hh\244j\244vE\"-cn\247jH\015\195\r\238\004c\248\004\rs\029\188\140]7\026\1427\2080s\170@q\179K\167\138e\216d*\216\164V\232\136e\132d\175y\147\161\134,_p\028!\183\162\246r\238\137\150\213\0245\144\201&\012h+\151\178\137e\192$\2306\133\221Y)j.\227*\254\128\203\166\200hh\226\229\022\217+\237\182\200\192\199\162\253\006F\251e\156\143\011\212Hj\175\230\207eY\149a\1752z\173\144\200\031\159\143A\015t7&C\221\1871\246\014\1415\200\216=\218\222\173\201\b\199\227E\000\131\2412R\1962\174\241\024\017@uZ\209A\1983\026\023\236\025@,\195\149\002\028\235\167\145\162 \145\145HiD\178+Jd\156\249\1305E6)tH\176\170\216f\201x\162\143\136\148\216$\025.`Ev\012Ld4\248\1945e6+uX\136d\239\241$\210\219aEv\212I\164\167\127\194.W6\169pH\176yvPI\164\207\030!\169\178I\2107\191\224C\2136I\186\224\rq\180\205\145\158\246\137\223Sc\179\180\195\002$\235\155\177=I\250\211\188Q\189$\217\014\149J\135\250B\015\149\217\014\149J\135\210\144d;T\2348\020l\158\237O\169\244'\200\177\221)\157\220\201\\\211\155\215\205\203\238\182#d\165\244\203\2411\149L\0194L\176UM\17629\0319w\171x]B'\253\001\156\154\141\011\019k\210\159f\2080\025\224\171\140\155]\012\240i\014\141\158T\199\236\230\220n\169\204'\129\218\151y\182\158\022+\171\011\218t8'X.1\172'\192\011\024\218\223\149\230\214\237\254.\249J\1315\189^Y\0248\243\188\148,eh\223\215\217\138u\183\239\241\146\166\239\191s\219\177\145\187.x\021=s\223\218\171\229T\163\137=]\141\005\240\205\014\028kZ\1576\208,\235\150\154[]tw\182\193m\229\221\r\231j\227kt\187;s\182\134\212\169\239\177[\199\214:\193Z\179{o\218\246l\243\227\212s\rp5\196\151\234\129\230\237\183\150\234Y\004\rS\023\n7\220\176\229B\025_\030\241f\135!\183n\152\162\237\t\175\130?@\228\169\194~\138\020V\193\150 !_\139ZK\144,\195\189Ng\251a\193\r/\231\252YN\148\200\2202,W\186\003*\177 5\172.\170\195\138\143\160k\149)\176\028^\145\015^\001\186\194)\145Y6\250\135\154Z]\014\254Y\133\140r\0296\212\170\173\192\026\153e\253\028\133\212\2342\200f\026\025e\170~\252P\0170j\137ZFn\030^c\028E\156\192\154o\144b\216FD\156q\145\141\156\187Ug\169\168/\212&\222\146\222Z\246Bb\143\141ZM\176bt9n\229\017\179\204\251\182\t\215\140\131>\142Y\200\160\219\005\t\236\232A\147\216\143s8\221f\019\145de\007n9\003\201\221\133\238\218\252&\1291\020\204l\242\204Y7\254\006w\019r\184.\248:~\169\135\165\028YB\203\188<a\166\244\195V\225\218B\011\165<\199\150\218\135\029\229,\006\127\195\251\n\005\148\233\215\205\160\239\182Jd\011\153\n\153\169\135\165\202\181\132\158\174\192]~\155\158N\134KuV\026\189\187\002Fu\181\239W\137\211\219\211\200\022z<\021pc\143',\236\015\161\170\174{|\002\173\215\223\251\244\141\207\203\242\232\241]ue\239O=N\155\207\000\221\r\005\204\208\253\187n\208\144>\183\189\t\147\133w\183\0182+\211\023\168\186\251s\254\227_\255\245\167\191\255\219K\172\135\131\205`i\174\189>:\190\136\152=\243\235\239\216^n\130k\184\180\215M\230bj\206|\127\1415\208\184x\1804\216\007\141\135\197\132Y4\159h\131\006\147t\248\t\134\21628\1810\165-<\158\172W\176h\159\018\175\227\251\235x{\216\203\152\189{2\0266\249\152\243L&\175_\183\201d\206L\150\199\235\245x`\173,\133\201\237$\154\130\246a{\190\\\161\189,yLJ&{\239\243C+f\240\162\171\227tmQ\182\240\017\202'\139\199\235d\177\228\194i\207\204` \r\238\244\244\158\1715\221\\w\172\019\003\249^f\1395\179\184\211\234Cw\208bR\132\133cq\210\182f\022\181bML\178\199\015\219\206\006\167\0226T\139\170#\015\\:\218n\031\205Sn\158O\137\179M\148\155\231\243\141S]\148\155\231\243F\144n\158\207\150\212\238\230\249h\1566\162P\154\015\206\027Qn\154\207\017gm)7\205\231\200\140\186\137>-\206\029R\005\200]\"F\221T\159\150A\221d\159\027\131\186\217>-N\246T5\200 \194)D\ne\163\177\0064 \203\140`K\144\145\134\027[\130\1404\130\012\193k\197\143UF\232\r\144\166.\196\218\180\157\154\231\225\024\158\0168\206~-S\002\199\137\168eF\2248[\171t\229\187%HW\190{\130t\213\251\253\133\145%i,y) ]\237\019#]\001\191\019$HW\195\145\166\004\234\197\029Pm^\171\183\247\151\203\245||\215/\240\139\254=(X\130>\183\004\021.Q\1913T\180D\149\020\022/a\151O\130J\150\168\221\2477\129\1656\140\213\153Y\176\019A\229\1821\218\029\133\245\004\028\167l{\236\029\148\226QY\243*\251!h\181\181x\012\002\211\162Z\214\197\205\018\215aPm\137mG@\150\216.\004di\141tEmI\237\194P\150\210j\002\018B#([g\164\231\235\204\022\006A\229\182\0030\152\1732\"\158\218\210\216\1335\204\146\216\137u\133%\176\019k\151%\175+\019\132\182\187\130\025k\236\190 \237\215\182\188~\167\184@j\154\001m\1491\148%\179\159\024\004n\139\221\239H\225Ye\195>3\130?C\016\128\155cw<\177O\175\172\227i&\184F6\226;b\159\221!\195\247\159\003z\135lG\158\151\221\129\220\145\246\228\012\143G\208\134}\134dG\250G\017\252\129\180\167$\2483\233\159\138\225I\255\212\012O\218\195\238I\158I\2554\012\015\251'\236w\129N\234\172;\243\219\218\237\183\174_\238\187^\247c\153\139\216\029\219l\194|H\1387\255t_\194B\254\242\136&\236\151\207\0164\158\184\176:\194E\029\015C!6t?\152a\150\"_k\151\1354\225&\194\16017\155\213\145\248\234X$k\135\155\024c\198#fVE\n:$\193\134\198#%f(\243\181uq\188\020nR\140\025N,X\r\005hj\134\237\140\135/\204P\t\012\229\216\208x\226\197\012U\190g^\156~\133\253\214#\174\226\158\\\202*\209\190J\022\217\166a\191\127\136]\239\158t\202*i|\149,\179P\195~\255\015\187\204\253x\154\212\018x=|qR\029n*\"\195\251\169\019\171$\240U\178\200Z\r75\198\140\167=\172\n\020E\244Z\191\245'\006<\234\153\244Vo\232S\143z\154\149\176\183RM\248T5\221\163\154`\179\022\020W\234\137\158\170\167\158\234\tV\226\226J5\201S\213\236\167j\194\149\216\184RM\250T5\135\169\154hEq+\213dOUSN\213\196<z\174\212R<U\203e\170%Y\137\173+\213\148OU3\213\146\174\004\181\149Z\170\167jy\155\170\201V\131\239JE\250\169\138\170\169\162|5\000\175T\212<U\209\251TQ\177\026\131yE\193s\017\231:U\164V\227\240JE\193S\021\157\166\138\202\149X\188R\205s\161m7US\173)\238\182\1748\239`\252v{T#G\150\247\227Y+\235g1\2234\250\237\\\203\143\138\169f\019\241\020\152\185\004\218[\143Y'\249\171\025\251Q\1875\132r,\152N~\198\031\209B\253e\142\130\031\150\130\133\169\128\154\026~b\011\155\202\167yV\1840\021rS\227\015p\145vM\211\200ha,\162\198\198\159\231B\182\204\225\239\195V\188\176\021s[\195\143w\225v\021\241\195V\178\176\149P[\195O{\193f\005i\2530\149.L\165\220\212\248\195_\164\191\166\133N\1820\150Qc\247\159\005#-\155:,_\024\203\169\177\241G\195p\195\146\233)\139\133\173\130\171\130=\163\249\173\164I\171\155\133-Em\029\142G\178\198L\179M\014\\\168\\\209\196YcS\217&\005\254\030V\212\212\167\186>~\186\222iV\021\197\192V\205m\029\031\191\151\238>a\136\158P\243\206\210WE\214\184E\191\003\012l5\\]\230\180\026\219J\178\160qmE<x]\216>A\154\232\004X\226\177\235r=Vd_#\205C\005l\241\224\181S\031\154J\011,\129#\030\186.\199~L\187~\017u\021\017\136\245\017\015^\157:\144\134%\241\166\006\166Vb\215IW-\211D\022f\2321\211\021\015\234T\199\237\229\149\002\026\139x\004\171\250\195\215\179\186\222\246CB\003\235\189\004=2\143d{U\030\137o&a\t|3\226\145\236\172Og}\233\255\n\219\139\181\142\128=\030\205\170~/\143\189\217\172\002\166\202\021O\184\213DpI\153\130\205\166\168Z\241\207\147>\127\180\023\022\030S\248\152<\164\r?\215x:S\131q\179AB\209+\239\225\210O\014*\205tWe\192\028\143m\253[h{!3'\139\018\160\146\152\135\183F_\174\237\007\245\178\"\005\002\142\131\181\135ezk\002\208oq\1842\223\2167\164\207\002\r\162e\028\173\180J\177\173\179\188?\247\000\182\226\233'\028g+?o\166\175\150\190\254\231\191\255\251_\254\244o/I\01876=\001\244\247\182\171\245y\219\015M\026\152\208Ye\155H\129\137K\181;\030\247\0149M\242\204&g\168~\243\1736I\205\202\\4=\159\168\247\223\128\031\242\226\186\251Od\143?\022\252\152!\189\218S\161\184p\184\195/G\174\208\195%]9\244\225\167#W\232\209\146^Jzs\\g\199Kv\229\176\219f\149\157,\217\181d\247\019\239Uv\186dk\135m\230\218\171\252l\201o$\127\152^\175\209\243\005=\025\162\195\181\211\231\203\174=\245-\223.\214\155\255\248\191\254\245\199\191\255\2018Kb\150jCt\137\173;\180a\018\208\215~\175rXQ\222\021\183\217Dfc42y\141\225b\209\151\132\196\202\180\228CVLJh\184X\239%\017\1792\175\246\144\029s\155+\\,\245\146\152\216\153\023z\200\204\240{\168\139U^\14603\211\026\015\1531\253\027.\022xIJ\204L\203;d\197\\\183\t\023k\187$cV\230\149\029\178cbK\184X\214%9\177\179X\212!;\230BA\184X\209%,\\\204\2359dfX\225/\022s\t\t\027\208\130\137\245C\190\2342r$%\r<\154[1\002\142\150\002\174\136\021&\224\232!\224h)\224\154Y\161\002\142\030\002\142\150\002\214\196\014\021p\244\016p\180\020p\195\2040\001G\015\001G\011\001\247\209\238a\134\156\242\222\r\204_=\019x\235T7\r\228_\139\243\220\217\154\2451\1300\r%Q\158\223\206\204\b\182\195:\175M#\249\215\226\164v\182\150@k\203\147\2174\150\127+\206dgc\169\253P\137$\1383\216\153\152\193V,\207\\\211T\254\173}\218:\219\178gLi&y\226tu&\15061\151Dq\154:\019+\216\250\229\233iZ8\198\228\185\233lNCs\203s\210T9\178\149'\164\179\185\006\154\179ND\211\210\145\159<\011\157\236\005\216\015\150g\159i\229\188xy\2349\155\011\160\185\229)gZ\203\191\021\231\155\1791\225U\026?\245r7~\225\223/\243\151z\164\147?v\223\211\006:86\024r\131\211Ie\182\193\142\143-F\220\226t&\153\005\208\247\177\193\132\027\156N\031\179\016\250?6\152r\131\2119c\022\193\183\141\rf\220\224t\162\152\197(6`{\005\1837\157\029f\t\140\025\216`\201\rN\246R\232\204\216^\197\237M\231\129YF\194\t6\169\185\201\233\228/\203IH\193&\027nr:\227\203\n\018U\160\201`\197\255\166\211\188L\145\200\130M\006\220\228tn\151\1490\186`\131+.=\157\208es\244s\014\179\250\127:\188\031\023\199Y\242%\245E\153M\209\200\030\202\178\154\027~\187\233[\011\237\222\015\254\238J\181?M\020f\026+\253\006M\rR\215\182\129\230\245\222\150\203Uu\181:\215/\151\175C9o\006X\232|\003\214\255\214)\220\189\178\197]\204\0075\000T\235\212m\162N\215.\031\212\016Q\237S\182\185^q\182\150G\128l\159\170=\182J\230\219\148\015.\218\173\177O\209\166z\135\139\191\139\153i\142\182j\172S\179G\181\227\023\190\022\235\169\028n\209\216\167d\243\243\154\233\228b\017\149\163-\026q*6\215l\030x\177r\202s@\182O\193\166\138\019\211\234\197r)/\208[\002m6\007^\175\246\006O\174\000\215>\229zlIe\155\220\150d\t\223\209\242T\235\177%\181\177?\218\022\230\021\160\138S\172G\181Ud;^^#\174uj5\1818\020-\214\232a\237S\170;\215\028P\217\220\006\189]\251T\234\209\205\253\129\148\197-\144\243^\192\234\198\028@\217L\228\187\226\212\233\193\237\015\156l.r^\251\148i~\181v\188,\144\235:\167J\143\183\219\031(\217l\228\188\246)\210\163\167\226MmS\161\239\202S\163G\197f\156\180\216)T\164sJt\231\155\003\"\155\143<\152\157\nMO\159\136G@\158,N\129\030\143\031\150\182\182\139\002\198\159\234\172\175\160\226\218Vw\001]Y\237\129?&\145\189\187\\@W\214\144\156\020\246\151\253\194\162\130\234n\175\170\004\244b#\198\230\002\249\179\254\189\210\251\189u\2105\133N)s\228\212\253i\015\226F\2467\019\195\0029\181\186\246\177\019\190\235\180\210v\151+\228\216\237U\187K\252\"\223\216\158\173\144g\219g-\143\128\223\004\182LU\bez\250\002\157e\255\226K\168\"H=\159u\229V\156\150\246GQC\133\028{\215\143pn\155\167\015\026<\168\200\177\171\190\159\193p1\127\186\000S\250Q\226n\020\249\251\254\248\137\154c\015@\ny\250^7@3\181\182\247f\020\242\239\2430\204\187zkD\007\022p\000\170\219\202\140\244.=\018\173VP3\251v\011\207\176\202\194\246rU\194\193\196:\184\157\184\169xj\236\228\206A\237#\194\244g\1806\031z98\152\157D\191\017\162\215\216_\196A\236\020\218+\241\236\208\211\157\131\215\169\231\019;0\151\0278=\131/\189\b\236s\1912 \027\174l\171?zl\245G\139\169i\0252+t\171?zl\245G\139Yj\025\017;|\171?zl\245G\139\tk\025\019;t\171?zl\245G\139\185k\153\192#>h ~\236\244/O\249\202\020\026\160\027\253\241c\163?^,\145\202\012\027a\251\252\241c\159?^,\150\202\156\024\161\219\252\241c\155?^,\155\202\002\155\161\187\252\241c\151?^,\160JE\172\176M\254\248\177\201\031/\150R%9\128e\202\141\031\202\141\151\202\173\136\017*\220\248!\220x)\220\026\155\225\186\141\031\186\141\151\186\213\216\012\149m\252\144m\188\148\173s\1362\156-C\003\201C\182\203\227\229\202\254\230\211U\239\245=\166\014{\000\166Q\253\166U\215\159\241\162\172\154(p\151cU\224\183\216\232\242\204L\134\192d\2327yPg\152\136\209\187\187k/\242\219S\253x\128RW\250\247\224\218\139\159i\031|\218\004XK\158x%\183\014\165\233D)0\151>cn\015[\151\001s\217\019}w\219\222`\178N\148\003\131\185\223\224E\159\250\201l\t\147K\163\002\216,\2526\143\213\245H,\006\131\167\000\179\202o\182;~\208\150\006\204eJ\191\221ZW\235v\145\223\244g]Cz\198\242\243\000\139\188\139\216\228\209\218\223\230\015\171\250\193\209gHJM\028\201B\192\212\019\243\131\018\019{:W5\175\251\246\208\175T\234\254\192R\149\237\190\029\162:N\019\137\171)M\196\158\021\213\243\172h\186'\236n\254F\027e\031.\213\129Kk\017M\212\022\186\180\027\162\217\143ZG.M#\154\253\014\235\216\165\029\017\205^\231\212\137K{\135}bO\237\235\020\240`\167\216\187\ru\006x\176W\236-\169:\007<\212-\165=\r\175\011\192C\253R\218\243\255Z\185\188\011\234\151\210^&\215%\224\161~)m\167\168+\192C\253R\218\011\228\186\006<\216/\226\253i\192\131\253\"\222_\227\242\174\176_\236\247\167\129\235]Q\191T\246\251\211\192\247\174\168_*\219\2494p\190+\234\151\202\246>\r\188\239\138\250\197\254e\217P\003\247\235P\191T\182\255i\224\127\029\236\023\251\253i\224\127\029\236\023{q\167\129\255u\176_\236\247\174\129\255u\176_\236\189U\r\252o\007\251E\232\005\248\223\014\245Km\199j\r\252o\135\250\165\182\253V\003\255\219\161~\017\155\152\026\248\223\014\245K-\222\031\240\191\003\234\151Z\244'\240\191\003\236\023\187?\027\224\127\007\212/\218\222ql\128\255\029P\191h\219o\027\224\127\007\212/\218~\127\r\240\191/\212/\218\246\247\006\248\223\023|>\219\223\027\224\127_\176\157\246{o\128\255\157a;\237x\221\000\255;\163\247\167\2378\209\000\255;\195\231\179u\214\000\255;\195\247g\199\137\006\248\223\025\246\139\029'\026\224\127\159\176_\132>\129\255}\162~i\132>\129\255}\162\231k\132>\129\255}\162\231k\132>\155y\218\171\134C\162\190;\219\197\019>\166\161\177\214q\127^\148[\221\026\245g\221w\186:)\181\024X\03043\2494\222k~\b\190\169\022\227\204H\171\031\188\187\185`2w\190\237n\138\153\211\229\016\241\204\191\006\194\220\200\187\155\011's\221ISk\141\249e\245Z-&\202\147\181\129v7\022M\198\212B\169\210V\181\208\236d\198\016\238V\226\135\149\182\223\241\216B;\2410<>\026\246\248m\207\135\177;\239n.\153\205-\166\031\194\216`\167\n\164\157\199Ge\163M\250\176r[\236c/\140\164\166(\006K\182\145\219\248\t.c#\155\132t\185\189\223n5\212B>\204\248\134\233\240$\136\19469\209\239v\243\201\174~W\138\025\029L\169\161\211*ao\160\221\141\021\015c\199\238\002\251^M\221.\1545\016\238V\212d\229x\224V\170\197\2323Y1\132\187\149\242a\229]\181g\248\238\202\199\011|\004\207\135\153\145q\183S\205v\250sR\236\131\229\016\185MoG\192\007\031\196\187\193za\240xni\211z\166i\026\232\243\007\241npZ o\251\255\014\005V=\204I\129\141\140\187\157f\182\211\029\020\1793\186\179\150v\186G\022_\020LAk\219n\161\025=\216\018\022\218\237d \152\rt\184\127\244\228\195\142\153n\234\152`\138O\239_7\210\209C\031'\180\163G\222\221\\47\235|\171\021}\180!|V\027\216\186\145x78\005\171\247\246|\164\173\171E\155\012\246n Y\026\216\222\206\n\251K\253x\253\229\230!T\2339\011\003w\219\233\210\246A\235\235\241\188n\\/\006!\016\165\151f\238Ud\203*>\153s\205\0214\212\195&\254\221\242\020\213h\167\240\174\176\187\161\176-]\161\131-\141=\158\223q\181\137\127\183<\133\185\247\219\249\246\173\137\004\154\135\160\202j\nWR\017\019\255n\185\\X>\030\023\2355i\183\158\222\152kr \222\r\2061Pk\024\216\203\233\221\203\192>2\238v\230\208\215\171\160C\014TF\147\003\201\160<R\238\150\244l\233x:2CC\139j\249l\003\227ng\138y\023\213\154~D\150\146G\199\223_\134m\238A\028\r\134\155\217`?\003h\015\212\226}\214\192\134\178\137~\183;\197\196K?6\225\153M\153Mq\012\205l\030\196\187\193)8\154\027\215(6\150%\155\219\140\140\187\157hi\231\184n'w\237<\222D8\005\195>@B\141\221#*\208\216\200\184\219\153bb\173/\232\177\170\236e\222N\155,\232\203\244@S\224\171q\196\171\n\160\130z\014k\225\020\214p\176\128\209a\142\011\225\020\187:\213\161\254\172\204\027\174\196\000<`\239\006\166\144\213\029qH\1734\011\164#\227ng\nP;\213^aO4\015\207xl\167=\236\140\140\187\157)\028\245k\017&\146y\005\195\2292\209\239v\171\133]\216\190\197\178(vL\205\237\155\162R\217\175$4|\231\245\164=\141V \015\226\221\224\020\156Nm/L2p\214CD\t_\2383v8f\206\252\187\229f\182L\162UM\003\213i\025\167\162\205\194\210\145\217)#\199\196\163\247\163) \149-nH\132:\170\157[0\005\160~EyV5\\\209\220\023\161/\214\244Zx\255D\191\219\141f\187m{\229V\163\023\178f\190\243\238\230\166\184T\222.\151/\"\143\244\209\184!\006\171\012=\250\131~\183\155\204\205<\171\142\181R\163e\225\200\184\219\153\194\213N\191\223\174d\241\\\231\015U\148\211\202P6p\230\223-Oq\236\164/\176\027M *\197\232:`\239\006\242\217@\215\238Zfb\152\200\215\161\1803P\238\150\138\249!\207\183+}\194q\226 c\209H\185[R\1396\193a\166\166k\212\145q\1833\0075\173\191\233\163\141\017M\198\177\129q\1833\005\177\178\159\027\163\025Q]Lv\026\161\168\129q\1833\005\177\211\177%!\182~\1776,d\171F\222\221\220\020\194\202>\250`s\213\212\225\194\210\157r\1834\133\172\029\028\r\235\018\t|\026\r\2279N\029\187\154>V\131\002\195\200\184\219\t\230f\144x\\R\1998\206\0178\014\023v\186U3\238C\205O5\197\168\1950{\132\207\165\237i\167\240\179\007\241n0^\024\196\1437\153\147\14372\238v\146\217\206n\167\152\1571\0147\210\206\238q\213)\138\211\217\206\249\246N\0274\232G9\134\006\202\221R6[\234._\184\207\245\228\178C\228\205@\239?\216w\171Sh:\012\221\b\1736/\214:I\026\188\019\239\006\139\217 \220m\026\172\201\141\166\195\188\207\020\171\165\129\146\197\241\209\138=#)]\163\229\"\142\199S\168:h\184\0313,\220\229~\204\128\189\027\168\150\006\240\164\246n\227\133Lo\031\196\187\193z6\200\246\021<\187\t\246NB<\133\171/\165`\148\208\241\011\217\016\029\025w;\205\194\014nV\204\186\253k\209\229\201\020\181\190npl\215\233\203\180;.\204\220\166\161=\153b\214\185\189\178nR\147;\162nz\016\239\006\195\217\224Y1k\186\1446\206\015%$S\220:\223NpCm<:\024;I\152\025\024w;\241l\231V\226\137\172\158\002\2330\187r\158\236N\188\027\156\226\214Y\195%\183Fk\236\001{7\144\206\006\250ap\171;f\164\153:\187D\239o\162\223\237N\225\139\237o\241]\173\229\142V\242D:\219\206\252\156\227\183^\158\187\205\201\\\155\151L$\131DI\241\164\205#\206\n\012\128I\245\164\201\235'le\bL\150\207\154\028\018\145\129\209\b\024\173\1584:\164%\003\1551\176Y?k\179\133\159B\140\018`S?i\211\164,\003\147)0\217<krH`\006F3\215h\186y\210\168\182/\021,S8]\163\193\147F\187\022\011\180\0006\195g\213\132\159= \190\148F\207v\192\158uk@|*\141\159\246)\189\255\208\2124\240\1734y\218\183\218\243U\175\180\027\248X\154\254\130\143\173\026\007\206\150fO;[\179j\0278]\154?\239t\171\182\129\247\165\197\175x\223\170u\228\134\234W\220p\2058r\199\242\023\220q\2138\242\203\234y\145wW\146\225O\\\179\254%\211\191\145\209.d\238\169\127\205<\029\249\136\1396\191h\158\141\130!q\211l\243k\021\176\0171$\158\154\205+\239\147;\231\220l\210\252\241\169\1904\176\137\225|\"\128x1\160\204I$7@\025\190\135\157$6e\222\223SgT\205\144\146\030\012\201\2336q\154r\030?\016\175q\210\210\163l\154d\158*@\201\134N\136l\2024\127\172\239\183nE\246\251\208\011\181\205\201g\206\253C\138\245\n\183/J\241h\197\194@u+\189t\209\230i)\219\222\0161.\192k\152\022\169S\162\212N\183\023\237\1741\018\157E/i\024\136\185\188\249\177\245I\199\023\199\202\189\150\202\169\165\223\020\184\129|\1724\r\235E>\150\175\150\187\149{-\181S\203U\181\006\226>L\017f\139\139\200\190j\030f\238\245h\167\158\131n\193fd\154n\244KZ\149\229s\181\140F\238uL+\226\234x>\029\207\246W\002\166\n\204\215\192\147f\211\152\219\220j\241\201\132GU\195/\205/\234Z\026\027+\202\231\141>\245\162\014\167\011s\144X\028F>\224w3\193|z\134\188R\003\011\211\169r>E\156\195\237\005\208\163\178\002\244\001{7\176\216\215C\181\215\136>\145\231t\016H.\001\249}\"\207\169 %\138|\003Yl\177\191\151\015\242\188[\007\2015 \031&\242\020\161\182\144\156\001\242v\"O\161\170Z|\193b\241\208\209#\250\166\194\019\r\254nc\138V\239\196H\185j\233}aj>\029h\168\254R\161\191\230A\158BX\215P\233\tr7\145\171\133\244\026*\189\212\145\222d\160^\024\2162\003i\230\024\216>\012L\209\228\176e\218u\232\019y\n\019\239[\250\006\004\249\253A.&\215\127\252(\173\173 3A\200\196\206i\143\188\147'\135\127\135\236\209m\144\137\247\217\198\236\247\184\0055\179q\152m\204\217a\216F\198llg\027S\004\184B\027\227%5d\227:\219H\022:\216c\029\132A\0169:x\248@1\007\131=\214\001\160O\228y\186\178\199s6\151\\O\228)\024\188\0197v\201\239\019y\138\002\205\001\145\211\197<i\026\149\014\015\242\228\247\221\129\185\174$w\019\185\\\244\248\129z^\237\244\248d`\246\253\003\245<I\159\200\147\223W\007\026@\005\185\154\200s\026\213\129\186\173L\159\154\200\205\220l{\154\137\154\191\152e\206\2070\209F\139j3?\203\154\197\136Y\172\028\139St\2406\209i\15745g\147\174\218*\153\193w\199b\180\232\192\1974\155u_\228t\223H\186[\139\023\157G\173E\204Z%\172\205ad\189iN\171l3\233\162\211\168\157\146\025{\023\214\230\179\192~\209e\190:O\002T\024\012\183\137\157\166\221Iwk\185\180\182.\145\201*\020\139\176p\175\162\152'\181(\158/W\189\243|\246A\158\019DOtB\bM\188\2076\230\216\004m\012#\027\180q\152mL\225i\139md\204\198v\1821E\169\179B\221\155M\171\236Tdo\156\213\212\153za\131\191\255\165)\166\132\133\129\187\237\198\181\189\162\006\\\007\208\005\1766VX\206\203\029\186\210\145\173\158\0229\229\188\200\185\176\225J\146\187\137\188\\\228\\\216p\149\185\019\132\201\192\028\182.,*8\244\137<E\169\211\007{\238D\206\176?\030\228)(u\031\236\185%\185\155\200\233\226\185?\216s'\238\012{20G\159\015\246\220\014}\"\207s\155\015\234\203\130\252>\145\231\228\130\015|\136\255\240d\167\250\2299~9\175n>i\223\139Iz\143\188\147\231\213\205'\237{A\238&\242ru\243I\251\222]\156L\006\230\213\205'\237{I\159\200\243,\231\147\246\189\\\156L\228y\150\243\185\222\247N\245\203\190\175&\127\127\1279\238\216d\203\012\024v3\006\240\221\196b.\131M\152v8&\014K\019\243\141=\216\132\225\247\142\244\163CC\177\137\163&3S\004(\127\162f\152\232\152\137\177\160G\222\201\243<\165\1623\02099\169\030\228)\002T|z#F\144\234\017s\171)\002TcP\134k\2138zDt\184j\157\169w\163ST\168\142\216\218}/X\246f\2458\218\175\230\237\218\018\175\153\220\r\148\250\177\129R\205\247S\190\216\216\156\tE\244\200;y\145\225\205v\230\229\152>\165xUS@\216\157\216\170=\017\155\180\187\211\131<\005\132\182C5\023CH\177\201\237c\171p\254\150\204\251;\221\235\146\183\143\222\031d\189\156\145\170S{\133{F\163\017g\23331\238\198\230m\143+\139,\153\144\227\251\253\199\016\162z\n\t{\232\140h\213\184\127\184`=\005\131}G\201\162\003\247\143\014\172\1670\176?n)\187\001\234\223?~\209$\170\167\024\176\255\157\153\200DBK\143\188\147\231t\197\242\229rX\254N\159\\\2498\219\142w\252\221\208\188Li\185\141AM2\191\173\157l\204\019\131#\183\209 \027\199\201\198\156+\189c\019\253X&\220\238\030\2289O\250\192\198e\030\149O\147$\230\197\006\1803\254\028\214\006\232\2504\219\152\167\bgjBfj\159\031\228)\"\\\016y\152 g\130|\153\200SD\184\160\tR2\144\197\244\230\242\152 \213SD\248D!4\201\128\146>\031!\180\158\"\194\199\024\219\225A[\146N\195\130}\218VO1@\173\208\251\163GL\215O\028\191\214\234\139\231`\201\143jG:x\206\"=\136v-\134OZ\228\025X\174\205\2329\155<\001\2035\025?i\146\230_\185&\147\231L\210\244+\215b\250\164E\158}\229\218\204\158\179\185\146|\229\218\204\159\179\201s\175\\\147\197\1472ZM\189r\205\170'\159\222\151y\229Z.\159\245$O\226\149k\185z\214\163\188yW\174\237\250y\207\242\164]\185\182\245\179.\230\203\186rM7O\187\154'\233\2021\221l~\193\231<9W\174\241\224\023\156o=\229\202\181\029>\239\132\158\140+\215v\244\180\184\215\019\174\\\203\241\175X\246\228[\185\214\147_\178\190\158n\229ZO\127\205\186'\219\202\181\159\253\146}O\178\149k>\2555\243d$\012\137\1436\197/\153'\163b\200\220T\253\154u\022\206C\230\169\229/\217\167\163e\200\188\181\250%\251l\228\012\153\195\214\1910f|\225i\024qX\253+\150\153\195F\204a\023\223\149\217\163\185q:L\207\151\169\025#3\222l^\255P\189\189\191\180\255\241\167\191\253\247\191\255\241\191\254\207\023\253\255\254\243O\127\253\199\159\255\246\215\023\245\191\1894\127\254\251?\254\249o\175\251\177)\011f\\\247\187vk\204\253\031\025\177\223\167\219\233\223U\255\248\135\225\177\175\187~c\231\172\213\181\247\148\151\157V\147\228\198\196\165\0051p\137g]\233\211\192\\\252\146\142C\012mb\2216M[\221\246\215\175\023u\029\204\148z\219v\230\179T\196@d\027\248:\222\174\187\230f^\219\254\241\253e\135\019\219\156O\213^y\005\137\r\174\142]\179o\031\191\168\225\160S\183#\212\249\192\026\146\217\232\221q_\247\ry1whz\230\153\176r\1555l\t\188\\\213\129?C!Z\213\191\211\154\163\149\141>i\245\248\025\005\007Z\138\166\152_;\187\\\219\253\158\224+\027\223\232\253\254\248i~\199\154\224k\027\1915b|9\029/\023}\185L\185x\014K\219\172\195\177\214\151+{\007\141\r6\191H\127\187\180\234r\192\248Z\248\136\209\217\241\147vf-<\227\243x~7?\244m\132Q\235J}-\210Km\162\240\012u:\157\143\170\"~TG\142J\175\250pZ\254\174\145C\017^P\014N`\150\177\199\219\150U\147\200\247A\165Q\011O\184\156\246\237u\168A\153\159/'$\225\016g}\189\157Y\251\133\027\244Q\226X\233\142\182\167@RZ\243\154ZI\025\153\031i\172\142g\243\211\235\132RB\189\158\181\185\141\173\207\138\183\174\002q\163\2522\174\189\252\2374\135V\131\128\189\239\159\200\244\243\252sm\014M\203\174k\246\183\149\174\019.R\223\206+\186\210\027\231\029\154^ \224\000;\248'{b-\220\162w\138\158s!\239C\011\183\168\213\249]\155\193\228\229\216\012\157\181\159\1679\0147v\251\182\233\229\194F\021-|\227x\234\227T\187\210O\194A\142\229\229z\190U+\004\225\028\181\222\247\163\235\138\168t.\tf0\1910t!E\177\138\022\206Q\246\216\247\213\216\161K\025\162\014\227X7\\g&\028\225\022[e\134E\255\016\169\133_\156n\253\024c~\192\243\244\169\206$\224j\237\188\191\243\218(\163\027W\031\253V\b\025\249\026\199+>\142\251\027\127\217\r\152QU\234\182\175\207\148\017\162\169\199\177\031\203\134\168~3\001\1360#\151\249\174\245\201\016\135\193\220\132\190\238\170ZVs,u\246\161\247\199\211a\250\1377\135\144\184\021\030\212\249\252ej<\168~:\206j\018>\163\202\254\177\184\0034\025xE\202t\004\237\138\220el\251\231\216\247\196\182#\202i\n\151\244v\236g\162\151\151\189zgmSr\230{9\245\227\n\023\132p\159\225'\030V\194pS9\195\163\249\029\167\243\141M\197\155\026M+\159\024\187\026\2258\170\025~\211\247\216O?\244J\251\132\251\148\186/\181\143\166\157U\209\202J\168h\154\198A\179\213\143\218\244\166\191\218~\213\183\223\155\0317|i\175\024\021\216\168\2231*\180Q\024\020\217\160\019F\1976J\147v%\002F\026\150\n\024Fe\002E\154\150[0EZV\216(\2100e\1630\168\180A\164Y\149\133\186\029I\141\181\128a\148\022(Rgc\193\142\184+\002[b\164a\129-1\220\174\192V\024iV`K\140\136\"\176%\1345\017\216\002\251\188\189\238\255\019\160l}\149\196\139\130L\192H\195r\001\195\168B\160H_(\001#\158\020\148\018G\026WI\028\134\213\018F\154g\011\173$\222\0204\002\134\027\023n\004\012\163\002\129\194M\011m\173\149\204\163\194H\2260,\1500R\173\173\184\1468U($\199\026'$G\218&\020\199\154&$G$\018\n\201a\133\132BpD \161\208\219\141t\135\208\219\1414M\200\237\134QBm7\220\180H\168\237v\198\149F\129\196a\152\208\219\023~\210H\200\237\139T*\228\246\133QBl_\228I\133\216\190\216\147f\018\135a\182\220N$\\F\133\128\145J\149\128aT)P\228I+\001#\026\143j\137\1950-a\164Z[q'\018\006\227\141\128\225\198\197\129\128aT(P\184i\177\173\183\019\011\131q,q\024\150H\024\169\214\150\220\137\132\1938\0190\2108\1618\2106!8\2144!8\018\146b\1618\018\146b\1618\028\146b\1617\018\146b\1617\022\146\226F\226 ,\017z#!)\017z#!)\017\130\195!)\017z#!)\017rc!)I$\014\195D\132cS\184$\1478Rm.q\024VH\024yZ%qd\026\151\148\014\1444\176r\128\024W;8\210D1\180\178\169\\\210H\028n`\186\1458\012\011$\0127/\021\163+\157\206\165\145\003\196\184\216\193\145\154\197\024\203ft\169\148 k\160\148 i\159T k\158\148 \017L*%\136\245\146J\001\018\185\164R\127$\138\166R\127$\140\166R~8\142\166R}$\144fR},\146f\129\003\1968\169?\018K3)?\018L3)?\028M3)>\018N3[|\029\139\127Y&q\164y\185\196aX!a\164yJ\226\136J\179\210\001b\\\229\224H\205\181\000\146\176\150i\137#\rl$\014\194\242\141\132\225\230\229\129\192\145\224\146\135\018\135\155\151G\018\135a\177\132\145\230%\002G\188<\151\242#^\158K\249a/\207\165\250\136\151\231R~\204\203s\229\0001N\202\143xy.\229G\188<\151\234\195^\158K\241\017/\207\165\248\216\172\169\2168@\140\179\229\183;\144\176Q\132\018G\234\141$\014\195b\t\195\207[$\018G\194F\145:@\140\203\028\028\1699\023@\0186\138B\226H\003\149\196aX)a\164y\149\192\177\217PQ;@\140\211\014\142\212\220\b \tXj#q\184\129J*\016\183OI\001\146\230))@\018\176\148T \tXJ*\016\007,%\245G\002\150\146\250c\001K\229\014\016\227\164\254H RR\1278\016)\169?\018\136\148\212\031\011D\170v\128\024g\235\143\197!\213\b\024\174\181\220\b\024F\005\002\133\159\181\012\005\140\196\1602\1468\012\139%\140Tk+\143\005\1602\0210\210\184L\1920*\023(\2104[t}\172 mS\018G\026WJ\028\134U\018F\154gk\142E\168RH\1425NH\014\183\173\018\138#M\171\132\228\136\148*!9\172\164J\b\142\132\186J\b\142D\186J\232\r\007\186J\200\141\196\185J\200\141\133\185*\1518\012\019\130#\179\178J\232\141\196\194J\200\r\135\194J\168\141D\194\202\022[C\002W\165\005\1404\173\0170\136\1707\002\133\155V\219bkH\004\169C\001\195M\171#\001\195\168X\160H\211l\1775\196\247\234T\1920*\019(R\167\173\181\134\184K]\b\024i\154\0180\140*\005\1384\173\0180\226.u-q\024&\196F\220\165\022b#\238\162\133\218\176\187h!6\226.\218\022\219\007q\023\029\t\024iZ,`\024\149\b\020iZ*`d\139Vg\018G\026\151K\028\134\021\018F\154g\011\238\131x\179.\005\1404\174\0180\140\170\005\1384\205\214\219\007\025pu#`\184i\205F\1920*\016(\220\180F\232\141\188\171F\232\141\188\131F\232\141\132\144F\b\142\132\144F\b\014\135\144F\200\141\132\144F\168\141\133\144\166\1448\012\019j#!\164\017j#!\164\017j\195!\164\017j#!\164\017jcK\143\166\1458\004\011D\002]\141#R 2\232j\028\145\002\145BW\183\024\021\t\212\t\195b\001\211\164\210D\2260,\1490R\173\173\184Z\145\030\201\005\1404\174\0160\140R\002E\154f\235\173&+\138@$\211\213xE\017\136d\186\250H\158T\011\024\169\180\0170\136\018\217t5\014\\\129H\167\171\201\171\023\tu5~\243\"\161\174&/^d\212\2138\188\005\"\167\174\190\145\166\t\185\2210J\136\237F\154&\196F\194[ \178\234j\028\222\002\145Uw%N/\146\234\174\196\233EN\221\021;\189H\169\187\018\167\023\025uW\230\244\"\165\238J\156^\164\212]\153\211\139\164\186+qz\145Tw%N/r\234\174\216\233EJ\221\1498\189\200\168\187\146\237\134@\164\212]Yp\0169uW\018\028DR\221\149l7\004\"\171\238\202Z'$\199\026'$G\218&\020\199\154&$G\164$\178\234\174DIBpDH\"\171\238J\130\136H\170\187\146 \"\146\234\1748\136\136\156\186+\t\"\"\167\238\202\130H$\005\135\131\136\200\170\171\217\212Ad\213\213l\238 \210\234j2y\016iu5\155=\136\188\186\154N\031Dj]\205\230\015\"\183\174\166\019\b\145\\W\179\025\132\200\174\171\217\020Bd\215\213d\014!\178\235j6\137\016\233u5\157E\136\012\187\154M#D\138\157\193\145\154\197\000\203&\028\"\201\174f3\142X*\144\180O\n\1445O\n\144\b&\150\n\196z\137\165\000\137\\b\169?\0182b\169?\0183b)?\0284b\169>\0185b\169>\0226\146\141\003\1968q\230\207\226\134\200\183\235X\220\016\025w\029\137\027\"\227\174cqCd\220u4n\136\156\187\142\197\r\145s\215\177p r\238:\022\014D\210]G\194\129\200\185\235X8\016)w\029sJ\145q\2151\167\020\025w\029qJ\145o\2151\167\020\249v\029sJ\145o\215\017\167L\165\248\136S\166R|\196)S)>\226\148\169T\031v\202T\138\1438e*\181\199\1562\205\028 \198\137\003\215\1428\165H\183\235q\164^%q\024VJ\024y\222J\2264i_\237\000I\003\181\003\196\184\198\193\225&\138\148\187]G\220\\d\220\2458\220@\145q\215\2270,\1460\210<q\226\223\177Q_\164\220\025 \198\1373\255\142\196\r\145r\215\227H\189R\129$ dR\129\228\005gR\129\248\253fR\129\236\245J\005\146\128 \019\238\136\031\201|;\226F2\221\014{\145\204\182#N$\147\237\152k\200d;\226\0252\215\1429\134L\182#z\151\185vX\2382\211\142\168]&\2181\177\203L;\162u\153h\199&\1842\207\142\184\132L\179c\141\019#.i\155\016\028k\154\016\028{\247Bp\248\213\203\252:\242\230Ez\029s\025\145]\215\145!T$\215ux\004\021\185u\029\025@Ej]\199\198O\145Y\215\145\225S&\214\237\137\219\203\188\186=\241{\153W\183\199\142/\211\234\246\196\243e^\221\158\185\190L\172\219\019\223\151yu{\230\2522\177nOFE\153W\183'QB\230\213\237q\152\144iu{\018'd^\221\158\005\n\153X\183'\145B&\214\237Y\168\144\153u{Vq*q\024&\005\200\170\149\002$B\144\137u{\172\003\153W\183'2\144\137u{\018\ndb\221\158\196\002\153W\183\199\193@I\245\145h\160\164\250X8(7\014\016\227\164\254\240\001bPJ\253}\145z\165\252\1900L\170\015\159!\006\165\020\223\023{\222\212\001b\156-?\022\254D\130\029\139~\"\193\142\004?\145^\199b\159\200\174\219\179\149\131H\175\163!R\164\215\177\b)\210\235h\128\020\249u,>\138\004;\022\030E\130\029\137\142\"\191\142\005G\145`\183g\007\015\"\195\142\198P\145b\199B\168\200\177\163\017T$\217\237Y\235\132\230X\227\132\230H\219\132\230X\211\132\230\136\148D\142\029\137\177\"\197\142\133X\145b\199\"\172H\177c\001V\228\216\145\248*R\236Xx\021)v4\186\214Rp8\216\136$;\022[E\146\029\011\173\"\201\142DV\145d\199\002\171H\178\163qUd\217\177\176*\178\236\182$\172\1384\187-\t\171\"\205n\139\195\170H\178\219\146\176*\146\236\182,\172\138,\187-\011\171\"\205nK\194\170\200\179\219\178\176*\018\237\182$\172\138D\187-\t\171\"\209n\139\195\170H\180\219\146\176*\018\237\182,\172\138D\187-\011\171\"\209nK\194\170H\180\219\178\176*\018\237\182\172uBs\172qBs\164mBs\172iBsDr\"\209nK\020'\018\237\182Xp\"\209nK\244&\018\237\182$\250\138D\187-\137\190\"\209n\139\163\175\200\179\219\146\232\219H\189\145\152\212H\189\225\152$2\237\222IL\018\137v\239$&\137D\187w\028\147D\158\221;\137I\"\207\238\157\197\026\145i\247Nb\141\200\180{g\177Fd\218\189\227X\019\138L\187w\028kB\145i\247\1740*\020\168\019\134\217z{'1$\020\169v\2398\134\132\"\211\238\157\196\144P\164\218\189\031I\143d\002F\026'\020G\218&\004\199\154&\004\167I\211\132\2264i\154P\156\198(\1617M\154&\244v#M\019r\1951$\020\137v\2397\140\018j\1951$\020yv\239$\134\132\129\212\219\025\195D|#\019\155P\164\218m\201\204&\020\185v[<\181\tE\178\221\150MFB\145n\183%\179\145P\164\219m\217t$\020\tw[2\031\tE\198\221\150LHB\145r\183\1973\146P\228\220m\201\148$\020Iw[6'\tE\214\221\150MJB\145w\183%\179\146P\228\221m\217\180$\020\153w[2/\tE\234\221v\203\026(%H\218'\021\200\154'\021H\226J(%H\020\024J\005b\001\134R\128D\127\161\212\031\137-\161\212\031\t.\161\212\031\142.\161\212\031\t/\161\163?\018_BG\1278\192\136,\188\003\245t\145\135w`\158.\018\241\014\204\129E*\222\1299\176\200\197;\016\007\022\169x\007\230\192\"\023\239@\253R$\227\029\152_\138d\188\003\245K\145\142w`~)\210\241\014\204/E6\222\129\248\165H\198;0\191\020\185x\007\230o\"\023\239@\252M\164\226\029\152\191\197R\127\196\223b)?\226o\177\148\031\246\183X\170\143\248[,\213\199\252-N\028 \198\137}\226\223\201\128.R\241z\028\1697\1518\012+$\140<\175\1468\018\158E.\158\001\146\006V\014\016\227j\007G\154(\142*~'\001F\164\227\2458\220@\145\141\215\2270,\1440\220<\145\140\183\251\157\205\016D6\158\001\146\006\198\014\016\227\018\007G\154(5\200Z(5\200\026(5H\218'5\200\154'5H\148\149H\tba%R\128DW2\029\143\142\1322!\143\141\1322!\143\206yeF\030\0272eJ\030\0272eJ\030\0252eF\030\0272eF\030\157\243\202\156<:\182\202\164<6\182\202\156<6d\138\156\188\142\r\153\"'\175#C\166H\201\235\216\144)r\242:6d\138\156\188\142\012\153\169\020 \147\139\b\128d\004\145\249xL\2062\029\143\168Yf\227\017\141\202d<\"Q\153\140\135\021*S\241\136@e\"\030\211\167L\196c\242\148\137xD\1572\015\143\133[\153\135\199Z'\194\030k\156\136z\164m\"\232\177\166\137A\151ID(\142(D\b\142\200W\228\224}\018!\137\028\188O\"$\145\130\247\137\133$2\240>\137\144D\002\222'\019H.\127,\000\191\004\145\130\247\201\004\"r\240>Y\173\185\128aT!P\164N[m\159\228\205\139\004\188O\252\230E\254\221'{\243\182\218\190I\224\018\tx\223d\230+\018\240\190\241\196W$\224}\147y\175H\192\251f\193Rd\224}\147`)2\240\190\217\200/r\240\190\137/\136\028\188o\226\011\"\005\239\027\251\130\200\192\251&\190 \018\240\190\153/\136\004\188o\226\011\"\001\239\155\249\130H\192\251&\193R\164\223}\179\198\t\197\145\182\t\193\177\166\t\193\017\137\136\196\187o\172\016\145w\247M\004\"\210\238\190\201\234X$\221}\147\197\177\200\185\251\198kc\145p\247M\150\198\"\223\238\155\173\140E\194\2217Y\024\139|\187\239/\242\164Bn_\164R!\183/\140\018b\251\"O*\196\246\197\158\180\1508\012\179\229V\1450(R\237*\018\006E\162]\133\195\160H\179\171H\024\020Yv\021[\253\139,\187\138\133K\145fW\145p)\178\236*\022.E\146]E\194\165\200\177\171H\184\0209v\021\014\151\"\197\174\"\225R\228\216U,\\\138$\187\138\132K\145cW\177p)r\236*\018.E\142]\197\026'$\135\219&2\236*\2104\145aW\017\137\136\020\187\n+Dd\216UD \"\193\174\"\225R\228\215U$\\\138\252\186\n\135K\145]W\145p)\178\235*\022.Ez]E\194\165\200\175\171H\184\020\249u\021\t\151\"\191\174\194\225R\228\215U$\\\138\252\186\138\133K\145`W\145p)\018\236\190\217\180Q\164\216}\179y\163\200\177\251&\019G\145b\247\205f\142\"\199\174\199\145\152)\178\236\190\233\028S\228\217}\179I\166\200\180\251\166\179L\145k\247\205\166\153\"\215\238\155\2053E\178\2217\153h\138d\187o6\211\020\217v\223l2'\242\237\190\201lN\228\219}\179\233\156\200\183\251f\2439-\245\135\223\134\150\242#/CK\249\145\224\163\165\254p\244\209R~$\252h\169>\022\127t\234\0001N\170\143D -\197GB\144\150\226\1951HK\237\145 \164\165\248X\020\210\149\003\1968\177;\199\194\144H\189\235X\024\018\185w\029\tC\"\247\174caHd\223u4\186\136\252\187\142E\023\145\128\215\209\232\"R\240:\022]D\018^\199\162\139\200\194\235Ht\017Ix\029\139.\"\011\175\163\011Y\145\135\215\177\149\172H\196\235X\184\018\169x\029\139C\"\023\175cq\168\145\002$\239M\234\143\196\151F\234\015\198\151h#\245\135\227K\180\145\250#\241%\218\132\014\016\227\164\254p|\1376R~_\164^)\191/\012\147\234\251\"\207+\229\247\197\1587w\128\024g\203\239\210\146\199U\002Fj-\005\012\163*\129\"\207Z\011\152&\149j\137\195\176F\194p\181\"/\239\130\227J$\018\243.8\172D\"1\239\1620*\018(\2104[t\023\018S\"\145\150w\193!%\018Yy\023\178\218\139DZ\222\229Hz$\0230\2108\1618\2106!8\2144!8\"\017\145\142w\193\n\017\217x\023&\016\161\183\027\233\014\1617\028\016#\145\136w\193\241P\164\225]H8\020Ix\023\022\rE\018\222\133\004C\145\131w!\177P\228\224]H(\020)x\023\028\tE\002\222\133\004B\145\127waqP$\224]H\024\020\249w\023\022\007E\254\221\133\005B\145\127w!\145P\228\223]X(\020\249w\023\026\011E\254\221\133\005C\145\127w\161\209P\228\223]X8\020\249w\023\022\015E\254\221\133\004D\145~wa\017Q\228\223]Xl\018\249w\023\022\156D\250\221\133D'\145}wa\225I$\223]X|\138\164\252\200[\147\234c/M\170\143\132\168H\202\143\196\168H\202\015\007\169H\138\143D\169X\138\143\196\149Xj\143\004\150Xj\015G\150XJ\143\132\150Xj\143\197\1508q\128\024'\214\182$\137!\018\201w\223$\139!\018\201w\2238\141!\018\201w\223$\143!\018\201w\223,A!\018\201w\223$C!\018\185w\223,E!\018\201w\223$G!\018\185w\223;\214\192F\226 L\164\222}\1474\133H\228\222}\239\240\022[$r\239\190I>C$R\239\190qBC$\018\239\190IFC$\018\239\250n&\205\147\242#^\158H\249a/O\164\250\136\151'R~l2\1468\250\195n\148H\249\145\176\145H\249\145\176\145H\245\225\176\145H\241\145\176\145H\241\177\176\145n\028 \198\137\147\012\0226D\222]\197\194\134H\188\171H\216\016yw\021\011\027\"\237\174b\249O\145H\187\171h|\017yw\021\139/\"\239\174\162\241E$\222U,\190\136\204\187\138\197\023\145yW\145\248\"\018\239*\022_D\230]\197\226\139\200\188\171X|\017\169w\021\137/\"\243\174b\241%\147\250#q#\147\250\195q#\147\242#q#\147\250cq#s\004\136\253(\147\250#q#\147\242#q#\147\242\195q#\147\226#q#\147\226cq#+\029 \198\217\242;\159I<\016Yx=\014\195\180\1281\247\021\137x\006\bq\"\019\239|&^)R\241z\028\174W\228\226\2458\012\139$\012\191\015\145\141w>\019\175\020\217x=\1424/\1498\012\203$\1404/\151\189L\154WH\028i\158\1468\012+%\1404O\138\143yo^;@\140\147\242#\222\155K\245\017\239-\164\250\176\247\022R|\196{\011)>\230\189E\228\0001Nl,\159\201\168/?\144\199\188\\~ \143x\185H\207\235a\228y\197\1902sJ\145\159\215\017\167\020\249y\029sJ\145\159\2151\167\020\tz\029sJ\145\161\215\017\167\020)z\029sJ\145\163\2151\167\020Iz\029sJ\145\166\215\017\167\020iz\029sJ\145\167\215Q\167T\177\003\1968)>\226\148J\138\1438\165\146\234\195N\169\164\248\136S*)>\230\148J9@\140\019\027/l*.R\246.l*.R\246.d*.R\246.l*.r\246.t\134-\178\246.l\134-\242\246.t\134-2\247.l\134-2\247.l\134-2\247.d\134-2\247.l\134-2\247.l\134-R\247.l\134-r\247.d\134-\146\247.l\134-\178\247.l\005_J\249\145\176QJ\249\225\176QJ\245\145\176QJ\249\177\176Q:\250\195nTI\249\145\176QI\249\145\176QI\245\225\176QI\241\145\176QI\241\177\176Q%\014\016\227\196\212\143D\r\145\202\199Fr\145\202G\006r\145\200\199\198q\145\200G'\245\"\147\143\205\233E&\223\153\197\011\145\203\199\166\254\"\151\143M2D*\031\153c\136L>6\197\016\137|l\230 \242\248\200\196A\164\241\177y\131\200\226c\211\006\145\195\199f\r\"\131\143L\026D\254\030\1553\136\236=:e\016\217{l\198 \146\247\216\132A$\239\177\249\130\200\221#\211\005\145\185\199f\011\"s\143N\022D\230\030\155+\136\196\1897r\146(\018\247\222\200A\162\200\219{\195\231\136\"k\239\141\028#\138\172\1897\1463\026\137\172\1897v\218(\146\246\222\200a\163\200\217{cg\141\"g\239\141m(\138\156\1897\022\187D\210\222\027\137]\"g\239\141\197.\145\178\247\198ZW\011\024i\156\0220\140j\004\n7M\164\235\189\1458\"\178\245\222H\028\017\185zo8\142\136L\1897\018GD\158\222\027\139#\"O\239\141\196\017\145\166\247F\226\136H\211{#qDd\233\189\2258\"R\244\222H\028\017\025zo,\142\136\012\1897\018GD\130\222O\018GD~\222O\018GD~\222O\028GDv\222O\028Gb\145\157\247\147\196\145Xd\231\253$q$\022\201y?q\028\137En\222O\018Gb\145\155\247\147\196\145X\228\230\253$q$\022\201y?q\028\137En\222O\018Gb\145\154\247\147\181\174\0160\2108%`\024U\n\020i\154\208\220\1414Mh\238F\154&4w\195(\1619\028Gb\145\150\247\147\196\145X\228\229\253\196q$\022yy?q\028\137Eb\222\207/R\169P\220\023F\t\189}\145'\021r\251bO\154I\028\134\137\024G&$\177\200\203{#3\146Xd\230\189\225)I,2\243\222\200\156$\022\169yolR\018\139\236\18876+\137E~\222\027\153\150\196\"A\239\141\205Kb\145\162\247\198&\028\177\200\210{#3\142X\164\233\189\177)G,\242\244\222\200\156#\022\137zoo\172\129\137\196aX*a\164y\153|\014\210<)A\0180B)A\0281B\169@\0182B)A\0223\194\202\001b\156\148 \137\026\161T \t\027\161T \142\027\145\212\031\t\028\"W\175c\158.r\245:\230\233\"W\175#\158.r\245:\230\233\"W\175\163\158.\146\245:\234\233\"[\175c\158.\210\245:\234\233\"_\175\163\158.\018\246:\230\233\"c\175c\014,2\246:\230\192\"c\175#\014,\018\246:\230\192\"c\175c\142)2\246:\226\152\177\020 q\204X\n\1449f\0289@\140\147\018$\142\025K\t\018\199\140\165\002\177c\198R\127\1961c\169?6\164\199\133\003\1968!\191/\226\233\"c\175\199\145z+\137\195\176Z\194\200\243j\137#\158.\018\246\012\0167P\164\236\025 \198\005\014\0147Q\254x\237\023\243t\249\235\181_\196\211\229\207\215~\1771]\254~\237\023\t\t\242\231k\191X\0033\137\195\176\\\194H\243\n\249\028\164yR\130$t\200\159\175\253\194\161C\254z\237\023\t\029\"i\143|\1992\022I{\2283\150\177\200\217\195_\177\140E\194\030\249\136e,\242\245\2167,c\145\175\199>a\025\139|=\242\005\203X\228\235\177\015X\198\"_\143}\2471\022\233z\228\179\143\177H\214#\031s\140E\174\222\239\172\210B\1920J\t\020yR[r\191\147\193@\164\233\253N\198\002\145\165\247;\030\nD\142\222\239d$\016)z\191\179\129@\228\232\253N\198\001\145\162\199\134\001\145\161\199F\001\145\161G\006\001\145\159\199\198\000\145\157G\135\000\145\157GG\000\145\157\199\006\000\145\156G\227\191\200\206\251b{D\";\143\014\019\"9\143\141\018\"7\143\014\018\"7\143\141\017\"7\143\r\017\"3\143\140\016\"/\143\r\016\"-\143\141\015\"+\143\r\015\"+\143\140\014\"'\143\r\014\"%\239\139M+EJ\222\023\153U\138\148\188/\018GDF\222\023\137#\"!\239\011\199\017\145\142\247E\226\136H\199\251bqD\164\227}\14582&\197\157U\221Vj?\236H^\012\234\216\tX\176\132\237[\130\n\151(\243\2513\024\022-a\195\\\018\227\226%\206|\253\005\195\146%\204\\\184\195\176t\t\027~.\000\2272\011\167\025,_\194\014\172\210b\137\026>\190\141q\202\234\223\254eaX\185\132\149\229\141\153\171\172\198\209G\173\151\176>8`\148^\162N\180\206\198~\212\0271\167,\197]\0211\167,\197m\021AY\1383\223\n\192\176\200V\018\171\211\018\\]\223\200kP\150\226J\n\019\138\163=\146\217\254\192^\151\178$w\189\017\148%9j\203\018\220\176\127\135q\150\226\190Y|P\150\224N\180\131-\193\237\014\172C,\197}1\167Q\150\226>\216k(-\193\153T!\012\179\004\247\193\252\190\180\021GtYZ\130{#\207YZz\235\168|\203\196~Y\236\tl\189\177wUf\182\181~>\133q\150\220>\2173Xr\171\137(Ke\191\003\250\174J{\156aM\171l\127&(Km\195'\2370\206\146[\197\134\163R\0048f\174\018zc\017\174\n\236\216E\186\164\nms\180Z;\198\237H\215U\150\230\198\175\135a\160%\186\174d\239\162\178T\247NPu?\243h/\183\151\189\190^\245\249\165\132)lq\029X\168\019A\1336jG`\145\005\171\t*\182PW\130Jl\020\1712\181`[\130\202,\212;A\2296\138UYX\1767\130R\022\170\"\168\210F\177*+\187c\191\t\172\182\251\236B`Z\192X\173\141\133;`\148\182u\214\017\148\173\179=A\217:#\237\215\182\204\200\157\236X\219:#}\166m\157\145_R\136\181\1733V\165\173\179\223\t\202\214\217\142\025\179u\214\016\148\173\179O\130\178u\198\222\184\182u\246EP\182\204\182\204\152-3\002\1785\166\240NCck\140\128l\137i\188\188ml\137\225}\151\198V\024^\1957\182\190Hu\182\188n\164\233\182\186n;\140\178\213u$\182lu]\143\157~9|\169\151k\255\168\255\t\224\133\011\239\212\203\233\136\209\n\027\175\140T\016\190\196\248\146\152\1750\188#\214k\012\1273\239\030\225\239\138<\221\186\234zS\215\246\216\189T\199C\031\216N\168#\027\023\221\220\246\253\140\224\218\207\b\000#\217l^?\212b\011@\1957\148l\002\t\2350.\180q;f/\178q\159\012\023;8Rqb\003O\204`j\227J\218\194L\000\025.\183q\007\n,l\224;m\162\018\022\183\212di#9\176\178\129\r\195\2136\238\131\225\180\141\1872\\#p\172\183\003!\195\154\002\003\t\164H!\197=\195\t)\158\025NH\177f8\161\196\142\002\133\020/\012'\148x\161O,\164\248\205pB\137\223\212\160Pb\197pB\135o\012'd\216Q\160\208\225\023\195\t\029\1903\156\208a\183\221\018d(\132HqB\135\007\134\019*\236\024N\168\176c\143\028\n\025\182\024%D\216\226\168\025\n\t\238\136\181L\194\1369!\192Ob\174\1440bN\200\239D\204\1492\164\019\156P_I`\181\012\232\004'\181\199\154\2158\225\028\003#)=\134\019\210k\bL(\239\131\192\132\240\174\004\022\203HNp\137\140\207\004\151:q\156\000\133\246\246\004&\164w&0!\189\154\192\148\140\225\004'\164w!\176JFp\130\019\210\251&0-\2277\193\t\229\225_\225Hb\161\1877\002\011d\240&8\161\187/\002\019\186{'\176\216\137\220\004(\132\199`Bw\007\002\019\170\235\b,\151Q\155\224\132\236\020F\t\213)\028\022\227Rv\t\003\n\217\237H\181\181\132\017sBv\159\196\\#a\216\\\"d\135\247\241\146$\144\209\157\224\132\236J\002\139dt'\184XFw\130K\028\028y\220\212\025\006\136\197L\014\003\004'\180\215\016\152\144\222\007\129\t\237]\t\172\148\195\000\193U2\188\019\\\237\012\003\004(\196\183'0!>|\011:I\229r\131\192d\200c8\161\189\011\129Er\024 8\161\189o\002K\2280@pBy\021\129\t\221\189\017\152\012y\012't\247E`Bw\239\004VJ\024\246\178\180r\134\011bP\b\143\193\132\236\014\004&\215\023\024\150m\228pApBw\199#\134\133\018\134;%\019\186\2191{r\179\133\225\018\007G*\022\202;1\131r\175\133\182P\136\175d\184BFy\006\148\242\163M,\157\240\205\144\149\140\223\012($\2160\156\208\224\007\195\201\205\022\130\20372\1343\160\179\215\194\128\161\019\197\025RHq\207pB\138g\134\147\203\r\134Ke$g@\185\217\194p\185\140\229\012(7[\024N\201h\206\128B\137\021\195\t\029\1901\\-\003:\003\n\029~1\156\208\225;\193\021\027'V3\164\016\"\197\t\029\030\024Nn\1820\156\\|\176G.\132\012o\024%Dx\195Q\179\144\187-\196Z.a\196\156\220m!\230\148\132\017sB~'bNn\182\176\167\016\234+\tL\142\195\012'\181G\154\1676N8'@)=\134\019\210k\bL(\239\131\192\228n\011\129%2\146\019\156\179\217Bp\153\019\199\tPhoO`Bzg\002\019\210\171\tL\174{\025N\238\182\016X-#8\193\201\221\022\002kd\252\198\184R(\175\"0\161\1877\002\147\219\203\012't\247E`r\213K`\137\019\185\tP\b\143\193\132\238\014\004&\151\030\004V\200\168MpBv8\180\151Bud\170[:\011\015\006\148\187-\164Z-a\196\156\220m\193\230\170\141\132asU g\236\024\022:\019v\140\139\228|\029\195bg\186\142q\206f\011\193\185{-\004\232\236\181\016\\\238\224H\255\021rN\143aJN\2331L\238\182\016X\229L\2321\206\217l!8\237N\2311\176\145\179y\b\1717r2\143ar\185A`\1613\149\1998\185\219B`\1773\145\1998\185\219B`\1693\141\199\184L\206\2261,\151\147x\012+\1569<\198)9\133\1990\185\219B`\238f\011\001\202\205\022\002\147\147<\002\147\155-\024\166\157\205\022\130\147\169-\024%TG\210P\180\\Yl\025P\200nG\170M$\140\152\019\178\251$\2302\t#\230\132\236N\196\\!\135\001\130\019\178+\tL\238\1770\\%\135\001\130\171\029\028y\\\237\140\023\196b#\199\001\140k\156\163\\Rs#\207r\137=y\150K`\242,\151\192\156\179\\\130s\206r\t\206=\203%@y\150K`\242,\151\192\228Y.\1299g\185\004'\207r\t\2049\203%8y\150K`\206Y.\193\201\179\\\bKe:\223\027\1299g\185\004'\207r\tL\158\229\018\152{\150K\128\238\250\002\251O*\211\249\152A9\207c\230d2\0311'\135[\002\147\202c\221\231\028\232bX%\189\167\219\246\174\219\2333\202\028M\239\185|\139dQq\221\"\189g\241\137\004Q\0075*\239\231M_\134|\210\131:\191c\164L\226\235gf{v.\153\006\001\002\191\019p\136\192do6\1572\250\250u\196\222\228:\146\014\1572\250\006\220;\199%K\220\181e\176t\t\235\218\022\163\178%\170T\204Xn=\131\"\253RX-c(\181D\213\180\202\210\130\245\135:\004WY\221vc\176\218j\027\181\166\237Z\127#\239\180Y\194\222\152\181{\250^\221n\219k\031r\251\149F\247\031#j3\252\153\129\193\002x\236\029\248\129\011\134?3.\\\224\174\159\179\189p\2483\227\162%ng\146H\031\200h\2483#\227\005\1789\222\206\0190\030\254\204\192d\tl?f\139\201\240g\006\166\011\160\249\201\209\007.\029\254\204\184l\137\211\031}\016| \179\225\207\140\204\023H\221nw\215\t\153\015\127fd\177@v\237\162#\139\225\207\012T\200\133\241yj\026\150\b\140\023zi\188y\173\190\206\237~\223V\253\217\246\169\189\154K\129\247\0114\250\1767g\172\255\178Y='\024\152\193\204\188\028\212\222\225\253\197\226\rU\r\165\225\134\180\214\250[\155\149\176[i4T\026\145J\2394\167\206p,\r5\166u\158\251\215y\190\232\218XAU'C\213\t\169\218f;-\136\199\210XHi\011\218\227\021\246t6\212\156\145\154G\150Sc:\150\134\153\243~~\211\231\015Te1TY\176~\030iN\157\249X\026\170\162u\030\142\221q{V\167\221\203\237\029U]\014U\151\164j\155\237\180@\141\165\177P\209\022\148\231\163\170_\142\007\189\133\221]\015\r\168I\003,\178S\1275\150\198\128\166\245w\250v=\155\027\215f\222\225\214\223\012\2457\164~\139\236\212\175\199\1787\144p\159\238\169\183\151\207\246\186\235\007\207\234\1574#\025\252;a\254\141l\200\214$\155\1774v\1945\213\183M\219{\206\151\249\245\006\183\029\131\203'\017W\255\130\237\180 \028Kc\225\t\2077\219\220n\003\006\199O\188\142o\200N\253\241X\026\003\169\191\007\144\028\147\193\251\147\204\247\252@\141I:\150\134\207c@\181?\154\230\239\219\235u8\214\184\160F\012\241 a\241\000\152p\218\146\143\1651\195cC?R\245\139\203\154\181b\b\r\t\011\r\022\217\169_\141\1651P\249\223\196S\1572\004\138\164\246\189\153gz\167\026Kc\143\199\141\175\014\181b\b\023\t\011\023\134\227\212\166\199\178\231\165\027\191W\\/h<L\135\248\144\006>\183\024\216\178\005\233f,\141\005\030\025.\199\230:\236I\184\149\015A!eAa\":\245\134ci\200\241z\189z\143\234\029bA\154\172\213k\136N\189\241X\026r\234\169\247\128\234\029\130@\154\173\214{\000\245\166ci\200\249\234\136\\\221\246j\184\243\234\214=\248~Z\172\012\200\019\217\169?\031Kc`\197\235\219\213\250\007\175O\169\215\183k\245\171\1774\006\184\215\215\199\219\184Y\190\218\140\193\219S\230\237\200\134\211\154j,\141\157\133\151?:\242\182\239w\007&2\152\166\167\189\147\031\015\253\003\247\235\231\151\137\254\241}\208\215\215\195__\195\168_\157]\0146'\219 \206U\247\187\016\230\031\143\221\165_\239l\187\215\195\159^\017;@\236\221\173\171\207\189k?e!\132\245\239\142\183\139\234\1584\017\189^\246\234\227\216\245Du\233\187\170\189\144\237\147,F\149=\238W\191\159U\2557\170{i5\239\174d\197B\203i\233\n\237k\133\151\1735\152\211\242\021\218N\157\235{w2z\177\214\218~b\199\153j\1339D\161\245\138\203\021\2508\165\166\212\nQ\223\213\199\215\251\n\169F\164\147\234\159\241\248\206Y\011\223\188W\128\213\182\024s\0316\135mD\t\204\249 [\127\162\225-\031\198\214\156\141\173\003I\006\151|3\150\134\184\182\176\198\021\014\227i\206\215\213\176\198p,\r\147\015\166\223;\\\2270\146\230l$\029YN\141\241X\026&\031F\171\225w\185\221\026\13514gc\232\200rjL\199\2100W\150\209\223p\203 \031F\206\156\174\162\191\209VA\158\143\165a\242!\243\170\199\197\215\161\173\235!\183\229\136\214\210\2490t\230l\232\132F\156\246\168\1774\134\248\016z\197/y\0243s6f^\225;\174\198\210\016\249T\248z\193\021\014\147\225\156M\134G\150S\163\030\203\158YlVj\132\211\224bp\213\"\1605\162\233o\177\025K\195\228\190z\197:.\006_-\152\175^\161\142\139p,\r\147\251*v\213bp\213\130\185*\244\212\"\030KC\\\153\240\146\n\007O-\232l\023\215\152\142\165a\230\190\169\030\154\224\021\131\183\022\197\250\004\015L\235\138|,\r\155{lu>^\204z\bV=\248i\193\252tAu\234Vci\232\213\235\225X\155%\231y\"N3\182iNp?\231\250\195?\254\245_\127\250\251\191\189l\204\151\238_\023cUQs+\243\000\239Z\169l+ze\160\215\r\029z\139fm\250\245XP\243\233\155\218\188\150\234p;\172~~(U\129\141\"Gf*\180a7\140\138\1321\002\139m\024\2546A\170\018\027vf\184\212\198]\021\193e6\014/,Tn\163\200%\220T\0216\142\160\148\141\218\147\238-m\216\137\192*\209#\228TP\213\018\199\186N\139\230i\205\144\141\141<Pd\185\145\175\003?L)\148\215\213\012(\180\215\189)\179\190GH\161?\130\018\242\187\220\176LK\161\191\003\129\t\249]v\228\173\148B\127\023\002\203\165=\141?g\157\150B\130\023\n\020*|\255b\239N\232\240\029\127G=-\133\016\187\027\241\185\178\150@\012\211\242\021S\131B\135_\199\159\016Wmd/\226\154+\161\194\175\027\177'D\136\239Z\166\149P`Gn\229\166U,{\154\188\187J\168\240D\129\169\236C\242\146+\161\195\238\202\128B\137\167\027\193\t\029~2\156\146\143BpB\133\r\195\201pH^\177\208\224\158\192\132\006\241\183\028\210J\b\016\127\203!\1737r\240\"\175\173\022\002<\019\225\215\161\020\012N:\170\165\002\183\239\159\138ac\137\197\023\151\211:\145@\130sb!\030d\235L*\139=\181\144 \190\b\149\214B\129\205\017\135\254Z(\240\147<\134\016`G`B\127{\"\005\161\191\019\129\201\177\152D\182Z\b\016\167S\167Z\b\240@\146FS-\005\200p\161\156\001\016\156\028\132q\231i\161=\252\165\160T\011\229\189\019\152\016\222\225\248\218M\235\131E\002\142\206d\175\244\147\142\025\185H\193\209By\215~(\156\129\139\012\028-\180g\190\2371\003\023\0258ZI\139\221\002\184\200\192\209R~\215~\1342#\02398Z(\240\162\204\023Hf\232\"\tG\011\0216J\029z\167\155\177\1394\028\173\165\196>\172\022,\018q\180\163\198\237\174w\190\025\187\200\146j\030\146\156\2155&\253\175\231\252\236\234#\223*m\002\204\187\222\222?uwm/\156\249\208\2360g\236\253\019|\1802m\030\130]\253\182e\218\196S+\246}c!$\153\027\138\191\169\1536\015\161^\244\161]\177\244\208)H\148\180\161\217f\227\174Rwm\167/z\252\030\232W\219\245!\167\219\190^\254\135\187\031\155m\002\015[\245\189\189B\015\253\149\247S J\143\158\168}\141\031\251\171\255y#\220\228\137\186)9\245W|f\220\236\137\138)9w\200\250\247\235Y\253\182k\183\187~c\166\255/\245h\166Tgb\162pL\252\002Y9\228~\203\244In\233p\247\199\207'\185\021y\238\231-\212O\244\220^7\215\223\250s\181\131\207\152^\237\195\167\2054k\189\249\172\149`\179\214\175O[\t\252=\252\180\173p\173\175\159\182\018\225N~\154\031\195\222}\154\158\192n}\154\158\174\244\231\211F\220X\209\191\138\151\015}\190\142?\004\163\206\240\156-\011rH\236\015\143/;\194( cw<\183\223\199\238\186Z\153B=5l<mw\215~4<w\253\191\244a\205\\\209\129\006\220\200\208\031P\155}\222\219\233E\157\207\199O\194\171\024\175>~v\171\204\1541\245\239\213\190\159\026\205\131.\230k\198o;\243v\1587\212@\149\253\162\149\208\r\001\151\235Y_./&\179`\240\026#4,\1780X#\155\214\172p\195\215}\223\184Nn\241\235\237\215\233\218Oo\182\131L\213\222|\230^\238\245ga4\152\136\238&\172\141~d@\236\248\155\202\135\210\024\137\159jG\219\161f$C3\146'\154\209v\160\021\241X\026\027)n\197n\184\012\226V\156\r\021g\168\226\145\226\212\149\142\165\161\229\184\174\2357\170\169\024j*PM\134\224\212\147\143\165!)RO\175\144\254L\226\136j+\135\218JX\219Ds\234Tci\168\021\174\179\186\169\235\153UZ\015\149\214\168\210\005\207\169\181\026K\195\213\158Z\199#\226qr\015\026\208\012\rhV\027`\153p\218\162\199\1787\211\175fF3\015\135\028\172=\026\230\248\194\224\139Q\176\198\185`\014\241_\133\1580\026\2525\130\254\170\192\243D\225X\026\018\241O\133^e48d\004\029R\129w\024\197ciH\196\003\213\r\2133\248_\004\253O\221@=\233X\026\018\241>\245\129\234\025\188/\130\222\167>@=\249X\026\146b\245\140J\146\195\179[\247\224\139Q\137\235\198F\156\246\168\1774\134\136g\170/T\247\224\146\017tICp\234\169\198\210\144\136/N\185\180\213\216\244\250xE\021\015\174\024AW\132\022\156\150\232\177\236\173\196\027\220\146\247\145\222\143\148\199wpr\159\r\151\130L\t\218 \184\178\246\225bPf.\006eq\184Z{\221\170\237\1773\222M\1551\248l\028\1734\1951\226\180'\028Kc(~\1627\134y\195\019M\027\220<N\188=\132\2379\173\140\199\210\216$Q\1604\204>>\162\198\012\177 \134\177`\1669u\166ci\168$\"\236\239>f\230`\188+\134\b\017\195\b\129\0128\237\200\199\210\024!\017\227>\244\244;N\219G\183\030{O\216C\207\029n\030\153\018\180g\205\144\211.5\150\198X\229i\151\249\t`\183!C\b\137\235\213\134\024\166Ss5\150\134Mb\201\017\141=\195\149#S\162\n\193\2163\\3\202\2045\163,!\145\226di\249\186;\031of\171@_*sI\003\005\237\225\194\145)A#\188\214d\011\135\171G\153\185z\148%\225j\011\155\253\241vn\205\002\209m\209\016F\146h\165E3\219iA8\150\198B\188\222G?o\237\249\172\205\237\227\022y\233p\001\201\148+\029c\155p\218\018\143\1651C\162\196\207_\127_C\240H`\240\248\249\203\239+\029Kc1_m\161?\196\014\151\149L\201\027\230\141\171\195u\165\204\\W\202\018\018[\250?\199\235m\248\160\181\219\132!\148$0\148,xN\173j,\r\151D\142s\191?\190R\239\0169\018\0249,\166Ss5\150\134M\"\199\199\211\253?D\147\004F\147\143g\251_\143eo(%\017\230\003\197\240\225V\146)Q\221 V\015\023\1452s\017)KI\156\248h/\237\246x\221\181\213\011Ze\014W\145L\137j\180\168N\221\225X\026:\137\016\215~\150\218y\230\\\195\157$S\162\133\167\203wZ\017\143\165\177\145>\217\138\167\226\195pg\201\148\207\180\235\153\0241\\f\202\204e\166,%1\226\163\167\162\166\012\017!\133\017a\1648u\229cih\196\2555\154\132\015\151\149L\137\182U\192\156{\184\160\148\153\011JYJ<\190\189\160z\006GO\161\163\183\023PO5\150\134\196V\252G\180O\148\014\206\156\226\005\254\017\236\012\165z,{V\230n\208\153\203\143v\238\232`\252u\177:\207\160\243\214\183\003\\\203g!\156>24t\211\003C\199\b\2211tB\162.F\167k\251\022\148\133\189\137\161s\132f\224\130\200\175\187\012W\210\144_ej`*\168\194\153'%\210W5\148\134[\174\215\138vP\179j\168\181Z\171\021l\156\246U\r\165\225\214\235\181\186\251\150A\157\r1$#\206s\189\245\219\253\245\138\129\158:xR\214\2247(\233N\235\245X\246&\242\205j\027\208\020r\184PdJ^7\1526\014W\1382s\165(\203\195\245\030C\003\192p\169\200\148+\239\t\132\249\225ZQf\174\021ey\188^+\138\140\195\197\"S\174\212\n\002\228p\181(3W\139\178<]\175\021\197\253\225r\145)Wj\005\225\127\184^\148\153\235EY\158\1953\145\170=W\183C\179\215\191\191\168\170\031\025\175\248,$w\015\178\198D\139\225\000C\184z\238\030]]\250\001\249\250\162\127\222\212\254~\023\019\018\137\183^\212\254Jv\168\243\193Ys\232\1723\205\233\151r,\r\181^U\187\187n\219\132\227\140(\215+\027\011g\221O;\134^5\183\158\134\189\150R\239\17502\230\141\b\213m7\029\142\012\027i A\165 >z\159\244\172\205\155\134\027E\166Dc\143C\151=7\\-\202\204\213\162\172 >[=\190\219\001k\031\156\182\128N\187$:\245\134ci\200\241\n\249\164\250\191\235\219\002/\155eU<\150\198\n\244\224\157\223\202\216\255l3\204\187\232\031.\031\153\018\237\137\249\022\253\195%\164\204\\B\202\n2Em<\211\249\225\026\146)A\253\205\250T~\184\136\148\153\139HYA&\173\031\199\189:\221\222\135\159\220v\171\030&\175\005\156\188.\137N\189j,\r\185Z\175\247\b\235\029&\179E\189V\239\017\213[\141\165!\235\245zo\176\222aD.\154\181zo\168^=\150=Y\017?\223\142o\234X\238\219\1597\205\223\182\026\156]Ag'6dk\212f,\141\157\245\141s\127k\006\231Wk\251\230\222\214\132ci\236\196\1711\208\223\154!\140\171d%\016z[\019\143\165\177\147\178m\156'[3\196\005\149\225-\157\231Z\147\142\165\177C\162\195\229\217\214\012QB\193(qy\1785\249X\026;$Z\236\030Ge\224vq?\204\166C\027J\207\161\213\241\212\031#h\192O\134\169\129\"\017\227R\157\219\211\021\204\164\251\138G\167\169W\207\030\198\225\220\229\142\149\146pa\175\194Z\196\031\150<\170Y[\189\253\132CR\185>mG=\220\007\026C\012V\137\232)\199\233hI\194\193\219\253@~\188V\250\027\220v\238+\031\162r\025\145I\196\206\237\029U\142;\230%q\252R\163\239\219e\229\224\231%\244\243\145\"\165[\198cih\196\173\201\215\221\178r\236\025\232\198\248\163n\166\138\1614<\226\1827\207\160^\014\238ZBw\189\173\015\234e>\150\134O\220t\187?^\205\191\194\231\029\198\244\018\142\233\011\158S\171\026K\195\173\214kmQ\173\163v\234\181Z[Pk5\150\134\171\215kE\169\r\2290\158\151\205Z\173 \195\161\212c\217s+\226\163\199}\253r:\238\2519\031\186\191\157UC@\170\224(nS\157\t\239f,\r\157e\165t\219}\191\214\232\212\203'\170z\240\184\n\167\167,\153N\205\225X\254\024f\221k\011\005{\178\237\206\162\226\161\005\201\234\128F\134\144~\173o\184\196\135\191\159\168?\168\243!HV\025\182Q\223\189kX\223z\143\128\171|\176\005\247\205V-9\189\155\141\165\177V\172\246\204\179-\027\198\157J\173\012\248O\182\172\024\203\222ZM\212~\255`\221\218fV=(\190\134\138w\233\178\r\245f,\141\t\168\220\251\199\022\134c\0028\152\214\201\n\237\243\171#,\"\180\251\007P.\213\241z\129\155J\2450j\212p\212\144d\231a\211\1774\006\216\172\175\221\030\142m\141\171\030\134\142\026\207\244f\158Sk>\150=\183\001\247U\238\245W\206\151\0286qduY\019Qr\003\200\169M\142)\249\167K\238\143\254-r\226\153X\238\212\190yAK\248f\152\1526)\156\170K\182\236\184\190\218\1614\022\030\239[\159\218\225\155\179\139o]\181\181\254T_\023\252\t\132\172\201\233\131\239\236\225^tB\016\138\030t\247\245\238\143\211nU?\001\212\195\194X\026I\196;Tk\179\213\2514\018\159\n4%\237\130\169'\027\220\005\149\159y\194\204\1542\167\012\241\003fj\206\028rw\020\1665\148\166\206\213N\245\255\n\235\2037\155\215\203W?\177h_:\181=\183\019\t\131\003\bn18\180\193fK\246\165\238\207\147?\212y\248\222\153{\241/\223D\176\130\027\174 \134`\141\193\t\004\03118\005M\223\169\139\234\174C\203\011\208\242\012\218\127'\021\228\024\189#\240\002\194\183\004\1730\154\025/\193\195\170\238\182\250\158*XEEj\1681\1545HC\248\027A7\024M\140\007X\239\215+\129\007\004\206\204\135\016_\215\004\030\01783\143%\207\026\1435O\219\158\226\198\0164\022<m9V|G\208X\240'\130\198\130?\177\166\148\016^\0184\150z\201\140c\173\031\b\026K\253L\208X\234\248\007\247\242\016+\253L\140\135X\233\023\130\198:'\157\018\n\153\127\028?\245\254\030h^\015\255\014\b1%\180\152\144P\194\141\196\1760\165\020\205(\025\165\028\143\184]B\246\167c\127j\2475\220\b\251\173\239p\240M\206<,8%$\020\197)\017\161\148\156\018\019J\133\006\138}\255\222;u\213\158\241\209\\\243\239\215v\187~\254S\247\147\145\230\172\170\225n\156\185F\217\031\217\2463\162\243k7I'\248\223\227\0055\224T3\005\182x\225\130\023b\222\240\195,\143J/\011vd\213\026\241Z/\237\239W\221\031d\239\172\170\131t\193\1429{\248)\021\155\154/\152\201Z\171\167\154\237v[U\167\150\129\251s\142\151\016/\1929\163\204\194\159\246\170\210\187~\203g\149\147[\156\243\237\164\245\029m\156@_\005\188\144M\234\174\237\245ka_2\226\205\235i\167\182\151\223Nj\154\028\2259i\028\184\200\029\129\134\014tK\144\145\131\236\0244v\160\021A&.\146\1814u\160o\004\153\185-\253\"\208\220\129^\t\178p\145\172\165\202\129\214\004Y\186-%\200\202A\158\b\178v\145\172\161\218\129\150\004\2178H\2521\156<qUz\189\016h\000\160\164\169\137\171\211\250\155@]\161~\018\164\171\211oV\191+TV\189\171\211qeN\224\174X\137V\019W\171g\130t\181\186'HW\170\244\r\184Ze\239\213\213*\179\233j\149\000]\165\226\021v\226\n\021\175\148SW\167x\149\156\186*\1973\186\212\149\232O\2524\169\171\208\223\t\210UhC\144\174@\201'\208\242\212U\168&\207\190\016\231\229V\190\029\219!\167p\213\169\210|\133C\164\157\130\224J\226p\170\000\148\200+u%[\147H\156\186\154\237H(N\129h\167\025\031{@W\191\031\199\182\210{\243i\002\230qi\131I5s\167\204\213\180\186\156\218\1792{kD7Y\176\242\186H|\201\194%\231\164\207M\251\187\159\020\129IAW\159U\217\207\128\176\143f\011\245_Z\243\205\141\151\157V5\255\165\205<[x\193\253\216\192\199X8\195\240)\174\254m\212\004\154\t\232\189\006\206\200\251\245\166\186\157\213ew=+\185\139\004\150Fy\224\224\251\205Au\222\018x\184\132\175\006\208<BP\130\141\001\022\135\219<AP\130M\001\022\191\248<CP\130\205\001\246\227X)\243\141\2333\166\020k\020\194Q+\156=\166\148k\020\194\169\000\007\007\231\188FP\130\213\232\245\147\247\212\000,\030\242\138\r\130\018l\128\154\128\223i\129\132M\022;\005R6[\238\020H\218d\152,\144\182\183\2040\0187[\031\021H\222d\133T y\1795R\129\132MVI\005\018\244\0273\140\164\204\022U\005\2100\027\207\139\026\130Y;\144\142\217\152^4\016LL+\164e6\007PH\204\228\t\021\0183{@\133\212L\158O!1\211\199CjfO\135\196L\150\155\ni\153-8\021\0183Yr*\164\229\146\025Fb&+T\133\180L\164\172\144\148\201\004G!%\147u\151B:\254 X$c6g,\145\138/d\161V\"\0213,R1k\004\018\241\158tEi\169\184:v\151c\215\239\133=\014\024\149\249\221*0\247)-=/w\207\241\\\169L\t\030o\158\151\025\131\019|N\240\164\245\005\131\019\188\"\248y\162\003i\165\143Fx\149\135\183\199\180\218G#<Mx\026\195\027\006\199\248j\195\164\130\223e\021\016<>\207\168B\006'\248\1365\007\191\251*\006\139\130\179:\176c\133*q\240\203\133\022>\198\169\172WP+\2439\001\240\137\222\188\178\250\254\190\000\226\240\218\234z\239\175\207\231u\224\226\249\143\208\231u\232\194\249o\209\231u\004\224+?I\159\215\177KX\249e\250\188N\000\158\255@}^\167.\158\255N}^g\000\190\242s\245y\157\187\132\181_\173\207\235\194%\172\252x}\174\151\191CY\235\015\213\031\131\169s\187|\211\228\131\214\185\014\214\168\230\165Sf\184\1984\239\1592\163U\230 \005\202\141\215\184\131*(5Y\165\026\129Pj\186F5Z\161\204l\1499\200\134r\2435\238\168 \202-\214\184\131\152(Ua\234\180\179A\137\229*\241\198\137\213*\241}\165\202z\149\217\1730\245*\243\180\194lV\153g\206l6\171\204\143\1503\137\155\142#\214G\127\234\173v+\245\134\175\146s9\169j\248\0290\207\230_\0199\212\005\2291\004Bf\2360\239\003\213\179\006\146\213\170M\132\129\180t\157\182#?\251\1497\217*q\234e\200\205\029\238\233v\217\157\218w<\"7\197\018\191U\167>\254\236\247\250\140\193j\t\174\212\185?\147\134\184r\1373;\174\143DX\004\174\\M\180fY~\192\182\235%\252M\181\253\196\n\231m6\250\021\004\141/\140m\150\216\229$\236\011\207\144\138\205\230\245]}\169\221\203\190\245Od\138M \209|\026SlB\t\230\147\152b\0199\224\149)L\177\137%|e\002Sl\018\007\205\167/\197&\149h>y)6\153\003^\153\186\020\155\\\194\215&.\197\166\144\240\149iK\177Q3zuw\177\216\148.rG\160\149\003\221\018d\237 ;\006\213\014\244B\144\141\139$-\r6\014\244\155 \003\183\165_\004\026:\208+AF\014r\199\160\177[?A&\014\242D\144\169\139d\029\1499\208\003A\230\014\178&\200\194A\150\004\233\170\244L\144\174J\217[rE\186'HW\164\159\004\233j\244\202:\212\021)A\134\174F?\b\210\213hE\144\174D\t\208U\232Qc\164+\208\022\003]}\226\131\146\"\\\232s\028\152n$\249\178\b3\t\165\200\2201\202\144\133c\147\026U\018zd\200\133@\135\159\1378\237\143\167\2218/\015\017\190\018\248~\255\232Kqx\141\224\222J\022\186\029']\159\240g\149\138\176\017\192\203\238\011\206\174\138~\014|\214o\230Wo\214\135\149(\0168\018\254\163P\224\2168\017E\002H\002j\020\011\028\137RQ\"+&\184T\224H\208\1412\129#1/\202\005\142\196\219\168\0168\226\242\145\018\1847\130+\229\243\146\000\026U\002H\134\227\168\0228\018\186#-p$\028G\141\192\145\246\197R\129$h\199R\129$\014\199R\129\007\242\230\226\200\145*\209j,5\216\017\017\198\142\b\191\200\235\139\165\012\tlR\161}\000\000cV\156\0030\139\154q\001\192,n\198\n\128\021mG\t\208,\208\198\0212M[]\163VS\180Fh\197\208\147`\197\153N\183%\140d\195\024\140\016\016\194\153\017BB\216\161\157\247\"\153$\253\216p\255\247~\021!A\211s^t\181\250\251vE\186y5?\000w\219\155{^\023m\190:~m\223\245\237\250\219\161\2137\184\168-\210\128qN=\231\1329!\227\\\218\227\005S\"F\169\250j*\204\137\029\206\185\007\239\127{o\191\180\185\212\1438\t\225\244g\148\221v\141\152\018\226\216L\204\201\214*[#\230\132\184\242\158\nBYyMj\173y+\188\146\245\187:\245\253w\235V\168\021\171\146\n\163&\140\021]h\214\190]\255\255\222w\152\2128\164\161\179\215\196\148m\bg\229\213f\001\225\208\030\200\\o\026:x`\252v5\207t\197\207\148E\132\185\214\017YLH\134C(\174S\r\018\026\026\200\197\144\185.\213c\187\237o\195\219\194\148\140PV\026\151\227\198\r\250Y\227\021\152\183\218\225\174G\157\012\252\180[\171\200u\167\001\188\162\136\n7\173\023\234\185\237xM\249\230\245\173\223\204\029~\031s\220\169U\157\249\137\204-\027C\243@\016*]\169w\006\014\005x\223\175Y\216H\152G\002\252\217\023}[\2248\152\1993xu~\149'\014\176\237\151@\159xI\156\167.\026\0033\023H\144\185\131\188a`\225\000O\170\239\222\179\198\161&W\014\190_\138\245\255\184\2158\206\228%'\244k\129\203\167\170\201#T\014\017o=\228\181\251V\136I\237 \241\214C\2228@\178\128-6\000\217\175\133.\n\247_\017 \252\225v&S\255\"t\240d5QD\000\185f9F/\006C]9\147ef\145\002\228Z#\\E\147\149M\225*\186\247\2115\211\0050\221\207Iw\234tVd\021_(T\t\134\186\186&\169\157EQ!\168\175)\174\170k\246\164\026A}\246]\137wk\221\169\\\161\147\199U\001@\174Yv%\206\144\017@z\158S\001\153\019d\002B!F\166(h\174<\161\171r\178y\160r\128\\\179\236\138\156l\020)W\218D\217\202U6\217\179Q\021@\190\168\237\205\252\206%\194\187\154&\187<\202\1494\217\191Q\174\142/k=Vn ~UCe\0008\024\233j\153\236'\149\017\154\210\188\\\245~\216v\200\220\169J\185P\242b\227\225\170\206\166\191\209|\165L0\195|:\1570R\200\248\188\237\217fH\153Q\198\203A\239[6K+s\200\187\220\222iM\005e\2445u\245\237\202\136\138t\220\190e\221PBF\221\158\199!UcV\005Y'}\210\180i\011\143\016[1\239\250\204i\154\210N\186\223>P{\220\192\134\210z\237\225\187XE\181p\152\147\217\1558vp\255\167\178\156\164\233'w\253\003\1529}\007\247\128\170\133\167\140\191)\237\193G\203f\244a\223\228Z\15804\022\208\131\170\2019E\149\b\232\254\182\187\15714\021\208\207!e\007B3\001\029\250M]18\151M\232Uy!\205-\156\230\154\213-\198*\217a\181\222bd\t\144+\240J>]{\233g\243;\012^\b\252\254)6?\167\177\021w6\189\167O\143\015\193Y\216z\161N\1276J\029H\244J6J\029J\240J6J\0299\224\181l\148:\150\240\181l\148:q\208+\217(u*\209+\217(u\230\128\215\178Q\234\\\194W\179Q\234B\194\215\178Qj-\132um\207\253\204\241z;\232\171\190@\169\212\141\160\244\178\234~3\005\132\235\205\235\161_\220\247\027\211\139\212\144\142]f+t\000\225\021\131\135\016\254\198\224\017\132\147\171V\133\142!\188d\214\147\t~?\170\237\193\023\245IF\020\157Np\247\199Sz\230Y\215\183\147\249\220\174\217\217\135\158\1683\217\190\171\234\143\248\149\201qd\139(\157sNC(\005\167\144\229\1719\154\161\020\214}%\231\144\021\170\174V(\172\154\154s\216r\207\164!p\014\171\168Yy;Dq\205\236-\139\026\188A\182\t(m%\2186!e\173\132\221&\226\172\181\248\219\196\148\183\022\136\155\132\211V\"r\147R\218Jhn2\206Z\139\209MNy\171\193\186)(o-j7+\222E\238\186\021\205\138w\017\2137+\222\197D\223\172x\023Y\1287+\206EB\173\218l^\251!\225\176\186%\1726\129\005j1(\180@7\012\138,\144\198\160\216n\019\169/\177PG\012J-\208;y\190\204F\177\190\202-\216\150\160\n\027\197\140)\011\214\159D\144\206(\005\142\152\171,X\197j\173\005\140\225\180\133{#\168\198F\017c\129\173\177nG\0305\b\004\142\152\011\005\140\180.\176\181v%([lWV\169\173\182\154\160l\185\213\204\152\173\183\142\245\135\173\183\142\024\179\245V\179\166\217z;\017\148\173\182\019\131\217j;\177\231\180\213V\018\148\1735\022\169\002[l\007\210i\161-6\188\163\168B[j%iZhK\237\139\160l\161\157\t\202\022\218\158\160l\157}\016\148\1733r7\\\133\182\206\024\202\150\025\233\254\240.3qK\027M\200U\168\028l\203\160\165\011\165\216\202\193j\138\173\029\236\141A\181\003=j\134m\\,\218yR\209\198\237\174\022#\003\023\201\154\026\133\238S\177\166FwU\138\205\178/\133[\017C\244\153\160\019\136\2223AD)\196\1272|l;q\211\154\031$\135\135\146*\014\000t\139\161!\128v\004\139{o\226\144v\199\160\134j\135kH\000\246\138\161)j8\134f\000z\194\208\028@\1910\180\000\2083\134*\000\221ch\t\160\151\011\198V+\239\227\192^G\189B\130\233\130*\185+\207\187TTI\176D\242\213\161J\194%\144/\bU\018Y\192\1495\160J\226%te\217\167\146\196B\242\149\158J\210%\146/\238T\146Y\192\149\245\156J\242%tm\t\167\146b\t]Y\181\169\228\174\133\211\173\171\174\183aW\231e\248D\222\030m\156\169\164v\225\244k\007*\209\000\237\249D\130J\026\151t=\183\167UR\234l\232\245\011\143\195\181e\011\1394 \248\138\224C\134'C|\026\017\002\153`\1671\195\179\n\018B {l*M\t\129\164+\1684\163\004\214\166\1560\216D:-(\129U\161\024\131\017J\214O\004_\017<\153\241\1655\193\179\246h\134g\132\134\016\240\198\168\2026t\007\247N\244\238\225\170\140\185\199\239\164N\230\030\223\004\207\188\131\204\247\179\133w\028\183\199\254$\232\240`\028\241\133f\149%\148\242\019\015\247YJ\025\187\003f\204\030r\249:\148\199}?/\189\246\225J\255^\237\213a\236\222\011\226\229\152g\006>\136/0\222\140\127\016\2398\201\136g\189[\218G\004'u\236ww\250C\216\225\238\024\028\218\179\202\166\204\155c\134\242[H&\017Y\189JKp]\218=\240\248\212\195\239\229\221\204\205\005\2267Y\179J#w\129U\190y5\173\250h\245uZ^\030?\201\143\244\168<p\208\187~`\166\240\016\027\223\017xD\1723|L\2043|\194\2363B\n+\216\018t\134\2053x\014\141w\012^`\235\020\175\160\249\138\160Kl\157\193+l\156\245cM\1723\188\134\230/\004\221`\235\004^`\197w_\004N$O\241X\2435A\019\20138V\252\149\160\137\222\025\028\171\157\2526\146*\136\220)\158\232\157\160\153\220\t\028\171\189$h\162v\006\199j?\0174\017;\131c\173\159X/\018\1773\188\194jo\b\154\136\157\193\177\214\015\004M\180\206\224X\235\196\237\020\209:\131c\173\159\t\154H\157\193\177\210\247\004M\148\206\224X\233\031\004M\148\206\224X\233L[D\233\012\142\149N\192D\231\024].T~P\230\206\201\184\207\134>J\165\202\133\200\199\221P\252!tU\134\018\216r\163\145\196\2224\007\199\014\152}\165@\149\137\196\226\195\1392\1498\210U\153\232\170]{\229\r\205\157\030P\028\\\184]@:V9H\002,\157WE\206n\202\202A\226\133RY;@\188>*\181\003<\240g_\200u\248\002\133\233Z\253N\241\213\006\224\251\195<\178\165\\\005\000n\006Zj?\004\132\203\145\152\175\023\221|_q\153tW\b\173\028(ov];\224K\223\137h\t^k\007\186;\246\255\011\147<U\221\128\006\183\230\255 \220\228\191i}\213m\223\r_\250}=\133\192d\191\0010\246&\147\251\006\192l\145fr\223\000\156\237a\153\2207\000g;X&\247\r\194YkR\136g\187W&\211\r\194\153\249\028?,\217\1372\025n\000\206\022\174&\187\r\193\201\190\149Il[\194\189\159tV&\175\1410n\236\144\205\228\181\017\142b\031xP&\177\141\145n\184i\205J5\152\210\b\023\168v\186\237w{`\190\168j\132\011(s\221\181\031)n5\254H\159j\132\027\168\238\rg\2224\194\001._\251\1892\027\228gs[\160\157\191\159\128bD#\220\225\243x\174\159#&\180\191V~_E5\194?\214>\187\\n\130W}\221\181\199S[\205O\213\187\030Lf*7!F\183\024\029a4\158\183\148\155\024\195\241\231'\203MB\224\024\157b\244\017\163\011\128\238#\006\233\021\133\209\164WJ\140f\189Ra8\235\149\154\1921Zc4\238\149\000i\165\254\198\157\018\132\016\140\251$\136 \152tI\016C4\233\145 \193h\012N!\024\247G\184\001\224\138e\152\149a@\224\184\003\195\144\192q\023\134\017k\012iML\240\164\027\195\132\2251<%p\210\1499\128\147\028\1652, \152t\163\130`\210\137%n\006iG\005\209\172\003k\140\198`\r\193\184\243\250\153\244\190?\198\232\238\191\2168\229\158\157\251#\164\023\181\031r\213\254\002h\001\162\169~h\250\208\231\139\174\127\187T\187OB\ra\141{U\189\207\147T\196\139VZJ(1\162\232\151\207\246\218o\240\236\143\183s{\217af\130\152{\221\181\151\151\0063R\196\184T\253\185\246\245e;VY\157\143\023\2119\253D~\143\141d\176\218\145\221v}\223\154\223\181\219\171\239\175\151\0116\144\175\024\184\031\204\031\218\1866\003X\187\175I\183\021+F\238\236\179\185P\t\201\n\145\015\207v@\137\216\221\179\236\n\190\239\238\233\238\175}\210<b\158\246\242\198\022<\190\017\141l4\200\198\241\212\159\209\249\2011\244\226I0G\194\130N|\191\187w\212\254Z\195'\248\187\227\185\253>vW\147\172\180b*Z35t\195o\184\239\227\248\t\166\255Q\160\191_\174\237\249|;\153\220-\196yx\252\003=P+uj\205\195\158\199:\199\011\175{\141\157%\134\254>R\143\183\235K\191\b\233\157\rS\161\167\223]\1564\184\224\181\249\157#Vk\021>k\164\\\137\146\164\213\213\026\229\209\203$\026\197\216\163\213E\239[\243#\236$\252\199\208\161ow\025\245\146\190\250^l\131\r\244\195\213\243F\018\232\213\183\022\131\215\156\153q\194\149\199\028nv\239\142\230Cd\136\n\029\182\2189\021\169\172\223'\030J\195\138\t\235^\1659\143\024o\136\179\023\154$^\011C\195/\250\220\226\129:\129\003\245\239\207\183 [\229\015\031\228lV^j\254,\221\220{\127\170A\197\211\022G\233\241\174\129.\254\245\011\138\237\183\156\030\025I\165\153\011\138\153\203\240\223^/\255\0030\171W\2316\234\208\136\221\176\211:\238p\252\225\031\255\250\175?\253\253\223^T\022f6\187&l6u\018\246\204\196\203\178\167\215\237\217S(\219\216&LK\219XC\140\185\142&\155\213;\232\210R\n\003\194E\245\187Z/_\234\n_I\n\227B{\188\154\006\177\137s\026\242\201\ba\192xp\195cv\026\175NW\248\178#M^\183g\189\216\250\180\134\220\227Ao\t\015\250|\253m\210g\207\234\180\187\143\"\186\159 4{\253;\015{)t\254\235\229\215\r\229+\225\250\140T\134\140\020DYw;\159\1746\243\218\182\160\028\011\131\028\175\253\212u\244S\241\003\207eZ:\1401&pJf\178\196\181\153{i\177^\148O\021D\253\225\253P\026Z@h\026\208\130\1774\180\144\208Z@\011\199\210\208\"B;\002Z4\150\134\022\019\218\r\208\226\1774\180\132\208>\000-\025KCK\tm\139\1862\029K\195\203\b\239\029\241\178\1774\188\156\213\135\222A>\150\134W0\030z\t\197X\026\158b<\244\022\212X\026^\201x\2325\148cix\021\227\161\247P\141\165\225\213\132\183C\253Y\143\165\225i\198C\253\169\199\210\240\026\198C\253\217\140e\207\203\153\231\237@\127\150\155\1774<\230z;\208\159e0\150\134\199|o\007\250\179\012\199\210\240\152\243\237A\127\150\209X\026\030\243\190=\232\2072\030K\195c\238\183\007\253Y&cix\204\255\246\168?\211\1774<\230\127{\212\159\217X\026\030\243\191=\234\207|,\r\143\249\223\001\245g1\150\134\199\252\239\128\250S\141\165\2251\255;\160\254,\199\210\240\152\255\029P\127Vcix\204\255\014\168?\235\1774<\230\127\029\234\023=\150\134G\253\015\018\155\177\236\137\197\134V\184s\137\213f,\r\145y`\007\222D\021\140\165\2251\015\236\192\155\168\194\1774<\230\129\029x\019U4\150\134\199<\176\003o\162\138\199\210\240\152\007v@\217U2\150\134\199<\240\231\r\188\137*\029KC\204(\017\245h6\150\134\152S\"\234\210|,\r\177\160D\212\167\197X\026\162\162D\212\169j,\r\177\164D\212\171\229X\026\"\243\195\011\234\212j,\r\143\249\225\005\208\234\17744\230\134\023\244*\244X\026\030s\195\011z\019\205X\246<\197\188\240\002^D\189\025K\195cNx\001\239\161\014\198\210\240\152\019^\192k\168\195\1774<\230\1325x\ru4\150\134\199\156\240\138x\241X\026\030s\194\026\188\135:\025K\195cNxE\188t,\r\143\249`\r\222_\157\141\165\2251\023\188\"^>\150\134\199<\176F\239\189\024K\195c\014X\163\247\174\198\210\240\152\255\213\232\189\151cix\204\253j4\255\169\171\1774D\230\127WH\172\199\210\0165%\162W\168\199\210\016\027JD\239\162\025\203\158Xn(\017\188\012\189\025KC\012(\017\188\r\029\140\165!\134\148\b^\135\014\199\210\016\153\027^Q8\212\209X\026\"\245C\020\216t<\150\134\152P\"\232U\157\140\165!ROD\161M\167ci\136\025%\162^\205\198\210\016\169/\162\224\166\243\1774D\230\140\159\168S\139\1774<\230\140\159\168O\213X\026\030s\198O\212\165\229X\026\030s\198O\212\163\213X\026\030\243\197O\212\161\245X\026\030s\197O\212\159z,\r\143y\226\023\234\207f,{^\1333C\223\241/\142\148\021\206\r\029\146Z\017\028g\135\238\241g\169\202\ng\135\030\218+\134\227\236P\252\221\157\178\194\201\161\029A\167$\175\181\221c<\206\r\18928N\r}\239\207\2490\030\231\134v[\134\199\201\161Wj\191\132\248O\246\162*\b7\191\229\129\2415\196\239nDe\026\194o\029F7\016\141[^c\189\159vD\1935\022|\191Y\139S\150\203\026K~K\028\170\198\146\127\163\237\193\154?\147\023Uc\209\147t\168\026\139\254\141\136\184&\249\208\012\1425\191e\154\172\177\230k\138\199\154/iW\150,\244\153s\178\203\141\176*\022\210VY5\139l\171,M\002\220*\169!qn\141D.\b\244\225k\149\021\208\168\180J\195.\178\218\129\242\226\192\242#R\157:\161\244\229R\222\030X\166\188S\014\207\148V\003\007e\176\151\242\"\193\130\245\165iU\025%]\1427\202\202yV\254J\003\011\2022\137\240\1802Ei\029\249\241\129R^4\024\019\2375\188\152R\202;\006\251\219\225\165\2532\247\134\144e\225D\234t\235\238h\152\145.S\254\189\223%*e\222\191\239\251D\165\204\251\247}\167\168\148\249\255\254\239\021\1492\235\223\251\221\162R\166\251{\191_T\202L\127\223w\140\202&\131\132\149\239\025\149M\142(k\2235*\155\002QV\190oTm6\175\127\216\253\241\175\255\253_\127y\185\252\127\127\249\203\031\255\143\191\252\233\127{i\254\252\247\127\252\243\223@\\\169\179~\147\197\197\239\255\200\224\229\244\139{o\230\011\252\195O\159\029\127\251\210G\140\014\016\250\248[\139\209\161\139\254:\254\16608\194`\141\2091D\179f'.\250\198\0312E\232\150=d\006Zr\163\237\206!\1544\164p\193\250\198\250OA0{\198\018\1631\184\130`b\185v\193\237o_\138\1935\134\147\1504\016M\030\178\218`4\006\007\b\204\164]\133\2084iG\004\1937\012\142\017\152\180\002\232Z\157\149VD#U\202\240\164Of\149\028\031\248\206\252<$\253A\201\158S1Ne~G\017~\255\176g\213.k\2537]{\142^\229\208\223\201\236\153\141\203\244\146\234\r%\145\223\149\2369\193*\135\255\020jO\r)\149\253PkO\1388i\165\247\235\152\210\248\143s\246\180\196\165=\243\219\191=3e\204\145D\127\220\179\167f\228\173\251~\145\182\167\230\172\214\241\007cW*-\024s\252%\215\021\149\214j\157z\2559S\204-\025\247K_\134\159i\197\180\138\211\166\2233]{Z\224\140\143_\"\230\142_\003w\028\251up\127\204i\024gx\165\156\1687D\005\236\247\156{J\192\234\154\127\252\023\019CF\228\142\168\129#z\165\162cF\186\011fE*:a\220\149\030II'\242 \1683V\205\248\219\201+\015\1513\230J/\022\148\179\018\2054\240\184\161u+=Q\018\138\239\007\184{jE:\209\023\224u\189F\\\235IM\026{R\029\023qCH\188\247\155\r\163\172t~\019\016\210\218@\210\132\132\196cT\131\028l|\254\1491\188\1379\203\255\170\027\224c\143@\188\"\174&]\161\173<!p\181\241'\182WZ\1523\142\199\175\155\130\136qE\030\192\205\030\191\205Me\216\148\156\180\162\144\220\172\130\187\191\253\245\229\244\247?\255\223\127\252\231\159^n\255\248\211\203\238\207\255\253\255|\185\252\235\239\127\255\219\127\239\255\211\180(\174\254\225\208M\130\161\151>\174\145\017;\239+\255\159\172\184i\214\169\180\210a\221\191\255\219\255\243\\=\141\169G\160\153i\189\217\216\2073\027v:\190\201\197\003Lf]ha~=\230\173\223\030;\030N\253iB\217\238\219\235\215K[\235\227\144:\254\219\000\184\191\219\188\138s\155\027\248\184\193\131\155\166\189\023[\220\208\199\r\167z\181I'Zr#\0317\154\219\\\1376\199>n<\181Y\155\244\153%7\241q\147\0077\214QhsS\0317}p\147\2250}\201\205|\220\236\193-\154\162\178\185\185\143\155sn\225\227\022S\155\139D\244\149\242q\167\213n\017\200~.}\220r\1707\2013\155[\249\184\213\220f\169\231\218\199\173'm\004\253\000aq\181\143;\173\214\1794-ln\227\2276\019\183\201mm\004>\255\rf\255M\163\198\230\250\2527\152\25277[U\022\215\231\191\193\236\191yc\247s\224\243\223`\242\223^\158\162\205>\255\rf\2555?heq}\254\027L\254\155\214Ais}\254\027L\254\155mj\251\253\006>\255\r&\255\205\134\188\166%\215\231\191\193\228\191y\028\2136\215\231\191A1\251`*\222\175\207\127\131\217\127\205o\238Y\\\159\255\006\229\028's\241\142|\254\027\204\254\027e\194\023|\254\027\204\254k\190\206cq}\254\027\204\254\027Jm\248\2527hf\031\012\237w\020\250\2527\156\252\183\208\129\173\141\208\231\191\225\228\191I\157ll\174\207\127\195\201\127\211F\219\207\027\250\2527\156\199\223\164\018\207\235\243\223p\242\223\188H\237w\020\250\2527\156\2537\172l\031\012}\254\027N\254\155\007\181\029\175B\159\255\134\217\028\235\002;^\133>\255\r'\255M\228<'\244\249o8\249o\154\005\2468\024\250\2527Ts\172\019\190\031\250\2527,g_h\2369C\232\243\223\176\154c{%\244\236\243\223p\242\223\184\201\237\2417\244\249o8\249o\018\148\162\175|\254\027N\254\155\132\">G>\255\141&\255M\227\202\214s\228\243\223h\158?+\147Z\189\228\250\2527\n\023\241\202\246\253\200\231\191Q4\207U\180\221W\145\207\127\163\217\1277\027{\\\136|\254\027%s\156\220\216\2397\242\249o4\251o\154\216\154\140|\254\027\205\254[k\219\127#\159\255F\243\2529\019s\254\200\231\191\209<\254\150\169\168\215\231\191\209<\254\214\141\237\191\145\207\127\163\217\127\243\\\244\149\207\127\163\201\127\179\"\019m\246\249o4\249o\191\195.4\233\243\223h\242\223<\018\177=\242\249o4\249o\239\142\182\015\198>\255\141\023\227\175x\222\216\231\191\241<\127V\181\173\231\216\231\191\241\228\191I^\139z}\254\027O\254\1554\242y}\254\027O\254\219\159<\218\239(\246\249o<\251\239&\179\227d\236\243\223x\158?\135\169\237G\177\207\127\227y\254\156\13914\246\249o\156/\246\nD\189>\255\141g\255M\027;N\198>\255\141\213\226\253\218\243\141\216\231\191\241\188\254\173d_\249\2527\174\2301%\176\199\148\216\231\191\241<\1276_\167\181\184>\255\141\245<\159\220\b=\251\2527\158\215\191uhs\019\159\255&\147\255\246\231;\246;J|\254\155\004\243\251\141\2379p\226\243\223$\\\204\025\236w\148\248\2527\153\231\207\155\\\212\235\243\223$\158\2319\181\029\219\019\159\255&\201\204\173\004\215\231\191\201\236\191\230\199e-\174\207\127\147\217\127\235\210\142\027\137\207\127\147\217\127#\177\014M|\254\155,\252W\172%\019\159\255&\147\255\230f\175\217\226\250\2527)\023\235\020\161g\159\255&\021\221\223H|\254\155\212\243x\212\136~\246\249o\162\023{\155\246\248\155\248\2527\153\231\207\165\152O\166>\255M\231\249\243&\176\1597\245\249o\026\204\251*b\1590\245\249o:\207\159\147\204~\191\169\207\127\211y\252\141\196\186,\245\249o:\143\191yc\251~\234\243\223t\222\127nJ[W\169\207\127\211y\255\185Q\246\251M}\254\155f\17966\246z?\245\249o:\249oZ\137\152\147\250\2527\157\215\191If\143\161\169\207\127S\181\024S\132\174|\254\155\206\227\239p\239|\206\147\237\255\206\231\192\233\188\129\149'\182\019\166>\007N\231\tt&\022W\169\207\129\211y\002\029\199\226\005\251\0288\1577\176\204/\159,\185\153\207\129\179\217\129K\177\137\156\249\0288\155'\208Mi;a\230s\224l\222\192\170r[\028\153\207\129\179h\014\208C\160\0126\011\182\207\133\179y\t\028\138\163\156\204\231\194\217\188\133\021\137%R\230s\225l\030\130\147T\212\235s\225l\225\194\202Ve\230s\225l\222\194\n\134\163\141pA\246\249pV,\230\028\182,3\159\015g\243\030V\191\241fs}>\156\205k\224J\140I\153\207\133\179j~\193b\221\158\249\\8[\140\193b^\152\249\\8\211\243~\189\1527d>\023\206\022{X\141-\142\220\231\194\249\228\194I\028\219m\206}.\156\207{\208\198\173,\174\207\133\243y\014\173\181=6\228>\023\206g\023N*\241\188>\007\206\2313\164F\204\147r\159\003\231\201\188?\018\218\225.\2479p>9p?\189\180\199\209\220\231\192\249|\006\172\196~n\238s\224|\222\195\210\133\237\011\185\207\127\243y\014\173\197~n\238\243\223|^\003\135\133=\215\201}\254\155\207s\232\180\178\247Vr\159\255\230\243\028\218|\134\204\226\250\2527\159\253\183\017k\239\220\231\191\249\188\007\1733{_&\247\249o>\249o\026\020\246\192P\248\252\183\152\135\224p#\184>\255-\230=\232\184\176uU\248\252\183X\156!\133\182\239\023>\255-\230=\232@LW\n\159\255\022\243\028:\206\005\215\231\191\197\194\127\197^R\225\243\223b\030\128k\145\239R\248\252\183\152\247\1607bL)|\254[\204k\224&\180}\161\240\249oQ\204\211Bm\251o\225\243\223b\222\131\222\200\247\235\243\223\162\156\247dc\209\207>\255-\230)t(\214W\133\207\127\139z\230*\209f\159\255\022\179\255\198\165\029\159\011\159\255\022\243\030\214F\228$)\159\255\170\205|\190(\246(\149\207\127U@\167\238\202\231\191j1\254\138\185\153\242\249\175Z\236A\139\249\134\242\249\175\154\199\223(\179\199\005\229\243_5O\160K1\145U>\255U\179\255V\145\224\250\252W-r8\196^\146\242\249\175\202\231\201\183\182\227\134\242\249\175\154\231\207i#\222\145\207\127\231\223\001q\246e\148\207\127\213\188\006\174\197\178N\249\252WU\139=\029{^\167|\254\171\230%\240\240\181\198%\215\231\191\243\005\181,\0229X\202\231\191j\145\131%\198\193\210\231\191\229\236\191\155\216\142\207\165\207\127\203y\015:\140lm\148>\255-\195\197\249\132\169w\177\138-}\014\\\206IX\153H\148+}\014\\N\014\220\207\255\005\215\231\192\229b\019Kl~\151>\007.g\007.\132\243\151>\007.\231\ttP\138\142\2469p9O\160\211R<\175\207\129\203y\019k\163\237El\233s\224\249\011\026\177\022\t\017\165\207\129\203\217\1297\2260\167\2449pY-\002\135\232g\159\003\151\243\000\\\137\132\196\210\231\192\243\175\011\165Ia;p\233s\224\178\161\027\231\149\207\129\171\249\016)\016\139\156\202\231\192\213\188\t\157\138\197s\229s\224jN\162\140E\162M\229\243\223j\145D\153\t\174\207\127\171\217\127\155\220\158\232T>\255\173\230\0018\021\251n\149\207\127\171y\001\156\134\162\159}\254[e\243\196NL\250+\159\255V\243&t&&\028\149\207\127\171E\018VcO(+\159\255V\139$\172\216\246\253\202\231\191\213\188\000\214\"q\187\242\249o5'q\196\027\209W>\255\173\230\0018I\004\215\231\191\213<\000\231\169\232g\159\255V\139C`\145\208T\251\252\183\222\204\227\145\216s\175}\254[\007\139\221M\227\011\233\130\236s\224z^\001\135B\208\181\207\129\235hq:\153\139\138}\030\\\207\199\192\155\208\238\233\218\231\193\245|\012\\\007\246\027\174}\030\\\167\179\162\181=\170\212>\015\174\179\1972Vp}\030\\\207{\208r\214P\251<\184\158=8\136\237\145\191\246yp\189\216\130\022K\209\218\231\193uI\143'k\159\007\215s\026e*F\254\218\231\193\245b\t\028\138\247\235\243\224z\177\004\022i\028\181\207\131\235y\011\186\018\231\019\218\231\193z\222\194JE\218\138\246y\176\158\183\176\178\216vB\237s`=;p\174\236\209L\251\028X\207[\208\1498\007\210>\255\213\139-,\145\n\169}\254\171\231-\172D\2193\014\237\243_=\207\160\155\204\214\134\246\249\175^\164A\139\227\t\237\243_=oa\229b\022\172}\254\171\023\215\024\196\017\178\246\249\175\158\183\176R\217W>\255\213\139c`1\147\213>\255\213\243\018X\139\229\179\246\249\175\158\2537\014\236\217\153\246\249\239\252c\158YP\219\163\168\246\249\175\158G\224\184\176}\161\241\249o3/\129\019\145\174\218\248\252\183Y\164a\137-\187\198\231\191\205\188\004\174\018;\1986>\255m\162\197\177\136\253~\027\159\2556\243\022V&\142T\026\159\2556\139kH\149=\1505>\255m\022\215\024\180xG>\255m\230-,%\235\245\249o3\249of~G\216\226\250\252\183)\230m\183\194\246\193\198\231\191\205\156\198\017V\162^\159\2556\243\248\187\017\171\201\198\231\191\205|\004l~>\205\226\250\252\183\153\1751\232\161\205\203\236\130\198\231\193\205\"\017:\178G\134\198\231\193\205\226\0168\178\188P\249.\002\171\249\"p\018n2\155\027\248\184\243\028Z\171\212\230\134>\238b\nm_\130P\190\139\192j\190\b\156U\181\1687\246q\231\025ti_\186T\190\139\192j\179\188H\168mn\234\227\2063\232\212\222\135R\190\139\192j\179\152AG\165\205\205}\220\197\b\028W6\183\240q\023\137\148qms\149\143;'R\022\185hs\233\227\206#\176\150\218\168|\220y\015+\13676\183\246q\231\0178\169\004W\251\184\232\179]\253\127n|\188\006\242|\023\128\213|\0018\201\019\219\231}\023\128\213|\001\216\230\249|v\190\252\155\166\246A\183\242]\254U\243\229_\155\231\243\215\249\226\175\205\243\249j\176Hz\182/w)\223\165_\181\184\244\027\133\162o}\190\186\184\244\155V\130\235\243\213\249\210of.\228X\\\159\175\206\151~\179\"\017\207\235\243\213\249\210oV\216+8\229\187\244\171\230K\191Ya_\234V\190K\191j\190\244[d\137\029\199}\151~\213|\2337\171J\241\188>_]\\\250m\236\003_\229\187\244\171\002\236\175\190\011\191j\190\240\155\167v\194\179\242]\248U!\246W\223e_5_\246\205\149}Y_\249.\251\170\016\251\171\239\162\175\n\177\191\250.\249\170\249\146o\177\137D[}\254:_\242-6\141\253>}\151|\213|\201\215\230\249|u\190\224k\243|~:_\238\181y>\031\157/\246\022\185}\153Q\249.\246\170\249bo\239\162v\\\241]\236U\139\139\189\230R\179\197\245\249\232|\177\183\223\020\179\199\011\223\197^5_\236-6\"~\251.\246\170\249bo\127ng\207i}\023{\213|\1777n\236\179F\229\187\216\171\230\139\189\201F\139z}\190:_\236\237\231-\182\134}\023{\213|\1777\017\023\228\149\239b\175\154/\246&\161\157\164\160|\023{\213|\1777\137\236\015\197(\223\197^5_\236\237\143\027\196\243\250|v\190\216\155\136\011\197\202w\177W\205\023{\147\254 \203\230\250|w\190\216\155\228bn\233\187\216\171\162\197\197@%\234\245\249o\180\188\024(\222\145\207\127\231\139\189=W\232\217\231\191\243\197\222tS\136z}\254;_\236M\003\217\207>\255\141\022I\145\185\221f\223\197^5_\236M\131\198\030g}\023{\213|\1777Mb;\198\250.\246\170\249bo*vg\149\239b\175\154/\246\166ia\251\145\239b\175\154/\246\246\199\178\246\220\205w\177W\197\139\245\172\1570\171|\023{\213|\1777\213\129=\207\245]\236U\243\197\222\180\tE_\249\252w\190\216\155\005B\207\190\139\189j\190\216\155\133\246\233\153\242]\236U\243\197\222,\150m\246\249o\188\184\152/\223\175\207\127\227\197\197\252H<\175\207\127\231\139\189Ya'\219*\223\197^5_\236\205\196\007\181\148\239b\175Z\\\236-\236\015\212(\223\197^\181\184\216[\1365\129\239b\175\154/\246f\230R\164\197\245\249\239|\1777+r\193\245\249\239|\1777+D\188\242]\236U\243\197\222L\1371\197w\177W\205\023{3e_\148Q\190\139\189jq\177\183\020{\029\190\139\189jy\177\215N\136V\190\139\189j\190\216\155i;GA\249.\246\170\249bo\166c\241\188>\255\157/\246\246'`\182\255\250.\246\170\249bo\190\217\2161\214w\177W\205\023{\251\157{\161+\159\255..\246\134\153\232+\159\255\206\023{]\174\207\127\231\139\189yl\159\174(\223\197^5_\236\205\011;\159C\249.\246\170\249bon\146\238-\174\207\127\231\139\189yi\223\161T\190\139\189j\190\216\155\151\246%h\229\187\216\171\230\139\189y%\246*}\023{\213|\1777\1757v\140\245]\236U\243\197\222\188)E_\249\252w\190\216\235\172\181}\023{U\186\200\137\212\226y}\254;_\236-\178\198\158_\249.\246\170t\177\254\021{\224\190\139\189j\190\216\155n\236$n\229\187\215\171\230{\189a\028\218I\145\202w\177W\165\011\007\182\019f\149\239\130\173\154/\216\198\218\190\253\161|\023lU\182Hn*\237\007\246]\176U\217b!*&\238\190\011\182j\190`\0277\246\215\019\148\239z\173\202\022_\184\136E\155}\142\148-6{e\189>G\154\175\215\246\139g;\216\249\174\215\170l\145\156h\031\127+\223\245Z\181\184^+\023\192\190\219\181jq\187\182\255\031\155\235s\164\249vm\"\146m\149\239v\173\202\022_h\021\139\028\223\237Z\149U\244\192\194w\187V\205\183k\147>B\219\\\223@8\223\174M\n;\rL\249n\215\170\197\237Z\243\005\150%\215w\187V-n\215*\251F\161\242\221\174U\139\219\181\165\216t\243\221\174U\203\219\181\181\168\215\231\191\243\237\218\158kk\195w\187V\205\183k\147&\021\\\159\255\206\183k\147\198\190!\171|\183k\213|\1876\221\212\162\175|\254;\223\174M\003;\133L\249n\215\170\249vm\026\136\193\219w\187V\229\005\221\224\240\221\174U\243\237\218~c\197\142u\190\219\181jq\187Vn\142\248n\215\170\197\237ZqcE\249n\215\170\249vm\026U\130\235\243\223\249vm\026\219\183\138\148\239v\173Z\220\174\141\019\251y}\183k\213\226vm\"\022\162\190\219\181jq\187V\030\148\250n\215\170\197\237Z\241\245O\229\187]\171\230\219\181=\215\158$\249n\215\170b\145\218$\159\215\231\191\197\226v\158Xl\248n\215\170\249v\173\252\144\136\242\221\174U\243\237Z\153h\175|\183k\213|\1876\213\181\232+\159\255\206\183kS]\t\174\207\127\231\219\181\206\230\151\239v\173*\022\169M\"\001\197w\187V\205\183k\157\1413\223\237ZU,>P\163\132&}\254[,\190\176\028\217s\021\223\237Z\181\184]\027*{\193\224\187]\171\230\219\181\206!\190\239v\173\154o\215fqf\235\202w\187V\169\197\023\166\196\225\132\239v\173\154o\215f\137X\228\248n\215\170\249vm\150\218\233\163\202w\187V\205\183k{\174\232g\159\255.n\215\202\132\007\223\237Z\181\184]\155\n\031\244\221\174U\243\237\218L\252\n\133\242\221\174U\243\237\218,\139E\155}\254;\223\174\237\185\246\248\235\187]\171\212b#\216NiV\190\219\181j\190]\155\169Rh\210\231\191\139\219\181r\179\207w\187V-n\215V\153xG>\255]\220\174\173\019\155\235\187]\171\230\219\181\206&\163\239v\173\154o\215f\141\2164\247\221\174U\243\237Zg\179\207w\185V\205\151k\243H\2047|\151k\213|\1856\143\196\001\191\239r\173\154/\215\230\153\024\127}\151k\213|\1856/\196\024\234\187\\\171\230\203\181ya_WQ\190\203\181j\190\\\235l\246\249.\215\170\249rm\174J\209W>\255\157/\215:I1\190\203\181j\190\\\155\139Tj\229\187\\\171\202\138nP\250.\215\170\146~\225Q\249.\215\170\249rm\174\196\006\180\239r\173\154/\215:\027\163\190\203\181j\190\\\155\151\185\029c}\151k\213|\185\214\217\024\245]\174U\139\203\181\141\216\220\244]\174U\214\229Z\219\127}\151k\213\226rm \246U|\151k\213|\185\182\b3\219\023|\151k\213\242r\173}!X\249.\215\170\249r\173\179\153\235\187\\\171\170\197\023\210\197z\193w\185VU\139\141`1\238\251.\215\170\249r\173\179\137\236\187\\\171\170E\"\212F\212\235\243\223\249r\173\179\001\237\187\\\171\230\203\181E)\146\255|\151k\213|\185V\254\146\147\242]\174U\243\229\2180\204\197D\199w\187V\205\183k\r\217\030\129}\215k\213|\1896\140\162\218\030F}\215k\213|\1896*\197\214\168\239z\173\154\175\215\198\027\177\229\238\187]\171\230\219\181\241F\132;\223\237Z5\223\174\r\147P\028\182\251\174\215\170\249zm\152T\246\253-\229\187_\171\230\251\181a&\211\229}\023lU\189\248\157\176Xp}^<_\176-\026{\023\1714\183JzR\247r9\168\253\254e\223n\213\245v\214/\230\166\202_\006\202\031\254\253o\255\249_\127\252\231\191\189l6i:\020\182\129\128\024h\169\129\1946\016\018\003{j\160\178\rD\236\017x\019P;bff\191nF\180&\193f\246\195\175C\190\\][A\214\244f\236\221\167\210\220BAf.\192\192&\139\\\003A\244\170\206\007\221\181\202\177\209\255\215\151\238\248\233\026J\178\216\020\246\011\014\226UC\218\252\166)6dg\168\151A\178j\168\237Zj\168\180\r\165\212\208\135\254d\143\166\193\163e\171-\250]\243G\171mC\245\235N\151\231\190\242\189\190^\245\249\229\235X\191|\182\215\221\203\174=\183?G\239;\191n\146\186\232\201\165xS\250A>\029\219\238\250\242v\235]\247\183\203Iu\237e\247\242\161\206\237\187z=\252\245\181?[\236.\135\215\145k1\238\152\187\185fj\203\227a\190\218\1866\182L\171\204\255\245aB\237\230F5\161i\148\181[d\238\016\218O\164\246}\217\245\146\252\208/\234\171\237\030\244?\252\183\191\253u\232\023\251\152\169\012\003a\224\179\143H\189\149\199%\214\005\211\142\163e\191\215\006\152uO\189\186\212\200\166F\136\186\211.\207~\005a\140x\239\n\180\213\150b\152 \226^\029\030w\132\151T;P\244\175\019P\155\182S\251^}\007\151nK.\204\016\253\172/;\247\205\22863G\204\171\250p\137\202&\022+\1548\237o\151\151K\187\237^/\255\217[\209\151\201\140\248\254E\217\239\241\217f.\187>\206\r\2222\252S}\188\206\218\212\198a\170\1926Pr\003\152/\164YQ~\173\182}\015\190\168\174v\218\210\1481jK\253\148-lJ4K;\221\171\155\209\148p\216z\003\028\182\161\236\159\234\160\174\023I\183E\017m(\253\160NV\b\027\216\182\150#\233\236\165\190.;a\193\014\000[:\252\182=\232=\225\135\128/\189~\136\021\132\031\001\190\244\254\157\198O\030\003\174\012\000\031\234\131\212\156\000\182\140\001\223&\180\018~\n\248\210\149\175\244\185s\192.\216\168\229\176\011\192\150n<\134\174>h\018\027\n\216\144\158\204\217%`K?\030\226.\225W\128/\029\174\015\187\132\173]v,=\166\187\1457\167\129\199\196\210c.}\219\223w\196\000p\1548\130\221\127\210\196\004\208},uO\201@\248\177\148\238\245\162\234\150\240\129tc9~\253<\146W\1753\192\150\1947\003\031\161\003\229\199\133'j\139\001D\210\165\244\175\204\2335\016}\\\178\144\177;\246\n\150\017\195^\165\196\021\139\180g\213h\025g\027\155[3o\019\220\018p5\209\138M\029\149\"\168\238\132t\024\\\236Y\210<\193\030\006\0241YJ6\253L]\149me\015O\234\178W/\237\165\239\182k\239\248\205\241|\239=\213\207\216\255\252\143\191\253\229\143\255\252\211\127\244&S\251h\176L\002nmt#\219\212\127\251\243_\255\248\023d'\020vJ\173wO\181\199\158\017%\017\178\179\222\018a!\134-\233\218k\235\216\248\243_\255\252\207?c+\t\178\210\191%\215\200\127\254\233?\136\141T\2168=\217%\246\190D\146\0013\235=\"\012\228\168\029\222\014\017F\n`\196\215\031\194\132r\250t\247\\\143\216\249\145e\127,\135\012\173\246\1374Q\225\182\248zE\154\169\161\025O\191H#Z\024\233\139';&\179\151%I\131-\173\171\197\182\145nHk\188\130\017v\002l\199\167\025aE\198\149\231\187\198\014\189i\004\r\173\247\1400\017\227\182x;F\152I\160\025_\191\b#)\232\221\167\186\197\030D\211\012\217Y\239\021a!\135-\241v\138\176R +\190>\0176d|\249x\174K\148\189\003\146\150\192\204j\143H\003\021j\135\175C\164\145\026\024\241\244\1354\161\221\144\253d\143\216\155\131i\003\r\173\247\137m\"\219\224\182x{E\152\t\160\025_\191\b#2\166\212_O\014Cv\255f\017\178\179>\n\t\0111l\137w\016\018V\018d\1977\006\t\0272\158t\207\246\137\189\237\152e\200\206z\159\b\0119l\137\183O\132\149\002Y\241\245\137\176!\227\201\181zv\190\"\004WBC\235\189\"LT\184-\222n\017fjh\198\215/\194\136FF\158\236\025{\171.k\136\169\245\190\177\141\228\027\214\030o\239\bC\0011\228\235\031a\198\137/\181\218\245\244g\186\199\222\217\206#li\189w\132\r'\198<\221\024{\225\153'\208\208z[\132\t\025e\234\219s-\177\023\018y\006\204\172\183C\024\200\221~}\174!\246Vq^ ;\235-\017\022d\140y{\206\143\na\166\004fV\219!\r\200\248r>?\217\016{\031 \175\145\157\245\150\b\0112\186\188?=k\177\167\131y\003\r\173\207Zl\019\197\006\183\197;k\017f\002h\1987k\017FdT\217\246[V\207\244\138\189p(\"`f\189O\132\129\024\181\195\219#\194H\002\140\248\250C\152\144\177d{{N&\246e\188\178\200\144\157\213\030\145\022r\216\018_\151H+\005\178\226\233\019iCF\147n{|\178Sl',Jhh\189W\132\137\n\183\197\219-\194L\r\205\248\250E\024\1451\165;\030\187\151\237\238\246\255\179\246\166;\174#M\150\224\127=E\188\192E\137;\137h\012\224\027C\188\218\"\181Dd\220\127\141\234\026`0\213\221\131\238\169\153\215\031R\164$\186\155\029s*{\234\162.\191\204<\199|;\230\238\230\155\014\135E\139\166\254\029\031\221\180\1309\185\142|C*\236_N7KKr\228/5\170\1325$\231%0\145\242y\137\182W`&c\205\196\218+0\018\2461Cwy[c\031f\241J\031\251]\246\005\149\228_\027\208\170\136[\021k,\180W2\246>\142\203f\018\193\230\185\170\144-9G\129\149\026\230(\214\140\161\165\006Y\138\180dhG1v\236Q\153\141:o\246nQ3\250Oej\165#&e\213\007\198L,\127Q\253\007\006m\196`\204\019\002sa\2075HU\171~V\181\168\234\252\203\212Z\181\216\154Xk\129\029\189\198v\198\237;\181\255\163\150;jpvI'/\152\151\243\029\024~\244q\231\159\189>\238\134\147(\163\153\247\243\2559r}|\198\224\181\219\029\191\001>\015\240\151\239\227\1929\139\137\020\136$\165T\134\164\205P;\209\180*L\147R\1711\237v\238\174;|\244\255\244}\248V'+g\160y\201\146\148'\021Xj\143\215S\188\0024dIi\025\162\131\171\222\rg,O\151\206\244\242\235\197)\242-j\226\187\133\221\143\152k\183\128/\165\223\006\252S_\205<\212\172\003\232x\026\244\1626R\006M\002YB\182L\232\142\227\190\179\144\142\205\200lpQ\012\228/\137\216\156Z\145C\160\128_0\185\136F@\129\141\146\218\136\005@\129\133p\202p]4\239\240\215\170lM\140\200\019\142\128\030N\019\142\203&f\254\130\162U\212\138\156\139\128\031\206\b~\150U\133\191\004b\r\181\"\231\"\224[R\149\255d,\172\130\026vd\031hQ\217\252\t\181m\169\021\185l>\223\145\133\144\238\244\177\233\254,mo\255\248\187K\17659W\129\157\020\216Y\216\254\254\002\139\203\17659W\129\157\176wY6\005\242c\011W\016#\242D'\160\1514\015\177\014*4Q\017\019\145\254)4@\186\150\174\015\145\135\163V\127\212v\243\168\221\219\129\163\189\218\158\175'\021\207d\030\212u\243z\026\145R\132)<\251\166\199\029\130{\2168\247\236\219\191\184\165\179\160\177\211r\248\203wt\167_MH\020\004\155\132y%\t\183\184$6pK\251Z2\241r\132\t\184\023\018\248V\223\139\011\226?\026\171]\251b:\241\146\004)\180\235\023R\184..G0J\183\201K\169\196K\017\218O_\176\127\\\174\171`\152o\179\215\146YP\142 \129\252\133\004~^h\142\160\209\139\215\146YP\142 \129\242\133\004^ps\191\127o\171\151RY\224\229\129\253\250\181R\196\134\0146\141\134\164q\031A\238\131\191\220\007?\006\174\165=\140?\186\180\234\255\167\244\023\244<A\202\250\255\175\146/\170\2470\245p\174\221\170\211\185{[x\230\196\127\134F\183\022\026\147\231m\129\025\135\243\020]=\rL\181\208Tl\249\2123d\214\175\140\015\191\157\219/\159}\004\t\1892Dl\212fy:\214O\231\149\161b\255J\129\252\247W\205:{u:\245\191\230\202f\253\210\224\225\150\215\160\255\006\130Y\211\209C\223\211Y\172\128\154Q@\137\237.m\240\154i\240\n\155\221\190d\215\249vklw\255J5\132\186i\176\221\151eR32Q\216\254RU\212\140*hw~yY\021\138Q\133\193v\151\182\158bTa\177\217\237Kv\003U8lw\255J5\132\170h\177\221\151U\161\168*\1465\182\191T\021\138\170\"\161\189\250e\243\178,4\149E\146\n\134\247\175\024\014*:\201\004\195/\215\180fj:\023\018XZ\213\154\169j\218-\223*\248%O1\212S\146R\176\187\184\166\rS\211\180c\030\178\249\1544,#\141\026\219\221\191b7\204/\237\152\183\175g\2161\025V\130\225\165-\231\152\150\211\130\221\253+\025\014k\130\246\201g\231\014\175\213D\15015a\005\195\011kb\180\027\212\132\019\236n_2\236w\247I+\024\222\191R\019A\021\167\180?>+\251ZE\020\180\"\210\004\155]\156\221\130\201.\237\142\237\221\238bA0QA\154a\187K\171\129\t\002\210\028\155\221\190d\215\151CZ`\187\251W\170!\172^\218\007_^\236 \178\138\169\134\n\155]\156\221\138\201.\237\129\255\188l\151\153\026\167\180\007V\221\171\221N\195\168La\187\251W\236\134\249\165\029\240\199\230\245\0283\179\226\212H\150\247\175X\014\243L\187\224\246\213\t[\15809v\216\238B\t\143f\003\t\183\216\236\246%\187\190'gklw\255J5\004\213\155%\216\238\171\179\203\209\190?\187\204Rl\127\225\228r4\235O.3\218\015\255u\127\176`i-\167\180\245\178\028\155]\\\203)S\203\005\182\251r-\167L-\151\216\254\210ZN\153Z\166\253\241\214\203\246\018\187\183YJ\229\219\173\177\221\197>\205L\215\178\006\219]\170\nf\182\150)lv\251\146\221\192\1675\182\187S\203k\193\127\214\211d\006\155\221\191R\187\161\136mD\r\175\1368cD\236\176\253\165\"\206\024\017\211\030y\168\220\215\196\150S\177\229klw\169(r*\182<\193f\183/\217\245\197\150\167\216\238\254\149j\bT\145g\216\238\203\170\200\169*\242\028\219_\170\138\156\170\"\167=\242\254\177\138\176X\022\005#\139R0\188\180\253\152H)\175\004\187\219\151\012\007\194\168\005\195\251Wj\"TF#\024~Y\026\005#\r%$\176T\027\005\163\r\218/\223\174l\188\166\r&z\204\141`xi\0192\225cn\005\187\219\151\012\007\218p\130\225\253+5\017j\163\021\012\191\172\rf\243\169X\011\t,\213\006\179\217T\208\238\249\229\245\227\188\162\210(Rlw\255\138\221\160\162\139\012\219}\185\158+\166\158sl\127i5WL5\011'B\022W3\019\167\022\226A\144\205r\179\190\003\022\194\201\143\237Kv}\255+\132\019\031\251W\170!TE\131\237\190\172\nf\247\166\016\206\b.U\005\179{S0{z\195\141\251\155\221\243\245\211\157\206\230\212}^\022\007'\217\186\255\171Z\251\137\208N\250t\207\251?J#a\210\160\029\182W\237\2558\177\225\237X\146\024\179\216\188Q\214N\201X\181\223\171\139Zr\201r\157\014\245\149\015{'E\226\167\209\138il\213\249\244Z\026\150\166Q\174\1974Z\213kay\002\142I \137W\212\242\004Z&\1294^K\139\019(\214L\002\153\152\192?P\212\148\022\163\225\242\149\227\029\2097\015n\007;\178\1604\175\028\011\2523\1726.H\"\245\147x\229`\224\173\199]p\174\204\239k\203WN\005\198/)\143I\148~\018\175\028\012\252_:%g\202\230\197C=\011R\240;\249R8\015\018\151Q\205\200Hc\131\011TS3\1701\145\1636q\139\161H,\182\184@\0195\163\t\183\240\216\206\002\203\129\004Z\249\192\206\002\131~\139W\194Y\143x\139+\218\226U\130\r.hqE[\188J#\199h\226\022\131\022\1752lqA\139+\218\226U\190\240H\206\002\203~\139W\133|\024g\129\193\160\197K\225\204I\188\2015\211\228\149`qA\155k\166\205\235\216\145\158\184\201\176\209\027\193\228\130V\215L\171\171\165\231\131\022\152\014\154]GN\006-\176\024\180\187Y\184\219$Z\230\246\153*+\2393-0\024d\213-\220\178\145-3\1555U+o\214,0\232g\181^G\022\230e\139\204\006M\157\200;\019q\131\193\158D\157F\246$\022X\244]\169\206\022\238F,\176\236\183O\157\203\251\016\011\012\006\237SD\150\222e\139\204\162{].\\t_`9(|%/\183/0\024\020\190\142\173\002\203&\011F\157Ml\197:n2\172P%,\023F\007\164\156\t^ji\0179> \229L\176R\155\216jl\220dXni\2298> \229L0R\187\165K\187\011L\007\226l#\139\186\011,\250\234l\214\255d!FN\134Y\130i\132\203$qu13\220F\1845\178@\\\204\012\183\201\"K\141q\139\129\182\026a\129`\129\180\152\025nS,\\\182\\`\217WVS\202\011\150\011\012\006\194z%\234\031W\180\023]\027\011\214\179\155W\"\255\219B\244\178T\252\229\237\230\149\160\127\251B2\254jw\243\202\205\242\253\242:\011u\249\202\189\242E\175[\142\169\248\131T#\172\017,lo\230NR#\172\019,\171w\230FR#,\021l_\176\026\180f\027Y$Yf5h<\181\022*\192-\205j\208VJX/X\216V\204^\147\018\214\012\150\213*\179\211\164\132e\131\237\011V\253\182Rydyc\153\213\176\173\132e\131em\165\152\182*cQy\220,\019\153+\218_\007\183U\162V\153\187*\170\022\172.\204,sSE\209\2548\184\248\017\181\202\220SQ\n[\221/\183\026\230U\186\244\1770\179\204\029\021e\004\179\251\229f\195\220J\023>\150\229\150\187G\162\164\251\030\139\212\197\221\"Q\210e\143\237\011f\253\206@\175\005\179\251\229u\016T\173\022\174z,\203+s*J\167\216\232\246\005\171A\rd\216\234\194\n`bL-\\\242X(-f\006\168\133+\030\203*\128\153\240\233\018\027\221\190`5\168\214\n[\221/\175\128\176Z\153eZ\245\2020\203\221D\209\180\135\253\243Z\239\194\221\023\209\194\189\142\133\n`n\139h\141\173\238\151[\r\243*\222\232X\152[fV\164\173dw\191\220n\152_\225>\199\178\220r\183D\180p\157c\145\184\184;\"f\141\141n_\176\234{\151\017nr\236\151W@P\173&\197\139\213\203\178\202\\\1790\194\237\141\133Ye.Y\024a\221v\161\002\152\161\219\020\216\234\178\n`FnSb\163\219\023\172\006\n\168\228U\251eF\131\149{SGV\238\023Z\r\218\170\193\203\204\011\219\1389\146o\020\182\186\172V\153\003\249Fc\163\219\023\172\006me\"{\002\203\172\134\213j\133\npK\179\026D\\\198\t\203\237\011\027\1399(oZ\193\236\178ze&\132v-X\221\190`\214o.\155\196\182\028\150\153\r\218\203\166\194\130\246\194\170e\230\1326\019\204.\171\003fRhs\193\234\246\005\179A\213\022\177]\141ef\195\170-\165:pK3\027\248\130e\222\136xq\150\193\028\254\1825\182\186_n5\172\129\006[\165'\001\023\165\016lkXa\193vam03D+\174\207n\150\026\r\196+\188\244\185}\193j\160]\027\2174Yf5l8\2335O\1834\171\161r_y\186\243\150\247\200\195l\220\210\186[\191\184\180\190(\r\191 .\137\172+\199l2\129\153K\229U\229E&\131lf\145%\213\152MF\024.\151\023T\023\153\012\178Y\196\150ScF\153\197T'\173\209.\201\168f2Z\197V\165\"F\1855)WK\235r\241\140\1426\131\140\210n\247\188y-\167\204\204\142yuyfuIV\153\153\157\139\\@\142=\012\205\132\011.v\249x\145\205\160\23662W\142\217\228\2343z\179-f\148\235\254\218\200\156c\145M\191\141\164\007\145\023\229\147\233G\196\231\143\023d\147\233GZ\249j\195x9#f\023]\204h\229k\r\227\197\140E\198\153K\025\204\027\199\244R\198\018\227\220\133\012\230e\227\199\226\228\171\023\1732\230\250]+<\196\179\240\162U\198\\\191c^2~,\209\189\156\237\134\201v\141\237/\205v\195d\187\145\214\022_\2068sN\132y\158x\150\194\210\1723\231E\152\215\135\159#\209\2039gN5\182\210\027iK3\206\028nl\17340\189\156s\230Hb\235\164\020\150f\1579\154\216\182x\195\243\229\151\021-\201\184e\222*\222\188\232\156\163Y\229\155M\132M\229\151\243m\152|\167B\002K3n\152\140g\194\158\237\203\025wL\198s!\129\165\025wL\198\011\188\031\248\178\194\011&\223%\182\191T\223\005\147ma\191\237\229l\151L\182kl\127i\182K&\219\226\004z\241+et}\216\174\229I\180Z\222\147\248\171\011\150ylxfx\251\146e\231[6\209hbq\239W\248\150\197\142\251\244B\183\234\159M\181k\233\176\195\233\133\145&\180\219b/9\189\224%\129Y\230\165a\251\170\217\1461\155,\156\249\137GK\1539\159\229\158\026VK\207\1702\179=\203<1\204O\154d\203\r\147\213\\\158\231-0\024d\181X<\195\147m+&\179eln\183\192d\144\221j\233\172N6\1571\185\173#\243\185\005\022\131\2046\139gr\178\237\156\201\173\138\205\225\022\152\012\178\171\023\206\222\228[j\204\188\141yNx\179\216\193\184\025\027\243\1400\152\177\201\166\153\185\026\243\146\176?W[`1\200l\187t\150&\155f\230g\204#\194\219\023j\150\153\153I\239\007\191\160XfN\150\166\242\156l\129\193 \171\217\194\217\152l\153\153\135I\175\007\199\179\202\204\192\152g\131\195\025X\220]\131\185\023\243dp0\247Z`\210\159u1\207\005\135\179\174\0056\253\249\022\243Tp8\223Z\208S\2493\173\180\137\205\180\226&\131\217\005\243B\240\249\005\139\204\236\138y\027\216\155]\197\245\030\0264\242\188*\174\202\208\160\141\199\005\209\147c\1562]4*Xf6Pg\027\143\t\150\217\245\021\202\188\004L\"\130Ev\003\1492/\001\251{!\011O\253V\190\2134\182o\1770\179\129\217\012\207\129\023VA\197TA.T\193\239\165{L\129\188\152\183\127\253\179\223\139l\250\218b\222\251\rN~/2\026\b\171\138\250\215\146=\166\176\248u\204\187\022\025\r\202\223D}k\145\213\160\002TDT1\155\156\164h\183\250\231%\1555c\147\246\172\183\t\196s\167exjK\158K\221\178\170}\179v\137\217%Kh\156q\247~<\029z\226[o\242\242\246\169N\238\208\239\t\159\187\243\251\231\191\2456\142#\242\137o\239\248S\247\177\t\b\255\147!0\207\241\158\212\166\219\171\205\181/\198N\169\205\251\249\191s\188\132\225\217n\226\244\220\003\"\166Q\162R\128\154E\169\215=\160\230\011\1680\221\"N>\028\016\153[\164\236\137w\238N\253l\186\183o\245K\169]\135\234\140\217W\026y\234\252\171\183\166\020*v\r\136\251(\179AL\165\162\\\021\203\238\229\218\1518b\132\246\000\127]\173\237\206\234\237\220\157NP\151\006V\247\188\182o\149\237\220P\239\183\255\1402a\249\146,\168\003\230\007\196\148V\253\191\219\170!\213\203\144\005(\184\022:\229^\244J\230\249V\255F\230\011#\253t7\147\246\163\133p\237\211\191\162\022\127\224\136\185Pg\139t\169\253\165WA\1534\178\005i\236_L#\172'\225\216\209\246\031%\226\152D\138\200y\169Wk\1399sl\153\231_\153D\150_\163eN [\230-X&\141\237\171\137\248S\149\"z\177tYX=\185\005S\138fq\002K\175\1762\137\196n\156\190\178\228\198,\185\020z\137\253W\023\011\153\197\162\194D\230\248\175\132\168\025r\245\232\221\212\023\002\214\236\141\189\177l\011\183(\145\023\215\174\185\149\203\"\250Se\011W\1342\160.\238\189X\144\192\210\011\173L\"\201\162D^hz\174\223\226\030\142eRY\176<\245H!\232~\185\151cQ\n/\148#L%\199\139L\222/\012\198W\155F\015\t\026\163Xh~\233]c&\ta\171\254\165\134(P\021U\177x\249\149\149Hn8/\235\229),]\249bR\137\239\226\191\176\247\195mT\148*\186\016\246\202B07\204\150\250\133$\150\174\1861\201\152e\201,^~f\154\195\190\144\196\011%\t\147qx\209\247\031l\"Mw\211\233\224\193\188A\235_P_Z_\227\133$Z\144j\1898\129\165w\225\153D\146\200\130\211\194\254\176\002\131S\149.\181\191t\185\148I#[\146\198Kk\178LE\229K\018Yx\248\129\153(2\015\220\250W\221\151\202\169y\227CM\230\193[\255\206\251+\t\1765T-N`\233s\000L\"\245\146D^=2\194\204\167+\241 \239K\021\166PY\212\178$\022\158\251\224D\165\151\165\240\234\169\021\174\190\132wu_\233\014\167w\005\152\218\178\139\019X\250x\001\147\136\240\228\238\011\221\225\2446\000\211U\181K\236/\168\165\020h\138y\136\215\187\127\190\212>\154S\213\201\002\251\203^i\229\142\169\212\233\002\243/>/\203\r\222\181\240\147q\191_\189Y\254\152\029\006!S\157/NdA)\184\004\132W}\183/\1836\227\014\210#\191/\251\028LDx\239\247\021\159\203\129\2071\207\255\002\251K\031<`\210\144\222\003~q\245%\127\006~As\171%\137\236_L$l\r\189$\145\184\135\023\200\195\141`\255\197%\164i\157\130i\014\187(\145W\170\138\153Q\213\210\171\020\219\127\212\234\142i\245vQ*\251\023S\t\202\194\188\230\203\213\216\246\213v\241\163\204F\248)\184\151\031\244x\134\003~\1335\249\146D\246/&\018\214\151\244d\196\171\141R\002_l\202%\137\188\248\16057\0282O\005\007\143\128,\029IJ\224+\204+\1930\133\165\015\1420\1694\139Ry\181\198\152\165\227Fz\173\253\133\169\251t\135\151\246\147\141^\148\192\171\175\15333\247Fx\151\226\1659)\138s\026\1878\129\165\143U0\137\196^\016^\214\030\2113\194L{\180K\182\131\151\253\020\r\183\148\168\022m7\191\248#:\156r\165\151\134_\169(\005*Jzs\248\031\157\226~&\020\020$\246\188\197\011\005\225<0\250\"\241?)\b\231\128\204#\197\220F\231\194\163\244\\IJ!\129\127\210$\006\140#\226\019\198\255\168\206\012\170\179:v\252\240\213\133\141\012\201\172Y\176\163\179\2368>7\031V\209\011\129\011\019@!5\243\250\177\253\007\249/\145y\179$\200]\184\"\192\245\139\177\1517^\176\207\250\134\244\210\209\242pG\161\234\017\222<z\165z\208\176\193\188\148\252\243\015:\193\028u\130:\250\234\220\011\241 \155@\186dEl\225\143Rq\246c\015\209\1890O\227\026\152yR\025\172\024.}Q\148\134\179\186X\186\168\183\244yI:\127\210\139\182\007\022\222\152\228\218Ax\025\244\149v\206\144\253e\001\198\011o\0042\235\n\186Y\020\139/\\\029a&OZ-\233M_ij&J\210zIS,\152\240\1633\022\218,.\197\210A!H\192.n\236\133\225]\216\208n\201\140i\217\140\140\2375\132w?^\137&,\024\022\152\247\157\185\229\156\133B\229\018\136=\245\188\208~\002\220\217H\207\225\189\024\2051\245o\178\197.\176\244qa\170R\147/\222\210]\182!\202\185\130)\022\159\006Zv\228\136-I\244\178\207\194\209!\003\253\158Y\182\000\181p\152\230\244\202\189\2200\0289\191NG\217\015\232\0009\243\250\217\237\152\251\219\245\236\236\155:\191m\143'u\232\255\243\249r\252|;w\031\135\229\143\165\012\253\155M\253\228\018f>\241\191\154\2188\179\224RK\153C\249\187eo\133\140wl\242\199_\254\2458\230\1934\181\213\234\180\220rvw\224\224\018&\243Z\218\254\184\025\030`\179\139\234b\182\2431\252\175\2147^\176:\217\191\214\166\204\175\025X\230\157\180\147:\031\175\187E\166\147\187\247\228\183\219X\185o\026\220iq\203_1\027_7`\154\145N\171\190\213x\205cQe\215\143|3\247=\219\006\184\214K\149\029\196\235\204\251h\143[+\199\235\189b\238\133\136\027\127[\175\2115'\247\251\127 \021x\255\015\160\240\247\220\185\203\197\157\196\188M\005\162\211\181\223\195\127\239\255R\187\227\181'\002/2S\202S\254\205cFU\133>\235g)\180>e\195\188\159\134\209c\232s\222\207\255\138Dj\2043\005\191]\152\223\141\235\206\251\238\214\221\168\211\175\147\218\236\213a\250_}\143\015zc\230p\248Uo\148:\012w\146\190\213\155x\025\136ynM\253\2493\\\"\186\021\154%\185\245\250\253K\245E\191t\253\128tv;g.\199\211\175\228}\255\223z\240\225\188\015\208\t\135N\017:\229\208\025Bg\028:G\232\156C\023\b]p\232\018\161K\014]!t\197\161k\132\1749t\131\208\r\219:k\004W,\028\182\166f\225\1769\r\011\135\237iY8lP\199\194a\139\182,\0285i_e\159'wv\135\203\200\024\186\222\225\175\183/w\186t\166\247|s\236\199\216\247\207\201G\254\211\255\243o\255\227\255\254?\254\2456\239Z\251[\176\174\175\207\136\173\206\186\227\199I}nz_\132v\179\245:\241\237\166\175\216m\175\187\221m\158\004l\167\190\237,^\254]o\131-\127\166|[y\204\214\217\237;\201\158\246\237\0211{\238o\211\143\024\227\127\221\171\211\0224SP\157e\204\236_Ww\142\216\204Z\223f\021\179y\187}\253\189\233n\023\177\015\253\191\187\238\250i\161>)\179u\151\199\205j\175\169\146\210O\163\142\1651\222\216\230\018\217\154!\145\127\227\018\169\252D\154X\"\155\227\169\251s\236\255{_\253\187]\247y\187\024N\171(]\167~\246\211\245{/y\221\135c\135\143\217\n\201P-\027\181k\007\255L3\198C\251\214cxcQeb:#\218\227U\239\250\173\172ng\023%\154!\238\146\132\243\025y\175\204\169\175\199\005I\022\148\181$\177rF3\199\195\239\227\220\002\166Ubk\244\203\014\187\227\247\141\157r\236Zn\147\024\189\153\209\131&\137Q\021\161.OV\011\237\018\227\026\169ubd+\181Q\140\236\230\228\159S?u\236{\249Kw\217\029\151\168\170\197\236\005\234\202\162\195\227\229\251\216;\200\165\207\138\178\238\004z\130)\006\248\216\253|nD\250\148jt \237\151F\172:o\222?\255\011\147\\\146\195\228\238\188)\157\232\192\218\175\246\b\233d8\157\131\151Nt\144\237\005\208\251\209\193\189\127\254+3\216\020-L\232\252\169\204\208\180\215\131\029~W\230xr\2474\163\131\241\183\250\250\249_O\248f\133\166^,\026\015\185\199E\252\161\187\134\0258~\186\155\168\2316\166\196\203e\003%\247\022\138\159z\003S7\187\227\025\164\190l*`\174\167\221\1434\254\175\215\149\142\022\222\1832e`\225<!\200\001W\001\149\141V\000\155\131fQ\021\244\019\243\203\177;\223\182\254\2519\171<\023\202\163u\001\204MYR\203*\005\229\137\157:\021\209\218\145\243\164\023U\147\222\245\164\229\147\198u\180\162\160\193)[fYU\225|\177\149\149D++\150/\187\168\186\166\217\154:|\244\127\139U\181V\209\170b\141M\217q\203\170\137\207\015WEk\029\173\")?\237\162\234YR/\241N\151\203@\190^V!Kj\"\222\241\1789H\150u\189\199\211\193E\220hm\226}\175of\202B\186\176\243\r\242\192\214\194\130\222\151\205C\246B0\186\1682\\\1802XcSv\242W\226\214E\021\211F+F\202O\241~vg\181w\195\196\2431a\245\166\189y\249>\026\136\002\151\r\246\231\191\174\234\228\228\209\190\240\023?\242\133\163xh\154\027\198\011\235\155n\222\135\201i\191\209p\236\141\141\179\191\251\180\253_\255\251\127\253\191\254\243\255=\204n\179\169\209\239\019\189\025e>\211\235w\028M\159\201\147\027\236\188dp\160\141hjT\191\223\230\149\175\152{\016<C\230}\2342_\182\023\242<\179\246^\131t\254|\183\248\156=\0075H&\203\185\155W\225+\022gUH\173\182\239`\134\143\237\241\147\249b\253~\222\247\027\005\243%Ks~\255O\255\243\191\254\231\127\231\214A\139d\194\011\203\157\019\151\172u\022\233\196\r\1501\253\244\238MuC~\186Sw\180w~>\253[f\169\241\193\015\214\025\139\226Q\190\007\222K/X\231,\202\t\015\214\t\159<\127\145\176\168&\030^\182|\0221\168\150\250N\r\003\223\137\241\140z\239\140fb\224@\235\153\216m\192\255\153\b8\176*\212\004\017\226\167\167\209fn\020\199K}\1917\203(\b\139\030V\199\152(\204*\023\132\020\198\203,\136v\158\134-\151]\214\176\157g8\022\196<\132>\182O\152s1@(\156W\132Xl\242L\170\224\202\"'\213N\232\195u\175\135\r\218a\191\243&\203\0302k\212\204\019Yy\239\025\212~\248Y[u\176\156\148\253u\224\242\222;\168s\223wugV\253\190\195\149\247N\225sw=O[\177\255u\200\154\215)\248N]f\019g\211\207\017\220\225\215\190;\\\207\163\219\2484\127l,\243G\227\158\207\191.\155~o\246\153\158\239\220f\172\228;\241\222\137|\156\\\191\137\127\146\185\206\231\222;\020\215\015\230\1873d\005Y\189\247\t'7\012O}\187\030w\157\189\158\153\250,\204\188\195\212}\195\159w\207\229\169\242\222U\216\227n\b\187\158{\221~\219\251\029L\169\158\253\2390\014A\201\020>M\207\006\147\1589l\174\171\011\147\231\220\251\201c\247|\023\230\133\023q\167\019\t\1472&\254}\176\187\219\185'\2408\130\212\207\184\190\157\219\141\135\175\030\169\221~@\247\153J\248\003\135~\026\015V\223\195O\230\238\201<\206\030\221~=\241\165r\024\182\028w;\247\004\178g9\186~\028=\169\143}\223<\015\187~\173>N\021\221~n\241\165\220X67w;\247\004J\175J\150[w\184\205\238\186}>\189\242\202\175\\\210v\2180\173T{\173\180<\219-n\162G\182\027\223\246\178\223\207\244\236\142\246\152l+\1759\023g\187X\227\182|d[\251\182\151\2532\167gw\180\199d\251qrz\250\001\208\197\249N\216|\143V\030\025\183\129\245E9\015,\143\022\153\172?N\230\156\175\219\235r\239)R>\231\131\145\187\233\2147\189(\219\129\217\027\145dz\246\\\202x\246i\252\137\240%g\020\201*\222Dz\155\012\222,\221k~\246l\202\152\206\243Y\243\253\173%\198\031%_\146n\026Iw\255h\159!\141{\250\233\162\244\229\195\212$\229\017.\166\155\193t\231?\198\190\164\220\217\162\250\014\211\207\023\165/\151;\019\203\205\167[\004\233~\171\239\127V\236|q\177\251$\238\169\151KR\151\011\157/,\244,\213*R\215\183\221\221E\133.\150\021\250\022\159{\213^/\202\130\\\242bI\201i\210M\144\244\236\022\225k-^.n\241\031uO\\-I\\.v\185\176\193\159\137\234E%\142>\205L\203;Q\132\164\205\146\164#\195\004Mx\"\b\233ZN_\139N\180G\026u\174$\199%\018\249-\r\177\241\230\198\219\192\184^\248\155\180u\164\000Z\221+\169Y3ID\174\233\136\217\159\153N\184\220G\021VG\0206K e\018\136\233\168\150u4\179\030\142\134\195{\002\253\178\151\190^\150\2059\154H#\\\148\186\219\187\207<\154\\HSn\149Fl\021.\173\130IkI\185T\188\\\247$J&\137\200\179\011\177b\220MW\\\238\227\239\227G\1965K\160\230\154\"\".%\139kf=\028\128.\155\133\181\175c\181\191y&\162\184D\228\250\215r\253\207\140k\182\004\209\022\208\177\022\152%a\184$bm\160#m0\179\031\014\016K\127+:5\145F\024\012\221\019q\\\"\145\139\168b#\204\141\183l\t\226?\176\016i\132Y\018j\205%\017k\004#7\194\220~B\130\186\133\191t\031\157y\221\219Y\165L\018\145\171\186\145\249\213\195t\198\229>Z\2556:\139z$\1443\t\196j\223\198\230J\015\235\225\024\176\244\167\199S\023\169\253\237,\145\146K$\242\211\173b\253\207\141Wl\t\162-\224\"-0O\162\230\146\136\181\129\147\219`n?\028\011\172Zt\2050m#m`\213}\229D)&\t\185\005Z\177\005f\166\2338\176,\251\217:>\146=\0181\\\"\242\237\229ul${\024\015\135\129\165\191\226\030[T:=Z\2161)\200\185O\196\220?-\135\003\192\159\225\210\250\146\204\199V\166\006CS\"z\205%\"\231_^~\154\027\015\251\255\219]\245%%\136\1731\r\134\238\137\164\\\"\145\219\239b\t\230\1983\182\004\241\031=\137tA\243$r.\137\232ov\202]\208\220~8\014\140\175Z-i\133\216\146\215\205\210=\153\146M&\242T\150\220\014s\243\021_\138\248\175S\196Zb\158H\205&\018\253\249\208H[\204Sh\200\173\227Ew\229\179\216B\\o\231\158\132b\146\136<\137&7\195\211\180\230r\031\127\204\"\214\004\207\004\012\147@\172\250\139H\245?\173[2R.\171\252\216B\160}&\225\152$\"\239\185E\006\227\135\233\150\203}\252\247F\"\149\255L\192\172\153\004b\149\031Y\186\155Y\015\199\130\203\178\217h\022[\176{\174z\152\148I\"\242# \242D\226i:\227r\031\255\r\147H\229\207\018\200\153\004\162\1911,W\254\204zAF\249e\149\031[l\180\207\173oS2i\200\181/\1756\206mW\\\254\163\213\031[n\156\167P3)D\127\1439\"\254\153\249\176\223_:\149\139-4>'[F1ID\158\136\019\235\127fZs\185\143\191\148\020\169\254Y\002\134I V\251\141\\\2513\235a\191?\254\244\202\146\234\143\173\135\222,\221\147ql2\145_q\017\155\1923\223\242\165\1366Cl]t\158\136]\179\137\196\154\"\1786\234\165\016\142\003\237\178\136,\143Ed\237=n\178)\147B\228\2413\177\021\158\1503.\239\241\223\184\1374\192\211~\206\216\143\157\177H\228\186\127\026\015\199\128\225u\204EOVE*\190\183sO\162d\146\136\188\022*\214\252\204t\197\229>\254\144g\164\234g\t\212L\002\177\186O\229\186\159Y\015\251\255\237\194\202\143\005\194\230\153\132b\146\136<\027)V\254\204\180\230r\031\127\142/R\249\179\004\012\147@\172\242#!\240\204z\216\255/}3+\022\255>\158\134r\2141ID\158\212\020+\127f\186\229r\031\127s4R\249\207\004\220\154I V\249\145\152wf=\236\239\247\0117b\242X\200\187\127n4\184\148K$\242\160\166X\255s\227\025[\130\248o\175DZ`\158D\206%\017k\131H\224;\183\031\246\253\1837\029\1514B,\244\029\012\221\019)\185D\"\175D\138\14107^\177%\136? \028i\132y\0185\151D\172\017\"\001\240\220~8\006,\220\022\206c\017\240\230>\196;\197\164 7\128\028\000?-k.\239\241\031\237\137\212\254\211\190a\236\199\170>\018\254>\141[\230\020\222\1627\019#\021\255<r\231\028\147\132\\\243r\240;3\221r\167\144\238?\165\176\164\024\209\024r4\248\215`\240\030\176\182k)U\185d\145\176\146K-a\142\145-)Z,>{\028\024kS&\133\200K\252b1\158\1503.\239\241\159\207\137\184\198\211~\206\216\143\185F$ {\026\023\030\180\255\199'\163\199\183-\151\031\143\246\146\158\029\145k\203W3\183\224\017\243\165g\167a\166\170%\153z\241\168\233\152\181\229\007\171a\230\234W3\183\160\198\150\158\186\134\153j\150gj\241\201\2281k/\029O\134\249S\175\230oA\165\189pv\025\230KG\242\181\184\154b\019\b\152\003\019\201\193\130\138\144'\0240\229\246\253\143;\029\251\164l\159\214\225\248K\159\156\218\222\238\164\184w\243\191\247I\233\251\179\007\250\167/\200\2414\212\228\237\226\242\205@\187N\222\135\235\218#\031_n\254\127\255\143\255\242o\255\027\185\219\220\174\211\025\251\175\235\241\"rS\159\155\205\184\236\213\213\0071\243\137\249\140\200\222{|\016s\159X\204\136\252\213\199\007\179\240\153\229\140\201\\\152}\208J\159V\205i\159\199\243\229t\252\2208\134W\249\188z\198\195\151\192\031\236\233\014\248\147\003\239\129\183\235f\006\019\238\130?l7\161mx\029\188]\171yq\201\021\225\135I\229\023V\207[\133\222\018~\208\180O3\243<\249\175\027<(\198\167\216\025\133\191[\252`Z\159\233fL\230y\131\007m:\241\228\201\236\241\194A\187ng\255\197\187\242\235\025iC#\179\027\191m\178\158\171\191\251\232.oC\015\240~\184\021aV\205\217\250}\252\243(E\146\016\234\241\224\024f\242>\254y2S\194\188|si\166\239\227\159'3\163\204\205\201q\169f\239\227\159'7'\220\246x=1\212\252}\252\243\164\022\148\218}q\169\022\239\227\159'\181$\212s\2477\195,\223\199?OfE\153\238\171\231Pn\245>\254yrk\194u\131w2\220\250}\252\243\2286\132{\232\216\134m\222\199?O\170\242\188\200{C\227\193\242\2535\153\251+\243T\199\131\230\251kb\188>\141\191\161\255\224z\023\244\219d\238\184\236E\251\007\209\247\219d\238\183\194\237\254\007\221\249\233\182\222\240\198\190\024\242\160z\015\134\180\233:\232\158\152\251\242w\170\127]\190M\231n\218O?\250}%\163>\187\225\213\222{\140\249\190\251\143\222\198nf\2269.\183m\255\015\131\1534fFS3\233\220Lz3\147\197\204\024j&\155\155\201nf\242\152\025K\205\228s3\249\205L\0173\227\168\153bn\166\184\153)cfZj\166\156\155)of\170\152\153\015j\166\154\155\169nf\234\152\153\r5S\207\205\21273M\204LG\2054s3\205\205\140\138\153\249M\205\168\185\025u3\163cf\182\212\140\158\155\20973&ffG\205\152\185\025s3ccf\246\212\140\157\155\17773.f\230@\205\184\185\025w3\211\198\204\028\169\153vn\166\029\204d\235\152\153Ob\166X\207\204\244\2550\152\137\2467\127Q3\243\254\166\184\2457Y\180\1919Q3\243\254\166\184\2457Y\180\1919S3\243\254\166\184\2457Y\180\191\185P3\243\254\166\184\2457Y\180\191\185R3\243\254\166\184\2457Y\180\191\249\162f\230\253Mq\235o\178h\127\243M\205\204\251\155\226\214\223d\209\254\230ojf\222\223\020\183\254&\139\2467?\212\204\188\191)n\253M\022\237o\254P3\243\254\166\184\2457\153\014c&\244r\223\195\200\244\030\021\r\155\002\2308,g\243\158\b\190\219\2430>\245AOJ\240tO\155Y\018\137\161\007\001\031Fm\152\227{0\198\231x\222[\153\238d\174\251v\231\254~Sf\136|\223\207\255gh\158D/\143\199\234\030\228\187i\175\007#\207\212=,\182\200b\248R]\155\175\189\169\154\234\215\220P>\2035\178z\227\221\r\210n\237\254<\212}\018\245\239\190\170\202G\167v\155\132\221\254^\221\230A\162!M\r\1653C\233\248\247\2346\019\018\r\025j(\155\025\202\198\191W\183\185\144h\200RC\249\204P>\254\189\186\205\134DC\142\026*f\134\138\241\239\213m>$\026j\169\161rf\168\028\255^\221fD\162\161\015j\168\154\025\170\198\191W\1839\145hhC\r\2133C\245\248\247\2346+\018\ru\212P33\212\140\127\175n\243\"\209\208ojH\205\012\169\241\239\213mf$\026\218RCzfH\143\127\175ns#\209\208\142\02623Cf\252{u\155\029\137\134\246\212\144\157\025\178\227\223\171\219\252H4t\160\134\220\204\144\027\255^\221fH\162\161#5\212\206\012\181\227\223\171\219\028I4\244I\012U\235\167\161\225\006\214\240\247\2346K\018\r\253E\r\205\250\163,\025\255^\221\230I\162\161\01954\235\143\178t\252{u\155)\137\134\206\212\208\172?\202\178\241\239\213m\174$\026\186PC\179\254(\203\199\191W\183\217\146h\232J\r\205\250\163\172\024\255^\221\230K\162\161/jh\214\031e\229\248\247\2346c\018\r}SC\179\254(\171\198\191W\1839\147h\232ojh\214\031e\245\248\247\2346k\018\r\253PC\179\254(k\198\191W\183y\147h\232\01554\235\14325\254=\024\"S/\240\020\232\195\014\156y1\143v\182\197\188\151z>\206<L8\200\002NE\166]\015\130V\167\187A:\243\002O\140>\204\194\137\023\155\225y'v\251\161\027&\163p\1745\018&KmX\179\227\219\214\194v@\218\212\211\019\162\147\141rMJ\203\024\249\183\208H\233\027I\222\135\031\155\025\141D~\178\236\191\253\231\255\241?\254\251\255;\255\1932\158\234-\141\247S\166'J|\234}f~Z%|\018\165\247\221\219~2\245D\202O\185\207\210\176a\026\210\251\237m?\207\226\011\027\188\161<K\192\223Q\235\231WO\003[uQ[uPo\251\206\218\157\255\150\249\204D\235\175\180\2463+\198\196\189\191:\142;\144;\207\128\1913\215\207\168\176\129\233\001X\198\138\nJRG\173t\156\021\127\179\175\159K\197\172\\9+\254\254]?\145\138Yq\156\021\127[\174\159E\197\172p\181\171\026\223\138\137Z\249\225\170\215\005\021c\227f\184\154qA\205\184\184\025\174P.\168\1546j\230\194\229\198\248\133\234\167N\212\204\175MwR\031\131\189\207\211\176\213\240\209\239\228\159\143}\0009\174\196\239\254+\145\179\191\237W%B\222X!\251\238P\165\002\159\149\176\191\237\\e\002\159\021\175\191\139\\\229\002\159\149m\237\243\011\129\207\n\214\223\240\169\164\254d\203V\160\223!UR\127\178ek\208\223\198\169\164\174d\203V\161\191\027SI\189\200\150\171C\237wf\149\212\129l\185J\212\129\178\197\190\131\171D\237;j%v\027\\%j\223E+\177\195\224*Q\251\029W%v\021l%\006:\016;\t\182\018}\029\212k\193\192\133\173D_\007\181\212\021\\\184J4\190\014j\169/\224{8\1913\168\165\206\224\194U\162\241{\131Z\234\r.\\%\026\191;\168\165\238\224\192U\162\241\251\131Z\234\015\014l%\250:\168\165\254\224\192V\162\223\163\215R\127p`+1\016\146\212\031\028\216Jt\190\001\169?\216\176\149\024(Q\234\0156\\%Z\127T\170\165\254`\195U\162\245;\148Z\234\0156\\%\218@HR\127\176\225*\209\006:\144\250\131=W\137\214o\133F\234\015\246l%\250\173\208H\253\193\158\157>\249{\245\141\212\031\236\185Jt~\135\210H\253\193\158\157y\249:h\164\254\128\159H\250=R#\245\007\252\020\210\239\145\026\169?\224'\143\190\144\026\169?8\177E\240G\166F\234\015N\156\014\156\223\1655R\127pb\235\192\151r#\245\007'V\007~\151\214H\253\193\137\173D\191Kk\164\254\224\155\173\196\192\023\164\254\224\192E\141\254\012\167a\187\131\175cgb\243\245&hM\182[\024N\026\253Zd\205oZ5\239#6\234\240q\029\030\205\218\237\220\137\022)\185o\147\016\134Q\238\237\184\191\155L(\2241\155\253q\199-c\249\254\152\021\"~\012\196\143{\002)\196\157\207\253?\226TR9\149\027;H+\139\020\230\215\185;\158\185\180\178%%z\187\177\167\164r\b>t\238z\224\018\241\251*U\200\022~\153\254o\195\217)\228\204\222\216o\191\251\191\127\223\147*#Im\250\1917\\R\229\146\164F\246\148T\005\193\151n\235\174\023.\149JN\197v\031\238z_\\S\181\172\b\156J\189DO~Z\rD\159\2502\239\184T\0269\149\221\1417\153W\178\249_\2167\212\130T\002\223\208\145\196\246\253\223{.-\189$\173\145=%e\"I}\246\127\127rI\153%I\233\254o}O\202F\146B\014o\151\1644\247w\023I\2322x\193\133u\"\183$\173\203@\191'\214\198*pH\236\147M\172]\146\216\216\000cbz\029I\012u\014\247\163\158rR\243\206A\227\193\006\169/\247\167\152\026\143&HTyd\028\153\203Igr\247\000\211\200\150\244-^J\185\\\016$\220<_P\154\185p5\030fP\018~l\165K\185X\200J\185\164J\230\025\197#\1990\202|pi\248\171B\026\015\rh,\205#\131\194|\020\213\141\\\024\152F\179\164&\188\148\240\192`\006\1272\172;F\198\1321{S\002x0\216\014\tl\217\004\"\003\1934ZM)\2241\000\247\148y\164\255\159\247\145\026\247\252\184w\204#\221\190\215/\226\030\031\246\136~Hopg\1658\182\031\195\024\220\023)&\bK\n?\1547\184\131\225\"\233\164\240;ZS\bt6y?\1487\184\215pG\142\238\007`\006w\006l\226\254\212\218`\255\249\225S\247\187<\163\005>G\247\023\017\012\214>\155\184\223\139\025,\236o\182\225\252\005\b\227\004:\155y?b5x\238qd\233~\136j\177\230\127\216\194\251k\015\022\139\254\202\177\253\133\007\1395\255\205\183\187\191\238`\011\129\207\209}\127\183X\243\223\029G\247\029\222b\205sKWI\233;\188\197\162w,\221wx+h\158\203|\233\251\187\197\154g\217\190\187;\239\134\209\227*+\185\004\027\236f\186\2491\180\207\219B\n\224\005\201\205O\157\029\142\023p\131J\249\234r\243#f{eN=\150\156\231U\240\148\240\196\152l\205O\153\233\211q\235\014\183C=\231\240\236\245}\255\148\160\153\179@n~\226\236\199\029Pe\248\157\157\155\031/\251>\242\1724\220\249w\243\185\214p\025\252<\220\235\222\\\030\249z\022\229\222\234i\177\014\154o>\161\026\206\201|\171\147=\191\169\211\233\248\253l\141\007=i|\193\187\185\224\175\1591\178/w7\151\251\237\000M\140\031\228}\174w{\252>\196\232\129\002\231\157\188\222)\179\157\142\189s\213\166\130r\207{\248\241\248\211p\166}\199r\131\237\170\182y\239\238\191\213\174\250\137\196\225p\191\231\174\014fs<\141\247\236G\153\206X\n\177\206\238S\157\212\005\0185\"\246\255r\223\029\004\166y?\234\223\206\\\250\021\231\207\190~\220\240\227\177\253\236\183O\205\244\220GQ}\146}_\140N\214\253\255\189O\025\235#\166\159\221N\233\157{\211\235u\253\156\158\005\132\132%d\245sR\018\016R\150\144\214\207N1 d,\161L\1583\135\128\144\179\132d\253\028/\003B\193\023:y\179\168\212%\203\200\1397\139\138]\241iT\253\242\026`\212|1\242\222\183\000\163a\025E_\014Tr\1973\170\183\223\168\228\154/y\249\246\027\149\220\242\n\233\025\168\028\142o\241\226\2377*G\2032\170jv\128\197g$\188\208\243|v^$`\240J/\171\217\025\151\128\193K\189Z\207\142\148\004\012^\235u2;\006\0190x\177\215\235\217\014k\192\224\213\158d\179\r\205\128\193\171\189\202f\155\176\001\131W{R\204\246<\003\006\175\2464\155\237\211\006\012^\237\235rv\202!`\240jO\243\217\161\130\128\193\171=[\207\014B\004\012\195{T:;w\0160x\255(\138\217Y\137\128\193\251\199:{\251D%\007\254\145\190}\130\146\167\188\127dM\191 \000\024\188\127$I?\r\005\012\222?\138\245\219'(y\202\251GR\190\253\005J\158\242\254Q\213o\127\161\146\243\254\145&o\127\161\146\243\254\145\165o\127\161\146\243j/\215\179\253\240\128\193\171=\173f\219\207\001\003\244\237\217l\203<`\240j_\167\179\029\234\128\193\171=-g\187\234\001\003\140\006\201\236\148\\\192\000jof\135\210\002\006\175\246<\153\029\164\243\025\025\175\246$\157\157[\011\024\188\218\139zv\214.`\000\1817\179\163m\001\131W\251:\159\157$\011\024\188\218\179jv\250-`\128\185O1;l\0220x\181\151\205\236\128\\\192\224G\131\"\159\173\222\004\012\222?\170b\182\232\0160x\255\200\215\179u\134\128\193\251G\158\206\014\209\007\012^\237I\245\246\007\149\131W{\149\191\253A\229\224\181\155\174\223\254\128\\\229\188v\211\226\173_\026\224\025\188v\243\236\173_\020\224\025\188v\235>\r\208\2309\175\221\170\159\139\162&\204y\2416\235\158\130\202\206\1717\175\223\014HZ9/\223\180\031\216\174\168\190x\253\150\253\232\137\0281\007\002\238;F\216*\188\130\179\190\191\134\205\194K\184\172\251\014\027\165\194\247\241e\217\247B\136\194\203\190\238;\021\216\148\188\238\155\228\246\174\020K)<\025\239\245q7\184V\r\192\t\007n\0008e\192)(l\1451\224\161[e\1939\003\030\212\194\130\011\014\140\242\\2\224\225_\178\224\138\001\151@3E\205\129Q\001\027\006\\\161<+\006\\\163z\214\028\024\229\217p`T\027\150\003\131<\2153\213M\247\185\246o\186\255\015}\248t\000\148\132\167\012\227\006&\165<\169\015\230\221\243\168Z\192\201xN1\188\145\213Y@\202\001ixl\024M\021\235\002\144\246o\231\139\218\237\250\213)@,yb\217\1909\2127\212\021\224\236\251\142n\01585\207\169\218\225g\229~}\028\213\005\016\027@\220\191\201<\197\243\234>\193~5\147\231h\192\233\255>*\212\200\134'5\237\155\129\tY\192\233\255\238\151\173\001\201\177\164~b\241\189q\176\026Z\158\148\012K\236;\247\195\179\026\222\169\210\244\237\184\027^\233\227I\188[\245\011\000\231\207\206 \018\239V\253\220\199\252|\186\211\245\012h3\207\218\031\015\015\218\176\\\132\130\213&\2319\245\219p~\021-\2324\188g\245\011\b\199\0144T\195\251T\031!}wh\157\162\225}*\003\157oS\179e\233\167\026}\023\129\214\016\154\134'\245k:\014E\148\r\239F\253\172\188\223\1789\1609p\195;R\031\191}\028w\160\223kx?\202Q\r\240.\212/\224~\031\143\168ax\015\202\1938\212\240\1903\204s8\184\226\157\166_\188\237\247 @\247\171x\159)@\161\021\239-\005\024u\021?\254\020`\174\160x\007)\250\153\229\021NG\021\239\031\005\152C)\2227\n0MT\188[\244!\183\217\029\159\199m\002\018?\214\148\168\221\248\017\166\223J\230\225\188G\244\177\196\135:\r[4\128\198\187D9x\236~x4\149g\241N\129f{\138w\138\178\000p\222\031J\224\015\138\247\135\0184\181\230\253\161\004M\173yW(\193\188O\243\174P\129F\214\188+T\160\1455?\t\171\128\019h\222\t\134\245\245\227\001\201T\243\174P\129\182\213\188+\244\001\233ex\174\151\231\240\158P\161\022\227=\161B-\198{\002\138.4\239\0015j1^\2505j1^\250(z\209\188\244Q\252\162y\233\215\160\173\012/\253\026\248\161\225\165\143B\030\195K\191\001\021ix\233\247\161\252\198\237\246\014\244W\134\245\128\180\159m\182\199\227\229|\129\131\172)xb\209\2078/\155\203U\003\026\235\ri?\207:\127:4\2476\021OJ\1663\011<\169\230I@)\166\225\225\253\180\246\251x\002\147\025\163x\018\210\139\230\225\160#6\172k\164\249-\018p;go\167\004\186#jZ\203\211\147\b\205\241\180\244N{k\251\127\003z\"\211\242\228l\2042O\178k\158\004\220\200&<\028\212\162M\185\233N\154\015\027\250pY\208f|\026\160\139\180\188\023\161E#\203\251N\001\250<\203\251\012\154=Z\222[\208\236\209\242~\210/\250[u\002\026\177\188\179\020\168\197x7A\203d\150w\0194\215\180\188\155\160\185\166\229\221\162@m\197\185\195\151;\159\221n\152\161\162\018\183\002+]\131.\220\173E\022\144\135KD\022P\137KE\022\016\139\203D\022\232\247\\.\178@\029\186Bd\001\241\184Rd\001\r\185Jd\001)\185Zd\001E\185Fb%H\027Jd!mh\145\133\180aD\022\210\134\021YH\027Nd!m\136\254\149\000m\180\162\127%@\027\173\232_h\231\163\021\253\011m\129\180\162\127\165\160\149[\209\191\208\014J+\250W\138\234P\244\175\020\213\161\232_)\170C\209\191RT\135\162\127\161e\157V\242\175\012\244Q=\239]\185\015\167\014o\195$\241y\164tz\135\153\165$\1282\127U.\160\164w\138\2178\179\157\253\242\0051^\221\145\211/9\221~X\230\129L\230\208:\128\222~I\230\001M\231\208&\132\142?\029\243\000gs\176\n\192\227o\197<\176\249\028\171C\236\237\199a\030\216b\1425\001\246\246k0\015h9\135\218\016:\254\252\203\003\\\205\193.\000O\191\247\242\000\215sp\027\128\199\031xy`\155\0256Y\135\181\230\229!Y\207\177\ti\140~\137\233g\222\030\030<%\r\210\157<x\230\1933\210$>:\247\2089i\148\214C\023\030\186\160\205\226\161K\015]r-\227\225+\015_q\1413\135\215\030\188f\154\199\1317\030\188\161\222\242\182\185\030\236\169\031\203\230-\229\145\020\245\027\134\148\250$\205y\016C\203|\154a|\137a\229>\2032^\197\176\n\159\229hC2\164\210'\181\\{2\180\202\163\165k\174Y\025Z\237\211\018\166y\025V\227\179R\166\149/\155\227\245\246\219q^3{\180\140ig\134\150\006\180\156mi\134\152\005\196\130kk\134\151\007\188\146km\134W\004\188\138io\134V\006\180\154mq\134X\005\196\134ms\134X\007D\197\181:\195k\002\158\166\253/jw\143g\216\190\024\181\189G\181l\191\140Z\223\163:\174\143F\237\2391[\174\191F\n\1523\1795\215w#\017x\204\132\239\199\145\014<n\202\246\233H\t\0305c\251w$\006\143\250\144\251\247(<\173\206\238\237z\232.\227\r\155p&\149\213\001\190\237N\231\203\219\249\170\005N\019p\206\206\028\135\139}\"I\005\164A31\142\0143\215\247\021\195}=\145\244\208\181=\253\244{\193\234<\252\144\233\146b=T\189\235\134\003-/q\031\178\190\147\022\213I\027\178\022TJ?\137\249\232\187\218\237\219pY\241ss<\012?\222}\185\244\127\015\029\254pCm\184Nu\248\247\199\012;\249\151\249\\4O$\250pk\205\231\206'\200\253\238\181\192\181'e6{\229\209\231\228\012\145\199\217\240\1475\159\014\2319f\221\166k3\218\220\015\250UU!\181\231`:\167{\252R\228?=\2093\224Y\168\196\156C\019\158\141Z\206\133\218\245\189\209\025\214]\131\216\183!\130\146\189\185z\174\"\249g\018\247\248Z\020\218\216\000|.<3fIC\242\185\241\236X);\247\198\000\249\241\012\185E\202\0009\242,\181\162\165\243e\248\253H\216\186\197Zj]\134\236\181n\145\200\173\203%\238\241\211%\173\203\230\1943\147-j]67\158\157|Q\235\242\249\241\012\021\162\207D\012y\150\202e\254\015\n\231\219\170\164\\\237\015Jhh\166\011\217\184\147r\215\253\173n>w\174\159\186\247D\208m\023L'2\252\138\195g\215\015[\183e\023\192Sl\186\251\174\255_\017&\211q\184\207\206\170~\128\236\153\183\245\155's>>\021F\200\171\196c\250\006\243sr\0075\024\232\227\161ih;C\003.\150\229\184\t\1663\184\156\142\238\143\187\213\1514F\150k\145z[\143\001\234(\147\024\245M\237zu\030\134\159\165\191\253\160<\180\148\138\237-f\130\233\004\246\195\146d\156\153K\r.\017\011\1378\1732=\185\2222SYFZJ\154\151\148U\156,T\185o\171\022\171<\146\017\201\175#T%w\t\220\236\202\239\246K-V\191\183f4o\005\207\134\017}n\2174\175\180Q\175[`\196\137U\185\200\004\227\253F\157~\206\151\2296*\166\0278\168\191_0\144D\218\149\155\178\006\227g\149\198\234b\193\212\185b:\004\235v\227/\000\r6\194\017o\222\027VL\159p\190\244{\015O\255\"t/\241{\215p\143\135\198\215V\014\255\029\004EU\201\225\137\015C\250\189C\024\215\221\186\225\137\1460\193\244_\230;\015\213\221\237GG\153\">\202\202\188\184\175\186\251\251\207\176\2493> \195\238\194Tw\239\030'\176\"\244\238\198\211\224&b\239\238z\028n\192H@;\171\144\001|\022\209\206\171\1408\254\238h\183e\199(\188\190\251\212Mvq\248\221\131\246\238rr\023'\131\239\174\178\253Q\189S\156\199\165\026\137pw\139]\215\235YD\222}\224x=l;\025z\151\251\223\238\028\203\240c\224;]\148\150\179\250\024\230N}=\203\025\184\203y\216\138\1485T\2235|9\253\232\225\022P\188\202\238b\254\227NG\226!s\183\175\245\204\141'\159b<\127\238R\245]\210\231\238p=\031;+\230\228.\235\238`;3\190\204\243@\135k<u?\215;\238\187\179W\029!\168\223\2279\r7\188\250\165\166\191/\234 6]\147L\216\235\193\200zh\210\135\213}\028\156\205\178p\221\201\216|\194\218n\223\217\193\238\002Nq\183\223\rkr2\182\188\219\239\231\237\167\238*\215G5\129\251\133\190\005\232\250Q\204\222GN\151\024\188\185\231\228\250\217\175\001\198\208jB+\025\166'\216\240\246\218\245\212)\177\019m\250E\208\243\173\241n7\014\001J\221{\183\233^\226E]\223N\155#@\219\245\251\231Fu\231K\223U\217\238l\198q\238\211\217\190R\250\252\000\149\218\132e\237\174\251>\174\2238e\001-\229h}\164|9\030eb\198\017\141\250\188\012\017\020O\201Y\202\166\219\1614\n\1420^\183\228\t%G\152\014,\243\140\138c|\168\235\225\178\131\156\154\173\179N\157\020 4\028az \141%(\142\160!\\s\240\243\166s\176f\r\219\020\187\171\006x\203\225\251vPf\231\206\128\227xN/-\179\005\148\150-\136\002\229v\172\167\236:Ph\151\240\181z\220\247\2354\135\015@Jy\157\159>\251\254\161\223\248\248\220\169\003\208\187c]\196\030w\221u\015\024\188\135\028\247\160Y\028\235 \231]\007KS\242\t\244\221\004p)\199:\136vn\003\253\220\213@\142\159\000\207\186\199\237\250\027\143g\189c\211Y\148\031\214=\134+\179\231\183\157C5\197{\136\002}\130c\029d\184\216\204\195Y\223p\234c\135\202\208\242ZBm\208\178\174q\185\030\014?\128\144\128v\006\240\148\031n\212\016\190\158 \139\245\136\175\014yP\203\250\195\167\250\252\025\238\248\242\020\214%N\199\243\240\002+\160\148|7\178CU\197\186\196\241\239~\150\140:\182\150u\137vw\133yb}\162\159\186?\222p$\012\214+\134\136\188\175^\196\225\007\142\241\183`\255FYc=\227[}\253\244\021p\000}okQ\207\214\221~\218\247\168\135\137\231\176\0253\188\233\250\190\255o\239\233pD\237\188\247\237\164\195\189\175\0313,1\132\207\135\007\184$\1929\128K\003\156\006\184,\196m\0000\015\128\031\000W\0048\011pe\128\235\000\174\np\223\000W\007\184?\000\215\004\184\011*\176\n\128\191\001N\007\184-\192\153\000\247\023\192\217\000\183\0038\023\224\246\000\215\0068\254\242u\218\132\n\220\003\131M(\193\003\178\024j\240\np\161\006?\001.\148\224\022Tu\019j\240\004p\161\006\207\000\023j\240\002p\161\006/\b\024\138P\161*\012E\232\0160T!Pu\019\170\240o\030\215\135v\253\\0\222\031\169$\192}\166\000\152\006@\208/\168,\192\001\249\171<\192]\175@^\170\b\144@\r\170\012SFY\172\194\186Ae\174\003 py\213\0048\208Y+\021\224\128\135*\029\224\142\000g\1946A\005\177\001\016\232Z\185\000w\0062T-\001\130\164u(D\224\163:\020\162\249\005\238\156\164:\148\"\016\142\014\165\136::\029j\0178\149\014\149\136\236\133J\188\\P\237\132R\004]\167\014\149xF\213\024J\017\012\203:\148\"\152\135hM\221\020Uw\168F\208\187\235P\140[T9\161\026\015\192\161uK2\201\003M(F0\t2\161\024?@\022M(\1973\240,\147\017 2\025\138\241\1282\025\170\177\003mmJ\226ZY\003\160\021Q.\000\214T\023\168@\161$O\160\0037\164{\004\253\168\209\004\136\2106\004\153\001\164%\200\028 \029\025gP\234\161.\029\000\2185\173M\144\207~m\201\028?/\183\205ne\158\007\203\207\227u)\024\160\244\139L\030\207v\031\221\229yo\202\221\144\201\156\144r\132\199\237\169\145\144\206\t\025Kx\222\161\026)\217\156\146s\148\231M\170\145\145\207\025\005\203x\220\167\026\025\197\156Qr\140\199\173\170\145P\206\t\021Kx\222\173\026)\213\156Rs\148\217\r\171\145R\207)\rGy\222\179\026\025\205\156\161|Fx\221jj\194\245\156\162y\202\236\214\213\212\142\030\203\240\172\217\229\171\169)=\150eY\179;XSkz$\199\147\158W\177\166\006\245H-K\154\221\200\154\026uNj\215<i~1kjX\143\150\176\180\249\253\172\169m=V\202\178\230\215\180\166\246\245X\025\203\"\183\181\238\r\237qs\208\210G\142\155\250\220\002\1807\185\187uov\143]\130v\015\175p\221\155\223#W\160\253\191\216\148\011\159\\#\029p\220\210\2316X\014\028\187\242\217\n\171\130c\215>[Cupd\239\154\215P\247\199\157}\235.j\215\027\016\131\187l\1570X\237\0008e\192[\004\206\024\176E\224\156\001#l\193`\191\016\184d\192\127\016\184b\192\027\004\174\025\240\005\162\027\006\221\001\172\226\170\0255\160\230jn\007\192\134\003\239\001\216r\224\003\000;\014\012b\195l\2212h>\130\205\018N\205\2247 \178\132\147\243\0255J\194\234\249\n\192\156\158\193C\184Y\194\234\249\012\192\156\160/(\207\156\160Q\1509=\187-\202\006'\232OXw\156\160\183\016\205Izx\186\130\005\179\146>\161ls\15460#\156\168AT\148%\156\168\175\168\178[\182\201A\174SO\213}\247\222\239\227\238\240\027\005Y\154px\252H@\150\166\028\001_\188\207\210\140O\001\223x\207R\1742\127@\205\167\\e\030\250\169\223\198\157\250\237\1893\162q\213z>^#\180~\222\249q\188lf\227\223\006\252ZG\150%\001T\171\238\180\005\203\181Y\150\006\232\143N#\195Y\000\181\234\003\200!\203\195\236v\155\175+\002\023\001\248\175>\195\253T\012e\163\012\224\221\2457\130V\001t\211o\235\002h\029@\251\255}\005\027-Y\191\150\224\131]\135\202\166\002\228\246z\222\163\220\234\000\187S\031\176\206L\128\221\171\195\001\217\181\001\246\160\250\146!\195.\000\255FcB\214\006\200+z\2379\203C\245~\138-\156\135\n\190G\017\255~\007\207\131\136,\015%\220\239\179Zd:\212\240Y]\1933\208Y\030\138\248\226\186oT\194P\195\223\221\001\1692\015\005\220\246\222\001z\225<Tp\247\241\001\243\016Jx\243\221W3\192\134\n\238\255A\161zPLs\248g\235\167F\153\183J1\142\b\159\195\237\012\019\2174\202\138\132\001k\240\168nV\164\012\250C\129Q\175\200\024\180=\"t\206\160A\167\\\020\012\246\207\006\154.\185\140\b\248\1383\175\192o\021eE\205\154\239 \190a\240(+\138\193n\143(V*4\003\2239d\2200\232\189;\028\145u\203\224\015\002\2221\248\175#\172\246\150\129\127:\148\251\146\211\249\t\1629\161\159\209\132\173\228\132~AB/9\161\131~\165\228d\222\2072O?\000\207I\253\188\129\149X\150,\222\b\012N\237?0?\156\216\127\220\t\021\151\211:\b\208JN\235G\004\230\148\142\002\129\146\019\250\006\184g\201\169\252r\238P\tY\145\163\177\187l\249\234\227\209\213\154G\131\150\1728\141\255\128\031\184\200*N\227\029p\229\138\147\248\015\168\146*g\243\001\192\156\192;\004\030\022\000\031\231\165\184Qn\216\148\200\152M\137\172\170D\2340.an-roC\003&7\"y\236?1[\137\236\161\007\131\220~\157\248\250\209\239\245\\f5\180\003\191q\145\213\t\001k\135\134\176:%\224\015\181\223!tF\208[\228}uN\176\214\237`>\n\130\222\128\014\163.\t\244\027A+\002\253\131\171\162f\178\000\193\r\001_\192;\226Y\173\b\246\231h\001V\211\026V\1603\172\r\193\1587\029\152\031\214\150\128wj\143&\249\181#\232=Z\021\172[\218\208p&\220P%\031\174 \203\r\021\242\031\208Q5T\198g\181G+\164\r\149\177B\245\214P\025\127\162L\020L&\208\250vCU\252\215\017\185tCu|Rg\228y\r\021r\031\154\192\224\182\161R\254\216\224\250\160b\006?\178\1535T\203`\188k\168\146Q\029S\025\159\207\b;\019\230\237=Q\219}u\182\031\162\185\231A3\245\024\162\207\157:L\183Zx\195*\161PP2\149R(\200\174\202(\020)X\229\012\022\217-(\246\003\217-\025,\178[Q\236\223\200nM\177\006a\027\138E\011\001J1X\212\020\154bQ\247\174\012\131E\245`)\022\245\171\2021X\148\223\150\193\130<hF\188\023\212?hF\190\168\231\209\140~\209\234\166f\004\220\",#`\212AiF\192\007T\017\140\128\209j\161f\004\012~\012>\211\140\128\247(\015\140\128\209\164Y3\002\254BXF\192_(\191\140\128\209b\161f\004\140\194@\205\b\024\205\0225#`\180\228n\024\001\255AXF\191p04\140\128\2070\023\140\130\161aF\017\234zR{\245\199*\196i$\206\175\020\176\148\196\130\249c\212\242w_Mjx8\160Cz4\134\235\2046?J]\209\214\173\177\002\005\150\201q\253\n\026\150\012\163$}\189\238;\148'\235\203)>\250[_S\243\023\194\031\171\179\243\2217\155r\248\199sQ7|:\199g,\254\254\218\208h\127\190\248ks>\129\241\224\2093\r\143Sp\028\186\204\236\157\002\026\206\214Xwv'w\025n<\015\219j\143\000\225\216\135\170}\007\243\031~\133\245\156\180\030\169\137Hu,\181\025\169\169HU,U\141\212L\166nX\174\030\185\185\200=\178T3R\011\153\202s\237\200-\017\183_\001<]@%\187\145[\201\\\190\150\219\145[\203\\\182\154\251%\136\027\183\137p\217z\238\247Nod%\147\217\202\234wRo\\\029\225\242\228l$\027DV?,-\031i\022\209\134\223\208bh\197Hs\136\246}ei\229Hk\017\237\199\177\205\217o\195\014\188\004\186*\223\022\163\151&\208K?Aj\163\139&\208E5\224\141\254\153@\255\188\000\222\232\155\t\244M\011x\163c&\2081\251\229x\1588ze\002\189\2427\224\141\030\153@\143\220\002\145\141\222\152@o\252\224y\249\232\137\t\244\196a\157\156\161\141>\152@\031\252\226\139\151\143\254\151@\255s\023Vg\249\232z\tt\189\011h\135|t\190\004:\223p@\138\161\141\206\151@\231\251\003\146\027\189/iqr|\249F\239K\161\247\253A\229\027\0290\133\0148\236\0230\180\209\255R\232\127\195i>\1346\186_\n\221oX\193ch\163\247\165\208\251\134\019~\012mt\190\180\192\180\015\1507\250^\n}\239\200\014\134\249\232z)t=\199\246\211\249\232y\233\211\243\198\011\225\193\012\231\223=\2268)\026?\171q\202\130\217\142c'\211g5\206Z0[q\236t\250\172\198y\139\192\222p\244l\250\172\198\185\011\166\0319v>}V\227\236E`\179\244b\250\172\198\t\012K\127\204y(\189\156>\171q\014#\208\217z\175\166\207j\156\198\bt\182\226\235\233\179\026'2\018\157\173\249f\250\172\198\201\140\192g\235NM\159\2138\157\145\232,_O\159\2138\175a\249\195@C\153f\250\172\198\169\r\203\028&B\148i\167\207j\156\221\176\204a.D\153n\250\172\198\249\r\203\188M\135(\181\157>\171q\146\195R\185\006J\214\211g5\206rX\226'\155f\146L\159\2138\209a\169\154\167\166\211g5\206uX\234\133\167f\211g5NwX\170\229\169\249\244Y\141\019\030\150:N\144(\183\152>\171q\210\195r\127\243\212r\250\172\198y\015K\221\178*L\170\233\179\026\167>,\245\131\167\214\211g5N\127X\2340Y\162\204f\250\172\198\t\016\203\252\226\139\170\166\207j\156\003\241\137^X!\234\233\179\026gA\188$@\227\152\233\179\026\167B|\178g\142i\167\207j\156\012\177\204?|\162n\250\172\198\249\016H\148-k;}V\227\140\136O\149/k\186\158>\171qZ\196'{\226\152\201\244Y\1413#\158\185\227\152\233\244Y\141\147#\158\185\231\152\217\244Y\141\243#\158y\224\152\249\244Y\1413$\192\252\224\168\197\244Y\141\179$\190\239\230\006\219\180\156>\171q\162\196'\202\245\250i5}\006f\177~\239\151\021\191\230\247\209\157\251d\215\229\242\"\t\177\023\240[\203y\145\134\208mg\182\000\155\133\216\022\252\030|^\228$\007\155\238c\003\192E\b>\031\001\178$\200\235\te\161\n\177fs=\025\148\135:D\2558\005\160M\b\237\215\254>\000V\133X\221i\000\213!\212\014/)\242X\019b?\020\202\129\r\161_\224\247\202\243\194\209Fs?\000\219\134\216?\224\232Y^\018\229N?\169\003\224D\188\191\175\246\003\129\137|\191\143\bJ\212\187Q\191\192\178~^\018\253\238\142\187\029\192\018\249\238\187=\202\004\017p\215\002$\145\175\251\000M\\\018\237*\176b\159\151D\187\202\162f#\210=\030\000R\211F8\162\202\"\202=^A\215T\018\229*T*\"\220\211Q\157\000\150\b\023\157\140\201+\"\\\007\014\007\230\021\017\173B\146\173\136d;\131\160D\178W\208\227WD\175G\005z\241\138\200\245x\252\1312@\228z\004\151\016\242\138\232U}#\171T\175\1683\168\136^\143\160]+\"Wt\167 \175\136^\221\tA\r\205\234I\129>\177\178T/\200.Ql\167\144\n[:2\129\014\188\238\247\227\250i\197\225G=r\187\003g|\243:\t\177\224\192A^\167!\242\130\144Y\136\252\141\144y\136\252\027!\139\016\137\206B\230u\025B\251\152\r\200\181\174B\236\tY\173C\228\025!\027\130\220t\224\132W^+\146YX.\029B\141\250AfM\136\253@Vm\136l\017\210\133\200\191\148B\178jIsAlC\228\186S\200\011\026\"\215=\172\218\134\b\246pE}|C$\251\173\128w5D\179\168\193\026\162\217\031\132$\146E@\162W\208c6D\174\029\000\018\181\130\137@C\148z\005@\162S\133JCT\138\002\137\134\168\020M3\213SM\227\131-\195\239\n\188\031\254\203\b]\223\254\204\208I\128\190\029B\152\192\201\237\207\012\156\006\224\219\t\132\t\156\222\254\204\192Y\b\030\159\217\153\224\217\237\207\012\158\007\240\241\137\157\t\157\223\254\204\208E\136\190\221D\158\208\197\237\207\012]\006\232\219\211:\019\184\188\253\153\129\171\016<>\1713\193\171\219\159\025\188\014\224\211\147:\019\188\190\253\153\193\155\000>>\1673\161\155\219\159'z8hw\238gPds\153\219|\176\227\246\207p\222\142\229\176\027\029v\220\252\025\014\222\241$v7\198\142{?\195\017<\150\197\238k\217q\231g8\139\199\145\244\137/\213\184\2413\156\202\227Xf\195\179\198m\159\225|\030\199r\027\196\027\247}\134\179z,\143\229\140\155>\195\153=\150\195W\161\0277[\135\211{\028\139\207\158\027\183Z\135c|,\233\135g\141\027\173\195\129>\142\197\234\194\141\155\172\195\193>\142\179\229\019\0267X\135\019~|\173\003\218\184\193:\028\246c\211\002\165\026\183W\135c\127\028k\199\147\198\189U\003\252j\207\147F\1992\192\177\014<it,\003\028\139=T\226F\1832\192\173\142@I\163_\025\224W\159|\246F\1832\005j*@\027\253\202\000\191:\243\164\209\169\012p\1703\208\250\232V\006\184\213\133%\181\163W\153\006\021\011\208F\1912\192\175.|\185\218\209\175\140\134\137\001\222\232[\198\160\212\248\niG\2392\192\187,`\141\206e\128s\177\231\134\218\209\181\012p\173o>\161\209\181,p\173-\200\222\232[\022\248\214\007`\141\206e\129s\253\225I\163wY\224]\127@R\163w\217\187\012\253\237Mf\181Z\175\167\207j\028^9\026\183>\174\147\233\179\026\007X\150\199\173\230\235t\250\172\198A\150#r;%:\155>\171q\152ex\1831\153\018\243\233\179\026GZ\134x\027^)\177\152>\171q\168e\136\211\200L\169\229\244Y\141#.G\229h\213\244Y\141C.G\227+\181\158>\171q\216e\136|>\155\233\179\026\007^\142\247\195\018\213\244Y\141\163/CdU\163\167\207j\028\127\025\218\150M\206L\159\2138\000\179M\1933\237\244Y\141\1310\151\"_B7}V\227@\204\016w,\175\157>\171q,fx{\142g\214\211g5\014\199\012\239\192\242\146\233\179\026\135d\134\199\157\1350\233\244Y\141c2Gc\165f\178\233\179\026\199e\134\248\201\2303\159>\171q`f\155\144g\022\211g5\142\206\012\243\204\242\202\233\179\026\199g\142\199z\133\169\166\207j\028\163\025\226\133\229\213\211g5\014\210l\017yf3}V\227@\205\165\200\151QM\159\2138R\243I\242T=}V\227h\205\166\201\215\143\153>\171q\196f\152\150'\218\233\179\026\135m\134\200\157\1341n\250\172\198\129\155\161}\179\201\181\211g5\014\221\156\239\179\249\180\235\233\179\026Go\134\248\193\019\147\233\179\026Gp\134\248\135\229\165\211g5\142\225\028\143O0\155>=qx\203\211\237\180:\171\200o\020\020\235$\004\1307,\139u\026\"\rBf\004\185A\208<\132Z\132,B\228\001BKb\020\166_\133P\240\158J\177\174\t\018\000\155\016\216\"\164\n\145\031\b\169\t\2427\130\154\016\n\203nC$*\186\011\1290\2416D\130\135{\138\132\bt\135\144D\161;\b%\018\221#$\145\232\001!\137B\193\253\203\"\161\nE\245\148\016\133\030\001\144\232\243\019\153$\250\252\011!\137@O\bI\004z\130P\162\2083B\018\129\162gF\139\132(\244\130\144D\162\023h\148h\148_\r/R\"Q\240Vn\145\018\137\254\141\144D\161?\000H\004\250\007\153$\002\253\131\138\158\018\133~@hI\161\195O\b\0034\145)z\208\180\200\134\231\248\175F\221\174\222\169\158t\152\239\205\238.\128\149\b,\237\016+\021X\031\221\030\1762\129e\021J+\023XN\003R!\144\254\168\211\014\208J)-\176\179Xd\149\148\216\166C\137\213\002\237\162\206\128\213\b,\003\246\221\138L\t\172\159\227\183\0054-\150\012%f\004VwBMf\005\214\025\166\229\004\214N\161\022k\165\028\030\192\158d\145K.\2467\212G.\249\152\253A\153\204%'3\224\252D\145KN\246{s\252\027\208$/\219\194\196$7\219\253t\192\165s\201\2056\238\007\209$?\251\011\156=)r\201\205\212\017\149Lv\179#JL\13740\015\204%73?\176d\146\159\237\213_\128e\197ZD\245!\249\217\225\248m\000Mr4\251\007\022\173X\203\157\193\022\208$O\251\141\142\134\020\133\228iGD\146\028\237\130K&9Z\171\192\208Y\020b=\194\196Jy\176\000\142VH\142\246\233P\133H\142\214\207\135~\192\136VH\174v\130y\148<\237\236~\144B$W\251r?\127\000Mr\181K\247\r\188\166\144\1994\212\139\020\146\179u\223\168\254[\185\023\225\015\239\020\229Z\028f\144\207\148\146\171\245\234\0073\138Rr\181OX\145\165\228l\219\014\021\141\173\017\211\239\241\\\186\227a\252\237)\2385\142\162Z\191\127u\151\205\246\250W\183\228\160E\209T#-\1294\173\029K\172Gb\138\137<\175\025y\025\228\025\158\167F^\142y\027\158\168Gb\001\137\150\231\153\145Wb\030H\208\142\196\n\018]\199\242\220\200\1711\143\165\181#\173\129\180\150\229\169\245\200S\144\247\193*F%#\207@\222\134\231e#\207b\030 \230#\209A\"[\157\170\024i-\166\253\230+\230\182c\\\212\216\147\000ot\165\026\187\210\150/\223\232I5\246\164\029\207\027=\169\198\158\180\003\196\209\149j\236J{\190\128\163'\213\216\147\014<o\244\164\026{\210\001\212\232\232I5\246\164#K\027\029\169\198\142\244\201'7zR\141=\233/\182>\245\232I5\246\164\019\155\158\030=\169\198\158t\230y\163'\213\216\147\206|\207\164GO\170\177']x\222\232J5v\165\011Hpt\165\006\187\210\149\165\141\158\212`O\250\226\147\027=\169\193\158\2447\207\027=\169\193\014\241\195\210F\127h\176?\252\225\147\027\253\161\153\201:v\018c\024\215\199\207j\028{y\230m\172\166\220d\250\172\198\241\023pYj:}V\227\016\204S\rK\205\166\207j\028\132\001u\195r\243\233\179\026\007b\158kYj1}V\227P\012\168|\178\229\244Y\141\1951\207u\029G\173\166\207j\028\146\001\149c\214\211g5\014\202<\179e\169\205\244Y\141\2272O\253`\245\164\166\207j\028\154y\234\134\165\154\233\179\026\007g@\229\185v\250\172\198\017\154\231\178\021\236\166\207j\028\162\001\2437[O\237\244Y\141\1954\207e\169\245z\250\172\198\145\154\167r\135K\134\137\192\248Y\141\1315O\221\177\212t\250\172\198\225\026Pyn6}V\227\144\205s\247la\243\233\179\026Gm\158z`\169\197\244Y\141\2276\160\242u\\N\159\2138x\243\220#\199\172\166\207j\028\190y\230'\155h=}V\227\b\206S\255bk\184\153>\171q\016\231\169'6U5}V\2278\206S\207,\213L\159\2138\146\003*\219\177\213v\250\172\198\209\156\231^X\170\155>\171q<\007T>\217v\250\172\198A\157\2312\135:\134\025\195\248Y\141\195:\207\252\226\018m\146\233\179\026Gv\158\2507KM\167\207j\028\221y\234\015\199\204\167\207j\028\223y\230\0316\209b\250\244\212\225GSw\221\193\169~\0180\189V\170\215\235\132]#(\135\127O\176)\192\166\0126\003\216\140\193\230\000\1553\216\002`\011\006[\002l\201`+\128\173\024l\r\1765\131m\000\182\161\216d\r\176\138\193\162v\211\012\022\181\133a\176\168\206,\131Eu\230(6Eek\025,([\178\230\176-\000'\028x\015\192\140\130S\160\246$\227\176(\0239\007F\185`4\156\130\182KJ\014\139\0123\"N\129\211%\140\136S \138\132\017q\nD\1450\"N\129#%D\196=T\003,#\226\0208]\194\1368\003\194L\024\017gH\152\140\1363P\191)#\226\012\212Y\202h8\003u\1502\018\206@=\164\140\132sP\015)\163\224\028\212C\202\b8G\245\192\b8\007\157{\202\2327\007\154L\025\253\230\168~\025\253\230\168~\025\253\230\168~\153N\184@\245\203\232\183@\245\203\232\183\000\029D\202\232\183@m\193\232\183\000m\1451\250-@[d\140~\011\208\022\025\163\223\002\180E\198\232\183\000m\1451\250-A[d\140~K\208\022\025\163\223\018\213\025\163\223\018\213\025\163\223\018\213\025\163\223\018\213\003\163\223\n\213\003\163\223\n\232,c\244[\001\157e\140~+T\015\140~+T\015\140~+\160\157\156\209o\005\234,g\244[\131:\203\025\253\214@;9\163\223\026L7rF\1915\208Y\206\232\183\006\245\1553\250\173A\253\230D\191\201z\253+A\241@N%\156$\1689\168\132\0194W\204\137\132{(\152\022\228\154\177\139\242k\024,\144{N%\156\012?\154\206\131\029\007F9&\"N\134\159Lg\177\005\021qR\002\167+\168\136\147\n\b\179\160\"N\144\224\139\140\193\130V.\168\136\147\006\229\129\1368CAjQR(h\227\162\162P\208\196EM\161\168n\027\n\005\190Y(\n\005\174Yh\n\005\158Y\024\nEm`)\180\001\194-\028\131\005\186-Z\006\011t[\018\221f(\232-\019\n\0052(S\n\0052(3\n\205@%\1489\131\005\149P\022\012\022U\002Um\002\244UR\213&@_%U-\138\229K\170Z\020\202\151T\181\168'/\169j\0190\174\150T\181\168\207/\169j\209\242@IE\139z\252\146j\022u\248\021\149,\n\157+*\217\020\180VE%\139\130\236\138J\022\197\216\021U,\n\177+*X\0205WT\175(h\174\168^Q\204\\Q\189f\160\181*\170\215\012\181\022\213+\n\196+\170\215\012\181\022\213k\134Z\139\234\021E\247\021\213+\n\238+\170W\020\219\215T\175(\180\175\169^Qd_S\189\230\160\181j\170\215\028\180VM\245\138\150\011j\170W\180ZPS\189\162\197\130\154\234\021\173\021\212T\175h\169\160\166zE+\0055\213+Z(\168\169^\209:AM\245Z\160\214\162zE+\n5\213+ZP\168\169^\209zBC\245\138\150\019\026\170W\180\154\208P\189\162\197\132\134\234\021\173%4T\175h)\161\161zE+\t\r\213k\tZ\171\161z-Ak5T\175(Bh\168^\209JFC\245\138\0222\026\170W\180\142\209P\189\150\168\181\168^\209\138GC\245\138\022<\026\170W\020\")\162\215\188\143\133\191\192\189\164R%\020\158\b\240\148\194S\001\158Qx&\192s\n\207\005xA\225\133\000/)\188\020\224\021\133W\002\188\166\240Z\1287\020\222\bp\162\235<\145ZUS\184\212\170\134\194\165V\181\020.\181\170\163p\169U[\n\023ZUS\189'B\171j\170\247DhUM\245\158\b\173\170\137\222\011\1806\160s\n\005\189\170.(\020\244\170\186\164P\208\171\234\138BA\175\170k\n\005\189\170n(\020t\149ZQ(\232*5\209s\129\226rm(\0205\129\165P\212\004\142BQ\019\180\020\n\234\213\172)\020\212\171!\186-PHjR\n\0055`\168^Q\156i\168^Q\156i\168^Q\156i\168^Q\156i\168^Q\156i\168^Q\156i\168^Q\156i\168^Q\156i\168^Q\156i\168^Q\156i\168^Q\240h\168^Q\240h\168^Q\240h\169^Q\240h\169^Q\240h\169^Q\240h\169^Q\240h\169^Q\240h\169^Q\240h\169^Q\152g\169^Q\236f\169^Q\236f\169^Q\236f\169^Q\236f\169^Q\236f\169^Q\236f\169^Q\236f\169^Q\236f\169^Q\236\230\168^Q\236\230\168^Q\236\230\168^Q@\230\168^Q<\228\168^Q<\228\168^Q<\228\168^Q<\228\168^Q\144\227\168^Q\144\227\168^Q\144\227\168^Q\144\227\168^+ BG\245\138\182\138\029\213+\218)vT\175\021j\002\170W\180\167\220R\189\162-\229\150\234\021\237(\183T\175hC\185\165zE\219k-\213+\218Nn\169^\209nrK\245Z\131\214j\169^k\208Z-\213+\218\162n\169^\209\014uK\245\1386\168[\170W\180\021\217R\189\214\168\181\168^\209\166eK\245\218\160&\160zm\248z\173\232\129\221\225@/\015\165zmJ\000\165zmj\000%z\189\029\"f\1619\133&\000ZPh\n\160%\133f\000ZQ(\170\215\154BQe5\020\138*KQh\003\160D\175e\130\234\213P(\170WK\161\168^\029\133\162zm)\020\212+=\160[\130\208\172\162\199sK\016\154U\244pn\t\182++z6\183\004\219\149\021=\153[\130\237\202\138\158\203-AlX\209c\185%\136\r+z(\183\004\219\149\021=\147[\1300\178\162Gr\203\020\181\022\213k\138\154\128\2345EM@\245\154\162&\160zMQ\019P\189f\168XT\175 \136\170\232Y\220\018\004Q\021=\138[\130\200\168\162'qK\016\238T\244 n\t\246\202*z\014\183\004{e\021=\134[\130 \170\162\167pK\176WV\209C\184e\142*\139\234\021\004Q\021=\130[\130\200\168\162'p\203\002\213+\213k\129\234\149\234\181@\245J\245Z\160z\165z-P\189R\189\130\200\168\162goK\176\171U\209\163\183%\b\162*z\242\182\004\187Z\021=x[\130]\173\138\158\187-\193\174VE\143\221\150 \138\171\232\169\219\018Dq\021=\232\217O\146\192\179\180\021=\233\217O\147\2224\000\167\020\156\189Y\000\206(8\007o\185V\244\176g?Yzk\001\184\160\224\242m\003\192%\005Wo\191\001\184\162\224\250m\011\1925\0057o;\000n\024\240\175\244m\007\164A\143|\014\248\236m\007\244A\143}\014\248\252m\135Db8|\249\182\003\206J\143\127\246\147\158\183o\000v\020\156\188\253\r\192-\005\167\224\181\206\138\158\255\236\167>o\199\189\003\191\221V\209C\160\253\004\232Mi\160pz\014\180\159\004\189A4\149xR\189Y\224\016\244,h?\n\189\185\159\031TV*\243,E/\002W\244\132a\141\"\022z\194\176F\017\011=aX\163\136\133\1580\172Q\196B\015\024\214(b\161\231\011k\176\153T\209\227\1335\nn\232\241\194\026\0284\173\250e\138\253\209vm7\\\r\159n\003\223n\159\222\031\165\024vP\255+GL(\241\250\233Ngs\234>/o\151S\167\014\031\215]\159\007s\220\r\143\202\141F\254\211\255\252\143\255\235\223\254\199\255\246\182N\135\023\209=\131\169hp\163v\237\018\171I`5\003\229\027vW\003\242\186_\245\243\201y\164r4\205@\211\0046\n`C\191}w\151\205\219\230x\220R+\189\235\249V*`\197\254\025~F\237\164>7\212\136\n\141\212Q#c\158N\238r:\182;\2477\155;\165\203\176\158\154\133\134\205ux\138\150\228\179\b\204)d\206\253\217\b\197\205\0033\026\153\0253sQ\029\147\153\",\155\145\173\128\246\171\002+6n\229M\029,\155\169\1966\161\170\0290wr_\189\1998\251\230\152<\213\129\145\022\169{w\028L<l\029?\221\1295\232|\131\r\234KZw\248\016\218-\240\152&A\133S\251s_S'\198\237\203\160\237\1554\226\185\031\140\1414\176\129\186\142\015\169\229\203\160[kb}\136h\173\209\1295\212\155L\014v\238\029wK\155*I\003=\246k\136r\174\152vjL`\003\245I\155\161\185\165*\n3\003\251\165\227e\231\206\231\183\223\243\194\221\220\1327\\\135*@\253\210\238,\200Q\005FPo\180\147\186\222\176\221P_\180\027\139\166\221\240b9\169\168\176\198M\164\213\004k\137m\215a\245X9S\2540p\171w\206\178\026\186#\2230\234\158v}\007\206\0203\164\183\002}\201\b5\1485\024S\020\234\155.\215\211\161\239\227~\0245\005\217RI\196\132\\\249\193\184\162P\015u\020=y\221\006\189\184\202\"\15482=w\021f&\151\135\130)\002!f\002GV\168w\250\139\150\163\n\1344U\202\181{\026\171\165\159\244}\244\255\157\233\190\171\192oU\245\146\193\155\188\227\178\nk\031u]'i\1421<h\229Yid+mw\222\240=^\021jTE\212pbt\030\140X\n\245U\023\179h6\023V\017\234\180.R'\028\n\212F\141,\156\186\134\146E]\213\197\157\165\185fh\006uY\151%\217\234\219 \1684\141\186\171\175\201\222\240\027\203\172\173\212\132\158\165cs!\174\239k\003\027\180\151\249\216\029/\003\251|9~\138]V\170\194\012\209\222\2301\215|\193j0]\211\180\243\209\221N\233N\r\221Xg\184\217UX\235\180\015\178\238p\129\006\018\019\184\142\166}\206N\245\127\011\022\194\186\161\029\138\218}\185\227-\228\005&\194\138h\152\234\189\203\239fc\233\024\026\244\168\026u.g\220\031\244f\018\191\143\026\214m\204\207\231\169;^\222\206?\187\190\133v\238\190|{z\015\160\t\133:\000M)\180\003\208\140B\143\000\154S\232\021@\011\n\253\141\202U3X\148\005E\177[dW3XTa\134\193\162\026\179\012\022\229\2151XTg-\197\238@\217\018F6;P\182\132\209\205\014\148-a\132\179\003eK\024\229\236@\217\018F:{T6F;{T\182\146\193\162\178U\012\022\149\141\209\228\030\149\173\161\216\003*\027\163\223\003*\027\163\223\003*\027\163\223\003*\027\163\223\003*\027\163\223OT6F\191\159\160l)\163\223OP\182\148\209\239'([\202\232\247\019\148-e\244{\002eK\025\253\158P\217\024\253\158P\217\024\253\158P\217\024\253\158P\217\024\253\158Q\217\024\253\158Q\217\024\253\158Q\217\024\253\158Q\217\024\253\158Q\217\024\253^P\217\024\253^P\217\024\253^@\2172F\191\023P\182\140\209\239\005\148-c\244\251\r\202\1501\250\253\006e\203\024\253~\163\1781\250\253Fec4\2497\202/\163\201\191Q~\025=\252Av\153v\251\003\242\219\239\151w\251~\031e\152\007\171~\tUu\2309\179t\159\027\192J K\187\011\"\165\144\244\209\237\221\014\1762\200\178}\014ab9\164m@\021\247;\235\136\242}\255\189\024\194)!\231\143\250\233\014\128U\t\153\131%\170!\233\130I\r$\253\028-\")H\218*(\t\rI;\181w0-\003i{\183\007\028\0119\135+\170r\0079\231>{[\148\189\022\187\007l\222\002\251\020\026\254\139D\200\158E\138-\176G\253uD\rU`\135:\245\171\026\128\132\221\233\188\129\245\128\029\234\130\028\170`\\\227\236\204\237'\138\134\205\234\241'\138\b\139\241\141\195u\175\221\240\139e\238\253\240\224$sR\003I\151\190{\127\146\2109Ia\210\230\228\230ies\154\1984w\152gp=g\025!\135\253\210\195\207<\147\030\209J\245\241\182\185\030\236\201Y/Y\143\238D\250es\188\158\251\005Q\159\239\025h\165\226\"\003s\011\253F\217\167\218\237\127N\238\224\022\012HeB\225x$\234\247\242\bZ\024\130\202\140\194\165\177\167\223n$x\228\194eA\177p\180\233w\214\tX\024f\250\213L&\0310\2155E\227\129\165l(\026\143(\165\162h<\148\148\154\162\1651\164\223\b#x8x\148\150\130\219\238\208\011\021\142\029\253\014\020\161`pK\193\210\bSqB\135MZ1:GcJ\149r9\129\131I\197\168\028\143\"\021\163q<|T\140\202\241\184Q12\135\003F\229\139\188\189\252\250<v\135K\215\239\219\244\171\151\215\211\241\240~fys\185\223\022\204\151\018\231\202\143\0142\149\162h<\186T\154A\011\195Je(\190=^O3x>\135[\006\222}\205\173\023s\184cr\131G\171\170\229\138*\rS\253\222\210AiuQn\246\171\1597_\020\186\250:\161$\t\158\1624\240\248Pg\148#\160s\138\022F\147\186\160pi4\169KT\000\228\201uE\025\016[S,\028\127\234\134\130\133\241\167V\\>`95E\227\241\1676\168V\240(T[\202\017\208\014\165\128G\174~c\140p0\186\129\242\151F\187\134\209\191\136\135\014\000\199\200\134\209?\006\231\200>\028#\027\198\0050\152\209\1914\1606\140\250\177F\027F\255h@m\026.'p@m\024\249\227\001\181a\228\143\007\212\006\202\031\015\171\r#\127\001\205\200\031\014\194j^\231\2091Q\213\020\141\199D\2130haLT\138\226\1331Q\205\235\221\156\174\166k\143\167\253\018\162a\210\193\131\169\178L1\240`\170\028WG\210`\170Z\182\r\162\193\158[\191o\212\229\180h0uI\128\197\163\162K\003\1680$\186,\192\142\227\225/\172\127\151\007\012\228\132\174\b\128ppse\128\252\243\248\185g\002\173H\234\176\026\234\000\138\1354\215\004P<69\021@\241 \227t\000\149\198\ng\0020\236\245{A\249H\216\127\247\142\234#\165\206\219\181\161\024Q\027\180\161lQ\175\221&$}\216e\183\161hq\127\221\134\n\196]i\027j\016\246\163\237\163\177\162\157hk\002\168\208\247\1806\192\n\029O\235B\172\216\235\180-\205q\172\203i\250\127\248\220\028\221\1613\221\188\219i\217Ji\214\t\131\238;\030\128N\025\244\135\218\239\000<c\224\246vH\147\133\231\012\028\168\169Y\023\012\248[]\001\186d\208\127T\007\208\021\155\017\148\237\154A_ \186a\208}g\004\208\138Ao\021jL\205\160\251.\t\0257\012\028uJ\205\2182h\21215k\199\160\207n\191\005\240\150\019-\240\249&\225$\014\186\168&\225\020\222wS\b\206I\252\175#\168\241\132S\248\233\bF\214&\225\020\014\251\182&\2254~A\026O<\141\199\250\184&\169\0248\238\187\154\164\230\240R\255\213$\r\159\163h\031\150(6-0\139m\018\205\193\2414\182I<\185}\031O\182\215\230g\191\152~9\158\198M\144\227!\168\221\225a\131\031;W'\223\n\195\171\006\030N\003\\\026\224>\000.\011p\192\153\135\199\012<\028\208\247\240\146\129\135\251\002\1842\192\129\190rx\195\192\195\253\000\\\029\224@O0\188^\224\225\192\2162<]\224\225@\1835\188[\224\225\128\175\r\143\022x\184#\192\217\000w\0028\023\224\206g\000l\003 \0248\178P\128\160\027\200B\001\130\174+\011\005\248\023\192\133\002\004\229\200B\001^PAB\005*\208$Y(A\135\128\161\006w@\132Y(\194\003\178\024\170\208\000\220\163\241f\247c\247\234\180e\183R\155\225\202\175;\029\187K\191e\183\233\250\255\245\177\251\249\220\204\182\189\249T\134\011\191\018\r\184z\191:+\210\128G\015\247v%\026p\140\225\198\174D\251A\133+d\2227\226\1492O#^\021\227\253J\001\179\150\153\159(\197F\230\237\017O\201\188\003\226\233\024\015\150\208D\152Hi6\198\131):\153yBelc<\148b\019\241Ap\b\186i\"N\184\221 b\196\r7\144\024q\1963\226\2291\030\172\155\136/\130\131\154M\019\241\197-\202i\196\023\255B\188\136'^\016\175\137\241`\205D|\241\130jF\199x0\197\136/\130\003\160M\019\241E\139\234\006y\226\249g\175\143\187\183\175\206\254\006\2046\206D\165T3o4\215\211\185_g\137\012\134*\129\012\208\006*\133\0120\004\170\0122@\173\171\0282\208\192\167\nHAc\158*!\005\rw\170\130\0204^\169\026R\208P\165\026HA\163\148R\152\130\026RC\n\026'\148\129\020\212\209+\011)\176\143W\014r`\247\174Z\200A=\187\022\188\229d6\183\243|\136\138\221\006\245\234\026\251\r\234\2085v\028\212\151k\2369\168\027\215\216sP?\172\177\231\160\142Tc\207A}\168f\212\214\158\212x\194\210\237\220\215p>\239\219\237\218\203\230<_\252H\254%\153\175gh+\152\185\173\159\012\235\1853\254\191xlN\139\199\143\227\199I\237\223N{\016\149\233V`u{\016'\025F\144\209\149'\147@\018^\2271)&\t+=&\1314\188\253\216\152\028\179\224N@c\n\200:w\127\207H\229\156Tb\210\160\151\025\173\154\211*Hs\195y\171\025\173\158\211jH;t^\1315sV\131\235\030/\024\026%4\179\180lh\180\208\212\221\201#f\030\209\b\141\237\243r\143g\133\230n=^\225\241\156\212\224\030\175\244x\173\220\230\030\179\1543m*\249[t]\213f\146\2311\244\212\167\231\178\0152\0062\223@!z#\195\207}~)\250%\195/|~%5\024C/}z-\183\027c\160\242\r4\178\2152\006j\223\128\018\253\151\2257>_\139\250\137\030>o\172\017\021\196\024H\003\0036\162!\198D\022\152p\178\138\024\011y`\161\149u\196X(|\011n-*\1371P\006\006\146\136\150\024\019U`\"\141\168\1371Q\007&2YO\140\133&\176\144Kc\195\130\219\b\141+\"\227\004R\149g\164\140\140\025HW\158\145J\030?\144\178<\027\181<\150 my6\026y\\A\242\242l\168\216\024\131\020\230Y\209\178\196~\144\198<#F\020\025o\164\t\141\216%#\031\212\155g\202-\025\005\161\234<S\237\178\017\017\170on\172]/\026\029\161\n=[\201\162\145\018\170\209\179\149.\0255\161(=S\217\178\017\020j\2113\150/\027M\161F=c\197\162\145\021J\213\179UF\226\183)\006\244B8/\002l+\193\194m\160\165Qd\026\152\168%\019\227PK\141d\129\145F02\014\182\212F\030\216P\146\141\219pKm\020\129\r-\216\184\r\184\212D\025\152\144b\2433\n\205\171\192\136\020\153O\131.5R\007F\156`d\028v\169\141&\176\209J\173\011\150\025\214\158\r\213k\182_\208\026N\171\244C\164\188\234\170\214\201\028\251u\236\173\143\239\027w\239\251\255\214\227\015\231}\200H\001\227\n\025\025`|\029\141\218\245\005=Af\001\152\0142J\1928B\134\161\140\157;|\\6\227\134/\162\2179\237\150\132=^\199W:\014\031\195\147\133\199\239\129\155\166,\219\017\182:\\\207_\170_\239D\t\182\132\242\213\157\213\233\227\198H3\142\147pJ\000k|*I8\240\006\161S\006\253\129\192\025\007\134\166\011\006m\016\184\228\192\208t\197\160\127#p\195\128\015?\b\173\024\244\229\130\208\154E\195|\027\006n-B[\022\r\141;\174\156\007\132n\185\156\003p\202\t\016\1502\229\020\136\n\153r\002\132eL9\005\162\"\1669\003\254D`N\173\1590\031\156\\5\002sj\213\208t\205\160\247\b\204i\027I;\229\164}B`N\217;\004\230t\253\133\192\156\172\207\176:8U\159\207\b\205\169\026\1293N\213\127\016\152\0195\202t\198\137z\139z\236,c;\017\232_Y\206\227\017\156S\246\0234^\147\241I\015?\151\160\143_\014\143PYCXF]\237mLK8\188b\134\221Kl\184\205\188\214\253\234\134\215\021\006t\195`s\175qm\247\209]\252=\143d\190\233\161\242\132\194\189\221\142t\190\221\161\242\148\129\251\251\028\217|\163C\229\025%\248;\028\249|\139C\229^\027GW\243U^pxi\029_\229%CY\176L\173\242\n\016\163\235\147*\247\212\181x\211L\021^k~^\015\230rU7j/\027\2460\159*\018D\153\222x\237Nf\231\0007E\\\145\149A\214\201\157M\223\022\131+\001n\142\184{u\248P;\181\007\188\002\241v\199\203\245\012H%\172\205\190\245\020 U\184\tn\019f\137[\195\\\246\241\020\200e\191's\220\217\183\243\241\218\207\225\251\025\181\142_;Qe\1309\194\229/U\166RZ\023\196\2020\011]\212Pe\142I\240\202\149*\011\204B\215\250TYb\018\188\214\160\202\n\179\224\173DU\214\152\165q\r6\152u\129\197RB\177\212\005\1444&\193\027\132\1704\152\133.\215\168\210\nI\tjrR\177,\148|+\209\224uCU\t\238\213\130\180*\193\189\212\206\181\128%8\023\186\227\168*\193\183\250\240\000VG%\184\023\190\134\171*\193\191\132\023*T%\184X\031\025\195\210\t>v\193\137\t>\246\007\167\213\1365)\148M\2403x?WU\130\163\245SZ\224\211\149\145X8\139\156\171\197N\184\168\202a\150t\162@U-Ot\167~\249\171;\216\206<\175(\133Y\173G\127;\244;U\204\016\003\202W'\1524\204\txR*\164\164PJ\025&\237\029\026\204\234\028\179\254\002\247 U]`\018\028\203\234\018\147\220\025\156_Uu\133Y'X\2335&iHj0\233\002IJ,T\002X\026\179\182\176\210\r&\029\142G\208w\212VH\nk\201aV?\146\001R+\214E\198\179\026\193\171ZT\237\141\224Ux\024k\004\183BwaU#\184\149EU\209\b^\245\001}\177)\164\164\192\184\215\bn\213\143_\176X\130_]\144,\026\193\175\254\224\164$\199\218\192r\t\158\245\003u\161\165\164 \203H\197B$\206\177\162\003W\2270KX\028hZ\129&\174\017\012\007H\213\161\235\023\226\023\1898\166\134\179\163\004\143\167\255\195\169Q\n\199\195\253p\\\148\224\133Y\221pP\148\2267\002\161`\b\210\252o8\031J\bhn:\156\n%`8\226\r\135A\159\232qo\206\178\239\242\169\225\004(1\140_'S\195\217O\138\223\b\004\205\016~\011x\195\225\165\004,[\143\176\218\029\003\199\019\231\225D'\129\227)\172\229T\143\131D\203\137\254o\012\231D\223\015\166\016\207\137^Z\204\176\156\234\251\153\190\192\224d\127\017\025\156\238\225\154\135\229\132\015\227g[3h)\148\181\156\252\177\214,\167~%\2249\241\131\247,\148\229\148\143\226ik\217\146\194\224\214r\178\199\139F\150\147\253\223\016\2388\217\255\181\193xN\247x\133\200q\186\199\203P\142\147\253Y\192s\170\135kH\206S\188\210\250\228\190\186\251\130\235i\027\219\239p\165L\143ld8OQ\209a\223\025\006\142o:(g\025\1880?p\142\195\139\019\003\215\242%\136n\030\180\158\200\188e\249\011Z\028o\019\196\185\191V\203\211RD\187\175X\031\199\031\161\235\132m\1326\195F\022\176s\129\r(\005\162\012\007\203z\026X.oK\196\027\214\216{\185\236v\142\175_\2217\144\250r}\253G^O\209\235\132\000\0172%\200#@f\212&\130\230\004z\000\200\130\026E\208\146@\029@V\020\137\160u\bE\192\134\000\017R\133HTK\154\000\017\210\132\200\014\000-\001\"\164\011\145W\000l\t\016 \019\162N\240\195m:!\242\252\027!\137<\255\254AP\162\207\191\191\016\148\232\243\003!\137>? \148\232\243c\131\160D\160\006!\137>\127#$\017\232\005!\137@/0\163D\162\022!\137D-4JDz\129Y%*\253DH\"S0\151\211)\145\169FH\"S\141\202\148\018\157\030\144N\210\140B\145\166\211\156b\145\168S\"\213\003B\018\165\030`\006\136R\015\208*\145\234\030!\137T7\016J\180\250\003\179J\180\n\145D\171\176N\137TO\bI\148\186CH\162Tpq\\gD\169\127\016\146(\245\140\148\154\017\165\254\129\208\140ZEu\154\017\165\158q\022\136R!\242\169\0202w\231\031\152\211\153z\191t\135\159\199$\236\173\143\015\198\025\2390\015\156M\183\016_\191O\191{\252O\r\152\247\157:}\184\127n\192N\006\238\148\027\255am\129\0017\203\193p<z\150\133\219i\233\005&\218Y\030n\156G&F\131q\019\195\175\182\029\206\230\212}\014 \181{\251T\253\178f\183dyR\015\191\221&r\225R\165\030~\193M\164\226eH=\252\142\155\200\021V\024\245\240kn\"\025\137|\248M7\145\136V\030\245\240\203n\"\019/-\234\225\247\221\"\217\133%\173#\212\011\1666\017*\\\236\211\195/\190\137T\184\240\167\135\223}\019\169\194*\157\030~\253M$\163\2134=\252\006\156\200D+kz\248%8\145)\172\178\233\225\247\224d\199\131\162(b>\139\166_E\018\2050\156\015\0221\143\133\011g\186\1369,\\\229\210E\204]\225\n\150.b\014\139V\179t\001='\182\182\164\139&B\133o~\232B\197\168\248\229\015]\232\b\025\191\255\161\011\019K\024\174u\233\194F\203+\172{\233\194\197k:\182\006\166\139v\129\145\232aZ]R\175\218\236\212W\183` ,\019\153\138\199\1932\149\153\1940Xf2U\026\005\203\\\230\162N\160,d^?\006\254\026\250-\252{\011\186,e\019\194`XV\177\\\195\242\2142\019\015\133e#3\241HX*\153\137\007\194R\203Li\028,\141\204\237\135\193_\184\167.\173\204\134Ca\233d\1624\018\150\173\204E\163Y\181\142\165\t\007\179*\226\176xT\169\"\014\011\007\149\nI0:\166T\141\204\196CJ\165\"LaD\169\180\204\021\006\148\202D\146\197\227Iece\149\134\147\202E\2358:\154Tm\220F|0\169\215\239\159g\181\187\201w\2410R'\136\132\007\144:E\028a\232\1683D\146\006\141:G,\228fu\129\024\011\006\138\186Dda\136\168+\156GX\174\026qp\231^7\136\131\187\245Z!\142\212\161\215\026\177\228\174\1886\136\007;\241\218\"\138\212}\215\014\177P\199]\1838\029\216e7\208\163pg\221@\135\130\221tC\027\246\254\163\209\240\165s\221\208\150\189\\O\007g\151pi\251\222\158\154\184\173\"\r\027\162o\230t<\159\001\217\196\200hcT+Z\208\232H\164\020\226\2241Hi\200\017F\031e\016K\024w\148\133I\225\017G9\\&i\172Q\173P\127\177Q\198\172\199\131\182\189J\182\207\199\138\143\167\237\166\215\n\191\007l\214\tC\249q\135\238\236:\200I%\142\003\164\012\231\173\003\148\\H\007q\n\129\131\178V\226\172\029\001\165\018((\153Z\200\026$5B\147j\192QR\251 \146\022\018r\136dD% \150\021\146\250\000\028'\165\132H\173T&@J\214b\153\016+\017\146\178\128#\250\017\"eR\153\016)\199$\247\007pDOB$\193\149\212\015\224TR5 R-U\003\"5b\211\"\150\146\146\218\002\146\022\147B,#u+\136d\197~\005\177\156P\170\029\224\180R\161\000)\149\006%\135H\130;\161\031\1913i*\144\246\128#\185\211\001pr\169D\136T\136\130@,\193\159\250y\004 I\014\133Y\181\148\148\001\164FL\n\177\148\148\020p\195T\139I!\1508B\029@o\158Z)\131\136\228\228\022F4a\144r\159<'\019|\234\1368\130Ku\160\1612\201\163\016'\147\218\t\145$\151\250\011pD\143B$\193\161:\196\145\252\t\146\004w:\"\142\228M\144$\rO'\192\017G'D2R\183\135H\210\\\239\0128\210\208\228\016I\154\235\129\213 \147\139s=\200\146\006'H\146&{\152%\rO\160#\207\165\176\t\146\n\169\206\017\169\020{<\196\146b'\196\017\188I\195\134\154\174s\247a\243\135\026~[\238\205\168\207\238\162v\143U\211\247\221\127\248\180\158d\214#7\137pyr2\146S\153<DF\0129\029\201Y$\229=\207\206Fv\030I\218\176\228|$\023\017\242\129g\023#\187\140%}f\217\229\200\174\"l\203\146\171\145\\G\234\236\192\179\235\145\221D\146f\185\205\200U2\215\236\142g\007,\168\209\130\142\164\206\147\245H6\017r\203\146\205H\182\017\242\007K\182#\217\197\200?,\219\141\2366\194\222\176\228\246Fn\"~\221q\\;\250u\019\241\235\142'\143~\221\196\252\2507K\030\253\186\137\248\245\016\1691\228\209\173\155\136[+\158<\186u\019q\235\235\129g\143n\221\196\220z\199\146G\175nb^\189cUbG\183n\"n=Du\012y\244\234&\230\213\007\150<\186u\163bd>\223\163K7\017\151>\178\220\209\163\155\136G\031y\242\232\209M\196\163\015\221\246\184;\235\235\233\227\182\226\200\216\025\157\187\1378\247\233j\251\141\192\195E!3\163\1517\017/?\242}\155\029\221\\E\220|\136\142(\217\141~\174\146\152tx\246\232\232*\230\232'\150<:\186\1388\250ys<]\144\137\209\221Ul\020gGR7\186\187\138\141\226\231?,{tw\021s\247\011K\030\221]\197\220\253\192\179GwW1w\191\176N\231F\127W1\1277\236\152\226F\135W\017\135\191\178\220\209\221U\196\221\175<y\244we\022\187\236\149\245\0227\186\190\178K]\022\152\025=_\197\134\245/\150<\250\187\138\141\234\188\240Fw\2151w\255\195\138\190\029\253]'Q\229\253:o\212\231\176}\218}\176]\127;\250\190\142\248\254\149\207\198\232\251&,\196x\161\224\025p\252\187\199\028\131\148\241\179\026\227\007\137\206\242\147\233\179\026C\b\129?\132\029\148\159N\159\213\024DH\233\239Y\003\217\244Y\141\129\132\148\001\195\241\243\233\179\026C\t\137\127`\r\020\211g5F\019b\006\206\156\129r\250\172\198\136B2`9~5}VcL!U\225\1295PO\159\213\024XH\025\224\232\205\244Y\141Q\133@\127\132#\212\136\154>\1711\186\144\242\192\242\245\244Y\141\001\134\196o9\190\153>\1711\198\144\248\031\028\223N\159\213\024e\136\252\031\206\128\155>\1711\210\144\012l8~;}Vc\180!\240;\134\222\172\167\207j\1407$:\203O\166\207\141/\247\003\1919~:}Vc\212!\241\183\028?\155>\1711\240\144\156\128\229\231\211g5\134\030\002\255\022\175P\003\197\244\185\025\144\187\129\029\199/\167\207\141/\247\002;N@M5}n\006\196n`\b\\(\191\158>7\190\220\011\0288~3}n|%\243\217\002\168\233s3 v\001G\142\174\167\207\141.\246\000G\150o\166\207\141/\246\000A\028CM\217\233s3%v\006~(C-\185\233s\179$\246\nG\182_l\218\2333\024pb\1830\0044\132\175\214\211\231\198OdU\177\006\146\233s3 w\012'\142\159N\159\027_\236\024\158\145\r\181\146M\159\155\021y\150\192\141\209*\159>7\190<K\024\226\027j\160\152>7\003r\247p\225\248\229\244\185\241\229\238\225\192\026\168\166\207\205\128\220=\\8\247T\245\244\185\025\144\251\007\195\141P\170\153>7\003b\007q\229\232j\250\220\232b\247pe\249z\250\220\248f\161\127_9\167Rf\250\220L\217e\254\205[\178\211\231fI\1586|q|7}n|y\214\192\202\178\157>\003\191\149\187\135?\156c\232\245\244\185\025H\"\186\244c j,\153>7cb_qe3\147N\159\027?TX\236(\168i5\207\192\239(\153\214\240\020|8\211\180\022\165\130\159\0216\173\131\133\137\158\203l[\204\141\158\250\183\253?l\212\161k\187\183\211q\211\029>~\212,\156\028Hj\247h\130\137\145 \134\134\148\020Q>!%C\148\011\164\228\144\1309\005\226\252\134\148\018Q\012\164T\136\178\129\148\026Q\182\152\211 N\011)\nQ,\164hH\193\028\1318'H\177\144\1309\014q\254@J\139(gDI\160\203\156a\211$\208i\182\144\002\157\230\003R\160\211\236 \005:\205\030R\160\207\028 \005\250\2047\164@\159\217v\135\131\018\136\208s~ \165\145\211\194D\232>\007\220H\208\127\0148\029\232?_\144B\253g\252MDHp\128\208!B\011\bW@H\215\128\224\016!\001\132#\"P\159\185\189\198xV\219\251\133\027\202\201xN\223\238\195\t\016\168\233\148z\206\237\137\222\141:i\181Q?\240\237H\155\022<\243\210\211vJ\224\149\136w\144X\021b\157\207\029\166e\180\177\198\031\173\250\227N\199\247\195\127\025\170\164G\175o\127f\180\004\208n\243\178;+\241\127|\203f)`\221.\233\220Y\169\255\027\\6\203\016k\188\166s\231e\254Oq\217,\007\188\241\162\206\157\150\251\191\200e\179\002\209n\019\200;\173\184\253\153\209J@;w\127?Y\229\237\207\140U!\214\240K\184O^u\2513\227\213\128w\251\241\219'\175\190\253\153\241\026\192\027~\239\246Ikn\127\0304W\246\179\202\235\158\252\188\154\186\205\216\231M\236\202d\142|\\\190\186!\189fue\234!\159W\174nX\175)]\153\205\177\207\139V7\168\215|\174\204=\232c\210\127\131zM\230\202b\014\189\181\211\003\2335\147+K\0159\182\205\003\2355\141+\1719vj\143\007\214k\014W\214s\236\216\006\015h\208\004\205\b\rC\147\027\212\139M\\\169|\232\236\182\216\136N=\180\246\209\155\238\228\1633\015m<t{\012\192\185\007\182>\248\025\027\141\224\194\003;\015\2207\135\015.=p\235\131\135\022\241\225\213\028^\173=\248\173Q<t\237\161\019\015=4\139\143n<t\234\161I,wo \143\147\005-t\2288\169\207\201\131v\154\253\174\189\223\\\030\171\b\218\235\249\003\246~\179y\1642h\183/6\165\194'Ua\251q\156\210\231\212\180\0259V\229\179\026\218\154\028\171\246Y\138\180*Gj|\210\228\028\224\023\012\167\182\157\255\132\161\171\012C\249\235\170N\253<\206g\205\187\173\2022\172\193\023}\021\253\203\188W\172\\\192\185\253\"\253\1929{2\242H\189\210\127\220\159\206v\207}\136\142\255!\020\215\239\n\251P\240\208\165\235\183\127}\224'\002f!p\131\144y\128\188@d\017 \207\bX\006@\211\237\001\178\n\145\027\b\173\t\020c\155\000\187\001?\206\234\250}T\031\2497\002\234\000\136~\000\198\245[\163>\242\015D\218\000yB\137\187\016\b\203\211\146\196y`\019\170\2437\002\134\218<\131\171\246\174\t\197\to\229\187&\148'\250\017#\215\228\164\222\0172\148\231\005\149(\148'x\172\2115\161:\221\015*O(\206\1917\024\027\138\179E\249\012\181\249\133\128\154\000\223n\215\210\015\234\226\134\153\003p\147&T*\250\1291\215\132J\221Bd(\213~y\rAC\173~ \164\n\197\138~\169\205\169P\173{\212G\168P\173\232M\012\167B\177^\145\201P\171\232=H\167B\173\030\0170\212\170C\192P\171\027p\025\215\169P\171?\224\030\135S\161R\029\002>\004h\142{\221\029\134gH7j\255g\140\252aL\236\148\161\188\189\234\151=c\188\135\0287?\253\192v\152\1915\251_\152\252iF?\143\1831\166_\166`\011\166\019ZW\211\139\028\221\201\\\247\237\206\253-\240\219\245\253'A?\236\252YG\248\254O\187N8B\219\r\175\016I\180\148\163\193'\131\218u\134\147\017X9\199\194\143\012\181\235\130#lPe\1498S\144Sq\028\228w\237\186\230\224\2481\161v\221\240%\128U\1648<|D\168]k\014\015\031\016j\215\134\195\011\143\007\181k\2031\208S\168\237\218qp\2127\182\235\022\183\025$%k\1454:\216\151;]:\211\255\155\139\234\128\188\018\214Y\132\135\138\218\132\245\019\220\252I\198\251\239}l\021\152\172\175\128\233z\155\020|I\208SHm\"\248\138D\171\"\180\229u\207z\210\240\148\215\248\168\151\240\138X\155\176N\005g\139m\194:\021z\191\169M4.$&\025\145\180\188^|w\139m\162\183\137\227\240\240-\1656iY<~G\169M\215\028\003\191\161\212\166\tK\128\187\250m\154\178y\130{\250m\154\241\133\022\030[j\211\156/\248s\017m,\185\199)@c\196\014\001\180\169\239_`Ub$\206\023%\2184\240\176\238C]\174\167\177\167\016\157\162\2078\158&\132\155%m\191-\000\007{\nN\223\241\152M\209\217;\024\176)4\127G#/\197\022\239x\216\165\232\242\029\142\185\020\\\189\195\001\151\130\235w8\218Rp\243.\012\181\020\174\222\2098K\177\250\029\r\178\020k\222\133A\142\194\237;\028\225(\216\189\131A\138B\219w<B\017tN\004\253\024\029\016\131\136\2509&P0\017\245\005j/'\146n\177\154r\"\234\221\227\198?\005?U\221\029\172\251t\253_\135\139\152\239\167\178\159A\207\016\134\200\191p\215\230\021\195{\252\214D\140\\\131D\229_\229k\243FJ4FV\012\217\\O\253\026w\140\169!3VP\19507\199\2276\154\164E\196X\138\142!\238\142K\217-\195\030\252$F,\214\012\241|9\029\183\209:*\158n\022NOF\181\206\231'E\250\142\198\245\t<\0316\139\236]\024\212G\1307\170\023\249{lt\190'\227\209\158n\023\254\158\223c\142\166\213iz2\147\248`Q.\163?\214\b\160\161\13854,\014\236\\\240\250&%\2150\023\163\129\005\2337\172\137a\134\1780\019\2138;\188\254|l\174\167\005\011\020U\194\224\241\146A\1492\240\219\236\227\023\014\162\171\140!\193\152\190\202\025\180\016\210W\005\131\191\1752\192,\149\012\t\135\245U\197\192qT_\213\012\\\n\234\171\134!\192\152\190R\012\026F\231\149f\208RP]\025\134\128\"\221\202\178\214a\196Z9\006\015_\140n\171\1503\015#\203\154S?\140\017kN\251;\152\151\218\211\254K\227n\157aj\164w\175s\158\186t\212\174\139\b?\150\190\231)\243^I\131_\163m\235\nQ\134D\159\2538\225\213\018\015\254\176k[7\136\247x9\153'\246\235\200fs<\169\243~\217jn\191|L\241\227\185|\137\1492,\220\197\234\140\129\011\139\178:g\240Rd\170\011\134\128\252U\151\012\024\246\221\186b\208\253Do\231\172@\170\025\146\208\225\235\134\205?,\174b\224\184\171\215\154\129\227\174^\027\006.u\245\2182\004\216\213k\199\160aW\175[N\159BWoX\007\1285o8\253\163\145\193p\178\199=\189\225d\143{z\195\169\030\246\244\198\147|t\017\207\148\012\028\175\225\153\138\131\011Kx\166f\b\194\n\158i\184\004\240z\156Ql\254\165\2298\163\249\026\138\174\172\185\245\187\219\253\236\213\243e8\161+tI\b\198\253\160KC\172\208\t\186,\004K=\160\203C4\234\254\\\017\"a7\230\202\016*\244a\174\1629\128\185\173C\236\005c\155\016\139{:\167B,\238\230\156\014\177R\031\231L\136\134\029\\\175\172\000\n{\183\222\157\002\168\212\181\185\150\232\018\182FK4\140:\1816\161y\128s\221\150(\024\254\182G\219\018\001\227\174\178%\242\197\253dK\004\012;\201v&\224\2512\247M\194\191\144\134nw\229\244Im\246\221xf\222\168\190\179P\253\012\211^\223\247\255\218\227w!>\241\240\234p=\127\169\211\237t>\157|\246\240\212\131\127ugu\250P\192t\230a\127w\155/\181\191\238\186\251\165\017\130\207=\252\245\179o\200\189:`|q\199\223\245\004pe\136C\192*\000v\000W\1358\004l\002\224\021\224T\136C@\029\000\191\142\253RJ\175\143\019\192\027\132G\004\011\b;\128w\b\143\bm@p<.Y\135\141\006\2348I\002\224\017\224\210\208 \168\227$\011\128[ \151$\015\129\027\132\012\149\250\129\128\161T?\160\201P\171\007h3T\171A\192P\173\006&\030\234\2457\002\134z\253\rM\134J= \183OB\137>.\203\018\164#H\152|(\203\199\213\208\016\153\174\t\018\025MCi>\238f\017d(NT\1644\020',Q\026\170\019\022(\020'.O\168NX\156P\156\159\b\024j\243\019\166\029\138S#`\168M\rM\134\226\220#`\168M$\2054\148\230\t\001Ce\238\0160\212\229\023\000f\161,\207\168\216Y\168\202\243\025!CUB`\168J\152v(\202\029*x\022\170rXP\186\168}\183\2359\144TB\210\t5EVA\206\001\250k\246\208\237x\189s\156;\193YS\2140\240^\151\151K\247y:\238\174\018U1\212\014\1625\135\198p\195\192\175\016m94\134;\006\254\156\175 V+\177 -_\011\180\029d%\018\011\211R\134\230 :\227\180\002\219$\207\025\248\017\162\011\2068l\147\252\225 _\221I\237o\170k8\220\195)l\031@\168q\1776t\130\252\225\004\246x\213\253N\152\132}x\192|5\248\177kF\224\138\135\143\201@\150\230X\187\225.\"\1437\028\222\244q\158\025\206\024<\150\211\t\207\178\233\028/\2153O(\030\130\tW\186\142\003h~\239\180\007g\001\248\177\206u\003\207\175\158\246\224<\004?W\185n\240\249\237\211\030^\004\240\231\026\215\r=\191\128\218\163\203\016\2538\162vC\207\239\160\246\232*@?\174\161\222\192\243k\168=\184\014\193\207\155\1687\248\252&j\015o\002\248\2362\234\r>\191\140\218\195U\000\127\222G\189\161\231\247Q{\180\014\235\208\203\201|%\175\007\027\210:\207U\188\017\159zxK\026\232y\160n\196g\030\222\145\022\n\224\185\007oI\019\181>\188\152\195\2035m#\031^z\240\132k%\159Py\132\148k'\015_{\248\140i(\031\223x\248\156:\146\191 zo2\143U0,\255\165\161\007\205\227=\244\031>$\176\011\223\017\232\193\149\015~<\031\176\011_\015\232\177\181\143}<\026\176\011\223\012\232\177M\128}>\021\176\011_\n\232\209\202G?\031\b\216\133\239\003\244`\029\128\031\207\002\236\194W\001z\176\241\193\143\199\000v\225[\000=\214\006\216\231\019\000\187\240\005\128\030\237|\244\236\226\255.\188\247\223\163[\031\253\188\238\191\011o\251'\235\202_\r{N\237\228\225\175J\224\156pz\211\143\159\022Vi\132\007\214&*n\138@\211\004\131z\149/`\195\025D%M\180\193\244\183\n{\157\223\199\190\021N\168:{\151\223\170\174\239\248\1525I>Su\2261b\171\146u\234\193\197U\201~\231\127\194\202\171\134\2536\127\128C\192\"\000\130\133\170~\223>\192!`\021\000\193BU\191;\031\224\016\176\t\128@\190\181\n\139\140r\168\003 \208umB\131(\1356\000\1625\183\218\133@\020j\214m\128D\235c\205:\004\"\147M\018 \225\154[\147\006H\180\230\214\132j\132knM\168G\180\230\214\132z\132knM\168H\184\230\214\132\146\132knMM\1440\249P\150p\205\173Q\0049[\164\186\153zK\134\223\139\014h\154\208`^B\165\158|\251\154\181\031\170\022\174\0234\161la\245\133\170\133\181\167B\217\162\202S\161ja%\168P\181\1688*T-Z\223S\161h\225\250\158\nU\139\214\247T(Z\184\190\167B\209\162\245=\021j\022\185\129\n\021\139\022\149T(X4\146\170P\162_s\217\169\130\147\157\n\181\n\151\250T(P\184\212\167B\129B`(P\148\182~\2323X\"\227\006e\1570\224\014`S\014\139\192\025\003\134\211\014\157sh\012/\0248\156\166\233\146\171\016\184\014\164+\006~\004\165\1729\211`\199W7\193dI\154\tk\229\129\015\215\237\229\134\1738\236C\203J\235\147\251\234\198u\145\219\219\186\236\178\136~\b\217\245\243Hw\138\226\031r~D\175=\212\252\239\028\244\161\231\1793\179\203\235\172\217\135\164\167\005\1668\197<\196-\172y\153$\176+a9QG\023K\rW!\211\249S\182Z\236p\169\225\164\222\206\199\253\167\027\174Q\220\157}\195;\177MX\252\005\226S\022\175!>c\241\006\226s\022o!\190`\241\031\016_\178\248=\196W,\254\128\019\168Y\194\014\226\027>\001\136W,\254\011\2265\139\255\132x\195\226\127 \222\178\248\019\196;\022\191\129\248\150\197o\017\222\241\014\240\027\226y\0078\192\002;\222\003 \156w\000\231\016\158w\128\014\193y\253_\017\156\151\255\017\193y\245\195\188\215\192\185@8\218\006m\181`\017\174M8\138\180\020\215\166\028CZ\144k3\150!.\203\1819\199\017\023\231\218\130\165HKtm\201Q\164\133\186\182b\025\226r][s\028y\209\174m8\142\180t7\172\224\246\177\240v\175\216E#\238jE\207I<\206|\217\b\016R\143\240X8\130\248\236\142\151\023\133\250=\162\000\216\001\\\017\224\174\000W\0068\007pU\128\219\194\028\214!r\003\161M\000\253\128H\021\"\177Q\029@\015\216\170\t\160\006\"m\136\196\233\187\000\250\027\"\219\016\t\141&\235\176P?\016\154\004\208~I\005AS\002\1979\b\021\218/\170 hN\160\216l\168\211~\169\003AC\169\226r\133b\021\138\021\170\021\151*\020\171P\168P\173\184L\161X?!2\212\234'N>\020\171\134\200P\171\026\027\r\197\186G\2004\212\234\015\212j\026j\021#C\169\158 2\020\234\014\"C\157~Cd\168\2103D\134\"\133\021\154>D:\143\173AD\150\1645\131\238 \186\225\208\024\174\024\248\021\1625\135\198p\195\192\029\187\132\144\164\150\171\019\156o\199\192g\027RC\175\149\188\141u\237\019[.\157\171\207L9f\182\230\146\1329\204\030\002?>^\198cq\015y\171\171\012|\168[\\_I\178\135\182{?\1899 \002>\004\027\159\006'Y\229\131\133\tp\146\213>V\152\250&Y\019`\165Io\146)\031-Mw\147L\007`a\162\155d\198\007\011S\220$\179\001V\154\220&\153\243\209\226\1806\201Z\031-Nh\243\231\1326\182\190\148\228\015=\2265\163$\127\1361\186\190\148\228\015=\254uu\231X\234a\135\187\131\189c^p\030\202\175\242&y\201u1\029\000\135\147\131/\148\135b\253\222/\208\168\223\234\016\217\211M\138\132 \193\188\188H\t\018\204\204\139\140 \193\220\188\200\t\242\b\144\005AnQ\145J\n\221 lE\176\031\bZS(4\219\016\172APE\161\208\172&\216\223\bj(\020\154\181\004\139\182=\147\194\017,\218\248L\138\150\193\162L\148T\178h\2433)\019\006\011\rS\221\162M\201\164\164\202E\133+\169tq\217\168xa\209\168xq\201\168xa\193\168x?\017\148j\247\019\230\128\138W#(\213\174\134f\169x\247\bJ\181{BP*\221\029\130R\229\130[\006IEu{FP*[T\003\021\021-:\174\159T3\209F\183\164\146j\166\219e\155RI5\147o|\160\174\230\n\190\223\209<oN`X\169\251%\205M\191\"e\213\210\163PI\157\248\148\200Y\168\164N}\188t\024*\169\179\007X\0309\235\156\000\017\178\b\145\168.J\002D\200*D\130\177\184\174\t\016!\155\016)\223\164Lj\005\t\136\161\017c\007\b\006\018\016\195\134\0120\245\168\029i>T\215m\136\004s\148fML\130\186n\146\016\137&3MJ\144\168\207h\136r\209T\166!\210\1333\153\134h\247\000\173\018\245\1629OC\212\011\167<\r\209/\154\2414D\191p\194\211\016\229\194\249NC$\011\167;\141\161P\152\003\"S8\217i\028\133B\179D\170p\170\163\136XQ\185\020\017+,\150\"jE\165RD\172\176P\138\168\021\150\137\136\021Mr\020\209*\156\227(\"V4\197QD\171p\134\163\136X\209\004G\017\173\"\169*\"U4cPD\169h\"\164\136Nw\016Jt\138\166L\138\168\020\029\215J4Q):\175\149h\"S\136$*\133\201?U\186 \152\2159\135\006\193\188.X0B\151\028\026\206\144t\197\1941\190\230\240\177\1956\137nD\026\230)\137\183\1314-\2100\207p<\007\225\150mt\184R\170\029\135?Bx\203\154\231\143\166%f\029\206]\199\181\211\127\237\023\210\b6\156\023\127\169\143\147B\2186\193\1728\246\024Ib2\159\016{\141$1O\1278\238\001\228\233\005\194R\157y\170?\190\174g\158\218_\024\223\152\167\250\207\238\179\255\031\151\227\t \159\130\031.Jm:q\197\219(\191\194\196\184\204\132\226\222\031m\215v\183\145AH\226)m\247\247e8Np\187\2182Y\144\136O\145\159\175\003\017\007t\134\213\247\231\169;o\250\137\192^\rl\176+bZ\191\006\186\195\240\214\173\179K\162<\251T\254\130\245}\155\004hi\129\223\166\001XZ\225\183Y\b\022\151\248m\030\192\1975~[\132hi\145\223\150\001ZZ\229\183U\b\022\151\249m\029\192\229u~\219\004pq\161\223>=\193m\021\232\011\172\246\197r\238\134\137\238\158\023\165}\n\127\227\148\029_\161\006v\159R7\199\195\165;\\c\029\130u\179\014\225\185\222\241+\001\240\150\135\167<|8@\215\029\134\159\137~S\167>\240\233\199\174\224\167wo\140\185`\135#t,\229q\017\250F\153\203v8F\199S\158\215\161o\164\185x\135\179t,\233y)\250\198\153Kx8P\199s\030W\163o\156\185\144\135Su,\231qA\250F\153\203y8Y\199S\158\215\164o\164\185\168\135\243u,ivY\250F\154K\2195\128\244\1882}\227\204\005\238\020\225\1327\167\199F\157\247YNC\210\236\006\245\216\178\030\207@\222\236&\245\216\184\030\207\"\222\236F\245\216\190\030\205A\218\243f\245\216\196\030\173E\180\217\r\235\177\153\231\180\225\136#\160\205oZ\143M\237\017\019D\156\223\184\030[\219\227\165\1367\191y=\182\184\199\203\016\143\220\192\158\154\222c\231\018\219\191\137}\167\207\248\195\175\007o7\199\223\219\200\254^\186NB\028\002\166\001\176\003\184,\192]\001.\015p\014\224\1380\131(\2252\000\030\001\174\n\r\162\028\214\001p\139\170\166\t\129\027\132T\001\242\003\001u\b\132H\019\"a\2266@\030\160M\023 \r\002\182!\016%\158\132z\252\141\128\161 \127Cd\1684\180H\151&\161\214\208\026]\154\020\004\tK\020\234\r\173\208\165IE\144\208h\1689\180>\151&\161\232`\145B\205\225\018\133\162\131\0052\164@\016\026\138\014\023=\020\029,y(:\176\1367\188\005\031\000Q\218i(:\141\128a/\168!2T\167\134\137\135\234\220#`(N\164\2474\148\230\t\001Ce\238\0160\212\229\023\002\134\178<#`(KX=\161*w0\147\015Y\198\023\227\210\2122\224\014`\029\135E\224\150\001\163(v83O\209\014\162\019\174\132\029\132\167\012\156\191\016\153f\025g\250\n\192\015\201.\217`M\179\194\131\011kTiVzPiI$\205*\015\219\199XC7\132\242\240P0^\027J\179\135z\163\235Hi\246\016\240\247\241d#+Ci\246Pqt\135<\205L\144\139\005\148\135\154\151\173i\165\153\243\235\238\186\189\030P\213\245\211\225~\221\239\018=,\150\246\027\239\001\016\204\213\250\029\247\000\b\230`\253n{\000\004\211\196~\183=\000\162\217Z\191\219\030\"Q\215\211\239\183\007P4c\234\183\209C$4\170B(\154]\245\219\225!\018\0265!\020\205\154\250\r\240\016\t\161m\b\1333\172\134H\004N\177\154\132BQ\177\026\162\0198\209h2\n\133\216\156ba\022\136\\\224\148\172!r\129uP\017$L\159(\011\150\170!Hh\148h\016\150\137h\016\205\182\026\"A8\221j\136\006\209,\170!\018\132\211(E$\136\230Q\138(\016\201Z\017\253\161\153\148\"\242C\179\020E\196\135\230R\138H\015M\166\020Q\030\172%\162\188\019,\018Q\222\tZ}J/>V\r\207\\l\174V}+\027\027P\134G.\b\020aS\138\005\195\207\240\196\005\129\"lN\177`\176\026\030\183 P\132-)\022\012m\195\179\022\164\018Pnk\138\005\235 \195\163\022\196,\202\173\162X4\190\014oZ\016,\018\206\240\158E\bFc\236\240\150\005\193B\176c\1920\023-\005\195\197\017\195\200\023\141\224\134\209/\028\195\r#`44\027F\193p\0287\140\132\127\195\\0\"\134\195\190aT\012\007~Sq`\152\015F\201p@7\r\007\134hF\205\176\0234\1543\rs\205\232\025\206\023\012#hXy\140\158q\2211zF\149a\0259\195\226YF\207\168t\150\1453\154;XF\206p\246`\0259\163\249\131e\212\012\151l,\163f8\221\176\140\154\209\132\1952ZF.e\025)#mZF\200h\218a\025\029\163\137\135eT|\134\021\193\168\024\205S,\163bhw.\226E\203\012n.\229\005K@.\225\241`a\199\165\000\142\240\025\143\135kA.\007\004\204(x\006\\@r%\168\"\184\134\228*\158q\132\132\026$\129K\209\132--.\2518\021\194\197\011\163i;\151E\252\168H\218&\004/\028\022I\219\148\192\133\227\"i\155Q\184t`$msB\144\142\140\164mA\241\194\161\145\180-\t^86\146\182\021\133K\007G\210\182&\004\241\232H\2186\132 \029\030\201\250\173\206\143\147:\244\163\225tC\228\241\251\176\247\014\227\249\251\178\140\252\178~\011\212\231G\207\030e\253f\168Gy\246LLG\144\245[\162\030Z\186_\146\245\251\157w\176\024\027e\253~g\bD\200*Dv\000X\019 B6!\242\n\128\138\000\017R\135H\249~I\214\239|\002\194\014\016\218\144\224\248\144+K\214\164nAE$Y\136<\030\0012'6AM$D\002 \214\202\018\162\001\020ie\t\017\193\007B\018\021|@\163D\006\007h\149\b\193 $\017\130\129\233\019\t\252FHK\144\208\168#\133\250AP\162(\020\253d\233\154BQ\014\210$\196\162X&KS\n\133f\137VQh\146\165D\172\176\\D\172\184XD\173\176TD\172\184PD\173\176LD\129\159\bI\020\248\t\147'\n\212\bI\020\168\161Q\162\192=B\018\001\"\169fD\127'\132$\146\218!$\017\212\014B\137L\190\016\146\168\004\133\030YFd\130n\127d\025\145\tD\146>\r&\175\223\159s\141\219|\225\249C\244\204\1965\203\140?\015\144f\185Yf\131)\134tX?\203\158\138\137\007>Y\214rh>\140\201\2425\011F\001C\150'\028\254\n\140\167,\024\1613\014=\187\134\194\146r\145\132X\021\199r\014\160k\182\250Q\141j\014}|l\204\223\146\127\027[\213'\0266\153+!\022U@\180\225\012\020\238\192g\197\179\189\193\173\140\193\252\029\162\174\189\151\028>.\155\2336\001W\222\"H\253swE\163IAz\190/g\251fzL\176yV\203\179\166\237s\153\\\174\225\188\019L<\203\004N<\193\204\179L%\r\238\248j+E\181\239\016\171\156uJw\254,\234E\0155fe\005\137C\248\139y5\228\rq0\2305\152w\011\1361SA\230-2\198D\141\137\221\151\148\162\129\196!V\134\188j\205\240\030a\029\166%\152\182\149x)\230\029$^\134y_\157\192\2031\239\019\167\151\015'\149\221w$\192\205\251\184\220C!X\234\193:\128\202|\020\130\229\030\236\nP\133\143B\176\210\131\201\225l\222G\233,\026\193k\022\190\003\232\134G#\184\242\224\014\160\180\223@\168N\141\007;\002\148\245\141\161:u\030l\139D\209\25000o\202\019_\137\031\b\230K\241\003\154\243\181x\128\246\178\000\007\r\250z4\b\230\011\210@s\190\"\127#\152/\197\223\208\156\175A\020&\231I\019\224\160A_w(\152\206\019\029\224\160A_{(\140\206\019\027\224\160A_\127(\128\206\019_\128\168 \169\175?X\142\212\023 *F\234\235\015\150\"\r\244\135`\190\250\014\208\156/\191O\004\243\213\247\t\205\249\242\211\b\230\171OCs\190\250\246\b\230ko\015\205\249\218C\154O}\229\157\016\204\023\222\t\166\234\235n\135`\190\236v\200\\\230\235\238\027\193|\217\157\1619_w(\n\2073_w\016\230\235\014\166:\201.\030\241\230YI\160\029@V\020\137\1605\129\162\029\131<k(\022\131\021\001\199\222Z\2003\1419\152d i\0079\022s0\201\017\146\131\216\1506+Zm\200\2435\001\243\007\220\243<\161f\175\000:\2019\190\185\152\231\217\012\026\2239\202\243|\134\143lh\231y\225\229\003\239\026\229y9CJ\235Jy^\2053 -*\229y=\131\182\221A\237\228P:\207'\145\131u\131<Ww\131\253\000\011f\139\249\164c|\242>\207'\213F\207\232\231\249\164\213>J\217#\200\164\204\015\245\217\151q\183s'\128\155T\185\236|}^L\186\140\2397\231E2\135\n[\205y\145\206\145\194.s^d\030R\218`\206\139|\142\149\246\150\243\162\240\160\194\182r^\148s\168\176\163\156\023\149\135\1486\147\243\162\158c\197}\228\188h\230Xi\0119/\148\167(A.\197$\207\207\1572ns\220Yw\194G]\243b\210_w8\187SL1\147\016\131\135C\248\b\186\240\199\249\005\139dy\185\158ys\2361\151\188Lf\232\216K.y\189~\191t\167M\191\172\215g\2267\240\236:y\128\228\192\191N\t\016!\179\016\137\210\206\t\016!\139\016\t\"\209\186$@\132\172Bdd)\160\174!\0011\026\196\000\017~\173 \0011t\200\000\203\002\181!\205\135\234\218\134H\1768P;b\018\213u\027\"\209\018A\179&H4\0166D\185(\176o\136tah\223\016\237\194\229\130\134\168\023-\0044D\189p-\160!\250E\203\001\r\209/\\\017h\136r\225\162@C$\011\195\253FQ(\204\001\145)\012\250\027C\161\208,\145*\012\253\027\"VX.\"VX,E\212\138J\165\136Xa\161\020Q+*\147\"bEA\190\"Z\133q\190\"bE\161\190\"Z\133\209\190\"bE\001\191\"ZERUD\170h\144UD\169(RWD\167_\bId\n\227pET\nCqET\n\145D\165(y\253\020\233\130\152\\'\028\026\196\218:e\193\b\157qh\024\148\233\156\133c|\193\225\163!\186.E\026\230U\018\015\198\220\186\022i\152\215p<\007jZq\224\241\1499\024\225k\205\234\164{\238c\247\153x\027\173\251D\195\017\143\148\183\014x\022\231\018,\023h\199\230\241J\211\178\001\241\233.K\023\005\204\218\167\196\214\005L\226\227\197\165\001\147\134`i=\195d>Z\\K0y\144oq9\193<\189\230\227K\029>\000\234\233$\011Cm\243t\015\180\240`\159\021\188 \183I\128\150br\155\006`),\183Y\b\022#s\155\007p18\183E\136\150\226s[\006h)D\183U\b\022\163t[\007p9P\183M\000\151b\245b\248A\128\241\229?9\140,\134\159\001\b\128\b\153\134\200\014\0003\002D\200<D^\001\176 @\132,C\164\028F\022\195\143\000\000\002b\212\136\177\003\132\006\018\016C\133\012\007\128\1544\031\170k\019\"\143\000h\137IT\215.Dn\145vZ\130\004\029`\209\016\229~ $\145\238\0074J\180{\128V\137z\rB\018\245\026\152>\209\239o\132$\250\253\r\141\018\229\1620\178h\136dQ\024Y4\r\133\194\028\016\153\1620\178h4\133B\179D\170(\140,\026\"VX.\"V\\,\162VT*E\196\n\011\165\136ZQ\153\020\017\235'B\018\173~\194\228\137X5B\018\173jh\148\136u\143\144D\171H\170\138H\245\132\144D\169;\132$:\253BH\"\2113,<Q)\n#\011ET\n\145D\1650\249\167H\227ad\161\215\028\186\003\224\132\005#t\202\161\2094\190\208\025\011\199\248\156\195\199\194\200B\023\"\r\243j\142\231@\209\027\182\rPE)\014=\139\203\250\196\223\198\150\245y\154M\229:'6,\241\169\208\133AV\161\173O\137\004Y\133v>^\n\178\n\221\134`!\200*\204\218GKAVa\018\031,={]\152\167b\241\182ha\158B\141\238\161\022\230\169\210\199\027g=\237\002\208\005\131\214\234\004\208\207^\246\228>\221\165\139\189\165]\152\n2R\192\168!#\003\140\167\246\221\193\190\029\219\183\139\251\251\130\183\249\n\163f\133~>\127\243\246\221]6o\151Sg\221\225\210\235\205\190]\127\245}\238\167\235m\158\014j\223\255\21930\168\023\026\236\219\225\246\\\254\201\157\141`\206\b\230N\234\231\252\138-\251\130\173\251~j\196\164{\193d_\250\207\005&[\222\228\148\161S\215/?\176D\187\142\018\159\249\002&\018\1618\203j\196\166r\251/\168\001\155\t&\254\186*{\186.\177\146\011Vz\007\191,2R\bFLw2;76\177P\167\229B\019\253\234K\239\180fw<_\251L\001c\213Bc\195rK\220\026\r@\134E\157_\163\1617\181\235\255\213A]\028ZS\1764*\249>.g\171elD\167A\246\131\003Bck\2161{F\003\003\170\181\017\"b\150\235\245\251\240k'\242zO\185N|\020\130\165\030\172\003\168\204G!X\238\193\174\000U\248(\004+=\152\188\186S\174+\030\141\2245\011\223\001t\195\163\017\\yp\007P\218o T\167\198\131\029\001\202\250\198P\157:\015\182E\162h}\024\bM\202\196W\226\007\130\249R\252\128\230|-\030\160=_\141\006\193|5\026\152\172\175\199\223\b\230\235\24174\231+\017-\213\148\137/A\180NS&M\128\131\t\251\178C+4e\162\003\0284\232K\015\173\205\148\137/>X\016_|\184\028\190\250P1R_|\176\020\169\175>T\136\212\023\223'\130\249\218\251\132\169\250\226\211\b\230kOCs\190\248\246\b\230k\015I/\245\165wB0_y;\004\243u\247\133`\190\236\206\176\168\190\234\208ZK\153\250\170\1310_u0U_t\232\230~\153M\170\139/\197\148YB\160\029@\166\020\137\160\025\129\194\137B\150S,\006\023\004\028[{)\179\018s0\169\130\164\029\228\212\152\131I\r!9\136U\180Y;\b\214\004|\004\173e\168\217+\128Nr^\178\026Sfn\006\150\150b\202\172\245\144\194:L\153\175\23198\245\029\234\184\142\1322\145O\250\198\171%e>\t;\186\174R\230\147\174\151\237r\151y>\203\235\230\138\250\156b*R|\155\187,\1469T\216\227.\139t\142\0206\184\203\"\243\144\210\238vY\228s\172\180\181]\022\133\007\021\246\181\203\162\156C\133M\237\178\168<\164\180\163]\022\245\028+ng\151E3\199J{\217e9\180\214\225\227\184\235\212\225Mw\189\166\199 \244\190<4J\225x\b\026\185Lf\180\211\241\162\134\133\145\027\029\017\210\025a\146\230\011\201e3\246\180\250\240\002;\231\2038e#\198.PQ\151%^\202\244\133\153\168fV\030\191Q)Vx\r\025/%\220\204\204\156\191\187\211NNU\241\240eU\165%\242\194\252\154\185R\174\167C_\232\127hj\184R\160\182\167X\208?\\*\240`\b\151\2508\016{\014\023\n<\024\194\229>\014D\159\195e\002\015\134p\165\143\003\001\244p\145\192+,\202]\237\227@\b=\\\026\240\204\161\220)\031\135\130\232\225\134\128\135CS\207\225\134\192\028\136\194\222\225~\128\135\131\006\157\015\132\129\244p=`\014D\145t\019\168\015\134\210M\160?\020K7\129\254`0\221\004\n\132\209t\019H\016\134\211M\017\002a\218\129\012a@\221T!\016\154\012\164\bC\234&\016#,M F\\\152@\141\176,\129\024qQ\0025\194\146\004bD\129u\019h\017F\214*\016#\n\173U\160E\024[\171@\140(\184V\129\022\145\020U E\020^\171@\137(\228T\129\014\209dW\0052\132\017\182\nT\136Bg\021\136\016\218\011Dx\130%\190\139pQ\144\163\204\028-F9\234.\198 ,\007\134\029E\131p[\181\012\020`\245\154ba\184\173\019\006\140\209)E\195XVgLe\192`V\231\020}\132\224\1301\141s]\250\r\b_Y+u5GJ\007\000J\029\136\247\254{\176px\213w\021/\012-\205\189\025\023\004\141&\241\176R\212hR\015*\133\141&\243\161b\220hr\015,\006\142\166\240\177R\228hJ\015+\133\142\166\242\161b\236hj\015,\007\143\166\241\192R\244X\245\219bjs\140\157P\173\250}1\015\182A\184\212\195\1619T\213o\141y8\004\203=\216\005\193\n\015\246\220\014\132\132\210#|\"X\229\195`\169k\015\167\017\172\241`{\004S\030\2367\130i\015f`\230\140_\135\016g=\220\t\193\156\007\219!X\235\193\192`Y%\190\252\208D\181J|\253\1612$\190\252\016\202\023\159E0_|\022&\234\171\015I>)\129H!\193W\223\007L?P\031\196\249\242\251\rq\nd\020\233:\153\148c\142\135\243\241\160\014\151q@\218;\219\169\221\160\016~\164\171\018'\241N\152\215\138\233u\031\253`u\248\016\012\164\147\234\230\2271;;\169\210\132\"\0174%\208\014f \163X\012\206\t\248\n\177\005\197bpI\192\014\148\173\162\213\240\r\205\214\004|\132\216\134\026\198\021\161(x\015\193S\247x\131m\199GY\248%\252*\155\228\016\159\186TY2\135\n3\151*K\231Ha\226Re\153\135\148\230-U\150\207\177\210\180\165\202\n\015*\204Z\170\172\156C\133IK\149U\030R\154\179TY=\199\138S\150*k\230Xq\198\146M*8\\\247z\024\207\134\028<z\165\196k,\237#\191\251\149\194\159\0258\245\192f\166\151\243^\237v\247\131]\236\132\183\202\236\028/\"\221\012y\186\238z\129\243\184\169[;\255\236\245q7<\154z\230`\185?d\130\213\167*\247GL\180\178S\229i\128C\195B\030\140\154h\216\204\131a\019\142\155\185?n\162U\157*\247\007N\180\201\\\247SY{\2528E^\134\169\251\169\172\015C\184\212\199u\000\150\0050\132\203}\220\021\192\138\000\134p\165\143s\000V\005\133E\185\171}\220\017\192\154\192\028\202\157\242q[T\199:\192m\016\208\248\192\015\132\179\001\014\026t>\240\000-\182>\016\248[\157\004\234C\243\241:\t\244\247\027\225\002\253\253\134\006\003\005\162It\157\004\018D}B\157\020!\016\166\029\200\016\245\nuR\133@h2\144\"\234\023\234$\016#,M F\\\152@\141\176,\129\024qQ\0025\194\146\004b\252D\184@\139( \173\211@\140\026\225\002-jh0\016\227\030\225\002-\")\166\129\020O\b\023(\017\245\253i\160\195/\132\011dx\134\005\014T\136\014T\213i\160B\136\011T\b\019\014Dx\130UsWa<6\169SK\177\029\128:\006\138\176-\197\162h\163\206\214\012\024\163\019\138\142\157\172\170\179T aVFY\014\130s\166\214;\136.(\250\b\193%c\026W\208]\201Kv\005\234\172\158\163\165]\129:k|\168p\248\169\206\212\028+\173@\215\217]\215\203\022\148\235~\195\234\187/P\031\199\155\238\210\245\195\238gw\025\162\251\199p\221\187\197\127\248\188\158\213/C\223\200\137D\230\153\201\200L%\230w\199R\211\145\154I\212\159+K\205Fj.R\249\012\231#\181\016\169G\150Z\140\212R\162v|Y\203\145ZI\212+_\214j\164\214\018\213\177\204zd6\018\147/i32\149\168\135\225\029\025\134\171F\174\150\184\031|\219\232\145j$\234\150\207\177\025\169V\172\165\195\015\203\181#\215\201B\252\205r\221\200m\197\1345,\181\189Q\245Z\206\242\129\227\218\209a\181\232\176GkY\238\232\178Zt\217\254/\150;\250\172\022}\246p\229\149aG\175\213\162\215ZV\025v\244Z-z\173\186\176\212\209k\181\232\181\253\130\024G\029\189V\139^\171Y\175\181\163\215j\209k?y\234\232\182Zt\219M\199\247Qv\244\\-z\238\230\184\227\201\163\235j-\147\135{N\012yt^-:\239F\241\220\209{\181\232\189\2313\223A\218\209}\181\232\190g\190_\182\163\251j\209}\191P]\143\014l|\007\030\023\193\188\001\247\223=\2348J\143\159\2138\132B>KN\166\207j\028D!y\024v);\157>\171q\028\133\236a\228\165\236l\250\172\198\161\020\179\217\156\231\211g5\142\166\152}\228\216\197\244Y\141\003*dwl\185\203\233\179\026\199T\200\190\178\229\174\166\207j\028W!\219q\228z\250\172\198\161\021\146\217R7\211g5\142\173X*C\167K\233j\250\172\198\241\021\210?\216\006\211\211g5\014\177\144\189e\179n\166\207j\028dq\165\r\2272\165\219\233\179\026\199YA\169\1919\186\155>\171q\172\197\rn8v;}V\227h+\228\253\192\208\245z\250\172\198\001\0237\2490FSz2}V\227\152\011\233\183a\154\210\211\233\179\026G]\220=]Y\209\232l\250\172\198\161\023\242-'\026\157O\159\2138\250b\197^8v1}V\227\000\140\217{\142]N\159\2138\006C\182\230\188\\W\211g5\014\195\144\253\201\178\235\233\179\026\199a\200\030\199n\202o\166\207j\028\1381\2556|S\190\154>\171q4\022\248\195\bN\249z\250\172\198\017\025\243\021K7\211g5\142\201\144>\142\227\148o\167\207j\028\1511\159\237\223\181\155>\171qd\134\244/P\251\237\244\025\248\206w\248\248\014g\237\018\134!lt\214.e\b\194~g\2372\142 m{\214.g(\210\238g\237\n\142!l\130\214\174d\024\194^h\237*\142 m\137\214\174f(\226\206h\237\026\134\"m\144\214\206\247\184\232>i\2374K\144\182KkgX\206\166;y\156\204\227X\142\211\030}J\238Q\028K\233Z\143Rx\148\150\163\244\r\233Q\2029\165]\179\148\161)=R\229\145\018\142tk\2049\167\2468)\199\025Z\211\2274\030\199/\015x\158\182\025v?{y\159\223\212\246z\186\202{\160\205\176\007\202\128\017:\229\208\029\000g,\024\161s\014}\005\224\130\005#t\201\161\029\0007\028\248\b\192\134\003oQ\237Y\022\189Ap\199\193?\016\186e\209\200x\194\138\004\237}6\t+\019\131\208\172L\012\204\011+\148\223\b\205\182=\218\234l\018\182\241\209\134g3\2369R8\218\204l\146\134\135\195\162*6\243\007\004\215l\230\017\154U\227\005\230\133\149#,)\171F\\PV\142\168\156)\171\198O\132f\197\136\182@\155\148U\163FhV\140\026\026g\187\173=B\179\218E\210MY\233\254@x\197\193O\b\205\n}\135\208\172\206\191\016\154U\249\025\214!\171r\180\207\218\164\172\204!\154U9\204\n\171\242\029\172\022V\229\127\000:\243U\030\223\173m\178\0041:@H!\00112\196\184\002B\014\t\136Q \134\003\132\nV\020*E\141\024\179gC\251\140\188\141\205\224s}\249-\217Em2C9\241WC\155\204R\218F\237\212\225\194_\236i2_\143\226\030l\147\249j\252<\185\182\251\219\217\190\215=\171\1776x]\230\190.\167\211\211?@\147\185\175\201\238\208\207E\199C\218\188\241\1483~B\1983ZA\210fr\147\251j\140>\148\209\228\190\024#?\212\216\228~\031\188\232\005\207\166\240+4\030k7E\1940\132X\187)R\134 \196\218M\145q\004)\214n\138\156\161H\177vS\020\028C\136\181\155\162d\024B\172\221\020\021G\144b\237\166\168\025\138\024k7E\195P\164X\187\233\247?\014\189\234\186\131\250P\177w\006\154~\191\131\003#t\202\161A\028\213ogp`\132\20694\136\163\250\221\n\014\140\208%\135\150\159!l\250M\t\137\132X\138c\129\000\175\223\000\224\234\030U\144\225\208 \028\236\151\2479\211\168\130\028\135F\193c\191z\207\161\209DF\179rD\225\157f\245\b\131G\205\n\018\006\143\154\149$\n\0305+I\024<jV\148(x\212\172(\127C\227\172\028a\172\217/\1513p\024k\246\171\227,\028\230\134\1499\140M\181\230\225\208<+u\024\155jV\236\176\172\172\216qQY\181\163\146\026V\236\176\160\134U;*\167a\197\142bS\195j\029\198\166\134\021;\138M\r\171u\024\155\026V\236(65\172\214\145\212\r+u4\t4\172\210QTeX\157\163`\211\1762\135\193\166aU\014\131M\195\170\028\162Y\149\195\172\176\"\135\193\166eU\142N\0057\214W\249\130h\211\166\136\001\162.\155A\002b\228\136\001c&[@\n\230\148\136\019;9\220\216*J\197\\\133\184\014R4l\165\014r\012\226\028A\173[\152\b\b\217\173/\228 &f\025-eH\167\139\027\183\230\bR|\235\018&S\210\143\0046.\165\012\233\023/\026\231+z\227\148=_N\199-\152K:(\231\207Sw\222\244\195\219^]N\n\172s\168~\167\230\143:(\173\254\168\190O\249\235\170NN\014\028T\191]C\024\011\174\025\171~\227F\226]\029$f2\017\242r\145\135\211+D\222\017\019K\153\by\149\200\187{!i\136Z\166]\001\173\017i\167>\142=\157\251%\027\220\144\n\025\216\185\195\199e3\174J \178\134z\219\"\193\025L\217 \142\133\156\015Dq\152\002\147i!\007\133\"*\193\030g\016%\193\020\148\181$\133\156\223\136\146\225\210\252 N\0149(\232PI!p`yJHB\225\135J*\129\003\019\170q-\028\016\167\193%B\020\133)0k\216y`\021`\231\1935\128\157\007V\000v\158OD\193\190\131b\021\149b\223\209\136\130}G\195d\176\239\236\017\005\251\206\229\1408\130\239\156a\222\176\243\216?\136#\248\206\031\152\016v\030\204\193\190\003\243\134]\231\023\162`\215A\221T\138=\231\132(\216sv\136\130\029\231\011Q\176\227`\t`\207AA\164\202\176\231@\n\246\028\148\179\012;\206\022g\141q\157\182\159\207\238fo\234HS\138\140q\163\248T^e\005\160\1977\209TV\198\185\193\027\197\200R%ZZh\164\006F\"{\136*k`\213\225\176Ie\140\255\153\221\245\2207\243\175\251^\\\196\1852\141M\140m\255th\148w\179\208\132P|\187\208\196\014\155p\011M|a\019\140;\223\171q\136\254\240.\159\202\215\\\234\199\243\240\226T\140\202x\247\237G\195\250\161\199}\000N\n8}We\001%\003\148i\155T`\230\128\185;\246\165\147rY\224\250\028S\253\181\235\134\135\188c5T\226\202}\201\014\231\226W\253\251\216\147\2093P\170\223\191=\031\127\142{}\140\132\227\253\182\237\029\184$\n\2397m\0258\014\190\251=[\014\015\2259\007\199\214\011\014\014\003\229~\167\150\131c\243\021\135\007\0078T\191G\203\161\175\000\221p\232\216\218\158*\148D\219A\154\014h\011B\237\194\132\018B\017va\t\018\141\240\133\011\161(\206-Z\130DFK\"v\024=\151I\bEAs\153\018$L?\011\161(D.s\130\132F\011R(4;-\203\016\nc\231\178\162P\152\131:\196\194H\185l(\020\154U\164`(,,5\201-B\018\177\226b\017\181\194R\017\177\226B\017\181\1622UD\172(\194\173\136Va`[\017\177\162x\182\"Z\133alE\196\138\162\215\138h\021\006\173\021\213*\012T*\"V\024\162VD\1710\200\172\136V\161Q\162T\020RVD\168\200W+\"T4\199\173\136NQ\220X\017\157\162p\177\"2\133\149_\019\157\194\b\172&B\133H\162S\152<\209)\142\000\235\167Po\195\225\239n\243\165\246\215]\135\026\161.|\194\245S\217\205^\0290\225\169\218\023#\149\186\1381Q\171\214u\140\137\219\174\137R\017\243)\2490\134\190\213\212\007\154-\212Z&\194iFmd\226\001'ie\166\133D\023I\018\018[\153\168\017\177Y\203\196=$&2\017N\020\155T&\194\169b\147\201\196\243\0062\243\b\019\018\011\153\248\011\198\190M\233;rl\193\162\169|\188\184N\209<\029\240\195\237\251\140=~\025\027\154\127\250]4Bk\158\158\022\139\155\027\237Cq\208\219\024\031\025\141\146\027\235\019>wW4\197j\158^\243\136X\199\245\165\253\241x\184\253>\248\249:~\167\223Dkw\253\178\019H\183]lL\176\162\214K\172\000\238\211\179\250\014q\127\211\221\192\255\149\000|\n\240)\143\215\235\247~\rN\217\219\175\135\253\236v\253\170\1589\247\179\194\203\165\219u\219\183\r\127ZS\233$BC\188T\230\029\001-\139\208\016/\151y@C\186\136\208\016\175\020y\231\205\tUK\021%\"f\029c\162\170i\162D\196T1&\170\030\029%\"\166\225\152\231O\007\224\150\135\163:t<\028\149\191\229\225 \239f\253\254\169\174o\166\027n\160\196\174\220)\147ph\180\164aR\014\141\166j&\227\208(Z29\135FA\168)84\nYL\201\161Q8`*\014\r\023OL\205\193\145\175\155\134CC\219\138m\030h\\sp4\1715\134C\163\016\217X\014\141\214\137\140\227\208h\0165-\139F\197\180\172\196\209\210\130e%\014\023\r,\171q\212\199XV\227-B\179\026\135+h\150\0219\002\179\026\007=\150e%\014\250+\203\n\028\244V\150\213\247\021\128Yy_Q\tYuw\b\205\170{\156I\127\002\138\197\148-\1608L\185\000J\139)\252\203\015\202\1731\229\000(\t\166\236\000%\197\148o@\201\132\140}\000N\1429?\128\226;\194\169\187m\023]\142\007w\219\183\002\164\018\145\000\222\247\137s?O\222to\031\187\227ex_\239|9\002\213\184Z\204\220X2@m Ub\169XFE\182\230\216\177\1864\136\004\240VLD\204\159\131T\137\229;\213\190\179\191v\238\171\223\210\193yl}\167\242\234\175\143\150\251\233\022p\2246\017\210\138\150\175M%\182D\012|\237\248\253\171U\187\221\002Ohs\145\tH\005\172\030@(\227\249\019\203W\201|\137Z\227\166\1964\179^\191\247\203\252\221\246|\221F.v\154u\194@\0176\165\216\014@3\006\138\1769\197^\001\180`\160\b[R\172|\153\211\172+\129\13085\230\160\230Q\148\226\000T3\205\131\234\209P\236\017@-c\022\213\163\163\216-RH\203`\193,\208$\140J?\016\150\145\233\0074\204\232\244\000-3J5\b\203(\213\192\\0Z\253\141\176\140V\127C\195\140J\209f\177I\024y\162\237b\1474\028\024\230\131\1451\21826\137\230\192\2084#e\180ml\018F\204\176\132\140\152q\001\0255\163\242\165\140\152a\241RF\205\168t)#\230O\132e\180\252\t3\193\136Y#,\163e\r\r3b\222#,\163e$\229\148\145\242\ta\025%\239\016\150\209\241\023\19422>\195\138`T\140v5M\202\168\024b\025\021\195L\204E\028\191Si\1785\143Gg\196L\150\000\002f\164<\227\n\t\025 `F\2063b'\174LVD\136\152Y\202\204\029$\214<\209AB\003\154\020\215\184\226\025GH\208 \t\\\227s\177/<\025m2\027\146\"[z&s!C\218\2123YK\225\207c\222!:_\147\236H\1835M>\151>~\194\199\228s\193G_\2521\249\\\238\223\199S\191\173\229>\251:\185\028O\1280W\251\243\129 \176\183e\242\130\135\243[[\166\152\215J\252i S$\004/<\012d\138\148\192\133g\129L\145Q\184\244(\144)rB\144\158\0042EA\241\194\131@\166(\t^x\014\200\020\021\133K\143\001\153\162&\004\241) S4\132 =\004d\138y\2310\189\235zk\176\135\024\188\230\210\020}k\175\007\218k-\195\160\199\230z\224\189\198\178\020?\182\214\003\238\181\149c\224\183\198z\192\189\166j)\252\214V\015\244\188\165\2025\131\030\155\234\129\1597T\153P\252\212R\015\252\188\157\202\148\226\199\134z\192\231\205TfLU\194\151\145M\153s\237$\188\139l\202\130k+\225UdS\150\\k\2257\145MYq\237\133_D6e\205\182\024|\015\217\148\rh4\248\026\178)\021h7\244\022\178)5\223r\240%dS\206\253`s\237\007Fg\207o\215C7]V\1547\226\156\215g\180\255\239f\227\014\145{\003\166J\030H\249\212\136\169\210\0072\018\206W\025A\162\161\176\202C(\n\184\171\"D\194\216\188*C(\138\204\171\138 aN\235\016\138\162\242\170!9E\177I\165B(\138@+M\1440\167&\132\162\232\179\178$\167\b\233B$\n&\171\150 QF\235u\bE\129d\157\132H\020\025\214D\165\232\144\177\1693\n\133Y%:E\135\140MM\132\250\141\144D\167\127`\250D\1680y\162\211_\bIt\138dZ\019\153\162\000\186&2E\225sMT\138+\159\200\0206)\145)\180Id\n\128\205SP\247\211zv\214\001\130x\163\201\004\214\006\211rL\251\192\172\002\179\014\002\173\1964\131Y\149\192\018JVc\218o\204j\132\146\253`\154\194\180\011fi\129%\148\204`\154\197,+\148\012\179\028f}bV+\176p\193\212\026\2114f%\152\181\199,\193\203\134\014\028\2092\137&\020M\240\179\161cG4\193\209\1901K\240\179?B\030\005G\019\178(x\012x\233\216(\193]\240\146\138\018\220e\135Y\130\183H\r&\184\139 \015\193]\132\180\004w\129$\253t\150`\181\020\224\019\014\207_\0265:\229\192pyLg\028\028\174\011\234\156\131\031AVf.\176d\225M\151>>\190\186g\215CU\246\139sj\255\246q<\216\200V\180]'\000\142\240)\143\239\000<\003p\132\207y\252\021\192\011\000G\248\146\199;\000\175A\229\160\2207<\254\b\224\026\152G\1857<~\139\218\202\002\252\006\017\028O\248@\248\022\224Q\002\t\016'\nFm\002\228i\016\030\200\211\192\028\001\129\254Fx \208\2230\001 Q\020\213\218\004h\020m \219\164B\004\152'\160k\180\145l\147\006\017`\018\n\020\251\128\b\192\025`\169\1293\224B\003o\128e\006\206\128\139\012\188\001\1498\005\206\240\137\240\192\023\208\n\129M\1293h\132\007\190\160a\002\192\025\246\b\015|\001\185B\n\\\225\132\240\192\019v\b\015\252\224\011\225\129\027\156a\005\001/@\027\2106\005^\000\241\192\011`\134\128\019\236`\021\001/\216\226\"\0007\248\r{\188\0128\194\005\181s\022z\194\146I\163\205R\204\234 )\019H\152\149c\022\156\185e\133@\194\172\018\179b\027\2396S\152\236 \201\b\181\143\171\196b\214\017\146Z!)X%y\168\167%sm\155'\028\235\177\209\rH)G\146~\139\198\230\025G\025g\2460\153\156\227<~\019\136\189\253js\162'\233\1775\155\135B:98\178\228aG{R\191\182B\221\022a\139\196w\180m\145\176\028aW\219\022)K\017v\182m\145\241\020iw\219\0229K\146v\184mQ\240\028a\151\219\022%\203\017v\186mQ\241\020i\183\219\0225K\018w\188m\209\176$i\215\219\246\187\134\031\215\195\239^\183\139\130\211~s\151\135#|\202\227A\184\214o\238\242p\132\207y<\b\215\250\173]\030\142\240\021\143w :\237\183i\249\218A\217W<\030\\\149\181\253\134+o\031\229\223\240x4\236\151\150\199\163\217W\233x<\154\206\150-\192\163^\173\002\234D\211\217\n\200\019\197\227\021\144'\140\199+ P\020\019U@\1600&\170\128D\209l\176\223\027f\241(|\175\128\164\225\002A\0054\141\130\180~\183\152\199\195\004\128\019\160 \173\002N\128\022 *\224\004p\001\162\002^\000\195\253\202!\002L\0028\002\156\244\215\192\017\208\162H\r\028\001.\138\212\192\019\224\002D\157!\002L\002\248\002\\j\170\129/\160p\188\006\190\000'M5p\006\136\007\190\128\162\162\026\248\002\n\212\234\208\021\226\007\149m\1731\167\003\020#P\016\199b\206\021P\156@\001\156f\1419\014\198?M\"\212\027\140\127\154\012\179\142G\144\191\\H\t\149)\148\241\162\224\167)9\150t\202\2156\161\156\229\240\162\t\213\012~\152\222\170\176Q\022\196\n*a9R\172\160R\150\"\197\n*\227)b\172\160r\150$\198\n\170\2249R\172\160J\150#\197\n\170\226)b\172\160j\150$\199\n\170aIR\172\224\220\0163n\135\b#2\175r.\t\145\031\b\153\134\200\003\132f!\244\019!\243\016\169\017\178\b\145{\132,C\228\005!\171\016i\017\178&\133G\200&D\026\132T!\2427Bj\146\250\015\130\154\016\n\1456D\158\016\210\133\200\029B\182!\018\004$\174%\n=#$Q(\002>\005\170\014\031H\240\237S\155\011\2140]\155s\240+\132\023\028\156\255q*\215\150\028\248\b\192O\173~\170\243\185\219\235\190\144\236yY\215>\197:\253\154\242\217\153\225q8\022\222\234\254_u\231\231\175\223\1319Uk\214\239\023\181\239vo\237I\221\204\rc\196\216\131\255\154N\b\255\234W\226~\221\014mw\238\178\153\031\018\254\151l~t\1875\tg\171\255\127\207\210pp\154\024JJ\207P\202\025\186\245\168\132Y{\196\140#\222\142j\255\026\006\152\128[\230sn\206q\135\131\228$\205\220K\179\224kp8\178\254\171o\163\190{\015\234lN.C\242\173\234\159e=\207O\189\007\133\173x\238\188\184>\221/o\205\230\155mg\191\153\027T\201\174\231n~%A\203\206\169J\166\166\002U\179\217\029h>\201\203\170\129B\nT4'Y\190^\031U\227W\170_7\014\183\201\173\136>\215/a\203\n\176k\131\188\206&9\173e\221wx\175\191\247z_\179s\022\235\168\253\234y\0274\222\\\1706\133\164\020\1472\190>\166\028\250\181\225e\145x\163=~\031\206\195\246\205\240\206E\255\239\142\253\252\167\235\254H\029\146\189\187\230\184\t\225v\239\231\001{<\004\157\160-\2318\227\190\186\203\021A\1719T\169?\027\165\182[\136\174\231\232k\015\022\176\205\028\187\191^\191\"x5\199\015\191\183~\232\016T\207\161\159\234\"\2185~>\182\178i\235\229B)\211\219\029\134:w\t\145\206\207\196A\237\017\178\245\144}\154<\206\173\231\184!\154\235\007H\bN\252\228\135uzP&\151\2505\251g\131J\2392/\007n\007\129w9\127\187\203\155\185\238.\221\215\248\178\235@D\156\187z\237\233g1\231\174\228\221\237\029R\001\248\208\177\218]\134\214\016\193w\025\247\027\208\182\027\2420\188\151\219\015\232\221E\1645\012\237q}\n\211\238\1946\215\211\201\029\228$\238\202\030\138{\180r\145\031\194\254\140Y\189\139\250r\188=t# \239\162\238\006\161\158\207\174\159\196EZ\232!\238K\223\005\222:\179\211q/1\218\181\239\144\189\247\222^\025\007\232\196w\138\173\234\177\195S\156\000~\207\206\231\245`.\215Q`\211\004\243\226\254\190p\179\203t\189^\191\155\235\193u\253\236h?\245\132\220\244\178\007&\004\248v\233\246\238\012\t)\"he\001%C\148\015uH\135)\194\021\016sD\220\160\220\021\136\209\135\239\128R\"\202n\248\245\219\183~\025\000e\175B\204\253\245\188\001\156\026q\206\234\003P\026BI\001R\017\164\006HM\145\247v?o\144y\003I\246z\200\164\154\178\144\249\193\191N\213s\156\192\145e\211B&\210M\178\134\148^8B\201\146\004\019\247\221\001\144RH\0264\007\218,\201 \235\188qHpI\014Y\215\225a\239\231\007\240\011\134/\212\007\245&\r\228\148T\012\244\209\151\236\144;$5\166E\132\1454\152\186wc58\212f\ns\207\155~\161\149gi\204\186\168m\014X\212\209@\215\154P\199\218\002$u\167\237\148\017w\234\014\168\141Z\200:o\186\139\026\235\236\163C\234K\169_\001wO\169#\237\238=\018\162\164\144b\187=(Q\154A\146P\140\028\146P\143\146\022\144\178\029\158\205\229I%&\129\225+\173 \165\239\021\000\167\134\0288p\165\212w\250),\192R_\217\185Od\152\186\200^\157\000\214p\216hq\169\147\160\140S'\233\163\232\175a\245\0191Z\1341-G\012\185\226Y\217\154a\221\\\233\208\247\255o\199\207\207\241\023\001\231\255\022XJDK\227/\003\130\206#\163\254s\128\149\152Q\191\249D\227[F\221\229\132z\176\172\224\176w\209_\129\0162\234(\167-\02683\234\"}P\005\250\135\140\250\006r\137\172a\160o\127:\171\1321(S\028\169\207\187H\210\028i\020f\255?.\215\143t\252\167\219\255\n\254\241S}\002\171F\180z\255\031\128l\023\145\251(\180\143\186nZ~\193\182cl\163\246j\025,\156C\229\196\2414p\172<\161H \225<\165\208\015\208\195\231\025\197n\212\t\020.\207)\026\012\134y\193@\199z\198\156\146\225\160yW^Q0\240\206\188f\160(h\201\137\023i0\212\229\138\"\229`5\215\144\241\0013o G\014\005r\226\017\026!\029ENMu\133![\222\n\164+\232\137\1395Cz\184$\202_A\181\127\221]\129.\138\148\005\223\179\134y\212\019Po_\228\012\020\200\169 ~`\1298\138\146\"Q^+\006\218O\201\250\r\193\226\174\192q\212\221\195N\173\168\2276\224\196\167h\162d\193u\011\021g\003\159+t\148\138\166&\133Y@\141\214\154\141\027AYw\011\168PFm\156|\005\227A\185\142rQ\212P&Qj\007$R\166\011\168cu\239\128\223\151Y\212\196\022\197\151e\030\229\238P\161\1398\021\229\184\\@}j\0124vY-\176\178\007\220\184[\031\192\148\186\140;u?w\027s\015'qe\220\183\207\192A\202\184o\2275\1382\238\221\215\244\190<\128\188\172\140{7\012HK\198\189Q\0271\206\012\188\168b|\247\132Vw\170\132\003\131\n\171\168\127\130v\169\168\027v`RPQ\175\235@%T\005\003\141\133\206U\201\144@cV\212\139P\128X\213\012\180\239[\206\219~\206z\189\205\177\250\127\131Z\190\162~\131\177\212=@WRQo\152\230W\144a\024\006\158\031V\150\129\223Vn;0nWT\226W$\132\150\129\222\215\247`\199W\175\025\022\194R\177\163\169]\1572P4Z\214T\237W\208\1525U;\154\248\214\005\003\005n\\\151\028Vh\201\186\130\004\137U3,\208Y\212T\226p\198[\019\137\003g\174\137\194\221s\152\001\020C)7\159p\253>\241\1804v\128m@\004\239P\017\028E\250\243\234\205\244E\147\249\186\133\022`\164\215\172!g\015\186\230&\129\1483\138\178\155\020sP\191\219d\144\003\212\213\016\223p\176\251m\136s\184\0154\173l\136s8TN\226\021h/\165\169)r\182\131\003H\141H\018V\207\026\005\153{T\255\154\161<\226fX.\195\176\030\139\185\144e\025\150\184p\219Pw9A\235\2121\240v\143\162\030\001\199\014E]\225\015\202\132J9\172\188v\1632\1373\0052\200\231T\190\136\252\bL\144\153B2\131\n[\n$\184\136\168*\129\021\025\143T\189\132+\025h\004\003(VUJ$I\201i\129)/\178)#P\199\t$ \218(Qv:\229$\003W0\183P\173\192B\001\177^\139\164\168lu\"\241\193\208\166%\031E\241\183\150\156\244\nz\014-9'\154&j\226\138h\221I\151\020)(JW\020\1422^3P\191S\177\143\249\n0\209DM@\170\138R\225!'\173\005\174\030\007\207\209\196\005\173?k#\152\000]\161\182\002\007\133l\218\137\164\251\162\002\020\127\139\233\176\2475k\1374-\155\157@\195\152D \1635m\147\138\164H\138\025&\163\025\178\201\005\014\144\141)$Nt\245\192\148\002\029E\178\166\194$4\2454\181\196\185\015\247\128+x$\154\207\024%q\150\205J\141\224\1461\170\145\168Hp\130/\162n\1958\137\003bW\211\138\164\1775@c\216\181\196=M\190\127\006\245b\005G\188\007\144\247\229`<\177\181\169d\005(\208f\"I\150\160\021\\s\211M\\\208DVp\209\r\\\204\177\130g\202\0190+\184g\191\n7\raS%\195>\222\n\014\011\183\024l#\145\240\212\207\n\222\186\237\192\136`\181H\138\196\031V\240\208~\1748\213\014\232]\172\224\169PB\130\167\198\1426Z\193a\209B\136\019\028\021.\b\185D$E\150\147\156\224\151\159\160Z\156\224\150p\193\198\229\018\tt\175N\240C8@\186R$M324\133p\149\196F\194v\130\235\157\209.\151\019\\\015\239\0179\193\241@\247\226\004\183C\161\1293\018g\154\151\163\244X_\187\t\017\134\001\142\2415t\140\200\181\028\246\185\148\132\153-\227a\160\002Z\198\175\236\189\016v\152\018\220\255\001(\169e\\\0118G\203x\212\238\229\244\024\015\219\161\221\187\150\241,\004e\252\t\244&-\227<hY\172\1739\1720Ak\027\1500U\nLF\177\172\153V \147\241\026T\245\140\179\156\192\226E\2038\199y\003k\148\186E?\201\186\160E\232\255\143\181w]r\028\247\182;\191\247S\228\003L\135E\220HF;\028\001\130`\166:u\201\214\165\178\178\1909\198\151\153\b\251\216\2259~\255\161\164\172,\137\216?\000uf\162\237\127U\247\217\011$\129\181p\217\220\139\154&\b/\212~6\169\183\t\182\175Mjnz\254Y\202\021\001\161\016q\006\132\022\016\191\134\140\238,\021\000l\167\155\212\210t\217D\223\168\132\024'a\238\238\138p\169(\214\244B\185I\173L\248\162\191I=L\215\221<n3\155\212\2024\0034\196\014Rl]f\164IMMw\224\188\204\155\212\214t\135\229+\198\012\234\231\241\132\209S\006\r\219\160\166\017$C\219\159\166\017T\003\251\248\166QR\236=\211\016\169Ed>O\2114&\131\194\141H\211X\025\134#\155\218\152\158)2\149\204]\133%\162R\237@\182\180IMKsh\225\168\212\164n\165\007P\205I\175I\189K\191\218\160Mz\147Z\151~\129\142?\207\193\151\178t\128\143\018<s\143\169\150\206D\157I\b}\156$p\201ImL\191\176\012j$\208m\226\158\255\1789\211\030\171I\141M\207g\nMe\004{\248&51\205\161\133\019J\147\218\152\158\241y\005\205\028Z\136\021Ts N\169N\n\166\137%5*AB\189ImJ/\025\019F\147\026\149r/\185\154\212\171\244\130\227\157\176\254\005f\255\212\160\244\178.\228\211\155\212\162t\143\001!\166\014\165/\016N\206\169\023\233\011\131\005ZMjBz\249U\162O\023\210\136y\133\237f\147z\146\19008\153\165\222\164/\012\n&u&\189\020v\144\169=\233\133\"\1874r\160\001\236\165\216\252\251\154&5'\221\129\144\190\169;\233\014\149I\2045\169\001\233\014\184a\202\140\025\024M\255\169\167\232\229\188\161\190K\020\003rL\237Dk\200l7\169\159\bj:\155\212N\196{\240\212Nt\137\189-2\215\191\209\251\167&\181\022-\144\185\151\225M\2346\130\026\198&\245\024\225\2146u\024]6(#\246S'\133\031\168\241^\138\190=\238\252\1519_\246\153\180\184\254\237\231BMlJ\173H\249\189TjDZ\131&R\251\209zSw\026I\253Gk\"xj@B\130\165R\216\022\183\219\169\235h\006}\237\137\233R\169\235\232\194\199\159\213S\136R\002*\203\221\212x\132_jhR\231\017F\166\138\000\229\165\190#\156\233R\223\209+L/\169\187\2325\255!\151&\181\020\253BP\207\249\012\228\231\022\026\014\233\169\145\232\023\022w!\169\133\232\181\244\181\153&u\012\221a\200\"\213\164f\161;\020\r\228\196\024\152\133Rk\208\023\132\203\242\154\212\021\244\011\133}\151\250\129^\127}v\007 :\003\129\249*\245\253\188\214}\221\167Im?wH\232\242\212\239s\143\249|;\252\226u\238%s\227Zn\132\198\173\203@(\233\229\250\012\232\231\171\210#>\170\207\163+r,\1425G\137\t\0232\016:\2059\150\028.\246\142\005GS\189c\189a\"\164e\193\193\0235\154\182\201@`\210iYl\027\186\012\139\r\170\237\154\150\181\006\133\204Mk3\144\236\171\177\166uE(\rn\219\022\161'\186aV\218\150\174\214g \159\031\195\152wf?\000\205:\219\209=\178\174\240,\217\178\176\222\232\185XV\007\0263V\213\017f\195v\202@`n\234XUG\202\182tM\006\003\029\221\169\012\134\180\216\233\012\b\250\173ce\029\233d\211\177\180\142\231\023:wu\172\170\019v7\203\137\158\135UDy\230\142UD\167\160\142\165s\222~\229\022\233\165D\199*\194\228^\199*\250\001*\234\004\021Q\023\b\234\185{\255\2028ABph\237\005\229\140\208l/(\006\190\028\213\244\130RF8\158\245\130@F\011\177F\138\189\029\1423(A\026\176@\247\130\030\234\222O\244\130*`\147\218\011r\216\148\014\018}/\129\238\216@\023\019T\177\165!\0224\176\165a\019\184\207\185\181~\148\163o_\024\252\169\179\219@>\252'h.Bs\159L\248\255\210t\170\030>\213\164\014%\218\198\165\254\164\215b\006;\245)\189\022\146\183\169K\233\023\130.\146J\138\150\178\212\127\132\249\237\212u\244\202\175xS\179\209+\030\"Rs\209\205\159\015\209\189\028\253\201\147\0282\149\r\245y*\154O\182=\188\216\144\255+4\153j\139\018\025\169\145\232\245\012\138M-Cs\232\229;\216k\191\187\252\160\206\001\014:\169i\232\245\012G\175\212*\244J\175\nSW\208\028\154\153_SC\208+mnS\027\016\190\021M\205?s\232\1754\031\227R)\204\187\004\218\204\164\030\160\215\247\179\158\223\186\203\209\137\028\160\204\182I\029@\252\193\214&\245\250\220\207\134t\005\159\005U\185\140\154\212\238#4\130I\150\212\233#\160\169\244\185I=?\015hB\197,\138x7eQ\197\175\2415\169\239\231\190\001\\'R\199\207\003\012V\164\212\242s\143\162O\1464\169\217\231\030\006E\221Mj\247\185GQ\00605\252<\162\232\022]\022F+ah\011\176O\162\"\190\203\225I\028\161\207\163\128\161!+\204\242\203\228\144\213d~\171\027\178\138\164|Y\024\243\168\252\028\018b\r\154RU!\171L\218\179\141\171<\n\186v\204\202\017W\242Q\229a@\132Q\023`\159\253\186\206&\161\199\172>3\171\202\152\149(\1915\031\179\026\165q\028\219<\138\250(\171LJV\142}\030\149\181\1774cV\160\248I\254f\204\n\147r\128cV\146_\230\rrT4\227\152\199?|\\\251\243\193\249\r\209\024\127\1675^\015\199)\223\014\237\183\226\170\132\251\249n\006[\200j\024\1871f5|\162\215}Q\231a\244f;fU{\250\028t\255s\236\127~\137\025\026\203*\025F(fe|\206\2069\177\173\192f\127\014\160\137Ya\255\028f\172E\139Y\133\211:\031\179\202FaG\016v\182: \138\186\134}O\020E|(\165\181c,\192\nsG\156d<o \166\021#~%j>\255\029\239{\0184\250\1309\245I\144&,\023\147 \199\210W.\154I\208\"t\216$(m\251\181`\195\224N.\011\250t\232\211\195\167R\131=Oj.\218PmPj+\218\172\183[\154QS;\017o\014R\003\017m\bR\255\208\230\\:.\165>\162\r\222t\020B\011g\199\212I\244\011C\247\164R\023\209/\016\166\031U\234(zD\241\210\170Rk\209/h\190RB\165\030\163_\208bY\174J\189F\191\208ptP\169\233hs\231\031\024\169w\\\022\165\001\213\230Q\249%E\1656\164;\248\0260=c6\190tA\159\003\211\190]\173\006\134\021\182\182j\021\024\011\027T\181\0263\024\"ZF}\199u\169_\166\028\248\245sk\000\223\028WMF\143\232\023Q\141\172GTR#\138\240\235\157\014MK\170\017\021\248\149\181d\156\168\189\220\006D5\162\244r\223\tU\141\160;\016[#\136\141j\187T\211\137\193\159\027\134\012\174\007\220\175\254b\172\151\177\249\014\016\180\005,m\004)\209\173\b\n\130\249\178\017\132\179\253\217O\132\153r\152\178\139Z\165\174$\249\199\217\231\200&\141,\157uT\234B\218f\252.*u\"m\225}\185J\157H[\015\195\149\250\143\182\216\029.\r\165\185*\245\031\241\231\193U\234?\130\004\134J\189G[\248\t \149\154\143\160\188I\165\190#*WV\169\231hK\1635\166\1457\186!\"\166\b\144c\2348\154C3\212I\205F\219\243\238\b\031\136R\169\205h{>\144}R\165\254\"\204\004\169\212Wt\137\205\190\175Q\169\175\232\014Cg\011\149:\139\238P?\232RN\004}\142\026>T\155G=\190\214\217\209\181;\177\149\175\1493s\253^B\194\242\148\026\144\174\193\133!\024\178\160\207Wf\160.\029r`D\1412*\195\241D>\216\213S\026\t\228N\253G\248Ka*5 ]\127!l\189\155\137p\162\205H\234E\186\130\190\210z\153\173VjMz\252m\179\204\157\026\t\tJJ\157H\187\249\148\190;\159\214\155\r\221\153\019 \016\218\n\1614\024\137Dhk\158z\145v1O\241\212o\244\1338\211\208\r\002$\187\139J\173G;\160\127j5\218\229?\172\161R\199\209nM\253\152\242\159\142\169\169\209h\247eO*\156\169S\183\209=\244\240\243\021y\190\141T\029\235\221HbM}G\183\232\252;n\149Z\144\030a4\239\166\134\164%\174p\158K}J\015\r\208[Y\149\154\150\030p_\181\227\133\190\237\178\173\144\180RW\211#\236L\189\236\1798J\137\170\212\214\180\196\253|%\128\227\027*[\192q\026\171\027(\181\020\179-\149\178\251\202Ny<\225\156 c\2509l\149\154\161\136B\169\003jw\158\019\006rl*N\162J\234x\186|\187\238>\131\143\139UjyZB\249\200\146Z\159\150X*\247S\169\225I\128~}}\175\178\205\174\212&\015w/Ay*H\157P\197\143\005\170\212\250t\193|mW\025\023J\184\207g\252\245\210\004\026\026\133\134\192\131\162R3\2125\248\238\199\1623?j\169R_\212\018\r\021I*uG-\145\244\027/\170mJP\\ ZU\130f\171aT\171KxN6\183\166\132\133\210?\213\218\018\146\214\164\214\149\144\199\245\198\211\r\183%0\157|\219NF\214\252\238\159j\251*\240\019\rQ\"\2177\234\214!\141$\222\1324\020d\156Z\167\232'nTj\153z\227\247?\169Y\n\204[*\181H\189\229\127\172T\165\006\169_\bP~\234\143\250\130\208\192\166\238\168_\016\024\204\212\028\245V\216\237\167\214\168/\004\221\150c\004=|\139\016z\144\142\0170\224\169+\234\237\238\243~8\248)\253\215\007:v\165>\168k\240\215T\006\011pj\133\186\135\209\220\155\186\161\238Q\148yJ\141Q7\212\215a>\247x\137d\224\171\246*\245F\029\136\248\1695\n\190\251\161Rc\020\188\178W\169-\234H7j\210\200\231|\206!uD\225\0067uD]Z\207N\029\169\021\234\023d\164;\234r\024\234\247\158A/ts\1581d\011S\1691\234\014DY\213\212!\245\011\132\175aR\163\212/\016\165\228S7\212/\012n-S\159\211/\016n\179S\191\211\029\136,\176*\245>\253B\209\015|\168\212\252\244\011D\211\163\215\025\012]\199d00H\222f0\192\006\159\209\017\158M\188\168\164\219\135\129H\176^T\018\239_\189 \"\026~A;\155\165\201\129\198F\144\208\142>j\173\188\160\029\234\216T1\164\253\212\001u\249:\007\196NRl~\226K\237Ow\024\172\136I\157Pw(\252\156\134J\rQw0\218\252\167\214\168;\016\150\195\170\212&u\007\163/\194\171\212$u\135\0026\166V\169{L\174\158T\165\190\169\025\234 \182\019b\007\n\238\133\224\003uU\170\017\202\214\165\190\168Kv\236\133z&H\209\159\031\t\139\191\249\205s5\140\217\214\230i\249\246/\151\191T\180&\b+>\247\016,(\139J\141\130\160\168H\138\b\141\024\012\003\021\148\024MU\155*\b\210\161\021/\024)6?y\004\155\193\208+\135 \200\005c[)\182pS]\0063\208:\017\250\028\234\188\161,N\240\025\028\253~\168\nC\006\133\148\r!\131\162\239\004\1690\230Q\153u6\196\0124\227\030Ua\202\000\177\\h\\ePX+16\025\020\238\011FAJ\235\029\029\193FIH0J\163$\164C&;;Z\017\240\235[\138\151_3\187\254\027}\139R\141\146\166N \144Q\016\021\221\154\160\165\207*\151\159\175\1893`ARD\152Q\144\209\153\0317\149\015\144?5\025\029s\132O=EG\164D\020B\161\016,5\005]b?G\248\2427\238\152\212\023t\169\004\133\216T\t\156\022M}?\240\163`*\181\250\028?9\128\136T\002\148NI-<s(=_\202r\252L\144J\173:\228\006Q\169%g\014\197\215H\169\003\231\136\247\224\133P\216b\164^\027\210oj\1769\205/G\143\167xX\031!\025\144\218lN\254\171\252\029 \017!t\168O]5\167\\\189cj\169\193\147u\234\155y\216\237\237>\191C\187[_\191\147}\251\023\252b\182J}5\167\130\169I\165\254\026r\198\169\212Us\250:5SN9\181\215\252\194\224[\160\212^s\186\203l\192\006>\181\213\220\131h\164:\006qiyj\182\249\133\194g\242)\134\202k'A1 \196\212ss\162\254I\149\018s\028NUBC\156\138c\205\155\002\157\186kN`j\210\169\165\230\004{\019\157ZhN\235C\169\142Y\167\238\153\211\207\253\t_\201\2280\191y\244\211\169\155\230D\253\150\138\130\b\170S\223\204\233\252\n\161\169\002`5\209\1695\134\178\r:5\194\156~n\245.\127\249\225o\127\135\151\n:5\196P\167$\244?\227\180\162S\219\203\249\242\015\004\1994\248\246\221\239\249}\225\237o\243\159\021\003<a;\199\159]B\203\172N\157/_\224\243\211!\206\127;\198\159\159#\255\250wh*\209\018l\204tj\132\129t\173N\173/\212\245\169\217\229<\230\206Y:\181\186|\253\170\n\229\238t\234u\249\194\192\194\174S\207\203\023\164\198\243\172S\027\012\225y\170\213\169'fn$\019\238\133\240\\\245\166N=0\191\016\197NM\021F\133\031:u\197\208T\146\154b\190\190\t\201>9\157\218b\190P__\172\133\025%5\196\220\253\192\r\156$t\234\141\249\002\193\216\164\198\152\243v\128\\\137Nm1\151OcB\172\145b\191^\149\225\199\254t\234\146)\127\127S\167~\1533=C*\160]\134\187\169_\134\166\190\212/3\207\150_o\215\017\229\005TV\027\169\133\230\012\217d\157Zh\230\208G+\193\011u\232X\132\238\b\0263P\026\244\1371t\139\169\211\230\023\134^\\\234\212p\243\011DS{j\187\185\199\228\235Hu\234\195I\193p\022\209\169\031\231|\128\141aj\1949\031\168U'\132\194\132\146\026n\206Pr\160\181\160\148s6?\172u\159\129p\145\160\214\158q\244\011\007Z\015\012\026\145.\129A\207\244Tc\014\003\002\2081\007\202U\151k=\229\160\208\027f\149\001\193\133L\195\024\018\169Q\140\161<\1856:\003\130\245\198\152\012\134\196i,\131^\233\230\028c\1680C\155\150A\228\128\212&\163(Z\bMFR\148\137\208&\163'L\165j\147\017\020\157\tMFO\231\252\023\242\180\201\232\n1\025Y\205\127\163\205\151\145$E\193v%\006\231\247]\169e\135\2028t\234\204)\0259uj\207\185\247q\002\198\22800\141\164\198\156s\249'Lu\234\198\153Q\223!\182\021ba\161N}6\151\003\219\150ZN\1652'\029@\245\169\167\230\252\003\214\204\212F3\135Vl|S\243\204\249\007\141U\"\005JL\1646\152\031\153o\136\234\212\2452\135\127\166cK\\H\157/? 1\171S\223\203\015O\195\148:_~D\024\255\212\248\002\031\210\215\169\239\229\199g\226\026\0176E\000\001Rw\203\015\168\251\213\169\155e\014\189|q?7H\169]\229\007\029\022R{\202\143\245\015\234\189\132\226D\191\212\144\242\227l!4\b\161\249\201+u\155\252\192\247\143:u\155\252\1605X\250\201\157\183\167\184\241\2195\164\160u\234)\249\245-E\2182\166f\146;\231\011@\018\138\251\237\151\245\232\149\146\023\169ud\156\147\250\015\166\134\159\007\012|\133\166S\015\201\220\b\240:u\141\140\191~\250\t^X\232\21202\158\135\210\134$5\138\196\031qWx\011\163S\147\200\029\138\175\149\254&\245\157\143\245\243\151\224\252k\174xL\167\022\145\231{s*\b.\181\139<GE\177\194O\187\019/\132\159\020\197\225\231\223\216\241;\2382\254\153\029O\159C\208\153\223\217\1932E\157\249\161\029\164A\230\135v\202_\207\215]\238\167\172`f\201\252\226\014\237\211s?\184\243\002U9:\247{; \191\220\207\237P\218\168\203~\023\147\014m\157\248\029\178\202\164m\151\249\014\217\245[t\217\239\180\235.\243=2\156\153R\211\2016\"\015\225\027\025Y\171\137\238\132\239d\192\150\184\147\236\198rh/8\140w=\196\n_\006\184s1S\r\158\238U\022G\028\232\0057c\211<\029\246'\127\169O\154\219\136\167\143\1671>\031\"|KH\167~\148\171\133-_U\161{\193\164E\244\206yR\178Ex:\181\166\156\214t\145.\147\249\007Hz\030\129\211\163yx%\189;o\231\158\t\1597\244\190\191\230\"w\255\237'L\221\227\026\196\189\204C\178@\234{\164\"\228\180\1593\214\143@s\015\212\b\\\127[^\209\222\003\r\001\143\235\239\011\156\187\199Y\196\205\239\027w\011d{\143t\132\140\235\231\151\211\002\217\221#[B^(\191\000\246\247\192.? \215\202\025\024\145>;\"\011\228\195\144\248\236\144,\144\015c2\228\198d\001|\024\148\144\031\148\005\244aT\198\252\168,\160\015\195\018\179\195\178@>\140\203\148\237\2203\244l\179\202\246\236\025\186\181ir\221z\134>mT\190O\207\208\161\141\206w\232\025z\1791\217\222<CW6\168\199\253\140z\190\150\216\255B6\247H\151\155\229\150\200\251y\174i\243\178Zb\239u\213t\217\161_B\031\134\191\207\014\255\018\250@\001\159\163\192\018\249@\131!O\131%\246\129\n!O\133%\246\129\014c\150\014K\232\003%b\137\018g\162\196T\162\196\025(\161VeJ\156\129\018\170)R\130f\004\165\138\148\160YA\233\220\179\222LD\240\172&\255\172K\236\195\179\218\n\236\227\239~AC.\219i\203{x\232\1806\219iK\232C\167u9\029-\145\247:R}^GK\236\189\142\148\207\235h\137\189\215\145\026\178:ZB\239u\164BNG\023$\233H\141%n\161\142b\153\031\168\163\169\002[\195-\189*r\139\004\169\155\"\183H\144\154\023\220\171(\190^\241\254\252J\227\227>\188q\171y\223~\215\156\254\173\230.\175\t\239\030I\171Ek&\199\133\225\140T\2086G\133\005\240\158\t\218\229Gs\001}\024\191\182\012\173\226A~\173^\220\193\003\r\242K\245\002\249\192\002\159\191\247\251\219\190\228.\230]\012\220\252\240{\r\205\171\0164\020\178\189\240\208\206\245G\022\168O\198\223l\199PC\2417\027\154\243\170\208\210\244\187-\r\208\146Y\229\022\134\135\134\230\227Z\015\139\132i\242\139\196C;\235Y\178\026V\012\163~\179\161\135.zhI\255nK\003\181d\242\171\216CK\231\227\145\014\n\198\254f;\154\026r\217\165\241\241\201\150\204\190_(M\251\187\rij\169\251\221\150\012\181\212\255nK\015\020xh\202\023\210A\183\151\137\2424n\134bNh\t\191\159|L(%\134\150\232\007U\142\165\236\208\018}?\021\155XH\017-\193\015R\158\178\011\166\223\209\177\212f\147o\011\224}O\219B\246m\001\189\239e\155O\191-\144\247=lu\017I+\237C3&\191^>\222\192\253 Y[D\210\r<4\147\153\011\158\215\163\127\220\030=t{\155GFL\177\217.G\145\025\0235q\164\207qd\137|\184[\159\187\230\233e}\024\151;\203\230\223=\220\244\144\187\244\181\129to\250\216B\200o\145\215\223O/I\019\246\223\221\139\203\142\229\167x\\s\249yb\197\243`[\139'\203j\254\186:\189,\178\181\205\191\187_\145\220*\215\192\165Nf~K\145\180p/$\135\147\192~3\206\200\227\199\229In\007\184KG?4t\223\197NU7\244y_|O\186\230\169\158\207\153\022\178\167\143\023\191\153\018\248=\233\029\239\024n\229\025\191h\131<q\174\212\198/\190 A\\[jd\254\191\156>\238'\201\251C\152\235\138\240\245\244\000\183\015\240|J\255\\3Q\187|r\255\\3\215\186l\154\031\155x`g!\225\143\141\220oH]!\245\143\141<H6\255\018\000\219\184\223`=\212\001\189\157w\225t\246\167\245~'\232\237}\127\157\160\191\173\199Ypo\210\203\187\135\002\161\164\177\203\167\028\214a>\244\135\253f\191\131\022T\174\133q\237\159\247\187B\011\186\170\133\211\220W\153FLU#\243\2521fZ\233\1785V\\\006g\186\006\129h\2113iq\136\031\239\234\012\000\148\188\214\030\190Pc\246GhMZ\0262\248\187\236\142\031\232\1466\139\131\03130i\133\200\003\012\n\021LZ%2\156\127~\231\228\231\021=\221i\242\166{,\254\030\147I\139E\198\226'\017MZ$2\022\191\185c\210\210\144_ v\211\154\1808d\134\169|\181\185I\171D\198\243s\177\156\202\164e\"w0\168H1i\193\200\003\232\201\159\1586q:\201\224\180\132\228\023\152\190\148d\210Z\146;\208\153@\138A\252\027\208&-$\249\005\003\223\141I+G\2380\192\142\180n\228\0303\235\006\139AL\239rP\026\182\180\132\228\023\234\133\030\172\203`\232\193z\198d\139\\L\250\137\211_\200L\249\186I\191rz\135#I\167_9\189\007\2414\222\143%\220\207\194\205\204\rgd\183\241\175\127\174\230W\1342p\202\001\229\026A\227WYP\169\163|F|\155\243\203\175\031D\007xF\134X\028l|F\133[(\2242>#Cp\181\027\159\145!-u>\163\1917\194d\212\135\211\179\207\200/\247\t+\147~\0275\170\2268{\196\208W\223M\250q\212\235\204\250\244\029\194\019\205]\011\236\190\172\202\188\015J?\150z-\176~\172\241d6\197\n4\205g\233\007U\005p~bK\191\175*4\001\191\152`\210\207\172\138`\152j\210\175\173\nh\168\0114\233WWE0\2001\253\248\170\128>R\151Y\017\\\000%\194|\190+8\197o\159\154\244\011\172\191p\151=[fd\187\012\178r\217\027\250\1546r\235\201\1441\001\196\003|\163\212\164\159q\253\133\162\157N\2501\215{\204!\251#\129&\253v\171\000\222\017\023#\131_|\206#a\210\015\183\254\130\214.\217\233\007]\127\181\129+o\250a\215\007PiFN\191\244z\007\135_\2305\233\231^\127\129\240\231%M\250\225\215\231\210\143\132\153\244\195\175\247\152\207\159\226\006\197\005W\198\210\2069d\212\138_\1455!\163Tt\166\153 hs\240\191SVn\210\143\195^J\175N\235]\214\166k\210\175\195>\175\191\012\174\215\191~-\155\188\249J?\022\251|\174\250u \147~0\246\249<\254\218\235\021\143\217\233Wc_n\198\194\2205\019\157\222\187fnY\129\251\255\"\1832\178\219\007~\154\197\140\236\245y\1339ed\171O\230l?\178\197\135&\129\244K\178\247\150\152\031\159\201\146\031t\193\244g\208/\231\139\149\134p'\134\171\006\194[9\220Bx'\134k8\236\164\159\142\189\134[\n\247r8\221\251 \134;\152\b\210o\200^\195\219\254\231O\152\221\254\133\201\157~U\246\138\233\232i\162\028\222\220]\175\163G\155Dl\015\143\150~]\246\018\222\208\176\164\031\152\189\134\027j]I\225\170\161\214\181\028\222C\184\017\195\233\252\028\173\028\014\132\141N\014\239 \\\148\195\229G\159\229pQ\014\151_7\148\195{9\220A\184(\135\203\007N\228\240A\014o!<\200\225\244\168\"\249/\142G9<\202\225\176\214D\145\239\023\183\154\024>\137|\191\020X\201\225\141\028\014\140\156\020\132\127\153G\001\167\2438L3O&\015\156\015\239\159\030\1983t\247d+[\168h\202\229\155\250\250\238\020,\171\147(!Cs\254\212\201\225\192\218I\148\208\229\029\155\028.J\200\016k'QB\006i\024\228p\152G\167Q\014\167\155\137r8L.\147(!\011\253nW\162\132\220\170\131pQB\174i!\\Axa\235gW:\015$\019\176]\153<p~\201p\251Uz^\224\237\202\230\219x\005\205\216\149\203\003!1dWm\030G\031B\182\171\174\000\140\128\235\2438H\153\219\149/\224hT\134\002\014\191\140dW\162\184\156v\016.\138\203\025\226s\132\240/\186\012\000\156\242@H\187\216f\149\199\209\226`\155\166\b\204P\186Qy\244\142\174\170\243\184\250\005\1976&\223\2125\155\248\153\190\161\187\177\249&\136~\141+\224\152~\141(\205V\025\b\023\005\217\194\022\1956\226\247\014\174\211Sa\130l2\031;\192O\229\219&\243\141\131\023H\152\217\244c\184\191@\244>\193\166_\197}\000U\147&r3\152\178\176\233's\183\235\219\133~xX\169\210O\229^Rl\183#\218\246\215\247\200H\214\233GsE8\253\188\163U\249o%dS\2156\253\164\238\226C\011D\135\244\251\186\143@\248\134\136M?\175\251\128\131\247/6\253\192\238\003\236\021_\026\217\244\131\187\015\200\\6\193\166_\223}\192\226\155K\155~\140\247\001x\207bh\192g\027\160\209\028\242\168\220\167\185m\250\181\222G0OtJ\252\217\207\187\169\232\133\128\153\223\254\132\023\022V\229~\250\243%f\011O\172\206\252\004(\207\tZ\250\141C\199UWVK\191\206\246\245\251t\128\209\018\230\246\145\2283\148iYm\016\180\243[\002Y\004\209\239TZ-\252\172\212\207c\\\241]\185\213-\163\227\175\143]\0018\253M\158uy\200\132_\028y5?\031\242\025@\194\1430\252\250)\182\220Gpm\250u\223_\208\187Oi\200X\2413\217?\127U\0110\153\239c\211V&\247\141\223\209\031\224\163\2386\247}\223\235^\200\193\0069\247\141_\\\181\141\240iFXw\211o\251\254J\132\023\232\156~\225\247\215g\001\127\r\023\143\247t\169`\251x;\236\255\220\174w{\255Yr\026\182\171U\003\241\r\196+\136W\016o ^C\188\133x\003\241\014\226-\196\183\016\239 \190\131\248\022\226{\136\239\228x\200(O\151z41\158\198\203C<\141\215@\241\003\000\002\0004\196\143\016O\003\028!\158\006l\130x\024\000\015\002\128\183D\147\007\001(x^\015\002\128\211\211\228A\000\144\213\159<\b@\129\000<\b@A\127z\016\000\1886\152<\b@Q\255\131\000\224\133\205\228A\000\154\250\031\004\160\169\255A\000\154\250\031\248\175\169\255\129\255\154\250\031\248\175\169\255\129\255\026\250\127\000\254\027\232\255\001\248\015/\028\166\001\248o\160\255\007\224\191\129\254\028\128\255\240\174g\026\128\255\134\250\007\248o\169\127\128\255\150\250\007\248oa\130\030\128\255\022\248?\000\255-\245?\240\223\002\255\007\224\191\165\241\002\254[\224\243\000\252\1834^\192\127\007\227\021\128\255\014\198+\000\255\225U\251\020\128\255\014\198+\000\255\029\140W\000\254\195\155\212)\000\255\029\232%\000\255a\179<\005\224\191\131\241\n\192\255\150\198\011\248\223\210x\001\255[\026/\224\127K\227\005\252oi\188\128\255-\232+D\138\135\rY\000\001\180@\136\017\004\208\194\000\143 \128\022\006x\004\001@\173\2004\130\000\160>d\026A\000\029\012\240\b\002\128\023\161\211\b\002\128\247\247\211\b\002\232`\128G\016@G\227\005\002\232@\192#\b\160\163\241\005\001t4\190 \128\158\198\023\004\208\211\248\130\000z\026_\224\127\015\227\021\129\255\240ry\138\192\255\030\198+\002\255{\024\175\b\252\239a\188\"\240\191\135\241\1382\255\155\021\140Wt\016\015\227\021[\136\135\241\138\029\196\131\030c\015\2414\190\030\226i|\007\136\167\241\n\016O\2275B<\141\151\204\255\1342\004q\130x\232\255i\005\241\208\159\147\204\255\203o\246\190\137\241\n\226\149\020\175/_c\139\207\031o\167\139\t\252e\029\015\251\231\205\199\219\203\147\135\148\148\190\252w\000(\000(\002h\000h\002\024\000\024\002X\000X\004x@8B8\000\180\b\160Kt\136\024\000\209\019\162\005\128'@\007\128\129\000=\000\002\000d\253\204\128\145\000\196\191H\000\226\223D\000\224_C\146h\128\127M\131\000\024\235\1344\209\000c\027\210D\003\252kH\019\rp\163\177\b\160\135 M4\192\166\1344\209\000\155\026\146\132\00265\164\b\005ljH\017\n\216\212\144\"\020\177\137\020\161\136M\164\bE\220 E(\226\006)B\0017\020)B\193H+R\132\130\145V$\b\r#\173H\016\026FZ\145 4\140\180\178\b\000A(\018\132\006n(\018\132\006n(\018\132\006n(\018\132\006n(\018\132&n\144 4q\131\004\161\137\027$\bC\220\136\b\160\145#E\024`\147&E\024`\147n\016\000\247\164I\018\006\216\1645\002\232\018\164\t\003\252\211\164\t\003\252\211\014\001tO\164\t\003\140\213\164\t\003\140\213\164\t\003\140\213\164\t\003\140\213\164\t\011\140\213\164\tK\252#MX\226\031i\194\018\155H\018\022\184aH\018\022\184aH\018\022F\218\144\",\140\180!EX\024iC\130\1760\210\134\004\225`\164\r\t\194\193H\027\210\131\131\1456\164\007\007#mH\015\142F\154\244\224h\164I\015\142F\154\244\224h\164I\015\142F\154\244\224h\164I\015-\140\180\149\2450\224\201\2186\004\128\145\182\138\0000\210V\019\000F\218\026\002\192H[\139\000\152\239\173#\004p\195\182\004\000n\216\142\000\192\r\219\019\000\184aeA\004\030\234\129\0004\212\001\001\212\175#\" \157`#\"\002 &B\000\001\221\138\000@@\215\016\000\b\232\020\001\128NN\019\000\232\228\012\001\128N\206\018\000\232\228\028\000(\137\226Z\004\000;\\G\b`\172\235\t\000\140u\164\tJ\1878\210\004\165]\028i\130\146(\142$AI\020G\138\160$\138#APJ\164%APJ\164%APJ\164%APJ\164%APJ\164%APJ\164%APJ\164\149\0051\226\252\218\182\004\160g\232\b@\207\208\019\128\158\193\019\000\216\218\014\004\000\182\182\129\000\192\214v$\000\1775\"\000\230\153v\"\004\240\187[\001\128\230\190\174!\000p\163S\004\000nt\154\000\192\141\206\016\000\184\209Y\002\0007:\018\004\205d\029\t\130f\178\142\004A3YG\130\160\153\172#A\208L\214\145 h&\235H\0164\147u$\b\154\201:\018\004\205d\029\233\129\146\187=\233\129\146\187=\233\129\146\187\189B\000\136\186'AP:\184'AP:\184'AP:\184'AP:\184o\017@OM\138\160\004rO\138\160tpO\138\160tp? \128\030\130$A\t\228\158$A\t\228\158$A\t\228\158$A\tdO\146\160\004\178'IP\002\217\147$(\029\236I\017\148\014\246\164\bJ\238zR\004\165j=)\130R\181\158\020A\137W\223!\000\216\231I\017\148\170\245\164\bJ\213\250\001\001tO\164\bJ\238zR\004%w}D\000\221\211\132\b8\187\015+D\192\217}h\0161\002B!\"\002B#b\002\132A\1963 ,\"^\000\225\016\177\006\004I\131\210\243\003I\131\210\243C\143\000\224\200@\210\160\132\254@\210\160\132\254\016\016@\247\132\210\1289g@i\192\1563\1602`\006\t(\012\152A\002\234\002\230\131@\178\160W\000\129TA\175\000\002\137\130^\001\004\210\004\189\002\b$\tz\005\016H\017\244\n \144\"\232\021@ E\208+\128\224\017\000t\r\003\"`\154\r\001\0170\205\134\017\0170\205\134\136\b\152f\195\132\b\152f\199\021\"`\154\029\027D\1924;\202\186\136\152\180\0255\001\128\230\163!\000\208|\180\004\000\154\143\142\000@\243\177%\000\208|\236\b\0004\031{\002\192\1326z\004\128.\198\129\0160\005\142\001\001t\137\017\016\148\230\025#\001\136M\019\001\128MqE\000`Sl\b\000l\138\164\bJ\243DR\004\165y\162A\000\012D$IPb(:\004\208%H\019\148J\138\164\tJ%E\210\004\165\146\162G\000=\004i\130\146O\1454A\201\167H\146\160\228S$IP\242)\146$(\2494\145$(\2494\145$(\2494\145$(\1494i\004\192\200M\164\tJ>M$\tJ>M$\tJ>M\164\bJ%M\164\bJ%M\164\bJ%M\030\001\212\175\164\b\202\012M\164\b\202\012M\164\b\202\012M\178\"&\220rL\019\002\228\167n\192/1\209&\165\001\191\196D\155\148\006\252\018\019mR\026\240KL\180Ii\192/1\209&\165\001\191\196D\155\148\006\236\018\019mR\026\176KL\180\229h\192-1\209\006\162\001\179\196D\027\136\006\204\018\019m \0260KL\180\129h\192,q\001\016\251FB\0167H\017\rq\131\020\001[\142\166!A\192\006\162iH\016\176\029h\026\018\004l\007\154\134\004\001\219\129\166!A\192\226\2224\022\0010r\r)\002\182\003MC\138\128\237@\211\144\"`;\2084\164\b\216\0144\r)B\0177H\017\138\184A\138P\196\r\018\132\"n\144 4q\131\004\001\139{\163V\b\000n(R\004l\007\026E\138\128\237@\163H\017\176\029h\020)\002\222\0195\138\020\001\187\129F\145 `7\208\168\022\001\212\175\164\b\216?4\170G\000]\130$\001\239\162\026E\146\128wQ\141\"I\024\226\031I\194\016\155H\018\134\216D\146\128wQ\141&I\192\187\168F7\b\128\129\208$\tx{\213h\141\000\186\004i\002\222^5\218\"\128.A\162\128\247]\141&Q\192\219\171F\147&\224\237U\163I\019\240\238\163\209\030\001\244\212\003\"\006@\004D\004@\144*\224\141L\163I\021\240~\165\001\195\1963\029>\0260L<\227Q\002\012\019\207x\148\000\195\1963\030%\1920\241\140G\t0L<\227Q\002\012\019\207\232\139n\1921\241\140\135\015pL\\\000t\137\014\017@@\240L<\227\001\007<\019\207x\192\001\207\1963\030p\1923\241\140\007\028\240L\\\000\212O\145\016\196X\210\004\029\137,i\130\0148\1504A\007\028K\154\160\003\142%M\208\001\199\146&\232\128cI\019t\192\177$\t:\224\216\022\0010\212\150$AG\"K\138\160\003\142%E\208\001\199\146\"\232\128cI\017t\192\177\164\b:\224\216\136\000\234WR\004\029\137\028)\130\142D\142\020AG\"G\138\160#\145#E\208\145\200\145\"\232\128\227H\017t\192q\164\b:\2248R\004\029p\028\t\130\0148\174G\000p\195\145\"\232H\228\006\004\208%H\018t$r$\t:\2248\146\004\029p\028)\130\0148-)\130\0148-)\130\0148\173B\000\244kK\146\160#QK\146\160#Qk\017@\247D\154\160#QK\154\160\003NK\154\160\227JK\154\160\227JK\146\160\227JK\146\160\227JK\138\160\131AK\138\160\131AK\138\176\196\rY\017/x\146\000\211\196\011\158$\1924\241\130'\t0M\188\224I\002L\019/x\146\000\211\196\011\158$\1924\241\194'\tpM\188\224I\002\\\019/\184\203\007\215\196\154G\174'\000\141\156'\000\141\220@\000\026\185@\000\026\185\017\0014\016\145\0164\214\019\001`\228\1926\177\198\145\003\219\196\026\207g`\155Xc\205K\003\182\1375\158\232\1926\177F[g\003\190\1375\158\001\1937\177\2303 \024'\214x\006\236I\019t\006\236I\019t\006\236I\019t\006\004\223\196+\202\020l\019\175(S\176M\188\162L\1936\241\1382\005\219\196+\202\020l\019\175(:\176M\188\162\232\1926\241\138\162\003\219\196\006\199\001l\019\027\028\007\176Ml\2087\223\128ob\131#\007\190\137\r\142\028\248&6<r=\001h\228<\002\232\169\007B\208X\007\002\208X\203\138\216\242XG\004\208CL\136\1284\030\216&\182\200'pMl\145\029`\154\184\000\224)\1924\177E>\129gb\139|\002\203\196\022\249\004\142\137-\178\003\012\019[d\007\024&\182\184\252\130ab\139\139)\248%\182\188\152\130ab\139\139)\024&\182\1844\014#\002\232\158\"\"\136\226\019\"\224UIX!b\004D\131\136\b\b\133\136\t\016\026\017\207\1280\136x\001\004\t\131\182*\129\132A[\149@\194\160\173J\232\016\000\020\t\168\012Pw@e\208j\017P\0250\031\004T\006%\170\002J\003f\144\128\202\128\025$\1440(\137>\146.(%>\146,(%>*\004@7\141\164\nJ\162\143$\nJ\162\143\022\001tO$\nJ\187\143$\nJ\187\143$\nJ\162\143\164\tJ\162\143\030\001\244\212\164\tJ\187\143\164\tJ\187\143$\tJ\187\143\017\001\244\016\164\tJ\212G\210\004%\234c\131\000\184\167\168\016\001K^$Q\208\203\128H\162\160\151\001\145DA/\003\"i\130R\251\1454A\137\250H\154\160D}$MP\162>z\004\208\208\145&(\181\031I\019\148\218\143\164\tJ\237G\210\004%\234\1934\177\195s\011\152&vx\166\000\211\196\014\207\020`\154\216\225\t\001L\019;<!\128gb\135'\004\240L\236\240\132\000\158\137\029\158\016\1923\177\195\019\002x&vxB\000\207\196\014\247\251\224\153\216\225~\031,\019;\220_\130eb\135\251K\176L\236p\127\t\150\137\029\238\022'\210\003\236\253\212\138\244\000;9\181j\016\224\001\161\0161\000\130\020\001\187E\181\"E\192nQ\173H\017\176[T+R\004\236\022\213\138\020\001{?\181\"E\192\222O\173H\017\176\147S+\143\000\026:\146\004\236\253\212\138$\161\136\127$\tE\252#I(\226\006I\002vr\170!I\192NN5$\t\216\151\169\134\020\001\2512\213h\004\192\2005\164\b\216e\169\198\"\128.A\146\128}\153jZ\004\208%H\019\176\147S\ri\002vr\170\241\b\160{\"M\192\222O5\164\t\216\251\169\1344a\136\177\164\tC\140%M\192NN\129mb\135/\003\020\216&v\2486@\129ob\135\201}\005\198\137\029f\247\0218'v\152\222W`\157\184\"\128!`\158\216\225+\001\005\238\137\029f\248\021\184'v\152\226W`\159\184 \128\135`\159\152\017\176IS\224\159\184 \136&\001\017D\147\017\017D\147\136\b\162\201\132\b\160\137F\129\192VMi\020\b\237\213\180b\004PQ\163Bh\127\167Q!\180\249\210\168\016\218}\129\145bw\198\217\004\156\020\023\004\208\004\172\020\023\004\208\004\188\020\023\004\208\004\204\020\023\004\209d@\004\209$ \130h2\"\130\198<\"\130\198|\"\004M\r\224\167\184\"\128\188\224\168\184@\128&`\169\184\"\232\"\026!\192,pU\\\016\192,\176U\\\016\192,\131\n\161\t\200\160Bh\0022\168\016\154\128\012*\132f\019\227\025A\003\130\018\161\t\200\160Dh\0022(\017:\255\025\148\b\029\000\205\196\bxt\240W\236qZ\004\127\197\030\223\194+0X\236q\030\005\131\197\030\167Q0X\236q\022\005\131\197\030'Q0X\236yG\006\014\139=\206\186`\176\216c\141\134\002\135\197\030\127 R\129\197\226\130\b\128\024\0161\002\" \"\002bD\196\004\136H\b\152F\192e\177\199\245\201\161.`Fp\164\011Z\157\156B\000\140\183\211\136\128\241v\006\0170\222\142\148A\235\159#e\208Z\230H\024\180\1489\018\006\173d\142tA\011\153#Y\208:\230H\021\180\1409\018\005\173b\1424A+\146\139\b :\145&h\tkW\b\128K\180$\nZ\243Z\018\005-y-i\130r\158-I\130r\158\173E\000=5I\130\178\164m\139\000\186\004i\130\178\164-i\130\178\164-i\130\178\164-i\130\178\164m@\000=5\137\130\242\170mD\000]\130DA\153\216\142DA\153\216\1424A\153\216N!\000\030\162#QP&\182#QP^\181#QP\150\180s\b\160\135h\017\001\171]\215!\002V\187\174G\004\236n:\146\005e{;\146\005\229n;\146\005\229n;R\005\229n;R\005\229n;\018\005\229n{\018\005\188\133W=\137\002\222\194\171\158D\001v9\213\147&\192\252\166z\210\004\152\223TO\154\000\243\155\234I\019`~S=I\002\204o\170\239\016\000\170\235{D\128\234zR\004\024\236\020\152-\222\240\200\tf\1397>r\130\219\226\r\143\156\224\182x\195#'\184-\222\176\140[\129\221\226\r\015\169`\183x\195C*\216-\222\240\200\tv\1397<F\129\221\226\r\143Q`\183x\195c\020\184-\222\240\024\005n\1397<\176\128\219\226\031\164\031\184-\254A2\129\219\226\031$\019\152-\254aj\004\002\0165F\002\0165\"\001\136\026\178 \014\216\173`\1818`\183\130\213\226\128\214\029\005^\139\003\014\004X-\014\172j\240Z\\\0160_\130\217\226\128\131\rf\139\003\0146\152-\0148\216`\1828\224`\131\217\226\128\243\000\152-\0148\015\128\215\226\128\243\000x-\014\156N\001\179\197\001g\014\240Z\0280\2131\144&(\213\017H\019\148\234\b\164\tJu\004\146\004\165:\130F\000\244k IPr$\144\"(9\018H\017\148\028\t\164\bJu\004R\004%.\002)\130\018\023\129\020A\137\139@\138\160\196E EP\026\"\144 (\169\016H\016\148T\b$\bJ*\140$\bJ*\128\197\226\136\203\016X,\142\184\012\129\195\226\200\203\016X,\142\184\012\129\197\226\136K\0048,\142\184D\128\195\226\136K\0048,\142\252v\002,\022G\\T\192bq\196E\005\028\022G\\T\192aq\196E\005\028\022G\\\"\192aq\196%\002\012\022G\\\"\192`q\196%\"6\b\128\145\139\n\017\176\167\137\164\tZ\134\"I\130\150\161H\146\160E%:\004\208c\147&h\025\138\164\tZ\134\"I\130\150\161H\146\160e(\146$h\025\138$\tZ\134\"I\130\150\161H\146\160e(\146$h\025\154V\b\128\161\158\026D\000\195'\210\004-u\019I\130\150\186\137$AK\221D\146\160l\248D\146\160\220\246D\138\160\220\246D\138\160\220\246D\138\160L\245D\138\160L\2454 \128\200A\146\160\220\246D\146\160\156\240D\146\160\156\240D\146\128\156\176^\145$ '\172W\164\b\200\t\235\021\t\002r\194zE\130\128\156\176^\145 '\172W$\b\200\t\235\021\t\002r\194\026\028\022'\218]jpX\156hw\169\193aq\162\189\162\006\135\197\tS\022\026\028\022'\218]jpX\156hw\169\193aq\162\221\165\006\135\197\137\246\138\026\028\022'\252\164\175\006\139\197\137v\151\026,\022'\252\1534\r\030\139\019\237G5x,N\248\201(\r\030\139\019\237`5x,N\180\131\213`\1778a9\163nH\020\176\231\213\r\137\002\246\188\186!Q\192\158W7$\n\216\143\234\1344\001\251Q\221\004\004P7\145(`\007\171\027\018EC\140%Q\192~T+\210\004\236G\181\"M\192~T+\146\004\236G\181\"I\192~T+R\004\236G\181\"E\192~T+R\004\236G\181\"A\192^Q+\018\004\236\021\181\"A(\026i\018\132\166\145&Ah\026i\018\132\166\145\030\017\000\nR$\bM\220\152\016\000\151\208\164\b\216\143jM\138\128\253\168\214\164\b\216]j\240S\160qA\131\157\002}\011\026\220\020h[\208`\166@\215\130\006/\005\154\0224X)\208\179\160\193Iq\198\252\148\006'\197\025\171g58)\208\022\161\193H\129\174\b\r>\n4Eh\176Q\160'B\131\139\002\253\r\026L\020\232U\208`\161@\171\130\006\007\005:\021\180!E\208\234nH\017\180\186\027R\004\173\213\134\020Ak\181!E\208ZmH\017\180V\027R\004\173\213\134\004Ak\181!=\208Zm\002\002@\164\134\004A\171\187!A\208\234nH\016\180\186[\018\004\173\238\150\004A\171\187%A\208\234n5\002\160_-)\130\246\003\150\020A\251\001K\138\160\253\128m\017@\015A\146\160\253\128%I\208\234nI\018\180\186[\146\004\173\238\150$\161\137M\164\bMl\"EP\238\200\146\"(w\228H\017\148;r\164\b\202\029\129W\226\027\238\129\192*\241\rK\1984X%\190\225\183B5X%.\136\000\b\135\136\017\016-\"\" :DL\128\232\017\241\012\b\143\136\023@\012\136X\003\"\016\13082\"\128\134<\018\002\230\015pL|\195}/8&\190\225\190\023\012\019\223p\223\219\1622`\254hQ\025\1489kQ\025\240cX\186Ee\192\028\213\1620`\142jI\023\180\239mI\022\180\239m{\004P?yDP?\r\136\128\025\164%U\208n\188\029\017@\143\017\017A\143A\178\160\029\127G\178\160\029\127G\178\160\029\127G\178\160\029\127G\178\160\029\127G\170\160\029\127G\162\160\029\127G\162\160\029\127\215\"\000\198\186\235\016\001c\221\245\136\000\202v\030\017\176\232u\003\"`\209\235\002\"`\209\235FD\192\162\215ED\192\162\215M\136\128E\175_!\226o@4\136x\005\132B\196\006\016\164\r:I\246\164\r:I\246\164\r:I\246\168\r:I\246(\014\152sz\212\006\2049=J\003\230\156\030\149\001sN\143\194\1289\167G]\208;\172\030u\001\179T\143\178\160\179gO\178\160\179\167_!\000.\225I\021tZ\245\n\001t\t\018\005\157o=\137\130N\171\222\"\128\238\137TA\231[O\162\160\243\173'Q\208\249\214\147(\232|\235=\002\232\169I\021t\"\246\164\n:\017{\018\005\157\136}D\000=\132,\138w<\225\130}\226\029\207G`\159x\199\211\014\184'\222\185\178\000\236\019\239x>\002\247\196;\158\143\192<\241\142\231#0O\188\227\249\b\204\019\239xv\001\243\196;\158]\192<\241\206o\253\193=\241\142\167\029pO\188\163\025B\131}\226\029\207G\224\158x\199\147\b\184'\222\241\1480\144$\232\148\016V\b\128\167\014\164\t:W\004\210\004\157+\002I\130\206\021\193 \128\030\1304A'\145\224\016@\151 Q\208\217%\144(\232\236\018H\020\180\199\012\164\t\218c\006\210\004\2371\003I\130v\140aD\000\245+i\130\246\152`\160\248\142\203\004\024(\190\2272\001\006\138\239\184L\128\129\226;N\250`\160\184\000\160\155\192@qA\1921\021\028\020\223qa\001\007\197w\\X\192A\241\157_8\131\133\226;.E\224\160\248\142K\0178(\190s\201\026X(>\152O\001\001t\137\145\016\196\192H\000b\224D\000` x(>\144\029\224\161\248@v\128\133\226\003\199\026\028\020\0318\214\224\160\248\129#\007\014\138\0318\014\224\160\248\193\tupP\\\016\160S\176P\\\016\144N\002\015\197\005\001\233$0Q\252@>\129\137\226\007o|\193E\241\003]\192\026l\020?\152\179\017\001tS\019!\128\229\224\163\248\129\031\185\211\224\163\248\129\186\000\027\197\015\212\005\216(~\160.&\212\005lU&\210\005m\174'\210\005m\149'\146\005m\149'R\005m\149'\018\005m\149'\210\004m|\167\001\001\196\141\128\b\208\1964\"\002&\131)\"\002&\131iB\132\156[6\171\021\"&@4\136x\006\132B\196\011 4\"\214\128 a\192\209\197\172P\024\176\1951+T\006\148\212\153\021J\003>\217dV\168\r\248d\147Y\1618\028\r9\170\195\209\144\163<\028\r9\202\195\209\144\203\242\240\158\150|\003\182\138\011B\001bB\132<\245\024\240U\\\016\006\016\r\", \020\"\128\187\224\172\184 Z@\024F\000\221\193[q\133\000\223\193]q\129t\128h\017\209\003\162#\004\172h\006\252\021\023\0040\011\012\022\023\0040\011\028\022\023\0041+ \130\152\133\ni\136Y\168\016\154\021\027T\bdt\140B\133@\130\198(T\b\228[\140B\133@\194\197(T\bd\\\140B\133@\202\197(\020\b\228\\\140B}@\210\197(\212\007\228P\140B}\192\139:\163P\031\138\198\028\245\161h\204Q\031\138\198\028\245\161i\204Q\031\154\198\028\245\001\175\185\0128(\190\197\195i\029\252\230\233\239\253z\023\015\127\133\255\"ae\222\191\236\015\235\031\251\221\169\132\1505\176\222\029\231k?\249\211\211i\255\246t<\249\195\t\240\186\128\031\246\167\211~\155m\194T\220B\220\141\128\182u7\192\r\192\007\005\231\206\223\248\143\167\237z\0287\017\160\178\140\134\248\188\222=\029\227\2436\238\232\153e9\2057\153\195\153\203\190\218\239\252i\191Yr\011\1823\230\178\175&\132\002\132B\132\006\132F\132\001\132A\132\005\132E\132\003\132CD\011\136\022\017\029 :D\244\128\232\t!o4\204ec\141\b\015\144\001!D\147\128\b\162\201\136\b\162ID\004\209dB\004\208\164A\1294@\147\006\005\210\000M\026\020H\0034iP \r\208\164A\129(\160I\131\002Q0\230\r\nD\193\1527(\016\005c\222\160@\020\140y\131\002Q4\230(\016Ec>0\002$\213\160@\020\209\004\005\162\136&(\016E4A\129h\160\137B\129h\160\137B\129h\160\137B\129h\160\137B\129h\160\137B\129h\160\137B\129h\160\137B\129h\024s\133\002\2090\230\n\005\162a\204U\207\b \175B\133\024\162\t*\196\016M\002#\232\182P!\134\152\133\n1\196,T\136\001fiT\136\001f\233\134\017\240\232\026%b\128\140Z3\130.b\0242\000\004Eb\128\242\026Eb\128\242\026Eb\128\242\026Eb\129\191\026Eb\129\191\0265b\129\140\0265b\129\140\0265b\137\140(\017KdD\137Xb\022J\196\194\152\027\148\136\13317(\017\011cnP!\014\198\220\160B\028\140\185A\1298\024s\131\250p0\230\006\245\225`\204\r\234\195\193\152\027\212\135\13117=#`61\158!0\155\152\129!\001 (\017GdD\1378\"#J\196\017\025Q\"-\144\209\162DZ \163E\137\180@F\139\018i\129\140\022%\210\002\025-J\164\0052Z\148H\011d\180(\145\022\198\220\162DZ\024s\139\018ia\204-J\164\1631G\133t4\230(\144\142\198\028\245\209\209\152\163>:\026s\212GGc\142\250\232`\204\029\234\163\1311w\168\143\014\198\220\161>:\024s\135\250\232a\204\029\234\163\1351w\168\143\030\198\220\161>z\024s\135\250\232a\204\029\234\163\1351w\168\143\158\198\028\245\209\211\152\015\140\128e\202\161@z\162\201\200\b\186\b*\164'f\145B\154\0210\171]1\002n\171m\016\002dl\021#\232\"\026!\192\223\2140\130.b\017\002\148o\029\"\128\242m\203\b\186\173\142!\176\007j{\134\192\030\168\245\b\001-\182\003#\232Q\002C\232QF\132\128\226\219\136\bP|\203:!\197w,\148\022\158\164c\161\1800(\029+\005\230\149\142\133\002\147D\135B\161\151\003\157e\004u\151c\bu\023*\133\222't(\020z\159\208\161N\232}B\1352\161\247\t\029\202\132\222't\129\017\212\191\168\018z\005\209\161J\232\021D\135*\161W\016=\138\132^A\244\168\017z\005\209\163D\232\021D\143\018\161W\016=J\132^A\244(\017z\005\209\163B\232\021D\2232\002h\210\163B\232\173E\143\n\161W\016=*\132^A\244\168\016z\005\209\163B\232\021D\143\002\161W\016=\n\132^A\244(\016z\005\225Q \244\n\194\163@\232\021\132W\140\000\154xT\b\189\181\240\168\016zk\225Q!\244\214\194\163B\232\173\133G\133\208+\b\143\002\161W\016\030\005B\239\019<\n\132\222'x\020\b\189O\240(\016z\159\224Q \244r\192\163@(m\239Q \148\182\031P \148\182\031P \148\182\031P \148\182\031P\031\148\182\031P\031\148\182\031P\031\148\182\031P\031\148\182\031P\031\148\182\031P\031\148\182\031P\031\148\182\031P\031\148\182\031P\031\148\182\031P\031\148\182\031P\031\148\182\031P\031\148\182\031P\031\148\182\015\168\015J\219\007\212\007\165\237\003\234\131\178\227\001\245A\217\241\128\250\160\236x@}Pv<\160>(;\030P\031\148\029\015\168\015\202\142\007\212\007e\199\003\234\131\178\227\001\245A\217\241\128\250\160\236x@}Pv<\160>(;\030P\031\148\029\031Q\031\148\029\031Q\031\148\029\031Q\031\148\029\031Q\031\148\029\031Q\031\148\029\031Q\031\148\029\031Q\031\148\029\031Q\031\148\029\031Q\031\148\029\031Q\031\148\029\031Q\031\148\029\031Q\031\148\029\031Q\031\148\029\031Q\031\148\029\031Q\031\148\029\031Q\031\148\029\143\168\015\202\142G\212\007\165\186#\234\131\242\214\145\244\161(o\029\r\"`\204\163E\004\140yt\140\128\131Tl\025\002i\175\216!\004\152\021{D\000\179\162G\0040+\014\136 f\005D\016\179FFP\255F\132\016\025'D\000\025\167\021#\224\182&\210\136\162\148\234\164\016\001\252\157P#\148\236\156P#\148\236\156P#\148\236\156P#\148\236\156ZFP\247\162D(\2179\245\140\160\139\160F(?:\161F(?:\161F(?:\161F(?:\161D(?:\161D ?j\209!\162 ?j\209!\162 ?j\209!\162 ?j\209!\162 \217i\209!\162 \217i\209!2#<@P\"\144\031\181h\017Q\144\031\181h\017Q\144\031\181h\017Q\144\031\181h\017Q\154h\130\002\209D\019\020\136&\154\160@4\209\004\005\162\137&(\016HvZt\136(HvZt\136(HvZt\136(HvZt\136(HvZt\136(HvZt\136(HvZt\136(HvZt\136(HvZt\136(HvZt\136(Cc\142\25004\230\168\015Cc\142\250\1764\230\168\015Kc\142\250\1764\230\168\015HvZ4\136(HvZ4\136(HvZ4\136(HvZ4\136(HvZ4\136(HvZ4\136(HvZ4\136(HvZ4\136(HvZ4\136(HvZ4\136(Gc\142\250p4\230\168\015Gc\142\250p4\230\168\015Gc\030\025\001[\000\244\135(\200\143Z\244\135(\200\143Z\244\135(\200\143Z\180\135(\200\143Z\180\135(\200\143Zt\135(\200\143Z4\135(\200\143Z4\135(\200\143Z4\135(\200\143Z4\135(\200\143Z4\135\168\150\198\028\005\210\210\152\163@:\026s\020HGc\142\002\233h\204Q \029\1419\234\003\242\163\022\205!\n\242\163\022\205!\n\242\163\022\205!\n\242\163\022\205!\n\242\163\022\205!\n\242\163\022\205!3\002\166\031t\135(H\169Zt\135(H\169Zt\135(H\169Zt\135(H\169Z4\135\168\158h20\130:\011\021\210\019\179P!=1\011\021\210\019\179P!\144\133\181\232\rQ\144\133\181\232\r\153\017\208Yh\014\209\144\184\181h\014\209\144\184\181h\014\209\144\184\181h\014\209\144R\181h\014\209\144R\181h\014\209\144R\181h\014\209\144R\181h\014\209\144R\181h\014\209+\162\201\128\b\162I`\004\209\132\020\162\027\162ID\004\209dB\004\208\004\221!\026\242\163\022\221!\026\242\163\022\221!\026\242\163\022\221!\026\146\157\022\221!\0262\151\022\221!\0262\151\022\221!\0262\151\022\221!\0262\151\022\221!\0262\151\022\221!\1542\151\232\014\209\148\185Dw\136\166\204%\154C4e.\209\028\162)s\137\222\016M\153K\244\134hJC\1627DS\026\018\173!Z\209\212\128\222\016M\153K\180\134h\202\\\1625D\195/\152\206\016\203\144\001 \142!\001 \168\017J\144\1627DS\130\020\173!\154\018\164\232\012\209\148 Eg\200\245\023)eH`\bu\240\200\016\234`\148\ten\209\026\162)s\139\206\016M\153[4\134h\202\220\162/DS\230\022}!\1542\183\232\011\209\148\185E_\136\166\204-\218B4en\209\021\162)s\139\174\016M\153[t\133h\202\220\162+DS\230\022]!\1542\183\232\n\209\148\185ES\136\166\204-\154B4en\209\020\162)s\139\166\016M\153[4\133h\202\220\162)DS\230\022M!\1542\183h\n\209\148\185ES\200\140\128i\017]!\154\146\189\232\n\209\148\236ES\136\166d/\154B4%{\209\020\162)\217\139\166\144\025A\157\133\n\161\2520\186B4\229\135\209\021\162)?\140\174\016M\201^t\133\204\bxt\180\133h\202\015\163-DS~\024]!\154\242\195\232\n\153\017\244 \168\017J)\163-DSJ\025m!\154R\202h\011\209\148RF[\136\166\1482\218B4\165\148\209\022\162)\165\140\182\016M)e\180\133hJ)\163-DSJ\025m!3\002h\130\190\016MYh\244\133\232N?\029\252\211\254\240tX\003T1\148\238\015\181B\025lt\136h\202`\163CDS\006\027\029\"3\130\030\004\181BIo\180\136hJz\163EDS\210\027-\"\1542\216h\017\209\148\193F\139\136\166\0126ZDt\175\159\226\250\249\229\0048T\012\229\177\209(\162))\141F\017MIi4\138hJJ\163QDSR\026\141\"\154\146\210h\0201\148aF\163\136\161\0123\026E\012e\152\209(b(\195\140F\017C\025f4\138\024\2020\163Q\196P\134\025\141\"\1342\204h\0201\148aF\163\136\161\0123\026EL\179\250\252\240\245f\255\188\127>\248\237\211\214\031^\161\149\137[\241\215\175`W4\130~\018Cyh\244\147\024\202C\163\159\196P\030\026\253$\134\242\208\232'1\148\135F?\137\161<4\250I\012\229\161\209Ob(\015\141~\018Cyh\244\147\024\202C\163\159\196P\030\026\253$\134\242\208\232'1\148\135F?\137\161<4\250I\012\229\161\209Ob(\015\141~\018Cyh\244\147\024\202C\163\159\196P\030\026\253$\134\146\202\232'1\148TF?\137\161rX\244\147\024\202\246\162\157\196P\182\023\221$\134\178\189\232&1\148\237E7\137\161\164*\186I\012%U\209Mb(\169\138n\018CIU4\147\024J\170\162\153\196PR\021\205$\134\146\170\232%1\148TE/\137\161\164*zI\012%U\209Kb(\169\138^\018CIU\244\146\024J\170\162\151\196PR\021\173$\215\250v\025\130\002\161<,ZI\012\229a\209Jb(\015\139V\018CyX\180\146\024\202\195\162\149\196P\030\022\173$\006\242\176\014\173$\215\247P2\004\021\002\169[\135^\018\003\169[\135^\018\003yX\135^\018\003yX\135^\018\003yX\135V\018\003yX\135V\018\003yX\135V\018\003IU\135V\018\003IU\135V\018\227\136&(\016Gc\142\002q4\230(\144\150\198\028\005\210\210\152\163@ \221\233\208Jb \221\233\208Jb \221\233\208Jb \221\233\208Jb \221\233\208Jb \221\233\208Jb \221\233\208Jb \221\233\208Jb \221\233\208Jb \221\233\208Jb:\026s\212GGc\142\250\232h\204Q\031\029\1419\234\163\1631G}t4\230\168\015H&:\180\146\024H&:\180\146\024H&:\180\146\024H&:\180\146\024H&:\180\146\024(\135uh%1\144Fth%1\144Fth%1\144Fth%1\144Fth%\177+\234]\143\b\234\221\001\017\212\187\001\017\212\187#\"\168w#\"\168w'D@\239\162\147\196B\194\206\161\147\196B\194\206\161\147\196B}\167C'\137\133\188\154C'\137\133\188\154C'\137\133\188\154C'\137\133\188\154C'\137\133\188\154C'\137\133\188\154C'\137mh\204Q\031\r\1419\234\163\1611G}(\026s\212\135\1621G}(\026s\212\007\228\213\028:I,\228\213\028:I,\228\213\028:I,\228\213\028:I,\228\213\028:I,\228\213\028:I,\228\213\028\026I\172\156Ws\221|\188\027\252\246\188}\218\196\211)\030\158\222^\2521\254\233\159v\207\175\231\248\180\157\246;\19252\238yX\199\248\1960%\195\222\246\187\235\197\158\222\214o>n\175\173@\011\186\170\133\193\003\220\192\243z\159{Z+\163\142/\231\184\187\252\207\tpN\198\157\214\167\236\229Z\184\201\031YTG7\185\222\141s\007\205\248\191\215\000\237\185So\184\138\129\241\149m\224\208\012r\003\219\011&w\225\000\157|\190A\233r#1\223\239\158\207\128\137|\139\223\226\249;\160&B\237\142g\015O\213\1280/\215\241q\190\201-\224@\152\199x\222} \bd\185;\237\255y\139\192\183\006\148\248\026\207\243\255;\205\156\003\028I\240u\230)\016\180!\001\158a\164\026\151\153\215v?\226\153z\002\164\183\241o\254\031\128\128\238\230\127}z=\195\204\208\244\212\227\254m\214\184\167\190\243H\192\185\207\223\000\004\194z\243\199\023\164\031\136\234\249\229B\191\003\194F\186\2126s-R\213<s\236\158\159/\023\164^\156h\162<\207\171A\164\206W\160\173\243\211\199\249\159y)\128\251TM\174On\255\011H\149\025\237\249\127`\180\021(\236\184>\018\002\1805O\220\0301\160\173\185\255v\127\239\183\1871\158\129\249\202\209\192\237\183o\b\002\133\189\250\137n\176#R\205\255\229\194\197w\002\146\200\198\"\146\0223b\162\202,^\1758\133*P\217n\253J7F\002#\241\171H\171\163\143\004\001Um\024\162AQ\199\253\238oZt4\200\2334\2356\158\223\169\207\180\194\158\222}\192\242\161q\169\130\225\212\006\153\227\243S\146\0065\189\158\247 \b\157Q\017Na\186\197\029)u7-S\251\237\150\230-\r\002\154\214\007\234i\016\206aO\183\005\194y}\195\254\n\1965\002\140\196\152\183yK\026q$#\238\167q\253\211\019O\2442\194\144r^\246\243R4\015\231i^\148\160\239\012(h\214\193\233\178z>\191^\136\n\189b\232(\230=>\158\209\180u\203\129@K\231\221\235n\255\014*7\150\246o\20741\024\135\019\195\017\216j\232\160\133\147\150\001\021\205\199\012\156}\012-C\031D=\227qj\244\248\248\003\201\130.\018\144\000\244\240td\154%A\1673\14792\001bBV\203\000\187\162\029\005P\2236\248\028\176\236Z\016\2037zl\171i\r\133xZph\184-\t\004\031\218!s\t!\170cx\202e<l'c>\015\227\153c\188\237e\228\145\017\030\016\243\193\235D\253<\200\152y\021\156'i<\022\218 \195\230\206\187<\215\006oq\148q\175\243C\209\165\162\012\249\136g\156b\237\132\183\199\243\178[\193\189\145\252]#\003\222b\156'\000\192(x\026?\157\011{p\167a\168\252\246sa\228\132\1343@\221\211%=y\156\143j\180Yp\022\144\227\249\178,\208\189:\025u9\020\222\014\134t\163\160\177\1835\b\204\177\192v,\021G\226z\153\1812?\022u\134G\216ecA\"s \178k~\246\148\217\1478\148\217eC3\147\0257\236\014\1326/\0269];\016\219%\153B\007X7e\199\026\230\235v\133W\250\192\204a\219\144\004<f)ZP\220\155?P/\180\160\180o\216o-\233\235\249\154\196\155\179\148\2517@\146\190.\167\170y\140\129R-\b\236\157Ob-H\235\232_9S\211\146\188pS\212\130\180\182\1526i=v\001NK\237\144\195\204\1328<\211\019\145\166\166\245\007\233\190\0055\029\207t\145H\194\157W-X\026ZZ\180\246\215Y\026t\212\173H\232\243\028K\163\218\209\202u\158\019\2334\176\157\194\129=]\233J\196\235@N\019\234\1883\212}H\136\206\210E\168\015\028N@\184:u \161\237\229\136t=\139\192z\216u\025\224\249\031B\129\1486\216\211\172$\030VR\210\017)G\n\162\199\192M\031\141e\164\199\160\172I'j'\252|m\155y\237\213\175\000\249\131\000\141\012\192\172D\175d\192\187\191\220\029\241\185\215\244Dx\224\239\r@\198\235;\n\018Bo\177\239h>\236\157\012y~\225\237u\223\202\152yJ\156\223\213\016\163\251\014\1744x:\254\246=<\207\199\250\2404'\159\231[\252\231\154\204\007\184\007\248\229\2006\2086\180\031\240\233\144\023A\134\188\205\201D\156\238\251\145\198x\143{\133>\210\189\205/\249\131\031\006\255\028\255<1?@[\243Dy\219\247\190\2018\191B\146\016\162\193+!\021\189\"9>m\207{\\\001=\201\139_\133zC\221H\187\000O\202:f\242V\222\209e\136{\030\148\245\129;.\015\170\186\137\0030 \171W:\003z\016\210\017\151}?\016\185\215\244\242\220\131\136\230\253)\191`\245$\162\191\207t\018\243\160\161k\229\202\007\018\000\164s\228]\250\176\194y\255\194\153\204\025\127\000\245p!\198\000\218\217\249\221\209c\226l\000\233l\253m\239D\251\219\129\150'|\223;X\238\011\170\250\025@>\027\154t\006\\\151r\243\240\000\n\186\189X\166\158\163\149i>\144\239\158i\1352\128\142n\239\005ih\007\238:\226\015Hi\"v\015#\2397\136\221\145fDzx\218\216\205\234\134^\014\160\160a\238c@\176r\230\213\141(\016\020.\249\184\t\n\160\157\003,\221\1294\2437\158Q\130%\001\016\192\225\212\198\139{hi\\\206\251Sf\163\030:z\160\024i\003\018h\229\16194x&? h\251\198\239\202B\192\237\000\143\r(\134\222\130\004\144\011\150Q\133\t\249\002\1834\226zCC8\130Z\222\169\228bT<\028\184\241\031i\131v\196\251\194\245\133\020<Z\234\222\253[\254\029\238\232\144\254t-\018\204\136#\211\225:\155\201l\143 \150\015ZdG\1437F\227\tb\185\188\006\1319y\012\180\023<a\253\2388\226\194\012\128\136\"\198\227\2558\225\217\b\223\175\198\021\031\136pA\142\r\031\016\t\162\240:@\153\1683'\189\183u\192\0253\026:E\189S\130\"Z\156\201\241\129\232h\131l\142\1809\195\132u\236\136\156\148m\138\184\188\236\230E\243\029@\158A\147?\173\159i\211\020qcF\251\153\024h\151N\000Ze\176\007\"e\"@\154\017T\131{\165iE{X \228$\202e\188f\128\001\161d\196;Mc\147\150\001\232\n\152\012\220\019Na\147\197K\016\227''C6\140h\233\"\184\r\159:\128\204\t\029\186J\015\144kj\153\2128y@\225)v\026`\0249c2\005\186\181WZ\141\167Q\134d\158?\226E\144`\147\012\185\158\146O\152\129\236e\015\210x=\240\001\162\193\199\161\137\178_)\162\r<O\191\002\193\208[\176~e\168\003\2329@/\151wY[|\016P\204\188\139\219\002\002\020s\196'\239H\249<$\164\151\145\150\199~\005b\217\250Ka\200\026@\160\151-\223\025\200\229\200\133\b\253\n\244\242\017\137\195\145'%:\030\245+\022\204\254t;X\201\192f\133\226\196\247\173}\003\162\129*\142\190\001\193\204\249l\015\b\141\183\245\017\233Q@33\211&.\179\238\027\139t\163\011\129l\230\012\214~\130\rf\223\128r6\252\030\160oh\177\025a\217\236\027\208\206\252&\156\198\210\227\195\2244\219\128r\222\206\164\156&\224U\214\216\205#n\026\000\000\202\217\224\152L\180\152\2077\005c\162V\180\189\".+P\203\235;rR\209\n\243\129\b\141+\031\173\254\189\002\193P\157o\175h\145\193\179N\175\028NL0(\n\132r\192\201Ou\244\236\148\024\235U\159\153\246p.W\158\0233\154`\213\144\225\024\245s\192N#V\130V\222\214\004\000\173\188\205\139\031>\n\201\133\222\226\244zE\147\030<\185nr{e\192(\026\021\156Z4./\207\239(\023m\136\253\180[\210\160\1517\218-i\135\151 \004\029aF\236.ZT\176\182\177\215=m_\137*\218\211\206\146:w\192\017\193]\159\230\211\011\143\252H[\023\154\244t\196m\"=\011m\198\224\165roh\019v\164\0171\rN\247pS\134T2\243\253o\146\163a\157\016\133\141\193}\014=\139\197\139\160\178\140\195c8mA\012\030\246)\247\218\155\142\246\173<\223\155\158\006\031\226A)\1359\029\182\223\140\000\002\181\224\212m@*'Z\183\205Hs=\236#\r\200\228\176&\192DD\193U\219\210\222+\003\161l\024\132+\154\233`\248,(dK\241\180\231z\161~\178\1503\02001Z\218t\225\217\201\1468\2321:\186)\002\244\184\234\208-y\218\161\016\128\150\016\234X:\205\191\144(,\237\178hb\183\180vPQ{oI\021tOn\197\243\199\246\028^\000E\235\007\244\149\163\003\201\137\132\2254\159\147\230\132\2017\218e9\018\136\167\014\000}\208\151/z\217a\019\249\181]/[k\226<{\2109\\\246\214\196LQc/\027k\"\150\223\244\178\165&>}\163ES6\211\204W\224\199\b2\226\r\251v\148\001G\188\167(\003\0148\220\019\140\222<\245\144\168d\199\204e\196i\183$\219e\230\007\199u_6\203\204\028\161}\184l\149\137\215\1808 \140\140x}\195\149@\246\200\196\249\157\000\228PZ\016\199\145f\221\182\165\199\200|\219\160o;$\022uW\143\026\004\000\200\227\149i\130\250\160{\n\200E<\128\180#\245\023\222\022H\004}\207};!\181\144)\221\n\239\011\148\2165\172Dx\248\014DrXo\169\136\175\239H'\127\243\179\128P\222\200*\219w\160\147#Mt\157C\218\163\185\182\239@+\153\135\007\157<\243\230\175\2353\131\143\148\233<\245\242\012\217\192\174\160\027\136\153@\229.\224\n\004\019E7\242\244\130\155\254.\210|\191&.O4{_\n\13593\210\175h\186\132\231\233qa\161+(\220\173\\\190\2000\157v\241x\004\168f\142\250x)\242\230\183\201}\015\026\250\192\153\173\183\204UXf{P\209\t\151\217\030$\244\193'\242\158\214\026X8zZi\206\248\"\181\167\181&sW\160\157#\231\235{PO\198\007\221\247\160\159o\153;\003\245\188\227\148\211O\180u%v\249\021\201\000\226\027\210'\237\019\189\"6r\209E\239Q1\243\203P|-\236A*\159\222v\000Y\\\011h\252\189\195C\005=\015m\206~`\183\129Xv\175\180\t\242 \151\2499\168\191<\n\012\000\003m\229\240\018 \149\015Z\153<\1733\031\235\167\176\137\254[<\0000\210<I\183\006b\185\188D\130A\025\240\252\178\166q\028h\157\153\167o\130\128b>0?:\128\\6\153\141\198\000b!\175D?X\228\023\205G\003n\206^\233\005\218\208\210\012\014\1958t\184+\007\000\239\203\230\025\tvX\131\1995\149\238\011\180\002\159D\236\007:\195\160\026\135\145v\2154A\014\017\023m\186\198\148=U\202\160\176b\r\207\147\209;Y\146\250@'\153\031\164\200\160hOA\169\148\000Z\193\n\222>\176R\160\159\003He\135=F+\n\247q\203\155<\196t\244 O@\251\000Z\217~#\128\199|\r\141\224\192s\004\1442\004Z\134h<F\156\132\tA'\023\250\234_\031\166\204\134\024\1742\174\248`\000\151\025i=\185|\201t\255\182\129\161\031\021\014}\240\155\r\128@*\019mAF\131)\002\186/P\nL\146#\157S(72\130L\224\2001\130B\128\237#\166\138\233v<\143\222f\206W\208@\012\184\235\006\000\157P\240\198\198\204\233v\251\241\244\178?\031i\b#\237\186\233\144?\178T`#\017Q(8\217\197\134vQx\174\139\180\241\218\255\243t|_o\183k\176_\246Q32\236q\207\026\233lO\203]\180\004\160Grx \166\174nqWA\136\142U\255\020\223\246\244\238+\246\180V\208\144zJ\162\019\128\246`4\029\197@\167t\002\128n\192\014\217G\202!\195\012\019A*\007\028\141\t\164\130\201\208\169\201h\011\022\174\137\146a\2070!M\154&\t\152\137'<\203\211T?Y\\\226\014q\027\199\015\128\209\025\133\158\132\244\001#8u\148j\165\231\000Y\188RO\129*\1824\205M\152-\134\248@\241\244\004#\230\199\000\000\170x\165>\165\163;l\250\253jEwD\128\134No\255\000\000\211\\\176Y\242\178\023ez\130\183\142^\182\162LOg\b\183\208<\197;9\030f>/;P\166\167\003\002:\025@\181R^\246\159LX\250\228e\247\2014o\199 ~\128GX\211\005\002\001\"=\195(#\184R\202\203\190\147\t7{^\246\156L\215\189\155\140\144\205&S\230\155\012^\182\154LO\020\174\228p\170\223\242\r\168\001\235\177|\003z8R<\b\002\r\207\190\001I`\249\150o@\020\148\189\242\r\136bG\251Z\223\144*\168c=\1415_\002t\241\001K\150o\002\r\030\221\020\200\226\131\b\011\154\192\207{\251\006D\129\219X\175H\020T\025\231\021h\130\246\163^)\186)\002\128*\224c+^\129&\160\244\206+K\1478\246\018i\130VR\005\146\152\243;X\226\239\021\201\226\0256\152^\245D\193=\000@\023XY\228\021\200\130\210!^\129,\222\233\025@\021\027\026=P\005m-\189\002Q\192\214\210k\144\196\150^\141y\221\016\161\b\000\146\128\205\168\215\160\136-=\130\161G\160\197Q\131&\200\232\2395I\226\141\174\000\1468z\250\200\135\215 \136o\244N\200\155\213_\219\195\254g\252\t\2185\205}\212\238\025\152f\212}\216\007\244\181\209\247Q\2195\200\194\152\2510zbc\239\163F\138r\247Q\020\212\222\007\189\189\208Cv\247a\175/\158\226\250\251\184\023O\189\225\031\031\128Z\027\238\195\002\173\152&<\220\\\2444K\153\241>p\191\129\168\2480T\184\2373\211\003?\224k\026\222>\144\141xo\031\200\006\245\130\222>p\141\130\030\168v\160\168\007\166\209/\026x\251@\181\211K\164\251\127 \027F=\176\141\230z\251@6\024K\251\1924\154\165\237\003\2096\158\198hx\012\131\168\240Hn\234\178\007\150\029(\234\129e\167\248*\135\185\027{\198\245\243\250\244\244#\206\163\185\251O\183\176\213\245\159\187\200\230.r\191\139_\129\205\245\159\187@u\023xz\255\213\162\186\254s\023\168\239\003_.\167\215\159\161\250\250\207]\168\185\011\157\246\231\195W\164\185\254s\023i\239#\215\223~\181i\175\255\220E\186\187\200\227\250\251W\160\187\254s\023\216\222\007^\203\246\127\134\182\215\127\238B\187\187\208\184~~9}\133v\215\127\238B\251\187\208Y\221\191n\180\191\254s\023y\027\202\209_~\004\244M\028\197\219T1\238\207\195&\230\002\219\213_'\191{>\250/\141\255\144y\2096\203\192\000\129j\025\b\139b\171\151\129\176\205m\205\"\208\211=\218e \221\163[\006\210=\182\203@\186\199n\017\248\141\238\177_\006\210=\250e \221\227\176\012\164{\012\139\192H\2478.\003\233\030\2272\144\238qZ\006\194=vK>\174\225\030\187%\031\215p\143\221\146\143\240&\204wK>\174\233\030\151|<\211=.\249x\166{\\\242\241L\247\184\228#\029\r\187%\031\253;\221d\159D\210]\250$\146nsH\"\233>\151\156<\227\128\143I$\221gL\"\233>\167$\018\238\179_\242rZ\239\252\230\t\222A\250~\201\206\205~\247\252t&\214\247K\142\206'\229\195i\142\135\190\232\181\024\143\189\220'\140%E\247\te\241\030\018\206\146\248\251\132\180\216\015]2\030\164\173\190OC\233\153|\026J\183:\164\161t\175K\230n\233N\151\196\221\210}.y\187\165\187\\\210v\011\247\232\151\172\165\247\025~\201\215W\202\229\249%U)\t\228\151\028\221a\228\146\157G\n\\\146\147R\148~\201M\218\249\251%5\233\184\228\151\204\220\225\181\151\196|\195\174\\\242\146\142\223~\201JJ\200\248%'w\020\184\228$\222\227\146\147tV\241KN\190P\154cX\146\018\003\151\164\164\196\195\176\228\228\129\002\019N\210s\015\t'1rI\202@\129KR\158\136\231\195\146\149\207x\241.\233u\236\205%/O\216\232\146\151\223)p\201\203\137\002\151\188\028\241\218Kb\006\140\\2\019~a\199\135/\190U\028jC\243\024\156;\215\006\245\024\155;\218\006\189\136\205\158n\131y\140\206\030p\131]\004\231\206\184\193=\006\231\142\185\161]\196fO\186\161{\140\206\031vC\255\024\157=\239^K3\143s\2367\255\242u\128\216\209{\148kU\230\"\154\214\189k)\230\"\022j\235\252\181\002s\017K\132\191\022_.b\231D=\004\2194\248cM\193.\r~\246/\016\220\166\193#\190\196\189\022\\.;\238\r\219\238\211\232\191!+v-\181\\\196\190\188c\203C\026M\011\248\181\184r\017\251\131\238b\020\186\014~\229\200_+)\151]G\rOil\128\241\139\002\151\207\239p\019Q\160\242\tn\"\nT\166\rE\020\168\252\141\238A\160\242G\164\228s\020\184L{\170\232\164q\030i\149\143\002\153)T`2u\155@c\202\134G\129\198\212k\002\135\233\197r\0208L\161\002\133A\205\211=\209\194~;\172\2319\246\249\233e\158\150g\014\205\179\237\246_.\171\217q\187\1965\"n\179\127\207\195\148\b\219\174\199<L\211\213\254,B\r>\224\159\197\187\189\167\233t\222l\158\142\167\253\155\152\"\029V\171\191\230I\208\191\191<\189l/\167\248o\251\247\184\153\223\250\204C\188\017\227\027\136\255\006\241J\140_S\243Z\014\167\214\141\024\238\207\212\188\133xj\223\137\241\216|+\135S\235\157\220\151\212z/\135S\235^~V\236\250\001\226\169\253 \198\239\247\212\254\b\241\212~\148\239\231\157\218\159 \030\218od\230\159=\180\2234\016O\237\203\204\167\238id\230S\23942\243\215x\247\022\226\169}\153\249\216\188\204|l]f>\rm#3\031G\022\152\1437\015\204\199\187_0?\236w\199\253\206\239N\243\132{\006\200H\144\221|P&P$\208\006!\019A^\b\162Vxkx\025\213\016\230\128\016\133\151yE\140&\204?\2528\1340\031\b\177\216i\220\003\1420[\132\180\004\t\2524\029\246Z\006\212\227\243\236\016\227\t\243\182\225\011\r\204j\006\161z\248\230P=\136@\233|G\bJ'\016D/\164\179\245\135\215\167\176\222>\157\230\029\194\1889Ss@\178=\027t\003\168\227>\003R\000z\141\199\012J\019\234e\158\220\024f\232\014\207~\155\129Y\128]\156\t\140r\212\137\254\156\131-\212t\\?\239\230\153\2518'\159\230\171\137{]\221\017d\206\127\014\243\161v\222y\201\192^\000^n1\188\\\190/%c<\222\223e\145\1501\003`&\190L\016 \223?\230\248Y\131\223\231\189\219QD\141\136:\188\236\001\019\017s\218\211u&\196L\151\141\168\b2+\232\133\227\245\148\241\223%H#@\1821\254}a\236\000\024\005\151\217\029\206\030 Z\128\172\135\167\235'\149D\128\145\158\223\159\143\242`\026\011<;\029\247\223\158\014\251g\185\195\236\162\195\202\153\224\1936\018$\147\015\030\172\146\016\153\172\240`\181\136\200\229\134\007k$L.C<X+B2y\226\193:\t\146\201\022\015\182\021\017\185\156\241`;\t\147\205\028\015\182\1510\185\252\241`\023\147\198\238|\249Q\213\139\225\236\248\215\238\139.\205\195\232\007\017\242r\222\141\1358>\194\030p#]\2342\235\158\143~\183\004?\194\163\b\223\1747\155\245~\151 \031\177S\238\1503m<\180\226V\248\000C\166\133\1996\026\185\141C\182\129\199&4L=\027\202,8q\"\249\128\\\222\224\164\137\228\005\170\251\007\231\132\232y\153:\140\127\030O\2549f\144\210\"\252\227\253\239\203\235\183\191\001\"-\194/;|pi\233\221\253\179~\134pi\213\253\142\167b'-\184\187\211\153\238]Zl\233\148\232\1645\246\244\253\229\178*\005\204\151\185H+\217\233\136I9'-\179'\218\181\182\210\250\186\217\031!Z\\Z\207\020\173`\005{\241\235\011\189\231\213\245\180\127\190\254\0154\160i\1715o=/\027\181\253\030\006\1675\180x~\167DAk3\144ys\1358\007\184\183\2430\191\199\1674F\219\002lw\136\243\190\016G`y\250\217\248\221\231\016_~\130\143\186#\018j\222~Q\231O\132\217\172\225\230\186\021B<\201\168k\bs\153\209\b\164\b\244J\179`\167\t2\255G\186\140!\204\246\236\169\015,\014\208\011>\142\227A\165\217\170k\t\243\246\130\152\014\187\1411=\247\219\022 \158 \223h!\232\006\130L\b\t\200i\132d\196C:\237P:\175\239\244\252\168\156o\192\180x\177M\1971\206\231\160\241\176\158\231\001\255\182>\249\205\215\251\244\1916\255\251\0174C\230\237\203\021\217\228\144G\017\217\220\144*\135\252&\"\213\r\169s\200w\017\169oH\147C\250\211\250,\130\205\rls\224\031\"\210\222\144.\135|}\019\161\238\006msP\025\217\222\144]\014y\018\145\221\r\217\231\144\207\"\178\191!}\0149\137H\127C\0149\228ZD\0147d\200v\174\136\0127\228\152e\131\136\028o\200\152C\254-\"\227\r9\229\144QDNW\164\205jt\144\144\237M\1636\171\209 \"o\026\181Y\141\138bio\026\181Y\141~\200\208\155HmV\164\027\017yS\168\205*\244\031\017yS\168\205*\244E\212Y{S\168\205*t\247!Bo\018\181Y\137~\023\1457\137\218\172DG\017y\147\168\205Jt/2\176\189i\212f5\186\019\1457\141\218\172F\015\"\242\166Q\155\213\232^D\2224j\179\026\245\226\148\210\222Dj\179\"\149G\244&R\247(\210\227\214o\238\151\209\255\246\128\187-\188\183?\254\184-\140\b>J\224\230\243\143?nk#\130\191I`\245\249\199\031\183\229\017\193\239\018X\127\254\241\199myD\240mIM\241\230\243\143?n\139$\226\127H`\251\249\199\031\183e\018\193\151\1335E\187\207?\254\184-\149\136\022\193\237\231\031\127\220VK\004\159$p\247\249\199\031\183\005\019\193\207\018\184\255\252\227\143\219\154\137\224I\002\251\207?\254\184-\155\b^K\224\225\243\143?n+'w\183\004\014\159\127\252q[<\153(\018x\252\252\227\143\219\250\137\224\191%p\252\252\227\143\219\018\138\224(\129\167\207?\254\184\173\162\b\030\004\176]}\254\241\199m!Ep\144\192\205\231\031\127\220\214R\004K\178\178\234\243\143?n\171)\130?D\180\254\252\227\143\219\138\138\232\141\0046\159\127\252q[T\017\252\143\004\182\159\127\252q[V\017\252\"\137\210\186\207?\254\184\173\172\136\190\172\197)\186\253\252\227\143\219\234\138\232\239\018\184\251\252\227\143\219\002\139\224Q\002\247\159\127\252q[b\017\188\151(j\253\231\031\127\220\150Y~j\t<|\254\241\199m\165E\240A\002\135\207?\254\184-\182|\223\018x\252\252\227\143\219r\203\019\1304\023\217\248\249\199\031\183%\151\t.\129\167\207?.\224\238Q\212\247\175\169\190\014\200wi\242\2165B\252\245\029\213\175\012\251}\184\018\194\175/\168\190\194\213}\184\150\194oo\167\190\000\250\030`\004\192\237\213\212W\188\185\143\183R\252\245\189\212W\188\189\143wB\252\245\165\212W\184\187\015o\165\240\219\027\169/@{\015\232\004\192\231\235\168/@w\015\232\005\192\237]\212W|\127\031\255\168\167_/W\224=T\236\006\t\0167\139\135h\030F9\136\023y\143\155\135\142m\030\134z\0201\243\027\142S|\188\210\195xG\tu\025\240%\234a\212'\017\181\158\150\160\251\161\239W\018h\030\251%\232\158\000}#\130.\157\183\132\221\211\160Wb\167_x\176@\221s\161\215\018\234B\134%\234\158\017\189\145\021\252\2287\243\140\177\243\167\203'\190\015[\016toeA3\250~\208{G\250f\252\253\240\247\1393\230~\187\149?3\017\251Ga\229+\174c\191X\178>\182\195~3O\189\223\168\245GU\197\239snq;\239\241\247\187\167\253\139\b\153\230\151\141\219\181/}%gZ5\015a\003\133\169\135\176\14357\168\031\175\187\1618\243\016\183\1650\251\024\246Bq\238!\206\031\194\252\182)p\179\237C\248Da\221C\2167\n\235\031\195\1769\255\016w\162\176\225!l\164\176\176\028\147\019\1828&\161\020\025\031o\017\227\166\199{\164\155l\030i\184\163\176G\026\146kuj\018\030\238\176I-2\002\195\031\249\200\205\218E\028\222\234##I\007\205#\0197\031\020\247H\197\r^\182_\196a\131\0112r\139\011:r`X\182\136\215\030\151Mb\228#\031_)\236\145\142`\196\159\212jI\031jP=\018\242\031\n{\228\227?x\225G2\2380n\193B\242EO\202\202\236\198\134\031\217\136\205>\178\241;\133=\146\145\239\178_\196a\224\130\140\199#\005.\200\248\227\007\005>\146\145\190f0\169q\017\135\183\184\152\025\143\024\184\152\026\127P\160N\216\200\141\234f\025\155i\247\145\148\135x\217\225\1961\215\250#=9\238\145\1588J\250\145\157|\167\143\172\252\193\023n\023\157Oq\221\162\239)\174O\187\158B\031\169\137a\143\196\196\011\135\197\019S\220#-\145\230:.\226\176\193I\1560\176a\179Z4L\0022\205\242\0140\242\145\151\239\020\182X\184_ \236\145\1398\181\152G.\014\240\249\192\201<r\241\248Aq\237\130b\024\248\200\197S\132\176~Am\138{\228\225\001\219\251\028\232[e\209/K\202~\\O\235\235\022\255p\169\168\023\234\233'\187\220\172\029\253f\253\227z\206\144\175e\155\187k\249\227\219\250p\011\222\254\159R\176\186\011\254\154\148\190\237\215\225\242K72DK\144\226\133>\153q\243p\221\238\r\"m\026I\161.\r}y\129\2166\141\165{\237\132P\234\141>\137\221C\164O#)tHB\223)4\164\161\0169&\145\017\"c\026I]5\t\161\208Un\149v@\252\128\216&\137]C\164J#\129.N\011\161\240`\206H\177\244d)e\2150^.\165\236\026\134\193\165\140]S'\164\140\157\2235\202\161)aQ\234.\165,\181\1542\246L\163\016\132P\026\133Q\138\165\187Mi{\166\219Mi{\142\208\183mJ\2193\221B\155\210\022\b\222\166\180\253\160\027Hi\235\1292\1730\203F\138MI\027\015\007\136MY{\216\159w\227<\2413\166\021\218\135\208.\211<@R\026{\234\191\148\1978\214)\141=P\168Mi\188\167\208\148\197\192\2476\1650RM\160\240\030b\187\148\194\031g\232\130.\16506\171\132\t\029\198\171KI\252\r\022\170N\152z\233\014\004\014\195\180\211\t\019\239\158:\183K\185\139\253\2459\014\151\015\127<\029\174om`'\215\175\238\"\2314t!\186\185\139\246\195\254[\196Hu\0239\196\205\254\029#\031w\241\023\192\159Jt\200M\189IC5\132\2184\212@\168KC-\132\182i\168\131\208.\rm!\180OC;\b\245pb\191`\026\192\012\025\012\245t\200`\168\031\199\012\134:4f0\212\179S\006\003\253\022o_\190;\159\158\2143\230\246B\228\226\029\134\232\249\197\210\249\248r\174\011V\127\2377\227Sx\153_o\029\227\211\203~\255z\139\190\190m\217\239\150\225\250!\188\234\n\230\175\215\151\245\201\255|\133~\012\135\245\219\229\237\240f\019\241\1366\173\254\250\182\142\167\157\223^.\243\235%\214!\250q\253\229\156\190\206K.\185\226\212T\128\231\132\246\135\004o/\254\181\127\127\250\143\255\242_\255\247\191>\173\255\211\127\254\031\255\245\127\253\199\255\249\127\253\031O\211\255\253\191\254\159\127\253\015\210\249\176k\167VBl\254#\001\186\213\215\128\206\239\218\222\230\145\223\157\254\\\205\239\168\228\224F\nV\016\172\164`\r\193Z\n6\016l\164`\011\193V\nv\016\236\164\224\022\130[)\184\131\224N\n\238!\184\023\130\231\023;r\176\151\130i\004\007)\152F0H\1934\130\163\020L#\024\165`\026\193I\n\134\017l$>70\130\141\196\231\006F\176\145\248\220\192\b6\018\159\021\140`#\241Y\193\b6\018\159\021\140`#\241Y\193\b6\018\159\021\140`#\241Y\193\b6\018\159\021\141\160\196gE#(\241Y\209\bJ|V4\130\018\1595\141\160\196gM#(\241Y\195\b*\137\207\026FPI|\2140\130J\226\179\134\017T\018\1595\140\160\146\248\172a\004\149\196g\r#\168$>k\024A%\241\217\192\b*\137\207\006FPI|64\130\018\159\r\141\160\196gC#(\241\217\208\bJ|64\130\018\159\r\141\160\196g\003#\168%>\027\024A-\241\217\194\bj\137\207\022FPK|\1820\130Z\226\179\133\017\212\018\159-\140\160\150\248la\004\181\196g\011#\168%>[\024A-\241\217\210\bJ|\1824\130\018\159\029\141\160\196gG#(\241\217\209\bJ|v4\130\018\159\029\140\160\145\248\236`\004\141\196g\007#h$>;\024A#\241\217\193\b\026\137\207\014F\208H|na\004\141\196\231\022F\208H|na\004\141\196\231\022F\208H|ni\004%>\1834\130\018\159[\026A\137\207-\141\160\196\231\150FP\226sK#(\241\185\131\017\180\018\159;\024A+\241\185\131\017\180\018\159;\024A+\241\185\131\017\180\018\159;\024A+\241\185\131\017\180\018\159;\024A+\241\185\131\017\180\018\159;\024A+\241\185\167\017\148\248\220\211\bJ|\238i\004%>\2474\130\018\159{\026A\137\207=\141\160\196\231\030F\208I|\238a\004\157\196\231\030F\208I|\238a\004\157\192\231\203g\158\228`#\005\195\b:+\005\195\b:'\005\195\b\186V\n\134\017t\157\020\012#\232z)\152F\208K\1934\130\131\020L#\024\164`\026A\129\207\r\229d\\\148\130i\004')\024F\176]I\1930\130m#\005\027\bVR0\140`+\241\153r2\173\196g\202\201\180\018\159)'\211J|\166\156L+\241\153r2\173\196g\202\201\180\018\159)'\211J|\166\156L+\241\153r2\173\196g\202\201\180\018\159)'\211J|\166\156L+\241\153r2\157\196g\202\201t\018\159)'\211I|\166\156L'\241\153r2\157\196g\202\201t\018\159)'\211I|\166\156L'\241\153r2\157\196g\202\201t\018\159)'\211I|\166\156L'\241\153r2\157\196g\202\201t\018\159)'\211I|\166\156L'\241\153r2\189\196g\202\201\244\018\159)'\211K|\166\156L/\241\153r2\189\196g\202\201\244\018\159)'\211K|\166\156L/\241\153r2\189\196g\202\201\244\018\159)'\211K|\166\156L/\241\153r2\189\196g\202\201\244\018\159)'\211K|\166\156L/\241\153r2^\2263\229d\188\196g\202\201x\137\207\148\147\241\018\159)'\227%>SN\198K|\166\156\140\151\248L9\025/\241\153r2^\2263\229d\188\196g\202\201x\137\207\148\147\241\018\159)'\227%>SN\198K|\166\156\140\151\248L9\025/\241\153r2\131\196g\202\201\012\018\159)'3H|\166\156\204 \241\153r2\131\196g\202\201\012\018\159)'3H|\166\156\204 \241\153r2\131\196g\202\201\012\018\159)'3H|\166\156\204 \241\153r2\131\196g\202\201\012\018\159)'3H|\166\156\204 \241\153r2A\2263\229d\130\196g\202\201\004\137\207\148\147\t\018\159)'\019$>SN&H|\166\156L\144\248L9\153 \240YQN&tR0\140`\232\165`\026A/\005\211\b\014R0\141`\144\130i\004G)\152F0J\1934\130\147\020\012#8\174\164`\024\193Q\224\179\162\156\204\168\164`\024\193QK\1930\130\163\145\130a\004G+\005\195\b\142N\n\134\017\028%>SNf\148\248L9\153Q\2263\229dF\137\207\148\147\025%>SNf\148\248L9\153Q\2263\229dF\137\207\148\147\025%>SN&J|\166\156L\148\248L9\153(\241\153r2Q\2263\229d\162\196g\202\201D\137\207\148\147\137\018\159)'\019%>SN&J|\166\156L\148\248L9\153(\241\153r2Q\2263\229d\162\196g\202\201D\137\207\148\147\137\018\159)'\019%>SNf\146\248L9\153I\2263\229d&\137\207\148\147\153$>SNf\146\248L9\153I\2263\229d&\137\207\148\147\153$>SNf\146\248L9\153I\2263\229d&\137\207\148\147\153$>SNf\146\248L9\153I\2263\229d&\137\207\148\147\153$>CN\166\151\234\159\021\228dz\169\254YAN\166\151\234\159\021\228dz\169\254YAN\166\151\234\159\021\228dz\169\254YAN\166\151\234\159\021\228dz\169\254YAN\166\151\234\159\021\228dz\169\254Y9\026A\137\207\142FP\226\179\163\017\148\248\236h\004%>\1834\130\018\159[\026A\137\207\144\147\233\165\250g\0059\153^\170\127V\144\147\233\165\250g\0059\153^\170\127V\144\147\233\165\250g\0059\153^\170\127V\144\147\233\165\250g\0059\153^\170\127V\144\147\233\165\250g\0059\153^\170\127V\029\141\160\196\231\142FP\226sG#(\241\185\163\017\148\248\220\209\bJ|\238h\004%>CN\166\151\234\159\021\228dz\169\254YAN\166\151\234\159\021\228dz\169\254YAN\166\151\234\159\021\228dz\169\254YAN\166\151\234\159\021\228dz\169\254YAN\166\151\234\159\021\228dz\169\254Y\2454\130\018\159{\026A\129\207zE#\024\164`\026\193Q\n\166\017\140R0\141\224$\005\195\bJ\245\207\026r2\189T\255\172!'\211K\245\207\026r2\189T\255\172!'\211K\245\207\026r2\189T\255\172!'\211K\245\207\026r2\189T\255\172!'\211K\245\207\026r2\189T\255\172\027\026A/\005\211\bJ|nh\004%>74\130\018\159\027\026A\137\207\r\141\160\196g\200\201\244R\253\179\134\156L/\213?k\200\201\244R\253\179\134\156L/\213?k\200\201\244R\253\179\134\156L/\213?k\200\201\244R\253\179\134\156L/\213?k\200\201\244R\253\179\134\156L/\213?kM#(\241Y\211\bJ|\2144\130\018\1595\141\160\196gM#(\241Y\211\bJ|\134\156L/\213?k\200\201\244R\253\179\134\156L/\213?k\200\201\244R\253\179\134\156L/\213?k\200\201\244R\253\179\134\156L/\213?k\200\201\244R\253\179\134\156L/\213?k\200\201\244R\253\17964\130\018\159\r\141\160\196gC#(\241\217\208\bJ|\1824\130\018\159-\141\160\196g\200\201\244R\253\179\134\156L/\213?k\200\201\244R\253\179\134\156L/\213?k\202\201H\245\207\154r2R\253\179\166\156\140T\255\172)'#\213?k\202\201H\245\207\154r2R\253\179\166\156\140T\255\172)'#\213?k\202\201H\245\207\154r2R\253\179\166\156\140T\255\172)'#\213?k\202\201H\245\207\154r2R\253\179\166\156\140T\255\172)'#\213?k\202\201H\245\207\154r2R\253\179\166\156\140T\255\172)'#\213?k\202\201H\245\207\154r2R\253\179\166\156\140T\255\172)'#\213?k\202\201H\245\207\154r2R\253\179\166\156\140T\255\172)'#\213?k\202\201H\245\207\154r2R\253\179\166\156\140T\255\172)'#\213?k\202\201H\245\207\154r2R\253\179\166\156\140T\255\172)'#\213?k\202\201H\245\207\154r2R\253\179\166\156\140T\255\172)'#\213?k\202\201H\245\207\154r2R\253\179\166\156\140T\255\172)'#\213?\027\202\201H\245\207\134r2R\253\179\161\156\140T\255l('#\213?\027\202\201H\245\207\134r2R\253\179\161\156\140T\255l('#\213?\027\202\201H\245\207\134r2R\253\179\161\156\140T\255l('#\213?\027\202\201H\245\207\134r2R\253\179\161\156\140T\255l('#\213?\027\202\201H\245\207\134r2R\253\179\161\156\140T\255l('#\213?\027\202\201H\245\207\134r2R\253\179\161\156\140T\255l('#\213?\027\202\201H\245\207\134r2R\253\179\161\156\140T\255l('#\213?\027\202\201H\245\207\134r2R\253\179\161\156\140T\255l('#\213?\027\202\201H\245\207\134r2R\253\179\161\156\140T\255l('#\213?\027\202\201H\245\207\134r2R\253\179\161\156\140T\255l('#\213?\027\202\201H\245\207\134r2R\253\179\161\156\140T\255l('#\213?\027\202\201H\245\207\134r2R\253\179\161\156\140T\255l('#\213?\027\202\201H\245\207\134r2R\253\179\161\156\140T\255l('#\213?\027\202\201H\245\207\134r2R\253\179\161\156\140T\255l('#\213?\027\202\201H\245\207\134r2R\253\179\161\156\140T\255l('#\213?\027\202\201H\245\207\134r2R\253\179\161\156\140T\255l('#\213?\027\202\201H\245\207\134r2R\253\179\161\156\140T\255l('#\213?\027\202\201H\245\207\134r2R\253\179\161\156\140T\255l('#\213?\027\202\201H\245\207\134r2R\253\179\161\156\140T\255l('#\213?\027\202\201H\245\207\134r2R\253\179\161\156\140T\255l('#\213?\027\202\201H\245\207\134r2R\253\179\161\156\140T\255l('#\213?\027\202\201H\245\207\134r2R\253\179\161\156\140T\255l('#\213?\027\202\201H\245\207\134r2R\253\179\161\156\140T\255l('#\213?\027\202\201H\245\207\134r2R\253\179\161\156\140T\255l('#\213?\027\202\201H\245\207\134r2R\253\179\161\156\140T\255l('#\213?[\202\201H\245\207\150r2R\253\179\165\156\140T\255l)'#\213?[\202\201H\245\207\150r2R\253\179\165\156\140T\255l)'#\213?[\202\201H\245\207\150r2R\253\179\165\156\140T\255l)'#\213?[\200\201x\169\254\217BN\198K\245\207\022r2^\170\127\182\144\147\241R\253\179\133\156\140\151\234\159-\228d\188T\255l!'\227\165\250g\0119\025/\213?[\200\201x\169\254\217BN\198K\245\207V\209\bJ|V4\130\018\159\021\141\160\196gE#(\241Y\209\bJ|V4\130\018\159!'\227\165\250g\0119\025/\213?[\200\201x\169\254\217BN\198K\245\207\022r2^\170\127\182\144\147\241R\253\179\133\156\140\151\234\159-\228d\188T\255l!'\227\165\250g\0119\025/\213?[M#(\241Y\211\bJ|64\130\018\159\r\141\160\196gC#(\241\217\208\bJ|\134\156\140\151\234\159-\228d\188T\255l!'\227\165\250g\0119\025/\213?[\200\201x\169\254\217BN\198K\245\207\022r2^\170\127\182\144\147\241R\253\179\133\156\140\151\234\159-\228d\188T\255l-\141\160\196gK#(\241\217\210\bJ|\1824\130\018\159-\141\160\196gK#(\241\025r2^\170\127\182\144\147\241R\253\179\133\156\140\151\234\159-\228d\188T\255l!'\227\165\250g\0119\025/\213?[\200\201x\169\254\217BN\198K\245\207\022r2^\170\127\182\144\147\241R\253\179mi\004%>\1834\130\018\159[\026A\137\207-\141\160\196\231\150FP\226sK#(\241\025r2^\170\127\182\144\147\241R\253\179\133\156\140\151\234\159-\228d\188T\255l!'\227\165\250g\0119\025/\213?[\200\201x\169\254\217BN\198K\245\207\022r2^\170\127\182\144\147\241R\253\179\237h\004%>w4\130\018\159;\026A\137\207\029\141\160\196\231\158FP\226sO#(\241\025r2^\170\127\182\144\147\241R\253\179\133\156\140\151\234\159-\228d\188T\255l!'\227\165\250g\0119\025/\213?[\200\201x\169\254\217BN\198K\245\207\014r2^\170\127v\144\147\241R\253\179[\209\bz)\152Fp\144\130i\004\131\020L#8J\1934\130Q\n\166\017\156\164`\024A\169\254\217AN\198K\245\207\014r2^\170\127v\144\147\241R\253\179\163\156\140T\255\236('#\213?;\202\201H\245\207\142r2R\253\179\163\156\140T\255\236('#\213?;\202\201H\245\207\142r2R\253\179\163\156\140T\255\236('#\213?;\202\201H\245\207\142r2R\253\179\163\156\140T\255\236('#\213?;\202\201H\245\207\142r2R\253\179\163\156\140T\255\236('#\213?;\202\201H\245\207\142r2R\253\179\163\156\140T\255\236('#\213?;\202\201H\245\207\142r2R\253\179\163\156\140T\255\236('#\213?;\202\201H\245\207\142r2R\253\179\163\156\140T\255\236('#\213?;\202\201H\245\207\142r2R\253\179\163\156\140T\255\236('#\213?;\202\201H\245\207\142r2R\253\179\163\156\140T\255\236('#\213?;\202\201H\245\207\142r2R\253\179\163\156\140T\255\236('#\213?;\202\201H\245\207\142r2R\253\179\163\156\140T\255\236('#\213?;\202\201H\245\207\142r2R\253\179\163\156\140T\255\236('#\213?;\202\201H\245\207\142r2R\253\179\163\156\140T\255\236('#\213?;\202\201H\245\207\142r2R\253\179\163\156\140T\255\236('#\213?;\202\201H\245\207\142r2R\253\179\163\156\140T\255\236('#\213?;\202\201H\245\207\142r2R\253\179\163\156\140T\255\236('#\213?;\202\201H\245\207\142r2R\253\179\163\156\140T\255\236('#\213?;\202\201H\245\207\142r2R\253\179\163\156\140T\255\236('#\213?;\202\201H\245\207\142r2R\253\179\163\156\140T\255\236('#\213?;\202\201H\245\207\142r2R\253\179\163\156\140T\255\236('#\213?;\202\201H\245\207\142r2R\253\179\163\156\140T\255\236('#\213?;\202\201H\245\207\142r2R\253sK9\025\169\254\185\165\156\140T\255\220RNF\170\127n)'#\213?\183\148\147\145\234\159[\202\201H\245\207-\229d\164\250\231\150r2R\253sK9\025\169\254\185\165\156\140T\255\220RNF\170\127n)'#\213?\183\148\147\145\234\159[\202\201H\245\207-\229d\164\250\231\150r2R\253sK9\025\169\254\185\165\156\140T\255\220RNF\170\127n)'#\213?\183\148\147\145\234\159[\202\201H\245\207-\229d\164\250\231\150r2R\253sK9\025\169\254\185\165\156\140T\255\220RNF\170\127n)'#\213?\183\148\147\145\234\159[\202\201H\245\207-\229d\164\250\231\150r2R\253sK9\025\169\254\185\165\156\140T\255\220RNF\170\127n)'#\213?\183\148\147\145\234\159[\202\201H\245\207-\229d\164\250\231\150r2R\253sK9\025\169\254\185\165\156\140T\255\220RNF\170\127n)'#\213?\183\148\147\145\234\159[\202\201H\245\207-\229d\164\250\231\150r2R\253sK9\025\169\254\185\165\156\140T\255\220RNF\170\127n)'#\213?\183\148\147\145\234\159[\202\201H\245\207-\229d\164\250\231\150r2R\253sK9\025\169\254\185\165\156\140T\255\220RNF\170\127n)'#\213?\183\148\147\145\234\159[\202\201H\245\207-\229d\164\250\231\150r2R\253sK9\025\169\254\185\165\156\140T\255\220RNF\170\127n)'#\213?\183\144\147\025\230\179\192\235\203z\142\127:n\253f\243t\012\135\245\219\140|\241\007\031N\241\240\231-F\1986\021\216\006\176\170\002\171\000\171+\176\026\176\166\002k\000k+\176\022\176\174\002\235\000\219V`[\192v\021X\226F_\129\237\001\235+\176\030\176C\005v\000l\168\192\006\192\142\021\216\017\176\177\002\027\001;U`'\025\219T\232\023N\139CS\161_8<\014M\133~\225,94\021\250\133\163\229\208T\232\023N\154CS\161_8x\014M\133~\225\028:4\021\250\133c\233\208T\232\023N\169CS\161_8\180\014M\133~\027\208oS\161\223\006\244\219T\232\183\001\2536\021\250m@\191M\133~\027\208oS\161\223\006\244\171*\244\011\185\130AU\232\023R\007\131\170\208/d\018\006U\161_H,\012\170B\191\144g\024T\133~!\2370\168\n\253B\022bP\021\250\133\164\196\160*\244\0119\138AU\232\023R\022\131\170\208\175\002\253\170\n\253*\208\175\170\208\175\002\253\170\n\253*\208\175\170\208\175\002\253\170\n\253*\208\175\174\208/d\138\006]\161_H\028\r\186B\191\144G\026t\133~!\1734\232\n\253B\150i\208\021\250\133\164\211\160+\244\0119\168AW\232\023RR\131\174\208/d\168\006]\161_HX\r\186B\191\026\244\171+\244\171A\191\186B\191\026\244\171+\244\171A\191\186B\191\026\244\171+\244\171A\191\166B\191\144'\028L\133~!m8\152\n\253B\022q0\021\250\133\164\226`*\244\0119\198\193T\232\023R\142\131\169\208/d \007S\161_HH\014\166B\191\144\159\028L\133~!]9\152\n\253\026\208\175\169\208\175\001\253\154\n\253\026\208\175\169\208\175\001\253\154\n\253\026\208\175\169\208\175\001\253\218\n\253B\150x\176\021\250\133\164\241`+\244\0119\228\193V\232\023R\202\131\173\208/d\152\007[\161_H8\015\182B\191\144\127\030l\133~!\029=\216\n\253Bvz\176\021\250\133d\245`+\244kA\191\182B\191\022\244k+\244kA\191\182B\191\022\244k+\244kA\191\182B\191\022\244\235*\244\011\239\b\006W\161_xe0\184\n\253\194\027\132\193U\232\023^(\012\174B\191\240~ap\021\250\133\215\r\131\171\208/\188}\024\\\133~\225e\196\224*\244K\239&\\\133~\161|tp\021\250u\160_W\161_\007\250u\021\250u\160_W\161_\007\250u\021\250u\160_W\161_\007\250m+\244\011U\187C[\161_(\226\029\218\n\253BM\239\208V\232\023J|\135\182B\191P\241;\180\021\250\133\002\224\161\173\208/\212\003\015m\133~\161<xh+\244\011\213\194C[\161_(\030\030\218\n\253\182\160\223\182B\191-\232\183\173\208o\011\250m+\244\219\130~\219\n\253\182\160\223\182B\191-\232\183\171\208/\212l\015]\133~\161\132{\232*\244\011\021\221CW\161_(\240\030\186\n\253B\189\247\208U\232\023\202\191\135\174B\191P\r>t\021\250\133\226\240\161\171\208/\212\138\015]\133~\161t|\232*\244\219\129~\187\n\253v\160\223\174B\191\029\232\183\171\208o\007\250\237*\244\219\129~\187\n\253v\160\223\190B\191P\177?\244\021\250\133\002\254\161\175\208/\212\243\015}\133~\161\188\127\232+\244\011\213\254C_\161_(\254\031\250\n\253\130\023`\232+\244\011\214\128\161\175\208/8\005\134\190B\191`\028\024\250\n\253\246\160\223\190B\191=\232\183\175\208o\015\250\237+\244\219\131~\251\n\253\246\160\223\190B\191=\232\215W\232\215\131~}\133~=\232\215W\232\215\131~}\133~=\232\215W\232\215\131~}\133~=\232\215W\232\215\131~}\133~=\232\215W\232\215\131~}\133~=\232\215W\232\215\131~}\133~=\232\215W\232\215\131~}\133~=\232\215W\232\215\131~}\133~=\232w\168\208\239\000\250\029*\244;\128~\135\n\253\014\160\223\161B\191\003\232w\168\208\239\000\250\029*\244;\128~\135\n\253\014\160\223\161B\191\003\232w\168\208\239\000\250\029*\244;\128~\135\n\253\014\160\223\161B\191\003\232w\168\208\239\000\250\029*\244;\128~\135\n\253\014\160\223\161B\191\003\2327T\2327\128~C\133~\003\2327T\2327\128~C\133~\003\2327T\2327\128~C\133~\003\2327T\2327\128~C\133~\003\2327T\2327\128~C\133~\003\2327T\2327\128~C\133~\003\2327T\2327\128~C\133~\003\2327T\2327\128~C\133~\003\232w\172\208\239\b\250\029+\244;\130~\199\n\253\142\160\223\177B\191#\232w\172\208\239\b\250\029+\244;\130~\199\n\253\142\160\223\177B\191#\232w\172\208\239\b\250\029+\244;\130~\199\n\253\142\160\223\177B\191#\232w\172\208\239\b\250\029+\244;\130~\199\n\253\142\160\223\177B\191#\2327V\2327\130~c\133~#\2327V\2327\130~c\133~#\2327V\2327\130~c\133~#\2327V\2327\130~c\133~#\2327V\2327\130~c\133~#\2327V\2327\130~c\133~#\2327V\2327\130~c\133~#\2327V\2327\130~c\133~#\232w\170\208\239\004\250\157*\244;\129~\167\n\253N\160\223\169B\191\019\232w\170\208\239\004\250\157*\244;\129~\167\n\253N\160\223\169B\191\019\232w\170\208\239\004\250\157*\244;\129~\167\n\253N\160\223\169B\191\019\232w\170\208\239\004\250\157*\244;\129~\167\n\253N\160\223\169B\191\147\172\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223P\225\255\r\224\255\r\021\254\223\000\254\223q\181\250\235\223\159\254\227\191\252\215\255\253\175O\235\255\244\159\255\199\127\253_\255\241\127\254_O\199\255\253?\255\231\127\251\207\255\253?\255\203\191\254\031O\211\255\253\191\254\159\127\253\015\000\238\n\224\205\127\004\172\159.\0063\127\242\175~\231\1596\2414\223\230\211v\189\219\205\015q\218\239\226\159s\023\255w\t\213dQ\026P*\1392\128\210Y\148\005\148\205\162Z@\185,\170\003TK\168\157?\250\205\250G\028o\248\006\240]%\158F\163\175\196\211\184\248J<\141\208P\137\167\177\026+\2414j\177\018/\142\223\176Z\165\026\240\135Y\182\235\240$N\1693\162\249\235e}\240\207\002\226\131 \234\175\151\184;\249\245\003\232\207\006\162\181\024\173 \218\136\209\026\162\173\024\253\190\135p'\132\175\241\198[1\154n\188\019\163\233\198{1\218@\180\023\162\207x\223\131\024M\247\029\196h\186\239Q\140\166\251\142b\180\133\232I\136\142t\223\205J\140\134\251n\0261\026\238\187Qb4\220w\163\197h\007\209\018\193\2474\150\141\021\163\169O\156\024M}\"\241\251\021u\220tr8\221K/\135\211\205x9\156Fh\144\195i\136\130\028Nc4\202\225-\132G9\188\131\240I\014\239\229p\181\130aZA|\003\2410\174J\201\241\1750\251+\137\238\1758\139*#\135\003m\148\149\195\1296\202\201\225@\027\213\202\225@\027\213\201\225@\027\213\203\225@\027\229\229p\160\141\018)\143\171\128\nr8\245\251(\135S\191G9\156\250}\146\195\161\223\245J\014\135~\215\141\028\014\253\174E\194G\234H\173\229p\232Hm\228p\232Hm\229p\232H\237\228p\234\200V\014\167\142\020\249\142\139\147\238\229p\234\025/\135S\207\012r\248\235\026\226%\194\031q9\211\163\028N7\031\229p\186\249I\014\135a5+9\028\134\2134r8\012\171Qr8\232\195h9\028\230%#\017\254\136\235\129\177r8\244\187qr8\244\187i\229p\234\247N\014\167~\239\229p\234w\137\240G\156\177\205 \135S\207\0049\156zf\148\195\169g\162\028N=3\201\225\2083v%\135\003#m#\135\003#\173\200w\156\224\173\150\195\161\223\173\145\195\161\223\173\149\195\161\223\173\147\195\161\223\173\200w\156\177m'\135\211\163\246r8=\170\151\195\233Q\0079\156\0305\200\225D\177Q\014'\138I|?\225\234a'9\028:\210\173\228p\232H\215\200\225\208\145N\226\251\tg`\167\229p\186w#\135\211\189[9\156\238\221\201\225@\002\215\202\225@\002\215\201\225@\002'\241\253\132\019\182\243r8u\228 \135SG\0069\156:r\148\195O\144\011s\"\225q\146t\147\028\014\207\218\174\228px\214\182\145\195\225Y[%\135\003iZ-\135\003iZ#\135\003iZ+\135\195\226\212:9\028N\255\173Hx\156\224\219N\014\167a\234\229p\026&/\135\2110\rr8\rS\144\195i\152F9\252\224!^\"\252\014g\248v\146\195\161'\187\149\028\014=\2175r8\244d\167\228p\232\201N\203\225\208\147\157\145\195\129\240\157\149\195\129\240\157\147\195\129\240\157D\248\029.f]'\135\2110\245r8\r\147\151\195i\152\0069\156\134)\200\2254L\163\028N\195\020\229\240\019\228\245:\145\240\184\248\245+9\028:\190o\228p\232\248^$<\174N\189\150\195\233f\140\028N7c\229p`A\239\228p`A\223\202\225\192\130\190\147\195_a\157\239E\198\227\002\210{9\156zr\144\195\169'\131\028N=9\202\225\212\147\018\227_p\134\239'9\028\030\213\175\228pxT\223\200\225\240\168^\201\225\240\168^\203\225@\026o\228p\152:\188\149\195a\134\247N\014\135\025\222\1830L+\136\239 \030\198\213K\140\127\193\021\196{9\156h0\200\225D\131 \135\019\rF9\156h\016\229p\162\193$\135\003\r\006\145\241\184\"\012\141\028\014\0299(9\028:r\016\025\143+\194`\228p\186\025+\135\211\20589\028Fuh\229p\024\213\161\147\195aT\135^\014\167Q\021\249\142\011\1940\200\225\212\145A\014\167\142\028\229p\234\200(\135SGNr8tdX\201\225\208\145\161\145\195a\150\012\018\223\183\184:\005-\135C\191\007#\135C\191\007+\135C\191\007'\135C\191\135V\014\167~\239\228p\234w\137\239[\156\223\131\151\195\169#\0079\156:2\200\225\212\145\163\028N\029\025\229p\234\200I\014\135\142\028%\190oq~\031\0279\028:rTr8t\228\168\229p\232\200Q\228;.\007\163\149\195\233\222\157\028\190\133\220\194(\018\030\231\212\177\147\195\233nz9\156z\210\203\225\212\147\131\028\014\148\028\131\028\014\148\028%\194\127\224\1727F9\156zf\146\195\161g\226J\014\135\158\137\141\028\014=\019\149\028\254\001'\179(1\254\003\229\023\141\028\014]\019\173\028N]\227\228p\234\026\137\240\031H\248\216\201\225t\239\189\028N\247\238\229p\186\247A\014\167a\rr8\016>J\132? \225c\148\195\169g&9\028zfZ\201\225\2083\147D\248\003\174\172\147\146\195\225\222'-\135\211\189\0279\156\238\221\202\2250\170\147\147\195aT\167V\014\135\149u\146\248~@iO\189\028N\029\233\229p\234\200A\014\167\142\012r8u\228(\135SG\138|\199u{\154\228p\185g\154\213J\014\215\016\222\200\225\006\194E\190\211\164\215\136\133\239\135=\222\187\145\195\233\222\173\028N\247\238\228p\011\225\173\028\238 \\\226\251\187\199\158\233\229p\234\025/\135S\207\012r8\245L\144\195\169g$\190\191\175\241Q\163\028N\143:\201\225\240\168b\017\252;\205\145\141X\005\255Nsd#\150\193\191\147V\027\177\014\254\029\181*\022\194\191\163V\197J\248w\212\170X\n\255\142Z\021k\225\223Q\171b-\252;jU\172\133\127G\173\138\181\240\239\168U\177\022\254\029\181*\214\194\191S\150\163\017k\225w\127\206'\179-\247f\204`\168K'\244!\189\159e\136b\179\211\199\026 \rC\"@\020B\232\198.\229m\139g\185\249(\223\225\182lC\000\184\169K\137\155\012\144\015\027\205\229k\162\139\167\200\223\146\179\004\128[r\142\000tK-\000vr|\187\250kw>\190\156\239m\168\215\255*G7b40\182Ub4p\181\213b4\168\1915b4\136\191\181b4h\191ub4H\191m\197hP~\219\137\209\029D\247bt\015\209^\140\246\016=\136\209\003D\0071:@\244(F\143\016\029\197h\144D;\137\209\147\028\221\137\252\238\128\223\157\200\239\014\248\221\137\252\238\128\223\157\200\239\014\248\221\137\252\238\128\223\157\200\239\014\248\221\137\252\238\128\223\157\200\239\014\248\221\137\252\238\128\223\157\200\239\014\248\221\137\252\238\128\223\157\200\239\014\248\221\137\252\238\128\223\157\200\239\014\248\221\137\252\238\128\223\157\200\239\014\248\221\139\252\238\129\223\189\200\239\030\248\221\139\252\238\129\223\189\200\239\030\248\221\139\252\238\129\223\189\200\239\030\248\221\139\252\238\129\223\189\200\239\030\248\221\139\252\238\129\223\189\200\239\030\248\221\139\252\238\129\223\189\200\239\030\248\221\139\252\238\129\223\189\200\239\030\248\221\139\252\238\129\223\189\200\239\030\248\237E~{\224\183\023\249\237\129\223^\228\183\007~{\145\223\030\248\237E~{\224\183\023\249\237\129\223^\228\183\007~{\145\223\030\248\237E~{\224\183\023\249\237\129\223^\228\183\007~{\145\223\030\248\237E~{\224\183\023\249\237\129\223^\228\183\007~{\145\223\030\248=\136\252\030\128\223\131\200\239\001\248=\136\252\030\128\223\131\200\239\001\248=\136\252\030\128\223\131\200\239\001\248=\136\252\030\128\223\131\200\239\001\248=\136\252\030\128\223\131\200\239\001\248=\136\252\030\128\223\131\200\239\001\248=\136\252\030\128\223\131\200\239\001\248=\136\252\030\128\223\131\200\239\001\248\029D~\007\224w\016\249\029\128\223A\228w\000~\007\145\223\001\248\029D~\007\224w\016\249\029\128\223A\228w\000~\007\145\223\001\248\029D~\007\224w\016\249\029\128\223A\228w\000~\007\145\223\001\248\029D~\007\224w\016\249\029\128\223A\228w\000~\007\145\223\001\248=\138\252\030\129\223\163\200\239\017\248=\138\252\030\129\223\163\200\239\017\248=\138\252\030\129\223\163\200\239\017\248=\138\252\030\129\223\163\200\239\017\248=\138\252\030\129\223\163\200\239\017\248=\138\252\030\129\223\163\200\239\017\248=\138\252\030\129\223\163\200\239\017\248=\138\252\030\129\223\163\200\239\017\248\029E~G\224w\020\249\029\129\223Q\228w\004~G\145\223\017\248\029E~G\224w\020\249\029\129\223Q\228w\004~G\145\223\017\248\029E~G\224w\020\249\029\129\223Q\228w\004~G\145\223\017\248\029E~G\224w\020\249\029\129\223Q\228w\004~G\145\223\017\248=\137\252\158\128\223\147\200\239\t\248=\137\252\158\128\223\147\200\239\t\248=\137\252\158\128\223\147\200\239\t\248=\137\252\158\128\223\147\200\239\t\248=\137\252\158\128\223\147\200\239\t\248=\137\252\158\128\223\147\200\239\t\248=\137\252\158\128\223\147\200\239\t\248=\137\252\158\128\223\147\200\239I\230\183ZI\252\190\252W9\186\017\163\027\136Vb\180\130h-Fk\1366b\180\129h+F[\136vb\180\131\232V\140n!\186\019\163;\136\238\197\232\030\162\189\024\237!z\016\163\007\136\014bt\128\232Q\140\030!:\138\209\017\162'1\026\248\221\136\252\006\215\147jD~\131\231I5\"\191\027\224w#\242\187\001~7\"\191\027\224w#\242\187\001~7\"\191\027\224w#\242\187\001~7\"\191\027\224w#\242\187\001~7\"\191\027\224w#\242\187\001~7\"\191\027\224w#\242\187\001~7\"\191\027\224w#\242\187\001~+\145\223\n\248\173D~+\224\183\018\249\173\128\223J\228\183\002~+\145\223\n\248\173D~+\224\183\018\249\173\128\223J\228\183\002~+\145\223\n\248\173D~+\224\183\018\249\173\128\223J\228\183\002~+\145\223\n\248\173D~+\224\183\018\249\173\128\223J\228\183\002~k\145\223\026\248\173E~k\224\183\022\249\173\129\223Z\228\183\006~k\145\223\026\248\173E~k\224\183\022\249\173\129\223Z\228\183\006~k\145\223\026\248\173E~k\224\183\022\249\173\129\223Z\228\183\006~k\145\223\026\248\173E~k\224\183\022\249\173\129\223Z\228\183\006~\027\145\223\006\248mD~\027\224\183\017\249m\128\223F\228\183\001~\027\145\223\006\248mD~\027\224\183\017\249m\128\223F\228\183\001~\027\145\223\006\248mD~\027\224\183\017\249m\128\223F\228\183\001~\027\145\223\006\248mD~\027\224\183\017\249m\128\223F\228\183\001~[\145\223\022\248mE~[\224\183\021\249m\129\223V\228\183\005~[\145\223\022\248mE~[\224\183\021\249m\129\223V\228\183\005~[\145\223\022\248mE~[\224\183\021\249m\129\223V\228\183\005~[\145\223\022\248mE~[\224\183\021\249m\129\223V\228\183\005~;\145\223\014\248\237D~;\224\183\019\249\237\128\223N\228\183\003~;\145\223\014\248\237D~;\224\183\019\249\237\128\223N\228\183\003~;\145\223\014\248\237D~;\224\183\019\249\237\128\223N\228\183\003~;\145\223\014\248\237D~;\224\183\019\249\237\128\223N\228\183\003~\139\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254[\137\245\223\n\234\191\149X\255\173\160\254;\172V\127\141\231\183\205\254\195\239\190\190J\r\145M\018\249\029\"U\018\249\006\145:\137<A\164I\"'\136\180I\228+D\186$r\003\145m\018I\253\217%\145#D\246I\2287\136\244I\2283D\014I\228\001\"C:F\240-\165\176\026\211gz:BlL\199\t\219\157\210\145z\218\202\177M\202\211\003\221C\1472\245\004\164nR\170\0307\251\249_F\002\164\140\197\208\148\178\175\192\196\198\194m\252\r\241)s_\128\186MJ\221\r\221p\202\221\003\133\166\228\165\129K\201\011thR\242\210\227\167\228%*\164\212\221\226\245S\234\238\240\169R\234\254M\177*\165\238\145\158L5\194\253\190\175O/O\227\030fF\165\132\219.@\180p\247\005\136\201@\142O\235\221q=\198'\191\027\159\252\176\255\022\161\017\129\230\165\235\186\012\228i\136\155\253;\000[\161'\129%\170\019\186\144b{\161#(\214\0117O\177\131\196T\140\014\018W1z\148\216\138\209Q\226+FKJ(\141\170^\t \144\165n\164X\186\029-L\232\180\167\208Z\138\165\021S\027!\250\rb%\162\191a\203)\199O\248|\173\016\139\211\159N\137\rr\209)\173\223a\238\215)\171\223\241\209\006\161#h\160\133Y\157\230T=\n[\007\238\134\148\209\207\153\232I\184\015X\184\1414\183\191Ro\152\148\202\030\"i_B\211\157I\185\188\167\182S\"\239!2\165\177\223\159!6%\241\026\"S\n\195zaR\250\174)4\229\239\241e\1278\225M\164$>Sh\202\225Hw\017`\216\"h\201\164<>\236\183~\183\158\255\157n'\2105\232\166R>o\246\187gj\223\166\148\134\175\221\006\155\242\025\216aS>G\nM\153\252\029HoS&\159iv\177V\238\005\186\011\199\003C\144\148\215g\024v\219\193\024R\211)\187\247{j;e6M\0266e6\201\219\166\204~\135\249\197\166\156\134\175\250\006\155r\249\157h\153\178\248=B\172[\tw\000}\224R\014\239\252\209oh(\156\130xxD\167!\158\238\221@<\244\182Ky\253\022\015\187\245n\222\140\003\194!\002V[\215\210\148C\151 ~\227=\245\180\222\017 e\249\183}\240\155u\160-C{G\n?M\235\2393n:=\205\139\196\250\199~w\154{\248\024\131\223\193^\177m\150\232\237z\172\006\171%\248\176~~\169\191\182N\238|\255\254\244-\030N\235P\130\026\233\182\235\160v\t}\153o\186\018\235\150X\127:\249\240\018\199<\172E\216e\172\254\188\252`\247\181\227\178\141t\216\200\201\239\158#\226\250\012n\r\217\149\214#(\206\195\187\135mc; l\157\131\133\210\163e\192\221J\028O\031\206\240#\207\161kD\196\233:\0049\156\018q\207\007O\137\129N\139\136\235\002\157\131\025\017\134\199\206N\166tX\031\194\134.\225\228;[\239\b\208\138\128w~\136.\1713\025\212\175\164)!3&}#\001\138C\217+\t\150\025\146^\156\171J\003\217\027\t\133\227\216[)<7\140\189\019o\011G\177o\165x\030\196\190\203M\209\128\233\1971<\028h\171\210\223\201\255\184~\158\023\199[\154%\028\246\199\227_G\017r\183\023;\189\172\195\235\215\234\02671\156\246\135\191\182\2552\195v\199\237\018x\1833\027\247\231a\019\159\182\254\240z\to\164\240\187\221\217\219y\023Ng\127Z\239w\243;\168\245n\158\145\158\166\243f^1N\251\183\191\222\164\219\244\171\191\174\167\181\151K\002q\218\031\182\254\244\181!\157;q\227\223\254\n\255e\198\r\187%\176I\129a^Q\215\187\243z\166\\\001\172R\240\184\127\159;\247\020\017\163S\204\249\141\017a\154\223\176\253\216\249m\220\237>\230[\219\014\235\221\229\206.\157\249\244\188?\248\031\227\254i\183\254\241\186\191$\014\014\031?^\226v\222\244\\\215;yl\230\022\027l\241w[R\216\210\233\232O\190\136\215\149\207Vj\199\020\158\168\132\183\136?\030\226\184\139\197\006\0286\176\245\155\253\211\219\254\219\199\241\165\220L\139\205\212\182\208a\0113~_\209\021}\221\147\204\028y\217\191\190l\246e\146\248\226C\253FcC\233\249~\163\173\240oQ\214u\007\137M\142\191#\173|S\177\172\173|\003S\189\184\178\r5\171\178\186\242\r4\021\242\202\183\160\170\245\149oG\215\b,\223\132\169PX\190\005\251o\145X\190I\247\155\026\203\183\214\254\158\200\242\141u\005\030\127I\002[\168\159\146\n\r\241Lt<\029\252n\183\127h\016\155\025j:\187p+\161\220\198\237\150\176\133\177b\144\n7\017+;\182p'\229\137\230vG\212\128\226\t\230\199\252\134\022a<\173\204i\031\002\241L2\159/\248!\021\207\028\167\245\235\139\255\240\136\228\tc\216\031~\228\144<Q\156\199\249\127\025\152\155\014\198\203\177\"\131e\241\207r\207\224X\231\175\231\183]\2381Y\223\175sv\"sI\159\225\205\183\253+\226X\192\199\215\253\192\215\011\025\238\2528\198\204\157\178X\175\026-mU\180\168\144\211~7'\210\014\151\212\205\167j\015s\1271\135uS\213\202\241[<\177\234\180\170j\228t\136\133vXP?\252\024\015?2\003\175YRc\220\198\227\233\219\245\255Tn\135\005\182?\205I\194\0284+\177\240\226\143/k\\At[\001\190\029\206\127\229KO\135\253+\183\200\234\1876\151y\144\190\132\156\239i\147\211\175f\025\238\135\205E\193L\130\140\018\247\135}x\249\240O\187}v\bY\147\167}v\000Y\146\227\183}\188\1283\003(\174\156\183l\234\229o_\163\182\223F\0225\175\155\225|\2486gesh\179\202O)\136\019'\1299ut)\005\185S\241z7\206O\128)\158\185\161\187\137\224m~\017\177\243\243\004\180\031\215\211\250\242n4~\139\155?\021bu\017\171\017k2\216q}\152\243R\151\212\209\180Y\191a\0196\211D\190\247\\\006y\216?\019\206\222\141\214.\158\183\241r\153\243\171\148u\155\131\0271\248\186\209\248\000\136ZB\222\252\193\191n\214'\136\215\203\248\241\155\127\2506K>nvg\192\152\228\1826\031\231\240\002\209v\025\253\195_\164\028\233\161\2212\254\146\239[\207g\004\136o)~\222\248^\148\191\223\002\176K\186*\030\230\237\194\248JW\234\0170\255\251\219~\190\238\156\183\188\206\1442\222\227\157^\167\248\229L'72,\027\185\012\213\199\249xBDH)\177\193\2241\029\173\183\143\249x\134\015\021\151\128\231\253\230<\204\211\223m[K<\157\024\150\161\183[1\236\182\233!`\195\192\235\254\132p*s\159\159[\027\130&\210\2506+\241e=\015\240\219\156i\231.u\006\129\183gd\164E\228\245N\025\232\016\248\243)\025\219\"\2466/\196o\190\252\204]U#\165\231\239\171Z)<\143\175j\164\220/\137R?_\128\020\020\229\018\189\206\147L<\028\231}@I\234.Q\239\188\241\029x\238t\137x\231\019\236v=o\214\229\240)\157{n{J1\188M\196z\183#\150\017\137J\143\175\243\191~\\\166\200\194\208\183\138\161\249qj5#\139\131\220\154\012\2483\031 \003m:T\191N,\185\005\181u|\201z\150\183m\177\149\1545\173\237\234n&\223\023=7r\217\131_7#\2299\164\245\149\205\020zf\168l\166\170\127Becw\157\005-%\218>n\230}\194\250\132b\138\b\152wF\183Ih\015kW;1\246\135\159w\161\167=\\\181[\229\174\2503\017)C\165\237\238\015PA\151\232\253\178\235\150C\019\129O\235\019\244r\151\238m\247\195\199\134\162\211\189\237ml!\\\216\218\250\019\rx\215\202\209\197\193\235:\004\230\251\191/^\240i]h\194\151.=\183P\184\251\001\154\184\241\014\245\209\133\018\174\220q#\222\253L.:Gt\017Q\227\183\243\246z\007\151\171~l\215\208\192T\211\239\191\214N\184\143^Xn7\175\231\205\250\199\022\158\183o\224\19453[\159.\184\243j\185)M\210\189\006\216g\2062\187P\244\006\1927r\241\228\217[\186\217y7?\191\222\216\143\153\007u\136\205\227Z\192U\245nGOz['J\215\238\243\240\170[\240\208\198\231\016=\189\157O\025\244\000\232\251U\015\160\161\004\221\023\199{,6Q\234\193Xq\255\229U\187\159\234o\164\220\154_Ak\207\135\253\246\218\196-\1450g\242\202\231\012\223d\026\187\187\171\223iR\021\238\015`\186\234N\000l~\2271\234N`\222\230\154,q\207\187:ti\254\240\201\252\177\141\151\188\003Dwr\244\231U`\005\240=\160~R\145\150J\239\243\192\252U\135<\248nv\162\022h\1388\029>\252q\255\188\241\199L\199\142YpiXb\022}\253\151\012:\153\015\246\243\027q\b\030Vbp\225\252242\170x\150\029\148\012\188&\157\247\021g\202AC\003\213\167\210\193\148[\168Y\187\006\203\027\133\207g\001\160+\002K\186\029\218r\019\255\150\249z\232\234\218\253\183M\221C_\127\215\208\130\255\221\251\131v\134\127\219s\214\205\237C\168l\1894\205\015\227o7TdN,7y\157ep\194Hf\151\215\243\180>n!<\164\243\203\252\158\246\021\178\127!\153W\198\243H-'S\201.n\233\174\131N_P\200\175\196\198\213j\245\215\2401\191@:\173w\243\170q>\222^\137\127l\135\253\230\233\237\184\222\172\001\2140l\244\199\184\246\128S\153\203\197\195\250\2486\191\154\221\209E5\131\247\223\231k>\197\215i\191\155S#\175\251\0294aJM\140\2357|h\203\224o\254Pw\003\174\216F\238\014ZF\191\250\211\203\250x\"d\199\200\227\199\165\\~\253J\208>3f\159/C\025\236\025\252\2416ky}\\\031\001:T@\179\189\0212\189u\136[\207\18952\210\191\197\227\190b\160#7\017\191\21540q\003\167\184A\1375\025E\191\198\249?\207cM\208&\247\216\151\173\216~\218\195h5\170\006\155\027\174F\231(\186\139\223\182t\219\025Q\207\154\192\167\205\200y\191Y?\239wO\2540\167\136\2144BMF\203\207\251CE\003m~\242E\\F\204\225\246\194\137\144}n\2509\201\175\137gXF\197\235c\2499\135\"%K-\132\nR\151\218\200\136\250\232\191\231t\017\1793\224:\188\22453\"\158\147z\223\230\212\222E\029c\252NrV\171\194\138\181.<\182jJ+N\177\133\188\180\231W\162\197\241S:\219\196iNd\211\243g\196\253:\031K\017\151Q\247\129\231\018\149\209\244\219\250r\185\210\147f4=\2557\255\140W\206\136\218\239\252\233B\1795?nF\216\243v\140q>;\233^n\183\244\192C\185\133m\188\248\017\174|?C+\025\129\239?\014~\183\174\232\2501\183\0140\1952\234\222\196\237\030\150+\149\145\246\248\177\151A:\163\230y\132\225\014u\147\219\n\028\143\241@@\149\219\001\249\220^@\235\226\022h\222\197\236\"=hF\182\211\233e\127(\r\166\206\232w\189]\223\218\000\168\203u\242~{\217s\149\174\158\223h\251o\254\171%h\160\203\029t\230y\235\132\200>\187)\152\143\159\012\205\136y\190\211\019O{z\200\237(\246\215\t\179\212e\025\005\031\252\027OAz,\156/\252&\150\197\175c\213)\165\212JF\212\243\252\235\1995\000MF\216\187y\250\006T\147c\201\137W7\163\202#\253\2287\027P\167\2095\na\184\201\237j\014\254\249\2492\2184\179\152\140\178\231\004\207\238\244\146E\187\194V\020\167$\211\022\247\251\140\237Jy\003\134\246\1331\166C\168\201\170\153\243P3r(]r_h \148\214\141R\003cy\250\203tY\172\217\237\207\240ycDML\229#G\182\001\187\202e\03183f\171\206\208\252\236\182\230\028\189\190\236\172\198yV\204\182\164\179\249\147\195\129v6\214\020G\255\134\167Y\212f\020>\015\254t@\160+\029l\233\1503\218\158g\179\249\130\215\201\001\192]1'\199\157\220\023\207\011\140\245\021+}\006\158Q\249\254\2263\165\199\r\185\131\198\188H\198\221\158tm3\186\222|<\243\132`+\151g~\218\169n\151\128\r\184\140\160\227)^(r\215\014\180\145\017\247\235\199\134\031\223\169r\159\231\027\168Y\177\249\2173\138\142\175\151\151\"o\184\169t\182|\190\227\011\187B\218\025`m\197v\148/\154\209s|\139\207\145\175[<Eg\174\154Q\243\247\245\133^\185t\133\027\138\227[\216\252\187P\158M\178\018uc\241\022\242\248X~\132\162\192\166\242C\020\027iW\197\027\249$.\224\155\242M\228\027P\133\196\240\140\158\019\0188\148m\238\236]\0017\197\153\174\166\021[\147\145A9\180\174\144\1409\173\175\219\1519\147\000\r\180\149\r|\167\006\186B\003\243~j\179?\211\227\247Y\244qN\003\172?S\151\240F\164\245\165\028\002383\027\196\2218\239\000w8l\153i\224c\138\187\203\165\169\195\198\002\0207\203m,\166\185\0018\149\178\187|\209.#\243\235k\166\194Y\191k\138\201\177R\011\170\162\005<Ew\186\140Fyu\166\"'\207h\155C\211&\187s\133\014\007X\155\205y2.\167\2238\167\025\024\217\231N\206\243\252G\175\156;\159K\005\175\183s\159\206\027\181\227\188\007\153\027\161Tv7\020\027\153\243\195\159m\016\179B\177\141\185\235\174\031\242\203\1812\150[\153\211\199\254Pl(\022\027\154s\178\199X\236\154\169\248\1984{(\239WE\252\188;\136sJ\229y;\015\212e\157\155\023kL\143\247\205o6\151yO\215\171\1568n\173\001R\151\145\240X\153\201\1887\255\246V\185\255\237o7\154\235\178l\158>\223gm~\135D\176.\251Ra\\\231\176}\238\217s\192\204\164\226\159\247\207\023+\202u\177z\134\233\172\031J\r\\\174>\143\028\225C\005\158\176c\t;\191\219\195\023W},\163\143t\229\169\132\189\016\004\192~U\003\206\244\153o\170\006-w\011\153\ta\235\015\167\143\185\215.\222\158\249,qy\181@;$\175+\154\1537\025\235\154\182LE[c\252\184\156\017\242\r\217\218\155\170j\205U\1806\147\172\244tm]3\151\186+Omt5m\204)\244C\233f\250\223ih3'%J\r\250\138\006k\218\025jh\185\241\207\235B;!\247\030\198\191^\031o>^]\027\185$\236\177\161\177*\225]\217Xf\194\153\252\238\194\196\245\241\182{\204\210`\170if;otr\173\012\171\154V\198,!\135\166b\184\230$\245Gv\176\134\234\185\168\220\148\254\r\254\212(e0\217M\216\233\2293\183\153=\173\015\182\178\145\2039\133[q\185c\183?|_\223\142\253\159\005\012\223h\155;\180\217mF\230\244>\2287(\215\011#63\229,J.~N\203\231\235\192\208S\248b{\243\190g\206\031]\242\246o\176\003\024\134\223h\132_\148\015\161\216\204\206\023x6\254\198\157\140\176\168\015\177\216\200q~\149q9P\221\026\187\254\005\218\154~\227\134^\163\220HX\253F#?`[\031\154\223\025\164u\230\212\017\212\239\181\132'\141\160\139\r\205\175\184\252\235\231\201\245r\166\206\206\163\193\252n{\165\217=d\166\156\233\229tO\133\207\022\231\132\031%\030\130\171\230\213gc\151\004\244\004\204\nmY-\243|\134}\159-/>\236\253\211\143\143g\146Y\232K\224\203\171>\154\195\130/\161\143o\023\159\003\160\203\147\205\250\146\201\252\220\003\204K\211\252*\251\128\233\189P\158t.\171\194L\148\203Zw\137\187\242\005\026\203'W\175\1834oq\2437\020sG\208\2026\166r\027\229\174\025W\197V.\233\185k\162k\156\179\145\175X\20736\197\150.J|>\248\237\246\186\163\184\150;\150\026U\197F\231t\197g\147\241{\1695]\211\237?\155\219\191\158\138\207l\138\\\168\237=[l\233\223\208{\174\216\232\239\244^[C\252\223\233\189\204\244\244\028?\151\239\136S\237\216\023\225\183\219\002\184\207\166\129./Y\215\183\209\187\212\157\192D5\014\213\141\196gOi\2381T\180\146I\204\143c\005\254\242~+\210d?\230\222\251\204\231\180\221ut\179-L\245-\20475\255'\218\174\198\213o\180t:d\155j~\167\169\203a2\215\152\170h\204\031\184\139\162\174n\160\208C\166\190\161B\007\217\223h\169\212?\217\183J\215y\193?=?\003\184\205\129\167\211\254\249\2492\169\208\165s\166\200K\006\027f\160\216\231\178\207\175\023S\031\030\136\162/c\241`\025\1352\248\153.\028\202X:\170\196\177\140\165\019J\140e,\029L\226T\198\146[x\170\241A^_7m\177\006aj\138m\148ZP\181w\193\135\170I\215\221E\166\133\162\137*\007\182U/\237\176\129f\181\250+\153#\174\159P\024\252\225\250So2\170Y\162>?H\144G\169%jZ_\190\189\157\007\233%\232\243\011\161U`\147\220\167?^~\2501\143\178I\159\\\127\022;\015r\127%/_\167\211|\179o\209\159\174?=\007\1846y\190\235\015\012\150\129]\2181W\200\184?\029\001\210\167\2211\2555>\239\136\029>\005<\1339\243\011\225C\210q\153\182\19528\236\229O,\204\177\163\252\172\243HN\235\231\243!\254\217\0000\150\128\n\128S\t\168e`\147\bj\186\212{\192\134\185i\026\b\127\026\230\164\250;\128\018!\r\135\249\222^n?7(C\018\025\005\031\143\231\003\221\150I\175\224\003P\191\177R\240k<Ax\162\148\253.\254yQ\214\165\030i\154\000\149\232\228\244\190/\163\018\145\156^\014\177\226j\137R\166\253\249P\134\249t\134\251Vq\181T7\235\239eT\144P\243;\153\203o\027L\135x\026\246\2540\002v\020\159\175\018\156\136\234\249)\204\179\029DOr\244\211\254t\245\234\249\riC\173\242\200\193\031\143\004Md\0212\183\168\210\133)\023\173\229\232\138\0072yd\238\129\018\141\141\135\243\246\138\166\185O9\134\192\172\167\018\218o\207\155\211|J\1577\023\209\207\211\197\229\251\220G\208\181\242\176)8\190\248\195\027`\006\192L\027O\151Ih\127\137}:\211\021F1\252\242\155\165\000H\216\189\243\167y\162\220\240%&B\240Ut\186\239\186\244\018^C7r|\230\n\t\169\2559\207\169\195\219/\158d\007E\235,\146\135F\155tI\1593G\187\167y\027\012k\135Nx\029\206\167\\|\186x\148T\167[\128d\228\166\187\180\011\174?\014\019\143\183\194Q\188X\159\005\230.\233E\237e\004\167\019\241\188\191\23679\137\234D;/~3\229\000#Q!\131I\004\020/;\218\151\028d\018\150\178S\156\207O9\148Y\165\139\251z~\203\253\2311\134\253n\204!\027\233z\031\127^\022\193\252%\149\176wyz9\239\198\195\229\007\229\223\231;\254\248\179\248\184&\017\216\247\167\221\254\020_\162\135%\215$\202z\219\156\143%P\170\173\235\207}\151\175\150\136\236x\025\246\248\005\155\137\182>\129BM[\002_~\031\011\182\169&\221\175\029\214\254z \253\130\159\223\178\151\239\171Z\200\221\131/\183p=\219\229\238b\168l#w\031\161\220\198\237\172\152\187\145\177\182\145\220\157\196r#\215\031\001\207\221\200T\217F\230>\236\170jl\139\157b\155\223h'w?\201l\176\221_2.\021*\177:\015\205]\213\208\221\255y\216\2073Q\253\152X\251[-\229\238)\1531.\149\198\023\015\211%\219\156\159ml2a|\219\175\199\018(\153(\170\186.\153\028v\231\205\166t\169d>\b\243\220{Y\003\171\006z(\162s7\028\132\147\2547\186\212(\239\007.\023\002D\020\247\003\247\128\235\000=\205\255\235\236\002;\209\214`\t\239$\184[\193.a\137\158\174\232\184@7\188a\144\027\152\022\r\168\252\222Al\164]-\026\209\217m\132\220F\179h\195\212\239(\228\006\213\162A+l\194?\127\241p\230\221\246\175\237\255\249\151\154s0K.8\151\193\189\029bxy\142G_j\164\229FN\135\184\221o\246\243qu\251/\1275\201\239\005\206\224\174\012V\b\238\203`\141`!o\179{\142\215\017\248\186kQAn(\"\225\172\237B\017\t)F7\242\163\250\243\197\219q\242\215\159\131\1563\193\215\129R\194@Enc>\224=_F\t\134x* \021!\219U\001\169\017\217\020\144\006\145\170\128\180\136L\196=\196\231\245\188\nF\191\253+\252\151y\\\134\221\018\146h9\206SI\014`\229k\\~\231\b\016N\186D&\190\149\175p\220\156\015\004\233\164K\228\000\189|\141\183\151\249\2292\222\152\151\174\146\135\012\025\222\1350\211\254\162o\165V\130\194\219\144\155\021g\244\229\r\025\1633\138;\197\2219\139\141\197+\175\143\151w\240\153&2\146\155S\254\249{\239VE\240\159\229\030\232\154R\223\2154\146\017\227f^3c\006\154\168qN_\197\231\231K\193*&\205:\147\001q\230\172\203\172\160\227~}c\153\022\2392\179\134\030n?\205\011\19267Me\145\153E\2438'm\015\025hf\201\028f5f\144>\215C\215\004\238\156*|>\231\006t\200\173\215\215\148s\177\137D\211\243\219\139i\127\152\223\135\143\240\210\177K\132|<\015kz9\222%\210\253\001\129\137@\223\214T\194\219\244\137 \183\241\199\015\nN\223\015\206\175\162a;\223\167\250\154\147P!bw\244\137\170\198X\130$\154z\190\188\025\188\238M\231Eb~\189\0148\155\193\237\246Y\168K\143\169\016\153\190$<\031@\229}\"\156\245\238\242\019\230\151\253\023\131z\233\002\217\155\247\"\130\166\172>\145\197\254p\253\189\128\211\229\235}\251W|\211\221\135\018\016\246\161\253X\002\1946\180\143%\160\001\224T\002Z\025\232W%\160\003`S\002\182\000T%`\007@]\002\246\0004E\002\172\000i\139H\224\142wi\026\224\252v:\206\175a\232=\140O\148\182\139\243\154\145\133\136\251\202\253\244\148\005\165%+\241y~\131\159\147\156\207\174N\151D\214\254\157\2156\159Y\152.\137\227,6\179\203|\185\185\017B\006\157\217e\030w\254m^T~\252X\127m\177\2286\018Q\190\197K\145\015W\134\248IF\204\207\202\160a%&\142J\215\026\018\029>o\230\205\239e\189\198\025qP\140\225=\220\144\232\239\250\1879\183#\246\206\1757P\"5\b\021c[\1863+\197^\188\213\016\159\200l{\253\180=D'\n\219\204\251!\n\238\164<\225\154\0302\017\2131n\2157D.\1519\248\012.\147\197\028\018ImgV\255z\240\235-II\194!\200\192\199\139]\239L\132\143\210\253~6\241\240\156\215\155\148\018\141C\2044\145\220E\016\155H\0046\157\143x\253E\1582\172D0\\y\tnD\n]~\205g\138\225\2283\175(\131\146\161\235m\rX\203l\204AL\134Z\025\152\005\130d .3\162\025X\186\181\140\219\183\249\029\236g\127\\*k\230\255\255v\216o\174\201\183\248\213\203\208^\247\187\237\253\234zh\177\255\183\222\225\211xy\254\243\229?\210\2462xh\252\235\174~\187\003\134\223o\177\216\005\225\255K\1555\2210\254\255u\001\216\141\135\248\255\215\005`\215\030\210\\\210a\191\254.\007\143i\005\222!>\239//\t\179\005uc\195\184\\i\221\152\204:\159\181\003\003\196'\019\205\183\245\129\214\2001\173\161\216\143\254t\134ErL\179@\1555.\169c:\171\004\127\169\251\193\230[\161\249\173\231\248t\190\216\031\194y\131\241}\250\180\135\195\133?\004\240\b\152SP\241;\226\006|\242<.\208\003]f\225\243\219\204cB\142\233\142\245xI\228\188\157w\225\132#\148(\235u\029\191\149\136<\001\232\243\232\242\182\142T\021\029W\000\189\249\022\248\165ll\0008\015\198\250\242f\231[\204l\177\163\002t\233]p\212\000L^\t/p\006p\247\175\131\175/\r3\219\245h\171\027\161sBt4T\191^\158\022o\163\173m\003\239\162\163Q\223d\221\0281\221\146\239\127:T\247\203\023!1\145\234\235\175O\143,\163\213j\245\215\229\196\252\250\244m\031n\196\187\189\029\188A\127\174t)\172\201\194\020\193T\022\166\t\166\1790C0\147\133Y\130\217,\204\017\204ea-\193\218,\172#X\151\133\245\004\235\243\195\189\"\156\207\227\144'C\030\135D\ty\0282e\204\227\144*1\143C\174Ly\028\145\165)\200\142\216\210\228u\215\016]\154\188\240\026\226K\147W\158\"\1904y\233)\226K\147\215\158\"\1904y\241)\226K\147W\159\"\1904y\249Y\236\151\188\254,\246K^\127\022\251%\175?\139\253\146\215\159\197~\249\169\191\245\156\237=\156\175\213&\245\171J\019k\208\248\172S\r\154\238\\\173j\2084\015\168\166\006M\170V\170\006M\218V\186\170\207\169\211\149\169\130S\175+[\005'\162)W\005\199Qk\171\224\216\241]\021\028{\190\175\130\211\228\170|\021\221\177\235\134*8v]\168\130#\227\171\148\174h\001TuR\199\129\171\210\186\162\158\215Ub\2154\139\235*\181k\146\140\174\146\187\166\174\211Uz\215\212u\186J\239\1548\175\171\244\174\177\231\171\244n\176\231\171\244n\176\231\171\244nHq\186J\239\134$\163\171\244np\224\170\244np\224\170\244np\224\170\244\142\027\031]\165w\220\255\232*\189\2276\200\212-\2384\238\166J\239\184)\154\233\248\235]\237\173\161\159'\244\203\215z\2266\226+[5s\017\177\215\239\243\228\209\006\209o\151\135(\160\127J\253'\230\246\139\001\240\148\151\148\150\255\152\147\025\187\185\131.\254\214\031\241\176\255k\247\149\207X\221\1996\139\2169S}\023\218\220\135\170E\232\233\253\190Uu\031\170\151\161\023;\255]\176\190\0156\139\224K]\254]\172\185\143\181\203\2169\205v\023k\239c\221\"\2468\231\207\127\133\186\251\208v\025\026\191\197\221]p{\031\220-\130\175Y\167\187\224\238>\184_\004\239\214\015\029\220\223\199\250e\175=\220C\2430n\195\242&6\139[n\030\198.$c\0237\015=\215<\140\223\152\140\223\250p\241m\220\003\030\1980\nc\184\004<\012\228\148\012\228\180\140\191\031\204i\149\014\2302\254~D\167F\026\209%\226~X'%\r\235\002p?\180\147\022\134v\t\184\027_}\249\136\207\231\151\004/\229\129Oq\206\153\190\200\026\214sZ\239\246\229\174k\228K\244\243\221o>\242\016\245\0009o/\t\209\\\188\190\143\191F\206W\184]\138 F\132\\.E\b\155 (\210\253u\157G\191\130/\213\202\135H\209\237\"z\1868\196n\198Y\130t\011\200v}\136#\005\247\139\224\193\031\014\235x\160p\191\b\127\141\241\237V\219\251Ug\146\130\134\229\019\239\231'\246\243eN\031\004\t\011\136?^\011\234!z\\D\239\223\222\246\199\245i\189\199\225\138\203\199>\248]x\185<\201\254\140\151\153\022\1601^^s\2063\243.\030\143O\151\255p\249\189\183C\230\186\243\220\182hbF\031\158\227.\208h\206\211\219#\226c\190\193\151\153\005\151k\018F-0\235]8\196\139\147\001\226\245\"~^\170/\255\158{\016\179\128\204\237\007\162\252<\195\165\004\240\129\250\185Y*d~U4^\171\192\191\170LR\204R'\239~\030\255\2213\133/52\2377\155\253{\006\176\212\137\031\231\215(<j>\233\158Mn\000\134$\2528S)w\129\165@r\173/\229\241\247\158t\215Da\164.\223\141c\",E1\191\138\156\167\214\203\214F\006\168D\002\231\211:\018\149\213\146\254\225\197\239\158\233I\149J\020\026\214\199O\129\018fI\254yg}\253X\195~s\206<\183Z\n\224m&'\243G-%\176\137\207\153\198\1475b\179?f\031bI\255\249V\142/\2357\n_\210\255\217\159^\226!s\251K\250_~\bv\247\140\139\156Z\242\255\237|X\227l\175\006a\145\203=m\016\2282f&Q\181T\192\198\191_\230\235\237~\140\180j\169\152^\228m\191C\149\169\165\016\158\247W\243\200\229\147\143\145\166:\189J\212\019\246\231Yr\007zv\221$#\177\255F\247\164\151zx\190|\152-\211\179Z'\247\179\241\243\250\180\229\197W\167B8\205\247O\212\214K!\204\1888{\026\004\189\020\194\180\185\030B z\169\130o\254x\250\1856\191\207\127g\130\235.\157\248\174\0190qV/\021\241\249E*\n_\n\226\242\235\170;\150\132^J\226\156\011\014\201\174\226R@x|\201\r\219(M1\227,\1373\170Z/%\241|\246\1351\1429BM4\211\204\155\018\192\152\165(\182\254x\228\1613KE\248\016\206\219\243&\183}1Ka\196\237\0167\155|\151\153\1658.\2222\0126\201\134\228\132\027$\179\020\197\252\184\153\197\196\184d\127\183\195-\187i\1475\241m>\1580U\205R\n\163?\188\198]\230v\250\148~\219Lx\"\133\239/\254|\204\141\214R\012\151C\238!\179;2!\157$\223\222<\238\027\204R\012/3\1753\1726\2336i\251\182\137\185G\152\004\185\241\024\216\165\004&\191\222d\194\019\t<\207\127\253\150S\128U\210#\1723\157j\151\244\191|I\237%>]\0150\1321\t5\166i\029._\018\195-\159M\182J~\152\183\147L(\155,\018\251\203\023M\024\224V\127]W\217\171\015v?^\231\214\203\007\196\231\255\197\180\160v\r\1300A\168\157b\016\167\n\181\211\b\227\164\161v\134Q\152>\212\206\"\n\019\137\2189\006qJQ\187\022a\153\228\162v\029\1948\205\168]\255\136\154\2071Gy\148W\247(\143\168\1970?\160\006F-\199\249\001\023\016\183\028\232\007\216\200\176\197H?\192\"\194\022C\253\128\154\024\181\028\235{\\\187B\\2\216\015\184\006q\203\209~\128\169\191\2303\192%\235\248\246\178\014O\243\251\1469ew)L\205h\186\213\132aI\183\0061\025E\183\150P\025A\183\014A\172\231v^\239\171\158\189\251\171\170AsI\231^6m\243\255\\\223\201\\\207\199\193\191\173/\175\164\252_\155\255}\005\253\251\255\242?\254\229_\255\195\211je\030\191(d.\031gG\248\144\194\213\002\1742\240\144\194\245\002\1743\2401\133\155\005\220d\2241\133\219\005\220f\224S\nw\011\184\203\192\159Sx\187\128\183\025\248K\n\239\022\240.\003_\167\240~\001\2393\240\191S\184_\192}\006\254\154\194\135\005|\200\1927)<,\224!\003\223\166\240q\001\0313\240]\n\143\011x\204\192\247)|Z\192\167\012\252-\129\219\199\207\136\153&\167\247\127R\248B\239MN\239\135\020\190\208{\147\211\2511\133/\244\222\228\244~J\225\011\18979\189\159S\248B\239MN\239\223R\248B\239MN\239\239)|\161\247&\167\247\239)|\161\247&\167\247\143\020\190\208{\147\211\251\143\020\190\208{#\233\253\250V\233\178\198\252\183G\176[rn@\240\144\130\151\140\011\b\014)x\201\183\017\193c\n^\178-\"8\166\224%\215&\004O)x\1934\181B\240s\n^\240L5\b~I\193\011\150)\133\224u\n^pLi\004\255\157\130\023\012S\006\193\175)x\177\158(\139\224M\n^\172&\202!x\155\130\023k\137j\017\188K\193\139\149Du\b\222\167\224\197:\162z\004\191%\224\197\199(\141b=\255\147\130\023zV\172\231C\n^\232Y\177\158\143)x\161g\197z>\165\224\133\158\021\235\249\156\130\023zV\172\231o)x\161g\205z~O\193\011=k\214\243\247\020\188\208\179f=\127\164\224\133\1585\235\249G\n^\232Y/\244|Yh\230SR\253\201D\219l\003\229\179\137v\217\006\202\167\019\221f\027(\159Ot\151m\160|B\209}\182\129\242\025E\251l\003\229S\138\030\178\r\148\207):d\027(\159T\244\152m\160|V\2091\219@\249\180\162\167l\003\229\243\138Ye\027(\159XL\147m\160|f1*\219@\249\212bt\182\129\242\185\197\228\231\131\242\201\197\228\231\131\242\217\197\228\231\131\242\233\197\228\231\131\242\249\197\228\231\131\242\t\198\228\231\131\242\025\198\228\231\131\242)\198\228\231\131\2429\198\228\231\131\242I\198\228\231\131\242Y\198\200\243A\237i\198L\025x\249<cW\025x\249Dc\155\012\188|\166\177*\003/\159j\172\206\192\203\231\026k2\240\242\201\198\186\012\188|<\177m\006^>\160\216.\003/\031Ql\159\129\151\015)\214g\224\229c\138\0292\240\242A\197\134\012\188|T\177c\006^>\172\216\156`\203\199\021\155\019l\249\192\226r\130-\031Y\\N\176\229C\139\203\t\182|lq9\193\150\015..'\216\242\209\197\217\012\188|xq9\189\151\143/.\167\247\242\001\198I\135\243\223>\197\184\190\220J\249(\227|\185\149\242y\198\r\229V\202\135\026\023\202\173\148O6n,\183R>\222\184Xn\165|\198qS\185\149\242A\167]\149[)\159v\218\166\220J\249\200\211\170r+\229sO\171\203\173\148\015?\173)\183R>\001\181\182\220J\249\024\212\186r+\229\179P\219\150[)\031\136\218\138\249\165|*j+\230\151\242\209\168\173\152_\202\231\163\182b~)\031\146\218\138\249\165|Rj+\230\151\242q\169\173\152_\202g\166\182b~)\031\156\186\138\249\165|z\234*\230\151\242\017\170\203\204/\181\231\168N\151\218(\031\166:Sj\163|\162\234l\169\141\242\177\170s\1656\202g\171\174-\181Q>`u]\169\141\242)\171\235Km\148_#u\190\212F\249\184\214\r\1656\202g\182.\148\218(\031\220\186\177\212F\249\244\214\197R\027\229#\\7\149\218(\159\227\250U\169\141\242a\174oJm\148Ot}q\254(\031\235\250\226\252Q>\219\245\197\249\163|\192\235\139\243G\249\148\215\023\231\143\242Q\175/\206\031\229\243^_\156?\202\135\190\1908\127\148O~}q\254(\031\255\250\226\252Q>\003\246\139\249\227\024\014\235\183\211o\028\255\250\152m\160|f\235\167l\003\229\227\154W\217\006\202\167#o\179\r\148\015#\222e\027(\159C|\159m\160\188\237\247>\219@y\199\239\135l\003\229\205\190\207\019\169\188\207\247y\"\1497\231>O\164\242\190|Xe\027(o\201\135&\219@y7>\228\169\\\222\136\015:\219@y\015>\152l\003\229\237\247\144\023Sy\231=\200b\170\221t\015m\006^\222o\015]\006^\222j\015}\006^\222e\015C\006^\222\028\015c\006^\222\211\0141\003/og\135)\003/\239d\195*\003/obC\147\129\151\247\175Ae\224\229\173k\208\025xy\215\026l\006^\222l\134\156d\202\251\204\144\147Ly\139\025r\146)\239.CN2\229\141e\240\025xyO\025r\138+o'C\200\192\203;\201\144\019ly\019\025r\130-\239\031CN\176\229\173\227(\214|\253\238\254ql\202\173\148_\031\140\170\220Jy+:\234r+\229\253\232h\202\173\148_\031\140\182\220J\249\245\193\232\202\173\1487\200c[n\165\252\250`\236\202\173\148_\031\140}\185\149\242\142}\244\229V\202\219\246q(\183R~}0\134r+\229\215\007\227Xn\165|\142\024c\185\149\242ab\156\202\173\148O\020\177b~)\031+b\197\252R~}\016+\230\151\242\t%V\204/\229cJ\172\152_\202g\149X1\191\148\015,\177b~)\159Zb\197\252R>\186\196\138\249\165|~\137\021\243K\249\016\0193\243K\237I&\014\1656\202\199\153\024Jm\148\2074q,\181Q>\216\196Xj\163\252\250 N\1656\202'\164iUj\163\252\250`jJm\148\143Z\147*\181Q>oM\186\212F\249\2085\153R\027\229\147\215dKm\148\143_\147+\181Q>\131Mm\169\141\242Al\234Jm\148_\031L}\169\141\242\137n*\206\031\229c\221T\156?\202g\187\1698\127\148\015xSq\254(\159\242\166\226\252Q>\234M\197\249\163x\222\179\171\226\252Q<\244\217Uq\254(\158\252\236\1708\127\020\143\127vU\156?\138g@\187\244\167O\007\255z:\031\234\207\127viQ_\182P<\251\217\165\205|\217B\241\196f\151N\243e\011\197\211\154]\154\205\151-\020Ojv\2337_\182P<\165\217\165\233{\217B\241Td\151\190\239e\011\197\019\145]Z\191\151-\020OCv\233\254^\182P<\t\217\165\001|\217B\241\020d\151\030\240e\011\197\019\144]\218\192\151-\020O?\182)(\171x\242\177K7\247\178\133\226y\1976\005e\021\207*\182)(\171xN\177MAY\1973\138m\n\202*\158O\236\210\222\189l\161x6\177K\143\247\178\133\226\185\1966\160\205\202\211\132m\166\028\190x\146\176j\149\195\023O\017V59|\241\004a\149\202\225\139\167\007\171t\014_<9Xer\248\226\169\193*\155\195\023O\012V\185\028\190xZ\176\170\205\225\139'\005\171\186\028\190xJ\176\170\207\225\139'\004\171|\014_<\029X5\228\240\197\147\129U!\135/\158\n\172\026s\248\226\137\192\170\172\254\139\167\001\171\178\250/\158\004\172\206\234\191x\n\176:\171\255\226\t\192\234\172\254\139\187\127\171\179\250/\239\252uV\255\229]\191\206\234\191\188\227\215Y\253\151w\251:\171\255\242N\127\233\244\190|{t\019\255\188\252:Lx\253\141\253\254\210\240-\183S\222\245/m\219r;\229\189\255\210\189-\183S>\001,M\220r;\229s\192\210\203-\183S>\r,\029\217r;\197\247-vi\204\150\219)\159-\150\254l\185\157\242\tci\211\150\219)\1593\150nm\185\157\242ic\233\185\150\219)\159\024\150\190e\185\157\242\158\221T\233\162\188s7U\186(\239\223M\149.\202\187xS\165\139\242^~in\150\219)\239\232m\149\190\202\251z\155\213E\237\238\222\234r+\229=\1905\229V\202;}k\203\173\148\247\251\214\149[)\239\250\151\142h\169\149\242\222\223v\229V\202'\000\219\151[)\159\003\172/\183R>\r\216\161\220J\249L`C\185\149\242\201\192\142\229V\202\231\003\027\203\173\148O\tv*\183R>+\184U\185\149\242\137\1935\229V\222\138\231\006W1\191\148O\015\174b~)\159!\\\197\252R>I\184\138\249\165|\158p\021\243K\249T\225*\230\151\242\217\194U\204/\229\019\134\171\152_\202\231\012W1\191\148O\027\174b~)\1599D#\246\239\191b\016\157\216\191\255\158A\180b/\155)\022\153Y\209\139\253\251\239,D3\246\239\191\184\016\221\216\191\255\246B\180c\255\254+\012\209\143\189l\166XifEC\246\178\153\242\209Gtd\255\254[\021\209\146\253\251\175VDO\246\239\191_\017M\217\191\255\146Ete\255\254\155\022\209\150\253\251\175[D_\246\239\191sik\230\155\242\139\151\182f\190)\214\156\217\182f\190)\031\b\219\154\249\166|\030\236j\230\155\242q\176\171\153o\202\167\193\174f\190)\031\006\187\154\249\166|\022\236j\230\155\242Q\176\171\153o\138\181g\182\203\2057\181\007\202\174-6R>Ov]\177\145\242q\178\235\139\141\148O\147\157/6R>LvC\177\145\242Y\178\011\197F\202G\201n,6R>Iv\177\216H\249 \217M\197F\202\231\200~Ul\164|\140\236\155b#\229Sd\175\138\141\148\015\145\189.6R>C\246\166\216H\249\b\217\219b#\229\019d_\158O\202\007\200\190<\159\148\207\143\255ok\127\183$9\014\\\t\194\247\253\020\241\000[\182\252\007a\148\141\025H\130\153\236\140\bF\199Oee\221\201f4\187\178oF\154O\210\172\237\227/@F\004I\004\142;\152-\149\164\170\206\244\227$\001?\014\184\003\014H\222\159\240\225\163\228\253\t\031=J\222\159\240\193\163\228\253\t\031;J\222\159\240\161\163\228\253\t\0319J\222\159\240\129\163\228\253\t\0317*\183\148P\029/?.\250\220w\027\162F\021\179J\248\152\241\1656\253U\t\0311\170\148U\194\199\139*c\149\240\209\226K\165\252\171\018>V|\169\150\127U\194G\138J\176J\2488Q\149\172\018>J|\169\221\127U\194\199\136/\245\251\175J\248\b\241\165\134\255U\t\031\031\190\212\241\191*\225\163C\213\178J\248\216\240\229@\128W%|d\248r(\192\171\018>.\172y\127\194G\1335\239O\248\152\176\230\253\t\031\017\214\188?\225\227\193\154\247'|4X\243\254\132\143\005k\222\159\240\145`\205\251\019>\014\172y\127\194G\1295\239O\248\024\176\198\254$4\002\172kF\005\031\255\213\r\163\130\143\254\234\150Q\193\199~\181fT\240\145_\2211*\248\184\175\137\024\021|\212\215\196\140\n>\230k\018F\005\031\2415)\163\130\143\247\154\140Q\193G{M\206\168\224c\189\166`T\240\145^#\024\021|\156\215\148\140\n>\202k$\163\130\143\241\026\206_\240\017^\195\249\011>\190k8\127\193Gw\r\231/\248\216\174\225\252\005\031\2175\156\191\224\227\186\150\243\023|T\215r\254\130\143\233Z\206_\240\017]\203\249\011>\158k\177\191\024\227\195\240\160\174\205\1954\241\145][\132i\226\195\187V\132i\226c\188\182\012\211\196\007z\173\012\211\196G{\173\n\211\196\135|m\029\166\137\143\251\218&L\019\031\252\181m\152&>\002lu\152&>\012l\1870M|,\168\1630M|@\168\2270M|T\168\1470M|h\168\2110M||\168\003\253\019\031$\234@\255\196G\138:\208?\241\225\162\014\244O|\204\168\003\253\019\0318\234@\255\196G\143:\208?\241!\164\014\244O|\028\169\003\253\019\031L\234@\255\196G\148\154\241O\161a\165\238B\244\240\177e\023\133\232\225\003\204.\014\209\195G\153]\018\162\135\0155\1874D\015\031ovY\136\030>\232\236\242\016=|\228\217\021!z\248\240\179\019!z\248\024\180+C\244\240\129h'C\244\240\209h\167B\244\240!iW\135\232\225\227\210\174\t\209\195\007\167]\027\162\135\143P\187 \255\195\135\169]\144\255ac\213\"\n\242?l\192ZDA\254\135\141Z\139(\200\255\176\161k\017\005\249\0316~-\162 \255\195\006\177E\020\228\127\216H\182\136\130\252\015\027\206\022Q\144\255ac\218\"\194\254\199\142\200[\174`*\"\025\170\139\141k\139H\133\234b#\219\"\170Cu\177\177m\0175\161\186\216\232\182\136\218P]l|[D:T\023\027\225\022Q\023\170\139\141q\1398\n\213\197F\185E\028\135\234b\227\220\"NBu\177\145n\017\167\161\186\216X\183\136\179P]l\180[\196y\168.6\222-\226\"T\023\027\241\022\177\b\213\197\198\188E\028\236\191\216\168\183\136\131\253\023\027\247\022q\176\255b#\223\"\014\246_l\236[\196\193\254\139\141~\1398\216\127\177\241o\017\007\251/6\002.\226`\255\197\198\192E\018\236\191\216(\184H\130\253\023\027\007\023\t\235\191\002#\225\"I\1954\177\177p\145da\154\216h\184H\2420Ml<\\$E\152&6\".\018\017\166\137\141\137\139\164\012\211\196F\197E\"\1954\177qq\145\1680Mld\\$u\152&66.\146&L\019\027\029\023I\027\166\137\141\143\139D\135ib#\228\"\233\1944\1771r\145Fa\154\216(\185H\2270Ml\156\\\164\129\254\137\141\148\1394\208?\241\177r\026\232\159\248h9\r\244O|\188\156\006\250'>bN\003\253\019\0313\167\129\254\137\143\154\211@\255\196\199\205i\160\127\226#\2314\208?\241\177s\202\228\1666\007\208i\187I!\031E\167z\147B>\148N\187M\n\249x:\1396)\228\131\234,\222\164\144\143\172\179d\147B>\188\206\210M\n\249\024;\2036)\228\003\237,\223\164\144\143\182\179b\147B>\228\206\196&\133|\220\157\149\155\020\242\193w&7)\228#\240LmR\200\135\225Y\189I!\031\139g\219\252!\031\144g\219\252!\031\149g\219\252!\031\154g\219\252!\031\159\231\219\252!\031\164\231\219\252!\031\169\231\219\252!\031\174\231\219\252!\031\179\231\219\252!\031\184\231\219\252!\031\189\231a\25404\132\207\197\006u|\028\159\151\027\212\241\193|.7\168\227#\250\\mP\199\135\245y\189A\029\031\219\231\205\006u|\128\159\183\027\212\241Q~\1747\168\227C\253\188\219\160\142\143\247\139h\131:>\232/\226\r\234\248\200\191H6\168\227\195\255\"\221\160\142\207\001\020\217\006u|\"\160\2007\168\227\179\001\197\022\127\199\167\004\138-\254\142\207\011\020[\252\029\159\028(\182\248;>CPl\241w|\154\160\216\226\239\248\\A\177\197\223\241\t\131b\139\191\227\179\006\197\022\127\199\167\014\138-\254\142\207\031\184g'\029\134\227p9\169FoH\025\184\007'\189\234\224\179\004\238\169I\175:\248\196\128{d\210\171\014>\023\224\158\151\244\170\131\015\255\221\195\146^u\240\017\191{R\210\171\014>\200w\143Iz\213\193\199\245\238\025I\175:\248P\222= \233U\007\031\189\187\167#\189\234\224\003v\247h\164W\029|\140\238\158\139\244\170\131\015\203\221C\145^u\240\145\184{\"\210\171\014>\248v\143Cz\213\193\199\219%\235?\248\016\187d\253\007\031U\151\172\255\224\003\233\146\245\031|\236\\\178\254\131\015\151K\214\127\240\017r\201\250\015>(.Y\255\193\199\193%\235?\248\208\183d\253\007\031\237\150\208\127\132\006\184eMk\224c\218\178\1615\240al\217\210\026\248\200\181\212\180\006>X-;Z\003\031\159\202\136\214\192\135\1642\1665\240Q\168Lh\r|\224)SZ\003\031k\202\140\214\192\135\1512\1675\240\017\165,h\r|\016)\005\173\129\143\027eIk\224CE)i\r|t(\025\255\192\007\132\146\241\015|\012(\025\255\192\135}\146\241\015|\164'\025\255\192\007w\146\241\015|<\167\024\255\192\135p\138\241\015|\212\166\024\255\192\007j\138\241\015|l\230\158S\180NR\014\215\189\190\\^\029U\156:\134\233\158T\228U\243\226\173\146\212mS\223\137c\207 q\127z\127\t\020S\233\190\137$T\212\250\234\209\224PD)B\195\155:\028<*\028\142\168\154P\209\234\189\239-\028\146\168\134P\161O\151~?\028_\1498<Q-\161\228\183\1831\\\158h\2345|\n\220.\237\b\005\230\231>\021\014O\234\136P\209\015>\r\014O\234\152\208\240\161N'\143\n\135(uB\168\216\171C\235Q\225\140\164uJ\1688\220^\241\2068Zg\004\254\232\193;\163h\157\019\248_\253+\222\025C\235\130\192\015\135\1909\251L\210\025FkA(9\189\190\132r\006\209\154r\017\231\247\225U\129\227 j\201\025\228\238\242u0?}\209\2129\020\173)Gq\233\223<\142B9\142\162\166\028\197U\189\246\169r\223\129r\0197\224&\148\227&j\202M\156\222=\157\226x\137\154\242\018\141O\129\227%j\202K\152\175xU\224\248\136&\"mS\191y\250\194q\018\141\207I\028U\189W\213\229\127.\161I\0189\175\223x\239\007\158\130\190i\212Z\015|i\237\024e\147B\005\211\152\229\226\1571\171\201 \254>b\185\n\028Clr\168\224>^\185\n\028Cl\n\168\2249Z\185*\0283l\004T\241\219\219\b\142\0216%~\005\031\220\237D\t\225\247q\202U\224\218\160\130\n\166Q\202\197\187\006XC\252}\140r\0218cT\211@\005\247\017\202U\224\140PM\011\021\028n\175hg|j4D\031=hgtj:\136\254\213\191\162\157\177\169\141 \25092\185*\156\145\169\141\161\138\211\235\0114\206\184\212b\0230\142J.\220q\000-v\000]\127\156\199\019W\141\227\007Z\236\007\128\002\199\015\180\216\015\140\195\145\011w\188@\139\189\192\rx\129\198\241\002-\246\002\227P\228\194\029'\208b'\208\248\224\142\019h\177\019\024\135!\023\238\184\128V\017f8\014B\174\002\199\007\180>\031pR\231ko#\135\190\235\244Y\031\237\127Lc\146i\207yP\026m\225kV\229\243\006w_\252\156\2268\175\211\185\157\225s\b\235I\146\163\161u\r\219\231\020Fw\006\223\193e\150\2071\024S\128o\224|\131\246\185\006\195I\248|\231\011\180\207/\156\240\227\029\131tO\208q6Q\133E\181\238\2259\142\146\160\184Vg\164\142\176\200V\231\164\146\176\216\214=,\199Q\018\026\221\186'\229\184\219\211B\226[\247\140\028\247U\002\"\\\247p\028w/dP\140\235\158\139\227(\t\138r\221\019q\028\029aq\174{\024\142\163$,\210u\207\193q\148\004\196\186\238\2497\142\134\128h\215=\249\198\221^\201\199\187\238\1537\142\134\208\136\215=\242\198Q\019\016\243v\180\011\t\137z\187\1487\210\208\184\183\163\029IX\228\219\209\142$$\246\237h7\018\026\253v\180\027\t\137\127;\218\139\132D\192\029\237EBb\224N1\246\026\018\005w~'\018\022\007w\r\145\006\014\139\132\187\150P\017\020\011w\154\208\016\022\rw\029\149\206\014\137\135E\020\017*\002#b\017\197\132\146\144\152XD\t\245\026|T,\162\148P\016\020\023\139\136Zc\b\137\140ED-/\004\197\198\"*\b\021A\209\177\136\004\161\130\143\143ET\018x>B\022\145$\240|\140,\"E\224\003\163d\017\213\132\018>N\022\017\229\"\002\"e\017Q\014bC\172,\"\202O\004E\203\"\162\252D@\188,b\202K\004F\204\"\166\188D@\204,b\202I\004D\205\"\166\156D@\220,\226\1404\205\128\200Y\196~\031\241\173\216Y\196~o\177-z\022\177\223al\137\159E\236w\026[\"h\017\251\029Gx\012-b\191\235\b\143\162E\236\247\027\193q\180\136}\233\140\239\004\211\"nyM!\017\181\1365\175((\172\022q\199k\n\138\173E\018\241\154\002\003l\145\196\188\174\144([$I\192K\241\161\182HR^OP\188-\146\140\215\020\018t\139$\231\021\005E\222\")xMA\225\183H\004\175\137\143\193ER\242j\248@\\$\146W\195G\227\"Q\188\154\192\144\\$5\175\139\143\203E\018\224\146\002\130s\145\180\129f\029\024\161\139$\1921\005\133\233\"\tpL\001\177\186H\003\220R`\192.\210\000\183\020\016\181\1394\192+\005\132\238\"\r\240J\001\241\187H\179\016\011\015\b\226EJ8\165\160H^\164\1323\218\016\206\139TpzBbz\145\150\156\154\160\192^\164\146\211\019\022\221\167\138\211\019\026\226\1675\167)(\206O\027\246\133\002\130\253\180\229\180\132E\252\169\230\244\004\133\253i\199\169\t\139\253\179\136\211\019\150\000\200bNO@\022 K8%\001\169\128,\229\148\004\228\003\178\140S\018\154\020\200rNS@f c]NHz c\029\206\150\028A\198\250\157\176DA\198\250\157\144lA\198z\157\208\148A\198z\157\144\188A\198:\157\144\228A\198:\157\144\012B\166yc\014I#d\132\207\249^.!'\188\207\198\132BN8\160MY\133\156pB\155R\0119\225\1366\228\023r\194\021mH2\228\132\031\n\2074\228\129w\185\132e\027\242\192\251\\\1302\014y\224\149.aY\135<\240Z\151\176\204C\030x\181Kh\246!\015\188\224%(\003\145\007\222\241\018\146\133\200\003oy\t\203D\228\1297Q\005e#\242\192\203\168\1942\018E\224\133TaY\137\"\240R\170\128\204D\017x+U@v\162\b\188\150* CQ\004\222K\021\154\165(\002o\167\n\200T\020\129.-$[Q\136\r\230\031\154\177(\002\029[X\214\162\btl!\153\139\"\208\173\133f/\138@\183\022\146\193(\002\189ZH\022\163\b\244j!\153\140B\1352!$\155\193\029G\018\150\209\016A7\200\132e5D\208-2A\153\r\017t\145LXvC\004]&\019\150\225\016A\023\202\132f9D\208\1812A\153\014\017t\179LH\182C\004\221-\019\150\241\016A\247[\005e=D\208\021Wa\153\015\017t\205UX\246C\004]u\021\144\001\017Aw]\005dAD\208eW\001\153\016\017t\219Uh6D\004\221y\021\144\017)\131\\VHV\164\012rX[2#e\144\223\n\203\142\148A~+$CR\006y\173\208,I\025\228\181B2%e\144\211\n\201\150\148AN+$cR\150aF\031\1465)\025\159\245\189\204I\201x\175\141\217\147\146q`\1552(%\227\1966eQJ\198\145m\200\164\148\140+\219\144M)\025?\022\158Q\145\219N\251\rK\172\200m'\254\006\229W\228\198C\208\131\210,r\219\193\191a\217\022\185\237\240\223\208\164\139\220x\004pH\238En;\021=$\005#\183\157\139\030\150\137\145\219\206F\015J\200\200m\199\163\135\229e\228\182#\210\195\2103r\2191\233\001Y\026\185\237\156\244\128d\141\220vPz@\206Fn;)=4u#\183\157\151\030\144\193Q\219\\hH\"G\197\219I\020\154\207Q\219\028iXZGms\164!\217\029\181\205\141\134&y\21267\026\146\235Q\219\188hH\202Gm\243\162!\153\031Un\228SH\002H\1339\209\176<\144\218r\206pX:Hm9k8(+\1646\029\175\030\148\028R[\142\028\014\203\017\169-\199\014\135\166\138\212\166\195\135C2F\245\150\243\214C\018G\245\150\019\215\195\242G\245\150S\215\131\210H\245\150\131\215\195\178I\245\150\195\215\195\146J\245\150\003\216\003rK\245\150\019\216\003RL\245\150#\216\0032M\245\1503\216C\019N\245\150\147\216\003\242N\245\022\023\025\146~\1707]>\177!\011Uo\241\147a\201\168z\139\159\012\201I\213[\188dhj\170\222\226%C2T\205\022'\025\146\168j\1828\201\144|U\147l\162NH\218\170\t\243\145\223\203^5a\222rc\018\171\ts\152\155rYM\152\211\220\148\210j\194\028\231\134\204V\019\230:7$\184\1540\191\025\158\231j\168\019\225\218\222\159.j\157!\1408\006\234\169\194}\015g\212\242\158\196d\192\253\213\204\152\206Cu\252o\006\175\159\182\027EiTM\127\022::\168c8j\143\138\184\154\254\204*\188\1352M*\174\159\190\183H\170\233\207BE\140U\188\159\181\239=\210j\250\179P\146@%\221p;{td\213\244g\161#\197:\250\159\190\247\200\171\233\207BG\006u\\\250_\030\021E5\253Y\168\200\177\n\253\211\128_\149\136j\250\179PR@%\186\127{\191z\148\148\213\244g\161D@%\199\222k \178\154\254,t8\148n\135[\189\215?.\215\243\173\249\216j\176\238\209M>e\193\150\171x]\193&\\\007\232\n\183\229\134\215\022n\212m\128\178`\235\214\188\178`3\239\002t\005\219\187{\002\148O[\184\225\187\231A\249\180\0053@\227I\205F\243\215)\163)\212\246u\198(\n5|\157s\138\130\173^\023\140\170`\147\215\130\211\020j\239\186d4\133\026\187\150\156\162pKW\140\170\rf^3\170\194m\156\t\210\182\026z\027\162.\216\218u\136\182`\147\239\130\180\005\219}\023\133\232\0116\254.\014R\023\202\128.\tQ\023J\131.\r\210\022\204\133.\011\209\023N\136.\015\209\023\204\138\014\222\138\177\145\015\157\160\021\1332\161+i=\161\028\232$\163'\220\250\021\173)\220\238kFQ\176\1977\180\162`[o\025=\225V\174iM\027\236\187\1635\133Zv\025E\149I\181\029?\207\253\181?\190\237\222\213\177\253\209\245\151\235\174?\182\250Wu\249\2151x\181\255\179\192\196\175\152\166?7{M\162\018\015\234v\"!\233+d\248i\151\243\tL\246\138y7\255\162\223-\127\005\169\227\027\243A\005\213tf\237\232x\005@A\183\031\005-\1933\175\239\183C\189\187\025\248\153W\"\201\023?\171\254\162\219\221\199\209L\145\247\026\168P\164\n\211\175'3\244\251\1615\t\029\251\nA\155\000\232n?|\002x\203\180\251\168\000`5\249\232C\223\182\176\173:\230\177\0208\142\002\158K\244u\028\135\224\215]~\001\170\146\016UT\255\197)\169\1938\131\016%Y\136\017\220\021\221N@I\030\242-\205p\252s0\158\020\189I\177I\t\203\203Xl\211\199w~\185M!E\219Xn\211Ev\161\n\210u\030.\023\168\162\014\"\021\163\004\249\147E\203\238\134\159\015\151\n\148\180\23600\233 i\030\226^&'\015\020\1329\025JE\018\228jL\234D\217i\202}\196\193\198\151\196\161\158\235\174\234\161\025\168K\130[\136z\1694\220\135\237.\167\179V\237\227\237\250\022\244]\146m\242j\188\190\252;\250\024_\149\020\155\188&\255\146A\190\202(Z5b7\156?\213\025\189b\025\222\195\148\167J\228\006=#E\144\"\021\174\232}\024>\160\158z\131\030\194m&\r9\249\171\245\245S\235\163\159\174@c\187\205\169\179V\161\191\171\143\181\223\238\219\154\1777H#\218\255/\187\246\201>\160\138\246v+M\204\220$M\1903\210\178}\147\166\027\006]^[\246\157\254 \249\159\230\223\153\173\004i.B\250\249\174\143\233g\017\208\207wM\\?\151Ao5y(\238\181\228v]\148\171IU\192g\142\017r\187\027nW\246S\235pu\253\145\213\214\132\244\193\253[9]\237\134\193\"hr\155\134O\229\022-\btu[u\249\245dA\142n\209\159\180\181e\241\183\212\145s\241,\217\160\147y\189t\179/\166:4\243\185\186\189\154R\154v\007\220\155>\131\1449\203\003\160\196\000\149\021!x\242\229E\136\006f\240\205\202MJ\204\156o\223\163/\2428\170f\175>\183\189\015\242N\224}\136\006\174Q\182p\211\2514\168}L\174\250\169d\154\t\003\r-\208\240\174\245~\131\026\029\254\"\211\023\018M\211m|%Na\030mx9BM\188\245\189\b]\201\134W\n\152h\228\169?\199\029\220\129y\022\172`7\156Ln\223\175%\135V\189MO\001\242\239\225\223#640\229\199\242r\179\"v\014\155\203\237:\143\003\149B\201\149_#\144\174\193\243\031\145\220I\237\015\187N5\230\183`\128\201\027\130\012\000\130\\\r\219\\\154\"\030\139\238\200\199b\142\022\017\t$\249X _1\142P\171\249\000~\243\"!\1494\230\205\207\b\154\006@\249\023\200\182i\161\0263'U\153\255\187\162\020eQ\248Gn -\1928\207~l\t\1284\243\nI>\143\182\018\015k\237\244\208\196q\231}\223\220\208\155\214~\024\144n\252\158\029{\223\162\245\"\128\176\198\234\2496\239\252`\014'\"\226\161t\127\137\216\015eP\t\251\149dO\139\148\250P\026\234\029\153'\251 :Q\228\024\006\016\005\202\228\003y\225\031\164\129t\t\134t\182\175%\0002=\166\200\231\209M\014'\231D{7\020&\232\169-\208\000\1965z\224X\006\000@]\192[\226\190(#\004g\1451\249`\186/\203\004\129\025\\\202\191\238\238:\220\026\251Cj\169\173\204hE\143y\211cU\219\252\n(B\251=\128x\208B/\2418n\195\007\175\161D_\030\170@\130/\014V\160\208\027P\147\134\178\014m9b\210R6\193J\152@\189l\131\155\145U\133\210|Ss\236\218\225\019\184\168\178\227\145\230\021N'v\249FF\225\154\204\160\243\019}\139\140\003\244\012\215\2471\021B\173\152\201\132V\132f/2%W\182\166mM\156\142\012\146\140C\230`\140\226p\005\226\020\007\020t3\133\236\192\146%\173\003\211IJ\0269zb}\161<\186T\140\n\002Z\211~\132\1966\244c\023\241\028P\2082\015\2315h\166\207\1511\229\242\2230\199/\187\239i\244kSQ@\019\001h\204\017\136\002'!-\011\176iH\011\000l\208:$5D\169<lp&u\020A\227\n\169B \021xLVe\208\160N>6l[\151]\185\161\245\168\176V\012\208\132\166\012\227\168\140\135U\213P\r8\141a\238\002\016\185'K\181\168ug\133\171\197\169\197*\023\208\168\169OC\163\133\234(T\200XQG\148\006\1703j\236\019xl\002\134U\030\153\146-OB3\234S\169\238\174s\030\201M\n\235\"@G\208f\219ZP\154\b\135X\151\020\144\0249j\t\178`,\144\222+\192w\025\183\149\147\215\208\016\185\153\023\029\187\001x\144\186\005-\224Q\129F\243Z\007\235\232\209kt\193*\198\137\177_K\003rs\129M\218\196\244\136\198+H\232\177)\1685\1554X\tP\128\220\193\157\139x8i\224\026\026\229D\026f\167\017\242\241\r\206\016pHf\023Q\200\248\208H\238\173\217\196R\131r\232\252\190\227\166\166\159>=\154\236ef\0317\137m\153\246cMLs]\199\171\232\b\255\245\170\004:\176\022p>\244=\218\152\182\249\000\r\144\245\190\207@\180o\211\rZ\144\027m\179p%@C\190\161g\137\128\187\005+g>-\204\004\163\021\223PE\208\182-i\218\250\245\225\142\147\223Q\007{P}C\027PU\211\195\025\181\245\160\r\217nH41\147sd\241:\240\241\247\127\182\189z\027\142h\253\167\237\182ic\218UG\219\212a\146\2328T\019WF\165\147PM\181\201iR\138\210m\175D\172\018\233,@\213}Y\234\2543:\245\171\243\205\n\137\015-\002\148\225\165m\029\182'\154Z\244\212e\152\138\159s\172\141\025\163\209^\128o)S\027\223\140\152\147\235\144m\208\212Z\175n\168I=1\199\210-\011$\022U\181\014qa\004\190\011\193\239\213\025\209\167\139\002\020\000h\028\228~\241Zm\199\0042Lz\183KC\224h\b\236\178\0004\128\230\212\154\n\192\020\228:\012\222T\214\t\0188:Iz`\234J^\0033\024u\146W\129\157`\167H4\185g\160\171I\172\1752\011(\n+\241bWk\1876H\015;\005\238t\192\194\220\245s\160\183\193w\029\169e\172\142\229\148HxR\197\234U\236y%\140\1588@\015\187\181_F\t\255M\163\150\144t\159\140\192T\003H\163\217\004$\168tN\184\024\215\248\012#\224\158\007\233\156n1\001\014\183\253\181?A\136\240@\238\166\006\016k\210\191\157\213\229D\191\149\244\000\152\183R\030\b\253Vk6\155\137X\255\161\233\215j|\b\230\189Z\031\134~\1775\027\235\243\237\194tb\231\001\208\175\229\02881A\200\183r\142\1528\223j\242\157\156c$\1728\243F\233\011\128~\1595;.\183sg\015\198\153\142\133\005\252s\206\131x`\232\231\172\025r\249\235\166\245o=Mc\232\022\016^\224\227\224k\002X\018Od\026Q\018\207d\160\202\015\213\230\031\247\227\149\189\1765\139:3\251\255\bi\156\198\003\011h\154\022>\141\249:\r\159\199\000;\031\144i\020\231\140\133G[N`\181\191\234\243Q]\209\168.\157#\021\014f\1449\152\167\221\231\179f:?\174I\226y\180t\014Q\000\n\240dX:\231'\188*`\027 \163\020L\143\231T\228!\031\177hL\178E\138\173\202\168\214\017\148\178\2516\199\233\239K\211_.\003\154\\8G!<\021}\154G\159\246\234\248\152\226\216\025\241U5`\154\224\028\132\240\212\210\237\135\225\188A\141\226^f\"\230|4\b\213D\245Ve\007\221\246\183\003\208\214l\213F\153B\251-eh\146\230\156\133\128\213\025\t[\186\184\007+\186\2109\250\192\163h:\213\150\206\024I\231\176\003\172\134{\1594\014T\196\250\1794\217\174\137\127\189\148S\138wh\2004\227\192f\154vZ\153\231]\004\232\203\003\245\177_U\004*\226\027]l\215\196\191\030\235\176L\224\221R\142!\149A\026(o\144\170 \021\132\011HY\239\212\012\231\163q\152\212\1354\129:\200Oi\003\149P\031\163\003u\156\135\171\233e\176\168(S\214\2534\239\2501g\242\171\200\1620\021T\139dq\152\014\162A2\214\221\212\195/\242;\210\016\005\228Wd!\026\168o`\029\202\239\254\237\183\"\167)Y\017\168\131\252\018\017\168\132\250\024\214k\156\180\250\184\144\223\"\195T\144\159\162\194tP_\178v\028fp\248\169\247\011\005\015\138\189\140\254@]\179Y\2214R\002u\237fu\2360\226\0285\128u.f\155\228'w\219\245Q\223\236\1566\016\164\143\253h\231\236\129\023\165\151w\245\129\193\t\rV\231\195\238r\234\207\138\142t\1573\006(5d\251d\193j\166\249\000P\003\252\209#\217\191S\159\234\139\"p^\132(\160\232\155\139\016\r\004y\2432X\001\154\236\231\146Qq\029\236\234\001\233\202r\021\168\131l\140:P\t\213\030\205\022\029\176IZF\203c\017\130\181\016\189E\017\2178\221\022MD\011\021\209fE\168\153\1388PU\128\005\021\201F]Tc\021\233FeT{e\223\209\005\155,g\243\026\0272\018E\177Y\027\217lb\179:\170\225\202\239i\131M'C\245q\017_\161XMAi\137\162\014\213\195\190Q\019\170\137\029\231\139\246\027\170\248\023\212\172V\"5Qt,z[nBD\161\n\185\015\019q\168\166es1o\151|G'\251\166)\171\213\230\b\0008\227\251\143M\015\136<T\t\229eD\017\170\133p.\130wUcL\r\208\188kb\194i!\1314\144\237\160\130TP\141\192\251\031>\162\022M\168\018\242c\218P-\212\247\240N\134\r\170E\023\168\131\250\1542\nTB|L\233\141\183\022\026\182F\153e\242\r\133T\024U\166\223P\200\142?e\022\1705,\159\224\156w\017\164\143\252\234b\187>\254\163\005\163\148\140\174K6\1514m\210\252\235\166\206W\218E\151r\155*\146\005j\155.\138\012\2457T\161\137`\217\132){W\251\238Q\244@5Y\187]\029\217lz\187>\170\233\186o\170C\205'\1630\133\227~\180\031\143\030\225\219Q\198\127C/\213\160\146\205}\191\223\014'\242\213\210 \r\228KdA*\136\142\148l\250\219\184\011\2503\138 \r\228g\136 \021\212g\148\225\159A:b\201\186\170O\227E\239F\243\136\199\136\198Q\219\213\145-Uo\215G5[\179A\221#\024\"\190\182\221\174\142\252Z\189]\031\245\181]\168/0\137\019:\200Va\238\170\189\031\207@\180\153\1387i\162\154\20392d\227\148\19894d\227\004\19896\132\152\174 \005\172#\"g+\170\b\028\144\250\235(\208\157\135\227u\247\137\187E\004y\214`ua\254)X]\152\151\nV\167\194\012'\\a\029fK\225\n\155P\243\178\191\014\214\218n3\026{\138\019r\bz\147\189P\154\186M\166Bh\170\163MVBi\1387\026\b\165+\217h\027\148\174\244;fA)\204\130\154\236\153f?\169\235;\229\221\235\252\027\250(\031_\023\223PH\140\137u@\202j\205\001\221\239\237\223\212G\151\223\212I\189'\159\218Z\019l\249\154\228\200U\171\239i\158\246B\147\154\235\191\243\206\212\"q\221\252\157w&5\243)\179\181\251Y\18935\191\168\245\2474\243;\220\235\238\239\1883\213\131M\244w\222\153\212\204g\248\215\206\153\167]\147|O%\193\186\006\248\215\215\213-G)P\151\177\234\\\223O\170\203Yu^\247O\234,6\250\174\241\023d\183\136oi\164z\165\220\198\254\197+\2106)\191\1637\192\214\213w\244.\195M\210e5\245\223P\207{\196\166\217\230\003\150\173My\173\166\253\142^\222\0276\250\251\239K\246b\247\253\247\165\244\182\2096\183\197\018\174\141\191\163\144\224[\155l\245\130\227o\128\178t\171\015\164\148e\223\242\128\148\198<\208[Q\029\016\234C\169\137n\027\2346\169\142+\183\232@1A+\003\1814\195\161\134\197\244\178\r\244\130T\195\214a\020\164T4a\228\184\028\213\007j\2136P\005\241\022:L\005\213\183] )\253p\231\156\157\173\171\148:\222B<\160\131\159\175\221S^&\138;\155\182D\165\232\154]H\176{O\151k%t\211d\027\212M\020\166\245\229\155_\143l\250b\251\235\145\250xG\179P\248p\161\159c+\242mY~[yH\203\202ok\231\231\017Z\253\205v!\027\189\254\187\237Bjo\254f\187\144\202\249E\142q\207\212]\251\148\131$\027Z\127C!\249\134\252Lm\165q\221w\196\155v\209\223PL\189q\199.\130<\234jG\197\023\250-\147\141\202\2007\227\247\1839\218\194[3\251[\170\201\183^\187\220\246\235\168\014}c\140\254<|\190\219\203\247\136\177\2179\178\232\021K\012\202\206\169E\015l\167\208\220\2029\164\232\001\184\236\135O\000\144^\192U\031/\232\157\148\023q\214{\245\011\205\213\156\227\135\158\175\213\219\019\012L\199\0127\176\167\2129n\200\007\228'\006\206YC\015%\250\167>\127M\183\134\236\174\253\001}\174\246\130\223\206\170\189\161\003\000\220\227\132\208\237\147\202=2\200\154\195\185?T\135\1271\194\199\203\193\021\143_\197}\011{\143\165V\164&\tRs\237\247XEJ\168XN\184\184W\201\130^e\140\007\160\142<\236]h%\005V\2428\241\014A\215$\029\207ei\251\179n\236\012vw\026.\253\248\143\227p\209\207\003\015m\219Z{E*\203p\149\246v\185\243tN4\210&\191\163\141}\199\181\031\208_\1866\030\2372o\238\190\157 \180f\160G}3\255\220C|\195\224\201\214p\188\193Y\171\195\215\172\227\254hZ\133&U\140\173\199}BG\170\176\023\r\210\n\156c\144\208g\224NpNE2\150\169G\171\231\158\155\248a\143\019:\016,\245\195\204\015\142\031\246\186&\132\203\220\174\190L\2318\"\249\252U\254~\136\r~F\241\138i\246\195\133@\b\023\177\171M\014\252\2271?A\176\018\192\158\007\249 \160|}C\187\021\144n\n\245\n\250\180G\187\144\160\026<\137i\144\198\255\172\227r&\006\193\237K\179|\154V\129\226\218\021\223\171\139\189\015\138\176\245\014@(\150;G!\205\160n\127\187\154)\007\225\027\157s\144\012\244M\253\214\027\134h\231\028$\172\2241mEz\210P=\203Y\020R\150y\149m\024\238\147<T\003\247]E\176\162\144\015\019L+\221\239\166C\240\146{\025\006/\185\199\219\249\007\245\254k\1667\239Z\127\\v\167[\215\017\015\173}\024\198\249;\199\025\221A\151[\243A<\200\169\237\183\145\197\003\249nz\b\2264\198\221O(E\200\014#m \004`\206\249CZ\157/Pt\205\239q\230\1964\157s\148\208\ba\198L\231\160\160\017r\031/\241\155e\030L\255\246FA\214\164T\253\217\140J\195\167\253\183=4\024\161\138\023\148\181\003\251\239\030\186T\231h\159\199\163\238\t\174G\214\215\031\011*\231\b\159\199\019\003\193k\142\213f\186t}7oj\1986\r\016\202\135\208\191\b\132\155\132\187\025\1924n\178\214\209`\232\227`_\004m1\14830\237\129^\014=\166\214\203Y;O\004;\147{9cg\134R\019\146\151cu,\204\228\236\240\184\253r\138\206\019\193\191c\n\161\228;f\030\216x_1\0299\190\156\149\243\1961}\254r@\206\019\200~\161@\200\241Jn\132*)\020\255PI\194\191\020\209\153\nAm\252\170\168\217vV\179P\254\205\027^\007\249\250>r~\244\023\232\1403\r\000\172It\b\200}c\238#\230\148\000D\136\024!\184\183\204\019\136\164g\017\206\1612\251\254d&8g}\177^\238:\188i\155\197\131\216\204\197\218i\128\201\250\r\246\012\236\219\233D@\243\023\232(?AG-\016\234\227\232T\243\012{?\247\177\2431\2283\193e^RXz:\237\156\014s\029\142o7;\133\238\167\001\221\1682Y#\252\165\202\135\222\223\193\182\171 \178\246!M(\252<o\131D7\b\189\184\171}<\204tl\012\168\166\245\169Y\"\159\201m\164A\2514\216\176\215d\167\223\148Qu\157\230\159PA\231S\208\152\152\249\188\238\006\164\1929\239e\173 \164\017\156S^\174Z\019\178\201\171,\027\228;\167\181L\160\225x\127U\136\202(\020\255\208\220\015\167\172\2029ne\133\225\031(<\224\186\191j\250\145l5\203\159\n\134-\001'\166P\2325w\143\2464\005$\234\222!\209C\143\224\156t\162\1275\166\t\200vs\206\154\127\031n{{\205\193\187!\243\229\212\031\193\140\2199\176d\005{\228\181A@\224\156V\178,\139Z(\177\173\233\199;\135\147\1726\153\132)\136\253\239~O\187\219i\231\193\188\022\186cA9\231\143\\\135\243e\240%v\204?\244\181y\007JRR\201\189T\014\1588\162\156\019G&\252\242\004\148O\243\254=X\152S\206Q#\211\200Z\015\237\215\186\017l;\218kU\174\144@\206i#\251~\188\024\204\238\030\195\231\134*\231t\145\017\180\215\199\183\235\251\143\024 J\136H\000BBD\n\016\n\"2\128\168!\"\007\136\006\"\n\128h!B\000\132sl}oW\222\129\232\154\138\251\161y\169\134:\169\006\208\2009\197\227\t^\018\146@\199^\180Y\255\131\181\170\2029\162\227\1371\249\238+\160\153s\b\199\019\210\234\019\132d\232\205\1985\026\236\166\157\1634\158\192\145\155\224Y\133\031b\187\217L\029\251\183\254\n\188\168s$\134\225\220AU'\175\164\179\164y\179\1879\174\195\tH;\183Ah\179\230>\236\r\147\253\210N\254\147\144\\s\229\164\206fP29\253\254\226\151w\234\195\187\222n\152\026\218\190\235\245\217p\030t\129S\006\190F\165\016\213\018\168\012\1624\129\202!\170#P\005B)\255.\205\128\022\001\165\212\001\173\002\202\168\003Z\006\148P\007\180\142\202\025$n\161\130A\n\136\020\012\178\132\200\146AJ\136\148\012\210,2#\168\226\1601\132\214\028\020\155Q\195A\177\029\181\028\020\027\146\230\160\216\146:\014\138L\169\139\1407\178\171V\247\252\246^\2195\199]g\006]\235\145\207\234d\162\251\222fO\206\134\188\213\254\127\188z\175.\138}*\206v\227\147\205\155\\\154s\127\186\238\222\0008\185\131\239\176IG\163N\253\213\158\176z;\219\155q\0176%\031\252\001P\025\245\196\253\244\185\181\222_\001<\247=t\175\127\223\027\202L\131\207\131=yo\186)\212\175\163\240\233\184\127\236\023\251\006\130\252l\211u\000W\018O=OO5C\154\025\153\181Y\2478\182a\159\"\189J'm\227-\197\193\154\212\186_fL3^\011\228m\221\127\245)\170}\175\164/\247\014\186\215\233\212&\211\228\127\143&\016>~\153\189\207\021\232i\137\230\1907\016\129\214\235\214\232\143\166{\175\150\011\251\225j\r\213\206jX%\157c\234S\144f\151l8h\028\005\240\018\244d\236u\bwfu\253\229\029\027A\156\248\160\173e\215\202\029\157\148\0173/BhJ\137\151\176\228\026\187/@O\2305\007\027\204\007\190H\206\211.@\139\215e\156\215m\026\250I^\007r\181&\190\181\145\189.\229\233\011\003\020\200\176\254\014q \177\242\233\234'\005\198\244\135\015\029\236\140b\175\015\0256\188L\019\214\198A\186\188\158\164\217\160@\251\020\\h\031\160#37\152\210\027vR\241\182Wo\195\222L0\154\007^\253\190\217YE\146\190\206+\0126&\177\245\237\227\139\000'$\216$\1394\001NI\240\253'\004>#\241\237P\159\007\002\157\147\232/}\185R\173V\144\232\223\239\253O}\165\190\189\164\241\250\176\255S\017pI\194\251\223\239\212\179\021\r>\246\246.;NIM+!\144\r\221m\127\234\243O\n\222\146\240\015\245Au\186&\193\251?om\255'\245\213\029\137?|]\204\127\019\248\152&\234Q]\222\137O\143i\170\014G\194`c\154\169\167\225c\248\147z4\205U\019\207\\(4\205\212\203~\248ItZL3\245\250\243\220\183\020\156\166\234\237\131j5Ab;\243\221\020\154&\185Y\162\166\1924\193.\239W\194?\1964\199\232\206\162\t\214\188\159{\138\159\177f\222\155z\237\142\241\201T\131%\017\007&\222:\161\169\245e\006e\002L\147\227\139zi\134\025\2274\224\235v!4\208\230\253E0#\161\173\187\183\217\t\221\006\189\004m\233u\255\198\224e\208\155\240z\232\161\173\235\t\210\196f\022u\252\234\213\135\r\025N7\213\188\155\021\229\247\195\020gO\238]\249\226X\003\140\025\224\245\130\144\t\131<^\0172\229\158\137\128\025\003|G\192\156{W\004,\024\224/\004\020\220\019?\016\178d\144\r\002J\006\184G@\197\000\161\t\212\012\2407\0026\\\235\192\143lY\171\131o\171\025(\236\145\142\001\182\000\024s\172<~!$G\203\227\025!9Z\254D\192\148mYd\2361\199K\140\228\136\217! GL\216>\0281\255B@\142\151\176/9^\030\225#9b\158\016\144#\230/\248\178,3\22539f\182\200\255\196\154}&\132v\236\136\240\238G&\236\136\137\158\153p\220\132o\155p\220|C@\142\155gd\238\tGM\132\227\136\169\016\144#f\015p\028/o\000\199\209r\0008\142\149\003\002r\164\212\000\199qR# G\201O?.\133\022~\029\142\250G\141g\147iL\"\015\0042!\145\127\018\200\148D\254$\144\025\137\188\016\200\156D\190\017\200\130D\182\004\018\218\185]]\181\155\206w'\179\1986\028\171\253\255\244uj\201\194\175v\1870@K\022\253\2161\003\020(V\129:\246&\232\002\240\154\133\223\215\160\234\179=\014\222\175\164!\149\252\2504\255\011\144p\136\186|\237\247j\188\017a\220\t\166\143\250\236W\145AR\141{\139L\246\211$n\143\255mBF\227\159\0058\166\193\198t\158\216x\252\179\192&4\246\2509?7\025\255,\176)\131\1817\156<\209\233\248g\129\206ht7\220\206Op6\254Y\128s\006l\146\205Op>\254Y\128\011\026|\233\127=\177\197\248g\129\021\012\214,e\031\159h1\254Y\160K\026=\237\169{\160\203\241\207\002-i\244\177_t\180\028\255,\192x64\188\rfU\231`\195\134?\253>?\131\243\161\169|\171\181\209\163g\251\155NdT]\135\235\192\204,\019\025\175\196j$\150\172\196\174H,]\137\181H,[\137} \177|%\246\134\196\138\149\216\001\137\137\149\216\017\137\149k1\248T\185\146\187 1\181\018k\222\145\\\189\146\251Bb\205J\236\019\137\181+\177?\145\152^\137\193w\235Vb`j\154\168\181\197\237\145\216\218\226z \1816\184\169\196\245\011J\175\237\174\191\001\177\204\175\020\137\175\237\015I\173\205O\003)\225}4\146^\027\161\030\128\152\244+E\226k[DRkKT\232\021\027\239\179\161\248\218\"\145m\220\rr\028\248\207\253\229^0\132W\177\146&\170>\213\177y\031\1528&ibW\016\200%\142\028r\137M\234\b6H0s\004\145[lrG\016\249\158\166p\004\145\187h\132#xB\028oJG\018\209\183\145\142 r\164\1669\156g#\193\218\017D\163K\211\184\130\240kZG\178C\130\218\017D~\188\233\\A\244\236\214\181H\228}[\215\"\127#A\215$\145\219o]\147\252\137\004]\147DCp\235\154$p\026\173k\145\nx\203\214\181H4\154\180\174A\162q\189u\r\242\003\246\140k\145P\208\181H\224\212Z\215 \193\240\212\186\230\bg\021\173k\143\168\025]s\220\239\209\199h\215\030QB=\209\174A^Q\231h\215\"\007\027\161z%\211\023\255\012E]\163\196\146\174U\246P\178xyQ \232\218\165F\130\229\235\007\001\201\023O\137\220\180v\r\243\006\159\238Z\230W\255\014$\159\182i\007\208\221u:\129\202?\136\234\214\149=\246\132\180^I\127\012\148l\231\202R\154\187\167\169\242\193w\210\197ka\"\216N\186d-K\004\215I\151:\178T0\157t\217Z\154\n\158\147.w\132\137`9\233\138\1810\017\028'\157pd\169`8\233\202\1814\025\252&\157\\KS\193n\210=\251\251\248v;\142\243\184\234\242_\141\172\190\174\251Zh\251\179\247~8\2173S\031\217\154\247w@\017a|\147W\252\006\196\019\191x\015\196S\2402\232m2\191<H\249\n\227\176\252\242@\188\240\139\015@\188\244\136\191\221\206\234\205\162>\2097H\239C>Q\019)\1918\252\228\026\200\003\241\022\127\195\001\190\147\166@\232\205\186\b\163\254B\143\234b\n\004\031\149\144(\000J1\168\134\239\151Q \248~9F}\192G\021\020\b>J\144(\000\",\251\r\190\159\164@\240\253\020\137\002\160\026\131:\248~\r\005\130\239G\016\228\004\031\165)\016xT\025E\213A\031[\211/\253\135\250\184\2453\244\016E\177\249\233\004;\187\176\152\128%\207\016\227\005\150\016\176t\247q\003\176\020\195\138|\247\241\248\184\023\\\134q\210\226\000,\1990Q\152\137\205\000p\005\198e\165\193\001\152\128\176XH\211(\1681K\1621\179\221'\234:I\192\242g\188\249\002S\004\172\216}\162\174\171\241\199%\006\006\187\174\193\184\184\220}\"XK\192L\155\192\174\211D\215\153FA\176\014?N\154\199\221@\031\196\152uf\193\199|\029\194\017\180+\226\221\231O\132#x\151I\131\003\157\030c\226\153\245H\131\003\221\016\019\196\139\196\238\208\031\001\142`^T\154\180\000\194\017\204\139\228\238pC8L\189(78\141p\004\245L\191\031\006\132\195\220\139s\131\187\193\015\196\236\139K\251\129\240M1\255\1628\218\213\200`\026\002\022?\243\164/\176\150\128%\187\0268\137X\019\205b^\0189\137\184#\186A\024\156\031\150\016\2363\163P\141\156D\018\019l(\r\014\192\b\242\197\233\014\244@B\140y\198\147\129\014H\b\226\197\249\014\180\127\130i\023\023\233\0145\127R\016\237\024\237\016\138\024\238\204`\014\027\191$\\\166\216!\020A\184T\236\144\159M\b\186\165\241\014\185\175\132\024\236\210\028\195\136\177\206LS\144OH\136\177N\148;\228\017\018b\168\139\165\t\227\001\140\224Z\018=s\233.,%\230\151I\188\187\000\139L\t\170\021\137\201y\000\227J\019b\252/\012\014\192\168q\206\192\144Q\166\004\221\204\212\237\130`\004\223\164y\\\143\026\147\024\230\146|\183\007]\151\018\163\156\153\131\237\209\211\136A.\017\187=\234:b~Yf&\151\137\250\128\152`\138\212\224\000\140\024\224\204\144\186\135]G\144.7\143C0j\130\025=\142G\000X\138y\133I\185\001\024\193\188X<W\024]XF0\207\204\160[\208}\0251\19743\141\022u_F0\175\140v-\234\135\140\160^\025\027\028\128\017\204K\146\221\021\180eFL0\147\244\185\026\249\002\163\136\151\153$:\128\017\196\147\177=\150\017\224\b\230\229\249\238\138`\196`g\002\194+\236\002\130y\13348\000#\152\151\148\187?Q\023\016S\203D>WP_`\196\2122\141v\127\162.\160\166\150b\247'\236\002\"\1783\147\182?\001,'\166\150\133yK\212\0059\021\216\153\199!\024A:\145O\222\bb\137\t\166\153\227|\129\238\203\t\226\165\201sw\194\011\140 ^\154\238\190@\247\229\212\020S\238\190P\247\229\004\243\1407\250B0j\146i\218\004v\031\193\188\196\226\000\140 ^\154\153%#\000#\136g\166\153\029\234\002\130xf\146\211\161. \136g\166\153\029\236\002b\1803\182\217!\024A<c(\029\234\130\130\024\238J\243\154\bFL4M\b\217\161\228[A0\207\228M;4i/(\214\t\187\224\006p\020\237\202\221\017>\143\226\157\220\029Qf\164 \136g&\029G\020]\020Ttg\158\1352#\005\193<\147s}\007T(\136\201\166!\236;\234=*\157b\158\006\168P\016\196\203\162\221;\162BA0\207\204\247\223\017\140`^\150\216\227\\\000\142\024\243\236k\"\0241\207,S\251u\160\019\0041\232\153\137\128yO\208\158\130\024\245\204\028\252\029\145A\016\2283s\129wD\006A\144\175\020\166\219\017\142 _n:\002\145APq\158\249>D\006A-$X\243\132\031HM8#\179N\255\134\186\144\152q\154\132\180\001\002&\t*\218K,\016\245=AA\147\1692@\196&AdYL\235X$\000R!\223\bD\140\018D\212\151\140\237\138\128\212\244S\142\237\138\026\150\024\007M\244m\027\022 Kj$,\166I!n\164\146\024\016\163\025\141Z\170\164\194\192t\134\0034\017\012\154\192\007Yo\153\017\182\020\239\144\237\150T\218\179\220!\203-\137\161\209\144\012\218mI\r\141\133y\028\242\175%16\022\194\000\145;(\137i\169I\197\028\223\144\227*\137\137in\141\015y\174\146\224\166\176@\252\174\196\024i:\227\132\218\134\024#\165|\238C~\129\017\147S\179\226pB]O\r\145\241\238\132\186^\018\148\204-\014\192(.&\187\019\"\161$V\028\140\165\157\016\140`\159Y\004=\160\197\"I\012\143&Y{@\171E\146\224_bq\160\023$5<\154\213E\184^$\t\006\154\024\129\000\018\195\163\176o\138p\004\001G\028\236Abt\020\153\005\002\028\193\191\2106\205\r\181)16\154\149\229\209o\227\207$\134\199(\127\128\225\183R\211\213\228\137\006`*\\Lv\031\200o(\130\145\210\226\128\205*b\202j:\230\003y\014E\173\192[\0282=E\144\210,\137\127 \223\161\1681\209~ \234\014E\1762\183\015D8bX49\2107\228=\020\181\006o\134E\228=\020\149\1711\1637\242\030\138\152\177\154I\249\027t\002\138\224d$,\016\224\136\168Q\152\217\t$\134\"\134D\017Y \192Q\011\131\241\179\n\227\005F\240\208\228\198\143h}BQ3U3\199E\011\0205\0216\154\b\000\173P\212T\202&68\212\1295\1818h_\020\225\168\237gfR\003\2156jj`\204,\016\224(\n\154\160\n\229\200kjfjq\168E\137q13\r\003\179\2285\193A\147\192<\194|wM\205L\147\029\218\199TSy\155|\135\1821\213\196\168h\166_?Q\179\016c\162Y\145\252\t[\133\152\147\218\183D0j\028\204v?a[\018\147R3\231\254\t`\r\181Ta\250\238\011e_\026*kS\218\202\023\004\164V+L\020\253\133\242/\rA@i\159\136\226\152\134\"\160}\"\138c\026\151\017\139\186\147\167|\188\004\148^\192X|\242\004$K\128\244\003\166\n\148'$]B\148\0232\149\161<\017\217\018Q\251\017c-\202\019\145/\017\141\0231\022\164<\001\197\018\208\250\001SU\202\019\"\150\016\237\133\220KS\158\144r\t\233\188\144\169>\229\137XT\167\148\173k\222\243\001\141\199\155\153\201\218\179\182\245q:`&\241\020(\149m\204+ \241\t\1357\249\198\246\172[JG\202\190\195\251p\187\168#\169$\011\248\144 Ey\224\023\005)+8e\135~\191\031/\206C:d\020U\170\221\171\195|9\199\189Lo\223w\213\254\127\175ym\228\147d\130\197~X\171\148\221B\227\193\165\019.\241\227\246J\029\188\176l\130\165~\216\161\239\253\176|\130e~\152\157\015{@\197\004\202\253\160K\1274\014\189\255\178K\r\030\176\152\192\133\031|\242\131\202\t$\192k\130G\201\tU\250Qg\255\199\169\t$\253 \255\131\234\t\163\252\152\206\255\160f\002\213~\144\2238\218\t\211\2481\131\023\163'L\011\012\241\221\255v\221\132\210~\020\232\2204\154P\157\031\245\169>\189\168xD\197\128a\227\186\161\0075\017,\006\004\251P^Z\166\019\189b@\175/oc\164\019\185b@\174\155\02331+\006\204\250\019\0162\157\184\021\003n5\239^\187H'R\197\128T\254.N'R\197\128T\127)\208\130\019\171b\192\1707\255\179&V\197\128UG\208\238\019\175b\192\171\171\191\225'^\197\128WG\208\024\019\179b\192\172\159~\208D\173\024P\235\003<j\162V\012\1685\198\246\175\168l\162V\012\168\245\219\030\165\230AM\212J\000\181\198\004\139\0075Q+\001\212\186\248\191+\155\168\149<\168\181\186\223c\026&\255\199\n4\141\170\211_\127LC\159\007y\031)_\161\241\253\175?\166\225\207\003\157\006\203Wdr\255\235\143i\004\244 \167\241\242\021\153\222\255\250c\026\006=H;d\190\226\178\251_\127L#\160\007\183\0285_\241\249\253\175?\166\193\208\131?yq\197\253\175?\166\225\208\247\190\254\007\138\251_\127LC\162\007x\246~hy\255\235\143iX\244\224\188\143\147\247\191\254\152\006F\015\172\243>N\221\255\250c\026\028=8\175\233\212\247\191\254\152\198G\015l\240\193\154\251_\127L\003\164\207X\223\189\175\217\222\255\250c\026#=@\208\239\250\254\215\031\2110\233\001\142c\234+\176\187\255\245\1994Rz\128\227\176\250\002\140\163\251_\127L\131\165\0078\142\172\175\192\248\254\215\031\211\128\233\251F_\219\196\201\253\175?\166A\211\131\187\249`\233\253\175?\166A\211\003\251\211\207\2258\187\255\245\1994pz\144\227(\251\n\204\239\127\2531\r\158\030\160\183\247\227\226\254\215\031\211\232\233\193Mc\237+R\220\255\250c\026B=\2007\239\019\203\251_\127L\131\168\175\247\253\157!\239\127\2531\r\164\030\224\213\219\027\234\254\215\031\211P\234{\160\191m\234\251_\127L\195\169\007\248\211\139k\238\127\2531\r\168>3\245?\176\189\255\245\1994\166\250\154\180\246Q1\214\247\191\254\152\134U\015p\028\131_\129\221\253\175?\166\145\213\247\170'\159\187I\162\251_\127L\131\171o\208\240~c\018\223\255\026\129\015*\218\017x\1838\182\020\157\150\"\179\007\t\127\014\159z\031\006y\016\240M\031\238\023\144\239\014\234\252A \030\196{W\135\223\138\144{N3Mt>\028\213\241\250\188H\148\000\201\245\235\232m\232\007\209\142\183\143\233.\r\225\147z\208\234\168.\166i\127/>z<\016\214\201\242\201\252ak\238\0174\231\151#hd\030\175d\159'\208\156_N\160\145y\178\018}\030@s~9\128F\230\233Zt>\127\230\252r\254\140\204\179\149\240|\252\204\249\229\248\025\153\231k\217\231\2333\231\151\211gd^\172d\159\135\207\156_\014\159\145\185X\139\206g\207\156_\206\158\145y\185\018^\028=s~9zF\230r%<\159<s~9yF\230\015\167\244\1843L\255j\204\127.\186\251\244\175\190\238\238\028\216_7}\1611\141\136\171\222\172|5\166U\190\212_\143\212\2123\015\172\198\243\020\226% \241\001\158y\224\t\144,\001\169\0230\231\129'H\186\132d>\200\156\007\158\016\217\018\145{\017\207<\240\132\200\151\136\194\135x\230\129'@\177\004\b/`\206\003O\016\177\132\148>\200\"\015<A\202%D\250 s\030xB\200%By\219w\253Vq\180D\212\254.\212\199\235\215\170\023W\160\198\223\141\253y\rJW\160\214\223\145\014&[a\180\191+\1875&_a:\208\153kL\177\196\148\017\236\2075J\172P1\236\210\021\168\\\129\018\212\169k\144\\\129R\192\204G\022z\221\191+h\0068\234\131&kh\014\217\234\003\167kp\129x\235\195fk\172@\012\246a\2435\182\004\221\239\131\022k\168\132V\224\003\1395XAc\240\129\2035\184FF\225\195\2025\182A\182\241X\153p\140c\005n\145u\248\192\137\003\214\216>|\240\212\129w\208B|\232l\141\150\017\180\017\031:w\2081\178\018\031\184p\192\t\182\019\031\\8\240\020[\138\015^:\240\012\218\138\015-\029t\014F\bh-+t\129G\011h1+\005\002\143\028\208fV\nJ8\138@\171Y\225%\028Q\160\221\172\240\n\142.\208tV\248\154\024i\160\245\17244x\212\129\246\179R\208\226\017\b\154\208J\129\151\247{\245\241\254b;+X\135`\234\248b3K\160ZS\221\"\166Y,\2454\229e\248\135:\015\231W\220\026\153@\164\239E\215X/\183Og\221\245\191\204Z11\151V\025\137$&\213*\167\145\212\236Z\021$\150\154f+AC\137\249\182*I(1\241V\146FR3p\165H,9\021W5\137\165\230\228j\205\215\211^5\250}\216\183&\005p\153\017K\192\154\159\221Y5c\224f\135\244\191n\234l\018/+#\250?W\189\1621\248]\237\1875reF\157\0319\141\231\247\007_V\134\180zr\189f\233\249v2\176\145\166\227A\169/\159Y{\t\170\246\230)c\202\132\224J\157\208P\130,u\202@\003G\194zM\215YA\144wj\205\226\209p\189\014\007u\012\r\182[\179j\228\133\224\143m\205r\145\031B\184\132\214\172\021yA\132/h\205\250\144\031\131\157@k\214\134\188\024\204\254\214\172\n\249!\004\237[\179$\228\005Q|o\205\130\144\023D\016\1895\139A\254\214\198\225wkV\130@\167R\001xkV\130@\199R!xk\214\129@\215\018Axk\022\129@\231\018axkV\128P\247\226@\1885\141\131{\024\135\226m\028\019\157\012\131\2416Np7\227p\188\141S\200^6 o\227\012\242\152\r\201\2198'\024\205\006\229m\\`n\179ay\027\011\204r60o\227\018\026\004\027\154\183\177$\236\130\r\206\219X\017\230\193\134\231m\\c3a\003\2446n\176\181\240!z\027\183\216^\248 \189\1415e1|\152\222\198\029a3|\160\222&\017a5|\168\222&1\182\027>Xo\147\132\178\028>\\o\147\148\178\029>`o\147\140\176\030>do\147\028\142+!S\1496)\1681&$lo\019A\1417!\129{\155\148\196\216\019\018\186\183\137$\198\161\144\224\189M\0201&\133\132\239mR\147\227SH\000\223&\r5V\133\132\240m\210R\227VH\016\223&\174_0s\214\179\186\154\b\215\027\149\180\137\235\006\230)/?\017M#\022LMI\211\152\131S\147\2114a\209\19645M941aM3\022LM]\211\156\131\147\147\216\180\224\224\212t6\021l\159\017\019\219\180\012\2332~\206\145\202\128\230\231\231\015\169\n\176\222\144\2254\173\003Z%\200-\167\174\027\b\143\213\219\180\165\176\214\157\173Sq\255\231\194(\181\173$8\171\218\196\174f\021\249]\219\165\228\198,\016\171\189\238\166\002!\003\250\135\255\254\175\255\242\031\255e\023\021\198\243/\221\128\182\245\004\030p\173\223=\216\210\193&^\236\159Z\031<\224\198\001\167^pk0\175\216\206\193\230^\236\184u\205\197f\238K\023^\236o\245(\025[\130\141\171Y\131\133\023\252\188\236}\245\210\173\131-\189\216\171\015\155\186\189$\189\216/_/e\202\193*/v\220u\247\130M\029l\237\197\238\149\167\131\179\204\1936^\236\193k\029Y\238\128[/\2488\012\158^\202\n\007\172\189\224\139\214\190.v?\185\243\179\201k\030r\141\141\253L\236\188\221\020;X?\017/&{\248\250\\\167\181b?\017\255\242v\177c\210\177\159\135g\223;\167\238;g\254w~\247\183\180c \177\159\197W\175\235q\140:\246\179\216\252\211\007\174\029\176\159\197\031~\026k\007\012h\252\238s\\f\158\180\006K\224\244|\157\236Xu\172\128\227\242u\148\227\244b?\143\223\222\253f\2376\182\159\201\237p\221\235\203\197?V\020n\179\181\164\014?\177k\247E4\169\196\2033\229\218lG\234\240r\166p\198\159\196\207\213\199\214\172\160\1933IH\029a\131h\146\145J\188l\200\156\177%\017\180\142\144\177-\145\164\142\160q*Q\164\142\160\241*\169I\029A\227V\210\144:\194\198\175\164%\149\132\141c\137&\149\132\141gIG*\t\026\215\210\136\212\0174\190\1654g\130\198\185\148\230L\208x\151\210\148\t\028\187\210\156\212\0184\134\165\005\173#h,Ki\246\134\141i)M\223\160\225)\165\169\0238\212d\t\152$\247{\179,\027\230\0203A\233\b\242g\153\164T\004\185\179\172\166T\004y\162\172\165T\132\249\144LS:\194\\H\214Q:\130<H\030\147\175\017B\254\1564\141 \238\231\025\249\022a\212\207I\243\n#\\N\218W\016\223r\210\190\002\233\150\147\022\182mr\150w!\186\130\230W\005\136\133\174g}m\222\141\182\160\025V\1450Z\194\220I\1451j\130fY\133\224\180\132\248\165\162d\180\004e\019\n\201h\trp\133b\180\004\205\216\138\134\209\0186\223*ZFM\152\183,4\163&\204a\022\029\163&\200g\138\136\209\0184\239\018\028\151\130\156\175\224\184\020\228\127\005G\165@\023,r\142\006!\243/QpZ\130f`\130cv\216\144 8R\006\141\n\130#eP\186@\212\140\150\192\225Ep\228\222\148B\016:P[P\030\160\244\179k?\012'K\208\160\228y\025S:\130\006\1692\161T\132\141PeJ\233\b\202\168\151\025\165\"h\132+sJEPn\190,(\021a)\250R\144_\0182\202\150%\165\"h\136-%\165\"h|-kJEP\000Q6\148\138\176\145\181l)\029a\195j\169)\029acj\217\145|\r\025P%I\249\160\209T\146\140\015\026J%\201\248\160qT\146\132\015J\221K\146\240\129\227\176$)\0314\bK\146\242a#\176$)\0316\252J\154\243A\217})i?\0280~KE{\192\128\193[\146~#p\228V1\200\146\223\234\189\254a\134\220[\243\0176\192\169$@S\2168\167\210\000UA\195\157\202\0034\005\rY\170\b\208\0206r)\017\160*h\000Se\128\166\160qL\201\000MA\195\153\170\0034\005\141j\170\t\208\0206\184\1696@U\216\024\167t\128\170\176\161Nu\001\170\130F\188:\n\208\0204\240\213!\014!h\252\171C\028B\2080X\135\248\131\160\209\176\206B\190.lP\172C|K\208\216X\135\248\150\176!\178\014\241-a#e\029\228\\\130\006\204Z\0069\244\128q\179VAn8`\248\172C\252T\224(\218\249\233g\006\226\179\186\014\231\209I\237>\251\235\187u\235\211?\174\234\250\169\245\190\186\2163_\134I\213BaL+|\170\177\163\160OEg\247\172\029\212\251\159\246b\138\171\201\204\238\180\186\\\r\230\216N\251D_\229\227\181\252e\184]\223I@\178\006|j\230\001\233Z\2548\156\153\007dk\128=\180\183=+{\175\015\000\228k\192\219\217\016\153\129\020\206G\188\247W\205@\196\026bw\238\r\221\174yWv/\159-\181\003\184r\141\179\027\023\131p\210\193\141\005\000AH\181F\142;7\131\128\181\003\180[\254\131\128\141cD\253\1750\\\235\224\198M\254AH\237\152\249\184\187?\b\2179\246\216\007vd\028y\r\160V\246\250\024\b\138\189\189\207\128\018\208\245\012,\245\247;\131\202\252\157\206\160ro\1433\160\002t7\003\019\160\175\025X\233\239h\006%\2534\239\207\141I>\"\144\242s\156\006\213\136\2244\172\001\236\166Q-\1606\141\210~^\211\160\014\145\154\132%\017b4\r\139\001\157i\148\195\176\211\254v@\162\014\171\134s\243\222\163\177+q\2004\217\026\018v8\212\188\159\191.\234h\007~\2526.\133N\231\254\248\134\132\029\226\\n\135\195\163\140\253U\216\161\139\186]o\0074\024&\014K\204p~\197\154\029v\2529|`\217\218m\192\230\003\136\154\217f;\028\250\2270I\190\015\231\254\247p\180\231\014S\160\024\128~D\145\249_\132J(T\140P)\133J\016*\163P)B\229\020*C\168\130B\229\b%(T\129P%D\197D\203K\n\005[^Q(\216\2425\133\130-\223P(\216\242-\133\130-\175)\020l\249\014\162\018\220\242YD\161P\203g1\133B-\159%\020\n\181|\150R(\212\242YF\161P\203g9\133B-\159a~\165D\203\011\n\005[\190\164P\176\229%\133\130-\175(\020l\249\154B\193\150o(\020ly\204\175\140hyM\161`\203w\020\n\181|\030Q(\212\242yL\161P\203\231\t\133B-\159\167\020\n\181|\142\249\149\227\150\207s\n\133Z>/(\020lyA\161`\203\151\020\n\182\188\164P\176\229\021\133\130-\143\249U\016-\223P(\216\242-\133\130-\175)\020l\249\142B\161\150/\"\n\133Z\190\136)\020j\249b\205\175\159\250<%\238\136\137h\145z!\2284\180\2000\006uT\145c\012\234\166\162\192\024\212I\133\192\024\216E%\198\192\014\146\024\003\187G\001\0121\241,j\140\129m\221`\012l\235\022c`[k\140\129m\221a\012jk\017a\012jk\017\003\0121\213\020\t\198\160\182\022)\198\160\182\022\025\198\160\182\0229\198\160\182\022\005\198\192\182\022\024\003\219\026\241\135\152\\\n\1371\176\173\021\198\192\182\1741\006\182u\1311\176\173[\140\129m\1731\006\1825\226\0151\157,#\140Am]\198\024\131\218\186L0\006\181u\153b\012j\2352\195\024\212\214e\1421\168\173K\196\031b\002Y\n\140\129m]b\012lk\1371\176\173\021\198\192\182\1741\006\182u\1311\176\173\017\127\136)c\1691\006\182u\1351\168\173e\1321\168\173e\1401\168\173e\1301\168\173e\1381\168\173UT\157\246\234\203\222#\218\168sKM\015U\188\022U\205\152\213\190\156T\011\147\218*Yc\238\171\0164&u0\143E\b\026\149\173Q\1435\b\026\148;\160\251\018\004\r*\214\160\251\n\004\141\017\014\230\177\000A\163\2025\234\185\254@\163\228\026\245X~\160A\202i\244\144\215\171\215\152?\141\237\240\160f\r\2508\134}T\187\134\253u\211!o\168\157\135\217\127q\160\218o\231\239Z\157\175\016\227\183s\026\131\236\156F\001;\167A\192\206i\144\223\206i\012\178s\026\133\236\156F\001;\167A~;\1671\192\206i\016\180s\026\134\236\156F\001;\167A\221\026d7\181P\235`\141\159\023m\175\014\131\189\187\026\160\252\204\224P\136\027\028\014\176\131\131\001~p0?C8\020\226\b\135C,\225p\128'\028\204\207\020\014\005\184\194\193 [8 \226\011\135\003\140\225`\014g\234\189\253>\1385\173\1595\205\254V\163\135\180~\202\144\016\196\023\018\004\200Bb\000SH\140\159&$\004q\132\004!\130\144 \192\014\018\227\167\006\t\001\188 1\144\020$\n1\130\004\001:\144\024\135\011\211\134E\138\011:r\rn\216#Q\1356\215\243\237p\250\129\"9\157\248\164Q\012\167S\159t\138\1643\1594\138\219t\238\147F\017\155.|\210(V\211\194'-\144t\233\147.\145\180\244IK$\173\188\189\131\130s]{\197ao6^q\216\157\173W\028\246\167\246\138\195\014\237\188\226\168G\187\200+\142\186\180\243\1559\234\211\206k\2311\234\212\206k\2321\234\213\206k\233\t\234\213\206k\234\t\232U{\130\253|o\232\174\187\237m\029\245p\154\014\025\213\199\234\031\254\235\191\254\207\255\245\143vS{\148F\230\255\217\"\128\229\157\162FC\188\212\208\012\135\131\194\232\230\005\157T\207\187H\tp|\007/\239(5\224\180z\222NJ\128\147;xyk\169\001g\213\226\190R\002\158\222\225\203{L\r<\175\230\027L\ttvG/o65\232\162\154\2394%\208\249\029\189\188\235\212\160E\245\188\229\148\000\023w\240\242\246S\003.\171\197\189\167\004\\\220\225\203\251P\r\\V\139\155P\txy\135/oH5pU\205w\163\018hyG/\239L5h\147\2354\150]\171\235}\219\166-\181=^~\\\244\185\239V\023\224\206\198\190\178\182\230\137?\2347u\029\027\255[\138\218\234\129\027\205~\172\181\184\236\213\229\029\241L?\001\234h\018\128\251\161\249\248\236/z\167\206\231\225\019\129\186'\168\029\246{e\207D~;N\015\027L\"q\175\250)7H=\217\248\255\147:k\187[\244\210\255\030+\198\175\189\233wu\234\237\022\200\251\133\207jB\239\151\157\144\216.\204F\234IGg\028\162\179\134:\019\159\206$Dg\003u\166>\157i\136\206\022\234\204|:\179\016\157\026\234\204}:\243\016\157\029\212Y\248t\022!:\223\160N\225\211)Bt\190C\157\165Og\025\162\179\135:\165O\167\012\209\249'\212\169|:U\136\206\015\168\179\246\233\172Ct\238\161\206\198\167\179\t\209y\128:[\159\2066D\231\017\234\212>\157:D\231\000uv>\157]\136\206\019\210\153G\030\157I\144\255\252\011\234\244\249\207$\200\127\158\161N\159\255L\130\252\231\005\234\244\249\207$\200\127^\161N\159\255L\130\252\231\r\234\244\249\207$\200\127\254\132:}\2543\t\242\159\159P\167\207\127&A\254\243\023\212\233\243\159I\144\255\252\130:}\2543\t\242\159\191\161N\159\255LTu\029\206\215\193Nz.\239\218\004\026\245\217L]\2445\220T\211(\206&SMm]\217Z}\253\156+Y%}\195\206\031\254\249\223\254\235\255\248\167\2552N\029\028UM\144\170\179GU\1588\170\230yb\211z\031=N3\028\208<W\252\252\237{\136\024\219\216\001\153\185\226p\250\218\235\206\204\236\191\0145\202\225\196\169\137\028\237\165\143\252L\240\223\255\255\255\251\031\255mz\205\216\209\017\211:j\159\014\167i\210\132\214\209\248t8=\149\166\180\142\214\167\195i\2374\163uh\159\014\199\248\210\156\214\209\249t\020\142\142\130\214\241\230\211!\028\029\130\214\241\238\211Q::JZG\239\211\225p=\149\180\142?}:\028\131N\021\173\227\195\167\163vt\212\180\142\189OG\227\232hh\029\007\159\142\214\209\209\210:\142>\029\218\209\161i\029\131OG\231\232\232h\029'\143\142<Z\235\200\024\255\241\151O\135\227?2\198\127\156}:\028\255\1451\254\227\226\211\225\248\143\140\241\031W\159\014\199\127d\140\255\184\249t8\254#c\252\199O\159\014\199\127d\140\255\248\244\233p\252G\198\248\143_>\029\142\255\200\024\255\241\229\211\225\248\143\140\241\031\191}:\028\255\145\205\254\227\253\167\215\239\249\026qv\024\007/\168\245\129f\015qi\189V\231\025v\178\217%\\.\b\244b\175\179\0158\157\188F\017=\255\159\251\1463\245?\027\175)x\198W{\241\171\155'\163'\r\014>\014\196\215\000\159\004\226\027\128O\003\241-\192g\129x\r\240y \190\003\248\"\016\255\006\240\"\016\255\014\240e \190\007x\025\136\255\019\224U \254\003\224\235@\252\030\224\155@\252\001\224\219@\252\017\224u ~\000\248.\016\127\242\227\139P\254\255\005\240\161\252?\003|(\255/\000\031\202\255+\192\135\242\255\006\240\161\252\255\t\240\161\252\255\004\248P\254\255\002\248P\254\127\001|(\255\127\003\188\170\206\202$\012\204h\220\140k\031\207\152\246\031\254\253\127\255\175\127\250\183\231\144\236\014\\E\253\004\1824\208\025\150\139\230\t<\147@w:Z,\"\253\006\132\222\197\028\2167\027Wq\138y)\232\253f\175\135\236\250\183\219Y\003i\177\224mX\176\239\224\227@<\024\183E\018\136\007\227\182H\003\241`\220\022Y \030\140\219\"\015\196\131q[\020\129x0n\011\017\136\007\227\182(\003\241`\220\0222\016\015\198m\161\002\241`\220\022u \030\140\219\162\t\196\131q[\180\129x0n\011\029\136\007\227\182\232\002\241`\220.C\249\015\198\2372\148\255`\220.C\249\015\198\2372\148\255`\220.C\249\015\198\2372\148\255`\220.C\249\015\198\2372\148\255`\220.C\249\015\198\2372\148\255`\220.U\213\156\135\139\029F\255\158\029{\252@\015\198\140\210\195\249\019\024\223J\015\191/H\214\195e\005\198\189\210\195\219O\240\190\242\145G\219\181\222th\230\201\137\2029o\214\000\215'\231\180X\243\220\200\249\"4\231\189:{=\187_hNl\245`\156\149s\222\234\168\129-\2039/u\004\195\157\156\211N\003\024\017\228\156U\186\012\192k\2009kt;M\243+\253\171\217+{:\234p\220\029\212\025)\159SE?\145\238914\237\023C-\178\200\005\233f8\154\191\026{\202(\144\158\147@v\011\027z\1899\2353n6Cbs\134g\218\155\005\228\212\156\192\029w\159\157\134\2548\238\191\003\226\241\226\139\236\1421N>Y|\147YB\252\250a?m\002\153\127\001\208l\144\246\146\243/\228\016\212l\147\227e\234\211\245\240\247\007A\144\155]\189\028\212\158\155B\170\217l\223\001\131\213l\182\239-\024\t\213l\183\239\253\143\179\006\230\165\022\tO\2277\237\2375@p6\213\203;\024}\212l\171\183w\244y\179\157\254\028\144\140=\n\242\242\177\251\028\206\031\244\154\162.\170\179~3$S\246\162\199\182o\198C\136'\b\019jh\193C\129\183\213%\015\005]\167%\015\005\173\162\021\015\005\212\2085\015\005\017\133nx(\240\174\186\229\161 \1420C\003\011\005!\132\238x(\136\030\186\136\135\002\223\214\197<\020\140\137]\194CA\184\208\165<\020\140\000]\198C\129\207\236r\030\n<b\023\192W\016\026t\001|\005\190\176\011\224+p{]\000_A,\208\005\240\021\132\001]\000_\129\015\238\002\248\n&L]\000_\193\188\191\011\224+\152\242w\001|\245\207\246\147\2329\147}\239\207\234M\029\213\238}\248x\221G\146F\1626\255\207Y\164O\162y\130\241\161\174\234\195\226?\134\143\193\131\175\211\241\2559\248\228\021\127\241=\189^\175\186&\241<\017j\254\252\216\221\142}\215\143\147]=\188\157\213\233\253G\145d\175;Y\198\031\174\245\196\140\158\188\206\197\139\158\241\135k=\t\167'm^\151\238\198\031\174\245\164\175\r\210jO\1314\238\011d\204\011d\246&1W\207\248\195\181\158\156\251\016\025\191v\208\248\195\181\158\130\209SJ\157\190\232\025\127\184\214#\216\247I\164\231}\156-lI\\\178\237\1632O\251\168\204\209#9\195+\030\245=K\195\179?\\\235Q\140\030\017?\n\127\022z\198\031\174\245\212\220\251\228\242\181}\198\031\174\2454\\;'\217\235\002\249\248\195\181\158\150\211\211y\236p\252\225Z\143\230\244\216L\192\139\030\251\195\181\158\142m\159\218\211_\246\135+=I\196\182O\236k\159\216y\159\132s8\162\205\146\215~o\157-xI\1949\028\145\199\175[\215\198\031\174\245\164\028O\027\245j?\227\015\215z8\255\147\151\221k;\143?\\\235a\253O\150z\248\158\165\238\251p\254\167\232\226W\190\143?\\\235\017\236@#s\207@#\157\001+\225\252O\145\230\030=i\238\234\145\172\031\139\"\143\031\139\220vV\188\030\233\211\227\1823\231\127\164\205\132\185z\164\155\030K\018\214\255\180\186x\237w\251\195\181\158\150\253\174\164\245|W\226\242\148\245?i\151z\006\244\206\025\191\018\214\255\152\169\149\167\223#g|O9\255S\182\226\181\223\199\031\174\245\196\172=\231\169\199\158\157\237LI\202\250\031Yz\198/\251\195\181\030\206\255\b%^\237g\252\225Z\015\235\127\178\168\244\248\141\168t\244p\254\167\176\183\014\191\180\143\253\225Z\015\235\127\132\135_\227\015\215z\004\175\167\244\233q\191\171d\199\1394\245\140\023\169\219\239\146\029\007E\226\025\007\1333~\165\156\255\201\243\218\195w\251\195\181\030\214\255\196\158y\203\248\195\149\158,\194%\014\168\225\147\215\138\198\177\204\193\254\230\181\204!\201\226\173\143X\249\224\213#\236o|\143H\182?\162l\208#J\239W\164[\031\145\215%\248\n\251\027\223#\178\173\143\016\246\236*\239#\236o|\143\2007w\247\210/\174\187;\241U\181$Y\177\249+\138V\128\1750\191\241=Bl\238\139\164mA_\152\223\248\030Qnn\168<\007_a\127\227yD\030\2055;\015-;\213\254T\199\171z[\020\227\222\139h\242N:cc\030\251\0204\141>]_\209\169vf\192\133IY\014f1\194\166\229\167\148Ig\178'\221\205\159/O\138\216'\190\135\226\137O\252\242>@@\234\003\252\234\145x\230\215\127S\1997\012\202}\160F\001\249\212L\030\155\175f\255\\7z\021\136\171nx{\251B\191N*\131\182K\202\183C}6F\164\144`ZMG\242LE\249W\133.jK\2379\159\183\227\217\154\165\221\136\181;\152\239\185\170\254\b\229\243\135<\018(\140\017]\191.fu[\239\212u\215\222.\031HTX]\023}\157\030]\223\250\189=\154\000>\186\180\251\210\1425:+ 5N\190>\247\237\219\248\220\241\251\145\160\170>\213\152~T?\225w\212\213\207a\223\168\227\128\004\154\234\208\239?\190\140\018\216_me\207\185{\223\189\237\135Z\239\244\237<\156\244\015\213\157Mj\017A\244\n\162\014\218\n\195&\233\214\210\151^\253P\183\203\245\172\246=z\130I\249M\210\163mX\253m\175`\127\199v\027\204\1671\011\179zL\173\127\165&s\247\169~\141g\174\152%\190\198,F\134\128\210\170\235\207\151\235\206N=\198\213\005\030\146=\158\243\214\215\245p\187\132`\242j<\214%@\1780\218\143\027\181\139j\175\182}C\249x\202\150\182\146\213J\026\137\169\185\195\198\030\238T\131l\220$\189<\205\207\162\026\207\247\178\160v\209\005\172\176\182\142\129\023\235\172%\127\218v\180.\014H\217\140\211\2510\\913\171|\215\231\195p0c2\020J\170\233`\189\2140\217\172\b \177\180\154\206\0283_\129D\178Y\228\238\165\199\021y\227\223o-\194\228\011L\173\223\205\026\005-_\000\249\233\129\214\153\"\164\168\002\005\203\165\224\229\b}\179\201\183,\004\247\2149\031\225e|\169\201\170,\164\205\196\233\168Z\228\135M\230\196\140\153\232\151Meo\207\221\213w;!\172\201d.\222\0073^a]\186\186\170\006\190FW\213\183\243\185\191\"\001\147yh\222\245\229z\188!\179\1779\005\173\219=n\023\147-\208f\168\156.\237\189>\183-\189\202\165U\171\155\190\189Y\015F\201\217\131\b\246\007R$\175\026\213\\oh\1280\001\186m\182\147>\157 mL\240}\189\237\251\019\250ui[\230|\254\178\221t\185\012\007$gV@\0078\2410\145\240{_\247\151\006\191jm\221JgL\001\191iS1\2390\014\233\246\004\194\131\234\127\195w\209\015)3zC\161\1742_]\131\223\154@z\220\233\180\215\202\158vhgHH\210\222\234i\188\209(\138d\146\1703\238\197X\r%\148V\227\211\186\253\205\174uZ\190\244G\226\246\233\212\004\152\135\219\229\253<\192\230\026\227\195\131\130\1640\193\157\186\213\198\162{8'6\193\153\141D\208\169\216\169\137\172\014z\015\199\195LNs=RF\025f\031\223\236'\195\183\168M\219\028\176\006c7f\141\241\136&]&Mr2\202\213\201\244\019\018\177\011\215\237\142\0201\003\222H}J\200\132\129'\r\1359\019\227\153\2236\239\232\215\201D\197\0306\183\141\222\205\252\242\179\182\132E2Y\245\174\014\198\029\190A\163\181I\250}?\0299{\234\127\255F\r\151\023\166w\149\221k\183\171q\220d\"\229\211p\219_\141\011\217k\228<s\019?\216'6c\224\r_LNR\181\161\011\0181\163\2110|\152\206\"\216\157\215Us\179>M\029i9\1476\186ju\176l3\161\r|\166\225\224I\189\189\235\235\021E\151\1856\225\143V\136\172yWug}l\204\148\138\232\2221\1387\179;\027\210~j\019\154\157\134+\166\175\189\001\204\016\007\254:\169\134V#\206\152\b\253b\188\007\250\028\019\145\219\023\181\155\252\206\253\001\141\029&\004\239\250\203\187\t\186?\238\017\205\229\179?\239\205b\255\170r\201\001\153\140\232\208]w\1475\152\198Gr&@}7!\162\221q\141\250\175(+V\141\189\006\229\246\246\142G\254b\178\168\030>\196\024\211\251\208\012{\227\201\140e\"\219-\0263V\031[D\203\162\173\246\195\222\140\195\003lMm\140\214N\146\145\017\021f\20424\252\178f\001D\1968\223>_m\143 \145\184\170M\0243\024\131\255\133D\018\195\232\241H\225n\024\208\219\136tj68_\018\198\134\236\206M\203\193\015\147a\131/d\134)\227\021\239[\166\135\219u\247n \208\197\nc?\214\222\234\225z\181\183?\219y\245\r\181\169\016v\n\170M\136\174.\136u\194\204\128\134\230\195$^\246\180\156\172\174&\242\024\239\203k\205h\1332+fU\167\21464\187\193\1501\022e&\154\227q\202\015Q\248T;\184\213_\247\207EB\173\211\212\019\027O\214d\017\1968\172\169\005'\209\225t\026c\226\225\012\191\1713Vq2\002\136\217f\249\232l\003w\248\251\184\2504\147\137\147\161\244\201\004\211\198\b\145\160\137\244z\147Yi\213\215\142\176\2282\173\236\129\217?\134\031{eo\245\134\207\205\012\129M\214\236zP\228\132\1884\238L\2178t\247\020G\146\133\141\221\181\221\152\012E\196S\196^,r\254\216\195Q\175,+;\224\225\180B9\030\135e7\152\015\196D\223\022\189\012\199\206\014R\212\000Z\214v\190\165juUdc4\207\018\154n\175\160y\150\211\220\202\184|c\024c\157\003\018\212\166\179N\234h\250}<L\020*\236\140\027=\159L\182\192:u\248\1772\154b\203\230\189?\160O\144fnn3\030?{=\198\159\141>\219Y$\242\208\182r\1978z\147H\190\168\171\153\136\161\006\148\169\157\019\183\183\169\170\195\164Z\145\156\153\136\217\004\225=\142\238Ov\030e\204kg\207\200B\152\220\176\242\246\215MO\222w\140\150PK\201\194\230@{3`|\153Lb\171\224\251\218\029\179f\138\211\218\157\177\020?ei#\138\209\191}\232\175z\024\143o\183\239nY\006\223\194\172Y]om?\236\014\1891\152\211;\158(Je\166\241?\181i\223\189Y\226\128=[[36\158\214\188\197q\168\225s\141_\180\006b&\2376-gs\215\187\199\219\031\135+\156c\201\246\129k\2456\1606\1326\225zw6h(\212U\170=\244\151\1395\141ko\215\152\144\168\138\172\161\155\028\129i\0163d\195\208Z\153e\t\027\020\\v\159\239\026\026\165\178K4&\198\180GA\219\025$j]\149\142S6\251\209\167\225>|\218\031 q\019dr\221\170rC3\1951C\005\195W\020K(\1874q\212\007\248{a\217\210\146\015*+C'\227\152w&obw\004#93P\015'3\139@,Sj\\k\179\233\025<\b)\227'\199\014D\1917\014roG3\179x2\224I\155\189\162J\159\205\232<\006\025\248\226\157T\233\234\167]\249\219\189)\232\209L\246\1605\131Jc\166H=z/\187\019pofo\007\019h\226\144\1866\179\192\222LG\205\139\163\023\170\147\202\190\202\174\1333\227:\173l\212\132\167\128\181\153\002\142>l\183<\019\030>0\175\150DDR\198\237\153h\179\183I\151\016\222\214&\142P\191H\011\174\203\234\237\214\227\244\180Y\151w\029#\1464\201\012{\224=\180\154\218\172l\245\195\030\230t\235\230\249\168\139\025Q\225\027\183\213\249v\028W1\012\153\031c\204\005\158\223\144\214&\127\170\r\224b\018\202\2058\190X\230\019\211\132\218$\170>\250Q\202\254]\0150\230h\"3}\185\024\162Xm#\192\012\162hPlb\155\2270/p\190O,\144\156\025\140MB{lk\232\204\154tl\005\252{\187\190z\238\240\239M\030\228d\162\165\0119~6\1978\239\127G\243\134\198x.\235\191m\203b*4\198yM\235\137G\027U]\137\166oL\022\228\246f\230\252\156\156\241\165\159\253\001O\146\154\186\250\156J1\247}\135\199\132\166\169\222\134=\209L\198\216\198O3\011Hf9\192\174\162#\1874\145\250]\180\129lj\204\012\239<z\214\157=\b\159\177\1956\178K\193{C;B\198\012\145\189\222[\1953j\191\204\220\209\168g\021'c\238\224\005r\186\161\187.\21165S\231\218\248\157;\149N\170m\239c(\245\160l4e;S\180\161\207c\145\031I\219\148\255\225\132\r\169-\236\004\198d\146F\2023{\017ZQ=V\246\205\196\224h&\213\183\134\152\164\183\1651e3#a\183\003\180r\222h\128D\148Y\0061\239\214\219\209j\165\020\001lTl\194\239\233BzF\1821\202/\250\140|R\219\222\127\191\235/&8D\238\186\213\213q\156\198\155'\158\020\140|[\227\011\175\170\237o(\201\164\163*\232\019u|\151\027\251\238\205\2506\212\021\218\164\239\186nL\1342:\2119\176:\r\023\0278t8c\166\179j\218\t\161\142!\210\185y\223\203xR\002\146(l\238\0295\156\022f\133a\\\131\208\246>\172q~J\207K\180\181\192+\156\230jY\217\213\152\029)3\198\193?\245\1777\tWm\175\147\129\195\168\174\239!\031\250\18953\027z\031\236\194?\169\201d`\204J\221\000\211\242&\208\238\127\171\015\245\165vt\182Bws\1276f*\015}m\023\205]I\011\198\247\165\232\147q[\nNx\187\199\250:#f\214\215\213O\235P&\165\196 \222e\015\209I1%jws]\136I}W\220\223\142\017\179\251Ajh\027\157M\181\152\000\205\228?\143\171\153\208\229\253f\147a6\017\136\160\210NvGa\226\206\148\180Sf\1567\147M\024\buue\178\016\127\246f h\237\182\195\179\137\191\174\191O\234j\199\196\221\245\235\164\127\196\246\146\178\255\159\023\220\176\224\020A[\022\154!\168f\1619\130v,\180\240C\179\200\164\019Q\b\151E6\183sCAs\022\025\239\249\011\253.\189o@\171o\157Y\151\029\144\152\201\026\162^\206\"\147\179\238\225\002[\022\021&\2111\156`\156\144E&'\163\234\186\135\159gr\210\248\219\205\146\198Y\189\161Q<\139\198\211o\026\211\224{\216>ff\248\174\240\175\205\186\216\209\228\195\209\175[\251\235\015\136\214\021\145\208\200\162\206|;\024I3\187An\128_n+]M\018\228\132~\157\024\1638\154\233\028\250\189\221\150:\224\236H\022\219L\177\157\154\162\166\141\243\n\238Q\201\236\1417=\252\165\153\137\r\n>\184\172\244^\159\222\161\219\205bY\rf|9\161\r\022\153-\198<\245g\0278\218-\206H\1706\019B\248\142ME\188@;\173>\213(e\156\197\218\248\222\246\203.i\192\193(\139\187\n\231\155\178$\154\215X(\177\216\238\020\249\164$\146\234z;\227\215HR\179J~m\198D\216\216\229H.\155\150_H\025\179np6)\203\031\221\020\250\240\128\194\174o \223`/\233\208G\147\144@F\152\148\213\199\160\208\156?\179\151g\152e;\252\233fb~\030l\196{\254\026sv\200V\018c+fNs\238\199\t\006!gfI\195\254\244\142_\184\157\1565\177\003,\179\151N\152\225\149\146\232&\159K\201\164\209\221\175\146B\177u\174\164Dr\247\176\164Pj\179\007\183\2354\021\194\2064\205\238\249\001JW~\247\\\164Pa\157\015)!\172\007\"%Jk\171\180\136\180\027H.W\166\165U\245i\146\006\164Hm#UZ\139\189,\234\216*R\166\029?\234\bw\159e\169\189\202\233\211,*\154y\029r\143ig]\251\233pC\193J\150\153\249\244\023J#fYl\127\139~\153Tp\215O\150\165\021\241\238v\027\1511\"\228\199\198=\\\198\025@\248c\155\169Y>\031\207\184\154\028P\243a\215\208\237A\026\026M\1312qG\182\195\231q+\182\188c\199\235^6b\229\029{\0303S\027\193\202\142\0306\154\028E\2416\147,\171\031\177\007+\217T\195\007/\213V\215w\147m\185\216\150\166\228\244CnlWJ\178\155\022\016\030\239x\161\132s\24333*\004\b\198v\242\247\t\127\157\024\218\030\212\241\130\151G\178<\181\166>n\133\128t\024O\166o>\174hm \203\141\225\254\024s\211H\160\168\254\212\176\246!\203\133q\193\250\002\127m\198\192\222\184L4{\207M\180\214\127\244\199\030\253^=\218\1611\139%\239\248;\235\234t\195s\217\188\169l\143\212(\174\205\242\214n\142C[\254\178\\W\227K\\\222\007\248\b\179\164x}7\235]}C\137\021&\005e\b\245\195\174\017\142\251\182\176d\252\248\244\139u\189hT/\158\150bs\255\168}\n\179\158h~M\186\222\194\204\161n&\213dO\190\235\247&\001\134\227\247\172\200G\217K\152\176\153G\rh\178_\136\234\173?\195\175+m\195\163_\202\233\211\209\175\141\019Rf\233\029>\185\182\186\199L\193\168\198d\171\166\012\236H^\004j*{N\225A\007\138\183\163\184\209\031\n0c\228p\223\244i3~h\180*\186\233\219\167\020em\150W\190v\026\150\176e\"\026\203\190\238\025\205\159\026\198\140\194\238}=_\030\005(f\250n\023\138T\143\222C$\213\243-\222njw2)\004\133\216.\210Y\216L\251k\216u\"\171L[\141YH(\146\223E(\019\016\197\024\022\160\223\138j\153l\031\0150\132\r.\202\202\178\167\193\190N\2009#8\188\161\020d&\212,\2466\212p\1411\019u\245f\210\186\2001?v\156\217M\217\1767M2\233\215\245l\211(\198I\219\016\193\172\252\237{\0247\011]\141\1916i\160#\017\127\139\174\130\187M3{d\193\199\rF\182e\\\245G\187\206>\237\2031\233\127\155\201\180\022\135\000f}\251f\151\163q7\151\169\221b\139\201Rf\213\190?\141kGH\"\175l\"\197n\182\192\193\170\221Nf\230\191\198(/\151g\181\240\171\148YgTv\219\002\234\184q\031\217\185\182\171\237\003\140Fl\025\251\151-/\128\002\202L\183q+\215f\220\189\\\022\135\217\190\1384S\142~:\180\r\t\1535E\184\166\145\149\186z\211\007\155p?\194\215\236\198\023\001\191\149\209c\031\021\0180\211\164\225vzl\127\0287j!Q3\016\234\022\175\192d2\181q\2068\137%\245\152a\240<|X\127MI\229\163c\031E\224\215\021\213\180\165\144}\164-\223\152\138\175H\177r\185S\141\200ng\210L\171\2467MkS\247B\tR\168\174\190L\150\202D\252\164Tcg_\182\151H\169v\249\250\212\022\183L\218:\015\179\158\252\243\217$\176\141\187\187Rngc\166\162\170\237\213a<k\249\221\022^O\173h\230\255v\202s\233[d\194*\182I?\155`i\166\162<3\220\238k$\156Tc\149\012Y\167\154)\187#\231\000u\152\004\255\222\164O\199m#\164\026\179\bm7\171\143\219\216hIk\138\246\222\144Q\231\167\173\022\161\229\237\180\158(\223\204Ti\\\238\229\157\209\"\173\143\154\234W\0064)Pf\154\182\215\191\204d\1846\243\157\019\234hU\155\238\251\253\251\139y\162\201\136\159\1806\203\238\228V\221L\2170\209\214\027\\9A]=\214\207pI\\\166\140\021\222\207\152\030\003\229\011\253\150ud\211H&\139\132\003\146:\030Kc\204\210\232\151=\157\252]\225\145\160N,\005~~\141\251u\213\153\138:\235\212\214G\183&\239\214\224E\143:\027\215\138\237f\173\137#_\154\012\144\235\220\145\015x\143\194\129\216\021R\018 \028\192\201\158)A\"\202{\027\143\226\159x\147DVK\147rz\250\165\219\233\211N6\236\158k\187\132h\254\143\251|\147\224\2130H\175\235\251|\218\204\188\154\225p\186\225\177\182n\236\028]wf\145\024v\181\201\208\154`\185\237/\r\146\208v+\223\233d\172\161G\135Jdug\178\020\215\169B\002\171j\140\195\252\137\140\164\177{y\012\181\187q\018\142\132\146)\027\018 io\016\127\187\247\1731|\196\156&\155\228\238)|TP\1465v{\206\222\244 L\247\217\237bf\224\248a\194\172\029'*\236\022`:\227\213\148\208\136\016bev6\011\021\128Qv\234\184\027qHd,Z9\017\187\031\179\198\014\215\151\247\019\140<\236N\178\145_\140\152\205\231\026\235n`\217r\214tc%\2288j\158o\176\182\"k\237\130\146Y\192x\187Y\207AJ\1545\165a\248\176\019\219\221U\161}\231Y\155\152\165\221\022/\253\1826\219{\213V\021\146\200\158\018\247.\186\2070\236%e\184\2128\179;\195\166\003h(\229\197\196\012JD\220\231g\148L9\205\243(\017\179 y\182\163\007)\164\198F\133\141Y\155\232\232`\171\234Z8\n\181\198\1414vo;\250\189q]\250\128&\001\173\221\247jWV\237u\rg\221\232\158h\224n\244\001\232\215:2Q\218/z\255R\166\205\n\181\178;\157\236\208n\247\249\028QYr\166\019\195\150\218^\239\174\2181\213\185\179\167.\152Y\134\194\201\002\157\218\237\179Sy\248A\191)bWs\166M\174\227v\173\135_\134\249\232\148\156L\231\149=\213\135\1501\235\218&9\143#S-*\253\227`\195\\rv\162K\243,3V\217\151\215\199\159\218\012'P\163\172\030\018\174\027\027\195\147\157\170\135\159\016\172\030D\177\239d?n:\247\194\206\179\200]\199\153\174\189\200\251\141|\020\176\153h\183\021\214z`!\239i\147y\023\219\183H\160\027\005\212XZ\130\220lgo\233\250\188\140\174\022\137\216m6\181\029e)K\235\146\149\212#\0143\190y\213eW\162\242)\235\210\234g_\159\239W\229\0120h\234\178\245\179\2040\139$M\234\197$T\023\194\200\ruEu\167\234=9\137\243\157\157\029\178q\153K\214\149\247\223\223\015\208\193W*f\157\188\023|\208\n\213\232\192~\142\177\024\146\177\183M\182=\242\129]3=\168\177\011:8\155\222\181S\129\211\233<\252\169\237VF$g\141\239<m\132\182\185<\r\159k\140\208x\021\187\211J+\148\152\206#3B\127Nkz\174\201@Hli\218||\218\147\211\150 3\179\176&6\253\215\200\172\233L=F]\242=u\247I\229\253\212\190\209\024\199\2354\191\208s\210\197s\022\014\237\216>\231u\225\239\156Y\147\237\255\243\244\229\149M\198\212\227\231\031\237`D\185\242<*\198\213\166pyQ\221\007\182{\163\217\172\234~?\177\221L\228\006\180\153,\183\007\195RCbnO\023]\170\182\253p\025'\153\248\128\185<Rk\208t\167\214\012\131\205d\183\196\216\180&\236\227f\206\233\156\246h\167U\030\181\149\181\172\031\207\213\239\131z;\246\221X\"E\212\160\231\145\201_\217\022\223\014\236*k*\211\215\246\199q\147/\016\141\163\199 8#\224\158\186<\142+\226\151\201\248T\244\219t\026\253(\017\1472\128\155\217\2428\031\127\187\213\164\226\2269\211G\018\162\178\245\249\180M\199\229\228uM\214\238z\029`kJ\187\137\234\222\140\1797ag1y\172*\155(\216\142\171\171\199\"\155{\251\220\172\236\190\249\"@\155\153}?O\141{\029\210)d;Va\174\194\214\000\148\182\131\182\229\240m,X\030\203\151l\176BwEg\141\176Q'[\153\003d\146\200\204>M\154du\226\169\231.H\196\160$F\248\229un\016\157\188\162\143\183CM \210W\196\244O\136\200\208\0272\239\150\143G\021\160\223\022\179G\179\213_\239HNT\159\227\0177\232\247\165\221V\006\139\213\242DV\199\219\189\028l\216_\145\148\170\222\135\230}@\1916Y13\151\128\134\1464S=\243\165\129\177G\158\180\227\140\139\020\209&\221\2495\206\175q\225Wn\143\205\239\127M\137[\187%\227\170\238\163\205\161\031\235\198ZTR\153\167\209\188\148\187\232\204Z\191\245\184\2201Oc\155\235hm\169\138>\152\217\217\001\201=\n=\238\183&\145\254+}\030\167\024\"l\214C\213\249\205F\218\237}\218\129$\243\187\228\152f\160E\139\187\232=\221p_lA\210b\169\152\1455s\139\145\187a\154\229]:D\179\170n\167y\144\030\239\136\028\211P\248+\2052\132\153\194m\1954\171\167Lo\023\130k\157g\133#u5\213sO\227\135Y\2392\138\012l2\017\186\027;\243\178\167oA\179\249p\237\241L\018C)\227H\160t\\-\165\238\011\188j\223\253\184O\132\205\156\001-p\230YR\133<bL\242\153L\204\020 \236.\218x\149I\249b:\217\194mSy\150=\021\220\155c\179\134\188Zx\006;\186_l\250\246\004\151\001\242\231V\209\251\168g?\019\137\138\251\202O\128\168\tx\245\222nN#\165L\178\240@\143\225\1532F\249sZ\211\211p7p\158\213\213\135R\181B\1916\014~0\174\n\194\rc\191\142\234mx\195\"\218$\020\143\198%\220Kl\143\246|\027\147\15386p\155`\158u\227I\b\246\229\223\191\222z\141\014\128\206\243h\138\001\199\r\207S\204\216\016\243\223<^\138\219\141\001\180x\178\018\031m\136\006\164K\192x\230%-\159\173\228m\202\154\150\207\151\242v4\164\197\139\149\248x\221/\r\016K\192T\235N\003\202%`\236ZZ^\174Z\148}\031\181z\159}\192\023\212\235\030\214{\182M\027\199\132~\\\2376[\020\131\229\173cB\140\184~1!\006\208\185&D\203\023\145kB\140|\236\152\016#\158\188\152\016\003H_L\136\001d\174\t1\242\185cB\140x\241jB\012B\188\154\016\131(\171\251\176C\166V\n\185\022\219\144`)\148\015\026\154f)l\149\218~\143s\215y\209<%\238g\159\240J\167-g\211\161{p\210^\232\n\175g\229E7\030\242\bg*\"\178\027QM\248p\234\181=\152\146\160\177=\135q\154\133\219M\141\2119\134v\004\173q\162:\023\137\141\142m\149_\131\186V\164&@\194\239\151\141\027e\205\152^\223.\253\148\183\187\24561\255\211\132\192W\184\199-\023\246\200X}\179\221o\194\208\019|zQ\1816\209p\185\029\201\250\129\\\216\132 >\005,\023\229\253\247\187O]#\025Y\2539|\017\187/s\161\198\207\181{8\137O\171\199\\\220T\001\018\186X\152\139\198\179\176x\223B\002W\202r\209\222i\177\241a\143\205BW[K`wE\206X\004\233\238\230\021\014)\163\197'\217\243\203L\250\198\158\181m\022cP(YZ\231\172\014\211\165:\252JQnOv\180/e\212\210+\128y\153\21837\014\246\196\020N2s\214\n\153\003\238s{\206\227\254\139_\133\204\203\194VbN\023\164\132\190\204\1489\180\251\181\030;\024\016\005\236v\221\233\188\005j3D^\202{\2005\213Z\153\012\011\218c\159\151j)j3\019c\132G\228z\203z\137\232\238G\211P\128f\2456F\248Z\159oh\141+/\219\165xcV\131`\238\160\212\019\r?\207\253\245Q\204\128D;[\220{\180\139.l\225V.mI\232\184\016;JN\203rv\255\243\217\248>{,\153F\143\145\2462w\211\247\022\251]\021\201\172\"\164|,\151\233\011\128\169#\203e6C~\246\227\025$T\227\201|\022\159?\231\158\146\154\190\202$\142\2054\165\197_U\1886\169=%\197\140\171f\246a\215\179\251\231\193H\227V\133{c!u\254J\196\217)\019\251\163ri\006\n3N|\170\175\203\206W\147Hb\165\139uj\018I\176\154\193\019\1437<\184v\177[\030\220T\190\231\133\212O\230\246\244K\223\243\194\192\218m\174e\209)\137\236\\\228\186\171)\172\138\220\182\n}\170\138]\228\134\167>r\164[\235js\187\005\219\243\1760lv\199\018\219\221s\149\219\179\173>\236\232Lo\252\204UQ=\015r\181\143&NL\201\149\168\166\217\249\209p\216\214+\181O\237\136\183j\170\\\"\158oO\"\024\015zk\212\190\185\153d\210\000E\213\227\203\237\203N\243\tv\191i\174\234\187\231\216\134j\166\019\232\131\229\205\130\128\221\215\223\152>\025\1758Crf\150\214\143\183\222\147\135D\230\170\171\236\012k\202\164\147\157RGc1H\136d|\239\190\016\217\196\172\019\152\182&\150.\234\212\022\193\237\002w\024\231\181\189s\194\244\000\209\136un\183\241i8\177\168\139\1351\237\250\006N\018j1\238\193\163$\202\213\022dR\212^\r\208\220\198\179\189\166\240\212\140{HVyd\167\243\002\205\144{\131\171gu\237\224\024\241\166\026\207\023\014\146m\151\178W3\245FD\181{\183gI\019\016!\255S?\130\006jOu\222\216\219q\168\223\199\247\221\217\164P\178\216\251l\186\202\238P\130\158\166I'\225q\1917\220\245\1507\217\180w\188Q\181\137mQW6y\165\015\167\235\023q\200l\222\020\011\025*\160k\196Z\016q\190)+\234q\178b\031\164*\238\017\245\253U\030\006\135\228\154\187\028\245\180v!\003{EW\220\163\166\029\181\224\183mTQ\234\219\184\250\180GYO\135\203\"\161\228q\234\017\211:m\250\016|l\202\167\132\179\231\016kO\153\135\171Em>\150M\028\224eTy[\152\012\196/RBT\211\182\177\019\018(\221\237i\207\157i\203e#r{\151=\175s\185?\0061\168Uv\139\238Y+{\\\205`\207<4/N\175\219\180\181\189\238l\027\196d\176\205\128b\247<\195M\141y\219\142C\016\222\\\212\234j<\242\188\253a\230h\204F\214\252\190\183{\189e\143\240\247\218\204:\1756\167J\148D\228\218\222\192\243f\003&\226~\147\\'\021\145\005\208\233\180\019\237^\144\216\134\028|\144\235\236>\218\159\237\220\150\218O\163\243\165$\181\242\169\139\165$\222\169\155k\177\020<\227\171^s]N!\253\163r\238V\21503\169\023\185f^X\141\243\162\149(l\224\250\254\186a\210\205\244\202\207\">\2425\030\217\1880\233{\130c*\227\164E\187\234AtV\182\1795\127C\203\b\197\2133+\182\011\016O\028q$\151N7\151\\w\207\221\235\211\127#\249\236!o\230\130\253\233\n\253P\151\191(\230\016\197\1400n\131\147\022\175/\030\002+\167v1^A\027\223@\236 \180\167\133\250\0300\002\017\198\158Is\222\219\226\0034\022tu5\158\031\189\235n\127\246H\198d\166\135\143\175\193\228oaai\222\1816\189z\189\141\235\237\251\190\214x\177\200:\182\167C\178\226\227\214$$\220\153\023\252B\151p\023QT\189\153Y\254\145\190\014\180\136\226\181\216\227\146\214~\172x\199\167t\021QR\205\242\182\012\2392\1900:$\166\136\140\247\189k\157qSI\006>\148\171\176\247v\019\168\233@\217\128\151\205y5\205h\149\159\176\014\180\136\n^\201\213\218\236\254\235\199}[/\245J\194\163\237\029\030\146Z\216\221\217\175\242fQ\014>@\218{{>\184\254W\030\181!-ZO\221\127Q?\205:\180\021n\237\001\228\189\189\137\021_eVDMe\015*\215\246\1789\234\173Z\223\199\218L\205\143\177\240\159nY\237\251$f\153\172\136:\139:s\237\021\219J\158\155\189y\156\148\138+\253\2351\235\218\219\181?J8\169nGu\184]\2326\177\151\136??\1355\2148\179\011*\023\187m\132\210\153\143\023Y\177\143.F1\187\238\203\b\138\241\168\016\174\r\203\234\177\229a:1C\237\240\001#E,W:\131-4V\030\028\207\203\184^4\243\229z\179\183\158\221\204\188\1318\026\176\136\027\0023\157Nug\"<\216\176\136[NG\184o\137M\184\216_\212\233\177\031\150\234\011{\b\213y\188\128\146\144J\"{$\198\249\139\148\137\171\199\025\157\148\148\221\245\247\197\t\165c\197\189];\225$\179E\171\237m\157\175\025\132L\234\240v8\161!%\201\215\141c\210x\187\016\159\148\020\246<\207\207\227\198\017,\017\182\233n\253\229\157QoHa\028\\w#\029Kb\156\186VLG\168\233\236\017Z\200\222\185tf^\169\177s\131\195T\167O\201\217\165\199[\187\255\218\005t\173\174\1824\158=\148\131k\1854\170\190?\168\167\241}\028\027o6\189\223\005\221\193#F\1394\169\148=,\137\237\207\212\184\235=\255\238\139sb(\177\252~r\n%S\204\205`=\007\213\174\169X4\217A\183c\018\247\160PJ\185H\203y\150\2488\2087\216\017\167\178Zc\002f\139\233<-YcY\147\177\183\159{\145\161\211\135\180q^\247\211\208\205\170\132\r\223>\007\1545\144w\212\2468\221\187\207\164\207I.\236\161\186\231\175\000\193,\186{\bN.\1827S\143#\202n\229\215\144|2\203/\167WH<\173n'\187&\248c\\\156\163$\151.\220\166\153\024s\202\242\133\252q\216\189\217\024\219\2286q\254\190\200\138\165\135\248\224\164\197\227\252\196z\154\158\180\134\160\232\b\202\"3\243r\173\127\028\135\031\250gow\230\224S\241\139L\142']\005\n\223\011'\003\165k\179.dW\215\238\175nw\r\216w\183\203_x\139B\1455\149\003\168\1351\014\177g\223\218\253\232z\175k\234L\174\"k\031\026\030V\132\004\245\234X\202\128\185B\214\173\016\227\"GK\029\189Y\228fv>\156-g\245\229\186\220\223\160:\13204\024G\139pDr\127\134\201\195\006\"\210\2513\194\017\217c\219\205\214\207\201\031\192\173_U\172\159\024\254\170b\253\196p`\233\237\171\159v\1638\005\147\222\014ca\202\219k,\172\246v\029\011k\238U\029\223\250\194\246\014\254\214w\234\213\1477\190v\183z\2426p\225\231^}C\190\167\240S\143\000\248\153G\000\252\196#\000\025\209o\004,'z\140\128\021D_\0170A\244\018\001\179\247}\141\231@\254u\235\247\215G\149\161\201 )\188\174X\020\146D\141\251\155\023\021\142H\139\025\203\134}\223n{tM\129B\159<\1732LE\209\231\001\2232[\020m\245(\158\166\229\238\007\003\132\136v\213|X\004))\162\234\158\0167s,e'';{15\221@\"~\024\194v\232\184\2360I\143S\234\000H\250\168T\219\n|\144\202n\235=\219\147\208Y\132I\215~\218\163)\195\017&7\171\142\151\031\023\1471\232v\143\179\020o\227\r\146\211\232d\150A\015\202\152\210p]T\233sZ\005\212\250-u\229\171:\203\172\191\163R\222\219v\220\207s\030je\231|\012F-_c\011\176~\216\219\247\224Me\018:_\187\135\2432\212FW,\021\162]\202\222w\209r\024]\141k>\2445\209\133\232\030\187rw!\226eT\145\204--\tM\230{\192\245\160Eib'\019\244\030\236\249\027\195a\176\231\207!\201\212\238\247\221\127\170/|\173kQf\211\005\004v\153\213\214\017\195+N\1392\127\145|\1566o\150\243\175\196M/Ei\239\226%4\139\234\160\175g\180ZQ>\150\239\206\240n\179\194\158\143}\165B\139\210^\241\140\238/+\202z\252-\213N\182r\tYK\217\154\159\221\143H#\164\180\189%k\188\020\023\203t\2461\246\bm\176\150X\200h\220\188\130U\200\184R\007\211'v\227\b\018I\198\163#v\218\214UA\161\244q\245\000n\021\153\205\031\206\011\155xB\253Bk\140\178\152UQb\247\187I\199\162\021$S\206\170xai(l\019v\247\011e\127\234\247\190\193\210\246z\220}?\250\019{Q\000Jr\201z\188\244~\220=;\030\201sFg\015\021\178\025\247u\194M\182\133\180\247p\217\202fh\253RW\143\251\137ww\202#I3\227\190]\198\213\156\129\147U\209\172\181\177\231\134\017\162\198\230\244x\157\128\165\017!g\156\215;:\029\180P\246\162?{y8\242\143\246$l\235}(\017{\247\237\185\255=\028\175\211\219\216k3\166\218\"\132(\236\2400\237=\r\146w\174\137\1925\030\133\221j\253d\197e7\159aN\234\151\203\179O\237q\130\182\170\235\004o~(\148\221\228\n\173G\213\182\248\208\140\1646\243H\188jcR\157\195\007w\198x\161Z\171.L\212$inv&y\029\183\007\031w\253\245\178;\237\199\0129\137\1793]\1871\240\001%\165\235\200\180\241t\172\221t?(-\029\155\215\183Gh\132#\146\170\238\137\203\211\139\218\158*\177\187\203 \167l\015\209\030%z\216\141u>\211\141\149\181%n\237t\133\007\234\209Z\140U\167O1\248j\246\168\226~\223\158\245\253\200\b\156v\171\165=c\225\1944\216xG\019/VW\227\029$\195\128\006\229\250~\163\t\173\198\158W\213\195\131\233\139Z\223\175\141\029\019\232P\202\184\197w\188\239\166h\"{\128\028Z&h\226\241\183\215[\141\004\146\234\164.\023{\254\162\189\207\221\206\002\144dZ573\250\031Po5v/\214\219\155\221\020\217\236U\143\218\174\201\167]k\251\219(\139\164\138\234qr\204#e>-\2037f\250\r\247u\023\141Ij\159\135\247\190\238\199\003\146\176S\177\167`\2237m./y1\185\1343\156\1554\246\194\230/\198x\0265\222\018\197I\213\246\182\144fZ\189\219+tEM\2094\243\194\153jl\2324\180\212\\\178i\173\181LW\192\153\206\128\205\164\199s\238\140$Q\185^4f\198\135J\246\n\187\215zt\152f\129\203,\173\019cg\027\219\139f\237\229\151\246*Y\220%v\231\245\227\221\239\179Q$iKyo'\133~=\030\189n\026\n\253\222\134\011\199\246fV\232\014'\232<[\147\182B7\227\020\173\176g\152\253\196\245GE\219\218\246\249z\155\142'7kJ-|\144\173\197\214\232f\164\162\237\198S\006\204\236\029.#\234\232~\018\218\180\t\13184\173\176\199I\191\247z\143\186U'\149\241Y\187\246|C\252\213\169\025\012\204w\227\169\148\206\158\209\221X\022\132\196\242I\209\142\1523\233bu \149]\144\187\218U?\213\159M\235\194\000A\139\021\140\147.=\167^q\152\199\217]\156\220=!o\211\151\225/d\166\232w\t\179*g\011a\2412\158nfYu>\247?\241\024\217E\243Q\226H$\158\227\019>\014\235\018\179^\175/z\207G\252]:\1423z\186q\006;\139\206\204\163\155a\192I\134\238a5\140Xa\235\019\006\248:\194\250UD\130\174|\212\243_\212\173\193\20706\240\161\236\193\2518\175\210\1691(\220\217\219\233\205\162\252'\018\179\199\0126\031\183\019\025\186uM5\250E\243\241\246\185~)\017E\149\218\155\156\207a\140\027\022gz\153\004\179Ic\217Nh 6\006Xx\175\158\136\018\000\193G@\138(\005\024\187y\225\029\1292\000\026gQ\b\148\163\0152\233t\243\247\181\191 dA M\192\244\134\142\228\018\145`\145?\018\132-)\172=S\005\182\169d\145\248\169\n`\237j\216\155\130\141[\2110\252\188\134\001\166\b\216\002\224\229\182\239n\240=5@\157Lt1\\\134\211\251x\240\002\169\162\003*\238\1393\0206F\1324#vs\179\193\175\189\181\225\128\025\029\199\161\n`\139\199I\176\n\212\2461\"m\211\031\143\170\134V\018#\222^\020:\149U\196\136\182\199\254\n\189J\\@\1712\177\004\154\139\139X\2080\220\166\136\1716\147N~\157\228\128\248\153\136\169o\003\154\211\137\024\209\244\210\239\225\017A\"F\028\237\207&P\026p/\180\012\014\127\027\162\169\137\253M\232i#\r\171\003\161\017C\141\195\189\237Yx\130Hj\150<\236!\163\248\131\147\152\248\224\031<<\129.\237\206H\251\230\147\026\164\"e\027\142\198g\129x\216uIN\183\158\189Z\192d\138{\236\227\146\130\240\018\243\027\132h\018!\r\186V\139T!\134\027\218\180\253\219\025N\030\018\196p{\250)a\011\136\221{[\200I\224\016\195\239\173\245Ea\155\144\230z(BJZ\166\2478\188\222\210g\156\178\142\158]\004\168H#\222\153p*\226p\021\144WiB+A\176\148\134\225\231e\012\016M\014\210\156\001f\b\b\167\217\251\015\181\239\017J\144(\252}\136\208\007un\212\005\006\198\"\149\216\192\127\152\220\139\245H\r\194\"V\155\149\023}\236!\172\134M\170\246xR\15864\012\183\r\226\176\186\157\251S\255\134\247<\136\020\209\183\238/\135\233\140G\216\176\136\172&\207s\133\031\153E$\n~c\022\227\216\216\030\128\213\031\208{f\136\137\181Y\254\252\133@)\005\194o\153\1450\196\193\012\198\186{\148\205\019\025\162\223\128\150tE\006\199\215S\127\238\145\137d%\030\017\137CiD\134\136\247\134\191I\193D\001\236(\196\181\211\240\t\143\156\017\025\162\154\249O\248$\196\178\235\237\138*\166E\006g\198\2344\214\192\152\012!n\014\196\176K\163\237n\158\169D\005e\238D\014'\198\1705\20118\006\229\136j\247+%\016\012N\135\r\175\239\023\nPp\196\184\253`W\027\225A\162\"\135Q\234\128\138\231E\142\bgK\133\225\131\016\227\222\007\187Y\171\189\161\252\173\200\225\160w\129\007\201\139\188\132\150}\165\129\136x\245\025\158\143+rE\242\200\214!Rh8\141=\216\161\011\025x\014g\176f\249\225z;\152I\228I?\255\011)i\183(\129\174;\231&\178p\237N\228\136\167\167\179nz{\163\016\156\157\020\136\163\173Y\168\239\209\002\159(b\012\187\012{\232\018\138\132\193\193\230)\016=O\1342\029r\127E\006Q&\027\212\169\134h\213\002F\166&\209\222\195\019KDQ08\252\141\130C\162\001\188(9$\154E\023\146C\230\b\t'\167{}\168\225\228\180@T\181\219\r\198C\158\213\025vg\195`\127\170\147Y\135G\142\169h\225\004\215\172\011\161\129\161\208\208\237\194\196m\209\193,$\220$%\004\228\162\250\250A\002a\150w8\194E\017\129\168h\239\1671\203\184\208i\138\148\002\154Ek\184FTF\139\227b\2315\205\2542\\l\029\221\253\004'\230\226\031Q\198\207\243P\191\175#Y\030>\251}5\203\003V\191\175\229q\212\234\162~\212.\016S\023\017\137\210\172f\234\1827\195KmK\184\249\171\139Di\239\026\012\020}T\208\132\200\150\203\157\232!\000Y\233_\198\251\030\244~\011JUK\169q\203\145\234\199\162\220{\227\005\180Y]M\155*\174\246Z.\196\166\242q\168\177\233\203/\178xF\148\173\191\231h\144\190o\253^^f\134d\187G/\007\b\203h\217\193\180h\188\234`Z6y\237`\026\144\130\014\166Q\217\250v\183\151\014\030_\"\160}e\206(\186\183(\173\164\168\238p\210V\164X\218\ny\017\155\144\143C\246\023\031\194 d\181~\227\016\204\131'w1\178\029\025U5\167\234\254^\140\154\166z(\160\219\178]\182\229~\248m\183| Y\253\218\150\012\162\243\181%\141Q\209\227\154\178I\0129\029F\139=\015\217$\239\223\206Z\127PW\147\tu?\235.D4}8\134\000\217l\242\011\001\146\249D\245P\241b\233\025\002\228\197\139c\b\000\149S\243\217\020>\222\023\162\228\189\233\0241\245h6F\174\158\154\140\145j\158\245^\164\216\170V\139\145\213/M\196\000\186\251\135\1437\160]N\131=.\221\158U{\134\007`\139:z\180\194\022P<5\201\022Hro\159-\152t\217X[\128\217K\203mA\231\015\251\233\127\133B\138\167-\133c\196\221\174\194\017\229\195\198\194!reo\2258\245j{\225\224\250\222\128\250~tj\016\168y4\225&T;5\226&\204\163\236\127\019\168[6\228\022d\019\221[c:\239\245y\148\2144h\224\213\137&~4\200V`RmE\164\254G\157\250\227\184\169\152\196f\015\167c\175i\012\127\2283f\217\136+\170\141\000\225}P\208\167\149\207\234W\207'\006i\144K\143\028\254\206j\233,\195a\245\210\011\133\195\154\133[\tG\181\171k\164\131ZC\175)\030\254\172n\197\216`\\\027\189\1466\028\028{\031\026\242\161\237c\242v\19183\252\153\143s\0036\0033?0\232m\243g\021\011\147\157h\139\202\238}\176;\180w\161\016\241TN\006Ym\249\170\154\004\232h}\2556\025\237\235\248.\252\165\199\2439h\225\228.l'\164GF6\189\203\154\212\243i\207\189\197\227\030\242\218\158\254\196\200\230\139;\203\233\134(\150W\139\211\162b\221f\180p\185n3ZX\174\218\140\150U\2356\163\133\235U\155\145\178]\244`\172\145\178\197S\176L\168\140\162\197Q'\227\029\005\143#\250l\016\247,\026\027\127c\207\191Gj\226\2319(\127CI\178<$\229o\232I\023'\168\252\r5\153\191i\0303\132`=\185\175m6k)@\227lV$\252\173\179YO\233o\158\201J\195\213H_\235lU\162@\227l\213S\251\219f\163\154\152$\149\182G\019\217\"\011\179R\192j\"x\181I\015M\173M\170Hvm\210\004\b\182I\135\151\\\1554 bmR\002H\181I\199#\170\253\251\141\2428\224\231\2396\205c\250\253\159\208@\143c\128\254~35T3ML\221\164\175\197\141\245\rm\154l\178o(\236\168\134\219\174/Y\250\166\135G\251a\0016\130\1595\031\167\127_\222\021\186i\166Lf\231\2447\021\173\188\211\223\212\181tO\127SU\022\214T\143X\147R\149\1354U\136\162\"\176\169Bt\137\176\166\nQU\1345\213\148\232\163\020\201\144\134\226\213\168\192f\2265\213a\141\196+j\194\154\232\158\130\1604\181!m\020\160G\0076R\128\170.\172\149xMi\160\127Zfs)uA>*TY\168\159\n\213\023\232\171B\213-\253\213t\167\243\015{\156\208\164\n\129f\207\020\012Y\249\160`\212\210\219\004\131\150~e\138y[\0260\251\143 \241\149\159\bB,\253A\016`\201\251\199\189z\028ffx(b\197\229P\208\146\181\129\152l\201\207\201&C\1453\021\183\225V\172\219\006]\018l\0272{\249LR<w\190\141\020.^?\136\148\023/_A\137\231\203\030Z\156\186Ib\230\190\tE\172z%\020\180\236\143PL\182<\":\020\148/O}\014\005\021\203\147\159CAby u(\232~\243\226\253J\197@\144um\211\181\229\129\136\"\170>\237m\n\247\017e\182\138))_\171sM\227\227\021\254a!\161\232d\133^XK\168\130t\165`\182\156P|\182\194/\172(TA\238Q0\026G\168\130b\165`a]\161\n\132G\193\166O(\129\t\240H\233\237|\030\167P\183\243\208\026t8\143lPW\243\208\022u2\015\213\168{yh\135:\150\133\n\196\234\199\222WV\129\159\214\193p\200\235`\r\136\216\193\n \179\1315@j\007k\128\220\014\214\000\201\029\172\001\177{\154%\240x?\199C\209\144\233\161\n\016\223C\241\144\245\161\n \247C\021@\015\016\170\000\250\129@\005%\242\006\139\160\145W\226\247\b\155T@\175\176I\011\242\012\155\148@\239\176I\011\244\016\155\180@/\177I\011\244\020[\180H_j\133M\024\203\215\012\n\143\241&Jx\152/\031\194\163\150\161\218\1807y\206\157\244\199\r\138\230 \238o\169Y\133w\127K\2112\240\251[\138\192Z\237q\1846\246\178\193+<r\188\148\222\245\217\016 Z\147\r\193\130u\216\016\232cyh\145\2237\224\214\214\194\161*\226R\182\016d/\1787\141}F\215\135\149RS\015\028\011\192\016\178#\145\227S\001T-\169\\\015\215\235p\176\183\020Z\231\176\176\019\004\142\151=3\161w\225\232d\233E\134\211\006d\186\242\n\155\160K\142\143\149r\225\208|u\245\206X\219\022\014.\1507\001m\196\138\229\1317\190\244\146\176\181j>~\\\251\253x\b\179\2090|\134\233\144\171n\254\166\018\181\204)\159\135\227\245;J\234U\194\248\187Z\154j\233\003\195\152m\\\"\002\177\204\174\163jB=\139\024\159\003\225\187>.\230\021\b\031\187\248\165\249[\021\205\237<^\0190\015\232~U2\138\158\187\007\199\186\016[[z\208\250q\199\225\237l\166J\215\011\002\199\004\216\182\002\133M\188X$\157Ny\173\177\234\245^\148\024\246\138\025\000N\251\176)d\142\144\204\135\021\000g0\b\"^ H\178|\142_\246\174J\219\197\239\195\240\129\164\229\139\244c\160\163P\202\251\012\246#j\242a,\188\169N\253q\020\159\214p`\251>\136\247nO\161EB\186\154\1823\146B\221\244\200\241\011\225\173\1642\142\170\223\253x\172\222t\1473\190#T\198\177\189hE\127\005H&\139K`\re\207\135\225\160\225\249\1842N\171\163>\183\164\198l,\221\250\160\1751\149\241\242\194Z;\179\251Q\155O\135'\252K\187\139i0C9\169ST\239\183\1837\238\201ee\247\139\142w\162\191k{\142\n\186QB\198\246\146\230\253\222\164+\200\142Q\246\000s\187\224b\199 \171\151\018\174G\142\253\184\155f\007\175\198\144q3\r*!\162fzg/\128}W\031\240\171\245(2\181w\127l\245\175\241\244\247C\223\182\1981\220M}r\129\026\190{W\245\187\253\240S\239\190\134\219\248\145\196\206[\153,o o\236u8&\144CG\183\203\196\248\240=})\178L\146\234\168n\023=\222DD\201\217\235w\166+\147\135\227\216\201\221~\176\135\250\168\219\219;<\240\\&Y\213\158\135\129\185\196Y&\198!\127q2\247\187\149Oj\127@\"\162\186\028\181\254\205i*\151\1834\155Y\179\254\210\214\165\236&\147C(9_M\190\184\150\252\170\206\196%\2102Q>\148}\232\180\rk\188r\208\252\215}'\228\023|\231z\241\206\147i\025\0030\145\252xS\247t\255\247\190?\193\215h*\187\2443\220.\203w\031\143\156\184\204z\136\235\206e\210V\203\219\184_/e\031?e4\2240}\186\242]\182\190\2519\028\250+aP\227e,\205\199\221Z\239[\001\127\157\246C;\250z\024\207\2024\170\204\"\238\219Q\029\205dn8\160\171qd\026\155\241e\188,\160\211\186\197o\146\218{[\246\135\203\206\030\025?\188i\235\233\145hjZ\127\223\245\168s\211\204\188Z\015\207\251\144i^\153\247\181\183$]o\191t; \177\194\030\204\255n-\227\253l<\219A!sH\rQ\222\2077\248i\229\227>\236v\152n\130?_\137\0112d*\171?\205 \177'\026KU\157=\244\030\182Pm^\189\213\231\227\206X\194U]\223\247\003\236\0313\165\183\151\003\237\241<\"m\239\247\250\156\134=l\172\201y\215j\015\191\170\171\218\2412\135\157iH4\163\202l*u\140J\140?\132w\004\201,\174\236\133\030\247\153\146\249\215\229j\175#@\210f\002\189\191\143\247o{{i\003\148L\171\235\237P\219\011\tFA$\150U\151\211\000\1554\203\171\183A\237wGt\166\128\028\183\031tp\238\154\t{g\160\189\030x\188\144\198,E(\212\170\2275\246\141=\196 @VVc\176\021\"\170\170z\24855\024<IOf\198\204\236\213{\227\158\215\171\161\238\177\183\177\t\146n*\019l\141\014\1428\183Nfme^o\028\229wc\183\142\158\1440\172\204h\026\186+%\209=\174\191h\251\0118\000J\230&\190;\015\253\197,\236\163n\179'\000\254\028\026\005]Fn,\237\214\024\011\130\150\155\167\149\153\130A\211\201\179\241\134\181+|@n\166{&\160\133oX\216+\171n\250z\181UJ\216{\231\162\186WG\169=\0222\182e\002-[puR\227l\180\027\006(lo\005\189u\221H]u%\031\174*\253\134\\[^W#\245\198#\183\250=r\020\185\t\130\180:\222`p\153\183\213G\255\217w\231[\015\027K\155!\231\216\152\025)Tb|\214\237p\"<qa\166\144\246\176\202\163=\133c\248\128cR\017WW\243 3&\155l\223/$d\204\231}8\145\206\1720\0064|\238\239\019\006\194\011\021\153\177\197\211cZuF7\181\200\194\152\212`,\018]\r%\139\194F\136M3\160\195\139e!Lx\b\191\188\180\019\133\235o8\220\021&\132\185\141\199`\0314\156|\023\227\229\199\237g\143.\130\146Em/\200\177WF\019V:^+\174\186\233\128\015\216r\173\157\031\188!\014\022\246\006\208\193\222\211\tC\153\162\1794\132_lo\r\231'\127S\222e\012\203\1451\136\184\250R\159Gf\130.\018\207\227\174\026\021\225J\145.\230\146\246\178\166\1751\004\029_\234\254\159\176\159D\182\192\026V\252\180W\141?\190\232\211f\218\169Y\172\200+;\217}g\227'\179\242\223\157\249\208\196,\239\155\198\249S\161_\155\028Q\127y\187\141\1451\165FN\031\245>\236\219\233\":{\028\144i@\216/j\217\130\246\172\251G\207\"@m\204\251\140\248e\022\217\247\1706\014\0067{k\166\028f\202\136\031`\230g\2538\003\170\0078z\b;N\170\171I\209\162{\166diGIU\163\223\198\213\222\222:H\180\165\189S\187\025\206'x\192\165,\237$\236\252\129.\203\147fm\217L4\236\181\137\228s\242J+X\011.\205\162p\011\239\165\146f\177\183\134m]\142\195\226\025bee\2523\250\1651\140\225\023\249\222uU\223\236U\172f\198\130D\154\170\213p\134QZS8\247\251=\178\250\241\160\183\223\240\134/Yv\213\217\228 \006\019^\012\200\156\204:\182\137xzt\205\1634+\214\151\191n=z\132Y\156~\235\237\253\191\154j\n\179\022\253\219d\018\020)c\015\027h\223\244\251\128Fh\179\164|Q\183\243p\130\131\130Y-\190\2548k4*\155%\224\198\158\241\011g\243fi\247\195\140\023\202df\144\132\172L\127\028P\143\152uZ3\1531\1630\178)\179\024\251n\018\171\131\157\027\030n\176S\204\156\136\154\028\154%\214\179\189s\0192\207\172\163\238\135\250\130\147\171f\185\2440\216\142\133\019T{\145uo\230\2095\2340e/p5\029\134\030a\175\173\254\132\217\004{\190\152\189\156\000\142 f\149\178\029\224\252\220,D^\246\004\184\168\134+\254z\179\1548\030Vp\187\226\2473\190\225\227vD\253h\214\003\141\131\181\151\017\1947T\213\240E\244\128=\001\204,X\227\2237U\221_`\015\2199\185\134Q\159\210\149\025\012[\187\216\131\216\164:{\031m=\1651`\012g\150\237\244a\248\179\031\183\250\155P\207\228\136l\141\198;\188tO\154\133:\023a\131\197/\018\147\188`L\016\136X^\167/\210\247\213\017\226\t\246\136:\252\149v\221\0115Tm\015\007\130T\172Eu\029\176!\214\198\140\236\233\220&\249\132\012\165\150\147\200O\235\233{\212\223\181\1576w\218L\217~\226\149\205\1866C\229\249\185\206q\158.\244\132\237\216L\247U\246\191\199%c\147\198j\168\022\028\231\2107\147!\224E\237\145<F\2248\030\224\171`\030\161\238\150r\184\007\0263U1\2074i\132O;B \169\216\134I\196\\\1901\014\201^\2113.]\160woLTf\143g\178wE\227\248\174\201*3J\236\209\025\212\1781\211\223#\158\024\217\243\166L\184\222\193\184\162\017&Q\215\225\188RS\222\231\022\232\247\178\026o&j\141\t \023\214\168\17073\219\230\006=|cg0\181\189\242\221L\145\145LS\1417\"\163_\027\2273Nv\1565O\169S$\168\171\015\179D\177\231\005M$o\002?Z\168]\174\007\153\229\201\001//\183&\021\212\222\208\133x\178M\166\139\222\209\175\211\202\132\018\246\242/JGf]\253\217\238V\161\223:\127\164\151\159+\149\023\147$\234\144x\241\016\183\167W\154.:|\237\240\205\240\178\021\015q\147C=\2128\019\210\150\011\189f\1445k#\167\225\210\227\147\236ek\205\r\018\179\1811T\143\206\\\151m]\253T\135\019<\129R\182\246\016\1913\221rm\165\247\176\157\204`\168\1430\173\209v\213\239\193\180\007\250\189\142L\214\004;f\029W\247\131\143\168uw\157\152\209|?\238\252@wvHmVC\136\238\214\198\231\216\020.\1544j\155\254\129\177\142\182\245X8\025\165Ee\199\245\183\190\187\238\244\241\167\222\155\149'$Z\218\156\182n\236\253\217\208\001i\179\242\209\191]\148I8\222~\2556\030\196\164\149\224\212\2238\151\171\221\127{\197\174H\215\198&\175\231\222\230}\209X\171M4uTf\202s\179.\235\221\248\018\228\190\205Z\166\157;\224u\001\173+er\003p\130\174\187j\186\131\250\151]\1463i\007\188\198\213Ev\130\176\199cIg\215\213\224\205#\178K,\183\240\nD\151V{\179\198\132\233\215e&\022\176\228\029w'B?\216\229\227R\200~\218\171@$};\155\153\222\143r_\234\140ha\175\177\158\230+'H\157\1744\253\222\182_\187\026\167\176:is\150\208\169ufy\195,B\225\214\177'\178O/{R'\220If\178=\221\190\135\239\212\145]k[\232\136\027Z\027\0145\186?\193\151\233\170\1632\241\250\206\132~{\244\202*\138\170\163\190]\237\249#f\214c\242\231\031\208U\171(vd\255\186\193l\168\138\018G\248\0127D\169(udM,b\018\218H:s_\153\184MBE\185#}2\153O$[<N\229_\2325/~\157\242\138&a\255\245c<\207\178\2136\017|Aj\030\199\168\255M5\165\247;\191\161H\174?k\220\207xWb\242\156\1506\140\002\181R0v\251F\r\245J\131\181\133\141\n\154\149\130\201@6\170h\169\222\rS\161W*\172)mT\208\173McsW\196\209J\1937\186\"\142W\026\182wE\156\172\020|\167+\226\148bH\152\138l\165b{W\196\185\199\243mTQ\248\028\226F\029\194\227'7\170(\189\238s\163\018I{\1550%\202\227l7\170\168)\150\142u\025\183c;^\128\247\222\007:\192\184\161\204\237\155:[\186\189\190\169u\237`\204\130\134]\153$\198\228\184\243\001\168\1299\137|\bbtNb\031\128\028\162\147\196\251\025\2128\157\164>\b1X'k\007\1927U\146\251\000dS\021>\004\213T\194\007\160\155\170\244~\006\217T\210\007\161\154\202\165e@c\213~\b\217\\\141\031C5X\235\135\208M\166\193\231\144\141\214\249AD\179\165\017\229\138l\149\194\147\224\159&/\028D\2404\166\\\2097u&\180+\250\166\214\020\207\026\151\026/v\177\158u\235iFL!\191\161.\199\243\201oh+\168\201\2297\244\137P\195\t\212W\226i\2317\180I<\007\253\1346ELH\191\161\174\198\179\211ohk\168\169\2347\244\181\161\236\r\212\167\241$\246\027\218:jF\187]_\022\145\211\219o(\140\169\185\2387\244%\244\196\247\027\026\211pW\026\1681\163\166\196\223\208\151\147\190e\218\252u\215\216\153\004\171\2371FcA\026\245w4\n\166\021\191\163s\237\003\237\193\185\166\171a\146Mek/\199\203\187s$\030Q\1317\218\022\240d\rx\209\141jZ\248\254\027\021i\143\129\253\160\230}Y\231C\016\179\190\2207\177\250A\206\249r\223\188\137|\171<\241!\168\183\242%%\232\183*\162\234\151=\200\225\175~\220\168`\022~\236I\206H8^\t\031lU\224\025\165\171U\145\172\164\245^\159\222\225\022sU\164+\233\241\nu$\154\173D\205\138\248\185\031\160\222|-\172\142\199\001\190q\177\146\189\216]\143\144<\133x\nO\141\206\180]\233\136s\173'\029y\174\253\148#O\182`\237\b3m\216\184\226d+\182\1424\221\142\"\026\215G\244\180\251\018qZ\152e\195\163\2541.\139\237.\159\253\225\002\183\183+\145\216\021\"\221A]\169\173\253\130\155\139\149\176e\178\131\173\214\176]\132:\212\238\161=\155\161\218,\130\212{\184\241Z\ti\214\203\r\029m\184B\150\209*\161\204\218\1916O\1904p5Q\t\211s?\206\234\011\253\186\169\154\243\237\138\246\138\1712\170\190\134\031_\003\250u\\}\244\232nzU\218J5\179\140\249~\195\"v\147\254`\150\159\021\140\203\203\204.\208\245\205\238\019V\226\1702\183e\215\234\170\208\239m\218\2422\030k\208\154\229*\212\1452\170\236\158\030=\022\254\192%A%\227\138\216\158\163\236\129B\234\247\000\127\157V\234\023j\015\153Um\255\165v{\133v\140*i\146:\234\248'\234\018YTv\011\251U\141g-\237\015\248+De\2478\158[\184\239@\217\163x\172]\219\1941$\"\205R/tJR\217*\028[ZgoyE\149\021J\214fe\254\172?\219s\0157\236)i\247v\183-\254}[\225\019\b\148\212\166Y\206g\220+\246l\179c\139\014\244P*\170N\251\219\017n\199T*\174.\250s<\162@\235\022-\003+\149T\031G\2328\149\161\195\ro\160U\202pa\184]\236\245.h\025U\169|\2181W\159oh)_\169\162\026w\191\224\2342\165De\171\223\224\238g\165\202\234\0127\226*%\239\237M\020\164)\165\170\1905\198\209w}\163\198%t\234yue\011\172je\247e!\127fotU\135\011\242\003uT\193\221\226\1706Y_X\148\167j3Hh\r\215\247U\157\218\234\160\143\243\160\1603\173\199\154\181\235\221\189\160>\174M\184\131\135\007\187[R+\\\243\171jQ\141{\138\208\175K\243\154x\214Q\203J\031Nf\198|\132\187 U\173Fgz/\129~{C\143j\162J\025\159<\028\198\237\135\196\238\029\213\196\149\229\022Td\198\017=\216[\199\238GB \185t\174\180\134u\214\170\201f)j\211\147j\214\219\197\026{\248\007\016m\237\026\229M\215\250l\230\017\2323Z3\161\215\251\189y(\017b\181I5\236{TH\170\218\180b\138\006Ukf#\234\160\160\161\182y\213\r\199\246\006\127_TW\173N\208G\217}n\195m\220\251\186\239q\233\130jK\187+\239\b[CV\127\162])J\219\011\142\247W\186hI\233\216n8\189\177b\137[\241\191>6\192\022RQ\197VJ\175\202\188\180\254\184\215(!\241eeW\219\171\183\225h\236\159|@^\181\147c\216\155x\149\252\022\147\185\024\143)\176\135. \025q\223V\138\154\222^\185\231\156\031r?\217a\170\166\187\029j\250\244\016\213\173Ne\195G\164\168ny\000\027%\151\142\135\026L'\134Sr\217$w;\145Ry5}\214\2430+u\029\207\014\249\217kX+\175\186qP<_G\205\160\237\234\2002}\176A\138\254u5.\228G\140\004cG0A\130\137\171\017J\166\142d\138\0043W%\148\204\221\183\132\146\197\203kBQ\225\136fH\176tuBI\233\190'\148T/\239\tEk\183=\161d\243\210\160P\180}iQ(\170_\155\020\202v\142l\014\004\227\023\003\133\146/\022\n%_M\020\138\190\216(\148\204^\026\n\138\230\175\r\005e];\205\160\164x\177>(Z\190\152\031\020\149\175\246\007e\213\139\001B\209\250\213\002\161l\243j\130P\182\245\216 \020v\r\182@\130\174\181\198H2q\2055\129\146\241\203\155BQ\215^S(\153\1904+\020}\181W(\234\177W(\251b\175P\242\213^\161h\249j\132PV\190\024!\020U\175F\be\235W#\132\178\141\199\b\161\176k\1779\148|\241\175X\180{\241\133H4\141^\157!\148\141_\188!\020}\241\177\132l\250\234:\161l\230\241\157P8\127q\158P\180x\245\158PV\188\186O(\2351],\252j\187X\214c\188X\216c\189X\184\169\1983\152\198ssw\019\2389\239\159~s?\155o\020\184\014\247\03166/\166\145\210\246{J\207xGP\157jB\231m\\8\251\198\139v\223SJ\189\168\189\184\139\209\185\225\r\205\"\252\226\145A\1758\253\144\214\154|S+\249\225)\165\212\219\237!\175\154}S+\249\1709\175t\203;\022\223|\199\251\015\201W\021\188\238\233\229f\139\nQ[\134\183@\184R\185\229]\195\155@m\237\173\016\165\245\246w%\2455,\237\191\243\233m\1763\t\215\1697\188ix\223w\027\221^\128\206<\218\252\166\164\186\248{\222>\228M\147ja\"\255Y\227h\158~S+\249\170\025\165\244\187#i\158\127S+\249\170\005\175t\203;\138j\129\249O\026J\243\242{J\201\239\150\132\206\239\014\164\185\250\158R\242EkV\231\1507l\190\247\134!\252lY\213\223\240y\185\014\254\252p\157\221\1347\r\254\254\"\218\216Q!:\227\205oJ\170Kx\178\127\231\203\211p\031\018\1744\219\242\174\193}_\228[\253]\136\210b\251\187\146\250\1967=}\200\187>\156\169]\204\153\244\219\127M\248\233\022\166\219^\157\239[R\237\165\208W{\\\252\248\014H\165\156.\147\152\245\204\186\191\169Q-^\210\209\253M\141\245\252\142\238\247\127S\227t\025\246\018mK\220\238X\026\250p\149\223\193\222o\199\254\022\2461\129\252\006VD\149Y\b\189\142\139\245\227\225\244\246%\222'\b\\\188\0181\001B\235C\"!@h\001D\164\004\b%\172EF\128P:G\228\004H \144Y<\180G=\r\199\235\166\246\019$\012\182`I\194`\027J\018\006[Q\1450\216\1425\t\131-\217\184\206\198\133\"`\235z\128P\224\131q\219\145]\229z\216@d\025-\029\224&dL6\171I\027\151\b\249\152\029\132\186\132\2421\238O^sz\014\2374\203\199\168>\214\219\005!\242\213C\130\\s\249\024\143/\211\185\185!\143\185\223p\022\254\241\229\195\015\135\127\252\253\022\179\r\031\175V\015\t\251\248\251\re[>\190Y\220\006u\191\176w\188\223\r\201\183\247G\004\003\030\179\248`\192c\164\n\005\200\168\234\143\198/_t\144t\188|\159i~53m\252\225\022m\201R\155\015\232*\167:C.\239\015\131\202\022\237O*\203\237\217}\246\164\168]=\140\247d\245h\187e-\139g\019\134c\196\253\222\199\133\207\161\196W\145\252z.L\226\228jB\252\004\142j(\156zq\163\139\169\015\223z\139I\227\203\164\139G\175b\237\0052\196\164\218\245\007o\003\235U\222u#x\149d\220\134U\145\189\237b\215\158\149\221\233|\217\237\199\231\195@h\017\194 \133\241w\020R\225\143JH\141\219\179rvO6\175\208\177[Zc\246\221V\012}@\254\237V\r}B\241\221V\014\237F\177\229\001\223\177\147\242\219\157\176\184lmS\155\201\239\247\202\226\145[\236@\253\167\217A \157\235\255,\203\014\237\197\230?\203LB\155\180\221\228\r\254\019\184\172\201\007\154\127\028\006\180\017\182V\157\015\188\024\202\199-\192\207h\247r=\015\232x\223\250q\195\236x\193\163\025$N\182\142\193\238\175E\027j\235:^\2077v\007x\025@]'\139I\209\2496]\\\0077\241\215u\186\156\160\006\200g\207W\241^\214}\237O\187\231Fe\164#\127\185\152|\157l\218\020\198\213\197\235\149\227\127G\157x\185\133|\158\212\132\234(\157\235\211\183k\144\139^\236\198\147{\145\164Zv -ZW?\135\222\158\238k\139\184?\166\173\233H\182yDyv\159\255\197\198S\006\007\175\136\173k[C\254\166\174\227\2250\015N\145\015\208\030\1927\252H\221y\244\208dn\162\249\150\218\159\182\156n\127\181g\164\142\246{\030nG\219B\246\178\015x?]m\235lF\2073^n6)\155^\250\185Q~\2207\143\224Iu\255\210\239*H\159\209\238\247\240\217\220h\143\190\253\235f\011;\135#\229\\\026\147\217\026/H\235\250\183\027\236\146\166XIM\r\171\206\135\011y?g\221\1365l\175\213\232\140\136a\178)\253\016j\164k\164\231\237\218\179\134\150\218<\142\176\188\157~<[\215\248\225\159\231\001y\201.\170.\250\237`\236\214\146\166\127\235\175\187\223\246`\253\227\1273\210\250X\253\195\127\255\215\127\249\143\255\178\139\1624\170\166?\011l\252\130\181\197\133\175\208\184\154\254,\160\201\011\244\250\233{jRM\127\022\208\244\021j3)\030pZM\127\022\224\236\005l\239\254\246`\179j\250\179\192\230\175X[\182\245\138\205\171\233\207\002[\188`/\253/\015\180\168\166?\011\168x\133\218,\144\007,\170\233\207\002\\\190\128G\159\238\001\151\213\244g\001\150/`{\184\134\007+\171\233\207\029\155D\230\127\170\127h\254\252\216\245\255\237\159\254\245\255\250\183\127\252_\255\247N\255\191\255\241O\255\242\239\255\252\175\255\178\171\255\143]\247\207\255\246\239\255\241_\170\189\181\201\253\210$\019U\180\029\t\221\255#B\n\234\161\r\245P\179\212P\146P\248P\179\222@<\180%\031Z\198-\t\197\015-\019\226\161\154zh\163M\252MA\225C\027]\019\015\237\168\135\234Z\211P\248\208\1744}j\129\227\225\226\215\190\182u\238_;35\024\222\206\234\244\254c\146\184#3\157\182\014:f\209\241\002]:\232\132E'3:\139\029t\202\162\211\007:\137\226$q\224\025\011\207\158\015\239\138\200A\231,:\159\209&\226X\163\011\022]\204h3[[\163\005\139\022\015t\030E\238w\151,\186\156\209f\161j\141\150,Z\206h\147\131\\\163\021\139V3Z\011\007]\179\232zF7\157\131nXt\243@\167\153t{\172e\209\237llE\2346\155f\225\250\249\234q\230\178\172c\209\221\140\206\1795:f\025\030G3\186p\209,\195\227xF\011\167\203b\150\225q27[\0307\014\156\165x\156\206}V;\214\022\179\012\143\179\197\135\187\175\2062<\206gt\233tY\2042<.\022\031\1589\020\143Y\138\1993\197c\233\190:K\241x\166x\172\220\030g)\030\203\217+7n\151\177\020\143\213\226\217.\154\165x<S<6\233\1315\154\165x\252\164x\"\227\214\241\0161\203\241\184\157\031\222\185\015g)\030\207\020O\204\208\180F\179\020\143\187\217\210\2217OX\138'3\197\147\2121\182\132\165x2S\220V\189\173\209,\197\147dF\011g4JX\134'\233\002\237\024z\1942<y2<5\158\209A\179\012Of\134'\141\251l\150\225I\177@;\190)a\t\158\204\004O\180C\209\132%x2\019<\233\156\193(a\t\158\204cx\026\185\173\198\018<Q\011\180k-,\193\147\153\224i\236\1829K\240\164\153\209\153\219\230,\191\147\153\223\198\\\0284\203\239D/\208n\155\179\252N\230!<\021\142wHY~\167\209\002\237\140E)\203\2394^\160\029\223\146\178\252N\019\002\205\242;M\t4\203\2394\155GQ{v\248\026\206\018<}\018\\D\194\153\226\167,\193\211\153\224i\227tx\202\018<\157\t\158\186\014=e\t\158\150\243\135\219\221\196k8\203\240t\193p\237\140\007)\203\240t\193\240\206\225I\2022<\157\025\158\185\254!e\025\158\206\012\127\153\165\167,\195\211\153\225\153\027\142\166,\195\211\153\225Y\230\162Y\134\1673\195\179\194Ag,\195\179\153\225\153rF\209\140ex63\220\004\179\014\154ex63<\143\029\154d,\195\179\153\225y\238Xj\1982<\155\231\232\185k\231\025K\240l\030\193\243\210\025E3\150\224YA\160Y\130g3\193s7\018\206X\130g\243\b\158+\135\161\025\203\239l\230w^\187\173\198\242;\155\249\1577\174\173\177\252\206f~\139\216\1815\150\223\217\204\239\194\245\014\025\203\239\172]<\219\153=d,\191\179\153\223\133;\254g,\191\179\153\223\133p\172%g\249\157/f\232\145\243\2309\203\239|\230w\169\029\175\152\179\252\206g~\139\198E\179\252\206g~\139\206\253n\150\223\249\204o\155CY\163Y~\2313\191E\233\176$g\249\157\207\252\182\179\1525\154\229w.\022h\199Zr\150\223\249\204\239\210\r\131s\150\223\249\147\223I\156\185\225A\206\018<\159\t^v\238\135\179\004\207\235\005\2185U\150\224\249Lp\233\018<g\t\158\207\004\151\1773\231\202Y\130\2313\193\165\155\016\206Y\130\2313\193e\225\160\011\150\224E4wY\161\156\241\191`\025^\196\011\184v\190\188`)^\204\020\183\215\142\174\209,\197\139\153\226\246r\1735\154\165x1S\220\222n\180F\179\020/f\138\219\139~\215h\150\226\197Lq{\184\248\026\205R\188xR<-\\\183Z\176\020/\202\025\221\185m\206R\188\152\135p{\172\219\026\2052\188\152\025n\015)Y\163Y\134\0235\129f\025^\204Y\182\216^\252\189\134\179\020/f\138\219\253\rk4K\241b\166x\253b.,\197\139\153\226\181\187\254 X\138\139y\012\183\235\232k4\203p\177`\184=\031m\rg\025.\146\197\195\157xR\176\012\0233\195\027\215+\011\150\225bfx\231N\241\005\203p13\188q\189\178`\025.\158\012OE\233\012\195\130e\184\152\007\241\198]\228\019,\195E\185@;<\017,\195\197\204\240\166q\159\2052\\\204\012o\220\229\007\1932\\\212\179\177\181\238\004B\176\020\023\243 \222fn\135\179\012\023\237\242\225\174\181\177\020\0233\197\219\151Vg).\186\005\218\025\203J\150\226\229L\241V8>\189d)^\206\211\244V;\182Z\178\012/\147\005\218\225I\2012\188\156\151\202l\178q\141f\025^\206\012o;\199\218J\150\225\229\204p\1578\158\173d\025^\206c\248\203\014\132\146ex93\\\023N\024^\178\012/\2311\188t\231|%\203\240r\158\166'q\233\240\164d)^\170\249\225/\198\198R\188\156\007q\187\183d\141f\025^6\011\180\251\230,\195\203v\129v\b^\178\004/g\130k7\177Z\178\004/\159\004OT*\157>\147,\195\229\204p\221Y\239\"\151p\150\226r\030\197\147\212\r\011%\203q\153Pp\150\228\242Ir\179\228\231\162Y\146\203\1970\238\014\196\146%\185\204\t4Kr9\015\227\165\187\214&Y\146\203'\201\1474\169\029\015#Y\150\2039\155^\196\173cq\146\165\185\156\007\242\206u\018\146e\185T\011\1803 I\150\229\178\158\219M;<\149,\203\229\204\242N\186\223\205\178\\\206,\239\026\1991K\150\229rfy\215\186=\206\178\\\206\195x\2159n]\177$WO\146\023\145;iT,\199\213\147\227\169t\183\250(\150\226*\153\209\238\142\023\1972\\\165\243\155Kg\222\166X\134\171y\189,)Z\023\206R\\\229\243\195]\146*\150\226\234I\241\"v\151O\020Kq%\022h\183\217X\134\171r\129v\230\140\138%\184\146\196\179Y\130+5\163\221\ru\138%\184\170gt\233\1909Kp\213\204\232\218qM\138%\184jg\180\187OH\177\004Wz\129vf\156\138%\184\234ft\235|w\205\018\188\158\t\030\187\025\206\154%x\029/\208\206\244\165f\t^?\t^$\238rY\205\018\188N\023hg8\168Y\130\215\217\140\206\029\151\\\179\252\174g~'\181\227\022k\150\223\245\204\239\196\245-5\203\239z\230w\154\187\173\198\242\187\158G\240\196^.\176\134\179\004\175g\130\167n\136Q\179\004\175g\130'n\162\175f\t^\207\004O\221u\225\154%x=\019<u#\140\154%x=\019<u\179\0005K\240Z/\026\221\221\bP\179\012\175g\134g\238\132\177a\025\222\204\012O\027g\147R\1952\188\153\025\158*g\250\208\176\012o\230!\220\222$\191F\179\012of\134gnD\218\176\012of\134g\194}6\203\240ffx&\029CoX\1347\197\226\217\206\248\223\176\012o\230l\186\189\208r\141f\025\222\204#x\1589\163I\195\018\188\153\t\158\191<\155%x\163\230\240\"\138\156!\188a\025\222\204\012\207\2219z\1952\188\153\025^t\142\127hX\13473\195\011wG\\\1952\188y2<\181\247p\172\209,\193\155\153\224\133t\220C\203\018\188\141\230g\187\011 -K\240v\158\163+\215\179\181,\193\2199\213\022\187)\132\150%x\155.\208\142kjY\130\1833\193m\201\213\026\205\018\188\205\023m\238\024z\203\018\188}\018\188\140\148\227\030Z\150\224\237\147\224Y\218:\214\210\178\004og\130\191\236\221hY\130\183r\129v\166M-K\240v\030\193E\226Z*\203\239v\230\183\200\029\151\220\178\252n\155\005\218\241\014-\203\239v\206\165\167\169\187\\\214\178\004o\023\004w\221C\203\018\188\157\t.\220m\198\154%\184\158GpQ:4\209,\193\245<\130\219\r,k4Kp=\207\209\203\151g\179\004\215seY\154\021\014O4\203p\157-\030\238\216\139f\025\174g\134\219\170\1285\154e\184\158\135p\025;~Q\179\012\215\243\016^\187\211\007\2052\\\207\012\151\153\219e,\195\245\204p\169\028C\215,\195\245\204p\233n\159\208,\195\245\204p\229\238\221\208,\195\245\188 \158\022/\175\206R\\\207C\184j\029\215\166Y\134\235\153\225\141\187\170\172Y\134\235\153\225\181\235\024;\150\225]4\127\184M\224\172\225,\197\187\153\226\181[\214\214\177\020\239\230Iz\227\166|:\150\226\221<I\175\221\170\149\142ex73\220\030\015\182F\179\012\239f\134\219c=\214h\150\225]\177@;\230\210\177\012\239\022\153t\229\174+w,\197\187r\177\180\027\185Og9\222\201\197\211\221\017\165cI\222\205$\127\237r\150\228\221\188&\1586\1813w\234X\150w\2438\222\212n\159\179$\239f\1467n.\189cI\222\205\169\182\198\173d\236X\146w3\201[g\199\174d\011\196\229\\ ^\180\206f!\201\022\136\203\185@\188h\157\144R\178\005\226r.\0167\217\236\216A\167,z\230x\235\004\226\146\173\015\151s}\184y\243\210A\231,z\230x\235L@$[\031.\231\250\240$mc\183\209\005\011\023\139.\203\028t\201\162\231a\\;;\t$[ .\231\002\241B\023\238\155+\022=/\137\183i\234\160k\022=\015\227\186\169\029t\195\162\155\005\2185\213\150E/&\234\186umU\179\240\153\225m\231\218j\199\162g\134wn\163\179\005\2262^\012\227]\238\194Y\138\207\021\226\006^\186p\150\227s\137x\2095\142wb+\196\229\\!.\236A*k4\203\241\185B\\D.\205\216\nq\025/\202\203\156\152T\178\021\226r\174\0167\193\180\251\221,\197\231\002q\017e\202A\179\020\159\011\196E\228\212\019J\182@\\\206\005\226\006\237\016\133-\016\151s\129\184ps\016\146-\016\151s\129x\018\229\137\227X\217\nq9W\136\011{y\237\026\205r|.\016O\178\196\169V\146l\133\184\156+\196E\236\228n$[!.\231\n\241$K\157\146!\201\150\136\203\185D\\$\206\030-\201\150\136\203\185D\\\216\155\132\215h\150\226s\137\184H\156\181\031\201\150\136\203\185D<\201\138\200}u\150\227s\141\184HJ\247\225,\199\231\026q\145H\247\195Y\142\2075\226I&^\218\141%\249\\$\158d\165\019\205K\182J\\\206U\226\"u\022\166%[%.\231*q\145\150\174\185\177,\159\171\196S\237\212\191H\182J\\\206U\226\"Un\179\177$\159\171\196S]\187\246\194\146|\174\018\247\160Y\142\207U\226\"\203\028\223\200V\137\203\185J\\d\185\211jl\149\184\156\171\196E&\156\025\b[%.\231*q\145\1853V\182J\\\206U\226\"s\246\244I\182J\\\206U\226i\231\142\164l\149\184\156\171\196E\1588,a\139\196\229\\$\158dM\234\012\196l\149\184\156\171\196Mv\215\153B\176U\2262]0\188qV\"$[&.\2312q\145;\005\238\146\173\018\151\233r\251\170\147\198\144l\153\184\156\203\196E\017\187\015g)>\151\137'Y\167\\ke9>\215\137\027\184KS\182P\\\206\133\226f@\202\\\155aY>W\138\167]\231\242\148e\249\\)\158E\238x\198V\138\203\185R\\\020N=\166d+\197\229\\)n>\220)b\145l\169\184\156K\197-\220\177W\182V\\\206\181\226I\030;\011\142\146-\022\151s\177\184\129\187\225![-.\231jq!\220\217>[-.\231jq\131v\200\194V\139\203\185Z\220\131fy>W\139\011\225\206\246\217jq9W\139g/1\018[-.\231jq\225\214\224J\182Z\\\206\213\226Y\228\156-$\217jq9W\139g\145\027#\177\213\2262[\144<\139\157P\131-\023\151s\185\184(3\215\\X\146\207\229\226\194n\182_\161\217rq9\151\139\139\178q\209,\201\231r\241,r6$H\182\\\\\230\011\142\023\137\211\234l\189\184\156\235\197\133\204]4K\241|A\241\194\217\178,\217\130q9\023\140\027\184\179mH\178\021\227r\174\024\023\178tX\202V\140\203\185b\\H\231\212\021\201V\140\203\185b<\139\221\180\027[1.\231\138q\1612g0f\011\198\229\\0n\208n\163\179\028\159\011\198\r\218}s\150\227s\193x\146K\225\218:K\242|Ar\229\172AI\182d\\\206%\227>8\203\242\185f\\(\167\130X\1785\227r\174\025\207\018\231 O\201\150\140\203E\201x^\187\t\001\182d\\\206%\227\162v\243nl\201\184\156K\198E\237\156~&\217\146q9\151\140g\137S2.\217\146qY,H\222\184!=[3.\231\154q\209\180n\171\179$\159k\198\179D\185\207fI>\215\140\139F;S?\182f\\\2065\227\006\237\248u\182f\\\2065\227\162\141\2207gI>\215\140'yW\186\246\194\178|.\026\023\173\1559ck\198\229\\3\158\165N\221\147dk\198\229\\3.Z7\177\207\214\140\203\185f\\h\151\164l\205\184\156k\198\133v\019\142l\205\184\156k\198\179\212]\200aK\198\229\\2\158\020/9?\182f\\\2065\227\006\238\2302\216\162q9\023\141gi\238x\b\182h\\\206E\227\230\225\173\011g9>W\141\139\206M}\177U\227r\174\0267Y^7\168g\203\198\229\\6.:7g\200\150\141\203\185l\\t\157\251\234,\201\231\178\2412\138\220g\179$_\148\141\023Y\235>\156%\249\\6\158\020y\226\176\156\173\027\151s\221x\0259\197\250\146-\027\151s\217\184y\184r\173\157\165\249\\7^\186g\005J\182n\\\150\139%\1804w\230@l\225\184,\023<o\157^c\011\199\229\\8^FN\017\144d\011\199\229\\8^\198\206\185\181\146-\028\151s\225x\1509\251A$[8.\231\194\2412vy\198\022\142\203E\225\184\170\221VcI^.H.\220\153\031[9.\203EM\169xy:\203\242E\233x\154J\183\217Y\154\151j\tw&\205l\237\184\156k\199_\234\136%[;.\231\218q\131vF%\182v\\\206\181\227e'\221>gY>\215\142gY\225\218\027K\242\185v\188L\156\029\235\146-\029\151s\233x\153\184\153\016\182r\\\206\149\227\230\217N2\130-\028\151rq\202\178S\175/\217\186q\185\172\027\175\221\239f9>\215\141\151\175\207f9>\215\141\027\180\251\221,\199\231\186\2412q\142\018\145l\221\184\\\212\141\023u\234\208\132\173\027\151s\221\184y\184Cq\182l\\\206e\227e\234f\159\216\178q9\151\141\151\169;af\203\198\229\\6^\166\238\";[6.\231\178\2412u\135q\182l\\\206e\227e\250\210\225,\193\231\178\2412u\142h\146l\217\184\156\203\198\203,w\208l\217\184\156\203\198\203\212\217\170/\217\178q9\151\141\151\238y\193\146-\027\151s\217\184A;\150\202\150\141\203\185l\188L[\023\205\018|Q6^\188,\129\177e\227R-\230\234\238\153;\146\173\027\151s\221\184y\186;\251a\011\199\229\\8\158\025\215\232\160Y\138\207\133\227e\230\1488J\182p\\\206\133\227\006\237\026\012K\241\185p\188\204\221}\153l\225\184\156\011\199\019\241jo,\199\231\202\2412wn\005\145l\229\184\156+\199\147\162K\\\131cI>\151\142g\185S\198,\217\210q9\151\142gy\225\244\025[:.\231\210q\243\234\238`\200\214\142\203\185v<\017\145\155>b\139\199\229\\<n\222\221\177V\182x\\\206\197\227e\225n\164a\139\199\229\\<n\208N\159\177\197\227r.\030/\011g\015\178d\139\199\229\\<n\208N8\207\022\143\203\185x\188,\148\139f9>\023\143\151E\233\004\134l\237\184\156k\199K\0179\243U\182v\\\206\181\227e\161]ka9>\215\142\151B\184\223\205R|\174\029/\133\155\254ak\199\229\\;^\138\023Ke\025>\215\142\151\194\205\022\178\165\227\178^0\2209;F\178\165\227r.\029/\133s\012\155dK\199\229\\:^\150nl\196\150\142\203f\193ow\031/[:.\231\210\241\178t3 l\233\184\156K\199\203\210\1572\178\165\227r.\029O\196\011\193\217\218q9\215\142\151\229K\151\177\004\159k\199\203\2109\rD\178\181\227r\174\029\207\nw\151\029[;.\231\218\241\178t\019nl\237\184\156k\199\211\204)\199\145l\233\184l\022\131x\169\220\015g\025>\215\142'B:\231\223J\182x\\\206\197\227&\150v\031\206R|.\030\207\n7\173\206\022\143\203\185x\188T\238:\n[<.\231\226q\211j\206\004\130-\030\151s\241xY\151N\143\179\197\227r.\030/\155\220\1776\182x\\\206\197\227\137h\2204%[=.\231\234\241\178q\215\252\216\234q9W\143\151M\227\2486\182z\\.\170\199[w\151\030[=.\231\234\241\242\165\018\136\173\030\151s\245x\":wy\156-\031\151s\249x\018\149n\206\138\173\031\151s\253x\217\186\133%l\253\184\156\235\199\203\214\169;\147l\253\184\156\235\199\203\182s\137\194R|Q?\030\189xV\182~\\\206\245\227\165n\221fc9>\215\143\151\157s\029\139d\235\199\229\\?\158\148\185;\211f\011\200\229\\@n\224\174\143`+\200\229\\A.\221\131\216$[A.\231\nr\025\185a%[@.\231\002r\025\199.\154%\249\\@\158\152y\159\211\229l\005\185\156+\200\205\195\029[g+\200\229\\A.\147\151.gY>W\144\203\196\157D\176\021\228r\174 7h\247\217,\199\231\nr\153\184\219P\216\nr9W\144\203\212\157\247\177\021\228r\174 \151\153s\143\157d\011\200\229\\@n\210\210\238\012\134\173 \151s\005\185\204\221\1806[A.\231\n\242L\186\139\157l\005\185\156+\200e^;\029\206\022\144\203nA\241\1511\133\173 \151s\005y&\221\2202[A.\231\nrY8\007sH\182\130\\v\139\003\151\2215;\182\130\\\206\021\228f\145\223}6\203\240\185\130\220,\130\184\155\018\216\018r\185(!\151\137sI\135dK\200\229\\B\158)\183V\145\173 \151s\005y\166\132\219g,\199\231\002r\179\\\236\140\165l\001\185\\\020\144\203,r?\156%\249\\@\158\169\151.gI>\023\144\155\135\187{a\217\nr9W\144\203\210]\167e+\200\229\\A\254\130Vl\005\185\154+\200\165\189{r\141\142Y\244Lr\227#\n\007\158\176\240y\028/\157\004\140bK\200\213\\B\158\213\206\134s\197\150\144\171\185\132\\\202\151\015\207Y\244Lr\233\172O+\182\132\\\205%\228R6\238w\011\022=\015\227\178\211\014\186d\2093\197\235\198EK\022=\207\213M\1943r\224\138\133\207\028\175c\247\195k\022=\143\227M\230>\187a\209\2438\2228\199\232+\182\132\\\205%\228Y\243\210l\154E\207\225x\163\221gw,zfx\235$\127\020[A\174\022\021\228\166\r\156Wg+\200\213\\A\1585\206\017x\138- W\139;\198\205\139\228\014\156\165\248\\A\158\168$r\223\157\229\248\\Bn\224\206\158\002\197\214\144\171\185\134\220L!\029\207\202\214\144\171\185\134<k\157\189\246\138\173!Ws\r\185\153\1979\238\137\173!Ws\r\185\212\174\139`k\200\213\\Cn\230\128n\159\177\028\159k\200\r\186s\208,\199\231\026r3\131t[\141\229\248\\Bn\166\128n\143\177\028_\148\144\171b\181\0117\141\204\255T\255`\241\253\127\251\167\127\253\191\254\237\031\255\215\255\189\211\255\239\127\252\211\191\252\251?\255\235\191\236\222\254\143]\247\207\255\246\239\255\241_\030\248%4N3EB\247\255\232Gj\243LC>u|\187\1697\189\187\170\183\170\249\239F\168>:RIT\153_\238.'e\019\131~\145x\020\209\191\154\189:\152\207\031\142\187\131:\127 \233d\148\254\2356\\y\217t\148=\222\014\181>\239.\253\219\017\tf\163`;\236\247\138\022\204G\193\147>7\250x%%\139QR\029\140\236E\029[$&&\177\211p\185\158\135\211;l\164r\148\219\235\238\186;\169\179y\248\187\190\244\023$-G\233s\255\246\030$\174\166\151\184\\\245\185\191\192\214\172\167o\223\223.\228\1357\163\152\177\229\131B\"\237(\242\254e\190\247\248\227\208\031o\240\205\244(\217\221\246\251\221\229:\156\144X7Y\217\176\239[\168+\157L\177\237\223\250\235\238\183>\015H.^\200\rG\212#i\178\016\187~Bm\233R\236\253\172\161\190l!\216\r\1833\146\203\151r\253O\168\175X\200]\250_HL,\197\244O\141\2505-\023\130\218Z\022\018\148\011\193c\143\027P\221\re?\192gN&w\209\135\158\020k\238\228\184\\~\\\223\213\1452\207t\178=\253\215M\237I;N'\211{;keh\193\235\237\238~I_8\183\148EO\134\024?\210\171\253N\161\182\204&[\220\027Ww\2205\234\212_\141\244^_\205\027\237\016\187\178\004cj\132I1\166A\152\012c\144\187\203r\140Av\146\021\024\211!\140\192\0244Te%\198\188#\140\196\152\030a\020\198\252\13705\198@3k0f\1430-\198\028\016Fc\012bK\214a\012\242\164y\1321h`\200\t\254\252\1330\004\127\144S\206\t\254\160\241('\248\131\252AN\240\231\1340\004\127~\"\012\193\159O\132!\248\131F\159\156\224\207\023\194\016\252\249\1410\245<}\186\024\215\127\214\187\250\172\154\015\r\027z\"\207\217\012\136\231\139ff\022y\187\152n\133\169\1598\211\244\231\230v\232\246\250\215N5vF\137\196\239t\025>w{<\160\022\209}\196R?5\173\175X\210\226rP{vP)\018\132@CJ\145\"\004\026P\138\012!\208pR\228\b\001\219\168@\b4\148\020\002!\208@R\148\b\129\134\145B\"\004\026D\n\133\016h\b)j\132@\003H\209 \004\026>\138\022!\208\224Qh\132@CG\209!\004\0268D\132\016h\216\016\144\031h\208\016\144\031h\200\016\144\031\200\205\b\200\015\196s\001\249\129\006\011\001\249\129\134\n\001\249\129\006\n\001\249\129\134\t\001\249\129\006\t\001\249\129\134\b\177\024\"\154\219y\255\197\184p1\177\195\140\015\215\190\177#\016v\204b9>\004\233\158Xq\237\247-\212i\252\149:6z\143\147/\177\201\011\253T\231~\202\147\\\244^7\215\225\252\195\164\239\014\255b\196\143\151\131+\031{\229K(\159x\229%\148O}\242&E\132\2283\175|\012\229s\175|\002\229\011\175|\n\229\133W>\131\242\165W>\135\242\210+_@y\229\149\199\253[{\229q\2556^y\220\191\173O>\197\253\171\189\242\184\127;\175<\236\223\216k\255)\236\223\216k\255)\236\223\216k\255)\236\223\216k\255)\236\223\216k\255)\236\223\216k\255)\236\223\216k\255)\236\223\216k\255\025\236\223\216k\255\025\236\223\216k\255\025\238_\175\253g\184\127\189\246\159\225\254\245\218\127\134\251\215k\255\025\238_\175\253g\184\127\189\246\159\193\254M\188\246\159\193\254M\188\246\159\195\254M\188\246\159\195\254M\188\246\159\195\254M\188\246\159\195\254M\188\246\159\195\254M\188\246\159\195\254M\188\246\159\195\254M\188\246\159\195\254M\188\246\159\227\254\245\218\127\142\251\215k\255\005\238_\175\253\023\184\127\189\246_\224\254\245\218\127\129\251\215k\255\005\236\223\212k\255\005\236\223\212k\255\005\236\223\212k\255\005\236\223\212k\255\005\236\223\212k\255\005\236\223\212k\255\002\246o\234\181\127\001\2517\245\218\191\128\253\155z\237_\192\254M\189\246/p\255z\237_\224\254\245\218\191\192\253\235\181\127\129\251\215k\255\002\247\175\215\254\005\238_\175\253\151\176\1273\175\253\151\176\1273\175\253\151\176\1273\175\253\151\176\1273\175\253\151\176\1273\175\253\151\176\1273\175\253\151\176\1273\175\253\151\176\1273\175\253\151\176\1273\175\253\151\176\1273\175\253K\220\191^\251\151\184\127\189\246/q\255z\237_\226\254\245\218\191\196\253\235\181\127\137\251\215k\255\018\246o\238\181\127\t\2517\247\218\191\132\253\155{\237_\194\254\205\189\246o\195t\004\200\252\000\216\195y\238\007\192.\206\011?\000\246q.\252\000\216\201y\233\007\192^\206\165\031\128\187Y\249\001\184\159k?\000wt\227\007\224\158\2462\193\006\164\b\160\253\000\220\211\157\031\000{\186\240'\131b\216\211\133?\027\020\195\158.\252\233\160\024\246t\225\231C\012{\186\240\243\001g\180\n?\031pJ\171\240\243\001\231\180\n?\031pR\171\240\243\001g\181\n?\031pZ\171\240\243\001\231\181\n?\031pb\171\240\243\001g\182\n?\031pj\171\240\243\001\231\182\n?\031prK\248\249\128\179[\194\207\007\156\222\018~>\224\252\150\240\243\001'\184\132\159\0158\195%\252|\192).\225\231\003\206q\t?\031p\146K\248\249\128\179\\\194\207\007\156\230\018~>\224<\151\240\243\001'\186\132\159\0158\211%\252|\192\169.\225\231\003\206u\t?\031p\178\171\244\243\001g\187J?\031p\186\171\244\243\001\231\187J?\031p\194\171\244\243\001g\188J?\031p\202\171\244\243\001\231\188J?\031p\210\171\244\243\001g\189J?\031p\218\171\244\243\001\231\189J?\031p\226\171\244\243\001g\190J?\031p\234\171\244\243\001\231\190J?\031p\242K\250\249\128\179_\210\207\007\156\254\146~>\224\252\151\244\243\001'\192\164\159\0158\003&\253|\192)0\233\231\003\206\129I?\031p\018L\250\249\128\179`\210\207\007\156\006\147~>\224<\152\244\243\001'\194\164\159\0158\019&\253|\192\1690\233\231\003\206\133I?\031p2L\129\197d\216\211\202\207\007\156\014S~>\224|\152\242\243\001'\196\148\159\0158#\166\252|\192)1\229\231\003\206\137)?\031pRL\249\249\128\179b\202\207\007\156\022S~>\224\188\152\242\243\001'\198\148\159\01583\166\252|\192\1691\229\231\003\206\141)?\031pr\172\246\243\001g\199j?\031pz\172\006\219+`O\215~>\224\004Y\237\231\003\206\144\213~>\224\020Y\237\231\003\206\145\213\254=\0228GV\2517Y\224\028Y\237\223e\129sd\181\127\155\005\206\145\213\254}\0228GV\2517Z\224\028Y\221\250\001\184\167\181\031\128{\186\243\003`O7\145\031\000{\186\241\242!\1939\178&\241\003`O7\254\253F8G\214\128\rG\176\167\027\255\142#\156#k\252[\142p\142\172\241\243\001\231\200\026?\031p\142\172\241\243\001\231\200\026?\031p\142\172\241\243\001\231\200\026?\031p\142\172\241\243\001\231\200\026?\031p\142\172\241\243\001\231\200Z?\031p\142\172\245\243\001\231\200Z?\031p\142\172\245\243\001\231\200Z?\031p\142\172\245\243\001\231\200Z\176\005\015\246t\235\231\003\206\145\181~>\224\028Y\235\231\003\206\145\181~>\224\028Y\235\231\003\206\145\181~>\224\028Y\235\231\003\206\145\181~>\224\028Y\235\231\003\206\145i?\031p\142L\251\249\128sd\218\207\007\156#\211~>\224\028\153\246\243\001\231\200\180\159\0158G\166\253|\19292\r\246\164\194\158\214~>\224\028\153\246\243\001\231\200\180\159\0158G\166\253|\19292\237\231\003\206\145i?\031p\142L\251\249\128sd\218\207\007\144#\235\166\162\253\211\255\248\199\127\249\167]\156\239N\255\246\207\255\207?\254\199?\237n\255\254O\207z\253\230\165\234\1903\255\211\"\212\254\031\253\1608Z=\171\b|V\028\173\030V\004=\236\255\003\224\206\248\232" type t = {code_value : string; character_name : string; general_category : string; canonical_combining_classes : string; bidirectional_category : string; character_decomposition_mapping : string; decimal_digit_value : string; digit_value : string; numeric_value : string; mirrored : string; unicode_10_name : string; iso_10646_comment_field : string; uppercase_mapping : string; lowercase_mapping : string; titlecase_mapping : string} let get_single_field i = let r = implode (Pdfread.getuntil true (function c -> c = ';' || c = '\n') i) in Pdfio.nudge i; r let parse_entry i = let code_value = get_single_field i in let character_name = get_single_field i in let general_category = get_single_field i in let canonical_combining_classes = get_single_field i in let bidirectional_category = get_single_field i in let character_decomposition_mapping = get_single_field i in let decimal_digit_value = get_single_field i in let digit_value = get_single_field i in let numeric_value = get_single_field i in let mirrored = get_single_field i in let unicode_10_name = get_single_field i in let iso_10646_comment_field = get_single_field i in let uppercase_mapping = get_single_field i in let lowercase_mapping = get_single_field i in let titlecase_mapping = get_single_field i in {code_value; character_name; general_category; canonical_combining_classes; bidirectional_category; character_decomposition_mapping; decimal_digit_value; digit_value; numeric_value; mirrored; unicode_10_name; iso_10646_comment_field; uppercase_mapping; lowercase_mapping; titlecase_mapping} let rec parse_unicodedata a i = if i.Pdfio.pos_in () = i.Pdfio.in_channel_length + 2 (* it's been nudged *) then rev a else parse_unicodedata (parse_entry i::a) i let unicodedata = memoize (fun () -> let r = unicodedata_source |> Pdfio.bytes_of_string |> Pdfcodec.decode_flate |> Pdfio.string_of_bytes |> Pdfio.input_of_string |> parse_unicodedata [] in (*iter print_entry r;*) r) ����������������������������������������������������������������������������������������cpdf-2.8.1/cpdftoc.ml�������������������������������������������������������������������������������0000664�0001750�0001750�00000045775�14771516640�013127� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������open Pdfutil (* We allow \n in titles. Split for typesetter. *) let rec split_toc_title_inner a = function | '\\'::'n'::r -> rev a :: split_toc_title_inner [] r | x::xs -> split_toc_title_inner (x::a) xs | [] -> [rev a] let split_toc_title = split_toc_title_inner [] (* And for new bookmark for TOC, change \\n to \n *) let rec real_newline = function | '\\'::'n'::r -> '\n'::real_newline r | x::r -> x::real_newline r | [] -> [] let width_table_cache = null_hash () let rec width_of_runs runs = match runs with | Cpdftype.Font (id, f, fontsize)::Cpdftype.Text t::more -> let width_table = match Hashtbl.find width_table_cache (id, fontsize) with | w -> w | exception Not_found -> let ws = Cpdftype.font_widths id f fontsize in Hashtbl.add width_table_cache (id, fontsize) ws; ws in Cpdftype.width_of_string width_table t +. width_of_runs more | [] -> 0. | _ -> failwith "width_of_runs" (* Run of Font / Text elements from a fontpack and UTF8 text *) let of_utf8 fontpack fontsize t = let codepoints = Pdftext.codepoints_of_utf8 t in let fonted = option_map (Cpdfembed.get_char fontpack) codepoints in let collated = Cpdfembed.collate_runs fonted in flatten (map (function | [] -> [] | (_, n, font) as h::t -> let charcodes = map (fun (c, _, _) -> char_of_int c) (h::t) in [Cpdftype.Font (string_of_int n, font, fontsize); Cpdftype.Text charcodes]) collated) (* Cpdftype codepoints from a font and PDFDocEndoding string *) let of_pdfdocencoding fontpack fontsize t = of_utf8 fontpack fontsize (Pdftext.utf8_of_pdfdocstring t) (* Remove characters until it is below the length. Then remove three more and add dots for an ellipsis *) let rec shorten_text_inner l t = match rev t with | Cpdftype.Text text::Cpdftype.Font (id, f, fs)::more -> let width_table = match Hashtbl.find width_table_cache (id, fs) with | w -> w | exception Not_found -> let ws = Cpdftype.font_widths id f fs in Hashtbl.add width_table_cache (id, fs) ws; ws in if Cpdftype.width_of_string width_table text > l then shorten_text_inner l (rev (Cpdftype.Text (all_but_last text)::Cpdftype.Font (id, f, fs)::more)) else t | _ -> t let shorten_text fontpack fontsize l t = let short = shorten_text_inner l t in if short = t then t else let charcode, dotfontnum, dotfont = unopt (Cpdfembed.get_char fontpack (int_of_char '.')) in let charcode = char_of_int charcode in short @ [Cpdftype.Font (string_of_int dotfontnum, dotfont, fontsize); Cpdftype.Text [charcode; charcode; charcode]] (* Calculate the used codepoints *) let used pdf fastrefnums labels title marks = let codepoints = null_hash () in Hashtbl.add codepoints (int_of_char '.') (); let addtext t = iter (fun c -> Hashtbl.replace codepoints c ()) (Pdftext.codepoints_of_utf8 (Pdftext.utf8_of_pdfdocstring t)) in iter (fun c -> Hashtbl.replace codepoints c ()) (Pdftext.codepoints_of_utf8 title); iter (fun m -> addtext m.Pdfmarks.text; let pnum = Pdfpage.pagenumber_of_target ~fastrefnums pdf m.Pdfmarks.target in let labeltext = try Pdfpagelabels.pagelabeltext_of_pagenumber pnum labels with Not_found -> string_of_int pnum in addtext labeltext) marks; codepoints (* Make a dot leader *) let make_dots space fontpack fontsize = let dotruns = of_utf8 fontpack fontsize "." in let dotwidth = width_of_runs dotruns in let runs = flatten (many dotruns (int_of_float (floor (space /. dotwidth)))) in let remainder = space -. width_of_runs runs in [Cpdftype.HGlue remainder] @ runs (* Prepend structure tree items. FIXME: What to do if not present? Currently we do nothing. *) let prepend_structitems pdf items = match Pdf.lookup_chain pdf pdf.Pdf.trailerdict ["/Root"; "/StructTreeRoot"; "/K"] with | Some (Pdf.Array a) -> Pdf.replace_chain pdf ["/Root"; "/StructTreeRoot"; "/K"] (Pdf.Array (items @ a)) | Some (Pdf.Dictionary d) -> Pdf.replace_chain pdf ["/Root"; "/StructTreeRoot"; "/K"] (Pdf.Array (items @ [Pdf.Dictionary d])) | _ -> () (* FIXME Would be better with a Pdf.remove_chain *) let remove_parent_tree_next_key pdf = match Pdf.lookup_obj pdf pdf.Pdf.root with | Pdf.Dictionary d -> begin match lookup "/StructTreeRoot" d with | Some (Pdf.Indirect i) -> Pdf.addobj_given_num pdf (i, Pdf.remove_dict_entry (Pdf.lookup_obj pdf i) "/ParentTreeNextKey") | Some (Pdf.Dictionary d2) -> let newstroot = Pdf.remove_dict_entry (Pdf.Dictionary d2) "/ParentTreeNextKey" in let newroot = Pdf.add_dict_entry (Pdf.Dictionary d) "/StructTreeRoot" newstroot in Pdf.addobj_given_num pdf (pdf.Pdf.root, newroot) | _ -> () end | _ -> () (* FIXME Again, replace_chain would be much better here if it could deal with a final indirect. *) let add_to_parent_tree pdf p = match Pdf.lookup_chain pdf (Pdf.lookup_obj pdf pdf.Pdf.root) ["/StructTreeRoot"; "/ParentTree"] with | Some tree -> let t = Pdftree.read_number_tree pdf tree in let n = match t with [] -> 0 | l -> int_of_string (fst (last l)) + 1 in let newtree = Pdftree.build_name_tree true pdf ((string_of_int n, p)::t) in begin match Pdf.lookup_direct pdf "/StructTreeRoot" (Pdf.lookup_obj pdf pdf.Pdf.root) with | Some (Pdf.Dictionary d) -> begin match lookup "/ParentTree" d with | Some (Pdf.Indirect i) -> Pdf.addobj_given_num pdf (i, newtree) | Some (Pdf.Dictionary d) -> let i = Pdf.addobj pdf newtree in Pdf.replace_chain pdf ["/Root"; "/StructTreeRoot"; "/ParentTree"] (Pdf.Indirect i) | _ -> () end | _ -> () end; n | None -> 0 (* Make sure that there is an existing structure tree suitable for us to merge into. Check for /StructTreeRoot. If there, nothing to do. Otherwise, build <</Type/StructTreeRoot/ParentTree .../K[]>>. ParentTree and K actually optional, but it's easier if we assume they are there. *) let ensure_minimal_struct_tree pdf = match Pdf.lookup_chain pdf (Pdf.lookup_obj pdf pdf.Pdf.root) ["/StructTreeRoot"] with | Some _ -> () | None -> let pt = Pdf.addobj pdf (Pdf.Dictionary [("/Nums", Pdf.Array [])]) in let str = Pdf.Dictionary [("/Type", Pdf.Name "/StructTreeRoot"); ("/ParentTree", Pdf.Indirect pt); ("/K", Pdf.Array [])] in Pdf.addobj_given_num pdf (pdf.Pdf.root, (Pdf.add_dict_entry (Pdf.lookup_obj pdf pdf.Pdf.root) "/StructTreeRoot" str)) (* Typeset a table of contents with given font, font size and title. Mediabox copied from first page of existing PDF cropbox, or mediabox if no crop box. Margin of 10%. Font size of title twice body font size. Null page labels added for TOC, others bumped up and so preserved. *) (* TODO Fix Cpdftype to take a box not a papersize/margins combo. Then we can remove all the CropBox/Mediabox complications here. Then copying the boxes directly from the first page of the document is ok, and we just prefer the cropbox. Failing file __PDFUA/decomp/08.pdf *) let typeset_table_of_contents ~font ~fontsize ~title ~bookmark ~dotleader ~process_struct_tree ?subformat pdf = let optional l = if process_struct_tree then l else [] in if process_struct_tree then ensure_minimal_struct_tree pdf; Hashtbl.clear width_table_cache; let marks = Pdfmarks.read_bookmarks ~preserve_actions:true pdf in if marks = [] then (Pdfe.log "No bookmarks, not making table of contents\n"; pdf) else let labels = Pdfpagelabels.read pdf in let refnums = Pdf.page_reference_numbers pdf in let fastrefnums = hashtable_of_dictionary (combine refnums (indx refnums)) in let codepoints = map fst (list_of_hashtbl (used pdf fastrefnums labels title marks)) in let fontpack = match font with | Cpdfembed.PreMadeFontPack t -> t | Cpdfembed.EmbedInfo {fontfile; fontname; encoding} -> Cpdfembed.embed_truetype pdf ~fontfile ~fontname ~codepoints ~encoding | Cpdfembed.ExistingNamedFont -> raise (Pdf.PDFError "Cannot use existing font with -table-of-contents") in let firstpage = hd (Pdfpage.pages_of_pagetree pdf) in let width, firstpage_papersize, pmaxx, pmaxy, margin = let width, height, xmax, ymax = match Pdf.parse_rectangle pdf firstpage.Pdfpage.mediabox with xmin, ymin, xmax, ymax -> xmax -. xmin, ymax -. ymin, xmax, ymax in width, Pdfpaper.make Pdfunits.PdfPoint width height, xmax, ymax, fmin width height *. 0.1 in let firstpage_cropbox = match Pdf.lookup_direct pdf "/CropBox" firstpage.Pdfpage.rest with | Some r -> Some (Pdf.parse_rectangle pdf r) | None -> None in let width = match firstpage_cropbox with | Some (xmin, _, xmax, _) -> xmax -. xmin | None -> width in let lines = map (fun mark -> let indent = float mark.Pdfmarks.level *. fontsize *. 2. in let textruns = of_pdfdocencoding fontpack fontsize mark.Pdfmarks.text in let labelruns = if mark.Pdfmarks.target = NullDestination then of_pdfdocencoding fontpack fontsize "" else let pnum = Pdfpage.pagenumber_of_target ~fastrefnums pdf mark.Pdfmarks.target in let pde = try Pdfpagelabels.pagelabeltext_of_pagenumber pnum labels with Not_found -> string_of_int pnum in of_pdfdocencoding fontpack fontsize pde in let textgap = width -. margin *. 2. -. indent -. width_of_runs labelruns in let textruns = shorten_text fontpack fontsize (textgap -. fontsize *. 3.) textruns in let space = textgap -. width_of_runs textruns in let leader = if dotleader && labelruns <> [] then make_dots space fontpack fontsize else [Cpdftype.HGlue space] in [Cpdftype.BeginDest (mark.Pdfmarks.target, Some mark.Pdfmarks.text); Cpdftype.HGlue indent] @ optional [(Cpdftype.Tag ("Link", 0))] @ textruns @ optional [Cpdftype.EndTag] @ leader @ optional [Cpdftype.Tag ("Link", 0)] @ labelruns @ optional [Cpdftype.EndTag] @ [Cpdftype.EndDest; Cpdftype.NewLine]) (Pdfmarks.read_bookmarks ~preserve_actions:false pdf) in let toc_pages, toc_tags = let title = let glue = Cpdftype.VGlue (fontsize *. 2.) in optional [Cpdftype.Tag ("P", 0)] @ flatten (map (fun l -> l @ [Cpdftype.NewLine]) (map (of_utf8 fontpack (fontsize *. 2.)) (map implode (split_toc_title (explode title))))) @ optional [Cpdftype.EndTag] @ [glue] in let lm, rm, bm, tm = match firstpage_cropbox with | None -> (margin, margin, margin, margin) | Some (cminx, cminy, cmaxx, cmaxy) -> (cminx +. margin, (pmaxx -. cmaxx) +. margin, cminy +. margin, (pmaxy -. cmaxy) +. margin) in let firstfont = hd (keep (function Cpdftype.Font _ -> true | _ -> false) (title @ flatten lines)) in Cpdftype.typeset ~process_struct_tree lm rm tm bm firstpage_papersize pdf ([firstfont; Cpdftype.BeginDocument] @ title @ flatten lines) in let toc_pages = match firstpage_cropbox with | Some (a, b, c, d) -> let rect = Pdf.Array [Pdf.Real a; Pdf.Real b; Pdf.Real c; Pdf.Real d] in map (fun p -> {p with Pdfpage.rest = Pdf.add_dict_entry p.Pdfpage.rest "/CropBox" rect}) toc_pages | None -> toc_pages in let original_pages = Pdfpage.pages_of_pagetree pdf in let toc_pages_len = length toc_pages in let changes = map (fun n -> (n, n + toc_pages_len)) (indx original_pages) in let pdf = Pdfpage.change_pages ~changes true pdf (toc_pages @ original_pages) in let toc_pageobjnums = take (Pdf.page_reference_numbers pdf) toc_pages_len in let label = {Pdfpagelabels.labelstyle = NoLabelPrefixOnly; Pdfpagelabels.labelprefix = None; Pdfpagelabels.startpage = 1; Pdfpagelabels.startvalue = 1} in (* Get indirect of top-level /Document *) let top_level_document = match subformat with Some Cpdfua.PDFUA2 -> begin match Pdf.lookup_chain pdf pdf.Pdf.trailerdict ["/Root"; "/StructTreeRoot"] with | Some d -> begin match Pdf.lookup_immediate "/K" d with | Some (Pdf.Indirect i) -> i | Some (Pdf.Array [Pdf.Indirect i]) -> i | _ -> 0 end | _ -> 0 end | _ -> 0 in let p_struct_elem_first_page_ref = ref 0 in if process_struct_tree then begin let struct_tree_root = if top_level_document > 0 then top_level_document else match Pdf.lookup_immediate "/StructTreeRoot" (Pdf.lookup_obj pdf pdf.Pdf.root) with | Some (Pdf.Indirect i) -> i | _ -> 0 (* Will never happen, because we ran ensure_minimal_struct_tree *) in let p_struct_elem_first_page = Pdf.addobj pdf (Pdf.Dictionary [("/S", Pdf.Name "/P"); ("/Pg", Pdf.Indirect (hd toc_pageobjnums)); ("/K", Pdf.Array [Pdf.Integer 0]); ("/P", Pdf.Indirect struct_tree_root)]) in p_struct_elem_first_page_ref := p_struct_elem_first_page; let mcid = ref 1 in let link_struct_elems_for_each_page = map2 (fun page pageobjnum -> let annot_objnums = match Pdf.lookup_direct pdf "/Annots" page.Pdfpage.rest with | Some (Pdf.Array a) -> map (function Pdf.Indirect i -> i | _ -> 0) a | _ -> [] in let r = map (fun annot_i -> let r = let objr = Pdf.addobj pdf (Pdf.Dictionary [("/Type", Pdf.Name "/OBJR"); ("/Obj", Pdf.Indirect annot_i)]) in Pdf.addobj pdf (Pdf.Dictionary [("/S", Pdf.Name "/Link"); ("/K", Pdf.Array [Pdf.Integer !mcid; Pdf.Indirect objr]); ("/P", Pdf.Indirect struct_tree_root); ("/Pg", Pdf.Indirect pageobjnum)]) in incr mcid; r) annot_objnums in mcid := 0; r) toc_pages toc_pageobjnums in let prepending_structitems = map (fun x -> Pdf.Indirect x) (p_struct_elem_first_page::flatten link_struct_elems_for_each_page) in (* Add the key and value structure item (any p, and that page's links) to the parent tree for each TOC page *) let toc_structure_items_per_page = match link_struct_elems_for_each_page with | h::t -> (p_struct_elem_first_page::h)::t | [] -> [] in iter2 (fun o ns -> let page = Pdf.lookup_obj pdf o in (* For each annotation, add a structparent entry too. *) let annot_objnums = match Pdf.lookup_direct pdf "/Annots" page with | Some (Pdf.Array a) -> map (function Pdf.Indirect i -> i | _ -> 0) a | _ -> [] in (* Remove the Title P from first page list *) let ns2 = if length ns > length annot_objnums then tl ns else ns in iter3 (fun annot_objnum n mark -> let annot = Pdf.lookup_obj pdf annot_objnum in let sp_num = add_to_parent_tree pdf (Pdf.Indirect n) in let new_annot = Pdf.add_dict_entry annot "/StructParent" (Pdf.Integer sp_num) in let a = match mark.Pdfmarks.target with | Pdfdest.Action a -> a | _ -> Pdf.Null in let new_annot = if subformat = Some Cpdfua.PDFUA2 then Pdf.add_dict_entry new_annot "/A" a else new_annot in Pdf.addobj_given_num pdf (annot_objnum, new_annot)) annot_objnums ns2 (flatten (many marks 2)); let ptn = add_to_parent_tree pdf (Pdf.Array (map (fun x -> Pdf.Indirect x) ns)) in Pdf.addobj_given_num pdf (o, Pdf.add_dict_entry page "/StructParents" (Pdf.Integer ptn))) toc_pageobjnums toc_structure_items_per_page; remove_parent_tree_next_key pdf; if subformat = Some Cpdfua.PDFUA2 then (* Assume that it is just a single, indirect, top-level document. Either given as an indirect, or an array of one indirect. This assumption is ok because /P entries must have an indirect to point to. So if the document contains anything, the /Document structelem must be indirect. *) begin match Pdf.lookup_chain pdf pdf.Pdf.trailerdict ["/Root"; "/StructTreeRoot"] with | Some d -> if top_level_document = 0 then () else let obj = Pdf.lookup_obj pdf top_level_document in let obj' = let k' = match Pdf.lookup_direct pdf "/K" obj with | Some (Pdf.Array a) -> Pdf.Array (prepending_structitems @ a) | Some (Pdf.Dictionary d) -> Pdf.Array (prepending_structitems @ [Pdf.Dictionary d]) | _ -> Pdf.Null in Pdf.add_dict_entry obj "/K" k' in Pdf.addobj_given_num pdf (top_level_document, obj') | _ -> () end else begin match Pdf.lookup_chain pdf pdf.Pdf.trailerdict ["/Root"; "/StructTreeRoot"; "/K"] with | Some (Pdf.Array a) -> Pdf.replace_chain pdf ["/Root"; "/StructTreeRoot"; "/K"] (Pdf.Array (prepending_structitems @ a)) | Some (Pdf.Dictionary d) -> Pdf.replace_chain pdf ["/Root"; "/StructTreeRoot"; "/K"] (Pdf.Array (prepending_structitems @ [Pdf.Dictionary d])) | _ -> () end end; let labels' = label::map (fun l -> {l with Pdfpagelabels.startpage = l.Pdfpagelabels.startpage + toc_pages_len}) labels in Pdfpagelabels.write pdf labels'; if bookmark then let marks = Pdfmarks.read_bookmarks ~preserve_actions:true pdf in let refnums = Pdf.page_reference_numbers pdf in let newmark = {Pdfmarks.level = 0; Pdfmarks.text = Pdftext.pdfdocstring_of_utf8 (implode (real_newline (explode title))); Pdfmarks.target = if subformat = Some Cpdfua.PDFUA2 then let action = Pdf.Dictionary [("/SD", Pdf.Array [Pdf.Indirect !p_struct_elem_first_page_ref; Pdf.Name "/XYZ"; Pdf.Null; Pdf.Null; Pdf.Null]); ("/S", Pdf.Name "/GoTo"); ("/D", Pdf.Array [Pdf.Indirect (hd refnums); Pdf.Name "/XYZ"; Pdf.Null; Pdf.Null; Pdf.Null])] in Pdfdest.Action action else Pdfdest.XYZ (Pdfdest.PageObject (hd refnums), None, None, None); Pdfmarks.isopen = false; Pdfmarks.colour = (0., 0., 0.); Pdfmarks.flags = 0} in Pdfmarks.add_bookmarks (newmark::marks) pdf else pdf ���cpdf-2.8.1/cpdfpage.mli�����������������������������������������������������������������������������0000664�0001750�0001750�00000015566�14771516640�013422� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(** Working with pages *) (** Print page info (Mediabox etc) to standard output. *) val output_page_info : ?json:bool -> ?raisejson:bool -> Pdfunits.t -> Pdf.t -> int list -> unit (** Return page info for selected pages in JSON format. *) val json_page_info : Pdf.t -> int list -> Pdfunits.t -> Cpdfyojson.Safe.t (** Given a function from page number and page to page, a document, and a list of page numbers to apply it to, apply the function to all those pages. *) val process_pages : (int -> Pdfpage.t -> Pdfpage.t * int * Pdftransform.transform_matrix) -> Pdf.t -> int list -> Pdf.t (** Same as [process_pages], but iterate rather than map. *) val iter_pages : (int -> Pdfpage.t -> unit) -> Pdf.t -> int list -> unit (** Same as [process_pages] but return the list of outputs of the map function. *) val map_pages : (int -> Pdfpage.t -> 'a) -> Pdf.t -> int list -> 'a list (** Clip a page to one of its boxes, or the media box if that box is not present. This is a hard clip, done by using a clipping rectangle, so that the page may then be used as a stamp without extraneous material reapearing. *) val hard_box : Pdf.t -> int list -> string -> bool -> bool -> Pdf.t (** Shift a PDF in x and y (in pts) in the given pages. List of (x, y) pairs is for all pages in pdf. *) val shift_pdf : ?fast:bool -> (float * float) list -> Pdf.t -> int list -> Pdf.t (** Shift a PDF's boxes in x and y (in pts) in the given pages. List of (x, y) pairs is for all pages in pdf. *) val shift_boxes : (float * float) list -> Pdf.t -> int list -> Pdf.t (** Change a page's media box so its minimum x and y are 0, making other operations simpler to think about. Any shift that is done is reflected in other boxes (clip etc.) *) val rectify_boxes : ?fast:bool -> Pdf.t -> Pdfpage.t -> Pdfpage.t (** Change the media box and other known boxes by a function which takes xmin, xmax, ymin, ymax as input. *) val change_boxes : (float * float * float * float -> float * float * float * float) -> Pdf.t -> Pdfpage.t -> Pdfpage.t (** Scale the contents of a page by a given factor centred around a given point in a given range. *) val scale_contents : ?fast:bool -> Cpdfposition.position -> float -> Pdf.t -> int list -> Pdf.t (** [set_mediabox xywhlist pdf range] sets the media box on the given pages. *) val set_mediabox : (float * float * float * float) list -> Pdf.t -> int list -> Pdf.t (** Remove any cropping from the given pages. *) val remove_cropping_pdf : Pdf.t -> int list -> Pdf.t (** Remove any trim box from the given pages. *) val remove_trim_pdf : Pdf.t -> int list -> Pdf.t (** Remove any bleed box from the given pages. *) val remove_bleed_pdf : Pdf.t -> int list -> Pdf.t (** Remove any art box from the given pages. *) val remove_art_pdf : Pdf.t -> int list -> Pdf.t (** Modify the rotation of the page and its contents to leave the rotation at 0 with the page effectively unaltered. *) val upright : ?fast:bool -> int list -> Pdf.t -> Pdf.t (** Change rotation to a given value 0, 90, 180, 270 on given pages. *) val rotate_pdf : int -> Pdf.t -> int list -> Pdf.t (** Rotate clockwise by 0, 90, 180, 270 on given pages. *) val rotate_pdf_by : int -> Pdf.t -> int list -> Pdf.t (** Rotate the contents by the given angle on the given pages. If [fast] is true, assume PDF is well-formed. *) val rotate_contents : ?fast:bool -> float -> Pdf.t -> int list -> Pdf.t (** Scale a PDF in sx, sy in the given pages. List of (sx, sy) pairs is for all pages in pdf. *) val scale_pdf : ?fast:bool -> (float * float) list -> Pdf.t -> int list -> Pdf.t (** [scale_to_fit_pdf fast position input_scale x y op pdf range] scales a page to fit the page size given by (x, y) and by the [input_scale] (e.g 1.0 = scale to fit, 0.9 = scale to fit leaving a border etc.). [op] is unused. *) val scale_to_fit_pdf : ?fast:bool -> Cpdfposition.position -> float -> (float * float) list -> 'a -> Pdf.t -> int list -> Pdf.t (** [stretch fast pagesizes pdf range] stretches content to fit the given page size without regard to aspect ratio. *) val stretch : ?fast:bool -> (float * float) list -> Pdf.t -> int list -> Pdf.t (** [center_to_fit : pagesizes pdf range] moves content to the centre of the page without scaling it. *) val center_to_fit : (float * float) list -> Pdf.t -> int list -> Pdf.t (** {2 Stamping} *) (** [combine_pages fast under over scaletofit swap equalize] combines the page content of two PDFs, page-by-page. If [equalize] is true the output will have the same number of pages as the shorter file. If [scaletofit] is true, the [over] file will be scaled to fit. If [swap] is true, [over] and [under] are swapped. If [fast] is true, the PDFs are assumed to be well-formed and no fixes are done. *) val combine_pages : process_struct_tree:bool -> bool -> Pdf.t -> Pdf.t -> bool -> bool -> Pdf.t (** [stamp relative_to_cropbox position topline midline fast scale_to_fit isover range over pdf] stamps the first page of [over] over each page of the PDF. The arguments have the same meaning as in [combine_pages]. *) val stamp : process_struct_tree:bool -> bool -> Cpdfposition.position -> bool -> bool -> bool -> bool -> bool -> int list -> Pdf.t -> Pdf.t -> Pdf.t (** {2 Page geometry} *) (** True if a given page in a PDF has a given box *) val hasbox : Pdf.t -> int -> string -> bool (** [crop_pdf xywhlist pdf range] sets the cropbox on the given pages. *) val crop_pdf : ?box:string -> (float * float * float * float) list -> Pdf.t -> int list -> Pdf.t (** [setBox boxname x y w h pdf range] sets the given box on the given pages. *) val setBox : string -> float -> float -> float -> float -> Pdf.t -> int list -> Pdf.t (** Flip the given pages vertically *) val vflip_pdf : ?fast:bool -> Pdf.t -> int list -> Pdf.t (** Flip the given pages horizontally *) val hflip_pdf : ?fast:bool -> Pdf.t -> int list -> Pdf.t (** Add trim marks. *) val trim_marks : ?fast:bool -> Pdf.t -> int list -> Pdf.t (** Show the page boxes for debug. *) val show_boxes : ?fast:bool -> Pdf.t -> int list -> Pdf.t (** Copy one box to another in the given pages. *) val copy_box : string -> string -> bool -> Pdf.t -> int list -> Pdf.t (** True if all pages are "upright" i.e no rotation and (0,0)-based. *) val allupright : int list -> Pdf.t -> bool (** True if all pages are "upright" i.e no rotation. *) val alluprightonly : int list -> Pdf.t -> bool (** When a page is transformed, its patterns must be too. *) val change_pattern_matrices_page : Pdf.t -> Pdftransform.transform_matrix -> Pdfpage.t -> Pdfpage.t (** Very basic redaction - the removal of whole pages, optionally trimming the structure tree to remove any content there. *) val redact : process_struct_tree:bool -> Pdf.t -> int list -> Pdf.t (** Remove a structure tree entirely from a file, including unmarking marked content. *) val remove_struct_tree : Pdf.t -> Pdf.t (** Mark a PDF as begin entirely artifacts (may be used after running [remove_struct_tree]. *) val mark_all_as_artifact : Pdf.t -> Pdf.t ������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/cpdferror.mli����������������������������������������������������������������������������0000664�0001750�0001750�00000000321�14771516640�013616� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(** Error handling *) (** Soft error in CPDF. *) exception SoftError of string (** Hard error in CPDF *) exception HardError of string (** Raise SoftError with the given string. *) val error : string -> 'a ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/cpdfdrawcontrol.ml�����������������������������������������������������������������������0000664�0001750�0001750�00000026366�14771516640�014673� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(* Drawing operations. *) open Pdfutil open Cpdferror let embed_font = ref (fun () -> Printf.printf "BAD *\n%!"; Cpdfembed.ExistingNamedFont) let setdrawing = ref (fun () -> Printf.printf "BAD **\n%!") let getfontname = ref (fun () -> Printf.printf "BAD ***\n%!"; "") let getfontsize = ref (fun () -> Printf.printf "BAD ****\n%!"; 0.) let setfontname = ref (fun _ -> Printf.printf "BAD *****\n%!") let setfontsize = ref (fun _ -> Printf.printf "BAD ******\n%!") let loadttf = ref (fun _ -> Printf.printf "BAD *******\n%!") let setembedstd14 = ref (fun _ _ -> Printf.printf "BAD ********\n%!") let getindent = ref (fun () -> Printf.printf "BAD *********\n%!"; None) let ttfs = null_hash () let loadttfseparate name filename = !loadttf (name ^ "=" ^ filename) let fontpack_initialised = ref false let drawops = ref [("_MAIN", [])] let startxobj n = drawops := (n, [])::!drawops let xobj_bbox = ref (0., 0., 1000., 1000.) let xobjbbox s = xobj_bbox := Cpdfcoord.parse_rectangle (Pdf.empty ()) s let addop o = match !drawops with | (n, ops)::t -> drawops := (n, (o::ops))::t | [] -> error "no drawops" let endxobj () = match !drawops with | (n, ops)::t -> drawops := t; let a, b, c, d = !xobj_bbox in addop (Cpdfdraw.FormXObject (a, b, c, d, n, rev ops)) | [] -> error "too many -end-xobj or -et" let addbt () = drawops := ("_TEXT", [])::!drawops let addet () = match !drawops with | ("_TEXT", ops)::t -> drawops := t; addop (Cpdfdraw.TextSection (rev ops)) | _ -> error "not in a text section at -et" let push () = drawops := ("_PUSH", [])::!drawops let pop () = match !drawops with | ("_PUSH", ops)::t -> drawops := t; addop (Cpdfdraw.Qq (rev ops)) | _ -> error "not in a pushed section at -pop" let readfloats s = map float_of_string (String.split_on_char ' ' s) let parse_colour s = match lookup (String.lowercase_ascii s) Cpdfcolours.colours with | Some c -> let r = float_of_int ((c land 0xFF0000) lsr 16) /. 255. in let g = float_of_int ((c land 0x00FF00) lsr 8) /. 255. in let b = float_of_int (c land 0x0000FF) /. 255. in Cpdfaddtext.RGB (r, g, b) | None -> let getnum = function | Pdfgenlex.LexInt i -> float i | Pdfgenlex.LexReal f -> f | _ -> error "Bad color" in match Pdfgenlex.lex_string s with | [g] -> Cpdfaddtext.Grey (getnum g) | [r; g; b] -> Cpdfaddtext.RGB (getnum r, getnum g, getnum b) | [c; y; m; k] -> Cpdfaddtext.CYMK (getnum c, getnum y, getnum m, getnum k) | _ -> error "Bad color" let col_of_string s = match parse_colour s with | Cpdfaddtext.RGB (r, g, b) -> Cpdfdraw.RGB (r, g, b) | Cpdfaddtext.Grey g -> Cpdfdraw.Grey g | Cpdfaddtext.CYMK (c, y, m, k) -> Cpdfdraw.CYMK (c, y, m, k) | exception _ -> Cpdfdraw.NoCol let setstroke s = addop (Cpdfdraw.SetStroke (col_of_string s)) let setfill s = addop (Cpdfdraw.SetFill (col_of_string s)) let addtag t = addop (Cpdfdraw.Tag t) let addstag t = addop (Cpdfdraw.STag t) let endtag () = addop Cpdfdraw.EndTag let endstag () = addop Cpdfdraw.EndSTag let autotags b = addop (Cpdfdraw.AutoTag b) let autoartifacts b = Cpdfdraw.do_add_artifacts := b let artifact () = addop Cpdfdraw.BeginArtifact let endartifact () = addop Cpdfdraw.EndArtifact let addnamespace s = addop (Cpdfdraw.Namespace s) let eltinfo k v = addop (Cpdfdraw.EltInfo (k, v)) let endeltinfo s = addop (Cpdfdraw.EndEltInfo s) let setrolemap s = Cpdfdraw.rolemap := s let addrect s = let x, y, w, h = Cpdfcoord.parse_rectangle (Pdf.empty ()) s in addop (Cpdfdraw.Rect (x, y, w, h)) let addto s = let x, y = Cpdfcoord.parse_coordinate (Pdf.empty ()) s in addop (Cpdfdraw.To (x, y)) let addline s = let x, y = Cpdfcoord.parse_coordinate (Pdf.empty ()) s in addop (Cpdfdraw.Line (x, y)) let addbezier s = match readfloats s with | [a; b; c; d; e; f] -> addop (Cpdfdraw.Bezier (a, b, c, d, e, f)) | _ -> error "-bez requires six numbers" | exception _ -> error "malformed -bez" let addbezier23 s = match readfloats s with | [a; b; c; d] -> addop (Cpdfdraw.Bezier23 (a, b, c, d)) | _ -> error "-bez23 requires four numbers" | exception _ -> error "malformed -bez23" let addbezier13 s = match readfloats s with | [a; b; c; d] -> addop (Cpdfdraw.Bezier13 (a, b, c, d)) | _ -> error "-bez13 requires four numbers" | exception _ -> error "malformed -bez13" let addcircle s = match readfloats s with | [x; y; r] -> let _, _, segs = hd (snd (Cpdfshape.circle x y r)) in (match segs with | Cpdfshape.Bezier ((a, b), _, _, _)::_ -> addop (Cpdfdraw.To (a, b)) | _ -> assert false); iter (function | Cpdfshape.Bezier (_, (c, d), (e, f), (g, h)) -> addop (Cpdfdraw.Bezier (c, d, e, f, g, h)) | Cpdfshape.Straight _ -> assert false) segs | _ -> error "-circle requires three numbers" | exception _ -> error "malformed -circle" let stroke () = addop Cpdfdraw.Stroke let fill () = addop Cpdfdraw.Fill let fillevenodd () = addop Cpdfdraw.FillEvenOdd let strokefill () = addop Cpdfdraw.FillStroke let strokefillevenodd () = addop Cpdfdraw.FillStrokeEvenOdd let clip () = addop Cpdfdraw.Clip let clipevenodd () = addop Cpdfdraw.ClipEvenOdd let closepath () = addop Cpdfdraw.ClosePath let setthickness s = try addop (Cpdfdraw.SetLineThickness (float_of_string s)) with _ -> error "Thickness must be a number" let setcap s = let num = match s with | "butt" -> 0 | "round" -> 1 | "square" -> 2 | _ -> error "Unknown cap type" in addop (Cpdfdraw.SetLineCap num) let setjoin s = let num = match s with | "miter" -> 0 | "round" -> 1 | "bevel" -> 2 | _ -> error "Unknown join type" in addop (Cpdfdraw.SetLineJoin num) let setmiter s = try addop (Cpdfdraw.SetMiterLimit (float_of_string s)) with _ -> error "Miter limit must be a number" let setdash s = try let x, y = let nums = readfloats s in all_but_last nums, last nums in addop (Cpdfdraw.SetDashPattern (x, y)) with _ -> error "Dash pattern elements must one or more numbers" let setmatrix s = match readfloats s with | [a; b; c; d; e; f] -> addop (Cpdfdraw.Matrix {Pdftransform.a = a; Pdftransform.b = b; Pdftransform.c = c; Pdftransform.d = d; Pdftransform.e = e; Pdftransform.f = f}) | _ -> error "Matrix must have six numbers" | exception _ -> error "Matrix elements must be numbers" let setmtranslate s = match readfloats s with | [a; b] -> addop (Cpdfdraw.Matrix (Pdftransform.matrix_of_transform [Pdftransform.Translate (a, b)])) | _ | exception _ -> error "-mtrans takes two numbers" let setmrotate s = match readfloats s with | [a; b; c] -> addop (Cpdfdraw.Matrix (Pdftransform.matrix_of_transform [Pdftransform.Rotate ((a, b), c)])) | _ | exception _ -> error "-mrot takes three numbers" let setmscale s = match readfloats s with | [a; b; c; d] -> addop (Cpdfdraw.Matrix (Pdftransform.matrix_of_transform [Pdftransform.Scale ((a, b), c, d)])) | _ | exception _ -> error "-mscale takes four numbers" let setmshearx s = match readfloats s with | [a; b; c] -> addop (Cpdfdraw.Matrix (Pdftransform.matrix_of_transform [Pdftransform.ShearX ((a, b), c)])) | _ | exception _ -> error "-mshearx takes three numbers" let setmsheary s = match readfloats s with | [a; b; c] -> addop (Cpdfdraw.Matrix (Pdftransform.matrix_of_transform [Pdftransform.ShearY ((a, b), c)])) | _ | exception _ -> error "-msheary takes three numbers" let usexobj s = addop (Cpdfdraw.Use s) let addjpeg ?data n = match data with | Some d -> addop (Cpdfdraw.ImageXObject (n, fst (Cpdfimage.obj_of_jpeg_data (Pdfio.bytes_of_raw d)))) | None -> let name, filename = match String.split_on_char '=' n with | [name; filename] -> name, filename | _ -> error "addjpeg: bad file specification" in try let data = Pdfio.bytes_of_string (contents_of_file filename) in addop (Cpdfdraw.ImageXObject (name, fst (Cpdfimage.obj_of_jpeg_data data))) with _ -> error "addjpeg: could not load JPEG" let addpng ?data n = match data with | Some d -> addop (Cpdfdraw.ImageXObject (n, fst (Cpdfimage.obj_of_png_data (Pdfio.bytes_of_raw d)))) | None -> let name, filename = match String.split_on_char '=' n with | [name; filename] -> name, filename | _ -> error "addpng: bad file specification" in let data = Pdfio.bytes_of_string (contents_of_file filename) in addop (Cpdfdraw.ImageXObject (name, fst (Cpdfimage.obj_of_png_data data))) let addimage s = addop (Cpdfdraw.Image s) let addnewpage s = addop Cpdfdraw.NewPage let addopacity f = addop (Cpdfdraw.Opacity f) let addsopacity f = addop (Cpdfdraw.SOpacity f) let addleading f = addop (Cpdfdraw.Leading f) let addcharspace f = addop (Cpdfdraw.CharSpace f) let addwordspace f = addop (Cpdfdraw.WordSpace f) let addtextscale f = addop (Cpdfdraw.TextScale f) let addrendermode i = addop (Cpdfdraw.RenderMode i) let addrise f = addop (Cpdfdraw.Rise f) let addnewline () = addop Cpdfdraw.Newline let add_default_fontpack fontname = if not !fontpack_initialised then begin addop (Cpdfdraw.FontPack (fontname, !embed_font (), null_hash ())); set fontpack_initialised end let addtext s = begin match !drawops with _::_::_ -> () | _ -> error "-text must be in a -bt / -et section" end; add_default_fontpack (!getfontname ()); addop (Cpdfdraw.Font (!getfontname (), !getfontsize ())); addop (Cpdfdraw.Text s) let addspecialtext s = begin match !drawops with _::_::_ -> () | _ -> error "-stext must be in a -bt / -et section" end; add_default_fontpack (!getfontname ()); addop (Cpdfdraw.Font (!getfontname (), !getfontsize ())); addop (Cpdfdraw.SpecialText s) (* "L200pt=....." *) let jws s = let j, rest = match explode s with | 'L'::t -> (Cpdfdraw.Left, t) | 'R'::t -> (Cpdfdraw.Right, t) | 'C'::t -> (Cpdfdraw.Centre, t) | _ -> error "Unknown justification specification" in let w, s = match String.split_on_char '=' (implode rest) with | [w; s] -> (Cpdfcoord.parse_single_number (Pdf.empty ()) w, s) | _ -> error "addjpeg: bad file specification" in j, w, s let addpara s = begin match !drawops with _::_::_ -> () | _ -> error "-para must be in a -bt / -et section" end; add_default_fontpack (!getfontname ()); addop (Cpdfdraw.Font (!getfontname (), !getfontsize ())); let j, w, s = jws s in addop (Cpdfdraw.Para (None, j, w, [s])) let rec split_on_newlines a = function | 0x005c::0x006e::t -> rev a::split_on_newlines [] t | h::t -> split_on_newlines (h::a) t | [] -> if a = [] then [] else [rev a] let split_on_newlines s = map Pdftext.utf8_of_codepoints (split_on_newlines [] (Pdftext.codepoints_of_utf8 s)) let addparas s = begin match !drawops with _::_::_ -> () | _ -> error "-paras must be in a -bt / -et section" end; add_default_fontpack (!getfontname ()); addop (Cpdfdraw.Font (!getfontname (), !getfontsize ())); let j, w, s = jws s in let splits = split_on_newlines s in let indent = !getindent () in addop (Cpdfdraw.Para (indent, j, w, splits)) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/cpdftruetype.mli�������������������������������������������������������������������������0000664�0001750�0001750�00000001775�14771516640�014364� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(** Parse and subset TrueType fonts *) (** The type of a single parsed font, including everything needed to build a PDF font. *) type t = {flags : int; minx : int; miny : int; maxx : int; maxy : int; italicangle : int; ascent : int; descent : int; capheight : int; stemv : int; xheight : int; avgwidth : int; maxwidth : int; firstchar : int; lastchar : int; widths : int array; subset_fontfile : Pdfio.bytes; subset : int list; tounicode : (int, string) Hashtbl.t option} (** Parse the given TrueType font file. It will return one or more fonts. The first, a plain Latin font in the given encoding. Others are for the additional characters in the font. You should supply a subset (a list of unicode codepoints whose corresponding glyphs are required). *) val parse : subset:int list -> Pdfio.bytes -> Pdftext.encoding -> t list (** Return the list of cmaps from a font file (used for PDF/UA verification). *) val cmaps : Pdfio.bytes -> (int * int) list ���cpdf-2.8.1/cpdfprinttree.mli������������������������������������������������������������������������0000664�0001750�0001750�00000000505�14771516640�014505� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(** Print trees *) (** Print a tree to a buffer. *) val to_buffer : ?line_prefix: string -> get_name: ('a -> string) -> get_children: ('a -> 'a list) -> Buffer.t -> 'a -> unit (** Print a tree to a string. *) val to_string : ?line_prefix: string -> get_name: ('a -> string) -> get_children: ('a -> 'a list) -> 'a -> string �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/cpdfdraw.mli�����������������������������������������������������������������������������0000664�0001750�0001750�00000004113�14771516640�013425� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(** Draw on PDFs *) type colspec = NoCol | RGB of float * float * float | Grey of float | CYMK of float * float * float * float type justification = Left | Right | Centre type drawops = | Rect of float * float * float * float | Bezier of float * float * float * float * float * float | Bezier23 of float * float * float * float | Bezier13 of float * float * float * float | To of float * float | Line of float * float | ClosePath | SetFill of colspec | SetStroke of colspec | SetLineThickness of float | SetLineCap of int | SetLineJoin of int | SetMiterLimit of float | SetDashPattern of float list * float | Matrix of Pdftransform.transform_matrix | Qq of drawops list | Fill | FillEvenOdd | Stroke | FillStroke | FillStrokeEvenOdd | Clip | ClipEvenOdd | FormXObject of float * float * float * float * string * drawops list | Use of string | ImageXObject of string * Pdf.pdfobject | Image of string | NewPage | Opacity of float | SOpacity of float | FontPack of string * Cpdfembed.cpdffont * (int, unit) Hashtbl.t | Font of string * float | TextSection of drawops list | Text of string | SpecialText of string | Para of float option * justification * float * string list | Newline | Leading of float | CharSpace of float | WordSpace of float | TextScale of float | RenderMode of int | Rise of float | Tag of string | EndTag | STag of string | EndSTag | BeginArtifact | EndArtifact | Namespace of string | EltInfo of string * Pdf.pdfobject | EndEltInfo of string | AutoTag of bool (** When this is set, any untagged material is tagged as an artifact. *) val do_add_artifacts : bool ref (** Set the role map. *) val rolemap : string ref (** Calling [draw struct_tree fast underneath filename bates batespad range pdf drawops] draws on top of all the pages in the range. *) val draw : struct_tree:bool -> fast:bool -> underneath:bool -> filename:string -> bates:int -> batespad:int option -> int list -> Pdf.t -> drawops list -> Pdf.t �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/cpdftruetype.ml��������������������������������������������������������������������������0000664�0001750�0001750�00000072710�14771516640�014210� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(* Make one or more subsets from a TrueType font *) open Pdfutil open Pdfio let dbg = (* Pdfe.logger := (fun s -> print_string s; flush stdout) *) ref false let test_subsetting = false type t = {flags : int; minx : int; miny : int; maxx : int; maxy : int; italicangle : int; ascent : int; descent : int; capheight : int; stemv : int; xheight : int; avgwidth : int; maxwidth : int; firstchar : int; lastchar : int; widths : int array; subset_fontfile : Pdfio.bytes; subset : int list; tounicode : (int, string) Hashtbl.t option} let debug_t t = let hex u = let b = Buffer.create 32 in String.iter (fun x -> Buffer.add_string b (Printf.sprintf "%02X" (int_of_char x))) u; Buffer.contents b in Printf.printf "firstchar: %i\n" t.firstchar; Printf.printf "lastchar: %i\n" t.lastchar; Printf.printf "widths:"; Array.iter (Printf.printf " %i") t.widths; Printf.printf "\n"; Printf.printf "fontfile of length %i\n" (bytes_size t.subset_fontfile); Printf.printf "subset:"; iter (Printf.printf " U+%04X") t.subset; Printf.printf "\n"; Printf.printf "tounicode:\n"; begin match t.tounicode with | None -> Printf.printf "None"; | Some table -> iter (fun (k, v) -> Printf.printf "%i --> U+%s\n" k (hex v)) (sort compare (list_of_hashtbl table)) end; Printf.printf "\n" let required_tables = ["head"; "hhea"; "loca"; "cmap"; "maxp"; "cvt "; "glyf"; "prep"; "hmtx"; "fpgm"] let read_fixed b = let a = getval_31 b 16 in let b = getval_31 b 16 in a, b let read_ushort b = getval_31 b 16 let read_ulong b = getval_32 b 32 let read_byte b = getval_31 b 8 let read_short b = sign_extend 16 (getval_31 b 16) (*let read_f2dot14 b = let v = read_ushort b in float_of_int (sign_extend 2 (v lsr 14)) +. (float_of_int (v land 0x3FFF) /. 16384.)*) let discard_bytes b n = for x = 1 to n do ignore (getval_31 b 8) done let padding n = if n mod 4 = 0 then 0 else 4 - n mod 4 let padding32 n = i32ofi (padding (i32toi n)) let pdf_unit unitsPerEm x = int_of_float (Float.round (float_of_int x *. 1000. /. float_of_int unitsPerEm)) let string_of_tag t = Printf.sprintf "%c%c%c%c" (char_of_int (i32toi (Int32.shift_right t 24))) (char_of_int (i32toi (Int32.logand 0x000000FFl (Int32.shift_right t 16)))) (char_of_int (i32toi (Int32.logand 0x000000FFl (Int32.shift_right t 8)))) (char_of_int (i32toi (Int32.logand 0x000000FFl t))) let read_format_6_encoding_table b = let firstCode = read_ushort b in let entryCount = read_ushort b in let t = null_hash () in for x = firstCode to firstCode + entryCount - 1 do Hashtbl.add t x (read_ushort b) done; t let read_magic_formula b glyphIndexArrayStart seg segCount ro c sc = b.input.seek_in (glyphIndexArrayStart + (seg - segCount + ro / 2 + (c - sc)) * 2); b.bit <- 0; b.bitsread <- 0; b.currbyte <- 0; read_short b let read_format_4_encoding_table b = let t = null_hash () in let segCountX2 = read_ushort b in let segCount = segCountX2 / 2 in let _ (* searchRange *) = read_ushort b in let _ (* entrySelector *) = read_ushort b in let _ (* rangeShift *) = read_ushort b in let endCodes = Array.init segCount (fun _ -> read_ushort b) in let _ (* reservedPad *) = read_ushort b in let startCodes = Array.init segCount (fun _ -> read_ushort b) in let idDelta = Array.init segCount (fun _ -> read_ushort b) in let idRangeOffset = Array.init segCount (fun _ -> read_ushort b) in let glyphIndexArrayStart = b.input.pos_in () in for seg = 0 to segCount - 1 do let ec, sc, del, ro = endCodes.(seg), startCodes.(seg), idDelta.(seg), idRangeOffset.(seg) in for c = sc to ec do if c != 0xFFFF then if ro = 0 then Hashtbl.add t c ((c + del) mod 65536) else let v = read_magic_formula b glyphIndexArrayStart seg segCount ro c sc in Hashtbl.add t c (((if v = 0 then c else v) + del) mod 65536) done done; t (*let print_encoding_table fmt table = let unicodedata = Cpdfunicodedata.unicodedata () in let unicodetable = Hashtbl.create 16000 in iter (fun x -> Hashtbl.add unicodetable x.Cpdfunicodedata.code_value x.Cpdfunicodedata.character_name) unicodedata; let l = sort compare (list_of_hashtbl table) in if !dbg then Printf.printf "Format table %i: There are %i characters in this font\n" fmt (length l); iter (fun (c, gi) -> let str = Printf.sprintf "%04X" c in if !dbg then Printf.printf "Char %s (%s) is at glyph index %i\n" str (try Hashtbl.find unicodetable str with Not_found -> "Not_found") gi) l*) let read_encoding_table fmt length version b = if !dbg then Printf.printf "********** format %i table has length, version %i, %i\n" fmt length version; match fmt with | 0 -> let t = null_hash () in for x = 0 to 255 do Hashtbl.add t x (read_byte b) done; t | 4 -> read_format_4_encoding_table b; | 6 -> read_format_6_encoding_table b; | n -> Pdfe.log (Printf.sprintf "read_encoding_table: format %i not known\n" n); null_hash () let read_loca_table indexToLocFormat numGlyphs b = match indexToLocFormat with | 0 -> Array.init (numGlyphs + 1) (function _ -> i32ofi (read_ushort b * 2)) | 1 -> Array.init (numGlyphs + 1) (function _ -> read_ulong b) | _ -> raise (Pdf.PDFError "Unknown indexToLocFormat in read_loca_table") let read_os2_table unitsPerEm b blength = let version = read_ushort b in if !dbg then Printf.printf "OS/2 table blength = %i bytes, version number = %i\n" blength version; let xAvgCharWidth = pdf_unit unitsPerEm (read_short b) in discard_bytes b 64; (* discard 14 entries usWeightClass...fsLastCharIndex *) (* -- end of original OS/2 Version 0 Truetype table. Must check length before reading now. *) let sTypoAscender = if blength > 68 then pdf_unit unitsPerEm (read_short b) else 0 in let sTypoDescender = if blength > 68 then pdf_unit unitsPerEm (read_short b) else 0 in discard_bytes b 6; (* discard sTypoLineGap...usWinDescent *) (* -- end of OpenType version 0 table *) discard_bytes b 8; (* discard ulCodePageRange1, ulCodePageRange2 *) (* -- end of OpenType version 1 table *) let sxHeight = if version < 2 then 0 else pdf_unit unitsPerEm (read_short b) in let sCapHeight = if version < 2 then 0 else pdf_unit unitsPerEm (read_short b) in (sTypoAscender, sTypoDescender, sCapHeight, sxHeight, xAvgCharWidth) let read_post_table b = discard_bytes b 4; (* discard version *) let italicangle, n = read_fixed b in italicangle (* (nb bit 1 is actualy bit 0 etc.) *) let calculate_flags symbolic italicangle = let italic = if italicangle <> 0 then 1 else 0 in let symbolic, nonsymbolic = if symbolic then 1, 0 else 0, 1 in (italic lsl 6) lor (symbolic lsl 2) lor (nonsymbolic lsl 5) let read_hhea_table b = discard_bytes b 34; read_ushort b (* numOfLongHorMetrics *) let read_hmtx_table numOfLongHorMetrics b = Array.init numOfLongHorMetrics (fun _ -> let r = read_ushort b in ignore (read_short b); r) (* Expand the subset of locations to include composites *) let expand_composites_one mk_b loca glyfoffset locations = let rec read_components b = let componentFlags = read_ushort b in let glyphIndex = read_ushort b in if componentFlags land 0x0001 > 0 then discard_bytes b 4 else discard_bytes b 2; (if componentFlags land 0x0008 > 0 then discard_bytes b 2 else if componentFlags land 0x0040 > 0 then discard_bytes b 4 else if componentFlags land 0x0080 > 0 then discard_bytes b 8); if componentFlags land 0x0020 > 0 then glyphIndex::read_components b else [glyphIndex] in let expanded = map (fun l -> let b = mk_b (i32toi (i32add glyfoffset loca.(l))) in let numberOfContours = read_short b in if numberOfContours < 0 then begin discard_bytes b 8; (* xMin, xMax, yMin, yMax *) l::read_components b end else [l]) locations in sort compare (setify (flatten expanded)) let rec expand_composites mk_b loca glyfoffset locations = let expanded = expand_composites_one mk_b loca glyfoffset locations in if expanded = locations then expanded else expand_composites mk_b loca glyfoffset expanded let write_loca_table subset cmap indexToLocFormat bs mk_b glyfoffset loca = let locnums = null_hash () in Hashtbl.add locnums 0 (); (* .notdef *) iter (fun u -> try let locnum = Hashtbl.find cmap u in if !dbg then Printf.printf "write_loca_table: Unicode U+%04X is at location number %i\n" u locnum; Hashtbl.add locnums locnum () with Not_found -> ()) subset; let locnums = expand_composites mk_b loca glyfoffset (sort compare (map fst (list_of_hashtbl locnums))) in let len = ref 0 in let write_entry loc position = match indexToLocFormat with | 0 -> len += 2; putval bs 16 (i32div position 2l) | 1 -> len += 4; putval bs 32 position | _ -> raise (Pdf.PDFError "Unknown indexToLocFormat in write_loca_table") in let pos = ref 0l in let pairs = map (fun loc -> let len = i32sub loca.(loc + 1) loca.(loc) in let r = (loc, !pos) in pos := i32add !pos len; r) (sort compare locnums) in let pairs = Array.of_list (pairs @ [(Array.length loca - 1, !pos)]) in Array.iteri (fun i (loc, off) -> if i <> Array.length pairs - 1 then begin write_entry loc off; let loc', off' = pairs.(i + 1) in for x = 0 to loc' - loc - 2 do write_entry (loc + x) off' done end else write_entry loc off) pairs; for x = 1 to padding !len do putval bs 8 0l done (* Write the notdef glyf, and any others in the subset *) let write_glyf_table subset cmap bs mk_b glyfoffset loca = if !dbg then Printf.printf "***write_glyf_table\n"; let locnums = null_hash () in Hashtbl.add locnums 0 (); (* .notdef *) iter (fun u -> try let locnum = Hashtbl.find cmap u in if !dbg then Printf.printf "write_glyf_table: Unicode U+%04X is at loc num %i\n" u locnum; Hashtbl.add locnums locnum () with Not_found -> ()) subset; let locnums = expand_composites mk_b loca glyfoffset (sort compare (map fst (list_of_hashtbl locnums))) in if !dbg then (Printf.printf "We want glyfs for locations: "; iter (Printf.printf "%i ") locnums; Printf.printf "\n"); let byteranges = map (fun x -> (loca.(x), loca.(x + 1))) locnums in if !dbg then (Printf.printf "Byte ranges: "; iter (fun (a, b) -> Printf.printf "(%li, %li) " a b) byteranges; Printf.printf "\n"); let len = fold_left i32add 0l (map (fun (a, b) -> i32sub b a) byteranges) in let write_bytes bs a l = if !dbg then Printf.printf "glyf: write_bytes %li %li\n" a l; let b = mk_b (i32toi (i32add glyfoffset a)) in for x = 1 to i32toi l do putval bs 8 (getval_32 b 8) done in iter (fun (a, b) -> write_bytes bs a (i32sub b a)) byteranges; for x = 1 to padding (i32toi len) do putval bs 8 0l done; len let write_cmap_table subset cmap bs = if !dbg then Printf.printf "***write_cmap_table\n"; let glyphindexes = map (fun code -> try Hashtbl.find cmap code with Not_found -> 0) subset in putval bs 16 0l; (* table version number *) putval bs 16 1l; (* number of encoding tables *) putval bs 16 1l; (* platform ID *) putval bs 16 0l; (* platform encoding ID *) putval bs 32 12l; (* subtable offset = 12 bytes from beginning of table *) putval bs 16 6l; (* Table format 6 *) putval bs 16 (i32ofi (10 + 2 * length glyphindexes)); (* subtable length *) putval bs 16 0l; putval bs 16 33l; (* first character code *) putval bs 16 (i32ofi (length glyphindexes)); (* number of character codes *) iter (fun gi -> putval bs 16 (i32ofi gi)) glyphindexes; (* glyph indexes *) let len = i32ofi (22 + 2 * length glyphindexes) in for x = 1 to padding (i32toi len) do putval bs 8 0l done; len let calculate_widths unitsPerEm encoding firstchar lastchar subset cmapdata hmtxdata = (* For widths, we need the unicode code, not the unencoded byte *) let unicode_codepoint_of_pdfcode encoding_table glyphlist_table p = try hd (Hashtbl.find glyphlist_table (Hashtbl.find encoding_table p)) with Not_found -> 0 in if lastchar < firstchar then Cpdferror.error "lastchar < firstchar" else (*if !dbg then iter (fun (a, b) -> Printf.printf "%i -> %i\n" a b) (sort compare (list_of_hashtbl cmapdata));*) let encoding_table = Pdftext.table_of_encoding encoding in let glyphlist_table = Pdfglyphlist.glyph_hashes () in Array.init (lastchar - firstchar + 1) (fun pos -> let code = pos + firstchar in if !dbg then Printf.printf "code %i --> " code; let code = unicode_codepoint_of_pdfcode encoding_table glyphlist_table code in if !dbg then Printf.printf "unicode %i --> " code; if not (mem code subset) then 0 else try let glyphnum = Hashtbl.find cmapdata code in if !dbg then Printf.printf "glyph number %i --> " glyphnum; (* If it fails, we are a monospaced font. Pick the last hmtxdata entry. *) let width = try hmtxdata.(glyphnum) with _ -> hmtxdata.(Array.length hmtxdata - 1) in if !dbg then Printf.printf "width %i\n" width; pdf_unit unitsPerEm width with e -> if !dbg then Printf.printf "no width for %i\n" code; hmtxdata.(0)) let calculate_width_higher unitsPerEm firstchar lastchar subset cmapdata hmtxdata = let subset = Array.of_list subset in Array.init (lastchar - firstchar + 1) (fun pos -> try let glyphnum = Hashtbl.find cmapdata subset.(pos) in if !dbg then Printf.printf "glyph number %i --> " glyphnum; (* If it fails, we are a monospaced font. Pick the last hmtxdata entry. *) let width = try hmtxdata.(glyphnum) with _ -> hmtxdata.(Array.length hmtxdata - 1) in if !dbg then Printf.printf "width %i\n" width; pdf_unit unitsPerEm width with Not_found -> hmtxdata.(0)) let calculate_maxwidth unitsPerEm hmtxdata = pdf_unit unitsPerEm (hd (sort (fun a b -> compare b a) (Array.to_list hmtxdata))) let subset_font major minor tables indexToLocFormat subset encoding cmap loca mk_b glyfoffset data = let tables = Array.of_list (sort (fun (_, _, o, _) (_, _, o', _) -> compare o o') tables) in let tablesout = ref [] in let cut = ref 0l in Array.iteri (fun i (tag, checkSum, offset, ttlength) -> if !dbg then Printf.printf "tag = %li = %s, offset = %li\n" tag (string_of_tag tag) offset; if mem (string_of_tag tag) required_tables then tablesout := (tag, checkSum, i32sub offset !cut, ttlength)::!tablesout else if i < Array.length tables - 1 then cut := i32add !cut (match tables.(i + 1) with (_, _, offset', _) -> i32sub offset' offset)) tables; let header_size_reduction = i32ofi (16 * (Array.length tables - length !tablesout)) in let glyf_table_size_reduction = ref 0l in let cmap_table_size_reduction = ref 0l in let newtables = Array.of_list (map (fun (tag, checksum, offset, ttlength) -> let ttlength = if string_of_tag tag = "glyf" then let bs = make_write_bitstream () in let newlen = write_glyf_table subset cmap bs mk_b glyfoffset loca in let paddedlen = i32ofi (bytes_size (bytes_of_write_bitstream bs)) in glyf_table_size_reduction := i32sub (i32add ttlength (padding32 ttlength)) paddedlen; newlen else if string_of_tag tag = "cmap" && encoding = Pdftext.ImplicitInFontFile then let bs = make_write_bitstream () in let newlen = write_cmap_table subset cmap bs in let paddedlen = i32ofi (bytes_size (bytes_of_write_bitstream bs)) in cmap_table_size_reduction := i32sub (i32add ttlength (padding32 ttlength)) paddedlen; newlen else ttlength in (* Don't reduce by a table size reduction we have just set, but otherwise do. *) let offset' = i32sub (i32sub offset header_size_reduction) (if string_of_tag tag = "glyf" then !cmap_table_size_reduction else if string_of_tag tag = "cmap" then !glyf_table_size_reduction else i32add !cmap_table_size_reduction !glyf_table_size_reduction) in (tag, checksum, offset', ttlength)) (rev !tablesout)) in if !dbg then Printf.printf "***Reduced:\n"; Array.iter (fun (tag, checkSum, offset, ttlength) -> if !dbg then Printf.printf "tag = %li = %s, offset = %li, length = %li\n" tag (string_of_tag tag) offset ttlength) newtables; let bs = make_write_bitstream () in (* table directory *) let numtables = Array.length newtables in putval bs 16 (i32ofi major); putval bs 16 (i32ofi minor); putval bs 16 (i32ofi numtables); (* numTables *) putval bs 16 (i32ofi (16 * pow2lt numtables)); (* searchRange *) putval bs 16 (i32ofi (int_of_float (log (float_of_int (pow2lt numtables))))); (* entrySelector *) putval bs 16 (i32ofi (numtables * 16)); (* rangeShift *) Array.iter (fun (tag, checkSum, offset, ttlength) -> putval bs 32 tag; putval bs 32 checkSum; putval bs 32 offset; putval bs 32 ttlength) newtables; (* find each table in original data, calculating the length from the next offset. On the last, copy until we run out of data *) let findtag tag = let off = ref 0l in let len = ref None in begin try for x = 0 to Array.length tables - 1 do let t, _, offset, _ = tables.(x) in if t = tag then begin off := offset; if x < Array.length tables - 1 then len := Some (let _, _, nextoffset, _ = tables.(x + 1) in i32sub nextoffset offset); raise Exit end done; Cpdferror.error "failed to find table" with Exit -> (!off, !len) end in Array.iter (fun (tag, _, _, _) -> if !dbg then Printf.printf "Writing %s table\n" (string_of_tag tag); if string_of_tag tag = "loca" then write_loca_table subset cmap indexToLocFormat bs mk_b glyfoffset loca else if string_of_tag tag = "glyf" then ignore (write_glyf_table subset cmap bs mk_b glyfoffset loca) else if string_of_tag tag = "cmap" && encoding = Pdftext.ImplicitInFontFile then ignore (write_cmap_table subset cmap bs) else match findtag tag with | (og_off, Some len) -> let b = mk_b (i32toi og_off) in for x = 0 to i32toi len - 1 do putval bs 8 (getval_32 b 8) done | (og_off, None) -> let b = mk_b (i32toi og_off) in try while true do putval bs 8 (getval_32 b 8) done with _ -> ()) newtables; bytes_of_write_bitstream bs let write_font filename data = let fh = open_out_bin filename in output_string fh (string_of_bytes data); close_out fh let find_main encoding subset = if test_subsetting then (take subset 3, [drop subset 3]) else let encoding_table = Pdftext.table_of_encoding encoding in let first, rest = List.partition (fun u -> try ignore (Hashtbl.find encoding_table u); true with Not_found -> false) subset in (first, splitinto 224 rest) let collecting_cmaps = ref false let collected_cmaps = ref [] let parse ~subset data encoding = let mk_b byte_offset = bitbytes_of_input (let i = input_of_bytes data in i.seek_in byte_offset; i) in let b = mk_b 0 in let major, minor = read_fixed b in let numTables = read_ushort b in let searchRange = read_ushort b in let entrySelector = read_ushort b in let rangeShift = read_ushort b in if !dbg then Printf.printf "numTables = %i, searchRange = %i, entrySelector = %i, rangeShift = %i\n" numTables searchRange entrySelector rangeShift; let tables = ref [] in for x = 1 to numTables do let tag = read_ulong b in let checkSum = read_ulong b in let offset = read_ulong b in let ttlength = read_ulong b in if !dbg then Printf.printf "tag = %li = %s, checkSum = %li, offset = %li, ttlength = %li\n" tag (string_of_tag tag) checkSum offset ttlength; tables =| (tag, checkSum, offset, ttlength); done; let headoffset, headlength = match keep (function (t, _, _, _) -> string_of_tag t = "head") !tables with | (_, _, o, l)::_ -> o, l | [] -> raise (Pdf.PDFError "No maxp table found in TrueType font") in let b = mk_b (i32toi headoffset) in discard_bytes b 18; let unitsPerEm = read_ushort b in discard_bytes b 16; let minx = pdf_unit unitsPerEm (read_short b) in let miny = pdf_unit unitsPerEm (read_short b) in let maxx = pdf_unit unitsPerEm (read_short b) in let maxy = pdf_unit unitsPerEm (read_short b) in discard_bytes b 6; let indexToLocFormat = read_short b in let _ (*glyphDataFormat*) = read_short b in let os2 = match keep (function (t, _, _, _) -> string_of_tag t = "OS/2") !tables with | (_, _, o, l)::_ -> Some (o, l) | [] -> None in let ascent, descent, capheight, xheight, avgwidth = match os2 with | None -> if !collecting_cmaps then (0, 0, 0, 0, 0) else raise (Pdf.PDFError "No os/2 table found in truetype font") | Some (o, l) -> let b = mk_b (i32toi o) in read_os2_table unitsPerEm b (i32toi l) in let italicangle = match keep (function (t, _, _, _) -> string_of_tag t = "post") !tables with | (_, _, o, _)::_ -> read_post_table (mk_b (i32toi o)) | _ -> 0 in if !dbg then Printf.printf "ascent %i descent %i capheight %i xheight %i avgwidth %i\n" ascent descent capheight xheight avgwidth; let cmap = match keep (function (t, _, _, _) -> string_of_tag t = "cmap") !tables with | (_, _, o, l)::_ -> Some (o, l) | [] -> None in let glyphcodes = ref (null_hash ()) in begin match cmap with | None -> for x = 0 to 255 do Hashtbl.add !glyphcodes x x done | Some (cmapoffset, cmaplength) -> let b = mk_b (i32toi cmapoffset) in let cmap_version = read_ushort b in let num_encoding_tables = read_ushort b in if !dbg then Printf.printf "cmap version %i. There are %i encoding tables\n" cmap_version num_encoding_tables; for x = 1 to num_encoding_tables do let platform_id = read_ushort b in let encoding_id = read_ushort b in let subtable_offset = read_ulong b in if !dbg then Printf.printf "subtable %i. platform_id = %i, encoding_id = %i, subtable_offset = %li\n" x platform_id encoding_id subtable_offset; collected_cmaps := (platform_id, encoding_id)::!collected_cmaps; let b = mk_b (i32toi cmapoffset + i32toi subtable_offset) in let fmt = read_ushort b in let lngth = read_ushort b in let version = read_ushort b in if !dbg then Printf.printf "subtable has format %i, length %i, version %i\n" fmt lngth version; let got_glyphcodes = read_encoding_table fmt lngth version b in Hashtbl.iter (Hashtbl.add !glyphcodes) got_glyphcodes done; end; let maxpoffset, maxplength = match keep (function (t, _, _, _) -> string_of_tag t = "maxp") !tables with | (_, _, o, l)::_ -> o, l | [] -> raise (Pdf.PDFError "No maxp table found in TrueType font") in let b = mk_b (i32toi maxpoffset) in let mmajor, mminor = read_fixed b in let numGlyphs = read_ushort b in if !dbg then Printf.printf "maxp table version %i.%i: This font has %i glyphs\n" mmajor mminor numGlyphs; let locaoffset, localength = match keep (function (t, _, _, _) -> string_of_tag t = "loca") !tables with | (_, _, o, l)::_ -> o, l | [] -> raise (Pdf.PDFError "No loca table found in TrueType font") in let subset_1, subsets_2 = find_main encoding subset in let flags_1 = calculate_flags false italicangle in let flags_2 = calculate_flags true italicangle in if subset_1 = [] then raise (Pdf.PDFError "Cpdftruetype: Refusing to create font with no characters") else let firstchar_1, lastchar_1 = extremes (sort compare subset_1) in let firstchars_2, lastchars_2 = split (map (fun subset -> (33, length subset + 33 - 1)) subsets_2) in let numOfLongHorMetrics = match keep (function (t, _, _, _) -> string_of_tag t = "hhea") !tables with | (_, _, o, l)::_ -> let b = mk_b (i32toi o) in read_hhea_table b | _ -> 0 in let hmtxdata = match keep (function (t, _, _, _) -> string_of_tag t = "hmtx") !tables with | (_, _, o, _)::_ -> read_hmtx_table numOfLongHorMetrics (mk_b (i32toi o)) | [] -> raise (Pdf.PDFError "No hmtx table found in TrueType font") in let widths_1 = calculate_widths unitsPerEm encoding firstchar_1 lastchar_1 subset_1 !glyphcodes hmtxdata in let widths_2 = map3 (fun f l s -> calculate_width_higher unitsPerEm f l s !glyphcodes hmtxdata) firstchars_2 lastchars_2 subsets_2 in let maxwidth = calculate_maxwidth unitsPerEm hmtxdata in let stemv = 0 in let b = mk_b (i32toi locaoffset) in let loca = read_loca_table indexToLocFormat numGlyphs b in let glyfoffset, glyflength = match keep (function (t, _, _, _) -> string_of_tag t = "glyf") !tables with | (_, _, o, l)::_ -> o, l | [] -> raise (Pdf.PDFError "No glyf table found in TrueType font") in let main_subset = subset_font major minor !tables indexToLocFormat subset_1 encoding !glyphcodes loca mk_b glyfoffset data in let seconds_subsets = map (fun subset -> subset_font major minor !tables indexToLocFormat subset Pdftext.ImplicitInFontFile !glyphcodes loca mk_b glyfoffset data) subsets_2 in let seconds_tounicodes = map (fun subset -> if subset = [] then None else let h = null_hash () in iter2 (fun n u -> let s = implode (tl (tl (explode (Pdftext.utf16be_of_codepoints [u])))) in Hashtbl.add h n s) (map (( + ) 33) (indx0 subset)) subset; Some h) subsets_2 in let one = {flags = flags_1; minx; miny; maxx; maxy; italicangle; ascent; descent; capheight; stemv; xheight; avgwidth; maxwidth; firstchar = firstchar_1; lastchar = lastchar_1; widths = widths_1; subset_fontfile = main_subset; subset = subset_1; tounicode = None} in let twos = map6 (fun firstchar lastchar widths subset_fontfile subset tounicode -> {flags = flags_2; minx; miny; maxx; maxy; italicangle; ascent; descent; capheight; stemv; xheight; avgwidth; maxwidth; firstchar; lastchar; widths; subset_fontfile; subset; tounicode}) firstchars_2 lastchars_2 widths_2 seconds_subsets subsets_2 seconds_tounicodes in if !dbg then (Printf.printf "\nMain subset:\n"; debug_t one); if !dbg then write_font "one.ttf" one.subset_fontfile; if !dbg && twos <> [] then (Printf.printf "\nHigher subset:\n"; debug_t (hd twos)); if !dbg && twos <> [] then write_font "two.ttf" (hd twos).subset_fontfile; one::twos let parse ~subset data encoding = try parse ~subset data encoding with e -> raise (Cpdferror.error ("Failed to parse TrueType font: " ^ Printexc.to_string e)) (** Return the list of cmaps from a font file (used for PDF/UA verification). *) let cmaps data = set collecting_cmaps; collected_cmaps := []; let _ = try ignore (parse ~subset:[] data Pdftext.WinAnsiEncoding) with e -> () in clear collecting_cmaps; !collected_cmaps ��������������������������������������������������������cpdf-2.8.1/cpdfannot.mli����������������������������������������������������������������������������0000664�0001750�0001750�00000001402�14771516640�013605� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(** Annotations *) (* {2 Modern functions} *) (** Get annotations as JSON *) val get_annotations_json : Pdf.t -> int list -> Pdfio.bytes (** Set annotations from JSON. *) val set_annotations_json : Pdf.t -> Pdfio.input -> unit (** Remove the annotations on given pages. *) val remove_annotations : int list -> Pdf.t -> Pdf.t (** Copy the annotations on a given set of pages *) val copy_annotations : int list -> Pdf.t -> Pdf.t -> unit (* {2 Old-style functions *) (** Return the annotations as a simple old-style (pagenumber, content) list. *) val get_annotations : Cpdfmetadata.encoding -> Pdf.t -> (int * string) list (** List the annotations to standard output in a given encoding. *) val list_annotations : int list -> Cpdfmetadata.encoding -> Pdf.t -> unit ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/cpdfremovetext.ml������������������������������������������������������������������������0000664�0001750�0001750�00000004151�14771516640�014523� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������open Pdfutil let removetext range pdf = (* Could fail on nesting, or other marked content inside our marked content.*) let rec remove_until_last_EMC level = function | [] -> [] | Pdfops.Op_BMC "/CPDFSTAMP"::more -> remove_until_last_EMC (level + 1) more | Pdfops.Op_EMC::more -> if level = 1 then more else remove_until_last_EMC (level - 1) more | _::more -> remove_until_last_EMC level more in let rec remove_stamps prev = function | [] -> rev prev | Pdfops.Op_BMC "/CPDFSTAMP"::more -> let rest = remove_until_last_EMC 1 more in remove_stamps prev rest | h::t -> remove_stamps (h::prev) t in let removetext_page _ page = {page with Pdfpage.content = let ops = Pdfops.parse_operators pdf page.Pdfpage.resources page.Pdfpage.content in [Pdfops.stream_of_ops (remove_stamps [] ops)]} in Cpdfpage.process_pages (Pdfpage.ppstub removetext_page) pdf range let remove_all_text_ops pdf resources content = let is_textop = function Pdfops.Op_Tj _ | Pdfops.Op_' _ | Pdfops.Op_'' _ | Pdfops.Op_TJ _ -> true | _ -> false in let content' = let ops = Pdfops.parse_operators pdf resources content in Pdfops.stream_of_ops (option_map (function x -> if is_textop x then None else Some x) ops) in [content'] let remove_all_text_page pdf p = let resources = p.Pdfpage.resources in let content = p.Pdfpage.content in Pdfpage.process_xobjects pdf p remove_all_text_ops; {p with Pdfpage.content = remove_all_text_ops pdf resources content}, pdf let remove_all_text range pdf = let pages = Pdfpage.pages_of_pagetree pdf in let pagenums = indx pages in let pdf = ref pdf in let pages' = ref [] in iter2 (fun p pagenum -> let p', pdf' = if mem pagenum range then remove_all_text_page !pdf p else p, !pdf in pdf := pdf'; pages' =| p') pages pagenums; Pdfpage.change_pages true !pdf (rev !pages') �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/cpdfxobject.ml���������������������������������������������������������������������������0000664�0001750�0001750�00000006705�14771516640�013766� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������open Pdfutil open Pdfio open Cpdferror let add_xobject_to_page xobjname xobjnum page pdf = let resources' = let xobjects = match Pdf.lookup_direct pdf "/XObject" page.Pdfpage.resources with | Some xobjects -> xobjects | _ -> Pdf.Dictionary [] in let new_xobjects = Pdf.add_dict_entry xobjects xobjname (Pdf.Indirect xobjnum) in Pdf.add_dict_entry page.Pdfpage.resources "/XObject" new_xobjects in {page with Pdfpage.resources = resources'} let add_page_as_xobject pdf range page name = let xobject_data = match Pdfops.stream_of_ops (Pdfops.parse_operators pdf page.Pdfpage.resources page.Pdfpage.content) with Pdf.Stream {contents = (_, Got b)} -> b | _ -> assert false in let xobject_dict = ["/Type", Pdf.Name "/XObject"; "/Subtype", Pdf.Name "/Form"; "/BBox", page.Pdfpage.mediabox; "/Resources", page.Pdfpage.resources; "/Length", Pdf.Integer (bytes_size xobject_data)] in let xobject = Pdf.Stream {contents = (Pdf.Dictionary xobject_dict, Pdf.Got xobject_data)} in let xobject_objnum = Pdf.addobj pdf xobject in let pages = Pdfpage.pages_of_pagetree pdf in let new_pages = List.map2 (fun page pnum -> if mem pnum range then add_xobject_to_page name xobject_objnum page pdf else page) pages (indx pages) in Pdfpage.change_pages true pdf new_pages (* n.b the use of change_pages here ensures no inheritable resources in the * stamp, therefore creation of xobject from page is as simple as expected. *) let stamp_as_xobject pdf range over = let prefix = Pdfpage.shortest_unused_prefix pdf in Pdfpage.add_prefix over prefix; let marks = Pdfmarks.read_bookmarks ~preserve_actions:true pdf in let marks_refnumbers = Pdf.page_reference_numbers pdf in let pdf = Pdfmarks.remove_bookmarks pdf in let over = Pdfmarks.remove_bookmarks over in let pageseqs = ilist 1 (Pdfpage.endpage pdf) in let over_firstpage_pdf = match Pdfpage.pages_of_pagetree over with | [] -> error "empty PDF" | h::_ -> Pdfpage.change_pages ~changes:[(1, 1)] true over [h] in let merged = Pdfmerge.merge_pdfs false false ["a"; "b"] [pdf; over_firstpage_pdf] [pageseqs; [1]] in let merged = {merged with Pdf.saved_encryption = pdf.Pdf.saved_encryption} in let merged = Cpdfmetadata.copy_id true pdf merged in let merged_pages = Pdfpage.pages_of_pagetree merged in let under_pages, over_page = all_but_last merged_pages, last merged_pages in let new_pages = under_pages in let changed = let changes = map (fun x -> (x, x)) (ilist 1 (length new_pages)) in Pdfpage.change_pages ~changes true merged new_pages in let new_refnumbers = Pdf.page_reference_numbers changed in let changetable = hashtable_of_dictionary (combine marks_refnumbers new_refnumbers) in let new_marks = map (Cpdfbookmarks.change_bookmark changetable) marks in let pdf = Pdfmarks.add_bookmarks new_marks changed in let name = "/" ^ Pdfpage.shortest_unused_prefix pdf ^ "CPDFXObj" in (add_page_as_xobject pdf range over_page name, name) �����������������������������������������������������������cpdf-2.8.1/cpdfsqueeze.mli��������������������������������������������������������������������������0000664�0001750�0001750�00000000647�14771516640�014161� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(** Lossless compression *) (** Compresses all streams in the PDF document which are uncompressed, using /FlateDecode, leaving out metadata. If the PDF is encrypted, does nothing. *) val recompress_pdf : Pdf.t -> Pdf.t (** Decompresses all streams in a PDF document, assuming it isn't encrypted. *) val decompress_pdf : Pdf.t -> Pdf.t (** Squeeze a PDF *) val squeeze : ?logto:string -> ?pagedata:bool -> Pdf.t -> unit �����������������������������������������������������������������������������������������cpdf-2.8.1/cpdftweak.mli����������������������������������������������������������������������������0000664�0001750�0001750�00000002653�14771516640�013612� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(** Miscellany *) (** Make all lines in the PDF at least a certain thickness. *) val thinlines : int list -> float -> Pdf.t -> Pdf.t (** Make all text on certain pages black. *) val blacktext : Cpdfaddtext.colour -> int list -> Pdf.t -> Pdf.t (** Make all lines on certain pages black. *) val blacklines : Cpdfaddtext.colour -> int list -> Pdf.t -> Pdf.t (** Make all fills on certain pages black. *) val blackfills : Cpdfaddtext.colour -> int list -> Pdf.t -> Pdf.t (** Append page content. *) val append_page_content : string -> bool -> bool -> int list -> Pdf.t -> Pdf.t (** Print a dictionary entry. *) val print_dict_entry : utf8:bool -> Pdf.t -> string -> unit (** Get dictionary entries in JSON format *) val get_dict_entries : utf8:bool -> Pdf.t -> string -> Pdfio.bytes (** Remove clipping. *) val remove_clipping : Pdf.t -> int list -> Pdf.t (** Find an object from an objspec. Raises and error if the chain is not found. *) val find_obj : Pdf.t -> string -> Pdf.pdfobject (** [remove_stream pdf objspec filename] replaces the stream at [objspec] with the contents of [filename]. *) val replace_stream : Pdf.t -> string -> string -> unit (** [replace_obj pdf objspec obj] replace the object at [objspec] (which must exist) with [obj]. *) val replace_obj : Pdf.t -> string -> Pdf.pdfobject -> unit (** [remove_obj pdf objspec] removes the object described by the object specification. *) val remove_obj : Pdf.t -> string -> unit �������������������������������������������������������������������������������������cpdf-2.8.1/cpdfimage.mli����������������������������������������������������������������������������0000664�0001750�0001750�00000003113�14771516640�013551� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(** Images *) (** Print info when processing image *) val debug_image_processing : bool ref (** Extract images. *) val extract_images : ?raw:bool -> ?path_to_p2p:string -> ?path_to_im:string -> Cpdfmetadata.encoding -> bool -> bool -> Pdf.t -> int list -> string -> unit (** Report image resolutions. *) val image_resolution : Pdf.t -> int list -> float -> (int * string * int * int * float * float * int) list (** Report image resolution data in JSON format *) val image_resolution_json : Pdf.t -> int list -> float -> Pdfio.bytes (** List images in JSON format *) val images : Pdf.t -> int list -> Cpdfyojson.Safe.t (** Reprocess images. See manual for details. *) val process : q:float -> qlossless:float -> onebppmethod:string -> jbig2_lossy_threshold:float -> length_threshold:int -> percentage_threshold:float -> pixel_threshold:int -> dpi_threshold:float -> factor:float -> interpolate:bool -> jpeg_to_jpeg_scale:float -> jpeg_to_jpeg_dpi:float -> path_to_jbig2enc:string -> path_to_convert:string -> int list -> Pdf.t -> unit (**/**) val image_of_input : ?subformat:Cpdfua.subformat -> ?title:string -> process_struct_tree:bool -> (unit -> Pdfio.bytes -> Pdf.pdfobject * (int * Pdf.pdfobject) list) -> Pdfio.input -> Pdf.t val obj_of_jpeg_data : Pdfio.bytes -> Pdf.pdfobject * (int * Pdf.pdfobject) list val obj_of_png_data : Pdfio.bytes -> Pdf.pdfobject * (int * Pdf.pdfobject) list val obj_of_jbig2_data : ?global:Pdfio.bytes -> Pdfio.bytes -> Pdf.pdfobject * (int * Pdf.pdfobject) list val obj_of_jpeg2000_data : Pdfio.bytes -> Pdf.pdfobject * (int * Pdf.pdfobject) list �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/cpdfattach.mli���������������������������������������������������������������������������0000664�0001750�0001750�00000001674�14771516640�013745� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(** File Attachments *) type attachment = {name : string; pagenumber : int; data : unit -> Pdfio.bytes} (** Remove characters which might not make good filenames from a UTF8 string. *) val remove_unsafe_characters : string -> string (** [attach_file keepversion topage pdf filename] attaches the file in [filename] to the pdf, optionally to a page (rather than document-level). If keepversion is true, the PDF version number won't be altered. *) val attach_file : ?memory:Pdfio.bytes -> bool -> int option -> Pdf.t -> string -> Pdf.t (** Remove attached files. *) val remove_attached_files : Pdf.t -> Pdf.t (** List attached files. Attachment name and page number. Page 0 is document level. *) val list_attached_files : Pdf.t -> attachment list (** Dump attached files to a given directory. *) val dump_attached_files : Pdf.t -> string -> unit (** Total size in bytes of all attached files. *) val size_attached_files : Pdf.t -> int ��������������������������������������������������������������������cpdf-2.8.1/Makefile���������������������������������������������������������������������������������0000664�0001750�0001750�00000002753�14771516640�012600� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Build the cpdf command line tools NONDOC = cpdfyojson cpdfxmlm DOC = cpdfutil cpdfunicodedata cpdferror cpdfdebug cpdfjson cpdfstrftime \ cpdfcoord cpdfattach cpdfpagespec cpdfposition cpdfpresent cpdfmetadata \ cpdfbookmarks cpdfpage cpdftruetype cpdfremovetext cpdfextracttext \ cpdfembed cpdffont cpdftype cpdfaddtext cpdfpad cpdfocg cpdfsqueeze \ cpdfdraft cpdfspot cpdfpagelabels cpdfcreate cpdfannot cpdfxobject \ cpdfimpose cpdfchop cpdftweak cpdfprinttree cpdfua cpdftexttopdf \ cpdftoc cpdfjpeg cpdfjpeg2000 cpdfpng cpdfimage cpdfdraw \ cpdfcomposition cpdfshape cpdfcolours cpdfdrawcontrol cpdfcommand MODS = $(NONDOC) $(DOC) SOURCES = $(foreach x,$(MODS),$(x).ml $(x).mli) cpdfcommandrun.ml RESULT = cpdf ANNOTATE = true PACKS = camlpdf CFLAGS = -fPIC OCAMLFLAGS = -bin-annot OCAMLNCFLAGS = -g -safe-string OCAMLBCFLAGS = -g -safe-string OCAMLLDFLAGS = -g TARGETS := byte-code byte-code-library htdoc LIBINSTALL_FILES = cpdf.cma \ $(foreach x,$(MODS),$x.mli) $(foreach x,$(MODS),$x.cmi) \ $(foreach x,$(MODS),$x.cmti) ifneq ($(shell ocamlopt -version),) TARGETS += native-code native-code-library LIBINSTALL_FILES += cpdf.a cpdf.cmxa $(foreach x,$(MODS),$x.cmx) endif all : $(TARGETS) clean :: rm -rf doc foo foo2 out.pdf out2.pdf out3.pdf foo.pdf decomp.pdf *.cmt \ *.cmti *.json test/*.pdf *.ps *.aux *.idx *.log *.out *.toc *.cut \ *.ttf *.ttx out.png DOC_FILES = $(foreach x,$(DOC),$(x).mli) install : libinstall -include OCamlMakefile ���������������������cpdf-2.8.1/cpdfunicodedata.mli����������������������������������������������������������������������0000664�0001750�0001750�00000001372�14771516640�014754� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(** UnicodeData.txt in parsed form *) (** The source, compressed. *) val unicodedata_source : string (** The type of a single entry from UnicodeData.txt *) type t = {code_value : string; character_name : string; general_category : string; canonical_combining_classes : string; bidirectional_category : string; character_decomposition_mapping : string; decimal_digit_value : string; digit_value : string; numeric_value : string; mirrored : string; unicode_10_name : string; iso_10646_comment_field : string; uppercase_mapping : string; lowercase_mapping : string; titlecase_mapping : string} (** The unicode data. We pass a unit because it is parsed upon demand and memoised. *) val unicodedata : unit -> t list ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/old/�������������������������������������������������������������������������������������0000775�0001750�0001750�00000000000�14771516640�011707� 5����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/old/README.md����������������������������������������������������������������������������0000664�0001750�0001750�00000000123�14771516640�013162� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������An old, unfinished module from CPDF's very early life. To be resuscitated one day? ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/old/cpdfgraphics.ml����������������������������������������������������������������������0000664�0001750�0001750�00000177411�14771516640�014711� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(* Structured Graphics *) open Pdfutil open Pdfio type fpoint = float * float type winding_rule = EvenOdd | NonZero type segment = | Straight of fpoint * fpoint | Bezier of fpoint * fpoint * fpoint * fpoint (* Each segment list may be marked as a hole or not. *) type hole = Hole | Not_hole (* A [subpath] is either closed or open. *) type closure = Closed | Open (* A [subpath] is the pair of a hole and a list of segments. *) type subpath = hole * closure * segment list (* A path is made from a number of subpaths. *) type path = winding_rule * subpath list type tiling = Tiling type function_shading = {funshading_domain : float * float * float * float; funshading_matrix : Pdftransform.transform_matrix; funshading_function : Pdffun.t} type radial_shading = {radialshading_coords : float * float * float * float * float * float; radialshading_domain : float * float; radialshading_function : Pdffun.t list; radialshading_extend : bool * bool} type axial_shading = {axialshading_coords : float * float * float * float; axialshading_domain : float * float; axialshading_function : Pdffun.t list; axialshading_extend : bool * bool} type shading_kind = | FunctionShading of function_shading | AxialShading of axial_shading | RadialShading of radial_shading | FreeFormGouraudShading | LatticeFormGouraudShading | CoonsPatchMesh | TensorProductPatchMesh type shading = {shading_colourspace : Pdf.pdfobject; shading_background : Pdf.pdfobject option; shading_bbox : Pdf.pdfobject option; shading_antialias : bool; shading_matrix : Pdftransform.transform_matrix; shading_extgstate : Pdf.pdfobject; shading : shading_kind} type pattern = | ColouredTilingPattern of tiling | UncolouredTilingPattern of tiling | ShadingPattern of shading type colvals = | Floats of float list | Named of (string * float list) | Pattern of pattern let rec string_of_colvals = function | Floats fs -> "Floats " ^ fold_left ( ^ ) "" (map (function x -> string_of_float x ^ " ") fs) | Named (n, fs) -> "Named " ^ n ^ " " ^ string_of_colvals (Floats fs) | Pattern p -> "Pattern" type objectclass = | PathObject | TextObject | ClippingPathObject | PageDescriptionLevel | ShadingObject | InlineImageObject | ExternalObject let string_of_objectclass = function | PathObject -> "PathObject" | TextObject -> "TextObject" | ClippingPathObject -> "ClippingPathObject" | PageDescriptionLevel -> "PageDescriptionLevel" | ShadingObject -> "ShadingObject" | InlineImageObject -> "InlineImageObject" | ExternalObject -> "ExternalObject" type transparency_attributes = {fill_transparency : float; line_transparency : float} type path_attributes = {path_transform : Pdftransform.transform_matrix; path_fill : (Pdfspace.t * colvals) option; path_line : (Pdfspace.t * colvals) option; path_linewidth : float; path_joinstyle : int; path_capstyle : int; path_dash : float list * float; path_mitrelimit : float; path_transparency : transparency_attributes; path_intent : string} type text_attributes = {textmode : int} type textblock_attributes = {textblock_transform : Pdftransform.transform_matrix} type textblock = text_attributes * Pdfops.t type softmask_subtype = Alpha | Luminosity type transparency_group = {tr_group_colourspace : Pdf.pdfobject option; (* FIXME: This should be colourspace *) isolated : bool; knockout : bool; tr_graphic : t} and softmask = {softmask_subtype : softmask_subtype; transparency_group : transparency_group; softmask_bbox : float * float * float * float; backdrop : float list option; softmask_transfer : Pdffun.t option} and image_attributes = {image_transform : Pdftransform.transform_matrix; image_transparency : float; (* The /ca value *) image_softmask : softmask option} and fontname = string * Pdf.pdfobject (*r Name, font *) (* The main type for a graphic. It must be kept paired with the PDF it comes from, since it will reference objects (fonts, images etc) in that PDF. *) and graphic_elt = | Path of (path * path_attributes) | Text of textblock list * textblock_attributes | MCPoint of string | MCPointProperties of string * Pdf.pdfobject | MCSection of string * graphic_elt list | MCSectionProperties of string * Pdf.pdfobject * graphic_elt list | Image of image_attributes * int (* object number *) | GraphicInlineImage of Pdf.pdfobject * bytes * Pdftransform.transform_matrix | Clip of path * graphic_elt list | Shading of path option * shading * Pdftransform.transform_matrix and t = {elements : graphic_elt list; (* Page content *) fonts : fontname list; (* Fonts *) resources : Pdf.pdfobject} (* Anything else in /Resources *) (* Calculate the bounding box (xmin, xmax, ymin, ymax) of a graphic. *) let bbox_of_segment = function | Straight ((x1, y1), (x2, y2)) -> fmin x1 x2, fmax x1 x2, fmin y1 y2, fmax y1 y2 | Bezier ((x1, y1), (x2, y2), (x3, y3), (x4, y4)) -> fmin (fmin x1 x2) (fmin x3 x4), fmax (fmax x1 x2) (fmax x3 x4), fmin (fmin y1 y2) (fmin y3 y4), fmax (fmax y1 y2) (fmax y3 y4) let bbox_of_path (_, subpaths) = let segments = flatten (map (function (_, _, l) -> l) subpaths) in fold_left box_union_float (max_float, min_float, max_float, min_float) (map bbox_of_segment segments) let rec bbox_of_graphic_inner (xmin, xmax, ymin, ymax) = function | [] -> xmin, xmax, ymin, ymax | (Path (p, _) | Clip (p, _))::t -> bbox_of_graphic_inner (box_union_float (xmin, xmax, ymin, ymax) (bbox_of_path p)) t | h::t -> bbox_of_graphic_inner (xmin, xmax, ymin, ymax) t let bbox_of_graphic graphic = bbox_of_graphic_inner (max_float, min_float, max_float, min_float) graphic.elements (* For debug purposes, build a string of a graphic. *) let string_of_segment = function | Straight ((ax, ay), (bx, by)) -> Printf.sprintf "Straight line: (%f, %f) --> (%f, %f)\n" ax ay bx by | Bezier ((ax, ay), (bx, by), (cx, cy), (dx, dy)) -> Printf.sprintf "Bezier curve: (%f, %f) --> (%f, %f) --> (%f, %f) --> (%f, %f)\n" ax ay bx by cx cy dx dy let string_of_subpath (h, o ,segments) = Printf.sprintf "Hole: %b, Open: %b, segments:%s\n" (h = Hole) (o = Open) (fold_left ( ^ ) "" (map string_of_segment segments)) let string_of_path (windingrule, subpaths) = Printf.sprintf "%s %s" (match windingrule with | EvenOdd -> "Even-odd\n" | NonZero -> "Non-zero\n") (fold_left ( ^ ) "" (map string_of_subpath subpaths)) let string_of_textblock (st, op) = "TEXTPIECE: " ^ Pdfops.string_of_op op ^ "\n" let string_of_font (f, i) = f ^ " " ^ Pdfwrite.string_of_pdf i ^ "\n" let string_of_colvals = function | Floats l -> Printf.sprintf "Floats (%i)" (length l) | Named (s, fl) -> Printf.sprintf "Named %s, Floats (%i)" s (length fl) | Pattern _ -> Printf.sprintf "Pattern" let string_of_attributes a = let line = match a.path_line with | None -> "none" | Some (cs, vals) -> Printf.sprintf "line colourspace is %s, %s vals" (Pdfspace.string_of_colourspace cs) (string_of_colvals vals) and fill = match a.path_fill with | None -> "none" | Some (cs, vals) -> Printf.sprintf "fill colourspace is %s, %s vals" (Pdfspace.string_of_colourspace cs) (string_of_colvals vals) in line ^ "\n" ^ fill ^ "\n" let rec string_of_graphic_elt = function | MCSection (n, g) -> Printf.sprintf "Marked content section %s...\n" n ^ "BEGIN\n" ^ (fold_left ( ^ ) "" (map string_of_graphic_elt g)) ^ "\nEND Marked content section\n" | MCSectionProperties (n, d, g) -> Printf.sprintf "Marked content section %s with properties %s...\n" n (Pdfwrite.string_of_pdf d) ^ "BEGIN\n" ^ (fold_left ( ^ ) "" (map string_of_graphic_elt g)) ^ "\nEND Marked content section\n" | MCPoint n -> Printf.sprintf "Marked content point %s...\n" n | MCPointProperties (n, d) -> Printf.sprintf "Marked content point %s with properties %s...\n" n (Pdfwrite.string_of_pdf d) | Path (p, attributes) -> Printf.sprintf "Path: %s\nAttributes\n%s\n" (string_of_path p) (string_of_attributes attributes) | Text (ts, attr) -> "-----BEGIN TEXT - fonts:\n" ^ fold_left ( ^ ) "" (map string_of_textblock ts) ^ "-----END TEXT\n" | Image (tr, x) -> "Image " ^ string_of_int x ^ "\n" | GraphicInlineImage _ -> "Inline image\n" | Clip (p, g) -> "Clipview: path = " ^ string_of_path p ^ "\ngraphic is " ^ fold_left ( ^ ) "" (map string_of_graphic_elt g) | Shading (clip, shading, tr) -> "Shading\n" and string_of_graphic g = "Elements:\n" ^ fold_left ( ^ ) "" (map string_of_graphic_elt g.elements) ^ "Fonts:\n" ^ fold_left ( ^ ) "" (map (fun (name, obj) -> name ^ " " ^ Pdfwrite.string_of_pdf obj) g.fonts) ^ "Resources:\n" ^ Pdfwrite.string_of_pdf g.resources type state = {mutable objectclass : objectclass; (*r Not strictly part of the state, but fits here. *) mutable clip : path option; (*r Ditto - stores a clipping path which is to be invoked on the next path operation. *) mutable intent : string; mutable fill : colvals; mutable linewidth : float; mutable line : colvals; mutable mitrelimit : float; mutable joinstyle : int; mutable capstyle : int; mutable colourspace_stroke : Pdfspace.t; mutable colourspace_nonstroke : Pdfspace.t; mutable dash : float list * float; mutable flatness : int; mutable transform : Pdftransform.transform_matrix; mutable extra_transform : Pdftransform.transform_matrix; mutable text_transform : Pdftransform.transform_matrix; mutable text_line_transform : Pdftransform.transform_matrix; mutable opacity_stroke : float; mutable opacity_nonstroke : float; mutable character_spacing : float; mutable word_spacing : float; mutable scale : float; mutable leading : float; mutable font_and_size : (string * float) option; mutable font_render : int; mutable font_rise : float; mutable blendmode : int; mutable softmask : softmask option; mutable in_xobject : int; mutable opdo_matrix : Pdftransform.transform_matrix} let default_state () = {objectclass = PageDescriptionLevel; clip = None; intent = "/RelativeColorimetric"; fill = Floats [1.]; linewidth = 1.; line = Floats [1.]; mitrelimit = 10.; joinstyle = 0; capstyle = 0; colourspace_stroke = Pdfspace.DeviceGray; colourspace_nonstroke = Pdfspace.DeviceGray; dash = [], 0.; flatness = 0; transform = Pdftransform.i_matrix; extra_transform = Pdftransform.i_matrix; text_transform = Pdftransform.i_matrix; text_line_transform = Pdftransform.i_matrix; opacity_stroke = 1.; opacity_nonstroke = 1.; character_spacing = 0.; word_spacing = 0.; scale = 100.; leading = 0.; font_and_size = None; (*r No initial value. *) font_render = 0; font_rise = 0.; blendmode = 1; softmask = None; in_xobject = 0; opdo_matrix = Pdftransform.i_matrix} let state = ref (default_state ()) let string_of_state s = (*i "Object class: " ^ string_of_objectclass s.objectclass ^ "\n" ^ i*) "Stroke Colourspace: " ^ Pdfspace.string_of_colourspace s.colourspace_stroke ^ "\n" ^ "Nonstroke Colourspace: " ^ Pdfspace.string_of_colourspace s.colourspace_nonstroke ^ "\n" ^ "Stroke colours: " ^ string_of_colvals s.line ^ "\n" ^ "NonStroke colours: " ^ string_of_colvals s.fill ^ "\n" let path_attributes_fill_and_stroke () = {path_transform = (!state).transform; path_fill = Some ((!state).colourspace_nonstroke, (!state).fill); path_line = Some ((!state).colourspace_stroke, (!state).line); path_linewidth = (!state).linewidth; path_joinstyle = (!state).joinstyle; path_capstyle = (!state).capstyle; path_dash = (!state).dash; path_mitrelimit = (!state).mitrelimit; path_transparency = {fill_transparency = (!state).opacity_nonstroke; line_transparency = (!state).opacity_stroke}; path_intent = (!state).intent} let path_attributes_fill () = {path_transform = (!state).transform; path_fill = Some ((!state).colourspace_nonstroke, (!state).fill); path_line = None; path_linewidth = (!state).linewidth; path_joinstyle = (!state).joinstyle; path_capstyle = (!state).capstyle; path_dash = (!state).dash; path_mitrelimit = (!state).mitrelimit; path_transparency = {fill_transparency = (!state).opacity_nonstroke; line_transparency = 1.}; path_intent = (!state).intent} let path_attributes_stroke () = {path_transform = (!state).transform; path_fill = None; path_line = Some ((!state).colourspace_stroke, (!state).line); path_linewidth = (!state).linewidth; path_joinstyle = (!state).joinstyle; path_capstyle = (!state).capstyle; path_dash = (!state).dash; path_mitrelimit = (!state).mitrelimit; path_transparency = {fill_transparency = 1.; line_transparency = (!state).opacity_stroke}; path_intent = (!state).intent} let textstate () = {textmode = 0} let nonzero = EvenOdd let rec initial_colour pdf resources = function | Pdf.Name "/DeviceGray" | Pdf.Array (Pdf.Name "/CalGray"::_) -> Floats [0.] | Pdf.Name "/DeviceRGB" | Pdf.Array (Pdf.Name "/CalRGB"::_) -> Floats [0.; 0.; 0.] | Pdf.Name "/DeviceCMYK" -> Floats [0.; 0.; 0.; 1.] | Pdf.Name "/Pattern" | Pdf.Array [Pdf.Name "/Pattern"] -> Floats [0.] | Pdf.Array elts as cs -> begin match elts with | [Pdf.Name "/ICCBased"; iccstream] -> begin match Pdf.lookup_direct pdf "/Alternate" iccstream with | Some space -> initial_colour pdf resources space | None -> begin match Pdf.lookup_direct pdf "/N" iccstream with | Some (Pdf.Integer 1) -> Floats [0.] | Some (Pdf.Integer 3) -> Floats [0.; 0.; 0.] | Some (Pdf.Integer 4) -> Floats [0.; 0.; 0.; 0.] | _ -> raise (Pdf.PDFError "Bad ICCBased Alternate") end end | Pdf.Name "/DeviceN"::_::alternate::_ | [Pdf.Name "/Separation"; _; alternate; _] -> initial_colour pdf resources alternate | [Pdf.Name "/Pattern"; alternate] -> initial_colour pdf resources alternate | _ -> Pdfe.log (Printf.sprintf "%s\n" (Pdfwrite.string_of_pdf cs)); raise (Pdf.PDFError "Unknown colourspace A") end | Pdf.Indirect _ as indirect -> initial_colour pdf resources (Pdf.direct pdf indirect) | _ -> raise (Pdf.PDFError "Unknown colourspace B") (* PartialPath (sp, cp, p, s) is starting point [sp], current point [cp] the partial segment list [p], subpath [s] and graphic [g]. *) type partial = | NoPartial | PartialText of textblock list | PartialPath of fpoint * fpoint * segment list * subpath list (* g is a [group_transparency] xobject *) let rec read_transparency_group pdf g = let group = match Pdf.lookup_direct pdf "/Group" g with | Some gr -> gr | None -> raise (Pdf.PDFError "Pdfgraphics.read_transparency_group: no /Group found") in let colourspace = Pdf.lookup_direct pdf "/CS" group and isolated = match Pdf.lookup_direct pdf "/I" group with | Some (Pdf.Boolean b) -> b | _ -> false and knockout = match Pdf.lookup_direct pdf "/K" group with | Some (Pdf.Boolean b) -> b | _ -> false and graphic = let fakepage = let resources = match Pdf.lookup_direct pdf "/Resources" g with | Some (Pdf.Dictionary d) -> Pdf.Dictionary d | _ -> Pdf.Dictionary [] and contents = [g] in {Pdfpage.content = contents; Pdfpage.mediabox = Pdf.Null; Pdfpage.resources = resources; Pdfpage.rotate = Pdfpage.Rotate0; Pdfpage.rest = Pdf.Dictionary []} in graphic_of_page pdf fakepage and a, b, c, d = Pdf.parse_rectangle pdf (Pdf.lookup_fail "no bbox" pdf "/BBox" g) in {tr_group_colourspace = colourspace; isolated = isolated; knockout = knockout; tr_graphic = graphic}, a, b, c, d and read_soft_mask pdf mask = match match Pdf.lookup_direct pdf "/S" mask with | Some (Pdf.Name "/Alpha") -> Some Alpha | Some (Pdf.Name "/Luminosity") -> Some Luminosity | _ -> None with | None -> None | Some subtype -> let transparency_group, a, b, c, d = match Pdf.lookup_direct pdf "/G" mask with | Some g -> read_transparency_group pdf g | None -> raise (Pdf.PDFError "Pdfgraphics.transparency group not found in soft mask") and backdrop = match Pdf.lookup_direct pdf "/BC" mask with | Some (Pdf.Array nums) -> Some (map (Pdf.getnum pdf) nums) | _ -> None and transfer = match Pdf.lookup_direct pdf "/TR" mask with | Some (Pdf.Dictionary d) -> Some (Pdffun.parse_function pdf (Pdf.Dictionary d)) | _ -> None in Some {softmask_subtype = subtype; transparency_group = transparency_group; backdrop = backdrop; softmask_transfer = transfer; softmask_bbox = (a, b, c, d)} and update_graphics_state_from_dict pdf resources gdict = begin match Pdf.lookup_direct pdf "/SMask" gdict with | Some softmask -> (!state).softmask <- read_soft_mask pdf softmask | None -> () end; begin match Pdf.lookup_direct pdf "/CA" gdict with | Some (Pdf.Real o) -> (!state).opacity_stroke <- o | _ -> () end; begin match Pdf.lookup_direct pdf "/ca" gdict with | Some (Pdf.Real o) -> (!state).opacity_nonstroke <- o | _ -> () end; begin match Pdf.lookup_direct pdf "/BM" gdict with | Some (Pdf.Name n) | Some (Pdf.Array (Pdf.Name n::_)) -> (!state).blendmode <- 0 (* FIXME: Do properly *) | _ -> () end; begin match Pdf.lookup_direct pdf "/LW" gdict with | Some (Pdf.Integer width) -> (!state).linewidth <- float width | Some (Pdf.Real width) -> (!state).linewidth <- width | _ -> () end; begin match Pdf.lookup_direct pdf "/LC" gdict with | Some (Pdf.Integer style) -> (!state).capstyle <- style | _ -> () end; begin match Pdf.lookup_direct pdf "/LC" gdict with | Some (Pdf.Integer join) -> (!state).joinstyle <- join | _ -> () end; begin match Pdf.lookup_direct pdf "/ML" gdict with | Some (Pdf.Integer limit) -> (!state).mitrelimit <- float limit | Some (Pdf.Real limit) -> (!state).mitrelimit <- limit | _ -> () end; begin match Pdf.lookup_direct pdf "/D" gdict with | Some (Pdf.Array [Pdf.Array dashes; phase]) -> let dashnums, phase = map (function | (Pdf.Integer n) -> float n | (Pdf.Real n) -> n | _ -> raise (Pdf.PDFError "Malformed dash.")) dashes, match phase with | Pdf.Integer phase -> float phase | Pdf.Real phase -> phase | _ -> raise (Pdf.PDFError "Malformed dash phase.") in (!state).dash <- dashnums, phase | _ -> () end and statestack : state list ref = ref [] and copystate () = {!state with fill = (!state).fill} and push_statestack () = (*i Printf.printf "push_statestack\n"; i*) statestack =| copystate () and pop_statestack () = (*i Printf.printf "pop_statestack: %i items in stack before pop\n" (length !statestack); Printf.printf "Before pop_statestack, line and fill spaces are %s and %s\n" (Pdfspace.string_of_colourspace (!state).colourspace_stroke) (Pdfspace.string_of_colourspace (!state).colourspace_nonstroke); I*) begin match !statestack with | [] -> raise (Pdf.PDFError "Unbalanced q/Q Ops") | h::t -> statestack := t; state := h end(*i ; Printf.printf "After pop_statestack, line and fill spaces are %s and %s\n" (Pdfspace.string_of_colourspace (!state).colourspace_stroke) (Pdfspace.string_of_colourspace (!state).colourspace_nonstroke) i*) and read_tiling_pattern _ = ColouredTilingPattern Tiling and read_function_shading pdf shading = let domain = match Pdf.lookup_direct pdf "/Domain" shading with | Some (Pdf.Array [a; b; c; d]) -> Pdf.getnum pdf a, Pdf.getnum pdf b, Pdf.getnum pdf c, Pdf.getnum pdf d | _ -> 0., 1., 0., 1. and matrix = Pdf.parse_matrix pdf "/Matrix" shading and func = Pdf.lookup_fail "No function found" pdf "/Function" shading in FunctionShading {funshading_domain = domain; funshading_matrix = matrix; funshading_function = Pdffun.parse_function pdf func} and read_radial_shading pdf shading = let coords = match Pdf.lookup_direct pdf "/Coords" shading with | Some (Pdf.Array [a; b; c; d; e; f]) -> Pdf.getnum pdf a, Pdf.getnum pdf b, Pdf.getnum pdf c, Pdf.getnum pdf d, Pdf.getnum pdf e, Pdf.getnum pdf f | _ -> raise (Pdf.PDFError "Pdfgraphics.read_radial_shading: no coords in radial shading") and domain = match Pdf.lookup_direct pdf "/Domain" shading with | Some (Pdf.Array [a; b]) -> Pdf.getnum pdf a, Pdf.getnum pdf b | _ -> 0., 1. and func = match Pdf.lookup_direct pdf "/Function" shading with | Some (Pdf.Array fs) -> map (Pdffun.parse_function pdf) fs | Some f -> [Pdffun.parse_function pdf f] | _ -> raise (Pdf.PDFError "Pdfgraphics.read_radial_shading: no function in radial shading") and extend = match Pdf.lookup_direct pdf "/Extend" shading with | Some (Pdf.Array [Pdf.Boolean a; Pdf.Boolean b]) -> a, b | _ -> false, false in RadialShading {radialshading_coords = coords; radialshading_domain = domain; radialshading_function = func; radialshading_extend = extend} and read_axial_shading pdf shading = let coords = match Pdf.lookup_direct pdf "/Coords" shading with | Some (Pdf.Array [a; b; c; d]) -> Pdf.getnum pdf a, Pdf.getnum pdf b, Pdf.getnum pdf c, Pdf.getnum pdf d | _ -> raise (Pdf.PDFError "Pdfgraphics.read_axial_shading: no coords in radial shading") and domain = match Pdf.lookup_direct pdf "/Domain" shading with | Some (Pdf.Array [a; b]) -> Pdf.getnum pdf a, Pdf.getnum pdf b | _ -> 0., 1. and func = match Pdf.lookup_direct pdf "/Function" shading with | Some (Pdf.Array fs) -> map (Pdffun.parse_function pdf) fs | Some f -> [Pdffun.parse_function pdf f] | _ -> raise (Pdf.PDFError "Pdfgraphics.read_axial_shading: no function in radial shading") and extend = match Pdf.lookup_direct pdf "/Extend" shading with | Some (Pdf.Array [Pdf.Boolean a; Pdf.Boolean b]) -> a, b | _ -> false, false in AxialShading {axialshading_coords = coords; axialshading_domain = domain; axialshading_function = func; axialshading_extend = extend} (* Read a shading pattern *) and read_shading pdf matrix extgstate shading = let colourspace = Pdf.lookup_fail "No colourspace in shading" pdf "/ColorSpace" shading and background = Pdf.lookup_direct pdf "/Background" shading and bbox = Pdf.lookup_direct pdf "/BBox" shading and antialias = match Pdf.lookup_direct pdf "/BBox" shading with | Some (Pdf.Boolean true) -> true | _ -> false in let shading = match Pdf.lookup_fail "no /ShadingType" pdf "/ShadingType" shading with | Pdf.Integer 1 -> read_function_shading pdf shading | Pdf.Integer 3 -> read_radial_shading pdf shading | Pdf.Integer 2 -> read_axial_shading pdf shading | Pdf.Integer 4 -> FreeFormGouraudShading | Pdf.Integer 5 -> LatticeFormGouraudShading | Pdf.Integer 6 -> CoonsPatchMesh | Pdf.Integer 7 -> TensorProductPatchMesh | _ -> raise (Pdf.PDFError "Pdfgraphics.unknown shadingtype") in {shading_colourspace = colourspace; shading_background = background; shading_bbox = bbox; shading_antialias = antialias; shading_matrix = matrix; shading_extgstate = extgstate; shading = shading} and read_shading_pattern pdf p = let matrix = Pdf.parse_matrix pdf "/Matrix" p and extgstate = match Pdf.lookup_direct pdf "/ExtGState" p with | Some (Pdf.Dictionary _ as d) -> d | _ -> Pdf.Dictionary [] in match Pdf.lookup_direct pdf "/Shading" p with | Some shading -> ShadingPattern (read_shading pdf matrix extgstate shading) | _ -> raise (Pdf.PDFError "No shading dictionary") and read_pattern pdf page name = match Pdf.lookup_direct pdf "/Pattern" page.Pdfpage.resources with | None -> raise (Pdf.PDFError "No pattern dictionary") | Some patterndict -> match Pdf.lookup_direct pdf name patterndict with | None -> raise (Pdf.PDFError "Pattern not found") | Some pattern -> match Pdf.lookup_direct pdf "/PatternType" pattern with | Some (Pdf.Integer 1) -> read_tiling_pattern pattern | Some (Pdf.Integer 2) -> read_shading_pattern pdf pattern | _ -> raise (Pdf.PDFError "unknown pattern") and process_op pdf page (partial, graphic) op = let ret = (partial, graphic) in (*i flprint (string_of_state !state); *) (*i flprint (Pdfpages.string_of_op op ^ "\n"); i*) match op with | Pdfops.Op_W -> (* Move the current partial path into Clip, and return *) begin match partial with | PartialPath (_, _, segments, subpaths) -> if segments = [] && subpaths = [] then ret else let path = if segments <> [] then (Not_hole, Closed, rev segments)::subpaths else subpaths in (!state).clip <- Some (NonZero, path); ret | _ -> ret end (* FIXME: In NextClip needs to support possibly several clips, since we can do W n W n W n f, for instance? *) | Pdfops.Op_W' -> begin match partial with | PartialPath (_, _, segments, subpaths) -> if segments = [] && subpaths = [] then ret else let path = if segments <> [] then (Not_hole, Closed, rev segments)::subpaths else subpaths in (!state).clip <- Some (EvenOdd, path); ret | _ -> ret end | Pdfops.InlineImage (dict, data) -> (NoPartial, GraphicInlineImage (dict, data, (!state).transform)::graphic) | Pdfops.Op_MP name -> begin match (!state).objectclass with | PageDescriptionLevel -> (NoPartial, MCPoint name::graphic) | TextObject -> ret (* FIXME -- Add it to the text partial. *) | _ -> ret (* Invalid, silently drop *) end | Pdfops.Op_DP (name, properties) -> begin match (!state).objectclass with | PageDescriptionLevel -> (NoPartial, MCPointProperties (name, properties)::graphic) | TextObject -> ret (* FIXME -- Add it to the text partial. *) | _ -> ret (* Invalid, silently drop *) end | Pdfops.Op_BX | Pdfops.Op_EX -> ret | Pdfops.Op_ri n -> (!state).intent <- n; ret | Pdfops.Op_j j -> (!state).joinstyle <- j; ret | Pdfops.Op_J c -> (!state).capstyle <- c; ret | Pdfops.Op_w w -> (!state).linewidth <- w; ret | Pdfops.Op_M m -> (!state).mitrelimit <- m; ret | Pdfops.Op_q -> (*i flprint "Op_q\n"; i*) push_statestack (); ret | Pdfops.Op_Q -> (*i flprint "Op_Q\n"; i*) pop_statestack (); ret | Pdfops.Op_SC vals | Pdfops.Op_SCN vals -> (!state).line <- Floats vals; ret | Pdfops.Op_sc vals | Pdfops.Op_scn vals -> (!state).fill <- Floats vals; ret | Pdfops.Op_scnName (name, vals) -> begin match (!state).colourspace_nonstroke with | Pdfspace.Pattern | Pdfspace.PatternWithBaseColourspace _ -> begin try (!state).fill <- Pattern (read_pattern pdf page name); ret with _ -> ret end | _ -> (!state).fill <- Named (name, vals); ret end | Pdfops.Op_SCNName (name, vals) -> begin match (!state).colourspace_stroke with | Pdfspace.Pattern | Pdfspace.PatternWithBaseColourspace _ -> begin try (!state).line <- Pattern (read_pattern pdf page name); ret with _ -> ret end | _ -> (!state).line <- Named (name, vals); ret end | Pdfops.Op_CS c -> (*i Printf.printf "Op_CS: %s\n" c; *) (!state).colourspace_nonstroke <- Pdfspace.read_colourspace pdf page.Pdfpage.resources (Pdf.Name c); ret | Pdfops.Op_cs c -> (*i flprint "Op_cs\n"; Printf.printf "Pdfgraphics: Op_cs: %s\n" c; i*) (!state).colourspace_nonstroke <- Pdfspace.read_colourspace pdf page.Pdfpage.resources (Pdf.Name c); ret | Pdfops.Op_G gv -> (*i flprint "Op_G\n"; i*) (!state).colourspace_stroke <- Pdfspace.DeviceGray; (!state).line <- Floats [gv]; ret | Pdfops.Op_g gv -> (*i flprint "Op_g\n"; i*) (!state).colourspace_nonstroke <- Pdfspace.DeviceGray; (!state).fill <- Floats [gv]; ret | Pdfops.Op_RG (rv, gv, bv) -> (!state).colourspace_stroke <- Pdfspace.DeviceRGB; (!state).line <- Floats [rv; gv; bv]; ret | Pdfops.Op_rg (rv, gv, bv) -> (!state).colourspace_nonstroke <- Pdfspace.DeviceRGB; (!state).fill <- Floats [rv; gv; bv]; ret | Pdfops.Op_K (c, m, y, k) -> (!state).colourspace_stroke <- Pdfspace.DeviceCMYK; (!state).line <- Floats [c; y; m; k]; ret | Pdfops.Op_k (c, m, y, k) -> (!state).colourspace_nonstroke <- Pdfspace.DeviceCMYK; (!state).fill <- Floats [c; y; m; k]; ret | Pdfops.Op_gs name -> let ext_state_dict = Pdf.lookup_fail "Bad Op_gs" pdf "/ExtGState" page.Pdfpage.resources in let gdict = Pdf.lookup_fail "Bad Op_gs" pdf name ext_state_dict in update_graphics_state_from_dict pdf page.Pdfpage.resources gdict; ret | Pdfops.Op_m (x, y) -> (* Begin a new subpath. Get into path mode if not already there. If the last op was an [Op_m], it should have no effect. *) (!state).objectclass <- PathObject; begin match partial with | PartialPath (sp, cp, segs, subpaths) -> if segs = [] then PartialPath ((x, y), (x, y), [], subpaths), graphic else PartialPath ((x, y), (x, y), [], (Not_hole, Open, rev segs)::subpaths), graphic | _ -> PartialPath ((x, y), (x, y), [], []), graphic end | Pdfops.Op_l (x, y) -> if (!state).objectclass <> PathObject then raise (Pdf.PDFError "Pdfgraphics: Op_l"); begin match partial with | PartialPath (sp, cp, segs, subpaths) -> PartialPath (sp, (x, y), Straight (cp, (x, y))::segs, subpaths), graphic | _ -> raise (Pdf.PDFError "Pdfgraphics: Op_l") end | Pdfops.Op_c (a, b, c, d, e, f) -> if (!state).objectclass <> PathObject then raise (Pdf.PDFError "Pdfgraphics: Op_c"); begin match partial with | PartialPath (sp, cp, segs, subpaths) -> let ep = (e, f) in let curve = Bezier (cp, (a, b), (c, d), ep) in PartialPath (sp, ep, curve::segs, subpaths), graphic | _ -> raise (Pdf.PDFError "Pdfgraphics: Op_c") end | Pdfops.Op_v (a, b, c, d) -> if (!state).objectclass <> PathObject then raise (Pdf.PDFError "Pdfgraphics: Op_v"); begin match partial with | PartialPath (sp, cp, segs, subpaths) -> let ep = (c, d) in let curve = Bezier (cp, cp, (a, b), ep) in PartialPath (sp, ep, curve::segs, subpaths), graphic | _ -> raise (Pdf.PDFError "Pdfgraphics: Op_v") end | Pdfops.Op_y (a, b, c, d) -> if (!state).objectclass <> PathObject then raise (Pdf.PDFError "Pdfgraphics: Op_y"); begin match partial with | PartialPath (sp, cp, segs, subpaths) -> let ep = (c, d) in let curve = Bezier (cp, (a, b), ep, ep) in PartialPath (sp, ep, curve::segs, subpaths), graphic | _ -> raise (Pdf.PDFError "Pdfgraphics: Op_y") end | Pdfops.Op_h -> if (!state).objectclass <> PathObject then raise (Pdf.PDFError "Pdfgraphics: Op_h - not in PathObject"); begin match partial with | PartialPath (sp, cp, segs, subpaths) -> PartialPath (sp, cp, [], (Not_hole, Closed, rev segs)::subpaths), graphic | _ -> raise (Pdf.PDFError "Pdfgraphics: Op_h - not a partial path") end | Pdfops.Op_s -> (* Close and stroke. Equivalent to h S *) process_ops pdf page ret [Pdfops.Op_h; Pdfops.Op_S] | Pdfops.Op_b -> (* Close, fill, stroke, nonzero. Equivalent to h B *) process_ops pdf page ret [Pdfops.Op_h; Pdfops.Op_B] | Pdfops.Op_b' -> (* Close, fill, stroke, evenodd. Equivalent to h B* *) process_ops pdf page ret [Pdfops.Op_h; Pdfops.Op_B'] | Pdfops.Op_f | Pdfops.Op_F -> (* Close and Fill non-zero *) if (!state).objectclass <> PathObject then raise (Pdf.PDFError "Pdfgraphics: Op_f"); let partial, graphic = process_op pdf page (partial, graphic) Pdfops.Op_h in (!state).objectclass <- PageDescriptionLevel; begin match partial with | PartialPath (sp, cp, segs, subpaths) -> (* segs is empty, due to [Op_h] *) PartialPath (sp, cp, [], []), Path ((NonZero, rev subpaths), path_attributes_fill ())::graphic | _ -> raise (Pdf.PDFError "Pdfgraphics: Op_f") end | Pdfops.Op_S -> (* Stroke *) if (!state).objectclass <> PathObject then raise (Pdf.PDFError "Pdfgraphics: Op_S"); (!state).objectclass <- PageDescriptionLevel; begin match partial with | PartialPath (sp, cp, segs, subpaths) -> if segs = [] then PartialPath (sp, cp, [], []), Path ((EvenOdd, rev subpaths), path_attributes_stroke ())::graphic else PartialPath (sp, cp, [], []), Path ((EvenOdd, rev ((Not_hole, Open, rev segs)::subpaths)), path_attributes_stroke ())::graphic | _ -> raise (Pdf.PDFError "Pdfgraphics: Op_S") end | Pdfops.Op_B -> (* Fill and stroke, non-zero. *) if (!state).objectclass <> PathObject then raise (Pdf.PDFError "Pdfgraphics: Op_B"); (!state).objectclass <- PageDescriptionLevel; begin match partial with | PartialPath (sp, cp, segs, subpaths) -> if segs = [] then PartialPath (sp, cp, [], []), Path ((NonZero, rev subpaths), path_attributes_fill_and_stroke ())::graphic else PartialPath (sp, cp, [], []), Path ((NonZero, rev ((Not_hole, Open, rev segs)::subpaths)), path_attributes_fill_and_stroke ()) ::graphic | _ -> raise (Pdf.PDFError "Pdfgraphics: Op_B") end | Pdfops.Op_B' -> (* Fill and stroke, even-odd. *) if (!state).objectclass <> PathObject then raise (Pdf.PDFError "Pdfgraphics: Op_B*"); let partial, graphic = process_op pdf page (partial, graphic) Pdfops.Op_h in (!state).objectclass <- PageDescriptionLevel; begin match partial with | PartialPath (sp, cp, segs, subpaths) -> if segs = [] then PartialPath (sp, cp, [], []), Path ((EvenOdd, rev subpaths), path_attributes_fill_and_stroke ())::graphic else PartialPath (sp, cp, [], []), Path ((EvenOdd, rev ((Not_hole, Open, rev segs)::subpaths)), path_attributes_fill_and_stroke ()) ::graphic | _ -> raise (Pdf.PDFError "Pdfgraphics: Op_B*") end | Pdfops.Op_f' -> (* Fill, even-odd *) if (!state).objectclass <> PathObject then raise (Pdf.PDFError "Pdfgraphics: Op_f*"); (!state).objectclass <- PageDescriptionLevel; begin match partial with | PartialPath (sp, cp, segs, subpaths) -> if segs = [] then PartialPath (sp, cp, [], []), Path ((EvenOdd, rev subpaths), path_attributes_fill ())::graphic else PartialPath (sp, cp, [], []), Path ((EvenOdd, rev ((Not_hole, Open, rev segs)::subpaths)), path_attributes_fill ()) ::graphic | _ -> raise (Pdf.PDFError "Pdfgraphics: Op_f*") end | Pdfops.Op_n -> (* no-op *) (!state).objectclass <- PageDescriptionLevel; (* for now, until we support clipviews, clean up the polygon *) (NoPartial, graphic) | Pdfops.Op_re (x, y, w, h) -> (* Rectangle. *) let ops = [Pdfops.Op_m (x, y); Pdfops.Op_l (x +. w, y); Pdfops.Op_l (x +. w, y +. h); Pdfops.Op_l (x, y +. h); Pdfops.Op_h] in process_ops pdf page (partial, graphic) ops | Pdfops.Op_Do name -> begin match Pdf.lookup_direct pdf "/XObject" page.Pdfpage.resources with | Some d -> begin match Pdf.lookup_direct pdf name d with | Some xobj -> begin match Pdf.lookup_direct pdf "/Subtype" xobj with | Some (Pdf.Name "/Image") -> let objnum = match Pdf.find_indirect name d with | None -> raise (Pdf.PDFError "image not found") | Some i -> i in partial, Image ({image_transform = (!state).transform; image_transparency = (!state).opacity_nonstroke; image_softmask = (!state).softmask} , objnum)::graphic | Some (Pdf.Name "/Form") -> let elts = read_form_xobject pdf page xobj in partial, rev elts @ graphic | _ -> raise (Pdf.PDFError "Unknown kind of xobject") end | _ -> raise (Pdf.PDFError "Unknown xobject") end | None -> raise (Pdf.PDFError "xobject not found") end | Pdfops.Op_cm tr -> (!state).transform <- Pdftransform.matrix_compose (!state).transform tr; ret | ( Pdfops.Op_Tc _ | Pdfops.Op_Tw _ | Pdfops.Op_Tz _ | Pdfops.Op_TL _ | Pdfops.Op_Tf _ | Pdfops.Op_Tr _ | Pdfops.Op_Ts _ | Pdfops.Op_Td _ | Pdfops.Op_TD _ | Pdfops.Op_Tm _ | Pdfops.Op_T' | Pdfops.Op_Tj _ | Pdfops.Op_TJ _ | Pdfops.Op_' _ | Pdfops.Op_'' _ | Pdfops.Op_d0 _ | Pdfops.Op_d1 _) as op -> begin match partial with | PartialText t -> let st = textstate () in PartialText ((st, op)::t), graphic | _ -> (* If there's no partial text, this is an op affecting the text state but not in a text section. Such ops are allowed. FIXME: Deal with them properly - by ops altering the text state so this can be reflected in the initial state at the start of a text section *) ret end | Pdfops.Op_sh n -> let shading = let shadingdict = Pdf.lookup_fail "no /Shading" pdf "/Shading" page.Pdfpage.resources in let shading = Pdf.lookup_fail "named shading not found" pdf n shadingdict in read_shading pdf Pdftransform.i_matrix Pdf.Null shading and currentclip = (!state).clip in partial, Shading (currentclip, shading, (!state).transform)::graphic | Pdfops.Op_i flatness -> if flatness >= 0 && flatness <= 100 then (!state).flatness <- flatness; ret | Pdfops.Op_d (spec, phase) -> (!state).dash <- spec, phase; ret | Pdfops.Op_Unknown _ -> ret | _ -> Pdfe.log "Operator shouldn't appear at this place"; ret and getuntil_matching_emc level prev = function | (Pdfops.Op_BMC _ | Pdfops.Op_BDC (_, _)) as h::t -> getuntil_matching_emc (level + 1) (h::prev) t | Pdfops.Op_EMC::t -> if level < 0 then raise (Pdf.PDFError "Too many EMCs\n") else if level = 0 then rev prev, t else getuntil_matching_emc (level - 1) (Pdfops.Op_EMC::prev) t | h::t -> getuntil_matching_emc level (h::prev) t | [] -> raise (Pdf.PDFError "Missing EMC\n") and getuntil_matching_Q level prev = function | Pdfops.Op_q::t -> getuntil_matching_Q (level + 1) (Pdfops.Op_q::prev) t | Pdfops.Op_Q::t -> if level = 0 then rev prev, Pdfops.Op_Q::t else getuntil_matching_Q (level - 1) (Pdfops.Op_Q::prev) t | [] -> rev prev, [] | h::t -> getuntil_matching_Q level (h::prev) t and process_ops pdf page (partial, graphic) ops = match ops with | [] -> partial, rev graphic | Pdfops.Op_n::t -> (* If there's a NextClip, select all operators within the scope of this clip. That is, all operators until an [Op_Q] which puts the stack level below the current level or the end of the stream, whichever comes first.*) begin match (!state).clip with | None -> process_ops pdf page (partial, graphic) t | Some path -> (* We process the operators concerned, putting them inside a Clip, and then proceed with the remaining operators (including any [Op_Q]). However, to deal with the case of overlapping pairs of marked content sections and q/Q pairs (which is allowed). Currently just chuck BDC we don't understand. *) let toq, rest = getuntil_matching_Q 0 [] t in let _, elts = process_ops pdf page (NoPartial, []) toq in process_ops pdf page (NoPartial, Clip (path, elts)::graphic) rest end | Pdfops.Op_BMC n::t -> (* FIXME: Marked content regions / q/Q pairs overlapping problem *) begin try let ops, rest = getuntil_matching_emc 0 [] t in let partial, graphic' = process_ops pdf page (partial, []) ops in process_ops pdf page (partial, MCSection (n, graphic')::graphic) rest with _ -> process_ops pdf page (partial, graphic) t end | Pdfops.Op_BDC (n, d)::t -> (* FIXME: Marked content regions / q/Q pairs overlapping problem *) begin try let ops, rest = getuntil_matching_emc 0 [] t in let partial, graphic' = process_ops pdf page (partial, []) ops in process_ops pdf page (partial, MCSectionProperties (n, d, graphic')::graphic) rest with _ -> process_ops pdf page (partial, graphic) t end | Pdfops.Op_BT::t -> (* Can't nest text sections, so just get to ET *) let textops, rest = cleavewhile (neq Pdfops.Op_ET) t in begin match rest with | Pdfops.Op_ET::_ | [] -> (* We allow blank in case of wrongly nested EMC / ET etc *) let more = tail_no_fail rest in (* We need to process the ops, and capture the text operations, but state changes inside text sections (e.g colour changes) have global effect, so need to keep the state *) (!state).objectclass <- TextObject; let partial, _ = process_ops pdf page (PartialText [], graphic) textops in begin match partial with | PartialText t -> let textblock = Text (rev t, {textblock_transform = (!state).transform}) in process_ops pdf page (partial, textblock::graphic) (Pdfops.Op_ET::more) | _ -> raise (Pdf.PDFError "Bad operations in text block") end | _ -> (*i Printf.printf "textops: %s\n\n" (Pdfops.string_of_ops textops); Printf.printf "rest: %s\n\n" (Pdfops.string_of_ops rest); i*) raise (Pdf.PDFError "No Matching Op_ET") end | Pdfops.Op_ET::t -> (!state).objectclass <- PageDescriptionLevel; process_ops pdf page (partial, graphic) t | h::t -> process_ops pdf page (process_op pdf page (partial, graphic) h) t (* Load the fonts as (name, pdfobject) pairs *) and fonts_of_page pdf page = match Pdf.lookup_direct pdf "/Font" page.Pdfpage.resources with | Some (Pdf.Dictionary fs) -> fs | _ -> [] (* Find the operations of a form xobject. *) and read_form_xobject pdf page pdfobject = let content = [Pdf.direct pdf pdfobject] in let pagedict = match Pdf.direct pdf page.Pdfpage.resources with | Pdf.Dictionary rs -> rs | _ -> [] and xobjdict = match Pdf.direct pdf pdfobject with | Pdf.Stream {contents = (dict, _)} -> begin match Pdf.lookup_direct pdf "/Resources" dict with | Some (Pdf.Dictionary rs) -> rs | _ -> [] end | _ -> raise (Pdf.PDFError "bad stream in read_form_xobject") in let total_resources = Pdf.Dictionary (mergedict pagedict xobjdict) in let fake_page = {Pdfpage.content = []; Pdfpage.mediabox = Pdf.Null; Pdfpage.resources = total_resources; Pdfpage.rotate = Pdfpage.Rotate0; Pdfpage.rest = Pdf.Dictionary []} in let _, graphic_elts = (process_ops pdf fake_page (NoPartial, []) (Pdfops.parse_operators pdf total_resources content)) in graphic_elts (* Main function - build a graphic from a page *) and graphic_of_page pdf page = statestack := []; state := default_state (); if Pdfcrypt.is_encrypted pdf then raise (Pdf.PDFError "Pdfgraphics: File is encrypted") else begin let _, elts = let ops = Pdfops.parse_operators pdf page.Pdfpage.resources page.Pdfpage.content in process_ops pdf page (NoPartial, []) ops in {elements = elts; fonts = fonts_of_page pdf page; resources = page.Pdfpage.resources} end let graphic_of_ops ops = graphic_of_page (Pdf.empty ()) {(Pdfpage.blankpage Pdfpaper.a4) with Pdfpage.content = [Pdf.Stream {contents = (Pdf.Dictionary [], Pdf.Got (bytes_of_string (Pdfops.string_of_ops ops)))}]} (* \section{Building a page from a graphic} *) let int_of_shading_kind = function | FunctionShading _ -> 1 | AxialShading _ -> 2 | RadialShading _ -> 3 | FreeFormGouraudShading -> 4 | LatticeFormGouraudShading -> 5 | CoonsPatchMesh -> 6 | TensorProductPatchMesh -> 7 let entries_of_shading pdf s = match s.shading with | RadialShading r -> let coords = let a, b, c, d, e, f = r.radialshading_coords in Pdf.Array [Pdf.Real a; Pdf.Real b; Pdf.Real c; Pdf.Real d; Pdf.Real e; Pdf.Real f] and domain = let a, b = r.radialshading_domain in Pdf.Array [Pdf.Real a; Pdf.Real b] and funcnum = match r.radialshading_function with | [f] -> Pdf.addobj pdf (Pdffun.pdfobject_of_function pdf f) | funs -> Pdf.addobj pdf (Pdf.Array (map (Pdffun.pdfobject_of_function pdf) funs)) and extend = Pdf.Array [Pdf.Boolean (fst r.radialshading_extend); Pdf.Boolean (snd r.radialshading_extend)] in ["/Coords", coords; "/Domain", domain; "/Function", Pdf.Indirect funcnum; "/Extend", extend] | AxialShading a -> let coords = let a, b, c, d = a.axialshading_coords in Pdf.Array [Pdf.Real a; Pdf.Real b; Pdf.Real c; Pdf.Real d] and domain = let a, b = a.axialshading_domain in Pdf.Array [Pdf.Real a; Pdf.Real b] and funcnum = match a.axialshading_function with | [f] -> Pdf.addobj pdf (Pdffun.pdfobject_of_function pdf f) | funs -> Pdf.addobj pdf (Pdf.Array (map (Pdffun.pdfobject_of_function pdf) funs)) and extend = Pdf.Array [Pdf.Boolean (fst a.axialshading_extend); Pdf.Boolean (snd a.axialshading_extend)] in ["/Coords", coords; "/Domain", domain; "/Function", Pdf.Indirect funcnum; "/Extend", extend] | _ -> [] let shading_object_of_shading pdf s = let background = match s.shading_background with | None -> [] | Some b -> ["/Background", b] and bbox = match s.shading_bbox with | None -> [] | Some b -> ["/BBox", b] in Pdf.Dictionary (["/ShadingType", Pdf.Integer (int_of_shading_kind s.shading); "/ColorSpace", s.shading_colourspace; "/AntiAlias", Pdf.Boolean s.shading_antialias] @ background @ bbox @ entries_of_shading pdf s) let pattern_object_of_pattern xobject_level opdo_matrix pdf = function | ShadingPattern s -> begin try let shading_matrix = if xobject_level > 0 then let inverted = Pdftransform.matrix_invert opdo_matrix in Pdftransform.matrix_compose inverted s.shading_matrix else s.shading_matrix in Pdf.Dictionary ["/Type", Pdf.Name "/Pattern"; "/PatternType", Pdf.Integer 2; "/Shading", shading_object_of_shading pdf s; "/Matrix", Pdf.make_matrix shading_matrix] with Pdftransform.NonInvertable -> raise (Pdf.PDFError "Pdfgraphics.Bad pattern") end | _ -> Pdfe.log "Unknown pattern\n"; Pdf.Dictionary [] (* Output a move and line/curve ops. *) let ops_of_segs segs closure = let raw_seg_ops = map (function | Straight (_, (x, y)) -> Pdfops.Op_l (x, y) | Bezier (_, (bx, by), (cx, cy), (dx, dy)) -> Pdfops.Op_c (bx, by, cx, cy, dx, dy)) segs and get_move = function | Straight ((x, y), _) | Bezier ((x, y), _, _, _) -> Pdfops.Op_m (x, y) in (* Predicate: Do we need to close this subpath? *) match segs with | [] -> [] | h::_ -> get_move h::raw_seg_ops @ (if closure = Closed then [Pdfops.Op_h] else []) let protect ops = [Pdfops.Op_q] @ ops @ [Pdfops.Op_Q] let attribute_ops_of_path (_, a) = [Pdfops.Op_w a.path_linewidth; Pdfops.Op_J a.path_capstyle; Pdfops.Op_j a.path_joinstyle; begin match a.path_dash with (x, y) -> Pdfops.Op_d (x, y) end; Pdfops.Op_M a.path_mitrelimit; Pdfops.Op_ri a.path_intent] let transform_ops_of_path (_, a) = [Pdfops.Op_cm a.path_transform] let stroke_ops_of_path ((winding, _), a) = match winding, a.path_fill, a.path_line with | _, None, None -> Pdfops.Op_n | EvenOdd, Some _, Some _ -> Pdfops.Op_B' | EvenOdd, Some _, None -> Pdfops.Op_f' | NonZero, Some _, Some _ -> Pdfops.Op_B | NonZero, Some _, None -> Pdfops.Op_f | _, None, Some _ -> Pdfops.Op_S let path_ops_of_path (_, subpaths) = flatten (map (fun (_, closure, segs) -> ops_of_segs segs closure) subpaths) let ops_of_path pdf page (((winding, subpaths), a) as p) = (* Add a colourspace returning new resources and a new name, or return the name it's already held under. *) let name_of_colourspace cs resources = match cs with (*i | Pdf.Name (("/DeviceGray" | "/DeviceRGB" | "/DeviceCMYK" | "/Pattern") as str) -> resources, str i*) | Pdfspace.DeviceGray | Pdfspace.DeviceRGB | Pdfspace.DeviceCMYK | Pdfspace.Pattern -> resources, Pdfspace.string_of_colourspace cs | _ -> let existing_colourspacedict = match Pdf.lookup_direct pdf "/ColorSpace" resources with | Some ((Pdf.Dictionary _) as d) -> d | _ -> Pdf.Dictionary [] in (* FIXME: For now, we just always create a new one. Must search to see if it's already there for efficiency. *) let name = Pdf.unique_key "cs" existing_colourspacedict in let newcolourspacedict = Pdf.add_dict_entry existing_colourspacedict name (Pdfspace.write_colourspace pdf cs) in Pdf.add_dict_entry resources "/ColorSpace" newcolourspacedict, name in let resources = page.Pdfpage.resources in let attribute_ops = attribute_ops_of_path p and transform = transform_ops_of_path p and stroke_op = stroke_ops_of_path p in let colours_stroke, resources = match a.path_line with | Some (cs, Floats vals) -> let resources', name = name_of_colourspace cs resources in [Pdfops.Op_CS name; Pdfops.Op_SCN vals], resources | Some (cs, Named (n, vals)) -> let resources', name = name_of_colourspace cs resources in [Pdfops.Op_CS name; Pdfops.Op_SCNName (n, vals)], resources' | _ -> [], resources in let colours_nonstroke, resources = match a.path_fill with | Some (cs, Floats vals) -> let resources', name = name_of_colourspace cs resources in [Pdfops.Op_cs name; Pdfops.Op_scn vals], resources' | Some (cs, Named (n, vals)) -> let resources', name = name_of_colourspace cs resources in [Pdfops.Op_cs name; Pdfops.Op_scnName (n, vals)], resources' | Some (_, Pattern p) -> (* Build /Pattern cs and reference to pattern, having built the pattern in the pattern dictionary *) let pattern = pattern_object_of_pattern (!state).in_xobject (!state).opdo_matrix pdf p in let resources, name = let existing_patterndict = match Pdf.lookup_direct pdf "/Pattern" resources with | Some ((Pdf.Dictionary _) as d) -> d | _ -> Pdf.Dictionary [] in let name = Pdf.unique_key "pt" existing_patterndict in let newpatterndict = Pdf.add_dict_entry existing_patterndict name pattern in Pdf.add_dict_entry page.Pdfpage.resources "/Pattern" newpatterndict, name in [Pdfops.Op_cs "/Pattern"; Pdfops.Op_scnName (name, [])], resources | _ -> [], resources in let gs, resources = if a.path_transparency.fill_transparency < 1. || a.path_transparency.line_transparency < 1. then let resources, name = let existing_extgstate = match Pdf.lookup_direct pdf "/ExtGState" resources with | Some ((Pdf.Dictionary _) as d) -> d | _ -> Pdf.Dictionary [] in let name = Pdf.unique_key "gs" existing_extgstate and gsdict = Pdf.Dictionary [("/ca", Pdf.Real a.path_transparency.fill_transparency); ("/CA", Pdf.Real a.path_transparency.line_transparency)] in let new_extgstate = Pdf.add_dict_entry existing_extgstate name gsdict in Pdf.add_dict_entry page.Pdfpage.resources "/ExtGState" new_extgstate, name in [Pdfops.Op_gs name], resources else [], resources in let path_ops = path_ops_of_path (winding, subpaths) in protect (gs @ transform @ attribute_ops @ colours_stroke @ colours_nonstroke @ path_ops @ [stroke_op]), resources let ops_of_textstate st = [] let ops_of_textpiece (st, op) = ops_of_textstate st @ [op] (* Upon entry to this, the transformation matrix is identity *) let ops_of_text tr ops = protect ([Pdfops.Op_cm tr; Pdfops.Op_BT] @ (flatten <| map ops_of_textpiece ops) @ [Pdfops.Op_ET]) (* Transform a bounding box by a given matrix *) let extreme_of_4 f a b c d = hd <| sort f [a; b; c; d] let min_of_4 = extreme_of_4 compare let max_of_4 = extreme_of_4 (fun a b -> ~-(compare a b)) let transform_bbox tr l b r t = let (x0, y0) = Pdftransform.transform_matrix tr (l, t) and (x1, y1) = Pdftransform.transform_matrix tr (l, b) and (x2, y2) = Pdftransform.transform_matrix tr (r, t) and (x3, y3) = Pdftransform.transform_matrix tr (r, b) in min_of_4 x0 x1 x2 x3, min_of_4 y0 y1 y2 y3, max_of_4 x0 x1 x2 x3, max_of_4 y0 y1 y2 y3 (* Build a transparency group xobject, add it to the pdf and return its object number *) let rec pdfobject_of_transparency_group (a, b, c, d) pdf t = (!state).in_xobject <- (!state).in_xobject + 1; let r = let page = page_of_graphic pdf (0., 0., 0., 0.) t.tr_graphic and group_attributes = let cs = match t.tr_group_colourspace with | None -> [] | Some pdfobject -> ["/CS", pdfobject] in Pdf.Dictionary (["/Type", Pdf.Name "/Group"; "/S", Pdf.Name "/Transparency"; "/I", Pdf.Boolean t.isolated; "/K", Pdf.Boolean t.knockout] @ cs) in let extras = ["/Type", Pdf.Name "/XObject"; "/Subtype", Pdf.Name "/Form"; "/BBox", Pdf.Array [Pdf.Real a; Pdf.Real b; Pdf.Real c; Pdf.Real d]; "/Resources", page.Pdfpage.resources; "/Group", group_attributes] in match page.Pdfpage.content with | Pdf.Stream ({contents = Pdf.Dictionary dict, Pdf.Got data})::_ -> Pdf.addobj pdf (Pdf.Stream ({contents = Pdf.Dictionary (extras @ dict), Pdf.Got data})) | _ -> raise (Pdf.PDFError "Pdfgraphics: Bad page content") in (!state).in_xobject <- (!state).in_xobject - 1; r and pdfobject_of_softmask pdf m = let bc = match m.backdrop with | None -> [] | Some fs -> ["/BC", Pdf.Array (map (function x -> Pdf.Real x) fs)] and tr = match m.softmask_transfer with | None -> [] | Some f -> ["/TR", Pdffun.pdfobject_of_function pdf f] in Pdf.addobj pdf (Pdf.Dictionary (["/Type", Pdf.Name "/Mask"; "/S", Pdf.Name (match m.softmask_subtype with Alpha -> "/Alpha" | Luminosity -> "/Luminosity"); "/G", Pdf.Indirect (pdfobject_of_transparency_group m.softmask_bbox pdf m.transparency_group)] @ bc @ tr)) and ops_of_image pdf page (a, i) = (!state).opdo_matrix <- a.image_transform; let resources = page.Pdfpage.resources in let ops, resources = let opgs, resources = if a.image_transparency < 1. || a.image_softmask <> None then let resources, name = let existing_extgstate = match Pdf.lookup_direct pdf "/ExtGState" page.Pdfpage.resources with | Some ((Pdf.Dictionary _) as d) -> d | _ -> Pdf.Dictionary [] in let name = Pdf.unique_key "gs" existing_extgstate and gsdict = let softmask = match a.image_softmask with | None -> [] | Some m -> ["/SMask", Pdf.Indirect (pdfobject_of_softmask pdf m)] in Pdf.Dictionary ([("/ca", Pdf.Real a.image_transparency)] @ softmask) in let new_extgstate = Pdf.add_dict_entry existing_extgstate name gsdict in Pdf.add_dict_entry resources "/ExtGState" new_extgstate, name in [Pdfops.Op_gs name], resources else [], resources in [Pdfops.Op_cm a.image_transform] @ opgs @ [Pdfops.Op_Do ("/Im" ^ string_of_int i)], resources in protect ops, resources and ops_of_shading pdf page path shading transform = let resources', name = (* Add new entry to shading dictionary, return its name, new resources *) let existing_shadingdict = match Pdf.lookup_direct pdf "/Shading" page.Pdfpage.resources with | Some ((Pdf.Dictionary _) as d) -> d | _ -> Pdf.Dictionary [] in let name = Pdf.unique_key "sh" existing_shadingdict and objnum = Pdf.addobj pdf (shading_object_of_shading pdf shading) in let shadingref = Pdf.Indirect objnum in let new_shadingdict = Pdf.add_dict_entry existing_shadingdict name shadingref in let r = Pdf.add_dict_entry page.Pdfpage.resources "/Shading" new_shadingdict in r, name in let ops = let pathops, clipops = match path with | None -> [], [] | Some p -> path_ops_of_path p, [Pdfops.Op_W; Pdfops.Op_n] (* FIXME: Even-odd vs Non-Zero *) in pathops @ clipops @ [Pdfops.Op_cm transform; Pdfops.Op_sh name] in protect ops, resources' and ops_of_graphic_acc pdf page oplists = function | [] -> flatten (rev oplists), page | Path p::t -> let ops, resources' = ops_of_path pdf page p in let page' = {page with Pdfpage.resources = resources'} in ops_of_graphic_acc pdf page' (ops::oplists) t | Image (attr, i)::t -> let ops, resources' = ops_of_image pdf page (attr, i) in let page' = {page with Pdfpage.resources = resources'} in ops_of_graphic_acc pdf page' (ops::oplists) t | Text (ts, {textblock_transform = tr})::t -> let ops = ops_of_text tr ts in ops_of_graphic_acc pdf page (ops::oplists) t | MCSection (n, graphic)::t -> let oplist, page' = ops_of_graphic_acc pdf page [] graphic in ops_of_graphic_acc pdf page' (([Pdfops.Op_BMC n] @ oplist @ [Pdfops.Op_EMC])::oplists) t | MCSectionProperties (n, d, graphic)::t -> let oplist, page' = ops_of_graphic_acc pdf page [] graphic in ops_of_graphic_acc pdf page' (([Pdfops.Op_BDC (n, d)] @ oplist @ [Pdfops.Op_EMC])::oplists) t | MCPoint n::t -> ops_of_graphic_acc pdf page ([Pdfops.Op_MP n]::oplists) t | MCPointProperties (n, d)::t -> ops_of_graphic_acc pdf page ([Pdfops.Op_DP (n, d)]::oplists) t | GraphicInlineImage (dict, data, tr)::t -> ops_of_graphic_acc pdf page (protect [Pdfops.Op_cm tr; Pdfops.InlineImage (dict, data)]::oplists) t | Clip ((w, _) as p, elts)::t -> let ops, page' = let path_ops = [Pdfops.Op_cm (!state).transform] @ path_ops_of_path p and clipviewops = [if w = NonZero then Pdfops.Op_W else Pdfops.Op_W'; Pdfops.Op_n] and insideclipops, page' = ops_of_graphic_acc pdf page [] elts in protect (path_ops @ clipviewops @ insideclipops), page' in ops_of_graphic_acc pdf page' (ops::oplists) t | Shading (path, shading, transform)::t -> let ops, resources' = ops_of_shading pdf page path shading transform in let oplists'= protect ops::oplists and page' = {page with Pdfpage.resources = resources'} in ops_of_graphic_acc pdf page' oplists' t (* Build a page from a graphic in the same PDF. *) and image_numbers_of_elts prev = function | Image (_, i)::t -> image_numbers_of_elts (i::prev) t | MCSection (_, elts)::t | MCSectionProperties (_, _, elts)::t | Clip (_, elts)::t -> let these = image_numbers_of_elts [] elts in image_numbers_of_elts (these @ prev) t | _::t -> image_numbers_of_elts prev t | [] -> prev and make_xobjects pdf elts = let numbers = image_numbers_of_elts [] elts in setify <| map (function n -> ("/Im" ^ string_of_int n), Pdf.Indirect n) numbers and make_resources pdf g page' = let resources = match g.resources with | Pdf.Dictionary rs -> rs | _ -> [] and fontdict = Pdf.Dictionary g.fonts and xobjdict = let objs = make_xobjects pdf g.elements in Pdf.Dictionary objs and resources_frompage = match page'.Pdfpage.resources with | Pdf.Dictionary d -> d | _ -> raise (Pdf.PDFError "bad resources in page in make_resources") in let resources = remove "/Shading" resources in let resources = remove "/Pattern" resources in let resources = remove "/ExtGState" resources in let resources = remove "/ColorSpace" resources in (* [fold_right] so that entries overwrite *) Pdf.Dictionary (fold_right (fun (k, v) d -> add k v d) ["/Font", fontdict; "/XObject", xobjdict] (resources_frompage @ resources)) and page_of_graphic pdf (xmin, ymin, xmax, ymax) graphic = let page = Pdfpage.custompage (Pdf.Array [Pdf.Real xmin; Pdf.Real ymin; Pdf.Real xmax; Pdf.Real ymax]) in let ops, page' = ops_of_graphic_acc pdf page [] graphic.elements in (* We're not including the ExtGState because it's in the page', so need to merge with resources *) let resources = make_resources pdf graphic page' in {page' with Pdfpage.content = [Pdfops.stream_of_ops ops]; Pdfpage.resources = resources} let ops_of_simple_graphic graphic = fst (ops_of_graphic_acc (Pdf.empty ()) (Pdfpage.blankpage Pdfpaper.a4) [] graphic.elements) (* FIXME Add in here a function to copy a page/graphic from one document to another *) let streams_of_simple_graphic g = (page_of_graphic (Pdf.empty ()) (0., 0., 600., 400.) g).Pdfpage.content (* Transforming a graphic *) let transform_segment tr s = let f = Pdftransform.transform_matrix tr in match s with | Straight (x, y) -> Straight (f x, f y) | Bezier (a, b, c, d) -> Bezier (f a, f b, f c, f d) let transform_subpath tr (h, c, segments) = (h, c, map (transform_segment tr) segments) let transform_path tr (w, subpaths) = (w, map (transform_subpath tr) subpaths) let transform_element tr = function | Path (pth, attr) -> Path (transform_path tr pth, attr) | x -> x (* FIXME: Add rest of elements. *) let transform_graphic tr g = {g with elements = map (transform_element tr) g.elements} �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/old/cpdfgraphics.mli���������������������������������������������������������������������0000664�0001750�0001750�00000012225�14771516640�015051� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(** Structured Graphics. This will (eventually) be a module allowing for the raising of a page's contents to a tree form, the manipulation of that tree and its writing back to the page, with no possible loss of fidelity. It is only a little experiment at the moment... *) open Pdfutil open Pdfio (** Point. *) type fpoint = float * float (** Winding rule. *) type winding_rule = EvenOdd | NonZero (** A segment (a straight line or bezier curve) *) type segment = | Straight of fpoint * fpoint | Bezier of fpoint * fpoint * fpoint * fpoint (** Each segment list may be marked as a hole or not. *) type hole = Hole | Not_hole (* A [subpath] is either closed or open. *) type closure = Closed | Open (** A [subpath] is the pair of a hole and a list of segments. *) type subpath = hole * closure * segment list (** A path is made from a number of subpaths. *) type path = winding_rule * subpath list val string_of_path : path -> string (** Colour values *) type tiling = Tiling type function_shading = {funshading_domain : float * float * float * float; funshading_matrix : Pdftransform.transform_matrix; funshading_function : Pdffun.t} type radial_shading = {radialshading_coords : float * float * float * float * float * float; radialshading_domain : float * float; radialshading_function : Pdffun.t list; radialshading_extend : bool * bool} type axial_shading = {axialshading_coords : float * float * float * float; axialshading_domain : float * float; axialshading_function : Pdffun.t list; axialshading_extend : bool * bool} type shading_kind = | FunctionShading of function_shading | AxialShading of axial_shading | RadialShading of radial_shading | FreeFormGouraudShading | LatticeFormGouraudShading | CoonsPatchMesh | TensorProductPatchMesh type shading = {shading_colourspace : Pdf.pdfobject; shading_background : Pdf.pdfobject option; shading_bbox : Pdf.pdfobject option; shading_antialias : bool; shading_matrix : Pdftransform.transform_matrix; shading_extgstate : Pdf.pdfobject; shading : shading_kind} type pattern = | ColouredTilingPattern of tiling | UncolouredTilingPattern of tiling | ShadingPattern of shading type colvals = | Floats of float list | Named of (string * float list) | Pattern of pattern type transparency_attributes = {fill_transparency : float; line_transparency : float} (** Path attributes. *) type path_attributes = {path_transform : Pdftransform.transform_matrix; path_fill : (Pdfspace.t * colvals) option; path_line : (Pdfspace.t * colvals) option; path_linewidth : float; path_joinstyle : int; path_capstyle : int; path_dash : float list * float; path_mitrelimit : float; path_transparency : transparency_attributes; path_intent : string} type text_attributes = {textmode : int} type textblock_attributes = {textblock_transform : Pdftransform.transform_matrix} type textblock = text_attributes * Pdfops.t type image_attributes = {image_transform : Pdftransform.transform_matrix; image_transparency : float; image_softmask : softmask option} (* The /ca value *) and softmask_subtype = Alpha | Luminosity and transparency_group = {tr_group_colourspace : Pdf.pdfobject option; isolated : bool; knockout : bool; tr_graphic : t} and softmask = {softmask_subtype : softmask_subtype; transparency_group : transparency_group; softmask_bbox : float * float * float * float; backdrop : float list option; softmask_transfer : Pdffun.t option} and fontname = string * Pdf.pdfobject (** For now, just support for reading paths out. Eventually a tree-structure for an op stream. *) and graphic_elt = | Path of (path * path_attributes) | Text of textblock list * textblock_attributes | MCPoint of string | MCPointProperties of string * Pdf.pdfobject | MCSection of string * graphic_elt list | MCSectionProperties of string * Pdf.pdfobject * graphic_elt list | Image of image_attributes * int | GraphicInlineImage of Pdf.pdfobject * bytes * Pdftransform.transform_matrix | Clip of path * graphic_elt list | Shading of path option * shading * Pdftransform.transform_matrix and t = {elements : graphic_elt list; (* Page content *) fonts : fontname list; (* Fonts *) resources : Pdf.pdfobject} (* Anything else in /Resources *) (** Bounding box xmin, xmax, ymin, yman of a graphic *) val bbox_of_graphic : t -> float * float * float * float (** Make a graphic from operations. *) val graphic_of_page : Pdf.t -> Pdfpage.t -> t (** Make a graphic from a simple string. *) val graphic_of_ops : Pdfops.t list -> t (** Flatten a graphic to a list of operations and replace the operations in a page by them, returning the new page. *) val page_of_graphic : Pdf.t -> (float * float * float * float) -> t -> Pdfpage.t (** Debug string of a [graphic] *) val string_of_graphic : t -> string (** Operations from a simple graphic (i.e no need for resources etc.) *) val ops_of_simple_graphic : t -> Pdfops.t list (** Pdfdoc.content entry from a simple graphic (i.e no need for resources etc.) *) val streams_of_simple_graphic : t -> Pdf.pdfobject list (** Transform a graphic by a matrix. *) val transform_graphic : Pdftransform.transform_matrix -> t -> t ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/cpdfpng.mli������������������������������������������������������������������������������0000664�0001750�0001750�00000000517�14771516640�013260� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(** Read PNG files *) (** PNG files, represented only to the extent required to insert as PDF image objects *) type t = {width : int; height : int; bitdepth : int; colortype : int; idat : Pdfio.bytes} (** Read a non-interlaced, non-alpha, non-palette PNG for inclusion in a PDF file. *) val read_png : Pdfio.input -> t ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/cpdfxmlm.mli�����������������������������������������������������������������������������0000664�0001750�0001750�00000074021�14771516640�013452� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(*--------------------------------------------------------------------------- Copyright (c) 2007 Daniel C. Bünzli. All rights reserved. Distributed under the ISC license, see terms at the end of the file. %%NAME%% %%VERSION%% ---------------------------------------------------------------------------*) (** Streaming XML codec. A well-formed sequence of {{!signal}signals} represents an {{:http://www.w3.org/TR/REC-xml}XML} document tree traversal in depth first order (this has nothing to do with XML well-formedness). Input pulls a well-formed sequence of signals from a data source and output pushes a well-formed sequence of signals to a data destination. Functions are provided to easily transform sequences of signals to/from arborescent data structures. Consult the {{!io}features and limitations} and {{!ex}examples} of use. {e %%VERSION%% — {{:%%PKG_HOMEPAGE%% }homepage}} {3 References} {ul {- Tim Bray. {e {{:http://www.xml.com/axml/axml.html}The annotated XML Specification}}, 1998.} {- Tim Bray et al. {e {{:http://www.w3.org/TR/xml-names11}Namespaces in XML 1.1 (2nd ed.)}}, 2006.}} *) (** {1 Basic types and values} *) (** The type for character encodings. For [`UTF_16], endianness is determined from the {{:http://www.unicode.org/unicode/faq/utf_bom.html#BOM}BOM}. *) type encoding = [ | `UTF_8 | `UTF_16 (** Endianness determined from the {{:http://www.unicode.org/unicode/faq/utf_bom.html#BOM}BOM}. *) | `UTF_16BE | `UTF_16LE | `ISO_8859_1 | `US_ASCII ] type dtd = string option (** The type for the optional {{:http://www.w3.org/TR/REC-xml/#dt-doctype}DTD}. *) type name = string * string (** The type for attribute and element's {{:http://www.w3.org/TR/xml-names11/#dt-expname}expanded names} [(uri,local)]. An empty [uri] represents a name without a namespace name, i.e. an unprefixed name that is not under the scope of a default namespace. *) type attribute = name * string (** The type for attributes. Name and attribute data. *) type tag = name * attribute list (** The type for an element tag. Tag name and attribute list. *) type signal = [ `Dtd of dtd | `El_start of tag | `El_end | `Data of string ] (** The type for signals. A {e well-formed} sequence of signals belongs to the language of the [doc] grammar : {[doc ::= `Dtd tree tree ::= `El_start child `El_end child ::= `Data trees | trees trees ::= tree child | epsilon]} The [trees] production is used to expresses the fact that there will never be two consecutive `Data signals in the children of an element. Input and output deal only with well-formed sequences or exceptions are raised. However on output consecutive [`Data] signals are allowed. *) val ns_xml : string (** Namespace name {{:http://www.w3.org/XML/1998/namespace}value} bound to the reserved ["xml"] prefix. *) val ns_xmlns : string (** Namespace name {{:http://www.w3.org/2000/xmlns/}value} bound to the reserved ["xmlns"] prefix. *) val pp_dtd : Format.formatter -> dtd -> unit (** [pp_dtd ppf dtd] prints an unspecified representation of [dtd] on [ppf]. *) val pp_name : Format.formatter -> name -> unit (** [pp_name ppf name] prints an unspecified representation of [name] on [ppf]. *) val pp_attribute : Format.formatter -> attribute -> unit (** [pp_attribute ppf att] prints an unspecified representation of [att] on [ppf]. *) val pp_tag : Format.formatter -> tag -> unit (** [pp_tag ppf tag] prints an unspecified representation of [tag] on [ppf]. *) val pp_signal : Format.formatter -> signal -> unit (** [pp_signal ppf s] prints an unspecified representation of [s] on [ppf]. *) (** {1 Input} *) type pos = int * int (** The type for input positions. Line and column number, both start with 1. *) (** The type for input errors. *) type error = [ | `Max_buffer_size (** Maximal buffer size exceeded ([Sys.max_string_length]). *) | `Unexpected_eoi (** Unexpected end of input. *) | `Malformed_char_stream (** Malformed underlying character stream. *) | `Unknown_encoding of string (** Unknown encoding. *) | `Unknown_entity_ref of string (** Unknown entity reference, {{!inentity} details}. *) | `Unknown_ns_prefix of string (** Unknown namespace prefix {{!inns} details} *) | `Illegal_char_ref of string (** Illegal character reference. *) | `Illegal_char_seq of string (** Illegal character sequence. *) | `Expected_char_seqs of string list * string (** Expected one of the character sequences in the list but found another. *) | `Expected_root_element (** Expected the document's root element. *) ] val error_message : error -> string (** Converts the error to an english error message. *) exception Error of pos * error (** Raised on input errors. *) type source = [ | `Channel of in_channel | `String of int * string | `Fun of (unit -> int) ] (** The type for input sources. For [`String] starts reading at the given integer position. For [`Fun] the function must return the next {e byte} as an [int] and raise [End_of_file] if there is no such byte. *) type input (** The type for input abstractions. *) val make_input : ?enc:encoding option -> ?strip:bool -> ?ns:(string -> string option) -> ?entity: (string -> string option) -> source -> input (** Returns a new input abstraction reading from the given source. {ul {- [enc], character encoding of the document, {{!inenc} details}. Defaults to [None].} {- [strip], strips whitespace in character data, {{!inwspace} details}. Defaults to [false].} {- [ns] is called to bind undeclared namespace prefixes, {{!inns} details}. Default returns always [None].} {- [entity] is called to resolve non predefined entity references, {{!inentity} details}. Default returns always [None].}} *) val input : input -> signal (** Inputs a signal. Repeated invocation of the function with the same input abstraction will generate a {{!signal}well-formed} sequence of signals or an {!Error} is raised. Furthermore there will be no two consecutive [`Data] signals in the sequence and their string is always non empty. {b Deprecated} After a well-formed sequence was input another may be input, see {!eoi} and {{!iseq}details}. {b Raises} {!Error} on input errors. *) val input_tree : el:(tag -> 'a list -> 'a) -> data:(string -> 'a) -> input -> 'a (** If the next signal is a : {ul {- [`Data] signal, inputs it and invokes [data] with the character data.} {- [`El_start] signal, inputs the sequence of signals until its matching [`El_end] and invokes [el] and [data] as follows {ul {- [el], is called on each [`El_end] signals with the corresponding [`El_start] tag and the result of the callback invocation for the element's children.} {- [data], is called on each [`Data] signals with the character data. This function won't be called twice consecutively or with the empty string.}}} {- Other signals, raises [Invalid_argument].}} {b Raises} {!Error} on input errors and [Invalid_argument] if the next signal is not [`El_start] or [`Data]. *) val input_doc_tree : el:(tag -> 'a list -> 'a) -> data:(string -> 'a) -> input -> (dtd * 'a) (** Same as {!input_tree} but reads a complete {{!signal}well-formed} sequence of signals. {b Raises} {!Error} on input errors and [Invalid_argument] if the next signal is not [`Dtd]. *) val peek : input -> signal (** Same as {!input} but doesn't remove the signal from the sequence. {b Raises} {!Error} on input errors. *) val eoi : input -> bool (** Returns [true] if the end of input is reached. See {{!iseq}details}. {b Raises} {!Error} on input errors. *) val pos : input -> pos (** Current position in the input abstraction. *) (** {1 Output} *) type 'a frag = [ `El of tag * 'a list | `Data of string ] (** The type for deconstructing data structures of type ['a]. *) type dest = [ `Channel of out_channel | `Buffer of Buffer.t | `Fun of (int -> unit) ] (** The type for output destinations. For [`Buffer], the buffer won't be cleared. For [`Fun] the function is called with the output {e bytes} as [int]s. *) type output (** The type for output abstractions. *) val make_output : ?decl:bool -> ?nl:bool -> ?indent:int option -> ?ns_prefix:(string -> string option) -> dest -> output (** Returns a new output abstraction writing to the given destination. {ul {- [decl], if [true] the {{:http://www.w3.org/TR/REC-xml/#NT-XMLDecl} XML declaration} is output (defaults to [true]).} {- [nl], if [true] a newline is output when the root's element [`El_end] signal is output. Defaults to [false].} {- [indent], identation behaviour, see {{!outindent} details}. Defaults to [None].} {- [ns_prefix], undeclared namespace prefix bindings, see {{!outns}details}. Default returns always [None].}} *) val output : output -> signal -> unit (** Outputs a signal. {b Deprecated.} After a well-formed sequence of signals was output a new well-formed sequence can be output. {b Raises} [Invalid_argument] if the resulting signal sequence on the output abstraction is not {{!signal}well-formed} or if a namespace name could not be bound to a prefix. *) val output_depth : output -> int (** [output_depth o] is [o]'s current element nesting level (undefined before the first [`El_start] and after the last [`El_end]). *) val output_tree : ('a -> 'a frag) -> output -> 'a -> unit (** Outputs signals corresponding to a value by recursively applying the given value deconstructor. {b Raises} see {!output}. *) val output_doc_tree : ('a -> 'a frag) -> output -> (dtd * 'a) -> unit (** Same as {!output_tree} but outputs a complete {{!signal}well-formed} sequence of signals. {b Raises} see {!output}. *) (** {1:sto Functorial interface (deprecated)} {b WARNING.} The functioral interface is deprecated and will be removed. {!Make} allows client to specify types for strings and internal buffers. Among other things this can be used to perform hash-consing or to process the character stream, e.g. to normalize unicode characters or to convert to a custom encoding. *) type std_string = string type std_buffer = Buffer.t (** Input signature for strings. *) module type String = sig type t (** The type for strings. *) val empty : t (** The empty string. *) val length : t -> int (** Returns the length of the string. *) val append : t -> t -> t (** Concatenates two strings. *) val lowercase : t -> t (** New string with uppercase letter translated to lowercase (correctness is only needed for ASCII {{:http://www.unicode.org/glossary/#code_point}code point}). *) val iter : (int -> unit) -> t -> unit (** Iterates over the unicode {{:http://www.unicode.org/glossary/#code_point}code point} of the given string. *) val of_string : std_string -> t (** String from an OCaml string. *) val to_utf_8 : ('a -> std_string -> 'a) -> 'a -> t -> 'a (** [to_utf_8 f v s], is [f (... (f (f v s1) s2) ...) sn]. Where the concatenation of [s1], [s2], ... [sn] is [s] as an UTF-8 stream. *) val compare : t -> t -> int (** String comparison. Binary comparison is sufficent. *) end (** Input signature for internal buffers. *) module type Buffer = sig type string (** The type for strings. *) type t (** The type for buffers. *) exception Full (** Raised if the buffer cannot be grown. *) val create : int -> t (** Creates a buffer of the given size. *) val add_uchar : t -> int -> unit (** Adds the given (guaranteed valid) unicode {{:http://www.unicode.org/glossary/#code_point}code point} to a buffer. {b Raises} {!Full} if the buffer cannot be grown. *) val clear : t -> unit (** Clears the buffer. *) val contents : t -> string (** Returns the buffer contents. *) val length : t -> int (** Returns the number of characters contained in the buffer. *) end (** Output signature of {!Make}. *) module type S = sig (** {1 Basic types and values} *) type string type encoding = [ | `UTF_8 | `UTF_16 | `UTF_16BE | `UTF_16LE | `ISO_8859_1| `US_ASCII ] type dtd = string option type name = string * string type attribute = name * string type tag = name * attribute list type signal = [ `Dtd of dtd | `El_start of tag | `El_end | `Data of string ] val ns_xml : string val ns_xmlns : string (** {1 Input} *) type pos = int * int type error = [ | `Max_buffer_size | `Unexpected_eoi | `Malformed_char_stream | `Unknown_encoding of string | `Unknown_entity_ref of string | `Unknown_ns_prefix of string | `Illegal_char_ref of string | `Illegal_char_seq of string | `Expected_char_seqs of string list * string | `Expected_root_element ] exception Error of pos * error val error_message : error -> string type source = [ | `Channel of in_channel | `String of int * std_string | `Fun of (unit -> int) ] type input val make_input : ?enc:encoding option -> ?strip:bool -> ?ns:(string -> string option) -> ?entity: (string -> string option) -> source -> input val input : input -> signal val input_tree : el:(tag -> 'a list -> 'a) -> data:(string -> 'a) -> input -> 'a val input_doc_tree : el:(tag -> 'a list -> 'a) -> data:(string -> 'a) -> input -> (dtd * 'a) val peek : input -> signal val eoi : input -> bool val pos : input -> pos (** {1 Output} *) type 'a frag = [ `El of tag * 'a list | `Data of string ] type dest = [ | `Channel of out_channel | `Buffer of std_buffer | `Fun of (int -> unit) ] type output val make_output : ?decl:bool -> ?nl:bool -> ?indent:int option -> ?ns_prefix:(string -> string option) -> dest -> output val output_depth : output -> int val output : output -> signal -> unit val output_tree : ('a -> 'a frag) -> output -> 'a -> unit val output_doc_tree : ('a -> 'a frag) -> output -> (dtd * 'a) -> unit end (** Functor building streaming XML IO with the given strings and buffers. *) module Make (String : String) (Buffer : Buffer with type string = String.t) : S with type string = String.t (** {1:io Features and limitations} The module assumes strings are immutable, thus strings the client gives or receives {e during} the input and output process must not be modified. {2:input Input} {3:inenc Encoding} The parser supports ASCII, US-ASCII, {{:http://www.faqs.org/rfcs/rfc3629.html} UTF-8}, {{:http://www.faqs.org/rfcs/rfc2781.html} UTF-16}, {{:http://www.faqs.org/rfcs/rfc2781.html} UTF-16LE}, {{:http://www.faqs.org/rfcs/rfc2781.html} UTF-16BE} and {{:http://anubis.dkuug.dk/JTC1/SC2/WG3/docs/n411.pdf}ISO-8559-1} (Latin-1) encoded documents. But strings returned by the library are {b always} UTF-8 encoded. The encoding can be specified explicitly using the optional argument [enc]. Otherwise the parser uses UTF-16 or UTF-8 if there is a {{:http://www.unicode.org/unicode/faq/utf_bom.html#BOM}BOM} at the beginning of the document. If there is no BOM it uses the encoding specified in the {{:http://www.w3.org/TR/REC-xml/#NT-XMLDecl} XML declaration}. Finally, if there is no XML declaration UTF-8 is assumed. {3:inwspace White space handling} The parser performs {{:http://www.w3.org/TR/REC-xml/#AVNormalize}attribute data normalization} on {e every} attribute data. This means that attribute data does not have leading and trailling white space and that any white space is collapsed and transformed to a single space character ([U+0020]). White space handling of character data depends on the [strip] argument. If [strip] is [true], character data is treated like attribute data, white space before and after elements is removed and any white space is collapsed and transformed to a single space character ([U+0020]), except if the data is under the scope of a {e xml:space} attribute whose value is {e preserve}. If [strip] is [false] all white space data is preserved as present in the document (however all kinds of {{:http://www.w3.org/TR/REC-xml/#sec-line-ends}line ends} are translated to the newline character ([U+000A]). {3:inns Namespaces} Xmlm's {{!name}names} are {{:http://www.w3.org/TR/xml-names11/#dt-expname}expanded names}. The parser automatically handles the document's namespace declarations. Undeclared namespace prefixes can be bound via the callback [ns], which must return a namespace name. If [ns] returns [None] an [`Unknown_ns_prefix] error is raised. Attributes used for namespace declarations are preserved by the parser. They are in the {!ns_xmlns} namespace. Default namespace declarations made with {i xmlns} have the attribute name [(Xmlm.ns_xmlns, "xmlns")]. Prefix declarations have the prefix as the local name, for example {i xmlns:ex} results in the attribute name [(Xmlm.ns_xmlns, "ex")]. Regarding constraints on the usage of the {i xml} and {i xmlns} prefixes by documents, the parser does not report errors on violations of the {i must} constraints listed in {{:http://www.w3.org/TR/xml-names11/#xmlReserved}this paragraph}. {3:inentity Character and entity references} {{:http://www.w3.org/TR/REC-xml/#dt-charref}Character references} and {{:http://www.w3.org/TR/REC-xml/#sec-predefined-ent}predefined entities} are automatically resolved. Other entity references can be resolved by the callback [entity], which must return an UTF-8 string corresponding to the replacement character data. The replacement data is {e not} analysed for further references, it is added to the data as such modulo white space stripping. If [entity] returns [None] the error [`Unknown_entity_ref] is returned. {3:iseq Sequences of documents (deprecated)} {b WARNING.} This feature is deprecated and will be removed. When a well-formed sequence of signals is input, no data is consumed beyond the closing ['>'] of the document's root element. If you want to parse a document as {{:http://www.w3.org/TR/REC-xml/#NT-document}defined} in the XML specification, call {!eoi} after a well-formed sequence of signals, it must return [true]. If you expect another document on the same input abstraction a new well-formed sequence of signals can be {!input}. Use {!eoi} to check if a document follows (this may consume data). Invoking {!eoi} after a well-formed sequence of signals skips whitespaces, comments and processing instructions until it gets to either an {{:http://www.w3.org/TR/REC-xml/#NT-XMLDecl} XML declaration} or a {{:http://www.w3.org/TR/REC-xml/#dt-doctype}DTD} or the start of a new element or the end of input (in which case {!eoi} returns [true]). If there is a new document but there is no XML declaration or the declaration specifies UTF-16, the same encoding as for the previous document is used. {3:inmisc Miscellaneous} {ul {- Parses the more liberal and simpler XML 1.1 {{:http://www.w3.org/TR/xml11/#NT-Name}Name} definition (minus [':'] because of namespaces).} {- The {{:http://www.w3.org/TR/REC-xml/#dt-doctype}DTD} is parsed roughly (no guarantee it is well formed) and its information is ignored.} {- The parser drops {{:http://www.w3.org/TR/REC-xml/#dt-comment}comments}, {{:http://www.w3.org/TR/REC-xml/#dt-pi}processing instructions}, and {{:http://www.w3.org/TR/REC-xml/#sec-rmd}standalone declaration}.} {- Element attributes are not checked for uniqueness.} {- Attribute and character data chunks are limited by [Sys.max_string_length]. The error [`Max_buffer_size] is raised if the limit is hit.} {- Tail recursive.} {- Non validating.} } {2:output Output} {3:outenc Encoding} Outputs only {{:http://www.faqs.org/rfcs/rfc3629.html} UTF-8} encoded documents. Strings given to output functions {b must be} UTF-8 encoded, no checks are performed. Unicode characters that are not legal XML {{:http://www.w3.org/TR/REC-xml/#NT-Char}characters} are replaced by the {{:http://unicode.org/glossary/#replacement_character}Unicode replacement character}. {3:outns Namespaces} Xmlm's {{:#TYPEname}names} are {{:http://www.w3.org/TR/xml-names11/#dt-expname}expanded names}. Expanded names are automatically converted to {{:http://www.w3.org/TR/xml-names11/#dt-qualname}qualified names} by the output abstraction. There is no particular api to specify prefixes and default namespaces, the actual result depends solely on the output of attributes belonging to the {!ns_xmlns} namespace. For example to set the default namespace of an element to {i http://example.org/myns}, use the following attribute : {[(* xmlns='http://example.org/myns' *) let default_ns = (Xmlm.ns_xmlns, "xmlns"), "http://example.org/myns"]} To bind the prefix ["ex"] to {i http://example.org/ex}, use the following attribute : {[(* xmlns:ex='http://example.org/ex' *) let ex_ns = (Xmlm.ns_xmlns, "ex"), "http://example.org/ex"]} Note that outputing input signals without touching namespace declaration attributes will preserve existing prefixes and bindings provided the same namespace name is not bound to different prefixes in a given context. The callback [ns_prefix] of an output abstraction can be used to give a prefix to a namespace name lacking a prefix binding in the current output scope. Given a namespace name the function must return the prefix to use. Note that this will {b not} add any namespace declaration attribute to the output. If the function returns [None], {!output} will raise [Invalid_argument]. The default function returns always [None]. {3:outindent Indentation} Output can be indented by specifying the [indent] argument when an output abstraction is created. If [indent] is [None] (default) signal output does not introduce any extra white space. If [ident] is [Some c], each {!signal} is output on its own line (for empty elements [`El_start] and [`El_end] are collapsed on a single line) and nested elements are indented with [c] space characters. {3:oseq Sequences of documents (deprecated)} {b WARNING.} This feature is deprecated and will be removed. After a well-formed sequence of signals was output, the output abstraction can be reused to output a new well-formed sequence of signals. {3:outmisc Miscellaneous} {ul {- Output on a channel does not flush it.} {- In attribute and character data you provide, markup delimiters ['<'],['>'],['&'], and ['\"'] are automatically escaped to {{:http://www.w3.org/TR/REC-xml/#sec-predefined-ent}predefined entities}.} {- No checks are peformed on the prefix and local part of output names to verify they are {{:http://www.w3.org/TR/xml-names11/#NT-NCName}NCName}s. For example using the tag name [("","dip d")] will produce a non well-formed document because of the space character.} {- Tail recursive.}} {2 Tips} {ul {- The best options to do an input/output round trip and preserve as much information as possible is to input with [strip = false] and output with [indent = None].} {- Complete whitespace control on output is achieved with [indent = None] and suitable [`Data] signals}} {1:ex Examples} {2:exseq Sequential processing} Sequential processing has the advantage that you don't need to get the whole document tree in memory to process it. The following function reads a {e single} document on an input channel and outputs it. {[let id ic oc = let i = Xmlm.make_input (`Channel ic) in let o = Xmlm.make_output (`Channel oc) in let rec pull i o depth = Xmlm.output o (Xmlm.peek i); match Xmlm.input i with | `El_start _ -> pull i o (depth + 1) | `El_end -> if depth = 1 then () else pull i o (depth - 1) | `Data _ -> pull i o depth | `Dtd _ -> assert false in Xmlm.output o (Xmlm.input i); (* `Dtd *) pull i o 0; if not (Xmlm.eoi i) then invalid_arg "document not well-formed"]} The following function reads a {e sequence} of documents on an input channel and outputs it. {[let id_seq ic oc = let i = Xmlm.make_input (`Channel ic) in let o = Xmlm.make_output ~nl:true (`Channel oc) in while not (Xmlm.eoi i) do Xmlm.output o (Xmlm.input i) done]} The following function reads a {e sequence} of documents on the input channel. In each document's tree it prunes non root elements whose name belongs to [prune_list]. {[let prune_docs prune_list ic oc = let i = Xmlm.make_input (`Channel ic) in let o = Xmlm.make_output ~nl:true (`Channel oc) in let copy i o = Xmlm.output o (Xmlm.input i) in let prune (name, _) = List.mem name prune_list in let rec process i o d = let rec skip i d = match Xmlm.input i with | `El_start _ -> skip i (d + 1) | `El_end -> if d = 1 then () else skip i (d - 1) | s -> skip i d in match Xmlm.peek i with | `El_start tag when prune tag -> skip i 0; process i o d | `El_start _ -> copy i o; process i o (d + 1) | `El_end -> copy i o; if d = 0 then () else process i o (d - 1) | `Data _ -> copy i o; process i o d | `Dtd _ -> assert false in let rec docs i o = copy i o; (* `Dtd *) copy i o; (* root start *) process i o 0; if Xmlm.eoi i then () else docs i o in docs i o]} {2:extree Tree processing} A document's sequence of signals can be easily converted to an arborescent data structure. Assume your trees are defined by : {[type tree = E of Xmlm.tag * tree list | D of string]} The following functions input/output xml documents from/to abstractions as value of type [tree]. {[let in_tree i = let el tag childs = E (tag, childs) in let data d = D d in Xmlm.input_doc_tree ~el ~data i let out_tree o t = let frag = function | E (tag, childs) -> `El (tag, childs) | D d -> `Data d in Xmlm.output_doc_tree frag o t]} {2:exrow Tabular data processing} We show how to process XML data that represents tabular data (some people like do that). The file we need to deal with represents nominal data about {{:http://www.w3.org/}W3C bureaucrats}. There are no namespaces and attributes are ignored. The element structure of the document is : {ul {- <list> {ul {- <bureaucrat> represents a W3C bureaucrat (zero or more). A bureaucrat contains the following elements, in order. {ul {- <name> its name (mandatory, string).} {- <surname> its surname (mandatory, string).} {- <honest> present iff he implemented one of its spec (optional, empty).} {- <obfuscation_level> its grade on the open scale of obfuscation (mandatory, float).} {- <tr> (zero or more, string), technical reports he worked on.}}}}}} In OCaml we represent a W3C bureaucrat by this type : {[type w3c_bureaucrat = { name : string; surname : string; honest : bool; obfuscation_level : float; trs : string list; }]} The following functions input and output W3C bureaucrats as lists of values of type [w3c_bureaucrat]. {[let in_w3c_bureaucrats src = let i = Xmlm.make_input ~strip:true src in let tag n = ("", n), [] in let error () = invalid_arg "parse error" in let accept s i = if Xmlm.input i = s then () else error () in let rec i_seq el acc i = match Xmlm.peek i with | `El_start _ -> i_seq el ((el i) :: acc) i | `El_end -> List.rev acc | _ -> error () in let i_el n i = accept (`El_start (tag n)) i; let d = match Xmlm.peek i with | `Data d -> ignore (Xmlm.input i); d | `El_end -> "" | _ -> error () in accept (`El_end) i; d in let i_bureaucrat i = try accept (`El_start (tag "bureaucrat")) i; let name = i_el "name" i in let surname = i_el "surname" i in let honest = match Xmlm.peek i with | `El_start (("", "honest"), []) -> ignore (i_el "honest" i); true | _ -> false in let obf = float_of_string (i_el "obfuscation_level" i) in let trs = i_seq (i_el "tr") [] i in accept (`El_end) i; { name = name; surname = surname; honest = honest; obfuscation_level = obf; trs = trs } with | Failure _ -> error () (* float_of_string *) in accept (`Dtd None) i; accept (`El_start (tag "list")) i; let bl = i_seq i_bureaucrat [] i in accept (`El_end) i; if not (Xmlm.eoi i) then invalid_arg "more than one document"; bl let out_w3c_bureaucrats dst bl = let tag n = ("", n), [] in let o = Xmlm.make_output ~nl:true ~indent:(Some 2) dst in let out = Xmlm.output o in let o_el n d = out (`El_start (tag n)); if d <> "" then out (`Data d); out `El_end in let o_bureaucrat b = out (`El_start (tag "bureaucrat")); o_el "name" b.name; o_el "surname" b.surname; if b.honest then o_el "honest" ""; o_el "obfuscation_level" (string_of_float b.obfuscation_level); List.iter (o_el "tr") b.trs; out `El_end in out (`Dtd None); out (`El_start (tag "list")); List.iter o_bureaucrat bl; out (`El_end)]} *) (*--------------------------------------------------------------------------- Copyright (c) 2007 Daniel C. Bünzli Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ---------------------------------------------------------------------------*) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/manualimages/����������������������������������������������������������������������������0000775�0001750�0001750�00000000000�14771516640�013574� 5����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/manualimages/colfill.pdf�����������������������������������������������������������������0000664�0001750�0001750�00000001151�14771516640�015711� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%PDF-2.0 % 1 0 obj <</Type/Catalog/Pages 2 0 R>> endobj 2 0 obj <</Type/Pages/Kids[3 0 R]/Count 1>> endobj 3 0 obj <</Type/Page/Parent 2 0 R/Resources<<>>/MediaBox[0 0 595.2765 841.89105]/Contents[4 0 R]>> endobj 4 0 obj <</Length 99/Filter/FlateDecode>> stream xeN10 /QWXpI!/3CK-6`Utg#hAaZ9sM ;vB-xzڬ+ endstream endobj xref 0 5 0000000000 65535 f 0000000015 00000 n 0000000060 00000 n 0000000111 00000 n 0000000217 00000 n trailer <</Size 5/Root 1 0 R/ID[<4ba93f9e60c81a25903b75d279047af4><4ba93f9e60c81a25903b75d279047af4>]>> startxref 383 %%EOF �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/manualimages/xobj.pdf��������������������������������������������������������������������0000664�0001750�0001750�00000001423�14771516640�015231� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%PDF-2.0 % 1 0 obj <</Type/Page/Parent 5 0 R/Resources<</XObject<</X1 3 0 R>>>>/MediaBox[0 0 595.2765 841.89105]/Contents[4 0 R]>> endobj 2 0 obj <</Type/Catalog/Pages 5 0 R>> endobj 3 0 obj <</BBox[0 0 200 200]/Resources<<>>/Subtype/Form/Length 83/Filter/FlateDecode>> stream xe0Wa1uoc8 {JD]Gn&ئ+䗋?snї$ endstream endobj 4 0 obj <</Length 33/Filter/FlateDecode>> stream xӏ0TpW0T0� w(P�s�$ endstream endobj 5 0 obj <</Type/Pages/Kids[1 0 R]/Count 1>> endobj xref 0 6 0000000000 65535 f 0000000015 00000 n 0000000142 00000 n 0000000187 00000 n 0000000382 00000 n 0000000482 00000 n trailer <</Size 6/Root 2 0 R/ID[<acb55c25ea9da1232d808b6cb6061ab2><acb55c25ea9da1232d808b6cb6061ab2>]>> startxref 533 %%EOF ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/manualimages/fontparams.pdf��������������������������������������������������������������0000664�0001750�0001750�00000001542�14771516640�016443� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%PDF-2.0 % 1 0 obj <</Type/Catalog/Pages 5 0 R>> endobj 2 0 obj <</Length 96/Filter/FlateDecode>> stream x-M ̲Va xf$GB ({b&Te @Yv13gŜX0=Uƕ^p endstream endobj 3 0 obj <</Type/Page/Parent 5 0 R/Resources<</Font<</F1 4 0 R/F2 6 0 R>>>>/MediaBox[0 0 595.2765 841.89105]/Contents[2 0 R]>> endobj 4 0 obj <</Type/Font/Subtype/Type1/Encoding/WinAnsiEncoding/BaseFont/Times-Roman>> endobj 5 0 obj <</Type/Pages/Kids[3 0 R]/Count 1>> endobj 6 0 obj <</Type/Font/Subtype/Type1/Encoding/WinAnsiEncoding/BaseFont/Times-BoldItalic>> endobj xref 0 7 0000000000 65535 f 0000000015 00000 n 0000000060 00000 n 0000000223 00000 n 0000000356 00000 n 0000000446 00000 n 0000000497 00000 n trailer <</Size 7/Root 1 0 R/ID[<84a6ceb9a015940eeeab0d7b671b2c1f><84a6ceb9a015940eeeab0d7b671b2c1f>]>> startxref 592 %%EOF ��������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/manualimages/matrix.pdf������������������������������������������������������������������0000664�0001750�0001750�00000001265�14771516640�015577� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%PDF-2.0 % 1 0 obj <</Type/Catalog/Pages 2 0 R>> endobj 2 0 obj <</Type/Pages/Kids[3 0 R]/Count 1>> endobj 3 0 obj <</Type/Page/Parent 2 0 R/Resources<<>>/MediaBox[0 0 595.2765 841.89105]/Contents[4 0 R]>> endobj 4 0 obj <</Length 174/Filter/FlateDecode>> stream xP \ c2F"/"BȾdD qޙH+^ҡu.Ĉ=9^<{vwDŽ05F1 TkiK!$TkeXMMq-[9 y#;q\D#Af4d.ͼlg7DŽ3G+r| endstream endobj xref 0 5 0000000000 65535 f 0000000015 00000 n 0000000060 00000 n 0000000111 00000 n 0000000217 00000 n trailer <</Size 5/Root 1 0 R/ID[<22e0ff924dd64953b12cdba4345538a9><22e0ff924dd64953b12cdba4345538a9>]>> startxref 459 %%EOF �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/manualimages/lines.pdf�������������������������������������������������������������������0000664�0001750�0001750�00000001330�14771516640�015376� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%PDF-2.0 % 1 0 obj <</Type/Page/Parent 5 0 R/Resources<</Font<</F1 3 0 R>>>>/MediaBox[0 0 595.2765 841.89105]/Contents[4 0 R]>> endobj 2 0 obj <</Type/Catalog/Pages 5 0 R>> endobj 3 0 obj <</Type/Font/Subtype/Type1/Encoding/WinAnsiEncoding/BaseFont/Times-Roman>> endobj 4 0 obj <</Length 82/Filter/FlateDecode>> stream x]1 0x'VxD!mfF!e PF8. 'p -p|%_ endstream endobj 5 0 obj <</Type/Pages/Kids[1 0 R]/Count 1>> endobj xref 0 6 0000000000 65535 f 0000000015 00000 n 0000000139 00000 n 0000000184 00000 n 0000000274 00000 n 0000000423 00000 n trailer <</Size 6/Root 2 0 R/ID[<cb107da4a52e12de12f7ab883816129d><cb107da4a52e12de12f7ab883816129d>]>> startxref 474 %%EOF ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/manualimages/trans.pdf�������������������������������������������������������������������0000664�0001750�0001750�00000001246�14771516640�015421� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%PDF-2.0 % 1 0 obj <</Type/Catalog/Pages 2 0 R>> endobj 2 0 obj <</Type/Pages/Kids[3 0 R]/Count 1>> endobj 3 0 obj <</Type/Page/Parent 2 0 R/Resources<</ExtGState<</G1<</ca 0.5>>>>>>/MediaBox[0 0 595.2765 841.89105]/Contents[4 0 R]>> endobj 4 0 obj <</Length 131/Filter/FlateDecode>> stream xe DWv$Rկ/$|gKUڨTBaf^DQ=OɯG+qג%O7[oEᴅE[ kh0EO#�?!yN endstream endobj xref 0 5 0000000000 65535 f 0000000015 00000 n 0000000060 00000 n 0000000111 00000 n 0000000245 00000 n trailer <</Size 5/Root 1 0 R/ID[<b00e319c357ea9837e95baba72ad9931><b00e319c357ea9837e95baba72ad9931>]>> startxref 444 %%EOF ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/manualimages/clip.pdf��������������������������������������������������������������������0000664�0001750�0001750�00000001176�14771516640�015223� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%PDF-2.0 % 1 0 obj <</Type/Catalog/Pages 2 0 R>> endobj 2 0 obj <</Type/Pages/Kids[3 0 R]/Count 1>> endobj 3 0 obj <</Type/Page/Parent 2 0 R/Resources<<>>/MediaBox[0 0 595.2765 841.89105]/Contents[4 0 R]>> endobj 4 0 obj <</Length 119/Filter/FlateDecode>> stream x} DWaS]I?S!DJ ݵ"a{P*rQ`JVGיRڧѲpdBAbEPXr@AHuL# endstream endobj xref 0 5 0000000000 65535 f 0000000015 00000 n 0000000060 00000 n 0000000111 00000 n 0000000217 00000 n trailer <</Size 5/Root 1 0 R/ID[<563e1a46cebcb6dc4d48ffb3eda578bf><563e1a46cebcb6dc4d48ffb3eda578bf>]>> startxref 404 %%EOF ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/manualimages/stext.pdf�������������������������������������������������������������������0000664�0001750�0001750�00000001264�14771516640�015441� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%PDF-2.0 % 1 0 obj <</Type/Page/Parent 5 0 R/Resources<</Font<</F1 3 0 R>>>>/MediaBox[0 0 595.2765 841.89105]/Contents[4 0 R]>> endobj 2 0 obj <</Type/Catalog/Pages 5 0 R>> endobj 3 0 obj <</Type/Font/Subtype/Type1/Encoding/WinAnsiEncoding/BaseFont/Times-Roman>> endobj 4 0 obj <</Length 46/Filter/FlateDecode>> stream x3T0�BCSJUp w3T041QIHLOU0 Rp � endstream endobj 5 0 obj <</Type/Pages/Kids[1 0 R]/Count 1>> endobj xref 0 6 0000000000 65535 f 0000000015 00000 n 0000000139 00000 n 0000000184 00000 n 0000000274 00000 n 0000000387 00000 n trailer <</Size 6/Root 2 0 R/ID[<239084b032aae4a4682e745051d2587f><239084b032aae4a4682e745051d2587f>]>> startxref 438 %%EOF ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/manualimages/pop.pdf���������������������������������������������������������������������0000664�0001750�0001750�00000001261�14771516640�015065� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%PDF-2.0 % 1 0 obj <</Type/Catalog/Pages 2 0 R>> endobj 2 0 obj <</Type/Pages/Kids[3 0 R]/Count 1>> endobj 3 0 obj <</Type/Page/Parent 2 0 R/Resources<<>>/MediaBox[0 0 595.2765 841.89105]/Contents[4 0 R]>> endobj 4 0 obj <</Length 170/Filter/FlateDecode>> stream xeQ \ H />?cCd(ݝԜ*9rPQ7VM) HZC.; ~49wl,481�k'I:}(YJ ͩfyL{)/x+};6\& Ë̂e?}~^vq endstream endobj xref 0 5 0000000000 65535 f 0000000015 00000 n 0000000060 00000 n 0000000111 00000 n 0000000217 00000 n trailer <</Size 5/Root 1 0 R/ID[<f57790ac51bdf2a8209cd6e74ca229cb><f57790ac51bdf2a8209cd6e74ca229cb>]>> startxref 455 %%EOF �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/manualimages/para.pdf��������������������������������������������������������������������0000664�0001750�0001750�00000001430�14771516640�015210� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%PDF-2.0 % 1 0 obj <</Type/Page/Parent 5 0 R/Resources<</Font<</F1 3 0 R>>>>/MediaBox[0 0 595.2765 841.89105]/Contents[4 0 R]>> endobj 2 0 obj <</Type/Catalog/Pages 5 0 R>> endobj 3 0 obj <</Type/Font/Subtype/Type1/Encoding/WinAnsiEncoding/BaseFont/Times-Roman>> endobj 4 0 obj <</Length 145/Filter/FlateDecode>> stream x}10 EP)i@ڤq:Qj b<?[Sfho/-GW6jZK6!xZ%JjOMy|/B\_)|Y,11Pe- kD~i$i& endstream endobj 5 0 obj <</Type/Pages/Kids[1 0 R]/Count 1>> endobj xref 0 6 0000000000 65535 f 0000000015 00000 n 0000000139 00000 n 0000000184 00000 n 0000000274 00000 n 0000000487 00000 n trailer <</Size 6/Root 2 0 R/ID[<0cfdf86c167a4f4f3f816f7e4a6fdd74><0cfdf86c167a4f4f3f816f7e4a6fdd74>]>> startxref 538 %%EOF ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/manualimages/h1.pdf����������������������������������������������������������������������0000664�0001750�0001750�00000002455�14771516640�014605� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%PDF-2.0 % 1 0 obj <</Nums[7[9 0 R 7 0 R 8 0 R]]>> endobj 2 0 obj <</K[9 0 R 7 0 R 8 0 R]/ParentTree 1 0 R/Type/StructTreeRoot>> endobj 3 0 obj <</Contents[6 0 R]/MediaBox[0 0 595.2765 841.89105]/Resources<</Font<</F1 5 0 R>>>>/Parent 10 0 R/Type/Page/StructParents 7>> endobj 4 0 obj <</Pages 10 0 R/Type/Catalog/StructTreeRoot 2 0 R>> endobj 5 0 obj <</Type/Font/Subtype/Type1/Encoding/WinAnsiEncoding/BaseFont/Times-Roman>> endobj 6 0 obj <</Length 272/Filter/FlateDecode>> stream xRJ0}WAeIq2ۘ`@h%6%&pa$/7s=$}6N5rP PXx"6erjmi!g#2,�)x{ TOE-I&eb3avզnA΂lr%OBAAe m69#_RU29a0i#Нx{lU'@-\@/Mj3}N 8/c$9Ftߍe: endstream endobj 7 0 obj <</K[1]/P 2 0 R/S/P/Pg 3 0 R>> endobj 8 0 obj <</K[2]/P 2 0 R/S/P/Pg 3 0 R>> endobj 9 0 obj <</K[0]/P 2 0 R/S/H1/Pg 3 0 R>> endobj 10 0 obj <</Type/Pages/Kids[3 0 R]/Count 1>> endobj xref 0 11 0000000000 65535 f 0000000015 00000 n 0000000062 00000 n 0000000140 00000 n 0000000281 00000 n 0000000348 00000 n 0000000438 00000 n 0000000778 00000 n 0000000824 00000 n 0000000870 00000 n 0000000917 00000 n trailer <</Size 11/Root 4 0 R/ID[<983840c945eb7b734bd8470ae36be0c5><983840c945eb7b734bd8470ae36be0c5>]>> startxref 969 %%EOF �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/manualimages/textclip.pdf����������������������������������������������������������������0000664�0001750�0001750�00000001441�14771516640�016123� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%PDF-2.0 % 1 0 obj <</Type/Page/Parent 5 0 R/Resources<</Font<</F1 3 0 R>>>>/MediaBox[0 0 595.2765 841.89105]/Contents[4 0 R]>> endobj 2 0 obj <</Type/Catalog/Pages 5 0 R>> endobj 3 0 obj <</Type/Font/Subtype/Type1/Encoding/WinAnsiEncoding/BaseFont/Times-Roman>> endobj 4 0 obj <</Length 154/Filter/FlateDecode>> stream x]O0wTVZݮ&z,[٦q6ŭm B^p|f�3䊓/Ln#4!M[Cv1b۲ԧ(-alB uuȢTWA6FǞkXҗ f]]ϛL`f`Qh!}B endstream endobj 5 0 obj <</Type/Pages/Kids[1 0 R]/Count 1>> endobj xref 0 6 0000000000 65535 f 0000000015 00000 n 0000000139 00000 n 0000000184 00000 n 0000000274 00000 n 0000000496 00000 n trailer <</Size 6/Root 2 0 R/ID[<453cf9c45f3400d55758fdcbc6f56d75><453cf9c45f3400d55758fdcbc6f56d75>]>> startxref 547 %%EOF �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/manualimages/dash.pdf��������������������������������������������������������������������0000664�0001750�0001750�00000001027�14771516640�015206� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%PDF-2.0 % 1 0 obj <</Type/Catalog/Pages 2 0 R>> endobj 2 0 obj <</Type/Pages/Kids[3 0 R]/Count 1>> endobj 3 0 obj <</Type/Page/Parent 2 0 R/Resources<<>>/MediaBox[0 0 595.2765 841.89105]/Contents[4 0 R]>> endobj 4 0 obj <</Length 36>> stream 100 100 m 20 w[30 20]0 d 400 300 l S endstream endobj xref 0 5 0000000000 65535 f 0000000015 00000 n 0000000060 00000 n 0000000111 00000 n 0000000217 00000 n trailer <</Size 5/Root 1 0 R/ID[<4736f799ac58f6aab465f1cbd5579a19><4736f799ac58f6aab465f1cbd5579a19>]>> startxref 301 %%EOF ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/manualimages/paras.pdf�������������������������������������������������������������������0000664�0001750�0001750�00000003111�14771516640�015371� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%PDF-2.0 % 1 0 obj <</Type/Page/Parent 5 0 R/Resources<</Font<</F1 3 0 R>>>>/MediaBox[0 0 595.2765 841.89105]/Contents[4 0 R]>> endobj 2 0 obj <</Type/Catalog/Pages 5 0 R>> endobj 3 0 obj <</Type/Font/Subtype/Type1/Encoding/WinAnsiEncoding/BaseFont/Times-Roman>> endobj 4 0 obj <</Length 980>> stream 1 0 0 1 200 500 cm BT 25 TL 0 0 Td/F1 20 Tf(This)Tj/F1 20 Tf( )Tj/F1 20 Tf(is)Tj/F1 20 Tf( )Tj/F1 20 Tf(the)Tj/F1 20 Tf( )Tj/F1 20 Tf(first)Tj/F1 20 Tf( )Tj/F1 20 Tf(paragraph,)Tj/F1 20 Tf( )Tj/F1 20 Tf(which)Tj/F1 20 Tf( )Tj/F1 20 Tf(is)Tj 0 0 Td T*/F1 20 Tf(spread)Tj/F1 20 Tf( )Tj/F1 20 Tf(over)Tj/F1 20 Tf( )Tj/F1 20 Tf(multiple)Tj/F1 20 Tf( )Tj/F1 20 Tf(lines)Tj/F1 20 Tf( )Tj/F1 20 Tf(at)Tj/F1 20 Tf( )Tj/F1 20 Tf(this)Tj T*/F1 20 Tf(width...)Tj T* 20 0 Td/F1 20 Tf( )Tj/F1 20 Tf(And)Tj/F1 20 Tf( )Tj/F1 20 Tf(here)Tj/F1 20 Tf( )Tj/F1 20 Tf(is)Tj/F1 20 Tf( )Tj/F1 20 Tf(the)Tj/F1 20 Tf( )Tj/F1 20 Tf(second,)Tj/F1 20 Tf( )Tj/F1 20 Tf(also)Tj -20 0 Td T*/F1 20 Tf(taking)Tj/F1 20 Tf( )Tj/F1 20 Tf(more)Tj/F1 20 Tf( )Tj/F1 20 Tf(than)Tj/F1 20 Tf( )Tj/F1 20 Tf(one)Tj/F1 20 Tf( )Tj/F1 20 Tf(line.)Tj T* 20 0 Td/F1 20 Tf( )Tj/F1 20 Tf(Here)Tj/F1 20 Tf( )Tj/F1 20 Tf(is)Tj/F1 20 Tf( )Tj/F1 20 Tf(a)Tj/F1 20 Tf( )Tj/F1 20 Tf(little)Tj/F1 20 Tf( )Tj/F1 20 Tf(one.)Tj -20 0 Td T* ET endstream endobj 5 0 obj <</Type/Pages/Kids[1 0 R]/Count 1>> endobj xref 0 6 0000000000 65535 f 0000000015 00000 n 0000000139 00000 n 0000000184 00000 n 0000000274 00000 n 0000001303 00000 n trailer <</Size 6/Root 2 0 R/ID[<5aea252cd2479b724c26f8b3b9c578d3><5aea252cd2479b724c26f8b3b9c578d3>]>> startxref 1354 %%EOF �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/manualimages/text.pdf��������������������������������������������������������������������0000664�0001750�0001750�00000001261�14771516640�015253� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%PDF-2.0 % 1 0 obj <</Type/Page/Parent 5 0 R/Resources<</Font<</F1 3 0 R>>>>/MediaBox[0 0 595.2765 841.89105]/Contents[4 0 R]>> endobj 2 0 obj <</Type/Catalog/Pages 5 0 R>> endobj 3 0 obj <</Type/Font/Subtype/Type1/Encoding/WinAnsiEncoding/BaseFont/Helvetica>> endobj 4 0 obj <</Length 45/Filter/FlateDecode>> stream x3T0�BCSJUp w3T041QIH Rp � endstream endobj 5 0 obj <</Type/Pages/Kids[1 0 R]/Count 1>> endobj xref 0 6 0000000000 65535 f 0000000015 00000 n 0000000139 00000 n 0000000184 00000 n 0000000272 00000 n 0000000384 00000 n trailer <</Size 6/Root 2 0 R/ID[<fe4bbeaa4095ef49391d6f8a8e53f7a0><fe4bbeaa4095ef49391d6f8a8e53f7a0>]>> startxref 435 %%EOF �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/manualimages/fonts.pdf�������������������������������������������������������������������0000664�0001750�0001750�00000001523�14771516640�015421� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%PDF-2.0 % 1 0 obj <</Type/Catalog/Pages 5 0 R>> endobj 2 0 obj <</Length 81/Filter/FlateDecode>> stream x-1 0 ЫQ6t r*vZ(o{#G/"a `햤*XAϧVraJmQ endstream endobj 3 0 obj <</Type/Page/Parent 5 0 R/Resources<</Font<</F1 4 0 R/F2 6 0 R>>>>/MediaBox[0 0 595.2765 841.89105]/Contents[2 0 R]>> endobj 4 0 obj <</Type/Font/Subtype/Type1/Encoding/WinAnsiEncoding/BaseFont/Times-Roman>> endobj 5 0 obj <</Type/Pages/Kids[3 0 R]/Count 1>> endobj 6 0 obj <</Type/Font/Subtype/Type1/Encoding/WinAnsiEncoding/BaseFont/Times-BoldItalic>> endobj xref 0 7 0000000000 65535 f 0000000015 00000 n 0000000060 00000 n 0000000208 00000 n 0000000341 00000 n 0000000431 00000 n 0000000482 00000 n trailer <</Size 7/Root 1 0 R/ID[<03010e3b477e40d88f434378e4c3a965><03010e3b477e40d88f434378e4c3a965>]>> startxref 577 %%EOF �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/manualimages/sheet.png�������������������������������������������������������������������0000664�0001750�0001750�00000154666�14771516640�015434� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR����&���NQ�� iCCPICC Profile��HTS{" %&H %�ATBPB " TD@YUWZ EQ,ʺX.p{9g|g �2W*MHd<1qL��]@ːCC�"@D_E/�"!|<,�T7X)V2@Np'8qLDyF“\�gfH|%|zA"<<¿LTr eR i*wy[R{#J@KCY̟d?ry^qz*֦MsؗȓɉfAO4{%ɼ̕+OTE"("zQӜ8a?ϙ}}e_1G6S;S@žə/TK3={ISCT??#+\6 gֆ*0: X)X9фWtL,e209�wuSx˘ڌ/�N.�og| H �P,f|5pʓ˲|ЁA��"@,Xx@Ҁ ,zVJGqN2n.~` Dh A-Ă ( bHI 9�APT@?CUz�BC30ֆ0 fÁpl8 >_%<(CYX(/T*֢ Q%jTՎA >hDёhzz-z }݈Ea(-`|L �s ӅǼb 돍&cWa7a`뱭Nlvi,p>Ix]-s%A`Dp&-MB?aB4!#Rb1-D'9ĤR) J6'{rfAr+-B1xP(͔SG%GN\Q+*jDeSP%ԛae2Wyr){ʣ*44M*U TU}TyT/P4G@ODc&t=^D?JSR[VvFb38TqF7,YYYfݞA}@P^KSG#EcFMB{5/iϦv͛]8ZV*}Z7Fuڻ/h0t<tuvҥuw}TcRE戞\JCoLD?R?W^рedà`PpjZÇF#hQchMƃ&&lZǦSweզwͰf,=fas{syM BlǢsfɜ9,ɖl,Z^+UUUիsn>u~G6666-6olmyw(vv^ϳ'w}{m_duC XtV(kiiOΙǝttIq928d`}\*7[ۏn=z\jg|l3v2̳󃗳VowwOOS_}_o*V6{mS p Xp1X,<HԲ�^`F $$tY/ C/|f:=4pψ-"M#mQԨ=1sc\Ռ6č.YsQ}|~|b+_]$uəԥܥ'0 pCDNbEϋ IIIBWv]T"{į+?LONOç%JR$uWwJ-Ҟev.d@33PtCn*NޛUqy+TVHVXi`@oOЫxV^w {MZhmڶuZO\\w7i}]mR,FߣQ`W[!ZuQIїMM~I;8lٻU{C*}loQΥ;+E%STڼp_De]Z뱷RWU5VW|X?<PtACa.8:?r:˺zF}1pL~ ?w<vuɊZCa#ԸqIy*T[KK/V<wڙ-ggΎ>7*m>/<׶х w/.q)ҕ˾/]qrSXך;\oaW_::o:lts~s.|ìcrc>Q~RTiof8,٣>^3~ҟd@wfvЭ^C及WN獑ײo6x{ݼwmOߧPQOOퟣ?-Rk˷oǥ\wr@! '% 27@�q,=)?I?Լ=)�T{�hH+ˆ�@E8`;;NϽ3Y"u[{=./uEֿ ٔ���eXIfMM�*������������������J�������R(�������i�������Z������������������������������������&����ASCII���Screenshot͘r��� pHYs��%��%IR$��iTXtXML:com.adobe.xmp�����<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 6.0.0"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:exif="http://ns.adobe.com/exif/1.0/" xmlns:tiff="http://ns.adobe.com/tiff/1.0/"> <exif:PixelXDimension>400</exif:PixelXDimension> <exif:UserComment>Screenshot</exif:UserComment> <exif:PixelYDimension>294</exif:PixelYDimension> <tiff:ResolutionUnit>2</tiff:ResolutionUnit> <tiff:YResolution>144</tiff:YResolution> <tiff:XResolution>144</tiff:XResolution> <tiff:Orientation>1</tiff:Orientation> </rdf:Description> </rdf:RDF> </x:xmpmeta> 4��@�IDATx`u8\C�{b/"ը[TĖ%ıq8q8rklɒjuP{$@ {&1V͛7{)===cRq`֟MW :A3.-wZ=xI"=/ҋaa&46jXX4!͢)ĆD/E�abFZ5RUG{`mb̐k qiLF@(3,&MMc&HR٤,b&H`Y%MZtQ< =_l#y/ Hc32 A̎P,it4R<}A̠=px@/FSky'AU<S $Lk{Vx/FZ,pbk=0K bPxč=3D#1J V%Ha62jE&6&xj-hh,ymB(fȄ$�"D$PK6FۙxfHUfDbF-1+DB32D7r̐q6; 4)ل 11e /@DW0xæIf+R�#L6H˴#4EM` 7 4̀Z9hfh!:Ah$H`k1'vW3bRxE&hb�ڟ&>q[L EM'3Ac2 fڵ4lM\bh+EYdbE h"iOZh.)bPm b׼]ea1@ hĦHE0 G}ghu.0`c$ e@wƌKG9a5h$h]R 6clEFxuMIc N |"71#I={41c@<֤Ѱ Ept1ĽZ4Rw98‚|�"`qx=oaG?\CDR}&`)<Hal, Y(E+=/"%VG4ƨ<G0Z c+&s h6xnf (d@^0%ƆfalEأ16Pi؊ X[1-,6?ņf0DhI*JY,ZUV\/ɡ.Z cKv>% ~[*⓲';wwt+b^N`8z 8A\  M)f0+%%5%5?g.=NED5R]4DokP&LQԔ{gMS]u˙ζPO8a$L6"mGiO_C !$j$ВJ'kE�;A|QP'8ص$2`U|-k@-vZTIkصDyg@>R ^^UR#ŕd|^rgB5> Q2Q@vE�=kvk=rtQrUM1aDjXŃcJǤ5`x #mfq@!b24&DjX6XK6525`G`j1m̤Ѱl\xZ,(d@Z̪)\H _cKUAS)E.︌9D/$HhVD0:$T(rhX�ݎnǪOx3?QٝrF$ B<@tvtdf8|HT2+9� آ=6p `*Ql}6-qR{zzH b.)8SR‘ ib&I$C ;\HbiKldy9RקoVBa gOH X6P �#[DNG7vפ0HKLK ljP{;3NySHXe'Q 0F(�̇`wJQjmL /INweiC=yYr6[40v;גP@"tuetqzT"C@uM^=T0“Y XP };^/Z!?œMQԔT@4=$�.| U Uܣ$g+1I¸񥤵;:.]s}i))] `vTуC+{Iz!=93!-I/pBO&ź`;a*mJuᯧ!w%1`CPm]|jBM *GNLi:gzgzs:~4 :)"TYP!ai^!ʌU8^iKe{Lv_akkG֚1.6b`W3@q9ӽ^}�V(C]]�n(}^OZjj̨ŭP8ooiN'?Y R\nnF2̡ xi 1QL::`0a]nUc;ADž:(=#U8zO -,j2OJZ+z.am]aOPQxuqVyGT=]=!6Ɲg|mˋ*~\1@}I˘ay49sDM\oV}nĢ[]L8=Ꮵ:_߻aW-uVT80KJc~4,K YmUIfι|lXy|ϫ6-Tc,"D~`=eمPnwη>~+@X 8vCsj@an FB) T\ӡ62ښ[s<9.gZ[ggUSs(Xulinx�\/kY#m͡_ljqgl6`Xw&d@Q Uj+=<Ɲ [NO\UV$!I8q \tEC )667: wy\^+Y]HZBUGXJu3^waad;Me.鍊xz܃_xO@#=UM_ͻ{b٨\OW]'2F -]>PrdwaN򥥥<qJeaqqNJY%Y6F-tutWp`]թ&+R2bé ]B<Z[V}mWOZ7pdZWN^<} DHdi#EWwv044o!ARWZs)Gp5^=䪧CCԴ<3O,ȒajKZ|U޷2�zGco.*{j۫c',pl}4Q@X 8NԵ=a)#Lu1KH=MOW8 t[[2FWTnn=}(q#@Q8Ȓk=Gz<wlptEZ-Bf{[IC&x}>56{]8:223ȹRlH`w `xSYa5f ^U0N5y4>o dyYK|uK�]+')"vVT 6t7tv\*!3o=4 w] +-Յm^Щc j<^7CF/5rʿcfdXԗׯ}-6ĕnIjuM*W'UI?^g|sŔe_TCo.J/0G:d3V+s|r|s_}w|+^_^(1{J/'[y| s& .TirLlBӑ[W7J V_|n].Oqbߢ3՜pt[ p:ÐFL(u.E0Ʈ[p9r7~l@Gv:A2̕!>dD姺Ӽ':~{ڛ߳g3ݻBwm8ݯ u]OolPZ,*ɯ7Pc3OmylqfY$&|_13溭'B@iZM^f'%B e5,z#o*̢7Jh/ (CL⽲:kj3PwB=FaVNδ⑎Ǝޫ+4-XЖ2bPw(#+sJhWS+W h BÓF{2|P"77|tfsȍ m��f3ķw6_;-%cR$]fm?4a)@|X|GYVmywo,*D:U*Nr< A-SFW ^6aIbwZژҊ,_F+9"L<"ãSRC2ޫ\O;*k?ڞw兓\rG_ܿ= d1vYXEráeoۛ'88$GHb\2abO]VG;[0lO#B(<.rn -56-Lu:2\f;jlr/B@@ ozK;W=[)4iIGtp{8|+jЩdcS4gM@^Py_ 2M]_Z1_9W<"<pfKvK|C|_k}lĹ3M8Ɋa lHR͟6lz!~Mޘ~SGLqraއ4_ oX7cɘݡm٤9o=ߑځܙ~8wI L`{cO%Ԇ}%[WYF3 YYM '|蜜QL F(SXgdd ugg�?ڛySB!vzws2$"q%' }/~~Gv;O[McJ++*n5t3݆Gf2[oޘ!7oMnߩӻj/5 uw9}){u^;ѓE"zJKh{ے⠘34DCm7ahriQCF#V+:T\iY.H`H{կĎc{??+[VǙPHOiw>w3ӯ}];Gcó<͵xsN'"y LOW}̢̰pO-\nG{'rypK\]4mS:eT:exқ;[e '%uMgF,S4qnޘǯg?haQ$Au[ ƺ]'oU[znx{c*(%JtewƋ5{<_k F{^#"},H[^_n緅鹎?`,>\{_Uew]7| u-F^|-+Lnڿ}l,]tć+07hGK.ZꘕQ*#ͳ<*ؚtOX#uW)o[6_#x[<TcWȁ @F;gS]d.lEj�&ZS{| HRiޮB8Ͷ\L4o8 L̮t7LnH>Tws_g˝eS2ӖL5$ۓX/)\_{m0CܒϾcamo|1&4/0gw_ֽ.YTVvy8Sθc*;Js@,юv:3j:GV7m"큎t+6PH'+bAoSd(gZYcww6'ҭ w;246Vpg|nѰɭ.0|e̜v crduv~ #}9%<BOVB);5.1-roKw*oͫR[yPz;xuzB7g"ߝnݢ 4<e=?O-yfO=~VX>j>g:ݽAl5h;\{k2~.|ڢ;=7W Ks}Y5w|{g0PW~SgKͭ; m+.<{WGc2 l<$|oJ&R0ҕ>4m/];~!S}LJ_w}yӏyr=}:1$Е_/fHpwj:Vi8ެz:,zDm5[Q (VCo]]fd957=)X~p*ԁs:ٷ"֡W8Q8[_Z?82VKwUk݁#M ޗMu Nգpgs4#JY%C}^/;أnE%~/:Gy@7\G>'/]?qǯZV䖼w5Pt$FqodK]nvs7Pe9d ~t6fHPon ;vAC({7*K  }ў_Wo?U I/OKiא4DL 6KgATʋTYܧݚ?V6<nt.㶕]ǶPPh4_/ 9Ԯ~#O~s*&қO]uߩkn+Xxk?Ҿ;eEYy+nlr{YcXVR5k~vκWtܶ@ KnHqQm{5 9ʏn2gC.͕}!I;A%S1146x߮Bms״2lyj3}T76zѢd~Sfon(b<TdYؙN'Y"jv9B}f13dzW?|Gg1~va^9e|f]WYSUWS]\ ozz#[>ӯl[L͖ΰxD{;5YKw{cc㐲�:kbjkkn8˨kmlL4b uHmnmԝfMwd\Ҝ)n:xns*&>vϖܶCd&D5+IZn{ӎjIpbQ_i- Z x3[[VYG$GS7^v?o8"S敎!Z{r/XO3K+8_m9.fC)u?pOueWeW4uDYg[88#4?+M9};椗T[Ə=y 3JyJw0ܢ/ONz_n _94;;*δec.cg9%5lGf~}dǛk[9:Vǵ\Rʡe=/|]UЎ(ZWTXB"bqԙ5l <4CsFLwҬC'\S6UFXE7տ퟈ Xf-o`5H[SNu4t5N 4gx̡՜{a(r:Ҝ_t><tJ]֦APѤ宬57<{t~jJǮ>1H<\~׍[ u>SzkGjN<.? ̆Wt4i{|d|on({Ц|kc~Lӳss$r)&xڿ\.Ԟt&\OgG0#1?=KzDg+NuFqM"Î#Gq5[a2  ]O~pq[S! \i"ELwztZpTfEYcr6.,VWe3ΌVB,W%%_9Feo7<2HIG8f\_{n7qb[6<{kzy"iaȅ|lаtyp4OB_ӑ f zUW8t%VH{cg ]6a.OW=\w:K//<o=;z6>ۿw nݿ v'=˝yKʸfO`q8_/-r0lKr-SCS~xd˚O<r//+дnonP]=,[enI` @D,0k<XSGm=GkquxwFIf>#{!ˑMd;Z|<gȺlj3ݙ9b65u3 6 [`f^R$�T o7R]M]mYx$t]Q=u Yhe?hzF!g]G#/ͦz}M 39iطwpG9<̗՞4d]-]cʇRlmm=xH}GK/]\u&9'hJE)n[6V_o< _!<ξXO, 'w7>޷U^\<,wud(;PoDc_|߬y7={~1˛IY_Qaaq:fnm:sG3V}SJZCqtue}?4֞:wI84[#XunUGm \4>yvCJ<2%c^y}shǮIemhjIжZz?2&;5u6Ԣx<][ ojcGz] v-,]>M]hWȃgck/_6|r7nhhÆ e<sϝKy@-lNo`9 ;(pf;3ױc><nK3ȳL\s<FIO?()tؔ3w2BY{}<K�H\6r5 als!^Wfv& &ZEfG" P7t<R?zIsFƅg:V;"Ι F|du`j6>$/lt?^QOZ ,07Hb_a \xi""C_~n<{9#V}[饣y }{CUwT8JZнE7k~6GNokiTGAV^Mә̔;f-.9, :[zGx -lE@kajOmA N?l 9sW(/!J`Y*2X;t<8ɀz;oa ZQ$hݡmn|tQFQh ~e Tnp者9ʪȡCJPmaCG+�}aLˋe_xKa*uL^Bz ϙx i5n0ş䣕bMĄLFk}W`G✜^ʍ3]C<0iSK 1[B- ,ct>jk+,oҲkz"Silx3 Fɘ�F&WU-'d~4`ۚS{6#A/xcK`\lb:Y'À_2 .6K"!AKBwfQQ33 ؆Uu6(;BUmn?y瘼-|taq3D+3f!,Βxc�u r,5hssbP&TxiU&;ѶN@*Wlf,I/62UM%02>d ŠWq }(FGJ:Ox[}L\._}+-G wnV"3!.^3oS\Q :wX"Mb79BTz3J$2:R•aE,?rb~mXW]3Lo$Šo%]JC`?RYo ^Hla$p9.1MV>F%A*8- I2 3 Og'ވh+Lѕ,xsR}`HG+�!C0fl2bV4U}^H6ò'A('DwB쒰]wHЉӅ%@SقC WO$$D_$$9:G8ۑʶ"#8+H &E wd΀L2M #ZOh DhՌ<DfRp4ZAj &"Ӕ,UIF˧ʄ5 0$=m|oLTr3�'S_</DfQs BJSS _< UxB$1BJbƯw q0 чnw455 >^ճriFDqDU c54)Rˡ$6#x4E,ѰM$3aD11 .A/~1^Nf#;<Ft] ($XaE5y4&Ɔ1րcLd&R`�c$eD6Eb<z̄>- H �$'Nh,Fb2.- K}q-L[Q4:H&_lR̢fIMLA)s4\^�h# ]�aL$)7uPoEC"W !땓c1>QgRFI�6/`iEE 6`2}rWqY4d&^Nk=/xUDцk*0f-3zcZa#)xVTT$z9l6R@gk1?Q$' ^U%l:h&1fbK@BT`l41E](>SZc5i G5551==@&NǙlkEѼ&׻ۏ`s"杕-M$R/j9ܕ_PxV.1|&sěMFtk )6v(1D T(0m� HSm7ka$̜]6Q6#MIȧ3V<"1I6)ѥhS :::֬Y"//=s΅F E> ](<LVYg;Œ!{7\4"-P4JeCE Yw(uYo^ϝޝi^,Q3WrlИJmrR}I#Ql EE l[]hX@FdA-V}LӧO `C@qС q>=(9dN�3հDJEH"JE.+U�T) rLR˙'?^eE@LB0&oL4y(k^~… aΈ"۷P%7`?]vرcZ~ZrV ;vzx?lB><S/ٲ¢&T]]1(E*FAfQZTFTP> #$B3?8ku&Uah9RWU }YSV4G1]1+@%Ɇ.ڬ"gƍ׮]/}~ɯ|+<@ii)b xȘ� dfZ$��hHQGUV񶩛o2H\`6>= Yj9SKQ @k+hkk+Z#L)۷o<y23쮻-EDP �Nͦi+AWII p{{;v2 XmM>~yD+dfΜ=,AXc0ט;wN2q9X{amYryP:4!Ј#ڥș"*0ݐwm'6ZLL]>Jt5SWr_ bKaդU1#-QkBEh ~J+ۊS>~ޔ#&�k&  ^h67 MvV*&" D[UR+gh,+�=''qLx #F>l^^GE_>}:1!ʖ-[_{=ֵZ Iu̙~3:lٲqƝ8q .#.^i&vyD\j2 "W_}W"?5k.]# ̞= y4|@p/uHPq:vA2sU0�,,,"n'*_hZ'{ėضbŊBT<Ä63gˆ? 4.>~޽{tvv\ӹtի(KQdt]9uM#{ZXVQmlI9Ș`ĥR쇏(_/lu7 V,}d=a(Q/ъ7}=}GzOsu3Mwն4L:vDIŞC'kBs$NeolniR6nRYШ.}5&h@k 19ChxG|Af#yꫯK*O<ӆɣeLڟw3gnÆ =ܭJ-Zm`>կ~U\\<vDwsbAUU3'd1~19vĉ$#d+p_949,E>52ӦM#$y SąxΧ4 ̈́!]8s`?FPK!=]'ȁb@+NE -AP~ǹSѣ* geeя#f\Cd+1"<1Xkm?<P{tK}ؙ*r4w x%!UmMH`)b[DtXKQ%h <lzps^>#xx=l4$$3[~ [z=|=Kd/=w1jno~ :h,mזVQkgM;6*Ȱ`h6  0su]Gj4&1] -0aÚ 8%{Wl3q v=Ӏe!6E1وX4HK, ELfS0/_N@K >H1�i?j"  $v`$!կ F-^4d4 ʵAϓYzEP^8iT F۹" >A b [\xH"rs.N%u<GP6E!0f j fM)H,3 ,!J9k7voWS{ahᐟ|H|_'u/2픲Q.wٿu푝&+_yx۵c.au# uƲaEeySGVLYr٨ɯ|~ơqYm_EUPveWEj4[=R+9ඣ{4]=ygZVդ7{5&̚<tmhm>RW>tWY[7j ,yω5ؖx;1AY}S ~pefȠ]$V[,:Ӄl/0c@'` 2iWu"hJm1334i҇>!֘@/L$S<�H&6"fYJֆMxGp@Ley a1x1_H8h;(Eɏ=Bq˖͙Yƍ C @Oa1W@zZa' s` r-2kVB 4 t*Fe!* [}rp{aӭTXmrj^1"_3zk;ն6z3_޾PS_+Wa>|#ɫ?t|oʁM$;UcgϨ7ٱĒ3[p77^1fґGOyiǚ-yڢd9\u`m9hCcVǾ;-b ,-~Z{` /⛇}`;_cK+oy1k۱^-9ui_{wZ8PF mQ%U,QRQ˰V[ӆ.2+[<3 �ŷ-ww}UBϥ%8yз ;;SNM<{M3tI gzCJKds$g/hIs B62$6hמ={HpH$=씳&%6}`*[Eb' zxD�F"fEi`1jhҚmvY62]D:o"{w@bMߨ \`92yZT!8Z_q`GQv3 %m'=Mk'?O as][㬊q|tqۏ#`M)fU]V)JGP[RYTVSPiƉ jeN񈒡|5EciǗA;._o[S2lJk.N#LXi$h|^dsLn|cmPD1C{//Њe|ntq=';;P*f籯Dzʻ]8S bsĪQ8]eQ#v',Km�BfzO@f$J& t9Ԃ'0g\bΚ5-$CuT4WoXqc7 dt!;`Rm!GLB`dUHڿ�%�ș6"awy.5\CС$cTJ, !zXcZHijmm!666N[Hb<BDv0"̦p =J A 4 �OBFci Qlذa9mI =.[W|2Y+ΗFWT gʌ|*,?$_P4_5|"_]{;)1b_?r2[<U_}tʛ-|lQ|oG~l=[-9pݫQ]iN`yI YБXac}uHmW4FWN`>pPdORXCЗ )/xta%cgn>G6~饻f]ځMc +O,3 [<< {b@2O[Iy_dtF�9Q�61"ep>b,A=Fc1s<LD՛0yH(6 } BVǶ,E(i` �Dg".)DLcd#EC08ha]L].Z*!�33y* Q"}W4~ F䰓'O***ƌxwQ L.X8 OBAH8!ƳlЀj@[456kؐztlw޵|!YBTq`ړyvz^ۻq˧/|@6;#K,A38d(v'TosUYHR # `��@�IDAT2"/+}ssc+B(x+`YXPXGNWS=qut_ڶ8+?/33`#>cFCJ,to=aѺc G kϙ.oeq9kBw>t6q X4FC,�•,FCM@m! VκhԉA&g�,�,x4`\4j,&!K]%TA�"ߑRXcnE6Uy6�<d�5JdfQ`r ų=]D)0f-PR%jLLX"&d$>&ҧb64$EQ bzAjwdegklYYZv"Qlt9DlEs(v[ P0VH[>!a"HQ^GEB"+AIMkyv[\Lb 8s@ g�} XThb=,HH3lt*mY ,@D0R�{\UF0|>VY E-VI&ƄmJRY!EjIHJ`҆&iXi8&ge$MEԘȗSWV}M/5 TMTjQ&S U1R;!d4Qc@οq_4J3N)RK=H:b5}jyFA{KhR%gBՄd tlD"8!SGOemo`I9J Y?E7V (J�5X,b/ W#BlI53"T,PaH#Bo h@Kn [CZ؋!YU+grAO(֠#&A4 '/B=t~7gc{ݎ?=򊙋SqIyHϜ!.uG{GVYBRk4K0pփ[Z^G=߱`!@.V$G'I) &Ti-+,y_ bժASS  2W91C]/:yt/-yW:G4agu4C$<P sd$dД8$5! L_ndĘU[{\TyIXl23գ_yV}b+J<5Ri[{ڳH"8VD<,zzBʶ eϠs�#-I)mMFnrZkɊқ[Ⱦ^hZVHszF0H9$hSٮ�11*SB EfXh-` 쑢,a xMf[_P Я.~_,1V_?'X/ %4lZ2%9L'cRRͩ{g[H"bO](5EDHv(&jtdѢ{5֠u̲۫Ovрf`Pf,">hD[ г`�6z&T=J9&MDL$Ev{;P $5Kc8ػUS1Z31F7ǫPE% <P+ތnEO8f` &ٮa<a<sۗx~Kr`vu%c~ h �&t_btIoIh3.l*=V] d[CǠ$< #'6&~vꀯ(30<X Ǚ'ۤ v�Gi;x-1 ~K M`tQ`$zp-M]$ X<G7ۂJ.$=$F&-*&ĬҌ as^X p_zoC_jG~7.0 e#:$o~. pc`VzDBg_&+g Q"T?N${:qbͻveȈɐ@cUs@ɯx /<oM @+8+E P@4.xJcI-7o}Ȼro&ǯ :ݽoܹ(z5Q 4Y<4`0�HXĺG]T #88#EՈ~~PdI<[}C6}:۷͙;[ <7/B, Zݱcwʿ-XPE_9A:48[tK"xO%ÈS \~x'K8AsL3D?v3f6ۜ>nëgJ-)qNu{=h^˭|ֲ1`e])�`yQ`*^1)"k3g3Y b6aip=AjCsX(rDxN�]+fuQ$x< >gڸb~0(2hKL'4ɖcW}E.ѣUWZ 2;; MҲ2F+YWf@hЇIfP\P%@d>`u<q)}51kOl�U<yA^WRRWx=%3Ey򬙳@6ʒcǎ|'OttOCǶ>ɪg̔ЉWx o^8G!sD'/fן$XޏnݺQFe`LTy鮼Op9#"�r`iM q,cOfmCy"riBF1ؠrA x#y8 ۶m8d`. EWF=`%f6b̒=+g˱TFs+++}`|cm/(t'\`BxL䜘 2/?!ot Č*;N5a1@=Y\%ɰj͔AQƇh"`'em,dJ՝;~FԩO<Xaa�\*k̥֭aÇsem.THVzznQ +8Sw !#ge9ULc^ /y <« :lwZTb <A\5F|a78O @w"7^ /o(-PljJ$E[ 7x#WY)/g"[#F֐xx--$M|?sFm0n޼@F FW\ c$+!e cJGtYovM b( W`l)3y_JɋS*Vzw;rgtgb흩=YνC16tQ`ec1F}6ES=A8A`X\6>_׽{0y"�Ld޼\{c}^wL$폶l@FL!%G :C=^K֩'3gj%^`9) 7xfm݆y|'2QM>D/ߓi|DŽD@>o%e�z ?a1 &ʌ3=>'殸 ")&j|v9|WzUdyD"0H6,'O?ĉtD7y&`-6`  5ܰӺbXc‹2+NL!&r@_BYi5(Z P=t8S&Zv-;Y:ALBQW0yewů(岬GTH#|1,k ZFQ<#._ ԩӞ|+&]OVg#0+ߊ:M,EXU.`Qf5$`9hbL{61EB&\WU'7@9|2N/2jрiO4 ^Gikg=-;\]ޝ}'* #9,[KD&</&"0yɕHIAG$ Y'AOtB[k n`_9r$!H'(SR<W&O!r@ɶ0'1W0Fi)! ^ (�0�&}wihߚ}a ldhXzV]/`Adhj$U )uiY- XJA]uui@e1HSi<Bo5 a={vqݣ3>r0 ,EKi@i#6&, #G & XȘ?~aZ(2Mm(hx*A�.4sQKKҥK*Syӧv˦陙$G=Me){?v Hy )f>@̂A6d7$/|ǂdZv"$X?dĕPHX';UW]EA ^7`|#r # "c�Aބ<IA"2]j",YR c92V{X1. 0D.qKgܢmKwgrǓx_w/Y3G#sh/0Q��yVjғ?ΙL EEtcU& >՗hA M`<3Ӧ͐}+lN<EStx4 )F FbҘHF!S,TLj*Bpص%"ԥ*L xL={4SL؀'xfpdž+_;wC8F"N`1l‹%TgSv*4%lxK z*+M½w1s'UaaE?1��tU0 ǽFXI ;\B'A،(A> g&aG;]PD q ];"Ք@LU0�9("ޑG/; nAaIF- !# ef& e̘Ģ 4QT!LQ(EeXTKLd`f+"eQ.ԧtgx449ZLVQ=6oF*b {wR@ˤI˟NdcvF 1@$FP"#88Eh* DPzfΜvLƏcq׮EL!-GS)8 l#<cS'SNՄsx/Dں`)wZKo=R᳏HkeP#�|Ŧ;K .2 rV^IЀ .ICr_`B0]Lj�)*$XExr=��)5*K=R+�p> &TY^^[Ir`L 4ji8TED>VbɁƣR0=m<FvAw'NF rAo2&\dpfr#'ӶO$۽{7raUC _'ixC>rH-AIL  Jr] ,jX. Lq9h}A)Tee%Kwkg'v#ޱ"r$ұF87pCD"\(/7wݓkKlub%#B"i (qHg4*`MO%l" @`D F|EA(E,6R((ha Dgf(4#辿(,羊̻CPHcM"T}Hdxtc8C%KW \/2TzT=HSO=<tO2ڣŚ3вyklNf5@?}:7t֑C@\{7+26/Lg :ք0H1 t�cƲ u]]Hϳ7&b 0"sY~ĉʘ3X}@cK �駟& b&YT.XIka(u8*"X5"mP`$^E>\ xX4`cAJہM#ũ`_"f10%ģIoX6!4ҌVK(PvEt1) dU=裬Չ xl؊6.j8& zI/1\Q LKvpӟ]knkb3Vd2Fɦ&i1 ph"EfųPkG0Kw1Iի&awٲ+X`&Y,Apo?9H/@LHe*G~%?W7Y<)vSE(YcF{B%$`*A|깄Ks�"gUd_bg%hbHVN[l:e*I"P�O*WY9rr`'4e>y1V4qԀIF/Ti1#>GD1EDFnⱍ7̟rLO?uM7>}}"3, OYeCPԸA Ih  9KNVm߶]j적OR9*QX0r6)vR%rh fu^~b" vgbJEy=e'?Qwy JpϘpƦG>\Ru Y09~YcE,ЈDjm٪h�^+yvaȘBfC͛jTZui^ $cd24Z x_^~ѣ@S 21ζk+Px*5#c ]S --Xeg4G̮o)5F\\Oxeæ͑(&ţvQK6r͒�z! Oc</,8_CԒᶗh^$�a&Rc#oH&oܬw]lUp|UJx'UbaCFC<q "5@KY 3?ZN?Ha@c�b-Ttڴi#M/Iٲe[YD >:qCVDZDbL3&Z<= Np6O/)>S4ŰgWK)GW 5/6˨ڻ _$w_x wz 0Q;_ؓgDh1aMBڅWq9-p5[m6*ޤ1aH58Lfnb[�iQ[\@ձb¡6Z1H:~+Hj877ke=kVȒKID@bZ2*S9I[+Lx0,& G.ر<C O۷;0D4)vDXWC'~ʮYIƆ]6{6a/shLhX �2]OFF-\$d x99-_K|JlTc6s3&ZB<x{Bwj({mYxg")"\rEcy ?b EG"kV߯u2FVXL 4r" AC$Ǔ8XL.6d$`7C׮]˯p &9s֣>9&oy<}%2C&ЀYk%gc;=#F2t\yP OfrRb'͑h$! 9KhLT^ I!C8\QxGUI !۾};k@BX`M� *k5&V4R�?x=dbLaOp6)1U+8<tC)6RuAG@3}b|4o hz0 Gڌ6n0{,s-<GIAtU2& dύq0 !ȴ9p ;m ^ !`A.bj4Κ@8ɧkwlߞtqX}qFK[g=KyAJ!1l"a')0 _{<`~By$ 'xfTɽuyZ^{gEy=ܯ 0` BxDH,r&FSjTԩSoJir,&h<M(6way?k}~^]oY=駟[?^z+>E|!Nqx9CK8$zDB̆QGޜaXQMU.D ^aSZ:I!/E;;lf'W3jq|pMa90x^]BgHavD$QŠp6 &N/S!!}?#oz|I"F83vbFT0.y,Ȼ LsQ7_d9Kb"zozb#/<U˶?׮~]w}ՕWsy2ܬ15_cbq B +Eh\nGf:!V߱00SЊDlBû2S3M^`~bA|.#F- |m[@lP4i7 Q %ĐQ2^`X#XYE!PIP5DމǟwϙSGa vdG"Y3uO|S<HXk׮oR $1 V1$p``my2uF#goϬ={/>nٳr[_U|`*EӞpUЇ>ĩM6i/Tb5voҗD M]w/*0 dr'3Zm@xIE�QD=X>BX \'b"ɷgJt}ޏ'{㥙0 $20ccc 7-WG `H.KoA;Xl\^:ۖ ;Af(N X:ַP2,T7*2¡+6VbKx,y#)sg/\ykVrC[o8{7q.q8U"] IX# BRUU<2Do}VL k8LC24�nJ,Ebͅ"͚d5U(Fһb0xi2c#%q8| l3%J~+_gZcYN&&1RRpBUYm 3$fYxa&ucab*3$_r/x7o{뎹뗛򶋯sMvK`Ą?�멯~cQC-0wgDJHN ##`X|bZZ>EPJHqXpQ$l-->h Ll6ȸmadFG>"X{AWš DXVXX+nJqt$] q. @0KeKA_Ix "e\YfȸԅѫKTmo 6t50-1 ܘBLTv[1 36FvKH`qx2!9vv#?>{ܹoKλCyC5K:bFR@}~F-J9Oqt 5 2d%9$-g2HfD&R`$02C GE+[�3]Cz&C[XrE|xFfZ`N@N}B E2b #b)A k~V^PQ0BxM0Ac@mzO�4{ =c\DA-yEC^H*ާ% )-1Kc'wӷ?Vm}ã;4C;;ix`(f�?� %Ez瓳�tȁUuUUs%B50�줖$cf"5\``45eNA+,~YS�:^ E:FS�fKz`y$uqFVhE,C堔6IC8�ʡF3 u"�Ы^M'"LaH0x{QG^ 4F3 RoLV|~[%/'v3_}肳f?稅xg:N+cUkҨrR4ʄP uń(`TY2)˶^ZVBU$P<0lc^x!_a.AFh ao?�@2�?{凂,1Zn% T͂^ a4bM9^zeaBU*_KGl(!kCmFKe cEBj0 zb<;(vIF@ 7 ~�{<F"np Ϡ,0\u�hTI F4h�Lb 1\{ʹX—uPĦ+sf7>+ƀj=2WIBM#YfƘޚL!%*7k"V2F"8$aqeg](ْdf4O?`{R_Xa1];ErR""&̆|vIh AM1nٳi7S)\Α Zl ќM\@C"c�(<¥pC`$!sd SQ <8Tb _τ9> ̞.ӟ4ۢ`0IFk,$ppggV I/M9=9=ľ2Ҵnξ(�r=CN`a3I?\O2:|$Y&DHK,ס|)mC6mM( T+L!qnp)5nf;hw<asF-K2!#(0WSdf,Ƭ@NNαsy)rek 2 bҬ  drr*A\ذaKV08�/a"-`�fpӆD 5_7e;S w oB [K^W %Wt/c!$e]-0Ǹl𔍾$$0rqO$BQQ TGw�0CylO\ WƘ)h,anJtdUTnJUDNVݙD#pfChĞ]aK /KH5 yibyV=}X2:,Є,+J �!`JV@kJ˝g +0 tL?T򘮚dnpryp'v0? Qm6 X^Yabm/Xꡈ.D5WȵEn q $qx"NbI|q 0"<C䂘i5B0l6[<~xD"dFFŵ74̣J0�z8Aзn,1YSpl@bM�I4Bzz#X#3 @!hKx #!AVǘ"_a .Ë�A-aah�,4,'PXpK4S+2)&ӕG.ڜ9x1k.8=<vAw"LBL k+~c7rlFf3Ee3ZE,$tICx23o=2n""2E5b%k ` Qp#! 4i!|LFx,Z|FS $0y "�]hlE-V-Rz (t@A�mZ =ȣh<o*(4q4@;w  S+>g2o1 cb{Md.%RnvZlp'u D0b@x07@2AY,1N�* 0(rc$)I5?4j sp2h!vVIԢKHM=ƙ U,Xha90<8�!T#w`',3zڋ zpQB X³r~`|ta9UXEgU@rJ 9՚[n>uj?u;saeu=wQ,i; ϫ X=ȧuK|RH,dR FN ^iP4.PXN6?P\~"^�yY* 1 Czk @ZI`{B̊x�z*`XS@C۸sg3F$̀ 4AB ;AAUHD@B 7 jˊ@ju̠HX�3aɉ؃X1o F(4䠈")P%Ѓ.`H0� h9b`$X0R"iHȽi6JTc E)"\ _D8, 0<袍;vl{o^8ʫf͟7[7s:?(BJX.T˷r&JNVW Ɂ`- )F�V5:�F F)E ;!WHbbxq$ P`;9,} J˸:X,XF326<eӄbTIIF�9BL�) HZ(z59+X˶&FPkdRKN ^ S}b.iT)1`o$3صs=:$_W{v|ꅇ-^8U'j@O9,,'/OZpʵ Op,@ص,vxqXT(q.ώx@SKۑIϑI;E1$�NP3aҠd+-W<o!R4b+g@ @# J!%ª~k 0 nQ<#>75Ċ =x2؉G?굧n뽯:n]/N;Evs4 QB^*7|Yك#t2b 9C"xqvDh.ZV|-Hv?gێXVg$hHe%yؘMߴ.@: sy0m ŨS2<E =Av)ȉ_O?~Y޶uf6vnUK @VQqI| D+04,׿umzCII<14 AR Ո ~8eJ |(*l5[ס0` +Vq7`NnDah9{X/L:}ُmڱɕ-'dI܋}:b cq6l@|!BiX*}ԁu#H-Ā5�wd K,߰Z܂4"UB'~Vx{J2À[Z&I5LV5kRݻHv2Cp< 09m}|sx#y];f7lJB  '¾/"Ta?&hh"fAF-!'le$5h8h}HM-n*,9!C+e9bٷ=N%hZ*2>Hoס2gƒ{EOu=8l׶M +o�n'p'},#92 !BYYPl]I4�i +B`d-.r"Dt3p:/fc2=`ITet<<GuB-KV9s=v;߼78º{m;DLUD%"t@*(AB[NQ Ex1x $Q<,#4W@0#AM6 07)#`f7ɰ0ՠi 'vs N[aqzP#1eK,~`o߹经hêx;= _WkXI <0Uh hdd @%ÒsT4;Y@Mҍ*-$)lL )EtpfF#Fͪ4w!l.sټ;O0#V,\d 50.s)0 8Ps/U#s]3WkII(`M` N&LY#6&ALbDSŞ:{KcN2]5"j<0|[>`,"#`>%TZj$RJAqQ edn IeioC0RA!]X"0Ta731I2춼iea o5Vz(YPM)lHuX\@z@0"T"ڊh,L\Zy#BΟ=^`[D(`ܷ3,h%2=/qԐsjF ʛ֞C@WDF -I% X10ū #sC.f5⦶xz`Kճtو8ZM3(HsÇ:ZNk*f dt+#`1I VPΔixd">?]z,{#T =(qav}v(n=0XԟDit쐁Jۑ-)Q$/wƵ^瘻۫1Jo,jk"­^AP |䌏l0ٴzYlL`_$v:.)lRAW"%-4|ų׿kk| $F#T)L'jԙ�"~-/aag}704|�7y/*)F>ryf^rX_|A[:#AB:`$~ҥ2`KX}J,*L9WyJauYL_Q|+QiEe|+LLPyҢ65ZIzL%6( 񎘅,NS=E .x@co2hNf}iځXU=)O_?̗X[A^[2 cHmnЎpmذn ضcxR/ju˥:!>#]n Y/~rZC�2|*M~p% Ć0` *J9UY~nDHr;b>(ui_E)Mk/1 "`b=dde0 gE0RcmEᷡ%e\ _|m|XOO3m=0phʰ"TWO|K.1-(@4[ ynGGS.brF+Vze2 5 %42ZmZ > Ա;82GKl.a`Cl 2_5Ҭ><TSNS[�Sɯ Ó"z ߮wa QYga:}6Ce1?}#`7`La-чe ~"FL%^7vribivߧ ?WAriz%2Ù>Yچ@#>!JHIu=vhy4 s7 w­ �VjᴮZI榚-M(�>uk׉t"8؆Qb,KP%,ʹN=S(b=�mx DT?lAg�Sz`E)?1|8a#E/sZ b`0[Q&Gb!yi% zM[*~7h #fy6_*R:dQ`kҝDRXrnԿtEOI$RѰ0U<}tt8ѿ-eJh`+ X{P��@�IDATi~MJ#E}XЛC톩lXӛ@6,I2س{{8ޒXZ@??"Hv+.,"=�?Q(z󴳖CӼƲ^)\-M<`#ր@eL`0w,`(H%΂SU=8| M>Qf ߈FygZWΞ5;kKdx'2i1/,ifEf#ɦctk _?f4 Q`t9 XFh:V(#@"qڨ, 9q^l,Ƥ-}, zg Hl{m˰e� 7=/7w^am,}}@.ŝ^ k{`.g_0Yye!22ZF'Y8ijMXޑMfځNAh,ե=2U'0zBC 3ZUMg (blD D1 XK4*_Pz1 H688N*i+aLW-X�{88:"whx S#Ƭy@9O@f~$cM96<(@q$tkK̮,yQy9mFbU ˤdcrjvሧ8$b&pgN38S[v"|'p}K29“OvM^r;<(eg9gL&B|g!$K(19XaX]&oyc€-U/E5<k`pr|< =``rAo6mN4/,ּsW<rrdCB򠖢U>e!Fޞg05\۾{4 פ{1&+ IELꪔ5]Y̒Ited>}r|Maf,hH{Nh#~0`ɒA< aCb:L!)i.ȘBEuاhRQ_ VR$Zz d2 k'd,q2/>4.êܤԒ !^<c�_[M!݀@/BEbx�6K2L2F(ɩQkǤW9 g]o^zM&9ÀU(DP+ S |'lWD{V_ϟ^hBt5WRLaQ۹cEP,"8%^#)A` i@)|¥1`2 Ⱦn 2jmBxG1`=>BBBkbxc?]M7^�k0#Qx`5 -AȌ� � pd p{galR=9ÀR٘ܢ &!:js 3̟�\p9{Y{4 it{N׫b$F+|?s9]*3;"x1qFޠ+Yy!JS5X$;9wzv Txъ .ATfEj`e%z+?f y 90w.K"|ail!~ARRM/K(VzT|{_72;lE,JDh`~�`7y__l$THUv<LQlӌXAm۾/lذk֭y �Ίy3yKEfpP lMF*_;$`ɕdZ3 ʫ( ފπkxhi�{pF95H Pto %f(3oIOexXTk/DXUŐͷ$7}]2 SUmjdi3l<+9sQri"(\aIJe)U1z/Fѿh[?qў=w>p9'ݽ-!kh̤E[A, %jjRY,SU䘡(@C/l8?_|A=z6_81&2́րH&*CQ,^Zd'ԛXY2NHt,Qn<&ik'n.i|$ cB<,QQ&�D)� jI3;X�t5d$l< 2 jm%*7u/X;o& ]]0疰+}:+ހ8 6 HuBާB%Ո4ФƂ1PqF-)UV;13| z|OL{i2$|"o*5%~,k-~;:"0,c^،JGXQv /xz9jD[ݼ+.+iQ"c4ZAַ05W:'ws3K f"33ə"3Eo_T#Xp 5Hiƴl8Na-fLϚO 0Ƙ)S1,z3mnKb LW] 5e9Yv jq &4 o]r `VfSŕj2̀X&8#T{e,X}6ёV^}<o-?|gm϶[<g:5kv&"pΊ|&#S�u/^0~: ~>L7ф)q8 W @YXGA'NnN8@*$,bÆ @5)X$L vQl^-A#Wnrw]zwy BcBXY ib +TPK$J(9lyi:yILc@֚&;([t)kNA61=o5ق`߾ysuwȝ ?zS,x&{,zX]XK 83<aIYK%z.6urȄі ;fNk48cKRfS�}f6kj72Tz'i"9d(=$Mt Z Ҍgye˲[~=>i~%x\~=|EW 'ar�KV3 |}aB7?h ʈ)"ч,B^ˀ < 5!Y ާ^Jt% 3#uV`rUKY؀βn 29exC Nav;6<y q摩(!#AB R%>чtIŘP|_KX9 XiE Rlk%%VSq2pMUbչշNBkf`mb_ҞXX4>-A.pHߖ83p&>  ;L:B9aBzˆnM|F*+~XNj, "4qC(fw03KP։4;M%- <"xON1wcZfH”L7cRqVi32y#e �ٟ/dNɮ3!fd\uNVd3K2+4%0#ŤUfL5+3ZxDuڟ]&;+'8$lȌHnxM3t7 6c)Wc?sac1]J1.<#C&`d{>(b|& X^Fo4 {݄>4i=3R?k#2ػvڕM_֭fQ҈)i Sɡ2EForߤ7LӢї6C,bj.P.\}ka=ÝK/f[n>N]:"siFiJ,yh)TA| 8dN@aH!GY<pݹse4#)dLVN{#+}b|bǎ .-lIsa >SGt $ւ$T[M.�51sjVq?ᘣfj�y?u 68~Q8p 2{~ >z?,#2z~Ǩ3$MG}m$Jlr ;F`vP !ezúc nEĬ9s沐7v}KOa�`3wd/kG;y��3d(X1uz1 3kpS<` hHXwt"=o(&!A�y |知m SK l: #43fZvYҔ;:6`1� ˂C;S<ay`ɛzBun<3-A|b[ݠtc4T6^*^H)daU+-qׂU?f?}ÇgvzϲZh=y*;VPv8V.]Z8 *tJ/%`aU75S j`RKKz@bVSB|08%TUa;r/|ᱵG~aYقt7h֠OZaJBw^f}{Ϯ: Um͈٠OcDoКAA�#G7bL}wXeАTӎ50oE�r� 1` 6!E3FĒ qHl U/1/+eN 1y*?u‹/1f,m~r۶KV6LBWJEӱ 'W�K_  6f_s; ^ $6;֏ؚaJL]H>9rH2?V*蹼 'Y sޚ/g7 %<\A7hW`,658OxAow0]+TÈ k0H1m`o\-}Z&*R0Y& mIƒ_!bƛb$m`2%Q23MlOk5 S U0M_h�wM"Ͼ7�ba�뻆c i2+Xrh7roH4kfT"@zA@Sf`T^+ϨY=#5Hz�F93.CH^4^a}ptP_>e]-3.W:S@SIi7`Y.AFe5 fX1mk7`&yY$eӧ|ԁ;Y# d�oŀcO�QSOロO4{߃-KzY}YgůR&~83|o`ձ bs<^:XRyeXe {z83>�O3;VX|Љ}-b??+ӏQXBi=z�))f|p见a?J}K_ⱱ1>b칁~h=Е$X<Еq-t,/)#0<+XXqC{ZN֤Uƕrhi7`t%ĎX%}2:f'rE34H@8<:2,3>+JX"e?&jN#"% WC .j-q+FdHLmX�P 0`QgiH"#YcDSOky#p҆\!1G}CPWr%Pf`Î$k1teAb !ZB5lk43,X3^(BpDAmϑƌH0oYU!}T gxIv*1'AuhdV-l8HYPh=f& aEmbIaK<Ӹ%ؠAwp02Cd8˴` ]aXVBtè\g׈' p= yDry m[r%K<}#0NQ+ʕ+=O2ThNG6kûKVjDW%$ pa,)E 8,�/%hoCRņk-gRdxkE㷄i!,p& F-2PeX ]#Klcba m=U X`w ( JՂ[6my0.j5݀L))c֔qK0qp7CԱnbw;,¶&.l*qE\rɷ->d-ZT7b\b2G)5s1[n}7K Wh[8<CDW ;VWbb `W=K-6J\7z@)+gSdԪh!V~͛_6V!ol=z@Q{ZYYPx5\C"`q<dgB?:t8 NAL5@ȃV!'�#€U^�VK{^xqٲyjFd쾐m!QyH53Jf,3D n4C5cu)z$BG! V'TF��Y,_,8aD d^!- l�4KɅ1|nɸa>.i&@c|QQLnMظh2\LKlehdC`@|K0�c 1%xT1@Tf7R X�ȅ$x$*T&&̣6`~'jWZHb6#8$$` Ya.iqU>&a2Zkldr*,˿NΝ;9Q &5L 6l߾c0z]x-۠%hk~-};vUw0a X' W$ WX)bQ=`:B*5DINC$޹kڵk.m7yfv #jX2iVf(A`ca~ӈ9WN yM^3Gm5k֘ ]@ BDa+s\0~&4_PHL>pbJ \r}fCwQ~ߧ5XQU tK6 ' Yӭep�P 8�u�4ÀQ4A~>2%,8UӎL�ꫯ?3wq0AbwAYW<*OPU:V8GPbA΋.^[ZbNG ʢb!B؞fn's o{ Wن@@,X-Y!zy�g?w0kTfvk%Zq裏ԧ>GyNWs*]=|hPjƏam+K:3q]BZ_4|:C aG;QsɼZfG AC6`!zCE-aڔt(�v܉SgɗDgdfCju.m-Ns> 6hT`I,ZCJ쮁Pґ Gr@ef %ZO>K^&a]#H/~0瘛2W?Fb5l)g-A5Oؓի9XQxIAOad kgyJ̫9cn!eg?ZƐ8!߱ס+V07  jДpݿk.u`,>H'鹡YPa'߭?W;43QMbPV?Cp!aj2ee!-*wPFVr"Q`̣iʅ/h(3ϛWOŸBㆀ ,!^4Cw/e*p $ȆP%o`t%T,Gc]Cx܄+Q Lm,a,\$4.aZcl1,jpv%V8)Hz[K X WX'Q6b|BU$Qꋣ<+gWs? ÁTn`jҦ�k@om{AUGMWe!<cwkڵbPYxWĭZH ձ;`i 7Y?׿un [hZ8h<*,$%(/G?7a„۪,,ٴ0`ūF~_<O=wX9(lpz=0߱E3]b%1kӦMoy=DM4dCLCT>KA3qc&3>Q4; h L0x {€eqYp/!!3G Q+b(XB|W|;s$ !f}@kA>%~`S<� SU$X1 XV�M1, :sc*ZgKj[zzfe~5gJc]K8XTa:8`` ̼||_ٷag zAB5~2Z?2Q\HX7g \rbfAA+X5ysr^+ȌQhh%ON,f$$5I0Z4\ OwQ�e>O,E /ԑI\x3_jᡤiC3o 2KMi7t<We˚3:gjif(C$|"):#B7RrFiLd?H.a V?>\Y�~UE T,2",a,6h f` h </JZ1?"dDoxK4l&oX=Up݋ 0<{CA!Ȏei7`pd yH2&M*dt0W7I{8Kp`J NQfsLSi=zŸSDNѪべs9|_=sWsYKz�4#`U N@ke- CB}5'p][l=p`{R< V\,#Z|ʌz@( de eUeCƪPw_O<7m,o5̲!5fHi7`T1 fXћ7)qf1a7do@Ǧ;"PoKoUeꍑA"駟~)p36E]$T� _&ʫQAKUh!R7uXgtޱi�fI0Hg$J.: Xe|2(mv:Xpq!dBg;1wċ_3k2c$g?$Nlʁi{?p .f]%(/xMf&] Nb,D` gG+[i8$$`3&Mu4!&(ǔ„P1S[gj |͙ÌxX4;+Gsg70?` XӠ?4YcIK4/ iUpm|5$ W=đi "À/3<G05of׬]hQ,3XSWavFF+|Ҹ%x3Aو1 3X T&PlT)8د\1C@Ǽ2VVĆ R!�reS3.'F{޼XB%Y9 ]3RY3l+ѓ[T}[{DmC€Jmh.A三4̹K%%^SH/f�%v@0˘;fS K=HwyLcRX0KB0"gymn1p9uՙ3jTgg~|yN*ݲtJeV)ή-5JYIѢm�6x 0i0 hrLW J(/D^Wl(b4&� EfH0F!Lފx2^…@Lo H aLѫJ=`={h|Y>:8(!䓭۟=RFkc%e@ '#`�qwڃ@끄kċ~wNP\ @9}S֦Ec/;p/--h=нbL4z^[1 Oo= jLpFvؖ-[PT/h_j=pyIʭ̪U4Ii-0 X cq/}GR,-:OKwK˜sOhd3$pJI^9,ܿa2M})ŅUկ~5/43\ҹ+] cy,  Aoמ<nw:jaX+{`#ИJxÈ@2`0\y81 e$d$�$Ha@@(aAr.6Zz^KP$(73Z{C;%�kF#[pZ],Bk!I8vJO:$@̣8#X"!c_^Z!]y~' d u7 ~'1Sа_0RU LGB[0?p*rUXO?4b|$a~ U\h5945d� hRJ jZԢIK(=x8/Uv$@@#pґ�(-JUe3"ƇLn%H%$C'nГdr?;+͖4ؼ7x%TK4cj J`z0 dMAUGN39gt-dtc4@ E#^Z`֔z�pcfOq'wLi7L@ei=P`bvD>%b(B$AӃ{|O{76xjgvdDY#E_#d1E$]?Ӄ`/4<6o|?яMx2![`XmKDDb5~y,r `r˶m )+ Ͽ}Oi>83Ww+7\͛qf?fO޻Mt7rԾ4?m2x顇Q2hix`s㖰1)Kx<3E77oQc=Jxs?mkVqōV,\O~LoH_\7tq/o{Ĭ}U:rͺno)}JC @Z{p>3DVXwm=0ŵ]fNBn X2M"hUp1'٥{g/>|銗'1+7_}3yɟgv~G߾{NYa=?u٧:vՒ-mm+hw&~qK/]\oo;s%򗿤 -8=;Js% =+6w`L6e헿߸_p[:W[]0oۏ?~l=t wx=mͫ_Ğ+מdVuªW,^K.a[3[gu__qk_ښ5kַ{el=0^9U`n78 Bp͵azqC8[|r#a/g:,N<r/Z4o+[tΆS8ڰlђUn^|ɲ_|سw^K#<}J&`P#} FBZ Qd!+XlA^t-˥իWX>dr@v1SI_&(=o\~WO{+^(/Xʥ+'?_b)U~ޗ[bѲ_syBl_;۫Ɓ4}+p bǫ-hzlF7hPzC\˾EΥpo4˞s{onLlϟp 5*g,,<S\qCVUVX09jˌg}+fh,6["S3y z)||@­33XʈUV�\� 6;)a0(c�`7A5y 1lAF-q7h%upXC=Ҽ9YQD( ъZ$'ZePN<fyL'|<0a#h#s`Ix f0`hgH&i_(0&enX lmc46(f1$!:3 4oq+y0I;D&͋ bL!{1zi7nȚ^`BDZƲZU :)&G r_XBi=0"i`lȌȎU{&c 3VԈ% lq X}oJq~%DUfo!I#[ gl�1sU²dn\0-1ޞ4Z ͕+2/z1t8ASGi*F!&6 �]xeLJb#�oqJ ",-0`Μ` �=i&M%q�DCDH Ib l.D4qI؃ =6:6e =#0`t`Ά XKMQLagTci,nU~ˉb_p`oYczk8$+J+ZrИjMBU͜Wdy/ɛ Ba8c賳-Ψl94wn; S �qS` Ñ%C"Ҙe$aIVT yhEKWNO/ມPd={ِ hzd�+F.WH`$BBF L/l@@cp@O<% `^+!YGj@<裄?Tg d&GժVk/QyccX0?;p 23r#y"/a0}wؑ]=Jng*dQSgl j*X&B$'-D4V V` V@VR };9ŌR$̈M1 2xɏ }ccc\>~8yŁ{8(#/E/�s믻W\%(T.=K/2`ߥ8ӷܿQ'|n'N]7KyiQH&K`OE9Vp,풀+x\؃.z';5+Y&vr@$H9S@"`0BU kA$ F|H?9zEUN1PD"Ȧ7hNULBdk@`>18/|8E{ppyb^4vΛ?Ͼmm -dq4;w^3dmÆ  fC!~']xg𕇿 oxg_ua޺u+ᵎ(h ? E±V5C�."bVZ3`~_Xfxx㍷~;8|'? R|''[Qd3jѨ(ey\xchpQoyjcœ8<05}{BVc=Ƥ$Ҁ"XCW*= xE_?}'b>b}_BvL-G林0cpX[5w"[DI2!)ĊE: k C q3@1ţ`ԩi^-yv;.K-exĪbz �Dַ\o|f-K#A b`U7$k`D25F)(;?# YF'q |{-[s9~D{wܱSC؊{4{I~a6gso  : F3&SbQ̐l7,\0L%/'!+,cDXa#K{^eD##7�*̷ 2{N� T`_J9֭cˇōwy'q�c~~}ʵ ۘeL.D{܃* ( &<_z$S :8!馛fF¢T*,TH`1辎Q\[F-^ pۏp4/gF]{GX|q`ԲFxvWh ?q=k.H7Wt1xgg1coEPcDvF*w⸎Z#+<a;D xX&Xaąޭmݴqς6Yk֬ 1 ?Bŋa7qUXB&+JtQ[,GLF2 (5Xk,bu?]_~ze*`nn0Gk;u4E&;�}:5\* mL!0�`W`Tj}UGHux�d& (ˊeo;�p8 'MoRvmROy(@$g,t\H˫2 ϘE(ǙE|pϪZ|[Ҋ�ؾ3B 2 izfk`gx҉>9d#iE]`d4dr($D;xX^11[$bi"-EF•W]IӾ寜zک\L"ِP!X(.+,eMF뮻c5,%W' cKȴ5I0E˰PCg2�2%:R}S i"кm|l%"{\K*nY1 Y&�Xկ~dW I~F2p,x;&u]U7`C*Wǘ^~rv\ Dd(!9sfnha<2`+lBCu{] lB*0,h�{SH-T3Qoӏ\ğe$& ".`,,qGӟٕ)ücߓ ̺3*uahPDŽ$c0`y:DKTN%ǕC魶\@, @4 w-o^z�{~h,*!o~3ŕ\vxQW]h+< :j U >#�RA:/V䜜G�t[,e 9J``6눂yEdbG#ͪ5TLSK` nHw: ._$"ܦ+[oe&B|IJ{% \04AcEfm� *H#fR9M )4.&= h:>cldT1 Eԑk\ &@9\`u4wQ4zL]�C�:`z=WiRA%KY[qfl֬yzu?H3텀Dq?e4:d!\P( qcJWp IוFXHt1f}c�h ZL� `]t+;>= �$$Q LR5� 9"*X�9I^Ô.Ĭg4"+etP @$p�e 1θB2{ X{vX|-ʼ͵-_[ȷ_O7ݾ8*�� IDAT*?H\2YsK ^ƫ ̨c0$Dɓ_$0҈ S|,T9< 6 o �ekJ:94ct_ (QddbbH F V`$VM%J$$`4/KE!$F�R삥e6 Bw0&#L0*RU}'G -`j2jZ5hx`^{-b$GK4Wh 0D.f&Ea$!i^ #;}Xi7yA#*o`Hׂ*#Pn!N*O&W�:Z l3ND19P @mcg4 )i^lha#�0�+z^րB! mp=!( «J2b%01DLnH R4<2E`d1�!X ȠUgB@]Flܪ vz + ) H~`1 ZrB$b Yt2"G+-faO<Af c�%[p> ]p)4 *q!v$8HQ !-+H EV-i!>L�dV J#V"p$,:.+0Id{Lz�e|zcԛ~4-�>1SҘFKЫ Ʊ l!x<y S#�;4C$by [pr}☒2 `l[Q�y4"8 P�ﵨ6P "lc8`fy`,l!  �{F=[hL�a,O E*|a€%:[,1@d`�0؅G+1Ly=[h�/ ,l9b4\b~0Ap1�l"*Y>+j=0Q,sRZT%X1L)U%Z$9:!A`4f!M0!C`4ѷ`%<Di(z0$@lj@ W 1SA7:Fc( q@� @ l.,ȍF�y|iHi$4K@@D$Z@W, �T`_2ՆI{"`3,H0啇@)z)HMX#6$\Qd 'H  TxH`Z^AfxS؃m C<A"!l9@h%3D 3LPA `A"–`$.` 6-A}1$ &$5| TRu% 6| Qx_, ف o@@PXkVE>(|WEpހN^y@0y:$,bSh .BRT(C*�UZ C 6F(|Q \ե )X\Fq\b [L�a[NC v^EdU"jPE2f`x܊�bbEW1Z-z(x@BdANQ B@x .L+, @Z|)$OS+d5BJ~2)EuLSK1 >i-Zח* $ EK`bTk4>P>#A(aI7J!uTTj$TA *34fD|OCϑo*T]Ab�s5J ^x CĀpgрkl 4Z3gI6@@SI[x=6JL-1 1 ,=&!ӪT,޳bk^hh }En@ odF`U@ x o@@UL Ė፬(ʈ ol $ (1 * 1XUAʀCJZP TL0QH!dLf48LU&� cz+T{+Vj$MoU XX?A�9-v 3fRI4L<O p"%ͪLx!б)0$ 3X@dq-h=0RHG_kjHPcʚEBH㥧4R@ 4]2v#+$,PaOh13LK@ !&AE EcZDbB' LcBB{3dX !U $t[<3ʴaVP$$\`|j В .^!B/- Xz5Ջ>UkckV%<E@*#�o,!כj,1`Ztū=nLE@YFSI`2`0+VO@w&$ �o!e `4Ңn5L=FSh1z F6WLfU@KRG2<d@H[l=z`=@ѤN2|=, MǠtmڬ@W(]nuǧӤq-Uk9c9(J/ ?AjkPغ�Y)@caq8Z U{df !N"Xj{�Zay}2`,-zAFVX(<FύF\IȯYLQUL`x\IFMl,c LP,'Eh*Ybb!Fy2Ki1  ?0Vڔ&^)2*!mUjz``5dZmu-c@V_={\e Ѹ����IENDB`��������������������������������������������������������������������������cpdf-2.8.1/manualimages/png.pdf���������������������������������������������������������������������0000664�0001750�0001750�00000147052�14771516640�015064� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%PDF-2.0 % 1 0 obj <</Type/Page/Parent 5 0 R/Resources<</XObject<</I1 3 0 R>>>>/MediaBox[0 0 595.2765 841.89105]/Contents[4 0 R]>> endobj 2 0 obj <</Type/Catalog/Pages 5 0 R>> endobj 3 0 obj <</Length 51977/Filter/FlateDecode/Subtype/Image/BitsPerComponent 8/ColorSpace/DeviceRGB/DecodeParms<</BitsPerComponent 8/Colors 3/Columns 400/Predictor 15>>/Width 400/Height 294>> stream x`u8\C�{b/"ը[TĖ%ıq8q8rklɒjuP{$@ {&1V͛7{)===cRq`֟MW :A3.-wZ=xI"=/ҋaa&46jXX4!͢)ĆD/E�abFZ5RUG{`mb̐k qiLF@(3,&MMc&HR٤,b&H`Y%MZtQ< =_l#y/ Hc32 A̎P,it4R<}A̠=px@/FSky'AU<S $Lk{Vx/FZ,pbk=0K bPxč=3D#1J V%Ha62jE&6&xj-hh,ymB(fȄ$�"D$PK6FۙxfHUfDbF-1+DB32D7r̐q6; 4)ل 11e /@DW0xæIf+R�#L6H˴#4EM` 7 4̀Z9hfh!:Ah$H`k1'vW3bRxE&hb�ڟ&>q[L EM'3Ac2 fڵ4lM\bh+EYdbE h"iOZh.)bPm b׼]ea1@ hĦHE0 G}ghu.0`c$ e@wƌKG9a5h$h]R 6clEFxuMIc N |"71#I={41c@<֤Ѱ Ept1ĽZ4Rw98‚|�"`qx=oaG?\CDR}&`)<Hal, Y(E+=/"%VG4ƨ<G0Z c+&s h6xnf (d@^0%ƆfalEأ16Pi؊ X[1-,6?ņf0DhI*JY,ZUV\/ɡ.Z cKv>% ~[*⓲';wwt+b^N`8z 8A\  M)f0+%%5%5?g.=NED5R]4DokP&LQԔ{gMS]u˙ζPO8a$L6"mGiO_C !$j$ВJ'kE�;A|QP'8ص$2`U|-k@-vZTIkصDyg@>R ^^UR#ŕd|^rgB5> Q2Q@vE�=kvk=rtQrUM1aDjXŃcJǤ5`x #mfq@!b24&DjX6XK6525`G`j1m̤Ѱl\xZ,(d@Z̪)\H _cKUAS)E.︌9D/$HhVD0:$T(rhX�ݎnǪOx3?QٝrF$ B<@tvtdf8|HT2+9� آ=6p `*Ql}6-qR{zzH b.)8SR‘ ib&I$C ;\HbiKldy9RקoVBa gOH X6P �#[DNG7vפ0HKLK ljP{;3NySHXe'Q 0F(�̇`wJQjmL /INweiC=yYr6[40v;גP@"tuetqzT"C@uM^=T0“Y XP };^/Z!?œMQԔT@4=$�.| U Uܣ$g+1I¸񥤵;:.]s}i))] `vTуC+{Iz!=93!-I/pBO&ź`;a*mJuᯧ!w%1`CPm]|jBM *GNLi:gzgzs:~4 :)"TYP!ai^!ʌU8^iKe{Lv_akkG֚1.6b`W3@q9ӽ^}�V(C]]�n(}^OZjj̨ŭP8ooiN'?Y R\nnF2̡ xi 1QL::`0a]nUc;ADž:(=#U8zO -,j2OJZ+z.am]aOPQxuqVyGT=]=!6Ɲg|mˋ*~\1@}I˘ay49sDM\oV}nĢ[]L8=Ꮵ:_߻aW-uVT80KJc~4,K YmUIfι|lXy|ϫ6-Tc,"D~`=eمPnwη>~+@X 8vCsj@an FB) T\ӡ62ښ[s<9.gZ[ggUSs(Xulinx�\/kY#m͡_ljqgl6`Xw&d@Q Uj+=<Ɲ [NO\UV$!I8q \tEC )667: wy\^+Y]HZBUGXJu3^waad;Me.鍊xz܃_xO@#=UM_ͻ{b٨\OW]'2F -]>PrdwaN򥥥<qJeaqqNJY%Y6F-tutWp`]թ&+R2bé ]B<Z[V}mWOZ7pdZWN^<} DHdi#EWwv044o!ARWZs)Gp5^=䪧CCԴ<3O,ȒajKZ|U޷2�zGco.*{j۫c',pl}4Q@X 8NԵ=a)#Lu1KH=MOW8 t[[2FWTnn=}(q#@Q8Ȓk=Gz<wlptEZ-Bf{[IC&x}>56{]8:223ȹRlH`w `xSYa5f ^U0N5y4>o dyYK|uK�]+')"vVT 6t7tv\*!3o=4 w] +-Յm^Щc j<^7CF/5rʿcfdXԗׯ}-6ĕnIjuM*W'UI?^g|sŔe_TCo.J/0G:d3V+s|r|s_}w|+^_^(1{J/'[y| s& .TirLlBӑ[W7J V_|n].Oqbߢ3՜pt[ p:ÐFL(u.E0Ʈ[p9r7~l@Gv:A2̕!>dD姺Ӽ':~{ڛ߳g3ݻBwm8ݯ u]OolPZ,*ɯ7Pc3OmylqfY$&|_13溭'B@iZM^f'%B e5,z#o*̢7Jh/ (CL⽲:kj3PwB=FaVNδ⑎Ǝޫ+4-XЖ2bPw(#+sJhWS+W h BÓF{2|P"77|tfsȍ m��f3ķw6_;-%cR$]fm?4a)@|X|GYVmywo,*D:U*Nr< A-SFW ^6aIbwZژҊ,_F+9"L<"ãSRC2ޫ\O;*k?ڞw兓\rG_ܿ= d1vYXEráeoۛ'88$GHb\2abO]VG;[0lO#B(<.rn -56-Lu:2\f;jlr/B@@ ozK;W=[)4iIGtp{8|+jЩdcS4gM@^Py_ 2M]_Z1_9W<"<pfKvK|C|_k}lĹ3M8Ɋa lHR͟6lz!~Mޘ~SGLqraއ4_ oX7cɘݡm٤9o=ߑځܙ~8wI L`{cO%Ԇ}%[WYF3 YYM '|蜜QL F(SXgdd ugg�?ڛySB!vzws2$"q%' }/~~Gv;O[McJ++*n5t3݆Gf2[oޘ!7oMnߩӻj/5 uw9}){u^;ѓE"zJKh{ے⠘34DCm7ahriQCF#V+:T\iY.H`H{կĎc{??+[VǙPHOiw>w3ӯ}];Gcó<͵xsN'"y LOW}̢̰pO-\nG{'rypK\]4mS:eT:exқ;[e '%uMgF,S4qnޘǯg?haQ$Au[ ƺ]'oU[znx{c*(%JtewƋ5{<_k F{^#"},H[^_n緅鹎?`,>\{_Uew]7| u-F^|-+Lnڿ}l,]tć+07hGK.ZꘕQ*#ͳ<*ؚtOX#uW)o[6_#x[<TcWȁ @F;gS]d.lEj�&ZS{| HRiޮB8Ͷ\L4o8 L̮t7LnH>Tws_g˝eS2ӖL5$ۓX/)\_{m0CܒϾcamo|1&4/0gw_ֽ.YTVvy8Sθc*;Js@,юv:3j:GV7m"큎t+6PH'+bAoSd(gZYcww6'ҭ w;246Vpg|nѰɭ.0|e̜v crduv~ #}9%<BOVB);5.1-roKw*oͫR[yPz;xuzB7g"ߝnݢ 4<e=?O-yfO=~VX>j>g:ݽAl5h;\{k2~.|ڢ;=7W Ks}Y5w|{g0PW~SgKͭ; m+.<{WGc2 l<$|oJ&R0ҕ>4m/];~!S}LJ_w}yӏyr=}:1$Е_/fHpwj:Vi8ެz:,zDm5[Q (VCo]]fd957=)X~p*ԁs:ٷ"֡W8Q8[_Z?82VKwUk݁#M ޗMu Nգpgs4#JY%C}^/;أnE%~/:Gy@7\G>'/]?qǯZV䖼w5Pt$FqodK]nvs7Pe9d ~t6fHPon ;vAC({7*K  }ў_Wo?U I/OKiא4DL 6KgATʋTYܧݚ?V6<nt.㶕]ǶPPh4_/ 9Ԯ~#O~s*&қO]uߩkn+Xxk?Ҿ;eEYy+nlr{YcXVR5k~vκWtܶ@ KnHqQm{5 9ʏn2gC.͕}!I;A%S1146x߮Bms״2lyj3}T76zѢd~Sfon(b<TdYؙN'Y"jv9B}f13dzW?|Gg1~va^9e|f]WYSUWS]\ ozz#[>ӯl[L͖ΰxD{;5YKw{cc㐲�:kbjkkn8˨kmlL4b uHmnmԝfMwd\Ҝ)n:xns*&>vϖܶCd&D5+IZn{ӎjIpbQ_i- Z x3[[VYG$GS7^v?o8"S敎!Z{r/XO3K+8_m9.fC)u?pOueWeW4uDYg[88#4?+M9};椗T[Ə=y 3JyJw0ܢ/ONz_n _94;;*δec.cg9%5lGf~}dǛk[9:Vǵ\Rʡe=/|]UЎ(ZWTXB"bqԙ5l <4CsFLwҬC'\S6UFXE7տ퟈ Xf-o`5H[SNu4t5N 4gx̡՜{a(r:Ҝ_t><tJ]֦APѤ宬57<{t~jJǮ>1H<\~׍[ u>SzkGjN<.? ̆Wt4i{|d|on({Ц|kc~Lӳss$r)&xڿ\.Ԟt&\OgG0#1?=KzDg+NuFqM"Î#Gq5[a2  ]O~pq[S! \i"ELwztZpTfEYcr6.,VWe3ΌVB,W%%_9Feo7<2HIG8f\_{n7qb[6<{kzy"iaȅ|lаtyp4OB_ӑ f zUW8t%VH{cg ]6a.OW=\w:K//<o=;z6>ۿw nݿ v'=˝yKʸfO`q8_/-r0lKr-SCS~xd˚O<r//+дnonP]=,[enI` @D,0k<XSGm=GkquxwFIf>#{!ˑMd;Z|<gȺlj3ݙ9b65u3 6 [`f^R$�T o7R]M]mYx$t]Q=u Yhe?hzF!g]G#/ͦz}M 39iطwpG9<̗՞4d]-]cʇRlmm=xH}GK/]\u&9'hJE)n[6V_o< _!<ξXO, 'w7>޷U^\<,wud(;PoDc_|߬y7={~1˛IY_Qaaq:fnm:sG3V}SJZCqtue}?4֞:wI84[#XunUGm \4>yvCJ<2%c^y}shǮIemhjIжZz?2&;5u6Ԣx<][ ojcGz] v-,]>M]hWȃgck/_6|r7nhhÆ e<sϝKy@-lNo`9 ;(pf;3ױc><nK3ȳL\s<FIO?()tؔ3w2BY{}<K�H\6r5 als!^Wfv& &ZEfG" P7t<R?zIsFƅg:V;"Ι F|du`j6>$/lt?^QOZ ,07Hb_a \xi""C_~n<{9#V}[饣y }{CUwT8JZнE7k~6GNokiTGAV^Mә̔;f-.9, :[zGx -lE@kajOmA N?l 9sW(/!J`Y*2X;t<8ɀz;oa ZQ$hݡmn|tQFQh ~e Tnp者9ʪȡCJPmaCG+�}aLˋe_xKa*uL^Bz ϙx i5n0ş䣕bMĄLFk}W`G✜^ʍ3]C<0iSK 1[B- ,ct>jk+,oҲkz"Silx3 Fɘ�F&WU-'d~4`ۚS{6#A/xcK`\lb:Y'À_2 .6K"!AKBwfQQ33 ؆Uu6(;BUmn?y瘼-|taq3D+3f!,Βxc�u r,5hssbP&TxiU&;ѶN@*Wlf,I/62UM%02>d ŠWq }(FGJ:Ox[}L\._}+-G wnV"3!.^3oS\Q :wX"Mb79BTz3J$2:R•aE,?rb~mXW]3Lo$Šo%]JC`?RYo ^Hla$p9.1MV>F%A*8- I2 3 Og'ވh+Lѕ,xsR}`HG+�!C0fl2bV4U}^H6ò'A('DwB쒰]wHЉӅ%@SقC WO$$D_$$9:G8ۑʶ"#8+H &E wd΀L2M #ZOh DhՌ<DfRp4ZAj &"Ӕ,UIF˧ʄ5 0$=m|oLTr3�'S_</DfQs BJSS _< UxB$1BJbƯw q0 чnw455 >^ճriFDqDU c54)Rˡ$6#x4E,ѰM$3aD11 .A/~1^Nf#;<Ft] ($XaE5y4&Ɔ1րcLd&R`�c$eD6Eb<z̄>- H �$'Nh,Fb2.- K}q-L[Q4:H&_lR̢fIMLA)s4\^�h# ]�aL$)7uPoEC"W !땓c1>QgRFI�6/`iEE 6`2}rWqY4d&^Nk=/xUDцk*0f-3zcZa#)xVTT$z9l6R@gk1?Q$' ^U%l:h&1fbK@BT`l41E](>SZc5i G5551==@&NǙlkEѼ&׻ۏ`s"杕-M$R/j9ܕ_PxV.1|&sěMFtk )6v(1D T(0m� HSm7ka$̜]6Q6#MIȧ3V<"1I6)ѥhS :::֬Y"//=s΅F E> ](<LVYg;Œ!{7\4"-P4JeCE Yw(uYo^ϝޝi^,Q3WrlИJmrR}I#Ql EE l[]hX@FdA-V}LӧO `C@qС q>=(9dN�3հDJEH"JE.+U�T) rLR˙'?^eE@LB0&oL4y(k^~… aΈ"۷P%7`?]vرcZ~ZrV ;vzx?lB><S/ٲ¢&T]]1(E*FAfQZTFTP> #$B3?8ku&Uah9RWU }YSV4G1]1+@%Ɇ.ڬ"gƍ׮]/}~ɯ|+<@ii)b xȘ� dfZ$��hHQGUV񶩛o2H\`6>= Yj9SKQ @k+hkk+Z#L)۷o<y23쮻-EDP �Nͦi+AWII p{{;v2 XmM>~yD+dfΜ=,AXc0ט;wN2q9X{amYryP:4!Ј#ڥș"*0ݐwm'6ZLL]>Jt5SWr_ bKaդU1#-QkBEh ~J+ۊS>~ޔ#&�k&  ^h67 MvV*&" D[UR+gh,+�=''qLx #F>l^^GE_>}:1!ʖ-[_{=ֵZ Iu̙~3:lٲqƝ8q .#.^i&vyD\j2 "W_}W"?5k.]# ̞= y4|@p/uHPq:vA2sU0�,,,"n'*_hZ'{ėضbŊBT<Ä63gˆ? 4.>~޽{tvv\ӹtի(KQdt]9uM#{ZXVQmlI9Ș`ĥR쇏(_/lu7 V,}d=a(Q/ъ7}=}GzOsu3Mwն4L:vDIŞC'kBs$NeolniR6nRYШ.}5&h@k 19ChxG|Af#yꫯK*O<ӆɣeLڟw3gnÆ =ܭJ-Zm`>կ~U\\<vDwsbAUU3'd1~19vĉ$#d+p_949,E>52ӦM#$y SąxΧ4 ̈́!]8s`?FPK!=]'ȁb@+NE -AP~ǹSѣ* geeя#f\Cd+1"<1Xkm?<P{tK}ؙ*r4w x%!UmMH`)b[DtXKQ%h <lzps^>#xx=l4$$3[~ [z=|=Kd/=w1jno~ :h,mזVQkgM;6*Ȱ`h6  0su]Gj4&1] -0aÚ 8%{Wl3q v=Ӏe!6E1وX4HK, ELfS0/_N@K >H1�i?j"  $v`$!կ F-^4d4 ʵAϓYzEP^8iT F۹" >A b [\xH"rs.N%u<GP6E!0f j fM)H,3 ,!J9k7voWS{ahᐟ|H|_'u/2픲Q.wٿu푝&+_yx۵c.au# uƲaEeySGVLYr٨ɯ|~ơqYm_EUPveWEj4[=R+9ඣ{4]=ygZVդ7{5&̚<tmhm>RW>tWY[7j ,yω5ؖx;1AY}S ~pefȠ]$V[,:Ӄl/0c@'` 2iWu"hJm1334i҇>!֘@/L$S<�H&6"fYJֆMxGp@Ley a1x1_H8h;(Eɏ=Bq˖͙Yƍ C @Oa1W@zZa' s` r-2kVB 4 t*Fe!* [}rp{aӭTXmrj^1"_3zk;ն6z3_޾PS_+Wa>|#ɫ?t|oʁM$;UcgϨ7ٱĒ3[p77^1fґGOyiǚ-yڢd9\u`m9hCcVǾ;-b ,-~Z{` /⛇}`;_cK+oy1k۱^-9ui_{wZ8PF mQ%U,QRQ˰V[ӆ.2+[<3 �ŷ-ww}UBϥ%8yз ;;SNM<{M3tI gzCJKds$g/hIs B62$6hמ={HpH$=씳&%6}`*[Eb' zxD�F"fEi`1jhҚmvY62]D:o"{w@bMߨ \`92yZT!8Z_q`GQv3 %m'=Mk'?O as][㬊q|tqۏ#`M)fU]V)JGP[RYTVSPiƉ jeN񈒡|5EciǗA;._o[S2lJk.N#LXi$h|^dsLn|cmPD1C{//Њe|ntq=';;P*f籯Dzʻ]8S bsĪQ8]eQ#v',Km�BfzO@f$J& t9Ԃ'0g\bΚ5-$CuT4WoXqc7 dt!;`Rm!GLB`dUHڿ�%�ș6"awy.5\CС$cTJ, !zXcZHijmm!666N[Hb<BDv0"̦p =J A 4 �OBFci Qlذa9mI =.[W|2Y+ΗFWT gʌ|*,?$_P4_5|"_]{;)1b_?r2[<U_}tʛ-|lQ|oG~l=[-9pݫQ]iN`yI YБXac}uHmW4FWN`>pPdORXCЗ )/xta%cgn>G6~饻f]ځMc +O,3 [<< {b@2O[Iy_dtF�9Q�61"ep>b,A=Fc1s<LD՛0yH(6 } BVǶ,E(i` �Dg".)DLcd#EC08ha]L].Z*!�33y* Q"}W4~ F䰓'O***ƌxwQ L.X8 OBAH8!ƳlЀj@[456kؐztlw޵|!YBTq`ړyvz^ۻq˧/|@6;#K,A38d(v'TosUYHR # 2"/+}ssc+B(x+`YXPXGNWS=qut_ڶ8+?/33`#>cFCJ,to=aѺc G kϙ.oeq9kBw>t6q X4FC,�•,FCM@m! VκhԉA&g�,�,x4`\4j,&!K]%TA�"ߑRXcnE6Uy6�<d�5JdfQ`r ų=]D)0f-PR%jLLX"&d$>&ҧb64$EQ bzAjwdegklYYZv"Qlt9DlEs(v[ P0VH[>!a"HQ^GEB"+AIMkyv[\Lb 8s@ g�} XThb=,HH3lt*mY ,@D0R�{\UF0|>VY E-VI&ƄmJRY!EjIHJ`҆&iXi8&ge$MEԘȗSWV}M/5 TMTjQ&S U1R;!d4Qc@οq_4J3N)RK=H:b5}jyFA{KhR%gBՄd tlD"8!SGOemo`I9J Y?E7V (J�5X,b/ W#BlI53"T,PaH#Bo h@Kn [CZ؋!YU+grAO(֠#&A4 '/B=t~7gc{ݎ?=򊙋SqIyHϜ!.uG{GVYBRk4K0pփ[Z^G=߱`!@.V$G'I) &Ti-+,y_ bժASS  2W91C]/:yt/-yW:G4agu4C$<P sd$dД8$5! L_ndĘU[{\TyIXl23գ_yV}b+J<5Ri[{ڳH"8VD<,zzBʶ eϠs�#-I)mMFnrZkɊқ[Ⱦ^hZVHszF0H9$hSٮ�11*SB EfXh-` 쑢,a xMf[_P Я.~_,1V_?'X/ %4lZ2%9L'cRRͩ{g[H"bO](5EDHv(&jtdѢ{5֠u̲۫Ovрf`Pf,">hD[ г`�6z&T=J9&MDL$Ev{;P $5Kc8ػUS1Z31F7ǫPE% <P+ތnEO8f` &ٮa<a<sۗx~Kr`vu%c~ h �&t_btIoIh3.l*=V] d[CǠ$< #'6&~vꀯ(30<X Ǚ'ۤ v�Gi;x-1 ~K M`tQ`$zp-M]$ X<G7ۂJ.$=$F&-*&ĬҌ as^X p_zoC_jG~7.0 e#:$o~. pc`VzDBg_&+g Q"T?N${:qbͻveȈɐ@cUs@ɯx /<oM @+8+E P@4.xJcI-7o}Ȼro&ǯ :ݽoܹ(z5Q 4Y<4`0�HXĺG]T #88#EՈ~~PdI<[}C6}:۷͙;[ <7/B, Zݱcwʿ-XPE_9A:48[tK"xO%ÈS \~x'K8AsL3D?v3f6ۜ>nëgJ-)qNu{=h^˭|ֲ1`e])�`yQ`*^1)"k3g3Y b6aip=AjCsX(rDxN�]+fuQ$x< >gڸb~0(2hKL'4ɖcW}E.ѣUWZ 2;; MҲ2F+YWf@hЇIfP\P%@d>`u<q)}51kOl�U<yA^WRRWx=%3Ey򬙳@6ʒcǎ|'OttOCǶ>ɪg̔ЉWx o^8G!sD'/fן$XޏnݺQFe`LTy鮼Op9#"�r`iM q,cOfmCy"riBF1ؠrA x#y8 ۶m8d`. EWF=`%f6b̒=+g˱TFs+++}`|cm/(t'\`BxL䜘 2/?!ot Č*;N5a1@=Y\%ɰj͔AQƇh"`'em,dJ՝;~FԩO<Xaa�\*k̥֭aÇsem.THVzznQ +8Sw !#ge9ULc^ /y <« :lwZTb <A\5F|a78O @w"7^ /o(-PljJ$E[ 7x#WY)/g"[#F֐xx--$M|?sFm0n޼@F FW\ c$+!e cJGtYovM b( W`l)3y_JɋS*Vzw;rgtgb흩=YνC16tQ`ec1F}6ES=A8A`X\6>_׽{0y"�Ld޼\{c}^wL$폶l@FL!%G :C=^K֩'3gj%^`9) 7xfm݆y|'2QM>D/ߓi|DŽD@>o%e�z ?a1 &ʌ3=>'殸 ")&j|v9|WzUdyD"0H6,'O?ĉtD7y&`-6`  5ܰӺbXc‹2+NL!&r@_BYi5(Z P=t8S&Zv-;Y:ALBQW0yewů(岬GTH#|1,k ZFQ<#._ ԩӞ|+&]OVg#0+ߊ:M,EXU.`Qf5$`9hbL{61EB&\WU'7@9|2N/2jрiO4 ^Gikg=-;\]ޝ}'* #9,[KD&</&"0yɕHIAG$ Y'AOtB[k n`_9r$!H'(SR<W&O!r@ɶ0'1W0Fi)! ^ (�0�&}wihߚ}a ldhXzV]/`Adhj$U )uiY- XJA]uui@e1HSi<Bo5 a={vqݣ3>r0 ,EKi@i#6&, #G & XȘ?~aZ(2Mm(hx*A�.4sQKKҥK*Syӧv˦陙$G=Me){?v Hy )f>@̂A6d7$/|ǂdZv"$X?dĕPHX';UW]EA ^7`|#r # "c�Aބ<IA"2]j",YR c92V{X1. 0D.qKgܢmKwgrǓx_w/Y3G#sh/0Q��yVjғ?ΙL EEtcU& >՗hA M`<3Ӧ͐}+lN<EStx4 )F FbҘHF!S,TLj*Bpص%"ԥ*L xL={4SL؀'xfpdž+_;wC8F"N`1l‹%TgSv*4%lxK z*+M½w1s'UaaE?1��tU0 ǽFXI ;\B'A،(A> g&aG;]PD q ];"Ք@LU0�9("ޑG/; nAaIF- !# ef& e̘Ģ 4QT!LQ(EeXTKLd`f+"eQ.ԧtgx449ZLVQ=6oF*b {wR@ˤI˟NdcvF 1@$FP"#88Eh* DPzfΜvLƏcq׮EL!-GS)8 l#<cS'SNՄsx/Dں`)wZKo=R᳏HkeP#�|Ŧ;K .2 rV^IЀ .ICr_`B0]Lj�)*$XExr=��)5*K=R+�p> &TY^^[Ir`L 4ji8TED>VbɁƣR0=m<FvAw'NF rAo2&\dpfr#'ӶO$۽{7raUC _'ixC>rH-AIL  Jr] ,jX. Lq9h}A)Tee%Kwkg'v#ޱ"r$ұF87pCD"\(/7wݓkKlub%#B"i (qHg4*`MO%l" @`D F|EA(E,6R((ha Dgf(4#辿(,羊̻CPHcM"T}Hdxtc8C%KW \/2TzT=HSO=<tO2ڣŚ3вyklNf5@?}:7t֑C@\{7+26/Lg :ք0H1 t�cƲ u]]Hϳ7&b 0"sY~ĉʘ3X}@cK �駟& b&YT.XIka(u8*"X5"mP`$^E>\ xX4`cAJہM#ũ`_"f10%ģIoX6!4ҌVK(PvEt1) dU=裬Չ xl؊6.j8& zI/1\Q LKvpӟ]knkb3Vd2Fɦ&i1 ph"EfųPkG0Kw1Iի&awٲ+X`&Y,Apo?9H/@LHe*G~%?W7Y<)vSE(YcF{B%$`*A|깄Ks�"gUd_bg%hbHVN[l:e*I"P�O*WY9rr`'4e>y1V4qԀIF/Ti1#>GD1EDFnⱍ7̟rLO?uM7>}}"3, OYeCPԸA Ih  9KNVm߶]j적OR9*QX0r6)vR%rh fu^~b" vgbJEy=e'?Qwy JpϘpƦG>\Ru Y09~YcE,ЈDjm٪h�^+yvaȘBfC͛jTZui^ $cd24Z x_^~ѣ@S 21ζk+Px*5#c ]S --Xeg4G̮o)5F\\Oxeæ͑(&ţvQK6r͒�z! Oc</,8_CԒᶗh^$�a&Rc#oH&oܬw]lUp|UJx'UbaCFC<q "5@KY 3?ZN?Ha@c�b-Ttڴi#M/Iٲe[YD >:qCVDZDbL3&Z<= Np6O/)>S4ŰgWK)GW 5/6˨ڻ _$w_x wz 0Q;_ؓgDh1aMBڅWq9-p5[m6*ޤ1aH58Lfnb[�iQ[\@ձb¡6Z1H:~+Hj877ke=kVȒKID@bZ2*S9I[+Lx0,& G.ر<C O۷;0D4)vDXWC'~ʮYIƆ]6{6a/shLhX �2]OFF-\$d x99-_K|JlTc6s3&ZB<x{Bwj({mYxg")"\rEcy ?b EG"kV߯u2FVXL 4r" AC$Ǔ8XL.6d$`7C׮]˯p &9s֣>9&oy<}%2C&ЀYk%gc;=#F2t\yP OfrRb'͑h$! 9KhLT^ I!C8\QxGUI !۾};k@BX`M� *k5&V4R�?x=dbLaOp6)1U+8<tC)6RuAG@3}b|4o hz0 Gڌ6n0{,s-<GIAtU2& dύq0 !ȴ9p ;m ^ !`A.bj4Κ@8ɧkwlߞtqX}qFK[g=KyAJ!1l"a')0 _{<`~By$ 'xfTɽuyZ^{gEy=ܯ 0` BxDH,r&FSjTԩSoJir,&h<M(6way?k}~^]oY=駟[?^z+>E|!Nqx9CK8$zDB̆QGޜaXQMU.D ^aSZ:I!/E;;lf'W3jq|pMa90x^]BgHavD$QŠp6 &N/S!!}?#oz|I"F83vbFT0.y,Ȼ LsQ7_d9Kb"zozb#/<U˶?׮~]w}ՕWsy2ܬ15_cbq B +Eh\nGf:!V߱00SЊDlBû2S3M^`~bA|.#F- |m[@lP4i7 Q %ĐQ2^`X#XYE!PIP5DމǟwϙSGa vdG"Y3uO|S<HXk׮oR $1 V1$p``my2uF#goϬ={/>nٳr[_U|`*EӞpUЇ>ĩM6i/Tb5voҗD M]w/*0 dr'3Zm@xIE�QD=X>BX \'b"ɷgJt}ޏ'{㥙0 $20ccc 7-WG `H.KoA;Xl\^:ۖ ;Af(N X:ַP2,T7*2¡+6VbKx,y#)sg/\ykVrC[o8{7q.q8U"] IX# BRUU<2Do}VL k8LC24�nJ,Ebͅ"͚d5U(Fһb0xi2c#%q8| l3%J~+_gZcYN&&1RRpBUYm 3$fYxa&ucab*3$_r/x7o{뎹뗛򶋯sMvK`Ą?�멯~cQC-0wgDJHN ##`X|bZZ>EPJHqXpQ$l-->h Ll6ȸmadFG>"X{AWš DXVXX+nJqt$] q. @0KeKA_Ix "e\YfȸԅѫKTmo 6t50-1 ܘBLTv[1 36FvKH`qx2!9vv#?>{ܹoKλCyC5K:bFR@}~F-J9Oqt 5 2d%9$-g2HfD&R`$02C GE+[�3]Cz&C[XrE|xFfZ`N@N}B E2b #b)A k~V^PQ0BxM0Ac@mzO�4{ =c\DA-yEC^H*ާ% )-1Kc'wӷ?Vm}ã;4C;;ix`(f�?� %Ez瓳�tȁUuUUs%B50�줖$cf"5\``45eNA+,~YS�:^ E:FS�fKz`y$uqFVhE,C堔6IC8�ʡF3 u"�Ы^M'"LaH0x{QG^ 4F3 RoLV|~[%/'v3_}肳f?稅xg:N+cUkҨrR4ʄP uń(`TY2)˶^ZVBU$P<0lc^x!_a.AFh ao?�@2�?{凂,1Zn% T͂^ a4bM9^zeaBU*_KGl(!kCmFKe cEBj0 zb<;(vIF@ 7 ~�{<F"np Ϡ,0\u�hTI F4h�Lb 1\{ʹX—uPĦ+sf7>+ƀj=2WIBM#YfƘޚL!%*7k"V2F"8$aqeg](ْdf4O?`{R_Xa1];ErR""&̆|vIh AM1nٳi7S)\Α Zl ќM\@C"c�(<¥pC`$!sd SQ <8Tb _τ9> ̞.ӟ4ۢ`0IFk,$ppggV I/M9=9=ľ2Ҵnξ(�r=CN`a3I?\O2:|$Y&DHK,ס|)mC6mM( T+L!qnp)5nf;hw<asF-K2!#(0WSdf,Ƭ@NNαsy)rek 2 bҬ  drr*A\ذaKV08�/a"-`�fpӆD 5_7e;S w oB [K^W %Wt/c!$e]-0Ǹl𔍾$$0rqO$BQQ TGw�0CylO\ WƘ)h,anJtdUTnJUDNVݙD#pfChĞ]aK /KH5 yibyV=}X2:,Є,+J �!`JV@kJ˝g +0 tL?T򘮚dnpryp'v0? Qm6 X^Yabm/Xꡈ.D5WȵEn q $qx"NbI|q 0"<C䂘i5B0l6[<~xD"dFFŵ74̣J0�z8Aзn,1YSpl@bM�I4Bzz#X#3 @!hKx #!AVǘ"_a .Ë�A-aah�,4,'PXpK4S+2)&ӕG.ڜ9x1k.8=<vAw"LBL k+~c7rlFf3Ee3ZE,$tICx23o=2n""2E5b%k ` Qp#! 4i!|LFx,Z|FS $0y "�]hlE-V-Rz (t@A�mZ =ȣh<o*(4q4@;w  S+>g2o1 cb{Md.%RnvZlp'u D0b@x07@2AY,1N�* 0(rc$)I5?4j sp2h!vVIԢKHM=ƙ U,Xha90<8�!T#w`',3zڋ zpQB X³r~`|ta9UXEgU@rJ 9՚[n>uj?u;saeu=wQ,i; ϫ X=ȧuK|RH,dR FN ^iP4.PXN6?P\~"^�yY* 1 Czk @ZI`{B̊x�z*`XS@C۸sg3F$̀ 4AB ;AAUHD@B 7 jˊ@ju̠HX�3aɉ؃X1o F(4䠈")P%Ѓ.`H0� h9b`$X0R"iHȽi6JTc E)"\ _D8, 0<袍;vl{o^8ʫf͟7[7s:?(BJX.T˷r&JNVW Ɂ`- )F�V5:�F F)E ;!WHbbxq$ P`;9,} J˸:X,XF326<eӄbTIIF�9BL�) HZ(z59+X˶&FPkdRKN ^ S}b.iT)1`o$3صs=:$_W{v|ꅇ-^8U'j@O9,,'/OZpʵ Op,@ص,vxqXT(q.ώx@SKۑIϑI;E1$�NP3aҠd+-W<o!R4b+g@ @# J!%ª~k 0 nQ<#>75Ċ =x2؉G?굧n뽯:n]/N;Evs4 QB^*7|Yك#t2b 9C"xqvDh.ZV|-Hv?gێXVg$hHe%yؘMߴ.@: sy0m ŨS2<E =Av)ȉ_O?~Y޶uf6vnUK @VQqI| D+04,׿umzCII<14 AR Ո ~8eJ |(*l5[ס0` +Vq7`NnDah9{X/L:}ُmڱɕ-'dI܋}:b cq6l@|!BiX*}ԁu#H-Ā5�wd K,߰Z܂4"UB'~Vx{J2À[Z&I5LV5kRݻHv2Cp< 09m}|sx#y];f7lJB  '¾/"Ta?&hh"fAF-!'le$5h8h}HM-n*,9!C+e9bٷ=N%hZ*2>Hoס2gƒ{EOu=8l׶M +o�n'p'},#92 !BYYPl]I4�i +B`d-.r"Dt3p:/fc2=`ITet<<GuB-KV9s=v;߼78º{m;DLUD%"t@*(AB[NQ Ex1x $Q<,#4W@0#AM6 07)#`f7ɰ0ՠi 'vs N[aqzP#1eK,~`o߹经hêx;= _WkXI <0Uh hdd @%ÒsT4;Y@Mҍ*-$)lL )EtpfF#Fͪ4w!l.sټ;O0#V,\d 50.s)0 8Ps/U#s]3WkII(`M` N&LY#6&ALbDSŞ:{KcN2]5"j<0|[>`,"#`>%TZj$RJAqQ edn IeioC0RA!]X"0Ta731I2춼iea o5Vz(YPM)lHuX\@z@0"T"ڊh,L\Zy#BΟ=^`[D(`ܷ3,h%2=/qԐsjF ʛ֞C@WDF -I% X10ū #sC.f5⦶xz`Kճtو8ZM3(HsÇ:ZNk*f dt+#`1I VPΔixd">?]z,{#T =(qav}v(n=0XԟDit쐁Jۑ-)Q$/wƵ^瘻۫1Jo,jk"­^AP |䌏l0ٴzYlL`_$v:.)lRAW"%-4|ų׿kk| $F#T)L'jԙ�"~-/aag}704|�7y/*)F>ryf^rX_|A[:#AB:`$~ҥ2`KX}J,*L9WyJauYL_Q|+QiEe|+LLPyҢ65ZIzL%6( 񎘅,NS=E .x@co2hNf}iځXU=)O_?̗X[A^[2 cHmnЎpmذn ضcxR/ju˥:!>#]n Y/~rZC�2|*M~p% Ć0` *J9UY~nDHr;b>(ui_E)Mk/1 "`b=dde0 gE0RcmEᷡ%e\ _|m|XOO3m=0phʰ"TWO|K.1-(@4[ ynGGS.brF+Vze2 5 %42ZmZ > Ա;82GKl.a`Cl 2_5Ҭ><TSNS[�Sɯ Ó"z ߮wa QYga:}6Ce1?}#`7`La-чe ~"FL%^7vribivߧ ?WAriz%2Ù>Yچ@#>!JHIu=vhy4 s7 w­ �VjᴮZI榚-M(�>uk׉t"8؆Qb,KP%,ʹN=S(b=�mx DT?lAg�Sz`E)?1|8a#E/sZ b`0[Q&Gb!yi% zM[*~7h #fy6_*R:dQ`kҝDRXrnԿtEOI$RѰ0U<}tt8ѿ-eJh`+ Xi~MJ#E}XЛC톩lXӛ@6,I2س{{8ޒXZ@??"Hv+.,"=�?Q(z󴳖CӼƲ^)\-M<`#ր@eL`0w,`(H%΂SU=8| M>Qf ߈FygZWΞ5;kKdx'2i1/,ifEf#ɦctk _?f4 Q`t9 XFh:V(#@"qڨ, 9q^l,Ƥ-}, zg Hl{m˰e� 7=/7w^am,}}@.ŝ^ k{`.g_0Yye!22ZF'Y8ijMXޑMfځNAh,ե=2U'0zBC 3ZUMg (blD D1 XK4*_Pz1 H688N*i+aLW-X�{88:"whx S#Ƭy@9O@f~$cM96<(@q$tkK̮,yQy9mFbU ˤdcrjvሧ8$b&pgN38S[v"|'p}K29“OvM^r;<(eg9gL&B|g!$K(19XaX]&oyc€-U/E5<k`pr|< =``rAo6mN4/,ּsW<rrdCB򠖢U>e!Fޞg05\۾{4 פ{1&+ IELꪔ5]Y̒Ited>}r|Maf,hH{Nh#~0`ɒA< aCb:L!)i.ȘBEuاhRQ_ VR$Zz d2 k'd,q2/>4.êܤԒ !^<c�_[M!݀@/BEbx�6K2L2F(ɩQkǤW9 g]o^zM&9ÀU(DP+ S |'lWD{V_ϟ^hBt5WRLaQ۹cEP,"8%^#)A` i@)|¥1`2 Ⱦn 2jmBxG1`=>BBBkbxc?]M7^�k0#Qx`5 -AȌ� � pd p{galR=9ÀR٘ܢ &!:js 3̟�\p9{Y{4 it{N׫b$F+|?s9]*3;"x1qFޠ+Yy!JS5X$;9wzv Txъ .ATfEj`e%z+?f y 90w.K"|ail!~ARRM/K(VzT|{_72;lE,JDh`~�`7y__l$THUv<LQlӌXAm۾/lذk֭y �Ίy3yKEfpP lMF*_;$`ɕdZ3 ʫ( ފπkxhi�{pF95H Pto %f(3oIOexXTk/DXUŐͷ$7}]2 SUmjdi3l<+9sQri"(\aIJe)U1z/Fѿh[?qў=w>p9'ݽ-!kh̤E[A, %jjRY,SU䘡(@C/l8?_|A=z6_81&2́րH&*CQ,^Zd'ԛXY2NHt,Qn<&ik'n.i|$ cB<,QQ&�D)� jI3;X�t5d$l< 2 jm%*7u/X;o& ]]0疰+}:+ހ8 6 HuBާB%Ո4ФƂ1PqF-)UV;13| z|OL{i2$|"o*5%~,k-~;:"0,c^،JGXQv /xz9jD[ݼ+.+iQ"c4ZAַ05W:'ws3K f"33ə"3Eo_T#Xp 5Hiƴl8Na-fLϚO 0Ƙ)S1,z3mnKb LW] 5e9Yv jq &4 o]r `VfSŕj2̀X&8#T{e,X}6ёV^}<o-?|gm϶[<g:5kv&"pΊ|&#S�u/^0~: ~>L7ф)q8 W @YXGA'NnN8@*$,bÆ @5)X$L vQl^-A#Wnrw]zwy BcBXY ib +TPK$J(9lyi:yILc@֚&;([t)kNA61=o5ق`߾ysuwȝ ?zS,x&{,zX]XK 83<aIYK%z.6urȄі ;fNk48cKRfS�}f6kj72Tz'i"9d(=$Mt Z Ҍgye˲[~=>i~%x\~=|EW 'ar�KV3 |}aB7?h ʈ)"ч,B^ˀ < 5!Y ާ^Jt% 3#uV`rUKY؀βn 29exC Nav;6<y q摩(!#AB R%>чtIŘP|_KX9 XiE Rlk%%VSq2pMUbչշNBkf`mb_ҞXX4>-A.pHߖ83p&>  ;L:B9aBzˆnM|F*+~XNj, "4qC(fw03KP։4;M%- <"xON1wcZfH”L7cRqVi32y#e �ٟ/dNɮ3!fd\uNVd3K2+4%0#ŤUfL5+3ZxDuڟ]&;+'8$lȌHnxM3t7 6c)Wc?sac1]J1.<#C&`d{>(b|& X^Fo4 {݄>4i=3R?k#2ػvڕM_֭fQ҈)i Sɡ2EForߤ7LӢї6C,bj.P.\}ka=ÝK/f[n>N]:"siFiJ,yh)TA| 8dN@aH!GY<pݹse4#)dLVN{#+}b|bǎ .-lIsa >SGt $ւ$T[M.�51sjVq?ᘣfj�y?u 68~Q8p 2{~ >z?,#2z~Ǩ3$MG}m$Jlr ;F`vP !ezúc nEĬ9s沐7v}KOa�`3wd/kG;y��3d(X1uz1 3kpS<` hHXwt"=o(&!A�y |知m SK l: #43fZvYҔ;:6`1� ˂C;S<ay`ɛzBun<3-A|b[ݠtc4T6^*^H)daU+-qׂU?f?}ÇgvzϲZh=y*;VPv8V.]Z8 *tJ/%`aU75S j`RKKz@bVSB|08%TUa;r/|ᱵG~aYقt7h֠OZaJBw^f}{Ϯ: Um͈٠OcDoКAA�#G7bL}wXeАTӎ50oE�r� 1` 6!E3FĒ qHl U/1/+eN 1y*?u‹/1f,m~r۶KV6LBWJEӱ 'W�K_  6f_s; ^ $6;֏ؚaJL]H>9rH2?V*蹼 'Y sޚ/g7 %<\A7hW`,658OxAow0]+TÈ k0H1m`o\-}Z&*R0Y& mIƒ_!bƛb$m`2%Q23MlOk5 S U0M_h�wM"Ͼ7�ba�뻆c i2+Xrh7roH4kfT"@zA@Sf`T^+ϨY=#5Hz�F93.CH^4^a}ptP_>e]-3.W:S@SIi7`Y.AFe5 fX1mk7`&yY$eӧ|ԁ;Y# d�oŀcO�QSOロO4{߃-KzY}YgůR&~83|o`ձ bs<^:XRyeXe {z83>�O3;VX|Љ}-b??+ӏQXBi=z�))f|p见a?J}K_ⱱ1>b칁~h=Е$X<Еq-t,/)#0<+XXqC{ZN֤Uƕrhi7`t%ĎX%}2:f'rE34H@8<:2,3>+JX"e?&jN#"% WC .j-q+FdHLmX�P 0`QgiH"#YcDSOky#p҆\!1G}CPWr%Pf`Î$k1teAb !ZB5lk43,X3^(BpDAmϑƌH0oYU!}T gxIv*1'AuhdV-l8HYPh=f& aEmbIaK<Ӹ%ؠAwp02Cd8˴` ]aXVBtè\g׈' p= yDry m[r%K<}#0NQ+ʕ+=O2ThNG6kûKVjDW%$ pa,)E 8,�/%hoCRņk-gRdxkE㷄i!,p& F-2PeX ]#Klcba m=U X`w ( JՂ[6my0.j5݀L))c֔qK0qp7CԱnbw;,¶&.l*qE\rɷ->d-ZT7b\b2G)5s1[n}7K Wh[8<CDW ;VWbb `W=K-6J\7z@)+gSdԪh!V~͛_6V!ol=z@Q{ZYYPx5\C"`q<dgB?:t8 NAL5@ȃV!'�#€U^�VK{^xqٲyjFd쾐m!QyH53Jf,3D n4C5cu)z$BG! V'TF��Y,_,8aD d^!- l�4KɅ1|nɸa>.i&@c|QQLnMظh2\LKlehdC`@|K0�c 1%xT1@Tf7R X�ȅ$x$*T&&̣6`~'jWZHb6#8$$` Ya.iqU>&a2Zkldr*,˿NΝ;9Q &5L 6l߾c0z]x-۠%hk~-};vUw0a X' W$ WX)bQ=`:B*5DINC$޹kڵk.m7yfv #jX2iVf(A`ca~ӈ9WN yM^3Gm5k֘ ]@ BDa+s\0~&4_PHL>pbJ \r}fCwQ~ߧ5XQU tK6 ' Yӭep�P 8�u�4ÀQ4A~>2%,8UӎL�ꫯ?3wq0AbwAYW<*OPU:V8GPbA΋.^[ZbNG ʢb!B؞fn's o{ Wن@@,X-Y!zy�g?w0kTfvk%Zq裏ԧ>GyNWs*]=|hPjƏam+K:3q]BZ_4|:C aG;QsɼZfG AC6`!zCE-aڔt(�v܉SgɗDgdfCju.m-Ns> 6hT`I,ZCJ쮁Pґ Gr@ef %ZO>K^&a]#H/~0瘛2W?Fb5l)g-A5Oؓի9XQxIAOad kgyJ̫9cn!eg?ZƐ8!߱ס+V07  jДpݿk.u`,>H'鹡YPa'߭?W;43QMbPV?Cp!aj2ee!-*wPFVr"Q`̣iʅ/h(3ϛWOŸBㆀ ,!^4Cw/e*p $ȆP%o`t%T,Gc]Cx܄+Q Lm,a,\$4.aZcl1,jpv%V8)Hz[K X WX'Q6b|BU$Qꋣ<+gWs? ÁTn`jҦ�k@om{AUGMWe!<cwkڵbPYxWĭZH ձ;`i 7Y?׿un [hZ8h<*,$%(/G?7a„۪,,ٴ0`ūF~_<O=wX9(lpz=0߱E3]b%1kӦMoy=DM4dCLCT>KA3qc&3>Q4; h L0x {€eqYp/!!3G Q+b(XB|W|;s$ !f}@kA>%~`S<� SU$X1 XV�M1, :sc*ZgKj[zzfe~5gJc]K8XTa:8`` ̼||_ٷag zAB5~2Z?2Q\HX7g \rbfAA+X5ysr^+ȌQhh%ON,f$$5I0Z4\ OwQ�e>O,E /ԑI\x3_jᡤiC3o 2KMi7t<We˚3:gjif(C$|"):#B7RrFiLd?H.a V?>\Y�~UE T,2",a,6h f` h </JZ1?"dDoxK4l&oX=Up݋ 0<{CA!Ȏei7`pd yH2&M*dt0W7I{8Kp`J NQfsLSi=zŸSDNѪべs9|_=sWsYKz�4#`U N@ke- CB}5'p][l=p`{R< V\,#Z|ʌz@( de eUeCƪPw_O<7m,o5̲!5fHi7`T1 fXћ7)qf1a7do@Ǧ;"PoKoUeꍑA"駟~)p36E]$T� _&ʫQAKUh!R7uXgtޱi�fI0Hg$J.: Xe|2(mv:Xpq!dBg;1wċ_3k2c$g?$Nlʁi{?p .f]%(/xMf&] Nb,D` gG+[i8$$`3&Mu4!&(ǔ„P1S[gj |͙ÌxX4;+Gsg70?` XӠ?4YcIK4/ iUpm|5$ W=đi "À/3<G05of׬]hQ,3XSWavFF+|Ҹ%x3Aو1 3X T&PlT)8د\1C@Ǽ2VVĆ R!�reS3.'F{޼XB%Y9 ]3RY3l+ѓ[T}[{DmC€Jmh.A三4̹K%%^SH/f�%v@0˘;fS K=HwyLcRX0KB0"gymn1p9uՙ3jTgg~|yN*ݲtJeV)ή-5JYIѢm�6x 0i0 hrLW J(/D^Wl(b4&� EfH0F!Lފx2^…@Lo H aLѫJ=`={h|Y>:8(!䓭۟=RFkc%e@ '#`�qwڃ@끄kċ~wNP\ @9}S֦Ec/;p/--h=нbL4z^[1 Oo= jLpFvؖ-[PT/h_j=pyIʭ̪U4Ii-0 X cq/}GR,-:OKwK˜sOhd3$pJI^9,ܿa2M})ŅUկ~5/43\ҹ+] cy,  Aoמ<nw:jaX+{`#ИJxÈ@2`0\y81 e$d$�$Ha@@(aAr.6Zz^KP$(73Z{C;%�kF#[pZ],Bk!I8vJO:$@̣8#X"!c_^Z!]y~' d u7 ~'1Sа_0RU LGB[0?p*rUXO?4b|$a~ U\h5945d� hRJ jZԢIK(=x8/Uv$@@#pґ�(-JUe3"ƇLn%H%$C'nГdr?;+͖4ؼ7x%TK4cj J`z0 dMAUGN39gt-dtc4@ E#^Z`֔z�pcfOq'wLi7L@ei=P`bvD>%b(B$AӃ{|O{76xjgvdDY#E_#d1E$]?Ӄ`/4<6o|?яMx2![`XmKDDb5~y,r `r˶m )+ Ͽ}Oi>83Ww+7\͛qf?fO޻Mt7rԾ4?m2x顇Q2hix`s㖰1)Kx<3E77oQc=Jxs?mkVqōV,\O~LoH_\7tq/o{Ĭ}U:rͺno)}JC @Z{p>3DVXwm=0ŵ]fNBn X2M"hUp1'٥{g/>|銗'1+7_}3yɟgv~G߾{NYa=?u٧:vՒ-mm+hw&~qK/]\oo;s%򗿤 -8=;Js% =+6w`L6e헿߸_p[:W[]0oۏ?~l=t wx=mͫ_Ğ+מdVuªW,^K.a[3[gu__qk_ښ5kַ{el=0^9U`n78 Bp͵azqC8[|r#a/g:,N<r/Z4o+[tΆS8ڰlђUn^|ɲ_|سw^K#<}J&`P#} FBZ Qd!+XlA^t-˥իWX>dr@v1SI_&(=o\~WO{+^(/Xʥ+'?_b)U~ޗ[bѲ_syBl_;۫Ɓ4}+p bǫ-hzlF7hPzC\˾EΥpo4˞s{onLlϟp 5*g,,<S\qCVUVX09jˌg}+fh,6["S3y z)||@­33XʈUV�\� 6;)a0(c�`7A5y 1lAF-q7h%upXC=Ҽ9YQD( ъZ$'ZePN<fyL'|<0a#h#s`Ix f0`hgH&i_(0&enX lmc46(f1$!:3 4oq+y0I;D&͋ bL!{1zi7nȚ^`BDZƲZU :)&G r_XBi=0"i`lȌȎU{&c 3VԈ% lq X}oJq~%DUfo!I#[ gl�1sU²dn\0-1ޞ4Z ͕+2/z1t8ASGi*F!&6 �]xeLJb#�oqJ ",-0`Μ` �=i&M%q�DCDH Ib l.D4qI؃ =6:6e =#0`t`Ά XKMQLagTci,nU~ˉb_p`oYczk8$+J+ZrИjMBU͜Wdy/ɛ Ba8c賳-Ψl94wn; S �qS` Ñ%C"Ҙe$aIVT yhEKWNO/ມPd={ِ hzd�+F.WH`$BBF L/l@@cp@O<% `^+!YGj@<裄?Tg d&GժVk/QyccX0?;p 23r#y"/a0}wؑ]=Jng*dQSgl j*X&B$'-D4V V` V@VR };9ŌR$̈M1 2xɏ }ccc\>~8yŁ{8(#/E/�s믻W\%(T.=K/2`ߥ8ӷܿQ'|n'N]7KyiQH&K`OE9Vp,풀+x\؃.z';5+Y&vr@$H9S@"`0BU kA$ F|H?9zEUN1PD"Ȧ7hNULBdk@`>18/|8E{ppyb^4vΛ?Ͼmm -dq4;w^3dmÆ  fC!~']xg𕇿 oxg_ua޺u+ᵎ(h ? E±V5C�."bVZ3`~_Xfxx㍷~;8|'? R|''[Qd3jѨ(ey\xchpQoyjcœ8<05}{BVc=Ƥ$Ҁ"XCW*= xE_?}'b>b}_BvL-G林0cpX[5w"[DI2!)ĊE: k C q3@1ţ`ԩi^-yv;.K-exĪbz �Dַ\o|f-K#A b`U7$k`D25F)(;?# YF'q |{-[s9~D{wܱSC؊{4{I~a6gso  : F3&SbQ̐l7,\0L%/'!+,cDXa#K{^eD##7�*̷ 2{N� T`_J9֭cˇōwy'q�c~~}ʵ ۘeL.D{܃* ( &<_z$S :8!馛fF¢T*,TH`1辎Q\[F-^ pۏp4/gF]{GX|q`ԲFxvWh ?q=k.H7Wt1xgg1coEPcDvF*w⸎Z#+<a;D xX&Xaąޭmݴqς6Yk֬ 1 ?Bŋa7qUXB&+JtQ[,GLF2 (5Xk,bu?]_~ze*`nn0Gk;u4E&;�}:5\* mL!0�`W`Tj}UGHux�d& (ˊeo;�p8 'MoRvmROy(@$g,t\H˫2 ϘE(ǙE|pϪZ|[Ҋ�ؾ3B 2 izfk`gx҉>9d#iE]`d4dr($D;xX^11[$bi"-EF•W]IӾ寜zک\L"ِP!X(.+,eMF뮻c5,%W' cKȴ5I0E˰PCg2�2%:R}S i"кm|l%"{\K*nY1 Y&�Xկ~dW I~F2p,x;&u]U7`C*Wǘ^~rv\ Dd(!9sfnha<2`+lBCu{] lB*0,h�{SH-T3Qoӏ\ğe$& ".`,,qGӟٕ)ücߓ ̺3*uahPDŽ$c0`y:DKTN%ǕC魶\@, @4 w-o^z�{~h,*!o~3ŕ\vxQW]h+< :j U >#�RA:/V䜜G�t[,e 9J``6눂yEdbG#ͪ5TLSK` nHw: ._$"ܦ+[oe&B|IJ{% \04AcEfm� *H#fR9M )4.&= h:>cldT1 Eԑk\ &@9\`u4wQ4zL]�C�:`z=WiRA%KY[qfl֬yzu?H3텀Dq?e4:d!\P( qcJWp IוFXHt1f}c�h ZL� `]t+;>= �$$Q LR5� 9"*X�9I^Ô.Ĭg4"+etP @$p�e 1θB2{ X{vX|-ʼ͵-_[ȷ_O7݊*?H\2YsK ^ƫ ̨c0$Dɓ_$0҈ S|,T9< 6 o �ekJ:94ct_ (QddbbH F V`$VM%J$$`4/KE!$F�R삥e6 Bw0&#L0*RU}'G -`j2jZ5hx`^{-b$GK4Wh 0D.f&Ea$!i^ #;}Xi7yA#*o`Hׂ*#Pn!N*O&W�:Z l3ND19P @mcg4 )i^lha#�0�+z^րB! mp=!( «J2b%01DLnH R4<2E`d1�!X ȠUgB@]Flܪ vz + ) H~`1 ZrB$b Yt2"G+-faO<Af c�%[p> ]p)4 *q!v$8HQ !-+H EV-i!>L�dV J#V"p$,:.+0Id{Lz�e|zcԛ~4-�>1SҘFKЫ Ʊ l!x<y S#�;4C$by [pr}☒2 `l[Q�y4"8 P�ﵨ6P "lc8`fy`,l!  �{F=[hL�a,O E*|a€%:[,1@d`�0؅G+1Ly=[h�/ ,l9b4\b~0Ap1�l"*Y>+j=0Q,sRZT%X1L)U%Z$9:!A`4f!M0!C`4ѷ`%<Di(z0$@lj@ W 1SA7:Fc( q@� @ l.,ȍF�y|iHi$4K@@D$Z@W, �T`_2ՆI{"`3,H0啇@)z)HMX#6$\Qd 'H  TxH`Z^AfxS؃m C<A"!l9@h%3D 3LPA `A"–`$.` 6-A}1$ &$5| TRu% 6| Qx_, ف o@@PXkVE>(|WEpހN^y@0y:$,bSh .BRT(C*�UZ C 6F(|Q \ե )X\Fq\b [L�a[NC v^EdU"jPE2f`x܊�bbEW1Z-z(x@BdANQ B@x .L+, @Z|)$OS+d5BJ~2)EuLSK1 >i-Zח* $ EK`bTk4>P>#A(aI7J!uTTj$TA *34fD|OCϑo*T]Ab�s5J ^x CĀpgрkl 4Z3gI6@@SI[x=6JL-1 1 ,=&!ӪT,޳bk^hh }En@ odF`U@ x o@@UL Ė፬(ʈ ol $ (1 * 1XUAʀCJZP TL0QH!dLf48LU&� cz+T{+Vj$MoU XX?A�9-v 3fRI4L<O p"%ͪLx!б)0$ 3X@dq-h=0RHG_kjHPcʚEBH㥧4R@ 4]2v#+$,PaOh13LK@ !&AE EcZDbB' LcBB{3dX !U $t[<3ʴaVP$$\`|j В .^!B/- Xz5Ջ>UkckV%<E@*#�o,!כj,1`Ztū=nLE@YFSI`2`0+VO@w&$ �o!e `4Ңn5L=FSh1z F6WLfU@KRG2<d@H[l=z`=@ѤN2|=, MǠtmڬ@W(]nuǧӤq-Uk9c9(J/ ?AjkPغ�Y)@caq8Z U{df !N"Xj{�Zay}2`,-zAFVX(<FύF\IȯYLQUL`x\IFMl,c LP,'Eh*Ybb!Fy2Ki1  ?0Vڔ&^)2*!mUjz``5dZmu-c@V_={\e endstream endobj 4 0 obj <</Length 26/Filter/FlateDecode>> stream x310P�A#K0i�7� endstream endobj 5 0 obj <</Type/Pages/Kids[1 0 R]/Count 1>> endobj xref 0 6 0000000000 65535 f 0000000015 00000 n 0000000142 00000 n 0000000187 00000 n 0000052378 00000 n 0000052471 00000 n trailer <</Size 6/Root 2 0 R/ID[<d8b63467f3d06af8bf5df94ea9ea30b6><d8b63467f3d06af8bf5df94ea9ea30b6>]>> startxref 52522 %%EOF ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/manualimages/bez.pdf���������������������������������������������������������������������0000664�0001750�0001750�00000001043�14771516640�015045� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%PDF-2.0 % 1 0 obj <</Type/Catalog/Pages 2 0 R>> endobj 2 0 obj <</Type/Pages/Kids[3 0 R]/Count 1>> endobj 3 0 obj <</Type/Page/Parent 2 0 R/Resources<<>>/MediaBox[0 0 595.2765 841.89105]/Contents[4 0 R]>> endobj 4 0 obj <</Length 29/Filter/FlateDecode>> stream x340P0\ i 1'+�� endstream endobj xref 0 5 0000000000 65535 f 0000000015 00000 n 0000000060 00000 n 0000000111 00000 n 0000000217 00000 n trailer <</Size 5/Root 1 0 R/ID[<eb6cbcdef5a39523f5e6afb96c002fe2><eb6cbcdef5a39523f5e6afb96c002fe2>]>> startxref 313 %%EOF ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/manualimages/line.pdf��������������������������������������������������������������������0000664�0001750�0001750�00000001043�14771516640�015214� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%PDF-2.0 % 1 0 obj <</Type/Catalog/Pages 2 0 R>> endobj 2 0 obj <</Type/Pages/Kids[3 0 R]/Count 1>> endobj 3 0 obj <</Type/Page/Parent 2 0 R/Resources<<>>/MediaBox[0 0 595.2765 841.89105]/Contents[4 0 R]>> endobj 4 0 obj <</Length 29/Filter/FlateDecode>> stream x340P0\ 9`P�ld endstream endobj xref 0 5 0000000000 65535 f 0000000015 00000 n 0000000060 00000 n 0000000111 00000 n 0000000217 00000 n trailer <</Size 5/Root 1 0 R/ID[<0defecd6212fca8fbcfd5f776ee1739a><0defecd6212fca8fbcfd5f776ee1739a>]>> startxref 313 %%EOF ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/manualimages/fill.pdf��������������������������������������������������������������������0000664�0001750�0001750�00000001043�14771516640�015213� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%PDF-2.0 % 1 0 obj <</Type/Catalog/Pages 2 0 R>> endobj 2 0 obj <</Type/Pages/Kids[3 0 R]/Count 1>> endobj 3 0 obj <</Type/Page/Parent 2 0 R/Resources<<>>/MediaBox[0 0 595.2765 841.89105]/Contents[4 0 R]>> endobj 4 0 obj <</Length 29/Filter/FlateDecode>> stream x340P0\ 9`PH�lw endstream endobj xref 0 5 0000000000 65535 f 0000000015 00000 n 0000000060 00000 n 0000000111 00000 n 0000000217 00000 n trailer <</Size 5/Root 1 0 R/ID[<e40612991deaf8b0363f188ba0f57e93><e40612991deaf8b0363f188ba0f57e93>]>> startxref 313 %%EOF ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/manualimages/capjoins.pdf����������������������������������������������������������������0000664�0001750�0001750�00000001043�14771516640�016073� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%PDF-2.0 % 1 0 obj <</Type/Catalog/Pages 2 0 R>> endobj 2 0 obj <</Type/Pages/Kids[3 0 R]/Count 1>> endobj 3 0 obj <</Type/Page/Parent 2 0 R/Resources<<>>/MediaBox[0 0 595.2765 841.89105]/Contents[4 0 R]>> endobj 4 0 obj <</Length 48>> stream 100 100 m 1 j 1 J 1 M 40 w 200 200 l 220 100 l S endstream endobj xref 0 5 0000000000 65535 f 0000000015 00000 n 0000000060 00000 n 0000000111 00000 n 0000000217 00000 n trailer <</Size 5/Root 1 0 R/ID[<d15fe412eeb61095b867c18813f4c08a><d15fe412eeb61095b867c18813f4c08a>]>> startxref 313 %%EOF ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/cpdfpagelabels.mli�����������������������������������������������������������������������0000664�0001750�0001750�00000000233�14771516640�014566� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(** Page labels *) (** Add page labels. *) val add_page_labels : Pdf.t -> bool -> Pdfpagelabels.labelstyle -> string option -> int -> int list -> unit ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/�������������������������������������������������������������������������������0000775�0001750�0001750�00000000000�14771516640�013135� 5����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/javascriptsplits/��������������������������������������������������������������0000775�0001750�0001750�00000000000�14771516640�016542� 5����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/javascriptsplits/cm1.tex�������������������������������������������������������0000664�0001750�0001750�00000000150�14771516640�017740� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf.js: JavaScript interface to the cpdf PDF tools =================================================== ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/javascriptsplits/c08.tex�������������������������������������������������������0000664�0001750�0001750�00000000035�14771516640�017654� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// CHAPTER 7. Presentations ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/javascriptsplits/c18.tex�������������������������������������������������������0000664�0001750�0001750�00000003473�14771516640�017666� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// CHAPTER 17. Creating new PDFs /** Creates a blank document with pages of the given width (in points), height (in points), and number of pages. @arg {number} w page width @arg {number} h page height @arg {number} number of pages @return {pdf} PDF document */ function blankDocument(w, h, pages) {} /** Makes a blank document given a page size and number of pages. @arg {"paper size"} papersize paper size @arg {number} pages number of pages @return {pdf} PDF document */ function blankDocumentPaper(papersize, pages) {} /** Typesets a UTF8 text file ragged right on a page of size w * h in points in the given font and font size. @arg {number} w page width @arg {number} h page height @arg {font} font font @arg {number} fontsize font size @arg {string} filename file name @result {pdf} PDF document */ function textToPDF(w, h, font, fontsize, filename) {} /** Typesets a UTF8 text file ragged right on a page of size w * h in points in the given font and font size. @arg {number} w page width @arg {number} h page height @arg {font} font font @arg {number} fontsize font size @arg {Uint8Array} data text @result {pdf} PDF document */ function textToPDFMemory(w, h, font, fontsize, data) {} /** Typesets a UTF8 text file ragged right on a page of the given size in the given font and font size. @arg {"paper size"} papersize paper size @arg {font} font font @arg {number} fontsize font size @arg {string} filename file name @result {pdf} PDF document */ function textToPDFPaper(papersize, font, fontsize, filename) {} /** Typesets a UTF8 text file ragged right on a page of the given size in the given font and font size. @arg {"paper size"} papersize paper size @arg {font} font font @arg {number} fontsize font size @arg {Uint8Array} data text @result {pdf} PDF document */ function textToPDFPaperMemory(papersize, font, fontsize, data) {} �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/javascriptsplits/c07.tex�������������������������������������������������������0000664�0001750�0001750�00000005532�14771516640�017662� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// CHAPTER 6. Bookmarks /** Starts the bookmark retrieval process for a given PDF. @arg {pdf} pdf PDF document */ function startGetBookmarkInfo(pdf) {} /** Gets the number of bookmarks for the PDF given to startGetBookmarkInfo. @return {number} number of bookmarks */ function numberBookmarks() {} /** Gets the bookmark level for the given bookmark (0...(n - 1)). @arg {number} n serial number @return {number} bookmark level */ function getBookmarkLevel(n) {} /** Gets the bookmark target page for the given PDF (which must be the same as the PDF passed to startSetBookmarkInfo) and bookmark (0...(n - 1)). @arg {pdf} pdf PDF document @arg {number} n serial number @return {number} bookmark page */ function getBookmarkPage(pdf, n) {} /** Returns the text of bookmark (0...(n - 1)). @arg {number} n serial number @return {string} bookmark text */ function getBookmarkText(n) {} /** True if the bookmark is open. @arg {number} n serial number @return {boolean} open status */ function getBookmarkOpenStatus(n) {} /** Ends the bookmark retrieval process, cleaning up. */ function endGetBookmarkInfo() {} /** Starts the bookmark setting process for n bookmarks. @arg {number} n number of bookmarks required */ function startSetBookmarkInfo(n) {} /** Set bookmark level for the given bookmark (0...(n - 1)). @arg {number} n serial number @arg {number} level bookmark level */ function setBookmarkLevel(n, level) {} /** Sets the bookmark target page for the given PDF (which must be the same as the PDF to be passed to endSetBookmarkInfo) and bookmark (0...(n - 1)). @arg {pdf} pdf PDF document @arg {number} n serial number @arg {number} targetpage target page */ function setBookmarkPage(pdf, n, targetpage) {} /** Sets the open status of bookmark (0...(n - 1)). @arg {number} n serial number @arg {boolean} status open status */ function setBookmarkOpenStatus(n, status) {} /** Sets the text of bookmark (0...(n - 1)). @arg {number} n serial number @arg {string} text bookmark text */ function setBookmarkText(n, text) {} /** Ends the bookmark setting process, writing the bookmarks to the given PDF. @arg {pdf} pdf PDF document */ function endSetBookmarkInfo(pdf) {} /** Returns the bookmark data in JSON format. @arg {pdf} pdf PDF document @result {Uint8Array} result as a byte array */ function getBookmarksJSON(pdf) {} /** Sets the bookmarks from JSON bookmark data. @arg {pdf} pdf PDF document @arg {Uint8Array} byte array of JSON bookmark data */ function setBookmarksJSON(pdf, data) {} /** Typesets a table of contents from existing bookmarks and prepends it to the document. If bookmark is set, the table of contents gets its own bookmark. @arg {pdf} pdf PDF document @arg {font} font font @arg {number} fontsize font size @arg {string} title title @arg {boolean} bookmark table of contents gets its own bookmark */ function tableOfContents(pdf, font, fontsize, title, bookmark) {} ����������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/javascriptsplits/c17.tex�������������������������������������������������������0000664�0001750�0001750�00000002105�14771516640�017654� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// CHAPTER 16. Optional Content Groups /** Begins retrieving optional content group names. The number of entries is returned. @arg {pdf} pdf PDF document @return {number} number of entries */ function startGetOCGList(pdf) {} /** Retrieves an OCG name, given its serial number 0..n - 1. @arg {number} n serial number @return {string} OCG name */ function ocgListEntry(n) {} /** Ends retrieval of optional content group names. */ function endGetOCGList() {} /** Renames an optional content group. @arg {pdf} pdf PDF document @arg {string} name_from source name @arg {string} name_to destination name */ function ocgRename(pdf, name_from, name_to) {} /** Ensures that every optional content group appears in the OCG order list. @arg {pdf} pdf PDF document */ function ocgOrderAll(pdf) {} /** Coalesces optional content groups. For example, if we merge or stamp two files both with an OCG called "Layer 1", we will have two different optional content groups. This function will merge the two into a single optional content group. @arg {pdf} pdf PDF document */ function ocgCoalesce(pdf) {} �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/javascriptsplits/c04.tex�������������������������������������������������������0000664�0001750�0001750�00000014437�14771516640�017663� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// CHAPTER 3. Pages /** Scales the page dimensions and content by the given scale, about (0, 0). Other boxes (crop etc. are altered as appropriate) @arg {pdf} pdf PDF document @arg {range} range page range @arg {number} sx x scale @arg {number} sy y scale */ function scalePages(pdf, range, sx, sy) {} /** Scales the content to fit new page dimensions (width x height) multiplied by scale (typically 1.0). Other boxes (crop etc. are altered as appropriate). @arg {pdf} pdf PDF document @arg {range} range page range @arg {number} sx x scale @arg {number} sy y scale @arg {number} scale scale */ function scaleToFit(pdf, range, sx, sy, scale) {} /** A0 Portrait paper */ var a0portrait = 0; /** A1 Portrait paper */ var a1portrait = 1; /** A2 Portrait paper */ var a2portrait = 2; /** A3 Portrait paper */ var a3portrait = 3; /** A4 Portrait paper */ var a4portrait = 4; /** A5 Portrait paper */ var a5portrait = 5; /** A0 Landscape paper */ var a0landscape = 6; /** A1 Landscape paper */ var a1landscape = 7; /** A2 Landscape paper */ var a2landscape = 8; /** A3 Landscape paper */ var a3landscape = 9; /** A4 Landscape paper */ var a4landscape = 10; /** A5 Landscape paper */ var a5landscape = 11; /** US Letter Portrait paper */ var usletterportrait = 12; /** US Letter Landscape paper */ var usletterlandscape = 13; /** US Legal Portrait paper */ var uslegalportrait = 14; /** US Legal Landscape paper */ var uslegallandscape = 15; /** Scales the page content to fit the given page size, possibly multiplied by scale (typically 1.0) @arg {pdf} pdf PDF document @arg {range} range page range @arg {"paper size"} papersize paper size @arg {number} s scale */ function scaleToFitPaper(pdf, range, papersize, s) {} /** Positions on the page. Used for scaling about a point, and adding text. A position is an anchor and zero or one or two parameters. posCentre: Two parameters, x and y<br/> posLeft: Two parameters, x and y<br/> posRight: Two parameters, x and y<br/> top: One parameter - distance from top<br/> topLeft: One parameter - distance from top left<br/> topRight: One parameter - distance from top right<br/> left: One parameter - distance from left middle<br/> bottomLeft: One parameter - distance from bottom left<br/> bottom: One parameter - distance from bottom<br/> bottomRight: One parameter - distance from bottom right<br/> right: One parameter - distance from right<br/> diagonal: Zero parameters<br/> reverseDiagonal: Zero parameters */ /** Absolute centre */ var posCentre = 0; /** Absolute left */ var posLeft = 1; /** Absolute right */ var posRight = 2; /** The top centre of the page */ var top = 3; /** The top left of the page */ var topLeft = 4; /** The top right of the page */ var topRight = 5; /** The left hand side of the page, halfway down */ var left = 6; /** The bottom left of the page */ var bottomLeft = 7; /** The bottom middle of the page */ var bottom = 8; /** The bottom right of the page */ var bottomRight = 9; /** The right hand side of the page, halfway down */ var right = 10; /** Diagonal, bottom left to top right */ var diagonal = 11; /** Diagonal, top left to bottom right */ var reversediagonal = 12; /** Scales the contents of the pages in the range about the point given by the position, by the scale given. @arg {pdf} pdf PDF document @arg {range} range page range @arg {anchor} anchor anchor to scale contents about @arg {number} p1 position argument 1 @arg {number} p2 position argument 2 @arg {number} scale scale */ function scaleContents(pdf, range, anchor, p1, p2, scale) {} /** Shifts the content of the pages in the range. @arg {pdf} pdf PDF document @arg {range} range page range @arg {number} dx x shift @arg {number} dy y shift */ function shiftContents(pdf, range, dx, dy) {} /** Changes the viewing rotation to an absolute value. Appropriate rotations are 0, 90, 180, 270. @arg {pdf} pdf PDF document @arg {range} range page range @arg {number} rotation rotation */ function rotate(pdf, range, rotation) {} /** Rotates the content about the centre of the page by the given number of degrees, in a clockwise direction. Appropriate rotations are 0, 90, 180, 270. @arg {pdf} pdf PDF document @arg {range} range page range @arg {number} rotation rotation */ function rotateBy(pdf, range, rotation) {} /** Rotates the content about the centre of the page by the given number of degrees, in a clockwise direction. @arg {pdf} pdf PDF document @arg {range} range page range @arg {number} angle angle */ function rotateContents(pdf, range, angle) {} /** Changes the viewing rotation of the pages in the range, counter-rotating the dimensions and content such that there is no visual change. @arg {pdf} pdf PDF document @arg {range} range page range */ function upright(pdf, range) {} /** Flips horizontally the pages in the range. @arg {pdf} pdf PDF document @arg {range} range page range */ function hFlip(pdf, range) {} /** Flips vertically the pages in the range. @arg {pdf} pdf PDF document @arg {range} range page range */ function vFlip(pdf, range) {} /** Crops a page, replacing any existing crop box. The dimensions are in points. @arg {pdf} pdf PDF document @arg {range} range page range @arg {number} x x position @arg {number} y y position @arg {number} w width @arg {number} h height */ function crop(pdf, range, x, y, w, h) {} /** Removes any crop box from pages in the range. @arg {pdf} pdf PDF document @arg {range} range page range */ function removeCrop(pdf, range) {} /** Removes any trim box from pages in the range. @arg {pdf} pdf PDF document @arg {range} range page range */ function removeTrim(pdf, range) {} /** Removes any art box from pages in the range. @arg {pdf} pdf PDF document @arg {range} range page range */ function removeArt(pdf, range) {} /** Removes any bleed box from pages in the range. @arg {pdf} pdf PDF document @arg {range} range page range */ function removeBleed(pdf, range) {} /** Adds trim marks to the given pages, if the trimbox exists. @arg {pdf} pdf PDF document @arg {range} range page range */ function trimMarks(pdf, range) {} /** Shows the boxes on the given pages, for debug. @arg {pdf} pdf PDF document @arg {range} range page range */ function showBoxes(pdf, range) {} /** Makes a given box a 'hard box' i.e clips it explicitly. @arg {pdf} pdf PDF document @arg {range} range page range @arg {string} boxname box name */ function hardBox(pdf, range, boxname) {} ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/javascriptsplits/c00.tex�������������������������������������������������������0000664�0001750�0001750�00000002155�14771516640�017651� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// CHAPTER -1: Introduction /** Use --- coherentpdf.js can be used from both node and the browser. The file `cpdflibtest.js` uses every function in coherentpdf.js. Call `./run` to run it in node. For development server-side with node: `coherentpdf.js` (minified version `coherentpdf.min.js`). Load with `const coherentpdf = require('coherentpdf')` if installed in npm, or `const coherentpdf = require('./coherentpdf.js')` to load from current directory. For development client-side with the browser : `coherentpdf.browser.js` (minified version for deployment : `coherentpdf.browser.min.js`). Load with `<script src="coherentpdf.browser.js"></script>` or similar. Data types ---------- Arguments are numbers, strings, or arrays (of type UInt8Array for data). Page ranges are represented by arrays of numbers. Memory Management ----------------- A PDF p must be explicitly deallocated with deletePdf(p). Errors ------ Any function may raise an exception, containing a string describing the problem. Concurrency ----------- coherentpdf.js is synchronous and non-re-entrant. In the browser, best used in a worker. **/ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/javascriptsplits/c09.tex�������������������������������������������������������0000664�0001750�0001750�00000011607�14771516640�017664� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// CHAPTER 8. Logos, Watermarks and Stamps /** Stamps stamp_pdf on all the pages in the document which are in the range. The stamp is placed with its origin at the origin of the target document. @arg {pdf} stamp_pdf stamp @arg {pdf} pdf PDF document @arg {range} range page range */ function stampOn(stamp_pdf, pdf, range) {} /** Stamps stamp_pdf under all the pages in the document which are in the range. The stamp is placed with its origin at the origin of the target document. @arg {pdf} stamp_pdf stamp @arg {pdf} pdf PDF document @arg {range} range page range */ function stampUnder(stamp_pdf, pdf, range) {} /** A stamping function with extra features. @arg {pdf} pdf first PDF document @arg {pdf} pdf second PDF document @arg {boolean} isover pdf goes over pdf2, otherwise under @arg {boolean} scale_stamp_to_fit scales the stamp to fit the page @arg {anchor} anchor for position of stamp @arg {number} p1 position argument 1 @arg {number} p2 position argument 2 @arg {boolean} relative_to_cropbox pos is relative to cropbox not mediabox. */ function stampExtended(pdf, pdf2, range, isover, scale_stamp_to_fit, position, relative_to_cropbox) {} /** Combines the PDFs page-by-page, putting each page of 'over' over each page of 'under'. @arg {pdf} under PDF document @arg {pdf} over PDF document @result {pdf} resultant PDF document */ function combinePages(under, over) {} /** Times Roman */ var timesRoman = 'Times-Roman'; /** Times Bold */ var timesBold = 'Times-Bold'; /** Times Italic */ var timesItalic = 'Times-Italic'; /** Times Bold Italic */ var timesBoldItalic = 'Times-BoldItalic'; /** Helvetica */ var helvetica = 'Helvetica'; /** Helvetica Bold */ var helveticaBold = 'Helvetica-Bold'; /** Helvetica Oblique */ var helveticaOblique = 'Helvetica-Oblique'; /** Helvetica Bold Oblique */ var helveticaBoldOblique = 'Helvetica-BoldOblique'; /** Courier */ var courier = 'Courier'; /** Courier Bold */ var courierBold = 'Courier-Bold'; /** Courier Oblique */ var courierOblique = 'Courier-Oblique'; /** Courier Bold Oblique */ var courierBoldOblique = 'Courier-BoldOblique'; /** Left justify */ var leftJustify = 0; /** Centre justify */ var centreJustify = 1; /** Right justify */ var rightJustify = 2; /** Adds text to the pages in the given range. @arg {boolean} metrics collect metrics only @arg {pdf} pdf PDF document @arg {range} range page range @arg {string} text text to add \\n for newline @arg {anchor} anchor anchor to add text at @arg {number} p1 position argument 1 @arg {number} p2 position argument 2 @arg {number} linespacing line spacing @arg {number} bates starting bates number @arg {font} font font @arg {number} fontsize font size @arg {number} r red component of colour 0..1 @arg {number} g green component of colour 0..1 @arg {number} b blue component of colour 0..1 @arg {boolean} underneath put text under the page rather than over @arg {boolean} relative_to_cropbox position is relative to crop box not media box @arg {boolean} outline text is outline @arg {number} opacity opacity 0..1 @arg {justification} justification justification @arg {boolean} midline position is relative to midline not baseline @arg {boolean} topline position is relative to topline not baseline @arg {string} filename file name @arg {number} linewidth line width @arg {boolean} embed_fonts add font information */ function addText(metrics, pdf, range, text, anchor, p1, p2, linespacing, bates, font, fontsize, r, g, b, underneath, relative_to_cropbox, outline, opacity, justification, midline, topline, filename, linewidth, embed_fonts) {} /** Adds text with most parameters default. @arg {pdf} pdf PDF document @arg {range} range page range @arg {string} text text to add. \\n for newline @arg {anchor} anchor anchor to add text at @arg {number} p1 position argument 1 @arg {number} p2 position argument 2 @arg {font} font font @arg {number} fontsize font size */ function addTextSimple(pdf, range, text, anchor, p1, p2, font, fontsize) {} /** Removes any text added by cpdf from the given pages. @arg {pdf} pdf PDF document @arg {range} range page range */ function removeText(pdf, range) {} /** Returns the width of a given string in the given font in thousandths of a point. @arg {font} font font @arg {string} text text @result {number} width */ function textWidth(font, text) {} /** Adds page content before (if true) or after (if false) the existing content to pages in the given range in the given PDF. @arg {string} content content to add @arg {boolean} before rather than after @arg {pdf} pdf PDF document @arg {range} range page range */ function addContent(content, before, pdf, range) {} /** Stamps stamp_pdf onto the pages in the given range in pdf as a shared Form XObject. The name of the newly-created XObject is returned. @arg {pdf} pdf PDF document @arg {range} range page range @arg {pdf} stamp_pdf stamp pdf @result {string} name of XObject */ function stampAsXObject(pdf, range, stamp_pdf) {} �������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/javascriptsplits/c12.tex�������������������������������������������������������0000664�0001750�0001750�00000041753�14771516640�017663� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// CHAPTER 11. Document Information and Metadata /** Finds out if a document is linearized as quickly as possible without loading it. @arg {string} filename file name @result {boolean} true if linearized */ function isLinearized(filename) {} /** Finds out if a document in memory is linearized as quickly as possible without loading it. @arg {Uint8Array} PDF file as a byte array @result {boolean} true if linearized */ function isLinearizedMemory(data) {} /** Returns the minor version number of a document. @arg {pdf} pdf PDF document @return {number} version number */ function getVersion(pdf) {} /** Returns the major version number of a document. @arg {pdf} pdf PDF document @return {number} major version number */ function getMajorVersion(pdf) {} /** Returns the title of a document. @arg {pdf} pdf PDF document @return {string} title */ function getTitle(pdf) {} /** Returns the author of a document. @arg {pdf} pdf PDF document @return {string} author */ function getAuthor(pdf) {} /** Returns the subject of a document. @arg {pdf} pdf PDF document @return {string} subject */ function getSubject(pdf) {} /** Returns the keywords of a document. @arg {pdf} pdf PDF document @return {string} keywords */ function getKeywords(pdf) {} /** Returns the creator of a document. @arg {pdf} pdf PDF document @return {string} creator */ function getCreator(pdf) {} /** Returns the producer of a document. @arg {pdf} pdf PDF document @return {string} producer */ function getProducer(pdf) {} /** Returns the creation date of a document. @arg {pdf} pdf PDF document @return {string} creation date */ function getCreationDate(pdf) {} /** Returns the modification date of a document. @arg {pdf} pdf PDF document @return {string} modification date */ function getModificationDate(pdf) {} /** Returns the XMP title of a document. @arg {pdf} pdf PDF document @return {string} XMP title */ function getTitleXMP(pdf) {} /** Returns the XMP author of a document. @arg {pdf} pdf PDF document @return {string} XMP author */ function getAuthorXMP(pdf) {} /** Returns the XMP subject of a document. @arg {pdf} pdf PDF document @return {string} XMP subject */ function getSubjectXMP(pdf) {} /** Returns the XMP keywords of a document. @arg {pdf} pdf PDF document @return {string} XMP keywords */ function getKeywordsXMP(pdf) {} /** Returns the XMP creator of a document. @arg {pdf} pdf PDF document @return {string} XMP creator */ function getCreatorXMP(pdf) {} /** Returns the XMP producer of a document. @arg {pdf} pdf PDF document @return {string} XMP producer */ function getProducerXMP(pdf) {} /** Returns the XMP creation date of a document. @arg {pdf} pdf PDF document @return {string} XMP creation date */ function getCreationDateXMP(pdf) {} /** Returns the XMP modification date of a document. @arg {pdf} pdf PDF document @return {string} XMP modification date */ function getModificationDateXMP(pdf) {} /** Sets the title of a document. @arg {pdf} pdf PDF document @arg {string} s title */ function setTitle(pdf, s) {} /** Sets the author of a document. @arg {pdf} pdf PDF document @arg {string} s author */ function setAuthor(pdf, s) {} /** Sets the subject of a document. @arg {pdf} pdf PDF document @arg {string} s subject */ function setSubject(pdf, s) {} /** Sets the keywords of a document. @arg {pdf} pdf PDF document @arg {string} s keywords */ function setKeywords(pdf, s) {} /** Sets the creator of a document. @arg {pdf} pdf PDF document @arg {string} s creator */ function setCreator(pdf, s) {} /** Sets the producer of a document. @arg {pdf} pdf PDF document @arg {string} s producer */ function setProducer(pdf, s) {} /** Sets the creation date of a document. @arg {pdf} pdf PDF document @arg {string} s creation date */ function setCreationDate(pdf, s) {} /** Sets the modification date of a document. @arg {pdf} pdf PDF document @arg {string} s modification date */ function setModificationDate(pdf, s) {} /** Sets the XMP title of a document. @arg {pdf} pdf PDF document @arg {string} s XMP title */ function setTitleXMP(pdf, s) {} /** Sets the XMP author of a document. @arg {pdf} pdf PDF document @arg {string} s XMP author */ function setAuthorXMP(pdf, s) {} /** Sets the XMP author of a document. @arg {pdf} pdf PDF document @arg {string} s XMP subject */ function setSubjectXMP(pdf, s) {} /** Sets the XMP keywords of a document. @arg {pdf} pdf PDF document @arg {string} s XMP keywords */ function setKeywordsXMP(pdf, s) {} /** Sets the XMP creator of a document. @arg {pdf} pdf PDF document @arg {string} s XMP creator */ function setCreatorXMP(pdf, s) {} /** Sets the XMP producer of a document. @arg {pdf} pdf PDF document @arg {string} s XMP producer */ function setProducerXMP(pdf, s) {} /** Sets the XMP creation date of a document. @arg {pdf} pdf PDF document @arg {string} s XMP creation date */ function setCreationDateXMP(pdf, s) {} /** Sets the XMP modification date of a document. @arg {pdf} pdf PDF document @arg {string} s XMP modification date */ function setModificationDateXMP(pdf, s) {} /** Returns the components from a PDF date string. @arg {string} string date string @return {"array of numbers"} date components */ function getDateComponents(string) {} /** Builds a PDF date string from individual components. @arg {number} y year @arg {number} m month @arg {number} d day @arg {number} h hour @arg {number} min minute @arg {number} sec second @arg {number} hour_offset hour offset @arg {number} minute_offset minute offset @return {string} date string */ function dateStringOfComponents(y, m, d, h, min, sec, hour_offset, minute_offset) {} /** Gets the viewing rotation for a given page. @arg {pdf} pdf PDF document @arg {number} page page number @result {number} page rotation */ function getPageRotation(pdf, page) {} /** Returns true if that page has the given box. E.g "/CropBox". @arg {pdf} pdf PDF document @arg {number} page page number @arg {string} box box name @result {boolean} true if box present */ function hasBox(pdf, page, box) {} /** These functions get a box given the document, page number, min x, max x, min y, max y in points. Only succeeds if such a box exists, as checked by hasBox. @arg {pdf} pdf PDF document @arg {number} pagenumber page number @return {"array of numbers"} media box */ function getMediaBox(pdf, pagenumber) {} /** These functions get a box given the document, page number, min x, max x, min y, max y in points. Only succeeds if such a box exists, as checked by hasBox. @arg {pdf} pdf PDF document @arg {number} pagenumber page number @return {"array of numbers"} crop box */ function getCropBox(pdf, pagenumber) {} /** These functions get a box given the document, page number, min x, max x, min y, max y in points. Only succeeds if such a box exists, as checked by hasBox. @arg {pdf} pdf PDF document @arg {number} pagenumber page number @return {"array of numbers"} art box */ function getArtBox(pdf, pagenumber) {} /** These functions get a box given the document, page number, min x, max x, min y, max y in points. Only succeeds if such a box exists, as checked by hasBox. @arg {pdf} pdf PDF document @arg {number} pagenumber page number @return {"array of numbers"} bleed box */ function getBleedBox(pdf, pagenumber) {} /** These functions get a box given the document, page number, min x, max x, min y, max y in points. Only succeeds if such a box exists, as checked by hasBox. @arg {pdf} pdf PDF document @arg {number} pagenumber page number @return {"array of numbers"} trim box */ function getTrimBox(pdf, pagenumber) {} /** These functions set a box given the document, page range, min x, max x, min y, max y in points. @arg {pdf} pdf PDF document @arg {range} range page range @arg {number} minx min x @arg {number} maxx max x @arg {number} minx min y @arg {number} maxx max y */ function setMediabox(pdf, range, minx, maxx, miny, maxy) {} /** These functions set a box given the document, page range, min x, max x, min y, max y in points. @arg {pdf} pdf PDF document @arg {range} range page range @arg {number} minx min x @arg {number} maxx max x @arg {number} minx min y @arg {number} maxx max y */ function setCropBox(pdf, range, minx, maxx, miny, maxy) {} /** These functions set a box given the document, page range, min x, max x, min y, max y in points. @arg {pdf} pdf PDF document @arg {range} range page range @arg {number} minx min x @arg {number} maxx max x @arg {number} minx min y @arg {number} maxx max y */ function setTrimBox(pdf, range, minx, maxx, miny, maxy) {} /** These functions set a box given the document, page range, min x, max x, min y, max y in points. @arg {pdf} pdf PDF document @arg {range} range page range @arg {number} minx min x @arg {number} maxx max x @arg {number} minx min y @arg {number} maxx max y */ function setBleedBox(pdf, range, minx, maxx, miny, maxy) {} /** These functions set a box given the document, page range, min x, max x, min y, max y in points. @arg {pdf} pdf PDF document @arg {range} range page range @arg {number} minx min x @arg {number} maxx max x @arg {number} minx min y @arg {number} maxx max y */ function setArtBox(pdf, range, minx, maxx, miny, maxy) {} /** Marks a document as trapped. @arg {pdf} pdf PDF document */ function markTrapped(pdf) {} /** Marks a document as untrapped. @arg {pdf} pdf PDF document */ function markUntrapped(pdf) {} /** Marks a document as trapped in XMP metadata. @arg {pdf} pdf PDF document */ function markTrappedXMP(pdf) {} /** Marks a document as untrapped in XMP metadata. @arg {pdf} pdf PDF document */ function markUntrappedXMP(pdf) {} /** Single page */ var singlePage = 0; /** One column */ var oneColumn = 1; /** Two column left */ var twoColumnLeft = 2; /** Two column right */ var twoColumnRight = 3; /** Two page left */ var twoPageLeft = 4; /** Two page right */ var twoPageRight = 5; /** Sets the page layout for a document. @arg {pdf} pdf PDF document @arg {layout} layout page layout */ function setPageLayout(pdf, layout) {} /** Use none */ var useNone = 0; /** Use outlines */ var useOutlines = 1; /** Use thumbs */ var useThumbs = 2; /** Use OC */ var useOC = 3; /** Use attachments */ var useAttachments = 4; /** Sets the page mode for a document. @arg {pdf} pdf PDF document @arg {mode} mode page mode */ function setPageMode(pdf, mode) {} /** Sets the hide toolbar flag. @arg {pdf} pdf PDF document @arg {boolean} flag hide toolbar */ function hideToolbar(pdf, flag) {} /** Sets the hide menubar flag. @arg {pdf} pdf PDF document @arg {boolean} flag hide menubar */ function hideMenubar(pdf, flag) {} /** Sets the hide window UI flag. @arg {pdf} pdf PDF document @arg {boolean} flag hide UI */ function hideWindowUi(pdf, flag) {} /** Sets the fit window flag. @arg {pdf} pdf PDF document @arg {boolean} flag fit window */ function fitWindow(pdf, flag) {} /** Sets the center window flag. @arg {pdf} pdf PDF document @arg {boolean} flag center window */ function centerWindow(pdf, flag) {} /** Sets the display doc title flag. @arg {pdf} pdf PDF document @arg {boolean} flag display doc title */ function displayDocTitle(pdf, flag) {} /** Sets the PDF to open, possibly with zoom-to-fit, at the given page number. @arg {pdf} pdf PDF document @arg {boolean} fit zoom-to-fit @arg {number} pagenumber page number */ function openAtPage(pdf, fit, pagenumber) {} /** Sets the XMP metadata of a document, given a file name. @arg {pdf} pdf PDF document @arg {string} filename file name */ function setMetadataFromFile(pdf, filename) {} /** Sets the XMP metadata from an array of bytes. @arg {pdf} pdf PDF document @arg {Uint8Array} data XMP metadata as an array of bytes */ function setMetadataFromByteArray(pdf, data) {} /** Removes the XMP metadata from a document. @arg {pdf} pdf PDF document */ function removeMetadata(pdf) {} /** Returns the XMP metadata from a document. @arg {pdf} pdf PDF document @result {Uint8Array} XMP metadata as a byte array */ function getMetadata(pdf) {} /** Builds fresh XMP metadata as best it can from existing metadata in the document. @arg {pdf} pdf PDF document */ function createMetadata(pdf) {} /** Sets the metadata date for a PDF. The date is given in PDF date format -- cpdf will convert it to XMP format. The date 'now' means now. */ function setMetadataDate(pdf, date) {} /** 1, 2, 3... */ var decimalArabic = 0; /** I, II, III... */ var uppercaseRoman = 1; /** i, ii, iii... */ var lowercaseRoman = 2; /** A, B, C... */ var uppercaseLetters = 3; /** a, b, c... */ var lowercaseLetters = 4; /** Adds page labels. The prefix is prefix text for each label. The range is the page range the labels apply to. Offset can be used to shift the numbering up or down. @arg {pdf} pdf PDF document @arg {style} style page label style @arg {string} prefix label prefix @arg {number} offset offset @arg {range} range page range @arg {boolean} progress labels progress */ function addPageLabels(pdf, style, prefix, offset, range, progress) {} /** Removes the page labels from the document. @arg {pdf} pdf PDF document */ function removePageLabels(pdf) {} /** Calculates the full label string for a given page, and returns it. @arg {pdf} pdf PDF document @arg {number} pagenumber page number @result {string} page label string */ function getPageLabelStringForPage(pdf, pagenumber) {} /** Gets page label data. Call startGetPageLabels to find out how many there are, then use these serial numbers to get the style, prefix, offset and start value (note not a range). Call endGetPageLabels to clean up.<br/><br/> For example, a document might have five pages of introduction with roman numerals, followed by the rest of the pages in decimal arabic, numbered from one:<br/><br/> labelstyle = LowercaseRoman<br/> labelprefix = ""<br/> startpage = 1<br/> startvalue = 1<br/></br> labelstyle = DecimalArabic<br/> labelprefix = ""<br/> startpage = 6<br/> startvalue = 1<br/> @arg {pdf} pdf PDF document @result {number} number of page labels */ function startGetPageLabels(pdf) {} /** Gets page label data. Call startGetPageLabels to find out how many there are, then use these serial numbers to get the style, prefix, offset and start value (note not a range). Call endGetPageLabels to clean up.<br/><br/> For example, a document might have five pages of introduction with roman numerals, followed by the rest of the pages in decimal arabic, numbered from one:<br/><br/> labelstyle = LowercaseRoman<br/> labelprefix = ""<br/> startpage = 1<br/> startvalue = 1<br/></br> labelstyle = DecimalArabic<br/> labelprefix = ""<br/> startpage = 6<br/> startvalue = 1<br/> @arg {number} n serial number @result {"label style"} page label style */ function getPageLabelStyle(n) {} /** Gets page label data. Call startGetPageLabels to find out how many there are, then use these serial numbers to get the style, prefix, offset and start value (note not a range). Call endGetPageLabels to clean up.<br/><br/> For example, a document might have five pages of introduction with roman numerals, followed by the rest of the pages in decimal arabic, numbered from one:<br/><br/> labelstyle = LowercaseRoman<br/> labelprefix = ""<br/> startpage = 1<br/> startvalue = 1<br/></br> labelstyle = DecimalArabic<br/> labelprefix = ""<br/> startpage = 6<br/> startvalue = 1<br/> @arg {number} n serial number @result {string} page label prefix */ function getPageLabelPrefix(n) {} /** Gets page label data. Call startGetPageLabels to find out how many there are, then use these serial numbers to get the style, prefix, offset and start value (note not a range). Call endGetPageLabels to clean up.<br/><br/> For example, a document might have five pages of introduction with roman numerals, followed by the rest of the pages in decimal arabic, numbered from one:<br/><br/> labelstyle = LowercaseRoman<br/> labelprefix = ""<br/> startpage = 1<br/> startvalue = 1<br/></br> labelstyle = DecimalArabic<br/> labelprefix = ""<br/> startpage = 6<br/> startvalue = 1<br/> @arg {number} n serial number @result {number} page label offset */ function getPageLabelOffset(n) {} /** Gets page label data. Call startGetPageLabels to find out how many there are, then use these serial numbers to get the style, prefix, offset and start value (note not a range). Call endGetPageLabels to clean up.<br/><br/> For example, a document might have five pages of introduction with roman numerals, followed by the rest of the pages in decimal arabic, numbered from one:<br/><br/> labelstyle = LowercaseRoman<br/> labelprefix = ""<br/> startpage = 1<br/> startvalue = 1<br/></br> labelstyle = DecimalArabic<br/> labelprefix = ""<br/> startpage = 6<br/> startvalue = 1<br/> @arg {number} n serial number @result {number} page label range */ function getPageLabelRange(n) {} /** Gets page label data. Call startGetPageLabels to find out how many there are, then use these serial numbers to get the style, prefix, offset and start value (note not a range). Call endGetPageLabels to clean up.<br/><br/> For example, a document might have five pages of introduction with roman numerals, followed by the rest of the pages in decimal arabic, numbered from one:<br/><br/> labelstyle = LowercaseRoman<br/> labelprefix = ""<br/> startpage = 1<br/> startvalue = 1<br/></br> labelstyle = DecimalArabic<br/> labelprefix = ""<br/> startpage = 6<br/> startvalue = 1<br/> */ function endGetPageLabels() {} ���������������������cpdf-2.8.1/docsplits/javascriptsplits/c06.tex�������������������������������������������������������0000664�0001750�0001750�00000000643�14771516640�017657� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// CHAPTER 5. Compression /** Compresses any uncompressed streams in the given PDF using the Flate algorithm. @arg {pdf} pdf PDF document */ function compress(pdf) {} /** Decompresses any streams in the given PDF, so long as the compression method is supported. @arg {pdf} pdf PDF document */ function decompress(pdf) {} /** Squeezes a pdf in memory. @arg {pdf} pdf PDF document */ function squeezeInMemory(pdf) {} ���������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/javascriptsplits/c11.tex�������������������������������������������������������0000664�0001750�0001750�00000000307�14771516640�017650� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// CHAPTER 10. Annotations /** Returns the annotations from a PDF in JSON format. @arg {pdf} pdf PDF document @return {Uint8Array} results as an array of bytes */ function annotationsJSON(pdf) {} �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/javascriptsplits/c19.tex�������������������������������������������������������0000664�0001750�0001750�00000000037�14771516640�017660� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������//CHAPTER 18. Drawing on PDFs �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/javascriptsplits/c05.tex�������������������������������������������������������0000664�0001750�0001750�00000000032�14771516640�017646� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// CHAPTER 4. Encryption ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/javascriptsplits/c15.tex�������������������������������������������������������0000664�0001750�0001750�00000006212�14771516640�017655� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// CHAPTER 14. Fonts. /** Retrieves font information. First, call startGetFontInfo(pdf). Now call numberFonts to return the number of fonts. For each font, call one or more of getFontPage, getFontName, getFontType, and getFontEncoding giving a serial number 0..n - 1 to return information. Finally, call endGetFontInfo to clean up. @ {pdf} pdf PDF document */ function startGetFontInfo(pdf) {} /** Retrieves font information. First, call startGetFontInfo(pdf). Now call numberFonts to return the number of fonts. For each font, call one or more of getFontPage, getFontName, getFontType, and getFontEncoding giving a serial number 0..n - 1 to return information. Finally, call endGetFontInfo to clean up. @result {number} number of fonts */ function numberFonts() {} /** Retrieves font information. First, call startGetFontInfo(pdf). Now call numberFonts to return the number of fonts. For each font, call one or more of getFontPage, getFontName, getFontType, and getFontEncoding giving a serial number 0..n - 1 to return information. Finally, call endGetFontInfo to clean up. @arg {number} n serial number @return {number} page number */ function getFontPage(n) {} /** Retrieves font information. First, call startGetFontInfo(pdf). Now call numberFonts to return the number of fonts. For each font, call one or more of getFontPage, getFontName, getFontType, and getFontEncoding giving a serial number 0..n - 1 to return information. Finally, call endGetFontInfo to clean up. @arg {number} n serial number @return {string} font name */ function getFontName(n) {} /** Retrieves font information. First, call startGetFontInfo(pdf). Now call numberFonts to return the number of fonts. For each font, call one or more of getFontPage, getFontName, getFontType, and getFontEncoding giving a serial number 0..n - 1 to return information. Finally, call endGetFontInfo to clean up. @arg {number} n serial number @return {string} font type */ function getFontType(n) {} /** Retrieves font information. First, call startGetFontInfo(pdf). Now call numberFonts to return the number of fonts. For each font, call one or more of getFontPage, getFontName, getFontType, and getFontEncoding giving a serial number 0..n - 1 to return information. Finally, call endGetFontInfo to clean up. @arg {number} n serial number @return {string} font encoding */ function getFontEncoding(n) {} /** Retrieves font information. First, call startGetFontInfo(pdf). Now call numberFonts to return the number of fonts. For each font, call one or more of getFontPage, getFontName, getFontType, and getFontEncoding giving a serial number 0..n - 1 to return information. Finally, call endGetFontInfo to clean up. */ function endGetFontInfo() {} /** Removes all font data from a file. @arg {pdf} pdf PDF document */ function removeFonts(pdf) {} /** Copies the given font from the given page in the 'from' PDF to every page in the range of the 'to' PDF. The new font is stored under its font name. @arg {pdf} docfrom source document @arg {pdf} docto destination document @arg {range} page range @arg {number} pagenumber source page number @arg {string} fontname font name */ function copyFont(docfrom, docto, range, pagenumber, fontname) {} ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/javascriptsplits/c16.tex�������������������������������������������������������0000664�0001750�0001750�00000002341�14771516640�017655� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// CHAPTER 15. PDF and JSON /** Outputs a PDF in JSON format to the given filename. If parse_content is true, page content is parsed. If no_stream_data is true, all stream data is suppressed entirely. If decompress_streams is true, streams are decompressed. @arg {string} filename file name @arg {boolean} parse_content parse page content @arg {boolean} no_stream_data suppress stream data @arg {boolean} decompress_streams decompress streams @arg {pdf} pdf PDF document */ function outputJSON(filename, parse_content, no_stream_data, decompress_streams, pdf) {} /** Like outputJSON, but it writes to a byte array in memory. @arg {boolean} parse_content parse page content @arg {boolean} no_stream_data suppress stream data @arg {boolean} decompress_streams decompress streams @arg {pdf} pdf PDF document @return {Uint8Array} JSON data as a byte array */ function outputJSONMemory(parse_content, no_stream_data, decompress_streams, pdf) {} /** Loads a PDF from a JSON file given its filename. @arg {string} filename file name @return {pdf} PDF document */ function fromJSON(filename) {} /** Loads a PDF from a JSON file in memory. @arg {Uint8Array} data JSON data as a byte array @return {pdf} PDF document */ function fromJSONMemory(data) {} �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/javascriptsplits/c01.tex�������������������������������������������������������0000664�0001750�0001750�00000001716�14771516640�017654� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// CHAPTER 0. Preliminaries /** Returns a string giving the version number of the CPDF library. @returns {string} version */ function version() {} /** Some operations have a fast mode. The default is 'slow' mode, which works even on old-fashioned files. For more details, see section 1.13 of the CPDF manual. This function sets the mode to fast globally. */ function setFast() {} /** Some operations have a fast mode. The default is 'slow' mode, which works even on old-fashioned files. For more details, see section 1.13 of the CPDF manual. This function sets the mode to slow globally. */ function setSlow() {} /** Delete a PDF so the memory representing it may be recovered. @arg {pdf} pdf PDF document to delete */ function deletePdf(pdf) {} /* A debug function which prints some information about resource usage. This can be used to detect if PDFs or ranges are being deallocated properly. Contrary to its name, it may be run at any time. */ function onexit() {} ��������������������������������������������������cpdf-2.8.1/docsplits/javascriptsplits/c03.tex�������������������������������������������������������0000664�0001750�0001750�00000002661�14771516640�017656� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// CHAPTER 2. Merging and Splitting /** Given a list of PDFs, merges the files into a new one, which is returned. @arg {"array of pdfs"} pdfs array of PDF documents to merge @return {pdf} merged PDF document */ function mergeSimple(pdfs) {} /** Merges the PDFs. If retain_numbering is true page labels are not rewritten. If remove_duplicate_fonts is true, duplicate fonts are merged. This is useful when the source documents for merging originate from the same source. @arg {"array of pdfs"} pdfs array of PDF documents to merge @arg {boolean} retain_numbering keep page numbering @arg {boolean} remove_duplicate_fonts remove duplicate font data */ function merge(pdfs, retain_numbering, remove_duplicate_fonts) {} /** The same as merge, except that it has an additional argument - a list of page ranges. This is used to select the pages to pick from each PDF. This avoids duplication of information when multiple discrete parts of a source PDF are included. @arg {"array of pdfs"} pdfs array of PDF documents to merge @arg {boolean} retain_numbering keep page numbering @arg {boolean} remove_duplicate_fonts remove duplicate font data @arg {"array of arrays of numbers"} ranges page ranges, one for each input PDF */ function mergeSame(pdfs, retain_numbering, remove_duplicate_fonts, ranges) {} /** Returns a new document with just those pages in the page range. @arg {pdf} pdf PDF document @arg {range} page range */ function selectPages(pdf, r) {} �������������������������������������������������������������������������������cpdf-2.8.1/docsplits/javascriptsplits/c20.tex�������������������������������������������������������0000664�0001750�0001750�00000005655�14771516640�017663� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������//CHAPTER 19. Miscellaneous /** Removes images on the given pages, replacing them with crossed boxes if 'boxes' is true. @arg {pdf} pdf PDF document @arg {range} range page range @arg {boolean} boxes replace with crossed boxes */ function draft(pdf, range, boxes) {} /** Removes all text from the given pages in a given document. @arg {pdf} pdf PDF document @arg {range} range page range */ function removeAllText(pdf, range) {} /* Blackens all text on the given pages. @arg {pdf} pdf PDF document @arg {range} range page range */ function blackText(pdf, range) {} /** Blackens all lines on the given pages. @arg {pdf} pdf PDF document @arg {range} range page range */ function blackLines(pdf, range) {} /** Blackens all fills on the given pages. @arg {pdf} pdf PDF document @arg {range} range page range */ function blackFills(pdf, range) {} /** Thickens every line less than min_thickness to min_thickness. Thickness given in points. @arg {pdf} pdf PDF document @arg {range} range page range @arg {number} min_thickness minimum required thickness */ function thinLines(pdf, range, min_thickness) {} /** Copies the /ID from one document to another. @arg {pdf} pdf_from source document @arg {pdf} pdf_to destination document */ function copyId(pdf_from, pdf_to) {} /** Removes a document's /ID. @arg {pdf} pdf PDF document */ function removeId(pdf) {} /** Sets the minor version number of a document. @arg {pdf} pdf PDF document @arg {number} version */ function setVersion(pdf, version) {} /** Sets the full version number of a document. @arg {pdf} pdf PDF document @arg {number} major version @arg {number} minor version */ function setFullVersion(pdf, major, minor) {} /** Removes any dictionary entry with the given key anywhere in the document. @arg {pdf} pdf PDF document @arg {string} key key to remove */ function removeDictEntry(pdf, key) {} /** Removes any dictionary entry with the given key whose value matches the given search term. @arg {pdf} pdf PDF document @arg {string} key key to remove @arg {string} searchterm search term */ function removeDictEntrySearch(pdf, key, searchterm) {} /** Replaces the value associated with the given key. @arg {pdf} pdf PDF document @arg {string} key key to remove @arg {string} newval new value */ function replaceDictEntry(pdf, key, newval) {} /** Replaces the value associated with the given key if the existing value matches the search term. @arg {pdf} pdf PDF document @arg {string} key key to remove @arg {string} newval new value @arg {string} searchterm search term */ function replaceDictEntrySearch(pdf, key, newval, searchterm) {} /** Removes all clipping from pages in the given range. @arg {pdf} pdf PDF document @arg {range} range page range */ function removeClipping(pdf, range) {} /* Returns a JSON array containing any and all values associated with the given key. @arg {pdf} pdf PDF docment @arg {string} key key @return {Uint8Array} results as an array of bytes */ function getDictEntries(pdf, key) {} �����������������������������������������������������������������������������������cpdf-2.8.1/docsplits/javascriptsplits/c10.tex�������������������������������������������������������0000664�0001750�0001750�00000003603�14771516640�017651� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// CHAPTER 9. Multipage facilities /** Imposes a PDF. There are two modes: imposing x * y, or imposing to fit a page of size x * y. This is controlled by fit. Columns imposes by columns rather than rows. rtl is right-to-left, btt bottom-to-top. Center is unused for now. Margin is the margin around the output, spacing the spacing between imposed inputs. @arg {pdf} pdf PDF document @arg {number} x (explained above) @arg {number} y (explained above) @arg {boolean} fit (explained above) @arg {boolean} rtl impose right to left @arg {boolean} btt impose bottom to top @arg {boolean} center unused @arg {number} margin margin around output pages @arg {number} spacing spacing between imposed pages @arg {number} linewidth line width */ function impose(pdf, x, y, fit, columns, rtl, btt, center, margin, spacing, linewidth) {} /** Imposes a document two up. twoUp does so by shrinking the page size, to fit two pages on one. @arg {pdf} pdf PDF document */ function twoUp(pdf) {} /** Impose a document two up. twoUpStack does so by doubling the page size, to fit two pages on one. @arg {pdf} pdf PDF document */ function twoUpStack(pdf) {} /** Adds a blank page before each page in the given range. @arg {pdf} pdf PDF document @arg {range} range page range */ function padBefore(pdf, range) {} /** Adds a blank page after every n pages. @arg {pdf} pdf PDF document @arg {range} range page range */ function padAfter(pdf, range) {} /** Adds a blank page after every n pages. @arg {pdf} pdf PDF document @arg {number} interval */ function padEvery(pdf, n) {} /** Adds pages at the end to pad the file to a multiple of n pages in length. @arg {pdf} pdf PDF document @arg {number} multiple to pad to */ function padMultiple(pdf, n) {} /** Adds pages at the beginning to pad the file to a multiple of n pages in length. @arg {pdf} pdf PDF document @arg {number} multiple to pad to */ function padMultipleBefore(pdf, n) {} �����������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/javascriptsplits/c14.tex�������������������������������������������������������0000664�0001750�0001750�00000010546�14771516640�017661� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������//CHAPTER 13. Images /** Gets image data, including resolution at all points of use. Call startGetImageResolution(pdf, min_required_resolution) to begin the process of obtaining data on all image uses below min_required_resolution, returning the total number. So, to return all image uses, specify a very high min_required_resolution. Then, call the other functions giving a serial number 0..n - 1, to retrieve the data. Finally, call endGetImageResolution to clean up. @arg {pdf} pdf PDF document @arg {number} min_required_resolution minimum required resolution @return {number} number of uses */ function startGetImageResolution(pdf, min_required_resolution) {} /** Gets image data, including resolution at all points of use. Call startGetImageResolution(pdf, min_required_resolution) to begin the process of obtaining data on all image uses below min_required_resolution, returning the total number. So, to return all image uses, specify a very high min_required_resolution. Then, call the other functions giving a serial number 0..n - 1, to retrieve the data. Finally, call endGetImageResolution to clean up. @arg {number} n serial number @return {number} page number */ function getImageResolutionPageNumber(n) {} /** Gets image data, including resolution at all points of use. Call startGetImageResolution(pdf, min_required_resolution) to begin the process of obtaining data on all image uses below min_required_resolution, returning the total number. So, to return all image uses, specify a very high min_required_resolution. Then, call the other functions giving a serial number 0..n - 1, to retrieve the data. Finally, call endGetImageResolution to clean up. @arg {number} n serial number @return {string} image name */ function getImageResolutionImageName(n) {} /** Gets image data, including resolution at all points of use. Call startGetImageResolution(pdf, min_required_resolution) to begin the process of obtaining data on all image uses below min_required_resolution, returning the total number. So, to return all image uses, specify a very high min_required_resolution. Then, call the other functions giving a serial number 0..n - 1, to retrieve the data. Finally, call endGetImageResolution to clean up. @arg {number} n serial number @return {number} X pixels */ function getImageResolutionXPixels(n) {} /** Gets image data, including resolution at all points of use. Call startGetImageResolution(pdf, min_required_resolution) to begin the process of obtaining data on all image uses below min_required_resolution, returning the total number. So, to return all image uses, specify a very high min_required_resolution. Then, call the other functions giving a serial number 0..n - 1, to retrieve the data. Finally, call endGetImageResolution to clean up. @arg {number} n serial number @return {number} Y pixels */ function getImageResolutionYPixels(n) {} /** Gets image data, including resolution at all points of use. Call startGetImageResolution(pdf, min_required_resolution) to begin the process of obtaining data on all image uses below min_required_resolution, returning the total number. So, to return all image uses, specify a very high min_required_resolution. Then, call the other functions giving a serial number 0..n - 1, to retrieve the data. Finally, call endGetImageResolution to clean up. @arg {number} n serial number @return {number} X Res */ function getImageResolutionXRes(n) {} /** Gets image data, including resolution at all points of use. Call startGetImageResolution(pdf, min_required_resolution) to begin the process of obtaining data on all image uses below min_required_resolution, returning the total number. So, to return all image uses, specify a very high min_required_resolution. Then, call the other functions giving a serial number 0..n - 1, to retrieve the data. Finally, call endGetImageResolution to clean up. @arg {number} n serial number @return {number} Y Res */ function getImageResolutionYRes(n) {} /** Gets image data, including resolution at all points of use. Call startGetImageResolution(pdf, min_required_resolution) to begin the process of obtaining data on all image uses below min_required_resolution, returning the total number. So, to return all image uses, specify a very high min_required_resolution. Then, call the other functions giving a serial number 0..n - 1, to retrieve the data. Finally, call endGetImageResolution to clean up. */ function endGetImageResolution() {} ����������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/javascriptsplits/c02.tex�������������������������������������������������������0000664�0001750�0001750�00000033571�14771516640�017661� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// CHAPTER 1. Basics /** Loads a PDF file from a given file. Supply a user password (possibly blank) in case the file is encrypted. It won't be decrypted, but sometimes the password is needed just to load the file. @arg {string} filename File name @arg {string} userpw User password, or blank if none */ function fromFile(filename, userpw) {} /** Loads a PDF from a file, doing only minimal parsing. The objects will be read and parsed when they are actually needed. Use this when the whole file won't be required. Also supply a user password (possibly blank) in case the file is encrypted. It won't be decrypted, but sometimes the password is needed just to load the file. @arg {string} filename File name @arg {string} userpw User password, or blank if none */ function fromFileLazy(filename, userpw) {} /** Loads a file from memory given any user password. @arg {Uint8Array} data PDF document as an array of bytes @arg {string} userpw User password, or blank if none */ function fromMemory(data, userpw) {} /** Loads a file from memory, given a pointer and a length, and the user password, but lazily like fromFileLazy. @arg {Uint8Array} data PDF document as an array of bytes @arg {string} userpw User password, or blank if none */ function fromMemoryLazy(data, userpw) {} /** To enumerate the list of currently allocated PDFs, call startEnumeratePDFs which gives the number, n, of PDFs allocated, then enumeratePDFsInfo and enumeratePDFsKey with index numbers from 0...(n - 1). Call endEnumeratePDFs to clean up. @return {number} number of PDFs */ function startEnumeratePDFs() {} /** To enumerate the list of currently allocated PDFs, call startEnumeratePDFs which gives the number, n, of PDFs allocated, then enumeratePDFsInfo and enumeratePDFsKey with index numbers from 0...(n - 1). Call endEnumeratePDFs to clean up. @arg {n} index number @return {number} PDF key */ function enumeratePDFsKey(n) {} /** To enumerate the list of currently allocated PDFs, call startEnumeratePDFs which gives the number, n, of PDFs allocated, then enumeratePDFsInfo and enumeratePDFsKey with index numbers from 0...(n - 1). Call endEnumeratePDFs to clean up. @arg {n} index number @return {number} PDF information */ function enumeratePDFsInfo(n) {} /** To enumerate the list of currently allocated PDFs, call startEnumeratePDFs which gives the number, n, of PDFs allocated, then enumeratePDFsInfo and enumeratePDFsKey with index numbers from 0...(n - 1). Call endEnumeratePDFs to clean up. */ function endEnumeratePDFs() {} /** Converts a figure in centimetres to points (72 points to 1 inch) @arg {number} i figure in centimetres @return {number} figure in points */ function ptOfCm(i) {} /** Converts a figure in millimetres to points (72 points to 1 inch) @arg {number} i figure in millimetres @return {number} figure in points */ function ptOfMm(i) {} /** Converts a figure in inches to points (72 points to 1 inch) @arg {number} i figure in inches @return {number} figure in points */ function ptOfIn(i) {} /** Converts a figure in points to centimetres (72 points to 1 inch) @arg {number} i figure in points @return {number} figure in centimetres */ function cmOfPt(i) {} /** Converts a figure in points to millimetres (72 points to 1 inch) @arg {number} i figure in points @return {number} figure in millimetres */ function mmOfPt(i) {} /** Converts a figure in points to inches (72 points to 1 inch) @arg {number} i figure in points @return {number} figure in inches */ function inOfPt(i) {} /** Parses a page specification with reference to a given PDF (the PDF is supplied so that page ranges which reference pages which do not exist are rejected). @arg {pdf} pdf PDF document @arg {string} pagespec Page specification @return {array} page range */ function parsePagespec(pdf, pagespec) {} /** Validates a page specification so far as is possible in the absence of the actual document. Result is true if valid. @arg {string} pagespec Page specification @return {boolean} validity or otherwise of page specification */ function validatePagespec(pagespec) {} /** Builds a page specification from a page range. For example, the range containing 1,2,3,6,7,8 in a document of 8 pages might yield "1-3,6-end" @arg {pdf} pdf PDF document @arg {array} r Page range @return {string} Page specifcation */ function stringOfPagespec(pdf, r) {} /** Creates a range with no pages in. @return {array} Page range */ function blankRange() {} /** Builds a range from one page to another inclusive. For example, range(3,7) gives the range 3,4,5,6,7 @arg {number} f begining of page range @arg {number} t end of page range @return {array} page range */ function range(f, t) {} /** The range containing all the pages in a given document. @arg {pdf} pdf PDF document @return {array} page range */ function all(pdf) {} /** Makes a range which contains just the even pages of another range. @arg {array} r_in page range @return {array} page range */ function even(r_in) {} /** Makes a range which contains just the odd pages of another range. @arg {array} r_in page range @return {array} page range */ function odd(r_in) {} /** Makes the union of two ranges giving a range containing the pages in range a and range b. @arg {array} a page range @arg {array} b page range @return {array} page range */ function rangeUnion(a, b) {} /** Makes the difference of two ranges, giving a range containing all the pages in a except for those which are also in b. @arg {array} a page range @arg {array} b page range @return {array} page range */ function difference(a, b) {} /** Deduplicates a range, making a new one. @arg {array} a page range @return {array} page range */ function removeDuplicates(a) {} /** Gives the number of pages in a range. @arg {array} r page range @return {number} length */ function rangeLength(r) {} /** Gets the page number at position n in a range, where n runs from 0 to rangeLength - 1. @arg {array} r page range @arg {number} n position @return {number} page at given position */ function rangeGet(r, n) {} /** Adds the page to a range, if it is not already there. @arg {array} r page range @arg {number} page page number */ function rangeAdd(r, page) {} /** Returns true if the page is in the range, false otherwise. @arg {array} r page range @arg {number} page page number @return {boolean} true if page in range, false otherwise */ function isInRange(r, page) {} /** Returns the number of pages in a PDF. @arg {pdf} pdf PDF document @return {number} number of pages */ function pages(pdf) {} /** Returns the number of pages in a given PDF, with given user password. It tries to do this as fast as possible, without loading the whole file. @arg {string} password user password @arg {string} filename file name @return {number} number of pages */ function pagesFast(password, filename) {} /** Returns the number of pages in a given PDF, with given user password. It tries to do this as fast as possible, without loading the whole file. @arg {string} password user password @arg {Uint8Array} data PDF file as a byte array @return {number} number of pages */ function pagesFastMemory(password, data) {} /** Writes the file to a given filename. If linearize is true, it will be linearized if a linearizer is available. If make_id is true, it will be given a new ID. @arg {pdf} pdf PDF document @arg {string} filename file name @arg {boolean} linearize linearize if a linearizer is available @arg {boolean} make_id make a new /ID */ function toFile(pdf, filename, linearize, make_id) {} /** Writes the file to a given filename. If make_id is true, it will be given a new ID. If preserve_objstm is true, existing object streams will be preserved. If generate_objstm is true, object streams will be generated even if not originally present. If compress_objstm is true, object streams will be compressed (what we usually want). WARNING: the pdf argument will be invalid after this call, and should be not be used again. @arg {pdf} pdf PDF document @arg {string} filename file name @arg {boolean} linearize linearize if a linearizer is available @arg {boolean} preserve_objstm preserve existing object streams @arg {boolean} generate_objstm create new object streams @arg {boolean} compress_objstm compress new object streams */ function toFileExt(pdf, filename, linearize, make_id, preserve_objstm, generate_objstm, compress_objstm) {} /** Writes a PDF file and returns as an array of bytes. @arg {pdf} pdf PDF document @arg {boolean} linearize linearize if a linearizer is available @arg {boolean} make_id make a new /ID @result {Uint8Array} PDF document as an array of bytes */ function toMemory(pdf, linearize, make_id) {} /** Writes the file to memory. If make_id is true, it will be given a new ID. If preserve_objstm is true, existing object streams will be preserved. If generate_objstm is true, object streams will be generated even if not originally present. If compress_objstm is true, object streams will be compressed (what we usually want). WARNING: the pdf argument will be invalid after this call, and should be not be used again. @arg {pdf} pdf PDF document @arg {boolean} linearize linearize if a linearizer is available @arg {boolean} preserve_objstm preserve existing object streams @arg {boolean} generate_objstm create new object streams @arg {boolean} compress_objstm compress new object streams @result {Uint8Array} PDF file as a byte array */ function toMemoryExt(pdf, linearize, make_id, preserve_objstm, generate_objstm, compress_objstm) {} /** Returns true if a document is encrypted, false otherwise. @arg {pdf} pdf PDF document @return {boolean} true if document encrypted, false otherwise */ function isEncrypted(pdf) {} /** Attempts to decrypt a PDF using the given user password. An exception is raised if the decryption fails. @arg {pdf} pdf PDF document @arg {string} userpw user password, or empty if none */ function decryptPdf(pdf, userpw) {} /** Attempts to decrypt a PDF using the given owner password. Raises an exception if the decryption fails. @arg {pdf} pdf PDF document @arg {string} ownerpw owner password, or empty if none */ function decryptPdfOwner(pdf, ownerpw) {} /** Cannot edit the document */ var noEdit = 0; /** Cannot print the document */ var noPrint = 1; /** Cannot copy the document */ var noCopy = 2; /** Cannot annotate the document */ var noAnnot = 3; /** Cannot edit forms in the document */ var noForms = 4; /** Cannot extract information */ var noExtract = 5; /** Cannot assemble into a bigger document */ var noAssemble = 6; /** Cannot print high quality */ var noHqPrint = 7; /** 40 bit RC4 encryption */ var pdf40bit = 0; /** 128 bit RC4 encryption */ var pdf128bit = 1; /** 128 bit AES encryption, do not encrypt metadata */ var aes128bitfalse = 2; /** 128 bit AES encryption, encrypt metadata */ var aes128bittrue = 3; /** Deprecated. Do not use for new files */ var aes256bitfalse = 4; /** Deprecated. Do not use for new files */ var aes256bittrue = 5; /** 256 bit AES encryption, do not encrypt metadata */ var aes256bitisofalse = 6; /** 256 bit AES encryption, encrypt metadata */ var aes256bitisotrue = 7; /** Writes a file as encrypted. @arg {pdf} pdf PDF document @arg {"encryption method"} encryption_method encryption method @arg {"permission array"} array of permissions @arg {string} ownerpw owner password @arg {string} userpw user password @arg {boolean} linearize linearize if a linearizer is available @arg {boolean} makeid make a new /ID @arg {string} filename file name */ function toFileEncrypted(pdf, encryption_method, permissions, ownerpw, userpw, linearize, makeid, filename) {} /** Writes to memory as encrypted. @arg {pdf} pdf PDF document @arg {"encryption method"} encryption_method encryption method @arg {"permission array"} array of permissions @arg {string} ownerpw owner password @arg {string} userpw user password @arg {boolean} linearize linearize if a linearizer is available @arg {boolean} makeid make a new /ID @return {Uint8Array} PDF file as a byte array */ function toMemoryEncrypted(pdf, encryption_method, permissions, ownerpw, userpw, linearize, makeid) {} /** Writes a file as encrypted with extra parameters. WARNING: the pdf argument will be invalid after this call, and should not be used again. @arg {pdf} pdf PDF document @arg {"encryption method"} encryption_method encryption method @arg {"permission array"} array of permissions @arg {string} ownerpw owner password @arg {string} userpw user password @arg {boolean} linearize linearize if a linearizer is available @arg {boolean} makeid make a new /ID @arg {boolean} preserve_objstm preserve existing object streams @arg {boolean} generate_objstm generate new object streams @arg {boolean} compress_objstm compress object streams @arg {string} filename file name */ function toFileEncryptedExt(pdf, encryption_method, permissions, ownerpw, userpw, linearize, makeid, preserve_objstm, generate_objstm, compress_objstm, filename) {} /** Writes a file as encrypted with extra parameters. WARNING: the pdf argument will be invalid after this call, and should not be used again. @arg {pdf} pdf PDF document @arg {"encryption method"} encryption_method encryption method @arg {"permission array"} array of permissions @arg {string} ownerpw owner password @arg {string} userpw user password @arg {boolean} linearize linearize if a linearizer is available @arg {boolean} makeid make a new /ID @arg {boolean} preserve_objstm preserve existing object streams @arg {boolean} generate_objstm generate new object streams @arg {boolean} compress_objstm compress object streams @return {Uint8Array} PDF file as a byte array */ function toMemoryEncryptedExt(pdf, encryption_method, permissions, ownerpw, userpw, linearize, makeid, preserve_objstm, generate_objstm, compress_objstm) {} /** Returns true if the given permission (restriction) is present. @arg {pdf} pdf PDF document @arg {permission} permission permission @return {boolean} true if permission present */ function hasPermission(pdf, permission) {} /** Returns the encryption method currently in use on a document. @arg {pdf} pdf PDF document @return {"encryption method"} encryption method */ function encryptionKind(pdf) {} ���������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/javascriptsplits/c13.tex�������������������������������������������������������0000664�0001750�0001750�00000004341�14771516640�017654� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// CHAPTER 12. File Attachments /** Attaches a file to the pdf. It is attached at document level. @arg {string} filename file name @arg {pdf} pdf PDF document */ function attachFile(filename, pdf) {} /** Attaches a file, given its file name, pdf, and the page number to which it should be attached. @arg {string} filename file name @arg {pdf} pdf PDF document @arg {number} pagenumber page number */ function attachFileToPage(filename, pdf, pagenumber) {} /** Attaches data from memory, just like attachFile. @arg {Uint8Array} data file as a byte array @arg {string} filename file name to call it in the PDF @arg {pdf} pdf PDF document */ function attachFileFromMemory(data, filename, pdf) {} /** Attaches to a page from memory, just like attachFileToPage. @arg {Uint8Array} data file as a byte array @arg {string} filename file name to call it in the PDF @arg {pdf} pdf PDF document @arg {number} pagenumber page number */ function attachFileToPageFromMemory(data, filename, pdf, pagenumber) {} /** Removes all page- and document-level attachments from a document. @arg {pdf} pdf PDF document */ function removeAttachedFiles(pdf) {} /** Lists information about attachments. Call startGetAttachments(pdf) first, then numberGetAttachments to find out how many there are. Then getAttachmentName etc. to return each one 0...(n - 1). Finally, call endGetAttachments to clean up. @arg {pdf} pdf PDF document */ function startGetAttachments(pdf) {} /** Lists information about attachments. Call startGetAttachments(pdf) first, then numberGetAttachments to find out how many there are. Then getAttachmentName etc. to return each one 0...(n - 1). Finally, call endGetAttachments to clean up. @return {number} number of attachments */ function numberGetAttachments() {} /** Gets the name of an attachment. @arg {number} n serial number @return {string} attachment name */ function getAttachmentName(n) {} /** Gets the page number. 0 = document level. @arg {number} n serial number @return {number} attachment page */ function getAttachmentPage(n) {} /** Gets the attachment data itself. @arg {number} n serial number @return {Uint8Array} attachment data */ function getAttachmentData(n) {} /** Cleans up after getting attachments. */ function endGetAttachments() {} �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/pysplits/����������������������������������������������������������������������0000775�0001750�0001750�00000000000�14771516640�015024� 5����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/pysplits/c08.tex���������������������������������������������������������������0000664�0001750�0001750�00000000046�14771516640�016140� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Not included in the library version ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/pysplits/c18.tex���������������������������������������������������������������0000664�0001750�0001750�00000002452�14771516640�016144� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������def blankDocument(w, h, pages): """Create a blank document with pages of the given width (in points), height (in points), and number of pages.""" def blankDocumentPaper(papersize, pages): """Create a blank document with pages of the given paper size, and number of pages.""" def textToPDF(w, h, font, fontsize, filename): """Typesets a UTF8 text file ragged right on a page of size w * h in points in the given font and font size.""" def textToPDFMemory(w, h, font, fontsize, data): """Typesets a UTF8 text file ragged right on a page of size w * h in points in the given font and font size.""" def textToPDFPaper(papersize, font, fontsize, filename): """Typesets a UTF8 text file ragged right on a page of the given size in the given font and font size.""" def textToPDFPaperMemory(papersize, font, fontsize, data): """Typesets a UTF8 text file ragged right on a page of the given size in the given font and font size.""" def fromPNG(filename): """Builds a PDF from a non-interlaced non-transparent PNG file.""" def fromPNGMemory(data): """Builds a PDF from a non-interlaced non-transparent PNG file bytearray.""" def fromJPEG(filename): """Builds a PDF from a JPEG file.""" def fromJPEGMemory(data): """Builds a PDF from a JPEG file bytearray.""" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/pysplits/c07.tex���������������������������������������������������������������0000664�0001750�0001750�00000001311�14771516640�016133� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������def getBookmarks(pdf): """Get the bookmarks for a PDF as a list of tuples of the form: (level : int, page : int, text : string, openstatus : bool)""" def setBookmarks(pdf, marks): """Set the bookmarks for a PDF as a list of tuples of the form: (level : int, page : int, text : string, openstatus : bool)""" def getBookmarksJSON(pdf): """Get the bookmarks in JSON format.""" def setBookmarksJSON(pdf, data): """Sets the bookmarks from JSON bookmark data.""" def tableOfContents(pdf, font, fontsize, title, bookmark): """Typesets a table of contents from existing bookmarks and prepends it to the document. If bookmark is set, the table of contents gets its own bookmark.""" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/pysplits/c17.tex���������������������������������������������������������������0000664�0001750�0001750�00000001073�14771516640�016141� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������def getOCGList(pdf): """Return a list of Optional Content Groups in the given pdf as strings.""" def OCGRename(pdf, n_from, n_to): """Rename an optional content group.""" def OCGOrderAll(pdf): """Ensure that every optional content group appears in the OCG order list. """ def OCGCoalesce(pdf): """Coalesce optional content groups. For example, if we merge or stamp two files both with an OCG called "Layer 1", we will have two different optional content groups. This function will merge the two into a single optional content group.""" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/pysplits/c04.tex���������������������������������������������������������������0000664�0001750�0001750�00000005021�14771516640�016132� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������def scalePages(pdf, r, sx, sy): """Scale the page dimensions and content of the given range of pages by the given scale (sx, sy), about (0, 0). Other boxes (crop etc. are altered as appropriate).""" def scaleToFit(pdf, r, w, h, scale_to_fit_scale): """Scales the pages in the range to fit new page dimensions (w and h) multiplied by scale_to_fit_scale (typically 1.0). Other boxes (crop etc.) are altered as appropriate.""" def scaleToFitPaper(pdf, r, papersize, scale_to_fit_scale): """Scales the given pages to fit the given page size, possibly multiplied by scale_to_fit_scale (typically 1.0).""" def scaleContents(pdf, r, pos, scale): """Scales the contents of the pages in the range about the point given by the position, by the scale given.""" def shiftContents(pdf, r, dx, dy): """Shift the content of the pages in the range by (dx, dy).""" r = range_of_list(r) def shiftBoxes(pdf, r, dx, dy): """Shift the pages boxes in the range by (dx, dy).""" def rotate(pdf, r, rotation): """Change the viewing rotation of the pages in the range to an absolute value. Appropriate rotations are 0, 90, 180, 270.""" def rotateBy(pdf, r, rotation): """Change the viewing rotation of the pages in the range by a given number of degrees. Appropriate values are 90, 180, 270.""" def rotateContents(pdf, r, rotation): """Rotate the content about the centre of the page by the given number of degrees, in a clockwise direction.""" def upright(pdf, r): """Change the viewing rotation of the pages in the range, counter-rotating the dimensions and content such that there is no visual change.""" def hFlip(pdf, r): """Flip horizontally the pages in the range.""" def vFlip(pdf, r): """Flip vertically the pages in the range.""" def crop(pdf, r, x, y, w, h): """Crop a page to the box defined by (x, y, w, h), replacing any existing crop box.""" def removeCrop(pdf, r): """Remove any crop box from pages in the range.""" def removeTrim(pdf, r): """Remove any trim box from pages in the range.""" def removeArt(pdf, r): """Remove any art box from pages in the range.""" def removeBleed(pdf, r): """Remove any bleed box from pages in the range.""" def trimMarks(pdf, r): """Add trim marks to the given pages, if the trimbox exists.""" def showBoxes(pdf, r): """Show the boxes on the given pages, for debug.""" def hardBox(pdf, r, boxname): """Make a given box a 'hard box' i.e clip it explicitly. Boxname could be, for example "/TrimBox".""" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/pysplits/c00.tex���������������������������������������������������������������0000664�0001750�0001750�00000001305�14771516640�016127� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������"""Pycpdflib: a python interface to cpdf. Before using the library, you must load the libpycpdf and libcpdf DLLs. This is achieved with the pycpdflib.loadDLL function, given the filename or full path of the libpycpdf DLL. On Windows, you may have to call os.add_dll_directory first. On MacOS, you may need to give the full path, and you may need to install libcpdf.so in a standard location /usr/local/lib/, or use the install_name_tool command to tell libpycpdf.so where to find libcpdf.so. A 'range' is a list of integers specifying page numbers. Text arguments and results are in UTF8. Data is of type bytes. Any function may raise the exception CPDFError, carrying a string describing the error. """ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/pysplits/c09.tex���������������������������������������������������������������0000664�0001750�0001750�00000011133�14771516640�016140� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������def stampOn(pdf, pdf2, r): """Stamps pdf on top of all the pages in pdf2 which are in the range. The stamp is placed with its origin at the origin of the target document.""" def stampUnder(pdf, pdf2, r): """Stamps pdf under under all the pages in pdf2 which are in the range. The stamp is placed with its origin at the origin of the target document.""" def stampExtended(pdf, pdf2, r, isover, scale_stamp_to_fit, pos, relative_to_cropbox): """A stamping function with extra features: - isover True, pdf goes over pdf2, isover False, pdf goes under pdf2 - scale_stamp_to_fit scales the stamp to fit the page - pos gives the position to put the stamp - relative_to_cropbox: if True, pos is relative to crop box not media box """ def combinePages(pdf, pdf2): """Combines the PDFs page-by-page, putting each page of pdf2 over each page of pdf.""" def addText(metrics, pdf, r, text, p, line_spacing, bates, font, size, red, green, blue, underneath, relative_to_cropbox, outline, opacity, justification, midline, topline, filename, line_width, embed_fonts): """Adding text. Adds text to a PDF, if the characters exist in the font. * metrics: If True, don't actually add text but collect metrics. * pdf: Document * r: Page Range * text: The text to add * p: Position to add text at * line_spacing: Linespacing, 1.0 = normal * bates: Starting Bates number * font: Font * size: Font size in points * red: Red component of colour, 0.0 - 1.0 * green: Green component of colour, 0.0 - 1.0 * blue: Blue component of colour, 0.0 - 1.0 * underneath: If True, text is added underneath rather than on top * relative_to_cropbox: If True, position is relative to crop box not media box * outline: If True, text is outline rather than filled * opacity: Opacity, 1.0 = opaque, 0.0 = wholly transparent * justification: Justification * midline: If True, position is relative to midline of text, not baseline * topline: If True, position is relative to topline of text, not baseline * filename: filename that this document was read from (optional) * line_width: line width * embed_fonts: embed fonts Special codes * %Page Page number in arabic notation (1, 2, 3...) * %roman Page number in lower-case roman notation (i, ii, iii...) * %Roman Page number in upper-case roman notation (I, II, III...) * %EndPage Last page of document in arabic notation * %Label The page label of the page * %EndLabel The page label of the last page * %filename The full file name of the input document * %a Abbreviated weekday name (Sun, Mon etc.) * %A Full weekday name (Sunday, Monday etc.) * %b Abbreviated month name (Jan, Feb etc.) * %B Full month name (January, February etc.) * %d Day of the month (01-31) * %e Day of the month (1-31) * %H Hour in 24-hour clock (00-23) * %I Hour in 12-hour clock (01-12) * %j Day of the year (001-366) * %m Month of the year (01-12) * %M Minute of the hour (00-59) * %p "a.m" or "p.m" * %S Second of the minute (00-61) * %T Same as %H:%M:%S * %u Weekday (1-7, 1 = Monday) * %w Weekday (0-6, 0 = Monday) * %Y Year (0000-9999) * %% The % character""" def addTextSimple(pdf, r, text, p, font, size): """Like addText, but with most parameters default * pdf = the document * r = the range * text = the text * p = the position * font = the font * size = the font size NB: %filename cannot be used here. """ def removeText(pdf, r): """Remove any text added by libcpdf from the given pages.""" def textWidth(font, string): """Return the width of a given string in the given font in thousandths of a point.""" def addContent(content, before, pdf, r): """Add page content before (if True) or after (if False) the existing content to pages in the given range in the given PDF. Warning: this a low level function requiring understanding of the PDF format.""" def stampAsXObject(pdf, r, stamp_pdf): """Stamps stamp_pdf onto the pages in the given range in pdf as a shared Form XObject. The name of the newly-created XObject is returned, for use with addContent. """ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/pysplits/c12.tex���������������������������������������������������������������0000664�0001750�0001750�00000022336�14771516640�016141� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������def isLinearized(filename): """Finds out if a document is linearized as quickly as possible without loading it.""" def hasAcroForm(pdf): """Returns True if the document has an AcroForm.""" def getSubformats(pdf): """Returns a list of the subformats of the PDF, if any.""" def hasObjectStreams(pdf): """Returns True if a document was written using object streams.""" def id1(pdf): """Return the first ID string of the PDF, if any, in hexadecimal string format.""" def id2(pdf): """Return the second ID string of the PDF, if any, in hexadecimal string format.""" def getVersion(pdf): """Return the minor version number of a document.""" def getMajorVersion(pdf): """Return the minor version number of a document.""" def getTitle(pdf): """Return the title of a document.""" def getAuthor(pdf): """Return the subject of a document.""" def getSubject(pdf): """Return the subject of a document.""" def getKeywords(pdf): """Return the keywords of a document.""" def getCreator(pdf): """Return the creator of a document.""" def getProducer(pdf): """Return the producer of a document.""" def getCreationDate(pdf): """Return the creation date of a document.""" def getModificationDate(pdf): """Return the modification date of a document.""" def getTitleXMP(pdf): """Return the XMP title of a document.""" def getAuthorXMP(pdf): """Return the XMP author of a document.""" def getSubjectXMP(pdf): """Return the XMP subject of a document.""" def getKeywordsXMP(pdf): """Return the XMP keywords of a document.""" def getCreatorXMP(pdf): """Return the XMP creator of a document.""" def getProducerXMP(pdf): """Return the XMP producer of a document.""" def getCreationDateXMP(pdf): """Return the XMP creation date of a document.""" def getModificationDateXMP(pdf): """Return the XMP modification date of a document.""" def setTitle(pdf, s): """Set the title of a document.""" def setAuthor(pdf, s): """Set the author of a document.""" def setSubject(pdf, s): """Set the subject of a document.""" def setKeywords(pdf, s): """Set the keywords of a document.""" def setCreator(pdf, s): """Set the creator of a document.""" def setProducer(pdf, s): """Set the producer of a document.""" def setCreationDate(pdf, s): """Set the creation date of a document.""" def setModificationDate(pdf, s): """Set the modifcation date of a document.""" def setTitleXMP(pdf, s): """Set the XMP title of a document.""" def setAuthorXMP(pdf, s): """Set the XMP author of a document.""" def setSubjectXMP(pdf, s): """Set the XMP subject of a document.""" def setKeywordsXMP(pdf, s): """Set the XMP keywords of a document.""" def setCreatorXMP(pdf, s): """Set the XMP creator of a document.""" def setProducerXMP(pdf, s): """Set the XMP producer of a document.""" def setCreationDateXMP(pdf, s): """Set the XMP creation date of a document.""" def setModificationDateXMP(pdf, s): """Set the XMP modification date of a document.""" def getDateComponents(string): """Return the components (year, month, day, hour, minute, second, hour_offset, minute_offset) from a PDF date string. Month 1-31, day 1-31, hours (0-23), minutes (0-59), seconds (0-59), hour_offset is the offset from UT in hours (-23 to 23); minute_offset is the offset from UT in minutes (-59 to 59).""" def dateStringOfComponents(cs): """Build a PDF date string a (year, month, day, hour, minute, second, hour_offset, minute_offset) tuple. Dates: Month 1-31, day 1-31, hours (0-23), minutes (0-59), seconds (0-59), hour_offset is the offset from UT in hours (-23 to 23); minute_offset is the offset from UT in minutes (-59 to 59).""" def getPageRotation(pdf, pagenumber): """Get the viewing rotation for a given page.""" def hasBox(pdf, pagenumber, boxname): """Returns True, if the page has the given box. E.g "/CropBox".""" def numAnnots(pdf, pagenumber): """Return the number of annotations on the given page in the given PDF.""" def getMediaBox(pdf, pagenumber): """Get a mediabox box given the document, page range, min x, max x, min y, max y in points. Only suceeds if such a box exists, as checked by hasBox.""" def getCropBox(pdf, pagenumber): """Get a crop box given the document, page range, min x, max x, min y, max y in points. Only suceeds if such a box exists, as checked by hasBox.""" def getTrimBox(pdf, pagenumber): """Get a trim box given the document, page range, min x, max x, min y, max y in points. Only suceeds if such a box exists, as checked by hasBox.""" def getArtBox(pdf, pagenumber): """Get an art box given the document, page range, min x, max x, min y, max y in points. Only suceeds if such a box exists, as checked by hasBox.""" def getBleedBox(pdf, pagenumber): """Get a bleed box given the document, page range, min x, max x, min y, max y in points. Only suceeds if such a box exists, as checked by hasBox.""" def setMediaBox(pdf, r, minx, maxx, miny, maxy): """Set the media box given the document, page range, min x, max x, min y, max y in points.""" def setCropBox(pdf, r, minx, maxx, miny, maxy): """Set the crop box given the document, page range, min x, max x, min y, max y in points.""" def setTrimBox(pdf, r, minx, maxx, miny, maxy): """Set the trim box given the document, page range, min x, max x, min y, max y in points.""" def setArtBox(pdf, r, minx, maxx, miny, maxy): """Set the art box given the document, page range, min x, max x, min y, max y in points.""" def pageInfoJSON(pdf): """Returns JSON data for the page information.""" def setBleedBox(pdf, r, minx, maxx, miny, maxy): """Set the bleed box given the document, page range, min x, max x, min y, max y in points.""" def markTrapped(pdf): """Mark a document as trapped.""" def markUntrapped(pdf): """Mark a document as untrapped.""" def markTrappedXMP(pdf): """Mark a document as trapped in XMP metadata.""" def markUntrappedXMP(pdf): """Mark a document as untrapped in XMP metadata.""" def setPageLayout(pdf, layout): """Set the page layout for a document.""" def getPageLayout(pdf): """Get the page layout for a document.""" def setPageMode(pdf, mode): """Set the page mode for a document.""" def getPageMode(pdf): """Get the page mode for a document""" def hideToolbar(pdf, flag): """Sets the hide toolbar flag.""" def getHideToolbar(pdf): """Get the hide toolbar flag.""" def hideMenubar(pdf, flag): """Set the hide menu bar flag.""" def getHideMenubar(pdf): """Get the hide menubar flag.""" def hideWindowUi(pdf, flag): """Set the hide window UI flag.""" def getHideWindowUi(pdf): """Get the hide window UI flag.""" def fitWindow(pdf, flag): """Set the fit window flag.""" def getFitWindow(pdf): """Get the fit window flag.""" def centerWindow(pdf, flag): """Set the center window flag.""" def getCenterWindow(pdf): """Get the center window flag.""" def displayDocTitle(pdf, flag): """Set the display document title flag.""" def getDisplayDocTitle(pdf): """Get the display document title flag.""" def nonFullScreenPageMode(pdf, flag): """set the non full screen page mode flag.""" def getNonFullScreenPageMode(pdf): """get the non full screen page mode flag.""" def openAtPage(pdf, fitflag, pagenumber): """Set the PDF to open, possibly with zoom-to-fit, at the given page number. """ def openAtPageCustom(pdf, custom): """Set a custom openAtPage description.""" def setMetadataFromFile(pdf, filename): """Set the XMP metadata of a document, given a file name.""" def setMetadataFromByteArray(pdf, data): """Set the XMP metadata from an array of bytes.""" def getMetadata(pdf): """Return the XMP metadata as a byte array of type bytes""" def removeMetadata(pdf): """Remove the XMP metadata from a document.""" def createMetadata(pdf): """Builds fresh XMP metadata as good as possible from existing metadata in the document.""" def setMetadataDate(pdf, date): """Set the metadata date for a PDF. The date is given in PDF date format -- cpdf will convert it to XMP format. The date 'now' means now.""" def getPageLabels(pdf): """Get page labels as a list of tuples (style, prefix, offset, startvalue) For example, a document might have five pages of introduction with roman numerals, followed by the rest of the pages in decimal arabic, numbered from one. First label: * labelstyle = LowercaseRoman * labelprefix = "" * startpage = 1 * startvalue = 1 Second label: * labelstyle = DecimalArabic * labelprefix = "" * startpage = 6 * startvalue = 1""" def addPageLabels(pdf, label, progress): """Add one group of page labels from a tuple (style, prefix, offset, range). The prefix is prefix text for each label. The range is the page range the labels apply to. Offset can be used to shift the numbering up or down.""" def removePageLabels(pdf): """Removes all page labels from the document.""" def getPageLabelStringForPage(pdf, pagenumber): """Calculate the full label string for a given page, and return it.""" def compositionJSON(filesize, pdf): """Get the composition in JSON format.""" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/pysplits/c06.tex���������������������������������������������������������������0000664�0001750�0001750�00000000656�14771516640�016145� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������def compress(pdf): """Compress any uncompressed streams in the given PDF using the Flate algorithm.""" def decompress(pdf): """Decompress any streams in the given PDF, so long as the compression method is supported.""" def squeezeInMemory(pdf): """squeezeToMemory(pdf) squeezes a pdf in memory. Squeezing is a lossless compression method which works by rearrangement of a PDFs internal structure.""" ����������������������������������������������������������������������������������cpdf-2.8.1/docsplits/pysplits/c11.tex���������������������������������������������������������������0000664�0001750�0001750�00000000466�14771516640�016140� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������def annotationsJSON(pdf): """Gets the annotations in JSON format.""" def removeAnnotations(pdf, r): """Removes all annotations from pages in the given range.""" def setAnnotationsJSON(pdf, data): """Adds the annotations given in JSON format to the PDF, on top of any existing annotations.""" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/pysplits/c19.tex���������������������������������������������������������������0000664�0001750�0001750�00000013044�14771516640�016144� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������def drawBegin(): """Sets up the drawing process. It must be called before any other draw* function.""" def drawEnd(pdf, r): """Commits the drawing to the given PDF on pages in the given range.""" def drawEndExtended(pdf, r, underneath, bates, filename): """The same as drawEnd, but provides the special parameters which may be required when using drawSText.""" def drawRect(x, y, w, h): """Add a rectangle to the current path.""" def drawTo(x, y): """Move the current point to (x, y).""" def drawLine(x, y): """Adds a line from the current point to (x, y) to the current path.""" def drawBez(x1, y1, x2, y2, x3, y3): """Adds a Bezier curve to the current path.""" def drawBez23(x2, y2, x3, y3): """Adds a Bezier curve twith (x1, y1) = current point.""" def drawBez13(x1, y1, x3, y3): """Adds a Bezier curve with (x3, y3) = new current point.""" def drawCircle(x, y, r): """Adds a circle to the current path.""" def drawStroke(): """Stroke the current path and clear it.""" def drawFill(): """Fills the current path with a non-zero winding rule, and clears it. """ def drawFillEo(): """Fills the current path with an even-odd winding rule, and clears it. """ def drawStrokeFill(): """Fills and then strokes the current path with a non-zero winding rule, and clears it. """ def drawStrokeFillEo(): """Fills and then strokes the current path with an even-odd winding rule, and clears it. """ def drawClose(): """Closes the current path by appending a straight line segment from the current point to the starting point of the subpath. """ def drawClip(): """Uses the current path as a clipping region, using the non-zero winding rule. """ def drawClipEo(): """Uses the current path as a clipping region, using the even-odd winding rule. """ def drawStrokeColGrey(g): """Changes to a greyscale stroke colourspace and sets the stroke colour. """ def drawStrokeColRGB(r, g, b): """Changes to an RGB stroke colourspace and sets the stroke colour. """ def drawStrokeColCYMK(c, y, m, k): """Changes to a CYMK stroke colourspace and sets the stroke colour. """ def drawFillColGrey(g): """Changes to a greyscale fill colourspace and sets the fill colour. """ def drawFillColRGB(r, g, b): """Changes to an RGB fill colourspace and sets the fill colour. """ def drawFillColCYMK(c, y, m, k): """Changes to a CYMK fill colourspace and sets the fill colour. """ def drawThick(thickness): """Sets the line thickness.""" def drawCap(captype): """Sets the line cap.""" def drawJoin(jointype): """Sets the line join type""" def drawMiter(miter): """Sets the miter limit.""" def drawDash(description): """Sets the line dash style""" def drawPush(): """Saves the current graphics state on the stack. """ def drawPop(): """Restores the graphics state from the stack. """ def drawMatrix(a, b, c, d, e, f): """Appends the given matrix to the Current Transformation Matrix. """ def drawMTrans(tx, ty): """Appends a translation by (tx, ty) to the Current Transformation Matrix. """ def drawMRot(x, y, a): """Appends a rotation by a around (a, y) to the Current Transformation Matrix. """ def drawMScale(x, y, sx, sy): """Appends a scaling by (sx, sy) around (x, y) to the Current Transformation Matrix. """ def drawMShearX(x, y, a): """Appends an X shearing of angle a around (x, y) to the Current Transformation Matrix. """ def drawMShearY(x, y, a): """Appends an X shearing of angle a around (x, y) to the Current Transformation Matrix. """ def drawXObjBBox(x, y, w, h): """Sets the XObject bounding box. """ def drawXObj(name): """Begins the storing of an XObject. """ def drawEndXObj(): """Ends the storing of an XObject.""" def drawUse(name): """Uses the named XObject. """ def drawJPEG(name, filename): """Loads a JPEG from the given file, storing it under the given name. """ def drawJPEGMemory(name, data): """Loads a JPEG from the given bytearray, storing it under the given name. """ def drawPNG(name, filename): """Loads a non-interlaced non-transparent PNG from the given file, storing it under the given name. """ def drawPNGMemory(name, data): """Loads a non-interlaced non-transparent PNG from the given bytearray, storing it under the given name. """ def drawImage(name): """Draws a stored image. To draw at the expected size, it is required to scale the Current Transformation Matrix by the width and height of the image. """ def drawFillOpacity(n): """Sets the fill opacity.""" def drawStrokeOpacity(n): """Sets the stroke opacity.""" def drawBT(): """Begins a text section.""" def drawET(): """Ends a text section.""" def drawFont(name): """Sets the font.""" def drawFontSize(n): """Sets the font size.""" def drawText(text): """Draws text.""" def drawSText(text): """draws text with %Specials. You may need to use cpdf_drawEndExtended instead of cpdf_drawEnd later, to provide the extra information required. """ def drawLeading(n): """Sets the leading.""" def drawCharSpace(n): """Sets the character spacing.""" def drawWordSpace(n): """Sets the word spacing.""" def drawTextScale(n): """Sets the text scaling.""" def drawRenderMode(n): """Sets the text rendering mode.""" def drawRise(n): """Sets the text rise.""" def drawNL(): """Moves to the next line. """ def drawNewPage(): """Moves to the next page, creating it if necessary, and setting the range to just that new page. """ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/pysplits/c05.tex���������������������������������������������������������������0000664�0001750�0001750�00000000062�14771516640�016133� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Encryption covered under Chapter 1 in pycpdflib ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/pysplits/c15.tex���������������������������������������������������������������0000664�0001750�0001750�00000000733�14771516640�016141� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������def getFontInfo(pdf): """Get a list of (pagenumber, fontname, fonttype, fontencoding) tuples, showing each font used on each page.""" def fontsJSON(pdf): """Return font information in JSON format.""" def removeFonts(pdf): """Remove all font data from a file.""" def copyFont(pdf, pdf2, r, pagenumber, fontname): """Copy the given font from the given page in the pdf PDF to every page in the pdf2 PDF. The new font is stored under its font name.""" �������������������������������������cpdf-2.8.1/docsplits/pysplits/c16.tex���������������������������������������������������������������0000664�0001750�0001750�00000001474�14771516640�016145� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������def JSONUTF8(utf8): """Set the JSON output format. If true, the newer UTF8 format is used. Default: False.""" def outputJSON(filename, parse_content, no_stream_data, decompress_streams, pdf): """Output a PDF in JSON format to the given filename. If parse_content is True, page content is parsed. If decompress_streams is True, streams are decompressed. If no_stream_data is True, all stream data is suppressed entirely.""" def outputJSONMemory(pdf, parse_content, no_stream_data, decompress_streams): """outputJSONMemory(pdf, parse_content, no_stream_data, decompress_stream) is like outputJSON, but it write to a buffer in memory).""" def fromJSON(filename): """Load a PDF from a JSON file given its filename.""" def fromJSONMemory(data): """ Load a PDF from JSON data in memory.""" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/pysplits/c01.tex���������������������������������������������������������������0000664�0001750�0001750�00000010225�14771516640�016131� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������""" Loading the libpypcdf and libcpdf DLLs -------------------------------------- Before using the library, you must load the ``libpycpdf`` and ``libcpdf`` DLLs. This is achieved with the ``pycpdflib.loadDLL`` function, given the filename or full path of the ``libpycpdf`` DLL. On Windows, you may have to call ``os.add_dll_directory`` first. On MacOS, you may need to give the full path, and you may need to install ``libcpdf.so`` in a standard location ``/usr/local/lib/``, or use the ``install_name_tool`` command to tell ``libpycpdf.so`` where to find ``libcpdf.so``. Conventions ----------- Any function may raise the exception ``CPDFError``, carrying a string describing the error. A 'range' is a list of integers specifying page numbers. Page numbers start at 1. Range arguments are called `r`. Text arguments and results are in UTF8. Units are in PDF points (1/72 inch). Angles are in degrees. Built-in values --------------- Paper sizes: a0portrait a1portrait a2portrait a3portrait a4portrait a5portrait a0landscape a1landscape a2landscape a3landscape a4landscape a5landscape usletterportrait usletterlandscape uslegalportrait uslegallandscape Permissions: noEdit noPrint noCopy noAnnot noForms noExtract noAssemble noHqPrint Encryption methods: pdf40bit pdf128bit aes128bitfalse aes128bittrue aes256bitfalse aes256bittrue aes256bitisofalse aes256bitisotrue Positions: Positions with two numbers in a tuple e.g (posLeft, 10.0, 20.0) posCentre posLeft posRight Positions with one number in a tuple e.g (top, 5.0) top topLeft topRight left bottomLeft bottomRight right Positions with no numbers e.g diagonal diagonal reverseDiagonal Fonts: timesRoman timesBold timesItalic timesBoldItalic helvetica helveticaBold helveticaOblique helveticaBoldOblique courier courierBold courierOblique courierBoldOblique Justification: leftJustify centreJustify rightJustify Page layouts: singlePage oneColumn twoColumnLeft twoColumnRight twoPageLeft twoPageRight Page modes: useNone useOutlines useThumbs useOC useAttachments Page label styles: decimalArabic uppercaseRoman lowercaseRoman uppercaseLetters lowercaseLetters Line cap types: capButt capRound capSquare Line join types: joinMiter joinRound joinBevel """ # CHAPTER 0. Preliminaries class Pdf: """The type of PDF documents.""" def loadDLL(f): """Load the libpycpdf DLL from a given file, and set up pycpdflib. Must be called prior to using any other function in the library.""" class CPDFError(Exception): """Any function may raise an exception CPDFError, carrying a string describing what went wrong.""" def lastError(): """Return the last error. Not usually used directly, since pycpdflib functions raise exceptions.""" def lastErrorString(): """Return the last error string. Not usually used directly, since pycpdflib functions raise exceptions.""" def checkerror(): """Raise an exception if the last function call resulted in an error. Not used directly, since pycpdflib functions will raise the exception directly.""" def version(): """Return the version number of the pycpdflib library.""" def setFast(): """Set fast mode. Some operations have a fast mode. The default is 'slow' mode, which works even on old-fashioned files. For more details, see section 1.13 of the CPDF manual. This function sets the mode globally.""" def setSlow(): """Set slow mode. Some operations have a fast mode. The default is 'slow' mode, which works even on old-fashioned files. For more details, see section 1.13 of the CPDF manual. This function sets the mode globally.""" def embedStd14(embed): """Calling this function with a true argument sets embedding for the Standard 14 fonts. You must also set the directory to load them from with the embedStd14Dir function. Default value: False.""" def embedStd14Dir(d): """Set the directory to load Standard 14 fonts for embedding.""" libc.pycpdf_embedStd14Dir(str.encode(d)) def clearError(): """Clear the current error state.""" def onExit(): """A debug function which prints some information about resource usage. This can be used to detect if PDFs or ranges are being deallocated properly.""" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/pysplits/c03.tex���������������������������������������������������������������0000664�0001750�0001750�00000001547�14771516640�016142� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������def mergeSimple(pdfs): """Given a list of PDFs, merges the documents into a new PDF, which is returned.""" def merge(pdfs, retain_numbering, remove_duplicate_fonts): """Merges the list of PDFs. If retain_numbering is True page labels are not rewritten. If remove_duplicate_fonts is True, duplicate fonts are merged. This is useful when the source documents for merging originate from the same source.""" def mergeSame(pdfs, retain_numbering, remove_duplicate_fonts, ranges): """The same as merge, except that it has an additional argument (a list of page ranges). This is used to select the pages to pick from each PDF. This avoids duplication of information when multiple discrete parts of a single source PDF are included.""" def selectPages(pdf, r): """Returns a new document which just those pages in the page range.""" ���������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/pysplits/c20.tex���������������������������������������������������������������0000664�0001750�0001750�00000003312�14771516640�016131� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������def draft(pdf, r, boxes): """Remove images on the given pages, replacing them with crossed boxes if 'boxes' is True.""" def removeAllText(pdf, r): """Remove all text from the given pages in a document.""" def blackText(pdf, r): """Blacken all text on the given pages.""" def blackLines(pdf, r): """Blacken all lines on the given pages.""" def blackFills(pdf, r): """Blacken all fills on the given pages.""" def thinLines(pdf, r, linewidth): """Thicken every line less than linewidth to linewidth. Thickness given in points.""" def copyId(pdf, pdf2): """Copy the /ID from one pdf to pdf2.""" def removeId(pdf): """Remove a document's /ID""" def setVersion(pdf, version): """Set the minor version number of a document.""" def setFullVersion(pdf, major, minor): """Set the major and minor version number of a document.""" def removeDictEntry(pdf, key): """Remove any dictionary entry with the given key anywhere in the document.""" def removeDictEntrySearch(pdf, key, searchterm): """Remove any dictionary entry with the given key anywhere in the document, if its value matches the given search term.""" def replaceDictEntry(pdf, key, newvalue): """Replace any dictionary entry with the given key anywhere in the document using the new value given.""" def replaceDictEntrySearch(pdf, key, newvalue, searchterm): """Replace any dictionary entry with the given key anywhere in the document, if its value matches the given search term, with the new value given.""" def getDictEntries(pdf, key): """Return JSON of any dict entries with the given key.""" def removeClipping(pdf, r): """Remove all clipping from pages in the given range""" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/pysplits/c10.tex���������������������������������������������������������������0000664�0001750�0001750�00000003316�14771516640�016134� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������def twoUp(pdf): """Impose a document two up by retaining the existing page size, scaling pages down.""" def twoUpStack(pdf): """Impose a document two up by doubling the page size, to fit two pages on one.""" def impose(pdf, x, y, fit, columns, rtl, btt, center, margin, spacing, linewidth): """Impose a PDF. There are two modes: imposing x * y, or imposing to fit a page of size x * y. This is controlled by fit. Columns imposes by columns rather than rows. rtl is right-to-left, btt bottom-to-top. Center is unused for now. Margin is the margin around the output, spacing the spacing between imposed inputs.""" def chop(pdf, r, x, y, columns, rtl, btt): """Chop each page in the range into x * y pieces. If columns is set, the pieces go by columns instead of rows. If rtl is set, the pieces are taken right-to-left. If btt is set, the pieces are taken from bottom to top. """ def chopH(pdf, r, columns, y): """Chop each page in the range horizontally at position y. If columns is set, the pieces are arranged in reverse order. """ def chopV(pdf, r, columns, x): """Chop each page in the range vertically at position x. If columns is set, the pieces are arranged in reverse order. """ def padBefore(pdf, r): """Adds a blank page before each page in the given range.""" def padAfter(pdf, r): """Adds a blank page after each page in the given range.""" def padEvery(pdf, n): """Adds a blank page after every n pages.""" def padMultiple(pdf, n): """Adds pages at the end to pad the file to a multiple of n pages in length.""" def padMultipleBefore(pdf, n): """Adds pages at the beginning to pad the file to a multiple of n pages in length.""" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/pysplits/c14.tex���������������������������������������������������������������0000664�0001750�0001750�00000001204�14771516640�016132� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������def getImageResolution(pdf, resolution): """Return a list of all uses of images in the PDF which do not meet the minimum required resolution in dpi as tuples of: (pagenumber, name, x pixels, y pixels, x resolution, y resolution, objnum). """ def imageResolutionJSON(pdf, resolution): """Return the image resolution data in JSON format.""" def getImages(pdf): """Return a list of images in the PDF as tuples of: (object number, pages occurring, image name, width, height, size, bitspercomponent, color space, filter) """ def imagesJSON(pdf): """Return the list of images in the PDF in JSON format.""" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/pysplits/c02.tex���������������������������������������������������������������0000664�0001750�0001750�00000015177�14771516640�016145� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������def fromFile(filename, userpw): """Load a PDF file from a given file. Supply a user password (possibly blank) in case the file is encrypted. It won't be decrypted, but sometimes the password is needed just to load the file.""" def fromFileLazy(filename, userpw): """Load a PDF from a file, doing only minimal parsing. The objects will be read and parsed when they are actually needed. Use this when the whole file won't be required. Also supply a user password (possibly blank) in case the file is encrypted. It won't be decrypted, but sometimes the password is needed just to load the file.""" def fromMemory(data, userpw): """Load a file from a byte array and the user password (blank if none).""" def fromMemoryLazy(data, userpw): """Load a file from from a byte array and the user password (blank if none), but lazily like fromFileLazy.""" def ptOfCm(i): """Convert a figure in centimetres to points (72 points to 1 inch).""" def ptOfMm(i): """Convert a figure in millimetres to points (72 points to 1 inch).""" def ptOfIn(i): """Convert a figure in inches to points (72 points to 1 inch).""" def cmOfPt(i): """Convert a figure in points to centimetres (72 points to 1 inch).""" def mmOfPt(i): """Convert a figure in points to millimetres (72 points to 1 inch).""" def inOfPt(i): """Convert a figure in points to inches (72 points to 1 inch).""" def parsePagespec(pdf, pagespec): """Parse a page specification such as "1-3,8-end" to a range with reference to a given PDF (the PDF is supplied so that page ranges which reference pages which do not exist are rejected).""" def validatePagespec(pagespec): """Validate a page specification, returning True or False, so far as is possible in the absence of the actual document.""" def stringOfPagespec(pdf, r): """Build a page specification from a page range. For example, the range containing 1,2,3,6,7,8 in a document of 8 pages might yield "1-3,6-end".""" def blankRange(): """Create a range with no pages in.""" def pageRange(f, t): """Build a range from one page to another inclusive. For example, pageRange(3,7) gives the range 3,4,5,6,7.""" def all(pdf): """The range containing all the pages in a given document.""" def even(r): """A range which contains just the even pages of another range.""" def odd(r): """A range which contains just the odd pages of another range.""" def rangeUnion(a, b): """The union of two ranges giving a range containing the pages in range a and range b.""" def difference(a, b): """The difference of two ranges, giving a range containing all the pages in a except for those which are also in b.""" def removeDuplicates(r): """Deduplicates a range, returning a new one.""" def rangeLength(r): """The number of pages in a range.""" def rangeGet(r, n): """Get the page number at position n in a range, where n runs from 0 to rangeLength - 1.""" def rangeAdd(r, p): """Add the page to a range, if it is not already there.""" def isInRange(r, p): """Returns True if the page p is in the range r, False otherwise.""" def pages(pdf): """Return the number of pages in a PDF.""" def pagesFast(userpw, filename): """Return the number of pages in a given PDF, with given user password. It tries to do this as fast as possible, without loading the whole file.""" def toFile(pdf, filename, linearize, make_id): """Write the file to a given filename. If linearize is True, it will be linearized, if supported by libcpdf. If make_id is True, it will be given a new ID. NB: Unlike with the command line tool, cpdf, streams decompressed during processing will not automatically be compressed when writing. Call compress() first.""" def toFileExt(pdf, filename, linearize, make_id, preserve_objstm, generate_objstm, compress_objstm): """Write the file to a given filename. If linearize is True, it will be linearized, if supported by libcpdf. If make_id is True, it will be given a new ID. If preserve_objstm is True, existing object streams will be preserved. If generate_objstm is True, object streams will be generated even if not originally present. If compress_objstm is True, object streams will be compressed (what we usually want). WARNING: the pdf argument will be invalid after this call and should not be used again.""" def toMemory(pdf, linearize, make_id): """Write a file to memory, returning the buffer as a byte array of type bytes. NB: Unlike with the command line tool, cpdf, streams decompressed during processing will not automatically be compressed when writing. Call compress() first.""" def isEncrypted(pdf): """Returns True if a documented is encrypted, False otherwise.""" def toFileEncrypted(pdf, method, permissions, ownerpw, userpw, linearize, makeid, filename): """Write the file to a given filename encrypted with the given encryption method, permissions list, and owener and user passwords. If linearize is True, it will be linearized, if supported by libcpdf. If make_id is True, it will be given a new ID.""" def toFileEncryptedExt(pdf, method, permissions, ownerpw, userpw, linearize, makeid, preserve_objstm, generate_objstm, compress_objstm, filename): """Write the file to a given filename encrypted with the given encryption method, permissions list, and owener and user passwords. If linearize is True, it will be linearized, if supported by libcpdf. If make_id is True, it will be given a new ID. If preserve_objstm is True, existing object streams will be preserved. If generate_objstm is True, object streams will be generated even if not originally present. If compress_objstm is True, object streams will be compressed (what we usually want). WARNING: the pdf argument will be invalid after this call and should not be used again.""" def decryptPdf(pdf, userpw): """Attempts to decrypt a PDF using the given user password. An exception is raised in the event of a bad password.""" def decryptPdfOwner(pdf, ownerpw): """Attempts to decrypt a PDF using the given owner password. An exception is raised in the event of a bad password.""" def hasPermission(pdf, perm): """Returns True if the given permission (restriction) is present.""" def encryptionKind(pdf): """Return the encryption method currently in use on a document.""" def loadFont(name, filename): """Loads a TrueType font from the given file name, and names it. It may then be used when adding text or drawing, using the name in place of a standard font name. """ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/pysplits/c13.tex���������������������������������������������������������������0000664�0001750�0001750�00000001476�14771516640�016144� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������def attachFile(filename, pdf): """Attach a file to the pdf. It is attached at document level.""" def attachFileToPage(filename, pdf, pagenumber): """Attach a file, given its file name, pdf, and the page number to which it should be attached.""" def attachFileFromMemory(data, filename, pdf): """Attach a file from a byte array. It is attached at document level.""" def attachFileToPageFromMemory(data, filename, pdf, pagenumber): """Attach a file to a given pag from a byte array. It is attached at document level.""" def removeAttachedFiles(pdf): """Remove all page- and document-level attachments from a document.""" def getAttachments(pdf): """List information about attachements. Returns a list of tuples (name, page number, byte array of data). Page 0 = document-level attachment.""" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/dotnetsplits/������������������������������������������������������������������0000775�0001750�0001750�00000000000�14771516640�015671� 5����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/dotnetsplits/cm1.tex�����������������������������������������������������������0000664�0001750�0001750�00000001773�14771516640�017103� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������CPDF .NET Library ================= Before using the library, you must make sure your project or build environment has access to the cpdf DLL, which is not part of the .NET assembly. You can add it to a Visual Studio project as a file, set to copy-to-output-folder. Or, you can install it in a standard location. The DLL must be named as follows, for .NET to be able to find it: Windows: cpdf.dll MacOS: libcpdf.dylib Linux: libcpdf.so The following documentation is automatically extracted from the XML comments present in the assembly. You can use Intellisense to view them within Visual Studio - the documentation here is for completeness. A 'range' is a list of integers specifying page numbers. Text arguments and results are in UTF8. Data is of type bytes[]. Any function may raise the exception CPDFError, carrying a string describing the error. There is no automatic garbage collection of PDFs. Use the Using keyword and/or the Dispose method on objects of type Cpdf.Pdf to explicitly deallocate PDFs. �����cpdf-2.8.1/docsplits/dotnetsplits/c08.tex�����������������������������������������������������������0000664�0001750�0001750�00000000107�14771516640�017003� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������CHAPTER 7. Presentations Not included in the library version of cpdf. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/dotnetsplits/c18.tex�����������������������������������������������������������0000664�0001750�0001750�00000001161�14771516640�017005� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������CHAPTER 17. Creating New PDFs Cpdf.blankDocument(Double, Double, Int32) Creates a blank document with pages of the given width (in points), height (in points), and number of pages. Cpdf.blankDocumentPaper(Cpdf.Papersize, Int32) Makes a blank document given a page size and number of pages. Cpdf.textToPDF(Double, Double, Cpdf.Font, Double, String) Typesets a UTF8 text file ragged right on a page of size w * h in points in the given font and font size. Cpdf.textToPDFPaper(Cpdf.Papersize, Cpdf.Font, Double, String) Typesets a UTF8 text file ragged right on a page of the given size in the given font and font size. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/dotnetsplits/c07.tex�����������������������������������������������������������0000664�0001750�0001750�00000003317�14771516640�017010� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������CHAPTER 6. Bookmarks Cpdf.startGetBookmarkInfo(Cpdf.Pdf) Starts the bookmark retrieval process for a given PDF. Cpdf.numberBookmarks Gets the number of bookmarks for the PDF given to startGetBookmarkInfo. Cpdf.getBookmarkLevel(Int32) Gets the bookmark level for the given bookmark (0...(n - 1)). Cpdf.getBookmarkPage(Cpdf.Pdf, Int32) Gets the bookmark target page for the given PDF (which must be the same as the PDF passed to startSetBookmarkInfo) and bookmark (0...(n - 1)). Cpdf.getBookmarkText(Int32) Returns the text of bookmark (0...(n - 1)). Cpdf.getBookmarkOpenStatus(Int32) True if the bookmark is open. Cpdf.endGetBookmarkInfo Ends the bookmark retrieval process, cleaning up. Cpdf.startSetBookmarkInfo(Int32) Starts the bookmark setting process for n bookmarks. Cpdf.setBookmarkLevel(Int32, Int32) Set bookmark level for the given bookmark (0...(n - 1)). Cpdf.setBookmarkPage(Cpdf.Pdf, Int32, Int32) Sets the bookmark target page for the given PDF (which must be the same as the PDF to be passed to endSetBookmarkInfo) and bookmark (0...(n - 1)). Cpdf.setBookmarkOpenStatus(Int32, Boolean) Sets the open status of bookmark (0...(n - 1)). Cpdf.setBookmarkText(Int32, String) Sets the text of bookmark (0...(n - 1)). Cpdf.endSetBookmarkInfo(Cpdf.Pdf) Ends the bookmark setting process, writing the bookmarks to the given PDF. Cpdf.getBookmarksJSON(Cpdf.Pdf) Returns the bookmark data in JSON format. Cpdf.setBookmarksJSON(Cpdf.Pdf, Byte[]) Sets the bookmarks from JSON bookmark data. Cpdf.tableOfContents(Cpdf.Pdf, Cpdf.Font, Double, String, Boolean) Typesets a table of contents from existing bookmarks and prepends it to the document. If bookmark is set, the table of contents gets its own bookmark. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/dotnetsplits/c17.tex�����������������������������������������������������������0000664�0001750�0001750�00000001364�14771516640�017011� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������CHAPTER 16. Optional Content Groups Cpdf.startGetOCGList(Cpdf.Pdf) Begins retrieving optional content group names. The serial number 0..n - 1 is returned. Cpdf.OCGListEntry(Int32) Retrieves an OCG name, given its serial number 0..n - 1. Cpdf.endGetOCGList Ends retrieval of optional content group names. Cpdf.OCGRename(Cpdf.Pdf, String, String) Renames an optional content group. Cpdf.OCGOrderAll(Cpdf.Pdf) Ensures that every optional content group appears in the OCG order list. Cpdf.OCGCoalesce(Cpdf.Pdf) Coalesces optional content groups. For example, if we merge or stamp two files both with an OCG called "Layer 1", we will have two different optional content groups. This function will merge the two into a single optional content group. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/dotnetsplits/c04.tex�����������������������������������������������������������0000664�0001750�0001750�00000010346�14771516640�017005� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������CHAPTER 3. Pages Cpdf.scalePages(Cpdf.Pdf, List{Int32}, Double, Double) Scales the page dimensions and content by the given scale, about (0, 0). Other boxes (crop etc. are altered as appropriate) Cpdf.scaleToFit(Cpdf.Pdf, List{Int32}, Double, Double, Double) Scales the content to fit new page dimensions (width x height) multiplied by scale (typically 1.0). Other boxes (crop etc. are altered as appropriate) Cpdf.Papersize Built-in paper sizes Cpdf.Papersize.A0portrait A0 Portrait paper Cpdf.Papersize.A1portrait A1 Portrait paper Cpdf.Papersize.A2portrait A2 Portrait paper Cpdf.Papersize.A3portrait A3 Portrait paper Cpdf.Papersize.A4portrait A4 Portrait paper Cpdf.Papersize.A5portrait A5 Portrait paper Cpdf.Papersize.A0landscape A0 Landscape paper Cpdf.Papersize.A1landscape A1 Landscape paper Cpdf.Papersize.A2landscape A2 Landscape paper Cpdf.Papersize.A3landscape A3 Landscape paper Cpdf.Papersize.A4landscape A4 Landscape paper Cpdf.Papersize.A5landscape A5 Landscape paper Cpdf.Papersize.Usletterportrait US Letter Portrait paper Cpdf.Papersize.Usletterlandscape US Letter Landscape paper Cpdf.Papersize.Uslegalportrait US Legal Portrait paper Cpdf.Papersize.Uslegallandscape US Legal Landscape paper Cpdf.scaleToFitPaper(Cpdf.Pdf, List{Int32}, Cpdf.Papersize, Double) Scales the page content to fit the given page size, possibly multiplied by scale (typically 1.0) Cpdf.Anchor Position anchors Cpdf.Anchor.PosCentre Absolute centre Cpdf.Anchor.PosLeft Absolute left Cpdf.Anchor.PosRight Absolute right Cpdf.Anchor.Top The top centre of the page Cpdf.Anchor.TopLeft The top left of the page Cpdf.Anchor.TopRight The top right of the page Cpdf.Anchor.Left The left hand side of the page, halfway down Cpdf.Anchor.BottomLeft The bottom left of the page Cpdf.Anchor.Bottom The bottom middle of the page Cpdf.Anchor.BottomRight The bottom right of the page Cpdf.Anchor.Right The right hand side of the page, halfway down Cpdf.Anchor.Diagonal Diagonal, bottom left to top right Cpdf.Anchor.ReverseDiagonal Diagonal, top left to bottom right Cpdf.Position Cpdf.Position.anchor Position anchor Cpdf.Position.coord1 Parameter one Cpdf.Position.coord2 Parameter two Cpdf.Position.#ctor(Cpdf.Anchor) Build a position with zero parameters Cpdf.Position.#ctor(Cpdf.Anchor, Double) Build a position with one parameter Cpdf.Position.#ctor(Cpdf.Anchor, Double, Double) Build a position with two parameters Cpdf.scaleContents(Cpdf.Pdf, List{Int32}, Cpdf.Position, Double) Scales the contents of the pages in the range about the point given by the position, by the scale given. Cpdf.shiftContents(Cpdf.Pdf, List{Int32}, Double, Double) Shifts the content of the pages in the range. Cpdf.rotate(Cpdf.Pdf, List{Int32}, Int32) Changes the viewing rotation to an absolute value. Appropriate rotations are 0, 90, 180, 270. Cpdf.rotateBy(Cpdf.Pdf, List{Int32}, Int32) Rotates the content about the centre of the page by the given number of degrees, in a clockwise direction. Cpdf.rotateContents(Cpdf.Pdf, List{Int32}, Double) Rotates the content about the centre of the page by the given number of degrees, in a clockwise direction. Cpdf.upright(Cpdf.Pdf, List{Int32}) Changes the viewing rotation of the pages in the range, counter-rotating the dimensions and content such that there is no visual change. Cpdf.hFlip(Cpdf.Pdf, List{Int32}) Flips horizontally the pages in the range. Cpdf.vFlip(Cpdf.Pdf, List{Int32}) Flips vertically the pages in the range. Cpdf.crop(Cpdf.Pdf, List{Int32}, Double, Double, Double, Double) Crops a page, replacing any existing crop box. The dimensions are in points. Cpdf.removeCrop(Cpdf.Pdf, List{Int32}) Removes any crop box from pages in the range. Cpdf.removeTrim(Cpdf.Pdf, List{Int32}) Removes any trim box from pages in the range. Cpdf.removeArt(Cpdf.Pdf, List{Int32}) Removes any art box from pages in the range. Cpdf.removeBleed(Cpdf.Pdf, List{Int32}) Removes any bleed box from pages in the range. Cpdf.trimMarks(Cpdf.Pdf, List{Int32}) Adds trim marks to the given pages, if the trimbox exists. Cpdf.showBoxes(Cpdf.Pdf, List{Int32}) Shows the boxes on the given pages, for debug. Cpdf.hardBox(Cpdf.Pdf, List{Int32}, String) Makes a given box a 'hard box' i.e clips it explicitly. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/dotnetsplits/c00.tex�����������������������������������������������������������0000664�0001750�0001750�00000000576�14771516640�017005� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Cpdf The Coherent PDF Library for .NET Cpdf.Pdf PDF document. Use the 'using' keyword, or call Dispose to make sure PDFs are deallocated. Cpdf.Pdf.Dispose Force disposal of the PDF. Cpdf.Pdf.Finalize Class destructor Cpdf.CPDFError Any function in this library may raise the CPDFError exception. Cpdf.CPDFError.#ctor(String) Construct a CPDFError which carries a string. ����������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/dotnetsplits/c09.tex�����������������������������������������������������������0000664�0001750�0001750�00000005071�14771516640�017011� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������CHAPTER 8. Logos, Watermarks and Stamps Cpdf.stampOn(Cpdf.Pdf, Cpdf.Pdf, List{Int32}) Stamps stamp_pdf on top of all the pages in the document which are in the range. The stamp is placed with its origin at the origin of the target document. Cpdf.stampUnder(Cpdf.Pdf, Cpdf.Pdf, List{Int32}) Stamps stamp_pdf under all the pages in the document which are in the range. The stamp is placed with its origin at the origin of the target document. Cpdf.stampExtended(Cpdf.Pdf, Cpdf.Pdf, List{Int32}, Boolean, Boolean, Cpdf.Position, Boolean) A stamping function with extra features. - isover true, pdf goes over pdf2, isover false, pdf goes under pdf2 - scale_stamp_to_fit scales the stamp to fit the page - pos gives the position to put the stamp - relative_to_cropbox: if true, pos is relative to cropbox not mediabox. Cpdf.combinePages(Cpdf.Pdf, Cpdf.Pdf) Combines the PDFs page-by-page, putting each page of 'over' over each page of 'under'. Cpdf.Font Standard fonts Cpdf.Font.TimesRoman Times Roman Cpdf.Font.TimesBold Times Bold Cpdf.Font.TimesItalic Times Italic Cpdf.Font.TimesBoldItalic Times Bold Italic Cpdf.Font.Helvetica Helvetica Cpdf.Font.HelveticaBold Helvetica Bold Cpdf.Font.HelveticaOblique Helvetica Oblique Cpdf.Font.HelveticaBoldOblique Helvetica Bold Oblique Cpdf.Font.Courier Courier Cpdf.Font.CourierBold Courier Bold Cpdf.Font.CourierOblique Courier Oblique Cpdf.Font.CourierBoldOblique Courier Bold Oblique Cpdf.Justification Justifications Cpdf.Justification.LeftJustify Left justify Cpdf.Justification.CentreJustify Centre justify Cpdf.Justification.RightJustify Right justify Cpdf.addText(Boolean, Cpdf.Pdf, List{Int32}, String, Cpdf.Position, Double, Int32, Cpdf.Font, Double, Double, Double, Double, Boolean, Boolean, Boolean, Double, Cpdf.Justification, Boolean, Boolean, String, Double, Boolean) Adds text to the pages in the given range. Cpdf.addTextSimple(Cpdf.Pdf, List{Int32}, String, Cpdf.Position, Cpdf.Font, Double) Adds text with most parameters default. Cpdf.removeText(Cpdf.Pdf, List{Int32}) Removes any text added by cpdf from the given pages. Cpdf.textWidth(Cpdf.Font, String) Returns the width of a given string in the given font in thousandths of a point. Cpdf.addContent(String, Boolean, Cpdf.Pdf, List{Int32}) Adds page content before (if true) or after (if false) the existing content to pages in the given range in the given PDF. Cpdf.stampAsXObject(Cpdf.Pdf, List{Int32}, Cpdf.Pdf) Stamps stamp_pdf onto the pages in the given range in pdf as a shared Form XObject. The name of the newly-created XObject is returned. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/dotnetsplits/c12.tex�����������������������������������������������������������0000664�0001750�0001750�00000015621�14771516640�017005� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������CHAPTER 11. Document Information and Metadata Cpdf.isLinearized(String) Finds out if a document is linearized as quickly as possible without loading it. Cpdf.getVersion(Cpdf.Pdf) Returns the minor version number of a document. Cpdf.getMajorVersion(Cpdf.Pdf) Returns the minor version number of a document. Cpdf.getTitle(Cpdf.Pdf) Returns the title of a document. Cpdf.getAuthor(Cpdf.Pdf) Returns the author of a document. Cpdf.getSubject(Cpdf.Pdf) Returns the subject of a document. Cpdf.getKeywords(Cpdf.Pdf) Returns the keywords of a document. Cpdf.getCreator(Cpdf.Pdf) Returns the creator of a document. Cpdf.getProducer(Cpdf.Pdf) Returns the producer of a document. Cpdf.getCreationDate(Cpdf.Pdf) Returns the creation date of a document. Cpdf.getModificationDate(Cpdf.Pdf) Returns the modification date of a document. Cpdf.getTitleXMP(Cpdf.Pdf) Returns the XMP title of a document. Cpdf.getAuthorXMP(Cpdf.Pdf) Returns the XMP author of a document. Cpdf.getSubjectXMP(Cpdf.Pdf) Returns the XMP subject of a document. Cpdf.getKeywordsXMP(Cpdf.Pdf) Returns the XMP keywords of a document. Cpdf.getCreatorXMP(Cpdf.Pdf) Returns the XMP creator of a document. Cpdf.getProducerXMP(Cpdf.Pdf) Returns the XMP producer of a document. Cpdf.getCreationDateXMP(Cpdf.Pdf) Returns the XMP creation date of a document. Cpdf.getModificationDateXMP(Cpdf.Pdf) Returns the XMP modification date of a document. Cpdf.setTitle(Cpdf.Pdf, String) Sets the title of a document. Cpdf.setAuthor(Cpdf.Pdf, String) Sets the author of a document. Cpdf.setSubject(Cpdf.Pdf, String) Sets the subject of a document. Cpdf.setKeywords(Cpdf.Pdf, String) Sets the keywords of a document. Cpdf.setCreator(Cpdf.Pdf, String) Sets the creator of a document. Cpdf.setProducer(Cpdf.Pdf, String) Sets the producer of a document. Cpdf.setCreationDate(Cpdf.Pdf, String) Sets the creation date of a document. Cpdf.setModificationDate(Cpdf.Pdf, String) Sets the modification date of a document. Cpdf.setTitleXMP(Cpdf.Pdf, String) Sets the XMP title of a document. Cpdf.setAuthorXMP(Cpdf.Pdf, String) Sets the XMP author of a document. Cpdf.setSubjectXMP(Cpdf.Pdf, String) Sets the XMP subject of a document. Cpdf.setKeywordsXMP(Cpdf.Pdf, String) Sets the XMP keywords of a document. Cpdf.setCreatorXMP(Cpdf.Pdf, String) Sets the XMP creator of a document. Cpdf.setProducerXMP(Cpdf.Pdf, String) Sets the XMP producer of a document. Cpdf.setCreationDateXMP(Cpdf.Pdf, String) Sets the XMP creation date of a document. Cpdf.setModificationDateXMP(Cpdf.Pdf, String) Sets the XMP modification date of a document. Cpdf.getDateComponents(String, Int32@, Int32@, Int32@, Int32@, Int32@, Int32@, Int32@, Int32@) Returns the components from a PDF date string. Cpdf.dateStringOfComponents(Int32, Int32, Int32, Int32, Int32, Int32, Int32, Int32) Builds a PDF date string from individual components. Cpdf.getPageRotation(Cpdf.Pdf, Int32) Gets the viewing rotation for a given page. Cpdf.hasBox(Cpdf.Pdf, Int32, String) Returns true, if that page has the given box. E.g "/CropBox". Cpdf.getMediaBox(Cpdf.Pdf, Int32, Double@, Double@, Double@, Double@) Cpdf.getCropBox(Cpdf.Pdf, Int32, Double@, Double@, Double@, Double@) Cpdf.getTrimBox(Cpdf.Pdf, Int32, Double@, Double@, Double@, Double@) Cpdf.getArtBox(Cpdf.Pdf, Int32, Double@, Double@, Double@, Double@) Cpdf.getBleedBox(Cpdf.Pdf, Int32, Double@, Double@, Double@, Double@) These functions get a box given the document, page number, min x, max x, min y, max y in points. Only succeeds if such a box exists, as checked by hasBox. Cpdf.setMediabox(Cpdf.Pdf, List{Int32}, Double, Double, Double, Double) Cpdf.setCropBox(Cpdf.Pdf, List{Int32}, Double, Double, Double, Double) Cpdf.setTrimBox(Cpdf.Pdf, List{Int32}, Double, Double, Double, Double) Cpdf.setArtBox(Cpdf.Pdf, List{Int32}, Double, Double, Double, Double) Cpdf.setBleedBox(Cpdf.Pdf, List{Int32}, Double, Double, Double, Double) These functions set a box given the document, page range, min x, max x, min y, max y in points. Cpdf.markTrapped(Cpdf.Pdf) Marks a document as trapped. Cpdf.markUntrapped(Cpdf.Pdf) Marks a document as untrapped. Cpdf.markTrappedXMP(Cpdf.Pdf) Marks a document as trapped in XMP metadata. Cpdf.markUntrappedXMP(Cpdf.Pdf) Marks a document as untrapped in XMP metadata. Cpdf.Layout Layouts Cpdf.Layout.SinglePage Single page Cpdf.Layout.OneColumn One column Cpdf.Layout.TwoColumnLeft Two column left Cpdf.Layout.TwoColumnRight Two column right Cpdf.Layout.TwoPageLeft Two page left Cpdf.Layout.TwoPageRight Two page right Cpdf.setPageLayout(Cpdf.Pdf, Cpdf.Layout) Sets the page layout for a document. Cpdf.PageMode Page modes Cpdf.PageMode.UseNone Use none Cpdf.PageMode.UseOutlines Use outlines Cpdf.PageMode.UseThumbs Use thumbs Cpdf.PageMode.UseOC Use OC Cpdf.PageMode.UseAttachments Use attachments Cpdf.setPageMode(Cpdf.Pdf, Cpdf.PageMode) Sets the page mode for a document. Cpdf.hideToolbar(Cpdf.Pdf, Boolean) Sets the hide toolbar flag. Cpdf.hideMenubar(Cpdf.Pdf, Boolean) Sets the hide menubar flag. Cpdf.hideWindowUi(Cpdf.Pdf, Boolean) Sets the hide window UI flag. Cpdf.fitWindow(Cpdf.Pdf, Boolean) Sets the fit window flag. Cpdf.centerWindow(Cpdf.Pdf, Boolean) Sets the center window flag. Cpdf.displayDocTitle(Cpdf.Pdf, Boolean) Sets the display doc title flag. Cpdf.openAtPage(Cpdf.Pdf, Boolean, Int32) Sets the PDF to open, possibly with zoom-to-fit, at the given page number. Cpdf.setMetadataFromFile(Cpdf.Pdf, String) Sets the XMP metadata of a document, given a file name. Cpdf.setMetadataFromByteArray(Cpdf.Pdf, Byte[]) Sets the XMP metadata from an array of bytes. Cpdf.removeMetadata(Cpdf.Pdf) Removes the XMP metadata from a document. Cpdf.getMetadata(Cpdf.Pdf) Returns the XMP metadata from a document. Cpdf.createMetadata(Cpdf.Pdf) Builds fresh metadata as best it can from existing metadata in the document. Cpdf.setMetadataDate(Cpdf.Pdf, String) Sets the metadata date for a PDF. The date is given in PDF date format -- cpdf will convert it to XMP format. The date 'now' means now. Cpdf.PageLabelStyle Page label styles Cpdf.PageLabelStyle.DecimalArabic 1, 2, 3... Cpdf.PageLabelStyle.UppercaseRoman I, II, III... Cpdf.PageLabelStyle.LowercaseRoman i, ii, iii... Cpdf.PageLabelStyle.UppercaseLetters A, B, C... Cpdf.PageLabelStyle.LowercaseLetters a, b, c... Cpdf.addPageLabels(Cpdf.Pdf, Cpdf.PageLabelStyle, String, Int32, List{Int32}, Boolean) Adds page labels. The prefix is prefix text for each label. The range is the page range the labels apply to. Offset can be used to shift the numbering up or down. Cpdf.removePageLabels(Cpdf.Pdf) Removes the page labels from the document. Cpdf.getPageLabelStringForPage(Cpdf.Pdf, Int32) Calculates the full label string for a given page, and returns it. Cpdf.startGetPageLabels(Cpdf.Pdf) Cpdf.getPageLabelStyle(Int32) Cpdf.getPageLabelPrefix(Int32) Cpdf.getPageLabelOffset(Int32) Cpdf.getPageLabelRange(Int32) Cpdf.endGetPageLabels ���������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/dotnetsplits/c06.tex�����������������������������������������������������������0000664�0001750�0001750�00000000463�14771516640�017006� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������CHAPTER 5. Compression Cpdf.compress(Cpdf.Pdf) Compresses any uncompressed streams in the given PDF using the Flate algorithm. Cpdf.decompress(Cpdf.Pdf) Decompresses any streams in the given PDF, so long as the compression method is supported. Cpdf.squeezeInMemory(Cpdf.Pdf) Squeezes a pdf in memory. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/dotnetsplits/c11.tex�����������������������������������������������������������0000664�0001750�0001750�00000000153�14771516640�016776� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������CHAPTER 10. Annotations Cpdf.annotationsJSON(Cpdf.Pdf) Returns the annotations from a PDF in JSON format ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/dotnetsplits/c19.tex�����������������������������������������������������������0000664�0001750�0001750�00000003250�14771516640�017007� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������CHAPTER 18. Miscellaneous Cpdf.draft(Cpdf.Pdf, List{Int32}, Boolean) Removes images on the given pages, replacing them with crossed boxes if 'boxes' is true. Cpdf.removeAllText(Cpdf.Pdf, List{Int32}) Removes all text from the given pages in a given document. Cpdf.blackText(Cpdf.Pdf, List{Int32}) Blackens all text on the given pages. Cpdf.blackLines(Cpdf.Pdf, List{Int32}) Blackens all lines on the given pages. Cpdf.blackFills(Cpdf.Pdf, List{Int32}) Blackens all fills on the given pages. Cpdf.thinLines(Cpdf.Pdf, List{Int32}, Double) Thickens every line less than min_thickness to min_thickness. Thickness given in points. Cpdf.copyId(Cpdf.Pdf, Cpdf.Pdf) Copies the /ID from one document to another. Cpdf.removeId(Cpdf.Pdf) Removes a document's /ID. Cpdf.setVersion(Cpdf.Pdf, Int32) Sets the minor version number of a document. Cpdf.setFullVersion(Cpdf.Pdf, Int32, Int32) Sets the full version number of a document. Cpdf.removeDictEntry(Cpdf.Pdf, String) Removes any dictionary entry with the given key anywhere in the document. Cpdf.removeDictEntrySearch(Cpdf.Pdf, String, String) Removes any dictionary entry with the given key whose value matches the given search term. Cpdf.replaceDictEntry(Cpdf.Pdf, String, String) Replaces the value associated with the given key. Cpdf.replaceDictEntrySearch(Cpdf.Pdf, String, String, String) Replaces the value associated with the given key if the existing value matches the search term. Cpdf.removeClipping(Cpdf.Pdf, List{Int32}) Removes all clipping from pages in the given range. Cpdf.getDictEntries(Cpdf.Pdf, String) Returns a JSON array containing any and all values associated with the given key, and fills in its length. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/dotnetsplits/c05.tex�����������������������������������������������������������0000664�0001750�0001750�00000000070�14771516640�016777� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������CHAPTER 4. Encryption Encryption covered in Chapter 1. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/dotnetsplits/c15.tex�����������������������������������������������������������0000664�0001750�0001750�00000001375�14771516640�017011� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������CHAPTER 14. Fonts. Cpdf.startGetFontInfo(Cpdf.Pdf) Cpdf.numberFonts Cpdf.getFontPage(Int32) Cpdf.getFontName(Int32) Cpdf.getFontType(Int32) Cpdf.getFontEncoding(Int32) Cpdf.endGetFontInfo Retrieves font information. First, call startGetFontInfo(pdf). Now call numberFonts to return the number of fonts. For each font, call one or more of getFontPage, getFontName, getFontType, and getFontEncoding giving a serial number 0..n - 1 to return information. Finally, call endGetFontInfo to clean up. Cpdf.removeFonts(Cpdf.Pdf) Removes all font data from a file. Cpdf.copyFont(Cpdf.Pdf, Cpdf.Pdf, List{Int32}, Int32, String) Copies the given font from the given page in the 'from' PDF to every page in the 'to' PDF. The new font is stored under its font name. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/dotnetsplits/c16.tex�����������������������������������������������������������0000664�0001750�0001750�00000001006�14771516640�017001� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������CHAPTER 15. PDF and JSON Cpdf.outputJSON(String, Boolean, Boolean, Boolean, Cpdf.Pdf) Outputs a PDF in JSON format to the given filename. If parse_content is true, page content is parsed. If no_stream_data is true, all stream data is suppressed entirely. Cpdf.outputJSONMemory(Cpdf.Pdf, Boolean, Boolean, Boolean) Like outputJSON, but it writes to a byte array in memory. Cpdf.fromJSON(String) Loads a PDF from a JSON file given its filename. Cpdf.fromJSONMemory(Byte[]) Loads a PDF from a JSON file in memory ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/dotnetsplits/c01.tex�����������������������������������������������������������0000664�0001750�0001750�00000002127�14771516640�017000� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������CHAPTER 0. Preliminaries Cpdf.startup Initialises the library. Must be called before any other function. Cpdf.version Returns a string giving the version number of the CPDF library. Cpdf.setFast Some operations have a fast mode. The default is 'slow' mode, which works even on old-fashioned files. For more details, see section 1.13 of the CPDF manual. This function sets the mode to fast globally. Cpdf.setSlow Some operations have a fast mode. The default is 'slow' mode, which works even on old-fashioned files. For more details, see section 1.13 of the CPDF manual. This functions sets the mode to slow globally. Cpdf.lastError Not to be called directly. Errors in .NET cpdf are raised by exceptions. Cpdf.lastErrorString Not to be called directly. Errors in .NET cpdf are raised by exceptions. Cpdf.clearError Not to be called directly. Errors in .NET cpdf are raised by exceptions. Cpdf.onExit A debug function which prints some information about resource usage. This can be used to detect if PDFs or ranges are being deallocated properly. Contrary to its name, it may be run at any time. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/dotnetsplits/c03.tex�����������������������������������������������������������0000664�0001750�0001750�00000001476�14771516640�017010� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������CHAPTER 2. Merging and Splitting Cpdf.mergeSimple(List{Cpdf.Pdf}) Given a list of PDFs, merges the files into a new one, which is returned. Cpdf.merge(List{Cpdf.Pdf}, Boolean, Boolean) Merges the PDFs. If retain_numbering is true page labels are not rewritten. If remove_duplicate_fonts is true, duplicate fonts are merged. This is useful when the source documents for merging originate from the same source. Cpdf.mergeSame(List{Cpdf.Pdf}, Boolean, Boolean, List{List{Int32}}) The same as merge, except that it has an additional argument - a list of page ranges. This is used to select the pages to pick from each PDF. This avoids duplication of information when multiple discrete parts of a source PDF are included. Cpdf.selectPages(Cpdf.Pdf, List{Int32}) Returns a new document which just those pages in the page range. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/dotnetsplits/c10.tex�����������������������������������������������������������0000664�0001750�0001750�00000002253�14771516640�017000� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������CHAPTER 9. Multipage facilities Cpdf.impose(Cpdf.Pdf, Double, Double, Boolean, Boolean, Boolean, Boolean, Boolean, Double, Double, Double) Imposes a PDF. There are two modes: imposing x * y, or imposing to fit a page of size x * y. This is controlled by fit. Columns imposes by columns rather than rows. rtl is right-to-left, btt bottom-to-top. Center is unused for now. Margin is the margin around the output, spacing the spacing between imposed inputs. Cpdf.twoUp(Cpdf.Pdf) Imposes a document two up. twoUpStack does so by doubling the page size, to fit two pages on one. Cpdf.twoUpStack(Cpdf.Pdf) Impose a document two up. twoUpStack does so by doubling the page size, to fit two pages on one. Cpdf.padBefore(Cpdf.Pdf, List{Int32}) Adds a blank page before each page in the given range. Cpdf.padAfter(Cpdf.Pdf, List{Int32}) Adds a blank page after each page in the given range. Cpdf.padEvery(Cpdf.Pdf, Int32) Adds a blank page after every n pages. Cpdf.padMultiple(Cpdf.Pdf, Int32) Adds pages at the end to pad the file to a multiple of n pages in length. Cpdf.padMultipleBefore(Cpdf.Pdf, Int32) Adds pages at the beginning to pad the file to a multiple of n pages in length. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/dotnetsplits/c14.tex�����������������������������������������������������������0000664�0001750�0001750�00000001412�14771516640�017000� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������CHAPTER 13. Images. Cpdf.startGetImageResolution(Cpdf.Pdf, Double) Cpdf.getImageResolutionPageNumber(Int32) Cpdf.getImageResolutionImageName(Int32) Cpdf.getImageResolutionXPixels(Int32) Cpdf.getImageResolutionYPixels(Int32) Cpdf.getImageResolutionXRes(Int32) Cpdf.getImageResolutionYRes(Int32) Cpdf.endGetImageResolution Gets image data, including resolution at all points of use. Call startGetImageResolution(pdf, min_required_resolution) will begin the process of obtaining data on all image uses below min_required_resolution, returning the total number. So, to return all image uses, specify a very high min_required_resolution. Then, call the other functions giving a serial number 0..n - 1, to retrieve the data. Finally, call endGetImageResolution to clean up. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/dotnetsplits/c02.tex�����������������������������������������������������������0000664�0001750�0001750�00000015134�14771516640�017003� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������CHAPTER 1. Basics Cpdf.fromFile(String, String) Loads a PDF file from a given file. Supply a user password (possibly blank) in case the file is encrypted. It won't be decrypted, but sometimes the password is needed just to load the file. Cpdf.fromFileLazy(String, String) Loads a PDF from a file, doing only minimal parsing. The objects will be read and parsed when they are actually needed. Use this when the whole file won't be required. Also supply a user password (possibly blank) in case the file is encrypted. It won't be decrypted, but sometimes the password is needed just to load the file. Cpdf.fromMemory(Byte[], String) Loads a file from memory given any user password. Cpdf.fromMemoryLazy(IntPtr, Int32, String) Loads a file from memory, given a pointer and a length, and the user password, but lazily like fromFileLazy. The caller must use AllocHGlobal / Marshal.Copy / FreeHGlobal itself. It must not free the memory until the PDF is also gone. Cpdf.startEnumeratePDFs Cpdf.enumeratePDFsKey(Int32) Cpdf.enumeratePDFsInfo(Int32) Cpdf.endEnumeratePDFs To enumerate the list of currently allocated PDFs, call startEnumeratePDFs which gives the number, n, of PDFs allocated, then enumeratePDFsInfo and enumeratePDFsKey with index numbers from 0...(n - 1). Call endEnumeratePDFs to clean up. Cpdf.ptOfCm(Double) Converts a figure in centimetres to points (72 points to 1 inch) Cpdf.ptOfMm(Double) Converts a figure in millimetres to points (72 points to 1 inch) Cpdf.ptOfIn(Double) Converts a figure in inches to points (72 points to 1 inch) Cpdf.cmOfPt(Double) Converts a figure in points to centimetres (72 points to 1 inch) Cpdf.mmOfPt(Double) Converts a figure in points to millimetres (72 points to 1 inch) Cpdf.inOfPt(Double) Converts a figure in points to inches (72 points to 1 inch) Cpdf.parsePagespec(Cpdf.Pdf, String) Parses a page specification with reference to a given PDF (the PDF is supplied so that page ranges which reference pages which do not exist are rejected). Cpdf.validatePagespec(String) Validates a page specification so far as is possible in the absence of the actual document. Result is true if valid. Cpdf.stringOfPagespec(Cpdf.Pdf, List{Int32}) Builds a page specification from a page range. For example, the range containing 1, 2, 3, 6, 7, 8 in a document of 8 pages might yield "1-3, 6-end" Cpdf.blankRange Creates a range with no pages in. Cpdf.range(Int32, Int32) Builds a range from one page to another inclusive. For example, range(3, 7) gives the range 3, 4, 5, 6, 7 Cpdf.all(Cpdf.Pdf) The range containing all the pages in a given document. Cpdf.even(List{Int32}) Makes a range which contains just the even pages of another range. Cpdf.odd(List{Int32}) Makes a range which contains just the odd pages of another range. Cpdf.rangeUnion(List{Int32}, List{Int32}) Makes the union of two ranges giving a range containing the pages in range a and range b. Cpdf.difference(List{Int32}, List{Int32}) Makes the difference of two ranges, giving a range containing all the pages in a except for those which are also in b. Cpdf.removeDuplicates(List{Int32}) Deduplicates a range, making a new one. Cpdf.rangeLength(List{Int32}) Gives the number of pages in a range. Cpdf.rangeGet(List{Int32}, Int32) Gets the page number at position n in a range, where n runs from 0 to rangeLength - 1. Cpdf.rangeAdd(List{Int32}, Int32) Adds the page to a range, if it is not already there. Cpdf.isInRange(List{Int32}, Int32) Returns true if the page is in the range, false otherwise. Cpdf.pages(Cpdf.Pdf) Returns the number of pages in a PDF. Cpdf.pagesFast(String, String) Returns the number of pages in a given PDF, with given user password. It tries to do this as fast as possible, without loading the whole file. Cpdf.toFile(Cpdf.Pdf, String, Boolean, Boolean) Writes the file to a given filename. If linearize is true, it will be linearized if a linearizer is available. If make_id is true, it will be given a new ID. Cpdf.toFileExt(Cpdf.Pdf, String, Boolean, Boolean, Boolean, Boolean, Boolean) Writes the file to a given filename. If make_id is true, it will be given a new ID. If preserve_objstm is true, existing object streams will be preserved. If generate_objstm is true, object streams will be generated even if not originally present. If compress_objstm is true, object streams will be compressed (what we usually want). WARNING: the pdf argument will be invalid after this call, and should be not be used again. Cpdf.toMemory(Cpdf.Pdf, Boolean, Boolean) Writes a PDF file and returns as an array of bytes. Cpdf.isEncrypted(Cpdf.Pdf) Returns true if a documented is encrypted, false otherwise. Cpdf.decryptPdf(Cpdf.Pdf, String) Attempts to decrypt a PDF using the given user password. An exception is raised if the decryption fails. Cpdf.decryptPdfOwner(Cpdf.Pdf, String) Attempts to decrypt a PDF using the given owner password. Raises an exception if the decryption fails. Cpdf.Permission Permissions Cpdf.Permission.NoEdit Cannot edit the document Cpdf.Permission.NoPrint Cannot print the document Cpdf.Permission.NoCopy Cannot copy the document Cpdf.Permission.NoAnnot Cannot annotate the document Cpdf.Permission.NoForms Cannot edit forms in the document Cpdf.Permission.NoExtract Cannot extract information Cpdf.Permission.NoAssemble Cannot assemble into a bigger document Cpdf.Permission.NoHqPrint Cannot print high quality Cpdf.EncryptionMethod Encryption methods Cpdf.EncryptionMethod.Pdf40bit 40 bit RC4 encryption Cpdf.EncryptionMethod.Pdf128bit 128 bit RC4 encryption Cpdf.EncryptionMethod.Aes128bitfalse 128 bit AES encryption, do not encrypt metadata Cpdf.EncryptionMethod.Aes128bittrue 128 bit AES encryption, encrypt metadata Cpdf.EncryptionMethod.Aes256bitfalse Deprecated. Do not use for new files Cpdf.EncryptionMethod.Aes256bittrue Deprecated. Do not use for new files Cpdf.EncryptionMethod.Aes256bitisofalse 256 bit AES encryption, do not encrypt metadata Cpdf.EncryptionMethod.Aes256bitiosotrue 256 bit AES encryption, encrypt metadata Cpdf.toFileEncrypted(Cpdf.Pdf, Cpdf.EncryptionMethod, List{Cpdf.Permission}, String, String, Boolean, Boolean, String) Writes a file as encrypted. Cpdf.toFileEncryptedExt(Cpdf.Pdf, Cpdf.EncryptionMethod, List{Cpdf.Permission}, String, String, Boolean, Boolean, Boolean, Boolean, Boolean, String) Writes a file as encrypted with extra parameters. WARNING: the pdf argument will be invalid after this call, and should not be used again. Cpdf.hasPermission(Cpdf.Pdf, Cpdf.Permission) Returns true if the given permission (restriction) is present. Cpdf.encryptionKind(Cpdf.Pdf) Returns the encryption method currently in use on a document. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/dotnetsplits/c13.tex�����������������������������������������������������������0000664�0001750�0001750�00000002222�14771516640�016777� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������CHAPTER 12. File Attachments Cpdf.attachFile(String, Cpdf.Pdf) Attaches a file to the pdf. It is attached at document level. Cpdf.attachFileToPage(String, Cpdf.Pdf, Int32) Attaches a file, given its file name, pdf, and the page number to which it should be attached. Cpdf.attachFileFromMemory(Byte[], String, Cpdf.Pdf) Attaches data from memory, just like attachFile. Cpdf.attachFileToPageFromMemory(Byte[], String, Cpdf.Pdf, Int32) Attaches to a page from memory, just like attachFileToPage. Cpdf.removeAttachedFiles(Cpdf.Pdf) Removes all page- and document-level attachments from a document. Cpdf.startGetAttachments(Cpdf.Pdf) Cpdf.numberGetAttachments Lists information about attachments. Call startGetAttachments(pdf) first, then numberGetAttachments to find out how many there are. Then getAttachmentName etc. to return each one 0...(n - 1). Finally, call endGetAttachments to clean up. Cpdf.getAttachmentName(Int32) Gets the name of an attachment. Cpdf.getAttachmentPage(Int32) Gets the page number. 0 = document level. Cpdf.getAttachmentData(Int32) Gets the attachment data itself. Cpdf.endGetAttachments Cleans up after getting attachments. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/splitjs������������������������������������������������������������������������0000755�0001750�0001750�00000002143�14771516640�014551� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/bash csplit -k -f javascriptsplits/c ../../coherentpdf.js/cpdfdocs.js '/CHAPTER/' {19} mv javascriptsplits/c00 javascriptsplits/c00.tex mv javascriptsplits/c01 javascriptsplits/c01.tex mv javascriptsplits/c02 javascriptsplits/c02.tex mv javascriptsplits/c03 javascriptsplits/c03.tex mv javascriptsplits/c04 javascriptsplits/c04.tex mv javascriptsplits/c05 javascriptsplits/c05.tex mv javascriptsplits/c06 javascriptsplits/c06.tex mv javascriptsplits/c07 javascriptsplits/c07.tex mv javascriptsplits/c08 javascriptsplits/c08.tex mv javascriptsplits/c09 javascriptsplits/c09.tex mv javascriptsplits/c10 javascriptsplits/c10.tex mv javascriptsplits/c11 javascriptsplits/c11.tex mv javascriptsplits/c12 javascriptsplits/c12.tex mv javascriptsplits/c13 javascriptsplits/c13.tex mv javascriptsplits/c14 javascriptsplits/c14.tex mv javascriptsplits/c15 javascriptsplits/c15.tex mv javascriptsplits/c16 javascriptsplits/c16.tex mv javascriptsplits/c17 javascriptsplits/c17.tex mv javascriptsplits/c18 javascriptsplits/c18.tex mv javascriptsplits/c19 javascriptsplits/c19.tex mv javascriptsplits/c20 javascriptsplits/c20.tex �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/javasplits/��������������������������������������������������������������������0000775�0001750�0001750�00000000000�14771516640�015315� 5����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/javasplits/cm1.tex�������������������������������������������������������������0000664�0001750�0001750�00000002156�14771516640�016523� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Jcpdf: Java interface to the cpdf PDF tools =========================================== The DLLs "libcpdf" and "libjcpdf" are required. Before using the library, you must make sure your project or build environment has access to the cpdf DLL, which is not part of the Java .jar. You can add as am external requirement in your Java IDE. Or, you can install it in a standard location, such as the Windows system folder. On Windows, The DLL libcpdf.dll must be renamed to cpdf.dll, for Jcpdf to be able to find it. Follow the instructions at the end of Chapter 1 to write your first program. In addition, the Jcpdf package provides documentation with each function, which you can view in your IDE. Usage ----- Create an instance of the library with, for example: Jcpdf.jcpdf = new Jcpdf() You must call startup() to initialise the library prior to calling any other function. PDFs are of type Jcpdf.Pdf. Page ranges are of type Jcpdf.Range. Both PDFs and ranges are not automatically garbage-collected. Use try or the close() method to dispose of them. Exceptions are of type Jcpdf.CpdfError and may be raised by any function. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/javasplits/c08.tex�������������������������������������������������������������0000664�0001750�0001750�00000000112�14771516640�016423� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* CHAPTER 7. Presentations */ /* Not included in the library version. */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/javasplits/c18.tex�������������������������������������������������������������0000664�0001750�0001750�00000002546�14771516640�016441� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* CHAPTER 17. Creating New PDFs */ /** Creates a blank document with pages of the given width (in points), height (in points), and number of pages. @param w width of page @param h height of page @param pages number of pages */ public native Pdf blankDocument(double w, double h, int pages) throws CpdfError; /** Makes a blank document given a page size and number of pages. @param papersize paper size, such as {@link #a0portrait a0portrait} @param pages number of pages */ public native Pdf blankDocumentPaper(int papersize, int pages) throws CpdfError; /** Typesets a UTF8 text file ragged right on a page of size w * h in points in the given font and font size. @param w width of page @param h height of page @param font font, such as {@link #timesRoman timesRoman} @param fontsize font size @param filename file name */ public Pdf textToPDF(double w, double h, int font, double fontsize, String filename) throws CpdfError; /** Typesets a UTF8 text file ragged right on a page of the given size in the given font and font size. @param papersize paper size, such as {@link #a0portrait a0portrait} @param font font, such as {@link #timesRoman timesRoman} @param fontsize font size @param filename file name */ public Pdf textToPDFPaper(int papersize, int font, double fontsize, String filename) throws CpdfError; ����������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/javasplits/c07.tex�������������������������������������������������������������0000664�0001750�0001750�00000005421�14771516640�016432� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* CHAPTER 6. Bookmarks */ /** Starts the bookmark retrieval process for a given PDF. */ public native void startGetBookmarkInfo(Pdf pdf) throws CpdfError; /** Gets the number of bookmarks for the PDF given to {@link #startGetBookmarkInfo(Pdf) startGetBookmarkInfo}. */ public native int numberBookmarks() throws CpdfError; /** Gets the bookmark level for the given bookmark <code>0...(n - 1)</code>. */ public native int getBookmarkLevel(int serial) throws CpdfError; /** Gets the bookmark target page for the given PDF (which must be the same as the PDF passed to {@link #startGetBookmarkInfo(Pdf) startGetBookmarkInfo}) and bookmark <code>0...(n - 1)</code>. */ public native int getBookmarkPage(Pdf pdf, int serial) throws CpdfError; /** Returns the text of bookmark <code>0...(n - 1))</code> */ public String getBookmarkText(int serial) throws CpdfError; /** Returns <code>true</code> if the bookmark is open. */ public native boolean getBookmarkOpenStatus(int serial) throws CpdfError; /** Ends the bookmark retrieval process, cleaning up. */ public native void endGetBookmarkInfo() throws CpdfError; /** Starts the bookmark setting process for n bookmarks. */ public native void startSetBookmarkInfo(int n) throws CpdfError; /** Set bookmark level for the given bookmark <code>0...(n - 1)</code>. */ public native void setBookmarkLevel(int serial, int level) throws CpdfError; /** Sets the bookmark target page for the given PDF (which must be the same as the PDF to be passed to {@link #endSetBookmarkInfo(Pdf) endSetBookmarkInfo}) and bookmark <code>0...(n - 1)</code>. */ public native void setBookmarkPage(Pdf pdf, int serial, int pagenum) throws CpdfError; /** Sets the open status of bookmark <code>0...(n - 1)</code>. */ public native void setBookmarkOpenStatus(int serial, boolean open) throws CpdfError; /** Sets the text of bookmark <code>0...(n - 1)</code>. */ public void setBookmarkText(int serial, String text) throws CpdfError; /** Ends the bookmark setting process, writing the bookmarks to the given PDF. */ public native void endSetBookmarkInfo(Pdf pdf) throws CpdfError; /** Returns the bookmark data in JSON format. */ public native byte[] getBookmarksJSON(Pdf pdf) throws CpdfError; /** Sets the bookmarks from JSON bookmark data. */ public native void setBookmarksJSON(Pdf pdf, byte[] data) throws CpdfError; /** Typesets a table of contents from existing bookmarks and prepends it to the document. @param pdf PDF document @param font font, such as {@link #timesRoman timesRoman} @param fontsize font size @param title table of contents title @param bookmark if <code>true</code>, the table of contents gets its own bookmark. */ public void tableOfContents(Pdf pdf, int font, double fontsize, String title, boolean bookmark) throws CpdfError; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/javasplits/c17.tex�������������������������������������������������������������0000664�0001750�0001750�00000002160�14771516640�016430� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* CHAPTER 16. Optional Content Groups */ /** Begins retrieving optional content group names. The serial number <code>0..n - 1</code> is returned. */ public native int startGetOCGList(Pdf pdf) throws CpdfError; /** Retrieves an entry in the optional content group list, given the serial number <code>0..n - 1</code>. */ public native String OCGListEntry(int serial) throws CpdfError; /** Ends retrieval of optional content group names. */ public native void endGetOCGList() throws CpdfError; /** Renames an optional content group. @param pdf PDF document @param f name to rename from @param t name to rename to */ public native void OCGRename(Pdf pdf, String f, String t) throws CpdfError; /** Ensures that every optional content group appears in the OCG order list. */ public native void OCGOrderAll(Pdf pdf) throws CpdfError; /** Coalesces optional content groups. For example, if we merge or stamp two files both with an OCG called "Layer 1", we will have two different optional content groups. This function will merge the two into a single optional content group. */ public native void OCGCoalesce(Pdf pdf) throws CpdfError; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/javasplits/c04.tex�������������������������������������������������������������0000664�0001750�0001750�00000010727�14771516640�016434� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* CHAPTER 3. Pages */ /** Scales the page dimensions and content by the given scale, about (0, 0). Other boxes (crop etc. are altered as appropriate). @param pdf PDF document @param range page range @param sx X scale @param sy Y scale*/ public native void scalePages(Pdf pdf, Range range, double sx, double sy) throws CpdfError; /** Scales the content to fit new page dimensions (width x height) multiplied by scale (typically 1.0). Other boxes (crop etc. are altered as appropriate). @param pdf PDF document @param range page range @param w width in points @param h height in points @param scale scale (typically 1.0) */ public native void scaleToFit(Pdf pdf, Range range, double w, double h, double scale) throws CpdfError; /** Scales the page content to fit the given page size, possibly multiplied by scale (typically 1.0). @param pdf PDF document @param range page range @param papersize paper size, such as {@link #a4portrait a0portrait} @param scale scale (typically 1.0) */ public native void scaleToFitPaper(Pdf pdf, Range range, int papersize, double scale) throws CpdfError; /** Scales the contents of the pages in the range about the point given by the <code>anchor</code>, <code>p1</code> and <code>p2</code> by the scale given. See the documentation for the chosen anchor. @param pdf PDF document @param range page range @param anchor position anchor, such as {@link #posCentre posCentre} @param p1 position parameter 1 @param p2 position parameter 2 @param scale scale */ public native void scaleContents(Pdf pdf, Range range, int anchor, double p1, double p2, double scale) throws CpdfError; /** Shifts the content of the pages in the range. @param pdf PDF document @param range page range @param dx X shift @param dy Y shift */ public native void shiftContents(Pdf pdf, Range range, double dx, double dy) throws CpdfError; /** Changes the viewing rotation to an absolute value. Appropriate rotations are 0, 90, 180, 270. @param pdf PDF document @param range page range @param angle viewing rotation */ public native void rotate(Pdf pdf, Range range, int angle) throws CpdfError; /** Changes the viewing rotation by a relative value. Appropriate rotations are 0, 90, 180, 270. @param pdf PDF document @param range page range @param angle viewing rotation */ public native void rotateBy(Pdf pdf, Range range, int angle) throws CpdfError; /** Rotates the content about the centre of the page by the given number of degrees, in a clockwise direction. @param pdf PDF document @param range page range @param angle angle in degrees */ public native void rotateContents(Pdf pdf, Range range, double angle) throws CpdfError; /** Changes the viewing rotation of the pages in the range, counter-rotating the dimensions and content such that there is no visual change. */ public native void upright(Pdf pdf, Range range) throws CpdfError; /** Flips horizontally the pages in the range. */ public native void hFlip(Pdf pdf, Range range) throws CpdfError; /** Flips vertically the pages in the range. */ public native void vFlip(Pdf pdf, Range range) throws CpdfError; /** Crops a page, replacing any existing crop box. The dimensions are in points. @param pdf PDF document @param range page range @param x minimum X @param y minimum Y @param w width @param h height */ public native void crop(Pdf pdf, Range range, double x, double y, double w, double h) throws CpdfError; /** Removes any crop box from pages in the range. */ public native void removeCrop(Pdf pdf, Range range) throws CpdfError; /** Removes any trim box from pages in the range. */ public native void removeTrim(Pdf pdf, Range range) throws CpdfError; /** Removes any art box from pages in the range. */ public native void removeArt(Pdf pdf, Range range) throws CpdfError; /** Removes any bleed box from pages in the range. */ public native void removeBleed(Pdf pdf, Range range) throws CpdfError; /** Adds trim marks to the given pages, if the trimbox exists. */ public native void trimMarks(Pdf pdf, Range range) throws CpdfError; /** Shows the boxes on the given pages, for debug. */ public native void showBoxes(Pdf pdf, Range range) throws CpdfError; /** Makes a given box a 'hard box' i.e clips it explicitly. @param pdf PDF document @param range page range @param box box name e.g "/CropBox" */ public native void hardBox(Pdf pdf, Range range, String box) throws CpdfError; �����������������������������������������cpdf-2.8.1/docsplits/javasplits/c00.tex�������������������������������������������������������������0000664�0001750�0001750�00000014623�14771516640�016427� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Enumerations /** Permission: cannot edit the document */ public static int noEdit = 0; /** Permission: cannot print the document */ public static int noPrint = 1; /** Permission: cannot copy the document */ public static int noCopy = 2; /** Permission: cannot annotate the document */ public static int noAnnot = 3; /** Permission: cannot edit forms in the document */ public static int noForms = 4; /** Permission: cannot extract information */ public static int noExtract = 5; /** Permission: cannot assemble into a bigger document */ public static int noAssemble = 6; /** Permission: cannot print high quality */ public static int noHqPrint = 7; /** Encryption method: 40 bit RC4 encryption */ public static int pdf40bit = 0; /** Encryption method: 128 bit RC4 encryption */ public static int pdf128bit = 1; /** Encryption method: 128 bit AES encryption, do not encrypt metadata */ public static int aes128bitfalse = 2; /** Encryption method: 128 bit AES encryption, encrypt metadata */ public static int aes128bittrue = 3; /** Encryption method: Deprecated. Do not use for new files */ public static int aes256bitfalse = 4; /** Encryption method: Deprecated. Do not use for new files */ public static int aes256bittrue = 5; /** Encryption method: 256 bit AES encryption, do not encrypt metadata */ public static int aes256bitisofalse = 6; /** Encryption method: 256 bit AES encryption, encrypt metadata */ public static int aes256bitisotrue = 7; /** Page label style: 1, 2, 3... */ public static int decimalArabic = 0; /** Page label style: I, II, III... */ public static int uppercaseRoman = 1; /** Page label style: i, ii, iii... */ public static int lowercaseRoman = 2; /** Page label style: A, B, C... */ public static int uppercaseLetters = 3; /** Page label style: a, b, c...*/ public static int lowercaseLetters = 4; /** Layout: single page */ public static int singlePage = 0; /** Layout: one column */ public static int oneColumn = 1; /** Layout: two column left */ public static int twoColumnLeft = 2; /** Layout: two column right */ public static int twoColumnRight = 3; /** Layout: two page left */ public static int twoPageLeft = 4; /** Layout: two page right */ public static int twoPageRight = 5; /** Page mode: use none */ public static int useNone = 0; /** Page mode: use outlines */ public static int useOutlines = 1; /** Page mode: use thumbs */ public static int useThumbs = 2; /** Page mode: use OC */ public static int useOC = 3; /** Page mode: use Attachments */ public static int useAttachments = 4; /** Paper size: A0 Portrait */ public static int a0portrait = 0; /** Paper size: A1 Portrait */ public static int a1portrait = 1; /** Paper size: A2 Portrait */ public static int a2portrait = 2; /** Paper size: A3 Portrait */ public static int a3portrait = 3; /** Paper size: A4 Portrait */ public static int a4portrait = 4; /** Paper size: A5 Portrait */ public static int a5portrait = 5; /** Paper size: A0 Landscape */ public static int a0landscape = 6; /** Paper size: A1 Landscape */ public static int a1landscape = 7; /** Paper size: A2 Landscape */ public static int a2landscape = 8; /** Paper size: A3 Landscape */ public static int a3landscape = 9; /** Paper size: A4 Landscape */ public static int a4landscape = 10; /** Paper size: A5 Landscape */ public static int a5landscape = 11; /** Paper size: US Letter Portrait */ public static int usletterportrait = 12; /** Paper size: US Letter Landscape */ public static int usletterlandscape = 13; /** Paper size: US Legal Portrait */ public static int uslegalportrait = 14; /** Paper size: US Legal Landscape */ public static int uslegallandscape = 15; /** Standard font: Times Roman */ public static int timesRoman = 0; /** Standard font: Times Bold */ public static int timesBold = 1; /** Standard font: Times Italic */ public static int timesItalic = 2; /** Standard font: Times Bold Italic */ public static int timesBoldItalic = 3; /** Standard font: Helvetica */ public static int helvetica = 4; /** Standard font: Helvetica Bold */ public static int helveticaBold = 5; /** Standard font: Helvetica Oblique */ public static int helveticaOblique = 6; /** Standard font: Helvetica Bold Oblique */ public static int helveticaBoldOblique = 7; /** Standard font: Courier */ public static int courier = 8; /** Standard font: Courier Bold */ public static int courierBold = 9; /** Standard font: Courier Oblique */ public static int courierOblique = 10; /** Standard font: Courier Bold Oblique */ public static int courierBoldOblique = 11; /** Position anchor: absolute centre. Takes two numbers, x and y. */ public static int posCentre = 0; /** Position anchor: absolute left. Takes two numbers, x and y. */ public static int posLeft = 1; /** Position anchor: absolute right. Takes two numbers, x and y. */ public static int posRight = 2; /** Position anchor: the top centre of the page. Takes one number - distance from top. Second number ignored. */ public static int top = 3; /** Position anchor: the top left of the page. Takes one numbers - distance from top left. Second number ignored. */ public static int topLeft = 4; /** Position anchor: the top right of the page. Takes one number - distance from top right. Second number ignored. */ public static int topRight = 5; /** Position anchor: the left hand side of the page, halfway down. Takes one number - distance from left middle. Second number ignored. */ public static int left = 6; /** Position anchor: the bottom left of the page. Takes one number - distance from bottom left. Second number ignored. */ public static int bottomLeft = 7; /** Position anchor: the bottom middle of the page. Takes one number - distance from bottom middle. Second number ignored. */ public static int bottom = 8; /** Position anchor: the bottomm right of the page. Takes one number - distance from bottom right. Second number ignored. */ public static int bottomRight = 9; /** Position anchor: the right hand side of the page, halfway down. Takes one number - distance from right middle. Second number ignored. */ public static int right = 10; /** Position anchor: diagonal, bottom left to top right. Takes no numbers. Both numbers ignored. */ public static int diagonal = 11; /** Position anchor: diagonal, top left to bottom right. Takes no numbers. Both numbers ignored. */ public static int reverseDiagonal = 12; /** Justification: left */ public static int leftJustify = 0; /** Justification: centre */ public static int centreJustify = 1; /** Justification: right */ public static int rightJusitfy = 2; �������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/javasplits/c09.tex�������������������������������������������������������������0000664�0001750�0001750�00000011565�14771516640�016442� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* CHAPTER 8. Logos, Watermarks and Stamps */ /** Stamps another PDF on top of all the pages in the document which are in the range. The stamp is placed with its origin at the origin of the target document. @param stamp_pdf stamp PDF document @param pdf PDF document @param range page range */ public native void stampOn(Pdf stamp_pdf, Pdf pdf, Range range) throws CpdfError; /** Stamps another PDF under all the pages in the document which are in the range. The stamp is placed with its origin at the origin of the target document. @param stamp_pdf stamp PDF document @param pdf PDF document @param range page range */ public native void stampUnder(Pdf stamp_pdf, Pdf pdf, Range range) throws CpdfError; /** A stamping function with extra features. @param pdf first PDF document @param pdf2 second PDF document @param range page range @param isover if <code>true</code>, <code>pdf</code> goes over <code>pdf2</code> otherwise under @param scale_stamp_to_fit if <code>true</code> scales the stamp to fit the page. @param anchor position anchor, such as {@link #posCentre posCentre} @param p1 position parameter one @param p2 position parameter two @param relative_to_cropbox if <code>true</code>, the position is relative to the crop box rather than the media box. */ public native void stampExtended(Pdf pdf, Pdf pdf2, Range range, boolean isover, boolean scale_stamp_to_fit, int anchor, double p1, double p2, boolean relative_to_cropbox) throws CpdfError; /** Combines the two PDFs page-by-page, putting each page of 'over' over each page of 'under'. */ public native Pdf combinePages(Pdf under, Pdf over) throws CpdfError; /** Adds text to the pages in the given range. @param metrics if <code>true</code>, only collect metrics @param pdf PDF document @param range page range @param text the text to stamp, including any special codes @param anchor position anchor, such as {@link #posCentre posCentre} @param p1 position parameter one @param p2 position parameter two @param linespacing line spacing @param bates starting bates number @param font font, such as {@link #timesRoman timesRoman} @param fontsize font size @param r red component of colour @param g green component of colour @param b blue component of colour @param underneath if <code>true</code>, text goes under page @param cropbox if <code>true</code>, relative to cropbox rather than media box @param outline text is outline @param opacity opacity @param justification justification, such as {@link #leftJustify leftJustify} @param midline position is relative to midline not baseline @param topline position is relative to topline not baseline @param filename file name, if requied by special code in text @param linewidth line width @param embed_fonts if true, embed fonts */ public void addText(boolean metrics, Pdf pdf, Range range, String text, int anchor, double p1, double p2, double linespacing, int bates, int font, double fontsize, double r, double g, double b, boolean underneath, boolean cropbox, boolean outline, double opacity, int justification, boolean midline, boolean topline, String filename, double linewidth, boolean embed_fonts) throws CpdfError; /** Adds text with most parameters default. @param pdf PDF document @param range page range @param text the text to stamp, including any special codes @param anchor position anchor, such as {@link #posCentre posCentre} @param p1 position parameter one @param p2 position parameter two @param font font, such as {@link #timesRoman timesRoman} @param fontsize font size */ public void addTextSimple(Pdf pdf, Range range, String text, int anchor, double p1, double p2, int font, double fontsize) throws CpdfError; /** Removes any text added by Jcpdf from the given pages. */ public native void removeText(Pdf pdf, Range range) throws CpdfError; /** Returns the width of a given string in the given font in thousandths of a point. @param font font, such as {@link #timesRoman timesRoman} @param text text*/ public int textWidth(int font, String text) throws CpdfError; /** Adds page content before or after the existing content to pages in the given range in the given PDF. @param s page content to add @param before if <code>true</code> new content goes before, else after @param pdf PDF document @param range page range */ public void addContent(String s, boolean before, Pdf pdf, Range range) throws CpdfError; /** Stamps a PDF onto the pages in the given range in pdf as a shared Form XObject. The name of the newly-created XObject is returned. @param pdf PDF document @param range page range @param stamp_pdf PDF document to stamp */ public native String stampAsXObject(Pdf pdf, Range range, Pdf stamp_pdf) throws CpdfError; �������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/javasplits/c12.tex�������������������������������������������������������������0000664�0001750�0001750�00000024612�14771516640�016431� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* CHAPTER 11. Document Information and Metadata */ /** Finds out if a document is linearized as quickly as possible without loading it. */ public boolean isLinearized(String filename) throws CpdfError; /** Returns the minor version number of a document. */ public native int getVersion(Pdf pdf) throws CpdfError; /** Returns the major version number of a document. */ public native int getMajorVersion(Pdf pdf) throws CpdfError; /** Returns the title of a document. */ public String getTitle(Pdf pdf) throws CpdfError; /** Returns the author of a document. */ public String getAuthor(Pdf pdf) throws CpdfError; /** Returns the subject of a document. */ public String getSubject(Pdf pdf) throws CpdfError; /** Returns the keywords of a document. */ public String getKeywords(Pdf pdf) throws CpdfError; /** Returns the creator of a document. */ public String getCreator(Pdf pdf) throws CpdfError; /** Returns the producer of a document. */ public String getProducer(Pdf pdf) throws CpdfError; /** Returns the creation date of a document. */ public String getCreationDate(Pdf pdf) throws CpdfError; /** Returns the modification date of a document. */ public String getModificationDate(Pdf pdf) throws CpdfError; /** Returns the XMP title of a document. */ public String getTitleXMP(Pdf pdf) throws CpdfError; /** Returns the XMP author of a document. */ public String getAuthorXMP(Pdf pdf) throws CpdfError; /** Returns the XMP subject of a document. */ public String getSubjectXMP(Pdf pdf) throws CpdfError; /** Returns the XMP keywords of a document. */ public String getKeywordsXMP(Pdf pdf) throws CpdfError; /** Returns the XMP creator of a document. */ public String getCreatorXMP(Pdf pdf) throws CpdfError; /** Returns the XMP producer of a document. */ public String getProducerXMP(Pdf pdf) throws CpdfError; /** Returns the XMP creation date of a document. */ public String getCreationDateXMP(Pdf pdf) throws CpdfError; /** Returns the XMP modification date of a document. */ public String getModificationDateXMP(Pdf pdf) throws CpdfError; /** Sets the title of a document. */ public void setTitle(Pdf pdf, String str) throws CpdfError; /** Sets the author of a document. */ public void setAuthor(Pdf pdf, String str) throws CpdfError; /** Sets the subject of a document. */ public void setSubject(Pdf pdf, String str) throws CpdfError; /** Sets the keywords of a document. */ public void setKeywords(Pdf pdf, String str) throws CpdfError; /** Sets the creator of a document. */ public void setCreator(Pdf pdf, String str) throws CpdfError; /** Sets the producer of a document. */ public void setProducer(Pdf pdf, String str) throws CpdfError; /** Sets the creation date of a document. */ public void setCreationDate(Pdf pdf, String str) throws CpdfError; /** Sets the modification date of a document. */ public void setModificationDate(Pdf pdf, String str) throws CpdfError; /** Sets the XMP title of a document. */ public void setTitleXMP(Pdf pdf, String str) throws CpdfError; /** Sets the XMP author of a document. */ public void setAuthorXMP(Pdf pdf, String str) throws CpdfError; /** Sets the XMP subject of a document. */ public void setSubjectXMP(Pdf pdf, String str) throws CpdfError; /** Sets the XMP keywords of a document. */ public void setKeywordsXMP(Pdf pdf, String str) throws CpdfError; /** Sets the XMP creator of a document. */ public void setCreatorXMP(Pdf pdf, String str) throws CpdfError; /** Sets the XMP producer of a document. */ public void setProducerXMP(Pdf pdf, String str) throws CpdfError; /** Sets the XMP creation date of a document. */ public void setCreationDateXMP(Pdf pdf, String str) throws CpdfError; /** Sets the XMP modification date of a document. */ public void setModificationDateXMP(Pdf pdf, String str) throws CpdfError; /** Returns the components from a PDF date string in an array of length 8. @param datestring date string @param r return array */ public native void getDateComponents(String datestring, int[] r) throws CpdfError; /** Builds a PDF date string from individual components. */ public native String dateStringOfComponents(int year, int month, int day, int hour, int minute, int second, int hour_offset, int minute_offset) throws CpdfError; /** Gets the viewing rotation for a given page. */ public native int getPageRotation(Pdf pdf, int pagenumber) throws CpdfError; /** Returns <code>true</code> if the given page has the given box. E.g "/CropBox". @param pdf PDF document @param pagenumber page number @param boxname box name, e.g "/CropBox" */ public native boolean hasBox(Pdf pdf, int pagenumber, String boxname) throws CpdfError; /** These functions get a box given the document. The values are returned in a given array of length 4: min x, max x, min y, max y in points. Only succeeds if such a box exists, as checked by {@link #hasBox(Pdf, int, String) hasBox}. */ public native void getMediaBox(Pdf pdf, int pagenumber, double[] r) throws CpdfError; public native void getCropBox(Pdf pdf, int pagenumber, double[] r) throws CpdfError; public native void getBleedBox(Pdf pdf, int pagenumber, double[] r) throws CpdfError; public native void getArtBox(Pdf pdf, int pagenumber, double[] r) throws CpdfError; public native void getTrimBox(Pdf pdf, int pagenumber, double[] r) throws CpdfError; /** These functions set a box given the document page range, min x, max x, min y, max y in points. */ public native void setMediabox(Pdf pdf, Range range, double minx, double maxx, double miny, double maxy) throws CpdfError; public native void setCropBox(Pdf pdf, Range range, double minx, double maxx, double miny, double maxy) throws CpdfError; public native void setTrimBox(Pdf pdf, Range range, double minx, double maxx, double miny, double maxy) throws CpdfError; public native void setArtBox(Pdf pdf, Range range, double minx, double maxx, double miny, double maxy) throws CpdfError; public native void setBleedBox(Pdf pdf, Range range, double minx, double maxx, double miny, double maxy) throws CpdfError; /** Marks a document as trapped. */ public native void markTrapped(Pdf pdf) throws CpdfError; /** Marks a document as untrapped. */ public native void markUntrapped(Pdf pdf) throws CpdfError; /** Marks a document as trapped in XMP metadata. */ public native void markTrappedXMP(Pdf pdf) throws CpdfError; /** Marks a document as untrapped in XMP metadata. */ public native void markUntrappedXMP(Pdf pdf) throws CpdfError; /** Sets the page layout for a document, such as {@link #singlePage singlePage} */ public native void setPageLayout(Pdf pdf, int layout) throws CpdfError; /** Sets the page mode for a document, such as {@link #useNone useNone} */ public native void setPageMode(Pdf pdf, int mode) throws CpdfError; /** Sets the hide toolbar flag. */ public native void hideToolbar(Pdf pdf, boolean flag) throws CpdfError; /** Sets the hide menubar flag. */ public native void hideMenubar(Pdf pdf, boolean flag) throws CpdfError; /** Sets the hide window UI flag. */ public native void hideWindowUi(Pdf pdf, boolean flag) throws CpdfError; /** Sets the fit window flag. */ public native void fitWindow(Pdf pdf, boolean flag) throws CpdfError; /** Sets the center window flag. */ public native void centerWindow(Pdf pdf, boolean flag) throws CpdfError; /** Sets the display document title flag. */ public native void displayDocTitle(Pdf pdf, boolean flag) throws CpdfError; /** Sets the PDF to open, possibly with zoom-to-fit, at the given page number. @param pdf PDF document @param fit if <code>true</code> zoom to fit @param pagenumber page number */ public native void openAtPage(Pdf pdf, boolean fit, int pagenumber) throws CpdfError; /** Sets the XMP metadata of a document, given a file name. */ public void setMetadataFromFile(Pdf pdf, String filename) throws CpdfError; /** Sets the XMP metadata from an array of bytes. */ public native void setMetadataFromByteArray(Pdf pdf, byte[] data) throws CpdfError; /** Removes the XMP metadata from a document. */ public native void removeMetadata(Pdf pdf) throws CpdfError; /** Returns the XMP metadata from a document. */ public native byte[] getMetadata(Pdf pdf) throws CpdfError; /** Builds fresh XMP metadata as best it can from existing metadata in the document. */ public native void createMetadata(Pdf pdf) throws CpdfError; /** Sets the metadata date for a PDF. The date is given in PDF date format. Jcpdf will convert it to XMP format. The date "now" means now. */ public native void setMetadataDate(Pdf pdf, String date) throws CpdfError; /** Adds page labels to a document. @param pdf PDF document @param style label style, such as {@link #decimalArabic decimalArabic} @param prefix text for each label @param offset can be used to shift the numbering up or down @param range page range @param progress if <code>true</code>, labels progress */ public void addPageLabels(Pdf pdf, int style, String prefix, int offset, Range range, boolean progress) throws CpdfError /** Removes the page labels from the document. */ public native void removePageLabels(Pdf pdf) throws CpdfError; /** Calculates the full label string for a given page, and returns it. */ public String getPageLabelStringForPage(Pdf pdf, int pagenumber) throws CpdfError /** Gets page label data. Call {@link #startGetPageLabels(Pdf) startGetPageLabels} to find out how many there are, then use these serial numbers to get the style, prefix, offset and start value (note not a range). Call {@link #endGetPageLabels() endGetPageLabels} to clean up. <p>For example, a document might have five pages of introduction with roman numerals, followed by the rest of the pages in decimal arabic, numbered from one: <p>labelstyle = LowercaseRoman<br/> labelprefix = ""<br/> startpage = 1<br/> startvalue = 1<br/> <p>labelstyle = DecimalArabic<br/> labelprefix = ""<br/> startpage = 6<br/> startvalue = 1<br> */ public native int startGetPageLabels(Pdf pdf) throws CpdfError; public native void endGetPageLabels() throws CpdfError; public native int getPageLabelOffset(int n) throws CpdfError; public native int getPageLabelStyle(int n) throws CpdfError; public native int getPageLabelRange(int n) throws CpdfError; public String getPageLabelPrefix(int n) throws CpdfError; ����������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/javasplits/c06.tex�������������������������������������������������������������0000664�0001750�0001750�00000000650�14771516640�016430� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* CHAPTER 5. Compression */ /** Compresses any uncompressed streams in the given PDF using the Flate algorithm. */ public native void compress(Pdf pdf) throws CpdfError; /** Decompresses any streams in the given PDF, so long as the compression method is supported. */ public native void decompress(Pdf pdf) throws CpdfError; /** Squeezes a pdf in memory. */ public native void squeezeInMemory(Pdf pdf) throws CpdfError; ����������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/javasplits/c11.tex�������������������������������������������������������������0000664�0001750�0001750�00000000231�14771516640�016417� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* CHAPTER 10. Annotations */ /** Returns the annotations from a PDF in JSON format. */ public native byte[] annotationsJSON(Pdf pdf) throws CpdfError; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/javasplits/c19.tex�������������������������������������������������������������0000664�0001750�0001750�00000006540�14771516640�016440� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* CHAPTER 18. Miscellaneous */ /** Removes images on the given pages, replacing them with crossed boxes if <code>boxes</code> is <code>true</code>. @param pdf PDF document @param range page range @param boxes add crossed boxes */ public native void draft(Pdf pdf, Range range, boolean boxes) throws CpdfError; /** Removes all text from the given pages in a given document. */ public native void removeAllText(Pdf pdf, Range range) throws CpdfError; /** Blackens all text on the given pages. */ public native void blackText(Pdf pdf, Range range) throws CpdfError; /** Blackens all lines on the given pages. */ public native void blackLines(Pdf pdf, Range range) throws CpdfError; /** Blackens all fills on the given pages. */ public native void blackFills(Pdf pdf, Range range) throws CpdfError; /** Thickens every line less than <code>min_thickness</code> to <code>min_thickness</code>. Thickness given in points. @param pdf PDF document @param range page range @param min_thickness minimum thickness */ public native void thinLines(Pdf pdf, Range range, double min_thickness) throws CpdfError; /** Copies the <code>/ID</code> from one document to another. @param pdf PDF document to copy from @param pdf2 PDF document to copy to */ public native void copyId(Pdf pdf, Pdf pdf2) throws CpdfError; /** Removes a document's <code>/ID</code>. */ public native void removeId(Pdf pdf) throws CpdfError; /** Sets the minor version number of a document. @param pdf PDF document @param version minor version number */ public native void setVersion(Pdf pdf, int version) throws CpdfError; /** Sets the full version number of a document. @param pdf PDF document @param major major version number @param minor minor version nuber */ public native void setFullVersion(Pdf pdf, int major, int minor) throws CpdfError; /** Removes any dictionary entry with the given key anywhere in the document. @param pdf PDF document @param key key to remove */ public native void removeDictEntry(Pdf pdf, String key) throws CpdfError; /** Removes any dictionary entry with the given key whose value matches the given search term. @param pdf PDF document @param key key to remove @param searchterm search term */ public native void removeDictEntrySearch(Pdf pdf, String key, String searchterm) throws CpdfError; /** Replaces the value associated with the given key. @param pdf PDF document @param key key whose value to replace @param newvalue value to replace with */ public native void replaceDictEntry(Pdf pdf, String key, String newvalue) throws CpdfError; /** Replaces the value associated with the given key if the existing value matches the search term. @param pdf PDF document @param key key whose value to replace @param newvalue value to replace with @param searchterm search term */ public native void replaceDictEntrySearch(Pdf pdf, String key, String newvalue, String searchterm) throws CpdfError; /** Removes all clipping from pages in the given range. */ public native void removeClipping(Pdf pdf, Range range) throws CpdfError; /** Returns a JSON array containing any and all values associated with the given key, and fills in its length. @param pdf PDF document @param key key to search for */ public native byte[] getDictEntries(Pdf pdf, String key) throws CpdfError; ����������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/javasplits/c05.tex�������������������������������������������������������������0000664�0001750�0001750�00000000121�14771516640�016420� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* CHAPTER 4. Encryption */ /* Encryption covered under Chapter 1 in cpdflib. */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/javasplits/c15.tex�������������������������������������������������������������0000664�0001750�0001750�00000003005�14771516640�016425� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* CHAPTER 14. Fonts. */ /** Retrieves font information. First, call {@link #startGetFontInfo(Pdf) startGetFontInfo}. Now call {@link #numberFonts() numberFonts} to return the number of fonts. For each font, call one or more of {@link #getFontPage(int) getFontPage}, {@link #getFontName(int) getFontName}, {@link #getFontType(int) getFontType}, and {@link #getFontEncoding(int) getFontEncoding} giving a serial number <code>0...n - 1</code> to return information. Finally, call {@link #endGetFontInfo() endGetFontInfo} to clean up. */ public native void startGetFontInfo(Pdf pdf) throws CpdfError; public native int numberFonts() throws CpdfError; public native String getFontName(int serial) throws CpdfError; public native int getFontPage(int serial) throws CpdfError; public native String getFontType(int setial) throws CpdfError; public native String getFontEncoding(int serial) throws CpdfError; public native void endGetFontInfo() throws CpdfError; /** Removes all font data from a file. */ public native void removeFonts(Pdf pdf) throws CpdfError; /** Copies the given font from the given page in the 'from' PDF to every page in the 'to' PDF. The new font is stored under its font name. @param from_pdf PDF document to copy from @param to_pdf PDF document to copy to @param range page range @param pagenumber page number of the page to copy from @param fontname font name */ public native void copyFont(Pdf from_pdf, Pdf to_pdf, Range range, int pagenumber, String fontname) throws CpdfError; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/javasplits/c16.tex�������������������������������������������������������������0000664�0001750�0001750�00000002224�14771516640�016430� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* CHAPTER 15. PDF and JSON */ /** Outputs a PDF in JSON format to the given filename. @param filename file name @param parse_content parse page content @param no_stream_data all stream data is suppressed entirely @param decompress_streams streams are decompressed @param pdf PDF document */ public void outputJSON(String filename, boolean parse_content, boolean no_stream_data, boolean decompress_streams, Pdf pdf) throws CpdfError; /** Like outputJSON, but it writes to a byte array in memory. @param pdf PDF document @param parse_content parse page content @param no_stream_data all stream data is suppressed entirely @param decompress_streams streams are decompressed */ public native byte[] outputJSONMemory(Pdf pdf, boolean parse_content, boolean no_stream_data, boolean decompress_streams) throws CpdfError; /** Loads a PDF from a JSON file given its filename. */ public Pdf fromJSON(String filename) throws CpdfError; /** Loads a PDF from a JSON file in memory. */ public native Pdf fromJSONMemory(byte[] data) throws CpdfError; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/javasplits/c01.tex�������������������������������������������������������������0000664�0001750�0001750�00000002014�14771516640�016417� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* CHAPTER 0. Preliminaries */ /** Initialises the library. Must be called before any other function. */ public native void startup() throws CpdfError; /** Returns a string giving the version number of the Jcpdf library. */ public native String version() throws CpdfError; /** Sets fast mode. Some operations have a fast mode. The default is 'slow' mode, which works even on old-fashioned files. For more details, see section 1.13 of the CPDF manual. This functions sets the mode to fast globally. */ public native void setFast() throws CpdfError; /** Sets slow mode. Some operations have a fast mode. The default is 'slow' mode, which works even on old-fashioned files. For more details, see section 1.13 of the CPDF manual. This functions sets the mode to slow globally. */ public native void setSlow() throws CpdfError; /** Prints some information about resource usage. This can be used to detect if PDFs or ranges are being deallocated properly. Contrary to its name, it may be run at any time. */ public native void onExit(); ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/javasplits/c03.tex�������������������������������������������������������������0000664�0001750�0001750�00000003062�14771516640�016425� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* CHAPTER 2. Merging and Splitting */ /** Given an array of PDFs, merges the documents into a new one, which is returned. */ public native Pdf mergeSimple(Pdf[] pdfs) throws CpdfError; /** Merges the PDFs. If <code>retain_numbering</code> is true page labels are not rewritten. If <code>remove_duplicate_fonts</code> is true, duplicate fonts are merged. This is useful when the source documents for merging originate from the same source. @param pdfs array of PDF documents @param retain_numbering retain page numbering in output @param remove_duplicate_fonts remove duplicate font data by merging */ public native Pdf merge(Pdf[] pdfs, boolean retain_numbering, boolean remove_duplicate_fonts) throws CpdfError; /** Merges PDFs when one or more are drawn from the same document. It has an additional argument - a list of page ranges. This is used to select the pages to pick from each PDF. This avoids duplication of information when multiple discrete parts of a source PDF are included. @param pdfs array of PDF documents @param retain_numbering retain page numbering in output @param remove_duplicate_fonts remove duplicate font data by merging @param ranges array of ranges, one for each PDF*/ public native Pdf mergeSame(Pdf[] pdfs, boolean retain_numbering, boolean remove_duplicate_fonts, Range[] ranges) throws CpdfError; /** Returns a new document with just those pages in the page range. * @param pdf PDF document * @param range range*/ public native Pdf selectPages(Pdf pdf, Range range) throws CpdfError; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/javasplits/c10.tex�������������������������������������������������������������0000664�0001750�0001750�00000003300�14771516640�016416� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* CHAPTER 9. Multipage facilities */ /** Imposes a PDF. @param pdf PDF document @param x x parameter @param y y parameter @param fit <code>true</code>: impose to fit a page of size x by y; <code>false</code>: impose x by y @param columns imposes by columns rather than rows @param rtl impose right-to-left @param btt impose bottom-to-top @param center unused for now @param margin margin around the output @param spacing spacing between imposed inputs */ public native void impose(Pdf pdf, double x, double y, boolean fit, boolean columns, boolean rtl, boolean btt, boolean center, double margin, double spacing, double linewidth) throws CpdfError; /** Imposes a document two up. twoUp does so by shrinking the page size, to fit two pages on one. */ public native void twoUp(Pdf pdf) throws CpdfError; /** Imposes a document two up. twoUpStack does so by doubling the page size, to fit two pages on one. */ public native void twoUpStack(Pdf pdf) throws CpdfError; /** Adds a blank page before each page in the given range. */ public native void padBefore(Pdf pdf, Range range) throws CpdfError; /** Adds a blank page after each page in the given range. */ public native void padAfter(Pdf pdf, Range range) throws CpdfError; /** Adds a blank page after every n pages. */ public native void padEvery(Pdf pdf, int n) throws CpdfError; /** Adds pages at the end to pad the file to a multiple of n pages in length. */ public native void padMultiple(Pdf pdf, int n) throws CpdfError; /** Adds pages at the beginning to pad the file to a multiple of n pages in length. */ public native void padMultipleBefore(Pdf pdf, int n) throws CpdfError; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/javasplits/c14.tex�������������������������������������������������������������0000664�0001750�0001750�00000002273�14771516640�016432� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* CHAPTER 13. Images. */ /** Gets image data, including resolution at all points of use. Call {@link #startGetImageResolution(pdf, double) startGetImageResolution(pdf, min_required_resolution)} to begin the process of obtaining data on all image uses below <code>min_required_resolution</code>, returning the total number. So, to return all image uses, specify a very high <code>min_required_resolution</code>. Then, call the other functions giving a serial number <code>0...n - 1</code>, to retrieve the data. Finally, call {@link #endGetImageResolution() endGetImageResolution} to clean up. */ public native int startGetImageResolution(Pdf pdf, double res) throws CpdfError; public native int getImageResolutionPageNumber(int serial) throws CpdfError; public native String getImageResolutionImageName(int serial) throws CpdfError; public native int getImageResolutionXPixels(int serial) throws CpdfError; public native int getImageResolutionYPixels(int serial) throws CpdfError; public native double getImageResolutionXRes(int serial) throws CpdfError; public native double getImageResolutionYRes(int serial) throws CpdfError; public native void endGetImageResolution() throws CpdfError; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/javasplits/c02.tex�������������������������������������������������������������0000664�0001750�0001750�00000024654�14771516640�016436� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* CHAPTER 1. Basics */ /** Loads a PDF document from a file. Supply a user password (possibly blank) in case the file is encrypted. It won't be decrypted, but sometimes the password is needed just to load the file. @param filename file name @param userpw user password */ public Pdf fromFile(String filename, String userpw) throws CpdfError; /** Loads a PDF document from a file, doing only minimal parsing. The objects will be read and parsed when they are actually needed. Use this when the whole file won't be required. Also supply a user password (possibly blank) in case the file is encrypted. It won't be decrypted, but sometimes the password is needed just to load the file. @param filename file name @param userpw user password */ public Pdf fromFileLazy(String filename, String userpw) throws CpdfError; /** Loads a PDF document from memory. Supply a user password (possibly blank) in case the file is encrypted. It won't be decrypted, but sometimes the password is needed just to load the file. @param data byte array containing the PDF file @param userpw user password */ public Pdf fromMemory(byte[] data, String userpw) throws CpdfError; /** Loads a file from memory and the user password, but lazily like {@link #fromFileLazy(String, String) fromFileLazy}. The caller must use {@link #fromMemoryLazyRelease(byte[]) fromMemoryLazyRelease} to free the memory. It must not free the memory until the PDF is also gone. */ public Pdf fromMemoryLazy(byte[] data, String userpw) throws CpdfError; /** Releases memory returned from <code>{@link #fromMemoryLazy(byte[], String) fromMemoryLazy}</code> @param data byte array previously passed to {@link #fromMemoryLazy(byte[], String) fromMemoryLazy} */ public native void fromMemoryLazyRelease(byte[] data) throws CpdfError; /** Begins enumerating currently allocated PDFs. <p>To enumerate the list of currently allocated PDFs, call {@link #startEnumeratePDFs() startEnumeratePDFs} which gives the number, <code>n</code>, of PDFs allocated, then {@link #enumeratePDFsInfo(int) enumeratePDFsInfo} and {@link #enumeratePDFsKey(int) enumeratePDFsKey} with index numbers from <code>0...(n - 1)</code>. Call {@link #endEnumeratePDFs() endEnumeratePDFs} to clean up. */ public native int startEnumeratePDFs() throws CpdfError; /** Returns the key for a given PDF number. */ public native int enumeratePDFsKey(int n) throws CpdfError; /** Returns the info for a given PDF number. */ public native String enumeratePDFsInfo(int n) throws CpdfError; /** Ends enumeration of currently allocated PDFs. */ public native void endEnumeratePDFs() throws CpdfError; /** Converts a figure in centimetres to points. (72 points to 1 inch) */ public native double ptOfCm(double f) throws CpdfError; /** Converts a figure in millimetres to points. (72 points to 1 inch) */ public native double ptOfMm(double f) throws CpdfError; /** Converts a figure in inches to points (72. points to 1 inch) */ public native double ptOfIn(double f) throws CpdfError; /** Converts a figure in points to centimetres. (72 points to 1 inch) */ public native double cmOfPt(double f) throws CpdfError; /** Converts a figure in points to millimetres. (72 points to 1 inch) */ public native double mmOfPt(double f) throws CpdfError; /** Converts a figure in points to millimetres. (72 points to 1 inch) */ public native double inOfPt(double f) throws CpdfError; /** Parses a page specification such as <code>1,2,6-end</code> with reference to a given PDF. (The PDF is supplied so that page ranges which reference pages which do not exist are rejected). @param pdf PDF document @param pagespec page specification */ public native Range parsePagespec(Pdf pdf, String pagespec) throws CpdfError; /** Validates a page specification so far as is possible in the absence of the actual document. Result is <code>true</code> if valid. */ public native boolean validatePagespec(String pagespec) throws CpdfError; /** Builds a page specification from a page range. For example, the range containing 1,2,3,6,7,8 in a document of 8 pages might yield <code>"1-3,6-end"</code> @param pdf PDF document @param r page range */ public String stringOfPagespec(Pdf pdf, Range r) throws CpdfError; /** The range containing no pages. */ public native Range blankRange() throws CpdfError; /** The page range containing all page numbers from one page number to another. @param from page number to begin at (inclusive) @param to page number to end at (inclusive) */ public native Range range(int from, int to) throws CpdfError; /** The page range contaning all pages in a given document. */ public native Range all(Pdf pdf) throws CpdfError; /** The page range containing all odd-numbered pages from an existing range. */ public native Range odd(Range r) throws CpdfError; /** The page range containing all even-numbered pages from an existing range. */ public native Range even(Range r) throws CpdfError; /** The union of two ranges - all those pages in either. */ public native Range rangeUnion(Range r, Range s) throws CpdfError; /** The range containing all pages in the first given range which are not in the second. */ public native Range difference(Range r, Range s) throws CpdfError; /** Remove duplicates from a range, returning a new one. */ public native Range removeDuplicates(Range r) throws CpdfError; /** The length of a range. */ public native int rangeLength(Range r) throws CpdfError; /** Gets a page number from a range at the given offset. */ public native int rangeGet(Range r, int n) throws CpdfError; /** Adds a page number to a range, returning a new one. */ public native Range rangeAdd(Range r, int n) throws CpdfError; /** Tests to see if a given number is in a page range. */ public native boolean isInRange(Range r, int n) throws CpdfError; /** Returns the number of pages in a PDF. */ public native int pages(Pdf pdf) throws CpdfError; /** Returns the number of pages in a given PDF, with given user password. It tries to do this as fast as possible, without loading the whole file. @param userpw user password @param filename file name */ public int pagesFast(String userpw, String filename) throws CpdfError; /** Writes the PDF document to a given filename. If <code>linearize</code> is <code>true</code>, it will be linearized if a linearizer is available. If <code>make_id</code> is <code>true</code>, it will be given a new ID. @param pdf PDF document @param filename file name @param linearize linearize @param make_id make new ID */ public void toFile(Pdf pdf, String filename, boolean linearize, boolean make_id) throws CpdfError; /** Writes the PDF document to a given filename, with extra parameters. If <code>make_id</code> is true, it will be given a new ID. If <code>preserve_objstm</code> is true, existing object streams will be preserved. If <code>generate_objstm</code> is true, object streams will be generated even if not originally present. If <code>compress_objstm</code> is true, object streams will be compressed (what we usually want). WARNING: the pdf argument will be invalid after this call, and should not be used again. @param pdf PDF document @param filename file name @param linearize linearize @param make_id make new ID @param preserve_objstm preserve object streams @param create_objstm create new object streams @param compress_objstm compress object streams */ public void toFileExt(Pdf pdf, String filename, boolean linearize, boolean make_id, boolean preserve_objstm, boolean create_objstm, boolean compress_objstm) throws CpdfError; /** Writes a PDF document and returns it as an array of bytes. @param pdf PDF document @param linearize linearize @param make_id make new ID */ public native byte[] toMemory(Pdf pdf, boolean linearize, boolean make_id) throws CpdfError; /** Returns <code>true</code> if a document is encrypted, <code>false</code> otherwise. */ public native boolean isEncrypted(Pdf pdf) throws CpdfError; /** Attempts to decrypt a PDF using the given user password. An exception is raised if the decryption fails. @param pdf PDF document @param userpw user password */ public void decryptPdf(Pdf pdf, String userpw) throws CpdfError; /** Attempts to decrypt a PDF using the given owner password. Raises an exception if the decryption fails. @param pdf PDF document @param ownerpw owner password */ public void decryptPdfOwner(Pdf pdf, String ownerpw) throws CpdfError; /** Writes a PDF document as encrypted. The encryption method and permissions are drawn from Jcpdf's fields, documented above. @param pdf PDF document @param encryption_method encryption method, e.g {@link #aes256bitisofalse aes256bitisofalse} @param permissions array of permissions e.g {@link #noEdit noEdit} @param owner_password owner password @param user_password user password @param linearize linearize @param makeid make new ID @param filename file name */ public void toFileEncrypted(Pdf pdf, int encryption_method, int[] permissions, String owner_password, String user_password, boolean linearize, boolean makeid, String filename) throws CpdfError; /** Writes a file as encrypted with extra parameters. WARNING: the pdf argument will be invalid after this call, and should not be used again. @param pdf PDF document @param encryption_method encryption method, e.g {@link #aes256bitisofalse aes256bitisofalse} @param permissions array of permissions e.g {@link #noEdit noEdit} @param owner_password owner password @param user_password user password @param linearize linearize @param makeid make new ID @param preserve_objstm preserve existing object streams @param generate_objstm generate new object streams @param compress_objstm compress object streams @param filename file name */ public void toFileEncryptedExt(Pdf pdf, int encryption_method, int[] permissions, String owner_password, String user_password, boolean linearize, boolean makeid, boolean preserve_objstm, boolean generate_objstm, boolean compress_objstm, String filename) throws CpdfError; /** Returns <code>true</code> if the given permission (restriction) such as {@link #noEdit noEdit} is present. */ public native boolean hasPermission(Pdf pdf, int permission) throws CpdfError; /** Returns the encryption method currently in use on a document, such as {@link #aes256bitisofalse aes256bitisofalse}. */ public native int encryptionKind(Pdf pdf) throws CpdfError; ������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/javasplits/c13.tex�������������������������������������������������������������0000664�0001750�0001750�00000004402�14771516640�016425� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* CHAPTER 12. File Attachments */ /** Attaches a file to the PDF. It is attached at document level. @param filename file name @param pdf PDF document */ public void attachFile(String filename, Pdf pdf) throws CpdfError; /** Attaches a file to a page of the PDF. Given its file name, pdf, and the page number to which it should be attached. @param filename file name @param pdf PDF document @param pagenumber page number to attach to */ public void attachFileToPage(String filename, Pdf pdf, int pagenumber) throws CpdfError; /** Attaches data from memory to a document. @param data attachment itself @param filename file name to use to describe attachment @param pdf PDF document */ public void attachFileFromMemory(byte[] data, String filename, Pdf pdf) throws CpdfError; /** Attaches data to a page from memory. @param data attachment itself @param filename file name to use to describe attachment @param pdf PDF document */ public void attachFileToPageFromMemory(byte[] data, String filename, Pdf pdf, int pagenumber) throws CpdfError; /** Removes all page- and document-level attachments from a document. */ public native void removeAttachedFiles(Pdf pdf) throws CpdfError; /** Lists information about attachments. Call {@link #startGetAttachments(pdf) startGetAttachments} first, then {@link #numberGetAttachments() numberGetAttachments} to find out how many there are. Then {@link #getAttachmentName(int) getAttachmentName}, {@link #getAttachmentPage(int) getAttachmentPage}, or {@link #getAttachmentData(int) getAttachmentData}. to return each one <code>0...(n - 1)</code>. Finally, call {@link #endGetAttachments() #endGetAttachments} to clean up. */ public native void startGetAttachments(Pdf pdf) throws CpdfError; public native int numberGetAttachments() throws CpdfError; /** Gets the name of an attachment, given a serial number. */ public native String getAttachmentName(int serial) throws CpdfError; /** Gets the page number, given a serial number. 0 = document level. */ public native int getAttachmentPage(int serial) throws CpdfError; /** Gets the attachment data itself, given a serial number. */ public native byte[] getAttachmentData(int serial) throws CpdfError; public native void endGetAttachments() throws CpdfError; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/splitwrapper�������������������������������������������������������������������0000755�0001750�0001750�00000001272�14771516640�015617� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/bash csplit -k -f splits/c ../../cpdflib-source/cpdflibwrapper.h '/CHAPTER/' {19} mv splits/c00 splits/c00.tex mv splits/c01 splits/c01.tex mv splits/c02 splits/c02.tex mv splits/c03 splits/c03.tex mv splits/c04 splits/c04.tex mv splits/c05 splits/c05.tex mv splits/c06 splits/c06.tex mv splits/c07 splits/c07.tex mv splits/c08 splits/c08.tex mv splits/c09 splits/c09.tex mv splits/c10 splits/c10.tex mv splits/c11 splits/c11.tex mv splits/c12 splits/c12.tex mv splits/c13 splits/c13.tex mv splits/c14 splits/c14.tex mv splits/c15 splits/c15.tex mv splits/c16 splits/c16.tex mv splits/c17 splits/c17.tex mv splits/c18 splits/c18.tex mv splits/c19 splits/c19.tex mv splits/c20 splits/c20.tex ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/splits/������������������������������������������������������������������������0000775�0001750�0001750�00000000000�14771516640�014453� 5����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/splits/c08.tex�����������������������������������������������������������������0000664�0001750�0001750�00000000114�14771516640�015563� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* CHAPTER 7. Presentations */ /* Not included in the library version. */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/splits/c18.tex�����������������������������������������������������������������0000664�0001750�0001750�00000003463�14771516640�015576� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* CHAPTER 17. Creating New PDFs */ /* cpdf_blankDocument(width, height, num_pages) creates a blank document with * pages of the given width (in points), height (in points), and number of * pages. */ int cpdf_blankDocument(double, double, int); /* * cpdf_blankDocumentPaper(papersize, num_pages) makes a blank document given * a page size and number of pages. */ int cpdf_blankDocumentPaper(enum cpdf_papersize, int); /* cpdf_textToPDF(w, h, font, fontsize, filename) typesets a UTF8 text file * ragged right on a page of size w * h in points in the given font and font * size. */ int cpdf_textToPDF(double, double, const char[], double, const char[]); /* cpdf_textToPDFMemory(w, h, font, fontsize, data, length) typesets a UTF8 text * file ragged right on a page of size w * h in points in the given font and * font size. */ int cpdf_textToPDFMemory(double, double, const char[], double, void *, int); /* cpdf_textToPDF(papersize, font, fontsize, filename) typesets a UTF8 text file * ragged right on a page of the given size in the given font and font size. */ int cpdf_textToPDFPaper(int, const char[], double, const char[]); /* cpdf_textToPDFMemory(papersize font, fontsize, data, length) typesets a UTF8 * text file ragged right on a page of the given size in the given font and * font size. */ int cpdf_textToPDFPaperMemory(int, const char[], double, void *, int); /* cpdf_fromPNG(filename) builds a PDF from a non-interlaced non-transparent * PNG. */ int cpdf_fromPNG(const char[]); /* cpdf_fromPNGMemory(data, length) builds a PDF from a non-interlaced * non-transparent PNG. */ int cpdf_fromPNGMemory(void *, int); /* cpdf_fromJPEG(filename) builds a PDF from a JPEG. */ int cpdf_fromJPEG(const char[]); /* cpdf_fromJPEGMemory(data, length) builds a PDF from a JPEG. */ int cpdf_fromJPEGMemory(void *, int); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/splits/c07.tex�����������������������������������������������������������������0000664�0001750�0001750�00000004732�14771516640�015574� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* CHAPTER 6. Bookmarks */ /* * cpdf_startGetBookmarkInfo(pdf) starts the bookmark retrieval process for a * given PDF. */ void cpdf_startGetBookmarkInfo(int); /* * cpdf_numberBookmarks gets the number of bookmarks for the PDF given to * cpdf_startGetBookmarkInfo. */ int cpdf_numberBookmarks(void); /* * cpdf_getBookmarkLevel(serial) get bookmark level for the given bookmark * (0...(n - 1)). */ int cpdf_getBookmarkLevel(int); /* * cpdf_getBookmarkPage gets the bookmark target page for the given PDF * (which must be the same as the PDF passed to cpdf_startSetBookmarkInfo) * and bookmark (0...(n - 1)). */ int cpdf_getBookmarkPage(int, int); /* cpdf_getBookmarkText returns the text of bookmark (0...(n - 1)). */ char *cpdf_getBookmarkText(int); /* cpdf_getBookmarkOpenStatus(pdf) is true if the bookmark is open. */ int cpdf_getBookmarkOpenStatus(int); /* cpdf_endGetBookmarkInfo ends the bookmark retrieval process, cleaning up. */ void cpdf_endGetBookmarkInfo(void); /* * cpdf_startGetBookmarkInfo(n) start the bookmark setting process for n * bookmarks. */ void cpdf_startSetBookmarkInfo(int); /* * cpdf_setBookmarkLevel(n, level) set bookmark level for the given bookmark * (0...(n - 1)). */ void cpdf_setBookmarkLevel(int, int); /* * cpdf_setBookmarkPage(pdf, bookmark, targetpage) sets the bookmark target * page for the given PDF (which must be the same as the PDF to be passed to * cpdf_endSetBookmarkInfo) and bookmark (0...(n - 1)). */ void cpdf_setBookmarkPage(int, int, int); /* * cpdf_setBookmarkOpenStatus(n, status) set the open status of a bookmark, * true or false. */ void cpdf_setBookmarkOpenStatus(int, int); /* cpdf_setBookmarkText(n, text) sets the text of bookmark (0...(n - 1)). */ void cpdf_setBookmarkText(int, const char[]); /* * cpdf_endSetBookmarkInfo(pdf) end the bookmark setting process, writing the * bookmarks to the given PDF. */ void cpdf_endSetBookmarkInfo(int); /* cpdf_getBookmarksJSON(pdf, length) returns the bookmark data and sets the * length. */ void *cpdf_getBookmarksJSON(int, int *); /* cpdf_setBookmarksJSON(pdf, data, datalength) sets the bookmarks from JSON * bookmark data. */ void cpdf_setBookmarksJSON(int, void *, int); /* cpdf_tableOfContents(pdf, font, fontsize, title, bookmark) typesets a table * of contents from existing bookmarks and prepends it to the document. If * bookmark is set, the table of contents gets its own bookmark. */ void cpdf_tableOfContents(int, const char[], double, const char[], int); ��������������������������������������cpdf-2.8.1/docsplits/splits/c17.tex�����������������������������������������������������������������0000664�0001750�0001750�00000001554�14771516640�015574� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* CHAPTER 16. Optional Content Groups */ /* Begin retrieving optional content group names. The serial number 0..<n - 1> * is returned. */ int cpdf_startGetOCGList(int pdf); /* Retrieve an OCG name, given its serial number 0..<n - 1>. */ char *cpdf_OCGListEntry(int i); /* End retrieval of optional content group names. */ void cpdf_endGetOCGList(void); /* cpdf_OCGRename(pdf, from, to) will rename an optional content group. */ void cpdf_OCGRename(int, const char[], const char[]); /* Ensure that every optional content group appears in the OCG order list. */ void cpdf_OCGOrderAll(int); /* Coalesce optional content groups. For example, if we merge or stamp two * files both with an OCG called "Layer 1", we will have two different optional * content groups. This function will merge the two into a single optional * content group. */ void cpdf_OCGCoalesce(int); ����������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/splits/c04.tex�����������������������������������������������������������������0000664�0001750�0001750�00000013435�14771516640�015571� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* CHAPTER 3. Pages */ /* * cpdf_scalePages(pdf, range, x scale, y scale) scales the page dimensions * and content by the given scale, about (0, 0). Other boxes (crop etc. are * altered as appropriate) */ void cpdf_scalePages(int, int, double, double); /* * cpdf_scaleToFit(pdf, range, width, height, scale) scales the content to fit * new page dimensions (width x height) multiplied by scale (typically 1.0). * Other boxes (crop etc. are altered as appropriate) */ void cpdf_scaleToFit(int, int, double, double, double); /* Standard page sizes. */ enum cpdf_papersize { cpdf_a0portrait, /* A0 portrait */ cpdf_a1portrait, /* A1 portrait */ cpdf_a2portrait, /* A2 portrait */ cpdf_a3portrait, /* A3 portrait */ cpdf_a4portrait, /* A4 portrait */ cpdf_a5portrait, /* A5 portrait */ cpdf_a0landscape, /* A0 landscape */ cpdf_a1landscape, /* A1 landscape */ cpdf_a2landscape, /* A2 landscape */ cpdf_a3landscape, /* A3 landscape */ cpdf_a4landscape, /* A4 landscape */ cpdf_a5landscape, /* A5 landscape */ cpdf_usletterportrait, /* US Letter portrait */ cpdf_usletterlandscape, /* US Letter landscape */ cpdf_uslegalportrait, /* US Legal portrait */ cpdf_uslegallandscape /* US Legal landscape */ }; /* * cpdf_scaleToFitPaper(pdf, range, papersize, scale) scales the page content * to fit the given page size, possibly multiplied by scale (typically 1.0) */ void cpdf_scaleToFitPaper(int, int, enum cpdf_papersize, double); /* Positions on the page. Used for scaling about a point, and adding text. */ enum cpdf_anchor { cpdf_posCentre, /* Absolute centre */ cpdf_posLeft, /* Absolute left */ cpdf_posRight, /* Absolute right */ cpdf_top, /* Top top centre of the page */ cpdf_topLeft, /* The top left of the page */ cpdf_topRight, /* The top right of the page */ cpdf_left, /* The left hand side of the page, halfway * down */ cpdf_bottomLeft, /* The bottom left of the page */ cpdf_bottom, /* The bottom middle of the page */ cpdf_bottomRight, /* The bottom right of the page */ cpdf_right, /* The right hand side of the page, halfway * down */ cpdf_diagonal, /* Diagonal, bottom left to top right */ cpdf_reverseDiagonal /* Diagonal, top left to bottom right */ }; /* * A cpdf_position is an anchor (above) and zero or one or two parameters * (cpdf_coord1, cpdf_coord2). * * cpdf_posCentre: Two parameters, x and y * * cpdf_posLeft: Two parameters, x and y * * cpdf_posRight: Two parameters, x and y * * cpdf_top: One parameter -- distance from top * * cpdf_topLeft: One parameter -- distance from top left * * cpdf_topRight: One parameter -- distance from top right * * cpdf_left: One parameter -- distance from left middle * * cpdf_bottomLeft: One parameter -- distance from bottom left * * cpdf_bottom: One parameter -- distance from bottom * * cpdf_bottomRight: One parameter -- distance from bottom right * * cpdf_right: One parameter -- distance from right * * cpdf_diagonal: Zero parameters * * cpdf_reverseDiagonal: Zero parameters */ struct cpdf_position { int cpdf_anchor; /* Position anchor */ double cpdf_coord1; /* Parameter one */ double cpdf_coord2; /* Parameter two */ }; /* * cpdf_scaleContents(pdf, range, position, scale) scales the contents of the * pages in the range about the point given by the cpdf_position, by the * scale given. */ void cpdf_scaleContents(int, int, struct cpdf_position, double); /* * cpdf_shiftContents(pdf, range, dx, dy) shifts the content of the pages in * the range. */ void cpdf_shiftContents(int, int, double, double); /* * cpdf_shiftContents(pdf, range, dx, dy) shifts the boxes of the pages in * the range. */ void cpdf_shiftBoxes(int, int, double, double); /* * cpdf_rotate(pdf, range, rotation) changes the viewing rotation to an * absolute value. Appropriate rotations are 0, 90, 180, 270. */ void cpdf_rotate(int, int, int); /* * cpdf_rotateBy(pdf, range, rotation) changes the viewing rotation by a * given number of degrees. Appropriate values are 90, 180, 270. */ void cpdf_rotateBy(int, int, int); /* * cpdf_rotateContents(pdf, range, angle) rotates the content about the * centre of the page by the given number of degrees, in a clockwise * direction. */ void cpdf_rotateContents(int, int, double); /* * cpdf_upright(pdf, range) changes the viewing rotation of the pages in the * range, counter-rotating the dimensions and content such that there is no * visual change. */ void cpdf_upright(int, int); /* cpdf_hFlip(pdf, range) flips horizontally the pages in the range. */ void cpdf_hFlip(int, int); /* cpdf_vFlip(pdf, range) flips vertically the pages in the range. */ void cpdf_vFlip(int, int); /* * cpdf_crop(pdf, range, x, y, w, h) crops a page, replacing any existing * crop box. The dimensions are in points. */ void cpdf_crop(int, int, double, double, double, double); /* cpdf_removeCrop(pdf, range) removes any crop box from pages in the range. */ void cpdf_removeCrop(int, int); /* cpdf_removeTrim(pdf, range) removes any trim box from pages in the range. */ void cpdf_removeTrim(int, int); /* cpdf_removeArt(pdf, range) removes any art box from pages in the range. */ void cpdf_removeArt(int, int); /* cpdf_removeBleed(pdf, range) removes any bleed box from pages in the range. */ void cpdf_removeBleed(int, int); /* * cpdf_trimMarks(pdf, range) adds trim marks to the given pages, if the * trimbox exists. */ void cpdf_trimMarks(int, int); /* cpdf_showBoxes(pdf, range) shows the boxes on the given pages, for debug. */ void cpdf_showBoxes(int, int); /* cpdf_hardBox makes a given box a 'hard box' i.e clips it explicitly. */ void cpdf_hardBox(int, int, const char[]); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/splits/c00.tex�����������������������������������������������������������������0000664�0001750�0001750�00000000334�14771516640�015557� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * A C wrapper to cpdf PDF tools library. Free for non-commercial use. See * LICENSE for details. To purchase a license, please visit * http://www.coherentpdf.com/ * * Text arguments and results are in UTF8. */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/splits/c09.tex�����������������������������������������������������������������0000664�0001750�0001750�00000014225�14771516640�015574� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* CHAPTER 8. Logos, Watermarks and Stamps */ /* * cpdf_stampOn(stamp_pdf, pdf, range) stamps stamp_pdf on top of all the * pages in the document which are in the range. The stamp is placed with its * origin at the origin of the target document. */ void cpdf_stampOn(int, int, int); /* * cpdf_stampUnder(stamp_pdf, pdf, range) stamps stamp_pdf under all the * pages in the document which are in the range. The stamp is placed with its * origin at the origin of the target document. */ void cpdf_stampUnder(int, int, int); /* * cpdf_stampExtended(pdf, pdf2, range, isover, scale_stamp_to_fit, pos, * relative_to_cropbox) is a stamping function with extra features. - isover * true, pdf goes over pdf2, isover false, pdf goes under pdf2 - * scale_stamp_to_fit scales the stamp to fit the page - pos gives the * position to put the stamp - relative_to_cropbox: if true, pos is relative * to cropbox not mediabox. */ void cpdf_stampExtended(int, int, int, int, int, struct cpdf_position, int); /* * cpdf_combinePages(under, over) combines the PDFs page-by-page, putting * each page of 'over' over each page of 'under'. */ int cpdf_combinePages(int, int); /* Adding text. */ /* * Special codes * * %Page Page number in arabic notation (1, 2, 3...) * * %roman Page number in lower-case roman notation (i, ii, iii...) * * %Roman Page number in upper-case roman notation (I, II, III...) * * %EndPage Last page of document in arabic notation * * %Label The page label of the page * * %EndLabel The page label of the last page * * %Filename The file name * * %a Abbreviated weekday name (Sun, Mon etc.) * * %A Full weekday name (Sunday, Monday etc.) * * %b Abbreviated month name (Jan, Feb etc.) * * %B Full month name (January, February etc.) * * %d Day of the month (01-31) * * %e Day of the month (1-31) * * %H Hour in 24-hour clock (00-23) * * %I Hour in 12-hour clock (01-12) * * %j Day of the year (001-366) * * %m Month of the year (01-12) * * %M Minute of the hour (00-59) * * %p "a.m" or "p.m" * * %S Second of the minute (00-61) * * %T Same as %H:%M:%S * * %u Weekday (1-7, 1 = Monday) * * %w Weekday (0-6, 0 = Monday) * * %Y Year (0000-9999) * * %% The % character */ /* The standard fonts */ char *cpdf_timesRoman = "Times-Roman"; char *cpdf_timesBold = "Times-Bold"; char *cpdf_timesItalic = "Times-Italic"; char *cpdf_timesBoldItalic = "Times-BoldItalic"; char *cpdf_helvetica = "Helvetica"; char *cpdf_helveticaBold = "Helvetica-Bold"; char *cpdf_helveticaOblique = "Helvetica-Oblique"; char *cpdf_helveticaBoldOblique = "Helvetica-BoldOblique"; char *cpdf_courier = "Courier"; char *cpdf_courierBold = "Courier-Bold"; char *cpdf_courierOblique = "Courier-Oblique"; char *cpdf_courierBoldOblique = "Courier-BoldOblique"; /* Justifications for multi line text */ enum cpdf_justification { cpdf_leftJustify, /* Left justify */ cpdf_CentreJustify, /* Centre justify */ cpdf_RightJustify /* Right justify */ }; /* Add text */ void cpdf_addText(int, /* If true, don't actually add text but * collect metrics. */ int, /* Document */ int, /* Page Range */ const char[], /* The text to add */ struct cpdf_position, /* Position to add text at */ double, /* Linespacing, 1.0 = normal */ int, /* Starting Bates number */ const char[], /* Font */ double, /* Font size in points */ double, /* Red component of colour, 0.0 - 1.0 */ double, /* Green component of colour, 0.0 - 1.0 */ double, /* Blue component of colour, 0.0 - 1.0 */ int, /* If true, text is added underneath rather * than on top */ int, /* If true, position is relative to crop box * not media box */ int, /* If true, text is outline rather than * filled */ double, /* Opacity, 1.0 = opaque, 0.0 = wholly * transparent */ enum cpdf_justification, /* Justification */ int, /* If true, position is relative to midline * of text, not baseline */ int, /* If true, position is relative to topline * of text, not baseline */ const char[], /* filename that this document was read from * (optional) */ double, /* line width */ int /* embed fonts */ ); /* Add text, with most parameters default. NB %filename cannot be used here. */ void cpdf_addTextSimple(int, /* Document */ int, /* Page range */ const char[], /* The text to add */ struct cpdf_position, /* Position to add text * at */ const char[], /* font */ double); /* font size */ /* * cpdf_removeText(pdf, range) will remove any text added by libcpdf from the * given pages. */ void cpdf_removeText(int, int); /* * Return the width of a given string in the given standard font in thousandths * of a point. */ int cpdf_textWidth(const char[], const char[]); /* cpdf_addContent(content, before, pdf, range) adds page content before (if * true) or after (if false) the existing content to pages in the given range * in the given PDF. */ void cpdf_addContent(const char[], int, int, int); /* cpdf_stampAsXObject(pdf, range, stamp_pdf) stamps stamp_pdf onto the pages * in the given range in pdf as a shared Form XObject. The name of the * newly-created XObject is returned. */ char *cpdf_stampAsXObject(int, int, int); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/splits/c12.tex�����������������������������������������������������������������0000664�0001750�0001750�00000030465�14771516640�015572� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* CHAPTER 11. Document Information and Metadata */ /* * cpdf_isLinearized(filename) finds out if a document is linearized as * quickly as possible without loading it. */ int cpdf_isLinearized(const char[]); /* cpdf_hasObjectStreams(pdf) finds out if a document was written using object * streams. */ int cpdf_hasObjectStreams(int); /* cpdf_id1(pdfs) returns the first ID string of the PDF, if any, in * hexadecimal string format. */ char *cpdf_id1(int); /* cpdf_id2(pdfs) returns the second ID string of the PDF, if any, in * hexadecimal string format. */ char *cpdf_id2(int); /* cpdf_hasAcroForm returns true if the document has an AcroForm */ int cpdf_hasAcroForm(int); /* To return the subformats of a PDF (if any), call * cpdf_startGetSubformats(pdf) to return their number. Then pass the numbers * 0..n - 1 to cpdf_getSubformat to return the strings. Call * cpdf_endGetSubformats() to clean up. */ int cpdf_startGetSubformats(int); char *cpdf_getSubformat(int); void cpdf_endGetSubformats(void); /* cpdf_getVersion(pdf) returns the minor version number of a document. */ int cpdf_getVersion(int); /* cpdf_getMajorVersion(pdf) returns the minor version number of a document. */ int cpdf_getMajorVersion(int); /* cpdf_getTitle(pdf) returns the title of a document. */ char *cpdf_getTitle(int); /* cpdf_getAuthor(pdf) returns the author of a document. */ char *cpdf_getAuthor(int); /* cpdf_getSubject(pdf) returns the subject of a document. */ char *cpdf_getSubject(int); /* cpdf_getKeywords(pdf) returns the keywords of a document. */ char *cpdf_getKeywords(int); /* cpdf_getCreator(pdf) returns the creator of a document. */ char *cpdf_getCreator(int); /* cpdf_getProducer(pdf) returns the producer of a document. */ char *cpdf_getProducer(int); /* cpdf_getCreationDate(pdf) returns the creation date of a document. */ char *cpdf_getCreationDate(int); /* cpdf_getModificationDate(pdf) returns the modification date of a document. */ char *cpdf_getModificationDate(int); /* cpdf_getTitleXMP(pdf) returns the XMP title of a document. */ char *cpdf_getTitleXMP(int); /* cpdf_getAuthorXMP(pdf) returns the XMP author of a document. */ char *cpdf_getAuthorXMP(int); /* cpdf_getSubjectXMP(pdf) returns the XMP subject of a document. */ char *cpdf_getSubjectXMP(int); /* cpdf_getKeywordsXMP(pdf) returns the XMP keywords of a document. */ char *cpdf_getKeywordsXMP(int); /* cpdf_getCreatorXMP(pdf) returns the XMP creator of a document. */ char *cpdf_getCreatorXMP(int); /* cpdf_getProducerXMP(pdf) returns the XMP producer of a document. */ char *cpdf_getProducerXMP(int); /* cpdf_getCreationDateXMP(pdf) returns the XMP creation date of a document. */ char *cpdf_getCreationDateXMP(int); /* * cpdf_getModificationDateXMP(pdf) returns the XMP modification date of a * document. */ char *cpdf_getModificationDateXMP(int); /* cpdf_setTitle(pdf) sets the title of a document. */ void cpdf_setTitle(int, const char[]); /* cpdf_setAuthor(pdf) sets the author of a document. */ void cpdf_setAuthor(int, const char[]); /* cpdf_setSubject(pdf) sets the subject of a document. */ void cpdf_setSubject(int, const char[]); /* cpdf_setKeywords(pdf) sets the keywords of a document. */ void cpdf_setKeywords(int, const char[]); /* cpdf_setCreator(pdf) sets the creator of a document. */ void cpdf_setCreator(int, const char[]); /* cpdf_setProducer(pdf) sets the producer of a document. */ void cpdf_setProducer(int, const char[]); /* cpdf_setCreationDate(pdf) sets the creation date of a document. */ void cpdf_setCreationDate(int, const char[]); /* cpdf_setModificationDate(pdf) sets the modifcation date of a document. */ void cpdf_setModificationDate(int, const char[]); /* cpdf_setTitleXMP(pdf) sets the XMP title of a document. */ void cpdf_setTitleXMP(int, const char[]); /* cpdf_setAuthorXMP(pdf) sets the XMP author of a document. */ void cpdf_setAuthorXMP(int, const char[]); /* cpdf_setSubjectXMP(pdf) sets the XMP subject of a document. */ void cpdf_setSubjectXMP(int, const char[]); /* cpdf_setKeywordsXMP(pdf) sets the XMP keywords of a document. */ void cpdf_setKeywordsXMP(int, const char[]); /* cpdf_setCreatorXMP(pdf) sets the XMP creator of a document. */ void cpdf_setCreatorXMP(int, const char[]); /* cpdf_setProducerXMP(pdf) sets the XMP producer of a document. */ void cpdf_setProducerXMP(int, const char[]); /* cpdf_setCreationDateXMP(pdf) sets the XMP creation date of a document. */ void cpdf_setCreationDateXMP(int, const char[]); /* * cpdf_setModificationDateXMP(pdf) sets the XMP modification date of a * document. */ void cpdf_setModificationDateXMP(int, const char[]); /* * Dates: Month 1-31, day 1-31, hours (0-23), minutes (0-59), seconds (0-59), * hour_offset is the offset from UT in hours (-23 to 23); minute_offset is * the offset from UT in minutes (-59 to 59). */ /* * cpdf_getDateComponents(datestring, year, month, day, hour, minute, second, * hour_offset, minute_offset) returns the components from a PDF date string. */ void cpdf_getDateComponents(const char[], int *, int *, int *, int *, int *, int *, int *, int *); /* * cpdf_dateStringOfComponents(year, month, day, hour, minute, second, * hour_offset, minute_offset) builds a PDF date string from individual * components. */ char *cpdf_dateStringOfComponents(int, int, int, int, int, int, int, int); /* * cpdf_getPageRotation(pdf, pagenumber) gets the viewing rotation for a * given page. */ int cpdf_getPageRotation(int, int); /* * cpdf_numAnnots(pdf, pagenumber) returns the number of annotations on * a given page. */ int cpdf_numAnnots(int, int); /* * cpdf_hasBox(pdf, pagenumber, boxname) returns true, if that page has the * given box. E.g "/CropBox". */ int cpdf_hasBox(int, int, const char[]); /* * These functions get a box given the document, page number, min x, max x, * min y, max y in points. Only succeeds if such a box exists, as checked by * cpdf_hasBox. */ void cpdf_getMediaBox(int, int, double *, double *, double *, double *); void cpdf_getCropBox(int, int, double *, double *, double *, double *); void cpdf_getTrimBox(int, int, double *, double *, double *, double *); void cpdf_getArtBox(int, int, double *, double *, double *, double *); void cpdf_getBleedBox(int, int, double *, double *, double *, double *); /* * These functions set a box given the document, page range, min x, max x, * min y, max y in points. */ void cpdf_setMediabox(int, int, double, double, double, double); void cpdf_setCropBox(int, int, double, double, double, double); void cpdf_setTrimBox(int, int, double, double, double, double); void cpdf_setArtBox(int, int, double, double, double, double); void cpdf_setBleedBox(int, int, double, double, double, double); /* cpdf_pageInfoJSON(pdf, size) returns JSON data for the page information, and fills in the return length. */ void *cpdf_pageInfoJSON(int, int *); /* cpdf_markTrapped(pdf) marks a document as trapped. */ void cpdf_markTrapped(int); /* cpdf_markUntrapped(pdf) marks a document as untrapped. */ void cpdf_markUntrapped(int); /* cpdf_markTrappedXMP(pdf) marks a document as trapped in XMP metadata. */ void cpdf_markTrappedXMP(int); /* cpdf_markUntrappedXMP(pdf) marks a document as untrapped in XMP metadata. */ void cpdf_markUntrappedXMP(int); /* Document Layouts. */ enum cpdf_layout { cpdf_singlePage, cpdf_oneColumn, cpdf_twoColumnLeft, cpdf_twoColumnRight, cpdf_twoPageLeft, cpdf_twoPageRight }; /* cpdf_setPageLayout(pdf, layout) sets the page layout for a document. */ void cpdf_setPageLayout(int, enum cpdf_layout); enum cpdf_layout cpdf_getPageLayout(int); /* Document page modes. */ enum cpdf_pageMode { cpdf_useNone, cpdf_useOutlines, cpdf_useThumbs, cpdf_useOC, cpdf_useAttachments }; /* cpdf_setPageMode(pdf, mode) sets the page mode for a document. */ void cpdf_setPageMode(int, enum cpdf_pageMode); /* cpdf_getPageMode(pdf) returns the page mode for a document. */ enum cpdf_pageMode cpdf_getPageMode(int); /* cpdf_hideToolbar(pdf, flag) sets the hide toolbar flag. */ void cpdf_hideToolbar(int, int); /* cpdf_getHideToolbar(pdf) gets the hide toolbar flag. */ int cpdf_getHideToolbar(int); /* cpdf_hideMenubar(pdf, flag) sets the hide menu bar flag. */ void cpdf_hideMenubar(int, int); /* cpdf_getHideMenubar(pdf) gets the hide menu bar flag. */ int cpdf_getHideMenubar(int); /* cpdf_hideWindowUi(pdf, flag) sets the hide window UI flag. */ void cpdf_hideWindowUi(int, int); /* cpdf_getHideWindowUi(pdf) gets the hide window UI flag. */ int cpdf_getHideWindowUi(int); /* cpdf_fitWindow(pdf, flag) sets the fit window flag. */ void cpdf_fitWindow(int, int); /* cpdf_getFitWindow(pdf) gets the fit window flag. */ int cpdf_getFitWindow(int); /* cpdf_centerWindow(pdf, flag) sets the center window flag. */ void cpdf_centerWindow(int, int); /* cpdf_getCenterWindow(pdf) gets the center window flag. */ int cpdf_getCenterWindow(int); /* cpdf_displayDocTitle(pdf, flag) sets the display document title flag. */ void cpdf_displayDocTitle(int, int); /* cpdf_getDisplayDocTitle(pdf) gets the display document title flag. */ int cpdf_getDisplayDocTitle(int); /* cpdf_nonFullScreenPageMode(pdf, pagemode) sets the non full screen page * mode. */ void cpdf_nonFullScreenPageMode(int, enum cpdf_pageMode); /* cpdf_getNonFullScreenPageMode(pdf) gets the non full screen page mode. */ enum cpdf_pageMode cpdf_getNonFullScreenPageMode(int); /* cpdf_openAtPage(pdf, fit, pagenumber) sets the PDF to open, possibly with * zoom-to-fit, at the given page number. */ void cpdf_openAtPage(int, int, int); /* cpdf_openAtPageCustom(pdf, destination) sets the PDF to open at the * destination described by the string. */ void cpdf_openAtPageCustom(int, char *); /* * cpdf_setMetadataFromFile(pdf, filename) set the XMP metadata of a * document, given a file name. */ void cpdf_setMetadataFromFile(int, const char[]); /* * cpdf_setMetadataFromByteArray(pdf, data, length) set the XMP metadata from * an array of bytes. */ void cpdf_setMetadataFromByteArray(int, void *, int); /* * cpdf_getMetadata(pdf, length) returns the XMP metadata and fills in * length. */ void *cpdf_getMetadata(int, int *); /* cpdf_removeMetadata(pdf) removes the XMP metadata from a document. */ void cpdf_removeMetadata(int); /* * cpdf_createMetadata(pdf) builds fresh metadata as best it can from * existing metadata in the document. */ void cpdf_createMetadata(int); /* * cpdf_setMetadataDate(pdf, date) sets the metadata date for a PDF. The date * is given in PDF date format -- cpdf will convert it to XMP format. The * date 'now' means now. */ void cpdf_setMetadataDate(int, const char[]); /* Styles of page label */ enum cpdf_pageLabelStyle { cpdf_decimalArabic, /* 1, 2, 3... */ cpdf_uppercaseRoman, /* I, II, III... */ cpdf_lowercaseRoman, /* i, ii, iii... */ cpdf_uppercaseLetters, /* A, B, C... */ cpdf_lowercaseLetters /* a, b, c... */ }; /* * Add page labels. * * cpdf_addPageLabels(pdf, style, prefix, offset, range, progress) * * The prefix is prefix text for each label. The range is the page range the * labels apply to. Offset can be used to shift the numbering up or down. */ void cpdf_addPageLabels(int, enum cpdf_pageLabelStyle, const char[], int, int, int); /* cpdf_removePageLabels(pdf) removes the page labels from the document. */ void cpdf_removePageLabels(int); /* * cpdf_getPageLabelStringForPage(pdf, page number) calculates the full label * string for a given page, and returns it. */ char *cpdf_getPageLabelStringForPage(int, int); /* * Get page label data. Call cpdf_startGetPageLabels to find out how many * there are, then use these serial numbers to get the style, prefix, offset * and start value (note not a range). Call cpdf_endGetPageLabels to clean up. * * For example, a document might have five pages of introduction with roman * numerals, followed by the rest of the pages in decimal arabic, numbered from * one: * * labelstyle = LowercaseRoman * labelprefix = "" * startpage = 1 * startvalue = 1 * * labelstyle = DecimalArabic * labelprefix = "" * startpage = 6 * startvalue = 1 */ int cpdf_startGetPageLabels(int); enum cpdf_pageLabelStyle cpdf_getPageLabelStyle(int); char *cpdf_getPageLabelPrefix(int); int cpdf_getPageLabelOffset(int); int cpdf_getPageLabelRange(int); void cpdf_endGetPageLabels(); /* cpdf_compositionJSON(filesize, pdf, size) returns the composition data in * JSON format, filling in the return length. */ void *cpdf_compositionJSON(int, int, int *); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/splits/c06.tex�����������������������������������������������������������������0000664�0001750�0001750�00000000634�14771516640�015570� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* CHAPTER 5. Compression */ /* * cpdf_compress(pdf) compresses any uncompressed streams in the given PDF * using the Flate algorithm. */ void cpdf_compress(int); /* * cpdf_decompress(pdf) decompresses any streams in the given PDF, so long as * the compression method is supported. */ void cpdf_decompress(int); /* cpdf_squeezeToMemory(pdf) squeezes a pdf in memory. */ void cpdf_squeezeInMemory(int); ����������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/splits/c11.tex�����������������������������������������������������������������0000664�0001750�0001750�00000000746�14771516640�015570� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* CHAPTER 10. Annotations */ /* Return the annotations from a PDF in JSON format, returning also its length. */ void *cpdf_annotationsJSON(int, int *); /* cpdf_removeAnnotations(pdf, range) removes all annotations from pages in the * given range. */ void cpdf_removeAnnotations(int, int); /* cpdf_setAnnotationsJSON(pdf, data, length) adds the annotations given in * JSON format to the PDF, on top of any existing annotations. */ void cpdf_setAnnotationsJSON(int, void *, int); ��������������������������cpdf-2.8.1/docsplits/splits/c19.tex�����������������������������������������������������������������0000664�0001750�0001750�00000017373�14771516640�015604� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* CHAPTER 18. Drawing on PDFs */ /* cpdf_drawBegin sets up the drawing process. It must be called before any * other cpdf_draw* function. */ void cpdf_drawBegin(void); /* cpdf_drawEnd(pdf, range) commits the drawing to the given PDF on pages in * the given range. */ void cpdf_drawEnd(int, int); /* cpdf_drawExtended(pdf, range, underneath, bates, filename) is the same as * cpdf_drawEnd, but provides the special parameters which may be required when * using cpdf_drawSText. */ void cpdf_drawEndExtended(int, int, int, int, char *); /* cpdf_drawRect(x, y, w, h) adds a rectangle to the current path. */ void cpdf_drawRect(double, double, double, double); /* cpdf_drawTo(x, y) moves the current point to (x, y). */ void cpdf_drawTo(double, double); /* cpdf_drawLine(x, y) adds a line from the current point to (x, y) to the * current path. */ void cpdf_drawLine(double, double); /* cpdf_drawBez(x1, y1, x2, y2, x3, y3) adds a bezier curve to the current * path. */ void cpdf_drawBez(double, double, double, double, double, double); /* cpdf_drawBez23(x2, y2, x3, y3) add a bezier curve with (x1, y1) = current * point. */ void cpdf_drawBez23(double, double, double, double); /* cpdf_drawBez13(x1, y1, x3, y3) add a bezier curve with (x3, y3) = new * current point. */ void cpdf_drawBez13(double, double, double, double); /* cpdf_drawCircle(x, y, r) adds a circle to the current path. */ void cpdf_drawCircle(double, double, double); /* cpdf_drawStroke() strokes the curent path, and clears it. */ void cpdf_drawStroke(void); /* cpdf_drawFill() fills the current path with a non-zero winding rule, and * clears it. */ void cpdf_drawFill(void); /* cpdf_drawFillEo() fills the current path with an even-odd winding rule, and * clears it. */ void cpdf_drawFillEo(void); /* cpdf_drawStrokeFill() fills and then strokes the current path with a * non-zero winding rule, and clears it. */ void cpdf_drawStrokeFill(void); /* cpdf_drawStrokeFillEo() fills and then strokes the current path with an even * odd winding rule, and clears it. */ void cpdf_drawStrokeFillEo(void); /* cpdf_drawClose closes the current path by appending a straight line segment * from the current point to the starting point of the subpath. */ void cpdf_drawClose(void); /* cpdf_drawClip uses the current path as a clipping region, using the non-zero * winding rule. */ void cpdf_drawClip(void); /* cpdf_drawClipEo uses the current path as a clipping region, using the * even-odd winding rule. */ void cpdf_drawClipEo(void); /* cpdf_drawStrokColGrey(g) changes to a greyscale stroke colourspace and sets * the stroke colour. */ void cpdf_drawStrokeColGrey(double); /* cpdf_drawStrokeColRGB(r, g, b) changes to an RGB stroke colourspace and sets * the stroke colour. */ void cpdf_drawStrokeColRGB(double, double, double); /* cpdf_drawStrokeColCYMK(c, y, m, k) changes to a CYMK stroke colourspace and * sets the stroke colour. */ void cpdf_drawStrokeColCYMK(double, double, double, double); /* cpdf_drawFillColGrey(g) changes to a greyscale fill colourspace and sets the * fill colour. */ void cpdf_drawFillColGrey(double); /* cpdf_drawFillColRGB(r, g, b) changes to an RGB fill colourspace and sets the * fill colour. */ void cpdf_drawFillColRGB(double, double, double); /* cpdf_drawFillColCYMK(c, y, m, k) changes to a CYMK fill colourspace and sets * the fill colour. */ void cpdf_drawFillColCYMK(double, double, double, double); /* cpdf_drawThick(thickness) sets the line thickness. */ void cpdf_drawThick(double); /* Line caps. */ enum cpdf_cap { cpdf_capButt, cpdf_capRound, cpdf_capSquare }; /* cpdf_drawCap(captype) sets the line cap. */ void cpdf_drawCap(enum cpdf_cap); /* Line joins. */ enum cpdf_join { cpdf_joinMiter, cpdf_joinRound, cpdf_joinBevel }; /* cpdf_drawJoin(jointype) sets the line join type. */ void cpdf_drawJoin(enum cpdf_join); /* cpdf_drawMiter(m) sets the miter limit. */ void cpdf_drawMiter(double); /* cpdf_drawDash(dash description) sets the line dash style. */ void cpdf_drawDash(char *); /* cpdf_drawPush() saves the current graphics state on the stack. */ void cpdf_drawPush(void); /* cpdf_drawPop() restores the graphics state from the stack. */ void cpdf_drawPop(void); /* cpdf_drawMatrix(a, b, c, d, e, f) appends the given matrix to the Current * Transformation Matrix. */ void cpdf_drawMatrix(double, double, double, double, double, double); /* cpdf_drawMTrans(tx, ty) appends a translation by (tx, ty) to the Current * Transformation Matrix. */ void cpdf_drawMTrans(double, double); /* cpdf_drawMRot(x, y, a) appends a rotation by a around (a, y) to the Current * Transformation Matrix. */ void cpdf_drawMRot(double, double, double); /* cpdf_drawMScale(x, y, sx, sy) appends a scaling by (sx, sy) around (x, y) to * the Current Transformation Matrix. */ void cpdf_drawMScale(double, double, double, double); /* cpdf_drawMShearX(x, y, a) appends an X shearing of angle a around (x, y) to * the Current Transformation Matrix. */ void cpdf_drawMShearX(double, double, double); /* cpdf_drawMShearY(x, y, a) appends an Y shearing of angle a around (x, y) to * the Current Transformation Matrix. */ void cpdf_drawMShearY(double, double, double); /* cpdf_drawXObjBBox(x, y, w, h) sets the XObject bounding box. */ void cpdf_drawXObjBBox(double, double, double, double); /* cpdf_drawXObj(name) begins the storing of an XObject. */ void cpdf_drawXObj(char *); /* cpdf_drawEndXObj() ends the storing of an XObject. */ void cpdf_drawEndXObj(void); /* cpdf_drawUse(name) uses the named XObject. */ void cpdf_drawUse(char *); /* cpdf_drawJPEG(name, filename) loads a JPEG from the given file, storing it * under the given name. */ void cpdf_drawJPEG(char *, char *); /* cpdf_drawJPEGMemory(name, data, length) loads a JPEG from the given file, * storing it under the given name. */ void cpdf_drawJPEGMemory(char *, void *, int); /* cpdf_drawPNG(name, filename) loads a non-interlaced non-transparent * PNG from the given file, storing it under the given name. */ void cpdf_drawPNG(char *, char *); /* cpdf_drawPNG(name, data, length) loads a non-interlaced non-transparent * PNG from the given file, storing it under the given name. */ void cpdf_drawPNGMemory(char *, void *, int); /* cpdf_drawImage(name) draws a stored image. To draw at the expected size, it * is required to scale the Current Transformation Matrix by the width and * height of the image. */ void cpdf_drawImage(char *); /* cpdf_drawFillOpacity(n) sets the fill opacity. */ void cpdf_drawFillOpacity(double); /* cpdf_drawStrokeOpacity(n) sets the stroke opacity. */ void cpdf_drawStrokeOpacity(double); /* cpdf_drawBT() begins a text section. */ void cpdf_drawBT(void); /* cpdf_drawET() ends a text section. */ void cpdf_drawET(void); /* cpdf_drawFont(fontname) sets the font. */ void cpdf_drawFont(char *); /* cpdf_drawFontSize(n) sets the font size. */ void cpdf_drawFontSize(double); /* cpdf_drawText(text) draws text. */ void cpdf_drawText(char *); /* cpdf_drawSText(text) draws text with %Specials. You may need to use * cpdf_drawEndExtended instead of cpdf_drawEnd later, to provide the extra * information required. */ void cpdf_drawSText(char *); /* cpdf_drawLeading(n) sets the leading. */ void cpdf_drawLeading(double); /* cpdf_drawCharSpace(n) sets the character spacing. */ void cpdf_drawCharSpace(double); /* cpdf_drawWordSpace(n) sets the word spacing. */ void cpdf_drawWordSpace(double); /* cpdf_drawTextScale(n) sets the text scaling. */ void cpdf_drawTextScale(double); /* cpdf_drawRenderMode(n) sets the text rendering mode. */ void cpdf_drawRenderMode(int); /* cpdf_drawRise(n) sets the text rise. */ void cpdf_drawRise(double); /* cpdf_drawNL() moves to the next line. */ void cpdf_drawNL(void); /* cpdf_drawNewPage() moves to the next page, creating it if necessary, and * setting the range to just that new page. */ void cpdf_drawNewPage(void); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/splits/c05.tex�����������������������������������������������������������������0000664�0001750�0001750�00000000123�14771516640�015560� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* CHAPTER 4. Encryption */ /* Encryption covered under Chapter 1 in cpdflib. */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/splits/c15.tex�����������������������������������������������������������������0000664�0001750�0001750�00000002124�14771516640�015564� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* CHAPTER 14. Fonts. */ /* * Retrieving font information. First, call cpdf_startGetFontInfo(pdf). Now * call cpdf_numberFonts to return the number of fonts. For each font, call * one or more of cpdf_getFontPage, cpdf_getFontName, cpdf_getFontType, and * cpdf_getFontEncoding giving a serial number 0..<number of fonts> - 1 to * return information. Finally, call cpdf_endGetFontInfo to clean up. */ void cpdf_startGetFontInfo(int); int cpdf_numberFonts(void); int cpdf_getFontPage(int); char *cpdf_getFontName(int); char *cpdf_getFontType(int); char *cpdf_getFontEncoding(int); void cpdf_endGetFontInfo(void); /* cpdf_fontsJSON(pdf, size) returns JSON data for the font list, and fills * in the return length. */ void *cpdf_fontsJSON(int, int *); /* cpdf_removeFonts(pdf) removes all font data from a file. */ void cpdf_removeFonts(int); /* * cpdf_copyFont(from, to, range, pagenumber, fontname) copies the given font * from the given page in the 'from' PDF to every page in the 'to' PDF. The * new font is stored under its font name. */ void cpdf_copyFont(int, int, int, int, const char[]); ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/splits/c16.tex�����������������������������������������������������������������0000664�0001750�0001750�00000001547�14771516640�015575� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* CHAPTER 15. PDF and JSON */ /* Set the JSON output format. If true, the newer UTF8 format is used. Default: * false. */ void cpdf_JSONUTF8(int); /* cpdf_outputJSON(filename, parse_content, no_stream_data, pdf) outputs a PDF * in JSON format to the given filename. If parse_content is true, page content * is parsed. If no_stream_data is true, all stream data is suppressed entirely. * */ void cpdf_outputJSON(const char[], int, int, int, int); /* cpdf_outputJSONMemory(parse_content, no_stream_data, pdf, size) is like * outputJSON, but it writes to a buffer in memory. The length is filled in. */ void *cpdf_outputJSONMemory(int, int, int, int, int *); /* Load a PDF from a JSON file given its filename. */ int cpdf_fromJSON(const char[]); /* Load a PDF from a JSON file in memory, given the buffer and its length. */ int cpdf_fromJSONMemory(void *, int); ���������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/splits/c01.tex�����������������������������������������������������������������0000664�0001750�0001750�00000003334�14771516640�015563� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* CHAPTER 0. Preliminaries */ /* The function cpdf_startup(argv) must be called before using the library. */ void cpdf_startup(char **); /* Return the version of the cpdflib library as a string */ char *cpdf_version(); /* * Some operations have a fast mode. The default is 'slow' mode, which works * even on old-fashioned files. For more details, see section 1.13 of the * CPDF manual. These functions set the mode globally. */ void cpdf_setFast(); void cpdf_setSlow(); /* Calling this function with a true argument sets embedding for the Standard * 14 fonts. You must also set the directory to load them from with the * cpdf_embedStd14Dir function. Default value: false. */ void cpdf_embedStd14(int); /* Set the directory to load Standard 14 fonts for embedding. */ void cpdf_embedStd14Dir(char *); /* * Errors. cpdf_lastError and cpdf_lastErrorString hold information about the * last error to have occurred. They should be consulted after each call. If * cpdf_lastError is non-zero, there was an error, and cpdf_lastErrorString * gives details. If cpdf_lastError is zero, there was no error on the most * recent cpdf call. */ extern int cpdf_lastError; extern char *cpdf_lastErrorString; /* In some contexts, for example, .NET or JNI, constants in DLLs can be * difficult or impossible to access. We provide functions in addition. */ int cpdf_fLastError(void); char *cpdf_fLastErrorString(void); /* cpdf_clearError clears the current error state. */ void cpdf_clearError(void); /* * cpdf_onExit is a debug function which prints some information about * resource usage. This can be used to detect if PDFs or ranges are being * deallocated properly. Contrary to its name, it may be run at any time. */ void cpdf_onExit(void); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/splits/c03.tex�����������������������������������������������������������������0000664�0001750�0001750�00000002107�14771516640�015562� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* CHAPTER 2. Merging and Splitting */ /* * cpdf_mergeSimple(pdfs, length) given an array of PDFs, and its length, * merges the files into a new one, which is returned. */ int cpdf_mergeSimple(int *, int); /* * cpdf_merge(pdfs, len, retain_numbering, remove_duplicate_fonts) merges the * PDFs. If retain_numbering is true page labels are not rewritten. If * remove_duplicate_fonts is true, duplicate fonts are merged. This is useful * when the source documents for merging originate from the same source. */ int cpdf_merge(int *, int, int, int); /* * cpdf_mergeSame(pdfs, len, retain_numbering, remove_duplicate_fonts, * ranges) is the same as cpdf_merge, except that it has an additional * argument - an array of page ranges. This is used to select the pages to * pick from each PDF. This avoids duplication of information when multiple * discrete parts of a source PDF are included. */ int cpdf_mergeSame(int *, int, int, int, int *); /* * cpdf_selectPages(pdf, range) returns a new document which just those pages * in the page range. */ int cpdf_selectPages(int, int); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/splits/c20.tex�����������������������������������������������������������������0000664�0001750�0001750�00000004545�14771516640�015571� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* CHAPTER 19. Miscellaneous */ /* * cpdf_draft(pdf, range, boxes) removes images on the given pages, replacing * them with crossed boxes if 'boxes' is true. */ void cpdf_draft(int, int, int); /* * cpdf_removeAllText(pdf, range) removes all text from the given pages in a * given document. */ void cpdf_removeAllText(int, int); /* cpdf_blackText(pdf, range) blackens all text on the given pages. */ void cpdf_blackText(int, int); /* cpdf_blackLines(pdf, range) blackens all lines on the given pages. */ void cpdf_blackLines(int, int); /* cpdf_blackFills(pdf, range) blackens all fills on the given pages. */ void cpdf_blackFills(int, int); /* * cpdf_thinLines(pdf, range, min_thickness) thickens every line less than * min_thickness to min_thickness. Thickness given in points. */ void cpdf_thinLines(int, int, double); /* cpdf_copyId(from, to) copies the /ID from one document to another. */ void cpdf_copyId(int, int); /* cpdf_removeId(pdf) removes a document's /ID. */ void cpdf_removeId(int); /* cpdf_setVersion(pdf, version) sets the minor version number of a document. */ void cpdf_setVersion(int, int); /* cpdf_setFullVersion(pdf, major_version, minor_version) sets the full version * number of a document. */ void cpdf_setFullVersion(int, int, int); /* * cpdf_removeDictEntry(pdf, key) removes any dictionary entry with the given * key anywhere in the document. */ void cpdf_removeDictEntry(int, const char[]); /* cpdf_removeDictEntrySearch(pdf, key, seachterm) removes any dictionary entry * with the given key whose value matches the given search term. */ void cpdf_removeDictEntrySearch(int, const char[], const char[]); /* cpdf_replaceDictEntry(pdf, key, newvalue) replaces the value associated with * the given key. */ void cpdf_replaceDictEntry(int, const char[], const char[]); /* cpdf_replaceDictEntry(pdf, key, newvalue, searchterm) replaces the value * associated with the given key if the existing value matches the search term. */ void cpdf_replaceDictEntrySearch(int, const char[], const char[], const char[]); /* cpdf_getDictEntries(pdf, key, length) returns a JSON array containing any * and all values associated with the given key, and fills in its length. */ void *cpdf_getDictEntries(int, const char[], int *); /* * cpdf_removeClipping(pdf, range) removes all clipping from pages in the * given range. */ void cpdf_removeClipping(int, int); �����������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/splits/c10.tex�����������������������������������������������������������������0000664�0001750�0001750�00000004233�14771516640�015562� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* CHAPTER 9. Multipage facilities */ /* * cpdf_padBefore(pdf, range) adds a blank page before each page in the given * range. */ void cpdf_padBefore(int, int); /* * cpdf_padAfter(pdf, range) adds a blank page after each page in the given * range. */ void cpdf_padAfter(int, int); /* cpdf_pageEvery(pdf, n) adds a blank page after every n pages. */ void cpdf_padEvery(int, int); /* * cpdf_padMultiple(pdf, n) adds pages at the end to pad the file to a * multiple of n pages in length. */ void cpdf_padMultiple(int, int); /* * cpdf_padMultiple(pdf, n) adds pages at the beginning to pad the file to a * multiple of n pages in length. */ void cpdf_padMultipleBefore(int, int); /* cpdf_impose(pdf, x, y, fit, columns, rtl, btt, center, margin, spacing, * linewidth) imposes a PDF. There are two modes: imposing x * y, or imposing * to fit a page of size x * y. This is controlled by fit. Columns imposes by * columns rather than rows. rtl is right-to-left, btt bottom-to-top. Center is * unused for now. Margin is the margin around the output, spacing the spacing * between imposed inputs. */ void cpdf_impose(int, double, double, int, int, int, int, int, double, double, double); /* cpdf_chop(pdf, range, x, y, columns, rtl, btt) chops each page in the range * into x * y pieces. If columns is set, the pieces go by columns instead of * rows. If rtl is set, the pieces are taken right-to-left. If btt is set, the * pieces are taken from bottom to top. */ void cpdf_chop(int, int, int, int, int, int, int); /* cpdf_chopH(pdf, range, columns, y) chops each page in the range horizontally * at position y. If columns is set, the pieces are arranged in reverse order. * */ void cpdf_chopH(int, int, int, double); /* cpdf_chopV(pdf, range, columns, x) chops each page in the range vertically * at position x. If columns is set, the pieces are arranged in reverse order. * */ void cpdf_chopV(int, int, int, double); /* * Impose a document two up. cpdf_twoUp does so by retaining the existing * page size, scaling pages down. cpdf_twoUpStack does so by doubling the * page size, to fit two pages on one. */ void cpdf_twoUp(int); void cpdf_twoUpStack(int); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/splits/c14.tex�����������������������������������������������������������������0000664�0001750�0001750�00000003125�14771516640�015565� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* CHAPTER 13. Images. */ /* Get list of images. Call cpdf_startGetImages, which returns the total number * of images. Then serial numbers 0..<total number> - 1 are used to retreive * data. Finally, call cpdf_endGetImages to clean up. */ int cpdf_startGetImages(int); int cpdf_getImageObjNum(int); char *cpdf_getImagePages(int); char *cpdf_getImageName(int); int cpdf_getImageWidth(int); int cpdf_getImageHeight(int); int cpdf_getImageSize(int); int cpdf_getImageBPC(int); char *cpdf_getImageColSpace(int); char *cpdf_getImageFilter(int); void cpdf_endGetImages(void); /* * Get image data, including resolution at all points of use. Call * cpdf_startGetImageResolution(pdf, min_required_resolution) will begin the * process of obtaining data on all image uses below min_required_resolution, * returning the total number. So, to return all image uses, specify a very * high min_required_resolution. Then, call the other functions giving a * serial number 0..<total number> - 1, to retrieve the data. Finally, call * cpdf_endGetImageResolution to clean up. */ int cpdf_startGetImageResolution(int, double); int cpdf_getImageResolutionPageNumber(int); char *cpdf_getImageResolutionImageName(int); int cpdf_getImageResolutionXPixels(int); int cpdf_getImageResolutionYPixels(int); double cpdf_getImageResolutionXRes(int); double cpdf_getImageResolutionYRes(int); int cpdf_getImageResolutionObjNum(int); void cpdf_endGetImageResolution(void); /* Get image resolution data in JSON format */ void *cpdf_imageResolutionJSON(int, int *, float); /* Get image data in JSON format */ void *cpdf_imagesJSON(int, int *); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/splits/c02.tex�����������������������������������������������������������������0000664�0001750�0001750�00000025066�14771516640�015572� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* CHAPTER 1. Basics */ /* * cpdf_fromFile(filename, userpw) loads a PDF file from a given file. Supply * a user password (possibly blank) in case the file is encrypted. It won't be * decrypted, but sometimes the password is needed just to load the file. */ int cpdf_fromFile(const char[], const char[]); /* * cpdf_fromFileLazy(pdf, userpw) loads a PDF from a file, doing only minimal * parsing. The objects will be read and parsed when they are actually * needed. Use this when the whole file won't be required. Also supply a user * password (possibly blank) in case the file is encrypted. It won't be * decrypted, but sometimes the password is needed just to load the file. */ int cpdf_fromFileLazy(const char[], const char[]); /* * cpdf_fromMemory(data, length, userpw) loads a file from memory, given a * pointer and a length, and the user password. */ int cpdf_fromMemory(void *, int, const char[]); /* * cpdf_fromMemory(data, length, userpw) loads a file from memory, given a * pointer and a length, and the user password, but lazily like * cpdf_fromFileLazy. */ int cpdf_fromMemoryLazy(void *, int, const char[]); /* Remove a PDF from memory, given its number. */ void cpdf_deletePdf(int); /* * Calling cpdf_replacePdf(a, b) places PDF b under number a. Number b is no * longer available. */ void cpdf_replacePdf(int, int); /* * To enumerate the list of currently allocated PDFs, call * cpdf_startEnumeratePDFs which gives the number, n, of PDFs allocated, then * cpdf_enumeratePDFsInfo and cpdf_enumeratePDFsKey with index numbers from * 0...(n - 1). Call cpdf_endEnumeratePDFs to clean up. */ int cpdf_startEnumeratePDFs(void); int cpdf_enumeratePDFsKey(int); char *cpdf_enumeratePDFsInfo(int); void cpdf_endEnumeratePDFs(void); /* Convert a figure in centimetres to points (72 points to 1 inch) */ double cpdf_ptOfCm(double); /* Convert a figure in millimetres to points (72 points to 1 inch) */ double cpdf_ptOfMm(double); /* Convert a figure in inches to points (72 points to 1 inch) */ double cpdf_ptOfIn(double); /* Convert a figure in points to centimetres (72 points to 1 inch) */ double cpdf_cmOfPt(double); /* Convert a figure in points to millimetres (72 points to 1 inch) */ double cpdf_mmOfPt(double); /* Convert a figure in points to inches (72 points to 1 inch) */ double cpdf_inOfPt(double); /* * A page range is a list of page numbers used to restrict operations to * certain pages. A page specification is a textual description of a page * range, such as "1-12,18-end". Here is the syntax: * * o A range must contain no spaces. * * o A dash (-) defines ranges, e.g. 1-5 or 6-3. * * o A comma (,) allows one to specify several ranges, e.g. 1-2,4-5. * * o The word end represents the last page number. * * o The words odd and even can be used in place of or at the end of a page * range to restrict to just the odd or even pages. * * o The words portrait and landscape can be used in place of or at the end of * a page range to restrict to just those pages which are portrait or * landscape. Note that the meaning of "portrait" and "landscape" does not * take account of any viewing rotation in place (use cpdf_upright first, if * required). A page with equal width and height is considered neither * portrait nor landscape. * * o The word reverse is the same as end-1. * * o The word all is the same as 1-end. * * o A tilde (~) defines a page number counting from the end of the document * rather than the beginning. Page ~1 is the last page, ~2 the penultimate * page etc. */ /* * cpdf_parsePagespec(pdf, range) parses a page specification with reference * to a given PDF (the PDF is supplied so that page ranges which reference * pages which do not exist are rejected). */ int cpdf_parsePagespec(int, const char[]); /* * cpdf_validatePagespec(range) validates a page specification so far as is * possible in the absence of the actual document. Result is true if valid. */ int cpdf_validatePagespec(const char[]); /* * cpdf_stringOfPagespec(pdf, range) builds a page specification from a page * range. For example, the range containing 1,2,3,6,7,8 in a document of 8 * pages might yield "1-3,6-end" */ char *cpdf_stringOfPagespec(int, int); /* cpdf_blankRange() creates a range with no pages in. */ int cpdf_blankRange(void); /* cpdf_deleteRange(range) deletes a range. */ void cpdf_deleteRange(int); /* * cpdf_range(from, to) builds a range from one page to another inclusive. For * example, cpdf_range(3,7) gives the range 3,4,5,6,7 */ int cpdf_range(int, int); /* cpdf_all(pdf) is the range containing all the pages in a given document. */ int cpdf_all(int); /* * cpdf_even(range) makes a range which contains just the even pages of * another range. */ int cpdf_even(int); /* * cpdf_odd(range) makes a range which contains just the odd pages of another * range. */ int cpdf_odd(int); /* * cpdf_rangeUnion(a, b) makes the union of two ranges giving a range * containing the pages in range a and range b. */ int cpdf_rangeUnion(int, int); /* * cpdf_difference(a, b) makes the difference of two ranges, giving a range * containing all the pages in a except for those which are also in b. */ int cpdf_difference(int, int); /* cpdf_removeDuplicates(range) deduplicates a range, making a new one. */ int cpdf_removeDuplicates(int); /* cpdf_rangeLength gives the number of pages in a range. */ int cpdf_rangeLength(int); /* * cpdf_rangeGet(range, n) gets the page number at position n in a range, * where n runs from 0 to rangeLength - 1. */ int cpdf_rangeGet(int, int); /* * cpdf_rangeAdd(range, page) adds the page to a range, if it is not already * there. */ int cpdf_rangeAdd(int, int); /* * cpdf_isInRange(range, page) returns true if the page is in the range, * false otherwise. */ int cpdf_isInRange(int, int); /* cpdf_pages(pdf) returns the number of pages in a PDF. */ int cpdf_pages(int); /* * cpdf_pagesFast(password, filename) returns the number of pages in a given * PDF, with given user encryption password. It tries to do this as fast as * possible, without loading the whole file. */ int cpdf_pagesFast(const char[], const char[]); /* * cpdf_toFile (pdf, filename, linearize, make_id) writes the file to a given * filename. If linearize is true, it will be linearized if a linearizer is * available. If make_id is true, it will be given a new ID. * * NB: Unlike with the command line tool, cpdf, streams decompressed during * processing will not automatically be compressed when writing. Call * cpdf_compress() first. */ void cpdf_toFile(int, const char[], int, int); /* * cpdf_toFileExt (pdf, filename, linearize, make_id, preserve_objstm, * generate_objstm, compress_objstm) writes the file to a given filename. If * make_id is true, it will be given a new ID. If preserve_objstm is true, * existing object streams will be preserved. If generate_objstm is true, * object streams will be generated even if not originally present. If * compress_objstm is true, object streams will be compressed (what we * usually want). WARNING: the pdf argument will be invalid after this call, * and should be discarded. */ void cpdf_toFileExt(int, const char[], int, int, int, int, int); /* * cpdf_toFileMemory (pdf, linearize, make_id, sizse) writes a PDF file it * and returns the buffer. The buffer length is filled in. * * NB: Unlike with the command line tool, cpdf, streams decompressed during * processing will not automatically be compressed when writing. Call * cpdf_compress() first. */ void *cpdf_toMemory(int, int, int, int *); /* * cpdf_isEncrypted(pdf) returns true if a documented is encrypted, false * otherwise. */ int cpdf_isEncrypted(int); /* * cpdf_decryptPdf(pdf, userpw) attempts to decrypt a PDF using the given * user password. The error code is non-zero if the decryption fails. */ void cpdf_decryptPdf(int, const char[]); /* * cpdf_decryptPdfOwner(pdf, ownerpw) attempts to decrypt a PDF using the * given owner password. The error code is non-zero if the decryption fails. */ void cpdf_decryptPdfOwner(int, const char[]); /* * File permissions. These are inverted, in the sense that the presence of * one of them indicates a restriction. */ enum cpdf_permission { cpdf_noEdit, /* Cannot edit the document */ cpdf_noPrint, /* Cannot print the document */ cpdf_noCopy, /* Cannot copy the document */ cpdf_noAnnot, /* Cannot annotate the document */ cpdf_noForms, /* Cannot edit forms in the document */ cpdf_noExtract, /* Cannot extract information */ cpdf_noAssemble, /* Cannot assemble into a bigger document */ cpdf_noHqPrint /* Cannot print high quality */ }; /* * Encryption methods. Suffixes 'false' and 'true' indicates lack of or * presence of encryption for XMP metadata streams. */ enum cpdf_encryptionMethod { cpdf_pdf40bit, /* 40 bit RC4 encryption */ cpdf_pdf128bit, /* 128 bit RC4 encryption */ cpdf_aes128bitfalse, /* 128 bit AES encryption, do not encrypt * metadata. */ cpdf_aes128bittrue, /* 128 bit AES encryption, encrypt metadata */ cpdf_aes256bitfalse, /* Deprecated. Do not use for new files */ cpdf_aes256bittrue, /* Deprecated. Do not use for new files */ cpdf_aes256bitisofalse, /* 256 bit AES encryption, do not encrypt * metadata. */ cpdf_aes256bitisotrue /* 256 bit AES encryption, encrypt metadata */ }; /* * cpdf_toFileEncrypted(pdf, encryption_method, permissions, * permission_length, owner_password, user password, linearize, makeid, * filename) writes a file as encrypted. */ void cpdf_toFileEncrypted(int, int, int *, int, const char[], const char[], int, int, const char[]); /* * cpdf_toFileEncryptedExt(pdf, encryption_method, permissions, * permission_length, owner_password, user_password, linearize, makeid, * preserve_objstm, generate_objstm, compress_objstm, filename) WARNING: the * pdf argument will be invalid after this call, and should be discarded. */ void cpdf_toFileEncryptedExt(int, int, int *, int, const char[], const char[], int, int, int, int, int, const char[]); /* * cpdf_hasPermission(pdf, permission) returns true if the given permission * (restriction) is present. */ int cpdf_hasPermission(int, enum cpdf_permission); /* * cpdf_encryptionKind(pdf) return the encryption method currently in use on * a document. */ enum cpdf_encryptionMethod cpdf_encryptionKind(int); /* cpdf_loadFont(name, filename) loads a TrueType font from the given file * name, and names it. It may then be used when adding text or drawing, using * the name in place of a standard font name. */ void cpdf_loadFont(char *, char *); ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/docsplits/splits/c13.tex�����������������������������������������������������������������0000664�0001750�0001750�00000003213�14771516640�015562� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* CHAPTER 12. File Attachments */ /* * cpdf_attachFile(filename, pdf) attaches a file to the pdf. It is attached * at document level. */ void cpdf_attachFile(const char[], int); /* * cpdf_attachFileToPage(filename, pdf, pagenumber) attaches a file, given * its file name, pdf, and the page number to which it should be attached. */ void cpdf_attachFileToPage(const char[], int, int); /* * cpdf_attachFileFromMemory(memory, length, filename, pdf) attaches from * memory, just like cpdf_attachFile. */ void cpdf_attachFileFromMemory(void *, int, const char[], int); /* * cpdf_attachFileToPageFromMemory(memory, length, filename, pdf, pagenumber) * attaches from memory, just like cpdf_attachFileToPage. */ void cpdf_attachFileToPageFromMemory(void *, int, const char[], int, int); /* Remove all page- and document-level attachments from a document. */ void cpdf_removeAttachedFiles(int); /* * List information about attachments. Call cpdf_startGetAttachments(pdf) * first, then cpdf_numberGetAttachments to find out how many there are. Then * cpdf_getAttachmentName etc. to return each one 0...(n - 1). Finally, call * cpdf_endGetAttachments to clean up. */ void cpdf_startGetAttachments(int); /* Get the number of attachments. */ int cpdf_numberGetAttachments(void); /* Get the name of the attachment. */ char *cpdf_getAttachmentName(int); /* Gets the page number. 0 = document level. */ int cpdf_getAttachmentPage(int); /* * cpdf_getAttachmentData(serial number, length) returns a pointer to the * data, and its length. */ void *cpdf_getAttachmentData(int, int *); /* Clean up after getting attachments. */ void cpdf_endGetAttachments(void); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/cpdfdebug.mli����������������������������������������������������������������������������0000664�0001750�0001750�00000000175�14771516640�013562� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(** Debugging tools *) (** Print all the objects from a given PDF to Standard Output. *) val print_pdf_objs : Pdf.t -> unit ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/cpdfpagelabels.ml������������������������������������������������������������������������0000664�0001750�0001750�00000003313�14771516640�014417� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������open Pdfutil (* Split the given range (which is in order) into multiple contiguous ones. *) let rec ranges_of_range curr prev = function | [] -> begin match curr with [] -> rev prev | _ -> rev (rev curr::prev) end | x::xs -> match curr with | [] -> ranges_of_range [x] prev xs | c::cs when x = c + 1 -> ranges_of_range (x::curr) prev xs | cs -> ranges_of_range [x] (rev cs::prev) xs (* Predicate which is true if at least one page range starts at page 1 *) let page1 labels = mem true (map (function l -> l.Pdfpagelabels.startpage = 1) labels) let add_page_labels pdf progress style prefix startval range = let ranges = map extremes (ranges_of_range [] [] range) and labels = Pdfpagelabels.read pdf in assert (length ranges > 0); let startval_additions = let r = ref [] in let sofar = ref 0 in iter (fun (s, e) -> r := !sofar :: !r; sofar := e - s + 1 + !sofar) ranges; rev !r in let labels = if not (page1 labels) then ref ({Pdfpagelabels.labelstyle = Pdfpagelabels.DecimalArabic; Pdfpagelabels.labelprefix = None; Pdfpagelabels.startpage = 1; Pdfpagelabels.startvalue = 1}::labels) else ref labels in iter2 (fun (s, e) addition -> let label = {Pdfpagelabels.labelstyle = style; Pdfpagelabels.labelprefix = prefix; Pdfpagelabels.startpage = s; Pdfpagelabels.startvalue = startval + if progress then addition else 0} in labels := Pdfpagelabels.add_label (Pdfpage.endpage pdf) !labels label e) ranges startval_additions; Pdfpagelabels.write pdf !labels ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/cpdftype.mli�����������������������������������������������������������������������������0000664�0001750�0001750�00000002026�14771516640�013452� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(** Experimental typesetter for cpdf *) type element = Text of char list | HGlue of float | VGlue of float | NewLine | NewPage | Font of string * Pdftext.font * float | BeginDest of Pdfdest.t * string option | EndDest | BeginDocument | Tag of string * int | EndTag type t = element list (** Debug printing *) val to_string : t -> string (** Return the font width table for a given (id, font, fontsize) combination. *) val font_widths : string -> Pdftext.font -> float -> float array (** Calculate the widths of a string given a font width table, and list of char codes *) val width_of_string : float array -> char list -> float (** [typeset process_struct_tree lmargin rmargin tmargin bmargin papersize pdf contents] builds a list of pages of typset content. *) val typeset : process_struct_tree:bool -> float -> float -> float -> float -> Pdfpaper.t -> Pdf.t -> t -> Pdfpage.t list * (string * int) list list (** Add artifact markers to any un-marked part of the content stream. *) val add_artifacts : Pdfops.t list -> Pdfops.t list ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/cpdfchop.ml������������������������������������������������������������������������������0000664�0001750�0001750�00000007605�14771516640�013261� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������open Pdfutil open Cpdferror (* Chop a single page into pieces. We prefer the cropbox when available. We set mediabox only, and delete any other boxes. We delete /Annots, since duplicate annotations are not allowed. *) let get_box pdf page = match Pdf.lookup_direct pdf "/CropBox" page.Pdfpage.rest with | Some r -> Pdf.parse_rectangle pdf r | None -> Pdf.parse_rectangle pdf page.Pdfpage.mediabox let erase_boxes d = let f = Pdf.remove_dict_entry in f (f (f (f (f d "/CropBox") "/BleedBox") "/TrimBox") "/ArtBox") "/Annots" let make_pages x y columns btt rtl w h ps move_page = if columns then let column tx = if btt then for ty = 0 to y - 1 do ps =| move_page (w *. float_of_int tx) (h *. float_of_int ty) done else for ty = y - 1 downto 0 do ps =| move_page (w *. float_of_int tx) (h *. float_of_int ty) done in if rtl then for tx = x - 1 downto 0 do column tx done else for tx = 0 to x - 1 do column tx done else let row ty = if rtl then for tx = x - 1 downto 0 do ps =| move_page (w *. float_of_int tx) (h *. float_of_int ty) done else for tx = 0 to x - 1 do ps =| move_page (w *. float_of_int tx) (h *. float_of_int ty) done in if btt then for ty = 0 to y - 1 do row ty done else for ty = y - 1 downto 0 do row ty done let chop_boxes line pdf x y columns btt rtl p = let minx, miny, maxx, maxy = get_box pdf p in let mkpair p minx0 miny0 maxx0 maxy0 minx1 miny1 maxx1 maxy1 = [{p with Pdfpage.mediabox = Pdf.Array [Pdf.Real minx0; Pdf.Real miny0; Pdf.Real maxx0; Pdf.Real maxy0]; Pdfpage.rest = erase_boxes p.Pdfpage.rest}; {p with Pdfpage.mediabox = Pdf.Array [Pdf.Real minx1; Pdf.Real miny1; Pdf.Real maxx1; Pdf.Real maxy1]; Pdfpage.rest = erase_boxes p.Pdfpage.rest}] in if x = 0 then (* horizontal split at line *) let minx0, miny0, maxx0, maxy0 = minx, line, maxx, maxy in let minx1, miny1, maxx1, maxy1 = minx, miny, maxx, line in let pair = mkpair p minx0 miny0 maxx0 maxy0 minx1 miny1 maxx1 maxy1 in if columns then rev pair else pair else if y = 0 then (* vertical split at line *) let minx0, miny0, maxx0, maxy0 = minx, miny, line, maxy in let minx1, miny1, maxx1, maxy1 = line, miny, maxx, maxy in let pair = mkpair p minx0 miny0 maxx0 maxy0 minx1 miny1 maxx1 maxy1 in if columns then rev pair else pair else let move_page mx my p w h dx dy = let nminx, nminy, nmaxx, nmaxy = (mx +. dx, my +. dy, mx +. w +. dx, my +. h +. dy) in {p with Pdfpage.mediabox = Pdf.Array [Pdf.Real nminx; Pdf.Real nminy; Pdf.Real nmaxx; Pdf.Real nmaxy]; Pdfpage.rest = erase_boxes p.Pdfpage.rest} in let w, h = (maxx -. minx) /. float_of_int x, (maxy -. miny) /. float_of_int y in let ps = ref [] in make_pages x y columns btt rtl w h ps (move_page minx miny p w h); rev !ps let chop_inner ~line ~x ~y ~columns ~btt ~rtl pdf range = let pages = Pdfpage.pages_of_pagetree pdf in let pages_out = flatten (map2 (fun n p -> if mem n range then chop_boxes line pdf x y columns btt rtl p else [p]) (ilist 1 (Pdfpage.endpage pdf)) pages) in let x, y = if x = 0 || y = 0 then 1, 2 else x, y in (* Fix up for -chop-v, -chop-h *) let changes = let q = ref 0 in flatten (map2 (fun n p -> if mem n range then (q += 1; let r = combine (many n (x * y)) (ilist !q (!q + x * y - 1)) in q += (x * y - 1); r) else (q += 1; [(n, !q)])) (ilist 1 (Pdfpage.endpage pdf)) pages) in Pdfpage.change_pages ~changes true pdf pages_out let chop ~x ~y ~columns ~btt ~rtl pdf range = chop_inner ~line:0. ~x ~y ~columns ~btt ~rtl pdf range let chop_hv ~is_h ~line ~columns pdf range = chop_inner ~line ~x:(if is_h then 0 else 1) ~y:(if is_h then 1 else 0) ~columns ~btt:false ~rtl:false pdf range ���������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/cpdfxmlm.ml������������������������������������������������������������������������������0000664�0001750�0001750�00000124525�14771516640�013306� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(*--------------------------------------------------------------------------- Copyright (c) 2007 Daniel C. Bünzli. All rights reserved. Distributed under the ISC license, see terms at the end of the file. %%NAME%% %%VERSION%% ---------------------------------------------------------------------------*) module Std_string = String module Std_buffer = Buffer type std_string = string type std_buffer = Buffer.t module type String = sig type t val empty : t val length : t -> int val append : t -> t -> t val lowercase : t -> t val iter : (int -> unit) -> t -> unit val of_string : std_string -> t val to_utf_8 : ('a -> std_string -> 'a) -> 'a -> t -> 'a val compare : t -> t -> int end module type Buffer = sig type string type t exception Full val create : int -> t val add_uchar : t -> int -> unit val clear : t -> unit val contents : t -> string val length : t -> int end module type S = sig type string type encoding = [ | `UTF_8 | `UTF_16 | `UTF_16BE | `UTF_16LE | `ISO_8859_1 | `US_ASCII ] type dtd = string option type name = string * string type attribute = name * string type tag = name * attribute list type signal = [ `Dtd of dtd | `El_start of tag | `El_end | `Data of string ] val ns_xml : string val ns_xmlns : string type pos = int * int type error = [ | `Max_buffer_size | `Unexpected_eoi | `Malformed_char_stream | `Unknown_encoding of string | `Unknown_entity_ref of string | `Unknown_ns_prefix of string | `Illegal_char_ref of string | `Illegal_char_seq of string | `Expected_char_seqs of string list * string | `Expected_root_element ] exception Error of pos * error val error_message : error -> string type source = [ | `Channel of in_channel | `String of int * std_string | `Fun of (unit -> int) ] type input val make_input : ?enc:encoding option -> ?strip:bool -> ?ns:(string -> string option) -> ?entity: (string -> string option) -> source -> input val input : input -> signal val input_tree : el:(tag -> 'a list -> 'a) -> data:(string -> 'a) -> input -> 'a val input_doc_tree : el:(tag -> 'a list -> 'a) -> data:(string -> 'a) -> input -> (dtd * 'a) val peek : input -> signal val eoi : input -> bool val pos : input -> pos type 'a frag = [ `El of tag * 'a list | `Data of string ] type dest = [ | `Channel of out_channel | `Buffer of std_buffer | `Fun of (int -> unit) ] type output val make_output : ?decl:bool -> ?nl:bool -> ?indent:int option -> ?ns_prefix:(string -> string option) -> dest -> output val output_depth : output -> int val output : output -> signal -> unit val output_tree : ('a -> 'a frag) -> output -> 'a -> unit val output_doc_tree : ('a -> 'a frag) -> output -> (dtd * 'a) -> unit end (* Unicode character lexers *) exception Malformed (* for character stream, internal only. *) let utf8_len = [| (* Char byte length according to first UTF-8 byte. *) 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0 |] let uchar_utf8 i = let b0 = i () in begin match utf8_len.(b0) with | 0 -> raise Malformed | 1 -> b0 | 2 -> let b1 = i () in if b1 lsr 6 != 0b10 then raise Malformed else ((b0 land 0x1F) lsl 6) lor (b1 land 0x3F) | 3 -> let b1 = i () in let b2 = i () in if b2 lsr 6 != 0b10 then raise Malformed else begin match b0 with | 0xE0 -> if b1 < 0xA0 || 0xBF < b1 then raise Malformed else () | 0xED -> if b1 < 0x80 || 0x9F < b1 then raise Malformed else () | _ -> if b1 lsr 6 != 0b10 then raise Malformed else () end; ((b0 land 0x0F) lsl 12) lor ((b1 land 0x3F) lsl 6) lor (b2 land 0x3F) | 4 -> let b1 = i () in let b2 = i () in let b3 = i () in if b3 lsr 6 != 0b10 || b2 lsr 6 != 0b10 then raise Malformed else begin match b0 with | 0xF0 -> if b1 < 0x90 || 0xBF < b1 then raise Malformed else () | 0xF4 -> if b1 < 0x80 || 0x8F < b1 then raise Malformed else () | _ -> if b1 lsr 6 != 0b10 then raise Malformed else () end; ((b0 land 0x07) lsl 18) lor ((b1 land 0x3F) lsl 12) lor ((b2 land 0x3F) lsl 6) lor (b3 land 0x3F) | _ -> assert false end let int16_be i = let b0 = i () in let b1 = i () in (b0 lsl 8) lor b1 let int16_le i = let b0 = i () in let b1 = i () in (b1 lsl 8) lor b0 let uchar_utf16 int16 i = let c0 = int16 i in if c0 < 0xD800 || c0 > 0xDFFF then c0 else if c0 > 0xDBFF then raise Malformed else let c1 = int16 i in (((c0 land 0x3FF) lsl 10) lor (c1 land 0x3FF)) + 0x10000 let uchar_utf16be = uchar_utf16 int16_be let uchar_utf16le = uchar_utf16 int16_le let uchar_byte i = i () let uchar_iso_8859_1 i = i () let uchar_ascii i = let b = i () in if b > 127 then raise Malformed else b (* Functorized streaming XML IO *) module Make (String : String) (Buffer : Buffer with type string = String.t) = struct type string = String.t let str = String.of_string let str_eq s s' = (compare s s') = 0 let str_empty s = (compare s String.empty) = 0 let cat = String.append let str_of_char u = let b = Buffer.create 4 in Buffer.add_uchar b u; Buffer.contents b module Ht = Hashtbl.Make (struct type t = string let equal = str_eq let hash = Hashtbl.hash end) let u_nl = 0x000A (* newline *) let u_cr = 0x000D (* carriage return *) let u_space = 0x0020 (* space *) let u_quot = 0x0022 (* quote *) let u_sharp = 0x0023 (* # *) let u_amp = 0x0026 (* & *) let u_apos = 0x0027 (* ' *) let u_minus = 0x002D (* - *) let u_slash = 0x002F (* / *) let u_colon = 0x003A (* : *) let u_scolon = 0x003B (* ; *) let u_lt = 0x003C (* < *) let u_eq = 0x003D (* = *) let u_gt = 0x003E (* > *) let u_qmark = 0x003F (* ? *) let u_emark = 0x0021 (* ! *) let u_lbrack = 0x005B (* [ *) let u_rbrack = 0x005D (* ] *) let u_x = 0x0078 (* x *) let u_bom = 0xFEFF (* BOM *) let u_9 = 0x0039 (* 9 *) let u_F = 0x0046 (* F *) let u_D = 0X0044 (* D *) let s_cdata = str "CDATA[" let ns_xml = str "http://www.w3.org/XML/1998/namespace" let ns_xmlns = str "http://www.w3.org/2000/xmlns/" let n_xml = str "xml" let n_xmlns = str "xmlns" let n_space = str "space" let n_version = str "version" let n_encoding = str "encoding" let n_standalone = str "standalone" let v_yes = str "yes" let v_no = str "no" let v_preserve = str "preserve" let v_default = str "default" let v_version_1_0 = str "1.0" let v_version_1_1 = str "1.1" let v_utf_8 = str "utf-8" let v_utf_16 = str "utf-16" let v_utf_16be = str "utf-16be" let v_utf_16le = str "utf-16le" let v_iso_8859_1 = str "iso-8859-1" let v_us_ascii = str "us-ascii" let v_ascii = str "ascii" let name_str (p,l) = if str_empty p then l else cat p (cat (str ":") l) (* Basic types and values *) type encoding = [ | `UTF_8 | `UTF_16 | `UTF_16BE | `UTF_16LE | `ISO_8859_1 | `US_ASCII ] type dtd = string option type name = string * string type attribute = name * string type tag = name * attribute list type signal = [ `Dtd of dtd | `El_start of tag | `El_end | `Data of string ] (* Input *) type pos = int * int type error = [ | `Max_buffer_size | `Unexpected_eoi | `Malformed_char_stream | `Unknown_encoding of string | `Unknown_entity_ref of string | `Unknown_ns_prefix of string | `Illegal_char_ref of string | `Illegal_char_seq of string | `Expected_char_seqs of string list * string | `Expected_root_element ] exception Error of pos * error let error_message e = let bracket l v r = cat (str l) (cat v (str r)) in match e with | `Expected_root_element -> str "expected root element" | `Max_buffer_size -> str "maximal buffer size exceeded" | `Unexpected_eoi -> str "unexpected end of input" | `Malformed_char_stream -> str "malformed character stream" | `Unknown_encoding e -> bracket "unknown encoding (" e ")" | `Unknown_entity_ref e -> bracket "unknown entity reference (" e ")" | `Unknown_ns_prefix e -> bracket "unknown namespace prefix (" e ")" | `Illegal_char_ref s -> bracket "illegal character reference (#" s ")" | `Illegal_char_seq s -> bracket "character sequence illegal here (\"" s "\")" | `Expected_char_seqs (exps, fnd) -> let exps = let exp acc v = cat acc (bracket "\"" v "\", ") in List.fold_left exp String.empty exps in cat (str "expected one of these character sequence: ") (cat exps (bracket "found \"" fnd "\"")) type limit = (* XML is odd to parse. *) | Stag of name (* '<' qname *) | Etag of name (* '</' qname whitespace* *) | Pi of name (* '<?' qname *) | Comment (* '<!--' *) | Cdata (* '<![CDATA[' *) | Dtd (* '<!' *) | Text (* other character *) | Eoi (* End of input *) type source = [ | `Channel of in_channel | `String of int * std_string | `Fun of (unit -> int) ] type input = { enc : encoding option; (* Expected encoding. *) strip : bool; (* Whitespace stripping default behaviour. *) fun_ns : string -> string option; (* Namespace callback. *) fun_entity : string -> string option; (* Entity reference callback. *) i : unit -> int; (* Byte level input. *) mutable uchar : (unit -> int) -> int; (* Unicode character lexer. *) mutable c : int; (* Character lookahead. *) mutable cr : bool; (* True if last u was '\r'. *) mutable line : int; (* Current line number. *) mutable col : int; (* Current column number. *) mutable limit : limit; (* Last parsed limit. *) mutable peek : signal; (* Signal lookahead. *) mutable stripping : bool; (* True if stripping whitespace. *) mutable last_white : bool; (* True if last char was white. *) mutable scopes : (name * string list * bool) list; (* Stack of qualified el. name, bound prefixes and strip behaviour. *) ns : string Ht.t; (* prefix -> uri bindings. *) ident : Buffer.t; (* Buffer for names and entity refs. *) data : Buffer.t; } (* Buffer for character and attribute data. *) let err_input_tree = "input signal not `El_start or `Data" let err_input_doc_tree = "input signal not `Dtd" let err i e = raise (Error ((i.line, i.col), e)) let err_illegal_char i u = err i (`Illegal_char_seq (str_of_char u)) let err_expected_seqs i exps s = err i (`Expected_char_seqs (exps, s)) let err_expected_chars i exps = err i (`Expected_char_seqs (List.map str_of_char exps, str_of_char i.c)) let u_eoi = max_int let u_start_doc = u_eoi - 1 let u_end_doc = u_start_doc - 1 let signal_start_stream = `Data String.empty let make_input ?(enc = None) ?(strip = false) ?(ns = fun _ -> None) ?(entity = fun _ -> None) src = let i = match src with | `Fun f -> f | `Channel ic -> fun () -> input_byte ic | `String (pos, s) -> let len = Std_string.length s in let pos = ref (pos - 1) in fun () -> incr pos; if !pos = len then raise End_of_file else Char.code (Std_string.get s !pos) in let bindings = let h = Ht.create 15 in Ht.add h String.empty String.empty; Ht.add h n_xml ns_xml; Ht.add h n_xmlns ns_xmlns; h in { enc = enc; strip = strip; fun_ns = ns; fun_entity = entity; i = i; uchar = uchar_byte; c = u_start_doc; cr = false; line = 1; col = 0; limit = Text; peek = signal_start_stream; stripping = strip; last_white = true; scopes = []; ns = bindings; ident = Buffer.create 64; data = Buffer.create 1024; } (* Bracketed non-terminals in comments refer to XML 1.0 non terminals *) let r : int -> int -> int -> bool = fun u a b -> a <= u && u <= b let is_white = function 0x0020 | 0x0009 | 0x000D | 0x000A -> true | _ -> false let is_char = function (* {Char} *) | u when r u 0x0020 0xD7FF -> true | 0x0009 | 0x000A | 0x000D -> true | u when r u 0xE000 0xFFFD || r u 0x10000 0x10FFFF -> true | _ -> false let is_digit u = r u 0x0030 0x0039 let is_hex_digit u = r u 0x0030 0x0039 || r u 0x0041 0x0046 || r u 0x0061 0x0066 let comm_range u = (* common to functions below *) r u 0x00C0 0x00D6 || r u 0x00D8 0x00F6 || r u 0x00F8 0x02FF || r u 0x0370 0x037D || r u 0x037F 0x1FFF || r u 0x200C 0x200D || r u 0x2070 0x218F || r u 0x2C00 0x2FEF || r u 0x3001 0xD7FF || r u 0xF900 0xFDCF || r u 0xFDF0 0xFFFD || r u 0x10000 0xEFFFF let is_name_start_char = function (* {NameStartChar} - ':' (XML 1.1) *) | u when r u 0x0061 0x007A || r u 0x0041 0x005A -> true (* [a-z] | [A-Z] *) | u when is_white u -> false | 0x005F -> true (* '_' *) | u when comm_range u -> true | _ -> false let is_name_char = function (* {NameChar} - ':' (XML 1.1) *) | u when r u 0x0061 0x007A || r u 0x0041 0x005A -> true (* [a-z] | [A-Z] *) | u when is_white u -> false | u when r u 0x0030 0x0039 -> true (* [0-9] *) | 0x005F | 0x002D | 0x002E | 0x00B7 -> true (* '_' '-' '.' *) | u when comm_range u || r u 0x0300 0x036F || r u 0x203F 0x2040 -> true | _ -> false let rec nextc i = if i.c = u_eoi then err i `Unexpected_eoi; if i.c = u_nl then (i.line <- i.line + 1; i.col <- 1) else i.col <- i.col + 1; i.c <- i.uchar i.i; if not (is_char i.c) then raise Malformed; if i.cr && i.c = u_nl then i.c <- i.uchar i.i; (* cr nl business *) if i.c = u_cr then (i.cr <- true; i.c <- u_nl) else i.cr <- false let nextc_eof i = try nextc i with End_of_file -> i.c <- u_eoi let skip_white i = while (is_white i.c) do nextc i done let skip_white_eof i = while (is_white i.c) do nextc_eof i done let accept i c = if i.c = c then nextc i else err_expected_chars i [ c ] let clear_ident i = Buffer.clear i.ident let clear_data i = Buffer.clear i.data let addc_ident i c = Buffer.add_uchar i.ident c let addc_data i c = Buffer.add_uchar i.data c let addc_data_strip i c = if is_white c then i.last_white <- true else begin if i.last_white && Buffer.length i.data <> 0 then addc_data i u_space; i.last_white <- false; addc_data i c end let expand_name i (prefix, local) = let external_ prefix = match i.fun_ns prefix with | None -> err i (`Unknown_ns_prefix prefix) | Some uri -> uri in try let uri = Ht.find i.ns prefix in if not (str_empty uri) then (uri, local) else if str_empty prefix then String.empty, local else (external_ prefix), local (* unbound with xmlns:prefix="" *) with Not_found -> external_ prefix, local let find_encoding i = (* Encoding mess. *) let reset uchar i = i.uchar <- uchar; i.col <- 0; nextc i in match i.enc with | None -> (* User doesn't know encoding. *) begin match nextc i; i.c with | 0xFE -> (* UTF-16BE BOM. *) nextc i; if i.c <> 0xFF then err i `Malformed_char_stream; reset uchar_utf16be i; true | 0xFF -> (* UTF-16LE BOM. *) nextc i; if i.c <> 0xFE then err i `Malformed_char_stream; reset uchar_utf16le i; true | 0xEF -> (* UTF-8 BOM. *) nextc i; if i.c <> 0xBB then err i `Malformed_char_stream; nextc i; if i.c <> 0xBF then err i `Malformed_char_stream; reset uchar_utf8 i; true | 0x3C | _ -> (* UTF-8 or other, try declaration. *) i.uchar <- uchar_utf8; false end | Some e -> (* User knows encoding. *) begin match e with | `US_ASCII -> reset uchar_ascii i | `ISO_8859_1 -> reset uchar_iso_8859_1 i | `UTF_8 -> (* Skip BOM if present. *) reset uchar_utf8 i; if i.c = u_bom then (i.col <- 0; nextc i) | `UTF_16 -> (* Which UTF-16 ? look BOM. *) let b0 = nextc i; i.c in let b1 = nextc i; i.c in begin match b0, b1 with | 0xFE, 0xFF -> reset uchar_utf16be i | 0xFF, 0xFE -> reset uchar_utf16le i | _ -> err i `Malformed_char_stream; end | `UTF_16BE -> (* Skip BOM if present. *) reset uchar_utf16be i; if i.c = u_bom then (i.col <- 0; nextc i) | `UTF_16LE -> reset uchar_utf16le i; if i.c = u_bom then (i.col <- 0; nextc i) end; true (* Ignore xml declaration. *) let p_ncname i = (* {NCName} (Namespace 1.1) *) clear_ident i; if not (is_name_start_char i.c) then err_illegal_char i i.c else begin addc_ident i i.c; nextc i; while is_name_char i.c do addc_ident i i.c; nextc i done; Buffer.contents i.ident end let p_qname i = (* {QName} (Namespace 1.1) *) let n = p_ncname i in if i.c <> u_colon then (String.empty, n) else (nextc i; (n, p_ncname i)) let p_charref i = (* {CharRef}, '&' was eaten. *) let c = ref 0 in clear_ident i; nextc i; if i.c = u_scolon then err i (`Illegal_char_ref String.empty) else begin try if i.c = u_x then begin addc_ident i i.c; nextc i; while (i.c <> u_scolon) do addc_ident i i.c; if not (is_hex_digit i.c) then raise Exit else c := !c * 16 + (if i.c <= u_9 then i.c - 48 else if i.c <= u_F then i.c - 55 else i.c - 87); nextc i; done end else while (i.c <> u_scolon) do addc_ident i i.c; if not (is_digit i.c) then raise Exit else c := !c * 10 + (i.c - 48); nextc i done with Exit -> c := -1; while i.c <> u_scolon do addc_ident i i.c; nextc i done end; nextc i; if is_char !c then (clear_ident i; addc_ident i !c; Buffer.contents i.ident) else err i (`Illegal_char_ref (Buffer.contents i.ident)) let predefined_entities = let h = Ht.create 5 in let e k v = Ht.add h (str k) (str v) in e "lt" "<"; e "gt" ">"; e "amp" "&"; e "apos" "'"; e "quot" "\""; h let p_entity_ref i = (* {EntityRef}, '&' was eaten. *) let ent = p_ncname i in accept i u_scolon; try Ht.find predefined_entities ent with Not_found -> match i.fun_entity ent with | Some s -> s | None -> err i (`Unknown_entity_ref ent) let p_reference i = (* {Reference} *) nextc i; if i.c = u_sharp then p_charref i else p_entity_ref i let p_attr_value i = (* {S}? {AttValue} *) skip_white i; let delim = if i.c = u_quot || i.c = u_apos then i.c else err_expected_chars i [ u_quot; u_apos] in nextc i; skip_white i; clear_data i; i.last_white <- true; while (i.c <> delim) do if i.c = u_lt then err_illegal_char i u_lt else if i.c = u_amp then String.iter (addc_data_strip i) (p_reference i) else (addc_data_strip i i.c; nextc i) done; nextc i; Buffer.contents i.data let p_attributes i = (* ({S} {Attribute})* {S}? *) let rec aux i pre_acc acc = if not (is_white i.c) then pre_acc, acc else begin skip_white i; if i.c = u_slash || i.c = u_gt then pre_acc, acc else begin let (prefix, local) as n = p_qname i in let v = skip_white i; accept i u_eq; p_attr_value i in let att = n, v in if str_empty prefix && str_eq local n_xmlns then begin (* xmlns *) Ht.add i.ns String.empty v; aux i (String.empty :: pre_acc) (att :: acc) end else if str_eq prefix n_xmlns then begin (* xmlns:local *) Ht.add i.ns local v; aux i (local :: pre_acc) (att :: acc) end else if str_eq prefix n_xml && str_eq local n_space then begin (* xml:space *) if str_eq v v_preserve then i.stripping <- false else if str_eq v v_default then i.stripping <- i.strip else (); aux i pre_acc (att :: acc) end else aux i pre_acc (att :: acc) end end in aux i [] [] (* Returns a list of bound prefixes and attributes *) let p_limit i = (* Parses a markup limit *) i.limit <- if i.c = u_eoi then Eoi else if i.c <> u_lt then Text else begin nextc i; if i.c = u_qmark then (nextc i; Pi (p_qname i)) else if i.c = u_slash then begin nextc i; let n = p_qname i in skip_white i; Etag n end else if i.c = u_emark then begin nextc i; if i.c = u_minus then (nextc i; accept i u_minus; Comment) else if i.c = u_D then Dtd else if i.c = u_lbrack then begin nextc i; clear_ident i; for k = 1 to 6 do (addc_ident i i.c; nextc i) done; let cdata = Buffer.contents i.ident in if str_eq cdata s_cdata then Cdata else err_expected_seqs i [ s_cdata ] cdata end else err i (`Illegal_char_seq (cat (str "<!") (str_of_char i.c))) end else Stag (p_qname i) end let rec skip_comment i = (* {Comment}, '<!--' was eaten *) while (i.c <> u_minus) do nextc i done; nextc i; if i.c <> u_minus then skip_comment i else begin nextc i; if i.c <> u_gt then err_expected_chars i [ u_gt ]; nextc_eof i end let rec skip_pi i = (* {PI}, '<?' qname was eaten *) while (i.c <> u_qmark) do nextc i done; nextc i; if i.c <> u_gt then skip_pi i else nextc_eof i let rec skip_misc i ~allow_xmlpi = match i.limit with (* {Misc}* *) | Pi (p,l) when (str_empty p && str_eq n_xml (String.lowercase l)) -> if allow_xmlpi then () else err i (`Illegal_char_seq l) | Pi _ -> skip_pi i; p_limit i; skip_misc i ~allow_xmlpi | Comment -> skip_comment i; p_limit i; skip_misc i ~allow_xmlpi | Text when is_white i.c -> skip_white_eof i; p_limit i; skip_misc i ~allow_xmlpi | _ -> () let p_chardata addc i = (* {CharData}* ({Reference}{Chardata})* *) while (i.c <> u_lt) do if i.c = u_amp then String.iter (addc i) (p_reference i) else if i.c = u_rbrack then begin addc i i.c; nextc i; if i.c = u_rbrack then begin addc i i.c; nextc i; (* detects ']'*']]>' *) while (i.c = u_rbrack) do addc i i.c; nextc i done; if i.c = u_gt then err i (`Illegal_char_seq (str "]]>")); end end else (addc i i.c; nextc i) done let rec p_cdata addc i = (* {CData} {CDEnd} *) try while (true) do if i.c = u_rbrack then begin nextc i; while i.c = u_rbrack do nextc i; if i.c = u_gt then (nextc i; raise Exit); addc i u_rbrack done; addc i u_rbrack; end; addc i i.c; nextc i; done with Exit -> () let p_xml_decl i ~ignore_enc ~ignore_utf16 = (* {XMLDecl}? *) let yes_no = [v_yes; v_no] in let p_val i = skip_white i; accept i u_eq; skip_white i; p_attr_value i in let p_val_exp i exp = let v = p_val i in if not (List.exists (str_eq v) exp) then err_expected_seqs i exp v in match i.limit with | Pi (p, l) when (str_empty p && str_eq l n_xml) -> let v = skip_white i; p_ncname i in if not (str_eq v n_version) then err_expected_seqs i [ n_version ] v; p_val_exp i [v_version_1_0; v_version_1_1]; skip_white i; if i.c <> u_qmark then begin let n = p_ncname i in if str_eq n n_encoding then begin let enc = String.lowercase (p_val i) in if not ignore_enc then begin if str_eq enc v_utf_8 then i.uchar <- uchar_utf8 else if str_eq enc v_utf_16be then i.uchar <- uchar_utf16be else if str_eq enc v_utf_16le then i.uchar <- uchar_utf16le else if str_eq enc v_iso_8859_1 then i.uchar <- uchar_iso_8859_1 else if str_eq enc v_us_ascii then i.uchar <- uchar_ascii else if str_eq enc v_ascii then i.uchar <- uchar_ascii else if str_eq enc v_utf_16 then if ignore_utf16 then () else (err i `Malformed_char_stream) (* A BOM should have been found. *) else err i (`Unknown_encoding enc) end; skip_white i; if i.c <> u_qmark then begin let n = p_ncname i in if str_eq n n_standalone then p_val_exp i yes_no else err_expected_seqs i [ n_standalone; str "?>" ] n end end else if str_eq n n_standalone then p_val_exp i yes_no else err_expected_seqs i [ n_encoding; n_standalone; str "?>" ] n end; skip_white i; accept i u_qmark; accept i u_gt; p_limit i | _ -> () let p_dtd_signal i =(* {Misc}* {doctypedecl} {Misc}* *) skip_misc i ~allow_xmlpi:false; if i.limit <> Dtd then `Dtd None else begin let buf = addc_data i in let nest = ref 1 in clear_data i; buf u_lt; buf u_emark; (* add eaten "<!" *) while (!nest > 0) do if i.c = u_lt then begin nextc i; if i.c <> u_emark then (buf u_lt; incr nest) else begin nextc i; if i.c <> u_minus then (* Carefull with comments ! *) (buf u_lt; buf u_emark; incr nest) else begin nextc i; if i.c <> u_minus then (buf u_lt; buf u_emark; buf u_minus; incr nest) else (nextc i; skip_comment i) end end end else if i.c = u_quot || i.c = u_apos then begin let c = i.c in buf c; nextc i; while (i.c <> c) do (buf i.c; nextc i) done; buf c; nextc i end else if i.c = u_gt then (buf u_gt; nextc i; decr nest) else (buf i.c; nextc i) done; let dtd = Buffer.contents i.data in p_limit i; skip_misc i ~allow_xmlpi:false; `Dtd (Some dtd); end let p_data i = let rec bufferize addc i = match i.limit with | Text -> p_chardata addc i; p_limit i; bufferize addc i | Cdata -> p_cdata addc i; p_limit i; bufferize addc i | (Stag _ | Etag _) -> () | Pi _ -> skip_pi i; p_limit i; bufferize addc i | Comment -> skip_comment i; p_limit i; bufferize addc i | Dtd -> err i (`Illegal_char_seq (str "<!D")) | Eoi -> err i `Unexpected_eoi in clear_data i; i.last_white <- true; bufferize (if i.stripping then addc_data_strip else addc_data) i; let d = Buffer.contents i.data in d let p_el_start_signal i n = let expand_att (((prefix, local) as n, v) as att) = if not (str_eq prefix String.empty) then expand_name i n, v else if str_eq local n_xmlns then (ns_xmlns, n_xmlns), v else att (* default namespaces do not influence attributes. *) in let strip = i.stripping in (* save it here, p_attributes may change it. *) let prefixes, atts = p_attributes i in i.scopes <- (n, prefixes, strip) :: i.scopes; `El_start ((expand_name i n), List.rev_map expand_att atts) let p_el_end_signal i n = match i.scopes with | (n', prefixes, strip) :: scopes -> if i.c <> u_gt then err_expected_chars i [ u_gt ]; if not (str_eq n n') then err_expected_seqs i [name_str n'] (name_str n); i.scopes <- scopes; i.stripping <- strip; List.iter (Ht.remove i.ns) prefixes; if scopes = [] then i.c <- u_end_doc else (nextc i; p_limit i); `El_end | _ -> assert false let p_signal i = if i.scopes = [] then match i.limit with | Stag n -> p_el_start_signal i n | _ -> err i `Expected_root_element else let rec find i = match i.limit with | Stag n -> p_el_start_signal i n | Etag n -> p_el_end_signal i n | Text | Cdata -> let d = p_data i in if str_empty d then find i else `Data d | Pi _ -> skip_pi i; p_limit i; find i | Comment -> skip_comment i; p_limit i; find i | Dtd -> err i (`Illegal_char_seq (str "<!D")) | Eoi -> err i `Unexpected_eoi in begin match i.peek with | `El_start (n, _) -> (* finish to input start el. *) skip_white i; if i.c = u_gt then (accept i u_gt; p_limit i) else if i.c = u_slash then begin let tag = match i.scopes with | (tag, _, _) :: _ -> tag | _ -> assert false in (nextc i; i.limit <- Etag tag) end else err_expected_chars i [ u_slash; u_gt ] | _ -> () end; find i let eoi i = try if i.c = u_eoi then true else if i.c <> u_start_doc then false else (* In a document. *) if i.peek <> `El_end then (* Start of document sequence. *) begin let ignore_enc = find_encoding i in p_limit i; p_xml_decl i ~ignore_enc ~ignore_utf16:false; i.peek <- p_dtd_signal i; false end else (* Subsequent documents. *) begin nextc_eof i; p_limit i; if i.c = u_eoi then true else begin skip_misc i ~allow_xmlpi:true; if i.c = u_eoi then true else begin p_xml_decl i ~ignore_enc:false ~ignore_utf16:true; i.peek <- p_dtd_signal i; false end end end with | Buffer.Full -> err i `Max_buffer_size | Malformed -> err i `Malformed_char_stream | End_of_file -> err i `Unexpected_eoi let peek i = if eoi i then err i `Unexpected_eoi else i.peek let input i = try if i.c = u_end_doc then (i.c <- u_start_doc; i.peek) else let s = peek i in i.peek <- p_signal i; s with | Buffer.Full -> err i `Max_buffer_size | Malformed -> err i `Malformed_char_stream | End_of_file -> err i `Unexpected_eoi let input_tree ~el ~data i = match input i with | `Data d -> data d | `El_start tag -> let rec aux i tags context = match input i with | `El_start tag -> aux i (tag :: tags) ([] :: context) | `El_end -> begin match tags, context with | tag :: tags', childs :: context' -> let el = el tag (List.rev childs) in begin match context' with | parent :: context'' -> aux i tags' ((el :: parent) :: context'') | [] -> el end | _ -> assert false end | `Data d -> begin match context with | childs :: context' -> aux i tags (((data d) :: childs) :: context') | [] -> assert false end | `Dtd _ -> assert false in aux i (tag :: []) ([] :: []) | _ -> invalid_arg err_input_tree let input_doc_tree ~el ~data i = match input i with | `Dtd d -> d, input_tree ~el ~data i | _ -> invalid_arg err_input_doc_tree let pos i = i.line, i.col (* Output *) type 'a frag = [ `El of tag * 'a list | `Data of string ] type dest = [ | `Channel of out_channel | `Buffer of std_buffer | `Fun of (int -> unit) ] type output = { decl : bool; (* True if the XML declaration should be output. *) nl : bool; (* True if a newline is output at the end. *) indent : int option; (* Optional indentation. *) fun_prefix : string -> string option; (* Prefix callback. *) prefixes : string Ht.t; (* uri -> prefix bindings. *) outs : std_string -> int -> int -> unit; (* String output. *) outc : char -> unit; (* character output. *) mutable last_el_start : bool; (* True if last signal was `El_start *) mutable scopes : (name * (string list)) list; (* Qualified el. name and bound uris. *) mutable depth : int; } (* Scope depth. *) let err_prefix uri = "unbound namespace (" ^ uri ^ ")" let err_dtd = "dtd signal not allowed here" let err_el_start = "start signal not allowed here" let err_el_end = "end signal without matching start signal" let err_data = "data signal not allowed here" let make_output ?(decl = true) ?(nl = false) ?(indent = None) ?(ns_prefix = fun _ ->None) d = let outs, outc = match d with | `Channel c -> (output_substring c), (output_char c) | `Buffer b -> (Std_buffer.add_substring b), (Std_buffer.add_char b) | `Fun f -> let os s p l = for i = p to p + l - 1 do f (Char.code (Std_string.get s i)) done in let oc c = f (Char.code c) in os, oc in let prefixes = let h = Ht.create 10 in Ht.add h String.empty String.empty; Ht.add h ns_xml n_xml; Ht.add h ns_xmlns n_xmlns; h in { decl = decl; outs = outs; outc = outc; nl = nl; indent = indent; last_el_start = false; prefixes = prefixes; scopes = []; depth = -1; fun_prefix = ns_prefix; } let output_depth o = o.depth let outs o s = o.outs s 0 (Std_string.length s) let str_utf_8 s = String.to_utf_8 (fun _ s -> s) "" s let out_utf_8 o s = ignore (String.to_utf_8 (fun o s -> outs o s; o) o s) let prefix_name o (ns, local) = try if str_eq ns ns_xmlns && str_eq local n_xmlns then (String.empty, n_xmlns) else (Ht.find o.prefixes ns, local) with Not_found -> match o.fun_prefix ns with | None -> invalid_arg (err_prefix (str_utf_8 ns)) | Some prefix -> prefix, local let bind_prefixes o atts = let add acc ((ns, local), uri) = if not (str_eq ns ns_xmlns) then acc else begin let prefix = if str_eq local n_xmlns then String.empty else local in Ht.add o.prefixes uri prefix; uri :: acc end in List.fold_left add [] atts let out_data o s = let out () s = let len = Std_string.length s in let start = ref 0 in let last = ref 0 in let escape e = o.outs s !start (!last - !start); outs o e; incr last; start := !last in while (!last < len) do match Std_string.get s !last with | '<' -> escape "<" (* Escape markup delimiters. *) | '>' -> escape ">" | '&' -> escape "&" (* | '\'' -> escape "'" *) (* Not needed we use \x22 for attributes. *) | '\x22' -> escape """ | '\n' | '\t' | '\r' -> incr last | c when c < ' ' -> escape "\xEF\xBF\xBD" (* illegal, subst. by U+FFFD *) | _ -> incr last done; o.outs s !start (!last - !start) in String.to_utf_8 out () s let out_qname o (p, l) = if not (str_empty p) then (out_utf_8 o p; o.outc ':'); out_utf_8 o l let out_attribute o (n, v) = o.outc ' '; out_qname o (prefix_name o n); outs o "=\x22"; out_data o v; o.outc '\x22' let output o s = let indent o = match o.indent with | None -> () | Some c -> for i = 1 to (o.depth * c) do o.outc ' ' done in let unindent o = match o.indent with None -> () | Some _ -> o.outc '\n' in if o.depth = -1 then begin match s with | `Dtd d -> if o.decl then outs o "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"; begin match d with | Some dtd -> out_utf_8 o dtd; o.outc '\n' | None -> () end; o.depth <- 0 | `Data _ -> invalid_arg err_data | `El_start _ -> invalid_arg err_el_start | `El_end -> invalid_arg err_el_end end else begin match s with | `El_start (n, atts) -> if o.last_el_start then (outs o ">"; unindent o); indent o; let uris = bind_prefixes o atts in let qn = prefix_name o n in o.outc '<'; out_qname o qn; List.iter (out_attribute o) atts; o.scopes <- (qn, uris) :: o.scopes; o.depth <- o.depth + 1; o.last_el_start <- true | `El_end -> begin match o.scopes with | (n, uris) :: scopes' -> o.depth <- o.depth - 1; if o.last_el_start then outs o "/>" else begin indent o; outs o "</"; out_qname o n; o.outc '>'; end; o.scopes <- scopes'; List.iter (Ht.remove o.prefixes) uris; o.last_el_start <- false; if o.depth = 0 then (if o.nl then o.outc '\n'; o.depth <- -1;) else unindent o | [] -> invalid_arg err_el_end end | `Data d -> if o.last_el_start then (outs o ">"; unindent o); indent o; out_data o d; unindent o; o.last_el_start <- false | `Dtd _ -> failwith err_dtd end let output_tree frag o v = let rec aux o = function | (v :: rest) :: context -> begin match frag v with | `El (tag, childs) -> output o (`El_start tag); aux o (childs :: rest :: context) | (`Data d) as signal -> output o signal; aux o (rest :: context) end | [] :: [] -> () | [] :: context -> output o `El_end; aux o context | [] -> assert false in aux o ([v] :: []) let output_doc_tree frag o (dtd, v) = output o (`Dtd dtd); output_tree frag o v end (* Default streaming XML IO *) module String = struct type t = string let empty = "" let length = String.length let append = ( ^ ) let lowercase = String.lowercase_ascii let iter f s = let len = Std_string.length s in let pos = ref ~-1 in let i () = incr pos; if !pos = len then raise Exit else Char.code (Std_string.get s !pos) in try while true do f (uchar_utf8 i) done with Exit -> () let of_string s = s let to_utf_8 f v x = f v x let compare = String.compare end module Buffer = struct type string = String.t type t = Buffer.t exception Full let create = Buffer.create let add_uchar b u = try (* UTF-8 encodes an uchar in the buffer, assumes u is valid code point. *) let buf c = Buffer.add_char b (Char.chr c) in if u <= 0x007F then (buf u) else if u <= 0x07FF then (buf (0xC0 lor (u lsr 6)); buf (0x80 lor (u land 0x3F))) else if u <= 0xFFFF then (buf (0xE0 lor (u lsr 12)); buf (0x80 lor ((u lsr 6) land 0x3F)); buf (0x80 lor (u land 0x3F))) else (buf (0xF0 lor (u lsr 18)); buf (0x80 lor ((u lsr 12) land 0x3F)); buf (0x80 lor ((u lsr 6) land 0x3F)); buf (0x80 lor (u land 0x3F))) with Failure _ -> raise Full let clear b = Buffer.clear b let contents = Buffer.contents let length = Buffer.length end include Make(String) (Buffer) (* Pretty printers *) let pp = Format.fprintf let rec pp_list ?(pp_sep = Format.pp_print_cut) pp_v ppf = function | [] -> () | v :: vs -> pp_v ppf v; if vs <> [] then (pp_sep ppf (); pp_list ~pp_sep pp_v ppf vs) let pp_name ppf (p, l) = if p <> "" then pp ppf "%s:%s" p l else pp ppf "%s" l let pp_attribute ppf (n, v) = pp ppf "@[<1>(%a,@,%S)@]" pp_name n v let pp_tag ppf (name, atts) = let pp_sep ppf () = pp ppf ";@ " in pp ppf "@[<1>(%a,@,@[<1>[%a]@])@]" pp_name name (pp_list ~pp_sep pp_attribute) atts let pp_dtd ppf = function | None -> pp ppf "None" | Some dtd -> pp ppf "@[<1>(Some@ %S)@]" dtd let pp_signal ppf = function | `Data s -> pp ppf "@[`Data %S@]" s | `El_end -> pp ppf "`El_end" | `El_start tag -> pp ppf "@[`El_start %a@]" pp_tag tag | `Dtd dtd -> pp ppf "@[`Dtd %a@]" pp_dtd dtd (*---------------------------------------------------------------------------- Copyright (c) 2007 Daniel C. Bünzli Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ---------------------------------------------------------------------------*) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/cpdfimpose.ml����������������������������������������������������������������������������0000664�0001750�0001750�00000031433�14771516640�013620� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������open Pdfutil open Cpdferror (* Imposition *) (* Union two rest dictionaries from the same PDF. *) let combine_pdf_rests pdf a b = let a_entries = match a with | Pdf.Dictionary entries -> entries | _ -> [] in let b_entries = match b with | Pdf.Dictionary entries -> entries | _ -> [] in let keys_to_combine = ["/Annots"] in let combine_entries key = let a_entries = match Pdf.lookup_direct pdf key a with | Some (Pdf.Array d) -> d | _ -> [] in let b_entries = match Pdf.lookup_direct pdf key b with | Some (Pdf.Array d) -> d | _ -> [] in if a_entries = [] && b_entries = [] then None else Some (key, Pdf.Array (a_entries @ b_entries)) in let unknown_keys_a = lose (fun (k, _) -> mem k keys_to_combine) a_entries in let unknown_keys_b = lose (fun (k, _) -> mem k keys_to_combine) b_entries in let combined_known_entries = option_map combine_entries keys_to_combine in fold_left (fun dict (k, v) -> Pdf.add_dict_entry dict k v) (Pdf.Dictionary []) (unknown_keys_a @ unknown_keys_b @ combined_known_entries) (* Calculate the transformation matrices for a single imposed output page. *) (* make margins by scaling for a fitted impose. *) let make_margin pdf output_mediabox margin tr = if margin = 0. then tr else let width, height = match Pdf.parse_rectangle pdf output_mediabox with xmin, ymin, xmax, ymax -> xmax -. xmin, ymax -. ymin in if margin > width /. 2. || margin > height /. 2. then error "margin would fill whole page!" else let hfactor = (width -. margin -. margin) /. width in let vfactor = (height -. margin -. margin) /. height in let factor = fmin hfactor vfactor in let scale = Pdftransform.matrix_of_op (Pdftransform.Scale ((0., 0.), factor, factor)) in let shift = Pdftransform.matrix_of_op (Pdftransform.Translate ((width -. width *. factor) /. 2., (height -. height *. factor) /. 2.)) in (Pdftransform.matrix_compose shift (Pdftransform.matrix_compose scale tr)) (* FIXME fixup -center for next release. For now it has been disabled. *) let impose_transforms pdf fit fx fy columns rtl btt center margin mediabox output_mediabox fit_extra_hspace fit_extra_vspace len = let width, height = match Pdf.parse_rectangle pdf mediabox with xmin, ymin, xmax, ymax -> xmax -. xmin, ymax -. ymin in let trs = ref [] in let len = ref len in let cent_extra_x = ref 0. in let cent_extra_y = ref 0. in let addtr x y row col px py = let cex, cey = (if rtl then ~-.(!cent_extra_x) else !cent_extra_x), (if btt then ~-.(!cent_extra_y) else !cent_extra_y) in let spacecol = if rtl then x - col - 1 else col in let total_fit_extra_hspace = fit_extra_hspace *. (float_of_int spacecol +. 1.) in let total_fit_extra_vspace = fit_extra_vspace *. (float_of_int row +. 1.) in (*Printf.printf "row = %i, py = %f, ey = %f, fit_extra_vspace = %f, total_fit_extra_vspace = %f\n" row py cey fit_extra_vspace total_fit_extra_vspace;*) trs := Pdftransform.matrix_of_transform [Pdftransform.Translate (px +. cex +. total_fit_extra_hspace, py +. cey +. total_fit_extra_vspace)] ::!trs in let x = int_of_float fx in let y = int_of_float fy in let final_full_cols = !len mod x in let final_full_rows = !len mod y in let order row col = ((if btt then y - row - 1 else row), (if rtl then x - col - 1 else col)) in if columns then for col = 0 to x - 1 do if center && !len < y then if !cent_extra_y = 0. then cent_extra_y := ~-.(height *. float_of_int (y - !len)) /. 2.; for row = y - 1 downto 0 do let original_row = row in let row, col = order row col in let adjusted_row = let final_empty_rows = y - final_full_rows in if center && !len <= final_full_rows then original_row + (y - 1 - 1 - (final_empty_rows / 2)) else original_row in if !len > 0 then addtr x y adjusted_row col (width *. float_of_int col) (height *. float_of_int row); len := !len - 1 done done else for row = y - 1 downto 0 do if center && !len < x then if !cent_extra_x = 0. then cent_extra_x := (width *. float_of_int (x - !len)) /. 2.; for col = 0 to x - 1 do let original_col = col in let row, col = order row col in let adjusted_col = let final_empty_cols = x - final_full_cols in if center && !len <= final_full_cols then original_col + (x - 1 - 1 - (final_empty_cols / 2)) else original_col in if !len > 0 then addtr x y row adjusted_col (width *. float_of_int col) (height *. float_of_int row); len := !len - 1 done done; map (if fit then make_margin pdf output_mediabox margin else Fun.id) (rev !trs) let impose_pages fit x y columns rtl btt center margin output_mediabox fast fit_extra_hspace fit_extra_vspace pdf = function | [] -> assert false | (h::_) as pages -> let transforms = impose_transforms pdf fit x y columns rtl btt center margin h.Pdfpage.mediabox output_mediabox fit_extra_hspace fit_extra_vspace (length pages) in (* Change the pattern matrices before combining resources *) let pages, h = let r = map2 (fun p t -> Cpdfpage.change_pattern_matrices_page pdf t p) pages transforms in (r, List.hd r) in let resources' = pair_reduce (Pdfpage.combine_pdf_resources pdf) (map (fun p -> p.Pdfpage.resources) pages) in let rest' = pair_reduce (combine_pdf_rests pdf) (map (fun p -> p.Pdfpage.rest) pages) in let content' = let transform_stream transform contents = (* If fast, no mismatched q/Q protection and no parsing of operators. *) if fast then [Pdfops.stream_of_ops [Pdfops.Op_q; Pdfops.Op_cm transform]] @ contents @ [Pdfops.stream_of_ops [Pdfops.Op_Q]] else (* If slow, use protect from Pdfpage. *) let ours = Pdfops.parse_operators pdf resources' contents in let ops = Pdfpage.protect ours @ ours in [Pdfops.stream_of_ops ([Pdfops.Op_q] @ [Pdfops.Op_cm transform] @ ops @ [Pdfops.Op_Q])] in flatten (map2 (fun p t -> Pdfannot.transform_annotations pdf t p.Pdfpage.rest; transform_stream t p.Pdfpage.content) pages transforms) in {Pdfpage.mediabox = output_mediabox; Pdfpage.rotate = h.Pdfpage.rotate; Pdfpage.content = content'; Pdfpage.resources = resources'; Pdfpage.rest = rest'} (* For fit, we scale contents, move to middle and retain page size. For xy, we expand mediabox and move contents to middle. This function also does the hard boxing. *) let make_space fit ~fast spacing pdf = let endpage = Pdfpage.endpage pdf in let all = ilist 1 endpage in let pdf = Cpdfpage.hard_box pdf all "/MediaBox" false fast in if spacing = 0. then pdf else let margin = spacing /. 2. in let firstpage = hd (Pdfpage.pages_of_pagetree pdf) in let width, height = match Pdf.parse_rectangle pdf firstpage.Pdfpage.mediabox with xmin, ymin, xmax, ymax -> (xmax -. xmin, ymax -. ymin) in if fit then (Cpdfpage.shift_pdf ~fast (many (margin, margin) endpage) (Cpdfpage.scale_contents ~fast (Cpdfposition.BottomLeft (0., 0.)) ((width -. spacing) /. width) pdf all) all) else (Cpdfpage.set_mediabox (many (0., 0., width +. spacing, height +. spacing) endpage) (Cpdfpage.shift_pdf ~fast (many (margin, margin) endpage) pdf all) all) (* We add the border as a thick unfilled rectangle just inside the page edge, only if its linewidth is > 0 since, for us, 0 means none, not single-pixel like in PDF. *) let add_border linewidth ~fast pdf = if linewidth = 0. then pdf else let firstpage = hd (Pdfpage.pages_of_pagetree pdf) in let _, _, w, h = Pdf.parse_rectangle pdf firstpage.Pdfpage.mediabox in Cpdfaddtext.addrectangle fast (w -. linewidth, h -. linewidth) (RGB (0., 0., 0.)) true linewidth 1. (Cpdfposition.BottomLeft (linewidth /. 2., linewidth /. 2.)) false false (ilist 1 (Pdfpage.endpage pdf)) pdf let impose ~process_struct_tree ~x ~y ~fit ~columns ~rtl ~btt ~center ~margin ~spacing ~linewidth ~fast pdf = let pdf = if process_struct_tree then Cpdfpage.mark_all_as_artifact pdf else pdf in let endpage = Pdfpage.endpage pdf in let pagenums = ilist 1 endpage in let pdf = Cpdfpage.copy_box "/CropBox" "/MediaBox" true pdf pagenums in let pdf = Cpdfpage.remove_cropping_pdf pdf pagenums in let pdf = Cpdfpage.upright pagenums pdf in let pdf = add_border linewidth ~fast pdf in let pdf = make_space fit ~fast spacing pdf in let firstpage = hd (Pdfpage.pages_of_pagetree pdf) in let _, _, w, h = Pdf.parse_rectangle pdf firstpage.Pdfpage.mediabox in let ix = int_of_float x in let iy = int_of_float y in let n, ix, iy, fit_extra_hspace, fit_extra_vspace = if fit then (* +. 0.001 ensures a page always fits on itself, or on another page of same height or width. *) let across = int_of_float (floor (x /. w +. 0.001)) in let down = int_of_float (floor (y /. h +. 0.001)) in if across < 1 || down < 1 then error "Not even a single page would fit." else let excess_hspace = x -. float_of_int across *. w in let excess_vspace = y -. float_of_int down *. h in (*Printf.printf "across = %i, down =%i, excess_hspace = %f, excess_hspace = %f\n" across down excess_hspace excess_vspace;*) (across * down, across, down, excess_hspace /. (float_of_int across +. 1.), excess_vspace /. (float_of_int down +. 1.)) else if ix = 0 && iy = 0 then error "impose-xy: both dimensions cannot be zero" else if ix = 0 then (endpage, endpage, 1, 0., 0.) else if iy = 0 then (endpage, 1, endpage, 0., 0.) else (ix * iy, ix, iy, 0., 0.) in let mediabox' = if fit then Pdf.Array [Pdf.Real 0.; Pdf.Real 0.; Pdf.Real x; Pdf.Real y] else let m2 = margin *. 2. in if x = 0.0 then Pdf.Array [Pdf.Real 0.; Pdf.Real 0.; Pdf.Real (w *. float_of_int endpage +. m2); Pdf.Real (h +. m2)] else if y = 0.0 then Pdf.Array [Pdf.Real 0.; Pdf.Real 0.; Pdf.Real (w +. m2); Pdf.Real (h *. float_of_int endpage +. m2)] else Pdf.Array [Pdf.Real 0.; Pdf.Real 0.; Pdf.Real (w *. x +. m2); Pdf.Real (h *. y +. m2)] in let pages = Pdfpage.pages_of_pagetree pdf in let pagesets = splitinto n pages in let renumbered = map (Pdfpage.renumber_pages pdf) pagesets in let pages = map (impose_pages fit (float_of_int ix) (float_of_int iy) columns rtl btt center margin mediabox' fast fit_extra_hspace fit_extra_vspace pdf) renumbered in let changes = map (fun x -> (x, (x + (n - 1)) / n)) pagenums in let pdf = Pdfpage.change_pages ~changes true pdf pages in if fit then pdf else Cpdfpage.shift_pdf ~fast (many (margin, margin) (length pages)) pdf (ilist 1 (Pdfpage.endpage pdf)) (* Legacy -twoup-stack. Impose 2x1 on a page twice the size then rotate. *) let twoup_stack ~process_struct_tree fast pdf = let pdf = impose ~process_struct_tree ~x:2. ~y:1. ~fit:false ~columns:false ~rtl:false ~btt:false ~center:false ~margin:0. ~spacing:0. ~linewidth:0. ~fast pdf in let all = ilist 1 (Pdfpage.endpage pdf) in Cpdfpage.upright ~fast all (Cpdfpage.rotate_pdf ~-90 pdf all) (* Legacy -two-up. Rotate the pages and shrink them so as to fit 2x1 on a page the same size. *) let twoup ~process_struct_tree fast pdf = let firstpage = hd (Pdfpage.pages_of_pagetree pdf) in let width, height = match Pdf.parse_rectangle pdf firstpage.Pdfpage.mediabox with xmin, ymin, xmax, ymax -> xmax -. xmin, ymax -. ymin in let width_exceeds_height = width > height in let sc = if width_exceeds_height then fmin (height /. width) ((width /. 2.) /. height) else fmin (width /. height) ((height /. 2.) /. width) in let endpage = Pdfpage.endpage pdf in let all = ilist 1 endpage in let pdf = Cpdfpage.scale_pdf ~fast (many (sc, sc) endpage) pdf all in let pdf = impose ~process_struct_tree ~x:2. ~y:1. ~fit:false ~columns:false ~rtl:false ~btt:false ~center:true ~margin:0. ~spacing:0. ~linewidth:0. ~fast pdf in let endpage = Pdfpage.endpage pdf in let all = ilist 1 endpage in let pdf = Cpdfpage.upright all (Cpdfpage.rotate_pdf ~-90 pdf all) in Cpdfpage.scale_to_fit_pdf ~fast Cpdfposition.Diagonal 1. (many (width, height) endpage) () pdf all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/cpdfcomposition.mli����������������������������������������������������������������������0000664�0001750�0001750�00000000545�14771516640�015040� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(** Show composition of a PDF *) (** [show_composition filesize json pdf] prints the composition of a document to Standard Output. *) val show_composition : int -> bool -> Pdf.t -> unit (** [show_composition_json_blob filesize json pdf] returns the composition of a document in JSON format. *) val show_composition_json_blob : int -> Pdf.t -> Pdfio.bytes �����������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/cpdfpresent.mli��������������������������������������������������������������������������0000664�0001750�0001750�00000000446�14771516640�014155� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(** Presentations *) (** [presentation range t d horizontal inward direction effect_duration pdf] adds a presentation on the pages in [range]. See cpdfmanual.pdf for details. *) val presentation : int list -> string option -> float option -> bool -> bool -> int -> float -> Pdf.t -> Pdf.t ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cpdf-2.8.1/cpdfcomposition.ml�����������������������������������������������������������������������0000664�0001750�0001750�00000015733�14771516640�014674� 0����������������������������������������������������������������������������������������������������ustar �john����������������������������john�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������open Pdfutil let find_composition_structure_info pdf marked = match Pdf.lookup_obj pdf pdf.Pdf.root with | Pdf.Dictionary d -> begin match lookup "/StructTreeRoot" d with | Some x -> let l = ref [] in let objs = Pdf.objects_referenced ["/Pg"] [] pdf x in iter (fun i -> match Hashtbl.find marked i with | () -> () | exception Not_found -> l := i::!l; Hashtbl.add marked i ()) objs; !l | _ -> [] end | _ -> [] let find_composition_piece_info pdf marked = let l = ref [] in Pdf.objiter (fun i obj -> match Pdf.lookup_direct pdf "/PieceInfo" obj with | Some x -> let objs = Pdf.objects_referenced [] [] pdf x in iter (fun i -> match Hashtbl.find marked i with | () -> () | exception Not_found -> l := i::!l; Hashtbl.add marked i ()) objs | None -> ()) pdf; !l let find_composition_images pdf i obj marked = match Hashtbl.find marked i with () -> [] | exception Not_found -> match Pdf.lookup_direct pdf "/Subtype" obj with | Some (Pdf.Name "/Image") -> Hashtbl.add marked i (); [i] | _ -> [] (* If it has /Font, find all objects referenced from it, and add any not already marked to the count *) let find_composition_fonts pdf i obj marked = match Hashtbl.find marked i with () -> [] | exception Not_found -> let l = ref [] in match Pdf.lookup_direct pdf "/Type" obj with | Some (Pdf.Name "/Font") -> iter (fun i -> (*Printf.printf "Object %i\n%s\n" i (Pdfwrite.string_of_pdf (Pdf.lookup_obj pdf i));*) match Hashtbl.find marked i with | () -> () | exception Not_found -> l := i::!l; Hashtbl.add marked i ()) (Pdf.objects_referenced [] [] pdf (Pdf.Indirect i)); !l | _ -> [] let find_composition_content_streams pdf i obj marked = match Hashtbl.find marked i with () -> [] | exception Not_found -> match Pdf.lookup_direct pdf "/Type" obj with | Some (Pdf.Name "/Page") -> (*Printf.printf "Found a page...%s\n" (Pdfwrite.string_of_pdf (Pdf.direct pdf obj));*) let cs = match obj with Pdf.Dictionary d -> begin match lookup "/Contents" d with | Some (Pdf.Indirect i) -> [i] | Some (Pdf.Array is) -> option_map (function Pdf.Indirect i -> Some i | _ -> None) is | _ -> [] end | _ -> [] in (*Printf.printf "Found %i content streams\n" (length cs);*) let l = ref [] in iter (fun i -> (*Printf.printf "Considering content stream %i\n" i;*) match Hashtbl.find marked i with | () -> () | exception Not_found -> Hashtbl.add marked i (); l := i::!l) cs; !l | _ -> match Pdf.lookup_direct pdf "/Subtype" obj with | Some (Pdf.Name "/Form") -> Hashtbl.add marked i (); [i] | _ -> [] let find_composition pdf = let marked = null_hash () in let images = ref [] in let fonts = ref [] in let content_streams = ref [] in Pdf.objiter (fun i obj -> (*Printf.printf "Looking at object %i\n" i; Printf.printf "Which is %s\n" (Pdfwrite.string_of_pdf (Pdf.lookup_obj pdf i)); Printf.printf "Marked objects at beginning: "; Hashtbl.iter (fun k () -> Printf.printf "%i " k) marked; Printf.printf "\n";*) match Hashtbl.find marked i with _ -> () | exception Not_found -> images := find_composition_images pdf i obj marked @ !images; content_streams := find_composition_content_streams pdf i obj marked @ !content_streams; fonts := find_composition_fonts pdf i obj marked @ !fonts) pdf; let structure_info = find_composition_structure_info pdf marked in let piece_info = find_composition_piece_info pdf marked in (!images, !fonts, !content_streams, structure_info, piece_info) let size pdf i = String.length (Pdfwrite.string_of_pdf_including_data (Pdf.lookup_obj pdf i)) let compressed_size pdf objnums = if objnums = [] then 0 else (* If there were object streams, assume objects were in them, and compressed with FlateDecode *) if Hashtbl.length pdf.Pdf.objects.Pdf.object_stream_ids = 0 then sum (map (size pdf) (setify objnums)) else let b = Buffer.create 262144 in let streams = ref 0 in iter (fun i -> match Pdf.lookup_obj pdf i with | Pdf.Stream _ -> streams += size pdf i | obj -> Buffer.add_string b (Pdfwrite.string_of_pdf_including_data obj)) objnums; !streams + Pdfio.bytes_size (Pdfcodec.encode_flate (Pdfio.bytes_of_string (Buffer.contents b))) (* If no object streams, calculate the size of the xref table. If streams, the xref stream total *) let compressed_xref_table_size pdf = if Hashtbl.length pdf.Pdf.objects.Pdf.object_stream_ids = 0 then 20 * Pdf.objcard pdf else compressed_size pdf (map fst (list_of_hashtbl pdf.Pdf.objects.Pdf.object_stream_ids)) let show_composition_json filesize pdf = let perc x = float_of_int x /. float_of_int filesize *. 100. in let o_images, o_fonts, o_content_streams, o_structure_info, o_piece_info = find_composition pdf in let images, fonts, content_streams, structure_info, attached_files, piece_info, xref_table = compressed_size pdf o_images, compressed_size pdf o_fonts, compressed_size pdf o_content_streams, compressed_size pdf o_structure_info, Cpdfattach.size_attached_files pdf, compressed_size pdf o_piece_info, compressed_xref_table_size pdf in let r = images + fonts + content_streams + structure_info + attached_files + xref_table + piece_info in `List [`List [`String "Images"; `Int images; `Float (perc images)]; `List [`String "Fonts"; `Int fonts; `Float (perc fonts)]; `List [`String "Content streams"; `Int content_streams; `Float (perc content_streams)]; `List [`String "Structure Info"; `Int structure_info; `Float (perc structure_info)]; `List [`String "Attached Files"; `Int attached_files; `Float (perc attached_files)]; `List [`String "XRef Table"; `Int xref_table; `Float (perc xref_table)]; `List [`String "Piece Info"; `Int piece_info; `Float (perc piece_info)]; `List [`String "Unclassified"; `Int (filesize - r); `Float (perc (filesize - r))]] let show_composition_json_blob filesize pdf = Pdfio.bytes_of_string (Cpdfyojson.Safe.pretty_to_string (show_composition_json filesize pdf)) let show_composition filesize json pdf = let module J = Cpdfyojson.Safe in let j = show_composition_json filesize pdf in if json then (flprint (J.pretty_to_string j); flprint "\n") else match j with | `List js -> iter (function | `List [`String a; `Int b; `Float c] -> Printf.printf "%s: %i bytes (%.2f%%)\n" a b c | _ -> ()) js | _ -> () �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������