From 739a5dcbf79d2c9a807db6116b2819d25242e2a2 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Mon, 7 Oct 2013 23:03:55 +0000 Subject: pst-barcode (7oct13) git-svn-id: svn://tug.org/texlive/trunk@31857 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/doc/generic/pst-barcode/Changes | 5 + .../doc/generic/pst-barcode/pst-barcode-doc.pdf | Bin 242193 -> 246009 bytes .../doc/generic/pst-barcode/pst-barcode-doc.tex | 89 +- .../texmf-dist/dvips/pst-barcode/pst-barcode.pro | 23377 ++++++------------- .../texmf-dist/source/generic/pst-barcode/Makefile | 71 - .../tex/generic/pst-barcode/pst-barcode.tex | 8 +- 6 files changed, 6685 insertions(+), 16865 deletions(-) delete mode 100644 Master/texmf-dist/source/generic/pst-barcode/Makefile diff --git a/Master/texmf-dist/doc/generic/pst-barcode/Changes b/Master/texmf-dist/doc/generic/pst-barcode/Changes index 1a5c3f1b20e..67a200b8174 100644 --- a/Master/texmf-dist/doc/generic/pst-barcode/Changes +++ b/Master/texmf-dist/doc/generic/pst-barcode/Changes @@ -1,4 +1,6 @@ ----- pst-barcode.tex +0.11 2013-10-06 - added more options for data matrix +0.10 2012-08-25 - using another code for loading the ps code 0.09 2012-06-25 - using another code for loading the ps code 0.08 2011-03-10 - take care of the function interface of the pro file 0.07 2009-08-12 - take care of the function interface of the pro file @@ -15,6 +17,9 @@ ----- pst-barcode.pro +2013-10-06 - the Data Matrix encoder now supports C40, Text and + ANSI X12 encoding modes as well as the FNC1, PROG, + 05 Macro and 06 Macro prefixes 2012-11-15 - renlinear was modified to avoid a clash with a predefined name in Distiller. 2012-06-26 - The QR Code encoder was modified so that Micro QR Code diff --git a/Master/texmf-dist/doc/generic/pst-barcode/pst-barcode-doc.pdf b/Master/texmf-dist/doc/generic/pst-barcode/pst-barcode-doc.pdf index d422fbbe33e..e4683eac5fc 100644 Binary files a/Master/texmf-dist/doc/generic/pst-barcode/pst-barcode-doc.pdf and b/Master/texmf-dist/doc/generic/pst-barcode/pst-barcode-doc.pdf differ diff --git a/Master/texmf-dist/doc/generic/pst-barcode/pst-barcode-doc.tex b/Master/texmf-dist/doc/generic/pst-barcode/pst-barcode-doc.tex index 2fe0037cea3..cdbaa6e96e9 100644 --- a/Master/texmf-dist/doc/generic/pst-barcode/pst-barcode-doc.tex +++ b/Master/texmf-dist/doc/generic/pst-barcode/pst-barcode-doc.tex @@ -109,45 +109,49 @@ or the \Lcs{makebox} macro. \begin{LTXexample}[pos=t,preset=\centering,wide] \psframebox{\begin{pspicture}(2.5,1in) -\psbarcode{12345678}{includetext}{ean8} +\psbarcode{01335583}{includetext}{ean8} \end{pspicture}}\quad \psframebox{\begin{pspicture}(-2.6,-1.5)(0.4,0.2in) -\psbarcode[rotate=180,linecolor=red]{12345678}{includetext guardwhitespace height=0.6}{ean8} +%\psbarcode[rotate=180,linecolor=red]{01335583}{includetext guardwhitespace height=0.6}{ean8} \end{pspicture}}\quad \psframebox{\begin{pspicture}(3.8,1in) -\psbarcode[scalex=1.5,scaley=0.5,transy=1]{12345678}{includetext inkspread=0.5}{ean8} +%\psbarcode[scalex=1.5,scaley=0.5,transy=1]{01335583}{includetext inkspread=0.5}{ean8} \end{pspicture}} \end{LTXexample} - \newpage \subsection{Examples for the PostScript options} \begin{LTXexample}[pos=t,preset=\centering] \begin{pspicture}(3.5,1.2in) -\psbarcode{12345678}{includetext guardwhitespace height=0.6}{ean8} +\psbarcode{01335583}{includetext guardwhitespace height=0.6}{ean8} \end{pspicture} \begin{pspicture}(3.5,1.2in) -\psbarcode{12345678}{textsize=15 includetext guardwhitespace height=0.6}{ean8} +\psbarcode{01335583}{textsize=15 includetext guardwhitespace height=0.6}{ean8} \end{pspicture} \begin{pspicture}(3.5,1.2in) -\psbarcode{12345678}{includetext inkspread=0.5}{ean8} +\psbarcode{01335583}{includetext inkspread=0.5}{ean8} \end{pspicture} \begin{pspicture}(3.5,1.2in) -\psbarcode{12345678}{includetext textpos=0}{ean8} +\psbarcode{01335583}{includetext textpos=0}{ean8} \end{pspicture} \end{LTXexample} + + \begin{LTXexample}[pos=t,preset=\centering] \begin{pspicture}(3.5,1.2in) -\psbarcode{12345678}{includetext guardwhitespace}{ean8} +\psbarcode{01335583}{includetext guardwhitespace}{ean8} \end{pspicture} \begin{pspicture}(3.5,1.2in) -\psbarcode{12345678}{textsize=15 includetext guardwhitespace width=2}{ean8} +\psbarcode{01335583}{textsize=15 includetext guardwhitespace width=2}{ean8} \end{pspicture} \end{LTXexample} + + + \section{Usage} By default the barcode has a width and a height of zero. Using the \Lcs{parbox} macro or the \Lenv{pspicture} environment can reserve the needed space for @@ -198,7 +202,7 @@ try the support mailing list. \xLps{ean13} \begin{LTXexample}[width=.3\linewidth] \begin{pspicture}(3,1.2in) -\psbarcode[scalex=0.8,scaley=0.8]{9781860742712}{includetext guardwhitespace}{ean13} +\psbarcode[scalex=0.8,scaley=0.8]{9783865415561}{includetext guardwhitespace}{ean13} \end{pspicture} \end{LTXexample} @@ -218,7 +222,7 @@ try the support mailing list. \xLps{ean8} \begin{LTXexample}[width=.3\linewidth] \begin{pspicture}(-2,-1.2)(0,0.2in) -\psbarcode[rotate=180,linecolor=red]{12345678}{includetext guardwhitespace height=0.6}{ean8} +\psbarcode[rotate=180,linecolor=red]{01335583}{includetext guardwhitespace height=0.6}{ean8} \end{pspicture} \end{LTXexample} @@ -402,7 +406,7 @@ for the initial character set. UCC/EAN-128s must have a manditory \begin{LTXexample}[pos=l,width=.4\linewidth] \begin{pspicture}(4,1in) -\psbarcode{0123456789}{includetext}{rationalizedCodabar} +\psbarcode{A0123456789B}{includetext}{rationalizedCodabar} \end{pspicture} \end{LTXexample} @@ -468,7 +472,7 @@ for the initial character set. UCC/EAN-128s must have a manditory \begin{LTXexample}[width=.6\linewidth] \begin{pspicture}(7,0.3in) -\psbarcode{01234567}{includetext textpos=-10 textfont=Arial textsize=10}{postnet} +\psbarcode{01234}{includetext textpos=-10 textfont=Arial textsize=10}{postnet} \end{pspicture} \end{LTXexample} @@ -713,7 +717,53 @@ For a documentation see \url{http://de.wikipedia.org/wiki/Strichcode#PDF417}. \subsection{Data matrix} For a documentation see \url{http://de.wikipedia.org/wiki/Strichcode#DataMatrix}. -It is used for the german post company DHL. +It is a 2D matrix-style barcode that can encode full 256 character extended-ASCII. +Also known as: Data Matrix ECC 200. +Variants: +\begin{description} +\item[GS1] DataMatrix is a variant of Data Matrix that should be used when encoding data that is in +GS1 Application Identifier standard format. + \item[HIBC] Data Matrix is a variant of Data Matrix that should be used when encoding + HIBC formatted data. +\end{description} + +Standards: ISO/IEC 16022, ANSI/AIM BC11 ISS. + +Data and Options + +\begin{itemize} +\item The data field can contain any extended ASCII data. +\item When the parse option is specified, any instances of \verb|^NNN| in the data field +are replaced with their equivalent ASCII value, useful for specifying unprintable characters. +\item When the parsefnc option is specified, non-data function characters can be specified by \verb|^FNC1|. +\item The columns and rows options are used to specify the size of the symbol, either square or rectangular, one of: + Square: 10x10, 12x12, 14x14, 16x16, 18x18, 20x20, 22x22, 24x24, 26x26, 32x32, 36x36, 40x40, + 44x44, 48x48, 52x52, 64x64, 72x72, 80x80, 88x88, 96x96, 104x104, 120x120, 132x132, 144x144 + Rectangular: 8x18, 8x32, 12x26, 12x36, 16x36, 16x48 +\item If the columns and rows are unspecified, the encoder will default to creating a (non-rectangular) +symbol that is the minimum size to represent the given data. +\item The raw option denotes that the data field is providing the input as a pre-encoded codewords in \verb|^NNN| +format, suitable for direct low-level encoding. +\item The encoding option specifies how the data is to be encoded. Possible values are: +\begin{itemize} +\item encoding=ascii - Extended ASCII data (default). +\item encoding=c40 - Optimized encoding for upper-case alphanumeric data. Can also encode extended ASCII +data but incurs extra codeword overhead. +\item encoding=text - Optimized encoding for lower-case alphanumeric data. Can also encode +extended ASCII data but incurs extra codeword overhead. +\item encoding=x12 - Optimized encoding restricted to upper-case alphanumeric data plus the characters \verb|\r * >| and space. +\item encoding=raw - Same as the raw option. +\end{itemize} +\item The prefix option allows adding a special codeword to the symbol prior to the data. Possible values are: +\begin{itemize} +\item prefix=MAC5 - Prefixes the data with the 05 Macro codeword. +\item prefix=MAC6 - Prefixes the data with the 06 Macro codeword. +\item prefix=PROG - Prefixes the data with the reader programming codeword. May require encoding=c40, depending on the reader. +\item prefix=FNC1 - Prefixes the data with the FNC1 codeword. +\end{itemize} +\end{itemize} + + \begin{description} \item[Characters] extended ASCII @@ -726,6 +776,15 @@ It is used for the german post company DHL. \end{pspicture} \end{LTXexample} + +\begin{LTXexample}[pos=l,width=1.6in,wide] +\begin{pspicture}(1in,1in) +\psbarcode{^098^099^100^142^164^186^101^102^103^104^105}{raw}{datamatrix} +\end{pspicture} +\end{LTXexample} + + + \subsection{2D Maxi code} For a documentation see \url{http://www.logicalconcepts.eu/wDeutsch/autoid/barcodetypen/index.html?navid=21}. MaxiCode is a fixed-sized two-dimensional symbology created by the diff --git a/Master/texmf-dist/dvips/pst-barcode/pst-barcode.pro b/Master/texmf-dist/dvips/pst-barcode/pst-barcode.pro index 429b300be0e..487e75a1be6 100644 --- a/Master/texmf-dist/dvips/pst-barcode/pst-barcode.pro +++ b/Master/texmf-dist/dvips/pst-barcode/pst-barcode.pro @@ -1,14 +1,9 @@ -%!PS-Adobe-2.0 -%%Creator: Terry Burton -%%DocumentPaperSizes: a4 -%%EndComments +%!PS -% Barcode Writer in Pure PostScript - Version 2012-11-15 +% Barcode Writer in Pure PostScript - Version 2013-06-03 % http://www.terryburton.co.uk/barcodewriter/ % -% Copyright (c) 2004-2012 Terry Burton -% -% $Id: barcode.ps 2399 2012-11-15 13:18:46Z terry.burton $ +% Copyright (c) 2004-2013 Terry Burton % % Permission is hereby granted, free of charge, to any % person obtaining a copy of this software and associated @@ -34,17312 +29,7144 @@ % CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS % IN THE SOFTWARE. -% Uncomment this next line to allow these named resource -% definitions to remain resident within a printer's -% PostScript virtual machine so that the barcode generation -% capability persists between jobs. - -% serverdict begin 0 exitserver - % --BEGIN TEMPLATE-- -% --BEGIN PREAMBLE-- -currentglobal -true setglobal -/Generic /Category findresource -dup length 1 add dict copy -dup /InstanceType /packedarraytype put -/uk.co.terryburton.bwipp exch /Category defineresource pop -setglobal -% --END PREAMBLE-- +% --BEGIN RESOURCE preamble-- +%%BeginResource: Category uk.co.terryburton.bwipp 0.0 0 0 0 +%%BeginData: 7 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +P1OerF_-`n01TSk ATDKp 010/i AS5q% H' 6mE 30Ia,! KmJH23J +i?3%mj@F*(i.@qA VbE +L\DA TVm"@ r# drB 9Ki QP'& +Es@:O(aA79M!@D_ ?-CE +cQG7F`MSBDD#CBB lJ$S4 tf9 3FC f*'E d8 d +% Category/uk.co.terryburton.bwipp 0.0 0 +%%EndData +%%EndResource +% --END RESOURCE preamble-- + +% --BEGIN RESOURCE raiseerror-- +%%BeginResource: uk.co.terryburton.bwipp raiseerror 0.0 0 0 0 +%%BeginData: 9 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\ +% uk.co.terryburton.bwipp/raiseerror 0.0 0 +%%EndData +%%EndResource +% --END RESOURCE raiseerror-- % --BEGIN RENDERER renlinear-- -/setpacking where {pop currentpacking true setpacking} if -1 dict -begin -/renlinear { - - 20 dict begin % Confine variables to local scope - - /args exch def % We are given some arguments - - % Default options - /sbs [] def - /bhs [] def - /bbs [] def - /txt [] def - /barcolor (unset) def - /includetext false def - /textcolor (unset) def - /textxalign (unset) def - /textyalign (unset) def - /textfont (Courier) def - /textsize 10 def - /textxoffset 0 def - /textyoffset 0 def - /textgaps 0 def - /alttext () def - /bordercolor (unset) def - /backgroundcolor (unset) def - /inkspread 0.15 def - /width 0 def - /barratio 1 def - /spaceratio 1 def - /showborder false def - /borderleft 10 def - /borderright 10 def - /bordertop 1 def - /borderbottom 1 def - /borderwidth 0.5 def - /guardwhitespace false def - /guardleftpos 0 def - /guardleftypos 0 def - /guardrightpos 0 def - /guardrightypos 0 def - /guardwidth 6 def - /guardheight 7 def - - % Apply the renderer options and the user options - args {def} forall - opt {def} forall - - /barcolor barcolor cvlit def - /textcolor textcolor cvlit def - /textxalign textxalign cvlit def - /textyalign textyalign cvlit def - /textfont textfont cvlit def - /textsize textsize cvr def - /textxoffset textxoffset cvr def - /textyoffset textyoffset cvr def - /textgaps textgaps cvr def - /alttext alttext cvlit def - /bordercolor bordercolor cvlit def - /backgroundcolor backgroundcolor cvlit def - /inkspread inkspread cvr def - /width width cvr def - /barratio barratio cvr def - /spaceratio spaceratio cvr def - /borderleft borderleft cvr def - /borderright borderright cvr def - /bordertop bordertop cvr def - /borderbottom borderbottom cvr def - /borderwidth borderwidth cvr def - /guardleftpos guardleftpos cvr def - /guardleftypos guardleftypos cvr def - /guardrightpos guardrightpos cvr def - /guardrightypos guardrightypos cvr def - /guardwidth guardwidth cvr def - /guardheight guardheight cvr def - - % Create bar elements and put them into the bars array - /bars sbs length 1 add 2 idiv array def - /x 0.00 def /maxh 0 def - 0 1 sbs length 1 add 2 idiv 2 mul 2 sub { - /i exch def - i 2 mod 0 eq { % i is even - /d sbs i get barratio mul barratio sub 1 add def % d=digit*r-r+1 - sbs i get 0 ne { - /h bhs i 2 idiv get 72 mul def % Height from bhs - /c d 2 div x add def % Centre of the bar = x + d/2 - /y bbs i 2 idiv get 72 mul def % Baseline from bbs - /w d inkspread sub def % bar width = digit - inkspread - bars i 2 idiv [h c y w] put % Add the bar entry - h y add maxh gt {/maxh h y add def} if - } { - bars i 2 idiv -1 put % Dummy entry - } ifelse - } { - /d sbs i get spaceratio mul spaceratio sub 1 add def % d=digit*r-r+1 - } ifelse - /x x d add def % x+=d - } for - - gsave - - currentpoint translate - - % Force symbol to given width - width 0 ne { - width 72 mul x div 1 scale - } if - - % Set RGB or CMYK color depending on length of given hex string - /setanycolor { - /anycolor exch def - anycolor length 6 eq { - (< >) 8 string copy dup 1 anycolor putinterval cvx exec {255 div} forall setrgbcolor - } if - anycolor length 8 eq { - (< >) 10 string copy dup 1 anycolor putinterval cvx exec {255 div} forall setcmykcolor - } if - } bind def - - % Display the border and background - newpath - borderleft neg borderbottom neg moveto - x borderleft add borderright add 0 rlineto - 0 maxh borderbottom add bordertop add rlineto - x borderleft add borderright add neg 0 rlineto - 0 maxh borderbottom add bordertop add neg rlineto - closepath - backgroundcolor (unset) ne { gsave backgroundcolor setanycolor fill grestore } if - showborder { - gsave - bordercolor (unset) ne { bordercolor setanycolor } if - borderwidth setlinewidth stroke - grestore - } if - - % Display the bars for elements in the bars array - gsave - 0 setlinecap - barcolor (unset) ne { barcolor setanycolor } if - bars { - dup -1 ne { - aload pop newpath setlinewidth moveto 0 exch rlineto stroke - } { - pop - } ifelse - } forall - grestore - - % Display the text for elements in the text array - textcolor (unset) ne { textcolor setanycolor } if - includetext { - textxalign (unset) eq textyalign (unset) eq and alttext () eq and { - /s 0 def /fn () def - txt { - {} forall - 2 copy s ne exch fn ne or { - 2 copy /s exch def /fn exch def - exch findfont exch scalefont setfont - } { - pop pop - } ifelse - moveto show - } forall - } { - textfont findfont textsize scalefont setfont - alttext () eq { - /txt [ txt { 0 get {} forall } forall ] def - /tstr txt length string def - 0 1 txt length 1 sub { dup txt exch get tstr 3 1 roll put } for - } { - /tstr alttext def - } ifelse - - % Find true ascent of font - tstr length 0 eq { - 0 - } { - gsave - newpath 0 0 moveto (0) false charpath pathbbox - 4 1 roll pop pop pop - grestore - currentfont /PaintType known {currentfont /PaintType get 2 eq} {false} ifelse - currentfont /StrokeWidth known and { - currentfont /StrokeWidth get 2 div 0 exch - currentfont /FontMatrix get dtransform - dup mul exch dup mul add sqrt - add - } if - } ifelse - /textascent exch def - /textwidth tstr stringwidth pop tstr length 1 sub textgaps mul add def - - /textxpos textxoffset x textwidth sub 2 div add def - textxalign (left) eq { /textxpos textxoffset def } if - textxalign (right) eq { /textxpos x textxoffset sub textwidth sub def } if - textxalign (offleft) eq { /textxpos textwidth textxoffset add neg def } if - textxalign (offright) eq { /textxpos x textxoffset add def } if - textxalign (justify) eq textwidth x lt and { - /textxpos 0 def - /textgaps x textwidth sub tstr length 1 sub div def - } if - /textypos textyoffset textascent add 1 add neg def - textyalign (above) eq { /textypos textyoffset maxh add 1 add def } if - textyalign (center) eq { /textypos textyoffset maxh textascent sub 2 div add def } if - textxpos textypos moveto textgaps 0 tstr ashow - } ifelse - } if - - % Display the guard elements - guardwhitespace { - 0.75 setlinewidth - guardleftpos 0 ne { - newpath - guardleftpos neg guardwidth add guardleftypos guardwidth 2 div add moveto - guardwidth neg guardheight -2 div rlineto - guardwidth guardheight -2 div rlineto - stroke - } if - guardrightpos 0 ne { - newpath - guardrightpos x add guardwidth sub guardrightypos guardheight 2 div add moveto - guardwidth guardheight -2 div rlineto - guardwidth neg guardheight -2 div rlineto - stroke - } if - } if - - grestore - - end - -} bind def -/renlinear dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp renlinear 0.0 0 0 0 +%%BeginData: 72 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\Ch[ O"NW jQC F( KH V1G Ou "b5A U&D284U1G<3UEb& a%GA1T0 BSo"S! !&0<0 5#E 9Eb'B-Blmp -E+*6f+D,%u +F(LLj05#E9Eb&utAor!1F,0gZ1G:@UX:eDes?4OtDhQ06CcMFCT6*DfQtBAU&<,Des?4OtDhQ06CcMFE +h51BkM<+FCf]=G[YE&B5WkaOu"b5AU&Ch[O"OtDhQ06CcMFCoH/F5FCf]=F(or3OtVtS06CcMFEh_9AohO*+EV1>FEh_9AohO*OtVtS +06CcMFEqe:AohO*+EV1>FEqe:AohO*OtVtS06CcMFD#$$F!,R9G][S,E-%0qOu"b"Cijc1G]Y' +:Cijc1G]]*#Ou"b#DfTB"Eas$(DfQt0DfTB"Eas$(DfV!mOu"b#@:O(cEc6)D'3;+Eb&a%@W-@1Df(XjOu"b#DfTB"Ed)5.FD)e+DfTB"Ed)5.FD-g +jOu"b(F^]<$Ch74#E,Te?B6@X'A8GghFDu/>OtVtS05#E9Eb&utAor<;Df[%6F^]<$Ch74#H#R +\COtVtS05#E9Eb'3)B4uC+Df[%6F^]<$EbT0"FDu/>OtVtS05#E9Eb'3)B4uC4E,Te?B6@X'A9 +)BsBQSN=Df_'pOu"b(F^]<$GA1T0BHUr1@<,n&Bk2=!OtVtS05#E9Eb&ipBkM+$+D5h*Eb&ipB +kM+$OtVtS04J@1F!,O5F-:!g!KmJ>!g6HE$'I(tG_uJ$!!&0<05Y-BBSZYO1Pc$e!HV^kP%'4J +Oo^@?P#@);P&,pUP,Wd]Bp(ZC1MMXHP%odQP!+.FA0>r&F!,1[94D=MEaa'(Dj"pG@<-BsFD5Z +VWJCS9IT%@j$%>G9C1SG\A4FOo +]E.G\E7:HS95EG\A45+F0+NOu%NL<.0+&@<-E3BnuhR;Mb@9G^Y`TI=!VX+EM"5+DI!3F)YPtA +TD4$BlB/NF)YPtATD4$BlB06L]NY>Ou%NLGT^O[!Ko6eP":a2OslKqGA1T0BSZYOD0pJ@ +A9;L@8:F(KH%DL#`1Ci=?BP#Pn! +EcZSj3/ITtD0qEIP')q+P+.VML]ET%P(f'sI=%-"I?ITYP"Cg2FCf]=@rH1%EfL&G]\"@H=`7uP*KHlFED)=FH-?a4aSi(G]Y'4+EVjMH\_Zb97))M8UZan?'6usFE;PE ++EVjMP%'TNOu%moL]MUBFHU*h!KsF/OuRQ.FHShN96>5sEejgR!Kr5$G^Y`GI=!VhF*)FF@;L% +-AU&<[1OYEdFE;PEP%'4IP!+/J!.B3W:6KOO!/LW6Q"Bl8#lH#R>X@!e%Z02Q(kDKJj'E+P2*L]W`&I=#R7Cia09P#[Yf02lt5DeiocBk2=!P$ +jFUH]fL);fm%uCLpR]A9;LJ98EY42M_?r5*@$A7W30d9jr-aBm>e6OuJO`P&-:FOuSV@Oo]WDE +cdHFI?IQXP#X/WAU&<*F(8d!FHShN1GFE_G0FD)e=AU&G]\1KAnH*qFHQZf1OYEcFCf]=G[YE&B5W_7C3=T>BkDXR4`k7[ +FE_G0FD)eAP%Kj[HS9JPG]\1LDf^^7Ou"b5AU&<0@;p91GT_*>G]\.DA9;LJWH<3'Efsmf!KsF +F2NfkEP#O)VAU&P&?F=FCf]=H!tN'B5W +_5@:F.uAWf3'06CcMFEqhDF!,R9G]\4LAnH*qFOu%NL<-2\rFEq;2BkM=D#% +M4^FCfKU4aSi(AU&FCB6#ASuUQWJCV=2Ne*(1OYEcF +Cf]=G]7SB+EV1>FEqhDF-:<\AU&<0@;p:D!-E:(EfpcXP#Zpn<+g>^Eb'B-Blmp-E+*6fH\t$Q +!!&1OB6@X'A8GghFDu/>L]ETTH]i;[F^]<$Ch74#E,Tf\DJ+*#Eb'B.A9;LJ!G?O`Eb&utAor< +;Df[%6F^]<$GA1T0BSZ_Q2Ne*(CM.cuEb'B.A9;LJDJ+*#Eb&ipBkM+$M#NPqP(dOk@<,n&Bk2 +=!+D5h*Eb&ipBkM+$M#NPqP(f'sI?IQBF^]<$EbT0"FDu/>L]ETTH]i;[F^]<$EbT0"FDu/>+F +'%MB6@X'A9V`uFD-i:B6@X'A9)BsBQSN=Df[%6F^]<$BOtmjBQT%3OuAI(P&"]Q@<,n&Bk2=!+ +D5h*Eb&ipBkM+$M#NPqP(dOk@<,n&Bk2=!P&=oT@<,mlASGdjFGTpZ2NicWVgX_-I?IQm9p.Mb +Oq*X2061WACh[cu@<.MjP%64gCG'+8/p(ZFEd;,:Ecc5;/n0$=E,Zq1AS,XoATD@'Dfp)1AWh2 +!3A5GbFDtYuCM@[!P.H"'F`V,9E+*6lBl7R3P#M~> +% uk.co.terryburton.bwipp/renlinear 0.0 0 +%%EndData +%%EndResource % --END RENDERER renlinear-- % --BEGIN RENDERER renmatrix-- -/setpacking where {pop currentpacking true setpacking} if -1 dict -begin -/renmatrix { - - 20 dict begin - - /args exch def - - % Default options - /width 1 def - /height 1 def - /color (unset) def - /backgroundcolor (unset) def - - % Apply the renderer options and the user options - args {def} forall - opt {def} forall - - /width width cvr def - /height height cvr def - /color color cvlit def - /backgroundcolor backgroundcolor cvlit def - - % Extend bitmap horizontally to an 8-bit boundary - /pixx8 pixx 8 div ceiling cvi 8 mul def - /pixs8 [ pixx8 pixy mul {0} repeat ] def - 0 1 pixy 1 sub { - /i exch def - pixs8 pixx8 i mul pixs pixx i mul pixx getinterval putinterval - } for - /pixs pixs8 def - - % Convert bitmap into 8-bit sample string - /imgstr pixs length 8 idiv string def - 0 1 pixs length 1 sub { - /i exch def - imgstr i 8 idiv 2 copy get 2 7 i 8 mod sub exp cvi pixs i get mul add put - } for - - % Set RGB or CMYK color depending on length of given hex string - /setanycolor { - /anycolor exch def - anycolor length 6 eq { - (< >) 8 string copy dup 1 anycolor putinterval cvx exec {255 div} forall setrgbcolor - } if - anycolor length 8 eq { - (< >) 10 string copy dup 1 anycolor putinterval cvx exec {255 div} forall setcmykcolor - } if - } bind def - - % Draw the image - gsave - currentpoint translate - 72 width mul 72 height mul scale - .0001 .0001 moveto .9999 .0001 lineto .9999 .9999 lineto .0001 .9999 lineto closepath - backgroundcolor (unset) ne { gsave backgroundcolor setanycolor fill grestore } if - color (unset) ne { color setanycolor } if - pixx pixy true [ pixx 0 0 pixy neg 0 pixy ] {imgstr} imagemask - grestore - - end - -} bind def -/renmatrix dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp renmatrix 0.0 0 0 0 +%%BeginData: 24 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\+DfV !mOu "b# @: O( cEc 6)< A7K OoDf +Qt0@:O(cEc6)G +_cWg2NeW7/;ORpC m$S-E+ sQ< 3 $;E JE +sQA 3$< 0SG^5HgH\_ ZMP(R&'1Pc$ +e!H;atH&)KaWI$: 4P!5$b E+s Q <3$< 0SG^ )1j Bp*:OBm=\A E+sQA+DI!TE ++sQAP"_$aI?I,SE +sQ<+E 2%> F#]= =055 99F *)FFE+sQ

Ou + %moL]MI/G]T$WL ]N[ME'"m(Q(3"[hk3CMEcUdEf)j([hk3;MEcUdEf*)2q/VX.ME'"m(Q(G,q/VX.OqqM8@ +r#^tDfor.@rH1%EfL +Des?4NWjQCF(KHVD0oc2Ci=>:F(KH%DL#`1Ci=?BP#QC7G^(?MBm=nGFE2M8+Bot-Bm=lY!/LV +oBm=odDMS:3Bm=nG?$d].D.dp3Eda*PP"h*"I?G)'1GD_?-CEcQ +G7F`MSBDD#CBBlJ#6A7]@eDImj"F)Q2A@qCgGOuY1:ATVm"@r#drB9KiQP'(hWFDtYuCM@[!I? +IP~> +% uk.co.terryburton.bwipp/renmatrix 0.0 0 +%%EndData +%%EndResource % --END RENDERER renmatrix-- % --BEGIN RENDERER renmaximatrix-- -/setpacking where {pop currentpacking true setpacking} if -1 dict -begin -/renmaximatrix { - - 20 dict begin - - /args exch def % We are given some arguments - - % Apply the renderer options and the user options - args {def} forall - opt {def} forall - - gsave - - currentpoint translate - - 2.4945 dup scale % from 1pt to 1.88mm - 0.5 0.5774 translate - - pixs { - dup - /x exch 30 mod def - /y exch 30 idiv def - y 2 mod 0 eq {x} {x 0.5 add} ifelse - 32 y sub 0.8661 mul - moveto - 0 0.5774 rmoveto - -0.5 -0.2887 rlineto - 0 -0.5774 rlineto - 0.5 -0.2887 rlineto - 0.5 0.2887 rlineto - 0 0.5774 rlineto - -0.5 0.2887 rlineto - closepath fill - } forall - - % Plot the locator symbol - newpath 14 13.8576 0.5774 0 360 arc closepath - 14 13.8576 1.3359 360 0 arcn closepath fill - newpath 14 13.8576 2.1058 0 360 arc closepath - 14 13.8576 2.8644 360 0 arcn closepath fill - newpath 14 13.8576 3.6229 0 360 arc closepath - 14 13.8576 4.3814 360 0 arcn closepath fill - - grestore - - end - -} bind def -/renmaximatrix dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp renmaximatrix 0.0 0 0 0 +%%BeginData: 16 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\5):8 CC 6CA+H' 1@I +*g0Ea1O4cXP%odQ P!+/: I=! )]M E_ (@ !0R A2P #[;\H' 5. a5@(e2 P&- +:sL]E;s'@;/jL5N _G!! %nj PL +` @Kn o_d ^D" tBP( +ecX!!!"V^6?olP( ecX! ! !" V5 *O? AP( e\lM E_d$I +?K;A^An66ME[6NI ?K;I(6 V"4 P "Cg TL ^o;. ?+@ M(582ClL]E /1BT`O^(5NH +X6!_"4MEe-?`J+D ,L]ESB Oqs 3 IP&H -dME tOX ]8AiX`GLD2 L&ktN"d0XW% +Z3PX\@[V`2cD_?- CEcQG 7F`MS BDD#C BBl J#6A7]@eDI mj"F)Q2A@qC +gGOuY1:ATVm"@r# drB9KiQ P'(hWF DtYuC M@[ !I?IP~> +% uk.co.terryburton.bwipp/renmaximatrix 0.0 0 +%%EndData +%%EndResource % --END RENDERER renmaximatrix-- % --BEGIN ENCODER ean5-- +% --REQUIRES preamble raiseerror renlinear-- % --DESC: EAN-5 (5 digit addon) % --EXAM: 90200 % --EXOP: includetext guardwhitespace % --RNDR: renlinear -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renlinear dup /uk.co.terryburton.bwipp findresource put -begin -/ean5 { - - 20 dict begin - - /options exch def % We are given an option string - /barcode exch def % We are given a barcode string - - /dontdraw false def - /includetext false def % Enable/disable text - /textfont /Helvetica def - /textsize 12 def - /textxoffset 0 def - /textyoffset (unset) def - /height 0.7 def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - /textfont textfont cvlit def - /textsize textsize cvr def - /height height cvr def - /textxoffset textxoffset cvr def - textyoffset (unset) eq { - /textyoffset height 72 mul 1 add def - } { - /textyoffset textyoffset cvr def - } ifelse - - % Create an array containing the character mappings - /encs - [ (3211) (2221) (2122) (1411) (1132) - (1231) (1114) (1312) (1213) (3112) - (112) (11) - ] def - - % Create a string of the available characters - /barchars (0123456789) def - - % Determine the mirror map based on mod 10 checksum - /mirrormaps - [ (11000) (10100) (10010) (10001) (01100) - (00110) (00011) (01010) (01001) (00101) - ] def - /checksum 0 def - 0 1 4 { - /i exch def - /barchar barcode i get 48 sub def - i 2 mod 0 eq { - /checksum barchar 3 mul checksum add def - } { - /checksum barchar 9 mul checksum add def - } ifelse - } for - /checksum checksum 10 mod def - /mirrormap mirrormaps checksum get def - - /sbs 31 string def - /txt 5 array def - - 0 1 4 { - /i exch def - - % Prefix with either a start character or separator character - i 0 eq { - sbs 0 encs 10 get putinterval - } { - sbs i 1 sub 6 mul 7 add encs 11 get putinterval - } ifelse - - % Lookup the encoding for the barcode character - barcode i 1 getinterval barchars exch search - pop % Discard true leaving pre - length /indx exch def % indx is the length of pre - pop pop % Discard seek and post - /enc encs indx get def % Get the indxth encoding - mirrormap i get 49 eq { % Reverse enc if 1 in this position in mirrormap - /enclen enc length def - /revenc enclen string def - 0 1 enclen 1 sub { - /j exch def - /char enc j get def - revenc enclen j sub 1 sub char put - } for - /enc revenc def - } if - sbs i 6 mul 3 add enc putinterval % Put encoded digit into sbs - txt i [barcode i 1 getinterval i 1 sub 9 mul 13 add textxoffset add textyoffset textfont textsize] put - } for - - % Return the arguments - << - /ren //renlinear - /sbs [sbs {48 sub} forall] - /bhs [16{height}repeat] - /bbs [16{0}repeat] - includetext { - /txt txt - } if - /opt options - /guardrightpos 10 - /guardrightypos textyoffset 4 add - /bordertop 10 - >> - - dontdraw not //renlinear if - - end - -} bind def -/ean5 dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp ean5 0.0 0 0 0 +%%BeginData: 38 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\D P!5 % OP!5 $bI= %,/ FE2M8Ou%NL 5FC f]=F (or3O tVtS 05+ p2B4uB0BOt mjBQTCjOu"b +5AU&-FCAm$+E +).6Gp$X3B5)I/0/%?SBldisEcQ)=P!=AX<.0p$04f$2F!+\I">_ef0ocAl1,:SE">V\e16)Jl1 +bg_F">MVe16)Jl1,CYF">MVc1l_\n1GLYF">MYd1QDSo0ekGD"#2McNWLpi?'6us@UX:eBOPq& +NX@Hp1,CaE2E*TUOu"b.Bl\64Ec#6(F!+\I"Yh_c0JJLj0eb=90TH;k0JG48NWh-k0JG5A"Y_Y +c0JJLj0JG490TH;j0JG49NWh*k0JP8A"Y_Yb0JSRk0JG480jTqu04S[,@r$..D281T1Pc$e!Jg +l*056S5Ou"b#@<,jk@<*K"@<,jrA7ZltP"UTbP,XU#BnuhRC5;kQ4aShlBOt[hF*2=B@UX:eBO +Pq;"-RJ1BOt[hF*2>_!Ko6eHS8lBARfLsF_r71@<,jk@<./1P&+WAARfLsF`!9BOu%NL%ARfLsF_upAP%p.905YEDEc5u8@;m?+Bl\64Ec#6(F!+t+ARfLsF`!:7Ou"b4 +@WR>IP,45?'9G\P"7\t061WA0/%?WDJX$)ARTU4F(025>9IurF*i]sP,Wkm8R3 +uYBQG;#L_+oHASGdjFFB=)>q]YrF!+\C&:935I?K4g+DG_'Cis9"FCf]=HS9JcF +% uk.co.terryburton.bwipp/ean5 0.0 0 +%%EndData +%%EndResource % --END ENCODER ean5-- % --BEGIN ENCODER ean2-- +% --REQUIRES preamble raiseerror renlinear-- % --DESC: EAN-2 (2 digit addon) % --EXAM: 05 % --EXOP: includetext guardwhitespace % --RNDR: renlinear -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renlinear dup /uk.co.terryburton.bwipp findresource put -begin -/ean2 { - - 20 dict begin - - /options exch def % We are given an options string - /barcode exch def % We are given a barcode string - - /dontdraw false def - /includetext false def % Enable/disable text - /textfont /Helvetica def - /textsize 12 def - /textxoffset 0 def - /textyoffset (unset) def - /height 0.7 def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - /textfont textfont cvlit def - /textsize textsize cvr def - /height height cvr def - /textxoffset textxoffset cvr def - textyoffset (unset) eq { - /textyoffset height 72 mul 1 add def - } { - /textyoffset textyoffset cvr def - } ifelse - - % Create an array containing the character mappings - /encs - [ (3211) (2221) (2122) (1411) (1132) - (1231) (1114) (1312) (1213) (3112) - (112) (11) - ] def - - % Create a string of the available characters - /barchars (0123456789) def - - % Determine the mirror map based on mod 4 checksum - /mirrormap [(00) (01) (10) (11)] barcode 0 2 getinterval cvi 4 mod get def - - /sbs 13 string def - /txt 2 array def - - 0 1 1 { - /i exch def - - % Prefix with either a start character or separator character - i 0 eq { - sbs 0 encs 10 get putinterval - } { - sbs i 1 sub 6 mul 7 add encs 11 get putinterval - } ifelse - - % Lookup the encoding for the barcode character - barcode i 1 getinterval barchars exch search - pop % Discard true leaving pre - length /indx exch def % indx is the length of pre - pop pop % Discard seek and post - /enc encs indx get def % Get the indxth encoding - mirrormap i get 49 eq { % Reverse enc if 1 in this position in mirrormap - /enclen enc length def - /revenc enclen string def - 0 1 enclen 1 sub { - /j exch def - /char enc j get def - revenc enclen j sub 1 sub char put - } for - /enc revenc def - } if - sbs i 6 mul 3 add enc putinterval % Put encoded digit into sbs - txt i [barcode i 1 getinterval i 1 sub 9 mul 13 add textxoffset add textyoffset textfont textsize] put - } for - - % Return the arguments - << - /ren //renlinear - /sbs [sbs {48 sub} forall] - /bhs [12{height}repeat] - /bbs [12{0}repeat] - includetext { - /txt txt - } if - /opt options - /guardrightpos 10 - /guardrightypos textyoffset 4 add - /bordertop 10 - >> - - dontdraw not //renlinear if - - end - -} bind def -/ean2 dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp ean2 0.0 0 0 0 +%%BeginData: 34 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\D P!5 % OP!5 $bI= %,/ FE2M8Ou%NL 5FC f]=F (or3O tVtS 05+ p2B4uB0BOt mjBQTCjOu"b +5AU&-FCAm$+E +).6Gp$X3B5)I/0/%?SBldisEcQ)=P!=AX<.0p$04f$2F!+\I">_ef0ocAl1,:SE">V\e16)Jl1 +bg_F">MVe16)Jl1,CYF">MVc1l_\n1GLYF">MYd1QDSo0ekGD"#2McNWLpi?'6us@UX:eBOPq& +NX@Hp1,CaE2E*TUOu"b.Bl\64Ec#6(+Bsj-0JJLg0JSRh0eeUh0elrV@UX:eDe*F8!/L]>9Tgr +_"HmM_99M(aF(03H%?dQN1GFCf]=F(or3+C1.TI?I,`4>1_dDD*Y`ASuDN]7BOtmjBQSZcK3^->@WNYrL^\Wd!.C#_>p*j!@r-9uATVL.FF,Z_G +]Y'MG]\@s<%i0/FFEqe: +AohO*L]ikA04Jj?A7]e'DfCL>5!C*"Df0Z-Eaa0TE%`kbASu +% uk.co.terryburton.bwipp/ean2 0.0 0 +%%EndData +%%EndResource % --END ENCODER ean2-- % --BEGIN ENCODER ean13-- -% --SUGGESTS ean5 ean2-- +% --REQUIRES preamble raiseerror renlinear ean5 ean2-- % --DESC: EAN-13 % --EXAM: 2071473968010 % --EXOP: includetext guardwhitespace % --RNDR: renlinear -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renlinear dup /uk.co.terryburton.bwipp findresource put -dup /ean2 dup /uk.co.terryburton.bwipp findresource put -dup /ean5 dup /uk.co.terryburton.bwipp findresource put -begin -/ean13 { - - 20 dict begin - - /options exch def % We are given an option string - /barcode exch def % We are given a barcode string - - /dontdraw false def - /includetext false def % Enable/disable text - /textfont /Helvetica def - /textsize 12 def - /textyoffset -4 def - /height 1 def - /addongap 12 def - - % Parse the input options, either a string or a dict - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - /textfont textfont cvlit def - /textsize textsize cvr def - /textyoffset textyoffset cvr def - /height height cvr def - /addongap addongap cvr def - - % Split off the addon - barcode ( ) search { - /barcode exch def - pop - /addon exch def - } { - pop - /addon () def - } ifelse - - % Add checksum digit - /pad 13 string def - /checksum 0 def - 0 1 11 { - /i exch def - /barchar barcode i get 48 sub def - i 2 mod 0 eq { - /checksum barchar checksum add def - } { - /checksum barchar 3 mul checksum add def - } ifelse - } for - /checksum 10 checksum 10 mod sub 10 mod def - pad 0 barcode putinterval % Add barcode to the start of the pad - pad 12 checksum 48 add put % Put ascii for checksum at end of pad - /barcode pad def - - % Create an array containing the character mappings - /encs - [ (3211) (2221) (2122) (1411) (1132) - (1231) (1114) (1312) (1213) (3112) - (111) (11111) (111) - ] def - - % Create a string of the available characters - /barchars (0123456789) def - - % Digits to mirror on left side - /mirrormaps - [ (000000) (001011) (001101) (001110) (010011) - (011001) (011100) (010101) (010110) (011010) - ] def - - /sbs 59 string def - /txt 13 array def - - % Put the start character - sbs 0 encs 10 get putinterval - - % First digit - determine mirrormap by this and show before guard bars - /mirrormap mirrormaps barcode 0 get 48 sub get def - txt 0 [barcode 0 1 getinterval -10 textyoffset textfont textsize] put - - % Left side - performs mirroring - 1 1 6 { - % Lookup the encoding for the each barcode character - /i exch def - barcode i 1 getinterval barchars exch search - pop % Discard true leaving pre - length /indx exch def % indx is the length of pre - pop pop % Discard seek and post - /enc encs indx get def % Get the indxth encoding - mirrormap i 1 sub get 49 eq { % Reverse enc if 1 in this position in mirrormap - /enclen enc length def - /revenc enclen string def - 0 1 enclen 1 sub { - /j exch def - /char enc j get def - revenc enclen j sub 1 sub char put - } for - /enc revenc def - } if - sbs i 1 sub 4 mul 3 add enc putinterval % Put encoded digit into sbs - txt i [barcode i 1 getinterval i 1 sub 7 mul 4 add textyoffset textfont textsize] put - } for - - % Put the middle character - sbs 7 1 sub 4 mul 3 add encs 11 get putinterval - - % Right side - 7 1 12 { - % Lookup the encoding for the each barcode character - /i exch def - barcode i 1 getinterval barchars exch search - pop % Discard true leaving pre - length /indx exch def % indx is the length of pre - pop pop % Discard seek and post - /enc encs indx get def % Get the indxth encoding - sbs i 1 sub 4 mul 8 add enc putinterval % Put encoded digit into sbs - txt i [barcode i 1 getinterval i 1 sub 7 mul 8 add textyoffset textfont textsize] put - } for - - % Put the end character - sbs 56 encs 12 get putinterval - - /sbs [sbs {48 sub} forall] def - includetext { - /bhs [height height 12{height .075 sub}repeat height height 12{height .075 sub}repeat height height] def - /bbs [0 0 12{.075}repeat 0 0 12{.075}repeat 0 0] def - } { - /bhs [30{height}repeat] def - /bbs [30{0}repeat] def - /txt [] def - } ifelse - /guardrightypos 0 def - - % Append the addon - addon () ne { - /addopts << - /dontdraw true - /includetext true - /height height 0.15 sub - /textxoffset 95 addongap add - /textsize textsize - /textfont textfont - >> def - addon length 2 eq {addon addopts //ean2 exec} if - addon length 5 eq {addon addopts //ean5 exec} if - /addcode exch def - /sbs [sbs aload pop addongap addcode (sbs) get aload pop] def - /bhs [bhs aload pop addcode (bhs) get {.075 sub} forall] def - /bbs [bbs aload pop addcode (bbs) get {.075 add} forall] def - /txt [txt aload pop addcode (txt) get aload pop] def - /guardrightypos height 72 mul 6 sub def - } if - - % Return the arguments - << - /ren //renlinear - /sbs sbs - /bhs bhs - /bbs bbs - /txt txt - /opt options - /guardrightpos 10 - /guardrightypos guardrightypos - /borderbottom 5 - >> - - dontdraw not //renlinear if - - end - -} bind def -/ean13 dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp ean13 0.0 0 0 0 +%%BeginData: 69 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\D_ +?-CEcQG7F`MSBDD #CBBl J$S g6- ] D3% niO DDd S:06M% _@ rEuAAT Dg: +@Wc^5Df.1:GA2#8 P1l(D Ops 'U@ ;[ eU H\` B!2 3JD%Df Bf 4Df0WZ 5*@ +]T@UX:eDe*FB5*@ ]TA8 c@- A9 )+ &+D ,%u F(L Lj05 +5<6Cis9"FCf]=+D ,%uF ( LL j0 6Cc MFC oH/F HOb01 +GFCf]=AoDR/OtDhQ06CcMFE;/BAKZ) ++G]\"@H=`6mOu"b5AU&@:WneDKKH7FCoH/FHS5=1OYEc@:WneDKKH7FE;/BA +W?q:DKBB2P&5P!@:WneDKKH7FE;/BAKYDlA8c@-AU&<P#Pk#A8c@-AU&!?dPbHS8i:Eas#uAWf6?1Qll6@:WneDN[2H1OXV5FY@06A8c@G!0T-dP#Yt"Ea +s#uAWgMY%$GI:@<,jrA7^p5L^fMaOp$+b@WuO*E%Y^1DDGVoDfQsT1E^4BB5)I/0/%?SBldisEcQ)=P!=AX<+99V@rGmhH]g@E0Tp%25);4^:m,jG +04K->E,[F@@;[eU@UWe7BOPpi@ru:&NZU\U:+\1V+Dl7BFP'XEZd4^A8 +,[jFE9)gEa`['AS#n&DfV"*I?IP_E+*:5%?dQN1G<6OARfLsF_up7Ou%moL]N;>HS9)r5*@]T@ +UX:eBOPp(@UX:eDe*E%Bp),F0TrDu1MMXHP%odQP!+.F@q]F`CNFW8+C\c"@q]:k+Cf(r@r$.. +D3=p_1OXU'@q]F`CNFW8+C\c"@q]:kL]`fV@q]F`CNFW8Oo^_%I?ITYP"769BOt[hF*2>U$=da +\@r$..D28O^C6GQP$Bf.e1Lad5@rGmhP%'4VP!+/$@<,jrA7^Q*P"T:uARfLsF_upgOo^__HS8 +iPBlJ#DARTI21Lad'6YL%@CIDlLBlo@]8T&$VEcP`$FG% +kJuA1oTV@;0doATDg0EfrY8P#Qjm<,c8VL]CmmEas#uAWh=X@:Y0&@q]F`CNFW8LbOtmP'AWh@ +<,jrA7Zm&@:YNW04f$2F!+\I">_ef0ocAl1,:SE">V\e16)Jl1bg_F">MVe16)Jl1,CYF">MVc +1l_\n1GLYF">MYd1QDSo0ekGD"#2MbNWh-l0ekDC"#2Mb?'6us@UX:eBOPq&NX@Hp1,CaE2E*T +UOu"b.Bl\64Ec#6(F!+\I"u%_b0JG2@"u%_c0JP;B"u%_c0eb>B"u%_c0ekAB"u%bc0JP;B"u% +bd0JG5A"u%bd0eb;A"u%bc0eb>B"u%bc0ekAB"u%bd0JP7eOu"b4@WR>eP,4 +5?'9Gg!Jgc4#(&";P!5$b@UX:eDe*E%BnueQ9O_FN@q]:kF-8_MNKSFI@P;G5A9a8$Ou&8DP'& +EhDIXf#DI[`1Bl7I+P"UroD/"$2DfT]'E$/kN!KsFF98G5?'9G\P"9Y'F,1'W!KsF<"HmSW"-N[rDI[aD$^+/GH&)]]!Jh/2056 +S5Ou$QUEas#uAKY]C!Kp,c@<,jk@<-FP5*CngFcp2eBl7I+P!5$bP')q104f$2+D#G#F!,17A9 +a81Ou%/gF!,1Q!KsF<"HmSW#a,4"DI\iTFEhmMBcpV&@UX:eDe*E%BnueQ9PK:`P,X6BP&,peO +o]Z9G]\1KAnH*qFHQZHAU&FCf]=F(or3+C1.TI?I-B@WR>bASu"! +L^]G>P'J^%@WNYr+EM"5H\aA=WI9q$?'7!XDI[L*A7]joG]\9c@VBg*>9ITjBkM+$+D>>#B4uC +C%!uZ!BkM+$MERAqRZaXuP(RFZBkM+$+D>>#B4uCC%!uZ!BkM+$MERAqRZaXuP(RFZBkM+$+D> +>#B4uB0?'6us@UaC$>DN98!/M&1MERAqRXL?OL]E52L^\Wf4dh_,I?K5=!/LV\Ou%N504JU9+B +sXCHY?u)B4uC8P(R&'1G<3HF!+\C*d`\CI?K4gOu"b5G]Y'4+C1-dI?IS`B6@X'A9)BsBQSN=D +f^^7Ou$NWA8c@G!0V2G04AC%DfBf>+?Vb>A8c@-A9)+&+EVXHAM7b8@r-9uATVL.F +ASGdjF"*7pmP"Ur>P'(&n1G<3NF!+[0@VBhG!g +7\7A7T1gA7^c'@VBhG97)OZR@0M,WI9q$?'6us@UaC$>9IBaF-6TfF^\fk@rGmhNWWa"F-91CM +ERAqRZ[]"P"ArB1GF^:.d05#E9Eb'3)B4uC4 +E,Te?BOtmjBQT&$P&,pYP,XU#I?IPl4>1_dDD*Y`ASu +% uk.co.terryburton.bwipp/ean13 0.0 0 +%%EndData +%%EndResource % --END ENCODER ean13-- % --BEGIN ENCODER ean8-- -% --SUGGESTS ean5 ean2-- +% --REQUIRES preamble raiseerror renlinear ean5 ean2-- % --DESC: EAN-8 % --EXAM: 01335583 % --EXOP: includetext guardwhitespace height=0.5 % --RNDR: renlinear -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renlinear dup /uk.co.terryburton.bwipp findresource put -dup /ean2 dup /uk.co.terryburton.bwipp findresource put -dup /ean5 dup /uk.co.terryburton.bwipp findresource put -begin -/ean8 { - - 20 dict begin - - /options exch def % We are given an option string - /barcode exch def % We are given a barcode string - - /dontdraw false def - /includetext false def % Enable/disable text - /textfont /Helvetica def - /textsize 12 def - /textyoffset -4 def - /height 1 def - /addongap 12 def - - % Parse the input options, either a string or a dict - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - /textfont textfont cvlit def - /textsize textsize cvr def - /textyoffset textyoffset cvr def - /height height cvr def - /addongap addongap cvr def - - % Split off the addon - barcode ( ) search { - /barcode exch def - pop - /addon exch def - } { - pop - /addon () def - } ifelse - - % Add checksum digit - /pad 8 string def - /checksum 0 def - 0 1 6 { - /i exch def - /barchar barcode i get 48 sub def - i 2 mod 0 ne { - /checksum barchar checksum add def - } { - /checksum barchar 3 mul checksum add def - } ifelse - } for - /checksum 10 checksum 10 mod sub 10 mod def - pad 0 barcode putinterval % Add barcode to the start of the pad - pad 7 checksum 48 add put % Put ascii for checksum at end of pad - /barcode pad def - - % Create an array containing the character mappings - /encs - [ (3211) (2221) (2122) (1411) (1132) - (1231) (1114) (1312) (1213) (3112) - (111) (11111) (111) - ] def - - % Create a string of the available characters - /barchars (0123456789) def - - /sbs 43 string def - /txt 8 array def - - % Put the start character - sbs 0 encs 10 get putinterval - - % Left side - 0 1 3 { - % Lookup the encoding for the each barcode character - /i exch def - barcode i 1 getinterval barchars exch search - pop % Discard true leaving pre - length /indx exch def % indx is the length of pre - pop pop % Discard seek and post - /enc encs indx get def % Get the indxth encoding - sbs i 4 mul 3 add enc putinterval % Put encoded digit into sbs - txt i [barcode i 1 getinterval i 7 mul 4 add textyoffset textfont textsize] put - } for - - % Put the middle character - sbs 4 4 mul 3 add encs 11 get putinterval - - % Right side - 4 1 7 { - % Lookup the encoding for the each barcode character - /i exch def - barcode i 1 getinterval barchars exch search - pop % Discard true leaving pre - length /indx exch def % indx is the length of pre - pop pop % Discard seek and post - /enc encs indx get def % Get the indxth encoding - sbs i 4 mul 8 add enc putinterval % Put encoded digit into sbs - txt i [barcode i 1 getinterval i 7 mul 8 add textyoffset textfont textsize] put - } for - - % Put the end character - sbs 40 encs 12 get putinterval - - /sbs [sbs {48 sub} forall] def - includetext { - /bhs [height height 8{height .075 sub}repeat height height 8{height .075 sub}repeat height height] def - /bbs [0 0 8{.075}repeat 0 0 8{.075}repeat 0 0] def - } { - /bhs [22{height}repeat] def - /bbs [22{0}repeat] def - /txt [] def - } ifelse - /guardrightypos 0 def - - % Append the addon - addon () ne { - /addopts << - /dontdraw true - /includetext true - /height height 0.15 sub - /textxoffset 67 addongap add - /textsize textsize - /textfont textfont - >> def - addon length 2 eq {addon addopts //ean2 exec} if - addon length 5 eq {addon addopts //ean5 exec} if - /addcode exch def - /sbs [sbs aload pop addongap addcode (sbs) get aload pop] def - /bhs [bhs aload pop addcode (bhs) get {.075 sub} forall] def - /bbs [bbs aload pop addcode (bbs) get {.075 add} forall] def - /txt [txt aload pop addcode (txt) get aload pop] def - /guardrightypos height 72 mul 6 sub def - } if - - % Return the arguments - << - /ren //renlinear - /sbs sbs - /bhs bhs - /bbs bbs - /txt txt - /opt options - /guardleftpos 10 - /guardrightpos 10 - /guardrightypos guardrightypos - /borderbottom 5 - >> - - dontdraw not //renlinear if - - end - -} bind def -/ean8 dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp ean8 0.0 0 0 0 +%%BeginData: 63 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\D_ +?-CEcQG7F`MSBDD #CBBl J$S g6- ] D3% niO DDd S:06M% _@ rEuAAT Dg: +@Wc^5Df.1:GA2#8 P1l(D Ops 'U@ ;\ &O L_Q "0O ps'_E- ,f 4DKCt) Ou" +b#@<,jrA7^ofOu" b%Df 0Z- Ea a/ 7Am oLs AWe i&Bl +7EsF_#'*AU&;>Am oLsA W ei &F Cf] =Ao DR/O irnD0 +6CcMFE;/BAV^bX1 GX4aVtcOu8C 3DfBf 4Df0W CP,i2 'Ci a0N4aW>WI? IQm30Ia6V33 +Qn!BlU*FE2M8P!+ /T/Wr;\ FcnqO1 OXV5/ Tc# UAWeitP#Zp nAWe*t3A5;i +FD5Z2F-8_M1OYEcDfBf4Df0WCOu%NL8M>0sG][P9DKI"CAU&FE;/BAWe^01G>#B4uCM09S+E@:WneDJ*Bs+CSekDf02rE0;l;1LXg)Df0Z.G][P9DK +LmBF`)83FHUKf04AC%Df0Z.G][P9DKI"0A7TUrFCf]=AoDR/OtDhQI?IQ$K04K->E,[F@@;\ +&6@:VZ7A5@):ASu.&BT=E*A7R91DBNP0EZde::+\FJD09oA+C\n)1*CLU+>k9PBkM.%F"]1e@; +0doATDg0EfrY8P#O)R@:Y0"P,4_!Ko6eP#Zpn82"IdARfLsF_upA@q]F`CNFW8L^K; +[P,X6EP%p.9@UX:eDe*FB@Yb;Q4aUXHEas#uAV^SS94MXH@r$..D29m/!Kq;H04K->E,[F@@;\ +&6@:V`=ARfLDBkM.%N[.26@rHC.ARfg)76s[#3$;^EARfKuA8,[jFNW_*l1,=jm0f1U>NW_'k1GXsn0etO>NW_'k0f4mn0f(O>NW_'l +0f+gm1GLU>NWV!j0ocDl0ekC;NWV!j0jTqu04J@1@q]:kF,gS]0etOA2)[BQ3Kc0OF(03H/!?` +l1G*ASu"!L^K;FE;/BAKY9AG^Y`GF(03H"Gd2DCkr1V!G-.YF,13e99ORV"Gd)7#CA+9IB`Eas#uAKY]C!Kp,jL^0)ZFCf]=G].2+F(KHV!JglA!H_mtFEq +e:AohO*+EV1>FCoH/FNASGdjFFB=)?'6us@UaC +$>DO&AL]DjdK3aWr06DG\+BosoOu%NL15`DKKE0@FE2M805+p2B4uB0BOtmjBQT+q)4?qVW@ +r@)G]\1KAnH*qF0/$mFDDIA>I?IQ0/$mFDDdSAI?IP_@:WnYDe*FB5*@]TF(025>9IurF-6TfF^\fkD +f02rE$/S"A7KOgAW?k6@WR]*Oogeh?'6us@VBg*>9IBgF-6TfF^\fk@rGmhNWWa(F-91CMERAq +RZaXuP"ArB1G<3HF!+[0@UaDA!g7\7A7T1gA7^c'@UaDA97)OZR@0M,!I^,&?'6usFEhmM>9J$ +4FHQ]gF^\fk@rGmhNWXBJFHT:[!g7\3Ou"b(F^]<$EbT0"FEqhDF!,.-BkM+$Le*\FL^'$AOu% +NL<'38rEb0,A061WACh[cu@<+#B@WNZ5@WO23BQG;*BQGh9@WNZ$@WO2EG]Y'MG]YTWE-*4@E- +,f4DK@IDF^]<$Ch74#E,TfR$86%7@<,n!BkM+$E,TfR$86%7@<,n!BkM+$H#R\C+D5h*Eb'3)B +4uC4E,TeN@W-9tATD6uFEDG +% uk.co.terryburton.bwipp/ean8 0.0 0 +%%EndData +%%EndResource % --END ENCODER ean8-- % --BEGIN ENCODER upca-- -% --SUGGESTS ean5 ean2-- +% --REQUIRES preamble raiseerror renlinear ean5 ean2-- % --DESC: UPC-A % --EXAM: 488581014973 % --EXOP: includetext % --RNDR: renlinear -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renlinear dup /uk.co.terryburton.bwipp findresource put -dup /ean2 dup /uk.co.terryburton.bwipp findresource put -dup /ean5 dup /uk.co.terryburton.bwipp findresource put -begin -/upca { - - 20 dict begin - - /options exch def - /barcode exch def % We are given a barcode string - - /dontdraw false def - /includetext false def % Enable/disable text - /textfont /Helvetica def - /textsize 12 def - /textyoffset -4 def - /height 1 def - /addongap 12 def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - /textfont textfont cvlit def - /textsize textsize cvr def - /textyoffset textyoffset cvr def - /height height cvr def - /addongap addongap cvr def - - % Split off the addon - barcode ( ) search { - /barcode exch def - pop - /addon exch def - } { - pop - /addon () def - } ifelse - - % Add checksum digit to barcode - /pad 12 string def % Create pad one bigger than barcode - /checksum 0 def - 0 1 10 { - /i exch def - /barchar barcode i get 48 sub def - i 2 mod 0 ne { - /checksum checksum barchar add def - } { - /checksum checksum barchar 3 mul add def - } ifelse - } for - /checksum 10 checksum 10 mod sub 10 mod def - pad 0 barcode putinterval % Add barcode to the start of the pad - pad 11 checksum 48 add put % Put ascii for checksum at end of pad - /barcode pad def - - % Create an array containing the character mappings - /encs - [ (3211) (2221) (2122) (1411) (1132) - (1231) (1114) (1312) (1213) (3112) - (111) (11111) (111) - ] def - - % Create a string of the available characters - /barchars (0123456789) def - - /sbs 59 string def - /txt 12 array def - - % Put the start character - sbs 0 encs 10 get putinterval - - % Left side - 0 1 5 { - % Lookup the encoding for the each barcode character - /i exch def - barcode i 1 getinterval barchars exch search - pop % Discard true leaving pre - length /indx exch def % indx is the length of pre - pop pop % Discard seek and post - /enc encs indx get def % Get the indxth encoding - sbs i 4 mul 3 add enc putinterval % Put encoded digit into sbs - i 0 eq { % First digit is before the guard bars - txt 0 [barcode 0 1 getinterval -7 textyoffset textfont textsize 2 sub] put - } { - txt i [barcode i 1 getinterval i 7 mul 4 add textyoffset textfont textsize] put - } ifelse - } for - - % Put the middle character - sbs 6 4 mul 3 add encs 11 get putinterval - - % Right side - 6 1 11 { - % Lookup the encoding for the each barcode character - /i exch def - barcode i 1 getinterval barchars exch search - pop % Discard true leaving pre - length /indx exch def % indx is the length of pre - pop pop % Discard seek and post - /enc encs indx get def % Get the indxth encoding - sbs i 4 mul 8 add enc putinterval % Put encoded digit into sbs - i 11 eq { % Last digit is after guard bars - txt 11 [barcode 11 1 getinterval 96 textyoffset textfont textsize 2 sub] put - } { - txt i [barcode i 1 getinterval i 7 mul 8 add textyoffset textfont textsize] put - } ifelse - } for - - % Put the end character - sbs 56 encs 12 get putinterval - - /sbs [sbs {48 sub} forall] def - includetext { - /bhs [4{height}repeat 10{height .075 sub}repeat height height 10{height .075 sub}repeat 4{height}repeat] def - /bbs [0 0 0 0 10{.075}repeat 0 0 10{.075}repeat 0 0 0 0] def - } { - /bhs [30{height}repeat] def - /bbs [30{0}repeat] def - /txt [] def - } ifelse - /guardrightypos 0 def - - % Append the addon - addon () ne { - /addopts << - /dontdraw true - /includetext true - /height height 0.15 sub - /textxoffset 95 addongap add - /textsize textsize - /textfont textfont - >> def - addon length 2 eq {addon addopts //ean2 exec} if - addon length 5 eq {addon addopts //ean5 exec} if - /addcode exch def - /sbs [sbs aload pop addongap addcode (sbs) get aload pop] def - /bhs [bhs aload pop addcode (bhs) get {.075 sub} forall] def - /bbs [bbs aload pop addcode (bbs) get {.075 add} forall] def - /txt [txt aload pop addcode (txt) get aload pop] def - /guardrightypos height 72 mul 6 sub def - } if - - % Return the arguments - << - /ren //renlinear - /sbs sbs - /bhs bhs - /bbs bbs - /txt txt - /opt options - /guardrightpos 10 - /guardrightypos guardrightypos - /borderbottom 5 - >> - - dontdraw not //renlinear if - - end - -} bind def -/upca dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp upca 0.0 0 0 0 +%%BeginData: 65 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\D_ +?-CEcQG7F`MSBDD #CBBl J$S g6- ] D3% niO DDd S:06M% _@ rEuAAT Dg: +@Wc^5Df.1:GA2#8 P1l(D Ops 'eE +< =' L_Q "0O ps'_E- ,f 4DKCt) Ou" +b#@<,jrA7^ofOu" b%Df 0Z- Ea a/ 7Am oLs AWe i&Bl +7EsF_#'*AU&;>Am oLsA W ei &F Cf] =Ao DR/O irnD0 +6CcMFE;/BAV^bX1 GX4aVtcOu8C 3DfBf 4Df0W CP,i2 'Ci a0N4aW>WI? IQm30Ia6V33 +Qn!BlU*FE2M8P!+ /T/Wr;\ FcnqO1 OXV5/ Tc# UAWeitP#Zp nAWe*t3A5;i +FD5Z2F-8_M1OYEcDfBf4Df0WCOu%NL8M>0sG][P9DKI"CAU&FE;/BAWe^01G>#B4uCM09S+E@:WneDJ*Bs+CSekDf02rE0;l;1LXg)Df0Z.G][P9DK +LmBF`)83FHUKf04AC%Df0Z.G][P9DKI"0A7TUrFCf]=AoDR/OtDhQI?IQ-FCAm$+E).6Gp$X3B5)I/0/%?SBldi +sEcQ)=P!=AX<.0p$@:WneDN\Ib!0V2-A7TUrP%'4KP&6?b@:WneDN\Ib"d3_c"FDe2GA2#8/p2 +,C6"4856"FM%DG4VZB67gI-:)0Q/T5MLAoD]4U!0T-o!/LZ3$@=F?P!5$b04J@1@q]:k+ +C\c"@rGmh+DI!3LbP!kOu$g.!g7;S!0V2G04S[,@r$..D'3>%ARfLsF_r71@<,jk@<.M3Ou%N5 +04S[,@r$..D'3>%ARfLsF_r71@<,jk@<./+P&-9^Ou%NL +U$Bf.eWJCnEC6CA^@<,jrA7^p5L^]G0HX^E(@rGmhL^TA=@q]F`CNFW8LbOtmP&5P!@WuO*E%Z +9P@mOR4A4($A@r"JHB5)IJ,Y;l`DfTl0@rrhn:dZg#+Cf(r@r!2tBkM.%+E2@>G%kJuA1oTV@; +0doATDg0EfrY8P#Qjm<,c8VL]CmmEas#uAWh=X@:Y0%@q]F`CNFW8LbOtmP'AWh@<,jrA7Zm&@ +:YNW04f$2F!+\I">_ef0ocAl1,:SE">V\e16)Jl1bg_F">MVe16)Jl1,CYF">MVc1l_\n1GLYF +">MYd1QDSo0ekGD"#2MbNWh-l0ekDC"#2Mb?'6us@UX:eBOPq&NX@Hp1,CaE2E*TUOu"b4@WR> +eP,4FCf]=F(or3+C1.TI?ITYP"9Y'F,1$V"HmSW"-N[rDI[a +D$^+/GH&)Z\!Jh,1056S5Ou$QUEas#uAKY]C!Kp,c@<,jk@<-FP5*CngFcp2eBl7I+P!5$bP') +q104f$2+D#G#F!,17A9a81Ou%/gF!,1Q"HmSW#a,4"DI\iTBo!.[4aV9qFGLP"]t/G]\1KAnH*qFGORm!H_mtFEqe:AohO*+EV1>FCoH/F5?'9G\P#Zpn8986]LcAs`@rmG7P"Us`06:TD+Bot0@WQmP0TrD`P"ArB1ML` +:Cis9"FCf]=HS8iAF!+\C"FFfnBkM+$I?K5=$@?GtBkM+$MERAqRZaXuP(RFZBkM+$+D>>#B4u +CC$@?GtBkM+$MERAqRZaXuP(SPnHY?u)B4uC8P(R&'1G<3HF!+\C!/LW2!/LW2$@@XnR@0LlP( +SPjL]E5DO>IL +]DjdK3aWr06DG\+BosoOu%NL15`DKKE0@FE2M805+p2B4uB0BOtmjBQT+q)4?qVW@r@)G]\1 +KAnH*qF0/$mFDDIA>I?IQ0/$mFDDdSAI?IP_@:WnYDe*FB5*@]TF(025>9IurF-6TfF^\fkDf02rE$/ +S"A7KOgAW?k6@WR]*Oogeh?'6us@VBg*>9IBgF-6TfF^\fk@rGmhNWWa(F-91CMERAqRZaXuP" +ArB1G<3HF!+[0@UaDA!g7\7A7T1gA7^c'@UaDA97)OZR@0M,!I^,&?'6usFEhmM>9J$4FHQ]gF +^\fk@rGmhNWXBJFHT:[!g7\3Ou"b(F^]<$EbT0"FEqhDF!,.-BkM+$Le*\FL^'$AOu%NL<'38r +Eb0,A061WACh[cu@<+#B@WNZ5@WO23BQG;*BQGh9@WNZ$@WO2EG]Y'MG]YTWE-*4@E-,f4DK@I +DF^]<$EbT0"FDu/>L^GeJF^]<$EbT0"FEqhDF!,+<@<,n!BkM+$H#R\C04Jj?A7]djDfg)>D28 +?Z4s4BSDKKE0@<[lR0/%?WDJX$)ARTVB<0B7iOq*X206M5D@?NU5A1r(@/n8fPFCfK5H"(o:FD +l%L@WuO*E$/\&Anc-oEb0<1F`Lu'P')pJ06:]HE+*6lBl7RH\pKT_F(KH4@:O(eDJ+B\;u~> +% uk.co.terryburton.bwipp/upca 0.0 0 +%%EndData +%%EndResource % --END ENCODER upca-- % --BEGIN ENCODER upce-- -% --SUGGESTS ean5 ean2-- +% --REQUIRES preamble raiseerror renlinear ean5 ean2-- % --DESC: UPC-E % --EXAM: 00123457 % --EXOP: includetext height=0.4 % --RNDR: renlinear -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renlinear dup /uk.co.terryburton.bwipp findresource put -dup /ean2 dup /uk.co.terryburton.bwipp findresource put -dup /ean5 dup /uk.co.terryburton.bwipp findresource put -begin -/upce { - - 20 dict begin - - /options exch def % We are given an option string - /barcode exch def % We are given a barcode string - - /dontdraw false def - /includetext false def % Enable/disable text - /textfont /Helvetica def - /textsize 12 def - /textyoffset -4 def - /height 1 def - /addongap 12 def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - /textfont textfont cvlit def - /textsize textsize cvr def - /textyoffset textyoffset cvr def - /height height cvr def - /addongap addongap cvr def - - % Ensure 0 or 1 number systems - barcode 0 get dup 48 ne exch 49 ne and { - /barcode () def - } if - - % Split off the addon - barcode ( ) search { - /barcode exch def - pop - /addon exch def - } { - pop - /addon () def - } ifelse - - % Create an array containing the character mappings - /encs - [ (3211) (2221) (2122) (1411) (1132) - (1231) (1114) (1312) (1213) (3112) - (111) (111111) - ] def - - % Create a string of the available characters - /barchars (0123456789) def - - /mirrormaps - [ (000111) (001011) (001101) (001110) (010011) - (011001) (011100) (010101) (010110) (011010) - ] def - - % Derive the equivalent UPC-A for its checksum - /upcacode (00000000000) 11 string copy def - upcacode 0 barcode 0 get put - barcode 6 get 48 sub 2 le { - upcacode 1 barcode 1 2 getinterval putinterval - upcacode 3 barcode 6 1 getinterval putinterval - upcacode 8 barcode 3 3 getinterval putinterval - } if - barcode 6 get 48 sub 3 eq { - upcacode 1 barcode 1 3 getinterval putinterval - upcacode 9 barcode 4 2 getinterval putinterval - } if - barcode 6 get 48 sub 4 eq { - upcacode 1 barcode 1 4 getinterval putinterval - upcacode 10 barcode 5 1 getinterval putinterval - } if - barcode 6 get 48 sub 5 ge { - upcacode 1 barcode 1 5 getinterval putinterval - upcacode 10 barcode 6 1 getinterval putinterval - } if - /checksum 0 def - 0 1 10 { - /i exch def - /barchar upcacode i get 48 sub def - i 2 mod 0 ne { - /checksum checksum barchar add def - } { - /checksum checksum barchar 3 mul add def - } ifelse - } for - /checksum 10 checksum 10 mod sub 10 mod def - /pad 8 string def - pad 0 barcode putinterval % Add barcode to the start of the pad - pad 7 checksum 48 add put % Put ascii for checksum at end of pad - /barcode pad def - /txt 8 array def - txt 0 [barcode 0 1 getinterval -7 textyoffset textfont textsize 2 sub] put - - % Determine the mirror map based on checksum - /mirrormap mirrormaps checksum get def - - % Invert the mirrormap if we are using a non-zero number system - barcode 0 get 48 eq { - /invt mirrormap length string def - 0 1 mirrormap length 1 sub { - /i exch def - mirrormap i get 48 eq { - invt i 49 put - } { - invt i 48 put - } ifelse - } for - /mirrormap invt def - } if - - /sbs 33 string def - - % Put the start character - sbs 0 encs 10 get putinterval - - 1 1 6 { - /i exch def - % Lookup the encoding for the each barcode character - barcode i 1 getinterval barchars exch search - pop % Discard true leaving pre - length /indx exch def % indx is the length of pre - pop pop % Discard seek and post - /enc encs indx get def % Get the indxth encoding - mirrormap i 1 sub get 49 eq { % Reverse enc if 1 in this position in mirrormap - /enclen enc length def - /revenc enclen string def - 0 1 enclen 1 sub { - /j exch def - /char enc j get def - revenc enclen j sub 1 sub char put - } for - /enc revenc def - } if - sbs i 1 sub 4 mul 3 add enc putinterval % Put encoded digit into sbs - txt i [barcode i 1 getinterval i 1 sub 7 mul 4 add textyoffset textfont textsize] put - } for - - txt 7 [barcode 7 1 getinterval 6 7 mul 11 add textyoffset textfont textsize 2 sub] put - - % Put the end character - sbs 27 encs 11 get putinterval - - /sbs [sbs {48 sub} forall] def - includetext { - /bhs [height height 12{height .075 sub}repeat height height height] def - /bbs [0 0 12{.075}repeat 0 0 0] def - } { - /bhs [17{height}repeat] def - /bbs [17{0}repeat] def - /txt [] def - } ifelse - /guardrightypos 0 def - - % Append the addon - addon () ne { - /addopts << - /dontdraw true - /includetext true - /height height 0.15 sub - /textxoffset 51 addongap add - /textsize textsize - /textfont textfont - >> def - addon length 2 eq {addon addopts //ean2 exec} if - addon length 5 eq {addon addopts //ean5 exec} if - /addcode exch def - /sbs [sbs aload pop addongap addcode (sbs) get aload pop] def - /bhs [bhs aload pop addcode (bhs) get {.075 sub} forall] def - /bbs [bbs aload pop addcode (bbs) get {.075 add} forall] def - /txt [txt aload pop addcode (txt) get aload pop] def - /guardrightypos height 72 mul 6 sub def - } if - - % Return the arguments - << - /ren //renlinear - /sbs sbs - /bhs bhs - /bbs bbs - /txt txt - /opt options - /guardrightpos 10 - /guardrightypos guardrightypos - /borderbottom 5 - >> - - dontdraw not //renlinear if - - end - -} bind def -/upce dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp upce 0.0 0 0 0 +%%BeginData: 76 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\D_ +?-CEcQG7F`MSBDD #CBBl J$S g6- ] D3% niO DDd S:06M% _@ rEuAAT Dg: +@Wc^5Df.1:GA2#8 P1l(D Ops 'eE +< I+ L_Q "0O ps'_E- ,f 4DKCt) Ou" +b#@<,jrA7^ofOu" b%Df 0Z- Ea a/ 7Am oLs AWe i&Bl +7EsF_#'*AU&;>Am oLsA W ei &F Cf] =Ao DR/O irnD0 +6CcMFE;/BAV^bX1 GX4aVtcOu8C 3DfBf 4Df0W CP,i2 'Ci a0N4aW>WI? IQm30Ia6V33 +Qn!BlU*FE2M8P!+ /T/Wr;\ FcnqO1 OXV5/ Tc# UAWeitP#Zp nAWe*t3A5;i +FD5Z2F-8_M1OYEcDfBf4Df0WCOu%NL8M>0sG][P9DKI"CAU&FE;/BAWe^01G>#B4uCM09S+E@:WneDJ*Bs+CSekDf02rE0;l;1LXg)Df0Z.G][P9DK +LmBF`)83FHUKf04AC%Df0Z.G][P9DKI"0A7TUrFCf]=AoDR/OtDhQI?IQ$K04K->E,[FPE+; +=G@:VZ7A5@):ASu.&BT=E*A7R91DBNP0EZe@Y6S1_LD09oA+C\n)1*CLU+>k9PBkM.%F"]1e@; +0doATDg0EfrY8P#Pn!Eas#uAV^>L99M8j0Tp:95):qVD3>$K04K->E,[FPE+;=G@:W,UD.7's; +gEG+ASmGQNW_*l1,=jm0f1U>NW_'k1GXsn0etO>NW_'k0f4mn0f(O>NW_' +l0f+gm1GLU>NWV!j0ocGm0ekC;0jTqu04J@1@q]:kF,gS]0etOA2)[BQ3Kc0OD/"$2DfT]'E-! +.+NWq0k0JP::NWq0k0eb=:NWq0k0ek@:NWq0k0ekC:NWq0l0JG49NWq0l0eb:9NWq0l0ek@9NW +q0l0JP79NWq0l0JP:9NWq0l0eb=9?'6usF`:i!@rGmhNXINp0JG170JG170Sg+"V32^Z1NdYH@ +:O4dAV^=q@<,jrA7^PsP"Us_@UX:eDe*F8#*MW80TrDk!g6u=F`:i!@rGmhL]LsnEas#uAV^AC +!g66?H$+(9@:O4dAV^Ft@<,jrA7^Q$L]NZ4P'M1h@prkcA7^Q&@UX:eDe*F8",I&B9Tj[LP#Pn +!Eas#uAV^PR98G9bWJCY>4aVH$tiT@UX:eDe*F8#*MW80TrDk"d2K)F`:i!@rGmhL]LsnE +as#uAV^AC"d2QBH$+(9@:O4dAV^\&@<,jrA7^Q$L]NZ4P'MJ=<%h`pARfLsF_up7Ou%moL]N;= +HS9)r5*@]T@UX:eBOPp(F`:i!@rGmh+DI!3LbP!kOu$g.!g7;S!0V2G04S[,@r$..D'3>%ARfL +sF_r71@<,jk@<.M3Ou%N504S[,@r$..D'3>%ARfLsF_r71@<,jk@<./+P&-9^Ou%NLU$Bf.eWJCnEC6CA^@<,jrA7^p5L^9/,HX^E(@rGmhL^0)9@q]F`CN +FW8LbOtmP&5P!@WuO*E%Z9P@msj8A4($A@r"JHB5)IJ,Y;l`DfTl0@rrhn:dZg'+Cf(r@r!2tB +kM.%+E2@>G%kJuA1oTV@;0doATDg0EfrY8P#Qjm<%i3!A;CMSV33WR@:Y/o@UX:eDe*FBH#R2& +L^.F'ARfLsF_upgOo^_j04J@1@rGmh+E1b"Ou"b5G]\`IOpR:-FEhn`!*^RT@<,jrA7^PsL]NZ +4FCf]=G].2+F(KG9FCf]=H#I;,F(KG9FCf]=AoDR/+EV1>FE;/BAV^DNWEk[305YEDEc5u8@;m +?+Bl\64Ec#6(F!+t+ARfLsF`!:7Ou$QUEas#uAV^>L98G9b4aShrDK^+ED/"$2DfT]'E0=[nV3 +3Wj!/LYmBl\64Ec#6(P%'4JP,Wd]Bp(ZC1MpiHEc5u8@;m?'P"UTbP!+/+DK^+EBo"L,G^XpQD +K^+EBo"I+G^Y`TI?I,SD/"$2DfT]'E$/k4G'&m'I?IP_F(03H+d/[b1NR#HL]D"(@rmG5P"Us` +L]N;4L^&2ZBp(ZC1Lad5@rGmh+DHW4P"]=nEarckEc[C-P)YWIP%$(YDIe!T5*@^bFcpl#ASu! +#ASu"!+DG_(G`k^_1MpiHEc5u8@;m?'L]N[FCf]=F(or3+C1.TI?I-CG]\`H>9IB`Eas#uAV^SI!Kp-4#)EMICkr^e!H_mtFEh_9AohO +*Oo]Z9G]\4LAnH*qF>#B4uB0BOtmjBQT%=HY?u)B4uCE4d +h_,P,WkmK4nh1B4uB0BOtmjBQPA1ASGdjF9I471OYEd05#E9 +Eb'3)B4uC4E,TfR!0T-HA7TUrNW>5ZHS8f5@:WneDKKH7F +E;/BAW?q:DKBB2P&5PSA7TUrFCf]=F(or3I=!)YAU&<@:WneDKKH7 +FCoH/FH-NIDKBB2P&5PSA7TUrFCf]=AoDR/I=!)YAU&"(GqbP"U.Z4dh_,P,Wkm8R7K804JC3+Bost@WR\6P'(2DA7KOgA +W?k%@WR]*H\stSR@99>I?I0-Ou"b5G]Y'4+EVjMOogeh@:WnYDe*F>"*Ad0P"Ur>P'(&n1G>#B4uCC8%QOF +% uk.co.terryburton.bwipp/upce 0.0 0 +%%EndData +%%EndResource % --END ENCODER upce-- % --BEGIN ENCODER isbn-- -% --REQUIRES ean13-- -% --SUGGESTS ean5 ean2-- +% --REQUIRES preamble raiseerror renlinear ean5 ean2 ean13-- % --DESC: ISBN -% --EXAM: 978-1-56592-479 54495 +% --EXAM: 978-1-56592-479-6 54495 % --EXOP: includetext guardwhitespace % --RNDR: renlinear -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renlinear dup /uk.co.terryburton.bwipp findresource put -dup /ean13 dup /uk.co.terryburton.bwipp findresource put -begin -/isbn { - - 20 dict begin - - /options exch def % We are given an options string - /isbntxt exch def % We are given the isbn text with dashes - - /dontdraw false def - /includetext false def % Enable/disable ISBN text - /isbnfont /Courier def - /isbnsize 9 def - /isbnpos (unset) def - /height 1 def - /addongap 12 def - /legacy false def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - /isbnfont isbnfont cvlit def - /isbnsize isbnsize cvr def - /height height cvr def - /addongap addongap cvr def - isbnpos (unset) eq { - /isbnpos height 72 mul 3 add def - } { - /isbnpos isbnpos cvr def - } ifelse - - % Split off the addon - isbntxt ( ) search { - /isbntxt exch def - pop - /addon exch def - } { - pop - /addon () def - } ifelse - - % Convert ISBN-10 to ISBN-13 - legacy not isbntxt length 13 le and { - /pad isbntxt length 4 add string def - pad 0 (978-) putinterval - pad 4 isbntxt putinterval - /isbntxt pad def - } if - - % Read the digits from isbntxt and calculate checksums - /isbn 13 string def - /checksum10 0 def - /checksum13 0 def - /i 0 def /n 0 def - { % loop - /isbnchar isbntxt i get 48 sub def - isbnchar -3 ne { % Ignore dashes - isbn n isbnchar 48 add put - n 9 lt { - /checksum10 checksum10 10 n sub isbnchar mul add def - } if - n 12 lt { - n 2 mod 0 eq { - /checksum13 isbnchar checksum13 add def - } { - /checksum13 isbnchar 3 mul checksum13 add def - } ifelse - } if - /n n 1 add def - } if - /i i 1 add def - i isbntxt length eq {exit} if - } loop - - % Add the ISBN header to the isbntxt - n 9 eq n 10 eq or { - /checksum 11 checksum10 11 mod sub 11 mod def - /isbn isbn 0 9 getinterval def - /pad 18 string def - } { - /checksum 10 checksum13 10 mod sub 10 mod def - /isbn isbn 0 12 getinterval def - /pad 22 string def - } ifelse - pad 0 (ISBN ) putinterval - pad 5 isbntxt putinterval % Add isbntxt to the pad - - % Add checksum digit - pad pad length 2 sub 45 put % Put a dash - checksum 10 eq { - pad pad length 1 sub checksum 78 add put % Check digit for 10 is X - } { - pad pad length 1 sub checksum 48 add put % Put check digit - } ifelse - /isbntxt pad def - - % Convert ISBN digits to EAN-13 - /barcode 12 string def - isbn length 9 eq { - barcode 0 (978) putinterval - barcode 3 isbn putinterval - } { - barcode 0 isbn putinterval - } ifelse - - % Append the addon - addon () ne { - 12 addon length add 1 add string - dup 0 barcode putinterval - dup 12 ( ) putinterval - dup 13 addon putinterval - /barcode exch def - } if - - % Get the result of encoding with ean13 - options (dontdraw) true put - options (addongap) addongap put - /args barcode options //ean13 exec def - - % Add the ISBN text - includetext { - isbn length 9 eq { - /isbnxpos -1 def - } { - /isbnxpos -12 def - } ifelse - args (txt) known { - /txt args (txt) get def - /newtxt txt length 1 add array def - newtxt 0 txt putinterval - newtxt newtxt length 1 sub [isbntxt isbnxpos isbnpos isbnfont isbnsize] put - args (txt) newtxt put - } { - args (txt) [ [isbntxt isbnxpos isbnpos isbnfont isbnsize] ] put - } ifelse - } if - - args (opt) options put - args - - dontdraw not //renlinear if - - end - -} bind def -/isbn dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp isbn 0.0 0 0 0 +%%BeginData: 44 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\AmoLsAWe i&Bl da$ FC f] =Ao DR/ OiN V@05 +5K:DKKH7FE;/BAV ^YU1 G DP! 5%OP! 5$bI =%,/F E2M8 Ou% NL5B lda$F Cf] =F(or3OtVt SBlda$FCf]= +G].2+F(KHR"a+^(ATX)PHS9)S@W$:!G]\1KAnH*qFDI[?gEes[WD0ou<@W!<++DGn+DI[?gEel +E4!Kq\FL^B5VHS8lBARfLsF_rie+Cf(r@r$..D)!`#$>u$+Blda$@q]:kP&-9^Ou%NL<,RL#P% +K&YL]W`SL]ET$HS8lBARfLsF_rih+DGn+DI[?gEZek*ARfLsF_rihOo^_%I=!VWBOt[hF*2=S1 +E^CQ@W#[h@<./+P&+WAARfLsF_rihOo^_%I?ITYP#O)P+Duu9Oo^_%I?IP_Bcq,G!KmJH1MItG +F(0$/G]]*XP!+/T5^eepI?J/ZL^B5-DMSX_4d'i404S[,@r$..D28R0BOt[hF*2=S0Sg+"C6GQ +P$^,7f1Gi"AU0TlI"G^Y`T055K:DKL,F+E1b"Ou"b#@<,jr +A7^Q*P,4H!@<-"%+C\c"@rGmh+E)4@Bl@m10/$mFDD>#B4uC +C89IX$@W$:4F5>p*F9G^Y`TI?IQ +% uk.co.terryburton.bwipp/isbn 0.0 0 +%%EndData +%%EndResource % --END ENCODER isbn-- % --BEGIN ENCODER ismn-- -% --REQUIRES ean13-- -% --SUGGESTS ean5 ean2-- +% --REQUIRES preamble raiseerror renlinear ean5 ean2 ean13-- % --DESC: ISMN % --EXAM: 979-0-2600-0043 % --EXOP: includetext guardwhitespace % --RNDR: renlinear -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renlinear dup /uk.co.terryburton.bwipp findresource put -dup /ean13 dup /uk.co.terryburton.bwipp findresource put -begin -/ismn { - - 20 dict begin - - /options exch def % We are given an options string - /ismntxt exch def % We are given the ismn text with dashes - - /dontdraw false def - /includetext false def % Enable/disable ISMN text - /ismnfont /Courier def - /ismnsize 9 def - /ismnpos (unset) def - /height 1 def - /addongap 12 def - /legacy false def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - /ismnfont ismnfont cvlit def - /ismnsize ismnsize cvr def - /height height cvr def - /addongap addongap cvr def - ismnpos (unset) eq { - /ismnpos height 72 mul 3 add def - } { - /ismnpos ismnpos cvr def - } ifelse - - % Split off the addon - ismntxt ( ) search { - /ismntxt exch def - pop - /addon exch def - } { - pop - /addon () def - } ifelse - - % Convert old ISMN to ISMN-13 - /legacytxt () def - ismntxt 0 1 getinterval (M) eq ismntxt length 13 le and { - /legacytxt ismntxt def - /pad ismntxt length 4 add string def - pad 0 (979-0-) putinterval - pad 6 ismntxt 2 ismntxt length 2 sub getinterval putinterval - /ismntxt pad def - } if - - % Read the digits from ismntxt and calculate checksums - /ismn 13 string def - /checksum 0 def - /i 0 def /n 0 def - { % loop - /ismnchar ismntxt i get 48 sub def - ismnchar -3 ne { % Ignore dashes - ismn n ismnchar 48 add put - n 12 lt { - n 2 mod 0 eq { - /checksum ismnchar checksum add def - } { - /checksum ismnchar 3 mul checksum add def - } ifelse - } if - /n n 1 add def - } if - /i i 1 add def - i ismntxt length eq {exit} if - } loop - /checksum 10 checksum 10 mod sub 10 mod def - - % Add the ISMN header to the ismntxt - legacy legacytxt () ne and { - /ismntxt legacytxt def - /pad 18 string def - } { - /pad 22 string def - } ifelse - pad 0 (ISMN ) putinterval - pad 5 ismntxt putinterval % Add ismntxt to the pad - - % Add checksum digit - pad pad length 2 sub 45 put % Put a dash - pad pad length 1 sub checksum 48 add put % Put check digit - /ismntxt pad def - - % Convert ISMN digits to EAN-13 - /barcode ismn 0 12 getinterval def - - % Append the addon - addon () ne { - 12 addon length add 1 add string - dup 0 barcode putinterval - dup 12 ( ) putinterval - dup 13 addon putinterval - /barcode exch def - } if - - % Get the result of encoding with ean13 - options (dontdraw) true put - options (addongap) addongap put - /args barcode options //ean13 exec def - - % Add the ISMN text - includetext { - ismntxt length 18 eq { - /ismnxpos -1 def - } { - /ismnxpos -12 def - } ifelse - args (txt) known { - /txt args (txt) get def - /newtxt txt length 1 add array def - newtxt 0 txt putinterval - newtxt newtxt length 1 sub [ismntxt ismnxpos ismnpos ismnfont ismnsize] put - args (txt) newtxt put - } { - args (txt) [ [ismntxt ismnxpos ismnpos ismnfont ismnsize] ] put - } ifelse - } if - - args (opt) options put - args - - dontdraw not //renlinear if - - end - -} bind def -/ismn dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp ismn 0.0 0 0 0 +%%BeginData: 42 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\ fAL_Q" 0O ps'_E- ,f4 +DKCt)Ou"b*F)>f: G]]*4 Ou" b%D f0 Z- Eaa /7A moLsAW ei &Bl7Es F_# +'*AU&;>AmoLsAWe i&Bl e-/ FC f] =Ao DR/ OiN V@05 +5KEDKKH7FE;/BAV ^YU1 G f:AU &DP! 5%OP! 5$bI =%,/F E2M8 Ou% NL f:AU&<< BmO>5B le-/F Cf] =F(or3OtVt SBle-/FCf]= +G].2+F(KHR"a+^(ATX)PHS9)SD/OH,G]\1KAnH*qF4uBle-/FEhn`! +/LZ=9TB-JP!*N#D/OH?FHU*h%?b._"FDef:G]]*X +L]ikAP,4f +:G]Y'I@:YNWI?IP_Ble-/L^fNDOu"b$BOt[hF*2>U!0T,kBnubP1Gf)BOPq;rK;#EBle-/+Dr<9F)>f)BOPq;0TlI"G]&f)BOPp(@q]F`CNFW8Oo^_%I=!VWBOt[hF*2=BBle-/@q]:kL +]`fV@q]F`CNFW8Oo^_%I?ITYP#O)P+Duu9Oo^_%I?IP_Bcq,G!KmJH1MItGF)>f:G]]*XP!+/T +5^eepI?J.p@q]F`CNFW8L^IX*ARfLsF_upAP%p/ZL^K;[Ou$ocB45:q+DbV%@:OS)G]\rGP&6? +bHS9)SD/OH?FHA;D"aV33W_P#ZI0A;C5G"\DWe:*> +^FE+*:5"_i$pDKL,FP'M"TA0>i"Af:G]Y'I@:YNW04J@1@rGmh+DGn6DMS:K%$F;I1LXg)Df1R8P&5Q%$t3[WDf1_IOo^@>O +o^`BOuS6t@UX:eDe*FBH'1.C%#t?2P'N3ML^dd'A8c@KGqWW8Eas#uAWf6?1OYEcDfBf4Df0WV +#\7jkFC]E#GB@kJAWh:VE-,f4DKCgD@:WneDJ*Bs@:WneDJ*BsP'AWgEbBG9@UX:eDe*E%DfBf +4Df0VL04eR00f+tWOu$fi@r-9uATVL.FF,-EF)>f:AU&f:AU&f:G]Y'BF)>f:AU&f:AU&f:AU&Ble-/FCf]=F(or3+C1.T@<-"%NWXBJFDbZ6FEhnjG^XpIEbBHR"*Ad0>9I,mBle-/FEhmMBle +-/FCf]=G].2+F(KG9Ble-/FCf]=H#I;,F(KG9Ble-/FCf]=AoDR/+DGn6DKKH7FE;/BAKY8$?' +9G\P#Zpn<+0f[F,g?@E--#;FD5Z2F-:cVEbBG9A8c@-A9)+&P&N'-Eb0-)Bl7KjEfsCb3IR&#O +u"b*F)>fX30If*F_`U>D_?-CEcQG7F`MSBDD#CBBlJ#6A7]@eDImj"F)Q2A@qCgGOuY1:ATVm" +@r#drB9KiQP'(hWFDtYuCM@[!I?IP~> +% uk.co.terryburton.bwipp/ismn 0.0 0 +%%EndData +%%EndResource % --END ENCODER ismn-- % --BEGIN ENCODER issn-- -% --REQUIRES ean13-- -% --SUGGESTS ean2 ean5-- +% --REQUIRES preamble raiseerror renlinear ean2 ean5 ean13-- % --DESC: ISSN % --EXAM: 0317-8471 00 05 % --EXOP: includetext guardwhitespace % --RNDR: renlinear -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renlinear dup /uk.co.terryburton.bwipp findresource put -dup /ean13 dup /uk.co.terryburton.bwipp findresource put -begin -/issn { - - 20 dict begin - - /options exch def % We are given an options string - /issntxt exch def % We are given the issn text with dashes - - /dontdraw false def - /includetext false def % Enable/disable ISSN text - /issnfont /Courier def - /issnsize 9 def - /issnpos (unset) def - /height 1 def - /addongap 12 def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - /issnfont issnfont cvlit def - /issnsize issnsize cvr def - /height height cvr def - /addongap addongap cvr def - issnpos (unset) eq { - /issnpos height 72 mul 3 add def - } { - /issnpos issnpos cvr def - } ifelse - - % Split off the ISSN - issntxt ( ) search { - /issntxt exch def - pop - /seqvar exch def - } if - - % Split off the sequence variant and 2 digit addon - seqvar ( ) search { - /seqvar exch def - pop - 2 string dup exch 0 4 -1 roll putinterval /addon exch def - } { - pop - /addon () def - } ifelse - - % Read the digits from issntxt and calculate checksums - /issn 8 string def - /checksum 0 def - /i 0 def /n 0 def - { % loop - /issnchar issntxt i get 48 sub def - issnchar -3 ne { % Ignore dashes - issn n issnchar 48 add put - n 7 lt { - /checksum checksum issnchar 8 n sub mul add def - } if - /n n 1 add def - } if - /i i 1 add def - i issntxt length eq {exit} if - } loop - /checksum 11 checksum 11 mod sub 11 mod def - - % Add the ISSN header to the issntxt - /pad 14 string def - pad 0 (ISSN ) putinterval - pad 5 issntxt putinterval % Add issntxt to the pad - - % Add checksum digit - pad 13 checksum 48 add dup 58 eq {pop 88} if put % Put check digit - /issntxt pad def - - % Convert ISSN digits to EAN-13 - /barcode issn 0 7 getinterval def - - % Append the sequence variant - /barcode 12 string def - barcode 0 (977) putinterval - barcode 3 issn putinterval - barcode 10 seqvar putinterval - - % Append the addon - addon () ne { - 12 addon length add 1 add string - dup 0 barcode putinterval - dup 12 ( ) putinterval - dup 13 addon putinterval - /barcode exch def - } if - - % Get the result of encoding with ean13 - options (dontdraw) true put - options (addongap) addongap put - /args barcode options //ean13 exec def - - % Add the ISSN text - includetext { - /issnxpos 10 def - args (txt) known { - /txt args (txt) get def - /newtxt txt length 1 add array def - newtxt 0 txt putinterval - newtxt newtxt length 1 sub [issntxt issnxpos issnpos issnfont issnsize] put - args (txt) newtxt put - } { - args (txt) [ [issntxt issnxpos issnpos issnfont issnsize] ] put - } ifelse - } if - - args (opt) options put - args - - dontdraw not //renlinear if - - end - -} bind def -/issn dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp issn 0.0 0 0 0 +%%BeginData: 39 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\AmoLsAWe i&Bl e?5 FC f] =Ao DR/ OiN V@05 +5KKDKKH7FE;/BAV ^YU1 G X4aVtc Ou8C3DfBf4D +f0WCP,i2'Cia0N4 aW>WI? IQm 30Ia 6V33 Qn! BlU*FE2M8P !+/T/Wr;\Fc +nqO1OXV5/Tc#UAW eitP# ZpnA We*t3 A5;i FD5 Z2F-8_M1OY EcDfBf4Df0W +COu%NL8M=e!F)H) 2G][P 9DKI" 8F)u5 @AU &>#B4u +CM09S+E@:WneDJ*Bs+CSekDf02rE0;l;1MLoODKL,FNWC8cNI*Ou$epBle?5FEh +nj@Zim$P!FGY<.0p@04S[,@r$..D28R0BOt[hF*2>U$^,7fWJCqFC6CA+E+*:5%[*ZO1N6c5L] +EG=8Q/P_+Hh"h@:Y/tBle?5FEhnjH#R2&L^dj-ARfLsF_upgOo^_*LcU\^H]iN-=FH?3P'AWoF +)u5@G]Y'I@:YNW04J@1@rGmh+DGn5ZH\`)=A7TUrP%'RTL]NY +>P,4=$L]CmmEas#uAWh>%3/A!'!?dPNOuS7,@:WneDN]8u@UX:eDe*FB5*@^MP#Q@=FD5Z2F,g +N:Df0Z-Eaa06EckrVG].PCBl@m1NX0'(A8c?u@;oXcA8c?u@;qBS04Am6F!+q#Eas#uAKYo1FD +5Z2F"]1X@;[eUP!>*cBl7EsF_#'*AU&Ble?5FCf]=F(or3+C1.T@<-"%NW +XBJFDbZ6FEhnjG^XpIEbBHR"*Ad0>9I,mBle?5FEhmMBle?5FCf]=G].2+F(KG9Ble?5FCf]=H +#I;,F(KG9Ble?5FCf]=AoDR/+DGnD_?-CEcQG +7F`MSBDD#CBBlJ#6A7]@eDImj"F)Q2A@qCgGOuY1:ATVm"@r#drB9KiQP'(hWFDtYuCM@[!I?I +P~> +% uk.co.terryburton.bwipp/issn 0.0 0 +%%EndData +%%EndResource % --END ENCODER issn-- % --BEGIN ENCODER code128-- +% --REQUIRES preamble raiseerror renlinear-- % --DESC: Code 128 % --EXAM: Count01234567^FNC2! % --EXOP: includetext parsefnc % --RNDR: renlinear -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renlinear dup /uk.co.terryburton.bwipp findresource put -begin -/code128 { - - 20 dict begin % Confine variables to local scope - - /options exch def % We are given an option string - /barcode exch def % We are given a barcode string - - /dontdraw false def - /includetext false def % Enable/disable text - /textfont /Courier def - /textsize 10 def - /textxoffset 0 def - /textyoffset -7 def - /height 1 def - /encoding (auto) def - /raw false def - /parse false def - /parsefnc false def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - /textfont textfont cvlit def - /textsize textsize cvr def - /textxoffset textxoffset cvr def - /textyoffset textyoffset cvr def - /height height cvr def - - % Parse ordinals of the form ^NNN to ASCII - parse { - /msg barcode length string def - /j 0 def - barcode - { % loop - (^) search { - dup msg exch j exch putinterval - length j add 1 add /j exch def - pop - dup 0 3 getinterval cvi msg exch j 1 sub exch put - dup length 3 sub 3 exch getinterval - } { - dup msg exch j exch putinterval - length j add /j exch def - /barcode msg 0 j getinterval def - exit - } ifelse - } loop - } if - - /barlen barcode length def - - % Special function characters - /sta -1 def /stb -2 def /stc -3 def - /swa -4 def /swb -5 def /swc -6 def - /fn1 -7 def /fn2 -8 def /fn3 -9 def - /fn4 -10 def /sft -11 def /stp -12 def - /lka -13 def /lkc -14 def % CC-A/B and CC-C linkage - - % Character maps for each state - /charmaps [ - % A B C A B C A B C - [ 32 32 (00) ] [ (!) (!) (01) ] [ (") (") (02) ] % 0-2 - [ (#) (#) (03) ] [ ($) ($) (04) ] [ (%) (%) (05) ] % 3-5 - [ (&) (&) (06) ] [ (') (') (07) ] [ 40 40 (08) ] % 6-8 - [ 41 41 (09) ] [ (*) (*) (10) ] [ (+) (+) (11) ] % 9-11 - [ (,) (,) (12) ] [ (-) (-) (13) ] [ (.) (.) (14) ] % 12-14 - [ (/) (/) (15) ] [ (0) (0) (16) ] [ (1) (1) (17) ] % 15-17 - [ (2) (2) (18) ] [ (3) (3) (19) ] [ (4) (4) (20) ] % 18-20 - [ (5) (5) (21) ] [ (6) (6) (22) ] [ (7) (7) (23) ] % 21-23 - [ (8) (8) (24) ] [ (9) (9) (25) ] [ (:) (:) (26) ] % 24-26 - [ (;) (;) (27) ] [ (<) (<) (28) ] [ (=) (=) (29) ] % 27-29 - [ (>) (>) (30) ] [ (?) (?) (31) ] [ (@) (@) (32) ] % 30-32 - [ (A) (A) (33) ] [ (B) (B) (34) ] [ (C) (C) (35) ] % 33-35 - [ (D) (D) (36) ] [ (E) (E) (37) ] [ (F) (F) (38) ] % 36-38 - [ (G) (G) (39) ] [ (H) (H) (40) ] [ (I) (I) (41) ] % 39-41 - [ (J) (J) (42) ] [ (K) (K) (43) ] [ (L) (L) (44) ] % 42-44 - [ (M) (M) (45) ] [ (N) (N) (46) ] [ (O) (O) (47) ] % 45-47 - [ (P) (P) (48) ] [ (Q) (Q) (49) ] [ (R) (R) (50) ] % 48-50 - [ (S) (S) (51) ] [ (T) (T) (52) ] [ (U) (U) (53) ] % 51-53 - [ (V) (V) (54) ] [ (W) (W) (55) ] [ (X) (X) (56) ] % 54-56 - [ (Y) (Y) (57) ] [ (Z) (Z) (58) ] [ ([) ([) (59) ] % 57-59 - [ 92 92 (60) ] [ (]) (]) (61) ] [ (^) (^) (62) ] % 60-62 - [ (_) (_) (63) ] [ 0 (`) (64) ] [ 1 (a) (65) ] % 63-65 - [ 2 (b) (66) ] [ 3 (c) (67) ] [ 4 (d) (68) ] % 66-68 - [ 5 (e) (69) ] [ 6 (f) (70) ] [ 7 (g) (71) ] % 69-71 - [ 8 (h) (72) ] [ 9 (i) (73) ] [ 10 (j) (74) ] % 72-74 - [ 11 (k) (75) ] [ 12 (l) (76) ] [ 13 (m) (77) ] % 75-77 - [ 14 (n) (78) ] [ 15 (o) (79) ] [ 16 (p) (80) ] % 78-80 - [ 17 (q) (81) ] [ 18 (r) (82) ] [ 19 (s) (83) ] % 81-83 - [ 20 (t) (84) ] [ 21 (u) (85) ] [ 22 (v) (86) ] % 84-86 - [ 23 (w) (87) ] [ 24 (x) (88) ] [ 25 (y) (89) ] % 87-89 - [ 26 (z) (90) ] [ 27 ({) (91) ] [ 28 (|) (92) ] % 90-92 - [ 29 (}) (93) ] [ 30 (~) (94) ] [ 31 127 (95) ] % 93-95 - [ fn3 fn3 (96) ] [ fn2 fn2 (97) ] [ sft sft (98) ] % 96-98 - [ swc swc (99) ] [ swb fn4 swb ] [ fn4 swa swa ] % 99-101 - [ fn1 fn1 fn1 ] [ sta sta sta ] [ stb stb stb ] % 102-104 - [ stc stc stc ] [ stp stp stp ] % 105-106 - ] def - - % Invert charmaps to give character to value maps for each state - /charvals [ 109 dict 109 dict 109 dict ] def - 0 1 charmaps length 1 sub { - /i exch def - /encs charmaps i get def - 0 1 2 { - /j exch def - encs j get dup type /stringtype eq {0 get} if % convert string to ASCII if required - charvals j get exch i put - } for - } for - /seta charvals 0 get def - /setb charvals 1 get def - /setc charvals 2 get def - - % Include pseudo characters for GS1-128 Composite linkage identifiers - seta lka seta swb get put seta lkc seta swc get put - setb lka setb swc get put setb lkc setb swa get put - setc lka setc swa get put setc lkc setc swb get put - - raw {/encoding (raw) def} if - - encoding (raw) eq { - /cws barlen array def - /i 0 def /j 0 def - { % loop - i barlen eq {exit} if - /cw barcode i 1 add 3 getinterval cvi def - cws j cw put - /i i 4 add def - /j j 1 add def - } loop - /cws cws 0 j getinterval def - /text () def - } if - - encoding (auto) eq { - - /fncvals << - (FNC1) fn1 - (FNC2) fn2 - (FNC3) fn3 - (FNC4) fn4 - (LNKA) lka - (LNKC) lkc - >> def - - % Convert input into bytes accounting for FNC and LNK characters - /msg barlen array def - /text barlen string def - /i 0 def /j 0 def { - i barlen eq {exit} if - /char barcode i get def - text j char put - parsefnc char 94 eq and i barlen 4 sub lt and { - barcode i 1 add get 94 ne { - /char fncvals barcode i 1 add 4 getinterval get def - text j ( ) putinterval - /i i 4 add def - } { - /i i 1 add def - } ifelse - } if - msg j char put - /i i 1 add def - /j j 1 add def - } loop - /msg msg 0 j getinterval def - /msglen msg length def - /text text 0 j getinterval def - - % Determine digit runlength and characters from given position - /numsscr { - /n 0 def /s 0 def - /p exch def { - p msglen ge {exit} if - msg p get - dup setc exch known not {pop exit} if - fn1 eq { - % FNC1 in odd position of run like two digits - s 2 mod 0 eq {/s s 1 add def} {exit} ifelse - } if - /n n 1 add def - /s s 1 add def - /p p 1 add def - } loop - n s - } bind def - - % Encoding for each alphabet - /enca { - seta exch get cws exch j exch put - /j j 1 add def - } bind def - /encb { - setb exch get cws exch j exch put - /j j 1 add def - } bind def - /encc { - dup type /arraytype ne { - setc exch get - } { - aload pop 48 sub exch 48 sub 10 mul add - } ifelse - cws exch j exch put - /j j 1 add def - } bind def - - % Character exclusively in either alphabet A or B - /anotb {dup seta exch known exch setb exch known not and} bind def - /bnota {dup setb exch known exch seta exch known not and} bind def - - % Pre-compute relative position of next anotb and next bnota characters - /nextanotb [ msg length {0} repeat 9999 ] def - /nextbnota [ msg length {0} repeat 9999 ] def - msg length 1 sub -1 0 { - /i exch def - msg i get anotb { - nextanotb i 0 put - } { - nextanotb i nextanotb i 1 add get 1 add put - } ifelse - msg i get bnota { - nextbnota i 0 put - } { - nextbnota i nextbnota i 1 add get 1 add put - } ifelse - } for - - % Does a-only come before b-only after given position and vice versa - /abeforeb {dup nextanotb exch get exch nextbnota exch get lt} bind def - /bbeforea {dup nextbnota exch get exch nextanotb exch get lt} bind def - - /cws barcode length 2 mul 3 add array def - - % Select start character - /j 0 def - msglen 0 gt {0 numsscr} {-1 -1} ifelse /nums exch def /nchars exch def - { % common exit - msglen 0 eq { - stb enca - /cset (setb) def - exit - } if - msglen 2 eq nums 2 eq and { - stc enca - /cset (setc) def - exit - } if - nums 4 ge { - stc enca - /cset (setc) def - exit - } if - 0 abeforeb { - sta enca - /cset (seta) def - exit - } if - stb enca - /cset (setb) def - exit - } loop - - % Main encoding loop - /i 0 def { - i msglen eq {exit} if - - i numsscr /nums exch def /nchars exch def - - % Determine switches and shifts - { % common exit - cset (seta) eq cset (setb) eq or nums 4 ge and - msg i get fn1 ne and { - nums 2 mod 0 eq { - swc cset (seta) eq {enca} {encb} ifelse - /cset (setc) def - exit - } { - msg i get cset (seta) eq {enca} {encb} ifelse - /i i 1 add def - swc cset (seta) eq {enca} {encb} ifelse - /cset (setc) def - exit - } ifelse - } if - cset (setb) eq msg i get anotb and { - i msglen 1 sub lt { - i 1 add bbeforea { - sft encb - msg i get enca - /i i 1 add def - exit - } if - } if - swa encb - /cset (seta) def - exit - } if - cset (seta) eq msg i get bnota and { - i msglen 1 sub lt { - i 1 add abeforeb { - sft enca - msg i get encb - /i i 1 add def - exit - } if - } if - swb enca - /cset (setb) def - exit - } if - cset (setc) eq nums 2 lt and { - i abeforeb { - swa encc - /cset (seta) def - exit - } if - swb encc - /cset (setb) def - exit - } if - - % No switches or latches so encode - cset (seta) eq { - msg i get enca - /i i 1 add def - exit - } if - cset (setb) eq { - msg i get encb - /i i 1 add def - exit - } if - cset (setc) eq { - msg i get fn1 eq { - fn1 encc - /i i 1 add def - } { - msg i 2 getinterval encc - /i i 2 add def - } ifelse - exit - } if - - exit - } loop - - } loop - /cws cws 0 j getinterval def - } if % auto encoding - - % Derive checksum and place stop character - /cws j 2 add array dup 0 cws putinterval def - /csum cws 0 get def - 1 1 j 1 sub { - /i exch def - /csum csum cws i get i mul add def - } for - /csum csum 103 mod def - cws j csum put - cws j 1 add seta stp get put - - % Create an array containing the character mappings - /encs - [ (212222) (222122) (222221) (121223) (121322) (131222) (122213) - (122312) (132212) (221213) (221312) (231212) (112232) (122132) - (122231) (113222) (123122) (123221) (223211) (221132) (221231) - (213212) (223112) (312131) (311222) (321122) (321221) (312212) - (322112) (322211) (212123) (212321) (232121) (111323) (131123) - (131321) (112313) (132113) (132311) (211313) (231113) (231311) - (112133) (112331) (132131) (113123) (113321) (133121) (313121) - (211331) (231131) (213113) (213311) (213131) (311123) (311321) - (331121) (312113) (312311) (332111) (314111) (221411) (431111) - (111224) (111422) (121124) (121421) (141122) (141221) (112214) - (112412) (122114) (122411) (142112) (142211) (241211) (221114) - (413111) (241112) (134111) (111242) (121142) (121241) (114212) - (124112) (124211) (411212) (421112) (421211) (212141) (214121) - (412121) (111143) (111341) (131141) (114113) (114311) (411113) - (411311) (113141) (114131) (311141) (411131) (211412) (211214) - (211232) (2331112) - ] def - - % Derive space bar succession - /sbs cws length 6 mul 1 add string def - 0 1 cws length 1 sub { - /i exch def - sbs i 6 mul encs cws i get get putinterval - } for - - % Return the arguments - << - /ren //renlinear - /sbs [sbs {48 sub} forall] - /bhs [sbs length 1 add 2 idiv {height} repeat] - /bbs [sbs length 1 add 2 idiv {0} repeat] - /txt [ [text textxoffset textyoffset textfont textsize] ] - /textxalign (center) - /opt options - >> - - dontdraw not //renlinear if - - end - -} bind def -/code128 dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp code128 0.0 0 0 0 +%%BeginData: 113 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\Ou"b5AU&K FD5Z2F*j(N AmoLsAWf3'P +!FGY<0B5(@ZmRN0 oc8tP) XR( F_-_ !H]f tD5 *C&O5*@^MH ]ft&EckrV1O +YEdI?J0)*g/N:Df Bf4Df 0WZ5 *@^MP #Q@= FD5 Z2F*j'+I?I /TFCf]=AoDR +/+EV1>FCoH/FHS5 =1G4@UX:eDe*FB@ZmRN1GOo[4NP!5$bP')pIL]E55P"_#iD0'?Q5&,lSP,XU.P'E +-LP%'4LP,X6>P!5%&I=%,:D0'?Q5&-6EP'N4"C6ATNC6CcD1G<3GEas#uAKYi2B8?P&P"_#pP! +FGY9I.++G_/#!\c<6+Bsj,+cZRHNWLmh>p*@ +3!@!O),)u^Y10l#,NWCAb!@*U+0JcuW>E/_0NWCDc!\cH:+Bsj,-&r!PNWLml>p*@3!@Eg--B8 +-]2I.G0NWCMf!@Nm/0K38[>DO\`.#n?_3*dY2Lae-/NWLmp>p*@3!@j*1.ZOQb0O5f*NWCYj!@ +s030elrV>E/_8NWC\k!\lH9+Bsj,/WKi`NWLpk>p*@3!A9B5/rfuf1gM5.NWCen!ABH70f<5Z> +E/_p*@3!A]Z916)Dj3*dY2NWCqr!Af`;0f`M^>E/_@NWCts +!\uH8+Bsj,23%\pNWLsj>p*@3!B,r=2N@ho10l#,NWD)!!B6#?1,E2Y>E/_DNWD,"!\uT<+Bsj +,3K=,#NWLsn>p*@3!BQ5A3fX7s2I.G0NWD5%!BZ;C1,iJ]>E/_HNWD8&!\u`@+Bsj,4cTP+NWL +sr>p*@3!BuME5)o\#0O5f*NWDA)!C)SG1GN/X>E/_LNWDD*!])T;+Bsj,6&kt3NWM!m>p*@3!C +DeI6B2+'1gM5.NWDM-!CMkK1GrG\>E/_PNWDP.!])`?+Bsj,7?.C;NWM!q>p*@3!Ci(M7ZIO+3 +*dY2NWDY1!Cr.O1HA_`>E/_TNWD\2!]2T:+Bsj,8WEgCNWM$l>p*@3!D8@Q8r`s010l#,NWDe5 +!DAFS1c&D[>E/_XNWDh6!]2`>+Bsj,9o]6KNWM$p>p*@3!D\XU:6#B42I.G0NWDq9!De^W1cJ\ +_>E/_\NWDt:!]2lB+Bsj,;2tZSNWM$t>p*@3!E+pY;N:f90O5f*NWE(=!E5![2)/AZ>E/_`NWE ++>!];`=+Bsj,p*@3!EP3]E/_dNWE7B!];lA+B +sj,=cNMcNWM's>p*@3!EtKa>)iYA3*dY2NWE@E!F(Qc2*"qb>DQO?>`JkD0O5f*NWEFG!F:]e2 +DJJ[>E/_jNWEIH!]Df>+Bsj,?]G.oNWM*p>p*@-!0.(fNWM*q>p*@-!KI1hNWM*r>p*@-!fd:j +NWM*s>p*@-"-*ClNWM*t>p*@-"HELnNWM*u>p*@-"c`UpNWM+!>p*@-#*&^rNWM-n>p*@-#EAg +tNWM-o>p*@-#`\q!NWM-p>p*@-$'#%#NWM-q>p*@-$B>.%NWM-r>p*@-$]Y7'NWM-s>p*@-%#t +@)NWM-t>p*@-%?:I+NWM-u>p*@-%ZUR-NWM.!>p*@-%up[/NWM.">p*@-&<6d1NWM0o>p*@-&W +Qm3NWM0p>p*@-&rm!5NWM0q>p*@-'93*7NWM0r>p*@-'TN39NWM0s>p*@-'oi<;NWM0t>p*@-( +6/E=NWM0u>p*@-(QJN?NWM1!>p*@-(leWANWM1">p*@-)3+`CNWM1#>p*@-)NFiENWM3p>p*@- +)iarGNWM3q>p*@-*0(&INWM3r>p*@-*KC/KNWM3s>p*@-*f^8MNWM3t>p*@-+,GE,!]`,D+Bot +#DDNDIDDR:S3At.c>9INq1*C1H16)Dr2dIP1+EM.:+EM.:NWM4#>p*>oF*D+:F*D,S!]`8H+Bo +t0G@D\,DDWJWG@D\#+Bot#DDWJWG@;V8G@;V"+Bot#DD<8GDD<8GDD<8>+Bot0FC?;5FC?;5FC +?:t+Bot0FCHA6FCHA6FCH@u+Bot0FCQG7FCQG7FCQG!+Bot0FDr@DFDr@DFDr@.+C1-d04S[(E +ctl-F!+\CD3?c4D3?c4D3?b^Ou%moL]M"!@<-3nE-%1OL]N[X4aVtbP"U4d<+BTMEctl +-F!,4\99MJQP'DD<8:?Xl06:]H@3B&n@<-O"CibC4P"Uro06:]H@N]/o@<-O"CibC5P"Uro06: +]H@j#8p@<-O"CibC6P"UroF(KH%+Dbh%+EM+9@3BW8@ZjBIG]RG<@3BB%@j#i(FC?;5G@Qe/P' +D%ZFCHA/CLJ?,ATVB(F*D,W99OO@ATVB(ChmN'F(KH&+EMa8P"Us_F(KH'+Dbh%+EM+9@j#i:@ +?O9HG]RG<@j#T'@j#i(FCQG7G@H_.P'D"UGC(uSDI[TqBl7RD"*.goOu%NL<+TrWDe*R"B9!(7 +@<[ktHS8lQF!+q#Ebo<)OpR:-0564BOu"b+L]ESoHYFU3@<-0qDN[/0P!FGY<%ha*+C\c"@rGm +h+DHW4Oo^@@P"_#iOu$TlF!,3?@s=)\052PCL]ikAOu"b++DQ]5Oo^_%I?J.p@s;u:@s`"@c-R11 +kDZNW_gH6Si=l1QDT-:.$jMDD[@V9MS5HChmI>"ADQ`6YpOJ+?huP1GL]il7P"UroFCf]=+DQo;+Hh +"'Bcq,G"HieK1OXU'Bcq,G!KmJH1OYEdI?IQHF(ZV1+Cf(nEftZ#Bcq,G!KmJH1Gd4aV7+!g7;S!0TKl0687WL]NY>Ou%N5P!FGYOu"b4+EN>>Oo^_ + %05r%QL]NY>Ou%NLASrW3I?G)'1G<S05b?GFCK-+FC? +:r+Dl14P%&co!.C#_L*mL;Ou$rrB9H_[!KsFDIn'7@; +^"*@N]B@!0VSTHZ!D>FCB'*FCHA,+Dtb8FCB'*FCHA,L]NY>P"UT3Oo^_jI?ITIF(ZV0P"T8%D +ffE7+Dtb8FCK-+FC?;+L]ET_I=#jCG][D4DffD1Bcq;)G][D4DffD1BnueQ!Kp*3!KmJHG^Y`T +I?I,S@:Ee[DfTDuH]g@+AU&<*DJsW+P!5%%P!3bpG][D4DffEN5*AR%ApogPOu"b#@V'.iEb/[ ++OuR>jG][D4DffEN5*AR%5&OqVFCB'*FCLCsP"UsMI?G)'1G<6^F!+q#Eas#uAWgMY!g7AU"-N +\J$'I(tC5;kQ1Mq2GCh7L?!0U0*L]D=8D0'c.Ed`:js+p]'P#X/QF_u2_5*@]TDI[?gEc[C-Ou + %H%F(]<#DMS:U4aV6l@N]6"@pq$#F(KHR"ES-r@ZiO15^eepD0'?+AT!;*P!*]*D0(L7P!+s2 +HZO:=+D#G#@4u,3ATWq8F(KH'Ou&7dI?IQIF_u2U"HlB(F*(n7ASu!d04T'7FH-KFATVFF1Qk" +OP#R5;@:Ee[DfTDuHQ[BO@3B-!@pq$#F(KHR"ES-r@?NF05^eepF*(k6ASu!d04T'7FH-KFATV +CE1Qk"OP%?:\L]ESoHYFU>F(]<#DN[/0P!FGY<,!ImF_u2@@ra5?F_u2_5*@]TDI[?gEc[C-Ou + %GpF(KHR"ES-r@?Nc`F(KHR"ES-r@Zim;Ec-#:F,0s^8s0F(KHR"ES-r@ZilkF(ZV0P"T5$DffHO"F +Fi*D0'?+AT!;)P,XUVHYJ9:Oo]$$AS,k$ARTp.F(TM:ASu!e+Dl14+DI!3ASu!d052PCL]NY>O +u&7dI?IQXP#QLH@3B-!@q%*$F(KHR"ES-r@?NF05^eep@rl4'NWaE7FCC=qD0'>4Bp)+uDJsW* +Op$,G+Dl14Ch7L?!KsFFAp\6J!KmIl@V'.iEb/^,+EM.:+D#G#@3BE.B-:oO94`!N@P;FOu&7dI?IQ>F(KHR"ES-r@Zim$D +0'>4Bp),#DI[-/Bcq,G!KmJH1Qk"OP#Pq4ATWq8F(KH'P!+//F(ZV0P"TD)0p4\HAo9=GASu!f +052PCL]NY>Ou%N5D0'>4BnuhR9P&*O@kVO=BnuhR!Ko6eP#[Z1I?IQm5^ef,I?J.p@s;u:@s4F,0gZ99M)e!JgbkL]N[4F!,1[950Q*Oo^_%I?I,S@rld0+CfJ8D2;hfC6CA_GB4mA+CfJ8D3 +B-RGB4mAL]NY>F(KH%+EMXDP"Us_04f$2F!+\I"u7ng1,:VF"u7qh0etME"u7qh1,:SE"u.kf1 +,:YG"u.kf1GU_G"u.ng1,:VF"u.kg1,1SF"u.kg1GLYF"u.nh1,1PE"u7qg1,1SF"u7qg1GLYF +"u7th1,1PE"u.hf1,C\G"u.kg0f(SF"u.kg1,CYF"u.hg1,:VF"u.kh0etME"u.kh1,:SE"u7q +i1,1MD"u7qg0f(SF"u7qg1,CYF"u7nh1,1PE"u7qi0ekGD"u@th0f(PE"u@tg1,:VF"uA"h0et +ME"uA"h1,:SE"u@th1,1PE"uA"i0ekGD"uA"i1,1MD"u7ng0etPF"u7ng1GU\F"u7ti0etJD"u +.he1GUbH"u.ng0etPF"u.ng1GU\F"u.hf1GL\G"u.nh0ekJE"u.nh1GLVE"u7nf1GL\G"u7th0 +ekJE"u7th1GLVE"u.hf0f(VG"u.hf1G^bG"u.nh0f(PE"u.hg0etPF"u.hg1GU\F"u.ni0etJD +"u@ti0etJD"u7nf1G^bG"u7th0f(PE"u7nh0ekJE"u7nh1GLVE"u7nh0f(PE"u@tg0etPF"u@t +g1GU\F"uA%i0etJD"u@th0ekJE"u@th1GLVE"uA%j0ekDC"u@tj0ekDC"u7qg1bg_F"uJ+j0ek +DC"u.he1,:\H"u.he1bphH"u.kf0etSG"u.kf1bpeG"u.qh0etME"u.qh1,:SE"u.hf1,1VG"u +.hf1bgbG"u.kg0ekMF"u.kg1bg_F"u.qi0ekGD"u.qi1,1MD"u8"i1,1MD"u7qg0ekMF"uJ%j0 +ekDC"u8"i0ekGD"u.nj0ekDC"u.he1,LbH"u.kf0f1YG"u.kf1,L_G"u.hh1,1PE"u.ki0ekGD +"u.ki1,1MD"uJ%h1,1PE"uJ(i0ekGD"uJ(i1,1MD"u7ng0f1VF"u7ni0etJD"uJ%i0etJD"u.h +e0f1\H"u.he1GghH"u.ng0f1VF"u.hh0ekJE"u.hh1GLVE"uJ%h0ekJE"uJ%h1GLVE"u.hg0f1 +VF"u.hh0f(PE"u@tg0f1VF"uJ%h0f(PE"u7nf1bgbG"u7nf1,1VG"u7nf1,C\G#;S(k0ekCq]Z#F!+[0F(03R +@Yb&J!Jgf?;L<(gBkM+$I?K4g04JC3+Bot0@WR]AL]NY>L]W`;H\_ZMP(R$nFEhmM>9I,mFCf] +=+EV1>FEh_9AohO*+EV1>FEqe:AohO*+EV1>FCoH/FD_?-CEcQG7F`MSBDD#CBBlJ#6A7]@eDImj"F)Q2A@qCgGOuY1:ATVm"@r#drB +9KiQP'(hWFDtYuCM@[!I?IP~> +% uk.co.terryburton.bwipp/code128 0.0 0 +%%EndData +%%EndResource % --END ENCODER code128-- % --BEGIN ENCODER gs1-128-- -% --REQUIRES code128-- +% --REQUIRES preamble raiseerror renlinear code128-- % --DESC: GS1-128 % --EXAM: (01)95012345678903(3103)000123 % --EXOP: includetext % --RNDR: renlinear -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renlinear dup /uk.co.terryburton.bwipp findresource put -dup /code128 dup /uk.co.terryburton.bwipp findresource put -begin -/gs1-128 { - - 20 dict begin % Confine variables to local scope - - /options exch def % We are given an option string - /barcode exch def % We are given a barcode string - - /dontdraw false def - /includetext false def % Enable/disable text - /textfont /Courier def - /textsize 10 def - /textxoffset 0 def - /textyoffset -7 def - /height 0.5 def - /linkagea false def - /linkagec false def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - /textfont textfont cvlit def - /textsize textsize cvr def - /textxoffset textxoffset cvr def - /textyoffset textyoffset cvr def - /height height cvr def - - /text barcode def - - % Expand ordinals of the form ^NNN to ASCII - /expand { - /in exch def - /out in length string def - /j 0 def - in - { % loop - (^) search { - dup out exch j exch putinterval - length j add 1 add /j exch def - pop - dup 0 3 getinterval cvi out exch j 1 sub exch put - dup length 3 sub 3 exch getinterval - } { - dup out exch j exch putinterval - length j add /j exch def - out 0 j getinterval exit - } ifelse - } loop - } bind def - - % Parse out AIs - /ais [] def - /aival 2 dict def - barcode dup length 1 sub 1 exch getinterval - { % loop - dup () eq {exit} if - (\)) search pop - exch pop - exch (\() search { - exch pop exch 3 1 roll - } { - () 3 1 roll - } ifelse - [ ais aload pop counttomark 2 add index ] /ais exch def - aival 3 1 roll expand put - } loop - pop - - % Pre-defined fixed length data field AIs - % any AI whose prefix is not included in this table must be - % terminated with "FNC1", even if it's fixed length - /aifixed 23 dict def - [ - 0 1 4 {} for - ] { - (00) 2 string copy dup dup 1 5 -1 roll 48 add put aifixed 3 1 roll put - } forall - [ - 11 1 20 {} for - 23 - 31 1 36 {} for - 41 - ] { - 10 2 string cvrs dup aifixed 3 1 roll put - } forall - - % Create the code128 data - /fnc1 -1 def - /c128 [ fnc1 ] def - 0 1 ais length 1 sub { - /i exch def - /ai ais i get def - /val aival ai get def - c128 length ai length add val length add array - dup 0 c128 putinterval - dup c128 length ai [ exch {} forall ] putinterval - dup c128 length ai length add val [ exch {} forall ] putinterval - /c128 exch def - i ais length 1 sub ne aifixed ai 0 2 getinterval known not and { % Append FNC1 - c128 length 1 add array - dup 0 c128 putinterval - dup c128 length fnc1 put - /c128 exch def - } if - } for - - % Compose input to code128 - /barcode c128 length 1 add 5 mul string def - /i 0 def /j 0 def { - i c128 length eq {exit} if - c128 i get dup fnc1 eq { - pop barcode j (^FNC1) putinterval - /j j 4 add def - } { - barcode exch j exch put - } ifelse - /i i 1 add def - /j j 1 add def - } loop - linkagea linkagec or { - barcode j linkagea {(^LNKA)} {(^LNKC)} ifelse putinterval - /j j 5 add def - } if - /barcode barcode 0 j getinterval def - - % Get the result of encoding with code128 - options (height) height put - options (dontdraw) true put - options (parsefnc) true put - /args barcode options //code128 exec def - - args (txt) [ [text textxoffset textyoffset textfont textsize] ] put - args (textxalign) (center) put - args (opt) options put - args - - dontdraw not //renlinear if - - end - -} bind def -/gs1-128 dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp gs1-128 0.0 0 0 0 +%%BeginData: 39 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\\/MT" ?H \`B!23 JD% +DfBf4Df0WZ5*@]T @UX:e De* FB5 *@ ]T A8c @-A 9)+&+D ,% uF(LLj 055 +<6Cis9"FCf]=+D, %uF( LLj 06 Cc MFC oH/ FHO V,1G +Ou "b5A U &< AD eDP! +5%OP!5$bI=%,/FE 2M8Ou %NL< IL$AO rfcH 05k fOBl@m1P!5 $bI?IQJE-,f +4DKC/f1OYEX06Cc MFCoH /F5FCf +]=F(or3OtVtS06C cMFEh_9 AohO*+ EV1>F Eh_ 9AohO*OtVt S06CcMFEqe: +AohO*+EV1>FEqe:AohO*OtVtS05+p2B4uB0BOtmjBQTCjOu"b5AU&;>@UX:eDe*FB1G<!AA +2N5*@^bFcn_?!/L`?9TgrFF``d1C5;nRWKKH.G`k%L@Yb,LWJCY>5*ATfH]g@,F``d1C6CcDH' +2WOOo[4NP!5$bDfp/X!,@ZjP!FGYD!Kr5$G^Y`H>DNZC!JhG:I?I-W(Pj/h!Ji"JI?I-W.:%:V$A\bHV33Nq3+6N5Bm +=3"L]`G6P)#3FI?I/TAo;*5M#WVo04Q^l3$;EJAo;*5+C1-dL]E53@;0eG@Yb&JWI$:4P!5$b0 +4AQ;@;0d*Bp),P1GEV0sI?I0-P'N3M@kf_uP%%j6P%'RTG%#20>EV0sI?I0-P'J]j0et_O5*@^ +9+CSu*P%'4JP,XU]@;0=fG\(D.@;1MtL]W`5P$jGlOp$,A0et_O@Yb&J!KmbP3/@QE0et_OH'1 +-s0et_O@V0Lf0p6c7@kf_uP!5$bI?IQXP"768@<,jrA7Zln0et_O@Yb&J!JgoBCm(WX1GOu"b++DQ]5Oo^_%I?J/XBl7]p +B4YKoCh[d&@:s.]P&bnY@<,jrA7Zlu+Dbb0CLLje@=+"FCf]=G].2+F(KG9FCf]=H#I;,F(KG9F +Cf]=AoDR/+EV1>FE;/BAKY8$?'9G@EbBHR$?Tj(FEh51BkM=D#%M4^FCfKUG[YW*F,g?@E--#; +FD5Z2F-:cVEbBG9A8c@-A9)+&P&N'-Eb0-)Bl7KjEfsCb3IR&#Ou"b(F"o7$1,tFVP%64gCG'+ +8/p(ZFEd;,:Ecc5;/n0$=E,Zq1AS,XoATD@'Dfp)1AWh2!3A5GbFDtYuCM@[!P.H"'F`V,9E+* +6lBl7R3P#M~> +% uk.co.terryburton.bwipp/gs1-128 0.0 0 +%%EndData +%%EndResource % --END ENCODER gs1-128-- % --BEGIN ENCODER ean14-- -% --REQUIRES code128-- +% --REQUIRES preamble raiseerror renlinear code128-- % --DESC: GS1-14 % --EXAM: (01)04601234567893 % --EXOP: includetext % --RNDR: renlinear -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renlinear dup /uk.co.terryburton.bwipp findresource put -dup /code128 dup /uk.co.terryburton.bwipp findresource put -begin -/ean14 { - - 20 dict begin % Confine variables to local scope - - /options exch def % We are given an option string - /barcode exch def % We are given a barcode string - - /dontdraw false def - /includetext false def % Enable/disable text - /textfont /Courier def - /textsize 10 def - /textxoffset 0 def - /textyoffset -7 def - /height 1 def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - /textfont textfont cvlit def - /textsize textsize cvr def - /textxoffset textxoffset cvr def - /textyoffset textyoffset cvr def - /height height cvr def - - % Calculate EAN checksum and add to end of barcode - barcode length dup 17 eq exch 18 eq or - barcode 0 4 getinterval (\(01\)) eq and { - /checksum 0 def - 0 1 12 { - /i exch def - /checksum checksum barcode i 4 add get 48 sub i 2 mod 0 eq {3 mul} if add def - } for - /checksum 10 checksum 10 mod sub 10 mod def - 18 string - dup 0 barcode 0 17 getinterval putinterval - dup 17 checksum 48 add put - /barcode exch def - /gtin barcode 4 14 getinterval def - } if - - % Compose input to code128 - /text barcode def - /barcode 21 string def - barcode 0 (^FNC101) putinterval - barcode 7 gtin putinterval - - % Get the result of encoding with code128 - options (dontdraw) true put - options (parsefnc) true put - /args barcode options //code128 exec def - - args (txt) [ [text textxoffset textyoffset textfont textsize] ] put - args (textxalign) (center) put - args (opt) options put - args - - dontdraw not //renlinear if - - end - -} bind def -/ean14 dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp ean14 0.0 0 0 0 +%%BeginData: 33 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\:%5 2X= +FD5Z2F-8_M1G<3G Eas#u AWf 6?1 G< 9W DKK E0@ X4aVt +cOu8C3DfBf4Df0W CP,i2' Cia 0 N4aW >WI? IQm 30Ia6V33Qn !BlU*FE2M8P +!+/T/Wr;\FcnqO1 OXV5/T c#U AWei tP#Z pnA We*t3A5;iF D5Z2F-8_M1O +YEcDfBf4Df0WCOu %NL8M >0sG ][P9D KI"C AU& FE;/BAWe^ 01G> #B4uCM09S,# +@<,jrA7^PsL]il7NW^aa0e&9&HS8iPBlJ#DARTI21h'm(5tR(l7oM,o0f1"iF`VXI@V'1dDBO. +;FD)dF0JP"!@;p1%Bk(RnBl@l3Bk1dmFD5?$ATBFWEa`['AS#n&DfV"*I?IQ=@<,jrA7^p5L_5 +ee@UX:eDe*FB@YbY[D3>$K04K->E,[F@@;[eV@UWe@ASu.&BT=-(;_]jY1a$XXF*&O6AKW]`+E +)9C0f1"`BkM.%F"]1e@;0doATDg0EfrY8P#Pn!Eas#uAV^Iu@<,jrA7^p5L]im?P"^4c3/B8OA +s,?63Kd4%EdKHKGA2#8/nJI/0f3?JA4($=Ea`I"ATEeQ7oM,o0f1"iF`VXI@rH7,@;0U%Df0B: ++Co2!BlnDL061K8F(Jp'Ec5u]5CJ\oI?I/T@q]F`CNFW8L]ESoL]E53L^\V`Bp(ZC1G<6OARfL +sF_r72BOt[hF*2=B@UX:eDe*E%BnunT!Kp*30TrDLL]W`SL]ET$H\_ceCjhIGOo^_%I?I,S@q] +F`CNFW8L^IX*ARfLsF_upAP%p/ZL^K;[Ou$QUEas#uAWgMY&s>D)@UX:eDe*F8&X#dsBOt[hF* +2>U0TlI"D0mpFGA2#8/nJI/0f3?JA4($A@r"JHB5)IJ,tVuaDfTl0@rrh`;_]jY1a$:AARfKuA +8,[jF%3/A/VBOt[h +F*2>U0TlI"GV@UX:eDe*FB1G<3 +GEas#uAV_(aV33WD@<,jrA7^PsNX&l[:.$`i0p6fk@<,jrA7^Q%B67j*P'LtbFD5Z2F,gN:Df0 +Z-Eaa06EckrVG].PCBl@m1NX0T4EcYf(DI[d/F_-_\04Am6F!+q#Eas#uAKYo1FD5Z2F"]1VDe +*E61,tF]Ou$NeB60(8FEhn3+Bot1AU&;>FCf]=G].2+F(KG9FCf]=H#I;,F(KG9FCf]=AoDR/+ +EV1>FE;/BAKY8$?'9G@EbBHR$?Tj(FEh51BkM=D#%M4^FCfKUG[YW*F,g?@E--#;FD5Z2F-:cV +EbBG9A8c@-A9)+&P&N'-Eb0-)Bl7KjEfsCb3IR&#Ou"b&@;[eVOuSV806M%_@rEuAATDg:@Wc^ +5Df.1:GA2#8+Co%qBl7L&ATMd4Ear[DFcna +% uk.co.terryburton.bwipp/ean14 0.0 0 +%%EndData +%%EndResource % --END ENCODER ean14-- % --BEGIN ENCODER sscc18-- -% --REQUIRES code128-- +% --REQUIRES preamble raiseerror renlinear code128-- % --DESC: SSCC-18 % --EXAM: (00)006141411234567890 % --EXOP: includetext % --RNDR: renlinear -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renlinear dup /uk.co.terryburton.bwipp findresource put -dup /code128 dup /uk.co.terryburton.bwipp findresource put -begin -/sscc18 { - - 20 dict begin % Confine variables to local scope - - /options exch def % We are given an option string - /barcode exch def % We are given a barcode string - - /dontdraw false def - /includetext false def % Enable/disable text - /textfont /Courier def - /textsize 10 def - /textxoffset 0 def - /textyoffset -7 def - /height 1 def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - /textfont textfont cvlit def - /textsize textsize cvr def - /textxoffset textxoffset cvr def - /textyoffset textyoffset cvr def - /height height cvr def - - % Calculate EAN checksum and add to end of barcode - barcode length dup 21 eq exch 22 eq or - barcode 0 4 getinterval (\(00\)) eq and { - /checksum 0 def - 0 1 16 { - /i exch def - /checksum checksum barcode i 4 add get 48 sub i 2 mod 0 eq {3 mul} if add def - } for - /checksum 10 checksum 10 mod sub 10 mod def - 22 string - dup 0 barcode 0 21 getinterval putinterval - dup 21 checksum 48 add put - /barcode exch def - /sscc barcode 4 18 getinterval def - } if - - % Compose input to code128 - /text barcode def - /barcode 25 string def - barcode 0 (^FNC100) putinterval - barcode 7 sscc putinterval - - % Get the result of encoding with code128 - options (dontdraw) true put - options (parsefnc) true put - /args barcode options //code128 exec def - - args (txt) [ [text textxoffset textyoffset textfont textsize] ] put - args (textxalign) (center) put - args (opt) options put - args - - dontdraw not //renlinear if - - end - -} bind def -/sscc18 dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp sscc18 0.0 0 0 0 +%%BeginData: 34 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\Amo LsAW ei& FC f] =Ao DR/ OiN V@06 +CcMFE;/BAV^\V1G FC f]=AoDR/Ot DhQ06CcMFE; +/BAKZ)+G]\"@H=` 6mOu" b5AU& GhuA8,[jFE9)gEa`['AS#n&DfV"*I?IQ=@<,jrA7^Q"@UX:eDe*FB@Yb/MWKKr% +OuS7OP%Kk@LcLVpP&bn&@WuO*E%Z3Q@q.5Q@UWe7BOPpi@ru:&NZ_8!6UNF[3$<'\F*&O7Df0Z +*Bl5&3DJXS@A8,[jFE9)gEa`['AS#n&DfV"*I?IQXP"@<:BOt[hF*2>U!0T-o!/LZ3&:6'EP!5 +$b04S[,@r$..D'3>%ARfLsF_r71@<,jrA7ZltL]ikAP"UTbP,W/O!g7;S!0TKlL]`fVI?IQm!K +o6eP"769BOt[hF*2>U$=da\@r$..D28O^C6GQP$Bf.e1Lad5@rGmhP%'4_P!+/$@<,jrA7^Q3P +"T:uARfLsF_upgOo^__HS8iPBlJ#DF)ti$0fWWNA4($A@r"JHB5)IJ-:r)bDfTl0@rrhl;aWo( +0fU:cBOt[h+Co2!BlkJ:Ec6,8A7]:)061K8F(Jp'Ec5u]5CJ\oI?IQc(6YMW3/@QD@<,jrA7^p +LOuS74@q]F`CNFW8LbOtmP'AWh@<,jrA7^ofOu"b4F(8]&@UX:eDe*F8"Gd\R9Th1bFCf]=+C\ +c"@rGmhOu"b#@<,jrA7^Q7P,49I,mFCf]=+EV1>FEh_9AohO*+EV1>FEqe:AohO* ++EV1>FCoH/FG]\1=Ch[O"NWs!)DKKH1P'CDUB60(8DfBf +:E-,f4DKCtc@<-"%+CoD.FC]E#GEQnu061WACh[cu@<.N1Ou[rR%[&V$F)ti$0fY=UP%64gCG' ++8/p(ZFEd;,:Ecc5;/n0$=E,Zq1AS,XoATD@'Dfp)1AWh2!3A5GbFDtYuCM@[!P.H"'F`V,9E+ +*6lBl7R3P#M~> +% uk.co.terryburton.bwipp/sscc18 0.0 0 +%%EndData +%%EndResource % --END ENCODER sscc18-- % --BEGIN ENCODER code39-- +% --REQUIRES preamble raiseerror renlinear-- % --DESC: Code 39 % --EXAM: THIS IS CODE 39 % --EXOP: includetext includecheck includecheckintext % --RNDR: renlinear -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renlinear dup /uk.co.terryburton.bwipp findresource put -begin -/code39 { - - 20 dict begin % Confine variables to local scope - - /options exch def % We are given an option string - /barcode exch def % We are given a barcode string - - /dontdraw false def - /includecheck false def % Enable/disable checkdigit - /includetext false def - /includecheckintext false def - /hidestars false def - /textfont /Courier def - /textsize 10 def - /textyoffset -7 def - /height 1 def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - /textfont textfont cvlit def - /textsize textsize cvr def - /textyoffset textyoffset cvr def - /height height cvr def - - % Create an array containing the character mappings - /encs - [ (1113313111) (3113111131) (1133111131) (3133111111) (1113311131) - (3113311111) (1133311111) (1113113131) (3113113111) (1133113111) - (3111131131) (1131131131) (3131131111) (1111331131) (3111331111) - (1131331111) (1111133131) (3111133111) (1131133111) (1111333111) - (3111111331) (1131111331) (3131111311) (1111311331) (3111311311) - (1131311311) (1111113331) (3111113311) (1131113311) (1111313311) - (3311111131) (1331111131) (3331111111) (1311311131) (3311311111) - (1331311111) (1311113131) (3311113111) (1331113111) (1313131111) - (1313111311) (1311131311) (1113131311) (1311313111) - ] def - - % Create a string of the available characters - /barchars (0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%*) def - - /barlen barcode length def % Length of the code - - includecheck { - /sbs barlen 10 mul 30 add string def - /txt barlen 3 add array def - } { - /sbs barlen 10 mul 20 add string def - /txt barlen 2 add array def - } ifelse - - /checksum 0 def - - % Put the start character - sbs 0 encs 43 get putinterval - hidestars not { - txt 0 [(*) 0 textyoffset textfont textsize] put - } { - txt 0 [() 0 textyoffset textfont textsize] put - } ifelse - - 0 1 barlen 1 sub { - /i exch def - % Lookup the encoding for the each barcode character - barcode i 1 getinterval barchars exch search - pop % Discard true leaving pre - length /indx exch def % indx is the length of pre - pop pop % Discard seek and post - /enc encs indx get def % Get the indxth encoding - sbs i 10 mul 10 add enc putinterval % Put encoded digit into sbs - txt i 1 add [barcode i 1 getinterval i 1 add 16 mul textyoffset textfont textsize] put - /checksum checksum indx add def - } for - - % Put the checksum and end characters - includecheck { - /checksum checksum 43 mod def - sbs barlen 10 mul 10 add encs checksum get putinterval - includecheckintext { - txt barlen 1 add [barchars checksum 1 getinterval barlen 1 add 16 mul textyoffset textfont textsize] put - } { - txt barlen 1 add [() barlen 1 add 16 mul textyoffset textfont textsize] put - } ifelse - sbs barlen 10 mul 20 add encs 43 get putinterval - hidestars not { - txt barlen 2 add [(*) barlen 2 add 16 mul textyoffset textfont textsize] put - } { - txt barlen 2 add [() barlen 2 add 16 mul textyoffset textfont textsize] put - } ifelse - } { - sbs barlen 10 mul 10 add encs 43 get putinterval - hidestars not { - txt barlen 1 add [(*) barlen 1 add 16 mul textyoffset textfont textsize] put - } { - txt barlen 1 add [() barlen 1 add 16 mul textyoffset textfont textsize] put - } ifelse - } ifelse - - % Return the arguments - << - /ren //renlinear - /sbs [sbs {48 sub} forall] - /bhs [sbs length 1 add 2 idiv {height} repeat] - /bbs [sbs length 1 add 2 idiv {0} repeat] - includetext { - /txt txt - } if - /opt options - >> - - dontdraw not //renlinear if - - end - -} bind def -/code39 dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp code39 0.0 0 0 0 +%%BeginData: 56 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\nL_Q" 0Op +s'_E-,f4DKCt)Ou "b#@< ,jr A7^ o fOu "b% Df0 Z-Eaa/ 7A moLsAW ei& +Bl7EsF_#&nBOt[h +D,%u F(L Lj0 6U c? Bk1 XoA RfCb@r !3 !@;L!r Ou" +b*DI[L*A7]joG]Y '?@; L!r Ou "b *DI [L* A7] 7aAR +fLiDKKH7FFCf ]=AoD R/OtD hQ0 6CcMFE;/BA KZ)+G]\"@H= +`6mOu"b5AU&Z##D09oA+Cf>-FCAm$+E).6Gp$X3B5)I//0JG2E+sE&C`mP*FED)7 +F"AGTE+*6fF!+n/A0>u-AKZ&>D.7F"F!*%e,VLYo0/%?SBldisEcQ)=P!=AX<.0p#04J@1Ch7K +,@UX:eDe*FB@Wl0rBk1XoARfCb@r$FI!KsF1P#RT#04S[,@r$..D281T1Pc$e!FfJXCh7L?!Ks +F/@UX:eDe*FB5)96&9OhaEEctl-F-8_M94MXH@r$..D3=oQ@q]F`CNFW8P!5$bI?I,S@q]F`CN +FW8+Cf(r@r$..D29^*C6CAr@;KXg@_99O.=04K->E,[F>De*E83FZE-6YL%@CIDlLBlo@^8T&$VEcP`$F3?VgF +ARfKuA8,[jFE0%F0ekI?0f(O=0ocSs0ekI=0ekC=0oc +Sq0f(U?0ekC=0ocSs0f(U?0ekC;0ocSq0ekI?0ekC=0ocSs0ekI?0ekC;0ocSq0f(UA0ekC;0o +cSq0ekI=0f(O?0ocSs0ekI=0f(O=0ocSq0f(U?0f(O=0ocSs0ekC;1GLU?0ocSq0f(O=1GLU?0 +ocSs0f(O=1GLU=0ocSq0ekC=1GLU?0ocSs0ekC=1GLU=0ocSq0f(O?1GLU=0ocSq0ekC;1G^aA +0ocSs0ekC;1G^a?0ocSq0f(O=1G^a?0ocSq0ekC=1G^a?0ocSs0ekC;0ekI?0ocSq0f(O=0ekI +?0ocSs0f(O=0ekI=0ocSq0ekC=0ekI?0ocSs0ekC=0ekI=0ocSq0f(O?0ekI=0ocSq0ekC;0f( +UA0ocSs0ekC;0f(U?0ocSq0f(O=0f(U?0ocSq0ekC=0f(U?0ocSs1GLU=0ekC=0ocSq1G^a?0e +kC=0ocSs1G^a?0ekC;0ocSq1GLU?0ekC=0ocSs1GLU?0ekC;0ocSq1G^aA0ekC;0ocSq1GLU=0 +f(O?0ocSs1GLU=0f(O=0ocSq1G^a?0f(O=0ocSq1GL[?1GLU=0ocSq1GL[?0ekI=0ocSq1GLU= +1GL[?0ocSq0ekI=1GL[?0ocSq1GLU?0f(O=0jTqu06:TD+C\c"Ch7K,Bl7EsF_#&nBOt[hH\_c +PH\_`OP#[YGL^K;]P,4E/_6L]DO.G]\4LAnH*qF5?'9G\HZXLSL]CY>!/LVsAU&FCf]=F(or3+C1.TI?ITd! +/LYb@<-0qDMS=VWI$:4P!5$b055<7GT^L0@<-O"Ci^_.@<,jrA7ZltL]NZ4P"UroF(025Bo!+Z +CkrF]!G-.YF!,17A9a81P'M.oF&<^jOAU&FCf]=F(or3+C1.TI?I-8DI[L*A7]7aARfM&+EM"5+C\c"Ch7L?$Bf4]$Bb +F$DI[`1@q]F`CNFW8P"Us`Bl7EsF_#&nBOt[hBl8$(G]\9TFEhmM@UX:nAT!;)Oo\c0@UX:eBO +Pq&+Cf(r@r$..D284U9O_FNCh7L?!KmJ>&<^jOAU&FCf]=F(or3+ +C1.TI=$'\F>E/\m@<-0qDMS=V!Jh;MCij65FEqe:AohO*+EV1>FCoH/FFCoH/FFCf]=F( +or3+C1.TI?ITYHZNY;+C\c"Ch7L?$Bf4]$BbF$DI[aD/!FCoH/F&<^jOAU&FCf]=F(or +3+C1.TI?ITYP#XV,061WA0/%?WDJX$)ARTU4F(025>9IurF*i]sP,Wkm8R3uYBQG;#+EM"5P%' +4JOo^@?P#?X?ASGdjFFB=)>q]YrF!+[0F(03R@Yb&J!Jgf?;L=3"I?K4g+DG_'Cis9"FCf]=HS +9JcF +% uk.co.terryburton.bwipp/code39 0.0 0 +%%EndData +%%EndResource % --END ENCODER code39-- % --BEGIN ENCODER code39ext-- -% --REQUIRES code39-- +% --REQUIRES preamble raiseerror renlinear code39-- % --DESC: Code 39 Extended % --EXAM: Code39 Ext! % --EXOP: includetext includecheck includecheckintext % --RNDR: renlinear -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renlinear dup /uk.co.terryburton.bwipp findresource put -dup /code39 dup /uk.co.terryburton.bwipp findresource put -begin -/code39ext { - - 20 dict begin - - /options exch def % We are given an options string - /barcode exch def % We are given the code39extended text - - /dontdraw false def - /includetext false def - /parse false def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - % Parse ordinals of the form ^NNN to ASCII - parse { - /msg barcode length string def - /j 0 def - barcode - { % loop - (^) search { - dup msg exch j exch putinterval - length j add 1 add /j exch def - pop - dup 0 3 getinterval cvi msg exch j 1 sub exch put - dup length 3 sub 3 exch getinterval - } { - dup msg exch j exch putinterval - length j add /j exch def - /barcode msg 0 j getinterval def - exit - } ifelse - } loop - } if - - /barlen barcode length def - - % Extended alphabet to non-extended alphabet - /extencs - [ (%U) ($A) ($B) ($C) ($D) ($E) ($F) ($G) ($H) ($I) ($J) ($K) ($L) ($M) ($N) ($O) - ($P) ($Q) ($R) ($S) ($T) ($U) ($V) ($W) ($X) ($Y) ($Z) (%A) (%B) (%C) (%D) (%E) - ( ) (/A) (/B) (/C) (/D) (/E) (/F) (/G) (/H) (/I) (/J) (/K) (/L) (-) (.) (/O) - (0) (1) (2) (3) (4) (5) (6) (7) (8) (9) (/Z) (%F) (%G) (%H) (%I) (%J) - (%V) (A) (B) (C) (D) (E) (F) (G) (H) (I) (J) (K) (L) (M) (N) (O) - (P) (Q) (R) (S) (T) (U) (V) (W) (X) (Y) (Z) (%K) (%L) (%M) (%N) (%O) - (%W) (+A) (+B) (+C) (+D) (+E) (+F) (+G) (+H) (+I) (+J) (+K) (+L) (+M) (+N) (+O) - (+P) (+Q) (+R) (+S) (+T) (+U) (+V) (+W) (+X) (+Y) (+Z) (%P) (%Q) (%R) (%S) (%T) - ] def - - /newcode barlen 2 mul string def - /newtext barlen 2 mul string def - /j 0 def - 0 1 barlen 1 sub { - /i exch def - /extchar extencs barcode i get get def - newcode j extchar putinterval - newtext j barcode i get put - extchar length 1 ne {newtext j 1 add ( ) putinterval} if - /j j extchar length add def - } for - /newcode newcode 0 j getinterval def - /newtext newtext 0 j getinterval def - - % Get the result of encoding with code39 - options (dontdraw) true put - /args newcode options //code39 exec def - - % Replace chars in /txt with chars in newtext - includetext { - /txt args (txt) get def - 0 1 newtext length 1 sub { - /i exch def - /txtentry txt i 1 add get def - txtentry 0 newtext i 1 getinterval put - txt i 1 add txtentry put - } for - args (txt) txt put - } if - args (opt) options put - args - - dontdraw not //renlinear if - - end - -} bind def -/code39ext dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if -% --END ENCODER code39ext-- +%%BeginResource: uk.co.terryburton.bwipp code39ext 0.0 0 0 0 +%%BeginData: 37 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\ X4a VtcO u8C3D +fBf4Df0WCP,i2'C ia0N4a W>W I ?IQ m3 0Ia6 V33 Qn!BlU*FE2 M8P!+/T/Wr; +\FcnqO1OXV5/Tc# UAWeit P#Z p nAWe *t3A 5;i FD5Z2F-8_M 1OYEcDfBf4D +f0WCOu%NL8T8*YF (K\OD0 '>4 @UX: eDe* FB@ ZmRN1G Oo[ 4NP!5$bP') pIL]E55P"_# +iD0'?Q5&,lSP,XU .P'E- LP%'4 LP,X6 >P! 5%&I=%,:D0 '?Q5&-6EP'N +4"C6ATNC6CcD1G< 3GEas#u AKYi2B 8?P&P "_# pP!FGYXG]Z8\A4($=Ea`I"ATEee6Z6L +H+>Z##7H0NWCkp!A]Z +91QDJmNWD"t!B,r=2i[nuNWD/#!\[`;![UNWD\2!D/:P8r`pFNWDh6!DSRT:6#?NNWDt:!E"jX;N:cVNWE+>!EG-\)iY199''"9TB0#9o]9$:6#B%:Q>K&=,m>46&l!s6B2*t6]M3u7#h=!7?.F"7ZIO#7 +udX$8<*a%8WEj&8r`s'99''(9TB0)9o]9*:6#B+:Q>K,:lYT-;2t].;N:f/;iUo04=H3G5=cNP6>)iY1:lYT';2t](;N:f);iUo*<*bYC05b?F@rGmh+C\c"Ch7L?!g7A +_V33VfDIn$6AU&;>@UX:nAT!;*P&-;XOu"b+L]ESoL]E53@UX:nAT!;)P,Wd]Bp(ZC1G<C*6toEa +s#uAKY]M99OO2G][G/@<.N?L]NZUHZ!D=FCf]=+DQ]5Oo^RD+Hh"uP#O)L+DN$1G][G/@<.N?O +o^_%I?I,SDIn$%De*E%DIn$%De*F8!,@ZjOu"b/ATr6-G]Y'GATr6-G]\`AC6D8R1N.5SBl@m1 +NX006DKKE0@BnueQ9TjXBG]Y'BL]NY>FEhn=DKKoEP'DD<87?OOF, +g?EG]\%PFHUlsP#Pk1B60(8DfBf:E-,f4DKCtc@<-"%+CoD.FC]E#GEQnu061WACh[cu@<.N1O +u[rR%[&V$@rGmh1HB#kFHSVHA1r(@/n8fPFCfK5H"(o:FDl%L@WuO*E$/\&Anc-oEb0<1F`Lu' +P')pJ06:]HE+*6lBl7RH\pKT_F(KH4@:O(eDJ+B\;u~> +% uk.co.terryburton.bwipp/code39ext 0.0 0 +%%EndData +%%EndResource +% --END ENCODER code39ext-- % --BEGIN ENCODER code32-- -% --REQUIRES code39-- -% --DESC: Italian PharmaCode +% --REQUIRES preamble raiseerror renlinear code39-- +% --DESC: Italian Pharmacode % --EXAM: 01234567 % --EXOP: includetext % --RNDR: renlinear -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renlinear dup /uk.co.terryburton.bwipp findresource put -dup /code39 dup /uk.co.terryburton.bwipp findresource put -begin -/code32 { - - 20 dict begin - - /options exch def % We are given an options string - /barcode exch def % We are given a barcode string - - /dontdraw false def - /includetext false def % Enable/disable code32 text - /textfont /Courier def - /textsize 10 def - /textyoffset -7 def - /textxoffset 0 def - /height 1 def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - /textfont textfont cvlit def - /textsize textsize cvr def - /textyoffset textyoffset cvr def - /height height cvr def - - /text 10 string def - text 0 barcode 0 8 getinterval putinterval - - % calculate check digit - text 8 0 - 0 1 7 { - dup text exch get 48 sub exch 1 and 1 add mul dup 9 gt {9 sub} if add - } for - 10 mod 48 add put - - % convert number from base10 to base32 - /val text cvi 32 barcode cvrs def - /barcode 6 string def - 0 1 5 {barcode exch 48 put} for - barcode 6 val length sub val putinterval - - % convert base32 number to specified character set - 0 1 5 { - dup barcode exch get - dup (AEIO) {ge {1 add} if dup} forall pop - barcode 3 1 roll put - } for - - % format HRI - text 1 text 0 9 getinterval putinterval - text 0 65 put - - % Get the result of encoding with code39 - options (dontdraw) true put - /args barcode options //code39 exec def - - args (txt) [ [text textxoffset textyoffset textfont textsize] ] put - args (textxalign) (center) put - args (opt) options put - args - - dontdraw not //renlinear if - - end - -} bind def -/code32 dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp code32 0.0 0 0 0 +%%BeginData: 33 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\:%5 2X= +FD5Z2F-8_M1G<3G Eas#u AWf 6?1 G< 9W DKK E0@ X4aVt +cOu8C3DfBf4Df0W CP,i2' Cia 0 N4aW >WI? IQm 30Ia6V33Qn !BlU*FE2M8P +!+/T/Wr;\FcnqO1 OXV5/T c#U AWei tP#Z pnA We*t3A5;iF D5Z2F-8_M1O +YEcDfBf4Df0WCOu %NL8M >0sG ][P9D KI"C AU& FE;/BAWe^ 01G>#B4u CM09S,# @<,jrA 7^p5L ^9/ \@UX:eDe*F B@Yb>RD3>$K +04K->E,[F>De*E811F[&9P&*SFD-[_8T\BWBjkm%:hX9XD.-pmA7Zm#F`VXI@V$ZA+E)9C3?Vj +HB5)I/0/%?SBldisEcQ)=P!=AX<+99V@rGmhH]g@E0Tp%25);4^:m,jG04K->E,[F>De*E811F +[&6YKnK@:OCjEfMYAFCB!"@;[2aBOPpu@:O4dAKYi4F*&O7Df0Z*Bl5&3DJXS@A8,[jFE9)gEa +`['AS#n&DfV"*I?IQXP"@<:BOt[hF*2>U!0T-o!/LZ3#CA+%ARfLsF_upAP%p.9@UX:eDe*FB@Yb>R4aUXHEas#uAV^VT94MXH@r$..D29m/!Kq; +H04K->E,[F>De*E811F[&6YL%@CIDlLBlo@i8T&$VEcP`$FG%kJuA1oTV@;0doATDg0EfrY8P#Qjm9I,mFCf]=+EV1>FEh_9AohO*+EV1>FEqe:AohO*+E +V1>FCoH/FG]\1=Ch[O"NWs!)DKKH1P'CDUB60(8DfBf:E +-,f4DKCtc@<-"%+CoD.FC]E#GEQnu061WACh[cu@<.N1Ou[rR%[&V$@rGmh1GY+QP%64gCG'+8 +/p(ZFEd;,:Ecc5;/n0$=E,Zq1AS,XoATD@'Dfp)1AWh2!3A5GbFDtYuCM@[!P.H"'F`V,9E+*6 +lBl7R3P#M~> +% uk.co.terryburton.bwipp/code32 0.0 0 +%%EndData +%%EndResource % --END ENCODER code32-- % --BEGIN ENCODER pzn-- -% --REQUIRES code39-- +% --REQUIRES preamble raiseerror renlinear code39-- % --DESC: Pharmazentralnummer (PZN) % --EXAM: 123456 % --EXOP: includetext % --RNDR: renlinear -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renlinear dup /uk.co.terryburton.bwipp findresource put -dup /code39 dup /uk.co.terryburton.bwipp findresource put -begin -/pzn { - - 20 dict begin - - /options exch def % We are given an options string - /barcode exch def % We are given a barcode string - - /dontdraw false def - /includetext false def % Enable/disable code32 text - /textfont /Courier def - /textsize 10 def - /textyoffset -7 def - /textxoffset 0 def - /height 1 def - /pzn8 false def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - /textfont textfont cvlit def - /textsize textsize cvr def - /textyoffset textyoffset cvr def - /textxoffset textxoffset cvr def - /height height cvr def - - /msg pzn8 {9} {8} ifelse string def - /msglen msg length def - msg 0 45 put - msg 1 barcode 0 msglen 2 sub getinterval putinterval - - % calculate check digit - 0 - 1 1 msglen 2 sub {dup msg exch get 48 sub exch pzn8 not {1 add} if mul add} for - 11 mod 48 add - msg exch msglen 1 sub exch put - - % Get the result of encoding with code39 - options (dontdraw) true put - /args msg options //code39 exec def - - % format HRI - /text msglen 5 add string def - text 0 (PZN - ) putinterval - text 6 msg 1 msglen 1 sub getinterval putinterval - - args (txt) [ [text textxoffset textyoffset textfont textsize] ] put - args (textxalign) (center) put - args (opt) options put - args - - dontdraw not //renlinear if - - end - -} bind def -/pzn dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp pzn 0.0 0 0 0 +%%BeginData: 35 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\AmoLsAWe i&FC f]= Ao DR /Oi NV@ 06C cMFE +;/BAV^\V1GK FD5 Z 2F*j (NAm oLs AWf3'P!FGY <0B5(@ZmRN0 +oc8tP)XR(F_-_!H ]ftD5* C&O 5*@^ MH]f t&E ckrV1OYEdI ?J0)*g/N:Df +Bf4Df0WZ5*@^MP# Q@=FD 5Z2F *j'+I ?I/T FCf ]=AoDR/+EV 1>FCoH/FHS5 +=1G$K04K->E,[FKH>Y]O@:W& +CDJ+')NZ(_t:,jA5F`VXI@V$Z@+E)9C3$;aGB5)I/0/%?SBldisEcQ)=P!=AX<.0+&@<,jrA7^ +p5L^'#Z@UX:eDe*FB@Yb8PD3>$K04K->E,[FKH>YZN@:W&CDJ+')NZ(_t:,a;4F`VXI@V$Z?+E +)9C2]uXFB5)I/0/%?SBldisEcQ)=P!=AX<.0p0@UX:eDe*F+OuS7OP%Kk@LcLVpP&bn&@WuO*E + %Z*UDF.cB6YKnK@:OCjEfM,9>#$2WF`VXI@rH7,@;0U%Df0B:+Co2!BlnDL061K8F(Jp'Ec5u +]5CJ\oI?I/TD0'?+ASrW0H>Y]hL^AKVL^8El_5*@^MP"769BOt[hF*2=B@q]F`CNFW8L^TA\Ou$T]ARfLsF_upAP!+.F@WuO*E%Z*UDF.cB8 +T&KiFAlajF_,H#AWA'.DI[U*Eb/a&+Ac6:+DG_4F`\aIAT;j(DI[6#E,ol?Bk1dc0/%?SBldis +EcQ)=P!=AX<+99V@rGmhP%&9LB5D-sL]N[ +U0TlI"D0mpFGA2#8/oZ,S6=FClBOt[h6tp:JFH.P:DI[U*Eb/a&+Ac6:+Cf(r@r!2tBkM.%+E2 +@>G%kJuA1oTV@;0doATDg0EfrY8P#Qjm<,H\hCh7LIV33fo!/N4iG`k%B!FfJX@rGmhP'N3MD0 +'?+AT!;)P,Vr)ARfLsF_upgOo^_j05YcCP!5$bDfBf4Df0WV#\7jkFC]E#GB@kJAWh9k@<-"%+ +Dl14+E)4@Bl@m10/$gRA7[PWP!>*c06CcMF:g-U:/Kg4% +FCf]=L^%^;B8?S*F(]<#DMS=VWKKr9J$!G]Y'MAU&FCf]=F(or3+C-*qP'CDUB60(?FCf]=G[YE&B5W_6@qBP"ATErY@<- +"%NWX3=FDl,?Bl@m1P'CDUB6,2+Df0Z-Eaa0TE%`kbASu +% uk.co.terryburton.bwipp/pzn 0.0 0 +%%EndData +%%EndResource % --END ENCODER pzn-- % --BEGIN ENCODER code93-- +% --REQUIRES preamble raiseerror renlinear-- % --DESC: Code 93 % --EXAM: THIS IS CODE 93 % --EXOP: includetext includecheck % --RNDR: renlinear -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renlinear dup /uk.co.terryburton.bwipp findresource put -begin -/code93 { - - 20 dict begin % Confine variables to local scope - - /options exch def % We are given an option string - /barcode exch def % We are given a barcode string - - /dontdraw false def - /includecheck false def % Enable/disable checkdigit - /includetext false def % Enable/disable text - /textfont /Courier def - /textsize 10 def - /textyoffset -7 def - /height 1 def - /parsefnc false def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - /textfont textfont cvlit def - /textsize textsize cvr def - /textyoffset textyoffset cvr def - /height height cvr def - - /encs - [ (131112) (111213) (111312) (111411) (121113) - (121212) (121311) (111114) (131211) (141111) - (211113) (211212) (211311) (221112) (221211) - (231111) (112113) (112212) (112311) (122112) - (132111) (111123) (111222) (111321) (121122) - (131121) (212112) (212211) (211122) (211221) - (221121) (222111) (112122) (112221) (122121) - (123111) (121131) (311112) (311211) (321111) - (112131) (113121) (211131) (121221) (312111) - (311121) (122211) (111141) (1111411) - ] def - - % Create a string of the available characters - /barchars (0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%) def - - /barlen barcode length def - - % Special function characters - /sft1 -1 def /sft2 -2 def /sft3 -3 def /sft4 -4 def - /fncvals << - (SFT$) sft1 - (SFT%) sft2 - (SFT/) sft3 - (SFT+) sft4 - >> def - - % Convert input into bytes accounting for shift characters - /msg barlen array def - /i 0 def /j 0 def { - i barlen eq {exit} if - /char barcode i get def - parsefnc char 94 eq and i barlen 4 sub lt and { - barcode i 1 add get 94 ne { - /char fncvals barcode i 1 add 4 getinterval get def - /i i 4 add def - } { - /i i 1 add def - } ifelse - } if - msg j char put - /i i 1 add def - /j j 1 add def - } loop - /msg msg 0 j getinterval def - /msglen msg length def - - includecheck { - /sbs msglen 6 mul 25 add string def - } { - /sbs msglen 6 mul 13 add string def - } ifelse - /txt msglen array def - - % Put the start character - sbs 0 encs 47 get putinterval - - /checksum1 0 def /checksum2 0 def - 0 1 msglen 1 sub { - /i exch def - % Lookup the encoding for the each barcode character - msg i get dup 0 lt { - 42 exch sub /indx exch def - /char ( ) def - } { - 1 string dup 0 4 -1 roll put /char exch def - barchars char search - pop % Discard true leaving pre - length /indx exch def % indx is the length of pre - pop pop % Discard seek and post - } ifelse - /enc encs indx get def % Get the indxth encoding - sbs i 6 mul 6 add enc putinterval % Put encoded digit into sbs - txt i [char i 9 mul 9 add textyoffset textfont textsize] put - /checksum1 checksum1 msglen i sub 1 sub 20 mod 1 add indx mul add def - /checksum2 checksum2 msglen i sub 15 mod 1 add indx mul add def - } for - - includecheck { - % Put the first checksum character - /checksum1 checksum1 47 mod def - /checksum2 checksum2 checksum1 add 47 mod def - sbs msglen 6 mul 6 add encs checksum1 get putinterval - sbs msglen 6 mul 12 add encs checksum2 get putinterval - % Put the end character - sbs msglen 6 mul 18 add encs 48 get putinterval - } { - % Put the end character - sbs msglen 6 mul 6 add encs 48 get putinterval - } ifelse - - % Return the arguments - << - /ren //renlinear - /sbs [sbs {48 sub} forall] - /bhs [sbs length 1 add 2 idiv {height} repeat] - /bbs [sbs length 1 add 2 idiv {0} repeat] - includetext { - /txt txt - } if - /opt options - >> - - dontdraw not //renlinear if - - end - -} bind def -/code93 dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp code93 0.0 0 0 0 +%%BeginData: 45 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\Ou "b5 AU& DP!5%O P!5$bI=%,/F +E2M8Ou%NL5FCf]=F(o r3OtVtS06Cc +MFEqe:AohO*+EV1 >FEqe :AohO *OtVt S05 +p2B4uB0BO tmjBQTCjOu" +b&DI[`1>E/nB1GL U=16)Pn 0ekF<1 QDYo0 ekI =16)Pn0ekL >0ocGm1,1L< +1QDYo1,1O=16)Pn1,1R>0ocGm0ekC;1l_bp1GLX>0ocGm1bg^>0ocGn0ekC;1QDYp0ekF<16)P +o0ekI=0ocGn1,1L<16)Po1,1O=0ocGn1GLU=0ocGm0etI<1QDYo0etL=16)Pn0etO>0ocGm1,: +R=16)Pn1GU[>0ocGm0ekC<1QDYo0ekF=16)Pn0ekI>0ocGm1,1L=16)Pn1GLU>0ocGn0etI<16 +)Po0etL=0ocGn0ekC<16)Po0ekF=0ocGn1,1L=0ocGn1,:R=0ocGm0etI=16)Pn0etL>0ocGm1 +,:R>0ocGm1,CX>0ocGm1,1L>0ocGo0ekC;16)Pp0ekF<0ocGo1,1L<0ocGm0etI>0ocGm0f(O> +0ocGn0ekC=0ocGm1,1O>0ocGo0etI<0ocGo0ekC<0ocGm1,:U>0ocGm0ekC>0ocJn0ekC>0els +s1G<3GEarckEc[6k0JP==1c70M3&s8k6UX@47n?3D92&&T:Jand;cHat='/U//M8.k0.S?31G< +3GEbo<)+C\c"@rGmhP%'S106:`I0o5jm1GA[OOu"b4AoohbrK8riF(TMNM#0ocB87T:[TAooeg"B.ch06:`I1QDT:7T:mZAoojP5!G,c05YcC+C\c"C +h7LI$'I(tBnubP1GP"UU;P&5P!@q]:k+D,M +$G%#3.+C\c"@rGmh+DHW4Oo^@AP"_$3Ou"b*+DHW7Oo^_%I=!V]+DHW4Oo^_%I?ITYP#Q:>B-: +q3@q]:kP'AWo+DHW4Oo^_%05;VEL]NY>Ou%NLAM7nAB-;&4B8?P&P"_#p05YcCCh7K,D0'?Q@Z +iN]DI[L*A7]7aARfM&06:TD+Dl14Ch7L?#*NeY)3P#`V33W_HS9GLF!,=@B5D-sL^'#YL^fLJP +,4FCoH/Fq]Z#F!+[0F(03R@Yb&J!Jgf?;L<(g +BkM+$I?K4g04JC3+Bot0@WR]AL]NY>L]W`;H\_ZMP(R$_Bl7EsF_#'*AU& +% uk.co.terryburton.bwipp/code93 0.0 0 +%%EndData +%%EndResource % --END ENCODER code93-- % --BEGIN ENCODER code93ext-- -% --REQUIRES code93-- +% --REQUIRES preamble raiseerror renlinear code93-- % --DESC: Code 93 Extended % --EXAM: Code93 Ext! % --EXOP: includetext includecheck % --RNDR: renlinear -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renlinear dup /uk.co.terryburton.bwipp findresource put -dup /code93 dup /uk.co.terryburton.bwipp findresource put -begin -/code93ext { - - 20 dict begin - - /options exch def % We are given an options string - /barcode exch def % We are given the code39extended text - - /dontdraw false def - /includetext false def - /parse false def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - % Parse ordinals of the form ^NNN to ASCII - parse { - /msg barcode length string def - /j 0 def - barcode - { % loop - (^) search { - dup msg exch j exch putinterval - length j add 1 add /j exch def - pop - dup 0 3 getinterval cvi msg exch j 1 sub exch put - dup length 3 sub 3 exch getinterval - } { - dup msg exch j exch putinterval - length j add /j exch def - /barcode msg 0 j getinterval def - exit - } ifelse - } loop - } if - - /barlen barcode length def - - % Extended alphabet to non-extended alphabet - /extencs - [ (^SFT%U) (^SFT$A) (^SFT$B) (^SFT$C) (^SFT$D) (^SFT$E) (^SFT$F) (^SFT$G) - (^SFT$H) (^SFT$I) (^SFT$J) (^SFT$K) (^SFT$L) (^SFT$M) (^SFT$N) (^SFT$O) - (^SFT$P) (^SFT$Q) (^SFT$R) (^SFT$S) (^SFT$T) (^SFT$U) (^SFT$V) (^SFT$W) - (^SFT$X) (^SFT$Y) (^SFT$Z) (^SFT%A) (^SFT%B) (^SFT%C) (^SFT%D) (^SFT%E) - ( ) (^SFT/A) (^SFT/B) (^SFT/C) (^SFT/D) (^SFT/E) (^SFT/F) (^SFT/G) - (^SFT/H) (^SFT/I) (^SFT/J) (^SFT/K) (^SFT/L) (-) (.) (^SFT/O) - (0) (1) (2) (3) (4) (5) (6) (7) - (8) (9) (^SFT/Z) (^SFT%F) (^SFT%G) (^SFT%H) (^SFT%I) (^SFT%J) - (^SFT%V) (A) (B) (C) (D) (E) (F) (G) - (H) (I) (J) (K) (L) (M) (N) (O) - (P) (Q) (R) (S) (T) (U) (V) (W) - (X) (Y) (Z) (^SFT%K) (^SFT%L) (^SFT%M) (^SFT%N) (^SFT%O) - (^SFT%W) (^SFT+A) (^SFT+B) (^SFT+C) (^SFT+D) (^SFT+E) (^SFT+F) (^SFT+G) - (^SFT+H) (^SFT+I) (^SFT+J) (^SFT+K) (^SFT+L) (^SFT+M) (^SFT+N) (^SFT+O) - (^SFT+P) (^SFT+Q) (^SFT+R) (^SFT+S) (^SFT+T) (^SFT+U) (^SFT+V) (^SFT+W) - (^SFT+X) (^SFT+Y) (^SFT+Z) (^SFT%P) (^SFT%Q) (^SFT%R) (^SFT%S) (^SFT%T) - ] def - - /newcode barlen 6 mul string def - /newtext barlen 6 mul string def - /j 0 def /k 0 def - 0 1 barlen 1 sub { - /i exch def - /extchar extencs barcode i get get def - /extlen extchar length def - newcode j extchar putinterval - newtext k barcode i get put - extlen 1 ne {newtext k 1 add ( ) putinterval} if - /j j extlen add def - /k k extlen 1 eq {1} {2} ifelse add def - } for - /newcode newcode 0 j getinterval def - /newtext newtext 0 k getinterval def - - % Get the result of encoding with code93 - options (dontdraw) true put - options (parsefnc) true put - /args newcode options //code93 exec def - - % Replace chars in /txt with chars in newtext - includetext { - /txt args (txt) get def - 0 1 newtext length 1 sub { - /i exch def - /txtentry txt i get def - txtentry 0 newtext i 1 getinterval put - txt i txtentry put - } for - args (txt) txt put - } if - args (opt) options put - args - - dontdraw not //renlinear if - - end - -} bind def -/code93ext dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp code93ext 0.0 0 0 0 +%%BeginData: 42 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\ X4a VtcO u8C3D +fBf4Df0WCP,i2'C ia0N4a W>W I ?IQ m3 0Ia6 V33 Qn!BlU*FE2 M8P!+/T/Wr; +\FcnqO1OXV5/Tc# UAWeit P#Z p nAWe *t3A 5;i FD5Z2F-8_M 1OYEcDfBf4D +f0WCOu%NL8T8*YF (K\OD0 '>4 @UX: eDe* FB@ ZmRN1G Oo[ 4NP!5$bP') pIL]E55P"_# +iD0'?Q5&,lSP,XU .P'E- LP%'4 LP,X6 >P! 5%&I=%,:D0 '?Q5&-6EP'N +4"C6ATNC6CcD1G< 3GEas#u AKYi2B 8?P&P "_# pP!FGY:Q>H0NWCkp!A]Z91QDJmNWD"t!B, +r=2i[nuNWD/##$t4t<%hF8#$t4t<$b"o#$t4t<$b%p#$t4t<$b(q#$t4t<$b+r#$t4t<$b.s#$ +t4t<$bS*!C;_H6B2(6NWDP.!C`"L7ZIL>NWD\2!D/:P8r`pFNWDh6!DSRT:6#?NNWDt:!E"jX; +N:cVNWE+>!EG-\)ien;as_499'3_;as_49TB<`;as_49o]Ea;as_4:6#Nb +;as_4:Q>Wc;as_4=,mJk;as_:6&l.U;as_:6B27V;as_:6]M@W;as_:7#hIX;as_:7?.RY;as_ +:7ZI[Z;as_:7udd[;as_:8<*m\;as_:8WF!];as_:8ra*^;as_:99'3_;as_:9TB<`;as_:9o] +Ea;as_::6#Nb;as_::Q>Wc;as_::lY`d;as_:;2tie;as_:;N:rf;as_:;iV&g;as_:)ien;as_4:lY`d;as_4; +2tie;as_4;N:rf;as_4;iV&g;as_4<*bYC05b?F@rGmh+C\c"Ch7L?#*NecV33VfDIn$6AU&;> +@UX:nAT!;.P&-;XOu"b+L]ESo05H@DOu%moL]LsnEbo<)L]N[NWC8cH$tiT05;VE+D +#e>Ch7LI!Ko5lCERC8AU&<5AT!;)P!+/J!I]*cBl7EsF_#'*AU&< +D06DG\+CT;'F,g?EG]]*AOu%moL]MC)GB@D@FHU*h!KsF/056S5Ou"b5G][M7FE2XLFEhmMBp) +,P1N[k`ASuU1H&)H +% uk.co.terryburton.bwipp/code93ext 0.0 0 +%%EndData +%%EndResource % --END ENCODER code93ext-- % --BEGIN ENCODER interleaved2of5-- +% --REQUIRES preamble raiseerror renlinear-- % --DESC: Interleaved 2 of 5 (ITF) % --EXAM: 2401234567 % --EXOP: height=0.5 includecheck includetext includecheckintext % --RNDR: renlinear -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renlinear dup /uk.co.terryburton.bwipp findresource put -begin -/interleaved2of5 { - - 20 dict begin % Confine variables to local scope - - /options exch def % We are given an option string - /barcode exch def % We are given a barcode string - - /dontdraw false def - /includecheck false def % Enable/disable checkdigit - /includetext false def % Enable/disable text - /includecheckintext false def - /textfont /Courier def - /textsize 10 def - /textyoffset -7 def - /height 1 def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - /textfont textfont cvlit def - /textsize textsize cvr def - /textyoffset textyoffset cvr def - /height height cvr def - - /barlen barcode length def % Length of the code - - % Prefix 0 to barcode if length is even and including checkdigit - % or length is odd and not including checkdigit - barlen 2 mod 0 eq includecheck and % even & includecheck - barlen 2 mod 0 ne includecheck not and or { % odd & !includecheck - /pad barlen 1 add string def % Create pad one bigger than barcode - pad 0 48 put % Put ascii 0 at start of pad - pad 1 barcode putinterval % Add barcode to the end of pad - /barcode pad def % barcode=pad - /barlen barlen 1 add def % barlen++ - } if - - % Add checksum to end of barcode - includecheck { - /checksum 0 def - 0 1 barlen 1 sub { - /i exch def - i 2 mod 0 eq { - /checksum checksum barcode i get 48 sub 3 mul add def - } { - /checksum checksum barcode i get 48 sub add def - } ifelse - } for - /checksum 10 checksum 10 mod sub 10 mod def - /pad barlen 1 add string def % Create pad one bigger than barcode - pad 0 barcode putinterval % Add barcode to the start of pad - pad barlen checksum 48 add put % Add checksum to end of pad - /barcode pad def % barcode=pad - /barlen barlen 1 add def % barlen++ - } if - - % Create an array containing the character mappings - /encs - [ (11221) (21112) (12112) (22111) (11212) - (21211) (12211) (11122) (21121) (12121) - (1111) (2111) - ] def - - % Create a string of the available characters - /barchars (0123456789) def - /sbs barlen 5 mul 8 add string def - /txt barlen array def - - % Put the start character - sbs 0 encs 10 get putinterval - - 0 2 barlen 1 sub { - /i exch def - % Lookup the encodings for two consecutive barcode characters - barcode i 1 getinterval barchars exch search - pop % Discard true leaving pre - length /indx exch def % indx is the length of pre - pop pop % Discard seek and post - /enca encs indx get def % Get the indxth encoding - - barcode i 1 add 1 getinterval barchars exch search - pop % Discard true leaving pre - length /indx exch def % indx is the length of pre - pop pop % Discard seek and post - /encb encs indx get def % Get the indxth encoding - - % Interleave the two character encodings - /intl enca length 2 mul string def - 0 1 enca length 1 sub { - /j exch def - /achar enca j get def - /bchar encb j get def - intl j 2 mul achar put - intl j 2 mul 1 add bchar put - } for - - sbs i 5 mul 4 add intl putinterval % Put encoded digit into sbs - txt i [barcode i 1 getinterval i 9 mul 4 add textyoffset textfont textsize] put - includecheck includecheckintext not and barlen 2 sub i eq and { - txt i 1 add [( ) i 1 add 9 mul 4 add textyoffset textfont textsize] put - } { - txt i 1 add [barcode i 1 add 1 getinterval i 1 add 9 mul 4 add textyoffset textfont textsize] put - } ifelse - } for - - % Put the end character - sbs barlen 5 mul 4 add encs 11 get putinterval - - % Return the arguments - << - /ren //renlinear - /sbs [sbs {48 sub} forall] - /bhs [sbs length 1 add 2 idiv {height} repeat] - /bbs [sbs length 1 add 2 idiv {0} repeat] - includetext { - /txt txt - } if - /barratio 2 - /spaceratio 2 - /opt options - >> - - dontdraw not //renlinear if - - end - -} bind def -/interleaved2of5 dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp interleaved2of5 0.0 0 0 0 +%%BeginData: 43 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\O u"b5A +U&KFD5Z 2F*j(N Amo L sAWf 3'P! FGY <0B5(@ZmRN 0oc8tP)XR(F +_-_!H]ftD5*C&O5 *@^MH] ft& Eckr V1OY EdI ?J0)*g/N:D fBf4Df0WZ5* +@^MP#Q@=FD5Z2F* j'+I? I/TF Cf]=A oDR/ +EV 1>FCoH/FHS 5=1G +E,[FDDKKH1Ch7$uARmQ7Ai4%+A4($=Ea`I"ATEe]8T&W]Ebo;qG%G2,1*CLI+>k9YF`VXI@rH7 +,@;0U%Df0B:+Co2!BlnDL061K8F(Jp'Ec5u]5CJ\oI?I/T@UX:nASrW"@<,jrA7^p5Ou$QUEbo +<)L]W`SL]ET$Bl7EsF_#&nBOt[hOp#6&Ebo<)L]W`SL]ETTBl7EsF_#&nBOt[hP&QQeP&bn&E+ +*9"@UX:nAT!;)Oo^`BOu%&cA;C5A0Tp["@:Y/p@UX:eDe*FBGqWW8Eas#uAKYr#ACm"g^1OXU +'@q]F`CNFW8+Cf(r@r$..D'3:rEas#uAKY]M98G9bWKI:F1OYEdI?I,S@q]F`CNFW8L^IX*ARf +LsF_upAP%p/ZL^K;[Ou"b1@:UKi@<-0qDMS=V!Ks:B1N6c5L]CmmEas#uAWh=X@:UKi@<-0qDB +NG&ARfLsF_upgOo^_j04J@1@rGmh+E1b"Ou"b#@<-0qDBNCsEbo<)L]NY>Ou%NL<%hg#@ribsN +Wh-l1,:SE"Yqee0f"am0etI<16)Mn1,1LL]NZ4@UX:eBOPq&P!5%gP')ps055<7G`k7R1QlmDFY@FCoH/F$'K+\"Hie-AU&FCf]=F(or3+C1.TI=$'\FP"]SG!KmJ +>$'K+\"Hie-AU&FCf]=F(or3+C1.TI?ITYP"9Y'F!+q#Ebo<)L]r +rXL]ikAASu"!L^TA=P'K/P061WA0/%?WDJX$)ARTU4F(025>9IurF*i]sP,Wkm8R3uYBQG;#+E +M"5P%'4JOo^@?P#?X?ASGdjFFB=)>q]YrF!+[0F(03R@Yb&J!Jgf?;L=3"I?K4g+DG_'Cis9"F +Cf]=HS9JcF +% uk.co.terryburton.bwipp/interleaved2of5 0.0 0 +%%EndData +%%EndResource % --END ENCODER interleaved2of5-- % --BEGIN ENCODER itf14-- -% --REQUIRES interleaved2of5-- +% --REQUIRES preamble raiseerror renlinear interleaved2of5-- % --DESC: ITF-14 % --EXAM: 04601234567893 % --EXOP: includetext % --RNDR: renlinear -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renlinear dup /uk.co.terryburton.bwipp findresource put -dup /interleaved2of5 dup /uk.co.terryburton.bwipp findresource put -begin -/itf14 { - - 20 dict begin % Confine variables to local scope - - /options exch def % We are given an option string - /barcode exch def % We are given a barcode string - - /dontdraw false def - /includetext false def % Enable/disable text - /textfont /Courier def - /textsize 10 def - /textxoffset 0 def - /textyoffset -7 def - /height 1 def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - /textfont textfont cvlit def - /textsize textsize cvr def - /textxoffset textxoffset cvr def - /textyoffset textyoffset cvr def - /height height cvr def - - % Calculate EAN checksum and add to end of barcode - barcode length dup 13 eq exch 14 eq or { - /gtin barcode 0 13 getinterval def - } if - - % Get the result of encoding with interleaved2of5 - options (dontdraw) true put - options (showborder) true put - options (borderwidth) 4 put - options (borderleft) 15 put - options (borderright) 15 put - options (height) 0.5 put - options (includecheck) true put - options (includecheckintext) true put - options (textyoffset) -10 put - /args gtin options //interleaved2of5 exec def - - args (opt) options put - args - - dontdraw not //renlinear if - - end - -} bind def -/itf14 dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp itf14 0.0 0 0 0 +%%BeginData: 31 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\:%52X=FD5Z2 F-8_M 1G< 3GE as #u AWf 6?1 G<9WDK KE 0@X4aVtcOu8C 3DfBf4 Df0 W CP,i 2'Ci a0N 4aW>WI?IQm 30Ia6V33Qn! +BlU*FE2M8P!+/T/ Wr;\Fc nqO 1OXV 5/Tc #UA WeitP#ZpnA We*t3A5;iFD +5Z2F-8_M1OYEcDf Bf4Df 0WCO u%NL8 M>0s G][ P9DKI"CAU& FE;/ BAWe^ 01G># +B4uCM09S,#@<,jrA7^p5L^fMa@UX:eDe*FB@YbMWD3>$K04K->E,[FDFCm6a@UWe@ASu.&BT=- +*<(8Go1a$XXF*&O6AKW]`+E)9C0f1"`BkM.%F"]1e@;0doATDg0EfrY8P#Pn!Eas#uAUBS"LbP +!(P!4[^P#.<^HS8iPBlJ#DBlmrA1h'm(6YKnK@:OCjEfM55<(8Go1a$XXF*&O7Df0Z*Bl5&3DJ +XS@A8,[jFE9)gEa`['AS#n&DfV"*I?IQXP"@<:BOt[hF*2>U!0T-o!/LZ3%!sXAP!5$b04S[,@ +r$..D'3>%ARfLsF_r71@<,jrA7ZltP"UTbP,W/O!g7;S!0TKlL]`fVI?IQm!Ko6eP"769BOt[h +F*2>U$=da\@r$..D28O^C6GQP$Bf.e1Lad5@rGmhP%'4WP!+/$@<,jrA7^Q+P"T:uARfLsF_up +gOo^__HS8iPBlJ#DBlmrA1h'm(6YL%@CIDlLBlo@]8T&$VEcP`$FO+Cf(r@r!2tBkM +.%+E2@>G%kJuA1oTV@;0doATDg0EfrY8P#Qjm*c@<-"%NWX3=FDl,?Bl@m1P'CDUB6,2+Df0Z-Eaa0TE%`kbAS +uD_?-CEcQG7F`MSBDD#CBBlJ#6A7]@eDImj"F +)Q2A@qCgGOuY1:ATVm"@r#drB9KiQP'(hWFDtYuCM@[!I?IP~> +% uk.co.terryburton.bwipp/itf14 0.0 0 +%%EndData +%%EndResource % --END ENCODER itf14-- -% --BEGIN ENCODER identcode-- -% --REQUIRES interleaved2of5-- +% --BEGIN ENCODER identcode-- +% --REQUIRES preamble raiseerror renlinear interleaved2of5-- % --DESC: Deutsche Post Identcode % --EXAM: 563102430313 % --EXOP: includetext % --RNDR: renlinear -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renlinear dup /uk.co.terryburton.bwipp findresource put -dup /interleaved2of5 dup /uk.co.terryburton.bwipp findresource put -begin -/identcode { - - 20 dict begin % Confine variables to local scope - - /options exch def % We are given an option string - /barcode exch def % We are given a barcode string - - /dontdraw false def - /includetext false def % Enable/disable text - /textfont /Courier def - /textsize 10 def - /textxoffset 0 def - /textyoffset -7 def - /height 1 def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - /textfont textfont cvlit def - /textsize textsize cvr def - /textxoffset textxoffset cvr def - /textyoffset textyoffset cvr def - /height height cvr def - - % Calculate checksum and add to end of barcode - barcode length dup 11 eq exch 12 eq or { - /checksum 0 def - 0 1 10 { - /i exch def - /checksum checksum barcode i get 48 sub i 2 mod 0 eq {4 mul} {9 mul} ifelse add def - } for - /checksum 10 checksum 10 mod sub 10 mod def - 12 string - dup 0 barcode 0 11 getinterval putinterval - dup 11 checksum 48 add put - /pad exch def - } if - /barcode pad def - - % Compose the human readable text - /text ( . . ) 16 string copy def - text 0 barcode 0 2 getinterval putinterval - text 3 barcode 2 3 getinterval putinterval - text 7 barcode 5 3 getinterval putinterval - text 11 barcode 8 3 getinterval putinterval - text 15 barcode 11 1 getinterval putinterval - - % Get the result of encoding with interleaved2of5 - options (dontdraw) true put - options (includecheck) false put - /args barcode options //interleaved2of5 exec def - - args (txt) [ [text textxoffset textyoffset textfont textsize] ] put - args (textxalign) (center) put - args (opt) options put - args - - dontdraw not //renlinear if - - end - -} bind def -/identcode dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp identcode 0.0 0 0 0 +%%BeginData: 34 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\:%52X= FD5Z2 F-8 _M1 G< 3G Eas #uA Wf6?1G <9 WDKKE0 @X4aVt cOu8C3 DfB f 4Df0 WCP, i2' Cia0N4aW>W I?IQm30Ia6V +33Qn!BlU*FE2M8P !+/T/W r;\ Fcnq O1OX V5/ Tc#UAWeitP #ZpnAWe*t3A +5;iFD5Z2F-8_M1O YEcDf Bf4D f0WCO u%NL 8M> 0sG][P9DKI "CAU&FE;/ BAWe^ 01G >#B4uCM09S,#@<,jrA7^p5L^TA_@UX:eDe*FB@YbGUD3>$K04K->E,[FDA7]Y#@rGmh6=FC +uASu.&BT=`6AT`*9@q]Er:iCDs+A$*TDKKB,A7Zm#F`VXI@V$Z:0d(CT+>GVoA8,[jFE9)gEa` +['AS#n&DfV"*I?IQ=@<,jrA7^+N3/B8OAs,?63Kd4%EdKHKGA2#8/nnj-DKKB,A7\)9A4($=Ea +`I"ATEeb6tLL_F(8lp+AcutF-FCAm$+E).6Gp$X3B5)I/0/%?SB +ldisEcQ)=P!=AX<.0p$04S[,@r$..D281T1Pc$e!Jh)0056S5Ou"b$BOt[hF*2=B@q]F`CNFW8 ++C\c"@rGmh+DI!3LbP!kBnuhRC5;kQ4aVtfP&,PnL^B5\I?ITn!Ko6eP"769BOt[hF*2>U$=da +\@r$..D28O^C6GQP$Bf.e1Lad5@rGmhP%'4UP!+/$@<,jrA7^Q)P"T:uARfLsF_upgOo^__HS8 +iPBlJ#DBk1dmFCT6"AO9g96YL%@CIDlLBlo@n8T&$VEcP`$F%3/@rPBOt[hF*2>U0TlI"GVB!g66?H$!VBFGL$.@<,jrA7^PuL]`f6P'M.\G]\`H@UX:eDe*F +8"c*8D9Tj[CAU&H#IYDBl@m1NX0 +06DKKE0@FCf]=G].2+F(KG9FCf]=H +#I;,F(KG9FCf]=AoDR/+EV1>FE;/BAKY8$?'9G@EbBHR$?Tj(FEh51BkM=D#%M4^FCfKUG[YW* +F,g?@E--#;FD5Z2F-:cVEbBG9A8c@-A9)+&P&N'-Eb0-)Bl7KjEfsCb3IR&#Ou"b*A7]Y#@rGm +hOuSV806M%_@rEuAATDg:@Wc^5Df.1:GA2#8+Co%qBl7L&ATMd4Ear[DFcna +% uk.co.terryburton.bwipp/identcode 0.0 0 +%%EndData +%%EndResource % --END ENCODER identcode-- -% --BEGIN ENCODER leitcode-- -% --REQUIRES interleaved2of5-- +% --BEGIN ENCODER leitcode-- +% --REQUIRES preamble raiseerror renlinear interleaved2of5-- % --DESC: Deutsche Post Leitcode % --EXAM: 21348075016401 % --EXOP: includetext % --RNDR: renlinear -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renlinear dup /uk.co.terryburton.bwipp findresource put -dup /interleaved2of5 dup /uk.co.terryburton.bwipp findresource put -begin -/leitcode { - - 20 dict begin % Confine variables to local scope - - /options exch def % We are given an option string - /barcode exch def % We are given a barcode string - - /dontdraw false def - /includetext false def % Enable/disable text - /textfont /Courier def - /textsize 10 def - /textxoffset 0 def - /textyoffset -7 def - /height 1 def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - /textfont textfont cvlit def - /textsize textsize cvr def - /textxoffset textxoffset cvr def - /textyoffset textyoffset cvr def - /height height cvr def - - % Calculate checksum and add to end of barcode - barcode length dup 13 eq exch 14 eq or { - /checksum 0 def - 0 1 12 { - /i exch def - /checksum checksum barcode i get 48 sub i 2 mod 0 eq {4 mul} {9 mul} ifelse add def - } for - /checksum 10 checksum 10 mod sub 10 mod def - 14 string - dup 0 barcode 0 13 getinterval putinterval - dup 13 checksum 48 add put - /pad exch def - } if - /barcode pad def - - % Compose the human readable text - /text ( . . . ) 18 string copy def - text 0 barcode 0 5 getinterval putinterval - text 6 barcode 5 3 getinterval putinterval - text 10 barcode 8 3 getinterval putinterval - text 14 barcode 11 2 getinterval putinterval - text 17 barcode 13 1 getinterval putinterval - - % Get the result of encoding with interleaved2of5 - options (dontdraw) true put - options (includecheck) false put - /args barcode options //interleaved2of5 exec def - - args (txt) [ [text textxoffset textyoffset textfont textsize] ] put - args (textxalign) (center) put - args (opt) options put - args - - dontdraw not //renlinear if - - end - -} bind def -/leitcode dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp leitcode 0.0 0 0 0 +%%BeginData: 34 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\DP! 5%O P!5$ bI=% ,/F E2M8Ou%NL< IL$AOrfcH05 +kfOBl@m1P!5$bI? IQJE- ,f4D KC/f1 OYEX 06C cMFCoH/F 5FCf] =F(or 3OtVt S06 CcMFEh_9Ao hO*+EV1>FEh +_9AohO*OtVtS06C cMFEqe: AohO*+ EV1>F Eqe :AohO*OtVt S05+p2B4uB0 +BOtmjBQTCjOu$QUEas#uAWgMY%?bR;@<,jrA7^p5L^oSbOp$+b@WuO*E%YsE,[ +FGASH6rDe*EG@:V`=ARfLDBkM.%N\sCG@rHC.ARfg)6tLL_F(8lp+AcutF+9J$!G]Y'MAU&FCf]=F(or3+C-*qP'CDUB60(?FCf]=G[YE&B5W_6@qBP"ATErY@<-"%NWX3 +=FDl,?Bl@m1P'CDUB6,2+Df0Z-Eaa0TE%`kbASu +% uk.co.terryburton.bwipp/leitcode 0.0 0 +%%EndData +%%EndResource % --END ENCODER leitcode-- % --BEGIN ENCODER databaromni-- +% --REQUIRES preamble raiseerror renlinear renmatrix-- % --DESC: GS1 DataBar Omnidirectional % --EXAM: (01)24012345678905 % --EXOP: % --RNDR: renlinear renmatrix -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renlinear dup /uk.co.terryburton.bwipp findresource put -dup /renmatrix dup /uk.co.terryburton.bwipp findresource put -begin -/databaromni { - - 20 dict begin % Confine variables to local scope - - /options exch def % We are given an option string - /barcode exch def % We are given a barcode string - - /dontdraw false def - /height 33 72 div def - /linkage false def - /format (omni) def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - format (truncated) eq {/height 13 72 div def} if - /height height cvr def - - % Strip the AI and optional check digit - barcode length dup 17 eq exch 18 eq or { - barcode 0 4 getinterval (\(01\)) eq { - /binval [ - linkage {1} {0} ifelse - barcode 4 13 getinterval {48 sub} forall - ] def - } if - } if - - % Calculate EAN checksum and add to end of barcode - /checksum 0 def - 0 1 12 { - /i exch def - /checksum checksum barcode i 4 add get 48 sub i 2 mod 0 eq {3 mul} if add def - } for - /checksum 10 checksum 10 mod sub 10 mod def - 18 string - dup 0 barcode 0 17 getinterval putinterval - dup 17 checksum 48 add put - /barcode exch def - - % Create the human readable text - /txt barcode length array def - 0 1 barcode length 1 sub { - /i exch def - txt i [barcode i 1 getinterval 0 0 () 0] put - } for - - /ncr { % n r - 2 copy sub 2 copy lt {exch} if % n r maxd mind - 1 1 5 3 roll % mind j=1 v=1 n maxd - 1 add -1 exch { % mind j v n -1 maxd+1 - mul % mind j v*i - 1 index 3 index le { - 1 index idiv exch 1 add exch - } if - } for - { % mind j v - 1 index 3 index gt {exit} if - 1 index idiv exch 1 add exch - } loop - exch pop exch pop - } bind def - - /getRSSwidths { - /oe exch def - /el exch def - /mw exch def - /nm exch def - /val exch def - /out el array def - /mask 0 def - 0 1 el 2 sub { - /bar exch def - /ew 1 def - /mask mask 1 bar bitshift or def { - /sval nm ew sub 1 sub el bar sub 2 sub ncr def - oe mask 0 eq and nm ew sub el 2 mul sub bar 2 mul add -2 ge and { - /sval sval nm ew sub el sub bar add el bar sub 2 sub ncr sub def - } if - el bar sub 2 gt { - /lval 0 def - nm ew sub el sub bar add 2 add -1 mw 1 add { - nm exch sub ew sub 1 sub el bar sub 3 sub ncr - /lval exch lval add def - } for - /sval sval lval el bar sub 1 sub mul sub def - } { - nm ew sub mw gt {/sval sval 1 sub def} if - } ifelse - /val val sval sub def - val 0 lt {exit} if - /ew ew 1 add def - /mask mask 1 bar bitshift not and def - } loop - /val val sval add def - /nm nm ew sub def - out bar ew put - } for - out el 1 sub nm put - out - } bind def - - 0 1 12 { - /i exch def - binval i 1 add 2 copy get binval i get 4537077 mod 10 mul add put - binval i binval i get 4537077 idiv put - } for - /right binval 13 get 4537077 mod def - binval 13 2 copy get 4537077 idiv put - - /left 0 def - /i true def - 0 1 13 { - /j exch def - binval j get - dup 0 eq i and { - pop - } { - /i false def - /left left 3 -1 roll 10 13 j sub exp cvi mul add def - } ifelse - } for - - /d1 left 1597 idiv def - /d2 left 1597 mod def - /d3 right 1597 idiv def - /d4 right 1597 mod def - - /tab164 [ - 160 0 12 4 8 1 161 1 - 960 161 10 6 6 3 80 10 - 2014 961 8 8 4 5 31 34 - 2714 2015 6 10 3 6 10 70 - 2840 2715 4 12 1 8 1 126 - ] def - - /tab154 [ - 335 0 5 10 2 7 4 84 - 1035 336 7 8 4 5 20 35 - 1515 1036 9 6 6 3 48 10 - 1596 1516 11 4 8 1 81 1 - ] def - - /i 0 def { - d1 tab164 i get le { - tab164 i 1 add 7 getinterval {} forall - /d1te exch def /d1to exch def - /d1mwe exch def /d1mwo exch def - /d1ele exch def /d1elo exch def - /d1gs exch def - exit - } if - /i i 8 add def - } loop - - /i 0 def { - d2 tab154 i get le { - tab154 i 1 add 7 getinterval {} forall - /d2te exch def /d2to exch def - /d2mwe exch def /d2mwo exch def - /d2ele exch def /d2elo exch def - /d2gs exch def - exit - } if - /i i 8 add def - } loop - - /i 0 def { - d3 tab164 i get le { - tab164 i 1 add 7 getinterval {} forall - /d3te exch def /d3to exch def - /d3mwe exch def /d3mwo exch def - /d3ele exch def /d3elo exch def - /d3gs exch def - exit - } if - /i i 8 add def - } loop - - /i 0 def { - d4 tab154 i get le { - tab154 i 1 add 7 getinterval {} forall - /d4te exch def /d4to exch def - /d4mwe exch def /d4mwo exch def - /d4ele exch def /d4elo exch def - /d4gs exch def - exit - } if - /i i 8 add def - } loop - - /d1wo d1 d1gs sub d1te idiv d1elo d1mwo 4 false getRSSwidths def - /d1we d1 d1gs sub d1te mod d1ele d1mwe 4 true getRSSwidths def - /d2wo d2 d2gs sub d2to mod d2elo d2mwo 4 true getRSSwidths def - /d2we d2 d2gs sub d2to idiv d2ele d2mwe 4 false getRSSwidths def - /d3wo d3 d3gs sub d3te idiv d3elo d3mwo 4 false getRSSwidths def - /d3we d3 d3gs sub d3te mod d3ele d3mwe 4 true getRSSwidths def - /d4wo d4 d4gs sub d4to mod d4elo d4mwo 4 true getRSSwidths def - /d4we d4 d4gs sub d4to idiv d4ele d4mwe 4 false getRSSwidths def - - /d1w 8 array def - 0 1 3 { - /i exch def - d1w i 2 mul d1wo i get put - d1w i 2 mul 1 add d1we i get put - } for - - /d2w 8 array def - 0 1 3 { - /i exch def - d2w 7 i 2 mul sub d2wo i get put - d2w 6 i 2 mul sub d2we i get put - } for - - /d3w 8 array def - 0 1 3 { - /i exch def - d3w 7 i 2 mul sub d3wo i get put - d3w 6 i 2 mul sub d3we i get put - } for - - /d4w 8 array def - 0 1 3 { - /i exch def - d4w i 2 mul d4wo i get put - d4w i 2 mul 1 add d4we i get put - } for - - /widths [ - d1w {} forall - d2w {} forall - d3w {} forall - d4w {} forall - ] def - - /checkweights [ - 1 3 9 27 2 6 18 54 - 58 72 24 8 29 36 12 4 - 74 51 17 32 37 65 48 16 - 64 34 23 69 49 68 46 59 - ] def - - /checkwidths [ - 3 8 2 1 1 3 5 5 1 1 3 3 7 1 1 - 3 1 9 1 1 2 7 4 1 1 2 5 6 1 1 - 2 3 8 1 1 1 5 7 1 1 1 3 9 1 1 - ] def - - /checksum 0 def - 0 1 31 { - /i exch def - /checksum checksum widths i get checkweights i get mul add def - } for - /checksum checksum 79 mod def - checksum 8 ge {/checksum checksum 1 add def} if - checksum 72 ge {/checksum checksum 1 add def} if - /checklt checkwidths checksum 9 idiv 5 mul 5 getinterval def - /checkrtrev checkwidths checksum 9 mod 5 mul 5 getinterval def - /checkrt 5 array def - 0 1 4 { - /i exch def - checkrt i checkrtrev 4 i sub get put - } for - - % Stacked format - format (omni) eq format (truncated) eq or { % linear - - /sbs [ - 1 d1w {} forall checklt {} forall d2w {} forall - d4w {} forall checkrt {} forall d3w {} forall 1 1 - ] def - - << - /ren //renlinear - /sbs sbs - /bhs [sbs length 1 add 2 idiv {height} repeat] - /bbs [sbs length 1 add 2 idiv {0} repeat] - /txt txt - /textxalign (center) - /opt options - >> - - dontdraw not //renlinear if - - } { % 2D - stacked or stackedomni - - /top [ 1 1 d1w {} forall checklt {} forall d2w {} forall 1 1 0 ] def - /bot [ 1 1 d4w {} forall checkrt {} forall d3w {} forall 1 1 0 ] def - 0 2 24 { - /i exch def - top i get {0} repeat - top i 1 add get {1} repeat - } for - 50 array astore /top exch def - 0 2 24 { - /i exch def - bot i get {1} repeat - bot i 1 add get {0} repeat - } for - 50 array astore /bot exch def - - % Stacked - format (stacked) eq { - /sep [ 50 {0} repeat ] def - 4 1 45 { - /i exch def - top i get bot i get eq { - sep i 1 top i get sub put - } { - sep i 1 sep i 1 sub get sub put - } ifelse - } for - /pixs [ - 5 {top aload pop} repeat - sep aload pop - 7 {bot aload pop} repeat - ] def - /pixy pixs length 50 idiv def - } if - - % Stacked omnidirectional - format (stackedomni) eq { - /sep1 [ top {1 exch sub} forall ] def - sep1 0 [ 0 0 0 0 ] putinterval - sep1 46 [ 0 0 0 0 ] putinterval - 18 1 30 { - /i exch def - top i get 0 eq { - top i 1 sub get 1 eq { - 1 - } { - sep1 i 1 sub get 0 eq {1} {0} ifelse - } ifelse - } { - 0 - } ifelse - sep1 exch i exch put - } for - /sep2 [ 0 0 0 0 21 { 0 1 } repeat 0 0 0 0 ] def - /sep3 [ bot {1 exch sub} forall ] def - sep3 0 [ 0 0 0 0 ] putinterval - sep3 46 [ 0 0 0 0 ] putinterval - 19 1 31 { - /i exch def - bot i get 0 eq { - bot i 1 sub get 1 eq { - 1 - } { - sep3 i 1 sub get 0 eq {1} {0} ifelse - } ifelse - } { - 0 - } ifelse - sep3 exch i exch put - } for - /f3 [1 1 1 1 1 1 1 1 1 0 1 1 1] def - true 0 1 12 {dup bot exch 19 add get exch f3 exch get eq and} for { - % Right shifted module for value 3 finder - sep3 19 [ 0 0 0 0 0 0 0 0 0 0 1 0 0 ] putinterval - } if - /pixs [ - 33 {top aload pop} repeat - sep1 aload pop - sep2 aload pop - sep3 aload pop - 33 {bot aload pop} repeat - ] def - /pixy pixs length 50 idiv def - } if - - % Return the arguments - << - /ren //renmatrix - /pixs pixs - /pixx 50 - /pixy pixy - /height pixy 72 div - /width 50 72 div - /opt options - >> - - dontdraw not //renmatrix if - - } ifelse - - end - -} bind def -/databaromni dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp databaromni 0.0 0 0 0 +%%BeginData: 103 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\e #06 +M%_@rEuAATDg:@W c^5Df .1: GA2 # 8P1 l(D Ops 'T@<>p e@ <-:'DJ =HR +'Tt>:%52X=FD5Z2 F-8_M 1G< 3GE as #u AWf 6?1 G<9WDK KE 0@7 iD fBf 4Df 0WZY :js=E +bTE(FEqh:P!+/J! Ko='%< $3- B l@m 1H ]kFA @;L !rP!+/T5^e epOuSV6P,4< +rNWD;+NHB2`AWf3 'OtDh\ P') p OOu% N5Ot Ccr F_-^lI?ITY P%BdtOuY16E +-,f4DKCt)Ou%NL< ,Z_tBl @m1 H]g1 5P"B 8(E c#6,NX9fJF `(\tFCf!G4a +ShqASGdjFGLB^8< Plo1O YEc0 5+p2B 4uB0 BOt mjBQTCjOu$ QUEas#uAV^> +B"HlH="=PrY.?\O p04K- >E,[F ?@<>p e@< -:'DJ;FGA3 ieI7n6K4+@K +X[@7"CC+AZilBk1 puARfgr Df0!"+ Dl7BF pE@<*JdD/O&uBl[cpFD5 +Z2@;I''F`VXI@V$Z:1E^UV+>G\qA8,[jFE9)gEa`['AS#n&DfV"*I?IQ=@<,jrA7^Q"@UX:eDe +*FB@Yb/MWKKr%OuS7OP%Kk@LcLVpP&bn&@WuO*E%Y[0FCAWeEc5f4BgQ6=6YKnK@:OCjEfMtH; +_]C_@<>pE@<*JdD/O&uBl[cpFD5Z2@;I''F`VXI@rH7,@;0U%Df0B:+Co2!BlnDL061K8F(Jp' +Ec5u]5CJ\oI?I/T@q]F`CNFW8L]ESoL]E53L^\V`Bp(ZC1G<6OARfLsF_r72BOt[hF*2=B@UX: +eDe*E%BnunT!Kp*30TrDLL]W`SL]ET$H\_ceCjhIGOo^_%I?I,S@q]F`CNFW8L^IX*ARfLsF_u +pAP%p/ZL^K;[Ou$QUEas#uAWgMY&s>D)@UX:eDe*F8&X#dsBOt[hF*2>U0TlI"D0mpFGA2#8/n +AC4@:EYcDf'B+6=FClBOt[h6tp:JFH/CRDI[U*Eb/a&+@f?b+@KX[@7"CC+AZilBk1puARfgrD +f0!"+Cf(r@r!2tBkM.%+E2@>G%kJuA1oTV@;0doATDg0EfrY8P#Qjm9IB`Eas#uAKY]C!Kp-4!/LW8!/LV\P'DD<82"jjEdNTDOr9 +F^L]W_WP%K'(5(/SnL]N;4L]rS:P)"hoOo^C=P!45UCkr+T=GR'B=H[*>L]NZ@P#@H,L]NY>P! +4;W<.0p#H\_]c=GR'B=HZL-P!FGY/Efr4sAKYhuF)-R3P!+s2DJ^M-GESq:Ckr.UCm(c,@<. +/*P&-9^M#NQ0Op$+bF*:u.+EM^7C`mV4+D#b[WF]n/WFB:VOo]-1+C\c"P,X6=P,W>/Eg!Db1O +YEcAS`Ju@<.O1L]W`9HS92Y@;L`"Ou$um+D#b[WF]n/WFB:VOo^@?Oo^C=D0Ld:Oo]oID3@)GW +F^::WJCSWGZ3d05Pf?Cm$tuG%#3M!Ko6eP"76IG%#20F*:u.+Dc40C`m;* ++C\c"P,X6Ou"b.@<63,D..L$L]LsnEfprrE0:?e1OY +Et06Uc?+Eh10+EM^7Cm"g^1G!g4Fa94DUQG%#20Bp),B!(AsAP%od[P&-9^P'CGM +DK]H)+DDs-Bl8*&C`mGT98!:63q\Y6P'DD<82#!tB4uB0@VK_'@;L`/P"UH.76:+)C6CA^Bl8* +&CkrOV!g4Fa98!:63q\Y6P'AWrAS-%?!0T,kBcqM%B#`&M9!252LL',5G!252UL^&Y>L]`H0L^JkAhM)-K +L^8eBL]iM;L`_EsL'jB(#N(=AL^Jq?L^&YBLdm+,(krBeL]iMBL]N;;L]N<\?'6usFCAW52)HF +[L&k)+!/Lf7$A\b>#D`M=4G#)EJ>",JXe$AJaIL'? +q"$]"qA#`&M;;2>6YOu"b*L]ESoHXniRFCAW52DcOjP"UsHHZW\*0fCj2BnueQ!JguD9RD2N8M +=U/FCgV!Ou"b%0m%>s5*@]TA2.qFAWf6?1G<8nD0Ko]5*@]TA2.Y3AWf6?1G<8nASc:J5*@]TA +2._P!5$bP!FGY<%hr.Bo!%X!Ko6eP%?:\L]ESoHXnrUFCAW52 +)HFiP"UsHHZW\*0f:d1BnueQ!JguD9RD2N8M=U2FCgV!Ou"b%1j!Z!5*@]TA2J.IAWf6?1G<8q +D0Ko]5*@]TA2Ik6AWf6?1G<8qASc:J5*@]TA2Iq?P!5$bP!FGY<%hr.Bo!%X!Ko6eP%?:W0m@O +YA2,3;0kYQjWFR`*AWfr%0kG0>+Cm3DGAi9?AmoLsAKYVsFAc%9GA1T0BQK=m04Ze]AKYM<+Cm +3>F-SL]h?=1M:clWFRf,AWge=1M(B6+Cm9FG@cR +5FE2M8+D58-;H$ML`;-OL^&YJL +c1&MLe*==L^8eWLa7cbL]iN+Lbji!L`hL"Ld?hNL_,A-La%WkLdd+SLd[%OLc\n*1G<6OARfM" +Bk2=!F!+\C",I5=!f-l5!Jgi6"c*>!Jgc4!Jgi6$&AV%ARfLsF_uq1P%p.9@q]F`CNFW8L^9/9HS8lBARfLsF_r72BOt[hF*2>U! +KmJH1OYEc@q]F`CNFW8Le*\$HS8lBARfLsF_r72BOt[hF*2>U!KmJH1OYEc04S[,@r#n&+Cf(r +@r$:&A9;L++Cf(r@r$..D28L];MYL>Ckr7X9Th1b@q]F`CN=N;ATf2+BOt[hGA1T0BQG;+BOt[ +hF*2>U$'K%Z"d3\X"d2QB1G<6OARfLrFGL*`$'I*#!/LZ3"FDe9P!5$b@q]F`CN=M>Bcpo!ARf +LrFE1r9L]hFTWKKo;G^Y`GAoD^,@<@M4Df'B+P!*DqEc#6,NX9fJF`(\tFCf!G4d'i406:TD+B +sX&A2/:TI?I03BOt[hCik#PP"B1>GC+b$8RsZ%H[V&K@q]F`CN=NDI?I041O"1oP"CH1L]LeE1 +H[cQEb0,A061WACh[cu@<+#B@WNZ5@WO23BQG;#+EM"5P%'4JOo^@?P#?X?ASGdjFFB=)>q]Yr +F!+[0F(03R@Yb&J!Jgf?;L=3"I?K4g06DG\+EVjM06CcMFEh51BkM=D#%M4^FCfJGDfBe@DfBf +4Df0V=5!C*"Df0Z-Eaa0TE%`kbASu4aSi'AT/brLba=5!.C#_?'7"""Gd)7/UK-bP!5$bFDl+@Bp)+ +uDfd+9P"Us$HZNb;+DHW4FDl+@Bp),PWKMLSHZNb;+DHW4F(K;5BnueQWKKo;WKMLSP#Zpn82" +prG]P!3L]r-IDfCj@P')29K6(UCOogehL^/99Dfh-DP')29K3aWr05tWMGp%'?G]T$WLbb,kOu + %NL<+^&hD..OH$ZgDu@r#XdDf'B+P!+.FF(K;F+Bot1DfC&Z!KoX0WI9q$?'7!bAT0A[!*b6Z +L]E52L]C_DH#mP90o.GdL]E52L]E52?'9Jh&r6RE*d]PSP!5$bFDl+@Bp),F!0TKlFDl+@Bnue +QWKKo1!KoTmL]MpNF(K;F+DHW4P,XU;L]ET$H\_]NH\_ZMP#ZpnDN98!/LW2!/MA:L]E53I?K5=!/LW2!/LV\Ou"b4AT0FJ>9IBnFF/fEP!5&.I? +I0-Ou%/jE&3:M>DN98!/LW2!*tb5F(K;HLb;nf!/LW2!/LV\P'MisL]N;RHS9)r5*@^2Dfd+9P +"UT2P!+/$Dfd+9L]N[DOGLFDl,]!g7\SP(RgeE&!LWP'(hWE&*RXP'(hWE&3XYP')R(HX +^o8OogehI?K4gOu"b1Bm=nGE+sQ1_dDD*Y`ASu?nFE2)?05tWMF!,F9G +]PNWBm=lY1,!T\G^1ENBm=nVBOtmjBQPA9Bm=oZ8 +% uk.co.terryburton.bwipp/databaromni 0.0 0 +%%EndData +%%EndResource % --END ENCODER databaromni-- % --BEGIN ENCODER databarstacked-- -% --REQUIRES databaromni-- +% --REQUIRES preamble raiseerror renlinear renmatrix databaromni-- % --DESC: GS1 DataBar Stacked % --EXAM: (01)24012345678905 % --EXOP: -% --RNDR: renmatrix renlinear -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renmatrix dup /uk.co.terryburton.bwipp findresource put -dup /databaromni dup /uk.co.terryburton.bwipp findresource put -begin -/databarstacked { - - 20 dict begin % Confine variables to local scope - - /options exch def % We are given an option string - /barcode exch def % We are given a barcode string - - /dontdraw false def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - % Get the result of encoding with databaromni with format=stacked - options (dontdraw) true put - options (format) (stacked) put - - /args barcode options //databaromni exec def - - args (opt) options put - args - - dontdraw not //renmatrix if - - end - -} bind def -/databarstacked dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +% --RNDR: renmatrix +%%BeginResource: uk.co.terryburton.bwipp databarstacked 0.0 0 0 0 +%%BeginData: 29 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\X4a +VtcOu8C3DfBf4Df 0WCP , i2 'C ia0 N4a W>WI ?IQm3 +0Ia6V33Qn!BlU*F E2M8P! +/T / Wr; \F cnqO 1OX V5/Tc#UAWe itP#ZpnAWe* +t3A5;iFD5Z2F-8_ M1OYEc DfB f 4Df0 WCOu %NL 8Rc+K@rGmh L]E56P"^l=- +nmA)P&5P!@WuO*E %Y[0FC AWe EcZ> 2@r# Xd6 =FCj8WH#*; _]C_@<>pE@< +*JhFCAZpARlp#F` VXI@V '1dD BO.;F D)dF 0JP "!@;p1%Bk( RnBl@l3Bk1d +mFD5?$ATBFWEa`[ 'AS#n &DfV" *I?IQ =@< ,jrA7^p5L_ 5ee@UX:eDe* +FB@YbY[D3>$K04K ->E,[F? @<>pe@ <-F2@ :O( aA3s^89P&* SFD-[b7oM,b +6t(1G6=FmW;flGXCLq$!D09oA+C\n)0f'qjEZd(n+Co2!BlnDL061K8F(Jp'Ec5u]5CJ\o@UX: +eDe*F8"Cbe[@rGmhP%'4MP,XUE,[F?@<>pe@<-F2@:O(aA3s +^86YKnK@:OCjEfM\@;_]C_@<>pE@<*JhFCAZpARlp#F`VXI@rH7,@;0U%Df0B:+Co2!BlnDL06 +1K8F(Jp'Ec5u]5CJ\oI?I/T@q]F`CNFW8L]ESoL]E53L^\V`Bp(ZC1G<6OARfLsF_r72BOt[hF +*2=B@UX:eDe*E%BnunT!Kp*30TrDLL]W`SL]ET$H\_ceCjhIGOo^_%I?I,S@q]F`CNFW8L^IX* +ARfLsF_upAP%p/ZL^K;[Ou$QUEas#uAWgMY&s>D)@UX:eDe*F8&X#dsBOt[hF*2>U0TlI"D0mp +FGA2#8/nAC4@:EYcF*(i#CLq$C@:V`=ARfLDBkM.%N\X1D@rHC.ARfg)7oM,b6t(1G6=FmW;fl +GXCLq$!@q]F`CER/%B5)H1E,ol?Bk1dc0/%?SBldisEcQ)=P!=AX<.0p/L_>lIOuS6t@UX:eDe +*FBH'1.C&S#Kc@r$..D29m/!Kq[\@UX:eDe*FB5*@^?E-,f4DKCgDA8c@-A9)+&FE2M8P'CnaF +D5Z2F,gH:DfT]'FH-TIFCAZpARpsK04Am6F!+q#Eas#uAKYo1FD5Z2F"]1W@<>pe@<-:'DJ>7u +Ou$NeB60(8DfBf:E-,f4DKCtc@<-"%+CoD.FC]E#GEQnu061WAD..O,Bm>e?Ou[rR%[&V$A79R +g@UX:uFCAZpARpr`P%64gCG'+8/p(ZFEd;,:Ecc5;/n0$=E,Zq1AS,XoATD@'Dfp)1AWh2!3A5 +GbFDtYuCM@[!P.H"'F`V,9E+*6lBl7R3P#M~> +% uk.co.terryburton.bwipp/databarstacked 0.0 0 +%%EndData +%%EndResource % --END ENCODER databarstacked-- % --BEGIN ENCODER databarstackedomni-- -% --REQUIRES databaromni-- +% --REQUIRES preamble raiseerror renlinear renmatrix databaromni-- % --DESC: GS1 DataBar Stacked Omnidirectional % --EXAM: (01)24012345678905 % --EXOP: -% --RNDR: renmatrix renlinear -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renmatrix dup /uk.co.terryburton.bwipp findresource put -dup /databaromni dup /uk.co.terryburton.bwipp findresource put -begin -/databarstackedomni { - - 20 dict begin % Confine variables to local scope - - /options exch def % We are given an option string - /barcode exch def % We are given a barcode string - - /dontdraw false def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - % Get the result of encoding with databaromni with format=stackedomni - options (dontdraw) true put - options (format) (stackedomni) put - - /args barcode options //databaromni exec def - - args (opt) options put - args - - dontdraw not //renmatrix if - - end - -} bind def -/databarstackedomni dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +% --RNDR: renmatrix +%%BeginResource: uk.co.terryburton.bwipp databarstackedomni 0.0 0 0 0 +%%BeginData: 31 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\X4aVtcOu8C3Df Bf4D f 0W CP ,i2 'Ci a0N4 aW>WI +?IQm30Ia6V33Qn! BlU*FE 2M8 P !+/ T/ Wr;\ Fcn qO1OXV5/Tc #UAWeitP#Zp +nAWe*t3A5;iFD5Z 2F-8_M 1OY E cDfB f4Df 0WC Ou%NL8Rc+K @rGmhL]E56P +"^l=-nmA)P&5P!@ WuO*E% Y[0 FCAW eEcZ >2@ r#XdDf'B+6 =FCj8WHS:;_ +]C_@<>pE@<*JhFC AZpAR loZD /O&uB l[cp FD5 Z2@;I''F`V XI@V'1dDBO. +;FD)dF0JP"!@;p1 %Bk(R nBl@l 3Bk1d mFD 5?$ATBFWEa `['AS#n&DfV +"*I?IQ=@<,jrA7^ p5L_5ee @UX:eD e*FB@ YbY [D3>$K04K- >E,[F?@<>pe +@<-F2@:O(aA8c=&BgQ6=9P&*SFD-[r7oM,b6t(1G6=FmW;flGXCLq$!:Mju`A8-'q@ruF'DII? +(D09oA+C\n)0f'qjEZd(n+Co2!BlnDL061K8F(Jp'Ec5u]5CJ\o@UX:eDe*F8"Cbe[@rGmhP%' +4MP,XUE,[F?@<>pe@<-F2@:O(aA8c=&BgQ6=6YKnK@:OCjEf +N7P;_]C_@<>pE@<*JhFCAZpARloZD/O&uBl[cpFD5Z2@;I''F`VXI@rH7,@;0U%Df0B:+Co2!B +lnDL061K8F(Jp'Ec5u]5CJ\oI?I/T@q]F`CNFW8L]ESoL]E53L^\V`Bp(ZC1G<6OARfLsF_r72 +BOt[hF*2=B@UX:eDe*E%BnunT!Kp*30TrDLL]W`SL]ET$H\_ceCjhIGOo^_%I?I,S@q]F`CNFW +8L^IX*ARfLsF_upAP%p/ZL^K;[Ou$QUEas#uAWgMY&s>D)@UX:eDe*F8&X#dsBOt[hF*2>U0Tl +I"D0mpFGA2#8/nAC4@:EYcF*(i#CLq$pD/O&S@:V`=ARfLDBkM.%N^?lIOuS6t@UX:eDe*FBH'1.C&S#Kc@r$..D29m/!Kq[\@UX:eDe*FB5*@^? +E-,f4DKCgDA8c@-A9)+&FE2M8P'CnaFD5Z2F,gH:DfT]'FH-`MFCAZpARo^rDJ>8Y04Am6F!+q +#Eas#uAKYo1FD5Z2F"]1W@<>pe@<-:'DJ>7uOu$NeB60(8DfBf:E-,f4DKCtc@<-"%+CoD.FC] +E#GEQnu061WAD..O,Bm>e?Ou[rR%[&V$A79Rg@UX:uFCAZpARo^rDJ>7nP%64gCG'+8/p(ZFEd +;,:Ecc5;/n0$=E,Zq1AS,XoATD@'Dfp)1AWh2!3A5GbFDtYuCM@[!P.H"'F`V,9E+*6lBl7R3P +#M~> +% uk.co.terryburton.bwipp/databarstackedomni 0.0 0 +%%EndData +%%EndResource % --END ENCODER databarstackedomni-- % --BEGIN ENCODER databartruncated-- -% --REQUIRES databaromni-- +% --REQUIRES preamble raiseerror renlinear renmatrix databaromni-- % --DESC: GS1 DataBar Truncated % --EXAM: (01)24012345678905 % --EXOP: % --RNDR: renlinear renmatrix -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renlinear dup /uk.co.terryburton.bwipp findresource put -dup /databaromni dup /uk.co.terryburton.bwipp findresource put -begin -/databartruncated { - - 20 dict begin % Confine variables to local scope - - /options exch def % We are given an option string - /barcode exch def % We are given a barcode string - - /dontdraw false def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - % Get the result of encoding with databaromni with format=truncated - options (dontdraw) true put - options (format) (truncated) put - - /args barcode options //databaromni exec def - - args (opt) options put - args - - dontdraw not //renlinear if - - end - -} bind def -/databartruncated dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp databartruncated 0.0 0 0 0 +%%BeginData: 29 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\KFD 5Z2F * j( NA moL sAW f3'P !FGY< +0B5(@ZmRN0oc8tP )XR(F_ -_! H ]ft D5 *C&O 5*@ ^MH]ft&Eck rV1OYEdI?J0 +)*g/N:DfBf4Df0W Z5*@^M P#Q @ =FD5 Z2F* j'+ I?I02@<,jr A7^PsL]il7N +W^aa0e&9&HS8iPB lJ#DA7 9Rg @UX; !Ecl 80@ pE@<*JiEcl80@< ?'k+D l7BF `3F*&O6AKW]`+E)9C0f1"`BkM.%F"]1e@;0doATD +g0EfrY8P#Pn!Eas#uAV^Iu@<,jrA7^p5L]im?P"^4c3/B8OAs,?63Kd4%EdKHKGA2#8/nAC4@: +EYcFE2MA@psIjA3s^86YKnK@:OCjEfMbB;_]C_@<>pE@<*JiEcl80@E,[F?@<>pe@<-I1F`(\tFCeuL@:V`=ARfLDBkM.%N\j=F@rHC.AR +fg)7oM,b6t(1G6=FmW<-!,!@psIjA0>AqARfKuA8,[jF%3/A/VBOt[hF*2>U0TlI"GVpe@<-:'DJ>7uOu$NeB60(8DfBf:E-,f4DKCtc@<-"%+CoD.FC]E#GEQnu061 +WACh[cu@<.N1Ou[rR%[&V$A79Rg@UX;!Ecl80@ +% uk.co.terryburton.bwipp/databartruncated 0.0 0 +%%EndData +%%EndResource % --END ENCODER databartruncated-- % --BEGIN ENCODER databarlimited-- +% --REQUIRES preamble raiseerror renlinear-- % --DESC: GS1 DataBar Limited % --EXAM: (01)15012345678907 % --EXOP: % --RNDR: renlinear -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renlinear dup /uk.co.terryburton.bwipp findresource put -begin -/databarlimited { - - 20 dict begin % Confine variables to local scope - - /options exch def % We are given an option string - /barcode exch def % We are given a barcode string - - /dontdraw false def - /height 10 72 div def - /linkage false def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - /height height cvr def - - % Strip the AI and optional check digit - barcode length dup 17 eq exch 18 eq or { - barcode 0 5 getinterval dup (\(01\)0) eq exch (\(01\)1) eq or { - /binval [ - barcode 4 13 getinterval {48 sub} forall - ] def - linkage { - /linkval [ 2 0 1 5 1 3 3 5 3 1 0 9 6 ] def - 0 1 binval length 1 sub { - /i exch def - binval i binval i get linkval i get add put - } for - } if - } if - } if - - % Calculate EAN checksum and add to end of barcode - /checksum 0 def - 0 1 12 { - /i exch def - /checksum checksum barcode i 4 add get 48 sub i 2 mod 0 eq {3 mul} if add def - } for - /checksum 10 checksum 10 mod sub 10 mod def - 18 string - dup 0 barcode 0 17 getinterval putinterval - dup 17 checksum 48 add put - /barcode exch def - - % Create the human readable text - /txt barcode length array def - 0 1 barcode length 1 sub { - /i exch def - txt i [barcode i 1 getinterval 0 0 () 0] put - } for - - /ncr { % n r - 2 copy sub 2 copy lt {exch} if % n r maxd mind - 1 1 5 3 roll % mind j=1 v=1 n maxd - 1 add -1 exch { % mind j v n -1 maxd+1 - mul % mind j v*i - 1 index 3 index le { - 1 index idiv exch 1 add exch - } if - } for - { % mind j v - 1 index 3 index gt {exit} if - 1 index idiv exch 1 add exch - } loop - exch pop exch pop - } bind def - - /getRSSwidths { - /oe exch def - /el exch def - /mw exch def - /nm exch def - /val exch def - /out el array def - /mask 0 def - 0 1 el 2 sub { - /bar exch def - /ew 1 def - /mask mask 1 bar bitshift or def { - /sval nm ew sub 1 sub el bar sub 2 sub ncr def - oe mask 0 eq and nm ew sub el 2 mul sub bar 2 mul add -2 ge and { - /sval sval nm ew sub el sub bar add el bar sub 2 sub ncr sub def - } if - el bar sub 2 gt { - /lval 0 def - nm ew sub el sub bar add 2 add -1 mw 1 add { - nm exch sub ew sub 1 sub el bar sub 3 sub ncr - /lval exch lval add def - } for - /sval sval lval el bar sub 1 sub mul sub def - } { - nm ew sub mw gt {/sval sval 1 sub def} if - } ifelse - /val val sval sub def - val 0 lt {exit} if - /ew ew 1 add def - /mask mask 1 bar bitshift not and def - } loop - /val val sval add def - /nm nm ew sub def - out bar ew put - } for - out el 1 sub nm put - out - } bind def - - 0 1 11 { - /i exch def - binval i 1 add 2 copy get binval i get 2013571 mod 10 mul add put - binval i binval i get 2013571 idiv put - } for - /d2 binval 12 get 2013571 mod def - binval 12 2 copy get 2013571 idiv put - - /d1 0 def - /i true def - 0 1 12 { - /j exch def - binval j get - dup 0 eq i and { - pop - } { - /i false def - /d1 d1 3 -1 roll 10 12 j sub exp cvi mul add def - } ifelse - } for - - /tab267 [ - 183063 0 17 9 6 3 6538 28 - 820063 183064 13 13 5 4 875 728 - 1000775 820064 9 17 3 6 28 6454 - 1491020 1000776 15 11 5 4 2415 203 - 1979844 1491021 11 15 4 5 203 2408 - 1996938 1979845 19 7 8 1 17094 1 - 2013570 1996939 7 19 1 8 1 16632 - ] def - - /i 0 def { - d1 tab267 i get le { - tab267 i 1 add 7 getinterval {} forall - /d1te exch def /d1to exch def - /d1mwe exch def /d1mwo exch def - /d1ele exch def /d1elo exch def - /d1gs exch def - exit - } if - /i i 8 add def - } loop - - /i 0 def { - d2 tab267 i get le { - tab267 i 1 add 7 getinterval {} forall - /d2te exch def /d2to exch def - /d2mwe exch def /d2mwo exch def - /d2ele exch def /d2elo exch def - /d2gs exch def - exit - } if - /i i 8 add def - } loop - - /d1wo d1 d1gs sub d1te idiv d1elo d1mwo 7 false getRSSwidths def - /d1we d1 d1gs sub d1te mod d1ele d1mwe 7 true getRSSwidths def - /d2wo d2 d2gs sub d2te idiv d2elo d2mwo 7 false getRSSwidths def - /d2we d2 d2gs sub d2te mod d2ele d2mwe 7 true getRSSwidths def - - /d1w 14 array def - 0 1 6 { - /i exch def - d1w i 2 mul d1wo i get put - d1w i 2 mul 1 add d1we i get put - } for - - /d2w 14 array def - 0 1 6 { - /i exch def - d2w i 2 mul d2wo i get put - d2w i 2 mul 1 add d2we i get put - } for - - /widths [ - d1w {} forall - d2w {} forall - ] def - - /checkweights [ - 1 3 9 27 81 65 17 51 64 14 42 37 22 66 - 20 60 2 6 18 54 73 41 34 13 39 28 84 74 - ] def - - /checkseq [ - 0 1 43 {} for - 45 52 57 - 63 1 66 {} for - 73 1 79 {} for - 82 - 126 1 130 {} for - 132 - 141 1 146 {} for - 210 1 217 {} for - 220 - 316 1 320 {} for - 322 323 - 326 337 - ] def - - /checksum 0 def - 0 1 27 { - /i exch def - /checksum checksum widths i get checkweights i get mul add def - } for - /checksum checksum 89 mod def - /seq checkseq checksum get def - /swidths seq 21 idiv 8 3 6 false getRSSwidths def - /bwidths seq 21 mod 8 3 6 false getRSSwidths def - - /checkwidths [0 0 0 0 0 0 0 0 0 0 0 0 1 1] def - 0 1 5 { - /i exch def - checkwidths i 2 mul swidths i get put - checkwidths i 2 mul 1 add bwidths i get put - } for - - /sbs [ - 1 d1w {} forall checkwidths {} forall d2w {} forall 1 1 - ] def - - % Return the arguments - << - /ren //renlinear - /sbs sbs - /bhs [sbs length 1 add 2 idiv {height} repeat] - /bbs [sbs length 1 add 2 idiv {0} repeat] - /txt txt - /textxalign (center) - /opt options - >> - - dontdraw not //renlinear if - - end - -} bind def -/databarlimited dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp databarlimited 0.0 0 0 0 +%%BeginData: 74 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\DP!5%OP !5$bI= %,/ F E2M 8O u%NL B" +HlH="=PrY.?\Op0 4K->E, [F? @<>p e@<- 0uD /"*'A3s^85 tR)$7oM,b6t +(1G6=FmW9PJ?XFC eu*D0 9oA+ C\npB l5&; Bln #2-nmA)+CT 5.Ch[BfFD5Z +2+DG@tDKKT)Bk;< <061K 8F(Jp 'Ec5u ]5C J\o@UX:eDe *FB@YbVZD.6 +po@rGmhP%'4[P&6 ?bHS8iP BlJ#DA 79Rg@ UX: nBl.R+ARn, 9A5$QPB67gI +.nGYpDfQsT1a$=CB5)I/0/%?SBldisEcQ)=P!=A +X<+99V@rGmhL]il6OuS7OP%Kk@LbY&hP&bn&@WuO*E%Y[0FCAWeEboH,Blmos6=FD'FCB336tp +:JFH.h@;_]C_@<>pE@<*JaBl.R+ARlp#F`VXI@V'1dDBO.;FD)dN+E)9C0eY2#@;0doATDg0Ef +rY8P#Pn!Eas#uAV^M!@<,jrA7^p5L]rs@P"^4c3/B8OAs,?63Kd4%EdKHKGA2#8/nAC4@:EYcC +h[a#FCeuL@:V`=@<,ddFCfKQ/4WVn+@KX[@7"CC+A?KdBlmos+Dl7BFE,[F?@<>pe@<-:'DJ;FGA4($A@r"JHB5)IJ1.c@nDfTl0@rrh`;_]C_@<>pE@ +<*JaBl.R+ARlonBOt[h+Co2!BlkJ:Ec6,8A7]:)061K8F(Jp'Ec5u]5CJ\oI?IQc&sB)S3/@QD +@<,jrA7^pLOuS70@q]F`CNFW8LbOtmP'AWh@<,jrA7^ofOu"b#Bl8*&C`lq)@UX:eDe*F8"GdM +M9RDRLP,Wkm8R7K8Ch[d&@:s.u05P??CNa-&+BsX'L]E53L]rS8L]`G8L]rS:L]N;3L^AkA?'7 +""!/LYbBl8*&Cm&7`!KsF/056S5Ou$Q]DK]H)+DDs-Bl8*&C`mGT95J<[CNa-&+DI!3Oo^_jI? +I-LP#O)VG]Y';@<,jrA7^p5OpR:-L]E53@UX:eDe*FB@Yb&JWI$:4P!5$bFEhmMBcpV&@UX:eD +e*E%BnueQ9S`\)!0.&8!*tb4I?I,SDI[^6L]W_WP,X6=Or9EpH]gR@P#R5 +M#WW%H]i3$!KpQ@"-QcL@=*e2P$!lFP!4[&Oo^_0I?IQXP"9qU!KpQ@"-QcL:j\?jI?IQc!KpQ +J;Na5"!KmJH5(/T*P!5%OP!5%OI?G)'1G+D#b[WF]n%!g7A_WFB:VL]W`UOo^CHZ!\`5*DmVGESq]!KsEnC`m1qEg!DX"-TX$@ra5=G%# +3M5&>CNCm"g^1OYEW06;;FC`meB@;I'&G%#20AS`Ju@<.O1L]N[MA +Trq2Oo^_%05Y-=CERJ&F)-R4@UX;?&!Cmp"HkQhP%?:i@;I'0@;I'-G%#3M!Ko5lDJ^M6D'3D6 +P,XU#Dfp.E@UX:"ATs;^I?I->F`\a;Ckr+TWGZR9G]._HI?G)'1Pc$e!Jh,1056S5Ou$Q]DK]H +)+DHW4Oo^@?Or9EU@VK_'@;I'#P"UH.*k?odC5<4[Cm"g^G[bB)G%#20Bcpl!DK]H)+DI!3KE* +((K9B,qG^Y`G04Zg\@VK_'@;L`.P"UH.*k?odC6CA^Bl8*&CkrLU!g4Fa98!9d\V$&CP'AWj0o +,gm1GOu"b*L]ESoHXniRFCAW62E)amP"UsHHZW\*1, +_'6BnueQ!JguD9RD2N8M=U/FCgV!Ou"b%0m%>s5*@]TA2.qFAWf6?1G<8nD0Ko]5*@]TA2.Y3A +Wf6?1G<8nASc:J5*@]TA2._+Cm3DGAi9BAmoLsAKYVsFAc%9GA1T0BQK=m04Ze]AKYM<+Cm3>F- +gGASc9-A28"GDhnX1@;L!r+D58-;H$M9IH2GC ++b$8RsT#H[V&K?'6us@q]F`CNj?(B4uC.+BsX&L]`G>L`;.ILd?h/LbjiPL^o4jLa@imLdHn3L +cgIpL^&YJLc1&\Lae-(L^f.fL`D4MLe:s91G<6OARfLsAT8hsL]E53Lb!h#P":B\LbsoJLd-[r +LdHH:P":C#L]N<-H[V&JLf0%XL]N51JpVp/8;7+tL&d3h!JUT;H[V&JL&fYX!JUU-H[V&JL&g" +`!Bc/=L&jPdI?I-U!CDMA6\YV2L&k.WOu"b$BOt[hF*2>U!0T-o!/LZ3)ga5PP!5$b04S[,@r$ +..D'3>%ARfLsF_r7FBk2=!F!,1[94MXH@r$:"BkM+$F!,1[99O+S!Ko6eP"769BOt[hF*2=B@q +]F`CNFW8LfomUOu"b4AT8i&BOt[hF(K>6@q]F`CNFW8P"Uro06;>OA9;L++EM+6L_Z(NL^8e=L +^%I"Cia/1B4Z0_;c@mSA9;L+Ou"b#GA1T0BQG;;ATq]YrF!+[0F +(03R@Yb&J!Jgf?;L=3"I?K4g06DG\+EVjM06CcMFEh51BkM=D#%M4^FCfJGDfBe@DfBf4Df0V= +5!C*"Df0Z-Eaa0TE%`kbASu +% uk.co.terryburton.bwipp/databarlimited 0.0 0 +%%EndData +%%EndResource % --END ENCODER databarlimited-- % --BEGIN ENCODER databarexpanded-- +% --REQUIRES preamble raiseerror renlinear renmatrix-- % --DESC: GS1 DataBar Expanded % --EXAM: (01)95012345678903(3103)000123 % --EXOP: % --RNDR: renlinear renmatrix -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renlinear dup /uk.co.terryburton.bwipp findresource put -dup /renmatrix dup /uk.co.terryburton.bwipp findresource put -begin -/databarexpanded { - - 20 dict begin % Confine variables to local scope - - /options exch def % We are given an option string - /barcode exch def % We are given a barcode string - - /dontdraw false def - /height 34 72 div def - /format (expanded) def - /segments -1 def - /linkage false def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - /height height cvr def - /segments segments cvi def - - segments -1 eq { - /segments format (expandedstacked) eq {4} {22} ifelse def - } if - - % Expand ordinals of the form ^NNN to ASCII - /expand { - /in exch def - /out in length string def - /j 0 def - in - { % loop - (^) search { - dup out exch j exch putinterval - length j add 1 add /j exch def - pop - dup 0 3 getinterval cvi out exch j 1 sub exch put - dup length 3 sub 3 exch getinterval - } { - dup out exch j exch putinterval - length j add /j exch def - out 0 j getinterval exit - } ifelse - } loop - } bind def - - % Parse out AIs - /ais [] def - /aival 2 dict def - barcode dup length 1 sub 1 exch getinterval - { % loop - dup () eq {exit} if - (\)) search pop - exch pop - exch (\() search { - exch pop exch 3 1 roll - } { - () 3 1 roll - } ifelse - [ ais aload pop counttomark 2 add index ] /ais exch def - aival 3 1 roll expand put - } loop - pop - - % Method selection - { % common exit - - % (01)9...(3103)... - ais length 2 eq { - ais 0 get (01) eq ais 1 get (3103) eq and { - aival (01) get 0 1 getinterval (9) eq aival (3103) get cvi 32767 le and { - (0100) false exit - } if - } if - } if - - % (01)9...(3202)... - ais length 2 eq { - ais 0 get (01) eq ais 1 get (3202) eq and { - aival (01) get 0 1 getinterval (9) eq aival (3202) get cvi 9999 le and { - (0101) false exit - } if - } if - } if - - % (01)9...(3203)... - ais length 2 eq { - ais 0 get (01) eq ais 1 get (3203) eq and { - aival (01) get 0 1 getinterval (9) eq aival (3203) get cvi 22767 le and { - (0101) false exit - } if - } if - } if - - % (01)9...(310x/320x)...[(11/13/15/17)...] - ais length dup 2 eq exch 3 eq or { - /ai310x false 3100 1 3109 {10 4 string cvrs ais 1 get eq or} for def - /ai320x false 3200 1 3209 {10 4 string cvrs ais 1 get eq or} for def - ais length 3 eq { - /aibad true [ (11) (13) (15) (17) ] {ais 2 get ne and} forall def - } { - /aibad false def - } ifelse - ais 0 get (01) eq ai310x ai320x or and aibad not and { - ais length 3 eq { - aival (01) get 0 1 getinterval (9) eq - aival ais 1 get get cvi 99999 le and - aival ais 2 get get cvi 999999 le and { - ai310x ais 2 get (11) eq and { (0111000) false exit } if - ai320x ais 2 get (11) eq and { (0111001) false exit } if - ai310x ais 2 get (13) eq and { (0111010) false exit } if - ai320x ais 2 get (13) eq and { (0111011) false exit } if - ai310x ais 2 get (15) eq and { (0111100) false exit } if - ai320x ais 2 get (15) eq and { (0111101) false exit } if - ai310x ais 2 get (17) eq and { (0111110) false exit } if - ai320x ais 2 get (17) eq and { (0111111) false exit } if - } if - } { - aival (01) get 0 1 getinterval (9) eq - aival ais 1 get get cvi 99999 le and { - ai310x { (0111000) false exit } if - ai320x { (0111001) false exit } if - } if - } ifelse - } if - } if - - % (01)9...(392x)... - ais length 2 ge { - /ai392x false 3920 1 3923 {10 4 string cvrs ais 1 get eq or} for def - ais 0 get (01) eq ai392x and { - aival (01) get 0 1 getinterval (9) eq { (01100) true exit } if - } if - } if - - % (01)9...(393x)... - ais length 2 ge { - /ai393x false 3930 1 3933 {10 4 string cvrs ais 1 get eq or} for def - ais 0 get (01) eq ai393x and { - aival (01) get 0 1 getinterval (9) eq { (01101) true exit } if - } if - } if - - % (01)... - ais 0 get (01) eq { (1) true exit } if - - % Freeform - (00) true exit - - } loop - /gpfallow exch def - /method exch def - - /conv12to40 { - (0000000000000000000000000000000000000000) 40 string copy - 2 copy 0 10 getinterval exch 0 3 getinterval cvi 2 10 string cvrs dup length 10 exch sub exch putinterval - 2 copy 10 10 getinterval exch 3 3 getinterval cvi 2 10 string cvrs dup length 10 exch sub exch putinterval - 2 copy 20 10 getinterval exch 6 3 getinterval cvi 2 10 string cvrs dup length 10 exch sub exch putinterval - 2 copy 30 10 getinterval exch 9 3 getinterval cvi 2 10 string cvrs dup length 10 exch sub exch putinterval - exch pop - } bind def - - /conv13to44 { - (00000000000000000000000000000000000000000000) 44 string copy - 2 copy 0 4 getinterval exch 0 1 getinterval cvi 2 4 string cvrs dup length 4 exch sub exch putinterval - dup 3 -1 roll 1 12 getinterval conv12to40 4 exch putinterval - } bind def - - /tobin { - string dup length 1 sub 0 exch 1 exch {1 index exch 48 put} for - dup 3 -1 roll 2 2 index length string cvrs dup length 2 index length exch sub exch putinterval - } bind def - - method (00) eq { - /cdf [] def - /gpf [] def - } if - - method (1) eq { - /cdf aival (01) get 0 13 getinterval conv13to44 def - /cdf [ cdf {48 sub} forall ] def - /gpf [] def - /ais ais 1 ais length 1 sub getinterval def - } if - - method (0100) eq { - /cdf 55 string def - cdf 0 aival (01) get 1 12 getinterval conv12to40 putinterval - cdf 40 aival (3103) get cvi 15 tobin putinterval - /cdf [ cdf {48 sub} forall ] def - /gpf [] def - /ais [] def - } if - - method (0101) eq { - /cdf 55 string def - cdf 0 aival (01) get 1 12 getinterval conv12to40 putinterval - ais 1 get (3202) eq { - aival (3202) get cvi 15 tobin - } { - aival (3203) get cvi 10000 add 15 tobin - } ifelse - cdf exch 40 exch putinterval - /cdf [ cdf {48 sub} forall ] def - /gpf [] def - /ais [] def - } if - - method length 7 eq { - /cdf 76 string def - cdf 0 aival (01) get 1 12 getinterval conv12to40 putinterval - 6 string dup 0 ais 1 get 3 1 getinterval putinterval - dup aival ais 1 get get 1 5 getinterval 1 exch putinterval cvi 20 tobin - cdf exch 40 exch putinterval - ais length 3 eq { - aival ais 2 get get - dup 0 2 getinterval cvi 384 mul exch - dup 2 2 getinterval cvi 1 sub 32 mul exch - 4 2 getinterval cvi add add - } { - 38400 - } ifelse - 16 tobin cdf exch 60 exch putinterval - /cdf [ cdf {48 sub} forall ] def - /gpf [] def - /ais [] def - } if - - method (01100) eq { - /cdf 42 string def - cdf 0 aival (01) get 1 12 getinterval conv12to40 putinterval - cdf 40 ais 1 get 3 1 getinterval cvi 2 tobin putinterval - /cdf [ cdf {48 sub} forall ] def - /gpf [ aival ais 1 get get {} forall ] def - /ais ais 2 ais length 2 sub getinterval def - } if - - method (01101) eq { - /cdf 52 string def - cdf 0 aival (01) get 1 12 getinterval conv12to40 putinterval - cdf 40 ais 1 get 3 1 getinterval cvi 2 tobin putinterval - cdf 42 aival ais 1 get get 0 3 getinterval cvi 10 tobin putinterval - /cdf [ cdf {48 sub} forall ] def - /gpf [ aival ais 1 get get dup length 3 sub 3 exch getinterval {} forall ] def - /ais ais 2 ais length 2 sub getinterval def - } if - - % Variable length symbol field - gpfallow { - /vlf 2 array def - } { - /vlf [] def - } ifelse - - % Pre-defined fixed length data field AIs - % any AI whose prefix is not included in this table must be - % terminated with "FNC1", even if it's fixed length - /aifixed 23 dict def - [ - 0 1 4 {} for - ] { - (00) 2 string copy dup dup 1 5 -1 roll 48 add put aifixed 3 1 roll put - } forall - [ - 11 1 20 {} for - 23 - 31 1 36 {} for - 41 - ] { - 10 2 string cvrs dup aifixed 3 1 roll put - } forall - - /fnc1 -1 def /lnumeric -2 def /lalphanumeric -3 def /liso646 -4 def - - /numeric << - 0 1 119 { - dup (00) 2 string copy dup 3 -1 roll 11 2 string cvrs - dup length 2 exch sub exch putinterval - dup 0 get 65 eq {dup 0 94 put} if - dup 1 get 65 eq {dup 1 94 put} if - exch 8 add - (0000000) 7 string copy dup 3 -1 roll 2 7 string cvrs - dup length 7 exch sub exch putinterval - } for - lalphanumeric (0000) - >> def - - /alphanumeric << - 48 1 57 {dup 43 sub 5 tobin} for - fnc1 (01111) - 65 1 90 {dup 33 sub 6 tobin} for - 42 (111010) - 44 1 47 {dup 15 add 6 tobin} for - lnumeric (000) - liso646 (00100) - >> def - - /iso646 << - 48 1 57 {dup 43 sub 5 tobin} for - fnc1 (01111) - 65 1 90 {dup 1 sub 7 tobin} for - 97 1 122 {dup 7 sub 7 tobin} for - 33 (11101000) - 34 (11101001) - 37 1 47 {dup 197 add 8 tobin} for - 58 1 63 {dup 187 add 8 tobin} for - 95 (11111011) - 32 (11111100) - lnumeric (000) - lalphanumeric (00100) - >> def - - % Append the remaining AI data - 0 1 ais length 1 sub { - /i exch def - /ai ais i get def - /val aival ai get def - gpf length ai length add val length add array - dup 0 gpf putinterval - dup gpf length ai [ exch {} forall ] putinterval - dup gpf length ai length add val [ exch {} forall ] putinterval - /gpf exch def - i ais length 1 sub ne aifixed ai 0 2 getinterval known not and { % Append FNC1 - gpf length 1 add array - dup 0 gpf putinterval - dup gpf length fnc1 put - /gpf exch def - } if - } for - - % Calculate the number of bits remaining to the next valid symbol size - /rembits { - dup - 12 div ceiling cvi 12 mul % Round up to multiple of 12 - 48 2 copy lt {exch} if pop % At least 4 symbols - dup 12 idiv dup segments mod 1 eq { % At least 2 symbols on last row of stacked symbol - 1 add 12 mul exch pop - } { - pop - } ifelse - exch sub - } bind def - - /encode { - dup /raw ne {exch get} {pop} ifelse - [ exch {48 sub} forall ] - dup length exch - gpfenc exch j exch putinterval - /j exch j add def - } bind def - - % Pre-compute alphanumeric and numeric runlengths and position of next ISO646-only characters - /numericruns [ gpf length {0} repeat 0 -1 ] def - /alphanumericruns [ gpf length {0} repeat 0 ] def - /nextiso646only [ gpf length {0} repeat 9999 ] def - gpf length 1 sub -1 0 { - /i exch def - gpf i get - (00) 2 string copy - dup 0 gpf i get dup fnc1 eq {pop 94} if put - i gpf length 1 sub lt {dup 1 gpf i 1 add get dup fnc1 eq {pop 94} if put} if - numeric exch known { - numericruns i numericruns i 2 add get 2 add put - } { - numericruns i 0 put - } ifelse - dup alphanumeric exch known { - alphanumericruns i alphanumericruns i 1 add get 1 add put - } { - alphanumericruns i 0 put - } ifelse - dup iso646 exch known exch alphanumeric exch known not and { - nextiso646only i 0 put - } { - nextiso646only i nextiso646only i 1 add get 1 add put - } ifelse - } for - - % Encode the general purpose field - /gpfenc 252 array def - /i 0 def /j 0 def /mode (numeric) def - { % loop - i gpf length eq {exit} if - { % not a loop but common exit point - - mode (numeric) eq { - i gpf length 2 sub le { - 2 string - dup 0 gpf i get dup fnc1 eq {pop 94} if put - dup 1 gpf i 1 add get dup fnc1 eq {pop 94} if put - dup numeric exch known { - numeric encode - /i i 2 add def - exit - } if - pop - lalphanumeric numeric encode - /mode (alphanumeric) def - exit - } { - gpf i get dup 48 lt exch 57 gt or { - lalphanumeric numeric encode - /mode (alphanumeric) def - exit - } if - /rem 12 1 add method length add vlf length add cdf length add j add rembits def - rem 4 ge rem 6 le and { % C1 + 1 into 4 to 6 bits - (000000) 6 string copy 0 rem getinterval - dup gpf i get 47 sub 2 4 string cvrs - dup length 4 exch sub exch putinterval /raw encode - /i i 1 add def - exit - } { % C1.FNC1 - 2 string dup 0 gpf i get put dup 1 94 put numeric encode - /i i 1 add def - exit - } ifelse - } ifelse - } if - - mode (alphanumeric) eq { - gpf i get fnc1 eq { - fnc1 alphanumeric encode - /i i 1 add def - exit - } if - gpf i get dup iso646 exch known exch alphanumeric exch known not and { - liso646 alphanumeric encode - /mode (iso646) def - exit - } if - numericruns i get 6 ge { - lnumeric alphanumeric encode - /mode (numeric) def - exit - } if - numericruns i get dup 4 ge exch i add gpf length eq and { - lnumeric alphanumeric encode - /mode (numeric) def - exit - } if - gpf i get alphanumeric encode - /i i 1 add def - exit - } if - - mode (iso646) eq { - gpf i get fnc1 eq { - fnc1 iso646 encode - /i i 1 add def - exit - } if - numericruns i get 4 ge nextiso646only i get 10 ge and { - lnumeric iso646 encode - /mode (numeric) def - exit - } if - alphanumericruns i get 5 ge nextiso646only i get 10 ge and { - lalphanumeric iso646 encode - /mode (alphanumeric) def - exit - } if - gpf i get iso646 encode - /i i 1 add def - exit - } if - - } loop - } loop - /gpf gpfenc 0 j getinterval def - - % Complete the variable length field and create pad - 1 12 add method length add vlf length add cdf length add gpf length add - dup rembits dup array /pad exch def - vlf length 0 ne { - add 12 idiv - dup 2 mod vlf exch 0 exch put - 14 le {0} {1} ifelse vlf exch 1 exch put - } { - pop pop - } ifelse - pad length 0 gt { - 0 5 pad length 1 sub { % Fill with 00100 - /i exch def - pad i [ 0 0 1 0 0 ] 0 pad length i sub 5 2 copy gt {exch} if pop getinterval putinterval - } for - mode (numeric) eq { % Prefix shift from numeric to ASCII - /pad [ 0 0 0 0 pad aload pop ] 0 pad length getinterval def - } if - } if - - % Concatinate fields - /binval [ - linkage {1} {0} ifelse - method {48 sub} forall - vlf aload pop - cdf aload pop - gpf aload pop - pad aload pop - ] def - /datalen binval length 12 idiv def - - /ncr { % n r - 2 copy sub 2 copy lt {exch} if % n r maxd mind - 1 1 5 3 roll % mind j=1 v=1 n maxd - 1 add -1 exch { % mind j v n -1 maxd+1 - mul % mind j v*i - 1 index 3 index le { - 1 index idiv exch 1 add exch - } if - } for - { % mind j v - 1 index 3 index gt {exit} if - 1 index idiv exch 1 add exch - } loop - exch pop exch pop - } bind def - - /getRSSwidths { - /oe exch def - /el exch def - /mw exch def - /nm exch def - /val exch def - /out el array def - /mask 0 def - 0 1 el 2 sub { - /bar exch def - /ew 1 def - /mask mask 1 bar bitshift or def { - /sval nm ew sub 1 sub el bar sub 2 sub ncr def - oe mask 0 eq and nm ew sub el 2 mul sub bar 2 mul add -2 ge and { - /sval sval nm ew sub el sub bar add el bar sub 2 sub ncr sub def - } if - el bar sub 2 gt { - /lval 0 def - nm ew sub el sub bar add 2 add -1 mw 1 add { - nm exch sub ew sub 1 sub el bar sub 3 sub ncr - /lval exch lval add def - } for - /sval sval lval el bar sub 1 sub mul sub def - } { - nm ew sub mw gt {/sval sval 1 sub def} if - } ifelse - /val val sval sub def - val 0 lt {exit} if - /ew ew 1 add def - /mask mask 1 bar bitshift not and def - } loop - /val val sval add def - /nm nm ew sub def - out bar ew put - } for - out el 1 sub nm put - out - } bind def - - /tab174 [ - 347 0 12 5 7 2 87 4 - 1387 348 10 7 5 4 52 20 - 2947 1388 8 9 4 5 30 52 - 3987 2948 6 11 3 6 10 104 - 4191 3988 4 13 1 8 1 204 - ] def - - /dxw datalen array def - - 0 1 datalen 1 sub { - - /x exch def - - /d binval x 12 mul 12 getinterval def - /d 0 0 1 11 {/j exch def 2 11 j sub exp cvi d j get mul add} for def - - /j 0 def { - d tab174 j get le { - tab174 j 1 add 7 getinterval {} forall - /dte exch def /dto exch def - /dmwe exch def /dmwo exch def - /dele exch def /delo exch def - /dgs exch def - exit - } if - /j j 8 add def - } loop - - /dwo d dgs sub dte idiv delo dmwo 4 true getRSSwidths def - /dwe d dgs sub dte mod dele dmwe 4 false getRSSwidths def - - /dw 8 array def - x 2 mod 0 eq { - 0 1 3 { - /j exch def - dw 7 j 2 mul sub dwo j get put - dw 6 j 2 mul sub dwe j get put - } for - } { - 0 1 3 { - /j exch def - dw j 2 mul dwo j get put - dw j 2 mul 1 add dwe j get put - } for - } ifelse - - dxw x dw put - - } for - - /finderwidths [ - 1 8 4 1 1 1 1 4 8 1 - 3 6 4 1 1 1 1 4 6 3 - 3 4 6 1 1 1 1 6 4 3 - 3 2 8 1 1 1 1 8 2 3 - 2 6 5 1 1 1 1 5 6 2 - 2 2 9 1 1 1 1 9 2 2 - ] def - - /finderseq [ - [0 1] - [0 3 2] - [0 5 2 7] - [0 9 2 7 4] - [0 9 2 7 6 11] - [0 9 2 7 8 11 10] - [0 1 2 3 4 5 6 7] - [0 1 2 3 4 5 6 9 8] - [0 1 2 3 4 5 6 9 10 11] - [0 1 2 3 4 7 6 9 8 11 10] - ] def - - /seq finderseq datalen 2 sub 2 idiv get def - /fxw seq length array def - 0 1 seq length 1 sub { - /x exch def - fxw x finderwidths seq x get 5 mul 5 getinterval put - } for - - /checkweights [ - -1 -1 -1 -1 -1 -1 -1 -1 % A1L - 77 96 32 81 27 9 3 1 % A1R - 20 60 180 118 143 7 21 63 % A2L - 205 209 140 117 39 13 145 189 % A2R - 193 157 49 147 19 57 171 91 % B1L - 132 44 85 169 197 136 186 62 % B1R - 185 133 188 142 4 12 36 108 % B2L - 50 87 29 80 97 173 128 113 % B2R - 150 28 84 41 123 158 52 156 % C1L - 166 196 206 139 187 203 138 46 % C1R - 76 17 51 153 37 111 122 155 % C2L - 146 119 110 107 106 176 129 43 % C2R - 16 48 144 10 30 90 59 177 % D1L - 164 125 112 178 200 137 116 109 % D1R - 70 210 208 202 184 130 179 115 % D2L - 190 204 68 93 31 151 191 134 % D2R - 148 22 66 198 172 94 71 2 % E1L - 40 154 192 64 162 54 18 6 % E1R - 120 149 25 75 14 42 126 167 % E2L - 175 199 207 69 23 78 26 79 % E2R - 103 98 83 38 114 131 182 124 % F1L - 159 53 88 170 127 183 61 161 % F1R - 55 165 73 8 24 72 5 15 % F2L - 89 100 174 58 160 194 135 45 % F2R - ] def - - /checkweightseq [ - seq {16 mul checkweights exch 16 getinterval aload pop} forall - ] dup length 8 sub 8 exch getinterval def - - /widths [ - dxw {{} forall} forall - ] def - - /checksum 0 def - 0 1 widths length 1 sub { - /i exch def - /checksum checksum widths i get checkweightseq i get mul add def - } for - /checksum checksum 211 mod datalen 3 sub 211 mul add def - - /i 0 def { - checksum tab174 i get le { - tab174 i 1 add 7 getinterval {} forall - /cte exch def /cto exch def - /cmwe exch def /cmwo exch def - /cele exch def /celo exch def - /cgs exch def - exit - } if - /i i 8 add def - } loop - - /cwo checksum cgs sub cte idiv celo cmwo 4 true getRSSwidths def - /cwe checksum cgs sub cte mod cele cmwe 4 false getRSSwidths def - - /cw 8 array def - 0 1 3 { - /i exch def - cw i 2 mul cwo i get put - cw i 2 mul 1 add cwe i get put - } for - - 22 array dup dup - 0 cw put 1 dxw putinterval 0 datalen 1 add getinterval - /dxw exch def - /datalen dxw length def - - % Encode row runlengths - /rows datalen segments div ceiling cvi array def - /numrows rows length def - 0 1 numrows 1 sub { - /r exch def - mark - segments 4 mod 0 ne r 2 mod 1 eq and {0} if - 1 1 - 0 1 segments 1 sub { - /pos exch r segments mul add def - pos datalen lt { - dxw pos get {} forall - pos 2 mod 0 eq {fxw pos 2 idiv get {} forall} if - } if - } for - 1 1 - counttomark array astore rows exch r exch put pop - } for - - format (expandedstacked) ne { % Linear - - % Remove leading space - /sbs rows 0 get dup length 1 sub 1 exch getinterval def - - /sbs [ - 1 - 0 1 datalen 1 sub { - /i exch def - dxw i get {} forall - i 2 mod 0 eq {fxw i 2 idiv get {} forall} if - } for - 1 1 - ] def - - << - /ren //renlinear - /sbs sbs - /bhs [sbs length 1 add 2 idiv {height} repeat] - /bbs [sbs length 1 add 2 idiv {0} repeat] - /opt options - >> - - dontdraw not //renlinear if - - } { % expandedstacked - - /seps numrows array def - 0 1 numrows 1 sub { - - /r exch def - /row rows r get def - - % Sample runlengths into bitmap - mark - 0 2 row length 1 sub { - /i exch def - row i get {0} repeat - i row length 1 sub lt {row i 1 add get {1} repeat} if - } for - counttomark array astore /row exch def pop - - % Derive the separator pattern - /sep [ row {1 exch sub} forall ] def - sep 0 [ 0 0 0 0 ] putinterval - sep row length 4 sub [ 0 0 0 0 ] putinterval - /finderpos [ % Finder pattern module positions - 19 98 row length 13 sub {} for - 68 98 row length 13 sub {} for - ] def - finderpos { - dup 14 add 1 exch { - /i exch def - row i get 0 eq { - row i 1 sub get 1 eq { - 1 - } { - sep i 1 sub get 0 eq {1} {0} ifelse - } ifelse - } { - 0 - } ifelse - sep exch i exch put - } for - } forall - - % For even segment-pair symbols reverse alternate rows - segments 4 mod 0 eq r 2 mod 1 eq and { - rows r get length rows 0 get length ne % Except partial width last row - finderpos length 2 mod 1 eq and { % with odd finders - /row [ 0 row aload pop ] def - /sep [ 0 sep aload pop ] def - } { - row length 1 sub -1 0 {row exch get} for - row astore pop - sep length 1 sub -1 0 {sep exch get} for - sep astore pop - } ifelse - } if - - rows r row put - seps r sep put - - } for - - % Extend last row and separator to fill width of symbol - /pixx rows 0 get length def - [ pixx {0} repeat ] dup 0 rows numrows 1 sub get putinterval - rows exch numrows 1 sub exch put - [ pixx {0} repeat ] dup 0 seps numrows 1 sub get putinterval - seps exch numrows 1 sub exch put - - % Middle separator pattern - /sep [ pixx 2 idiv 1 add { 0 1 } repeat ] 0 pixx getinterval def - sep 0 [0 0 0 0] putinterval - sep pixx 4 sub [0 0 0 0] putinterval - - % Compose the symbol - /pixs [ - 0 1 numrows 1 sub { - /r exch def - r 0 ne { - seps r get aload pop - } if - 34 {rows r get aload pop} repeat - r numrows 1 sub ne { - seps r get aload pop - sep aload pop - } if - } for - ] def - - << - /ren //renmatrix - /pixs pixs - /pixx pixx - /pixy pixs length pixx idiv - /height pixs length pixx idiv 72 div - /width pixx 72 div - /opt options - >> - - dontdraw not //renmatrix if - - } ifelse - - end - -} bind def -/databarexpanded dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp databarexpanded 0.0 0 0 0 +%%BeginData: 204 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\e #06 +M%_@rEuAATDg:@W c^5Df .1: GA2 # 8P1 l(D Ops 'T@<>p e@ <,q(E+ *Wp +ARp.D'Tt>:%52X= FD5Z2 F-8 _M1 G< 3G Eas #uA Wf6?1G <9 WDKKE0 @KFD5Z2F*j( +NAmoLsAWf3'P!FG Y<0B5( @Zm R N0oc 8tP) XR( F_-_!H]ftD 5*C&O5*@^MH +]ft&EckrV1OYEdI ?J0)*g /N: DfBf 4Df0 WZ5 *@^MP#Q@=F D5Z2F*j'+I? +I/TBOtmjBQPA1AS GdjFH S;?1 GOo[4NP!5$bP')pIL]E55P"_#iDfp/b5&,l +SP,XU.P'E-LP%'4LP,X6>P!5%&I=%,:Dfp/b5&-6EP'N4"C6ATNC6CcD1N.DXL]D1Q9ThYhP#Z +pnAUT^OOu"b"BlbD$+C1-d04AR<@;L`$Ou8CY@UX:eDe*FB30Ia,!KsF5*H] +gXBP#RGB.?][RFcnqOFcnqK!@X+jH]gRUFcnqE",Hu@LOFN0!/L`5!Kr4dP#Y^/@;0eG!g7\h) +i+QY!KpPj04AR9P!5$b@;0mnCkr1L!Kr4LG]7)/A_bd1Qjna"FFQkG%#3I!\c?l98ES(!Kp-:!BH<+@;0mnClSWS0ebDH99Li +\J,b[?Op$,l">DPa0P4a0F(LM"I?IQXP#Qjm<+0K^P%'4KP!+/#Blf(1P"Uf:0JS_R@;0e=!Kp +*9">_ee16Oe`"FFQkG%#3I!\c?l98ES(!Kp-:!BH<+@;0mnClSWS1,(JH99Li\-P)AKOp$,l"> +DPa0kOj1F(LM"I?IQXP#Qjm<+0K^P%'4KP!+/#Blf(1P"Uf:0JS_R@;0e=!Kp*9">_ee1Qjna" +FFQkG%#3I!\c?l98ES(!Kp-:!BH<+@;0mnClSWS1,(MI99Li\=RVD]Op$,l">DPa0kOj1F(LM" +I?IQXP#Qjm<+0K^P%'S6L]W`&P!4[(P!+tKHS8fA1GLS.+D,%uF(L(7*/FWM$mg7V$A\hJV33N +@Blf(2P"Us$P&bu68H\`#b"HoUE0O\[:L]NZ3P!+tKI?I +-a1LY!=P%'4LP!+.F@;01ZA0>u7F_)\"NWLpiNWLpkNWLpmNWLpo?$d]&Blf(3P"UsTOp$2r8W +klXHS8fA@UWdiAmoLsAWeitP#Yq)F,0gZ99''-0p4\.BeqItGT^F/1GUY/P&c]g@;01ZA +XAWf<,P#Qjm<.0p/@;0eG@Yb)K8p`4"Beqb*GT^U,Cia0B%pFbiL(@R:L^Jq@P,4XAWf<,P%?:ZE ++WNpCi=N\5*@]TD.Rg&De,"pOu"b$Df0_Q13@Fk0RJg.0JG170JG170JG170JG170JG170JG17 +0JG170JG170JG170JG17La\F_Or9&WOr9&UL^K;=P!4[%L]`f6Ot;CjL^KP,4P"_#iL]WA>P,4/2/b30JG170JG170JG170JG170JG170 +JG170JG170JG170JG170JG170Sh9CV32^P!g4FW!/Lc@9ThSq!/LZ=9Tgr_!f-uBV33Nq30Ia, +"Hks3WKKH.H'1.C",Qu?LPPte%$F:oDf0_Q13@Fk0Sfjp5*C2>Oq*X206D,ABl89\V33g$@Yb& +JWJCP;5)96&5'r(dP$!l2LbP!:I?I-a3/@Zms,r.n!f-o@=H[-VV33Nq30Ia,!g6ZK@Zip9I471GDPa0TnSG04SO)Lc:KnOu$TYAr$Fq +Bm*p$NWLmhP"UT3L^]G?@rH7.0f!ih1bb)<@q92--t-h5@;Lr,1GLR>P"UrhL_"TG@VK_CGqWZ +DPa0p4\H04S +O)Lc:KnOu$TYAr$FqBm*p$NWLmhP"UT3L^]G?@rH7.0f!ih1bb)<@;0e=!Kp*9">_ee16OeI@; +0mnClSWS1,(JH99Li^%s2`!Bl8?G+CSu-@;Lr,1GUX?P"UrhL*mOq!Jh8.DdmEuI?IT?A7gugL +a\EMP'J]jA7crg+CeqoH\aA=WI9q$?'6usB5hH*>9I471G<0NF!+[0?'7!lP#Q:0FD,T'P%'4P +P!+.F@q92-9Tl681Ljs-L]CjtG%#3I!\c?l98EV)%$F:oDf0_Q13@Fk0Tp^;#*PgG3/@QCBlf( +2P"UT5L]NZ4P'N3M@;0mnC`m/#F,0j[99Mr(!JgoB9S`_45*C2S/;P!^DdmEu+CeqoP!4[MP!5 + %S@;0eG@Yb,L4aUUOG%#20@;0e=!g63>99M8j!/L]>9Tgr]!J$>LP!5$gL]WA6P"_#iL]N[9IEdAp]=f +P,Wkm8R7K805#69+BosoOu"b"BlbD$+C1-dI?IQHATVU(A<$gI0ek@9P!+.F@q92-.[$Wk1Ljs +-L]CjtG%#3I!\c?l98EV)%$F:oDf0_Q13@Fk0Tp]kA7gWG@;0e=!Kp*3",Hu@9Tgr_!d&?iBl9 +)Z04SO)+BosuA7g1E0TrD`P"ArB1G9I?gG%#2 +0@;0e=!Kp*=99M8t@Yb,LWJCY>5*ATdI?I0-Ou"b"BlbD*Blf(3@;0eG@Yb)KWKKr<1OYEcB5h +HkCi"$6HS9PYAr$MO$'I)mHS9PYAft;#?'7!lP#X/DBkD((ARpT5Ou8CY>DN98!Jgl*I?I-,H] +A.]0SfdnV32^Z30H7W!Jgo8s,r.n0TlI"G[Y;uBm=3"L]`G6P)#3FI?I0+L^T">L_P2aP":BFL +`_ERLa7=qP":BX?$hA7L]Wa9Ot`%Y@;0=fG\(EA",Hu@LQZn1P"@<=DIYDWs,o/kCi4B4ATDKp +M#NPn05P'5E+iZtF_t]1Bk)ttOu"b-Ble2N1cC0fOu"b/F_t]1Bk&8J4GWun!JkrHOuSI'0JJ: +aP,4Fr?H@(f7L^0*BL^/$?@VK_.P":BPNX.?o0eb=90JJ;,NX.?o0eb=90JSA0L]N;bH] +g@C!6(*%L^8*@@VK_.P":BiL]N;rH]g@C!5"BpL^8*@@VK_.P":C9NX.?o0ekC:0enJ,NX.?o0 +ekC;0JI<\F_t]1Bk*/*0JG1s@;Kmr@;^4)ATDKpNWh*j0eb:F5*@^X!/LYaBlfGHL]N[EV0sI?I0-P'N3MB5hIG@UWu6@Zgb8@;I&jP!45@P"ArBGqWfLAs,?@1MI +t?BlfGHL]N[;pL]E54P"_$HP&QQeHY7;0P%'4JOo^^POuS6tB5hIGH'1."E+ +Y8BAo;*5P'AWmE+Y7sOu%NL<.0p#061W@@VKq*H]g@E%$EN3&<\T#%$GF_0Sfdn)3STYP!4;W< +0DBe3/A!+;Na"\AS5jkDKKr_C5;nR4aVtcOo^@IP&-:FP')2"P')29Ou"b&DI[Tq +AUBS"061KFP&5Q/5*AQeH]iN"P#Y_L5'r)>P,Wkm8R7K=P%'S9IQtAs-VML]DjdK89M`s':dD04A[9BOPe$D.Ra%@rc^0F!+ +[0B5hIG@XEn2I?K5=!*taD05b?GFD5f72Dd=1DJXS@>9IQtAs-VML]DjdK8(`a?'7!VE+Y8BL] +N[P"UrtAo;*5P!+/TFbj@PP#RThI?IQIF_t]1Bk*;i +P$iWSF_t]1Bk)1+DK?q7+Du==ATDKpEcl8@+DHW5Oo^_=L]W_?P'DD%DKTf-EbT$(F`)7CBnub +PG^Y`TOuQldE+iZtF_t]1Bk*;iP$iWFCiF&rDKTf-EbT$(F`)7CBcpi#E+iZtF_t]1Bk)1+DK? +q7L]NY>P"UT3Oo^_jI=#C=E+iZtF_t]1Bk)1+DK?q7L]ET_I?ITn3,*GP2Dd=T5*B<:5%/8HBO +Pe$D.Ra%A!0$=@$5Jl"FG#tG][Y@D`0F1Df0B:+DHW3P'DD%DIn'7Ble2N1cB8iCj@.;+Dtb8F +D5f72Dd=1DJXS@BnueQ!Kp*3!KmJHG^Y`TI?I,SB5hHoDI\D$r/qAL1G$t3skBOPe$D.Ra%A!/X2 +5^eep061W@L^](?Oo]E2FD,T'P%'RTG&1cR@Zgb%A7h!6Oo]<\!HMag@VKq*Ou%,iD28=X8oeK +[L^'#NOp$,l"u%_b0JG2:#*PgG)2J95ASmT(OuR)nAftfN98G6aWJCV3"HoUE0TnDY@Yb/M5*D +n.5*C1EEaa/7ASu!rA7[E.+DHW4Oo^_%P!FGBL]Wa9OuS6tB5hH*Bp),PG`k%B!Jk'FG]%Y@AT +DKp+D#G#De*E4Bcq,G!KmJH1Qk"OP#Zpn#B"[$ATDKpOu&7dI?IQP!4;WAWf6?FcnqOFa]D_Ou"b(ATUgK;g2qdFD,`B05kEb5*@]TASdMnOu"b.GEP.Q1 +GDI[]?Cj'6'P +!3]*@;M)-Ou%NL82#%-@;I'-G%#20Cj'6'+D#@3@UX;?WJCS +HS9G`@;I'-G%#3C!KsFF1OYEcI?IS`G%#20G%#20F*:u.P,XU#G%#3C!0Ur@P!FGY<%hg,+D#b +Q!KmJH1G9P'CnfFFB;^Ou"b5@:CrM1a$"W!F(?[L^](CL^ +/_;Lf]B8L';@I!F1EfL^/_>L]iMjL_PROK8'PGL^8eCL]iM;L`V@/L(BK&$\XWM99O+ +S!I^,%Ou"b+L]ESoHXn7@@:CrM1a$Or99N_1FCAW52`)XlL]NY>L^0):H[V&K04]09P!5$b04] +0CP!5$b04\pDAWf6?1G<9UGAiX.Ou"b%ASbq@5*@]TA7]RqP!5$b04\^:P!5$bP!FGY<%hu/C5 +<.Y!Ko6eP%?:WGAeU7+Co,+P,Vu6AWfr%ASc9-A8QO/L]hg?F_)\.ATUgK;g2qdFD,`Y1G<9_A +KYM+A7otHWFU*^P%nN=Ch4`"D0KQI"D2(YF(HJ,ATUgK;g2qdFD,`Y1G<9_L^9.MOu%?=!g7;S +!0TKlL]E53L]_uWC6CcD1Lt]c#AT%rP&-;\A9Vr7C6D5QG[u#S#&8qqP&-;\A9VT-C6D5QG^Y` +GI=$bML]N;6HS9,s5*@^4G9CXV!g7A1GAeU=P"Us_A9T/2L]W`UL]NY>A9VT-C6D5QG^Y`GI?I +T@G]t9T+Co\ZG^Y`G04np9A7]e*Bk2=!F!+\C!Jh#;"Gd)7!Jgc4!Jgl7#`&M;",I/;"Gd)7!J +gc4!Jgl7#)EA;",I)9#)E;9!Jgc4!Jgr9"Gd/9",I#7#`&M;!Jgc4!Jh#;!f-r7!f.&:"c*28! +Jgc4!Jgo8#)E>:!f-o6$&AVp*@-!/L`5 +!aQpQL]E57L]WA;>p*@-!/Lr;!f.);"C3-SL]E5;L]WA;L^&YC>p*@-!/Lr;!f.);#`&kE$=+c +YL]E53L]WA7L]iM;L^&Y?>p*@-!/LZ3!f-r7"Gd5;#)ESA#[JQWL]E53L]WA7L]iM;L^&YAL^J +qG>p*@-!/LZ3!f-r7"Gd;=#)ESA#`&kE$=+c[Ou"b4AT8i)Bl7HmEcYf3+Cno&@;KLmL]Wa=L] +W`;P"Uro04oHQ+E M+6P% 'R\Ou %moL] MR .EK Xde!Ks F/06iXD +Ou$]pG9D,QAnc-n ATE !/A9; L++EM +6 +F' &BL ]rrX +L]rr8P'DD<82"Id ARfM" AS GdjFE 8R/M #W ;2M #W;2M #W; 2M#W; 2LeW +\5L`hLNL`;-VL]` G6L_P Y-L &eT :G(p !X L^/ _NLd-U oc %Z5GL& d0g +FbhE$%>FkFL&eoA !5XBi SVT "T! 0 `3P LcL 1iX ,'u7!/ -. ZLfK00 WJ1 +DlL&d$a!4mtML&e c=!/6 .-] S6E HL ]i MBL a7d mLbacf L` M:JLgc # K[L& e<2? AM+ -!f/7Z!1JW B^kb71!2>9- +L_>LJLj4XSQ&$<6 98F(6 .YrP .!2kP OYD* %tL &fPU7>Mb9: 5BgE:P`Y>@Y +ds=-AZ\s!/$"+[Y TGL]N[P%nN9FCAusDMSCXWJ1E%P&-9^Ou"b*L]ESoHXg`#@r$..D'3q/@PKeu+DI! +3P$r]Z@:CrM1a$Lg!KmJ>#Ehc-I?I/T@ru:F5*@]T@ruXP5*@]T@r6F$P!5$b04SjCDj!;I1G< +6LCh8bnOu"b$ASc:J5*@]T@qTkG5*@^b5^eep052PCL^9.EOu%NLAM7P;D]iP'ARfLsF_r72B6 +068@ru:F;Ia9SD]iP,GAi9?FE2M8+D58-;H$MpoASrW3AS5jkDKK +r_2NeW7/D0mpW@WNZ4Dg-8Y!0U!<30Ia,!KsFDN<9!/LYd@<>poAT! +;)P,Wd]Bp(ZC1Lt`S+DI!3H[V&KBnuhRC5;kQ4aUdcG9CUU!g6HE97))M8UZb$I?I-W!Jgb^Ou +#3_061WA0/%?WDJX$)ARTU4F(025F(02D@VBg*>9IurF-:!g!KmJ>!g6H.BOtmjBQSZcK3^->@ +WNYr+EM"5P%'4JOo^@?P#?X_!.C#_>q^,8FP"U.X!I^,`I?IQXP":`TOpR9Z061uTP!5$bP'&F!AT/br+EDCEH\_]c5*DmnP"ArB1NR,HL] +CY8!/LW2!/LV\P'M+[E$01>GEQEk"Ho`gL]E52L]E52?'9IdAnc-nATDa.F!+\C'8U+G^G5HI?K4gOuS6tF(K<3+Du==Ec6/CL]N[H\_ZX!I^,`?&/K"Bm=lc9Th2QAT3G*>DN98!/LW2!*tb5F( +K;5E+sQAL]im?>DN98!/LW2!*tb505tWMF!+\C!/LYnF_u/;GB8Q@P,Wd]EfrVL1NJ9OP&5PeA +T2]5Efs(Y!g7\SP#R5]HZF%KF!,Ld99K@>Fa]F*EZf7BD/sQ=F,0j[WKM+FF(K<3+EEWGV=#MG^1E +NBm=]^@W6%+G`krXBOtmjBQPA9Bm=]^@W6%+G`ks\8D_?-CEcQG7F`MSBDD#CBBlJ#6A7]@eDImj"F)Q2A@qCgGOuY1:ATVm"@r#drB9KiQP +'(hWFDtYuCM@[!I?IP~> +% uk.co.terryburton.bwipp/databarexpanded 0.0 0 +%%EndData +%%EndResource % --END ENCODER databarexpanded-- % --BEGIN ENCODER databarexpandedstacked-- -% --REQUIRES databarexpanded-- +% --REQUIRES preamble raiseerror renlinear renmatrix databarexpanded-- % --DESC: GS1 DataBar Expanded Stacked % --EXAM: (01)95012345678903(3103)000123 % --EXOP: segments=4 -% --RNDR: renmatrix renlinear -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renmatrix dup /uk.co.terryburton.bwipp findresource put -dup /databarexpanded dup /uk.co.terryburton.bwipp findresource put -begin -/databarexpandedstacked { - - 20 dict begin % Confine variables to local scope - - /options exch def % We are given an option string - /barcode exch def % We are given a barcode string - - /dontdraw false def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - % Get the result of encoding with databarexpanded with format=expandedstacked - options (dontdraw) true put - options (format) (expandedstacked) put - - /args barcode options //databarexpanded exec def - - args (opt) options put - args - - dontdraw not //renmatrix if - - end - -} bind def -/databarexpandedstacked dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +% --RNDR: renlinear renmatrix +%%BeginResource: uk.co.terryburton.bwipp databarexpandedstacked 0.0 0 0 0 +%%BeginData: 18 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\X4a VtcO u 8C 3D fBf 4Df 0WCP ,i2'C +ia0N4aW>WI?IQm3 0Ia6V3 3Qn ! BlU *F E2M8 P!+ /T/Wr;\Fcn qO1OXV5/Tc# +UAWeitP#ZpnAWe* t3A5;i FD5 Z 2F-8 _M1O YEc DfBf4Df0WC Ou%NL8T/QiB +l@m1NX006DKKE0@ *c@<-"%NWX3 =FDl, ?Bl@m 1P'CD UB6 ,2+Df0Z-Ea a0TE%`kbASu +?nFE2)?P#RT)I?G )'1G<9I FCAWeE b0K7@ ;]U eA92j$@r#X dOuSV806M%_ +@rEuAATDg:@Wc^5Df.1:GA2#8+Co%qBl7L&ATMd4Ear[DFcna +% uk.co.terryburton.bwipp/databarexpandedstacked 0.0 0 +%%EndData +%%EndResource % --END ENCODER databarexpandedstacked-- % --BEGIN ENCODER pharmacode-- +% --REQUIRES preamble raiseerror renlinear-- % --DESC: Pharmaceutical Binary Code % --EXAM: 117480 % --EXOP: showborder % --RNDR: renlinear -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renlinear dup /uk.co.terryburton.bwipp findresource put -begin -/pharmacode { - - 20 dict begin % Confine variables to local scope - - /options exch def % We are given an option string - /barcode exch def % We are given a barcode string - - /dontdraw false def - /height 8 2.835 mul 72 div def - /nwidth 0.5 2.835 mul def - /wwidth 1.5 2.835 mul def - /swidth 1.0 2.835 mul def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - /height height cvr def - /nwidth nwidth cvr def - /wwidth wwidth cvr def - /swidth swidth cvr def - - % Create the human readable text - /txt barcode length array def - 0 1 barcode length 1 sub { - /i exch def - txt i [barcode i 1 getinterval 0 0 () 0] put - } for - - % Convert the integer into the paramacode string - /barcode barcode cvi 1 add 2 17 string cvrs def - /barcode barcode 1 barcode length 1 sub getinterval def - - /barlen barcode length def % Length of the code - /sbs barlen 2 mul array def - - 0 1 barlen 1 sub { - /i exch def - /enc barcode i 1 getinterval def - enc (0) eq { - sbs i 2 mul nwidth put - } { - sbs i 2 mul wwidth put - } ifelse - sbs i 2 mul 1 add swidth put - } for - - % Return the arguments - << - /ren //renlinear - /sbs sbs - /bhs [sbs length 1 add 2 idiv {height} repeat] - /bbs [sbs length 1 add 2 idiv {0} repeat] - /txt txt - /textxalign (center) - /opt options - >> - - dontdraw not //renlinear if - - end - -} bind def -/pharmacode dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp pharmacode 0.0 0 0 0 +%%BeginData: 30 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\/FD +-OrJ,fS,5W*MVP& -:;D f Bf 4D f0W ZY: js=E bTE(F +Eqh:P!+/J!Ko='% <$3-Bl @m1 H ]kF A@ ;L!r P!+ /T5^eepOuS V6P,4OA9; K-F*D>/FD-g +jOu$QUEas#uAWgM Y!Kq& (@<,j rA7^p 5L^ '#=P&bn&@W uO*E%Z*C@<- +3n@rGmh6=FCuASu .&BT=33 BOPpu@ :O4dA KYi 4F*&O6AKW] MFDi9[+Co2! +BlnDL061K8F(Jp'Ec5u]5CJ\o@UX:eDe*F+OuS7OP%Kk@LcLVpP&bn&@WuO*E%Z*C@<-3n@rGm +h6=FClBOPpi@ru:&N[%A6@<-3n@rGmh+Dl7BFE,[FKBOPpu@:O4dAO9g9L]WAEP,4L]W`;H\_ZMP(R$nFEhmMFEhm\FCf]=G[YE&B5W_6@qBP"ATBG +BE-*4@E-,f4DK?pa4s4BSDKKE0@<[lR0/%?WDJX$)ARTVB<0B7iOq*X205tT5Ec#5pDe*FB30I +f*F_`U>D_?-CEcQG7F`MSBDD#CBBlJ#6A7]@eDImj"F)Q2A@qCgGOuY1:ATVm"@r#drB9KiQP' +(hWFDtYuCM@[!I?IP~> +% uk.co.terryburton.bwipp/pharmacode 0.0 0 +%%EndData +%%EndResource % --END ENCODER pharmacode-- % --BEGIN ENCODER pharmacode2-- +% --REQUIRES preamble raiseerror renlinear-- % --DESC: Two-track Pharmacode % --EXAM: 117480 % --EXOP: includetext showborder % --RNDR: renlinear -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renlinear dup /uk.co.terryburton.bwipp findresource put -begin -/pharmacode2 { - - 20 dict begin - - /options exch def % We are given an option string - /barcode exch def % We are given a barcode string - - /dontdraw false def - /includetext false def % Enable/disable text - /height 4 def % Height of short bars in millimetres - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - /height height cvr def - - % Create the human readable text - /txt barcode length array def - 0 1 barcode length 1 sub { - /i exch def - txt i [barcode i 1 getinterval 0 0 () 0] put - } for - - /encstr 16 string def - /bhs 16 array def - /bbs 16 array def - /sbs 32 array def - /bar 1 25.4 div height mul def % bar height (mm) - /spc 1 25.4 div 72 mul def % bar width & spacing (1mm) - - % Convert number into a base3 representation - /i 15 def - /val barcode cvi def - { % loop - val 0 eq {exit} if - val 3 mod dup - [3 1 2] exch get val exch sub 3 idiv /val exch def - encstr i [2 0 1] 4 -1 roll get put - /i i 1 sub def - } loop - /encstr encstr i 1 add 15 i sub getinterval def - - % Generate the bar pattern - 0 1 encstr length 1 sub { - /i exch def - encstr i get dup - bhs i bar [1 1 2] 5 -1 roll get mul put - bbs i [0 bar 0] 4 -1 roll get put - } for - - % Return the arguments - << - /ren //renlinear - /bhs bhs - /bbs bbs - /sbs [encstr length 2 mul {spc} repeat] - /txt txt - /textxalign (center) - /textyoffset 4 - /opt options - >> - - dontdraw not //renlinear if - - end - -} bind def -/pharmacode2 dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp pharmacode2 0.0 0 0 0 +%%BeginData: 30 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\X4a Vtc Ou 8C 3Df Bf4 Df0 WCP, +i2'Cia0N4aW>WI? IQm3 0 Ia 6V 33Q n!B lU*F E2M8P +!+/T/Wr;\FcnqO1 OXV5/T c#U A Wei tP #Zpn AWe *t3A5;iFD5 Z2F-8_M1OYE +cDfBf4Df0WCOu%N L8M=ag BkM + $+D> >#B4 uCM 09S,#@<,jr A7^p5L]NZN@ +UX:eDe*FB@Yb;Q: m,jG04 K-> E,[F KBOP pu@ :O4dAMQS\A 5$QPB67gI.T +CV1/Tc#A@r!2`BO Ppu@: O4dA KYi4F *&O6 AKW ]MFDi9[+Co 2!BlnDL061K +8F(Jp'Ec5u]5CJ\ o@UX: eDe*F +OuS7 OP% Kk@LcLVpP& bn&@WuO*E%Z +*C@<-3n@rGmh11F [&6YKnK @:OCjE fM_NG Af' TEa`Hn+Ac` [Ec#5pDe*E% +D09oA+Cf>-FCAm$+E).6Gp$X3B5)I/0/%?SBldisEcQ)=P!=AX<.0p$@UX:eDe*FB/WI?IQQ@;L`%P%p.>>DNB;!Jge_P!5%%G%#3M5*Dn$"-QP8G%#3M5*@^5DI[ +a0EZf'=>DN?:!/LY]L]iP6P)#2nP'AWo+DHW4P,XU#I?J.pASu"!FE/L8DI[a0EZf(P!KmJ>%r + %3+P"_#pL]E53ASu"!FE3ORL]N[q^;EF%`IG]\1=Ch[ +O"NWs!)DKKH106CcMFEqe:AohO*L]fALE-*4@E-,f4DK?pa4s4BSDKKE0@<[lR0/%?WDJX$)AR +TVB<0B7iOq*X205tT5Ec#5pDe*E7OuSV806M%_@rEuAATDg:@Wc^5Df.1:GA2#8+Co%qBl7L&A +TMd4Ear[DFcna +% uk.co.terryburton.bwipp/pharmacode2 0.0 0 +%%EndData +%%EndResource % --END ENCODER pharmacode2-- % --BEGIN ENCODER code2of5-- +% --REQUIRES preamble raiseerror renlinear-- % --DESC: Code 25 % --EXAM: 01234567 % --EXOP: version=iata includetext includecheck includecheckintext % --RNDR: renlinear -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renlinear dup /uk.co.terryburton.bwipp findresource put -begin -/code2of5 { - - 20 dict begin % Confine variable to local scope - - /options exch def % We are given an option string - /barcode exch def % We are given a barcode string - - /dontdraw false def - /includecheck false def - /includetext false def % Enable/disable text - /includecheckintext false def - /textfont /Courier def - /textsize 10 def - /textyoffset -7 def - /height 1 def - /version (industrial) def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - /textfont textfont cvlit def - /textsize textsize cvr def - /textyoffset textyoffset cvr def - /height height cvr def - - % Create an array containing the character mappings - << - /industrial - [ (1111313111) (3111111131) (1131111131) (3131111111) - (1111311131) (3111311111) (1131311111) (1111113131) - (3111113111) (1131113111) (313111) (31113) - ] - /iata - [ (1111313111) (3111111131) (1131111131) (3131111111) - (1111311131) (3111311111) (1131311111) (1111113131) - (3111113111) (1131113111) (1111) (311) - ] - /matrix - [ (113311) (311131) (131131) (331111) (113131) (313111) - (133111) (111331) (311311) (131311) (311111) (31111) - ] - /coop - [ (331111) (111331) (113131) (113311) (131131) (131311) - (133111) (311131) (311311) (313111) (3131) (133) - ] - /datalogic - [ (113311) (311131) (131131) (331111) (113131) (313111) - (133111) (111331) (311311) (131311) (1111) (311) - ] - >> - version get /encs exch def - /cs encs 0 get length def - /cw 0 encs 0 get {48 sub add} forall def - /ss encs dup length 2 sub get length def - /sw 0 encs dup length 2 sub get {48 sub add} forall def - - % Create a string of the available characters - /barchars (0123456789) def - - /barlen barcode length def % Length of the code - - includecheck { - /sbs barlen 1 add cs mul ss add ss add string def - /txt barlen 1 add array def - } { - /sbs barlen cs mul ss add ss add string def - /txt barlen array def - } ifelse - - % Put the start character - sbs 0 encs 10 get putinterval - - /checksum 0 def - - 0 1 barlen 1 sub { - /i exch def - % Lookup the encoding for the each barcode character - barcode i 1 getinterval barchars exch search - pop % Discard true leaving pre - length /indx exch def % indx is the length of pre - pop pop % Discard seek and post - /enc encs indx get def % Get the indxth encoding - sbs i cs mul ss add enc putinterval % Put encoded digit into sbs - txt i [barcode i 1 getinterval i cw mul sw add textyoffset textfont textsize] put - barlen i sub 2 mod 0 eq { - /checksum checksum indx add def - } { - /checksum checksum indx 3 mul add def - } ifelse - } for - - % Put the checksum and end characters - includecheck { - /checksum 10 checksum 10 mod sub 10 mod def - sbs barlen cs mul ss add encs checksum get putinterval - sbs barlen cs mul cs add ss add encs 11 get putinterval - includecheckintext { - txt barlen [barchars checksum 1 getinterval barlen cw mul sw add textyoffset textfont textsize] put - } { - txt barlen [( ) barlen cw mul sw add textyoffset textfont textsize] put - } ifelse - } { - sbs barlen cs mul ss add encs 11 get putinterval - } ifelse - - % Return the arguments - << - /ren //renlinear - /sbs [sbs {48 sub} forall] - /bhs [sbs length 1 add 2 idiv {height} repeat] - /bbs [sbs length 1 add 2 idiv {0} repeat] - includetext { - /txt txt - } if - /opt options - >> - - dontdraw not //renlinear if - - end - -} bind def -/code2of5 dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if -% --END ENCODER code2of5-- +%%BeginResource: uk.co.terryburton.bwipp code2of5 0.0 0 0 0 +%%BeginData: 52 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\Am oLsA W ei &F Cf] =Ao DR/O iNV@0 +6CcMFE;/BAV^\V1 GDP! +5%OP!5$bI=%,/FE 2M8Ou %NL< IL$AO rfcH 05k fOBl@m1P!5 $bI?IQJE-,f +4DKC/f1OYEX06Cc MFCoH /F5FCf +]=F(or3OtVtS06C cMFEqe: AohO*+ EV1>F Eqe :AohO*OtVt S05+p2B4uB0 +BOtmjBQTCjOu$QUEas#uAUBS"LbP!(P!4[^P#.<^HS8iPBlJ#D@rGmh12gb^@UWe7BOPpi@ru: +&NZ^]-A7Zl=2'?aYF*&O7Df0Z*Bl5&3DJXS@A8,[jFE9)gEa`['AS#n&DfV"*I?IQXP"@<9@<- +0qDBNCsEas#uAWgMG@;KXg@U!0T-o!/LYb@<-0qDM +S=VWI$:4P!5$b04S[,@r$..D'3>%ARfLsF_r71@<,jrA7ZltP"UTbP,Vo!Ebo<)+DI"E,[F>De*E7De:k9@:V`=ARfL +DBkM.%N[@>8@rHC.ARfg)6Z6LH+>Pes@q]F`CER/%B5)H1E,ol?Bk1dc0/%?SBldisEcQ)=P!= +AX<%h]hEas#uAKYGjEas#uAV^=q@<-0qDN[\V1GE0%F0ekC=0f(O=0ocSs0ekC;0ekC=0ocSq0f(O=0ekC=0ocSs0 +f(O=0ekC;0ocSq0ekC=0ekC=0ocSs0ekC=0ekC;0ocSq0f(O?0ekC;0ocSq0ekC;0f(O?0ocSs +0ekC;0f(O=0ocSq0f(O=0f(O=0ocGo0f(O=0ocDn0ekC=>q]o#FC?:rNX@Kq0ekI=1GLU=NX@Q +s0ekC;0ekI=NX@Kq1GLU=0ekI=NX@Qs1GLU=0ekC;NX@Kq0ekI=0ekI=NX@Qs0ekI=0ekC;NX@ +Kq1GL[?0ekC;NX@Kq0ekC;1GL[?NX@Qs0ekC;1GLU=NX@Kq1GLU=1GLU=NW_'k0en[j1GLUiO_ +@sZ"u.hg1GLVE"u@tg0f(PE"u.ng0f(PE"uA%i0ekDC"u.hg0f(PE"u@ti0ekDC"u.ni0ekDC" +u.he1G^bG"u@tg1GLVE"u.ng1GLVE"u@tg0ekDC"Z%kf0elre@rH:)+Bsj11G^a?0en[m0ekC= +1GOmo0ekI=1GOmo0ekI?0en[m0f(O=1GOmo0f(O?0en[m0f(U?0en[m1GLU=1GOmo1GLU?0en[ +m1GL[?0en[k1GL[?NWV!l1L2YE@<>poDeEco+Bsj10ekI?0en[m1GLU=1GOmo0f(O=1GOmo1G^ +a?0en[m0ekI=1GOmo1GL[?0en[m0f(U?0en[m0ekC=1GOmo1GLU?0en[m0f(O?0en[k0ekC;NW +V'l0jPnc5*@^FATDj+Df0V=G%G]8Bl@mP@$5JU04K->E,[F>De*E7De:k9@:WDMEcYr5DN5]:D +K9;uDeEs%F(Jl)6Z6LH+>PesG%G]8Bl@lB061K8F(Jp'Ec5u]5CJ\o04f$2F!,X;EcYr5DK?qD +ATDj+Df1_2Ou"b$F!,%3@rmG+P"UsIOu"b$GDH61DI[aD!0U!%LbP!kOo]uo8Wkk_F)rI8DI[a +N30Ia,!g9OG99NbI1GI?IQ>F-:?\F-6QFF-6QeV33VfFE +hmM@UX:nASrW)DI[L*A7]7aARfM&L]NY>I?IQm$'I)c@WR>*ASu"!L^K;9IB`Eas#uAKY]C!Kp,j+CfVYCiaf +`!H_mtFEqe:AohO*+EV1>FCoH/F_99ORA@WNZ$@<-0qDBNG1P&+WLOo]WFOo]-3@rmG6P" +Us`Bl7EsF_#&nBOt[hBl8$(G]\9TFEhmM@UX:nASrVp+C\c"@q]:kF!+t+ARfLsF_up8P"]=nE +bo<)+CfVYCiaf`!H_mtFEqe:AohO*+EV1>FCoH/F5?'9G\P#ZpWF(02 +5@UX:nASrW#F-:?\F-6Q8DI[aD$^+/GH$tiU4?P9;ASs.SEb0-)Bl7KjE\DKCF!+[0F(03;LbP +!kI?I0-04JU9+Bot0@WR]AL]NY>L]W`;HY?u)B4uC8P(R$n@UaC$>9IurF-:!g!KmJ>!g6H.L] +DjdK3]U6DI[L*A7]joG]\9cFEhmMFEhnUP#O)QE-*4@E-,f4DK?pa4s4BSDKKE0@<[lR0/%?WD +JX$)ARTVB<0B7iOq*X204Sp2AMS1923Kq^A1r(@/n8fPFCfK5H"(o:FDl%L@WuO*E$/\&Anc-o +Eb0<1F`Lu'P')pJ06:]HE+*6lBl7RH\pKT_F(KH4@:O(eDJ+B\;u~> +% uk.co.terryburton.bwipp/code2of5 0.0 0 +%%EndData +%%EndResource +% --END ENCODER code2of5-- % --BEGIN ENCODER code11-- +% --REQUIRES preamble raiseerror renlinear-- % --DESC: Code 11 % --EXAM: 0123456789 % --EXOP: includetext includecheck includecheckintext % --RNDR: renlinear -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renlinear dup /uk.co.terryburton.bwipp findresource put -begin -/code11 { - - 20 dict begin % Confine variables to local scope - - /options exch def % We are given an option string - /barcode exch def % We are given a barcode string - - /dontdraw false def - /includecheck false def - /includetext false def - /includecheckintext false def - /textfont /Courier def - /textsize 10 def - /textyoffset -7 def - /height 1 def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - /textfont textfont cvlit def - /textsize textsize cvr def - /textyoffset textyoffset cvr def - /height height cvr def - - % Create an array containing the character mappings - /encs - [ (111131) (311131) (131131) (331111) (113131) - (313111) (133111) (111331) (311311) (311111) - (113111) (113311) - ] def - - % Create a string of the available characters - /barchars (0123456789-) def - - /barlen barcode length def % Length of the code - - includecheck { - barlen 10 ge { - /sbs barlen 6 mul 24 add string def - /txt barlen 2 add array def - } { - /sbs barlen 6 mul 18 add string def - /txt barlen 1 add array def - } ifelse - } { - /sbs barlen 6 mul 12 add string def - /txt barlen array def - } ifelse - - % Put the start character - sbs 0 encs 11 get putinterval - - /checksum1 0 def /checksum2 0 def - - /xpos 8 def - 0 1 barlen 1 sub { - /i exch def - % Lookup the encoding for the each barcode character - barcode i 1 getinterval barchars exch search - pop % Discard true leaving pre - length /indx exch def % indx is the length of pre - pop pop % Discard seek and post - /enc encs indx get def % Get the indxth encoding - sbs i 6 mul 6 add enc putinterval % Put encoded digit into sbs - txt i [barcode i 1 getinterval xpos textyoffset textfont textsize] put - 0 1 5 { % xpos+=width of the character - /xpos exch enc exch get 48 sub xpos add def - } for - /checksum1 checksum1 barlen i sub 1 sub 10 mod 1 add indx mul add def - /checksum2 checksum2 barlen i sub 9 mod 1 add indx mul add def - } for - - % Put the checksum and end characters - includecheck { - /checksum1 checksum1 11 mod def - barlen 10 ge { - /checksum2 checksum2 checksum1 add 11 mod def - sbs barlen 6 mul 6 add encs checksum1 get putinterval - sbs barlen 6 mul 12 add encs checksum2 get putinterval - includecheckintext { - txt barlen [barchars checksum1 1 getinterval xpos textyoffset textfont textsize] put - /enc encs checksum1 get def - 0 1 5 { % xpos+=width of the character - /xpos exch enc exch get 48 sub xpos add def - } for - txt barlen 1 add [barchars checksum2 1 getinterval xpos textyoffset textfont textsize] put - } { - txt barlen [() xpos textyoffset textfont textsize] put - txt barlen 1 add [() xpos textyoffset textfont textsize] put - } ifelse - sbs barlen 6 mul 18 add encs 11 get putinterval - } { - sbs barlen 6 mul 6 add encs checksum1 get putinterval - includecheckintext { - txt barlen [barchars checksum1 1 getinterval xpos textyoffset textfont textsize] put - } { - txt barlen [() xpos textyoffset textfont textsize] put - } ifelse - sbs barlen 6 mul 12 add encs 11 get putinterval - } ifelse - } { - sbs barlen 6 mul 6 add encs 11 get putinterval - } ifelse - - % Return the arguments - << - /ren //renlinear - /sbs [sbs {48 sub} forall] - /bhs [sbs length 1 add 2 idiv {height} repeat] - /bbs [sbs length 1 add 2 idiv {0} repeat] - includetext { - /txt txt - } if - /opt options - >> - - dontdraw not //renlinear if - - end - -} bind def -/code11 dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp code11 0.0 0 0 0 +%%BeginData: 57 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\ DP!5 %OP! 5$b I=%,/FE2M8 Ou%NL5FCf ]=F(o r3O tVtS06CcMF Eqe:AohO*+E +V1>FEqe:AohO*Ot VtS05+p 2B4uB0 BOtmj BQT CjOu"b&DI[ `1>E/nB0ekC +=0ocGo0ekC=0ocGm1GLU?0ocGo1GLU=0ocGm0f(O?0ocGo0f(O=0ocGm1G^a?0ocGm0ekI?0oc +Go0ekI=0ocGo0ekC;0ocGm0f(O=0ocGm0f(U?0jTqu04J@1@q]:kF,gV^0etOA2)[BQ3A$CM04 +S[(Ectl-F,13e23KbO!/LZ3$@?8r@<-O"Cibb'OuQoZEarckEc[C-L]NZ4P!5%RI?I-W!/LYb@ +<,jrA7^p5L]N[GSnD09oA+Cf>-FCAm$+E).6Gp$X3B5)I/+CT.u+Cno%BOu6<061K8F(Jp +'Ec5u]5CJ\oI?I,S@UX:nASrW"@<,jrA7^p5Ou%8iCh[EgFCerqARfM&+C\c"Ch7L?$^*Z"04K +->E,[F>De*E60k+R%9P&*SFD-[i6Z6LH+>GSn@ps7mDfd+2AKW]^+Cf(nEa`I"ATDi7F`V87B- +:\tARfKuA8,[jFE9)gEa`['AS#n&DfV"*I?IP_@UX:nASrW"@<-0qDBNCsEbo<)L^K;RH\_]NH +\_`OP#[[EOu%NL<%i-3D.@6j@r$-.Bl7EsF_#&nBOt[h+Eh10Bk1XoARfCb@r%6JHX^E(Ch7L? +$Be#.L]W!OL]Mpe99M(a@q]F`CNFW80d't>ARf +LsF_riU@UX:nASrW)P,X6E,[F>De*E60k+R + %6YL%@CIDlLBlo@^8T&$VEcP`$FARfKuA8,[jFE,[F>De*E60k+R%6YL%@CIDlL +BlnEV-V82cDfTl0@rrh\De*E%0eje\BOt[h+Co2!BlnD=E,ol?Bk1dc0/%?SBldisEcQ)=P!=A +X<.0p004J@1@rGmh+C\c"@rGmhL]CmmEbo<)P"_#p055<6Cis9"@q]F`CER_>F_-^lI?IP_F(0 +25@UX:nASrW.F_tW%ARfLsOo^@CP&,p_Oo^`BOu"b5G]Y';@<-0qDBNh>D.@6j@r$.K!KmbP1N +R#HL]D"(@rmG6P"Us`06hGSF,1*b1Pc$e!FfJXCh7L?!KsF/056S5Ou"b*DIdu7@q]:kG%#3.+ +C\c"@rGmh+DHW4P"_$3Ou"b&DIXf#DI[`1Bl7I+P"UroF(025BnutVCkr:Y!G-.YP'M.oF9IB`Eas#uAKY]C!Kp-$E,Te?FCf]=H#I;,F(KG9FCf]=AoDR/+EV1>FE;/BAKY9AG_c?U!Jgo ++06hGSF-8^uDI\hnP"UTbP,W\FDf_'BOu%NL8:?XlBl7EsF_#&nBOt[hHQZd+Ebo<)L^K;;HZN +Y;+C\c"Ch7L?#*NeY#*K!uDI[`1@q]F`CNFW80p51mH#mG9+C\c"Ch7L?#*NeY%$CX&DI[`1@q +]F`CNFW816P:nH"h/+Cis9"@q]F`CM@[.AU&9IB`EarckEcW@5BOt[hF +*2=SL]NZ4G]7SB+EV1>FEqe:AohO*+EV1>FCoH/FFE;/BAKY +9AG^Xp\G]Y';@<-0qDBN/D!-iI$F!,R9G]\4LAnH*qF5?'9GSG] +Y';@<-0qDMS=V!F(QaG]7SB+EV1>FEqe:AohO*+EV1>FCoH/FDf[%CAU&FCf]=F(or3+C1.TI=$'\FFEqe:AohO*+EV1>FCoH/Fq]Z#F!+[0F(03R@Yb&J!Jgf?;L<(gBkM+$I?K4g04JC3+Bot0@WR]A +L]NY>L]W`;H\_ZMP(R$_Bl7EsF_#'*AU& +% uk.co.terryburton.bwipp/code11 0.0 0 +%%EndData +%%EndResource % --END ENCODER code11-- % --BEGIN ENCODER bc412-- +% --REQUIRES preamble raiseerror renlinear-- % --DESC: BC412 % --EXAM: BC412 % --EXOP: semi includetext includecheckintext % --RNDR: renlinear -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renlinear dup /uk.co.terryburton.bwipp findresource put -begin -/bc412 { - - 20 dict begin % Confine variables to local scope - - /options exch def % We are given an option string - /barcode exch def % We are given a barcode string - - /dontdraw false def - /includecheck false def % Enable/disable checkdigit - /includetext false def - /includecheckintext false def - /includestartstop false def - /semi false def - /textfont /Courier def - /textsize 10 def - /textyoffset -7 def - /height 1 def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - /textfont textfont cvlit def - /textsize textsize cvr def - /textyoffset textyoffset cvr def - /height height cvr def - - semi { - /includecheck true def - /includestartstop true def - } if - - % Create an array containing the character mappings - /encs - [ (11111115) (13111212) (11131113) (12111213) (12121311) - (13131111) (12111312) (11131212) (11121411) (11151111) - (15111111) (11111511) (12131211) (13121112) (13111212) - (11111214) (12121113) (11111313) (13111113) (11121213) - (11141112) (11121312) (11141211) (14121111) (12121212) - (11131311) (13121211) (12111411) (14111211) (11111412) - (12111114) (14111112) (12141111) (11121114) (12131112) - (12) (111) - ] def - - % Create a string of the available characters - /barchars (0R9GLVHA8EZ4NTS1J2Q6C7DYKBUIX3FWP5M) def - - /barlen barcode length def % Length of the code - - /sbs barlen 1 add 8 mul 5 add string def - includecheck { - /txt barlen 1 add array def - } { - /txt barlen array def - } ifelse - - % Put the start character - includestartstop { - sbs 0 encs 35 get putinterval - /pos 2 def - /txtpos 3 def - } { - /pos 0 def - /txtpos 0 def - } ifelse - - /checksum 0 def - 0 1 barlen 1 sub { - /i exch def - % Lookup the encoding for the each barcode character - barcode i 1 getinterval barchars exch search - pop % Discard true leaving pre - length /indx exch def % indx is the length of pre - pop pop % Discard seek and post - /enc encs indx get def % Get the indxth encoding - sbs pos enc putinterval % Put encoded digit into sbs - txt i [barcode i 1 getinterval i 12 mul txtpos add textyoffset textfont textsize] put - /checksum checksum indx add def - /pos pos 8 add def - } for - - % Put the checksum - includecheck { - /checksum checksum 35 mod def - sbs pos encs checksum get putinterval - includecheckintext { - txt barlen [barchars checksum 1 getinterval barlen 12 mul txtpos add textyoffset textfont textsize] put - } { - txt barlen [() barlen 12 mul txtpos add textyoffset textfont textsize] put - } ifelse - /pos pos 8 add def - } if - - % Put the stop character - includestartstop { - sbs pos encs 36 get putinterval - /pos pos 2 add def - } if - - % Return the arguments - /sbs sbs 0 pos getinterval def - << - /ren //renlinear - /sbs [sbs {48 sub} forall] - /bhs [sbs length 1 add 2 idiv {height} repeat] - /bbs [sbs length 1 add 2 idiv {0} repeat] - includetext { - /txt txt - } if - /opt options - >> - - dontdraw not //renlinear if - - end - -} bind def -/bc412 dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp bc412 0.0 0 0 0 +%%BeginData: 48 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\ :%5 +2X=FD5Z2F-8_M1G <3GEa s#u AWf 6 ?1G <9W DKK E0@X4aVtcOu8C3D fBf4Df 0WC P,i2 'Cia 0N4 aW>WI?IQm3 0Ia6V33Qn!B +lU*FE2M8P!+/T/W r;\Fc nqO1 OXV5/ Tc#U AWe itP#ZpnAWe *t3A5;iFD5Z +2F-8_M1OYEcDfBf 4Df0W COu%N L8M>0 sG] [P9DKI"CAU &FE;/B AWe^01 G>#B4uCM09S,4ASl..055<6Cis9"@q]F`CER_>F_-^l055<6Cis9"F*(i +2FE;PBE$07CF_-^lI?IP_@UX:eBOPq&N[$5U3CcbD83o4(=u8uR;_^m";)Ud#6s3/L5*C/=P" +:B/L]LsnEas#uAWgMY!KsF/@UX:eDe*FB5)96&9OhaEEctl-F-8_M@$5JU04K->E,[F=@l,nq@ +UWe7BOPpi@ru:&N]TQp1bga.D09oA+Cf>-FCAm$+E).6Gp$X3B5)I/+CT.u+Cei!Blmd"+DbV2 +FCfK6+D#e-AT2`6:G4AA@;0doATDg0EfrY8P#Qjm82"F\Ebo<)+C\c"@rGmhP%&TCCh[EgFCer +qARfM&L]N[%ARfLsF_upZP%p.9G% +#3$A79Rk@q]F`CO715@<,jrA7Zlm@<-0qDN[Y%@<,jk@<-E3@q]F`CNFW8P"UsTHS8iPBlJ#D@ +Uh5L11F[&6YL%@CIDlLBlo@\8T&$VEcP`$F0ocMo1GL[?0ekDC#Ve(h0ekI=16)Vp0ekI=1,1PE#Ve%g1,1U?0ocMo0ekO?0ekDC#Ve1k0e +kC;0ocMo0ekC;2)-hG#Ve(h1GLX>0ocMo1GLX>0ekGD#Ve+i0ekF<16)Vp0ekC;1,1VG#Ve(h1 +,1L<1QD_q0ekC;1GL\G#Ve+i0ekC;1QD_q0ekF<1,1SF#Ve%g1bg^>16)Vp0ekF<1GLYF#Ve%g +1bga?0ocMo1bga?0ekDC#Ve(h1,1O=16)Vp0ekI=1GLVE#Ve+i1,1O=0ocMo1,1L<1bg_F#Ve. +j0ekF<0ocMo0ekC;1bgbG#Ve(h0ekC;1l_hr1bg^>0ekGD#Ve(h1bg^>0ocMo0ekF<0ekMF#Ve +(h1GLU=16)Dj16)Gk0elss1GL^9/[L]rqBP,4OpR:-I=!VhG]Y';@<-0qDNY>HQ[B=F +,0g-DI[aD,Eb]_GqX,TF,0m\1GL]`erI=!VdDf^^7Ou"b5G][nCF,0gZ1OYEdL]E53 +@UX:nAT!;)P,Wd]Bp(ZC1G9IB`Eas#uAKY]C!Kp,jL^]G_FEhnHDf_'BFCf]=H#I;,F(KG9FCf +]=AoDR/+EV1>FE;/BAKY9AGV=#SF!,F?F,1*b!Ko6eP"9;)@r-9uARfCb@r$E6F(025E,Te?AS +u"!+Cf(r@r$..D3@PTH"h/+Cis9"@q]F`CM@[.AU&9IB`EarckEcW@5B +Ot[hF*2>U!Kp,c@<-0qDMS^aCijoDE,Tf\!H_mtFEqe:AohO*+EV1>FCoH/FFE;/BAKY9AG^Y`T05tiN+E27?L^9.EOu%NL<,$5[Cis9"F*(i2FE;PBE-i^K@WNZ2Df[%4DI[ +aD,a(f`GqX,TF!,F?F,0m\!Ko6eP#O)U@WNZ5@WR>*E,Tf\9Th1o4>1_dDD*Y`ASu9IurF-:!g!KmJ>!g6H.BOtmjBQSZcK3^->@WNYr+EM"5P + %'4JOo^@?P#?X_!.C#_>p*j!@r-9uATVL.FF,Z_G]Y'MG]\@s<%i0/F +% uk.co.terryburton.bwipp/bc412 0.0 0 +%%EndData +%%EndResource % --END ENCODER bc412-- % --BEGIN ENCODER rationalizedCodabar-- -% --DESC: Rationalized Codabar +% --REQUIRES preamble raiseerror renlinear-- +% --DESC: Codabar % --EXAM: A0123456789B % --EXOP: includetext includecheck includecheckintext % --RNDR: renlinear -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renlinear dup /uk.co.terryburton.bwipp findresource put -begin -/rationalizedCodabar { - - 20 dict begin % Confine variables to local scope - - /options exch def % We are given an option string - /barcode exch def % We are given a barcode string - - /dontdraw false def - /includecheck false def % Enable/disable checkdigit - /includetext false def % Enable/disable text - /includecheckintext false def - /textfont /Courier def - /textsize 10 def - /textyoffset -7 def - /height 1 def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - /textfont textfont cvlit def - /textsize textsize cvr def - /textyoffset textyoffset cvr def - /height height cvr def - - % Create an array containing the character mappings - /encs - [ (11111331) (11113311) (11131131) (33111111) (11311311) - (31111311) (13111131) (13113111) (13311111) (31131111) - (11133111) (11331111) (31113131) (31311131) (31313111) - (11313131) (11331311) (13131131) (11131331) (11133311) - ] def - - % Create a string of the available characters - /barchars (0123456789-$:/.+ABCD) def - - /barlen barcode length def % Length of the code - - includecheck { - /sbs barlen 8 mul 8 add string def - /txt barlen 1 add array def - } { - /sbs barlen 8 mul string def - /txt barlen array def - } ifelse - - /checksum 0 def - /xpos 0 def - 0 1 barlen 2 sub { - /i exch def - % Lookup the encoding for the each barcode character - barcode i 1 getinterval barchars exch search - pop % Discard true leaving pre - length /indx exch def % indx is the length of pre - pop pop % Discard seek and post - /enc encs indx get def % Get the indxth encoding - sbs i 8 mul enc putinterval % Put encoded digit into sbs - txt i [barcode i 1 getinterval xpos textyoffset textfont textsize] put - 0 1 7 { % xpos+=width of the character - /xpos exch enc exch get 48 sub xpos add def - } for - /checksum checksum indx add def - } for - - % Find index of last character - barcode barlen 1 sub 1 getinterval barchars exch search - pop % Discard true leaving pre - length /indx exch def % indx is the length of pre - pop pop % Discard seek and post - - includecheck { - % Put the checksum character - /checksum checksum indx add def - /checksum 16 checksum 16 mod sub 16 mod def - sbs barlen 8 mul 8 sub encs checksum get putinterval - includecheckintext { - txt barlen 1 sub [barchars checksum 1 getinterval xpos textyoffset textfont textsize] put - } { - txt barlen 1 sub [( ) xpos textyoffset textfont textsize] put - } ifelse - 0 1 7 { % xpos+=width of the character - /xpos exch encs checksum get exch get 48 sub xpos add def - } for - % Put the end character - /enc encs indx get def % Get the indxth encoding - sbs barlen 8 mul enc putinterval % Put encoded digit into sbs - txt barlen [barcode barlen 1 sub 1 getinterval xpos textyoffset textfont textsize] put - } { - % Put the end character - /enc encs indx get def % Get the indxth encoding - sbs barlen 8 mul 8 sub enc putinterval % Put encoded digit into sbs - txt barlen 1 sub [barcode barlen 1 sub 1 getinterval xpos textyoffset textfont textsize] put - } ifelse - - % Return the arguments - << - /ren //renlinear - /sbs [sbs {48 sub} forall] - /bhs [sbs length 1 add 2 idiv {height} repeat] - /bbs [sbs length 1 add 2 idiv {0} repeat] - includetext { - /txt txt - } if - /opt options - >> - - dontdraw not //renlinear if - - end - -} bind def -/rationalizedCodabar dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp rationalizedCodabar 0.0 0 0 0 +%%BeginData: 59 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\A moLsAW ei& F Cf] =A oDR/ OiN V@06CcMFE; /BAV^\V1GFCf]=Ao DR/OtDhQ06C +cMFE;/BAKZ)+G]\ "@H=`6m Ou"b5A U&:1Pc$e!JhD9@q]:kG%#3.P!5$g@UX:eBOPq +&P!4[&P"_$&P'DD<82"FjA9i?,CibCDOu8CYL]E53L_"iADe+-:@;L"J5*@m7@<,jk@<-FP5)9 +6&9ThT&G^Y`G06;2X@;L"@"HkX*1PcTu!JhD9F)uM5Cibb'OuQoZEarckEc[C-L]NZ4P!5%RI? +I-1@<,jrA7^PsL]NZ4F)uM5Cibb'P$jGl@UX:eDe*E%@UX:eDe*FB@Yb&JWJCS<9QP8u@;L"J5 +*B<:E0>6g@;L%,FCB33F*)>>HS8iPBlJ#DEaa'(Df0!"BmO?$6Z6LD@UX:D@:VZ?FAm9iEcb6% +DfC^u6Z6LD@UX:"F*(i2Fr8Df?h/BOPpi@ru:&F!,=BF*&O6AKYo/AKYo'+@RDJ+B0J + %EZchb061K8F(Jp'Ec5u]5CIl3@WuO*E%Z0>FD5Z2@;KY(ARn/HA78qUE^F2F;flGgFAm:"E/ +m"IDe*9c@<*K3FCB33+CT.u+EMXCE$/Y(@<,ddFCfK6+Dl7BFE,[FM@r=D.7F"F!*%W,To,j0-Dki.k`Pr@;0doATD +g0EfrY8P#Qjm82"F\Ebo<)+C\c"@rGmhP%&TCCh[EgFCerqARfM&L]N[U&<^dkWJD+KC6CAr@;KXg@_99O.=04K->E,[FM@5?'9Gg!/LZ3# +CA+KE,Tf\5%SVAP!5%%LbP!kG]7SBOo^_%I?I-LP"9;)@r-9uARfCb@r$E6F(025@UX:nAT!;0 +P&,p[P,W#1@ric&BOt[hF*2>_99OR7DI[L*A7]7aARfLiDKKH7FF,-PG]Y';@<-0qDMS=VWEUK +S@<,jk@<-E3@q]F`CNFW8L]NZ4G]7SB+EV1>FEqe:AohO*+EV1>FCoH/FFCf]=F(or3+C1.TI? +ITd!/LZ3#CA+KE,Tf\5%SVAF!+t+ARfLsF`!:7P!5%%LbP!kG]7SBOo^_%I?I,SBl7I++Cf(nE +ctl-F!+q#Eas#uAKYGjEbo<)L]N[9IB`Eas#uAKYGjEbo<)L]N[FEqe:AohO +*+EV1>FCoH/F9IB`Eas#uAKYGjEbo<)L]N[FEqe:AohO*+EV1>FCoH/Fq]Z#F!+[0F(03R@Yb&J +!Jgf?;L<(gBkM+$I?K4g04JC3+Bot0@WR]AL]NY>L]W`;H\_ZMP(R$_Bl7EsF_#'*AU& +% uk.co.terryburton.bwipp/rationalizedCodabar 0.0 0 +%%EndData +%%EndResource % --END ENCODER rationalizedCodabar-- % --BEGIN ENCODER onecode-- -% --DESC: United States Postal Service Intelligent Mail +% --REQUIRES preamble raiseerror renlinear-- +% --DESC: USPS Intelligent Mail % --EXAM: 0123456709498765432101234567891 % --EXOP: barcolor=FF0000 % --RNDR: renlinear -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renlinear dup /uk.co.terryburton.bwipp findresource put -begin -/onecode { - - 20 dict begin - - /options exch def % We are given an option string - /barcode exch def % We are given a barcode string - - /dontdraw false def - /height 0.15 def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - /height height cvr def - - /barlen barcode length def - - % Create the human readable text - /txtdict << - 2 dup - 5 dup - barcode 5 1 getinterval (9) eq {14} {11} ifelse dup - 20 dup - 25 dup - 29 dup - >> def - /txt barlen 6 add array def - /spacecnt 0 def - 0 1 barlen 1 sub { - /i exch def - txtdict i known { - txt i spacecnt add [( ) 0 0 () 0] put - /spacecnt spacecnt 1 add def - } if - txt i spacecnt add [barcode i 1 getinterval 0 0 () 0] put - } for - /txt txt 0 barcode length spacecnt add getinterval def - - /normalize { - /base exch def - /num exch def - num length 1 sub -1 1 { - /i exch def - num i 1 sub 2 copy get num i get base idiv add put - num i num i get base mod put - } for - { %loop - extend input as necessary - num 0 get base lt {exit} if - /num [0 num {} forall] def - num 0 num 0 get num 1 get base idiv add put - num 1 num 1 get base mod put - } loop - % Trim leading zeros - /num [/i true def num {dup 0 eq i and {pop} {/i false def} ifelse} forall] def - num length 0 eq {/num [0] def} if - num - } bind def - - /bigadd { - 2 copy length exch length - 2 copy sub abs /offset exch def - lt {exch} if - /a exch def /b exch def - 0 1 b length 1 sub { - dup a exch offset add 2 copy get b 5 -1 roll get add put - } for - a - } bind def - - % Conversion of data fields into binary data - barlen 20 eq {[0]} if - barlen 25 eq {[1]} if - barlen 29 eq {[1 0 0 0 0 1]} if - barlen 31 eq {[1 0 0 0 1 0 0 0 0 1]} if - /binval exch [barcode 20 barlen 20 sub getinterval {48 sub} forall] bigadd def - /binval [binval {} forall barcode 0 get 48 sub] def - /binval [binval {5 mul} forall] [barcode 1 get 48 sub] bigadd 10 normalize def - /binval [binval {} forall barcode 2 18 getinterval {48 sub} forall] def - - % Conversion of binary data into byte array - /bytes 13 array def - /bintmp [binval {} forall] def - 12 -1 0 { - /i exch def - 0 1 bintmp length 2 sub { - /j exch def - bintmp j 1 add 2 copy get bintmp j get 256 mod 10 mul add put - bintmp j bintmp j get 256 idiv put - } for - bytes i bintmp bintmp length 1 sub get 256 mod put - bintmp bintmp length 1 sub 2 copy get 256 idiv put - } for - - % Generation of 11-bit CRC on byte array - /fcs 2047 def - /dat bytes 0 get 5 bitshift def - 6 { - fcs dat xor 1024 and 0 ne { - /fcs fcs 1 bitshift 3893 xor def - } { - /fcs fcs 1 bitshift def - } ifelse - /fcs fcs 2047 and def - /dat dat 1 bitshift def - } repeat - 1 1 12 { - bytes exch get 3 bitshift /dat exch def - 8 { - fcs dat xor 1024 and 0 ne { - /fcs fcs 1 bitshift 3893 xor def - } { - /fcs fcs 1 bitshift def - } ifelse - /fcs fcs 2047 and def - /dat dat 1 bitshift def - } repeat - } for - - % Conversion from binary data to codewords - /codewords 10 array def - 9 -1 0 { - /i exch def - i 9 eq { - /b 636 def - } { - /b 1365 def - } ifelse - 0 1 binval length 2 sub { - /j exch def - binval j 1 add 2 copy get binval j get b mod 10 mul add put - binval j binval j get b idiv put - } for - codewords i binval binval length 1 sub get b mod put - binval binval length 1 sub 2 copy get b idiv put - } for - - % Inserting additional information into codewords - codewords 9 codewords 9 get 2 mul put - fcs 1024 and 0 ne { - codewords 0 codewords 0 get 659 add put - } if - - % Conversion from codewords to characters - /tab513 [ - 31 7936 47 7808 55 7552 59 7040 61 6016 62 3968 79 7744 87 - 7488 91 6976 93 5952 94 3904 103 7360 107 6848 109 5824 110 3776 - 115 6592 117 5568 118 3520 121 5056 122 3008 124 1984 143 7712 151 - 7456 155 6944 157 5920 158 3872 167 7328 171 6816 173 5792 174 3744 - 179 6560 181 5536 182 3488 185 5024 186 2976 188 1952 199 7264 203 - 6752 205 5728 206 3680 211 6496 213 5472 214 3424 217 4960 218 2912 - 220 1888 227 6368 229 5344 230 3296 233 4832 234 2784 236 1760 241 - 4576 242 2528 244 1504 248 992 271 7696 279 7440 283 6928 285 5904 - 286 3856 295 7312 299 6800 301 5776 302 3728 307 6544 309 5520 310 - 3472 313 5008 314 2960 316 1936 327 7248 331 6736 333 5712 334 3664 - 339 6480 341 5456 342 3408 345 4944 346 2896 348 1872 355 6352 357 - 5328 358 3280 361 4816 362 2768 364 1744 369 4560 370 2512 372 1488 - 376 976 391 7216 395 6704 397 5680 398 3632 403 6448 405 5424 406 - 3376 409 4912 410 2864 412 1840 419 6320 421 5296 422 3248 425 4784 - 426 2736 428 1712 433 4528 434 2480 436 1456 440 944 451 6256 453 - 5232 454 3184 457 4720 458 2672 460 1648 465 4464 466 2416 468 1392 - 472 880 481 4336 482 2288 484 1264 488 752 527 7688 535 7432 539 - 6920 541 5896 542 3848 551 7304 555 6792 557 5768 558 3720 563 6536 - 565 5512 566 3464 569 5000 570 2952 572 1928 583 7240 587 6728 589 - 5704 590 3656 595 6472 597 5448 598 3400 601 4936 602 2888 604 1864 - 611 6344 613 5320 614 3272 617 4808 618 2760 620 1736 625 4552 626 - 2504 628 1480 632 968 647 7208 651 6696 653 5672 654 3624 659 6440 - 661 5416 662 3368 665 4904 666 2856 668 1832 675 6312 677 5288 678 - 3240 681 4776 682 2728 684 1704 689 4520 690 2472 692 1448 696 936 - 707 6248 709 5224 710 3176 713 4712 714 2664 716 1640 721 4456 722 - 2408 724 1384 728 872 737 4328 738 2280 740 1256 775 7192 779 6680 - 781 5656 782 3608 787 6424 789 5400 790 3352 793 4888 794 2840 796 - 1816 803 6296 805 5272 806 3224 809 4760 810 2712 812 1688 817 4504 - 818 2456 820 1432 824 920 835 6232 837 5208 838 3160 841 4696 842 - 2648 844 1624 849 4440 850 2392 852 1368 865 4312 866 2264 868 1240 - 899 6200 901 5176 902 3128 905 4664 906 2616 908 1592 913 4408 914 - 2360 916 1336 929 4280 930 2232 932 1208 961 4216 962 2168 964 1144 - 1039 7684 1047 7428 1051 6916 1053 5892 1054 3844 1063 7300 1067 6788 1069 - 5764 1070 3716 1075 6532 1077 5508 1078 3460 1081 4996 1082 2948 1084 1924 - 1095 7236 1099 6724 1101 5700 1102 3652 1107 6468 1109 5444 1110 3396 1113 - 4932 1114 2884 1116 1860 1123 6340 1125 5316 1126 3268 1129 4804 1130 2756 - 1132 1732 1137 4548 1138 2500 1140 1476 1159 7204 1163 6692 1165 5668 1166 - 3620 1171 6436 1173 5412 1174 3364 1177 4900 1178 2852 1180 1828 1187 6308 - 1189 5284 1190 3236 1193 4772 1194 2724 1196 1700 1201 4516 1202 2468 1204 - 1444 1219 6244 1221 5220 1222 3172 1225 4708 1226 2660 1228 1636 1233 4452 - 1234 2404 1236 1380 1249 4324 1250 2276 1287 7188 1291 6676 1293 5652 1294 - 3604 1299 6420 1301 5396 1302 3348 1305 4884 1306 2836 1308 1812 1315 6292 - 1317 5268 1318 3220 1321 4756 1322 2708 1324 1684 1329 4500 1330 2452 1332 - 1428 1347 6228 1349 5204 1350 3156 1353 4692 1354 2644 1356 1620 1361 4436 - 1362 2388 1377 4308 1378 2260 1411 6196 1413 5172 1414 3124 1417 4660 1418 - 2612 1420 1588 1425 4404 1426 2356 1441 4276 1442 2228 1473 4212 1474 2164 - 1543 7180 1547 6668 1549 5644 1550 3596 1555 6412 1557 5388 1558 3340 1561 - 4876 1562 2828 1564 1804 1571 6284 1573 5260 1574 3212 1577 4748 1578 2700 - 1580 1676 1585 4492 1586 2444 1603 6220 1605 5196 1606 3148 1609 4684 1610 - 2636 1617 4428 1618 2380 1633 4300 1634 2252 1667 6188 1669 5164 1670 3116 - 1673 4652 1674 2604 1681 4396 1682 2348 1697 4268 1698 2220 1729 4204 1730 - 2156 1795 6172 1797 5148 1798 3100 1801 4636 1802 2588 1809 4380 1810 2332 - 1825 4252 1826 2204 1857 4188 1858 2140 1921 4156 1922 2108 2063 7682 2071 - 7426 2075 6914 2077 5890 2078 3842 2087 7298 2091 6786 2093 5762 2094 3714 - 2099 6530 2101 5506 2102 3458 2105 4994 2106 2946 2119 7234 2123 6722 2125 - 5698 2126 3650 2131 6466 2133 5442 2134 3394 2137 4930 2138 2882 2147 6338 - 2149 5314 2150 3266 2153 4802 2154 2754 2161 4546 2162 2498 2183 7202 2187 - 6690 2189 5666 2190 3618 2195 6434 2197 5410 2198 3362 2201 4898 2202 2850 - 2211 6306 2213 5282 2214 3234 2217 4770 2218 2722 2225 4514 2226 2466 2243 - 6242 2245 5218 2246 3170 2249 4706 2250 2658 2257 4450 2258 2402 2273 4322 - 2311 7186 2315 6674 2317 5650 2318 3602 2323 6418 2325 5394 2326 3346 2329 - 4882 2330 2834 2339 6290 2341 5266 2342 3218 2345 4754 2346 2706 2353 4498 - 2354 2450 2371 6226 2373 5202 2374 3154 2377 4690 2378 2642 2385 4434 2401 - 4306 2435 6194 2437 5170 2438 3122 2441 4658 2442 2610 2449 4402 2465 4274 - 2497 4210 2567 7178 2571 6666 2573 5642 2574 3594 2579 6410 2581 5386 2582 - 3338 2585 4874 2586 2826 2595 6282 2597 5258 2598 3210 2601 4746 2602 2698 - 2609 4490 2627 6218 2629 5194 2630 3146 2633 4682 2641 4426 2657 4298 2691 - 6186 2693 5162 2694 3114 2697 4650 2705 4394 2721 4266 2753 4202 2819 6170 - 2821 5146 2822 3098 2825 4634 2833 4378 2849 4250 2881 4186 2945 4154 3079 - 7174 3083 6662 3085 5638 3086 3590 3091 6406 3093 5382 3094 3334 3097 4870 - 3107 6278 3109 5254 3110 3206 3113 4742 3121 4486 3139 6214 3141 5190 3145 - 4678 3153 4422 3169 4294 3203 6182 3205 5158 3209 4646 3217 4390 3233 4262 - 3265 4198 3331 6166 3333 5142 3337 4630 3345 4374 3361 4246 3393 4182 3457 - 4150 3587 6158 3589 5134 3593 4622 3601 4366 3617 4238 3649 4174 3713 4142 - 3841 4126 4111 7681 4119 7425 4123 6913 4125 5889 4135 7297 4139 6785 4141 - 5761 4147 6529 4149 5505 4153 4993 4167 7233 4171 6721 4173 5697 4179 6465 - 4181 5441 4185 4929 4195 6337 4197 5313 4201 4801 4209 4545 4231 7201 4235 - 6689 4237 5665 4243 6433 4245 5409 4249 4897 4259 6305 4261 5281 4265 4769 - 4273 4513 4291 6241 4293 5217 4297 4705 4305 4449 4359 7185 4363 6673 4365 - 5649 4371 6417 4373 5393 4377 4881 4387 6289 4389 5265 4393 4753 4401 4497 - 4419 6225 4421 5201 4425 4689 4483 6193 4485 5169 4489 4657 4615 7177 4619 - 6665 4621 5641 4627 6409 4629 5385 4633 4873 4643 6281 4645 5257 4649 4745 - 4675 6217 4677 5193 4739 6185 4741 5161 4867 6169 4869 5145 5127 7173 5131 - 6661 5133 5637 5139 6405 5141 5381 5155 6277 5157 5253 5187 6213 5251 6181 - 5379 6165 5635 6157 6151 7171 6155 6659 6163 6403 6179 6275 6211 5189 4681 - 4433 4321 3142 2634 2386 2274 1612 1364 1252 856 744 496 - ] def - - /tab213 [ - 3 6144 5 5120 6 3072 9 4608 10 2560 12 1536 17 4352 18 - 2304 20 1280 24 768 33 4224 34 2176 36 1152 40 640 48 384 - 65 4160 66 2112 68 1088 72 576 80 320 96 192 129 4128 130 - 2080 132 1056 136 544 144 288 257 4112 258 2064 260 1040 264 528 - 513 4104 514 2056 516 1032 1025 4100 1026 2052 2049 4098 4097 2050 1028 - 520 272 160 - ] def - - /chars 10 array def - 0 1 9 { - /i exch def - codewords i get dup 1286 le { - tab513 exch get - } { - tab213 exch 1287 sub get - } ifelse - chars i 3 -1 roll put - } for - - 9 -1 0 { - /i exch def - 2 i exp cvi fcs and 0 ne { - chars i chars i get 8191 xor put - } if - } for - - % Conversion from characters to the OneCode encoding - /barmap [ - 7 2 4 3 1 10 0 0 9 12 2 8 5 5 6 11 8 9 3 1 - 0 1 5 12 2 5 1 8 4 4 9 11 6 3 8 10 3 9 7 6 - 5 11 1 4 8 5 2 12 9 10 0 2 7 1 6 7 3 6 4 9 - 0 3 8 6 6 4 2 7 1 1 9 9 7 10 5 2 4 0 3 8 - 6 2 0 4 8 11 1 0 9 8 3 12 2 6 7 7 5 1 4 10 - 1 12 6 9 7 3 8 0 5 8 9 7 4 6 2 10 3 4 0 5 - 8 4 5 7 7 11 1 9 6 0 9 6 0 6 4 8 2 1 3 2 - 5 9 8 12 4 11 6 1 9 5 7 4 3 3 1 2 0 7 2 0 - 1 3 4 1 6 10 3 5 8 7 9 4 2 11 5 6 0 8 7 12 - 4 2 8 1 5 10 3 0 9 3 0 9 6 5 2 4 7 8 1 7 - 5 0 4 5 2 3 0 10 6 12 9 2 3 11 1 6 8 8 7 9 - 5 4 0 11 1 5 2 2 9 1 4 12 8 3 6 6 7 0 3 7 - 4 7 7 5 0 12 1 11 2 9 9 0 6 8 5 3 3 10 8 2 - ] def - - /bbs 65 array def - /bhs 65 array def - 0 1 64 { - /i exch def - /dec chars barmap i 4 mul get get 2 barmap i 4 mul 1 add get exp cvi and 0 ne def - /asc chars barmap i 4 mul 2 add get get 2 barmap i 4 mul 3 add get exp cvi and 0 ne def - dec not asc not and { - bbs i 3 height mul 8 div put - bhs i 2 height mul 8 div put - } if - dec not asc and { - bbs i 3 height mul 8 div put - bhs i 5 height mul 8 div put - } if - dec asc not and { - bbs i 0 height mul 8 div put - bhs i 5 height mul 8 div put - } if - dec asc and { - bbs i 0 height mul 8 div put - bhs i 8 height mul 8 div put - } if - } for - - % Return the arguments - << - /ren //renlinear - /bbs bbs - /bhs bhs - /sbs [bhs length 1 sub {1.44 1.872} repeat 1.44] - /txt txt - /textxalign (left) - /textfont /Helvetica - /textyoffset 1 - /textxoffset -0.3 - /opt options - >> - - dontdraw not //renlinear if - - end - -} bind def -/onecode dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp onecode 0.0 0 0 0 +%%BeginData: 133 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\@ rG mhH\`B !23 +JD%DfBf4Df0WZ5* @]T@U X:e De* F B5* @]T A8c @-A9)+ &+ D,%uF( LLj +05+p2B4uCE4rKcW Ou%#q FD5 Z2F -< ^[ F*) G:D J+':E+ P1 qH\_]c 23J +DeE-,f4DKC/fX(G dVF( LLt H] gX BP# RT( P%' TNOt +hst4d(eHEckrV4a W>DP ! 5% OP !5$ bI= %,/F E2M8O +u%NLOu%N L<-3A,+DDs> +E+*6f@r?CO!F$[U@<,jrA7ZltL]NZ4L]E52NW=k8?'9G\P"76JG]Y'MG]\`A@UX:eDe*FB@WQK +s@qB.fFHQZf9Th1bDJsQ4@;KY(AU?(>@<6"C5*@]TDKTfZ5*@^>F`!:NL]N[F_r78L]N[DN8sF_uJRP"ArB1N%>PL]D=8D281T95\lhL]NZ3@UX=hP +#@GDP'CkeD2841F_up8P"T7mF(LMLP'DDPP%'4IP!+.FDKTe=>DN8bOu%NL<,QhqI?G)'1G<3OB45= +]H\_`d)3SHl5*BB2!g4FaWKI67DeDN;cI?IQ=@<-0qDMT9IB`Eas#uAV_%0@<-0qDMT!iWKKr% +LbP!kI?I0-+C]%t@:Wo31G<3ODK]H)+BostBl8*&CjUSn8Rc+K@rGmhL]ET2LbP!k?'6us@VK_ +'@;I&j+C]&&G%#36L]rrXI?I0-+Bost@<,jrA7^PtP"UTbP,V_0@VKI`A7UK'DJsQ4@;KY(AWe +i&@VK_'@;I&j+C]&&G%#36I?I02@<,jrA7^PuL_>kEH\aA=WI9q$?'6us@X3',F,19g$'I(t@V +K_%D/^V%+C]&&G%#36I?I0-Ou%n&M#W82HS9)r5*@^X!/LYbBl8$0E0=[d!g9O005?Y6Ou$Q]D +KK`7+DQ]5Oo^@?Or9EU@VK_%D/^V4P"UN1!0V)Q$Bf4g!Kq\:Bl8$0E$/m<@VK_%D/^V4P"UN1 +!0U6CG^Y`G@X3',F!,0>@VK_%D/^V,Bl8$0E0=[d!KsFF983HIP%p/)@VK_%D/^V,Bl8$0E0=[ +d!KsF"Gd&@D0mpJ@ric)@rmG,Oq39X23Pe=1OXU'An,m)An,nH$!V=P!5%%L]`eN04\L5P!5$bL^8?>@ric'@ +<@[KL'.L>"Gd&@D0mpJ@ric)@rmG,Oq39X23Pe=1OXU'An,m)An,nL]W +_WP"T7uDK]H)+DR'4@ZkJ^$Bf4g!Kq\:Bl8*&C`mI8@VK_'@;I'$P"T8I;Nc9QP"9)$A7]t'Eb +'56Bcpl!DK]H)+C]&&G%#3M@Yb&JWKKn`P%p/)@VK_'@;I&qBl8*&Cm&7`!KsFD=(^Lg>`O5_ra$%mYq`L)e!bCPEbCLi%k^^kcl_%`!mAL)Id_FbUXHLj" +L^^kd8j'>TEML'teQI"hmAL&d9h*[$1;Q\HM'L&d]t)^'k8SV@q'L&dg"%j6T,VhQ1aL&e9/)P +DfbXbIUaL&eB2%\SOVZ\B?jL&eW9'qg9][Y>6aL&ec=';1'[\qUTcL&el@#G?eOa+bRAL&fDO) +IS:"c%[!AL&fMR%Ub"kdtS`JL&fbY'juareqOWAL&fn]'4?Opg4fuCL&g"`#@N8dj+\E/L&g=i +']=]Gk(X<&L&gIm'&\KEl@oZ(L&gRp#2k49nV.Y6L&ge!$/gO!r+)ho:CL&imU.u"t(L&il\(6F7O/qsjtL&j)b)3BRR222j-L&j +2e%?Q;F3JJ3/L&j>i$]p)D4GF*&L&jf!*)M@j984?]L&k#'(/T_d:506TL&k5-),Q%g0%8_c[=b[SdL&kJ4$W)QY>_WJ[L&ke=(sn!)A/L&m`t$S[;9S;%8&L&n'((pJ_qV1o\gL&n0+%'YHeWJ2%iL&n)!DUL&tV7#=sRN@tkiAL&tq@'Zc"1Aqg`8L&u(D'$,e/C5*):L&u1G#0;N +#EJ>(HL&uCM$-7i&FG9t?L&uUS"3?2uLP?csL'!9f)CU=ANJ82sL'!Bi%Od&5PD0r'L'!Wp'e" +e"/pqU_hK"AL'#>K'PN4&`eFn8L'#JO&nm"$b(^7:L'#SR# +&&_md=r6HL'#eX$##%pe:n-?L'$"^")*DjiJ%p-L'$@h#j@!EjG!g$L'%[8*#OD4$\fQ:L'%m> +()Vc.%YbH1L'&*D)&S)1'o!G?L'&3G%2ag%)28eAL'&?K$Q+U#*/4\8L'&ZT(mp$[-&*,$L'&c +W%%)bO.>AJ&L'&o[$CHPM/;=@rL''/b&X\:T156+&L''8e"dk#H3/.O&L''et(g)Lp7>;LYL'' +o"$s85d8VRj[L'(&&$5?GL'(n>#hXk6A;16>L' +*'_(c[6PKn^:$L'*0b$oitDM1uX&L'*@L',AK"F,Y(%u),.L'/9H=3JJ3#L'0Pl$\X6;4GF) +oL'1#$*(5Ma984?QL'15*(._W +JOL'2"@(rV.3AVLo;L'2+C%)dl'Bnd8=L'27G$H.Z%Ck`/4L'2LN&]BD,EeXn=L'2UQ"iQ,uLP +?coL'3Eh)C1%?NJ82oL'3Nk%O?c3PD0r#L'3cr'dSM:QA,hoL'3p!'-r;8RYD1qL'4$$#:,$,U +P9V]L'4?-'VpHdVM5MTL'4K1&u:6bWeLkVL'4T4#,HtVZ%`jdL'4f:$)E:Y["\a[L'5DK(hA@( +`J,(;L'5MN$tP(qabCF=L'5YR$=nkob_?=4L'5nY&S-V!dY8'=L'6"\"_<>jiJ%p)L'6Lj#ip^ +D#DO34L'7s>)AIo0%>GW4L'8'A%MXX$'8@A=L'8e$'^/J1kl0uL'9r!(f +Z4n7>;LUL':&$$rhrb8VRjWL':2($<2``9SNaNL':G/&QFJg;MGKWL';"?&CcF<@YP0DJ +&9NX1_M/>p%%YbH%L'AAIoL'B,^$B0]D/;=@fL'BAe&WDGK156*oL'C +#"(efYg7>;LML'C,%$quB[8VRjOL'C8)$;?0Y;2,ZVL'CP1#u$'X@>5?;L'D+A#gA#-K8(3oL' +E?d'J+tCL5$*fL'EKh&hJbAMM;HhL'Ecp&M/Y@P(j8oL'F?+&?LTjU4rrTL'GJK&8[(*_M/>4L +'Ig8(`\88"bm^2L'Ip;$lk!,$&0'4L'J'?$64d*&V^l;L'J?G#on[)+bgPuL'JoW#b6VS6&#qU +L'L&"#[E)hJVF^uL'N')!DOL'V:D(rD"5AVLo9L'VCG%)R`)Bn +d8;L'VOK$GqN'EJ>(BL'VgS$,VE&LP?cmL'W]l)BsnANJ82mL'Wfo%O-W5PD0r!L'X'!'dAA$)3.[ +_hK";L'YbQ'Ole&`eFn2L'YnU&n6S$b(^74L'Z1]&RpJ#dY8';L'Zam&E8EN#DO32L'\6B)A7c +2%>GW2L'\?E%MFL&'8@A;L'\TL'bZ6-(5<82L'\`P',$$+)MSV4L'])Z(m9U[-&*+sL']2]%$H +>O.>AIuL']>a$Bg,M0np:'L']Vi$'L#L6\ZFUL'^;''N0Yl7YV=LL'^G+&lOGj8qm[NL'^_3&Q +4>i@>5?AL'`Ke(c$gPKn^9sL'`Th$o3PDM1uWuL'``l$8R>BObOH'L'aQ.&@.#s_1iMAL'e0?* +"%E-$\fQ,L'eBE((,d'%YbH#L'eTK)%)**'o!G1L'e]N%17gs)28e3L'eiR$OVUq,DI%mL'f5] +'T.VP-ADqdL'fAa&rMDN.Y\:fL'fYi&W2;M6\ZFML'gA('M=)e7YV=DL'gM,&k[lc;2,ZTL'h@ +D&B]_7K8(3mL'iWh'InhEL5$*dL'icl&h8VCObOGtL'jW/&?:Hl_1iM9L'n*<(`J,:"bm^0L'n +3?$lXj.$&0'2L'nTJ&K6B3+bgPsL'p;%&6aerJVF^sL("AIiL(#ek&Vc#K6\ZFIL +($M*'Lmfc8VRjIL($q6&OqK`@>5?5L(&]h(aatGKn^9gL(&on&gi>AObOGpL('c1&>k0j_1iM5 +L(+6>(`%i8"bm^,L(+HD&f-32&V^l5L(,;\&=/%[6&#qOL(/]g&2o7Q",7X&L(4BA'Foj-$&0' +&L(4fM&IsO*+bgPgL(6M(&5IriJVF^gL(=<>&0?Q;%u),+L(G/U*GW1L(P)R)%hT8'o!G8L(P;X'+os2,DI%tL(P_d'Tn+^.>AItL(Q.p&Wq +e[6\ZFTL(Qk/'N'Ss8VRjTL(T&m(bpaWKn^9rL(T8s&i#+R#DO3)L(XlK)@;-2%>GW)L(Y/S)$ +u$1'o!G0L(YAY'+'C+,DI%lL(Yee'T%PW.>AIlL(Zk.(eKGp7>;LJL(],n(b(1PKn^9jL(aZD( +`A&A"bm^/L(jlI*!M'2$\fQ'L(k)O('TF,'8@A.L(kAW'a9=+,DI%hL(kqg'SV8U6\ZFHL(o8p +(aXnO",7X-L)'lG(_)3:#DO3#L):;Q)?Y^2'8@A,L);.i(k[P[6\Z:DL([(4&Q+8oiJ%b1L'gP +-#uZK`ie@Y2L':P2"QY:>=G?n@L&pdLOu"b5@:CuH1E]nX",7WmL]rMI!/Li6$il(iL(XKB$AJ +lfL^]"B!/M5A&HIV"L'[j9'SZbkL_tjK!/MeQ&:fQ\L'Wn6!J#tlL(HV+6A +>b2LdZt#5_qsc!^MQP!5$b@rGmhGAhM4F!,1[99M8h"U:, +uHZW\*2)-nM5*AQeHZW\*1,1SJ5)'4GP,XU;I?IT?BOPq&+DHW6M#WWnP'DD<8;IS.s+gZ%056 +S5Ou%mqBcpu3E0;ba@rme9L]ETTHXg_tEcW@;+Cf(nEcW@;P"UNOs,t3]G^Y`SI?I,S@UX:o@; +m>nL^/_;L]iM9L]N;=L]E52L^AkGL]WAL^/_?L]rSBL]N;7L^8e?L]WA@L^AkEL]E54L^/_:L^&Y?L]`G; +L]iM?L]E55L^8e@L^&YL]` +G9L]E57L^8e>L]rS>L^/_DL]N;L]WA5L]`G7L]rS@L^8eFL]iMAL^ +&Y9L^Ak@L^/_=L]`G8L]N;5L]E59L]WA4L]N;6L]iM7L^&YBL]`G:L^8eAL^Ak?L]WA?L]rS=L +]E5:L^/_EL]iM8L^8e;L]rSAL]`G5L^Ak>L]E5;L^&Y=L]WA8L^/_AL]N;:L]rS7L]iM;L]WA7 +L]E5L^/_9L]`GL]E5>L]N;>L]WA=L^Ak;L^&Y@L]rS:L]`G?L^8eF(:@9HX^H*+DHW6BOtmjBQTDRL^9/ + %P'CGLF!,1Q"__I]B4uCMCkr@[2Ni<5P#Pt'@j#3$A!1eo"FFTeF!,1Q!,,qXB4uCMCkr@[2N +i;oBQG;1L]qI'BkM+$P&,p[OuAJJI?IQ?ARcikF(:@9HX^H*+DHW3BOtmjBQTDRL^9/%P'CGLF +!,1Q#\[d`B4uCMCkr@[2Ni<5P#Qjm83B!fEb0,A061WACh[cu@<+#1@WNZ$@WO23BQG;*BQGhJ +@WNYr+C]#*P%'4JP,Wec5IaSWMEgR#Z@.mgMEeUJls28dG]Y'MG]YT\AU&LHRP/SuFD_?-CEcQG7F`MSBDD +#CBBlJ#6A7]@eDImj"F)Q2A@qCgGOuY1:ATVm"@r#drB9KiQP'(hWFDtYuCM@[!I?IP~> +% uk.co.terryburton.bwipp/onecode 0.0 0 +%%EndData +%%EndResource % --END ENCODER onecode-- % --BEGIN ENCODER postnet-- -% --DESC: United States Postal Service POSTNET +% --REQUIRES preamble raiseerror renlinear-- +% --DESC: USPS POSTNET % --EXAM: 01234 % --EXOP: includetext includecheckintext % --RNDR: renlinear -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renlinear dup /uk.co.terryburton.bwipp findresource put -begin -/postnet { - - 20 dict begin - - /options exch def % We are given an option string - /barcode exch def % We are given a barcode string - - /dontdraw false def - /includetext false def % Enable/disable text - /includecheckintext false def - /textfont /Courier def - /textsize 10 def - /textyoffset -7 def - /height 0.125 def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - /textfont textfont cvlit def - /textsize textsize cvr def - /textyoffset textyoffset cvr def - /height height cvr def - - /barlen barcode length def - - % Ensure 5, 9 or 11 digits - barlen 5 lt { - /barlen -1 def % Error - } { - barlen 11 ge { - /barlen 11 def - } if - barlen 10 eq { - /barlen 9 def - } if - barlen 8 le { - /barlen 5 def - } if - } ifelse - - % Create an array containing the character mappings - /encs - [ (55222) (22255) (22525) (22552) (25225) - (25252) (25522) (52225) (52252) (52522) - (5) (5) - ] def - - % Create a string of the available characters - /barchars (0123456789) def - - /bhs barlen 5 mul 7 add array def - /txt barlen 1 add array def - - % Put start character - /enc encs 10 get def - /heights enc length array def - 0 1 enc length 1 sub { - /j exch def - heights j enc j 1 getinterval cvi height mul 5 div put - } for - bhs 0 heights putinterval % Put encoded digit into sbs - - /checksum 0 def - 0 1 barlen 1 sub { - /i exch def - % Lookup the encoding for the each barcode character - barcode i 1 getinterval barchars exch search - pop % Discard true leaving pre - length /indx exch def % indx is the length of pre - pop pop % Discard seek and post - /enc encs indx get def % Get the indxth encoding - /heights enc length array def - 0 1 enc length 1 sub { - /j exch def - heights j enc j 1 getinterval cvi height mul 5 div put - } for - bhs i 5 mul 1 add heights putinterval % Put encoded digit into sbs - txt i [barcode i 1 getinterval i 5 mul 1 add 3.312 mul textyoffset textfont textsize] put - /checksum checksum indx add def % checksum+=indx - } for - - % Put the checksum character - /checksum 10 checksum 10 mod sub 10 mod def - /enc encs checksum get def - /heights enc length array def - 0 1 enc length 1 sub { - /j exch def - heights j enc j 1 getinterval cvi height mul 5 div put - } for - bhs barlen 5 mul 1 add heights putinterval - - includecheckintext { - txt barlen [barchars checksum 1 getinterval barlen 5 mul 1 add 3.312 mul textyoffset textfont textsize] put - } { - txt barlen [( ) barlen 5 mul 1 add 72 mul 25 div textyoffset textfont textsize] put - } ifelse - - % Put end character - /enc encs 11 get def - /heights enc length array def - 0 1 enc length 1 sub { - /j exch def - heights j enc j 1 getinterval cvi height mul 5 div put - } for - bhs barlen 5 mul 6 add heights putinterval - - % Return the arguments - << - /ren //renlinear - /bhs bhs - /bbs [bhs length {0} repeat] - /sbs [bhs length 1 sub {1.44 1.872} repeat 1.44] - includetext { - /txt txt - } if - /opt options - >> - - dontdraw not //renlinear if - - end - -} bind def -/postnet dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp postnet 0.0 0 0 0 +%%BeginData: 45 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\KFD5Z2F*j( NAmoLs AWf 3 'P!F GY<0 B5( @ZmRN0oc8t P)XR(F_-_!H +]ftD5*C&O5*@^MH ]ft&Ec krV 1OYE dI?J 0)* g/N:DfBf4D f0WZ5*@^MP# +Q@=FD5Z2F*j'+I? I/TFC f]=A oDR/+ EV1> FCo H/FHS5=1G< i]G]\"@H=\4 +@AU&<$2@<-0qDMS[`D3>$K04K->E,[FKDf^##:f@;0doATDg0EfrY8P#Pn!Eas#uAUBS"LbP!(P!4[^P#.<^HS8iPBlJ#DE, +Tf>DImoV@:V`=@<,ddFCfKQ,uml?;]nn4;cHL\<$6%#F*&O7Df0Z*Bl5&3DJXS@A8,[jFE9)gE +a`['AS#n&DfV"*I?IQXP"@<9@<,jk@<-FL$8=1i1GgsI2`Ng\1G<6OARfLsF_up7Ou%moL]Lsn +Ebo<)L]N[U$Bf.eWJCnEC6CAr@;KXg@_99O.=04K->E,[FKDf^#OpR:-04f$2+D#G#F,10d99M(aBOtmjBQS;BOtmjBQS5?'9 +G\P"76;DIXf#DI[`1@q]F`CNFW8P"Uro05+p2B4uC.+D#G#P%'R\Ou%moL]M()A!1;W!KsF/05 +?Y6Ou$c_BkM+$F!,3?ASu!#C5;nR9Tgr?ASGdjFHUHr"d1d,G^Y`G@VBg*@UX:nAT!;-P&,pTO +o]6-BkM+$F-:f_DI[L*A7]7aARfLiDKKH7FF,-PG]Y';@<-0qDBN.+@UX:eBOPq&+Cf(r@r$.. +D284U9O_FNCh7L?"d3\X!KmJ@5Z@F'P&,5OG]\4LAnH*qF5?'9G +\HZXLS+C\c"Ch7K,>E/_,@UX:nAT!;-P&,pTOo^A0P&,plOu@DnG]\4LAnH*qF5?'9G\P#X/HDIXf#DI[aD$^+/G1G+D#G#+DQ]5P"_#iBOtmjBQTDRL]rr"P'DD<87H7R+C\c"Ch7L?" +d3\X#*K"#ASGdjFEGL]N[ +% uk.co.terryburton.bwipp/postnet 0.0 0 +%%EndData +%%EndResource % --END ENCODER postnet-- % --BEGIN ENCODER planet-- -% --DESC: United States Postal Service PLANET +% --REQUIRES preamble raiseerror renlinear-- +% --DESC: USPS PLANET % --EXAM: 01234567890 % --EXOP: includetext includecheckintext % --RNDR: renlinear -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renlinear dup /uk.co.terryburton.bwipp findresource put -begin -/planet { - - 20 dict begin - - /options exch def % We are given an option string - /barcode exch def % We are given a barcode string - - /dontdraw false def - /includetext false def % Enable/disable text - /includecheckintext false def - /textfont /Courier def - /textsize 10 def - /textyoffset -7 def - /height 0.125 def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - /textfont textfont cvlit def - /textsize textsize cvr def - /textyoffset textyoffset cvr def - /height height cvr def - - /barlen barcode length def - - % Ensure 11 or 13 digits - barlen 11 lt { - /barlen -1 def % Error - } { - barlen 13 ge { - /barlen 13 def - } { - /barlen 11 def - } ifelse - } ifelse - - % Create an array containing the character mappings - /encs - [ (22555) (55522) (55252) (55225) (52552) - (52525) (52255) (25552) (25525) (25255) - (5) (5) - ] def - - % Create a string of the available characters - /barchars (0123456789) def - - /bhs barlen 5 mul 7 add array def - /txt barlen 1 add array def - - % Put start character - /enc encs 10 get def - /heights enc length array def - 0 1 enc length 1 sub { - /j exch def - heights j enc j 1 getinterval cvi height mul 5 div put - } for - bhs 0 heights putinterval % Put encoded digit into sbs - - /checksum 0 def - 0 1 barlen 1 sub { - /i exch def - % Lookup the encoding for the each barcode character - barcode i 1 getinterval barchars exch search - pop % Discard true leaving pre - length /indx exch def % indx is the length of pre - pop pop % Discard seek and post - /enc encs indx get def % Get the indxth encoding - /heights enc length array def - 0 1 enc length 1 sub { - /j exch def - heights j enc j 1 getinterval cvi height mul 5 div put - } for - bhs i 5 mul 1 add heights putinterval % Put encoded digit into sbs - txt i [barcode i 1 getinterval i 5 mul 1 add 3.312 mul textyoffset textfont textsize] put - /checksum checksum indx add def % checksum+=indx - } for - - % Put the checksum character - /checksum 10 checksum 10 mod sub 10 mod def - /enc encs checksum get def - /heights enc length array def - 0 1 enc length 1 sub { - /j exch def - heights j enc j 1 getinterval cvi height mul 5 div put - } for - bhs barlen 5 mul 1 add heights putinterval - - includecheckintext { - txt barlen [barchars checksum 1 getinterval barlen 5 mul 1 add 3.312 mul textyoffset textfont textsize] put - } { - txt barlen [( ) barlen 5 mul 1 add 72 mul 25 div textyoffset textfont textsize] put - } ifelse - - % Put end character - /enc encs 11 get def - /heights enc length array def - 0 1 enc length 1 sub { - /j exch def - heights j enc j 1 getinterval cvi height mul 5 div put - } for - bhs barlen 5 mul 6 add heights putinterval - - % Return the arguments - << - /ren //renlinear - /bhs bhs - /bbs [bhs length {0} repeat] - /sbs [bhs length 1 sub {1.44 1.872} repeat 1.44] - includetext { - /txt txt - } if - /opt options - >> - - dontdraw not //renlinear if - - end - -} bind def -/planet dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp planet 0.0 0 0 0 +%%BeginData: 44 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\ AmoLs AWe i&G %# 3$ A79 Rk@ q]F`CE R4 tCia0N 1G< +H[@r-9uARfCb@r# drFC f]= +D ,% uF( LLj 06C cMFC +oH/FHOV,1GO u"b 5AU &F Cf]= AoD R/OtDhQ06C cMFE;/BAKZ) ++G]\"@H=`6mOu"b 5AU&< BDe)Q;c$C +8:eX/M78tCHF`VXI@V$Z:0d(CT+>GYpA8,[jFE8R9G[kQ4A8,po+Cf(r@r!2tBkM.%0/%?SBld +isEcQ)=P!=AX<+99V@rGmhH]g@E0Tp%25);4^:m,jG04K->E,[FKCgh3mF@'DH6YKnK@:OCjEf +MDF;c$C8:eX/M78tCHF`VXI@rH7,@;0U%Df0B:+Co2!BlnDL061K8F(Jp'Ec5u]5CJ\oI?I/T@ +UX:eBOPq&NX@Hp1,CaE2E*TUOu"b$BOt[hF*2>U!0T-o!/LYb@<-0qDMS=VWI$:4P!5$b04S[, +@r$..D'3>%ARfLsF_r71@<,jrA7ZltP"UTbP,XTFOu%NL82"IdARfLsF_upA@q]F`CNFW8L^K; +[P,X6EP%p.9G%#3$A79Rk@q]F`CO715@<,jrA7Zlm@<-0qDN[Y%@<,jk@<-E3@q]F`CNFW8P"U +sTHS8iPBlJ#DE,8s#ATU7IA4($A@r"JHB5)IJ.S4MfDfTl0@rrhn;c$C8:eX/M78tC>BOt[h+C +o2!BlkJ:Ec6,8A7]:)061K8F(Jp'Ec5u]5CJ\o04J@1@rGmh+C\c"@rGmhL]CmmEbo<)P"_#pI +?IP_ASu"!+Bsj01,:^E23%ht2)R-ENWh9t1,UhI"Z8.m1,Y'q2)7$H16)Mq1,UgENWh9q1,UqL +"Yqqm2):0q1,UpE23%hq2)7$HNWD"t!B"/G1G<3NF!+q#Ebo<)L]rrXL^0(DOpR:-06DG\+C\c +"Ch7L?!KmJH$'I(tASu!#ASu"!L^K;/8/U/B4uCMCkr7X2Ni<5P"9%qF,0g0ASGdjFE/8/U/B4uCMCkr7X +2Ni<5P"9%qF!,1Q"d3\X!KmIsASGdjFEFCoH/F_99M(aBOtmjBQS;FCoH/FFCoH/F1_dD +D*Y`ASuGH\_ZMP(R$nF(025>9IBgF-:!g!KsF/MEeUJ +m#"$rS[*[,K8Mn';=%R2Bl7EsF_#'*AU& +% uk.co.terryburton.bwipp/planet 0.0 0 +%%EndData +%%EndResource % --END ENCODER planet-- % --BEGIN ENCODER royalmail-- -% --DESC: Royal Mail 4 State Customer Code (RM4SCC) +% --REQUIRES preamble raiseerror renlinear-- +% --DESC: Royal Mail 4 State Customer Code % --EXAM: LE28HS9Z -% --EXOP: includetext includecheckintext barcolor=FF0000 +% --EXOP: includetext barcolor=FF0000 % --RNDR: renlinear -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renlinear dup /uk.co.terryburton.bwipp findresource put -begin -/royalmail { - - 20 dict begin - - /options exch def % We are given an option string - /barcode exch def % We are given a barcode string - - /dontdraw false def - /includetext false def % Enable/disable text - /includecheckintext false def - /textfont /Courier def - /textsize 10 def - /textyoffset -7 def - /height 0.175 def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - /textfont textfont cvlit def - /textsize textsize cvr def - /textyoffset textyoffset cvr def - /height height cvr def - - % Create an array containing the character mappings - /encs - [ (3300) (2211) (2301) (2310) (3201) (3210) - (1122) (0033) (0123) (0132) (1023) (1032) - (1302) (0213) (0303) (0312) (1203) (1212) - (1320) (0231) (0321) (0330) (1221) (1230) - (3102) (2013) (2103) (2112) (3003) (3012) - (3120) (2031) (2121) (2130) (3021) (3030) - (2) (3) - ] def - - % Create a string of the available characters - /barchars (ZUVWXY501234B6789AHCDEFGNIJKLMTOPQRS) def - - /barlen barcode length def - /encstr barlen 4 mul 6 add string def - /txt barlen 1 add array def - - % Put start character - encstr 0 encs 36 get putinterval - - /checksumrow 0 def - /checksumcol 0 def - 0 1 barlen 1 sub { - /i exch def - % Lookup the encoding for the each barcode character - barcode i 1 getinterval barchars exch search - pop % Discard true leaving pre - length /indx exch def % indx is the length of pre - pop pop % Discard seek and post - /enc encs indx get def % Get the indxth encoding - encstr i 4 mul 1 add enc putinterval - txt i [barcode i 1 getinterval i 4 mul 1 add 3.312 mul textyoffset textfont textsize] put - /checksumrow checksumrow indx 6 idiv add def - /checksumcol checksumcol indx 6 mod add def - } for - - % Put the checksum character - /checksum checksumrow 6 mod 6 mul checksumcol 6 mod add def - /enc encs checksum get def - encstr barlen 4 mul 1 add enc putinterval - includecheckintext { - txt barlen [barchars checksum 1 getinterval barlen 4 mul 1 add 3.312 mul textyoffset textfont textsize] put - } { - txt barlen [( ) barlen 4 mul 1 add 3.312 mul textyoffset textfont textsize] put - } ifelse - - % Put end character - encstr barlen 4 mul 5 add encs 37 get putinterval - - /bbs encstr length array def - /bhs encstr length array def - 0 1 encstr length 1 sub { - /i exch def - /enc encstr i 1 getinterval def - enc (0) eq { - bbs i 3 height mul 8 div put - bhs i 2 height mul 8 div put - } if - enc (1) eq { - bbs i 0 height mul 8 div put - bhs i 5 height mul 8 div put - } if - enc (2) eq { - bbs i 3 height mul 8 div put - bhs i 5 height mul 8 div put - } if - enc (3) eq { - bbs i 0 height mul 8 div put - bhs i 8 height mul 8 div put - } if - } for - - % Return the arguments - << - /ren //renlinear - /bbs bbs - /bhs bhs - /sbs [bhs length 1 sub {1.44 1.872} repeat 1.44] - includetext { - /txt txt - } if - /opt options - >> - - dontdraw not //renlinear if - - end - -} bind def -/royalmail dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp royalmail 0.0 0 0 0 +%%BeginData: 48 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\:%52X=FD5Z2F- 8_M1G <3G Eas # uAW f6? 1G< 9WDKKE 0@ Am oLs AWe i&FC +f]=AoDR/OiNV@06 CcMF E ;/ BA V^\ V1G X4aVt +cOu8C3DfBf4Df0W CP,i2' Cia 0 N4aW >WI? IQm 30Ia6V33Qn !BlU*FE2M8P +!+/T/Wr;\FcnqO1 OXV5/T c#U AWei tP#Z pnA We*t3A5;iF D5Z2F-8_M1O +YEcDfBf4Df0WCOu %NL8M >0sG ][P9D KI"C AU& FE;/BAWe^ 01G>#B4u CM09S+E @UX:eB OPq&N [.e .<``C+2)$a ?1GhEV2`Nf` +84,d67Rp3F8kViP<)6=f;H&`704S[(Ectl-F,2*)23KbO!/LZ3,C?Dg.!;Ou"b$BOt[hF*2>0Det40Ou%mo +L]LsnEbo<)L]N[99M(a@q]F`CNFW +8Ec6.E@q]F`CNFW8Ec6.EBl7I+L^'#?Oo^_%04S[,@r$..D.@L#+Cf(r@r$..D.@L#+DG_(G_c +QeC6AU\1OYEW04S[,@r$..D'3>%ARfLsF_u/;GDHHdC5<(WCh%-i@r$..D.@L#L^'#WOo^_%G% +#3$A79Rk@q]F`CO715@<,jrA7Zlm@<-0qDN[Y%@<,jk@<-E3@q]F`CNFW8P"UsTHS8iPBlJ#DE +c653Ci*TpCdMQ@6YL%@CIDlLBlo@]8T&$VEcP`$FG%kJu +A1oTV@;0doATDg0EfrY8P#O)D@<,jrA7Zlm@<,jrA7^Ps@UX:nAT!Z)Ou%NL<%hg#@ribsNW_- +o0JJLi1,:R=NW_*n0JSRj1,CX=NW_-n0JSRj1GU[=NW_'k1,=jm0JG:=NW_$j1,Fpn0JP@=NW_ +'j1,Fpn0ebC=NW_'m0J\Xk0JY@=NW_$l0Je^l0JbF=NW_'l0Je^l0etI=NW_'m1,+^k0JYF=NW +_$l1,4dl0JbL=NW_'l1,4dl0etO=NW_-m0J\Xk1,(F=NW_*l0Je^l1,1L=NW_-l0Je^l1GCO=N +W_-m1,+^k1,(L=NW_*l1,4dl1,1R=NW_-l1,4dl1GCU=NWCnq!Ae#E1G<9IB`Eas#uAKY]C!Kp,jL]ilWL]NY>MEk,7c]W*dAU&FCf]=F(or3+C1.TI?I-4DI[a0EZeh"Ebo<)L]ilWL]NY>ASu"!+Cf(r@r$..D +3@PTH"h/+Cis9"@q]F`CM@[.AU&9IB`EarckEcW@5BOt[hF*2>U!Kp,c +@<-0qDMSFYCkr+T!K'-@pWo"=FCf]=H#I;,F(KG9FCf]=AoDR/+EV1>FE;/BAKY9AG^Xp\G]Y' +;@<-0qDBN/D!?bi[Ebo<)L]ilWL]NY>MEk,7c]W*dAU&FCf]=F(o +r3+C1.TI?ITADI[a0EZeh"Ebo<)L]ilWL]rqBASu"!LaA3WP'J]i@WNZ'DI[a0Efsmp$'I(t@V +Bg*ASu"!FE3OROpR:-L]E53ASu"!FE3ORL]N[ +% uk.co.terryburton.bwipp/royalmail 0.0 0 +%%EndData +%%EndResource % --END ENCODER royalmail-- % --BEGIN ENCODER auspost-- +% --REQUIRES preamble raiseerror renlinear-- % --DESC: AusPost 4 State Customer Code % --EXAM: 5956439111ABA 9 % --EXOP: includetext custinfoenc=character % --RNDR: renlinear -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renlinear dup /uk.co.terryburton.bwipp findresource put -begin -/auspost { - - 20 dict begin - - /options exch def % We are given an option string - /barcode exch def % We are given a barcode string - - /dontdraw false def - /includetext false def % Enable/disable text - /textfont /Courier def - /textsize 10 def - /textyoffset -7 def - /height 0.175 def - /custinfoenc (character) def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - /textfont textfont cvlit def - /textsize textsize cvr def - /textyoffset textyoffset cvr def - /height height cvr def - - % Create an array containing the character mappings - /encs - [ (000) (001) (002) (010) (011) (012) (020) (021) - (022) (100) (101) (102) (110) (111) (112) (120) - (121) (122) (200) (201) (202) (210) (211) (212) - (220) (221) (222) (300) (301) (302) (310) (311) - (312) (320) (321) (322) (023) (030) (031) (032) - (033) (103) (113) (123) (130) (131) (132) (133) - (203) (213) (223) (230) (231) (232) (233) (303) - (313) (323) (330) (331) (332) (333) (003) (013) - (00) (01) (02) (10) (11) (12) (20) (21) (22) (30) - (13) (3) - ] def - - % Create a string of the available characters - /barchars (ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz #) def - - /barlen barcode length def - barcode 0 2 getinterval (11) eq {37} if - barcode 0 2 getinterval (45) eq {37} if - barcode 0 2 getinterval (59) eq {52} if - barcode 0 2 getinterval (62) eq {67} if - /encstr exch string def - /txt barlen 2 sub array def - - % Put start character - encstr 0 encs 74 get putinterval - - % Encode the FCC - 0 1 1 { - /i exch def - encs barcode i 1 getinterval cvi 64 add get - encstr i 2 mul 2 add 3 2 roll putinterval - } for - - % Encode the DPID - 2 1 9 { - /i exch def - encs barcode i 1 getinterval cvi 64 add get - encstr i 2 mul 2 add 3 2 roll putinterval - txt i 2 sub [barcode i 1 getinterval i 2 sub 2 mul 6 add 3.312 mul textyoffset textfont textsize] put - } for - - % Encode the customer information - custinfoenc (numeric) eq { - 0 1 barlen 11 sub { - /i exch def - encs barcode i 10 add 1 getinterval cvi 64 add get - encstr i 2 mul 22 add 3 2 roll putinterval - txt i 8 add [barcode i 10 add 1 getinterval i 2 mul 22 add 3.312 mul textyoffset textfont textsize] put - } for - /ciflen barlen 10 sub 2 mul def - } { - 0 1 barlen 11 sub { - /i exch def - barcode i 10 add 1 getinterval barchars exch search - pop - length /indx exch def - pop pop - /enc encs indx get def - encstr i 3 mul 22 add enc putinterval - txt i 8 add [barcode i 10 add 1 getinterval i 3 mul 22 add 3.312 mul textyoffset textfont textsize] put - } for - /ciflen barlen 10 sub 3 mul def - } ifelse - - % Add any filler characters - 22 ciflen add 1 encstr length 14 sub { - encstr exch encs 75 get putinterval - } for - - % Create the 64x64 Reed-Solomon table - /rstable 64 64 mul array def - rstable 0 [ 64 {0} repeat ] putinterval - rstable 64 [ 0 1 63 {} for ] putinterval - /prev 1 def - 64 { - /next prev 1 bitshift def - next 64 and 0 ne { - /next next 67 xor def - } if - 0 1 63 { - /j exch def - /nextcell {rstable 64 next mul j add} def - nextcell rstable 64 prev mul j add get 1 bitshift put - nextcell get 64 and 0 ne { - nextcell nextcell get 67 xor put - } if - } for - /prev next def - } repeat - - % Calculate the Reed-Solomon codes for triples - /rscodes encstr length 16 sub 3 idiv 4 add array def - rscodes 0 [ 4 {0} repeat ] putinterval - 2 3 encstr length 16 sub { - /i exch def - rscodes rscodes length i 2 sub 3 idiv sub 1 sub - encstr i 1 getinterval cvi 16 mul - encstr i 1 add 1 getinterval cvi 4 mul add - encstr i 2 add 1 getinterval cvi add - put - } for - rscodes length 5 sub -1 0 { - /i exch def - 0 1 4 { - /j exch def - rscodes i j add rscodes i j add get - rstable 64 [48 17 29 30 1] j get mul rscodes i 4 add get add get - xor put - } for - } for - /checkcode (000000000000) 12 string copy def - 0 1 3 { - /i exch def - /enc rscodes 3 i sub get 4 3 string cvrs def - checkcode i 3 mul 3 enc length sub add enc putinterval - } for - - % Put checkcode and end characters - encstr encstr length 14 sub checkcode putinterval - encstr encstr length 2 sub encs 74 get putinterval - - /bbs encstr length array def - /bhs encstr length array def - 0 1 encstr length 1 sub { - /i exch def - /enc encstr i 1 getinterval def - enc (0) eq { - bbs i 0 height mul 8 div put - bhs i 8 height mul 8 div put - } if - enc (1) eq { - bbs i 3 height mul 8 div put - bhs i 5 height mul 8 div put - } if - enc (2) eq { - bbs i 0 height mul 8 div put - bhs i 5 height mul 8 div put - } if - enc (3) eq { - bbs i 3 height mul 8 div put - bhs i 2 height mul 8 div put - } if - } for - - % Return the arguments - << - /ren //renlinear - /bbs bbs - /bhs bhs - /sbs [bhs length 1 sub {1.44 1.872} repeat 1.44] - includetext { - /txt txt - } if - /opt options - >> - - dontdraw not //renlinear if - - end - -} bind def -/auspost dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp auspost 0.0 0 0 0 +%%BeginData: 59 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\H\`B !23 +JD%DfBf4Df0WZ5* @]T@U X:e De* F B5* @]T A8c @-A9)+ &+ D,%uF( LLj +055<6Cis9"FCf]= +D,%u F(L Lj0 6C cM FCo H/F HOV,1G Ou"b5AU&K FD5 Z2F*j(NAmo LsAWf3'P!FG +Y<0B5(@ZmRN0oc8 tP)XR( F_- _ !H]f tD5* C&O 5*@^MH]ft& EckrV1OYEdI +?J0)*g/N:DfBf4D f0WZ5* @^M P#Q@ =FD5 Z2F *j'+I?I/TF Cf]=AoDR/+E +V1>FCoH/FHS5=1G i0 f"a k0JY>B"#)J bNWUsj16)Gk +0JJLh0eb>B"#2JbNWV!j0TH5i0en[j0ekGD"#2PbNWV!k0oc>j1,=jl1,(DB"#;PbNWV$j16)G +l0eeUi1,1MD"#;SdNWV$l0TH5j1,4dk1,:VF"#DVbNWV'k0oc>l0J\Xj1GLSD"#DYdNWV'l16) +Gm1,+^j1GU\F"#D\fNWUsj1QDPk1GFgk0JbGD"#)MdNWUsk1QDPl0Je^k0ekJE"#2PeNWV!l0T +H5i1GOml0f(SF"#2SfNWV$j1QDPm0f+gl1,:YG"#;YdNWV$m0oc>k1GXsm1,C_H"#DVeNWV'l1 +QDPn1,Fpm1G^_F"#D_fNWV'n16)Gm1Gb$n0JG;C"#)GcNWLmgNWLmhNWLmiNWLphNWLpiNWLpj +NWLsiNWLsjNWLskNWM!jNWLpkNWCqAOu"b#@<,jk@<-FL5X@_(6q'R884cEH9MJ8X:f1+h<)lt +#=BSf]0etOA2)[BQ3FQB,A7]@cBPD3sCi+'.E,fo>FEMbNG^4TX,Eai9@UX:nASrW"@<,jrA7^ +p5Ou$QUEas#uAV^>B!g66;!\lEm4aVu2I?IQ=@<,jrA7^PsL]W`5NWM$pP!+/J-%1qU@UX:eDe +*F8!/L]>9TB033KcOPLbsOC<+99V@rGmhL]E54P"^l;2DUFYH\b%;P#O)GDI[a0EfrVLV33VfF +EhmM@UX:nAT!;*P,XTNOu$Ze@rla4L]D"(@rmGuP"Us`L]E53L]MiUBp(ZC1M(H6F!+q#Eas#u +AKY]C!Kp->/;QQS!Kp)eDI[a0EZf(P!g7AU!g3S?",I#ALQZq2P":B1L]N;%H$":Q+DHW5P,VY.@UX +:eDe*E%BnueQ9PK:aP,X6=P&,pYOo^G*;tnV$Cij65FEqe:AohO*+EV1>FCoH/F/;QQS!Kp)eDI[a0EZf(P!g7AU(6S]S",I#ALQZq)G]Y'BL^9.E>9IB` +Eas#uAKY]C$BbFG!Kp,jL]W`UL_c-SMEk,7c]W*dAU&FCf]=F(or +3+C1.TI?I,S@qfOkASrW"@<-0qDMSX_WJCV=Cm$T&H\_ZX!FfJXCh7L?$^.K9056S5Ou$QUEas +#uAKY]C$BbFG!Kp,c@<,jk@<-FP5*CngFcp2eBl7I+P!5$bP')q104f$2+D#G#F!,17A9a81Ou +$Ze@rla4+DHW6P&,piOo]-3A!2+ZG]Y'BL^9.E>9IB`Eas#uAKY]C$BbFG!Kp,jL]`fVL_c-SM +Ek,7c]W*dAU&FCf]=F(or3+C1.TI?I,S@qfOkASrW"@<-0qDMSX_ +WJCY>Cm$T&P#[;R@qfOkAT!Y3L]M()@rla4P%'4WP,We>DI[a0EfrUtDI[aD99Mr2H$tiH062, +U@:F%aLd6b]P&-9fOu%-"FCAWpAV^=jLd6DN98!JiseI?I-,P'J +^"Eb0EM!Ko6p5^P/%AU&;>E,oN5L]NYLOu$ueG]\a,Op$R@P&5P!DIn'7+Dtb8FGN;I_3-U&P# +R5;L]N;rHS9,s5*@]TDIn'7@qBImHQ[?MFCAWpAV`ThAU&<[Chf+6I?HC(AU&<,ASc0*EcZ>2@ +VfV35]CaTG*6ZVOo^_=L]NYLP'CkUG][G,Ci#8-Ld7++L]ETTHZ!D>FCSluC`mV,G][G,Ci#8- +LdR?AP'DD<<.0p#05trCFs([6G]]*)I?K49EcY`/A7]g)ASu"!FE3ORL_,`KL]`fP#@IBL]N[P"_#iL]ilWOo +]-3@rla4+DHW5Oo^@>P"_#iOo^_jI?I-AF(9-!ATO#DL]rs@M#W82HS9)r5*@^X!/LZ3"FDe:P +!5$bEcY`/A7]g)Bcq/R!HN6kDe*F#+DDs5Oo^_=EcZ>2@VfV35[0$uL_5F`L`V?Q>p*mF99O+3 +F(9-!ATJu.L]ikAP"Ur=P"UtSP'DD<8:?Xl04S[,@r#RmA7^c00JG170JG170JG17L^]HCOr9E +=L]E53L]_uWBp(ZC1G<9IBgF +-:!g!KsF/MEeUJm#"$rS[*[,K8Mn';=%R2Bl7EsF_#'*AU& +% uk.co.terryburton.bwipp/auspost 0.0 0 +%%EndData +%%EndResource % --END ENCODER auspost-- % --BEGIN ENCODER kix-- -% --DESC: Royal Dutch TPG Post KIX 4-State Barcode +% --REQUIRES preamble raiseerror renlinear-- +% --DESC: Royal Dutch TPG Post KIX % --EXAM: 1231FZ13XHS -% --EXOP: includetext includecheckintext +% --EXOP: includetext % --RNDR: renlinear -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renlinear dup /uk.co.terryburton.bwipp findresource put -begin -/kix { - - 20 dict begin - - /options exch def % We are given an option string - /barcode exch def % We are given a barcode string - - /dontdraw false def - /includetext false def % Enable/disable text - /includecheckintext false def - /textfont /Courier def - /textsize 10 def - /textyoffset -7 def - /height 0.175 def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - /textfont textfont cvlit def - /textsize textsize cvr def - /textyoffset textyoffset cvr def - /height height cvr def - - % Create an array containing the character mappings - /encs - [ (0033) (0123) (0132) (1023) (1032) (1122) - (0213) (0303) (0312) (1203) (1212) (1302) - (0231) (0321) (0330) (1221) (1230) (1320) - (2013) (2103) (2112) (3003) (3012) (3102) - (2031) (2121) (2130) (3021) (3030) (3120) - (2211) (2301) (2310) (3201) (3210) (3300) - ] def - - % Create a string of the available characters - /barchars (0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ) def - - /barlen barcode length def - /encstr barlen 4 mul string def - /txt barlen array def - - 0 1 barlen 1 sub { - /i exch def - % Lookup the encoding for the each barcode character - barcode i 1 getinterval barchars exch search - pop % Discard true leaving pre - length /indx exch def % indx is the length of pre - pop pop % Discard seek and post - /enc encs indx get def % Get the indxth encoding - encstr i 4 mul enc putinterval - txt i [barcode i 1 getinterval i 4 mul 3.312 mul textyoffset textfont textsize] put - } for - - /bbs encstr length array def - /bhs encstr length array def - 0 1 encstr length 1 sub { - /i exch def - /enc encstr i 1 getinterval def - enc (0) eq { - bbs i 3 height mul 8 div put - bhs i 2 height mul 8 div put - } if - enc (1) eq { - bbs i 0 height mul 8 div put - bhs i 5 height mul 8 div put - } if - enc (2) eq { - bbs i 3 height mul 8 div put - bhs i 5 height mul 8 div put - } if - enc (3) eq { - bbs i 0 height mul 8 div put - bhs i 8 height mul 8 div put - } if - } for - - % Return the arguments - << - /ren //renlinear - /bbs bbs - /bhs bhs - /sbs [bhs length 1 sub {1.44 1.872} repeat 1.44] - includetext { - /txt txt - } if - /opt options - >> - - dontdraw not //renlinear if - - end - -} bind def -/kix dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp kix 0.0 0 0 0 +%%BeginData: 35 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\ Ou" +b5AU&FC f]= AoDR /OtD hQ0 6CcMFE;/BA KZ)+G]\"@H= +`6mOu"b5AU&DM c1QDS l0etP F"> DPd16)Jl0J YGE">MSd16) +Jl0etME">DSc1QD Sl1GCVF ">DVd1 6)Jl1 ,(M E">MYd16)J l1GCSE">DSe +0ocAj1GU\F">DVf0TH8j1,:SE">MYf0TH8j1GUYE">VYc1QDSn0ebDD">V\d16)Jn0JG;C">__ +d16)Jn0ebAC">VYe0ocAl0etJD">V\f0TH8l0JYAC">__f0TH8l0etGC">V_e0ocAl1GCPD">V +bf0TH8l1,(GC">_ef0TH8l1GCLgOu"b#@<,jk@<-FL,VUr.1GgsI2`Nf`6:4.07Rp!@8kViP:/ +=\`;H$Op<``C+>*:Zp@q]:kG%#3.La8-@Ou%moL]N;VHXg_tEctl-F-8_M3+?<:@q]:kF-8_C! +Kp->5*C/=P":B/L]LsnEas#uAWgMY!KsF/@UX:eDe*FB5)96&9OhaEEctl-F-8_M@$5JU04K-> +E,[FFBm;sQA4($=Ea`I"ATEeb91`5.D09oA+Cf>-FCAm$+E).6Gp$U*E+sE&C`mP*FED)7F!+n +/A0>DsB5)I/0/%?SBldisEcQ)=P!=AX<.0p#04J@1Ch7K,@UX:eDe*FB@ZiN#ASu"!FE/L5@<- +0qDMSFYCm(WX1G9IB`Eas#uA +KY]C!Kp,jL]ilWMEk,7c]W*dAU&FCf]=F(or3+C1.TI?I,S@UaC$ +ASu"!FE3OROpR:-04JU9+D#G#F*)Gc@Zh%\1Pc$e!G-.YF*)Gc@Yb&JWI$:4P!5$b04f$2+D#G +#F*)FFBnueQ9Th2CDI\\-0TnSG@UaC$Bnuk)ASGdjFHUHr#a.*/G[b?-+DHW5BOtmjBQTDRL^9 +/%P'DD<<+TrWNWCkt4aUXIF!,1Q!,,qXB4uCMCkr@[2Ni;oBQG;1L]qI'BkM+$P&,p[OuAJJI? +IQ@DI\\-16OeI@UaC$Bnuk)ASGdjFHUHr#a.*/G[b?-+DHW8BOtmjBQTDRL^9/%P'DD<<+TrWN +WCr!4aUXIF!,1Q!,,qXB4uCMCkr@[2Ni;oBQG;1L^7[*BkM+$P&,p[OuAJJI?IQXP"7\t061WA +0/%?WDJX$)ARTU4@UaC$@UaC3@VBg*@VBg9F(025>9IBgF-:!g!KsF/MEeUJm#"$rS[*[,K8Mn +';=%R2Bl7EsF_#'*AU& +% uk.co.terryburton.bwipp/kix 0.0 0 +%%EndData +%%EndResource % --END ENCODER kix-- % --BEGIN ENCODER japanpost-- +% --REQUIRES preamble raiseerror renlinear-- % --DESC: Japan Post 4 State Customer Code % --EXAM: 6540123789-A-K-Z % --EXOP: includetext includecheckintext % --RNDR: renlinear -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renlinear dup /uk.co.terryburton.bwipp findresource put -begin -/japanpost { - - 20 dict begin - - /options exch def % We are given an option string - /barcode exch def % We are given a barcode string - - /dontdraw false def - /includetext false def % Enable/disable text - /includecheckintext false def - /textfont /Courier def - /textsize 10 def - /textyoffset -7 def - /height 0.175 def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - /textfont textfont cvlit def - /textsize textsize cvr def - /textyoffset textyoffset cvr def - /height height cvr def - - % Create an array containing the character mappings - % 0123456789- C1C2C3C4C5C6C7C8 ST EN - /encs - [ (300) (330) (312) (132) (321) (303) (123) (231) (213) (033) (030) - (120) (102) (210) (012) (201) (021) (003) (333) - (31) (13) - ] def - - % Create a string of the available characters - /barchars (0123456789-ABCDEFGHIJKLMNOPQRSTUVWXYZ) def - /barlen barcode length def - - /encstr 20 1 add 3 mul 4 add string def - /digits 20 array def - /txt barlen 1 add array def - - % Put start character - encstr 0 encs 19 get putinterval - - /checksum 0 def - /j 0 def /i 0 def - 0 1 barlen 1 sub { - /i exch def - barcode i 1 getinterval barchars exch search - pop % Discard true leaving pre - length /indx exch def % indx is the length of pre - pop pop % Discard match and post - indx 11 ge indx 37 lt and { % Insert escape - j 18 gt {exit} if % Should fit in 20 chars - % 11-20: C1 (11) - % 21-30: C2 (12) - % 31-36: C3 (13) - /digit indx 1 sub 10 idiv 10 add def - encstr j 3 mul 2 add encs digit get putinterval - /checksum checksum digit add def - digits j digit put - /j j 1 add def - } if - j 19 gt {exit} if % Should fit in 20 chars - /digit 0 def - indx 37 eq { - /digit 14 def % space (C14) - } if - indx 11 ge indx 37 lt and { - /digit indx 1 sub 10 mod def - } if - indx 11 lt { - /digit indx def - } if - encstr j 3 mul 2 add encs digit get putinterval % space - /checksum checksum digit add def - digits j digit put - txt i [barcode i 1 getinterval j 3 mul 2 add 3.312 mul textyoffset textfont textsize] put - /j j 1 add def - } for - - % Fill spaces (c14) at right end - j 1 20 1 sub { - /k exch def - encstr k 3 mul 2 add encs 14 get putinterval - /checksum checksum 14 add def - digits k 14 put - } for - - % Put the checksum character - /checksum checksum 19 mod 19 exch sub def - encstr 2 20 3 mul add encs checksum get putinterval - - % Put end character - encstr 2 21 3 mul add encs 20 get putinterval - /checkdigit ( ) def - includecheckintext { - /checkdigit barchars checksum 1 getinterval def - } if - txt i 1 add [ checkdigit 20 3 mul 2 add 3.312 mul textyoffset textfont textsize] put - - % Put end character - encstr 20 1 add 3 mul 2 add encs 20 get putinterval - - /bbs 21 3 mul 4 add array def - /bhs bbs length array def - 0 1 bbs length 1 sub { - /i exch def - /enc encstr i 1 getinterval def - /bunit 0 def - /hunit 0 def - enc (0) eq { - /bunit 3 def - /hunit 2 def - } if - enc (1) eq { - /bunit 0 def - /hunit 5 def - } if - enc (2) eq { - /bunit 3 def - /hunit 5 def - } if - enc (3) eq { - /bunit 0 def - /hunit 8 def - } if - bbs i bunit height mul 8 div put - bhs i hunit height mul 8 div put - } for - - % Return the arguments - << - /ren //renlinear - /bbs bbs - /bhs bhs - /sbs [bhs length 1 sub {1.44 1.872} repeat 1.44] - includetext { - /txt txt - } if - /opt options - >> - - dontdraw not //renlinear if - - end - -} bind def -/japanpost dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp japanpost 0.0 0 0 0 +%%BeginData: 43 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\:%52X=FD5Z2F- 8_M1G <3G Eas # uAW f6? 1G< 9WDKKE 0@ KFD5Z2F*j (NAmoLsAWf3 +'P!FGY<0B5(@ZmR N0oc8t P)X R (F_- _!H] ftD 5*C&O5*@^M H]ft&EckrV1 +OYEdI?J0)*g/N:D fBf4Df 0WZ 5*@^ MP#Q @=F D5Z2F*j'+I ?I/TFCf]=Ao +DR/+EV1>FCoH/FH S5=1G l0Je^k0etP F"#;YeNWV$k +1QDPk1Gb$n0JbDC"#2PbNWV!i16)Gl0eeUi0JP>C"#;PbNWUsj0oc>i0Je^k1G^hI!])Qk!\lK +:Ou"b#@<,jk@<-FL,qq&/1GgsI2`NfL5sdq,77Kd<8P2WL9hnJ\;,U=lL]`fVL]ikAP,4OpR:-ASu"!FE30;ASu"!L_GqEP'J]jBOt[hF*2>U!0T,kC5;kQ1G5?'9FcC*78I!KmJH1OYEWC5;nH'Sl +dQWI$:6P!5$bASu"!FE/L>L]`fVL]W_?ASu"!L^oS@P'J]jBOt[hF*2=B@q]F`CNFW8L^oRKOu +$W_B5)I/+DZcCP'DD<82"IdARfLsF_r72BOt[hF*2>U'9[*d'9YPBWKK&KDI[a0EejdQ'SljSC +m"g1DI[`1@q]F`CNFW8P"Us`ASu"!FE30=L_Y^JP&-9^ASu"!L_Q"FP'J]jBOt[hA8,[jFH-AE +Ou$fi@r-9uARfCb@r#drFCf]=HS8lBARfLdBkM.%+C\c"@q]:kF!+t+ARfLsF_up8P"_#pI?IQ +OG]Y'BL]NY>>9IEhARfLdBkM.%L_PXIP&,pUOo^G*;tnV$Cij65FEqe:AohO*+EV1>FCoH/F>#B4uCMCkr@[2Ni<5P"7\t061WA0/%?WDJX$)ARTU4@UaC$@UaC3@VBg*@VBg9F(025>9 +IBgF-:!g!KsF/MEeUJm#"$rS[*[,K8Mn';=%R2Bl7EsF_#'*AU& +D_?-CEcQG7F`MSBDD#CBBlJ#6A7]@eDImj"F)Q2A@qCgGOuY1:ATVm"@r#drB9KiQP'(hWFDtY +uCM@[!I?IP~> +% uk.co.terryburton.bwipp/japanpost 0.0 0 +%%EndData +%%EndResource % --END ENCODER japanpost-- % --BEGIN ENCODER msi-- +% --REQUIRES preamble raiseerror renlinear-- % --DESC: MSI Modified Plessey % --EXAM: 0123456789 % --EXOP: includetext includecheck includecheckintext % --RNDR: renlinear -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renlinear dup /uk.co.terryburton.bwipp findresource put -begin -/msi { - - 20 dict begin % Confine variables to local scope - - /options exch def % We are given an option string - /barcode exch def % We are given a barcode string - - /dontdraw false def - /includecheck false def % Enable/disable checkdigit - /includetext false def % Enable/disable text - /includecheckintext false def - /checktype (mod10) def - /badmod11 false def - /textfont /Courier def - /textsize 10 def - /textyoffset -7 def - /height 1 def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - /textfont textfont cvlit def - /textsize textsize cvr def - /textyoffset textyoffset cvr def - /height height cvr def - - % Create an array containing the character mappings - /encs - [ (12121212) (12121221) (12122112) (12122121) (12211212) - (12211221) (12212112) (12212121) (21121212) (21121221) - (21) (121) - ] def - - % Create a string of the available characters - /barchars (0123456789) def - - /barlen barcode length def % Length of the code - /txtlen barlen def - - /mod10 { - /code exch def - 0 0 code {48 sub exch 10 mul add exch} forall pop 2 mul - 0 {1 index 10 mod add exch 10 idiv dup 0 eq {pop exit} if exch} loop - 0 0 code {48 sub add exch} forall exch pop add - 10 mod 10 exch sub 10 mod - code length 1 add string dup 0 code putinterval dup code length 4 -1 roll 48 add put - } bind def - - /mod11 { - /code exch def - code length 1 sub code {48 sub exch dup 1 sub exch 6 mod 2 add exch} forall pop - 0 code length {3 1 roll mul add} repeat - 11 mod 11 exch sub 11 mod - dup 10 eq badmod11 and { - pop code length 2 add string dup 0 code putinterval dup code length (10) putinterval - } { - code length 1 add string dup 0 code putinterval dup code length 4 -1 roll 48 add put - } ifelse - } bind def - - /ncrmod11 { - /code exch def - code length 1 sub code {48 sub exch dup 1 sub exch 8 mod 2 add exch} forall pop - 0 code length {3 1 roll mul add} repeat - 11 mod 11 exch sub 11 mod - dup 10 eq badmod11 and { - pop code length 2 add string dup 0 code putinterval dup code length (10) putinterval - } { - code length 1 add string dup 0 code putinterval dup code length 4 -1 roll 48 add put - } ifelse - } bind def - - % Calculate checksum - includecheck { - checktype (mod10) eq {barcode mod10} if - checktype (mod1010) eq {barcode mod10 mod10} if - checktype (mod11) eq {barcode mod11} if - checktype (ncrmod11) eq {barcode ncrmod11} if - checktype (mod1110) eq {barcode mod11 mod10} if - checktype (ncrmod1110) eq {barcode ncrmod11 mod10} if - /barcode exch def - /barlen barcode length def - includecheckintext {/txtlen barlen def} if - } if - - /sbs barlen 8 mul 5 add string def - /txt barlen array def - - % Put start character - sbs 0 encs 10 get putinterval - - 0 1 barlen 1 sub { - /i exch def - % Lookup the encoding for the each barcode character - barcode i 1 getinterval barchars exch search - pop % Discard true leaving pre - length /indx exch def % indx is the length of pre - pop pop % Discard seek and post - /enc encs indx get def % Get the indxth encoding - sbs i 8 mul 2 add enc putinterval % Put encoded digit into sbs - txt i [barcode i 1 getinterval i 12 mul 3 add textyoffset textfont textsize] put - } for - - % Put the end character - sbs barlen 8 mul 2 add encs 11 get putinterval - - % Return the arguments - << - /ren //renlinear - /sbs [sbs {48 sub} forall] - /bhs [sbs length 1 add 2 idiv {height} repeat] - /bbs [sbs length 1 add 2 idiv {0} repeat] - includetext { - /txt txt 0 txtlen getinterval - } if - /opt options - >> - - dontdraw not //renlinear if - - end - -} bind def -/msi dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp msi 0.0 0 0 0 +%%BeginData: 43 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\0Tn4F@U WeaD e (R W+ D,% uF( LLj0 6CcMF +CoH/FHOV,1G O u"b 5A U&KFD5Z2 F*j(NAmoLsA +Wf3'P!FGY<0B5(@ ZmRN0o c8t P)XR (F_- _!H ]ftD5*C&O5 *@^MH]ft&Ec +krV1OYEdI?J0)*g /N:Df Bf4D f0WZ5 *@^M P#Q @=FD5Z2F*j '+I?I/TFCf] +=AoDR/+EV1>FCoH /FHS5 =1G0mbQ +`De*FB5*@^3De*FB@Yb&JWFKjWAUB4eP,XU.OuS6uP,XU.L^'#WL]W_?P!4;W8Wn4P!+TqXAWg +MLL]`G6P)#3:Oo]uoK89nuC5<7\5*Dn$$^,7f3/@p)4^qi1D/Wr>0p2ZdP'(8QA7^p5L]W_?P, +4=$L]Cq'A7^pLOuQriA7^p5NWLphP'MJ&@rGmhP%'4JOo^`BOuS6t@rGmhP'N3M@rGmhP%'4MM +#WWnLbOtmP'DD<P,4=$L]Cq'A7^pLOuQriA7^p5L]iP6P)"iIOo^_jI?ITYOq*X2Bl7EsF_#&nBOt[hHQ +Zg3ARfLtH#R>T"`80g0eebRHX^E(@rGmh+Dl%-0ee$=<+BTQ@r$13E+P%7D/Wr>0JP8E4aUXHE +as#uAKYi.A2,b\D/Wr>0R]*`@q]F`CNOi@AW?q2De(RWP!+/$@<,jrA7Zm#De(RWI?IQ>BOt[h +FEqh:NX0N4Ec#`*0enhSHX^E(@rGmh+Dt\0D/Wr>0n#3a@q]F`CNOi@AW@"4De(RW0eebRHX^E +(@rGmh+Dl%-0ejefDe(RVI?IQ>BOt[hFEqh:NXBZ6Ec#`*0ekC:P!+/$@<,jrA7Zm$@rcF)A2, +e]D/Wr>0R]*`04J@1@rGmhP!5$b04J@1Ch7K,@UX:eDe*FB@ZiN]DI[L*A7]7aARfLiDKKH7FF +,Z_G][b5DBNCsEbo<)Ou%NL<.0p/06:TD+C\c"Ch7L?#a0"["d/nLV33VfFEhmM@UX:nAT!Y;O +u%/gF,0g-DI[aD$Be&FH&)HV!FfJXCh7L?!KsF/056S5Ou$QUEas#uAKY]C!Kp,c@<,jk@<-FP +5*CngFcp2eBl7I+P!5$bP')q104f$2+D#G#F!,17A9a81Ou%/gF!,1Q#a0"[!g3RqDI\iTFEhm +MBcpV&@UX:eDe*E%BnueQ9PK:kP&,pVOo]Z9G]\4LAnH*qF5?'9 +G\P"9Y'F!+q#Ebo<)L^9/[L]W_?ASu"!L^TA=P'K/P061WA0/%?WDJX$)ARTU4F(025>9IurF* +i]sP,Wkm8R3uYBQG;#+EM"5P%'4JOo^@?P#?X?ASGdjFFB=)>q]YrF!+[0F(03R@Yb&J!Jgf?; +L=3"I?K4g+DG_'Cis9"FCf]=HS9JcF +% uk.co.terryburton.bwipp/msi 0.0 0 +%%EndData +%%EndResource % --END ENCODER msi-- % --BEGIN ENCODER plessey-- +% --REQUIRES preamble raiseerror renlinear-- % --DESC: Plessey UK % --EXAM: 01234ABCD % --EXOP: includetext includecheckintext % --RNDR: renlinear -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renlinear dup /uk.co.terryburton.bwipp findresource put -begin -/plessey { - - 20 dict begin % Confine variables to local scope - - /options exch def % We are given an option string - /barcode exch def % We are given a barcode string - - /dontdraw false def - /includetext false def % Enable/disable text - /includecheckintext false def - /unidirectional false def - /textfont /Courier def - /textsize 10 def - /textyoffset -7 def - /height 1 def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - /textfont textfont cvlit def - /textsize textsize cvr def - /textyoffset textyoffset cvr def - /height height cvr def - - % Create an array containing the character mappings - /encs - [ (14141414) (32141414) (14321414) (32321414) - (14143214) (32143214) (14323214) (32323214) - (14141432) (32141432) (14321432) (32321432) - (14143232) (32143232) (14323232) (32323232) - (32321432) (541412323) (323) - ] def - - % Create a string of the available characters - /barchars (0123456789ABCDEF) def - - /barlen barcode length def % Length of the code - unidirectional { - /sbs barlen 8 mul 27 add string def - } { - /sbs barlen 8 mul 33 add string def - } ifelse - /txt barlen 2 add array def - /checkbits barlen 4 mul 8 add array def - checkbits barlen 4 mul [ 0 0 0 0 0 0 0 0 ] putinterval - - % Put start character - sbs 0 encs 16 get putinterval - - 0 1 barlen 1 sub { - /i exch def - % Lookup the encoding for the each barcode character - barcode i 1 getinterval barchars exch search - pop % Discard true leaving pre - length /indx exch def % indx is the length of pre - pop pop % Discard seek and post - /enc encs indx get def % Get the indxth encoding - sbs i 8 mul 8 add enc putinterval % Put encoded digit into sbs - txt i [barcode i 1 getinterval i 20 mul 20 add textyoffset textfont textsize] put - checkbits i 4 mul [ - indx 1 and - indx -1 bitshift 1 and - indx -2 bitshift 1 and - indx -3 bitshift - ] putinterval - } for - - % Checksum is last 8 bits of a CRC using a salt - /checksalt [ 1 1 1 1 0 1 0 0 1 ] def - 0 1 barlen 4 mul 1 sub { - /i exch def - checkbits i get 1 eq { - 0 1 8 { - /j exch def - checkbits i j add checkbits i j add get checksalt j get xor put - } for - } if - } for - - % Calculate the value of the checksum digits - /checkval 0 def - 0 1 7 { - /i exch def - /checkval checkval 2 i exp cvi checkbits barlen 4 mul i add get mul add def - } for - - % Put the checksum characters - /checksum1 checkval 15 and def - /checksum2 checkval -4 bitshift def - sbs barlen 8 mul 8 add encs checksum1 get putinterval - sbs barlen 8 mul 16 add encs checksum2 get putinterval - includecheckintext { - txt barlen [barchars checksum1 1 getinterval barlen 20 mul 20 add textyoffset textfont textsize] put - txt barlen 1 add [barchars checksum2 1 getinterval barlen 1 add 20 mul 20 add textyoffset textfont textsize] put - } { - txt barlen [( ) barlen 20 mul 20 add textyoffset textfont textsize] put - txt barlen 1 add [( ) barlen 1 add 20 mul 20 add textyoffset textfont textsize] put - } ifelse - - % Put end character - unidirectional { - sbs barlen 8 mul 24 add encs 18 get putinterval - } { - sbs barlen 8 mul 24 add encs 17 get putinterval - } ifelse - - % Return the arguments - << - /ren //renlinear - /sbs [sbs {48 sub} forall] - /bhs [sbs length 1 add 2 idiv {height} repeat] - /bbs [sbs length 1 add 2 idiv {0} repeat] - includetext { - /txt txt - } if - /opt options - >> - - dontdraw not //renlinear if - - end - -} bind def -/plessey dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp plessey 0.0 0 0 0 +%%BeginData: 51 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\O u"b5AU &KFD 5Z2 F*j(NAmoLs AWf3'P!FGY< +0B5(@ZmRN0oc8tP )XR(F_ -_! H]ft D5*C &O5 *@^MH]ft&E ckrV1OYEdI? +J0)*g/N:DfBf4Df 0WZ5* @^MP #Q@=F D5Z2 F*j '+I?I/TFCf ]=AoDR/+EV1 +>FCoH/FHS5=1G73G&Q061K8F(Jp'Ec5u]5CJ\oI?I,S@UX:nASrW"@<,jrA +7^p5G%#3$A79Rk@q]F`CO:j=P,Wkm<0B$j@q]F`CLV""F!+q#Ebo<)L]ilWL^9.EOpR:-@q]F` +CLV""F!+q#Ebo<)L]ilW>DN98!/LW2!/LW2!/LW2!*tb5L]E53@UX:nAT!;)P,Wd]Bp(ZC1G9IWtA9`n2Op#K:A9` +q1Oq3?LOp#K:A9`q0Oq3?LOp#K:A9`q/Oq1i]H$tiH04S[,@r$-oCige(L]N;4L]N;4L]E53L] +E52L]LeE1Pc$e!FfJXCh7L?"HmSW!KsF/056S5Ou$T]ARfLbBlnD=Bp),F!KoTmL]E53L^8>\C +6CcD1Lk*0@r#OfFE8R=+DR&?@q]F`CLV""F!,0>C6AU\94MXH@r$-oCige7P"UtSP'DD<8:?Y# +I?I,S@q]F`CNa-&L]ESoL]E53L^/8[Bp(ZC1G<6OARfM!@;I&rBOt[hG%#3C!bicgG]8fs@q]F +`CLV""F!+q#Ebo<)L]ilWBp&L[99O+S!Ko6eP"769BOt[hF*2=S+Cf(r@r$6rCkrUb"HkPo@q] +F`CNFW81*C(?ARfM!@;LbtOq3^3G%#3$A79Rk@q]F`CO715@<,jrA7Zlm@<-0qDN[Y%@<,jk@< +-E3@q]F`CNFW80p51mD.6po@rGmh+C\c"Ch7L?!KmJH94D=M@q]:kF!+t+ARfLsF_rms99O.TE +dKHKGA2#8/oYW*ASu"!L_,_BP'Mi`L]LsnEbo<)L]N[99M)P@WNZ+L^9/[L^9.EASu"!+DG_(G`k^_H$" +:Q+DDs&+C\c"@rGmh+DHW4P"]SG'U!9g'TrK=AU&FCf]=F(or3+C +1.TI?I-B@WNZ$@<-0qDMSR]Ckr@[!G-.YF!+t+ARfLsF_rjr99ORA@WNZ$@<-0qDMSR]CkrXc! +G-.YF!+t+ARfLsF_rms99OR7DI[L*A7]7aARfLiDKKH7FF,-PG]Y';@<-0qDBN.+@UX:eBOPq& ++Cf(r@r$..D)$hIP"]=nEbo<)L_Q"gL_Q!QFCf]=H#I;,F(KG9FCf]=AoDR/+EV1>FE;/BAKY9 +AG]\1P+C\c"Ch7L?!KmIf+C\c"@q]:kF!+t+ARfLsF_rmi!Kp,c@<-0qDMS=V!JhGQCkrdg!H_ +mtFEqe:AohO*+EV1>FCoH/FFCoH/F>E/_,@UX:nA +T!;)Oo^@QP&,pgOo]Z9G]\4LAnH*qF5?'9G\P#ZR4F!+q#Ebo<) +L^9/[L_u9UASu"!+E_R9A8-'q@ruF'DII@.L_>,_L_5&uq]Z#F!+[0F(03R@Yb&J!Jgf?;L<(gBkM+$I?K4g04JC3+Bot0@WR +]AL]NY>L]W`;H\_ZMP(R$_Bl7EsF_#'*AU& +% uk.co.terryburton.bwipp/plessey 0.0 0 +%%EndData +%%EndResource % --END ENCODER plessey-- % --BEGIN ENCODER telepen-- +% --REQUIRES preamble raiseerror renlinear-- % --DESC: Telepen % --EXAM: 123456 % --EXOP: numeric includetext % --RNDR: renlinear -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renlinear dup /uk.co.terryburton.bwipp findresource put -begin -/telepen { - - 20 dict begin % Confine variables to local scope - - /options exch def % We are given an option string - /barcode exch def % We are given a barcode string - - /numeric false def - /dontdraw false def - /includetext false def % Enable/disable text - /textfont /Courier def - /textsize 10 def - /textyoffset -7 def - /height 1 def - /parse false def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - /textfont textfont cvlit def - /textsize textsize cvr def - /textyoffset textyoffset cvr def - /height height cvr def - - % Parse ordinals of the form ^NNN to ASCII - parse { - /msg barcode length string def - /j 0 def - barcode - { % loop - (^) search { - dup msg exch j exch putinterval - length j add 1 add /j exch def - pop - dup 0 3 getinterval cvi msg exch j 1 sub exch put - dup length 3 sub 3 exch getinterval - } { - dup msg exch j exch putinterval - length j add /j exch def - /barcode msg 0 j getinterval def - exit - } ifelse - } loop - } if - - % Create an array containing the character mappings - /encs - [ (31313131) (1131313111) (33313111) (1111313131) - (3111313111) (11333131) (13133131) (111111313111) - (31333111) (1131113131) (33113131) (1111333111) - (3111113131) (1113133111) (1311133111) (111111113131) - (3131113111) (11313331) (333331) (111131113111) - (31113331) (1133113111) (1313113111) (1111113331) - (31131331) (113111113111) (3311113111) (1111131331) - (311111113111) (1113111331) (1311111331) (11111111113111) - (31313311) (1131311131) (33311131) (1111313311) - (3111311131) (11333311) (13133311) (111111311131) - (31331131) (1131113311) (33113311) (1111331131) - (3111113311) (1113131131) (1311131131) (111111113311) - (3131111131) (1131131311) (33131311) (111131111131) - (3111131311) (1133111131) (1313111131) (111111131311) - (3113111311) (113111111131) (3311111131) (111113111311) - (311111111131) (111311111311) (131111111311) (11111111111131) - (3131311111) (11313133) (333133) (111131311111) - (31113133) (1133311111) (1313311111) (1111113133) - (313333) (113111311111) (3311311111) (11113333) - (311111311111) (11131333) (13111333) (11111111311111) - (31311133) (1131331111) (33331111) (1111311133) - (3111331111) (11331133) (13131133) (111111331111) - (3113131111) (1131111133) (33111133) (111113131111) - (3111111133) (111311131111) (131111131111) (111111111133) - (31311313) (113131111111) (3331111111) (1111311313) - (311131111111) (11331313) (13131313) (11111131111111) - (3133111111) (1131111313) (33111313) (111133111111) - (3111111313) (111313111111) (131113111111) (111111111313) - (313111111111) (1131131113) (33131113) (11113111111111) - (3111131113) (113311111111) (131311111111) (111111131113) - (3113111113) (11311111111111) (331111111111) (111113111113) - (31111111111111) (111311111113) (131111111113) (1111111111111111) - ] def - - /barlen barcode length def % Length of the code - /sbs barlen 16 mul 48 add string def - /txt barlen array def - - % Put the start character ASCII 95 - /enc encs 95 get def - sbs 0 enc putinterval - /l enc length def - - /checksum 0 def - /i 0 def /j 0 def - { % loop - i barlen eq {exit} if - numeric { % numeric mode: 00-99 & 0X-9X - barcode i get 16 gt { - /np barcode i 2 getinterval def - np 1 1 getinterval (X) eq { % X in even position amongst digits - /indx np 0 1 getinterval cvi 17 add def - } { - /indx np cvi 27 add def - } ifelse - txt j [np j 16 mul 16 add textyoffset textfont textsize] put - /i i 2 add def - } { - /indx barcode i get def - txt j [( ) j 16 mul 16 add textyoffset textfont textsize] put - /i i 1 add def - } ifelse - } { % ASCII mode - /indx barcode i get def - indx 32 ge indx 126 le and { - txt j [barcode i 1 getinterval j 16 mul 16 add textyoffset textfont textsize] put - } { - txt j [( ) j 16 mul 16 add textyoffset textfont textsize] put - } ifelse - /i i 1 add def - } ifelse - /checksum checksum indx add def - /enc encs indx get def - sbs l enc putinterval % Put encoded digit into sbs - /l l enc length add def - /j j 1 add def - } loop - - % Put the checksum character - /checksum 127 checksum 127 mod sub 127 mod def - /enc encs checksum get def - sbs l enc putinterval - /l l enc length add def - - % Put the end character ASCII 122 - /enc encs 122 get def - sbs l enc putinterval - /l l enc length add def - - % Shrink sbs and txt to fit exactly - /sbs sbs 0 l getinterval def - /txt txt 0 j getinterval def - - % Return the arguments - << - /ren //renlinear - /sbs [sbs {48 sub} forall] - /bhs [sbs length 1 add 2 idiv {height} repeat] - /bbs [sbs length 1 add 2 idiv {0} repeat] - includetext { - /txt txt - } if - /opt options - >> - - dontdraw not //renlinear if - - end - -} bind def -/telepen dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp telepen 0.0 0 0 0 +%%BeginData: 63 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\ Ou "b 5AU &X 4 aVt cO u8C3 DfB f4Df0WCP,i 2'Cia0N4aW> +WI?IQm30Ia6V33Q n!BlU* FE2 M 8P!+ /T/W r;\ FcnqO1OXV5 /Tc#UAWeitP +#ZpnAWe*t3A5;iF D5Z2F- 8_M 1OYE cDfB f4D f0WCOu%NL8 M>0sG][P9DK +I"CAU& FE; /BAWe^01G< i]G]\4LAnH* +qF>#B4uCM09 S,1@<-F#HS9 +5WB-:YlEas#uAWg McV33Vf C5;kQ1 Lad5@ rGm hH]A,5P)Xg O3,N_LP!3WD +5*C2S@VV&,L]NY>05?Y6Ou&8DOuS6tL]`f6Ot:HkB9GGnL]N[L]`f(P"^: +NOuR<"B9GGnP!5%SP%&0h!AA2N5*@]T@UX:eDe*E%D0'?G!,@ZjOu&7dI?ITYP%B')<%hg#@ri +bsNX.Eq1GL[?1GOms0ekI=1GL[?0en[o1G^gA1GLU=NX@Kq0ekI=1GL[?NX@Qs0ekI=1GLU=NX +.?o1G^gA1GOmq0f(O?1GL[?NXRWs0ekC;1GL[?0en[o1GL[A1GLU=NX@Kq1GLU=1GL[?NX.Es0 +ekI=1GOms0ekC;1G^gA0en[q1GLU=0ekI=1GOms0ekC=0f(U?0en[q0f(O=0f(U?0en[s0ekC; +0ekC;1GL[?NX@Qs1GLU=1GLU=NX.?o1GL[A1GOmo1G^gC1GOmu0ekC;1GLU=1GLU=NX.Eq0ekI +?1GOms0ekI?0ekI=0en[q0f(O?0ekI=0en[q0ekC;0ekI?1GOmq1GLU?0f(U?NXRWs1GLU=0ek +I=0en[q1G^a?0ekI=0en[q0ekC;0f(O?1GOmu1GLU=0ekC;1GLU=NX@Kq0f(O=0f(U?NX@Ks0e +kC;0f(U?NXdcu0ekC;0ekC;1GLU=NX.Eq1GL[A0en[q0ekI=1GLU=1GOmq1G^gA0ekI=NX@Kq0 +ekI=1G^a?NX@Qs0ekI=0ekI=NX.?o1G^gC0en[o0f(O?1G^a?NXRWs0ekC;1GLU=1GOmq1GL[A +0ekI=NX@Kq1GLU=1G^a?NX.Es0ekI?0en[q0ekC;1G^a?1GOms1GLU=0ekI?0en[q0ekC=0f(O +=1GOms0f(O=0f(O=1GOmu0ekC;0ekC;1G^a?NX@Qs1GLU=0ekI=NX@Kq1GLU?0f(O=NX.Es0f( +O?0en[s0ekC;1GLU=0ekI=NX@Qs0ekC=0f(O=NX@Kq1G^a?0ekI=NX@Ks0f(O=0ekI=NXRWs0e +kC;0f(O?0en[q1GLU?0ekC=0en[s0ekI=0ekC;0ekI=NX@Qu0ekC;0ekI=NXRWs0ekC=0ekC=0 +en[s1GLU=0ekC;0ekI=NXRWs0f(O=0ekC=0en[s0f(O=0ekC;0f(O=NXdcu0ekC;0ekC;0ekI= +NX@Qs1GL[?0ekC;NX.?o1GL[?1Gb$q1G^gA1Gb%"0ekC;1GL[?0ekC;NX.Eq0ekI=1Gb$u0ekI +?1GLU=0en[q0f(O?1GLU=0en[q0ekC;0ekI=1Gb$q1GL[A1Gb%"0ekI=0ekI=0ekC;NX@Qu0ek +I=0ekC;NX.?o0ekI?1Gb%"1GLU=0ekI=0ekC;NX.?o0f(O?1Gb$s0f(O=0f(UANXdcu0ekC;0e +kI=0ekC;NX.Eq1GLU=1Gb$u0ekI=1G^a?0en[o1G^gC0ekC;NX@Kq0ekI=0ekI?NX@Qs0ekI?0 +ekC;NX.?o1G^a?1Gb$s0f(O?0ekI?NXRWs0ekC;1G^a?0en[q1GLU?0f(O=0en[q0ekI=0ekC; +1Gb$s1G^a?0ekI?NXRWs0ekC=0f(O=0en[q1GLU=0ekC;1Gb%"0ekC=0ekC=0ekC;NXRWu0ekC +;0f(O=0en[s0ekC;0ekC;0ekI?NX.Eq1GLU?0f+gu0ekI=1GLU=0ekC;NX@Qu1GLU=0ekC;NX@ +Kq0ekI=0f(O?NXR]u0ekI=0ekC;0en[o0ekI?0f(O?NX.?q0f(O?0f+h"0ekC;0ekI=0ekC;0e +n[q1GL[A0ekC;0en[q0ekI=0ekC=0f+gq1G^a?0f(O?NXRWs0ekI?0ekC;0en[q1GLU=0ekC=0 +f+gu0ekC=0f(O=0ekC;NXRWu0ekC=0ekC;0en[s0ekC;0ekC;0f(O?NXR]u1GLU=0ekC;0en[q +0ekI=0f(O=0f+gq1G^aA0ekC=NXdcu0ekI=0ekC;0ekC;NX@Qs0ekC=0ekC=NXRWs1G^a?0ekC +;0en[s0f(O?0ekC;0ekC;NXRWs0ekC;0f(O=0f+gs1GLU?0ekC;0f+h"0ekI=0ekC;0ekC;0en +[s1G^a?0ekC;0ekC;NXRWs0ekC=0ekC;0f+h"1GLU=0ekC;0ekC;0en[s0ekC=0ekC;0ekC=NX +RWu0ekC;0ekC;0f+h$0ekC;0ekC;0ekC;0ekC;?'6us@UX:nASrW"@<,jrA7^p5Ou"b4@WNZ$@ +<-0qDMSjeCksd.!Ks:B1G*ASu"@GqWtV +ASu"@@ZiN#@q]F`CNFW8L]ESo0564BOu"b+L]ESoHYFU3@<-0qDN[/0P!FGY<,QhqATDKpHQZd ++Eas#uAKY]M98F.B:jXj5E$/UuEas#uAKY]C!g66?1N%/f!Jgc>9TB-UP!+.FBl7I++Du.S!/L +Z=9Tgr_&X!0X1OXU'Bl7I++Du.]/;P7.!Ko6eP#ZUKF9Ig&+DQ]DP&,pcOo]Z9G]\4LAn +H*qF5?'9FcBcq,G!g3SI1OXU'Bl7I++C\c"@rGmh+DI!3Ou%3)F +E/_,C5FCoH/FFCoH/FFCf]=F(or3+C1.TI?IS`Bcq,G!KmJH1OYEd04 +S[,@r$..D'3>%ARfLsF_r78DIe!T!Ko5lASu!#ASu"!+DG_(G`k^_1NR#H+D`03DI\iT05MbI+ +D#G#P%'RTOu"b++DQ]5Oo^_%I?J.p@q]F`CNFW8LjroJARfLsF_uqaP%p/ZLjtS&Ou"b&DIXf# +DI[`1@q]F`CNFW8P"UroF(025C`m;,A!2*jC`mO:ASu"@@ZgbT1G<1_dDD* +Y`ASu9IurF-:!g!KmJ>!g6H.BOtmjBQSZcK3 +^->@WNYr+EM"5P%'4JOo^@?P#?X_!.C#_>p*j!@r-9uATVL.FF,Z_G]Y'MG]\@s<%i0/FD_?-C +EcQG7F`MSBDD#CBBlJ#6A7]@eDImj"F)Q2A@qCgGOuY1:ATVm"@r#drB9KiQP'(hWFDtYuCM@[ +!I?IP~> +% uk.co.terryburton.bwipp/telepen 0.0 0 +%%EndData +%%EndResource % --END ENCODER telepen-- % --BEGIN ENCODER posicode-- +% --REQUIRES preamble raiseerror renlinear-- % --DESC: PosiCode % --EXAM: ABC123 % --EXOP: version=b inkspread=-0.5 parsefnc includetext % --RNDR: renlinear -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renlinear dup /uk.co.terryburton.bwipp findresource put -begin -/posicode { - - 20 dict begin % Confine variables to local scope - - /options exch def % We are given an option string - /barcode exch def % We are given a barcode string - - /dontdraw false def - /includetext false def % Enable/disable text - /textfont /Courier def - /textsize 10 def - /textxoffset 0 def - /textyoffset -7 def - /height 1 def - /encoding (auto) def - /version (a) def - /checkoffset 0 def - /raw false def - /parse false def - /parsefnc false def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - /textfont textfont cvlit def - /textsize textsize cvr def - /textxoffset textxoffset cvr def - /textyoffset textyoffset cvr def - /encoding encoding cvlit def - /version version cvlit def - /checkoffset checkoffset cvi def - /height height cvr def - - % Parse ordinals of the form ^NNN to ASCII - parse { - /msg barcode length string def - /j 0 def - barcode - { % loop - (^) search { - dup msg exch j exch putinterval - length j add 1 add /j exch def - pop - dup 0 3 getinterval cvi msg exch j 1 sub exch put - dup length 3 sub 3 exch getinterval - } { - dup msg exch j exch putinterval - length j add /j exch def - /barcode msg 0 j getinterval def - exit - } ifelse - } loop - } if - - /barlen barcode length def - - % Special function characters - /la0 -1 def /la1 -2 def /la2 -3 def - /sf0 -4 def /sf1 -5 def /sf2 -6 def - /fn1 -7 def /fn2 -8 def /fn3 -9 def /fn4 -10 def - - % Character maps for each state - << - /normal - [ - % 0 1 2 0 1 2 0 1 2 - [ (0) (^) (') ] [ (1) (;) 27 ] [ (2) (<) 28 ] % 0-2 - [ (3) (=) 29 ] [ (4) (>) 30 ] [ (5) (?) 31 ] % 3-5 - [ (6) (@) (!) ] [ (7) ([) (") ] [ (8) 92 (#) ] % 6-8 - [ (9) (]) (&) ] [ (A) (a) 1 ] [ (B) (b) 2 ] % 9-11 - [ (C) (c) 3 ] [ (D) (d) 4 ] [ (E) (e) 5 ] % 12-14 - [ (F) (f) 6 ] [ (G) (g) 7 ] [ (H) (h) 8 ] % 15-17 - [ (I) (i) 9 ] [ (J) (j) 10 ] [ (K) (k) 11 ] % 18-20 - [ (L) (l) 12 ] [ (M) (m) 13 ] [ (N) (n) 14 ] % 21-23 - [ (O) (o) 15 ] [ (P) (p) 16 ] [ (Q) (q) 17 ] % 24-26 - [ (R) (r) 18 ] [ (S) (s) 19 ] [ (T) (t) 20 ] % 27-29 - [ (U) (u) 21 ] [ (V) (v) 22 ] [ (W) (w) 23 ] % 30-32 - [ (X) (x) 24 ] [ (Y) (y) 25 ] [ (Z) (z) 26 ] % 33-35 - [ (-) (_) 40 ] [ (.) (`) 41 ] [ ( ) 127 0 ] % 36-38 - [ ($) ({) (*) ] [ (/) (|) (,) ] [ (+) (}) (:) ] % 39-41 - [ (%) (~) fn1 ] [ la1 la0 fn2 ] [ sf1 sf0 fn3 ] % 42-44 - [ sf2 sf2 fn4 ] % 45 - ] - /limited - [ - [ (0) -98 -98 ] [ (1) -98 -98 ] [ (2) -98 -98 ] % 0-2 - [ (3) -98 -98 ] [ (4) -98 -98 ] [ (5) -98 -98 ] % 3-5 - [ (6) -98 -98 ] [ (7) -98 -98 ] [ (8) -98 -98 ] % 6-8 - [ (9) -98 -98 ] [ (A) -98 -98 ] [ (B) -98 -98 ] % 9-11 - [ (C) -98 -98 ] [ (D) -98 -98 ] [ (E) -98 -98 ] % 12-14 - [ (F) -98 -98 ] [ (G) -98 -98 ] [ (H) -98 -98 ] % 15-17 - [ (I) -98 -98 ] [ (J) -98 -98 ] [ (K) -98 -98 ] % 18-20 - [ (L) -98 -98 ] [ (M) -98 -98 ] [ (N) -98 -98 ] % 21-23 - [ (O) -98 -98 ] [ (P) -98 -98 ] [ (Q) -98 -98 ] % 24-26 - [ (R) -98 -98 ] [ (S) -98 -98 ] [ (T) -98 -98 ] % 27-29 - [ (U) -98 -98 ] [ (V) -98 -98 ] [ (W) -98 -98 ] % 30-32 - [ (X) -98 -98 ] [ (Y) -98 -98 ] [ (Z) -98 -98 ] % 33-35 - [ (-) -98 -98 ] [ (.) -98 -98 ] % 36-37 - ] - >> - version (a) eq version (b) eq or {/normal} {/limited} ifelse get - /charmaps exch def - - % Invert charmaps to give character to value maps for each state - /charvals [ - charmaps length dict charmaps length dict charmaps length dict - ] def - 0 1 charmaps length 1 sub { - /i exch def - /encs charmaps i get def - 0 1 2 { - /j exch def - encs j get dup type /stringtype eq {0 get} if % convert string to ASCII if required - charvals j get exch i put - } for - } for - /set0 charvals 0 get def - /set1 charvals 1 get def - /set2 charvals 2 get def - - raw {/encoding (raw) def} if - - encoding (raw) eq { - /cws barlen array def - /i 0 def /j 0 def - { % loop - i barlen eq {exit} if - /cw barcode i 1 add 3 getinterval cvi def - cws j cw put - /i i 4 add def - /j j 1 add def - } loop - /cws cws 0 j getinterval def - /text () def - } if - - encoding (auto) eq { - - /fncvals << - (FNC1) fn1 - (FNC2) fn2 - (FNC3) fn3 - (FNC4) fn4 - >> def - - % Convert input into bytes accounting for FNC characters - /msg barlen array def - /text barlen string def - /i 0 def /j 0 def { - i barlen eq {exit} if - /char barcode i get def - text j char put - parsefnc char 94 eq and i barlen 4 sub lt and { - barcode i 1 add get 94 ne { - /char fncvals barcode i 1 add 4 getinterval get def - text j ( ) putinterval - /i i 4 add def - } { - /i i 1 add def - } ifelse - } if - msg j char put - /i i 1 add def - /j j 1 add def - } loop - /msg msg 0 j getinterval def - /msglen msg length def - /text text 0 j getinterval def - - % Convert the input message to codewords - /enc { - exch get cws exch j exch put - /j j 1 add def - } bind def - - /cws barcode length 2 mul array def - /i 0 def /j 0 def /cset (set0) def - { - i msglen eq {exit} if - - { % common exit - - % Read next two characters - /char1 msg i get def - /char2 i 1 add msglen lt {msg i 1 add get} {-99} ifelse def - - % If current mode is sufficient then directly encode - cset load char1 known { - char1 cset load enc - /i i 1 add def - exit - } if - - % If char1 is in set2 then shift encode - set2 char1 known { - sf2 cset load enc - char1 set2 enc - /i i 1 add def - exit - } if - - % If char2 is also not in this set then latch else shift encode - cset load char2 known not { - cset (set0) eq { - la1 cset load enc - /cset (set1) def - } { - la0 cset load enc - /cset (set0) def - } ifelse - exit - } { - cset (set0) eq { - sf1 cset load enc - char1 set1 enc - } { - sf0 cset load enc - char1 set0 enc - } ifelse - /i i 1 add def - exit - } ifelse - - exit - } loop - - } loop - /cws cws 0 j getinterval def - } if % auto encoding - - % Create an array containing the character mappings - << % ";"=11, "<"=12 - /a - [ (141112) (131212) (121312) (111412) (131113) - (121213) (111313) (121114) (111214) (111115) - (181111) (171211) (161311) (151411) (141511) - (131611) (121711) (111811) (171112) (161212) - (151312) (141412) (131512) (121612) (111712) - (161113) (151213) (141313) (131413) (121513) - (111613) (151114) (141214) (131314) (121414) - (111514) (141115) (131215) (121315) (111415) - (131116) (121216) (111316) (121117) (111217) - (111118) (1<111112) (111111111;1) - ] - /b - [ (151213) (141313) (131413) (121513) (141214) - (131314) (121414) (131215) (121315) (121216) - (191212) (181312) (171412) (161512) (151612) - (141712) (131812) (121912) (181213) (171313) - (161413) (151513) (141613) (131713) (121813) - (171214) (161314) (151414) (141514) (131614) - (121714) (161215) (151315) (141415) (131515) - (121615) (151216) (141316) (131416) (121516) - (141217) (131317) (121417) (131218) (121318) - (121219) (1<121312) (121212121<1) - ] - /limiteda - [ (111411) (111312) (111213) (111114) (121311) - (121212) (121113) (141111) (131211) (131112) - (171111) (161211) (151311) (141411) (131511) - (121611) (111711) (161112) (151212) (141312) - (131412) (121512) (111612) (151113) (141213) - (131313) (121413) (111513) (141114) (131214) - (121314) (111414) (131115) (121215) (111315) - (121116) (111216) (111117) (151111) (1) - ] - /limitedb - [ (121512) (121413) (121314) (121215) (131412) - (131313) (131214) (151212) (141312) (141213) - (181212) (171312) (161412) (151512) (141612) - (131712) (121812) (171213) (161313) (151413) - (141513) (131613) (121713) (161214) (151314) - (141414) (131514) (121614) (151215) (141315) - (131415) (121515) (141216) (131316) (121416) - (131217) (121317) (121218) (141212) (1) - ] - >> - version get /encs exch def - - /c2w [ - [ 495 330 210 126 70 35 15 5 ] - [ 165 120 84 56 35 20 10 4 ] - [ 45 36 28 21 15 10 6 3 ] - [ 9 8 7 6 5 4 3 2 ] - [ 1 1 1 1 1 1 1 1 ] - ] def - /v 0 def - cws { - /cw exch def - 6 { - cw v xor 1 and 0 ne { - /v v 7682 xor def - } if - /v v -1 bitshift def - /cw cw -1 bitshift def - } repeat - } forall - /v v checkoffset add def - - version (limiteda) eq version (limitedb) eq or { - /v v 1023 and def - v 824 gt v 853 lt and { - /v v 292 add def - } if - } { - /v v 1023 and 45 add def - } ifelse - - /d [ 2 2 2 2 2 2 ] def - /r 0 def /c 0 def /w 0 def /sum 0 def - { - sum v eq {exit} if - /t sum c2w r get c get add def - t v eq { - /w w 1 add def - d r w 2 add put - /sum t def - } if - t v gt { - d r w 2 add put - /r r 1 add def - /w 0 def - } if - t v lt { - /c c 1 add def - /w w 1 add def - /sum t def - } if - } loop - 20 0 1 4 {d exch get sub} for - d exch 5 exch put - version (b) eq version (limitedb) eq or { - /d [ d {1 add} forall ] def - } if - /cbs (111111111111) 12 string copy def - 5 -1 0 { - /i exch def - cbs 5 i sub 2 mul 1 add d i get 47 add put - } for - - % Concatenate the space bar successions - /sbs cws length 6 mul 31 add string def - encs encs length 2 sub get dup - sbs exch 0 exch putinterval - length /j exch def - 0 1 cws length 1 sub { - /i exch def - sbs j encs cws i get get putinterval - /j j 6 add def - } for - sbs j cbs putinterval - /j j 12 add def - encs encs length 1 sub get dup - sbs exch j exch putinterval - length j add /j exch def - /sbs sbs 0 j getinterval def - - % Return the arguments - << - /ren //renlinear - /sbs [sbs {48 sub} forall] - /bhs [sbs length 1 add 2 idiv {height} repeat] - /bbs [sbs length 1 add 2 idiv {0} repeat] - /txt [ [text textxoffset textyoffset textfont textsize] ] - /textxalign (center) - /opt options - >> - - dontdraw not //renlinear if - - end - -} bind def -/posicode dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp posicode 0.0 0 0 0 +%%BeginData: 105 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\X4aVtcOu8C3D fBf4Df 0WC P,i2 'Cia 0N4 aW>WI?IQm3 0Ia6V33Qn!B +lU*FE2M8P!+/T/W r;\Fc nqO1 OXV5/ Tc#U AWe itP#ZpnAWe *t3A5;iFD5Z +2F-8_M1OYEcDfBf 4Df0W COu%N L8M>0 sG] [P9DKI"CAU &FE;/B AWe^01 G4@UX:eDe*FB@ZmRN1GOo[4NP!5$bP')pIL]E55P"_#iD0'?Q5&,lSP,XU.P'E-LP%'4LP,X6>P!5%&I=%,:D +0'?Q5&-6EP'N4"C6ATNC6CcD1G<3GEas#uAKYi2B8?P&P"_#pP!FGY9I.1!AKN7?B,%6>p*@3!AT +T84,=h]+Bsj,16)AtL`B\C>E/_?NWD;!*F0dlNWCts!Bu;\>p*@3!B#l<5DUCe+Bsj,2N@f'NW +C;/+Bsj,2i[oCNWC>0+Bsj,3/Ch"!@(km>E/_ENWEFG!@D(p>E/_MNWERE!F6gPNWDJ,!Fgid> +p*@3!CMkJ@u(4m+Bsj,7#h:YL]h!+>E/_QNWE^I"^N6TNWDV0!G7,l>p*@3!Cr.NB8?du+Bsj, +8<*^aL^79/>E/_UNWEjM$!eZXNWDb4!G[Dt>p*@3!DAFRCPW@(+Bsj,9TB-iL^[Q3>E/_YNWF! +Q%:()\NWDn8!H*]'>p*@3!De^VDhnp0+Bsj,:lYQqL_*i7>E/_]NWF-U&R?M`NWE%p* +@3!E5!ZF,1K8+Bsj,E/_aNWF9Y'jVqdNWE1@!Hs87>p*@3!EY9^GDI&@+Bsj,=H +3E,L_sD?>E/_eNWFE])-n@hNWE=D!IBP?>p*@3!A0<4?\g+9+Bsj,/rfs?LacUP>E/_,Ljt3\> +p*@3!@3[+H]A+V>p*@3!ABH6I#\4Y>p*@3!@s02I?"=h>p*@3!@Blmos+BosmNWChiSqrt +D+Bsj,0o2EWSm)8c+SmBlmosI?ITn9.sdg@<-3nE-%1+Ou"b$BOPq)@;L!->9IEh@<-3nE-%1OOu6`_@<-3nE-%1OO +u6`_@<-3nE-%1OOu6O.1Pc$e!FoeOEc#6(F-:!g!KsF/056S5Ou"b&DI[`1@q]:kD..C)+DI!3 +Ou%moL]N;5HS9,s5*@^5DI[`1C6D5Q30LHuF*)G:DJ+':E+P1qH\_Zb97;t&@q]:kG%#3.+DR' +4P!3TCG^Y`GI?I,SF(KGI+Cf(nEctl-F,0gZ99M(aF(KGJ+Cf(nEctl-F,0j[99M(aF(KGK+Cf +(nEctl-F,0m\99M)O@<[&OASu!rA8,poNWX<1GEOb1P#Q"1@rGmlDJ+t3Eaa0T4aShlGB4m9@< +-0qDNY"-Q?@/ +4u +I?IQ@DI[TqBl7RD"CZFpDj!8104o*3G%#3.+?VcH"@c-R0kP;XNW_gH6S`7k16)K,:.$gLDDR: +U7SZ<-Ao9FJ5!G,c05YcC+C\c"Ch7LI$'I(tFCf]=+C\c"Ch7LIV33VfBnubP1GC*7#"@<.NUE+*d.AS,gi+Cf(nEe +n%b4d#q^+C\c"Ch7L?"HoaIAs*:D@UX:eDe*E%BnueQ!Kp*3?BT/P04S[(EZet3@s29sF!+q#E +as#uAKY]C!KmJ>"HlHA99M)QAU&;>C5r<;P'J]p+DHW7Oo^_%I=!V]+DHW4Oo^_%I?ITYP#Q:> +B-:q3@q]:kP'AWo+DHW4Oo^_%05;VEL]NY>Ou%NLAM7nAB-;&4B8?P&P"_#p05YcCCh7K,D0'? +Q@ZiN#FCf]=+EV1>FGKp3P"_#p04f$2H]gRU94N0eP!3WD5*C.DC*78I!KmJH1OYDrOu"b$GB4 +m9@<,jrA7^p5L]W`UOpR:-0564BOu"b+L]ESo04T'7FH-KFATTVh1OEgYD0'?+AT!YoH]gXBP# +Qc]@q]:k0d(=SB-:oO99M(a@q]:k1*C:e!KmJ#F(]<#DN\UYD0'>4BnueQ!Kp*(H\e5@P#[Z$@ +rl4'P%8'9@<+)c@!cBs@<+(F@rl4'P%8-A@kVO=BnueQ!Ko7%5^eepF(KGK+Cf(nE\W_bHZNdS ++CfJ(FHU0GDIXf!BOPp9+EM+91*C.G@kVO=BnueQ!Ko7%5^eep@rl4'P%8'9@<+,d@$5JU@rl4 +'NWaE7F>/k@HYd+F+CfJ(FHU0GDIY>0F(KHR"ES-r0p4>@HYd+E+CfJ(FHU0GDIY>0F(KHR"ES +-r0Tn5?P#[Z1I=#IFATWq8F(KGIP!+/5AhbE+hKDI\*Xu-NWq3p0ekCNWq3m0f1U?NWq3o0ekC=NWq3n +0etI>NWq3m0f(O?NWq3n0ekC>NWq3m0etI?NWq3m0ekC?NWq3t0ekC;NWq3s0etINWq3p0f:[?NWq3o0fCa@NWq3n0fLgANWq3m0fUmBNWq3s0ekCNWq3p0f1U?NWq3o0f:[@NWq3n0fCaANWq3m0fLgBNWq3r0ekC=NWq3q0etI>NWq3p0f +(O?NWq3o0f1U@NWq3n0f:[ANWq3m0fCaBNWq3q0ekC>NWq3p0etI?NWq3o0f(O@NWq3n0f1UAN +Wq3m0f:[BNWq3p0ekC?NWq3o0etI@NWq3n0f(OANWq3m0f1UBNWq3o0ekC@NWq3n0etIANWq3m +0f(OBNWq3n0ekCANWq3m0etIBNWq3m0ekCBNX.@%0ekC;0f"as0ekC;0ekC;0fq*q04H&.NWq3 +q0etI>NWq3p0f(O?NWq3o0f1U@NWq3n0f:[ANWq3p0etI?NWq3o0f(O@NWq3n0f1UANWq3o0et +I@NWq3n0f(OANWq3n0etIANWq3u0etI=NWq3t0f(O>NWq3s0f1U?NWq3r0f:[@NWq3q0fCaANW +q3p0fLgBNWq3o0fUmCNWq3n0f^sDNWq3t0etI>NWq3s0f(O?NWq3r0f1U@NWq3q0f:[ANWq3p0 +fCaBNWq3o0fLgCNWq3n0fUmDNWq3s0etI?NWq3r0f(O@NWq3q0f1UANWq3p0f:[BNWq3o0fCaC +NWq3n0fLgDNWq3r0etI@NWq3q0f(OANWq3p0f1UBNWq3o0f:[CNWq3n0fCaDNWq3q0etIANWq3 +p0f(OBNWq3o0f1UCNWq3n0f:[DNWq3p0etIBNWq3o0f(OCNWq3n0f1UDNWq3o0etICNWq3n0f( +ODNWq3n0etIDNX.@%0etI>0f"as0etI=0etI=0g%0r05P?>Blmos@3Ad7"u.he1bg_F"u.he1G +LYF"u.he1,1SF"u.he0ekMF"u.kf1GLVE"u.kf1,1PE"u.kf0ekJE"u.qh0ekDC"u.ng1,1MD" +u.ng0ekGD"u/%k0ekDC"u/"j1,1MD"u.ti1GLVE"u.qh1bg_F"u.ng2)-hG"u.kf2DHqH"u.he +2_d%I"u/"j0ekGD"u.ti1,1PE"u.qh1GLYF"u.ng1bgbG"u.kf2)-kH"u.he2DHtI"u.ti0ekJ +E"u.qh1,1SF"u.ng1GL\G"u.kf1bgeH"u.he2)-nI"u.qh0ekMF"u.ng1,1VG"u.kf1GL_H"u. +he1bghI"u.ng0ekPG"u.kf1,1YH"u.he1GLbI"u.kf0ekSH"u.he1,1\I"u.he0ekVI"u.ti0e +kDC!ARk5Ch[a#FCeul+Bsj10etI@0f"an0etI?0f+go0etI>0f4mp0etI=0f=sq0f(O@0f"an0 +f(O?0f+go0f(O>0f4mp0f:[@0f"an0f1U@0f"an0f1U?0f+go0fUmC0f"an0fLgC0f"an0fCaC +0f"an0f:[C0f"an0f1UC0f"an0f(OC0f"an0etIC0f"an0fLgB0f+go0fCaB0f+go0f:[B0f+g +o0f1UB0f+go0f(OB0f+go0etIB0f+go0fCaA0f4mp0f:[A0f4mp0f1UA0f4mp0f(OA0f4mp0et +IA0f4mp0f:[@0f=sq0f1U@0f=sq0f(O@0f=sq0etI@0f=sq0f1U?0fG$r0f(O?0fG$r0etI?0f +G$r0f(O>0fP*s0etI>0fP*s0etI=0fY0t0f1U?0f"ai0jPnc4s5#[EcYr5DN[XGASu"!P!5$b0 +4Qb]+BosmL&pat!D8(HdYN@.7Yi:F%u:Bp+BsR#V20APDNTA#`&_A#)EG="Gd/9!aQpQL]N;4L]N;4L]N;4L]N;4>p*F91G*4!f-o6!f-o6!f-n`Ou"b3L]ESo04Te)!A:'+5Oo]uo8R7K8I?IP_@q'M>$o'Ik0 +ekC;0ekC;0o-7$V32^Z1Pc3js+gZ%056S5Ou$TWF,1!6P,X6=P&,pTOo])9Bp),F09Q@!G^Y`G +06:TD+CfV:P%'4OP&,prOo^`BOu$Ze@ric(DI[aN@Yb)KWKKo;3-/PMP!4[%P!5%SP%$(ZP!5$ +bL]E53@s1_dDD*Y`ASu9IurF +-:!g!KmJ>!g6H.BOtmjBQSZcK3^->@WNYr+EM"5P%'4JOo^@?P#?X_!.C#_>q^;EF9J$! +G]Y'MAU&FCf]=F(or3+C-*q06CcMFEh51BkM= +D#%M4^FCfJGDfBe@DfBf4Df0V=5!C*"Df0Z-Eaa0TE%`kbASu +% uk.co.terryburton.bwipp/posicode 0.0 0 +%%EndData +%%EndResource % --END ENCODER posicode-- % --BEGIN ENCODER codablockf-- +% --REQUIRES preamble raiseerror renmatrix-- % --DESC: Codablock F % --EXAM: CODABLOCK F 34567890123456789010040digit % --EXOP: columns=8 % --RNDR: renmatrix -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renmatrix dup /uk.co.terryburton.bwipp findresource put -begin -/codablockf { +%%BeginResource: uk.co.terryburton.bwipp codablockf 0.0 0 0 0 +%%BeginData: 130 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\+F _u#; Ot;bP 061u TBO tmjBQPA;Dg ,l+BkM+$Ot; +bP06:]DBOtmjBQP A-P#QC/EcYf=05YcC+C\c"@rGmhP%'TNOu"b+L]ESo@UX:eDe*F+NWEILNI-gJD0'?Q5&- +6EP'N4"C6AUR!KmI:C6CcD1QlmD3/@Qj"-Q?@/8]H@P!3W:!KsFF5*C/R30Ia,"-TX>"-Pj29R +V8N3,N_LP!3WD5*C2S@VV&,05?Y6Ou"b#@<,jrA7Zm#F(^:/C6D8R1Qk"OP#ZpnAUT_@04J@1C +h7K,@UX:eDe*FB@ZiN#F*D&Ks,o/kF*D)LrfT&jF*D,MrK8riF(TNMr/rihAo9>ZqiW`gAo9A[ +qNp*@ +3!?mI(+cZUX0jPo+NWC>a!@!O*0JZoV>E/_/NWCAb!\cE9+Bsj,,`VmNNWLmk>p*@3!@/NWCJe!@Eg.0K*2Z>E/_3NWCMf!\cQ=+BsXMLa\8b0K<>\>DO_a.?4H`3F*b3NWCVi!@ +j*20eclU>E/_7NWCYj!\lE8+Bsj,/<0`^NWLpj>p*@3!A0<4/WKle1L2,-NWCbm!A9B60f3/Y> +E/_;NWCen!\lQ<+Bsj,0TH/fNWLpn>p*@3!ATT80oc;i2dIP1NWCnq!A]Z:0fWG]>E/_?NWCqr +!\l]@+Bsj,1l_SnNWLsi>p*@3!B#l<23%_n0jPo+NWD%u!B,r>1,<,X>E/_CNWD)!!\uQ;+Bsj +,30"#!NWLsm>p*@3!BH/@3K=.r2-h>/NWD2$!BQ5B1,`D\>E/_GNWD5%!\u]?+Bsj,4H9G)NWL +sq>p*@3!BlGD4cTS!3F*b3NWD>(!BuMF1GE)W>E/_KNWDA)!])Q:+Bsj,5`Pk1NWM!l>p*@3!C +;_H6&l"&1L2,-NWDJ,!CDeJ1GiA[>E/_ONWDM-!])]>+Bsj,7#h:9NWM!p>p*@3!C`"L7?.F*2 +dIP1NWDV0!Ci(N1H8Y_>E/_SNWDY1!])iB+Bsj,8<*^ANWM$k>p*@3!D/:P8WEj/0jPo+NWDb4 +!D8@R1br>Z>E/_WNWDe5!]2]=+Bsj,9TB-INWM$o>p*@3!DSRT9o]932-h>/NWDn8!D\XV1cAV +^>E/_[NWDq9!]2iA+Bsj,:lYQQNWM$s>p*@3!E"jX;2t]73F*b3NWE%E/__NWE +(=!];]<+Bsj,p*@3!EG-\E/_cNWE4A!];i@+B +sj,=H3DaNWM'r>p*@3!EkE`=cNP@2dIP1NWE=D!EtKb2)nka>E/_gNWE@E!];uD+BsY,Lg5rA2 +DADZ>E/_iNWEFG!]Dc=+Bsj,?B,%mNWM*o>p*@3!FLif?]G1G1L2,-L]EG9@#b:H1gM5.L]NM: +@?(CI2-h>/L]WS;@ZCLJ2I.G0L]`Y<@u^UK2dIP1L]i_=A<$^L3*dY2L]re>AW?gM3F*b3L^&k +?ArZpO0O5f*L^/q@B9!$P0jPo+L^9"ABT<-Q10l#,L^B(BBoW6R1L2,-L^K.CC5r?S1gM5.L^T +4DCQ8HT2-h>/L^]:EClSQU2I.G0L^f@FD2nZV2dIP1L^oFGDN4cW3*dY2L_#LHDiOlX3F*b3L_ +,RIE/juZ0O5f*L_5XJEK1)[0jPo+L_>^KEfL2\10l#,L_GdLF,g;]1L2,-L_PjMFH-D^1gM5.L +_YpNFcHM_2-h>/L_c!OG)cV`2I.G0L_l'PGE)_a2dIP1L_u-QG`Dhb3*dY2L`)3RH&_qc3F*b3 +L`29SHB&%e0O5f*L`;?TH]A.f0jPo+L`DEUI#\7g10l#,L`MKVI?"@h1L2,-L`VQWIZ=Ii1gM5 +.L`_G&NWM3u>p*>oAo9CIAo9Db!]`/E+Bot#DDE>HDDI4R3B(4d>9J!!Fp*>oF*D(9Ao9FJF*D(9>p*>oAo9FJF*D%8F*D%8>p*>oAo9=GAo9=GAo9=G>p +*>oF*(h5F*(h5F*(h5>p*>oF*)@DF*)@DF*)@D>p*F91G<6O@<-O"Ci^_'LhW#0LhW#0LhW#0? +'7""!/LYcBOPpu@;p:N@Yb&JWI$:4P!5$b04f$2F!+t+@<-3nE-!.9P"UroL]E53L]VoVC6CcD +1M(H6F!,4\99M8tY:js=EbTE(FEqh:P!+/J!0U!'P#Pq)@<-O"Ci^_6P"Us%Bp*^hP":"a82#$ +qFC?;%BOPq)@;L"@!0U!<1G1G< +?X@s29sF!*S-NW_gH6SW1j0ocB+:.$dKDDI4T7SZ<,Ao9Db"@c-R1hLV^+?huP1G"HlHA99M(aBcq,G"HieK1OXU'Bcq,G!KmJH1OYEdI?IQHF(ZV +1+Cf(nEftZ#Bcq,G!KmJH1G4E09Id(B9H_NL]DjdK8(`a?'6usD +In'7@W$++@3AbsD0'?Q@XEn2I?K5;-P'LG1Mq2GP%'4JP,X9;L]DcTBp(ZC1Mq2G+DI!3@;^"* +@XB58AU&<*DJsW++DHW3P'DD%DIn'7@;^"*@N]A-DIn'7@;^"*@N]B@!KmJH98EV3!Kq\UP#Z@ +?B-:oO94DdWFCBM=DIn'7@W$++@3B9?!0VSTHZ!D>FCK-+FC?;++Dtb8FCK-+FC?;+L]NY>P"U +T3Oo^_jI?ITYP"767@V'.iEb/^,OuR>jG][A3DffHO5*AR%5&OqVFCK-+FCC=rP"UsMI?G)'1G +<3HAS,k$ARTqK3,W;PFCK-+FCC=rP"Us%DIn'7@;^"*@Zip<99Nn8Oq*X205t?1Ec6/KH[?lFF +(KHR"ES-r@?Nd#F*D+:ASu!d04T'7FH-KFATVFF1Qk"OP#Pq4ATWq8F(KH&P!+/5G@Mb,DI[-/ +@rl4'NWaE7FCUIiP!FGY<+Bu\FH-KFATVFF4aV6o@N]6"@q.0%F(KHR"ES-r@ZiO15^eepI?J/ +iP(S1G%[&V$@s;u:@u(;O!HN+&F,9jZD0p;AGB81ZLb*t;dD3>$KDKTf;L]W`SL]ET$Eb0*D"-Q9>"FG36@j#9& +ATWq8F(KH%P!+/'DI[+'HQZm;@q'kLd4aUdY0d(% +F@q.0++DHW4Oo^_%I=#gPB-:oE!g65gDI[00Bcq,G!g3SI1OYEdI?K5G5^eepDKTf;L]W`SL]E +TTEb0*D"HlB?"FG!,B-:oO94N$SFH-KFATV@D4aUaX@pse4+D#G#@XXD>052PCL]NY>Ou%0'@j +#9&ATWq8F(KH%P!+/'DI[+'HQZm;@q'kLd4aUdY0 +d(%F@q.0++DHW4Oo^_%I=#gPB-:oE!g65gDI[00Bcq,G!g3SI1OYEdI?K5G5^eepI?IQ>F(KHR +"ES-r@ZilkF(ZV0P"T5$DffHO"EJ'jL]W`3Op$,G+Dl14Ch7L?!KsFFAp\6J!KmIm@V'.iEb/[ +++EM.:+D#G#@N]N/B-:oO94`!N@4u=;BnueQ!Ko7%5^eepI?IQNG@;V*DI[-/@rl4'NWaE7FCC +=gD0'>4Bp),#DI[*.Bcq,G!KmJH1Qk"OP#Pq4ATWq8F(KH%P!*Z'B-:oO94DdWFCC=8Eb0*D!g +60="FFi*D0'?+AT!;)P,XUVHYJ9:Oo]!#AS,k$AR^!/F(TM:ASu!d+Dl14+DI!3ASu!e052PCL +]NY>Ou&7dI?IQXP#QLH@N]6"@pq$#F(KHR"ES-r@ZiNaF(ZV0P"TA(@q%**+DHW4Oo^_%P!FGY +<+Bu\FH-KFATVFF4`5CZF,0m\As*:;ASm5)P"Ll?HYFU2@V'.iEb/^,+EMa8+D#G#@kV>5ATWq +8F(KH%Ou$rrB-:oO94`!N@4u=;BnueQ!Ko7%5^eepF*D(9ASu!f04T'7FH-KFATVCE1Mq2G+DI +!3ASu!e052PCL]NY>Ou&7dI?IQ>F(KHR"ES-r@?NcpATV?'D0'>4Bp),P@$1Y5ASm5(P"Ll?HY +mh:+DI!3ASu!d052PCL]NY>Ou&7dI?IQ>F(KHR"ES-r@ZilqATVB(D0'>4Bp),P@$1Y5ASm5(P +"Ll?HYmh:+DI!3ASu!e052PCL]NY>Ou&7dI?IQ>F(KHR"ES-rA!/umF_u2U!g60="EJ'jL]NZ2 +Op$,KF(ZV0P"TD)0p4\HAo9=GASu!f052PCL]NY>Ou%N5D0'>4BnuhR9P&*O@kVO=BnuhR!Ko6 +eP#[Z1I?IP_ASu$sAo_g6+EVXHAWej45^ef,I?J/^+EDCEF-8\,Dg-8Ys,oO.EcQs:P#.;EBcq +86B5D-sP!+s2Eb0*D!g60="FG0#D287VWGl9VEc6.TC*78I"-N\J1NRYW+D#G#@4uG*F*)G@G9 +D!JF_-^lI=$!GD'3e+A9)U405;VEL]NY>Ou%0$E$/_0@pq$2+EE8=Oo^_%I?ITYP%?:VGB4m:G +B8Q?C6D8R1G<0GD..B+>DPP#!Jk*0I?I-W!/LZ3%sr_f8;J1?!JiseI?I-,Ou"b$D..B+>DN98 +!Jja&I?I-,Ou"b$BPVI+B-;&4B5D-sOpR:-05?:COu%moL]M@6B5D-sL]N[BOPp(Ao9>d4_] +]PP&6?bHXg`)D0'>4C5L]ESo06At*!0T,kCGCVFOu"b,15 +Gpn1Pc$e!G[DkP,Wd]Bp(ZC1G4Bp),'P&,qTP%p.906ArlF>4nJBPVI+B-:oO9 +9K=3B![LfT[ROu"b,1*C?f+ET?$!Jjd>C6CB$P"9),F!+t:F-:!g"Ho`o +F(KHR"ES-rA!1\U@:F(^E.*'U@r5XnI?ITG0p51mG[kr=+CfV:P%'4LP,Vr4ATWq8F(KH'P&5P +S@VoOmI=!)HD..C3P#Z9QP"Us_@s061QHF-8_M1 +G<6ZF_r7A@s1,=jo1,:U>1,=j +o1,:U?1,4dn0etI=1,Fpp0etI>1,=jo0f(O>1,=jo0etL>0f+go0etL?0f"an0f(R?0f"an1,: +R>0f+go1,:R?0f"an1,CX?0f"an0ekF=1GXsp0etL=1GXsp0etL>1GOmo0ekI>1,=jo0etO>1, +=jo0etO?1,4dn1,:X@0en[m1,:R=1GXsp1,:R>1GOmo1,1R?0f"an1,:X?0f"an1GLX>1GOmo1 +GLU>1,=jo1GU[>1,=jo1GU[?1,4dn1GLX?0f"an1GU^?0f"an1GU^@0en[m1,1O=1,Fpp1,1O? +1,4dn1,C[?1,4dn0ekC=1,Fpp0f(O=1,Fpp0f(O?1,4dn0ekF>0f+go0f(R>0f+go0f(R@0en[ +m1,1L>0f+go1,CX>0f+go1,CX@0en[m0ekF<1Gb$q0ekF>1GOmo0f(R>1GOmo0ekI=1,Fpp0ek +I?1,4dn0f(U?1,4dn1GL[?1,4dn1,1L>1GOmo1,CX>1GOmo1,1R>0f+go1,1R@0en[m1,1R>1G +Omo1GLU=1,Fpp1GLU?1,4dn1G^a?1,4dn1GLX>0f+go1GLX@0en[m1G^d@0en[m1GL^@0en[m1 +,:R@0en[m1c$j@0en[m0ekC<1,P!q0ekC>1,=jo0etI<1,P!q0etI?1,4dn0f1U>1,=jo0f1U? +1,4dn0ekF=0f4mp0ekF?0f"an0etL=0f4mp0etL@0en[m0f1X?0f"an0f1X@0en[m1,L^@0en[ +m1,:R=0f4mp1bgd@0en[m1,L^?0f"an0f(X@0en[m0ekC<1bt'q0etI<1bt'q0etI=1bk!p0ek +L?0f"an0etR?0f"an0etR@0en[m1bg^?0f"an1bpd?0f"an1bpd@0en[m1,1O=1bk!p1,1U?1, +4dn1bga?1,4dn0ekC;1c(-r0ekC=1bk!p0f(O=1bk!p0ekL>0f+go0ekL@0en[m1bg^>0f+go1 +bg^@0en[m0ekI=1bk!p0ekL>1GOmo1GLU=1bk!p1bg^>1GOmo1,1L?0f"ao1,C^@0ekFhOu"b3 +Dg,Z)FE8RFOpR:-L]E53EejaZWI$:4P!5$b06:TD+BosuGB4m@+Cg32Oo^_^@u(;O!Kp-'ASu" +!P!5%%H\aA=WI9q$I?I0-Ou$r`EbgI2F(03;L]NZ@L]NZ%H[CPKI=6HhL]MpPP#[ZtI?I0b)i+ +NXWKIRN$^*]:FcnqOF`MDE@VKq*+DHW6M#WWnP'DD<82#%0D0K])+Cg38P&,q7Oo^_%05tWMF! ++[0F*VVHBk/?-AT2P')29K6(UCBOtmjBQSTW!Jgc4!/LZ3!/LW2!/LW2!Jg`3!- +% uk.co.terryburton.bwipp/codablockf 0.0 0 +%%EndData +%%EndResource +% --END ENCODER codablockf-- - 20 dict begin +% --BEGIN ENCODER code16k-- +% --REQUIRES preamble raiseerror renmatrix-- +% --DESC: Code 16K +% --EXAM: Abcd-1234567890-wxyZ +% --EXOP: +% --RNDR: renmatrix +%%BeginResource: uk.co.terryburton.bwipp code16k 0.0 0 0 0 +%%BeginData: 158 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\D P!5%OP!5$bI +=%,/FE2M8Ou%NL< IL$AOr fcH 05kf OBl@ m1P !5$bI?IQJE -,f4DKC/f1O +YEX05YW!AA2N5*@^bFcn_?!/L`?9Tgr +DF(^Y"C5;nRWKKH.G`k%L@Yb,LWJCY>5*ATfH]g@*F(^Y"C6CcDH'2WOOo[4NP!5$b04J@1@rG +mh+Dl14L]D1Q9Th2p5^eeqI?J/iP#O)D@<-0qDBNCsEas#uAWgMc1GOrH1GE/_-NWC;`!\c?7+Bsj,,)u[JNWLmi>p*@3!@*U*,E;gZ1L2,-NWCD +c!@3[,0Jm&X>E/_1NWCGd!\cK;+Bsj,-B8*RNWLmm>p*@3!@Nm.-]S6^2dIP1La\'-NWLmo>p* +@-.>TF5!\cW?+Bsj,.ZONZNWLph>p*@3!@s02.ujZc0jPo+NWC\k!A'640f!#W>E/_9NWC_l!\ +lK:+Bsj,/rfrbNWLpl>p*@3!ABH609-)g2-h>/NWCho!AKN80fE;[>E/_=NWCkp!\lW>+Bsj,1 +6)AjNWLpp>p*@3!Af`:1QDMk3F*b3NWCts!Aof<1,)uV>E/_ANWD"t!\uK9+Bsj,2N@erNWLsk +>p*@3!B6#>2i[qp1L2,-NWD,"!B?)@1,N8Z>E/_ENWD/#!\uW=+Bsj,3fX5%NWLso>p*@3!BZ; +B4,s@t2dIP1NWD8&!BcAD1,rP^>E/_INWD;'!\ucA+Bsj,5)oY-NWM!j>p*@3!C)SF5E5e$0jP +o+NWDD*!C2YH1GW5Y>E/_MNWDG+!])W<+Bsj,6B2(5NWM!n>p*@3!CMkJ6]M4(2-h>/NWDP.!C +VqL1H&M]>E/_QNWDS/!])c@+Bsj,7ZIL=NWM!r>p*@3!Cr.N7udX,3F*b3NWD\2!D&4P1b`2X> +E/_UNWD_3!]2W;+Bsj,8r`pENWM$m>p*@3!DAFR99''11L2,-NWDh6!DJLT1c/J\>E/_YNWDk7 +!]2c?+Bsj,:6#?MNWM$q>p*@3!De^V:Q>K52dIP1NWDt:!DndX1cSb`>E/_]NWE";!]2oC+Bsj +,;N:cUNWM'l>p*@3!E5!Z;iUo:0jPo+NWE+>!E>'\2)8G[>E/_aNWE.?!];c>+Bsj,p*@3!EY9^=,m>>2-h>/NWE7B!Eb?`2)\__>E/_eNWE:C!];oB+Bsj,>)iVeNWM't>p*@3!F +(Qb>E/bB3F*b3Lg5a@NWM*m>p*@3!F:]d?&etE0jPo+NWEIH!FCcf2DSP\>E/_kNWELI!]Di?+ +BsX%NWEOJ!]Dl@+BsX&NWERK!]DoA+BsX'NWEUL!]DrB+BsX(NWEXM!]DuC+BsX)NWE[N!]E#D ++BsX*NWE^O!]E&E+BsX+NWEaP!]Mf=+BsX,NWEdQ!]Mi>+BsX-NWEgR!]Ml?+BsX.NWEjS!]Mo +@+BsX/NWEmT!]MrA+BsX0NWEpU!]MuB+BsX1NWEsV!]N#C+BsX2NWF!W!]N&D+BsX3NWF$X!]N +)E+BsX4NWF'Y!]N,F+BsX5NWF*Z!]Vl>+BsX6NWF-[!]Vo?+BsX7NWF0\!]Vr@+BsX8NWF3]!] +VuA+BsX9NWF6^!]W#B+BsX:NWF9_!]W&C+BsX;NWF<`!]W)D+BsXNWFEc!]W2G+BsX?NWFHd!]_r?+BsX@NWFKe!]_u@+BsXANWFNf!]`#A+BsXBNWFQg +!]`&B+BsXCNWFTh!]`)C+BsXDLjtEd3Ak(b>9INq1E^:I1QDMs2I.G0+D,LH+D,LHNWM4">p*> +oF(-jHF($e`!]`5G+Bot0G@Mb:G@QX73B:@f>9J!2@N]9#1a$j`@N\r!>9INq1a$j`@3BW8@3A +hu>9INq0d((G0d((G0d'aE>9IlnA0>i"A0>i"A0>/#>9Iur1*CXH1*CXI0d'aE>9Ius1*CXJ1* +CXI1*BjF>9Ius1E^aK1E^aJ1E]sG?'6us@q]:kG%#3.+BsY=Ou8&4Ou8&4Ou6O.1Pc$e!FoeOE +c#6(F-:!g!KsF/056S5Ou"b&DI[`1@q]:kD..C)+DI!3Ou%moL]N;5HS9,s5*@^5DI[`1C6D5Q +30LHuF*)G:DJ+':E+P1qH\_Zb97;t&@q]:kG%#3.+DR'4P!3TCG^Y`GI?I,SF(KH%+Cf(nEctl +-F,0gZ99M(aF(KH&+Cf(nEctl-F,0j[99M(aF(KH'+Cf(nEctl-F,0m\99M)O@<[&OASu!rA8, +poNWX<1GEOb1P#Q"1@rGmlDJ+t3Eaa0T4aShlGB4m9@<-0qDNY"-Q?@/4uI?IQ@DI[TqBl7RD"CZFpDj!8104o*3 +G%#3.+?VcH"@c-R0kP;XNW_gH6S`7k16)K,:.$gLDDR:U7SZ<-Ao9FJ5!G,c05YcC+C\c"Ch7L +I$'I(tBnubP1GP"UU;P&5P!@q]:k+D,M$G% +#3.+C\c"@rGmh+DHW4Oo^@AP"_$3Ou"b*+DHW7Oo^_%I=!V]+DHW4Oo^_%I?ITYP#Q:>B-:q3@ +q]:kP'AWo+DHW4Oo^_%05;VEL]NY>Ou%NLAM7nAB-;&4B8?P&P"_#p05YcCCh7K,D0'?Q@ZiN# +DKTf;F(96;05cRGOu"b4L]ESo06!(>Oo^_%I=%,BI?ITYP#O)P+Duu9Oo^_%068 +7WL]NY>Ou"b1+E3,;Oo^_%I?J/Z+EMso%[&V$ASu!dHQ[B@FCC=rP"T;/F-8_%P!5%R05;VEL] +NY>Ou%NL%[&V$ASu!eHQ[B@FCLCsP"T;/F-8_%P!5%R05;VEL]NY>Ou%NL%[&V$ASu!fH]g@OY +:j=)Eaa68H#R>XD0p>8FCUItP"U4MOogehLbP!kP!4[UP,X6EP&-9^I?IT?GB8p2C6CcDGVSD0'?Q@Yb&JWJLS1!.-A5P!5$bD0'>4Bp)+tDJsW+HQ +[3;G][A3DffG2BnubPG^XpVAU&<*DJsW++DDs9AU&<*DJsW++DHW4Oo^_=L]NY>P'DD<B5D-sL]W`3H\_Z>F_u2@@rd_rP')pIL]W`3P! +4['P%odQP!+s2HS8lMATWq8F(KH'Ou"b.De*F8!g5@&5^eepL]D=8D0'c.EfrVLFcn_?"-Q9>5 +)99'C5;nR4d#qpD0'?G!0TudDI[-/@rl4'NWaE7FCUIi05YWJAoD^$@XBbF(]<#DN[/0P!FGY<,!ImF_u2@@ra5?F_u2_5*@ +]TDI[?gEc[C-Ou%GpF(KHR"ES-r@?Nd#Bcq86B5D-sL]N[Ou&7dI?IQXP#Q-B-:oO94DdWFCBM +=F*D(9ASu!d04T'7FH-KFATVCE1Qk"OP#Q-d4aUdY0d(%F@q.0++DHW4Oo^_%I=#gPB- +:oE!g65gDI[00Bcq,G!g3SI1OYEdI?K5G5^eepI?IQD+Dl14Ch7L?#*PsKAp\EOu&7dI?IQ>F(K +HR"ES-r@Zim$Bcq86B5D-sL]N[Ou&7dI?IQXP#Q-B-:oO94;^VFCKS>F*D%8ASu!e04T'7FH-K +FATV@D1Qk"OP#Q-d4aUdY0d(%F@q.0++DHW4Oo^_%I=#gPB-:oE!g65gDI[00Bcq,G!g +3SI1OYEdI?K5G5^eepI?IQD+Dl14Ch7L?#*PsKAp\EOu&7dI?IQ>F(KHR"ES-rA!0!%DKTf;L]W +`3HYmh:+DI!3Ao9>d4aUdY0d(%F@q.0++DHW4Oo^_%I=#gPB-:oE!g65gDI[00Bcq,G!g3SI1O +YEdP!FGY<,!IlF(]<#DMS=VWKLk?F(KH&+Dl14+DI!3P$i![!KmJ$F_u2@@rd_rP')pIL]W`3P +!4['P%odQP!+s2Op$,Q@PK!:DI[0!D0'>4Bp),#DI[-/Bcq,G!KmJH1Qk"OP#Qjm<,!IlF(]<# +DMS=VWKLk?F(KH&+Dl14+DI!3P$i![!KmJ$F_u2@@rd_rP')pIL]`f4P!4['P%odRP!+s2Op$, +Q@PT';DI[0!D0'>4Bp),#DI[,uD0'>4BnueQ!Kp)eDI[-/Bcq,G!g3SI1Qk"OP#Qjm<,!IlF(] +<#DMS@WWKLk?F(KH&+Dl14+DI!3P$i?BFCHA0F(ZV0L]NY>P"UsGOp#KT!g3S%F_u2@@rd_rP' +)pIL]W`3P!4['P%odQP!+s2Op$,Q@PT';DI[0!D0'>4Bp),#DI[,uD0'>4BnueQ!Kp)eDI[-/B +cq,G!g3SI1Qk"OP#Qjm<,!IlF(]<#DMSCXWKLk?F(KH&+Dl14+DI!3P$i?BFCHA0F(ZV0L]NY> +P"UsGOp#KT!g3S%F_u2@@rd_rP')pIL]`f4P!4['P%odRP!+s2Op$,Q@P]-4Bp), +#DI[,uD0'>4BnueQ!Kp)eDI[,uD0'>4BnuhR!Kp)eDI[-/Bcq,G"-N\J1Qk"OP#Qjm<,!IlF(] +<#DMSCXWKLk?F(KH&+Dl14+DI!3P$i?BFCHA0F(ZV0L]NY>P"UsGOp#i;FCHA0F(ZV0L]W_?P" +UsGOp#KT"-N\&F_u2@@rd_rP')pIL]W`3P!4['P%odQP!+s2Op$,Q@P]-4Bp),#D +I[,uD0'>4BnueQ!Kp)eDI[,uD0'>4BnuhR!Kp)eDI[-/Bcq,G"-N\J1Qk"OP#Qjm<,!I`@V'.i +Eb/^,+EMa8+D#G#@kV>5ATWq8F(KH%Ou&7dI?IQNG@D\+DI[00@rl4'NWaE7FCLChP!FGY<0BL +pP%B')AM7P;F!+t:F,0g2P"_#pI?IP_D.Rg0Bk)3,>9I.+!f.(e+BsX(L^[Q3>DNE<&R?M`L]r +SM>p*@-#)F4(+BsX,L`ftG>DNQ@-!_WtL^Ake>p*@-$A^?@+BsX0LbrB[>DN]D3F*b3L^f/(>p +*@-%Z!JX+BsX4Le(eo>DNiH9jJlIOu"b6Ec6/C+EDCEF-8=4BnubP1OCcl+Dk\3EbT$)+DI!3O +u"b3+Dlo7P"Uro04\R:F!,=U!Kp*=1G^Dg-7FEft:&"FDe? +CLMK2AmoLsAWeitP#Pq8F-:!C@sOu%NLAM7P;F!+[0@s9IF"F-6TfF^m-K@ko04Ou"b&DI[`1>E/nC0etL>16)Po1,:R>16)Po1,:U?0ocGm1,1O> +1QDYo1,1R?16)Pn1GLX?16)Pn1,:U>1QDYo1,:X?16)Pn1GU^?16)Po1,1O=1QDYp1,1R>16)P +o1GLX>16)Pn0etL?16)Pn1,:R?16)Pn1,:U@0ocGm0f(R?16)Pn1,CX?16)Pn1,C[@0ocGn1,C +[?0ocGn1,1L>16)Po1,1O?0ocGn0f(R>16)Po1,CX>16)Pp0etI>0ocGo0ekF=16)Pp1,1L=16 +)Pp1,1O>0ocGo0etL=16)Pp1,:R=16)Pp1,:U>0ocGn0etI=1QDYp0etO?0ocGn1GU[?0ocGm0 +ekI>1QDYo1GLU>1QDYo1GL[@0ocGm0etO>1QDYo1GU[>1QDYo1GUa@0ocGn0ekI=1QDYp1GLU= +1QDYp1GL[?0ocGm0etI>1QDYo0etO@0ocGm1GU[@0ocGm0f(O>1QDYo0f(U@0ocGm1G^a@0ocG +o0f(O>0ocGn0ekI?0ocGn1GLU?0ocGn0f(O=1QDYp0f(U?0ocGn0f(O?0ocGo0ekC<1QDYq0ek +I>0ocGo1GLU>0ocGo0etI<1QDYq0etO>0ocGo1GU[>0ocGo0f1U>0ocGn1,1U?0ocGp1GLU=0o +cGm0ekF=1l_bp0ekL?16)Pn1,1L=1l_bp1,1U@0ocGm1bg^?16)Pn1bga@0ocGm0etL=1l_bp0 +etR?16)Pn1,:R=1l_bp1,:[@0ocGm1bpd?16)Pn1bpg@0ocGn1bga?0ocGn1,1L<1l_bs0f(O= +0ocGn1bg^>16)Pn1Ggg@0ocGm0ekF?16)Pn1,1L?16)Pn1,1O@0ocGm0f1X?16)Pn1,L^?16)P +n1,La@0ocGp0ekF<16)Pq1,1L<16)Pq1,1O=0ocGn0etI?0ocGn0f1U?0ocGp0etI=0ocGm0ek +C>1QDYo0ekI@0ocGm1GLU@0ocGm0f1U>1QDYo0f1[@0ocGp0ekC;1QDYr0ekI=0ocGm0f(O@0o +cGm0f1U@0ocGo0ekC>0ocGp0ekC=0ocGn0ekL>16)Po0ekF<1l_bq0ekF>16)Po0ekC=1L6/"0 +6;5DEcbl1@ribsNW_-n0en[k1,:U>NW_*l1,=jm0f1U>NW_'k1GXsn0etO>NW_'k0f4mn1GLU> +NW_-n0en[k1,:U>NW_*l1,=jm0f1U>NW_'k1GXsn0etO>NW_'k0f4mn1GLU>?'6usF*)>>ASu" +!De*B$>E/hB1,1MD">V_f0ocAl0etME">M_f0ocAk0f(SF">MYf0ocAk0ekMF">_be16)Jl0f( +SF">MYf0ocAk0ekMF">_be16)Jn1,1MD">V_f0ocAl0etME">M_f0jTqu06;5RE+NosF(KN+DB +N/D">V\e16)Jl1bg_F">MVe16)Jl1,CYF">MVc1l_\p0ekGD">MVe16)Jl1,CYF">MVc1l_\p0 +ekGD">_ef0ocAl1,:SE">V\e16)Jl1bg_F">_ef0ocAl1,:RiOu%&qF,9jZ4`G=\L^K;CL]W`S +L]NZ%P&bn&F*)>>ASu"!+EMXCE+NosF)PT"Ou%N506;5RE+NosF!,OGDfB9*@rl4)AT!YeI?IS +`Ec6/2BlnD=Efp`l1Pc$e!HNtsP,Wd]Bp(ZC1Gg@rmesP"U.X0TrD`P"C(b8TSulE+NosF!,1[97)IKP,Wkm8VdCQOu +$r`EbgI3F(03;L]NZ@L]ET$H[CPLI=6HhL]DjOP#[ZtI?I0b)i+NXWKIRN$^*]:FcnqOF`MDE@ +VKq*+DHW6M#WWnP'DD<82"prG]P!3Lf&5)E+ifsB4uCMCjUs=I?K5=!/LYrL]Wa=HS9)r5*@^B +Dg,l+BkM+$HQ[?IG@G9.F!,1[99K@>Fa]F*F(K<(ASGdjFF/fNH\_ZMP(SQ[H\_]NP(SPjI?K5 +2P"9V3GA(Q%B4uC6+EDCE@VKq*+EE8=P,XU;OogehI?K5=;0-;fBOtmjBQTDRH\_]NP(R&'1H[ +cQEb0,A061WAD.. O,Bm; :MBm= \AE+s Q< 05t WMG_f3 ME+sQB+ +E2%>F-:!g;3Fg1B Otm jBQPA 9Bm=] ^@ Ydm E;M [l,2 +D98gA9;L@;2@c+2 D8ufF e?Ou[r R%[&V $@r Gmh 0fEg 13 0If *F_`U> D_ ?-CEcQ G7F +`MSBDD#CBBlJ#6A 7]@eD Imj "F) Q 2A@ qCg GOu Y1:ATV m" @r#drB 9Ki +QP'(hWFDtYuCM@[ !I?IP ~> +% uk.co.terryburton.bwipp/code16k 0.0 0 +%%EndData +%%EndResource +% --END ENCODER code16k-- - /options exch def - /barcode exch def +% --BEGIN ENCODER code49-- +% --REQUIRES preamble raiseerror renmatrix-- +% --DESC: Code 49 +% --EXAM: MULTIPLE ROWS IN CODE 49 +% --EXOP: +% --RNDR: renmatrix +%%BeginResource: uk.co.terryburton.bwipp code49 0.0 0 0 0 +%%BeginData: 934 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\"-Pj29RV8N3,N_LP!3WD5*C2S@VV&,05?Y +6Ou"b#@<,jrA7Zm#F(^:/C6D8R1Qk"OP#ZpnAUT_@04J@1Ch7K,@UX:eDe*FB@ZiN#F"rLNOu" +b415Ppm1G4@UX:nAT!Y;Ou"b*L]ESo05?:COu%H!+C\c"Ch7LI4 +aW>WI?IP_@q]:k+C\c"@rGmh+DI!3Ou%&cEcYf(DIXf!BOPq;?BRI7"DJuf@<-0qDMSFYWKLkV +"FFTdEas#uAKY]C!KmJH98Ho;D0mpGBOPp(Ao;+%@;L!-@UX:eDe*E%BnueQ!JglA9Ti&31GnNWCho!ATT816)AkNWCts!B +#l<2N@esNWD,"!BH/@6&kt4NWDM-!CVqK7?.C'[HDDNDQF!+bO1G<6O@<-O"CibCeOu8CYL]E53LbO0/Bp(ZC1Lk*,Ec#6(+DI!3OuSW +.06;5UBl7R*H#R>X4aVtbP"U4d<+BTMEctl-F-8_$P'DD<82"IkD.7F)+Bsj-0d)JX0gUg$0g^ +m%0ggs&0gq$'0h%*(0h.0)0h76*0h@<+0hIB,0hRH-0h[N.0hdT/0hmZ00i!`10i*f20i3l30i +&TT+>/ZU ++>8`V+>AfW+>JlX+>SrY+>]#Z+>f)[+>o/\+?#5]+?,;^+?5A_+?>G`0e87c1,4dj1,=jk1,Fp +l1,P!m1,Y'n1,b-o+@2"h+@;(i+@D.j+@M4k+@V:l+@_@m+@hFn+@qLo+A%Rp+A.Xq+A7^r+A@ +ds+AIjt+ARpu+A\"!+Ae("+An.#+B"4$+B+:%+B4@&+B=F'+BFL(+BOR)+BXX*+Ba^++Bjd,1, +k3p1,t9q1-(?r1,+^i1+eLf1+nRg1-pp%1.%!&1..''1.7-(1.@3)1.I9*1.R?+1.[E,1.dK-1 +.mQ.1/!W/1/*]01/3c11/9100D:109J;10BP< +10KV=10T\>1*hk]1,"Xh1+S@d1*qq^1*Bkc1Pc$e!Jl5P056S5Ou$TdD.7F)+DI!3OuS6tP"RH +<0p4_`1Pc'p9.sd1P!5$b@kicoP!+/%BOPq)@;L!-BcpV&@q]:kG%#3.+EK9#94MXDEctl-F!+ +sJP"T)DG^Y`S@kicpP!+/%BOPq)@;L!-BcpV&@q]:kG%#3.+EK<$94MXDEctl-F!+sJP"T)DG^ +Y`SI?I,SASu!rA7]1cE+i[,+Cf(nEctl-F-8_M99M8tY:j=)Eaa68H#R>XD0q'>OpR9ZI?IQm3 ++I/RP!3WD5*C2S@VV&,05?Y6Ou%NL%[&V$@UX=h1cTip*@75*@mg@Yb&JWJLS1!.0M&P$!l2P"Us%I?I-aF^:. +i@sDP"i0Q)#MF,0gP"HlHA!g7\3+C\c#AMcB&!cE-tF,0sT"-Q>e@<6! +:3.6rhI?G)'1GDN]D(5NEU(Pj5j% +YtsX,)@e+%u;*Z,D[q-2i&$$)MfYp/r2KC6AQ50)i,er08MWE6\nHm&r7N`-AX@33f$1[:5E#. +'8RZb-\sL54,?=]:P`/0@pP6R@sWI?IQVD.Rg&De+k3@;Kmr@?Nd#DKTf-EbT$(F`)7CBp),F"d2K)DK?q3DI[TqA +RTCoBONQ2ATVU(A<$n4F_t]1Bk*;^P!FGY<,H\h+DI!3ASu!rA7]1cE+iZ5Bcq,G!KmJH1Qk"O +P#Q:0FD,T'NX'HED.Ra%A!0!%DKTf-EbT$(F`)7CBp),F"d3JEDK?q3DI[TqARTCoBONQ2ATVU +(A<$h%CiF&rOu&7dI?IQHF(ZV0+Du==ATDKpEcl8@+DI!3P"]G)@rGmhDKTf-EbT#:Bcq+4DKT +f-EbT$(F`)7CBp),P!Ko7%5^eepI?J/iP%?:VGB4m:GB8Q?C6D8R1GDN?:$! +eZXL]`GE>p*@-"Gdk"+BsX*L`ThE>DNK>-!_WtL^/_c>p*@-#`(3@+C1-d06M;RGB4mIDg-8c1 +G$K05kW7Gp$^-Cia0N1OYEc@s9IF"F-6TfF_#!+F!+t:F-:!qWI'FTI?K +4gOu"b$@ric5L^9/[OpR:-05?:COu%moL]MOP!g9O0056S5Ou"b$@j#9*F!,4R#EhcD1Ljp9+D +HW;P&+Wq^D5BkM+$G`k7R1Qj +_%P!4[5P!4[&L`hjSOogeh>q^D5BkM+$H'1@S1L$#+LaJ9KL]WATP"_#?P'(%`G@bK$BQSQ`5* +@]T@ps1`@q]F`CO7^YASGdjFEP"Ur=G@bK$BQS;DfTEP +5'(4PEb1C7Ou%NL8989ZEb0Z^%[&V$CghC,Ec6.E@q0R&@q0SC@Yb;QWJChC9Th2PL^0)8HXh( +T+EqC2B4uC5L]ET2P&,>RBkM+$H6?^+Ch$sgARfM=!JUnhP%p.>LbY&jP!4[VP%odSOpR9ZCgh +C,Ec6/X!/L`5s,r/#H$tiT06_Fk+DbJ-FE2;DL]ET2LbY'/CghC,Ec6/X!Kp*=!Ko6KE]5+bAS +GdjFErZBP"UsSG@bK$BQSMB@ps1`@q]F`CQ\^BE\S\\ASGdjFEo!LL]ilWL]`g>P"UsSOo^:D@ +?PAg3%oJr16Oha1Qj_R0p5Ft5):qVC5;qS$'G[4@<6O2Dg.!=L]`J5P)#3G@raLNG@bK$BQSKT +!0U!M#WWnP'AX!@9I.1#Ve%k1,1L>16)Vq2)-g@0f(PE#Ve.k0etI>16)Vq2)-j@1,:SE#Ve.k1,1O>16)Vp1 +,L^@0f(SF#Vn1l1,1O>0ocMo1,La@1,:VF#Vn+l1,1O>0ocMo2)-g@1,:VF#Ve1k1,1R>16)Vp +1G^a@1,:VF#Vn4l1,1R>0ocMo1G^d@1GLYF#Ve%k0etL>16)Vq1,La@1GLVE#Ve%k1,1R>16)V +q2)-g@1GLVE#Ve.k0etO>16)Vq1G^a@1GLVE#Ve(k0etO>16)Vq0f:[@1GLVE#Ve4l1,1L>0oc +Mo1c$mA0f(PE#Ve(l1,1L>0ocMo2)6mA0f(PE#Ve1l1,1O>0ocMo1GggA0f(PE#Ve+l1,1O>0o +cMo0fCaA0f(PE#Ve4l0etL>0ocMo2DHsA1GLVE#Ve.l0etL>0ocMo1c$mA1GLVE#Ve(l0etL>0 +ocMo1,UgA1GLVE#Ve1l0etO>0ocMo1GggA1GLVE#Ve%l0etO>0ocMo0ekI=0f(\I#W"1i1GLU? +1QD_u0ekI=0f(PE#Vn+h1,:R?1l_hu0ekF=0f(SF#Vn+h1GLX?1l_hu0ekI=1,:VF#Ve%g0f(O +?23%qu0ekC=0f(VG#W4=k0f(O?0ocMo0ekF=1,:_I#W"1i1,:U?1QD_u0ekF=1,:SE#Ve%g1GL +[?23%qu0ekI=1GL\G#W4=k1GL[?0ocMp0ekC=1,:\H#W+7j0f(R?16)Vq0ekF=1GL_H#W+7j1, +:X?16)Vp0ekC=1GLbI#W"1i0f(U?1QD_u0ekC=1GLVE#Ve(h1GLU?1l_ht1,1R>0f(SF#Vn+i1 +GLU?1QD_t0etO>0f(PE#Vn.i1,:R?1QD_t1,1O>0f(PE#Ve%h1,:R?1l_hs1,1R>1,:YG#W+:k +1GLX?0ocMo0etO>1,:\H#W"1j1GLX?16)Vp1,1L>0f(YH#W"4j0f(O?16)Vp1,1O>1,:\H#W"4 +j1,:U?16)Vp1,1R>1GL_H#W"4j1GL[?16)Vq0etO>1GL\G#W+7k1GL[?0ocMp1,1L>1,:YG#W+ +:k0f(R?0ocMo0etI>1,:\H#Vn.i1,:X?1QD_t1,1O>1GLVE#Ve%h1,:X?1l_ht0etL>1GLYF#V +e(h0f(U?1l_ht1,1L>1GLYF#Vn+i0f(U?1QD_t0etI>1GLVE#Ve+i1GLU?1QD_s1GL[?0f(PE# +Vn.j1GLU?16)Vp0f(U?0f(VG#W"1k1GLU?0ocMp1GLX?0f(SF#Ve(i1,:R?1QD_r1GL[?1,:VF +#Ve(i1GLX?1QD_s1,:X?1,:SE#Vn+j1GLX?16)Vp1GLU?0f(VG#W"7k0f(O?0ocMo1GLX?1,:Y +G#W"7k1,:U?0ocMo0f(O?0f(VG#Ve+i1GL[?1QD_s1GL[?1GLVE#Ve%i1,:U?1QD_r1,:X?1GL +YF#Ve%i1GL[?1QD_s0f(U?1GLVE#Vn1j0f(R?16)Vp1,:R?1,:YG#Vn1j1,:X?16)Vp1,:U?1G +L\G#W"4k1,:X?0ocMp0f(R?1GLYF#Ve+i0f(U?1QD_s1GLU?1GLVE#Vn.j0f(U?16)Vp0f(O?1 +GL\G#W"1k0f(U?0ocMo1bgd@0f(SF#Vn1k1GLU?0ocMo1,C^@0f(SF#Vn+k1GLU?0ocMp1bga@ +0f(PE#Ve+j1,:R?16)Vq1bgd@1,:SE#Ve+j1GLX?16)Vp0f1X@0f(SF#Vn.k1GLX?0ocMo0f1[ +@1,:VF#Ve.j0f(O?16)Vp1bga@1,:VF#Ve(j0f(O?16)Vp1bgd@1GLYF#Ve(j1,:U?16)Vq1GU +a@1GLVE#Ve(j1GL[?16)Vq0f1[@1GLVE#Vn4k0f(R?0ocMo1GU[@1,:VF#Vn4k1,:X?0ocMo1G +U^@1GLYF#Ve%j0f(R?16)Vq1,C[@1GLVE#Ve%j1,:X?16)Vp1bg^@1GLYF#Vn1k0f(U?0ocMo1 +,CX@1GLYF#Vn+k0f(U?0ocMo2)-mA0f(PE#Ve+k1GLU?0ocMo1bpgA0f(PE#Ve.k1GLX?0ocMo +1,LaA0f(PE#Ve(k1GLX?0ocMo2)-gA0f(PE#Ve1k1,:U?0ocMo1G^aA0f(PE#Ve1k1GL[?0ocM +o1G^dA1,:SE#Ve%k0f(O?0ocMo1G^gA1GLVE#Ve%k1,:U?0ocMo1bpdA1,:SE#Ve.k1,:X?0oc +Mo1,L^A1,:SE#Ve(k1,:X?0ocMo2)-gA1GLVE#Ve+k0f(U?0ocMo0f:[A1GLVE#Ve%g1bg^@1l +_ht0ekL>0f(SF#Vn+h1GU[@1QD_t0ekI>0f(PE#Vn+h1bga@1QD_t0ekL>1,:SE#Ve%g1,CX@1 +l_ht0ekF>0f(SF#Ve%g1GU^@1l_ht0ekI>1,:VF#Ve%g1bgd@1l_ht0ekL>1GLYF#Vn+h0f1U@ +1QD_t0ekC>0f(PE#Vn+h1,C[@1QD_t0ekF>1,:SE#Vn+h1GUa@1QD_t0ekI>1GLVE#Ve%g0f1X +@1l_ht0ekC>1,:VF#Ve%g1,C^@1l_ht0ekF>1GLYF#Vn+h0f1[@1QD_t0ekC>1GLVE#Ve(h1bg +^@1QD_s1,1U?0f(PE#Vn+i1bg^@16)Vq1,1R?0f(SF#Ve%h1GU[@1QD_r1,1U?1,:VF#Ve%h1b +ga@1QD_s0etR?1,:SE#Ve(h1,CX@1QD_s1,1O?0f(PE#Ve(h1GU^@1QD_s1,1R?1,:SE#Ve(h1 +bgd@1QD_s1,1U?1GLVE#Vn+i1bgd@16)Vq1,1L?0f(SF#Ve%h0f1U@1QD_r1,1O?1,:VF#Ve%h +1,C[@1QD_r1,1R?1GLYF#Ve%h1GUa@1QD_s0etO?1GLVE#Ve(h0f1X@1QD_s1,1L?1,:SE#Ve( +h1,C^@1QD_s1,1O?1GLVE#Vn+i1,C^@16)Vq1,1L?1GLYF#Ve%h0f1[@1QD_s0etI?1GLVE#Ve ++i1bg^@16)Vq1,:[@0f(PE#Ve%i1bg^@16)Vq1GL[@0f(PE#Ve(i1GU[@16)Vq1GL^@1,:SE#V +e(i1bga@16)Vq0f(X@1,:SE#Ve+i1,CX@16)Vp1GL[@1,:VF#Ve%i1,CX@16)Vp1GL^@1GLYF# +Ve%i1GU^@16)Vq1,:[@1GLVE#Ve%i1bgd@16)Vq1GLU@0f(PE#Ve(i0f1U@16)Vq1GLX@1,:SE +#Ve(i1,C[@16)Vq1GL[@1GLVE#Ve(i1GUa@16)Vq0f(U@1GLVE#Ve+i0f1X@16)Vp1GLX@1GLY +F#Ve%i0f1X@16)Vq1,:U@1GLVE#Ve%i1,C^@16)Vq1GLU@1GLVE#Ve(i0f1[@16)Vq0f(O@1GL +VE#Ve.j1bg^@0ocMo1,CaA0f(PE#Ve+j1GU[@0ocMo1GUdA1,:SE#Ve%j1GU[@0ocMo1bgaA0f +(PE#Ve.j1GU^@0ocMo1,C[A0f(PE#Ve.j1bgd@0ocMo1,C^A1,:SE#Ve(j1bgd@0ocMo1GU[A0 +f(PE#Ve+j1,C[@0ocMo0f1UA0f(PE#Ve+j1GUa@0ocMo0f1XA1,:SE#Ve%j1GUa@0ocMo1bg^A +1,:SE#Ve.j1,C^@0ocMo1,CXA1,:SE#Ve(j1,C^@0ocMo1GU[A1GLVE#Ve%j0f1[@0ocMo0ekO +?0f(VG#W"1i2)-gA0ocMp0ekL?0f(SF#Vn+h2)-jA16)Vp0ekI?0f(VG#W"1i1G^aA0ocMo0ek +L?1,:YG#W"1i1bpgA0ocMo0ekO?1GL\G#W"1i2)-mA0ocMp0ekF?0f(SF#Vn+h1G^dA16)Vq0e +kL?1GLYF#Ve%g0f:[A1QD_s0ekC?0f(PE#Ve%g1,LaA1QD_s0ekF?1,:SE#Ve%g1G^gA1QD_s0 +ekI?1GLVE#Vn+h0f:^A16)Vq0ekF?1GLYF#Ve(h2)-gA16)Vq0etU@0f(PE#Vn.i1bpdA0ocMo +0etR@0f(SF#Vn.i2)-jA0ocMo0etU@1,:VF#Ve(h1G^aA16)Vp1,1U@1,:VF#Ve(h2)-mA16)V +q0etU@1GLVE#Vn.i1,L^A0ocMo0etL@0f(SF#Vn.i1G^dA0ocMo0etO@1,:VF#Vn.i1bpjA0oc +Mo0etR@1GLYF#Ve(h0f:[A16)Vp1,1O@1,:VF#Ve(h1G^gA16)Vq0etO@1GLVE#Vn.i0f:^A0o +cMo0etI@1,:VF#Vn.i1,LdA0ocMo0etL@1GLYF#Ve+i2)-gA0ocMo1,:[A0f(PE#Ve(i2)-jA0 +ocMo1GL[A0f(PE#Ve+i1bpgA0ocMo0f(UA0f(PE#Ve+i2)-mA0ocMo0f(XA1,:SE#Ve(i1,L^A +0ocMo1,:XA1,:SE#Ve(i1bpjA0ocMo1GLUA0f(PE#Ve+i1,LaA0ocMo0f(OA0f(PE#Ve+i1G^g +A0ocMo0f(RA1,:SE#Ve%i1G^gA0ocMo1,:RA1,:SE#Ve(i1,LdA0ocMo0ekR@0f(SF#Vn+h2)6 +mB0ocMp0ekR@1,:SE#Ve%g1c$jB16)Vp0ekO@1,:VF#Ve%g2DI!B16)Vq0ekI@0f(PE#Vn+h1c +$mB0ocMp0ekO@1GLVE#Ve%g1,UdB16)Vp0ekI@1,:VF#Ve%g1c$pB16)Vq0ekC@0f(PE#Vn+h1 +,UgB0ocMp0ekI@1GLVE#Ve(h2DHpB0ocMo0etUA0f(PE#Ve(h1c$jB0ocMo1,1XA1,:SE#Ve(h +2DI!B0ocMo0etOA0f(PE#Ve%h1c$mB0ocMo0etUA1GLVE#Ve(h1,UdB0ocMo1,1RA1,:SE#Ve( +h1c$pB0ocMo0etIA0f(PE#Ve%h1,UgB0ocMo0etOA1GLVE#Ve%g0ekF>2NA&!0ekC;1,CbI#W4 +=k0ekF>16)Vq0ekC;1GUhJ#W+7j0ekI>1QD`!0ekC;1GU\F#Ve%g0ekL>2NA&!0ekC;1bghI#W +4=k0ekL>16)Vr0etI<0f1\H#W4=l0ekC>0ocMo1,1L<1,CeJ#W"4j0ekF>1QD_u1,1L<1,CYF# +Vn+i0ekF>1l_hu0etI<1,C\G#Vn.i0ekI>1l_hu1,1L<1GU_G#Ve%h0ekI>23%qu0etI<1GUbH +#W4=l0ekI>0ocMo1,1L<1bgkJ#W"4j0ekL>1QD_u1,1L<1bg_F#Vn+i0ekL>1l_hu0etI<1bgb +G#Ve(i0ekC>1l_h t1,:R =0f1Y G#Vn+ j0 ekC >1QD_t 0f(O=0f +1VF#Ve+i0ekF>1l _ht 1GLU= 1,C\G #V n.j 0ek F>1Q +D_t1,:R=1,CYF#V e%i0e kF >1l_h t0f( O= 1,C \G#Vn 1j0 ekI>1 QD_t +1GLU=1GU\F#Ve(i 0ekI> 1l_ ht1 ,:R= 1G U_G #Vn+j0 ek I>1QD_ t0f +(O=1GU\F#Ve+i0e kL>1l _ht 1GL U =1b gbG #Vn .j0ekL >1 QD_t1, :R= +1bg_F#Ve%i0ekL> 1l_ht 0f( O=1 bg bG #Ve +j0 ekC>1Q D_ s1GU[> 0f1 +VF#Vn.k0ekC>16) Vp0f 1U> 0f 1\ H#W "1l 0ek C>0o +cMo1bg^>1,C_H#W ":l0 e kF >0 ocM p1G U[>1 ,C\G# +Ve(j0ekF>1QD_s1 ,CX>1, CYF # Vn+ k0 ekF> 16) Vq1bg^>1GU _G#Ve+j0ekI +>1QD_s1GU[>1GU\ F#Vn.k 0ek I >16) Vp0f 1U> 1GUbH#W"1l 0ekI>0ocMo1 +bg^>1bgeH#W":l0 ekL>0o cMp 1GU[ >1bg bG# Ve(j0ekL>1 QD_s1,CX>1b +g_F#Vn+k0ekL>16 )Vp1b pd?0 f1YG# Vn1l 0ek C>0ocMo1,L ^?0f1YG#Vn+ +l0ekC>0ocMo2)-g ?1,C\ G#Vn4 l0ekF >0o cMo1G^a?1, C\G#Vn.l0ek +F>0ocMo0f:[?1,C \G#Vn7l 0ekI>0 ocMo1 bpd ?1GU_G#Vn1 l0ekI>0ocMo +1,L^?1GU_G#Vn+l0ekI>0ocMo2)-g?1bgbG#Vn4l0ekL>0ocMo1G^a?1bgbG#Vn.l0ekL>0ocM +o0f:[?1bgbG#Ve1l0ekC>0ocMo1Ggg@0f1VF#Ve%l0ekC>0ocMo2DHp@1,CYF#Ve.l0ekF>0oc +Mo1,Ud@1,CYF#Ve1l0ekI>0ocMo1Ggg@1GU\F#Ve%l0ekI>0ocMo2DHp@1bg_F#Ve.l0ekL>0o +cMo1,Ud@1bg_F#Vn+h1,1L?1l_hu0ekF<0f1YG#Ve%g0etI?23%qu0ekC<0f1\H#W4=k0etI?0 +ocMo0ekF<1,CeJ#W"1i1,1O?1QD_u0ekF<1,CYF#Vn+h0etL?1l_hu0ekC<1,C\G#Vn+h1,1R? +1l_hu0ekF<1GU_G#Ve%g0etO?23%qu0ekC<1GUbH#W4=k0etO?0ocMo0ekF<1bgkJ#W"1i1,1U +?1QD_u0ekF<1bg_F#Vn+h0etR?1l_hu0ekC<1bgbG#Vn.i1,1L?1QD_t1,1O=0f1VF#Ve%h1,1 +L?1l_ht0etL=0f1YG#Ve(h0etI?1l_ht1,1L=0f1YG#Ve(h1,1O?1l_ht1,1O=1,C\G#Vn+i1, +1O?1QD_t0etL=1,CYF#Vn.i0etL?1QD_t1,1L=1,CYF#Ve%h0etL?1l_hs1,1O=1GUbH#W+:k1 +,1R?0ocMo0etL=1GUeI#W"1j1,1R?16)Vp1,1L=1GUeI#W"4j0etO?16)Vp1,1O=1bghI#W"4j +1,1U?16)Vq0etL=1bgeH#W+7k1,1U?0ocMp1,1L=1bgeH#W+:k0etR?0ocMo0etI=1bghI#W"1 +j0etR?16)Vq1GLX>0f1YG#Ve(i1,1L?1QD_s1,:U>0f1VF#Vn+j1,1L?16)Vp1GLU>0f1\H#W" +7k0etI?0ocMo1GLX>1,C_H#W"7k1,1O?0ocMo0f(O>0f1\H#Vn.j1,1O?16)Vp0f(R>1,C_H#W +"1k1,1O?0ocMp1GLU>1,C\G#Ve(i0etL?1QD_r1GLX>1GU_G#Ve(i1,1R?1QD_s1,:U>1GU\F# +Vn+j1,1R?16)Vp1GLU>1GUbH#W"7k0etO?0ocMo1GLX>1bgeH#W"7k1,1U?0ocMo0f(O>1GUbH +#Vn.j1,1U?16)Vp0f(R>1bgeH#W"1k1,1U?0ocMp1GLU>1bgbG#Ve(i0etR?1QD_s1,:R>1bg_ +F#Vn+j0etR?16)Vq1bga?0f1VF#Ve+j1,1L?16)Vq1,C[?0f1VF#Ve%j1,1L?16)Vp1bg^?0f1 +YG#Ve.j1,1O?16)Vp1,CX?0f1YG#Vn1k1,1O?0ocMo1,C[?1,C\G#Vn+k1,1O?0ocMp1bg^?1, +CYF#Ve+j0etL?16)Vq1bga?1GU\F#Ve+j1,1R?16)Vp0f1U?1,C\G#Vn.k1,1R?0ocMo0f1X?1 +GU_G#Ve.j0etO?16)Vp1bga?1bgbG#Ve(j0etO?16)Vq1GU^?1bg_F#Ve(j1,1U?16)Vq0f1X? +1bg_F#Vn4k0etR?0ocMo1GU[?1bgbG#Vn.k0etR?0ocMo0f1U?1bgbG#Ve.k1,1L?0ocMo1,La +@0f1VF#Ve1k0etI?0ocMo2)-j@1,CYF#Ve+k0etI?0ocMo1G^d@1,CYF#Ve%k0etI?0ocMo0f: +^@1,CYF#Ve.k0etL?0ocMo1bpg@1GU\F#Ve(k0etL?0ocMo1,La@1GU\F#Ve1k0etO?0ocMo2) +-j@1bg_F#Ve+k0etO?0ocMo1G^d@1bg_F#Ve%k0etO?0ocMo0f:^@1bg_F#Ve.k0etR?0ocMo1 +,L^@1bg_F#Vn+h1GLU@1QD_t0ekI=0f1VF#Ve%g1,:R@1l_ht0ekF=0f1YG#Ve%g1GLX@1l_ht +0ekI=1,C\G#Vn+h0f(O@1QD_t0ekC=0f1VF#Vn+h1,:U@1QD_t0ekF=1,CYF#Vn+h1GL[@1QD_ +t0ekI=1GU\F#Ve%g0f(R@1l_ht0ekC=1,C\G#Ve%g1,:X@1l_ht0ekF=1GU_G#Ve%g1GL^@1l_ +ht0ekI=1bgbG#Vn+h0f(U@1QD_t0ekC=1GU\F#Vn+h1,:[@1QD_t0ekF=1bg_F#Ve%g0f(X@1l +_ht0ekC=1bgbG#Vn.i1GLU@16)Vp0etO>0f1\H#W"1j1GLU@0ocMo1,1O>0f1\H#W"4j1,:R@0 +ocMo1,1R>1,C_H#W"4j1GLX@0ocMp0etO>1,C\G#Vn.i0f(O@16)Vp0etI>0f1\H#Vn.i1,:U@ +16)Vp0etL>1,C_H#Vn.i1GL[@16)Vp0etO>1GUbH#W"1j1GL[@0ocMo1,1L>1,C_H#W"4j0f(R +@0ocMo1,1O>1GUbH#W"4j1,:X@0ocMo1,1R>1bgeH#W"4j1GL^@0ocMp0etO>1bgbG#Vn.i0f( +U@16)Vp0etI>1GUbH#Vn.i1,:[@16)Vp0etL>1bgeH#W"1j1,:[@0ocMo1,1L>1bgeH#W"4j0f +(X@0ocMp0etI>1bgbG#Vn1j1GLU@0ocMo1,:X?0f1YG#Vn+j1GLU@0ocMo1GLX?0f1YG#Ve+i1 +GLX@16)Vp0f(R?0f1YG#Vn.j1GLX@0ocMo0f(U?1,C\G#Vn1j0f(O@0ocMo1,:R?0f1YG#Vn1j +1,:U@0ocMo1,:U?1,C\G#Vn1j1GL[@0ocMo1,:X?1GU_G#Vn+j1GL[@0ocMo1GLU?1,C\G#Ve+ +i1,:X@16)Vp0f(O?1,C\G#Ve+i1GL^@16)Vp0f(R?1GU_G#Vn.j1GL^@0ocMo0f(U?1bgbG#Vn +1j0f(U@0ocMo1,:R?1GU_G#Vn1j1,:[@0ocMo1,:U?1bgbG#Vn+j1,:[@0ocMo1GLU?1bgbG#V +n.j0f(X@0ocMo0f(O?1bgbG#Ve+j1GLU@0ocMo0f1[@0f1VF#Ve.j1,:R@0ocMo1bgd@1,CYF# +Ve(j1,:R@0ocMo1,C^@1,CYF#Ve+j0f(O@0ocMo1GU^@1,CYF#Ve%j0f(O@0ocMo1GUa@1GU\F +#Ve%j1,:U@0ocMo0f1[@1GU\F#Ve.j0f(R@0ocMo1bga@1GU\F#Ve(j0f(R@0ocMo1bgd@1bg_ +F#Ve(j1,:X@0ocMo1,C^@1bg_F#Ve+j0f(U@0ocMo1GU^@1bg_F#Ve%j0f(U@0ocMo0f1X@1bg +_F#Ve.j0f(X@0ocMo1,CX@1bg_F#Vn+h1bg^A16)Vp0ekI>0f1\H#W"1i1GU[A0ocMo0ekL>1, +C_H#W"1i1bgaA0ocMp0ekF>0f1YG#Vn+h1GU^A16)Vq0ekL>1GU_G#Ve%g0f1UA1QD_s0ekC>0 +f1VF#Ve%g1,C[A1QD_s0ekF>1,CYF#Ve%g1GUaA1QD_s0ekI>1GU\F#Ve%g1bggA1QD_s0ekL> +1bg_F#Vn+h0f1XA16)Vq0ekF>1GU_G#Vn+h1GUdA16)Vp0ekC>1GUbH#W"1i0f1[A0ocMo0ekF +>1bgeH#W"1i1,CaA0ocMp1,1U?0f1VF#Ve%h1bg^A16)Vp1,1R?0f1YG#Ve(h1bgaA16)Vq0et +R?1,CYF#Vn.i1,CXA0ocMo0etL?0f1YG#Vn.i1GU^A0ocMo0etO?1,C\G#Vn.i1bgdA0ocMo0e +tR?1GU_G#Ve(h0f1UA16)Vp1,1O?1,C\G#Ve(h1GUaA16)Vp1,1U?1bgbG#Vn+i1bggA0ocMp1 +,1L?1,CYF#Ve%h0f1XA16)Vq1,1O?1GU\F#Ve%h1,C^A16)Vq1,1R?1bg_F#Ve%h1GUdA16)Vp +1,1L?1GU_G#Ve(h1,CaA16)Vq0etL?1bg_F#Ve(i1bg^A0ocMo1GL[@0f1VF#Ve+i1bgaA0ocM +o0f(U@0f1VF#Ve%i1bgaA0ocMo1,:U@0f1VF#Ve(i1GU^A0ocMo1,:[@1GU\F#Ve+i0f1UA0oc +Mo1GLX@1,CYF#Ve%i0f1UA0ocMo1GL[@1GU\F#Ve%i1,C[A0ocMo1GL^@1bg_F#Ve%i1GUaA0o +cMo0f(X@1bg_F#Ve(i0f1XA0ocMo1,:U@1GU\F#Ve(i1GUdA0ocMo1GLU@1GU\F#Ve+i1,CaA0 +ocMo0f(O@1GU\F#Ve%i1,CaA0ocMp0ekO?0f1VF#Ve%g1bpdB16)Vp0ekO?1,C\G#Vn+h1G^aB +0ocMp0ekL?1,CYF#Vn+h2)-mB0ocMo0ekF?0f1YG#Ve%g1G^dB16)Vp0ekL?1GU_G#Ve%g2)-p +B16)Vq0ekC?0f1VF#Vn+h1,LaB0ocMp0ekI?1GU\F#Vn+h1bpmB0ocMo0ekC?1,C\G#Ve%g1,L +dB16)Vp0ekI?1bgbG#Ve%h2)-gB0ocMo1,1U@0f1VF#Ve(h2)-jB0ocMo0etO@0f1VF#Ve%h1b +pgB0ocMo0etU@1GU\F#Ve(h1,L^B0ocMo1,1R@1,CYF#Ve(h1bpjB0ocMo1,1X@1bg_F#Ve%h0 +f:[B0ocMo0etL@1,CYF#Ve%h1G^gB0ocMo0etR@1bg_F#Ve(h0f:^B0ocMo1,1O@1GU\F#Ve(h +1G^jB0ocMo0ekO@0f1VF#Ve%g2DHsC0ocMo0ekI@0f1VF#Ve%g1c$mC0ocMo0ekO@1GU\F#Ve% +g2DI$C0ocMo0ekC@0f1VF#Ve%g1,UgC0ocMo0ekI@1GU\F#Ve%g1c$sC0ocMp0ekC;1,LhJ#W+ +7j0ekF?16)Vp0ekC;1G^nK#W"1i0ekI?1QD_u0ekC;1G^bG#Vn+h0ekL?1l_hu0ekC;1bphH#V +e%g0ekO?23%qu0ekC;2)-nI#W4=k0ekO?0ocMp0etI<0f:bI#W+7k0ekC?0ocMp1,1L<1,LeI# +W+:k0ekF?0ocMo0etI<1,LhJ#W"1j0ekF?16)Vp1,1L<1G^kJ#W"4j0ekI?16)Vq0etI<1G^hI +#W+7k0ekI?0ocMp1,1L<1bpkI#W+:k0ekL?0ocMo0etI<1bpnJ#W"1j0ekL?16)Vp1,1L<2)-q +J#W"4j0ekO?16)Vq0etI<2)-nI#W+7k0ekO?0ocMp1,:R=0f:_H#Ve%i0ekC?1QD_s0f(O=0f: +\G#Vn1j0ekF?16)Vp1,:R=1,LeI#W"4k0ekF?0ocMp0f(O=1,LbH#Ve+i0ekI?1QD_s1GLU=1G +^bG#Vn.j0ekI?16)Vp0f(O=1G^hI#W"1k0ekI?0ocMp1GLU=1bphH#Ve(i0ekL?1QD_s1,:R=1 +bpeG#Vn+j0ekL?16)Vp1GLU=2)-nI#W"7k0ekO?0ocMp1,:R=2)-kH#Ve%i0ekO?1QD_s0f(O= +2)-hG#Vn1k0ekC?0ocMo1,CX>0f:_H#Vn+k0ekC?0ocMp1bg^>1,L_G#Ve+j0ekF?16)Vq1,CX +>1,L_G#Ve%j0ekF?16)Vp1bg^>1G^eH#Vn1k0ekI?0ocMo1,CX>1G^eH#Vn+k0ekI?0ocMp1bg +^>1bpeG#Ve+j0ekL?16)Vq1,CX>1bpeG#Ve%j0ekL?16)Vp1bg^>2)-kH#Vn1k0ekO?0ocMo1, +CX>2)-kH#Vn+k0ekO?0ocMo1G^a?0f:\G#Ve%k0ekC?0ocMo1bpd?1,L_G#Ve(k0ekF?0ocMo2 +)-g?1G^bG#Ve+k0ekI?0ocMo0f:[?1G^bG#Ve.k0ekL?0ocMo1,L^?1bpeG#Ve1k0ekO?0ocMo +1G^a?2)-hG#Ve%k0ekO?0ocMq0ekF<0f:_H#Vn+h0etI@1QD_t0ekC<0f:\G#Vn+h1,1O@1QD_ +t0ekF<1,L_G#Ve%g0etL@1l_ht0ekC<1,LbH#Ve%g1,1R@1l_ht0ekF<1G^eH#Vn+h0etO@1QD +_t0ekC<1G^bG#Vn+h1,1U@1QD_t0ekF<1bpeG#Ve%g0etR@1l_ht0ekC<1bphH#Ve%g1,1X@1l +_ht0ekF<2)-kH#Vn+h0etU@1QD_t0ekC<2)-hG#Ve(h1,1L@1QD_s1,1O=0f:\G#Vn+i1,1L@1 +6)Vq1,1L=0f:_H#Ve%h0etI@1QD_r1,1O=1,LbH#Ve%h1,1O@1QD_s0etL=1,L_G#Ve(h0etL@ +1QD_s1,1L=1,L_G#Ve(h1,1R@1QD_s1,1O=1G^bG#Vn+i1,1R@16)Vq1,1L=1G^eH#Ve%h0etO +@1QD_r1,1O=1bphH#Ve%h1,1U@1QD_s0etL=1bpeG#Ve(h0etR@1QD_s1,1L=1bpeG#Ve(h1,1 +X@1QD_s1,1O=2)-hG#Vn+i1,1X@16)Vq1,1L=2)-kH#Ve%h0etU@1QD_s0etI=2)-hG#Ve+i1, +1L@16)Vq1,:U>0f:\G#Ve%i1,1L@16)Vq1GLU>0f:\G#Ve(i0etI@16)Vq1GLX>1,L_G#Ve(i1 +,1O@16)Vq0f(R>1,L_G#Ve+i0etL@16)Vp1GLX>1G^eH#Ve%i0etL@16)Vq1,:U>1G^bG#Ve%i +1,1R@16)Vq1GLU>1G^bG#Ve(i0etO@16)Vq1GLX>1bpeG#Ve(i1,1U@16)Vq0f(R>1bpeG#Ve+ +i0etR@16)Vp1GLX>2)-kH#Ve%i0etR@16)Vq1,:U>2)-hG#Ve%i1,1X@16)Vq1GLU>2)-hG#Ve +(i0etU@16)Vq0f(O>2)-hG#Ve.j1,1L@0ocMo1,C[?0f:\G#Ve+j0etI@0ocMo1GU^?1,L_G#V +e%j0etI@0ocMo0f1X?1,L_G#Ve.j0etL@0ocMo1bga?1G^bG#Ve(j0etL@0ocMo1,C[?1G^bG# +Ve+j0etO@0ocMo1GU^?1bpeG#Ve%j0etO@0ocMo0f1X?1bpeG#Ve.j0etR@0ocMo1bga?2)-hG +#Ve(j0etR@0ocMo1,C[?2)-hG#Ve+j0etU@0ocMo0f1U?2)-hG#Ve%g1GLUA1QD_s0ekI=0f:\ +G#Vn+h1,:RA16)Vq0ekI=1,LbH#Ve%g0f(OA1QD_s0ekC=0f:\G#Ve%g1,:UA1QD_s0ekF=1,L +_G#Ve%g1GL[A1QD_s0ekI=1G^bG#Vn+h0f(RA16)Vq0ekF=1G^eH#Vn+h1GL^A16)Vp0ekC=1G +^hI#W"1i0f(UA0ocMo0ekF=1bpkI#W"1i1,:[A0ocMo0ekI=2)-nI#W"1i1GLaA0ocMp0ekC=1 +bphH#Vn+h1,:^A16)Vp1,1R>0f:_H#Vn+i1GLUA0ocMp1,1O>0f:\G#Ve%h1,:RA16)Vq1,1R> +1,L_G#Ve%h1GLXA16)Vp1,1L>0f:_H#Ve(h1,:UA16)Vp1,1R>1G^eH#Vn+i1GL[A0ocMp1,1L +>1,L_G#Ve%h0f(RA16)Vq1,1O>1G^bG#Ve%h1,:XA16)Vq1,1R>1bpeG#Ve%h1GL^A16)Vp1,1 +L>1G^eH#Ve(h1,:[A16)Vp1,1R>2)-kH#Vn+i1GLaA0ocMp1,1L>1bpeG#Ve%h0f(XA16)Vq1, +1O>2)-hG#Ve%h1,:^A16)Vp1GL[?0f:\G#Ve%i1GLUA0ocMo1,:U?0f:\G#Ve(i1GLXA0ocMo1 +GLU?0f:\G#Ve+i1,:UA0ocMo0f(O?0f:\G#Ve+i1GL[A0ocMo0f(R?1,L_G#Ve%i1GL[A0ocMo +1,:R?1,L_G#Ve(i1,:XA0ocMo1,:X?1bpeG#Ve+i0f(UA0ocMo1GLX?1bpeG#Ve%i0f(UA0ocM +o1GL[?2)-hG#Ve%i1,:[A0ocMo0f(U?2)-hG#Ve(i0f(XA0ocMo1,:U?2)-hG#Ve%g1bg^B16) +Vq0ekI>0f:\G#Vn+h1bgaB0ocMo0ekF>0f:_H#Ve%g1GU^B16)Vp0ekL>1G^eH#Vn+h0f1UB0o +cMp0ekF>1,L_G#Vn+h1GUaB0ocMp0ekL>1bpeG#Ve%g0f1XB16)Vp0ekF>1G^eH#Ve%g1GUdB1 +6)Vp0ekL>2)-kH#Vn+h0f1[B0ocMp0ekF>1bpeG#Vn+h1GUgB0ocMo1,1U?0f:\G#Ve%h1GU[B +0ocMo0etR?1,L_G#Ve(h1,CXB0ocMo1,1R?1,L_G#Ve(h1bgdB0ocMo0etI?0f:\G#Ve%h1,C[ +B0ocMo0etO?1G^bG#Ve%h1bggB0ocMo1,1L?1,L_G#Ve(h1,C^B0ocMo1,1R?1bpeG#Ve(h1bg +jB0ocMo0etI?1G^bG#Ve%h1,CaB0ocMo0etO?2)-hG#Ve%g2)-gC0ocMo0ekI?0f:\G#Ve%g1b +pgC0ocMo0ekO?1G^bG#Ve%g0f:[C0ocMo0ekF?1,L_G#Ve%g1G^gC0ocMo0ekL?1bpeG#Ve%g2 +)-sC0ocMo0ekC;1,UnK#W"1i0ekF@16)Vq0ekC;1GgnJ#W+7j0ekI@0ocMo0ekC;1c$tK#W"1i +0ekL@16)Vq0ekC;2)6tJ#W+7j0ekO@0ocMo0ekC;2DI%K#W"1i0ekR@16)Vr0etI<0fCbH#Ve( +h0ekF@1QD_s1,1L<1,UeH#Vn+i0ekF@16)Vq1,1L<1GgkI#Ve%h0ekI@1QD_s0etI<1GghH#Ve +(h0ekL@1QD_s1,1L<1c$kH#Vn+i0ekL@16)Vq1,1L<2)6qI#Ve%h0ekO@1QD_s0etI<2)6nH#V +e(h0ekR@1QD_s1,1L<2DHqH#Vn+i0ekR@16)Vp1,:R=0fCeI#Vn+j0ekC@0ocMo1GLU=1,UhI# +Vn.j0ekF@0ocMo0f(O=1,UhI#Vn1j0ekI@0ocMo1,:R=1GgkI#Vn+j0ekI@0ocMo1GLU=1c$nI +#Vn.j0ekL@0ocMo0f(O=1c$nI#Vn1j0ekO@0ocMo1,:R=2)6qI#Vn+j0ekO@0ocMo1GLU=2DHt +I#Vn.j0ekR@0ocMo0f(O=2DHtI#Ve+j0ekC@0ocMo0f1U>0fCbH#Ve.j0ekF@0ocMo1,CX>1,U +eH#Ve+j0ekI@0ocMo0f1U>1GghH#Ve.j0ekL@0ocMo1,CX>1c$kH#Ve+j0ekO@0ocMo0f1U>2) +6nH#Ve.j0ekR@0ocMo1,CX>2DHqH#Vn+h1,1LA16)Vp0ekC<0fChJ#W"1i0etIA0ocMo0ekF<1 +,UkJ#W"1i1,1OA0ocMp0ekC<1,UhI#Vn+h1,1RA16)Vp0ekC<1GgnJ#W"1i0etOA0ocMo0ekF< +1c$qJ#W"1i1,1UA0ocMp0ekC<1c$nI#Vn+h1,1XA16)Vp0ekC<2)6tJ#W"1i0etUA0ocMo0ekF +<2DI"J#W"1i1,1[A0ocMp1,1O=0fCbH#Ve%h1,1LA16)Vp1,1L=0fCeI#Ve(h1,1OA16)Vq0et +L=1,UeH#Vn.i0etLA0ocMo0etI=1,UhI#Vn.i1,1RA0ocMo0etL=1GgkI#Ve(h0etOA16)Vp1, +1O=1c$nI#Vn+i1,1UA0ocMp1,1L=1c$kH#Ve%h0etRA16)Vq1,1O=2)6nH#Ve%h1,1XA16)Vp1 +,1L=2)6qI#Ve(h1,1[A16)Vq0etL=2DHqH#Ve(i1,1LA0ocMo1GLU>0fCbH#Ve+i1,1OA0ocMo +0f(O>0fCbH#Ve%i1,1OA0ocMq1,1O=0ekPG#W4@l1,1L<1QD_r0etL=0ekSH#W+7k1,1L<1l_i +"0etL=0ekGD#Vn.i0etI<2NA&"1,1L=0ekMF#W"1j0etI<23%r"0etI=0ekJE#Ve+i1,1L<2NA +&!1GLX>0ekMF#Vn.j1,1L<23%r!1,:U>0ekJE#Ve%i1,1L<2NA&!0f(R>0ekMF#W4=m1,1L<16 +)Vq1GLU>0ekPG#W+=l0etI<1QD_q1,:R>0ekSH#W"4k0etI<1l_i!1,:R>0ekGD#Vn+j0etI<2 +3%r!0f(O>0ekJE#W=Cn0etI<0ocMo1bga?0ekPG#W":l1,1L<1QD_r1GU^?0ekMF#W+=m1,1L< +16)Vp1,C[?0ekPG#W"4l1,1L<1QD_u1,C[?0ekDC#Vn+k1,1L<1l_hu0f1X?0ekGD#Vn4k0etI +<1l_hr1GU[?0ekPG#W"7l0etI<1QD_r1,CX?0ekMF#W+:m0etI<16)Vp0f1U?0ekPG#W"1l0et +I<1QD_u0f1U?0ekDC#Ve1k1,1L<1l_hs1bpg@0ekJE#Ve+k1,1L<1l_ht1G^d@0ekGD#Vn.l1, +1L<1QD_t1,La@0ekDC#Ve%k1,1L<1l_ht0f:^@0ekGD#Vn7l0etI<1QD_q1bpd@0ekMF#W":m0 +etI<16)Vq1G^a@0ekJE#W+=n0etI<0ocMo1,L^@0ekMF#W"4m0etI<16)Vq0f:[@0ekJE#W+7n +0etI<0ocMo2DHsA0ekJE#Vn7m1,1L<16)Vp1c$mA0ekJE#W":n1,1L<0ocMp1GgjA0ekGD#Ve( +l1,1L<1QD_s1,Ug A0ekD C#Ve1 l0etI <1 QD_ r1c$jA 0ekGD#V +e+l0etI<1QD_s1G ggA 0ekDC #Vn.m 0e tI< 16) Vp0f +CaA0ekJE#W"1n0e tI<0o cM q0ekI =0ek PG #W4 =k1GL U=1 QD_r0 ekF= +0ekSH#W+7j1,:R= 1l_i" 0ek F=0 ekGD #W "1i 0f(O=2 3% r"0ekC =0e +kJE#Ve(h1GLU=2N A&!1, 1R> 0ek M F#W 4@l 1GL U=16)V q0 etO>0e kPG +#W+7k1GLU=1QD`! 0etO> 0ek DC# Vn .i 1,: R=2 3%r!1, 1O >0ekJE #Ve + %h1,:R=2NA&!0e tL>0 ekM F# W4 =l1 ,:R =16 )Vp1 +,1L>0ekSH#W"4j0 f(O= 1 l_ i! 1,1 L>0 ekGD #Vn+i +0f(O=23%r!0etI> 0ekJE# W=C m 0f( O= 0ocM o1G L[?0ekPG#W "7k1GLU=1QD +_r1,:X?0ekMF#W+ :l1GLU =16 ) Vp0f (U?0 ekP G#W"1k1GLU =1QD_u0f(U? +0ekDC#Vn1j1,:R= 1l_hu1 GLX ?0ek GD#V e(i 1,:R=23%qu 1,:U?0ekJE# +W4@m1,:R=0ocMp0 f(R?0 ekMF #W+7l 1,:R =16 )Vp1GLU?0e kPG#W"7k0f( +O=1QD_r1,:R?0ek MF#W+ :l0f( O=16) Vp0 f(O?0ekPG# W"1k0f(O=1Q +D_u0f(O?0ekDC#V e.j1GLU =1l_ht 1bgd@ 0ek GD#Vn1k1GL U=1QD_t1GUa +@0ekDC#Ve(j1GLU=1l_ht1,C^@0ekGD#Vn+k1GLU=1QD_t0f1[@0ekDC#Vn4k1,:R=1QD_q1GU +^@0ekMF#W"7l1,:R=16)Vq1,C[@0ekJE#W+:m1,:R=0ocMo0f1X@0ekMF#W"1l1,:R=16)Vp1b +g^@0ekMF#W":l0f(O=16)Vq1GU[@0ekJE#W+=m0f(O=0ocMo1,CX@0ekMF#W"4l0f(O=16)Vq0 +f1U@0ekJE#W+7m0f(O=0ocMo2)-mA0ekJE#Vn4l1GLU=16)Vp1G^gA0ekJE#W"7m1GLU=0ocMp +1,LdA0ekGD#Vn7l1,:R=16)Vp1bpgA0ekJE#W":m1,:R=0ocMp1G^dA0ekGD#Ve(k1,:R=1QD_ +s1,LaA0ekDC#Vn+l1,:R=16)Vp2)-gA0ekJE#Vn4l0f(O=16)Vp1G^aA0ekJE#W"7m0f(O=0oc +Mp1,L^A0ekGD#Ve%k0f(O=1QD_s0f:[A0ekDC#Ve4l1GLU=16)Vq2)6sB0ekDC#Ve.l1GLU=16 +)Vq1GgmB0ekDC#Ve1l1,:R=16)Vq1c$mB0ekDC#Ve+l1,:R=16)Vq1,UgB0ekDC#Ve4l0f(O=1 +6)Vq2)6mB0ekDC#Ve.l0f(O=16)Vq1GggB0ekDC#Ve(l0f(O=16)Vq0fCaB0ekDC#Ve%g1bg^> +2NA&!0ekL>0ekMF#W4=k1bg^>16)Vq0ekI>0ekPG#W+7j1GU[>1QD`!0ekI>0ekDC#Ve%g1,CX +>2NA&!0ekF>0ekMF#W4=k1,CX>16)Vq0ekC>0ekPG#W+7j0f1U>1QD`!0ekC>0ekDC#Ve(h1bg +^>23%qu1,1U?0ekJE#W4@l1bg^>0ocMp0etR?0ekMF#W+7k1bg^>16)Vq1,1R?0ekMF#W+:k1G +U[>16)Vp0etO?0ekPG#W"1j1GU[>1QD_u0etO?0ekDC#Ve(h1,CX>23%qu1,1O?0ekJE#W4@l1 +,CX>0ocMp0etL?0ekMF#W+7k1,CX>16)Vq1,1L?0ekMF#W+:k0f1U>16)Vp0etI?0ekPG#W"1j +0f1U>1QD_u0etI?0ekDC#Ve+i1bg^>1l_ht1GL^@0ekGD#Vn.j1bg^>1QD_t1,:[@0ekDC#Ve% +i1bg^>1l_ht0f(X@0ekGD#Vn1j1GU[>1QD_t1GL[@0ekDC#Ve(i1GU[>1l_ht1,:X@0ekGD#Vn ++j1GU[>1QD_t0f(U@0ekDC#Ve+i1,CX>1l_ht1GLX@0ekGD#Vn.j1,CX>1QD_t1,:U@0ekDC#V +e%i1,CX>1l_ht0f(R@0ekGD#Vn1j0f1U>1QD_t1GLU@0ekDC#Ve(i0f1U>1l_ht1,:R@0ekGD# +Vn+j0f1U>1QD_t0f(O@0ekDC#Ve.j1bg^>1QD_s1bggA0ekDC#Vn1k1bg^>16)Vp1,CaA0ekJE +#W"4l1bg^>0ocMp1bgdA0ekGD#Ve+j1GU[>1QD_s1GUaA0ekDC#Vn.k1GU[>16)Vp0f1[A0ekJ +E#W"1l1GU[>0ocMo1bgaA0ekJE#W":l1,CX>0ocMp1GU^A0ekGD#Ve(j1,CX>1QD_s1,C[A0ek +DC#Vn+k1,CX>16)Vq1bg^A0ekGD#Ve+j0f1U>1QD_s1GU[A0ekDC#Vn.k0f1U>16)Vp0f1UA0e +kJE#W"1l0f1U>0ocMo2)-pB0ekGD#Vn4l1bg^>0ocMo1G^jB0ekGD#Vn7l1GU[>0ocMo1bpjB0 +ekGD#Vn1l1GU[>0ocMo1,LdB0ekGD#Ve1k1,CX>16)Vq1bpgB0ekDC#Ve+k1,CX>16)Vq1,LaB +0ekDC#Ve%k1,CX>16)Vq2)-gB0ekDC#Ve.k0f1U>16)Vq1G^aB0ekDC#Ve(k0f1U>16)Vq0f:[ +B0ekDC#Ve4l1bg^>0ocMo1c$sC0ekDC#Ve1l1GU[>0ocMo1GgmC0ekDC#Ve4l1,CX>0ocMo1c$ +mC0ekDC#Ve(l1,CX>0ocMo2)6mC0ekDC#Ve+l0f1U>0ocMo0fCaC0ekDC#Ve%g2)-g?23%qu0e +kO?0ekJE#W4=k2)-g?0ocMp0ekL?0ekMF#W+7j1bpd?16)Vp0ekI?0ekPG#W"1i1G^a?1QD_u0 +ekI?0ekDC#Vn+h1,L^?1l_hu0ekF?0ekGD#Ve%g0f:[?23%qu0ekC?0ekJE#W4=k0f:[?0ocMo +1,1X@0ekMF#W"4j2)-g?16)Vq0etU@0ekJE#W+7k2)-g?0ocMp1,1U@0ekJE#W+:k1bpd?0ocM +o0etR@0ekMF#W"1j1bpd?16)Vp1,1R@0ekMF#W"4j1G^a?16)Vq0etO@0ekJE#W+7k1G^a?0oc +Mp1,1O@0ekJE#W+:k1,L^?0ocMo0etL@0ekMF#W"1j1,L^?16)Vp1,1L@0ekMF#W"4j0f:[?16 +)Vq0etI@0ekJE#W+7k0f:[?0ocMo1GLaA0ekJE#W"7k2)-g?0ocMp1,:^A0ekGD#Vn1j1bpd?1 +6)Vp1,:[A0ekJE#W"4k1bpd?0ocMp0f(XA0ekGD#Ve+i1G^a?1QD_s1GL[A0ekDC#Vn.j1G^a? +16)Vp0f(UA0ekJE#W"1k1G^a?0ocMp1GLXA0ekGD#Ve(i1,L^?1QD_s1,:UA0ekDC#Vn+j1,L^ +?16)Vp1GLUA0ekJE#W"7k0f:[?0ocMp1,:RA0ekGD#Ve%i0f:[?1QD_s0f(OA0ekDC#Ve.j2)- +g?16)Vq1GUgB0ekDC#Vn4k1bpd?0ocMo1GUdB0ekGD#Vn.k1bpd?0ocMo1bgdB0ekGD#Vn1k1G +^a?0ocMo1,C^B0ekGD#Vn+k1G^a?0ocMp1bgaB0ekDC#Ve+j1,L^?16)Vq1,C[B0ekDC#Ve%j1 +,L^?16)Vp1bg^B0ekGD#Vn1k0f:[?0ocMo1,CXB0ekGD#Vn+k0f:[?0ocMo2)-sC0ekDC#Ve.k +1bpd?0ocMo2)-mC0ekDC#Ve+k1G^a?0ocMo1bpgC0ekDC#Ve(k1,L^?0ocMo2)-gC0ekDC#Ve+ +k0f:[?0ocMo0f:[C0ekDC#Ve%g2DHp@1l_ht0ekR@0ekGD#Vn+h2)6m@1QD_t0ekO@0ekDC#Ve + %g1c$j@1l_ht0ekL@0ekGD#Vn+h1Ggg@1QD_t0ekI@0ekDC#Ve%g1,Ud@1l_ht0ekF@0ekGD# +Vn+h0fCa@1QD_t0ekC@0ekDC#Ve(h2DHp@1QD_s1,1[A0ekDC#Vn.i2)6m@16)Vp0etUA0ekJE +#W"1j2)6m@0ocMo1,1UA0ekJE#W"4j1c$j@0ocMp0etRA0ekGD#Vn.i1Ggg@16)Vp0etOA0ekJ +E#W"1j1Ggg@0ocMo1,1OA0ekJE#W"4j1,Ud@0ocMp0etLA0ekGD#Vn.i0fCa@16)Vp0etIA0ek +JE#W"1j0fCa@0ocMo1GLdB0ekGD#Vn1j2)6m@0ocMo1,:^B0ekGD#Ve+i1c$j@16)Vq1,:[B0e +kDC#Ve%i1c$j@16)Vq1GL[B0ekDC#Ve(i1Ggg@16)Vq0f(UB0ekDC#Ve+i1,Ud@16)Vq1,:UB0 +ekDC#Ve%i1,Ud@16)Vq1GLUB0ekDC#Ve(i0fCa@16)Vq0f(OB0ekDC#Ve.j2DHp@0ocMo1GUgC +0ekDC#Ve.j1c$j@0ocMo1,CaC0ekDC#Ve+j1Ggg@0ocMo0f1[C0ekDC#Ve.j1,Ud@0ocMo1,C[ +C0ekDC#Ve+j0fCa@0ocMo0f1UC0ekDC#W"1i0ekF<2NA�ekC;1,1VG#W"1j0ekC<23%r"0et +I<0etPF#W"4j0ekF<23%r"1,1L<1,1SF#Vn+i0ekF<2NA&"0etI<1,1VG#W=Cm0ekF<16)Vp1, +:R=0etYI#W"4k0ekC<1l_i!1,:R=0etME#Vn+j0ekC<23%r!0f(O=0etPF#W=Cn0ekC<0ocMo1 +GLU=1,1\I#W"7k0ekF<1l_hs1,:R=1,1YH#W+:l0ekF<1QD_q0f(O=1,1\I#W"1k0ekF<1l_i! +0f(O=1,1PE#Ve+j0ekC<23%qu1GU[>0etPF#Vn.k0ekC<1l_hu1,CX>0etME#Ve%j0ekC<23%q +u0f1U>0etPF#W4=n0ekC<0ocMo1bg^>1,1YH#W":l0ekF<1QD_r1GU[>1,1VG#W+=m0ekF<16) +Vp1,CX>1,1YH#W"4l0ekF<1QD_u1,CX>1,1MD#Vn+k0ekF<1l_hu0f1U>1,1PE#Ve.k0ekC<1l +_ht1bpd?0etME#Vn1l0ekC<1QD_t1G^a?0etJD#Ve(k0ekC<1l_ht1,L^?0etME#Vn+l0ekC<1 +QD_t0f:[?0etJD#Ve1k0ekF<1l_hs1bpd?1,1SF#Ve+k0ekF<1l_ht1G^a?1,1PE#Vn.l0ekF< +1QD_t1,L^?1,1MD#Ve%k0ekF<1l_ht0f:[?1,1PE#Ve1l0ekC<1QD_r1c$j@0etME#Ve+l0ekC +<1QD_s1Ggg@0etJD#Vn.m0ekC<16)Vp0fCa@0etPF#W"1n0ekC<0ocMo2DHp@1,1SF#Vn7m0ek +F<16)Vp1c$j@1,1SF#W":n0ekF<0ocMp1Ggg@1,1PE#Ve(l0ekF<1QD_s1,Ud@1,1MD#Vn+m0e +kF<16)Vq0ekF<0etYI#W+7j1,1L=1l_i"0ekF<0etME#W"1i0etI=23%r"0ekC<0etPF#W"1i1 +,1O=23%r"0ekF<1,1SF#Vn+h0etL=2NA&"0ekC<1,1VG#W=Cl0etL=16)Vq1,1O=0etVH#W+:k +1,1L=1QD_q0etL=0etYI#W"1j1,1L=1l_i!0etL=0etME#Ve(h0etI=2NA&!1,1L=0etSG#W4@ +l0etI=16)Vp1,1O=1,1\I#W"4j1,1O=1l_i!1,1O=1,1PE#Vn+i1,1O=23%r!0etL=1,1SF#W= +Cm1,1O=0ocMp1,1L=1,1YH#W+:k0etL=1QD_q0etI=1,1\I#W"1j0etL=1l_i!0etI=1,1PE#V +n1j1,1L=1l_hu1GLX>0etME#Ve(i1,1L=23%qu1,:U>0etPF#W4@m1,1L=0ocMp0f(R>0etSG# +W+7l1,1L=16)Vp1GLU>0etVH#W"7k0etI=1QD_q1GLX>1,1YH#W"7k1,1O=1QD_q0f(O>0etVH +#Vn.j1,1O=1l_hu1,:U>1,1PE#Ve%i1,1O=23%qu0f(R>1,1SF#W4=m1,1O=0ocMp1GLU>1,1V +G#W+=l0etL=16)Vp1,:R>1,1YH#W"4k0etL=1QD_u1,:R>1,1MD#Vn+j0etL=1l_hu0f(O>1,1 +PE#Vn4k1,1L=1QD_q1GU^?0etSG#W"7l1,1L=16)Vq1,C[?0etPF#W+:m1,1L=0ocMo0f1X?0e +tSG#W"1l1,1L=16)Vp1bg^?0etSG#W":l0etI=16)Vp1bga?1,1VG#W":l1,1O=16)Vp1,CX?0 +etSG#Vn1k1,1O=1QD_t1GU^?1,1MD#Ve(j1,1O=1l_ht1,C[?1,1PE#Vn+k1,1O=1QD_t0f1X? +1,1MD#Vn4k0etL=1QD_q1GU[?1,1VG#W"7l0etL=16)Vq1,CX?1,1SF#W+:m0etL=0ocMo0f1U +?1,1VG#W"1l0etL=16)Vq2)-j@0etME#Ve.k1,1L=1QD_s1bpg@0etJD#Vn1l1,1L=16)Vp1,L +a@0etPF#W"4m1,1L=0ocMp0f:^@0etME#Ve1k0etI=1QD_q2)-j@1,1SF#Ve+k0etI=1QD_r1b +pg@1,1PE#Ve+k1,1O=1QD_s1G^d@1,1MD#Ve%k0etI=1QD_r1,La@1,1PE#Ve%k1,1O=1QD_s0 +f:^@1,1MD#Vn7l0etL=16)Vp1bpd@1,1SF#W":m0etL=0ocMp1G^a@1,1PE#Ve(k0etL=1QD_s +1,L^@1,1MD#Vn+l0etL=16)Vp2)6pA0etME#Vn4m1,1L=0ocMo1GgjA0etME#Vn.m1,1L=0ocM +o2DHpA0etME#Ve4l1,1O=16)Vp1c$jA0etME#Vn7m1,1O=0ocMo1c$mA1,1PE#Ve(l0etI=16) +Vq1GgjA1,1MD#Ve(l1,1O=16)Vp2)6mA1,1PE#Vn4m0etL=0ocMo1GggA1,1PE#Vn.m0etL=0o +cMo0fCaA1,1PE#Vn+h1GLU>23%r!0ekI=0etPF#W=Cl1GLU>0ocMo0ekF=0etYI#W"1i1,:R>1 +l_i!0ekF=0etME#Ve%g1GLX>2NA&!0ekI=1,1VG#W4=k1GLX>16)Vq0ekC=0etVH#W+7j0f(O> +1QD`!0ekC=0etJD#Vn+h1,:U>23%r!0ekF=1,1SF#W=Cl1,:U>0ocMo0ekC=1,1\I#W"1i0f(R +>1l_i!0ekC=1,1PE#Vn.i1GLU>1l_hu1,1R>0etME#Ve%h1GLU>23%qu0etO>0etPF#W4=l1GL +U>0ocMo1,1O>0etVH#W"4j1,:R>1QD_u1,1O>0etJD#Ve(h1GLX>23%qu1,1R>1,1SF#W4@l1G +LX>0ocMp0etO>1,1VG#W+7k1GLX>16)Vq1,1L>0etSG#W+:k0f(O>16)Vp0etI>0etVH#Vn.i1 +,:U>1l_hu1,1O>1,1PE#Ve%h1,:U>23%qu0etL>1,1SF#W4=l1,:U>0ocMo1,1L>1,1YH#W"4j +0f(R>1QD_u1,1L>1,1MD#Vn+i0f(R>1l_hu0etI>1,1PE#Vn1j1GLU>1QD_t1GL[?0etJD#Ve( +i1GLU>1l_ht1,:X?0etME#Vn+j1GLU>1QD_t0f(U?0etJD#Ve+i1,:R>1l_ht1GLX?0etME#Ve ++i1GLX>1l_ht1GL[?1,1PE#Ve%i1,:R>1l_hs1,:X?1,1SF#W+:l1GLX>0ocMo0f(U?1,1VG#W +"1k1GLX>16)Vq1GLU?0etPF#W+=l0f(O>0ocMo1,:R?0etSG#Vn1j1,:U>1QD_t1GLX?1,1MD# +Ve(i1,:U>1l_ht1,:U?1,1PE#Vn+j1,:U>1QD_t0f(R?1,1MD#Ve+i0f(R>1l_ht1GLU?1,1PE +#Vn.j0f(R>1QD_t1,:R?1,1MD#Ve%i0f(R>1l_ht0f(O?1,1PE#Vn4k1GLU>16)Vp1GUa@0etP +F#W"7l1GLU>0ocMp1,C^@0etME#Ve%j1GLU>1QD_s0f1[@0etJD#Ve.j1,:R>1QD_s1bga@0et +JD#Ve.j1GLX>1QD_s1bgd@1,1MD#Ve(j1,:R>1QD_r1GUa@1,1PE#Ve(j1GLX>1QD_s1,C^@1, +1MD#Vn+k1GLX>16)Vq1bg^@0etME#Ve+j0f(O>1QD_r1bga@1,1PE#Ve+j1,:U>1QD_s1GU^@1 +,1MD#Ve%j0f(O>1QD_r1,C[@1,1PE#Ve%j1,:U>1QD_s0f1X@1,1MD#Ve.j0f(R>1QD_s1bg^@ +1,1MD#Vn1k0f(R>16)Vp1,CX@1,1SF#W"4l0f(R>0ocMp0f1U@1,1PE#Vn7l1GLU>0ocMo1bpj +A0etME#Vn1l1GLU>0ocMo1,LdA0etME#Ve1k1,:R>16)Vp2)-mA1,1PE#Ve+k1,:R>16)Vq1bp +jA1,1MD#Ve+k1GLX>16)Vp0f:^A0etME#Vn.l1GLX>0ocMp2)-gA0etJD#Ve.k0f(O>16)Vq2) +-jA1,1MD#Ve.k1,:U>16)Vp1,L^A0etME#Vn1l1,:U>0ocMo1,LaA1,1PE#Vn+l1,:U>0ocMo2 +)-gA1,1PE#Vn4l0f(R>0ocMo1G^aA1,1PE#Vn.l0f(R>0ocMo0f:[A1,1PE#Ve1l1GLU>0ocMo +1GgmB0etJD#Ve4l1,:R>0ocMo2DI!B1,1MD#Ve.l1,:R>0ocMo1c$pB1,1MD#Ve(l1,:R>0ocM +o2)6mB0etJD#Ve1l1,:U>0ocMo1GggB0etJD#Ve+l1,:U>0ocMo0fCaB0etJD#Ve4l0f(R>0oc +Mo1c$jB1,1MD#Ve(l0f(R>0ocMp0ekL>0etSG#W+7j1bg^?16)Vp0ekI>0etVH#W"1i1GU[?1Q +D_u0ekI>0etJD#Ve%g1bga?23%qu0ekL>1,1SF#W4=k1bga?0ocMp0ekF>0etSG#W+7j1,CX?1 +6)Vq0ekI>1,1VG#W+7j1GU^?16)Vp0ekC>0etVH#W"1i0f1U?1QD_u0ekC>0etJD#Ve%g1,C[? +23%qu0ekF>1,1SF#W4=k1,C[?0ocMp0ekC>1,1VG#W+7j0f1X?16)Vq1,1U?0etPF#W+:k1bg^ +?0ocMo0etR?0etSG#W"1j1bg^?16)Vp1,1R?0etSG#W"4j1GU[?16)Vp1,1U?1,1VG#W"4j1bg +a?16)Vq0etR?1,1SF#W+7k1bga?0ocMp1,1O?0etPF#W+:k1,CX?0ocMo0etL?0etSG#Vn.i1G +U^?1QD_t1,1R?1,1MD#Ve%h1GU^?1l_ht0etO?1,1PE#Ve(h0f1U?1l_ht1,1L?0etME#Ve(h1 +,C[?1l_ht1,1O?1,1PE#Vn+i1,C[?1QD_t0etL?1,1MD#Vn.i0f1X?1QD_t1,1L?1,1MD#Ve%h +0f1X?1l_ht0etI?1,1PE#Vn1j1bg^?16)Vp1,:[@0etPF#W"4k1bg^?0ocMp0f(X@0etME#Ve+ +i1GU[?1QD_s1GL[@0etJD#Ve+i1bga?1QD_s1GL^@1,1MD#Ve%i1GU[?1QD_r1,:[@1,1PE#Ve + %i1bga?1QD_s0f(X@1,1MD#Vn1j1,CX?16)Vp1,:U@0etPF#Vn1j1GU^?16)Vp1,:X@1,1SF# +W"4k1GU^?0ocMp0f(U@1,1PE#Ve+i0f1U?1QD_s1GLU@0etJD#Ve+i1,C[?1QD_s1GLX@1,1MD +#Ve%i0f1U?1QD_r1,:U@1,1PE#Ve%i1,C[?1QD_s0f(R@1,1MD#Vn1j0f1X?16)Vp1,:R@1,1S +F#W"4k0f1X?0ocMp0f(O@1,1PE#Vn4k1bg^?0ocMo1GUdA0etME#Vn.k1bg^?0ocMo1bgdA0et +ME#Ve.j1bga?16)Vp1,C^A0etME#Vn1k1bga?0ocMo1,CaA1,1PE#Vn4k1,CX?0ocMo1GU^A0e +tME#Vn4k1GU^?0ocMo1GUaA1,1PE#Ve%j1,CX?16)Vq1,C^A1,1MD#Ve%j1GU^?16)Vp1bg^A0 +etME#Ve.j1,C[?16)Vp1,CXA0etME#Vn1k1,C[?0ocMo1,C[A1,1PE#Vn+k1,C[?0ocMp1bg^A +1,1MD#Ve+j0f1X?16)Vq1,CXA1,1MD#Ve%j0f1X?16)Vp1bpmB0etJD#Ve1k1GU[?0ocMo2)-p +B1,1MD#Ve+k1GU[?0ocMo1G^jB1,1MD#Ve.k1,CX?0ocMo1bpjB1,1MD#Ve(k1,CX?0ocMo1,L +dB1,1MD#Ve1k0f1U?0ocMo2)-jB1,1MD#Ve+k0f1U?0ocMo1G^dB1,1MD#Ve%k0f1U?0ocMo0f +:^B1,1MD#Ve.k0f1X?0ocMo1,L^B1,1MD#Vn+h2)-g@1QD_t0ekO?0etJD#Ve%g1bpd@1l_ht0 +ekL?0etME#Ve%g2)-j@1l_ht0ekO?1,1PE#Vn+h1G^a@1QD_t0ekI?0etJD#Vn+h1bpg@1QD_t +0ekL?1,1MD#Ve%g1,L^@1l_ht0ekF?0etME#Ve%g1G^d@1l_ht0ekI?1,1PE#Vn+h0f:[@1QD_ +t0ekC?0etJD#Vn+h1,La@1QD_t0ekF?1,1MD#Ve%g0f:^@1l_ht0ekC?1,1PE#Vn.i2)-g@16) +Vp0etU@0etPF#W"1j2)-g@0ocMo1,1U@0etPF#W"4j1bpd@0ocMo1,1X@1,1SF#W"4j2)-j@0o +cMp0etU@1,1PE#Vn.i1G^a@16)Vp0etO@0etPF#Vn.i1bpg@16)Vp0etR@1,1SF#W"1j1bpg@0 +ocMo1,1O@0etPF#W"4j1,L^@0ocMo1,1R@1,1SF#W"4j1G^d@0ocMp0etO@1,1PE#Vn.i0f:[@ +16)Vp0etI@0etPF#Vn.i1,La@16)Vp0etL@1,1SF#W"1j1,La@0ocMo1,1L@1,1SF#W"4j0f:^ +@0ocMp0etI@1,1PE#Vn1j2)-g@0ocMo1,:^A0etME#Ve+i1bpd@16)Vp1GLaA1,1PE#Ve%i1bp +d@16)Vq1,:^A1,1MD#Vn1j1G^a@0ocMo1,:XA0etME#Vn1j1bpg@0ocMo1,:[A1,1PE#Vn+j1b +pg@0ocMo1GLXA0etME#Ve+i1G^d@16)Vp0f(RA0etME#Vn.j1G^d@0ocMo0f(UA1,1PE#Vn1j0 +f:[@0ocMo1,:RA0 etME# Vn1j1 ,La@0 oc Mo1 ,:UA1, 1PE#Vn+ +j1,La@0ocMo1GLU A1, 1PE#V n.j0f :^ @0o cMo 0f(O +A1,1PE#Ve+j2)-g @0ocM o1 bggB0 etJD #V e.j 2)-j@ 0oc Mo1,C aB0e +tJD#Ve+j1G^a@0o cMo1G UdB 1,1 MD#V e% j1G ^a@0oc Mo 1bgaB0 etJ +D#Ve.j1G^d@0ocM o1,C[ B0e tJD # Ve( j1G ^d@ 0ocMo1 GU [B0etJ D#V +e+j1,La@0ocMo0f 1UB0e tJD #Ve %j 1, La@ 0oc Mo1bg^ B1 ,1MD#V e(j +0f:^@0ocMp0ekR@ 0etM E#V e% g2 )6m A1Q D_s 0ekO +@0etJD#Ve%g2DHs A1QD _ s0 ek R@1 ,1M D#Vn +h1c$ +jA16)Vq0ekO@1,1 PE#Ve% g1G g gA1 QD _s0e kI@ 0etJD#Ve%g 1c$mA1QD_s0 +ekL@1,1MD#Vn+h1 ,UdA16 )Vq 0 ekI@ 1,1P E#V e%g0fCaA1Q D_s0ekC@0et +JD#Ve%g1,UgA1QD _s0ekF @1, 1MD# Vn.i 2DH pA0ocMo1,1 XA0etME#Ve( +h2DHsA16)Vq1,1U A0etJ D#Ve %h1c$ jA16 )Vq 1,1XA1,1MD #Ve%h2)6pA1 +6)Vp1,1RA0etME# Ve(h1 c$mA1 6)Vq0 etR A1,1MD#Vn. i1,UdA0ocMo +0etLA0etME#Vn.i 1GgjA0o cMo0et OA1,1 PE# Ve(h0fCaA1 6)Vp1,1OA1, +1PE#Vn+i1,UgA0ocMo1GLaB0etJD#Ve+i2DHsA0ocMo1,:[B0etJD#Ve(i2)6pA0ocMo1GL[B0 +etJD#Ve+i1c$mA0ocMo0f(UB0etJD#Ve%i1c$mA0ocMo1,:UB0etJD#Ve(i1GgjA0ocMo1GLUB +0etJD#Ve+i1,UgA0ocMo0f(OB0etJD#Ve%i1,UgA0ocMp0ekC;1,:bJ#W+7j0ekF=1l_i"0ekC +;1,:VF#W"1i0ekI=23%r"0ekC;1GL\G#Vn+i0ekC=23%r!0etI<0f(VG#W=Cm0ekC=0ocMp1,1 +L<1,:_I#W+:k0ekF=1QD_q0etI<1,:bJ#W"1j0ekF=1l_i!0etI<1,:VF#Ve(h0ekI=2NA&!1, +1L<1GL_H#W4@l0ekI=16)Vq0etI<1GLbI#W+7k0ekI=1QD`!0etI<1GLVE#Vn.j0ekC=1l_hu1 +,:R=0f(SF#Ve%i0ekC=23%qu0f(O=0f(VG#W4=m0ekC=0ocMp1GLU=1,:\H#W+=l0ekF=16)Vp +1,:R=1,:_I#W"4k0ekF=1QD_u1,:R=1,:SE#Vn+j0ekF=1l_hu0f(O=1,:VF#Ve+i0ekI=23%q +u1GLU=1GL\G#Vn.j0ekI=1l_hu1,:R=1GLYF#Ve%i0ekI=23%qu0f(O=1GL\G#W4=m0ekI=0oc +Mp1GU[>0f(VG#W+=m0ekC=0ocMo1,CX>0f(YH#W"4l0ekC=16)Vq0f1U>0f(VG#W+7m0ekC=0o +cMp1bg^>1,:YG#Ve+j0ekF=1l_ht1GU[>1,:VF#Vn.k0ekF=1QD_t1,CX>1,:SE#Ve%j0ekF=1 +l_ht0f1U>1,:VF#Ve.j0ekI=1l_ht1bg^>1GLYF#Vn1k0ekI=1QD_t1GU[>1GLVE#Ve(j0ekI= +1l_ht1,CX>1GLYF#Vn+k0ekI=1QD_t0f1U>1GLVE#Vn4l0ekC=16)Vp1G^a?0f(VG#W"7m0ekC +=0ocMp1,L^?0f(SF#Ve%k0ekC=1QD_s0f:[?0f(PE#Vn7l0ekF=16)Vp1bpd?1,:YG#W":m0ek +F=0ocMp1G^a?1,:VF#Ve(k0ekF=1QD_s1,L^?1,:SE#Vn+l0ekF=16)Vp2)-g?1GL\G#Vn4l0e +kI=16)Vp1G^a?1GL\G#W"7m0ekI=0ocMp1,L^?1GLYF#Ve%k0ekI=1QD_s0f:[?1GLVE#Vn7m0 +ekC=0ocMo1c$j@0f(SF#Vn1m0ekC=0ocMo1,Ud@0f(SF#Vn+m0ekC=0ocMo2)6m@1,:VF#Vn4m +0ekF=0ocMo1Ggg@1,:VF#Vn.m0ekF=0ocMo0fCa@1,:VF#Ve4l0ekI=16)Vq2)6m@1GLVE#Ve. +l0ekI=16)Vq1Ggg@1GLVE#Ve(l0ekI=16)Vq0fCa@1GLVE#W"1i1,1L>1l_i!0ekF<0f(SF#Vn ++h0etI>23%r!0ekC<0f(VG#W=Cl0etI>0ocMp0ekF<1,:_I#W+7j1,1O>1QD`!0ekF<1,:SE#V +e%g0etL>2NA&!0ekC<1,:\H#W4=k0etL>16)Vp0ekF<1GLeJ#W"1i1,1R>1l_i!0ekF<1GLYF# +Vn+h0etO>23%r!0ekC<1GL\G#W=Cl0etO>0ocMo1,1O=0f(\I#W"4j1,1L>1QD_u1,1O=0f(PE +#Vn+i1,1L>1l_hu0etL=0f(SF#Vn.i0etI>1l_hu1,1L=0f(SF#Ve%h0etI>23%qt1,1O=1,:\ +H#W+:k1,1O>16)Vp0etL=1,:_I#W"1j1,1O>1QD_u0etL=1,:SE#Ve(h0etL>23%qu1,1L=1,: +YG#W4@l0etL>0ocMo1,1O=1GLbI#W"4j1,1R>1QD_u1,1O=1GLVE#Vn+i1,1R>1l_hu0etL=1G +LYF#Vn.i0etO>1l_hu1,1L=1GLYF#Ve%h0etO>23%qu0etI=1GL\G#W4=l0etO>0ocMo1GLX>0 +f(YH#W"7k1,1L>16)Vq1,:U>0f(VG#W+:l1,1L>0ocMo0f(R>0f(YH#W"1k1,1L>16)Vq1GLU> +0f(VG#W+=l0etI>0ocMo1,:R>0f(YH#Vn1j1,1O>1QD_t1GLX>1,:SE#Ve(i1,1O>1l_ht1,:U +>1,:VF#Vn+j1,1O>1QD_t0f(R>1,:SE#Ve+i0etL>1l_ht1GLU>1,:VF#Ve+i1,1R>1l_ht1GL +X>1GLYF#Ve%i0etL>1l_hs1,:U>1GL\G#W+:l1,1R>0ocMo0f(R>1GL_H#W"1k1,1R>16)Vq1G +LU>1GL\G#W+=l0etO>0ocMo1,:R>1GL_H#W"4k0etO>16)Vq0f(O>1GL\G#W+7l0etO>0ocMo1 +bga?0f(VG#W":l1,1L>0ocMp1GU^?0f(SF#Ve(j1,1L>1QD_s1,C[?0f(PE#Vn+k1,1L>16)Vq +1bg^?0f(SF#Ve+j0etI>1QD_r1bga?1,:VF#Ve+j1,1O>1QD_s1GU^?1,:SE#Ve%j0etI>1QD_ +r1,C[?1,:VF#Ve%j1,1O>1QD_s0f1X?1,:SE#Ve.j0etL>1QD_s1bg^?1,:SE#Ve.j1,1R>1QD +_s1bga?1GLVE#Ve(j0etL>1QD_r1GU^?1GLYF#Ve(j1,1R>1QD_s1,C[?1GLVE#Vn+k1,1R>16 +)Vq1bg^?1GLYF#Ve+j0etO>1QD_s1GU[?1GLVE#Vn.k0etO>16)Vp0f1U?1GL\G#W"1l0etO>0 +ocMo2)-j@0f(SF#Vn4l1,1L>0ocMo1G^d@0f(SF#Vn.l1,1L>0jPo+NX.Bq0etI<0fG$t1bpd@ +0ekC>NX.Eq1,:R=0f=ss2)-jA0ekC=NX.Er0ekF<0f=ss2)6m@1,1L>NX.Bp1,1O=0fG$t1bga +?1,1L?NX.Nt1,1O=0f"ap1,CX?0ekC?NX.Ht0etI<0f+gq0etL>0ekC@NX.Er1,:R=0f4mr2)6 +pB0ekC0f=ss1bgdA0ekC=NX.Nt1GU[>0en[o0f(O=1,1LANX.Es0ekF<0f4mr1, +:U>1,1L@NX.Hs1,1O=0f+gq0ekI=1,1LANX.Eq1GLX>0f4mr2)-mA1,1L=NX.Bs0etI<0f4mr0 +f(R?0ekC?NX.Es1,:R=0f+gq1,:X@0ekC>NX.Hs1GU[>0f"ap0ekL?0ekC?NX.Eq1bpd?0f+gq +2)-pC0ekC;NX.?r0ekF<0f=ss1Ggg@1,1L>NX.Br1,1O=0f4mr1c$mA1,1L=NX.?p1GLX>0f=s +s1GUa@1,1L>NX.Kt1GLX>0en[o1,1U?1,1L?NX.Hr1bga?0f"ap1,UdA0ekC=NX.?r1,:R=0f4 +mr1GgjB0ekC0f+gq1c$pC0ekC;NX.?p1bpd?0f4mr1GUdB0ekCNX.?q1GLX>0f4mr1G^gA1,1L=NX.Bq1bga?0 +f+gq1bpmB1,1LNX.Bt1,1O=0f"ap0f1[@1,1L>NX.Et1GLX +>0en[o1,CaA1,1L=NX.?p2)-j@0f+gq1GUgB1,1L0ekC@NX.Hr0f( +O=0f4mr2DHpB0ekCNX.Bp0ekI=0fG$t1bg^>1GLU@NX.Nt0e +kI=0f"ap1,:R?0ekC?NX.Hs0f(O=0f+gq0ekF>0ekC@NX.Eq1,CX>0f4mr2)-jB0ekC1,1L@NX.Hr1,:U>0f+gq2DHsB1,1L0fG$t1GLX>1GLU@NX.Ks1,1R>0f"ap1,CX@0ekC>NX.H +t0f(O=0f"ap0etL?0ekC?NX.Er1,CX>0f+gq2)6pC0ekC;NX.Bp1G^a?0f4mr1bgdB0ekCNX.Bq1,:U>0f4mr1bpgA1,1L=NX.?o1GU^?0f=ss1GL[@1,1L>NX +.Ks1GU^?0en[o1,CX>1GLU@NX.Ht0ekI=0f"ap0etL=1GLUANX.Er1,1R>0f+gq2)6pA1GLU=N +X.Bp1GL[?0f4mr1bgd@1GLU>NX.Bs0f(O=0f+gq0f(R@0ekC>NX.Es1,CX>0f"ap1,:XA0ekC= +NX.Hs1G^a?0en[o0ekL@0ekC>NX.Eq1c$j@0f"ap0f1U?1,1L?NX.Et0etL=0f"ap1,C[@1,1L +>NX.Ht1,:U>0en[o0etO?1,1L?NX.Er1GU^?0f"ap1,1U@1,1L>NX.Hr1bpg@0en[o1,L^?1GL +U?NX.?q1,1R>0f4mr1G^d@1GLU>NX.Bq1GL[?0f+gq1bpjA1GLU=NX.?o1bgd@0f4mr1GL^@1G +LU>NX.Bt0f(O=0f"ap0f1XA0ekC=NX.Et1,CX>0en[o1,C^B0ekCNX.Eq2)6pA0en[o1,Ud@1GLU>NX.?r1,1R>0f+gq1GgjA1GLU=NX.Br1GL[?0f"ap0etR +?1GLU?NX.Er1bgd@0en[o1,1X@1GLU>NX.?s1,CX>0f"ap1,LdC0ekC;NX.?q1c$j@0f"ap0fC +aA1,1L=NX.Bt1,:U>0en[o0f1[A1,1L=NX.Br1bpg@0en[o0etUA1,1L=NX.?s1,1R>0f"ap1, +LdA1GLU=NX.?q1bgd@0f"ap1,:^A1GLU=NX.?o2DI!B0f"ap1,1L?0ekC?NX.Hr0f1U>0f+gq2 +DHpC0ekC;NX.?o0f(R>0fG$t1GLU?1,1L?NX.Ks0f(R>0f"ap1,1L=1GLUANX.Hr0etO>0f+gq +2DHpA1GLU=NX.?o0ekL>0fG$t1GLU=1bg^ANX.Ks0ekL>0f"ap1,:R@0ekC>NX.Hs0f1U>0f"a +p0ekF?0ekC?NX.Eq1,L^?0f+gq2)-jC0ekC;NX.?p0f(R>0f=ss1GU[@1,1L>NX.Kt0f(R>0en +[o1,1O?1,1L?NX.Hr1,C[?0f"ap1,:R>1GLU@NX.Hs0etO>0f"ap0ekF=1GLUANX.Eq1,:X?0f ++gq2)-jA1GLU=NX.?p0ekL>0f=ss1GU[>1bg^@NX.Kt0ekL>0en[o1,1O=1bg^ANX.Hr1,1U?0 +f"ap1,CXA0ekC=NX.Ht0f1U>0en[o0etL@0ekC>NX.Er1,L^?0f"ap1,1RA0ekC=NX.Hr1Ggg@ +0en[o0f(O?1,1L?NX.Es0f(R>0f"ap1,:U@1,1L>NX.Hs1,C[?0en[o0ekI?1,1L?NX.Eq1G^d +@0f"ap1,CX?1GLU?NX.Ht0etO>0en[o0etL>1GLU@NX.Er1,:X?0f"ap1,1R?1GLU?NX.Hr1GU +a@0en[o0f(O=1bg^ANX.Es0ekL>0f"ap1,:U>1bg^@NX.Hs1,1U?0en[o0ekI=1bg^ANX.Eq1G +L^@0f"ap1,L^B0ekCNX.Et0 +f(R>0en[o1,C[A1,1L=NX.?p1G^d@0f+gq1GUaB1,1LNX.?q +1,:X?0f+gq1G^dA1GLU=NX.Bq1GUa@0f"ap0ekL?1GLU?NX.Eq1bpjA0en[o0f1U>1bg^@NX.E +t0ekL>0en[o1,C[?1bg^?NX.?p1GL^@0f+gq1GUa@1bg^>NX.Bp1bggA0f"ap1,UdC0ekC;NX. +?r1,L^?0f"ap1,C^C0ekC;NX.?s0f(R>0f"ap1,LaB1,1L0en[o0f1X@1GLU>NX.Br1GUa@0en[o0etR@1GLU>NX.Bp2)6sB0en[o0f:[?1bg^?N +X.Bs1,1U?0en[o0f(U?1bg^?NX.Bq1bggA0en[o0ekO?1bg^?NX.?s1,L^?0en[o0fCaB1,1L< +NX.?r1G^d@0en[o0f:^A1GLU=NX.?q1bpjA0en[o0fCa@1bg^>NX.?r1GL^@0en[o0etU@1bg^ +>NX.Bp0f:[?0f4mr1bg^B0ekCNX.Ks0f1X?0en[o1,1L>1GL +U@NX.Hr0f(U?0f"ap0ekC<1bg^BNX.Eq0etR?0f+gq2)-g@1bg^>NX.Bp0ekO?0f4mr1bg^>2) +-g@NX.Bq0f:[?0f+gq1bpdC0ekC;NX.?o1,Ud@0f4mr1GLXB0ekCNX.?p0etR?0f4mr1GU[?1bg^?NX.Bp1,:[@0f+gq1bga@1bg^>NX.Bq0ekO?0f+gq1bpd +?2)-g?NX.?o1,1X@0f4mr1GLX>2)-g@NX.Br0f:[?0f"ap0etLA0ekC=NX.Er1,Ud@0en[o0f( +O@1,1L>NX.Es0f1X?0en[o1,:UA1,1L=NX.?o1GgjA0f+gq1GL[B1,1LNX.?q0etR?0f+gq1G^a@1bg^>NX.Bq1,:[@0f"ap0 +ekI>1bg^@NX.Eq1GUdA0en[o1,CX>2)-g@NX.?p1,1X@0f+gq1GU^?2)-g?NX.Bp1GLaA0f"ap +1,L^C0ekC;NX.?q1,Ud@0f"ap0f1UA1,1L=NX.Br1,La@0en[o0etOA1,1L=NX.Bs0f(U?0en[ +o0f(R@1GLU>NX.Bq1G^gA0en[o0ekL@1GLU>NX.?r0etR?0f"ap1,C[@1bg^>NX.?p1GUdA0f" +ap1,1U@1bg^>NX.Bs0ekO?0en[o0f(R>2)-g@NX.Bq1GLaA0en[o0ekL>2)-g@NX.?r1,Ud@0e +n[o0f:[B1,1LNX.?q1GUdA0 +en[o0ekO@1bg^>NX.?r1,1X@0en[o0etR?2)-g?NX.Bp0fCa@0f+gq1bg^C0ekC;NX.?o0f:^@ +0f4mr1GLUA1,1L=NX.Bp0f1[@0f+gq1bg^A1GLU=NX.?o0f(X@0f4mr1GLU?1bg^?NX.Bp0etU +@0f+gq1bg^?2)-g?NX.?o0ekR@0f4mr1GLU=2DHpANX.Bq0fCa@0f"ap0etI@1,1L>NX.Er0f: +^@0en[o1,1OA1,1L=NX.Bq0f1[@0f"ap0ekF?1GLU?NX.Eq1,LdA0en[o0etI>1bg^@NX.Er0f +(X@0en[o1,1O?1bg^?NX.Bq0etU@0f"ap0ekF=2)-gANX.Eq1,:^A0en[o0etI<2DHpBNX.Er0 +ekR@0en[o1,1O=2DHpANX.Br0fCa@0en[o0f(OA1,1L=NX.Bq1,UgA0en[o1,CXA1GLU=NX.?p +1,LdA0f"ap1,1RA1GLU=NX.?q0f(X@0f"ap1,:U@1bg^>NX.?o1G^jB0f"ap1,CX?2)-g?NX.? +p1,:^A0f"ap1,1R?2)-g?NX.?q0ekR@0f"ap1,:U>2DHp@NX.?o1GLdB0f"ap0f1UB1,1LNX.?p1G^jB0en[o0f(R?2)-g?NX.?o1bppC0en[o0f1U>2DHp@NX +.?p1GLdB0en[o1bg^>0etI@NX.Nt0ekC<0f+gq1,1O=0ekFANX.Hr1,1L<1,P!s2DHsA0ekF=N +X.Bq0ekC<0fG$t1bpd?0etI?NX.Eq1,1L=0f=ss2)-j@0etI>NX.Bq1,1L<1,Y't1bpg@0ekF> +NX.?o1GLU=1,b-u1GL[?0ekF?NX.Ks1GLU=1,=jq1,CX>0etI@NX.Ht0ekC<0f+gq0etL=0etI +ANX.Er1,1L=0f4mr2)6pA0etI=NX.Bp1GLU>0f=ss1bgd@0etI>NX.Nt1GLU>0en[o1,C[?0ek +F?NX.Ht1,1L<1,=jq0etO>0ekF@NX.Er1GLU=1,Fpr2)6sB0ekF1,P!s1bggA0e +kF=NX.Bs0ekC<0f4mr0f(R>0etI@NX.Es1,1L=0f+gq1,:X?0etI?NX.Hs1GLU>0f"ap0ekL>0 +etI@NX.Eq1bg^?0f+gq2)-pB0etINX.Hs1bg^>1,4dp0ekO?0ekF?NX.Eq2)-g?1,=jq1,Ud@0etI>NX.?r1,1L=0f4mr1Ggj +A0etI=NX.Br1GLU>0f+gq1c$pB0etINX.Et1GLU=1,4dp1,CaA0ekF=NX.?p2)-g?1,Fpr1G +UgB0ekFNX.Bs1GLU>0f"ap0f(X@0etI>NX.Es1bg^?0en[o1 +,:^A0etI=NX.?o2DHpA0f+gq1GLdB0etINX.Bp0ekF<1,b-u +1bg^>1,1O@NX.Nt0ekF<1,=jq1,1L=0etIANX.Hr0etI=0f4mr2DHpA0etI=NX.Eq0ekF=0f=s +s2)-g?1,:R?NX.?p0etI<1,b-u1GU[?0ekF?NX.Kt0etI<1,=jq1,1O>0ekF@NX.Hr1,:R=1,F +pr2DHsB0ekF0etI@NX.Hs0etI=0f ++gq0ekF=0etIANX.Eq1,:R>0f4mr2)-jA0etI=NX.?p0ekF=0fG$t1GU[>1,:R@NX.Kt0ekF=0 +f"ap1,1O=1,:RANX.Hr1,1O>0f+gq2DHsA1,:R=NX.?q0etI<1,Y't1G^a@0ekF>NX.Bq1,:R= +1,P!s1bpgA0ekF=NX.?o1GU[>1,Y't1GL[@0ekF>NX.Ks1GU[>1,4dp1,CX>1,1O@NX.Ht0ekF +<1,=jq0etL=1,1OANX.Br0etI=0f4mr1c$jA0etI=NX.?p1,:R>0f=ss1GU^@0etI>NX.Kt1,: +R>0en[o1,1R?0etI?NX.Hr1GU[?0f"ap0f(O=1,:RANX.Es0ekF=0f+gq1,:U>1,:R@NX.Hs1, +1O>0f"ap0ekI=1,:RANX.Eq1GLX?0f+gq2)-mA1,:R=NX.?r0etI<1,P!s1GggA0ekF=NX.Br1 +,:R=1,Fpr1c$mB0ekF1,P!s1GUaA0ekF=NX.Bp1bpd?1,Fpr1bggB0ekF1,1O@NX.Bs0etI=0f+gq0f(R?0etI?NX.Es1,:R>0f"ap0ekL>1,1O@NX.B +q1GU[?0f+gq1bpjB0etINX. +Br1,1O>0f+gq1c$mA1,:R=NX.?p1GLX?0f4mr1GUa@1,:R>NX.Bp1bga@0f+gq1bggA1,:R=NX +.?s0etI<1,Fpr1,LaA0ekF=NX.?q1GU[>1,Fpr1G^gB0ekFN +X.Eq2)6m@1,4dp1,Ud@1,1O>NX.?r1,1O=1,Fpr1,UdA0etI=NX.?r1,:R>0f+gq1GgjB0etI< +NX.?p1bga?1,Fpr1,C^A0etI=NX.?p1bpd@0f+gq1GUdB0etI0f"ap0f(U?1,:R?NX.Es1GLX?0en[o1,:[@1,:R>NX.?o2)-jA0f+gq1GLaA1,: +R=NX.?t0etI<1,=jq1,UgB0ekF1,=jq1,CaB0ekFNX.?s1,:R>0f"ap0f(X@1,1O>NX.Bs1GU[?0en[o0f(XA0etI=NX.?o2DHsA1,=jq1,:^B0 +etI 0f= ss1b g^ @0e tI>NX. Nt 0f(O>0 en[ +o0ekC;1GLXCNX.E q0ekI =1, P!s 2 )-g ?1G LX? NX.?o0 et L>0fG$ t1G +LU>1,:R@NX.Ks0e tL>0f "ap 1,1 L< 1G U[B NX. Hr0ekI >0 f+gq2D Hp@ +1GU[>NX.?p0f(O= 1,Y' t1G U[ @0 ekF >NX .Kt 0f(O +=1,4dp1,1O?0ekF ?NX. H r1 ,C X>1 ,=j q1,: R>1,1 +O@NX.Hs0etL=1,= jq0ekF =1, 1 OAN X. Bq0f (O> 0f4mr1bpdA 0etI=NX.?o1 +,CX?0f=ss1GLX@0 etI>NX .Ks 1 ,CX? 0en[ o0e tI<1GLXBNX .Er0ekI=1,F +pr2)6m@1GLX>NX. ?p0etL >0f =ss1 GU[? 1,: R?NX.Kt0et L>0en[o1,1O +>1,:R@NX.Hr1,:U ?0f"a p1,: R=1GU [ANX .Hs 0ekI>0f"ap 0ekF<1GU[BN +X.Eq1,1R?0f+gq2 )-j@1 GU[>N X.?q0 f(O =1,P!s1G^a A0ekF=NX.Bq +1,CX>1,Fpr1bpgB 0ekF1,P!s1,CX@0etI>NX.Ht0f(O>0en[o0etL?0etI?NX.Er1,CX?0 +f"ap1,1R@0etI>NX.Hr1G^a@0en[o0f(O=1GLXANX.Es0ekI=1,=jq0f(O>1,:R@NX.Es0etL> +0f"ap0ekI=1GLXANX.Bq1,:U?0f+gq1bpgA1,:R=NX.?o1GU^@0f4mr1GL[@1,:R>NX.Br0ekI +>0f+gq1c$j@1GU[>NX.?p1,1R?0f4mr1GU^?1GU[?NX.Bp1GL[@0f+gq1bgd@1GU[>NX.?r0f( +O=1,Fpr1GggB0ekF1,=jq0etO@0ekF>NX.Er1G^a?1,4dp1,1UA0ekF=NX.Bs0e +tL=1,=jq0f(R?1,1O?NX.Bs0f(O>0f"ap0f(R@0etI>NX.Es1,CX?0en[o0ekL?1,1O?NX.Bq1 +G^a@0f"ap0ekL@0etI>NX.Eq1c$jA0en[o0f1U>1GLX@NX.Et0ekI=1,4dp0f1U?1,:R?NX.Et +0etL>0en[o0etO>1GLX@NX.Br1,:U?0f"ap0etO?1,:R?NX.Er1GU^@0en[o1,1U@1,:R>NX.B +s0ekI>0f"ap0f(R>1GU[@NX.Es1,1R?0en[o1,:X?1GU[?NX.?o1bgdA0f+gq1GL^@1GU[>NX. +?s0f(O=1,=jq1,LaB0ekFNX +.Bt0f(O>0en[o0f1XA0etI=NX.?p1bpg@1,=jq1,C^B0etI0f"ap0f(U?1GLX?NX.Bs1,:U?0en[o0f(U@1,:R>NX.?o2)-mA1,=jq1,:[A1,:R= +NX.?o2)6pB0f"ap1,Ud@1GU[>NX.?r1,1R?0f"ap1,C^@1GU[>NX.?p1bgdA0f"ap1,1X@1GU[ +>NX.?t0f(O=1,4dp0f1[B0ekF1,4dp0f:^B0etINX.?o2DI!C0en[o0ekC>0ekF@NX.Eq0f1U>1,Fpr2)-gB0 +ekF1,P!s1bg^@1,1O>NX.Bp0f1U?0f4mr1bg^A0etI=NX.?o0etO>1,Y't1GLU> +1GLX@NX.Ks0etO>1,4dp0ekC=1,:RANX.Eq0f(R?0f+gq2)-gA1,:R=NX.Bp0ekL>1,P!s1bg^ +>1bga@NX.Bp0etO?0f4mr1bg^?1GU[?NX.?o0ekL?0f=ss1GLU=1bpdANX.Ks0ekL?0en[o0et +I?0ekF?NX.Er0f1U>1,=jq1,1O@0ekF>NX.Hr1,L^?1,4dp1,:R?1,1O?NX.Hs0f(R>1,4dp0e +kF>1,1O@NX.Bq0f1U?0f+gq1bpdB0etI1,P!s1 +GU[?1GLX?NX.?p0f(R?0f4mr1GU[@1,:R>NX.Bp1,C[@0f+gq1bgaA1,:R=NX.Bq0ekL>1,Fpr +1bpd?1bga?NX.?o1,1U?1,P!s1,:R>1GU[@NX.Hs0etO?0en[o0ekF=1GU[ANX.Eq1,:X@0f"a +p0etI<1bpdBNX.Er0ekL?0f"ap1,1O=1bpdANX.Hr1,1U@0en[o0f(O@0ekF>NX.Es0f1U>1,4 +dp1,:UA0ekF=NX.?o1Ggg@1,Fpr1GL[B0ekF1,=jq0etL?1,1O?NX.Br0f1U?0f +"ap0etL@0etI>NX.Er1,L^@0en[o1,1RA0etI=NX.?q0etO>1,Fpr1G^a@1GLX>NX.?q0f(R?0 +f+gq1G^aA1,:R=NX.?o1GUa@1,Fpr1,:U@1,:R>NX.?o1G^dA0f+gq1GL[A1,:R=NX.Br0ekL> +1,=jq0etL=1bgaANX.Br0etO?0f"ap0etL>1GU[@NX.Er1,:X@0en[o1,1R?1GU[?NX.?q0ekL +?0f+gq1G^a?1bpd?NX.Bq1,1U@0f"ap0ekI=1bpdANX.Eq1GL^A0en[o0f1UA0ekF=NX.Br1,L +^?1,4dp0etOA0ekF=NX.Bs0f(R>1,4dp0f(R@1,1O>NX.Bs0f1U?0en[o0f(RA0etI=NX.?o1c +$mA1,=jq1,:XB0etI1,=jq0f1U@1,:R>NX.?p1GUa@1,=jq1,C[A1,:R=NX.?p1 +G^dA0f"ap1,1UA1,:R=NX.Bs0ekL>1,4dp0f(R>1bga@NX.Bs0etO?0en[o0f(R?1GU[?NX.?o +1bggA1,=jq1,:X@1GU[>NX.?o1bpjB0f"ap0f1U>1bpd@NX.Br1,1U@0en[o0etO>1bpd@NX.B +p1bggB0en[o0f:[B0ekF1,4dp0f:[A1,:R=NX.?q1GUa@1,4dp0f(UA1,:R=NX.?o2)6sB1,4dp0f1X?1bga?NX +.?r1,:X@0en[o0etR?1bga?NX.?p1bpjB0en[o0f:[?1bpd?NX.?q1GL^A0en[o0ekO?1bpd?N +X.?o0f:[?1,P!s1GLUA0ekF=NX.Bp0f1X?1,Fpr1bg^A1,1O=NX.Bp0f:[@0f+gq1bg^B0etI< +NX.?o0f(U?1,P!s1GLU?1GLX?NX.?o0f1X@0f4mr1GLU@1,:R>NX.Bp0etR?1,Fpr1bg^?1bga +?NX.Bp0f(U@0f+gq1bg^@1GU[>NX.?o0ekO?1,P!s1GLU=2)-jANX.?o0etR@0f4mr1GLU>1bp +d@NX.Bp0ekO@0f+gq1bg^>2)6m@NX.?p0f:[?1,Fpr1GU[B0ekFNX.?o1,La@1,Fpr1,:RA0etI=NX.?o1,UdA0f+gq1GLXB0etINX.?p0f1X@0f+gq1GU[A1,:R=NX.Bp1,LaA0f"ap1,:R>1bga@NX.?o1,:[@1,Fpr1,:R? +1GU[?NX.?o1,C^A0f+gq1GLX@1GU[>NX.?p0ekO?1,Fpr1GU[>2)-j@NX.?p0etR@0f+gq1GU[ +?1bpd?NX.Bp1,:[A0f"ap1,:R=2)6mANX.?o1,1XA0f+gq1GLX>2)6m@NX.?q0f:[?1,=jq1,: +UB0ekFNX.Br0f:[@0en[o0etLA0etI=NX.?q0f(U?1,=jq0f +(O@1,:R>NX.?o1G^gA1,=jq1,:UA1,:R=NX.?o1GgjB0f"ap1,CX?1bga?NX.?p1,:[@1,=jq1 +,CX@1GU[>NX.?p1,C^A0f"ap1,1R@1GU[>NX.?q0ekO?1,=jq0f(O>1bpd@NX.?o1GLaA1,=jq +1,:U?1bpd?NX.?o1GUdB0f"ap1,CX>2)6m@NX.?p1,1XA0f"ap1,1R>2)6m@NX.?r0f:[?1,4d +p0f(RA1,1O=NX.?q1,UdA0en[o0f1U@1GLX>NX.?r0f1X@0en[o0etO@1GLX>NX.?p1GgjB0en +[o0f(R?1bga?NX.?q1,C^A0en[o0ekL?1bga?NX.?o1c$pC0en[o0f1U>2)-j@NX.?r0etR@0e +n[o0etO>2)-j@NX.?p1GUdB0en[o0f(R>2)6m@NX.?o1bgjC0en[o0ekC@0ekF>NX.Eq0fCa@1 +,4dp1,1L@1,1O>NX.Bp0fCaA0f"ap0ekC>1GLX@NX.Eq0f1[@1,4dp0ekC?1,:R?NX.Eq0f:^A +0en[o1,1L>1bga@NX.Bp0f1[A0f"ap0ekC<2)-jBNX.Eq0etU@1,4dp0ekC=1bpdANX.Eq0f(X +A0en[o1,1L<2DHsBNX.Bp0etUA0f"ap0etIA0ekF=NX.Bq0f:^@1,4dp0ekF@1,1O>NX.Bq0fC +aA0en[o0etI?1GLX?NX.?p0f:^A0f"ap1,1OA1,:R=NX.Bq0f(X@1,4dp0ekF>1bga@NX.Bq0f +1[A0en[o0ekF?1GU[?NX.?p0etU@1,=jq0etI>1bpd@NX.Bp1,CaB0en[o1,:R=2DHsANX.?o1 +,1[A1,=jq1,:R>2)6m@NX.?o1,:^B0f"ap0f(OB0ekFNX.?q +0f:^A0en[o0ekI@1GLX>NX.?p1,CaA1,4dp0etL@1GU[>NX.?q0etU@1,4dp0f(O?1bpd?NX.? +o1GUgB1,4dp0ekI?1bpd?NX.?p1,1[A1,4dp0etL>2)6m@NX.Eq0ekC<1,Y't2)-g?0etL?NX. +Bp0ekC=0fG$t1bg^>0f(O@NX.Nt0ekC=0f"ap1GLX>0ekI@NX.Ks1,1L<1GXsr0etI<0etLBNX +.Er0ekC<1,P!s2)6m@0etL>NX.Bp1,1L=1,Y't1bga?0etL?NX.Nt1,1L=1,4dp1,:R=0f(OAN +X.Hs0ekC=0f+gq0ekF<0f(OBNX.Eq1,1L>0f4mr2)-j@0f(O>NX.?p1,1L<1Gt0u1GU^?0ekI? +NX.Kt1,1L<1GOmq1,1R>0ekI@NX.Hr1GLU=1GXsr0f(O=0etLANX.Es0ekC<1,Fpr1,:U>0etL +@NX.Hs1,1L=1,=jq0ekI=0etLANX.Eq1GLU>1,Fpr2)-mA0etL=NX.Br0ekC=0f4mr1c$j@0f( +O>NX.?p1,1L>0f=ss1GU^?0f(O?NX.Kt1,1L>0en[o1,1R>0f(O@NX.Hr1GLU?0f"ap0f(R>0e +kI@NX.Es1,1L<1GXsr1,:X?0ekI?NX.Hs1GLU=1GOmq0ekL>0ekI@NX.Eq1bg^>1GXsr0f1U>0 +etL@NX.Et0ekC<1,=jq1,C[?0etL?NX.Ht1,1L=1,4dp0etO>0etL@NX.Er1GLU>1,=jq1,1U? +0etL?NX.Hr1bg^?1,4dp1,L^?0f(O?NX.?q1,1L>0f4mr1G^d@0f(O>NX.Bq1GLU?0f+gq1bpj +A0f(O=NX.?o1bg^@0f4mr1GL^@0f(O>NX.?r1,1L<1Gb$s1GgjA0ekI=NX.Br1GLU=1GXsr0et +R?0ekI?NX.Er1bg^>1GOmq1,1X@0ekI>NX.?s0ekC<1,Fpr1,La@0etL>NX.?q1GLU>1,Fpr1G +^gA0etL=NX.Bq1bg^?1,=jq0ekO?0etL?NX.Eq2)-g@1,4dp1,Ud@0f(O>NX.?r1,1L>0f+gq1 +GgjA0f(O=NX.Br1GLU?0f"ap0etR?0f(O?NX.Er1bg^@0en[o1,1X@0f(O>NX.?s1,1L<1GXsr +1,LdA0ekI=NX.?q1bg^>1GXsr1,:^A0ekI=NX.?o2DHp@1GXsr0fCa@0etL>NX.Bt1,1L=1,4d +p0f1[@0etL>NX.Br1bg^?1,4dp0etU@0etL>NX.Bp2DHpA1,4dp0f:^@0f(O>NX.Bs1GLU?0en +[o0f(X@0f(O>NX.Bq2)-gA0en[o0ekR@0f(O>NX.Bp0etI<1Gt0u1bg^?0ekI?NX.Nt0etI<1G +Omq0ekC;1,1RCNX.Eq0ekF<1Gk*t2)-g?1,1R?NX.?o0etI=1,b-u1GLU>0etL@NX.Ks0etI=1 +,=jq1,1L<1,:UBNX.Hr0ekF=1,Fpr2DHp@1,:U>NX.Bp0etI>0f=ss1bg^?0f(O?NX.Nt0etI> +0en[o0ekC;1,CXCNX.Eq0ekF>0f4mr2)-g?1,CX?NX.Bq0etI<1Gk*t1bpd@0ekI>NX.?o1,:R +=1Gt0u1GLX?0ekI?NX.Ks1,:R=1GOmq0etI<1,1RBNX.Er0ekF<1Gb$s2)6m@1,1R>NX.?p0et +I=1,Y't1GU[?0etL?NX.Kt0etI=1,4dp1,1O>0etL@NX.Hr1,:R>1,=jq1,:R=1,:UANX.Hs0e +kF=1,=jq0ekF<1,:UBNX.Bq0etI>0f4mr1bpd@0f(O>NX.?o1,:R?0f=ss1GLX?0f(O?NX.Ks1 +,:R?0en[o0etI<1,CXBNX.Er0ekF>0f+gq2)6m@1,CX>NX.Bp1,1O?0f4mr1bga?1,CX?NX.Br +0etI<1Gb$s1c$jA0ekI=NX.?p1,:R=1Gk*t1GU^@0ekI>NX.Bp1GU[>1Gb$s1bgdA0ekI=NX.? +q0ekF<1Gk*t1G^a?1,1R?NX.?q0etI=1,P!s1G^a@0etL>NX.?o1GLX>1Gk*t1,:U?0etL?NX. +Hs1,:R>1,4dp0ekI>0etL@NX.Eq1GU[?1,=jq1,CX>1,:U@NX.Ht0ekF=1,4dp0etL=1,:UANX +.Br0etI>0f+gq1c$jA0f(O=NX.?p1,:R?0f4mr1GU^@0f(O>NX.Bp1GU[@0f+gq1bgdA0f(O=N +X.?q0ekF>0f4mr1G^a?1,CX?NX.Bq1,1O?0f+gq1bpg@1,CX>NX.?o1GLX@0f4mr1GL[?1,CX? +NX.Bs0etI<1GXsr0f(R?0ekI?NX.Es1,:R=1GOmq1,:X@0ekI>NX.?o1bpd?1Gb$s1GL^A0ekI +=NX.?r0ekF<1Gb$s1Ggg@1,1R>NX.?r0etI=1,Fpr1GggA0etL=NX.?p1GLX>1Gb$s1,C[@0et +L>NX.?p1GU[?1,Fpr1GUaA0etL=NX.Bp1bpd@1,=jq1,L^?1,:U?NX.?q1,1O>1,Fpr1,L^@0f +(O>NX.?q1,:R?0f+gq1G^dA0f(O=NX.?o1bga@1,Fpr1,:X@0f(O>NX.?o1bpdA0f+gq1GL^A0 +f(O=NX.?r0ekF>0f+gq1Ggg@1,CX>NX.Br1,1O?0f"ap0etO>1,CX@NX.Er1GLX@0en[o1,1U? +1,CX?NX.Bt0etI<1GOmq0f1X@0ekI>NX.Br1GU[>1GOmq0etR@0ekI>NX.Bp2)6m@1GOmq0f:[ +?1,1R?NX.?s0etI=1,=jq0f(U?1,1R?NX.Bs1,:R>1,4dp0f(U@0etL>NX.?o2)-j@1GXsr1,: +[A0etL=NX.?o2)6mA1,=jq1,Ud@1,:U>NX.?r1,1O>1,=jq1,UdA0f(O=NX.?r1,:R?0f"ap0e +tR?1,:U?NX.Br1GU[@0en[o0etR@0f(O>NX.Bp2)6mB0en[o0f:[?1,CX?NX.Bs1,1O?0en[o0 +f(U?1,CX?NX.Bq1bgaA0en[o0ekO?1,CX?NX.?s1,:R=1GOmq0f(XA0ekI=NX.?t0ekF<1GOmq +0fCaA0etL=NX.?r1GLX>1GOmq0f1[A0etL=NX.?p2)-j@1GOmq0etUA0etL=NX.?s1,1O>1,4d +p0f:^A0f(O=NX.?q1bga@1,4dp0f(XA0f(O=NX.?o2DHsB1,4dp0fCa@1,CX>NX.?r1GLX@0en +[o0etU@1,CX>NX.Bp0f(O=1Gk*t1bg^@0ekI>NX.?o0etL=1Gt0u1GLU>1,1R@NX.Ks0etL=1G +Omq0ekC=0etLANX.Eq0f(O>1,Fpr2)-gA0etL=NX.Bp0ekI=1Gk*t1bg^>1GL[@NX.Bp0etL>1 +,P!s1bg^?1,:U?NX.Bp0f(O?0f4mr1bg^@0f(O>NX.?o0ekI>1,Y't1GLU=1GU^ANX.Ks0ekI> +1,4dp0ekC<1,CXBNX.Eq0etL?0f+gq2)-g@1,CX>NX.Bp0ekI?0f4mr1bg^>1G^a@NX.Bq0f(O +=1Gb$s1bpdA0ekI=NX.?o1,CX>1Gk*t1GLX@0ekI>NX.?p0etL=1Gk*t1GU[?1,1R?NX.?p0f( +O>1,P!s1GU[@0etL>NX.Bp1,CX?1,Fpr1bgaA0etL=NX.Bq0ekI=1Gb$s1bpd?1GL[?NX.?o1, +1R>1Gk*t1,:R>1,:U@NX.Hs0etL>1,4dp0ekF=1,:UANX.Bq0f(O?0f+gq1bpdA0f(O=NX.?o1 +,CX@0f4mr1GLX@0f(O>NX.?p0ekI>1,P!s1GU[>1GU^@NX.?p0etL?0f4mr1GU[?1,CX?NX.Bp +1,:U@0f+gq1bga@1,CX>NX.Bq0ekI?0f+gq1bpd?1G^a?NX.?o1,1R@0f4mr1GLX>1G^a@NX.B +r0f(O=1GXsr0etL?0ekI?NX.Er1,CX>1GOmq1,1R@0ekI>NX.?q0etL=1Gb$s1G^a@1,1R>NX. +?q0f(O>1,Fpr1G^aA0etL=NX.?o1GU^?1Gb$s1,:U@0etL>NX.?o1G^a@1,Fpr1GL[A0etL=NX +.Br0ekI=1GXsr0etL=1GL[ANX.Br0etL>1,=jq0etL>1,:U@NX.Br0f(O?0f"ap0etL?0f(O?N +X.Er1,CX@0en[o1,1R@0f(O>NX.?q0ekI>1,Fpr1G^a?1GU^?NX.?q0etL?0f+gq1G^a@1,CX> +NX.?o1GL[@1,Fpr1,:U?1,CX?NX.?o1GU^A0f+gq1GL[@1,CX>NX.Br0ekI?0f"ap0etL=1G^a +ANX.Er1,1R@0en[o1,1R>1G^a@NX.Bs0f(O=1GOmq0f(R@0ekI>NX.Bq1G^a?1GOmq0ekL@0ek +I>NX.?r0etL=1GXsr0f1U@0etL>NX.?p1GU^?1GXsr1,C[A0etL=NX.?p1G^a@1,=jq1,1UA0e +tL=NX.Bs0ekI=1GOmq0f(R>1GL[@NX.Bs0etL>1,4dp0f(R?1,:U?NX.Bs0f(O?0en[o0ekL>1 +GL[@NX.?q1,CX@0f"ap0ekL?1,:U?NX.Bq1G^aA0en[o0ekL@0f(O>NX.?r0ekI>1,=jq0f1U? +1,CX?NX.?p1GL[@1,=jq1,C[@1,CX>NX.?p1GU^A0f"ap1,1U@1,CX>NX.Bs0ekI?0en[o0f(R +>1G^a@NX.Bq1GL[A0en[o0ekL>1G^a@NX.?r1,CX>1GOmq0etRA0ekI=NX.?s0etL=1GOmq0f: +[A0etL=NX.?q1GU^?1GOmq0f(UA0etL=NX.?o2)6pA1GOmq0f1X?1GL[?NX.?r1,:U?1,4dp0e +tR?1GL[?NX.?r1,CX@0en[o0etR@1,:U>NX.?p1c$jB0en[o0f:[?1GU^?NX.?s0etL?0en[o0 +f(U?1GU^?NX.?q1GU^A0en[o0ekO?1GU^?NX.?o2)6pC0en[o0f1X?1G^a?NX.?p1bgdB0en[o +1,1L?0ekI?NX.Hr0f1U>1GOmq0ekC=1,1RANX.Eq0f(R>1GXsr0ekC>0etL@NX.Eq0f1U?1,=j +q1,1L=1GL[ANX.Hr0etO>1GOmq1,1L>1,:U@NX.Hr0f(R?1,4dp1,1L?0f(O?NX.Hr0f1U@0en +[o0ekC;1bgdCNX.Eq0ekL>1GXsr0ekC<1GU^BNX.Eq0etO?1,=jq0ekC=1,CXANX.Eq0f(R@0f +"ap1,1L<1bpgBNX.Hr0ekL?1,4dp1,1L=1G^aANX.Hr0etO@0en[o0ekC;1c$jCNX.Eq0ekL@0 +f"ap1,:R@0ekI>NX.?o1,L^?1Gb$s1GLXA0ekI=NX.?p0f(R>1Gb$s1GU[@1,1R>NX.?p0f1U? +1,Fpr1GU[A0etL=NX.Bp1,L^@1,=jq1,:R>1GL[@NX.?o1,:X?1Gb$s1,:R?1,:U?NX.?o1,C[ +@1,Fpr1,:R@0f(O>NX.?o1,L^A0f+gq1GLXA0f(O=NX.?p0ekL>1Gb$s1GU[>1bgd@NX.?p0et +O?1,Fpr1GU[?1GU^?NX.?p0f(R@0f+gq1GU[@1,CX>NX.Bp1,C[A0f"ap1,:R=1bpgANX.?o1, +1U@1,Fpr1,:R>1G^a@NX.?o1,:XA0f+gq1GLX?1G^a?NX.?p0ekL@0f+gq1GU[>1c$j@NX.Bp1 +,1UA0f"ap1,CXA0ekI=NX.?p1,L^?1GXsr1,1RA0ekI=NX.?q0f(R>1GXsr0f(O@0etL>NX.?o +1G^d@1GXsr1,:UA0etL=NX.?o1GggA1,=jq1,CX?1GL[?NX.?p1,:X?1GXsr1,CX@1,:U>NX.? +p1,C[@1,=jq1,CXA0f(O=NX.?p1,L^A0f"ap1,1RA0f(O=NX.?q0ekL>1GXsr0f(O>1GU^@NX. +?o1GL^@1GXsr0f(O?1,CX?NX.?o1GUaA1,=jq1,:U@1,CX>NX.?o1G^dB0f"ap1,CX>1bpg@NX +.?p1,1U@1,=jq1,CX?1G^a?NX.?p1,:XA0f"ap1,1R?1G^a?NX.?q0ekL@0f"ap1,:U>1c$j@N +X.?o1GL^B0f"ap0 f(RA0 ekI=N X.?r0 f( R>1 GOmq0f 1UA0etL +=NX.?p1G^d@1GOm q0e tOA0e tL=NX .? q1, :X? 1GOm +q0f(R@1,:U>NX.? o1bpj A1 GOmq0 f(RA 0f (O= NX.?o 1c$ mB1,4 dp0f +1U>1bgd@NX.?r0e tO?1, 4dp 0et O>1b gd @NX .?r0f( R@ 0en[o0 etO +?1GU^?NX.?p1G^d B0en[ o0f (R> 1 bpg @NX .?q 1,:XA0 en [o0ekL >1b +pg@NX.?o1bpjC0e n[o0f 1U> 1c$ j@ NX .?p 1GL ^B0en[ o1 ,1L@0e kI> +NX.?o0f1X?1Gb$s 1GLU @1, 1R >N X.? o0f :[@ 1,Fp +r1GLUA0etL=NX.B p0f( U ?1 GX sr1 ,1L ?1,: U?NX. +Bp0f:[A0f"ap0ek C<1bgd BNX . Eq0 et R?1G Omq 0ekC=1GU^A NX.Eq0f(U@1 +,4dp0ekC>1,CX@N X.Eq0f 1XA 0 en[o 1,1L <2) -mBNX.Bp0e tR@1,=jq1,1 +L>1G^a@NX.?o0ek O@1,Fp r1G LU=2 )6pA NX. ?o0etRA0f+ gq1GLU>1c$j +@NX.Bq0f:[?1GOm q0ekF @0ek I>NX. ?p0f 1X? 1GXsr0etI@ 0etL>NX.Bp1 +,UdA1,4dp1,:R?1 GL[?N X.?o1 ,C^@1 GXs r1,:R@1,:U >NX.?o1,LaA +1,=jq1,:RA0f(O= NX.?o1, UdB0f" ap0et I=1 bgdANX.?p0 f(U@1,=jq0e +tI?1,CX?NX.Bp1,LaB0en[o1,:R=2)-mANX.?o1,1X@1GXsr1,:R>1bpg@NX.?o1,:[A1,=jq1 +,:R?1G^a?NX.?o1,C^B0f"ap0etI<2)6pBNX.?p0etRA0f"ap1,1O>1c$j@NX.?p1,Ud@1GOmq +0f(O@1,1R>NX.?q0f:[@1,4dp0ekI@1,1R>NX.?p1,C^@1GOmq0etL@1,:U>NX.?p1,UdB0en[ +o0f(O>1bgd@NX.?q0f(U@1,4dp0ekI>1bgd@NX.?q0f1XA0en[o0ekI?1GU^?NX.?o1GgjC0en +[o0etL=2)-mANX.?p1,:[A1,4dp0etL?1G^a?NX.?q0ekO@1,4dp0f(O>1c$j@NX.?o1GLaB1, +4dp0ekI>1c$j@NX.Bp0fCa@1GOmq0ekC?1,1R?NX.?o0fCaA1,=jq1,1L?1GL[?NX.Bp0f:^A1 +,4dp1,1LA0f(O=NX.?o0f(X@1GXsr0ekC>1GU^@NX.?o0f:^B0f"ap1,1L=2)-mANX.Bp0f(XA +1,4dp1,1L?1G^a?NX.?o0ekR@1GXsr0ekC<2)6pBNX.?o0f(XB0f"ap0etI@1,1R>NX.?p0fCa +A1,4dp0ekF?1GL[?NX.?o1,UgB1,4dp0etI>1bgd@NX.?p0f1[A1,4dp0etI@1,CX>NX.?o1,: +^A1GOmq0ekF>1bpg@NX.?o1,LdC0en[o0etI<2DI!BNX.?p0etUA1,4dp0etI>1c$j@NX.Bp0e +kC<1Gt0u1bg^>0etO@NX.Nt0ekC<1GOmq0ekC;0f(RCNX.Eq0ekC=1,P!s2)-g?0f(R?NX.Bp0 +ekC>0f=ss1bg^>0f1U@NX.Nt0ekC>0en[o1,1O=0ekLANX.Hr1,1L<1bt's1,:R=0etOANX.Hs +0ekC<1GXsr0ekF<0etOBNX.Eq1,1L=1Gb$s2)-j@0etO>NX.?p0ekC=1,Y't1GU[>0f(R@NX.K +t0ekC=1,4dp1,1O=0f(RANX.Hr1,1L>1,=jq1,:R=0f1UANX.Hs0ekC>0f"ap0ekF<0f1UBNX. +Eq1,1L?0f+gq2)-j@0f1U>NX.Bq1,1L<1c(-t1bpg@0ekL>NX.?o1GLU=1c13u1GL[?0ekL?NX +.Br0ekC<1Gb$s1c$j@0etO>NX.?p1,1L=1Gk*t1GU^?0etO?NX.Bp1GLU>1Gb$s1bgd@0etO>N +X.?q0ekC=1,P!s1G^a?0f(R?NX.Bq1,1L>1,Fpr1bpg@0f(R>NX.?o1GLU?1,P!s1GL[?0f(R? +NX.Br0ekC>0f+gq1c$j@0f1U>NX.?p1,1L?0f4mr1GU^?0f1U?NX.Bp1GLU@0f+gq1bgd@0f1U +>NX.Br1,1L<1bt's0etO>0ekL@NX.Er1GLU=1bk!r1,1U?0ekL?NX.Bs0ekC<1GXsr0f(R>0et +O@NX.Es1,1L=1GOmq1,:X?0etO?NX.?o1bg^?1Gb$s1GL^@0etO>NX.?r0ekC=1,Fpr1Ggg@0f +(R>NX.Br1,1L>1,=jq0etO>0f(R@NX.Er1GLU?1,4dp1,1U?0f(R?NX.Bs0ekC>0f"ap0f(R>0 +f1U@NX.Es1,1L?0en[o1,:X?0f1U?NX.?o1bg^A0f+gq1GL^@0f1U>NX.Bs1,1L<1bk!r0f(U? +0ekL?NX.Bq1bg^>1bk!r0ekO?0ekL?NX.Bt0ekC<1GOmq0f1X?0etO?NX.Br1GLU>1GOmq0etR +?0etO?NX.Bp2)-g@1GOmq0f:[?0f(R?NX.Bs1,1L>1,4dp0f(U?0f(R?NX.Bq1bg^@1,4dp0ek +O?0f(R?NX.Bt0ekC>0en[o0f1X?0f1U?NX.Br1GLU@0en[o0etR?0f1U?NX.Bp2)-gB0en[o0f +1[@0ekL>NX.?p2)-g?1bk!r0f:^@0etO>NX.?q1bg^?1GOmq0ekR@0etO>NX.?t0ekC=1,4dp0 +f1[@0f(R>NX.?p2)-gA1,4dp0f:^@0f1U>NX.?q1bg^A0en[o0ekR@0f1U>NX.Eq0etI<1c(-t +2)-g@0ekL>NX.Bp0ekF<1c13u1bg^>1,1U@NX.Bp0etI=1Gk*t1bg^?0etO?NX.?o0ekF=1Gt0 +u1GLU=1,:XANX.Ks0ekF=1GOmq0ekC<0f(RBNX.Eq0etI>1,Fpr2)-g@0f(R>NX.Bp0ekF>1,P +!s1bg^>1,C[@NX.Bp0etI?0f4mr1bg^?0f1U?NX.?o0ekF?0f=ss1GLU=1,L^ANX.Ks0ekF?0e +n[o0etI=0ekLANX.Er0etI<1bt's1,1O>0ekL@NX.Hr1,:R=1bk!r1,:R=1,1UANX.Hs0ekF<1 +bk!r0ekF<1,1UBNX.Bq0etI=1Gb$s1bpd@0etO>NX.?o1,:R>1Gk*t1GLX?0etO?NX.?p0ekF= +1Gk*t1GU[>1,:X@NX.?p0etI>1,P!s1GU[?0f(R?NX.Bp1,:R?1,Fpr1bga@0f(R>NX.Bq0ekF +>1,Fpr1bpd?1,C[?NX.?o1,1O?1,P!s1,:R>0f1U@NX.Hs0etI?0en[o0ekF=0f1UANX.Eq1,: +R@0f"ap0etI<1,L^BNX.Er0ekF?0f"ap1,1O=1,L^ANX.Hr1,1O@0en[o0f(O>0ekL@NX.Es0e +tI<1bk!r1,:U?0ekL?NX.?o1GU[>1c(-t1GL[@0ekL>NX.Br0ekF<1bt's0etL=1,1UANX.Br0 +etI=1GXsr0etL>0etO@NX.Er1,:R>1GOmq1,1R?0etO?NX.?q0ekF=1Gb$s1G^a?1,:X?NX.?q +0etI>1,Fpr1G^a@0f(R>NX.?o1GLX?1Gb$s1,:U?0f(R?NX.?o1GU[@1,Fpr1GL[@0f(R>NX.B +r0ekF>1,=jq0etL=1,C[ANX.Br0etI?0f"ap0etL>0f1U@NX.Er1,:R@0en[o1,1R?0f1U?NX. +?q0ekF?0f+gq1G^a?1,L^?NX.Bq1,1O@0f"ap0ekI=1,L^ANX.Eq1GLXA0en[o0f1U?0ekL?NX +.Br1,:R=1bk!r0etO?0ekL?NX.Bp1bpd?1bk!r1,L^?1,1U?NX.?q1,1O=1bt's1,L^@0etO>N +X.?q1,:R>1GXsr0ekL>1,1U@NX.Bq1GU[?1GOmq0ekL?0etO?NX.?r0ekF=1GXsr0f1U?0f(R? +NX.?p1GLX?1GXsr1,C[@0f(R>NX.?p1GU[@1,=jq1,1U@0f(R>NX.Bs0ekF>1,4dp0f(R>1,C[ +@NX.Bs0etI?0en[o0f(R?0f1U?NX.?o1bgaA1,=jq1,:X@0f1U>NX.?o1bpdB0f"ap0f1U>1,L +^@NX.Br1,1O@0en[o0etO>1,L^@NX.Bp1bgaB0en[o0f:[@0ekL>NX.?q1GU[>1bk!r0ekO@0e +kL>NX.?r1,1O=1bk!r0f1X@0etO>NX.?p1bga?1bk!r0etR@0etO>NX.?s0ekF=1GOmq0f:[@0 +f(R>NX.?q1GLX?1GOmq0f(U@0f(R>NX.?o2)-jA1GOmq0ekO@0f(R>NX.?r1,1O?1,4dp0f1X@ +0f1U>NX.?p1bgaA1,4dp0etR@0f1U>NX.?s0ekF?0en[o0f(U?1,L^?NX.?o2)-jC0en[o0ekC +=0ekLANX.Eq0f(O=1bt's1,1L=1,1UANX.Hr0etL=1bk!r1,1L>0etO@NX.Hr0f(O>1GOmq0ek +C;1GL^CNX.Eq0ekI=1bt's0ekC<1,:XBNX.Eq0etL>1GXsr0ekC=0f(RANX.Eq0f(O?1,=jq1, +1L<1GUaBNX.Hr0ekI>1GOmq1,1L=1,C[ANX.Hr0etL?1,4dp1,1L>0f1U@NX.Hr0f(O@0en[o0 +ekC;1G^dCNX.Eq0ekI?1,=jq0ekC<1,L^BNX.Eq0etL@0f"ap1,1L<1GggBNX.Hr0ekI@0en[o +0etI>0ekL@NX.Er0f(O=1bk!r1,1O?0ekL?NX.Bq0etL=1bt's0ekF=1,1UANX.Bq0f(O>1GXs +r0ekF>0etO@NX.Eq1,CX?1GOmq0etI<1GL^BNX.Er0ekI=1bk!r0etI=1,:XANX.Er0etL>1GO +mq0etI>0f(R@NX.Er0f(O?1,4dp1,1O?0f(R?NX.Bq0ekI>1GXsr0ekF<1GUaBNX.Bq0etL?1, +=jq0ekF=1,C[ANX.Bq0f(O@0f"ap0ekF>0f1U@NX.Eq1,CXA0en[o0etI<1G^dBNX.Er0ekI?1 +,4dp0etI=1,L^ANX.Er0etL@0en[o1,1O>1,L^@NX.Bq0ekI@0f"ap0ekF<1GggBNX.Eq1,1RA +0en[o0f(O?0ekL?NX.Bq1,CX>1bk!r0ekI?0ekL?NX.Br0etL=1bk!r0etL>1,1U@NX.Br0f(O +>1GOmq0etL?0etO?NX.Bp1G^a@1GOmq0f(O=1GL^ANX.?q0etL>1GXsr0ekI=1GL^ANX.?q0f( +O?1,=jq0ekI>1,:X@NX.Bq1,CX@1,4dp0ekI?0f(R?NX.Br0ekI>1GOmq0etL=1GUaANX.Br0e +tL?1,4dp0etL>1,C[@NX.Br0f(O@0en[o0etL?0f1U?NX.Bp1G^aB0en[o0f(O=1G^dANX.?q0 +etL@0f"ap0ekI=1G^dANX.Bq1,:UA0en[o0ekI>1,L^@NX.Br0ekI@0en[o0etL=1GggANX.Bp +1GL[B0en[o0f1U@0ekL>NX.?p1G^a?1bk!r0f(R?1,1U?NX.?q1,CX?1GOmq0ekL?1,1U?NX.? +o1c$jA1GOmq0f1U>1GL^@NX.?r0etL>1GOmq0etO>1GL^@NX.?r0f(O?1,4dp0etO?1,:X?NX. +?p1G^aA1,4dp0f(R>1GUa@NX.?q1,:U@1,4dp0ekL>1GUa@NX.?q1,CXA0en[o0ekL?1,C[?NX +.?o1c$jC0en[o0f1U>1G^d@NX.?r0etL@0en[o0etO>1G^d@NX.?p1GU^B0en[o0f(R>1Ggg@N +X.?o1bgdC0en[o0ekC>0ekL@NX.Eq0f1U>1bk!r1,1L>1,1U@NX.Bp0f1U?1GXsr0ekC<1GL^B +NX.Eq0etO>1bk!r0ekC=1,:XANX.Eq0f(R?1GOmq0ekC>0f(R@NX.Eq0f1U@1,4dp1,1L<1bgg +BNX.Bp0etO?1GXsr1,1L>1,C[@NX.Bp0f1UA0f"ap0ekC;1bpjCNX.Eq0ekL?1GOmq0ekC<1G^ +dBNX.Eq0etO@1,4dp0ekC=1,L^ANX.Eq0f(RA0en[o1,1L<1c$mBNX.Bp0etOA0f"ap0etI?0e +kL?NX.Bp1,L^?1bk!r1,:R?1,1U?NX.?o1,C[?1bt's1,:R@0etO>NX.?o1,L^@1GXsr0etI=1 +GL^ANX.?p0f(R?1GXsr0etI?0f(R?NX.Bp1,L^A1,4dp1,:R=1bggANX.?o1,1U?1bt's1,:R> +1GUa@NX.?o1,:X@1GXsr1,:R?1,C[?NX.?o1,C[A1,=jq1,:R@0f1U>NX.?o1,L^B0f"ap0etI +<1bpjBNX.?p0etO@1,=jq0etI>1,L^@NX.Bp1,C[B0en[o1,:R=1c$mANX.?o1,1UA1,=jq1,: +R>1Ggg@NX.?o1,:XB0f"ap0f(O@0ekL>NX.?o1Ggg@1bk!r0etL?1,1U?NX.?p1,L^@1GOmq0f +(O>1GL^@NX.?q0f(R?1GOmq0ekI>1GL^@NX.?q0f1U@1,4dp0ekI?1,:X?NX.?o1GggB1,4dp0 +etL=1bggANX.?p1,:X@1GOmq0etL?1,C[?NX.?p1,L^B0en[o0f(O=1bpjANX.?q0etO@1,4dp +0ekI=1bpjANX.?q0f(RA0en[o0ekI>1G^d@NX.?o1G^dC0en[o0etL=1c$mANX.?p1,:XB0en[ +o0ekC?0ekL?NX.Bp0f1X?1bk!r1,1L@0etO>NX.?o0f(U?1bt's0ekC>1,:X@NX.?o0f:[A1,= +jq1,1L=1bggANX.Bp0f(U@1GOmq1,1L?1,C[?NX.Bp0f:[B0en[o0ekC;2)-pCNX.?o0etR@1G +Xsr0ekC=1G^dANX.?o0f1XB0f"ap1,1L<2)6sBNX.Bp0etRA1,4dp1,1L>1Ggg@NX.?p0f:[?1 +bk!r0ekF?1,1U?NX.?o1,UdA1GOmq0etI>1GL^@NX.?p0f1X@1GOmq0etI@0f(R>NX.?o1,:[@ +1bk!r0ekF>1GUa@NX.?o1,LaB1,4dp0ekF@0f1U>NX.?p0ekO?1bk!r0etI=1bpjANX.?p0f(U +A1,4dp0etI?1,L^?NX.?o1,1XA1GOmq0ekF=1c$mANX.?o1,C^C0en[o0ekC@0ekL>NX.?o0f1 +[@1bk!r0ekC?1,:X?NX.?o0fCaB1,4dp0ekC<2)-pBNX.?o0f(XA1GOmq0ekC>1G^d@NX.?o0f +:^C0en[o0ekC;0etRCNX.Eq0ekC<1c(-t2)-g?0etR?NX.Bp0ekC=1Gk*t1bg^>0f(U@NX.?o0 +ekC>1,Y't1GLU=0f1XANX.Ks0ekC>1,4dp1,1L<0f:[BNX.Hr0ekC?0f"ap1GLX>0ekO@NX.?p +0ekC<1c13u1GU[>0etR@NX.Bp1,1L=1c(-t1bga?0etR?NX.Bq0ekC=1Gb$s1bpd?0f(U?NX.? +o1,1L>1Gk*t1GLX>0f(U@NX.?p0ekC>1,P!s1GU[>0f1X@NX.Bp1,1L?1,Fpr1bga?0f1X?NX. +Bq0ekC?0f+gq1bpd?0f:[?NX.?o1,1L@0f4mr1GLX>0f:[@NX.?p1,1L<2)C6u1GU^?0ekO?NX +.Bp1GLU=2):0t0f(O=0etRANX.Es0ekC<1bk!r1,:U>0etR@NX.?o1GLU>1c(-t1GL[?0etR?N +X.Br0ekC=1GXsr0etL=0f(UANX.Er1,1L>1GOmq1,1R>0f(U@NX.?q0ekC>1,Fpr1G^a?0f1X? +NX.Bq1,1L?1,=jq0ekI=0f1XANX.Eq1GLU@1,4dp1,CX>0f:[@NX.?p1,1L@0f+gq1GU^?0f:[ +?NX.Bp1GLUA0f"ap0f(R>0ekO@NX.Bq1GLU=2)1*s0ekL>0ekO@NX.?r0ekC<1bt's1,C[?0et +R?NX.?p1GLU>1bt's1,1U?0etR?NX.Bs0ekC=1GOmq0f(R>0f(U@NX.Bq1GLU?1GOmq0ekL>0f +(U@NX.?r0ekC>1,=jq1,C[?0f1X?NX.?p1GLU@1,=jq1,1U?0f1X?NX.Bs0ekC?0en[o0f(R>0 +f:[@NX.Bq1GLUA0en[o0ekL>0f:[@NX.?r1,1L<2)1*s0etR?0ekO?NX.?s0ekC<1bk!r0f(U? +0etR?NX.?o2)-g@1bk!r0f1X?0f(U?NX.?p1bg^@1GOmq0f:[?0f1X?NX.?q1GLU@1,4dp0ekO +?0f1X?NX.?r1,1L@0en[o0etR?0f:[?NX.Bp0etI<2)C6u1bg^?0ekO?NX.?o0ekF<2)L=!1GL +U=1,1XANX.?o0etI=1c13u1GLU>0etR@NX.Bp0ekF=1c(-t1bg^>1,:[@NX.Bp0etI>1Gb$s1b +g^?0f(U?NX.?o0ekF>1Gk*t1GLU=1,C^ANX.?o0etI?1,P!s1GLU>0f1X@NX.Bp0ekF?1,Fpr1 +bg^>1,La@NX.Bp0etI@0f+gq1bg^?0f:[?NX.?o0ekF@0f4mr1GLU=1,UdANX.Bq0etI<2):0t +0ekF=0ekOANX.Eq1,:R=2)1*s0etI<1,1XBNX.Er0ekF<2)1*s0etI=0etRANX.Er0etI=1bk! +r1,1O>0etR@NX.Bq0ekF=1bt's0ekF<1,:[BNX.Bq0etI>1GXsr0ekF=0f(UANX.Eq1,:R?1GO +mq0etI<1,C^BNX.Er0ekF>1GOmq0etI=0f1XANX.Er0etI?1,4dp1,1O>0f1X@NX.Bq0ekF?1, +=jq0ekF<1,LaBNX.Bq0etI@0f"ap0ekF=0f:[ANX.Eq1,:RA0en[o0etI<1,UdBNX.Er0ekF@0 +en[o1,1O=1,UdANX.Br0etI<2)1*s0etL>0ekO@NX.Bp1GU[>2)1*s0f(O=1,1XANX.?q0etI= +1bt's0ekI=1,1XANX.Bq1,:R>1bk!r0ekI>0etR@NX.Br0ekF=1bk!r0etL=1,:[ANX.Br0etI +>1GOmq0etL>0f(U@NX.Bp1GU[@1GOmq0f(O=1,C^ANX.?q0etI?1,=jq0ekI=1,C^ANX.Bq1,: +R@1,4dp0ekI>0f1X@NX.Br0ekF?1,4dp0etL=1,LaANX.Br0etI@0en[o0etL>0f:[@NX.Bp1G +U[B0en[o0f(O=1,UdANX.Bq1,1OA0en[o0ekI=1,UdANX.?q1,:R=2)1*s0ekL?0ekO?NX.?r0 +ekF<2)1*s0f1U?0etR?NX.?p1GLX>2)1*s0etO?0etR?NX.?q1,1O>1bk!r0f(R?0f(U?NX.?o +1bga@1bk!r0ekL?0f(U?NX.?r0ekF>1GOmq0f1U?0f1X?NX.?p1GLX@1GOmq0etO?0f1X?NX.? +q1,1O@1,4dp0f(R?0f:[?NX.?o1bgaB1,4dp0ekL?0f:[?NX.?r0ekF@0en[o0etO>1,Ud@NX. +Bp0f(O=2):0t0ekC<1,1XBNX.Eq0etL=2)1*s0ekC=0etRANX.Eq0f(O>1bk!r1,1L<1GLaBNX +.Bp0etL>1bt's1,1L>0f(U@NX.?o0ekI>1c(-t1GLU=1GUdANX.?o0etL?1Gb$s1GLU>1,C^@N +X.?o0f(O@1,Fpr1GLU?0f1X?NX.Bp0ekI?1GXsr1,1L=1,LaANX.Bp0f(OA0f"ap0ekC;1GgjC +NX.Eq0ekI@1,4dp0ekC<1,UdBNX.Eq0etLA0en[o1,:R?0ekO?NX.?o1,CX>2):0t0etI=1,1X +ANX.?p0f(O>1bt's1,1O?0etR?NX.Bq0ekI=2)1*s0ekF<1GLaBNX.Bq0etL>1bk!r0ekF=1,: +[ANX.Bq0f(O?1GOmq0ekF>0f(U@NX.?p0ekI>1bt's0etI=1,C^ANX.?p0f(O@1,=jq1,1O?0f +1X?NX.Bq0ekI?1GOmq0ekF<1G^gBNX.Bq0etL@1,4dp0ekF=1,LaANX.Bq0f(OA0en[o0ekF>0 +f:[@NX.?p0ekI@1,=jq0etI=1,UdANX.Bp1,:UB0en[o0etL?0ekO?NX.?q0etL=2)1*s0f(O? +0etR?NX.?o1GU^?2)1*s0ekI?0etR?NX.?p1,1R>2)1*s0etL>1,:[@NX.?p1,CX@1GOmq0f(O +=1GUdANX.?q0etL?1GOmq0ekI=1GUdANX.?q0f(O@1,4dp0ekI>1,C^@NX.?o1G^aB1,4dp0et +L=1G^gANX.?p1,:UA1,4dp0etL?0f:[?NX.?q0ekI@1,4dp0f(O>1,Ud@NX.?o1GL[B1,4dp0e +kI>1,Ud@NX.Bp0f1U>2)1*s0ekC=1,1XANX.?o0f1U?1bt's1,1L=1GLaANX.Bp0f(R?1bk!r1 +,1L?0f(U?NX.?o0ekL>2):0t0ekC<1GUdBNX.?o0f(R@1GXsr0ekC>0f1X@NX.Bp0ekL?1bk!r +1,1L=1G^gANX.Bp0f(RA1,4dp1,1L?0f:[?NX.?o0ekL@1GXsr0ekC<1GgjBNX.?o0f(RB0f"a +p0ekF?0ekO?NX.?p0f(R>2)1*s0etI?0etR?NX.?o1,:X?2)1*s0ekF>1,:[@NX.?o1,L^A1GO +mq0etI<1bgjBNX.?p0etO?1bk!r0etI>1,C^@NX.?p0f1UA1,4dp0ekF<1bpmBNX.?o1,:XA1G +Omq0ekF>1,La@NX.?o1,L^C0en[o0etI<1c$pBNX.?p0etOA1,4dp0etI>1,Ud@NX.?o0f1X?2 +)1*s0ekC?0etR?NX.?o0etR?2)1*s0ekC=1GUdANX.?o0f1XA1GOmq0ekC?0f1X?NX.?o0ekO@ +1bk!r0ekC<1c$pBNX.?o0f(UB1,4dp0ekC>1,Ud@NX.Bp0ekC<2)C6u1bg^>0etU@NX.?o0ekC +=1c13u1GLU=0f(XANX.Bp0ekC>1Gb$s1bg^>0f1[@NX.?o0ekC?1,P!s1GLU=0f:^ANX.Bp0ek +C@0f+gq1bg^>0fCa@NX.Bp1,1L<2DU9u1,:R=0etUANX.?o1,1L=2)C6u1GLX>0etU@NX.?p0e +kC=1c(-t1GU[>0f(X@NX.Bp1,1L>1bt's1,:R=0f1[ANX.?o1,1L?1Gb$s1GLX>0f1[@NX.?p0 +ekC?1,Fpr1GU[>0 f:^@N X.Bp1 ,1L@1 ,= jq1 ,:R=0f CaANX.? +o1,1LA0f+gq1GLX >0f Ca@NX .Bq1, 1L <2D L3t 0ekI +=0ekRANX.Br0ekC <2)1* s0 etL=0 etUA NX .Bp 1GLU> 2)1 *s0f( O=0f +(XANX.Bq1,1L>1b k!r0e kI= 0f( XANX .B r0e kC>1GO mq 0etL=0 f1[ +ANX.Bp1GLU@1GOm q0f(O =0f :^A N X.B q1, 1L@ 1,4dp0 ek I=0f:^ ANX +.Br0ekC@0en[o0e tL=0f CaA NX. Bp 1G LUB 0en [o0etO >0 ekR@NX .?q +1,1L=2)1*s0ekL> 0etU @NX .? r0 ekC =1b k!r 0etO +>0f(X@NX.?q1,1L ?1GO m q0 ek L>0 f1[ @NX. ?r0ek +C?1,4dp0etO>0f: ^@NX.? q1, 1 LA0 en [o0e kL> 0fCa@NX.Eq 0etI<2DL3t1 +,1L<1,1[BNX.Bp0 etI=2) :0t 0 ekC; 1,:^ CNX .Eq0ekF=2) 1*s0ekC<0f( +XBNX.Eq0etI>1bk !r1,1L <1, CaBN X.Bp 0et I?1GXsr0ek C;1,LdCNX.E +q0ekF?1GOmq0ekC <0f:^ BNX. Eq0et I@1, 4dp 1,1L<1,UgB NX.Bp0etIA0 +f"ap0etI=0ekRAN X.Bp1 ,:R=2 DL3t1 ,:R =1,1[ANX.? o1,1O=2DU9u +1,:R>0etU@NX.?o 1,:R>2) :0t0et I<1,: ^BN X.?p0etI>1 bt's1,1O>0f +(X@NX.Bq0ekF>1bk!r0ekF<1,CaBNX.Bq0etI?1GOmq0ekF=0f1[ANX.?p0ekF?1GXsr0etI=0 +f:^ANX.Bp1,:RA1,4dp1,:R=1,UgANX.?o1,1OA1,=jq1,:R>0fCa@NX.?o1,:RB0f"ap0f(O> +0ekR@NX.?o1GU[>2DL3t0etL=1,1[ANX.?p1,:R>2)1*s0f(O=1,:^ANX.?q0etI>1bk!r0ekI +=1,:^ANX.?o1GU[@1bk!r0etL=1,CaANX.?p1,:R@1GOmq0f(O=1,LdANX.?q0etI@1,4dp0ek +I=1,LdANX.?o1GU[B1,4dp0etL=1,UgANX.?p1,:RB0en[o0ekC=0ekRANX.Bp0etL=2DL3t1, +1L>0etU@NX.?o0ekI=2DSP\?'6usE+*d$FEo!5NW_'j0JSRj0JP79NW_'k0JJLi0JG49NW_'j0 +eeUj0JP:9NW_'k0en[k0JG17?'6usEc6/2BlnD=Efp`l1Pc$e!HNtsP,Wd]Bp(ZC1G<\iBcqGP +!KsFFD0p51EbTW@+DI!3I=$tW0JG17I?ITn1G<6JEc6.E@q0R&Bo!%XCkr@[9Th1bF(96/G9C+ +G!/L]4#CBrjEc6/b5)99'9TfI?FcnqE0p6@9!I^,%?'6usF(025>DNWB!Jgc4!/LZ3"+)\9P!5 +$bE+*j1ATD[0+E/H +% uk.co.terryburton.bwipp/code49 0.0 0 +%%EndData +%%EndResource +% --END ENCODER code49-- - /dontdraw false def - /rows -1 def - /columns 8 def - /rowheight 10 def - /sepheight 1 def - /encoding (auto) def - /parse false def - /parsefnc false def +% --BEGIN ENCODER channelcode-- +% --REQUIRES preamble raiseerror renlinear-- +% --DESC: Channel Code +% --EXAM: 3493 +% --EXOP: height=0.5 includetext +% --RNDR: renlinear +%%BeginResource: uk.co.terryburton.bwipp channelcode 0.0 0 0 0 +%%BeginData: 41 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\E,[F>BOPd rASbjpA7\)9 +A4($=Ea`I"ATEeW6YKnGDImW,6Z6LH+Dl7BF"HllC"-Qc +B!KmJ$AU&<!g6ZA"HllMG]mM3F_)\;@<-!lFHSe605kuT+BsX(L]N +;=H]g@0P!5%%P!3?<5*AQeP"8l7!+T\NDMS@WCm%JT1OYEc06Uc?F_)\=@;L'tL]NY>Ou%NL<. +0p0P')q1P')q1I?G)'1GASu!rA7^o[04S[,@r!2k+C1-dB +l7EsF_#&nBOt[hHS95SA25q`>9I,m>p*>o>p*@-%>YFK"GdA?",Ht`+BsX2L]WA@L]`GGL_,@F +L]Ld(>DNZC&;UpS#`'1N"GdD@!f.#9!F6gPL]N;7L_,@TL]`GAL]WAp*@-'Sm< +V(5NEU%u:XM"c*;;#`&eC'o2sJ#D`Cd+BsX'L^&YJL^8e;L]`G>L]iMBL^f.OL]WA:L_>LLL]L +d(>p*TbEbo<)P"UroL]E52L]M$pFCC>AL]N[q@5*AQp!KsFF5&G4K1,G(WP"UsSOo +]uo8;J(FC5;t'DI[TqAM7P,ARfM=5*@^MP#O)U@WNYr+D,>*A7]eE!g7\:@<>q@!g7\9BOt[hO +ogeh?'6usFEhmM@UX:nAT!Y;Ou%moL]LsnEbo<)L]N[9IurF-:!g!KmJ +>!g6H.BOtmjBQSZcK3^->@WNYr+EM"5P%'4JOo^@?P#?X_!.C#_>q^;EF%`IG]\1=Ch[ +O"NWs!)DKKH105kfO+E)4@Bl@m1+?ht3A8c@-A9)+&P&N'-Eb0-)Bl7KjEfsCb3IR&#Ou"b$BO +PdrASbjpA7^o`P%64gCG'+8/p(ZFEd;,:Ecc5;/n0$=E,Zq1AS,XoATD@'Dfp)1AWh2!3A5GbF +DtYuCM@[!P.H"'F`V,9E+*6lBl7R3P#M~> +% uk.co.terryburton.bwipp/channelcode 0.0 0 +%%EndData +%%EndResource +% --END ENCODER channelcode-- - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - /rows rows cvi def - /columns columns cvi def - /rowheight rowheight cvi def - /sepheight sepheight cvi def - - columns 4 ge columns 62 le and - rows 2 ge rows 44 le and rows -1 eq or and {/c columns def} if - - % Parse ordinals of the form ^NNN to ASCII - parse { - /msg barcode length string def - /j 0 def - barcode - { % loop - (^) search { - dup msg exch j exch putinterval - length j add 1 add /j exch def - pop - dup 0 3 getinterval cvi msg exch j 1 sub exch put - dup length 3 sub 3 exch getinterval - } { - dup msg exch j exch putinterval - length j add /j exch def - /barcode msg 0 j getinterval def - exit - } ifelse - } loop - } if - - /barlen barcode length def - - % Convert input into bytes accounting for FNC characters - /swa -1 def /swb -2 def /swc -3 def /sft -4 def - /fn1 -5 def /fn2 -6 def /fn3 -7 def /fn4 -8 def - /sta -9 def /stp -10 def - - % Character maps for each state - /charmaps [ - % A B C A B C A B C - [ 32 32 (00) ] [ (!) (!) (01) ] [ (") (") (02) ] % 0-2 - [ (#) (#) (03) ] [ ($) ($) (04) ] [ (%) (%) (05) ] % 3-5 - [ (&) (&) (06) ] [ (') (') (07) ] [ 40 40 (08) ] % 6-8 - [ 41 41 (09) ] [ (*) (*) (10) ] [ (+) (+) (11) ] % 9-11 - [ (,) (,) (12) ] [ (-) (-) (13) ] [ (.) (.) (14) ] % 12-14 - [ (/) (/) (15) ] [ (0) (0) (16) ] [ (1) (1) (17) ] % 15-17 - [ (2) (2) (18) ] [ (3) (3) (19) ] [ (4) (4) (20) ] % 18-20 - [ (5) (5) (21) ] [ (6) (6) (22) ] [ (7) (7) (23) ] % 21-23 - [ (8) (8) (24) ] [ (9) (9) (25) ] [ (:) (:) (26) ] % 24-26 - [ (;) (;) (27) ] [ (<) (<) (28) ] [ (=) (=) (29) ] % 27-29 - [ (>) (>) (30) ] [ (?) (?) (31) ] [ (@) (@) (32) ] % 30-32 - [ (A) (A) (33) ] [ (B) (B) (34) ] [ (C) (C) (35) ] % 33-35 - [ (D) (D) (36) ] [ (E) (E) (37) ] [ (F) (F) (38) ] % 36-38 - [ (G) (G) (39) ] [ (H) (H) (40) ] [ (I) (I) (41) ] % 39-41 - [ (J) (J) (42) ] [ (K) (K) (43) ] [ (L) (L) (44) ] % 42-44 - [ (M) (M) (45) ] [ (N) (N) (46) ] [ (O) (O) (47) ] % 45-47 - [ (P) (P) (48) ] [ (Q) (Q) (49) ] [ (R) (R) (50) ] % 48-50 - [ (S) (S) (51) ] [ (T) (T) (52) ] [ (U) (U) (53) ] % 51-53 - [ (V) (V) (54) ] [ (W) (W) (55) ] [ (X) (X) (56) ] % 54-56 - [ (Y) (Y) (57) ] [ (Z) (Z) (58) ] [ ([) ([) (59) ] % 57-59 - [ 92 92 (60) ] [ (]) (]) (61) ] [ (^) (^) (62) ] % 60-62 - [ (_) (_) (63) ] [ 0 (`) (64) ] [ 1 (a) (65) ] % 63-65 - [ 2 (b) (66) ] [ 3 (c) (67) ] [ 4 (d) (68) ] % 66-68 - [ 5 (e) (69) ] [ 6 (f) (70) ] [ 7 (g) (71) ] % 69-71 - [ 8 (h) (72) ] [ 9 (i) (73) ] [ 10 (j) (74) ] % 72-74 - [ 11 (k) (75) ] [ 12 (l) (76) ] [ 13 (m) (77) ] % 75-77 - [ 14 (n) (78) ] [ 15 (o) (79) ] [ 16 (p) (80) ] % 78-80 - [ 17 (q) (81) ] [ 18 (r) (82) ] [ 19 (s) (83) ] % 81-83 - [ 20 (t) (84) ] [ 21 (u) (85) ] [ 22 (v) (86) ] % 84-86 - [ 23 (w) (87) ] [ 24 (x) (88) ] [ 25 (y) (89) ] % 87-89 - [ 26 (z) (90) ] [ 27 ({) (91) ] [ 28 (|) (92) ] % 90-92 - [ 29 (}) (93) ] [ 30 (~) (94) ] [ 31 127 (95) ] % 93-95 - [ fn3 fn3 (96) ] [ fn2 fn2 (97) ] [ sft sft (98) ] % 96-98 - [ swc swc (99) ] [ swb fn4 swb ] [ fn4 swa swa ] % 99-101 - [ fn1 fn1 fn1 ] [ sta sta sta ] [ stp stp stp ] % 102-104 - ] def - - % Invert charmaps to give character to value maps for each state - /charvals [ 105 dict 105 dict 105 dict ] def - 0 1 charmaps length 1 sub { - /i exch def - /encs charmaps i get def - 0 1 2 { - /j exch def - encs j get dup type /stringtype eq {0 get} if % convert string to ASCII if required - charvals j get exch i put - } for - } for - /seta charvals 0 get def - /setb charvals 1 get def - /setc charvals 2 get def - - /fncvals << - (FNC1) fn1 - (FNC2) fn2 - (FNC3) fn3 - (FNC4) fn4 - >> def - /msg barlen array def - /i 0 def /j 0 def { - i barlen eq {exit} if - /char barcode i get def - parsefnc char 94 eq and i barlen 4 sub lt and { - barcode i 1 add get 94 ne { - /char fncvals barcode i 1 add 4 getinterval get def - /i i 4 add def - } { - /i i 1 add def - } ifelse - } if - msg j char put - /i i 1 add def - /j j 1 add def - } loop - /msg msg 0 j getinterval def - /msglen msg length def - - % Determine digit runlength and characters from given position - /numsscr { - /n 0 def /s 0 def - /p exch def { - p msglen ge {exit} if - msg p get - dup setc exch known not {pop exit} if - fn1 eq { - % FNC1 in odd position of run like two digits - s 2 mod 0 eq {/s s 1 add def} {exit} ifelse - } if - /n n 1 add def - /s s 1 add def - /p p 1 add def - } loop - n s - } bind def - - % Encoding for each alphabet - /enca { - seta exch get cws exch j exch put - /j j 1 add def - } bind def - /encb { - setb exch get cws exch j exch put - /j j 1 add def - } bind def - /encc { - dup type /arraytype ne { - setc exch get - } { - aload pop 48 sub exch 48 sub 10 mul add - } ifelse - cws exch j exch put - /j j 1 add def - } bind def - - % Character exclusively in either alphabet A or B - /anotb {dup seta exch known exch setb exch known not and} bind def - /bnota {dup setb exch known exch seta exch known not and} bind def - - % Pre-compute relative position of next anotb and next bnota characters - /nextanotb [ msg length {0} repeat 9999 ] def - /nextbnota [ msg length {0} repeat 9999 ] def - msg length 1 sub -1 0 { - /i exch def - msg i get anotb { - nextanotb i 0 put - } { - nextanotb i nextanotb i 1 add get 1 add put - } ifelse - msg i get bnota { - nextbnota i 0 put - } { - nextbnota i nextbnota i 1 add get 1 add put - } ifelse - } for - - % Does a-only come before b-only after given position and vice versa - /abeforeb {dup nextanotb exch get exch nextbnota exch get lt} bind def - /bbeforea {dup nextbnota exch get exch nextanotb exch get lt} bind def - - % Add padding to row - /padrow { - { - { % common exit - cset (seta) eq {swc enca /cset (setc) def exit} if - cset (setb) eq {swc encb /cset (setc) def exit} if - cset (setc) eq {swb encc /cset (setb) def exit} if - } loop - } repeat - } bind def - - % Convert message to codewords - /cws c 5 add rows -1 ne {rows} {44} ifelse mul array def - - /i 0 def /j 0 def /r 1 def - /lastrow false def { - - lastrow {exit} if - - % Add start character and code subset selector - sta enca - i msglen lt {i numsscr} {-1 -1} ifelse /nums exch def /nchars exch def - { % common exit - msglen 0 eq { - swb enca - /cset (setb) def - exit - } if - nums 2 ge { - swc enca - /cset (setc) def - exit - } if - i abeforeb { - sft enca - /cset (seta) def - exit - } if - swb enca - /cset (setb) def - exit - } loop - /j j 1 add def % Skip row indicator position - - % Main encoding loop - /endofrow false def { - /rem c 3 add j c 5 add mod sub def % Codewords to end of row - - i msglen eq endofrow or {exit} if - - i numsscr /nums exch def /nchars exch def - - % Determine switches and shifts - { % common exit - cset (seta) eq cset (setb) eq or nums 4 ge and - msg i get fn1 ne and { - nums 2 mod 0 eq - rem 3 ge and { - swc cset (seta) eq {enca} {encb} ifelse - /cset (setc) def - 2 { - msg i get fn1 eq { - fn1 encc - /i i 1 add def - } { - msg i 2 getinterval encc - /i i 2 add def - } ifelse - } repeat - exit - } if - nums 2 mod 0 ne - rem 4 ge and { - msg i get cset (seta) eq {enca} {encb} ifelse - /i i 1 add def - swc cset (seta) eq {enca} {encb} ifelse - /cset (setc) def - 2 { - msg i get fn1 eq { - fn1 encc - /i i 1 add def - } { - msg i 2 getinterval encc - /i i 2 add def - } ifelse - } repeat - exit - } if - } if - cset (setb) eq msg i get anotb and - rem 2 ge and { - i msglen 1 sub lt { - i 1 add bbeforea { - sft encb - msg i get enca - /i i 1 add def - exit - } if - } if - swa encb - /cset (seta) def - msg i get enca - /i i 1 add def - exit - } if - cset (seta) eq msg i get bnota and - rem 2 ge and { - i msglen 1 sub lt { - i 1 add abeforeb { - sft enca - msg i get encb - /i i 1 add def - exit - } if - } if - swb enca - /cset (setb) def - msg i get encb - /i i 1 add def - exit - } if - cset (setc) eq nums 2 lt and - rem 2 ge and { - i abeforeb { - swa encc - /cset (seta) def - msg i get enca - /i i 1 add def - exit - } if - swb encc - /cset (setb) def - msg i get encb - /i i 1 add def - exit - } if - - % No switches or latches so try to encode - cset (seta) eq seta msg i get known and - rem 1 ge and { - msg i get enca - /i i 1 add def - exit - } if - cset (setb) eq setb msg i get known and - rem 1 ge and { - msg i get encb - /i i 1 add def - exit - } if - cset (setc) eq nums 2 ge and - rem 1 ge and { - msg i get fn1 eq { - fn1 encc - /i i 1 add def - } { - msg i 2 getinterval encc - /i i 2 add def - } ifelse - exit - } if - - % Encoding does not fit in the row - /endofrow true def - exit - - } loop % common exit - - } loop - - % Determine whether this is the final row - r rows eq rows -1 eq or r 1 gt and i msglen eq and rem 2 ge and { - rem 2 sub padrow - /j j 3 add def % Skip symbol and row checksum character positions - stp enca - /lastrow true def - } { - rem padrow - /j j 1 add def % Skip row checksum character positions - stp enca - /r r 1 add def - } ifelse - - } loop - /cws cws 0 j getinterval def - - % Maps for row indicators and symbol checksums - /abmap [ - 64 1 95 {} for - 0 1 15 {} for - 26 1 63 {} for - ] def - /cmap [ 0 1 85 {} for ] def - - % Add symbol check characters to last row - /chkmsg msglen array def - /j 0 def - 0 1 msglen 1 sub { - /i exch def - /char msg i get def - char 0 ge {chkmsg j char put /j j 1 add def} if - char fn1 eq i 0 ne and {chkmsg j 29 put /j j 1 add def} if - } for - /t1 0 def /t2 0 def /k1 0 def /k2 0 def - 0 1 j 1 sub { - /i exch def - /t1 chkmsg i get i mul 86 mod def - /t2 t1 chkmsg i get add 86 mod def - /k1 k1 t2 add 86 mod def - /k2 k2 t1 add 86 mod def - } for - cws cws length 4 sub cset (setc) ne {abmap} {cmap} ifelse k1 get put - cws cws length 3 sub cset (setc) ne {abmap} {cmap} ifelse k2 get put - - % Populate row indicators - cws 2 2 copy 1 sub get 99 ne {abmap} {cmap} ifelse r 2 sub get put - 1 1 r 1 sub { - /i exch def - cws i c 5 add mul 2 add 2 copy 1 sub get 99 ne {abmap} {cmap} ifelse i 42 add get put - } for - - % Calculate row check characters - 0 1 r 1 sub { - cws exch c 5 add mul c 4 add getinterval /rcws exch def - /csum rcws 0 get def - 1 1 rcws length 2 sub { - /i exch def - /csum csum rcws i get i mul add def - } for - rcws rcws length 1 sub csum 103 mod put - } for - - % Create an array containing the character mappings - /encs - [ (212222) (222122) (222221) (121223) (121322) (131222) (122213) - (122312) (132212) (221213) (221312) (231212) (112232) (122132) - (122231) (113222) (123122) (123221) (223211) (221132) (221231) - (213212) (223112) (312131) (311222) (321122) (321221) (312212) - (322112) (322211) (212123) (212321) (232121) (111323) (131123) - (131321) (112313) (132113) (132311) (211313) (231113) (231311) - (112133) (112331) (132131) (113123) (113321) (133121) (313121) - (211331) (231131) (213113) (213311) (213131) (311123) (311321) - (331121) (312113) (312311) (332111) (314111) (221411) (431111) - (111224) (111422) (121124) (121421) (141122) (141221) (112214) - (112412) (122114) (122411) (142112) (142211) (241211) (221114) - (413111) (241112) (134111) (111242) (121142) (121241) (114212) - (124112) (124211) (411212) (421112) (421211) (212141) (214121) - (412121) (111143) (111341) (131141) (114113) (114311) (411113) - (411311) (113141) (114131) (311141) (411131) (211412) (2331112) - ] def - - % Derive the bits for each row - /rowbits r array def - 0 1 r 1 sub { - /i exch def - /sbs [ - cws i c 5 add mul c 5 add getinterval { - encs exch get {48 sub} forall - } forall - ] def - mark - 0 sbs {1 index 1 eq {{0}} {{1}} ifelse repeat} forall - counttomark 1 sub array astore exch pop exch pop - rowbits i 3 -1 roll put - } for - - % Populate the bitmap - /symwid c 11 mul 57 add def - /pixs [ - symwid sepheight mul {1} repeat - 0 1 r 2 sub { - /i exch def - rowheight {rowbits i get aload pop} repeat - sepheight { - 1 1 0 1 0 0 0 0 1 0 0 - symwid 24 sub {1} repeat - 1 1 0 0 0 1 1 1 0 1 0 1 1 - } repeat - } for - rowheight {rowbits r 1 sub get aload pop} repeat - symwid sepheight mul {1} repeat - ] def - - % Return the arguments - << - /ren //renmatrix - /pixs pixs - /pixx symwid - /pixy pixs length symwid idiv - /height pixs length symwid idiv 72 div - /width symwid 72 div - /opt options - >> - - dontdraw not //renmatrix if - - end - -} bind def -/codablockf dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if -% --END ENCODER codablockf-- - -% --BEGIN ENCODER code16k-- -% --DESC: Code 16K -% --EXAM: Abcd-1234567890-wxyZ -% --EXOP: -% --RNDR: renmatrix -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renmatrix dup /uk.co.terryburton.bwipp findresource put -begin -/code16k { - - 20 dict begin - - /options exch def - /barcode exch def - - /dontdraw false def - /mode -1 def - /pos -1 def - /rows 0 def - /rowheight 8 def - /sepheight 1 def - /encoding (auto) def - /raw false def - /parse false def - /parsefnc false def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - /mode mode cvi def - /pos pos cvi def - /rows rows cvi def - /rowheight rowheight cvi def - /sepheight sepheight cvi def - - pos -1 ne {/rows 16 def} if - - % Parse ordinals of the form ^NNN to ASCII - parse { - /msg barcode length string def - /j 0 def - barcode - { % loop - (^) search { - dup msg exch j exch putinterval - length j add 1 add /j exch def - pop - dup 0 3 getinterval cvi msg exch j 1 sub exch put - dup length 3 sub 3 exch getinterval - } { - dup msg exch j exch putinterval - length j add /j exch def - /barcode msg 0 j getinterval def - exit - } ifelse - } loop - } if - - /barlen barcode length def - - % Convert input into bytes accounting for FNC characters - /swa -1 def /swb -2 def /swc -3 def - /sa1 -4 def /sb1 -5 def /sc1 -6 def - /sa2 -7 def /sb2 -8 def /sc2 -9 def - /pad -10 def /sb3 -11 def /sc3 -12 def - /fn1 -13 def /fn2 -14 def /fn3 -15 def /fn4 -16 def - - % Character maps for each state - /charmaps [ - % A B C A B C A B C - [ 32 32 (00) ] [ (!) (!) (01) ] [ (") (") (02) ] % 0-2 - [ (#) (#) (03) ] [ ($) ($) (04) ] [ (%) (%) (05) ] % 3-5 - [ (&) (&) (06) ] [ (') (') (07) ] [ 40 40 (08) ] % 6-8 - [ 41 41 (09) ] [ (*) (*) (10) ] [ (+) (+) (11) ] % 9-11 - [ (,) (,) (12) ] [ (-) (-) (13) ] [ (.) (.) (14) ] % 12-14 - [ (/) (/) (15) ] [ (0) (0) (16) ] [ (1) (1) (17) ] % 15-17 - [ (2) (2) (18) ] [ (3) (3) (19) ] [ (4) (4) (20) ] % 18-20 - [ (5) (5) (21) ] [ (6) (6) (22) ] [ (7) (7) (23) ] % 21-23 - [ (8) (8) (24) ] [ (9) (9) (25) ] [ (:) (:) (26) ] % 24-26 - [ (;) (;) (27) ] [ (<) (<) (28) ] [ (=) (=) (29) ] % 27-29 - [ (>) (>) (30) ] [ (?) (?) (31) ] [ (@) (@) (32) ] % 30-32 - [ (A) (A) (33) ] [ (B) (B) (34) ] [ (C) (C) (35) ] % 33-35 - [ (D) (D) (36) ] [ (E) (E) (37) ] [ (F) (F) (38) ] % 36-38 - [ (G) (G) (39) ] [ (H) (H) (40) ] [ (I) (I) (41) ] % 39-41 - [ (J) (J) (42) ] [ (K) (K) (43) ] [ (L) (L) (44) ] % 42-44 - [ (M) (M) (45) ] [ (N) (N) (46) ] [ (O) (O) (47) ] % 45-47 - [ (P) (P) (48) ] [ (Q) (Q) (49) ] [ (R) (R) (50) ] % 48-50 - [ (S) (S) (51) ] [ (T) (T) (52) ] [ (U) (U) (53) ] % 51-53 - [ (V) (V) (54) ] [ (W) (W) (55) ] [ (X) (X) (56) ] % 54-56 - [ (Y) (Y) (57) ] [ (Z) (Z) (58) ] [ ([) ([) (59) ] % 57-59 - [ 92 92 (60) ] [ (]) (]) (61) ] [ (^) (^) (62) ] % 60-62 - [ (_) (_) (63) ] [ 0 (`) (64) ] [ 1 (a) (65) ] % 63-65 - [ 2 (b) (66) ] [ 3 (c) (67) ] [ 4 (d) (68) ] % 66-68 - [ 5 (e) (69) ] [ 6 (f) (70) ] [ 7 (g) (71) ] % 69-71 - [ 8 (h) (72) ] [ 9 (i) (73) ] [ 10 (j) (74) ] % 72-74 - [ 11 (k) (75) ] [ 12 (l) (76) ] [ 13 (m) (77) ] % 75-77 - [ 14 (n) (78) ] [ 15 (o) (79) ] [ 16 (p) (80) ] % 78-80 - [ 17 (q) (81) ] [ 18 (r) (82) ] [ 19 (s) (83) ] % 81-83 - [ 20 (t) (84) ] [ 21 (u) (85) ] [ 22 (v) (86) ] % 84-86 - [ 23 (w) (87) ] [ 24 (x) (88) ] [ 25 (y) (89) ] % 87-89 - [ 26 (z) (90) ] [ 27 ({) (91) ] [ 28 (|) (92) ] % 90-92 - [ 29 (}) (93) ] [ 30 (~) (94) ] [ 31 127 (95) ] % 93-95 - [ fn3 fn3 (96) ] [ fn2 fn2 (97) ] [ sb1 sa1 (98) ] % 96-98 - [ swc swc (99) ] [ swb fn4 swb ] [ fn4 swa swa ] % 99-101 - [ fn1 fn1 fn1 ] [ pad pad pad ] [ sb2 sa2 sb1 ] % 102-104 - [ sc2 sc2 sb2 ] [ sc3 sc3 sb3 ] % 105-106 - ] def - - % Invert charmaps to give character to value maps for each state - /charvals [ 109 dict 109 dict 109 dict ] def - 0 1 charmaps length 1 sub { - /i exch def - /encs charmaps i get def - 0 1 2 { - /j exch def - encs j get dup type /stringtype eq {0 get} if % convert string to ASCII if required - charvals j get exch i put - } for - } for - /seta charvals 0 get def - /setb charvals 1 get def - /setc charvals 2 get def - - raw {/encoding (raw) def} if - - encoding (raw) eq { - /cws barlen array def - /i 0 def /j 0 def - { % loop - i barlen eq {exit} if - /cw barcode i 1 add 3 getinterval cvi def - cws j cw put - /i i 4 add def - /j j 1 add def - } loop - /cws cws 0 j getinterval def - /text () def - } if - - encoding (auto) eq { - - /fncvals << - (FNC1) fn1 - (FNC2) fn2 - (FNC3) fn3 - (FNC4) fn4 - >> def - /msg barlen array def - /i 0 def /j 0 def { - i barlen eq {exit} if - /char barcode i get def - parsefnc char 94 eq and i barlen 4 sub lt and { - barcode i 1 add get 94 ne { - /char fncvals barcode i 1 add 4 getinterval get def - /i i 4 add def - } { - /i i 1 add def - } ifelse - } if - msg j char put - /i i 1 add def - /j j 1 add def - } loop - /msg msg 0 j getinterval def - /msglen msg length def - - % Determine digit runlength and characters from given position - /numsscr { - /n 0 def /s 0 def - /p exch def { - p msglen ge {exit} if - msg p get - dup setc exch known not {pop exit} if - fn1 eq { - % FNC1 in odd position of run like two digits - s 2 mod 0 eq {/s s 1 add def} {exit} ifelse - } if - /n n 1 add def - /s s 1 add def - /p p 1 add def - } loop - n s - } bind def - - % Encoding for each alphabet - /enca { - seta exch get cws exch j exch put - /j j 1 add def - } bind def - /encb { - setb exch get cws exch j exch put - /j j 1 add def - } bind def - /encc { - dup type /arraytype ne { - setc exch get - } { - aload pop 48 sub exch 48 sub 10 mul add - } ifelse - cws exch j exch put - /j j 1 add def - } bind def - - % Character exclusively in either alphabet A or B - /anotb {dup seta exch known exch setb exch known not and} bind def - /bnota {dup setb exch known exch seta exch known not and} bind def - - % Pre-compute relative position of next anotb and next bnota characters - /nextanotb [ msg length {0} repeat 9999 ] def - /nextbnota [ msg length {0} repeat 9999 ] def - msg length 1 sub -1 0 { - /i exch def - msg i get anotb { - nextanotb i 0 put - } { - nextanotb i nextanotb i 1 add get 1 add put - } ifelse - msg i get bnota { - nextbnota i 0 put - } { - nextbnota i nextbnota i 1 add get 1 add put - } ifelse - } for - - % Does a-only come before b-only after given position and vice versa - /abeforeb {dup nextanotb exch get exch nextbnota exch get lt} bind def - /bbeforea {dup nextbnota exch get exch nextanotb exch get lt} bind def - - /cws barcode length 2 mul 3 add array def - - % Select mode and encode first characters - /i 0 def /j 0 def - { % common exit - % extended data length - pos -1 ne { - % encode one and two - cws 0 pos 10 idiv 1 sub put - cws 1 pos 10 mod 1 sub put - /j 2 def - /cset (setb) def - /mode 7 def - exit - } if - % empty => b - msglen 0 eq { - /cset (setb) def - /mode 1 def - exit - } if - % FNC1 . 2+ nums => c fnc1 - msglen 2 ge { - msg 0 get fn1 eq 1 numsscr exch pop 2 ge and { - /cset (setc) def - /mode 4 def - /i 1 def - exit - } if - } if - % FNC1 => b fnc1 - msg 0 get fn1 eq { - /cset (setb) def - /mode 3 def - /i 1 def - exit - } if - msglen 2 ge { - % 2+ even nums => c - 0 numsscr exch pop dup 2 ge exch 2 mod 0 eq and { - /cset (setc) def - /mode 2 def - exit - } if - % 3+ odd nums => c sb1 encode - 0 numsscr exch pop dup 3 ge exch 2 mod 1 eq and { - msg 0 get encb - /cset (setc) def - /mode 5 def - /i 1 def - exit - } if - % b . 2+ even nums => c sb1 encode - setb msg 0 get known - 1 numsscr exch pop dup 2 ge exch 2 mod 0 eq and and { - msg 0 get encb - /cset (setc) def - /mode 5 def - /i 1 def - exit - } if - % b . 3+ odd nums => c sb2 encode - setb msg 0 get known - 1 numsscr exch pop dup 3 ge exch 2 mod 1 eq and and { - msg 0 get encb - msg 1 get encb - /cset (setc) def - /mode 6 def - /i 2 def - exit - } if - % b . b . 2+ even nums => c sb2 encode - setb msg 0 get known - setb msg 1 get known and - 2 numsscr exch pop dup 2 ge exch 2 mod 0 eq and and { - msg 0 get encb - msg 1 get encb - /cset (setc) def - /mode 6 def - /i 2 def - exit - } if - } if - % anotb before bnota => a - 0 abeforeb { - /cset (seta) def - /mode 0 def - exit - } if - % otherwise => b - /cset (setb) def - /mode 1 def - exit - } loop - - { % Encode remainder - i msglen eq {exit} if - - i numsscr /nums exch def /nchars exch def - - % Determine switches and shifts - { % common exit - cset (seta) eq { - % bnota . anotb before bnota => sb1 encode - i msglen 1 sub lt { - msg i get bnota - i 1 add abeforeb and { - sb1 enca - msg i get encb - /i i 1 add def - exit - } if - } if - % bnota . bnota . anotb before bnota => sb2 encode - i msglen 2 sub lt { - msg i get bnota - msg i 1 add get bnota and - i 2 add abeforeb and { - sb2 enca - msg i get encb - msg i 1 add get encb - /i i 2 add def - exit - } if - } if - % bnota => swb - msg i get bnota { - swb enca - /cset (setb) def - exit - } if - % 4 nums . a => sc2 encode - i msglen 4 sub lt { - nums 4 eq - seta msg i 4 add get known and { - sc2 enca - 2 { - msg i get fn1 eq { - fn1 encc - /i i 1 add def - } { - msg i 2 getinterval encc - /i i 2 add def - } ifelse - } repeat - exit - } if - } if - % 6 nums . a => sc3 encode - i msglen 6 sub lt { - nums 6 eq - seta msg i 6 add get known and { - sc3 enca - 3 { - msg i get fn1 eq { - fn1 encc - /i i 1 add def - } { - msg i 2 getinterval encc - /i i 2 add def - } ifelse - } repeat - exit - } if - } if - % 4+ even nums => swc - nums 4 ge nums 2 mod 0 eq and { - swc enca - /cset (setc) def - exit - } if - % otherwise => encode - msg i get enca - /i i 1 add def - exit - } if - cset (setb) eq { - % anotb . bnota before anotb => sa1 encode - i msglen 1 sub lt { - msg i get anotb - i 1 add bbeforea and { - sa1 encb - msg i get enca - /i i 1 add def - exit - } if - } if - % anotb . anotb . bnota before anotb => sa2 encode - i msglen 2 sub lt { - msg i get anotb - msg i 1 add get anotb and - i 2 add bbeforea and { - sa2 encb - msg i get enca - msg i 1 add get enca - /i i 2 add def - exit - } if - } if - % anotb => swa - msg i get anotb { - swa encb - /cset (seta) def - exit - } if - % 4 nums . b => sc2 encode - i msglen 4 sub lt { - nums 4 eq - setb msg i 4 add get known and { - sc2 encb - 2 { - msg i get fn1 eq { - fn1 encc - /i i 1 add def - } { - msg i 2 getinterval encc - /i i 2 add def - } ifelse - } repeat - exit - } if - } if - % 6 nums . b => sc3 encode - i msglen 6 sub lt { - nums 6 eq - setb msg i 6 add get known and { - sc3 encb - 3 { - msg i get fn1 eq { - fn1 encc - /i i 1 add def - } { - msg i 2 getinterval encc - /i i 2 add def - } ifelse - } repeat - exit - } if - } if - % 4+ even nums => swc - nums 4 ge nums 2 mod 0 eq and { - swc encb - /cset (setc) def - exit - } if - % otherwise => encode - msg i get encb - /i i 1 add def - exit - } if - cset (setc) eq { - % 2+ nums => encode - nums 2 ge { - msg i get fn1 eq { - fn1 encc - /i i 1 add def - } { - msg i 2 getinterval encc - /i i 2 add def - } ifelse - exit - } if - % b . 2+ even nums => sb1 encode - i msglen 1 sub lt { - setb msg i get known - i 1 add numsscr exch pop dup 2 ge exch 2 mod 0 eq and and { - sb1 encc - msg i get encb - /i i 1 add def - exit - } if - } if - % b . 3+ odd nums => sb2 encode - i msglen 1 sub lt { - setb msg i get known - i 1 add numsscr exch pop dup 3 ge exch 2 mod 1 eq and and { - sb2 encc - msg i get encb - msg i 1 add get encb - /i i 2 add def - exit - } if - } if - % b . b . 2+ even nums => sb2 encode - i msglen 2 sub lt { - setb msg i get known - setb msg i 1 add get known and - i 2 add numsscr exch pop dup 2 ge exch 2 mod 0 eq and and { - sb2 encc - msg i get encb - msg i 1 add get encb - /i i 2 add def - exit - } if - } if - % b . b . 3+ odd nums => sb3 encode - i msglen 3 sub lt { - setb msg i get known - setb msg i 1 add get known and - i 2 add numsscr exch pop dup 3 ge exch 2 mod 1 eq and and { - sb3 encc - msg i get encb - msg i 1 add get encb - msg i 2 add get encb - /i i 3 add def - exit - } if - } if - % b . b . b . 2+ even nums => sb3 encode - i msglen 3 sub lt { - setb msg i get known - setb msg i 1 add get known and - setb msg i 2 add get known and - i 3 add numsscr exch pop dup 2 ge exch 2 mod 0 eq and and { - sb3 encc - msg i get encb - msg i 1 add get encb - msg i 2 add get encb - /i i 3 add def - exit - } if - } if - % anotb before bnota => swa - i abeforeb { - swa encc - /cset (seta) def - exit - } if - % otherwise => swb - swb encc - /cset (setb) def - exit - } if - exit - } loop - - } loop - /cws cws 0 j getinterval def - } if % auto encoding - - % Basic metrics for the each symbol - % r dcws - /metrics [ - [ 2 7 ] - [ 3 12 ] - [ 4 17 ] - [ 5 22 ] - [ 6 27 ] - [ 7 32 ] - [ 8 37 ] - [ 9 42 ] - [ 10 47 ] - [ 11 52 ] - [ 12 57 ] - [ 13 62 ] - [ 14 67 ] - [ 15 72 ] - [ 16 77 ] - ] def - - % Select metrics of an appropriate symbol - /urows rows def - /i 0 def - { % loop - /m metrics i get def - /r m 0 get def % Columns in symbol - /dcws m 1 get def % Data codewords in symbol - /okay true def - urows 0 ne urows r ne and {/okay false def} if - cws length dcws gt {/okay false def} if - okay {exit} if - /i i 1 add def - } loop - - % Extend cws to ncws codewords by addition of pad characters - /cws [ cws aload pop dcws cws length sub {103} repeat ] def - - % Add the start character - /cws [ r 2 sub 7 mul mode add cws aload pop ] def - - % Calculate the check characters - 0 0 1 dcws {dup 2 add exch cws exch get mul add} for - 107 mod /c1 exch def - 0 0 1 dcws {dup 1 add exch cws exch get mul add} for - c1 dcws 2 add mul add 107 mod /c2 exch def - /cws [ cws aload pop c1 c2 ] def - - % Create an array containing the character mappings - /encs - [ (212222) (222122) (222221) (121223) (121322) (131222) (122213) - (122312) (132212) (221213) (221312) (231212) (112232) (122132) - (122231) (113222) (123122) (123221) (223211) (221132) (221231) - (213212) (223112) (312131) (311222) (321122) (321221) (312212) - (322112) (322211) (212123) (212321) (232121) (111323) (131123) - (131321) (112313) (132113) (132311) (211313) (231113) (231311) - (112133) (112331) (132131) (113123) (113321) (133121) (313121) - (211331) (231131) (213113) (213311) (213131) (311123) (311321) - (331121) (312113) (312311) (332111) (314111) (221411) (431111) - (111224) (111422) (121124) (121421) (141122) (141221) (112214) - (112412) (122114) (122411) (142112) (142211) (241211) (221114) - (413111) (241112) (134111) (111242) (121142) (121241) (114212) - (124112) (124211) (411212) (421112) (421211) (212141) (214121) - (412121) (111143) (111341) (131141) (114113) (114311) (411113) - (411311) (113141) (114131) (311141) (411131) (211412) (211214) - (211232) (211133) - ] def - - % Start/stop character encodings - /startencs [ - (3211) (2221) (2122) (1411) (1132) (1231) (1114) (3112) - (3211) (2221) (2122) (1411) (1132) (1231) (1114) (3112) - ] def - /stopencsodd [ - (3211) (2221) (2122) (1411) (1132) (1231) (1114) (3112) - (1132) (1231) (1114) (3112) (3211) (2221) (2122) (1411) - ] def - /stopencseven [ - (2122) (1411) (1132) (1231) (1114) (3112) (1132) (1231) - (1114) (3112) (3211) (2221) (2122) (1411) (3211) (2221) - ] def - pos -1 eq pos 10 idiv 2 mod 1 eq or { - /stopencs stopencsodd def - } { - /stopencs stopencseven def - } ifelse - - % Derive the bits for each row - /rowbits r array def - 0 1 r 1 sub { - /i exch def - /sbs [ - 10 - startencs i get {48 sub} forall - 1 - cws i 5 mul 5 getinterval { - encs exch get {48 sub} forall - } forall - stopencs i get {48 sub} forall - 1 - ] def - mark - 1 sbs {1 index 0 eq {{1}} {{0}} ifelse repeat} forall - counttomark 1 sub array astore exch pop exch pop - rowbits i 3 -1 roll put - } for - - % Populate the bitmap - /pixs [ - 81 sepheight mul {1} repeat - 0 1 r 2 sub { - /i exch def - rowheight {rowbits i get aload pop} repeat - sepheight {10 {0} repeat 70 {1} repeat 0} repeat - } for - rowheight {rowbits r 1 sub get aload pop} repeat - 81 sepheight mul {1} repeat - ] def - - % Return the arguments - << - /ren //renmatrix - /pixs pixs - /pixx 81 - /pixy pixs length 81 idiv - /height pixs length 81 idiv 72 div - /width 81 72 div - /opt options - >> - - dontdraw not //renmatrix if - - end - -} bind def -/code16k dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if -% --END ENCODER code16k-- - -% --BEGIN ENCODER code49-- -% --DESC: Code 49 -% --EXAM: MULTIPLE ROWS IN CODE 49 -% --EXOP: -% --RNDR: renmatrix -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renmatrix dup /uk.co.terryburton.bwipp findresource put -begin -/code49 { - - 20 dict begin - - /options exch def - /barcode exch def - - /dontdraw false def - /mode -1 def - /pos -1 def - /rows 0 def - /rowheight 8 def - /sepheight 1 def - /parse false def - /parsefnc false def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - /mode mode cvi def - /pos pos cvi def - /rows rows cvi def - /rowheight rowheight cvi def - /sepheight sepheight cvi def - - % Parse ordinals of the form ^NNN to ASCII - parse { - /msg barcode length string def - /j 0 def - barcode - { % loop - (^) search { - dup msg exch j exch putinterval - length j add 1 add /j exch def - pop - dup 0 3 getinterval cvi msg exch j 1 sub exch put - dup length 3 sub 3 exch getinterval - } { - dup msg exch j exch putinterval - length j add /j exch def - /barcode msg 0 j getinterval def - exit - } ifelse - } loop - } if - - /barlen barcode length def - - % Convert input into bytes accounting for FNC characters - /s1 -1 def /s2 -2 def /fn1 -3 def /fn2 -4 def /fn3 -5 def /ns -6 def - /fncvals << - (FNC1) fn1 - (FNC2) fn2 - (FNC3) fn3 - >> def - /msg barlen array def - /i 0 def /j 0 def { - i barlen eq {exit} if - /char barcode i get def - parsefnc char 94 eq and i barlen 4 sub lt and { - barcode i 1 add get 94 ne { - /char fncvals barcode i 1 add 4 getinterval get def - /i i 4 add def - } { - /i i 1 add def - } ifelse - } if - msg j char put - /i i 1 add def - /j j 1 add def - } loop - /msg msg 0 j getinterval def - /msglen msg length def - - % Character encodings - /charmap [ - (0) (1) (2) (3) (4) (5) (6) (7) (8) (9) - (A) (B) (C) (D) (E) (F) (G) (H) (I) (J) (K) (L) (M) - (N) (O) (P) (Q) (R) (S) (T) (U) (V) (W) (X) (Y) (Z) - (-) (.) ( ) ($) (/) (+) (%) - s1 s2 fn1 fn2 fn3 ns - ] def - - % Invert charmap to give character to value map - /charvals 49 dict def - 0 1 48 { - /i exch def - charmap i get - dup type /stringtype eq {0 get} if % convert string to ASCII if required - charvals exch i put - } for - - % Shifted character encodings - /combos - [ (1 ) (1A) (1B) (1C) (1D) (1E) (1F) (1G) (1H) (1I) (1J) (1K) (1L) (1M) (1N) (1O) - (1P) (1Q) (1R) (1S) (1T) (1U) (1V) (1W) (1X) (1Y) (1Z) (11) (12) (13) (14) (15) - ( ) (16) (17) (18) ( $) ( %) (19) (10) (1-) (1.) (1$) ( +) (1/) ( -) ( .) ( /) - ( 0) ( 1) ( 2) ( 3) ( 4) ( 5) ( 6) ( 7) ( 8) ( 9) (1+) (21) (22) (23) (24) (25) - (26) ( A) ( B) ( C) ( D) ( E) ( F) ( G) ( H) ( I) ( J) ( K) ( L) ( M) ( N) ( O) - ( P) ( Q) ( R) ( S) ( T) ( U) ( V) ( W) ( X) ( Y) ( Z) (27) (28) (29) (20) (2-) - (2.) (2A) (2B) (2C) (2D) (2E) (2F) (2G) (2H) (2I) (2J) (2K) (2L) (2M) (2N) (2O) - (2P) (2Q) (2R) (2S) (2T) (2U) (2V) (2W) (2X) (2Y) (2Z) (2$) (2/) (2+) (2%) (2 ) - ] def - 0 1 127 { - /i exch def - combos i get dup 0 get /c1 exch def 1 get /c2 exch def - c1 49 eq { % s1 char - charvals i [ charvals s1 get charvals c2 get ] put - } if - c1 50 eq { % s2 char - charvals i [ charvals s2 get charvals c2 get ] put - } if - } for - - /encodealpha { - charvals exch get - dup type /arraytype ne {1 array astore} if - dup cws exch j exch putinterval - length j add /j exch def - } bind def - - /base48 { - 0 exch {48 sub exch 10 mul add} forall - [ 3 1 roll exch 1 sub {dup 48 mod exch 48 idiv} repeat ] - [ exch dup length 1 sub -1 0 {1 index exch get exch} for pop ] - dup cws exch j exch putinterval - length j add /j exch def - } bind def - - /encodenumeric { - /nums exch def - /pre nums length dup 5 mod dup 2 ne {sub} {sub 5 sub} ifelse def - 0 5 pre 1 sub {nums exch 5 getinterval 3 exch base48} for - /nums nums pre nums length pre sub getinterval def - nums length - dup 1 eq {nums i get encodealpha} if - dup 3 eq {2 nums base48} if - dup 4 eq {3 [49 48 nums aload pop] base48} if - 7 eq { - 3 [49 48 nums 0 4 getinterval aload pop] base48 - 2 nums 4 3 getinterval base48 - } if - } bind def - - % Pre-compute alphanumeric and numeric runlengths - /numericruns [ msglen {0} repeat 0 ] def - msglen 1 sub -1 0 { - /i exch def - msg i get - dup 48 ge exch 57 le and { - numericruns i numericruns i 1 add get 1 add put - } { - numericruns i 0 put - } ifelse - } for - - % Autoselect mode - mode -1 eq { - { % common exit - pos -1 ne {/mode 3 def exit} if - numericruns 0 get 5 ge {/mode 2 def exit} if - charvals msg 0 get get - dup type /arraytype ne {pop /mode 0 def exit} if - 0 get 43 eq {4} {5} ifelse /mode exch def - exit - } loop - } if - - /cws msglen 2 mul 1 add array def - /method (alpha) def /i -1 def /j -1 def - - % Handle start for each mode - mode 0 eq mode 1 eq or {/method (alpha) def /i 0 def /j 0 def} if - mode 2 eq {/method (numeric) def /i 0 def /j 0 def} if - mode 3 eq { - /posval [ - 12 22 - 13 23 33 - 14 24 34 44 - 15 25 35 45 55 - 16 26 36 46 56 66 - 17 27 37 47 57 67 77 - 18 28 38 48 58 68 78 88 - 19 29 39 49 59 69 79 89 99 - ] def - cws 0 0 1 43 {dup posval exch get pos ne {pop} if} for 1 add put - /method (alpha) def /i 0 def /j 1 def - } if - mode 4 eq mode 5 eq or { - cws 0 charvals msg 0 get get 1 get put - /method (alpha) def /i 1 def /j 1 def - } if - - % Encode remainder - { - i msglen eq {exit} if - { % not a loop but common exit point - method (alpha) eq { - numericruns i get 5 ge { - ns encodealpha - /method (numeric) def - exit - } if - msg i get encodealpha - /i i 1 add def - exit - } if - method (numeric) eq { - numericruns i get 5 lt { - ns encodealpha - /method (alpha) def - exit - } if - msg i numericruns i get getinterval encodenumeric - /i i numericruns i get add def - exit - } if - } loop - } loop - /cws cws 0 j getinterval def - - % Basic metrics for the each symbol - % r dcws - /metrics [ - [ 2 9 ] - [ 3 16 ] - [ 4 23 ] - [ 5 30 ] - [ 6 37 ] - [ 7 42 ] - [ 8 49 ] - ] def - - % Select metrics of an appropriate symbol - /urows rows def - /i 0 def - { % loop - /m metrics i get def - /r m 0 get def % Columns in symbol - /dcws m 1 get def % Data codewords in symbol - /okay true def - urows 0 ne urows r ne and {/okay false def} if - cws length dcws gt {/okay false def} if - okay {exit} if - /i i 1 add def - } loop - - % Extend cws to ncws codewords by addition of pad characters - /cws [ cws aload pop dcws cws length sub {48} repeat ] def - - % Populate code character array and add row check characters - /ccs r 8 mul array def - /j 0 def - 0 1 r 2 sub { - /i exch def - /cc cws j 7 getinterval def - ccs i 8 mul cc putinterval - ccs i 8 mul 7 add 0 cc {add} forall 49 mod put - /j j 7 add def - } for - j dcws lt { - ccs ccs length 8 sub cws j dcws j sub getinterval putinterval - } if - - % Place row count character - /cr7 r 2 sub 7 mul mode add def - ccs ccs length 2 sub cr7 put - - % Calculate the symbol check characters - [ 1 9 31 26 2 12 17 23 37 18 22 6 27 44 15 43 39 - 11 13 5 41 33 36 8 4 32 3 19 40 25 29 10 24 30 ] - dup [ exch 20 exch 0 32 getinterval aload pop ] /weightx exch def - dup [ exch 16 exch 1 32 getinterval aload pop ] /weighty exch def - [ exch 38 exch 2 32 getinterval aload pop ] /weightz exch def - /calccheck { - /weights exch def - /score 0 def - 0 1 r 1 sub 8 mul 2 idiv 1 sub { - /i exch def - ccs i 2 mul get 49 mul ccs i 2 mul 1 add get add - weights i 1 add get mul /score exch score add def - } for - score - } bind def - /lastrow ccs ccs length 8 sub 8 getinterval def - - % wr1 check character - r 7 ge { - cr7 weightz 0 get mul weightz calccheck add 2401 mod - dup 49 idiv exch 49 mod 2 array astore - lastrow 0 3 -1 roll putinterval - } if - /wr1 lastrow 0 get 49 mul lastrow 1 get add def - - % wr2 check character - cr7 weighty 0 get mul weighty calccheck add - wr1 weighty r 4 mul 3 sub get mul add - 2401 mod dup /wr2 exch def - dup 49 idiv exch 49 mod 2 array astore - lastrow 2 3 -1 roll putinterval - - % wr3 check character - cr7 weightx 0 get mul weightx calccheck add - wr1 weightx r 4 mul 3 sub get mul add - wr2 weightx r 4 mul 2 sub get mul add - 2401 mod - dup 49 idiv exch 49 mod 2 array astore - lastrow 4 3 -1 roll putinterval - - % Place last row check character - ccs ccs length 8 sub 7 getinterval 0 exch {add} forall 49 mod - ccs ccs length 1 sub 3 -1 roll put - - /patterns [ - [ % Even parity - (11521132) (25112131) (14212132) (25121221) (14221222) (12412132) (23321221) - (12421222) (21521221) (15112222) (15121312) (13312222) (24221311) (13321312) - (11512222) (22421311) (11521312) (25112311) (14212312) (23312311) (12412312) - (21512311) (16121131) (14321131) (12521131) (15212131) (15221221) (13412131) - (13421221) (11612131) (16112221) (16121311) (14312221) (14321311) (12512221) - (12521311) (15212311) (13412311) (11612311) (11131135) (31131133) (51131131) - (21122134) (41122132) (21131224) (41131222) (11113135) (31113133) (51113131) - (11122225) (31122223) (51122221) (11131315) (31131313) (51131311) (21113224) - (41113222) (21122314) (41122312) (11113315) (31113313) (51113311) (12131134) - (32131132) (21231133) (41231131) (22122133) (42122131) (11222134) (22131223) - (42131221) (11231224) (31231222) (12113134) (32113132) (12122224) (32122222) - (12131314) (32131312) (21231313) (41231311) (22113223) (42113221) (11213224) - (22122313) (42122311) (11222314) (31222312) (12113314) (32113312) (21213313) - (41213311) (13131133) (33131131) (22231132) (11331133) (31331131) (23122132) - (12222133) (23131222) (12231223) (32231221) (21331222) (13113133) (33113131) - (13122223) (33122221) (11313133) (13131313) (33131311) (11322223) (22231312) - (11331313) (31331311) (23113222) (12213223) (23122312) (12222313) (32222311) - (21322312) (13113313) (33113311) (22213312) (11313313) (31313311) (14131132) - (23231131) (12331132) (21431131) (24122131) (13222132) (24131221) (13231222) - (11422132) (22331221) (11431222) (14113132) (14122222) (12313132) (14131312) - (12322222) (23231311) (12331312) (21431311) (24113221) (13213222) (24122311) - (13222312) (11413222) (22322311) (11422312) (14113312) (23213311) (12313312) - (21413311) (15131131) (13331131) (14222131) (14231221) (12422131) (12431221) - (15113131) (15122221) (13313131) (15131311) (13322221) (11513131) (13331311) - (11522221) (14213221) (14222311) (12413221) (12422311) (15113311) (13313311) - (11513311) (11141134) (31141132) (21132133) (41132131) (21141223) (41141221) - (11123134) (31123132) (11132224) (31132222) (11141314) (31141312) (21114133) - (41114131) (21123223) (41123221) (21132313) (41132311) (11114224) (31114222) - (11123314) (31123312) (21114313) (41114311) (12141133) (32141131) (21241132) - (22132132) (11232133) (22141222) (11241223) (31241221) (12123133) (32123131) - (12132223) (32132221) (12141313) (32141311) (21241312) (22114132) (11214133) - (22123222) (11223223) (22132312) (11232313) (31232311) (12114223) (32114221) - (12123313) (32123311) (21223312) (22114312) (11214313) (31214311) (13141132) - (22241131) (11341132) (23132131) (12232132) (23141221) (12241222) (21341221) - (13123132) (13132222) (11323132) (13141312) (11332222) (22241311) (11341312) - (23114131) (12214132) (23123221) (12223222) (23132311) (12232312) (21332311) - (13114222) (13123312) (11314222) (22223311) (11323312) (23114311) (12214312) - (21314311) (14141131) (12341131) (13232131) (13241221) (11432131) (14123131) - (14132221) (12323131) (14141311) (12332221) (12341311) (13214131) (13223221) - (11414131) (13232311) (11423221) (11432311) (14114221) (14123311) (12314221) - (12323311) (13214311) (11414311) (11151133) (31151131) (21142132) (21151222) - (11133133) (31133131) (11142223) (31142221) (11151313) (31151311) (21124132) - (21133222) (21142312) (11115133) (31115131) (11124223) (31124221) (11133313) - (31133311) (21115222) (21124312) (12151132) (21251131) (22142131) (11242132) - (22151221) (11251222) (12133132) (12142222) (12151312) (21251311) (22124131) - (11224132) (22133221) (11233222) (22142311) (11242312) (12115132) (12124222) - (12133312) (21233311) (22115221) (11215222) (22124311) (11224312) (13151131) - (12242131) (12251221) (13133131) (13142221) (11333131) (13151311) (11342221) - (12224131) (12233221) (12242311) (13115131) (13124221) (11315131) (13133311) - (11324221) (11333311) (12215221) (12224311) (11161132) (21152131) (21161221) - (11143132) (11152222) (11161312) (21134131) (21143221) (21152311) (11125132) - (11134222) (11143312) (21116131) (21125221) (21134311) (12161131) (11252131) - (12143131) (12152221) (12161311) (11234131) (11243221) (11252311) (12125131) - (12134221) (12143311) (11216131) (11225221) (11234311) (11111236) (31111234) - (51111232) (21111325) (41111323) (61111321) (11111416) (31111414) (51111412) - (31211143) (51211141) (12111235) (32111233) (52111231) (21211234) (41211232) - (22111324) (42111322) (11211325) (31211323) (51211321) (12111415) (32111413) - (52111411) (21211414) (41211412) (12211144) (32211142) (21311143) (41311141) - (13111234) (33111232) (22211233) (42211231) (11311234) (31311232) (23111323) - (43111321) (12211324) (32211322) (21311323) (41311321) (13111414) (33111412) - (22211413) (42211411) (11311414) (31311412) (13211143) (33211141) (22311142) - (11411143) (31411141) (14111233) (34111231) (23211232) (12311233) (32311231) - (21411232) (24111322) (13211323) (33211321) (22311322) (11411323) (31411321) - (14111413) (34111411) (23211412) (12311413) (32311411) (21411412) (14211142) - (23311141) (12411142) (21511141) (15111232) (24211231) (13311232) (22411231) - (11511232) (25111321) (14211322) (23311321) (12411322) (21511321) (15111412) - (24211411) (13311412) (22411411) (11511412) (15211141) (13411141) (11611141) - (16111231) (14311231) (12511231) (15211321) (13411321) (11611321) (16111411) - (14311411) (12511411) (21121144) (41121142) (11112145) (31112143) (51112141) - (11121235) (31121233) (51121231) (21112234) (41112232) (21121324) (41121322) - (11112325) (31112323) (51112321) (11121415) (31121413) (51121411) (21112414) - (41112412) (22121143) (42121141) (11221144) (31221142) (12112144) (32112142) - (12121234) (32121232) (21221233) (41221231) (22112233) (42112231) (11212234) - (22121323) (42121321) (11221324) (31221322) (12112324) (32112322) (12121414) - (32121412) (21221413) (41221411) (22112413) (42112411) (11212414) (31212412) - (23121142) (12221143) (32221141) (21321142) (13112143) (33112141) (13121233) - (33121231) (11312143) (22221232) (11321233) (31321231) (23112232) (12212233) - (23121322) (12221323) (32221321) (21321322) (13112323) (33112321) (13121413) - (33121411) (11312323) (22221412) (11321413) (31321411) (23112412) (12212413) - (32212411) (21312412) (24121141) (13221142) (22321141) (11421142) (14112142) - (14121232) (12312142) (23221231) (12321232) (21421231) (24112231) (13212232) - (24121321) (13221322) (11412232) (22321321) (11421322) (14112322) (14121412) - (12312322) (23221411) (12321412) (21421411) (24112411) (13212412) (22312411) - (11412412) (14221141) (12421141) (15112141) (15121231) (13312141) (13321231) - (11512141) (11521231) (14212231) (14221321) (12412231) (12421321) (15112321) - (15121411) (13312321) (13321411) (11512321) (11521411) (14212411) (12412411) - (21131143) (41131141) (11122144) (31122142) (11131234) (31131232) (21113143) - (41113141) (21122233) (41122231) (21131323) (41131321) (11113234) (31113232) - (11122324) (31122322) (11131414) (31131412) (21113323) (41113321) (21122413) - (41122411) (11113414) (31113412) (22131142) (11231143) (31231141) (12122143) - (32122141) (12131233) (32131231) (21231232) (22113142) (11213143) (22122232) - (11222233) (22131322) (11231323) (31231321) (12113233) (32113231) (12122323) - (32122321) (12131413) (32131411) (21231412) (22113322) (11213323) (22122412) - (11222413) (31222411) (12113413) (32113411) (21213412) (23131141) (12231142) - (21331141) (13122142) (13131232) (11322142) (22231231) (11331232) (23113141) - (12213142) (23122231) (12222232) (23131321) (12231322) (21331321) (13113232) - (13122322) (11313232) (13131412) (11322322) (22231411) (11331412) (23113321) - (12213322) (23122411) (12222412) (21322411) (13113412) (22213411) (11313412) - (13231141) (11431141) (14122141) (14131231) (12322141) (12331231) (13213141) - (13222231) (11413141) (13231321) (11422231) (11431321) (14113231) (14122321) - (12313231) (14131411) (12322321) (12331411) (13213321) (13222411) (11413321) - (11422411) (14113411) (12313411) (21141142) (11132143) (31132141) (11141233) - (31141231) (21123142) (21132232) (21141322) (11114143) (31114141) (11123233) - (31123231) (11132323) (31132321) (11141413) (31141411) (21114232) (21123322) - (21132412) (11114323) (31114321) (11123413) (31123411) (22141141) (11241142) - (12132142) (12141232) (21241231) (22123141) (11223142) (22132231) (11232232) - (22141321) (11241322) (12114142) (12123232) (12132322) (12141412) (21241411) - (22114231) (11214232) (22123321) (11223322) (22132411) (11232412) (12114322) - (12123412) (21223411) (12241141) (13132141) (13141231) (11332141) (11341231) - (12223141) (12232231) (12241321) (13114141) (13123231) (11314141) (13132321) - (11323231) (13141411) (11332321) (11341411) (12214231) (12223321) (12232411) - (13114321) (13123411) (11314321) (11323411) (21151141) (11142142) (11151232) - (21133141) (21142231) (21151321) (11124142) (11133232) (11142322) (11151412) - (21115141) (21124231) (21133321) (21142411) (11115232) (11124322) (11133412) - (11251141) (12142141) (12151231) (11233141) (11242231) (11251321) (12124141) - (12133231) (12142321) (12151411) (11215141) (11224231) (11233321) (11242411) - (12115231) (12124321) (12133411) (11152141) (11161231) (11134141) (11143231) - (11152321) (11161411) (11116141) (11125231) (11134321) (11143411) (21111244) - (41111242) (11111335) (31111333) (51111331) (21111424) (41111422) (11111515) - (31111513) (51111511) (21211153) (41211151) (22111243) (42111241) (11211244) - (31211242) (12111334) (32111332) (21211333) (41211331) (22111423) (42111421) - (11211424) (31211422) (12111514) (32111512) (21211513) (41211511) (22211152) - (11311153) (31311151) (23111242) (12211243) (32211241) (21311242) (13111333) - (33111331) (22211332) (11311333) (31311331) (23111422) (12211423) (32211421) - (21311422) (13111513) (33111511) (22211512) (11311513) (31311511) (23211151) - (12311152) (21411151) (24111241) (13211242) (22311241) (11411242) (14111332) - (23211331) (12311332) (21411331) (24111421) (13211422) (22311421) (11411422) - (14111512) (23211511) (12311512) (21411511) (13311151) (11511151) (14211241) - (12411241) (15111331) (13311331) (11511331) (14211421) (12411421) (15111511) - (13311511) (11511511) (31121152) (21112153) (41112151) (21121243) (41121241) - (11112244) (31112242) (11121334) (31121332) (21112333) (41112331) (21121423) - (41121421) (11112424) (31112422) (11121514) (31121512) (21112513) (41112511) - (12121153) (32121151) (21221152) (22112152) (11212153) (22121242) (11221243) - (31221241) (12112243) (32112241) (12121333) (32121331) (21221332) (22112332) - (11212333) (22121422) (11221423) (31221421) (12112423) (32112421) (12121513) - (32121511) (21221512) (22112512) (11212513) (31212511) (13121152) (22221151) - (11321152) (23112151) (12212152) (23121241) (12221242) (21321241) (13112242) - (13121332) (11312242) (22221331) (11321332) (23112331) (12212332) (23121421) - (12221422) (21321421) (13112422) (13121512) (11312422) (22221511) (11321512) - (23112511) (12212512) (21312511) (14121151) (12321151) (13212151) (13221241) - (11412151) (11421241) (14112241) (14121331) (12312241) (12321331) (13212331) - (13221421) (11412331) (11421421) (14112421) (14121511) (12312421) (12321511) - (13212511) (11412511) (11131153) (31131151) (21122152) (21131242) (11113153) - (31113151) (11122243) (31122241) (11131333) (31131331) (21113242) (21122332) - (21131422) (11113333) (31113331) (11122423) (31122421) (11131513) (31131511) - (21113422) (21122512) (12131152) (21231151) (22122151) (11222152) (22131241) - (11231242) (12113152) (12122242) (12131332) (21231331) (22113241) (11213242) - (22122331) (11222332) (22131421) (11231422) (12113332) (12122422) (12131512) - (21231511) (22113421) (11213422) (22122511) (11222512) (13131151) (11331151) - (12222151) (12231241) (13113151) (13122241) (11313151) (13131331) (11322241) - (11331331) (12213241) (12222331) (12231421) (13113331) (13122421) (11313331) - (13131511) (11322421) (11331511) (12213421) (12222511) (11141152) (21132151) - (21141241) (11123152) (11132242) (11141332) (21114151) (21123241) (21132331) - (21141421) (11114242) (11123332) (11132422) (11141512) (21114331) (21123421) - (21132511) (12141151) (11232151) (11241241) (12123151) (12132241) (12141331) - (11214151) (11223241) (11232331) (11241421) (12114241) (12123331) (12132421) - (12141511) (11214331) (11223421) (11232511) (11151151) (11133151) (11142241) - (11151331) (11115151) (11124241) (11133331) (11142421) (11151511) (11111254) - (31111252) (21111343) (41111341) (11111434) (31111432) (21111523) (41111521) - (11111614) (31111612) (31211161) (12111253) (32111251) (21211252) (22111342) - (11211343) (31211341) (12111433) (32111431) (21211432) (22111522) (11211523) - (31211521) (12111613) (32111611) (21211612) (12211162) (21311161) (13111252) - (22211251) (11311252) (23111341) (12211342) (21311341) (13111432) (22211431) - (11311432) (23111521) (12211522) (21311521) (13111612) (22211611) (11311612) - (13211161) (11411161) (14111251) (12311251) (13211341) (11411341) (14111431) - (12311431) (13211521) (11411521) (14111611) (12311611) (21121162) (11112163) - (31112161) (11121253) (31121251) (21112252) (21121342) (11112343) (31112341) - (11121433) (31121431) (21112432) (21121522) (11112523) (31112521) (11121613) - (31121611) (22121161) (11221162) (12112162) (12121252) (21221251) (22112251) - (11212252) (22121341) (11221342) (12112342) (12121432) (21221431) (22112431) - (11212432) (22121521) (11221522) (12112522) (12121612) (21221611) (12221161) - (13112161) (13121251) (11312161) (11321251) (32121115) (52121113) (21221116) - (41221114) (61221112) (22112116) (42112114) (31212115) (51212113) (13121116) - (33121114) (22221115) (42221113) (11321116) (31321114) (51321112) (23112115) - (43112113) (12212116) (32212114) (52212112) (21312115) (41312113) (61312111) - (14121115) (34121113) (23221114) (43221112) (12321115) (32321113) (52321111) - (21421114) (41421112) (24112114) (13212115) (33212113) (22312114) (42312112) - (11412115) (31412113) (51412111) (15121114) (24221113) (13321114) (33321112) - (22421113) (42421111) (11521114) (31521112) (25112113) (14212114) (34212112) - (23312113) (43312111) (12412114) (32412112) (21512113) (41512111) (16121113) - (25221112) (14321113) (34321111) (23421112) (12521113) (32521111) (15212113) - (24312112) (13412113) (33412111) (22512112) (11612113) (31612111) (31131115) - (51131113) (21122116) (41122114) (61122112) (31113115) (51113113) (12131116) - (32131114) (52131112) (21231115) (41231113) (61231111) (22122115) (42122113) - (11222116) (31222114) (51222112) (12113116) (32113114) (52113112) (21213115) - (41213113) (61213111) (13131115) (33131113) (22231114) (42231112) (11331115) - (31331113) (51331111) (23122114) (43122112) (12222115) (32222113) (52222111) - (21322114) (41322112) (13113115) (33113113) (22213114) (42213112) (11313115) - (31313113) (51313111) (14131114) (34131112) (23231113) (43231111) (12331114) - (32331112) (21431113) (41431111) (24122113) (13222114) (33222112) (22322113) - (42322111) (11422114) (31422112) (14113114) (34113112) (23213113) (43213111) - (12313114) (32313112) (21413113) (41413111) (15131113) (24231112) (13331113) - (33331111) (22431112) (25122112) (14222113) (34222111) (23322112) (12422113) - (32422111) (21522112) (15113113) (24213112) (13313113) (33313111) (22413112) - (11513113) (31513111) (16131112) (25231111) (14331112) (23431111) (15222112) - (24322111) (13422112) (22522111) (16113112) (25213111) (14313112) (23413111) - (12513112) (21613111) (11141116) (31141114) (51141112) (21132115) (41132113) - (61132111) (11123116) (31123114) (51123112) (21114115) (41114113) (61114111) - (12141115) (32141113) (52141111) (21241114) (41241112) (22132114) (42132112) - (11232115) (31232113) (51232111) (12123115) (32123113) (52123111) (21223114) - (41223112) (22114114) (42114112) (11214115) (31214113) (51214111) (13141114) - (33141112) (22241113) (42241111) (11341114) (31341112) (23132113) (43132111) - (12232114) (32232112) (21332113) (41332111) (13123114) (33123112) (22223113) - (42223111) (11323114) (31323112) (23114113) (43114111) (12214114) (32214112) - (21314113) (41314111) (14141113) (34141111) (23241112) (12341113) (32341111) - (24132112) (13232113) (33232111) (22332112) (11432113) (31432111) (14123113) - (34123111) (23223112) (12323113) (32323111) (21423112) (24114112) (13214113) - (33214111) (22314112) (11414113) (31414111) (15141112) (24241111) (13341112) - (25132111) (14232112) (23332111) (12432112) (15123112) (24223111) (13323112) - (22423111) (11523112) (25114111) (14214112) (23314111) (12414112) (21514111) - (16141111) (14341111) (15232111) (13432111) (16123111) (14323111) (12523111) - (15214111) (13414111) (11614111) (11151115) (31151113) (51151111) (21142114) - (41142112) (11133115) (31133113) (51133111) (21124114) (41124112) (11115115) - (31115113) (51115111) (12151114) (32151112) (21251113) (41251111) (22142113) - (42142111) (11242114) (31242112) (12133114) (32133112) (21233113) (41233111) - (22124113) (42124111) (11224114) (31224112) (12115114) (32115112) (21215113) - (41215111) (13151113) (33151111) (22251112) (23142112) (12242113) (32242111) - (21342112) (13133113) (33133111) (22233112) (11333113) (31333111) (23124112) - (12224113) (32224111) (21324112) (13115113) (33115111) (22215112) (11315113) - (31315111) (14151112) (23251111) (24142111) (13242112) (22342111) (14133112) - (23233111) (12333112) (21433111) (24124111) (13224112) (22324111) (11424112) - (14115112) (23215111) (12315112) (21415111) (15151111) (14242111) (15133111) - (13333111) (14224111) (12424111) (15115111) (13315111) (11515111) (11161114) - (31161112) (21152113) (41152111) (11143114) (31143112) (21134113) (41134111) - (11125114) (31125112) (21116113) (41116111) (12161113) (32161111) (22152112) - (11252113) (31252111) (12143113) (32143111) (21243112) (22134112) (11234113) - (31234111) (12125113) (32125111) (21225112) (22116112) (11216113) (31216111) - (13161112) (23152111) (12252112) (13143112) (22243111) (11343112) (23134111) - (12234112) (21334111) (13125112) (22225111) (11325112) (23116111) (12216112) - (21316111) (14161111) (13252111) (14143111) (12343111) (13234111) (11434111) - (14125111) (12325111) (13216111) (11416111) (31111216) (51111214) (31211125) - (51211123) (32111215) (52111213) (21211216) (41211214) (61211212) (12211126) - (32211124) (52211122) (21311125) (41311123) (61311121) (13111216) (33111214) - (22211215) (42211213) (11311216) (31311214) (51311212) (13211125) (33211123) - (22311124) (42311122) (11411125) (31411123) (51411121) (14111215) (34111213) - (23211214) (43211212) (12311215) (32311213) (52311211) (21411214) (41411212) - (14211124) (34211122) (23311123) (43311121) (12411124) (32411122) (21511123) - (41511121) (15111214) (24211213) (13311214) (33311212) (22411213) (42411211) - (11511214) (31511212) (15211123) (24311122) (13411123) (33411121) (22511122) - (11611123) (31611121) (16111213) (25211212) (14311213) (34311211) (23411212) - (12511213) (32511211) (21611212) (21121126) (41121124) (61121122) (31112125) - (51112123) (31121215) (51121213) (21112216) (41112214) (61112212) (22121125) - (42121123) (11221126) (31221124) (51221122) (12112126) (32112124) (52112122) - (12121216) (32121214) (52121212) (21221215) (41221213) (61221211) (22112215) - (42112213) (11212216) (31212214) (51212212) (23121124) (43121122) (12221125) - (32221123) (52221121) (21321124) (41321122) (13112125) (33112123) (13121215) - (33121213) (11312125) (22221214) (42221212) (11321215) (31321213) (51321211) - (23112214) (43112212) (12212215) (32212213) (52212211) (21312214) (41312212) - (24121123) (13221124) (33221122) (22321123) (42321121) (11421124) (31421122) - (14112124) (34112122) (14121214) (34121212) (12312124) (23221213) (43221211) - (12321214) (32321212) (21421213) (41421211) (24112213) (13212214) (33212212) - (22312213) (42312211) (11412214) (31412212) (25121122) (14221123) (34221121) - (23321122) (12421123) (32421121) (21521122) (15112123) (15121213) (13312123) - (24221212) (13321213) (33321211) (11512123) (22421212) (11521213) (31521211) - (25112212) (14212213) (34212211) (23312212) (12412213) (32412211) (21512212) - (15221122) (24321121) (13421122) (22521121) (16112122) (16121212) (14312122) - (25221211) (14321212) (12512122) (23421211) (12521212) (15212212) (24312211) - (13412212) (22512211) (11612212) (21131125) (41131123) (61131121) (11122126) - (31122124) (51122122) (11131216) (31131214) (51131212) (21113125) (41113123) - (61113121) (21122215) (41122213) (61122211) (11113216) (31113214) (51113212) - (22131124) (42131122) (11231125) (31231123) (51231121) (12122125) (32122123) - (52122121) (12131215) (32131213) (52131211) (21231214) (41231212) (22113124) - (42113122) (11213125) (22122214) (42122212) (11222215) (31222213) (51222211) - (12113215) (32113213) (52113211) (21213214) (41213212) (23131123) (43131121) - (12231124) (32231122) (21331123) (41331121) (13122124) (33122122) (13131214) - (33131212) (11322124) (22231213) (42231211) (11331214) (31331212) (23113123) - (43113121) (12213124) (23122213) (43122211) (12222214) (32222212) (21322213) - (41322211) (13113214) (33113212) (22213213) (42213211) (11313214) (31313212) - (24131122) (13231123) (33231121) (22331122) (11431123) (31431121) (14122123) - (34122121) (14131213) (34131211) (12322123) (23231212) (12331213) (32331211) - (21431212) (24113122) (13213123) (24122212) (13222213) (33222211) (11413123) - (22322212) (11422213) (31422211) (14113213) (34113211) (23213212) (12313213) - (32313211) (21413212) (25131121) (14231122) (23331121) (12431122) (15122122) - (15131212) (13322122) (24231211) (13331212) (11522122) (22431211) (25113121) - (14213122) (25122211) (14222212) (12413122) (23322211) (12422212) (21522211) - (15113212) (24213211) (13313212) (22413211) (11513212) (15231121) (13431121) - (16122121) (16131211) (14322121) (14331211) (12522121) (15213121) (15222211) - (13413121) (13422211) (11613121) (16113211) (14313211) (12513211) (21141124) - (41141122) (11132125) (31132123) (51132121) (11141215) (31141213) (51141211) - (21123124) (41123122) (21132214) (41132212) (11114125) (31114123) (51114121) - (11123215) (31123213) (51123211) (21114214) (41114212) (22141123) (42141121) - (11241124) (31241122) (12132124) (32132122) (12141214) (32141212) (21241213) - (41241211) (22123123) (42123121) (11223124) (22132213) (42132211) (11232214) - (31232212) (12114124) (32114122) (12123214) (32123212) (21223213) (41223211) - (22114213) (42114211) (11214214) (31214212) (23141122) (12241123) (32241121) - (21341122) (13132123) (33132121) (13141213) (33141211) (11332123) (22241212) - (11341213) (31341211) (23123122) (12223123) (23132212) (12232213) (32232211) - (21332212) (13114123) (33114121) (13123213) (33123211) (11314123) (22223212) - (11323213) (31323211) (23114212) (12214213) (32214211) (21314212) (24141121) - (13241122) (22341121) (14132122) (14141212) (12332122) (23241211) (12341212) - (24123121) (13223122) (24132211) (13232212) (11423122) (22332211) (11432212) - (14114122) (14123212) (12314122) (23223211) (12323212) (21423211) (24114211) - (13214212) (22314211) (11414212) (14241121) (15132121) (15141211) (13332121) - (13341211) (14223121) (14232211) (12423121) (12432211) (15114121) (15123211) - (13314121) (13323211) (11514121) (11523211) (14214211) (12414211) (21151123) - (41151121) (11142124) (31142122) (11151214) (31151212) (21133123) (41133121) - (21142213) (41142211) (11124124) (31124122) (11133214) (31133212) (21115123) - (41115121) (21124213) (41124211) (11115214) (31115212) (22151122) (11251123) - (31251121) (12142123) (32142121) (12151213) (32151211) (21251212) (22133122) - (11233123) (22142212) (11242213) (31242211) (12124123) (32124121) (12133213) - (32133211) (21233212) (22115122) (11215123) (22124212) (11224213) (31224211) - (12115213) (32115211) (21215212) (23151121) (12251122) (13142122) (13151212) - (11342122) (22251211) (23133121) (12233122) (23142211) (12242212) (21342211) - (13124122) (13133212) (11324122) (22233211) (11333212) (23115121) (12215122) - (23124211) (12224212) (21324211) (13115212) (22215211) (11315212) (13251121) - (14142121) (14151211) (12342121) (13233121) (13242211) (11433121) (14124121) - (14133211) (12324121) (12333211) (13215121) (13224211) (11415121) (11424211) - (14115211) (12315211) (21161122) (11152123) (31152121) (11161213) (31161211) - (21143122) (21152212) (11134123) (31134121) (11143213) (31143211) (21125122) - (21134212) (11116123) (31116121) (11125213) (31125211) (22161121) (12152122) - (12161212) (22143121) (11243122) (22152211) (11252212) (12134122) (12143212) - (21243211) (22125121) (11225122) (22134211) (11234212) (12116122) (12125212) - (21225211) (13152121) (13161211) (12243121) (12252211) (13134121) (13143211) - (11334121) (11343211) (12225121) (12234211) (13116121) (13125211) (11316121) - (11325211) (21111226) (41111224) (61111222) (31111315) (51111313) (21211135) - (41211133) (61211131) (22111225) (42111223) (11211226) (31211224) (51211222) - (12111316) (32111314) (52111312) (21211315) (41211313) (61211311) (22211134) - (42211132) (11311135) (31311133) (51311131) (23111224) (43111222) (12211225) - (32211223) (52211221) (21311224) (41311222) (13111315) (33111313) (22211314) - (42211312) (11311315) (31311313) (51311311) (23211133) (43211131) (12311134) - (32311132) (21411133) (41411131) (24111223) (13211224) (33211222) (22311223) - (42311221) (11411224) (31411222) (14111314) (34111312) (23211313) (43211311) - (12311314) (32311312) (21411313) (41411311) (24211132) (13311133) (33311131) - (22411132) (11511133) (31511131) (25111222) (14211223) (34211221) (23311222) - (12411223) (32411221) (21511222) (15111313) (24211312) (13311313) (33311311) - (22411312) (11511313) (31511311) (25211131) (14311132) (23411131) (12511132) - (21611131) (15211222) (24311221) (13411222) (22511221) (11611222) (16111312) - (25211311) (14311312) (23411311) (12511312) (21611311) (31121134) (51121132) - (21112135) (41112133) (61112131) (21121225) (41121223) (61121221) (11112226) - (31112224) (51112222) (11121316) (31121314) (51121312) (21112315) (41112313) - (61112311) (12121135) (32121133) (52121131) (21221134) (41221132) (22112134) - (42112132) (11212135) (22121224) (42121222) (11221225) (31221223) (51221221) - (12112225) (32112223) (52112221) (12121315) (32121313) (52121311) (21221314) - (41221312) (22112314) (42112312) (11212315) (31212313) (51212311) (13121134) - (33121132) (22221133) (42221131) (11321134) (31321132) (23112133) (43112131) - (12212134) (23121223) (43121221) (12221224) (32221222) (21321223) (41321221) - (13112224) (33112222) (13121314) (33121312) (11312224) (22221313) (42221311) - (11321314) (31321312) (23112313) (43112311) (12212314) (32212312) (21312313) - (41312311) (14121133) (34121131) (23221132) (12321133) (32321131) (21421132) - (24112132) (13212133) (24121222) (13221223) (33221221) (11412133) (22321222) - (11421223) (31421221) (14112223) (34112221) (14121313) (34121311) (12312223) - (23221312) (12321313) (32321311) (21421312) (24112312) (13212313) (33212311) - (22312312) (11412313) (31412311) (15121132) (24221131) (13321132) (22421131) - ] [ % Odd parity - (22121116) (42121114) (31221115) (51221113) (32112115) (52112113) (21212116) - (41212114) (61212112) (23121115) (43121113) (12221116) (32221114) (52221112) - (21321115) (41321113) (61321111) (13112116) (33112114) (22212115) (42212113) - (11312116) (31312114) (51312112) (24121114) (13221115) (33221113) (22321114) - (42321112) (11421115) (31421113) (51421111) (14112115) (34112113) (23212114) - (43212112) (12312115) (32312113) (52312111) (21412114) (41412112) (25121113) - (14221114) (34221112) (23321113) (43321111) (12421114) (32421112) (21521113) - (41521111) (15112114) (24212113) (13312114) (33312112) (22412113) (42412111) - (11512114) (31512112) (15221113) (24321112) (13421113) (33421111) (22521112) - (16112113) (25212112) (14312113) (34312111) (23412112) (12512113) (32512111) - (21612112) (21131116) (41131114) (61131112) (31122115) (51122113) (21113116) - (41113114) (61113112) (22131115) (42131113) (11231116) (31231114) (51231112) - (12122116) (32122114) (52122112) (21222115) (41222113) (61222111) (22113115) - (42113113) (11213116) (31213114) (51213112) (23131114) (43131112) (12231115) - (32231113) (52231111) (21331114) (41331112) (13122115) (33122113) (22222114) - (42222112) (11322115) (31322113) (51322111) (23113114) (43113112) (12213115) - (32213113) (52213111) (21313114) (41313112) (24131113) (13231114) (33231112) - (22331113) (42331111) (11431114) (31431112) (14122114) (34122112) (23222113) - (43222111) (12322114) (32322112) (21422113) (41422111) (24113113) (13213114) - (33213112) (22313113) (42313111) (11413114) (31413112) (25131112) (14231113) - (34231111) (23331112) (12431113) (32431111) (15122113) (24222112) (13322113) - (33322111) (22422112) (11522113) (31522111) (25113112) (14213113) (34213111) - (23313112) (12413113) (32413111) (21513112) (15231112) (24331111) (13431112) - (16122112) (25222111) (14322112) (23422111) (12522112) (15213112) (24313111) - (13413112) (22513111) (11613112) (21141115) (41141113) (61141111) (11132116) - (31132114) (51132112) (21123115) (41123113) (61123111) (11114116) (31114114) - (51114112) (22141114) (42141112) (11241115) (31241113) (51241111) (12132115) - (32132113) (52132111) (21232114) (41232112) (22123114) (42123112) (11223115) - (31223113) (51223111) (12114115) (32114113) (52114111) (21214114) (41214112) - (23141113) (43141111) (12241114) (32241112) (21341113) (41341111) (13132114) - (33132112) (22232113) (42232111) (11332114) (31332112) (23123113) (43123111) - (12223114) (32223112) (21323113) (41323111) (13114114) (33114112) (22214113) - (42214111) (11314114) (31314112) (24141112) (13241113) (33241111) (22341112) - (14132113) (34132111) (23232112) (12332113) (32332111) (21432112) (24123112) - (13223113) (33223111) (22323112) (11423113) (31423111) (14114113) (34114111) - (23214112) (12314113) (32314111) (21414112) (25141111) (14241112) (23341111) - (15132112) (24232111) (13332112) (22432111) (25123111) (14223112) (23323111) - (12423112) (21523111) (15114112) (24214111) (13314112) (22414111) (11514112) - (15241111) (16132111) (14332111) (15223111) (13423111) (16114111) (14314111) - (12514111) (21151114) (41151112) (11142115) (31142113) (51142111) (21133114) - (41133112) (11124115) (31124113) (51124111) (21115114) (41115112) (22151113) - (42151111) (11251114) (31251112) (12142114) (32142112) (21242113) (41242111) - (22133113) (42133111) (11233114) (31233112) (12124114) (32124112) (21224113) - (41224111) (22115113) (42115111) (11215114) (31215112) (23151112) (12251113) - (32251111) (13142113) (33142111) (22242112) (11342113) (31342111) (23133112) - (12233113) (32233111) (21333112) (13124113) (33124111) (22224112) (11324113) - (31324111) (23115112) (12215113) (32215111) (21315112) (24151111) (13251112) - (14142112) (23242111) (12342112) (24133111) (13233112) (22333111) (11433112) - (14124112) (23224111) (12324112) (21424111) (24115111) (13215112) (22315111) - (11415112) (14251111) (15142111) (13342111) (14233111) (12433111) (15124111) - (13324111) (11524111) (14215111) (12415111) (21161113) (41161111) (11152114) - (31152112) (21143113) (41143111) (11134114) (31134112) (21125113) (41125111) - (11116114) (31116112) (22161112) (12152113) (32152111) (21252112) (22143112) - (11243113) (31243111) (12134113) (32134111) (21234112) (22125112) (11225113) - (31225111) (12116113) (32116111) (21216112) (23161111) (13152112) (22252111) - (23143111) (12243112) (21343111) (13134112) (22234111) (11334112) (23125111) - (12225112) (21325111) (13116112) (22216111) (11316112) (14152111) (13243111) - (14134111) (12334111) (13225111) (11425111) (14116111) (12316111) (41111215) - (61111213) (21211126) (41211124) (61211122) (22111216) (42111214) (31211215) - (51211213) (22211125) (42211123) (11311126) (31311124) (51311122) (23111215) - (43111213) (12211216) (32211214) (52211212) (21311215) (41311213) (61311211) - (23211124) (43211122) (12311125) (32311123) (52311121) (21411124) (41411122) - (24111214) (13211215) (33211213) (22311214) (42311212) (11411215) (31411213) - (51411211) (24211123) (13311124) (33311122) (22411123) (42411121) (11511124) - (31511122) (25111213) (14211214) (34211212) (23311213) (43311211) (12411214) - (32411212) (21511213) (41511211) (25211122) (14311123) (34311121) (23411122) - (12511123) (32511121) (21611122) (15211213) (24311212) (13411213) (33411211) - (22511212) (11611213) (31611211) (31121125) (51121123) (21112126) (41112124) - (61112122) (21121216) (41121214) (61121212) (31112215) (51112213) (12121126) - (32121124) (52121122) (21221125) (41221123) (61221121) (22112125) (42112123) - (11212126) (22121215) (42121213) (11221216) (31221214) (51221212) (12112216) - (32112214) (52112212) (21212215) (41212213) (61212211) (13121125) (33121123) - (22221124) (42221122) (11321125) (31321123) (51321121) (23112124) (43112122) - (12212125) (23121214) (43121212) (12221215) (32221213) (52221211) (21321214) - (41321212) (13112215) (33112213) (22212214) (42212212) (11312215) (31312213) - (51312211) (14121124) (34121122) (23221123) (43221121) (12321124) (32321122) - (21421123) (41421121) (24112123) (13212124) (24121213) (13221214) (33221212) - (11412124) (22321213) (42321211) (11421214) (31421212) (14112214) (34112212) - (23212213) (43212211) (12312214) (32312212) (21412213) (41412211) (15121123) - (24221122) (13321123) (33321121) (22421122) (11521123) (31521121) (25112122) - (14212123) (25121212) (14221213) (34221211) (12412123) (23321212) (12421213) - (32421211) (21521212) (15112213) (24212212) (13312213) (33312211) (22412212) - (11512213) (31512211) (16121122) (25221121) (14321122) (23421121) (12521122) - (15212122) (15221212) (13412122) (24321211) (13421212) (11612122) (22521211) - (16112212) (25212211) (14312212) (23412211) (12512212) (21612211) (11131126) - (31131124) (51131122) (21122125) (41122123) (61122121) (21131215) (41131213) - (61131211) (11113126) (31113124) (51113122) (11122216) (31122214) (51122212) - (21113215) (41113213) (61113211) (12131125) (32131123) (52131121) (21231124) - (41231122) (22122124) (42122122) (11222125) (22131214) (42131212) (11231215) - (31231213) (51231211) (12113125) (32113123) (52113121) (12122215) (32122213) - (52122211) (21222214) (41222212) (22113214) (42113212) (11213215) (31213213) - (51213211) (13131124) (33131122) (22231123) (42231121) (11331124) (31331122) - (23122123) (43122121) (12222124) (23131213) (43131211) (12231214) (32231212) - (21331213) (41331211) (13113124) (33113122) (13122214) (33122212) (11313124) - (22222213) (42222211) (11322214) (31322212) (23113213) (43113211) (12213214) - (32213212) (21313213) (41313211) (14131123) (34131121) (23231122) (12331123) - (32331121) (21431122) (24122122) (13222123) (24131212) (13231213) (33231211) - (11422123) (22331212) (11431213) (31431211) (14113123) (34113121) (14122213) - (34122211) (12313123) (23222212) (12322213) (32322211) (21422212) (24113212) - (13213213) (33213211) (22313212) (11413213) (31413211) (15131122) (24231121) - (13331122) (22431121) (25122121) (14222122) (25131211) (14231212) (12422122) - (23331211) (12431212) (15113122) (15122212) (13313122) (24222211) (13322212) - (11513122) (22422211) (11522212) (25113211) (14213212) (23313211) (12413212) - (21513211) (16131121) (14331121) (15222121) (15231211) (13422121) (13431211) - (16113121) (16122211) (14313121) (14322211) (12513121) (12522211) (15213211) - (13413211) (11613211) (11141125) (31141123) (51141121) (21132124) (41132122) - (21141214) (41141212) (11123125) (31123123) (51123121) (11132215) (31132213) - (51132211) (21114124) (41114122) (21123214) (41123212) (11114215) (31114213) - (51114211) (12141124) (32141122) (21241123) (41241121) (22132123) (42132121) - (11232124) (22141213) (42141211) (11241214) (31241212) (12123124) (32123122) - (12132214) (32132212) (21232213) (41232211) (22114123) (42114121) (11214124) - (22123213) (42123211) (11223214) (31223212) (12114214) (32114212) (21214213) - (41214211) (13141123) (33141121) (22241122) (11341123) (31341121) (23132122) - (12232123) (23141212) (12241213) (32241211) (21341212) (13123123) (33123121) - (13132213) (33132211) (11323123) (22232212) (11332213) (31332211) (23114122) - (12214123) (23123212) (12223213) (32223211) (21323212) (13114213) (33114211) - (22214212) (11314213) (31314211) (14141122) (23241121) (12341122) (24132121) - (13232122) (24141211) (13241212) (11432122) (22341211) (14123122) (14132212) - (12323122) (23232211) (12332212) (21432211) (24114121) (13214122) (24123211) - (13223212) (11414122) (22323211) (11423212) (14114212) (23214211) (12314212) - (21414211) (15141121) (13341121) (14232121) (14241211) (12432121) (15123121) - (15132211) (13323121) (13332211) (11523121) (14214121) (14223211) (12414121) - (12423211) (15114211) (13314211) (11514211) (11151124) (31151122) (21142123) - (41142121) (21151213) (41151211) (11133124) (31133122) (11142214) (31142212) - (21124123) (41124121) (21133213) (41133211) (11115124) (31115122) (11124214) - (31124212) (21115213) (41115211) (12151123) (32151121) (21251122) (22142122) - (11242123) (22151212) (11251213) (31251211) (12133123) (32133121) (12142213) - (32142211) (21242212) (22124122) (11224123) (22133212) (11233213) (31233211) - (12115123) (32115121) (12124213) (32124211) (21224212) (22115212) (11215213) - (31215211) (13151122) (22251121) (23142121) (12242122) (23151211) (12251212) - (13133122) (13142212) (11333122) (22242211) (11342212) (23124121) (12224122) - (23133211) (12233212) (21333211) (13115122) (13124212) (11315122) (22224211) - (11324212) (23115211) (12215212) (21315211) (14151121) (13242121) (13251211) - (14133121) (14142211) (12333121) (12342211) (13224121) (13233211) (11424121) - (11433211) (14115121) (14124211) (12315121) (12324211) (13215211) (11415211) - (11161123) (31161121) (21152122) (21161212) (11143123) (31143121) (11152213) - (31152211) (21134122) (21143212) (11125123) (31125121) (11134213) (31134211) - (21116122) (21125212) (12161122) (22152121) (11252122) (22161211) (12143122) - (12152212) (21252211) (22134121) (11234122) (22143211) (11243212) (12125122) - (12134212) (21234211) (22116121) (11216122) (22125211) (11225212) (13161121) - (12252121) (13143121) (13152211) (11343121) (12234121) (12243211) (13125121) - (13134211) (11325121) (11334211) (12216121) (12225211) (31111225) (51111223) - (21111316) (41111314) (61111312) (31211134) (51211132) (12111226) (32111224) - (52111222) (21211225) (41211223) (61211221) (22111315) (42111313) (11211316) - (31211314) (51211312) (12211135) (32211133) (52211131) (21311134) (41311132) - (13111225) (33111223) (22211224) (42211222) (11311225) (31311223) (51311221) - (23111314) (43111312) (12211315) (32211313) (52211311) (21311314) (41311312) - (13211134) (33211132) (22311133) (42311131) (11411134) (31411132) (14111224) - (34111222) (23211223) (43211221) (12311224) (32311222) (21411223) (41411221) - (24111313) (13211314) (33211312) (22311313) (42311311) (11411314) (31411312) - (14211133) (34211131) (23311132) (12411133) (32411131) (21511132) (15111223) - (24211222) (13311223) (33311221) (22411222) (11511223) (31511221) (25111312) - (14211313) (34211311) (23311312) (12411313) (32411311) (21511312) (15211132) - (24311131) (13411132) (22511131) (11611132) (16111222) (25211221) (14311222) - (23411221) (12511222) (21611221) (15211312) (24311311) (13411312) (22511311) - (11611312) (21121135) (41121133) (61121131) (11112136) (31112134) (51112132) - (11121226) (31121224) (51121222) (21112225) (41112223) (61112221) (21121315) - (41121313) (61121311) (11112316) (31112314) (51112312) (22121134) (42121132) - (11221135) (31221133) (51221131) (12112135) (32112133) (52112131) (12121225) - (32121223) (52121221) (21221224) (41221222) (22112224) (42112222) (11212225) - (22121314) (42121312) (11221315) (31221313) (51221311) (12112315) (32112313) - (52112311) (21212314) (41212312) (23121133) (43121131) (12221134) (32221132) - (21321133) (41321131) (13112134) (33112132) (13121224) (33121222) (11312134) - (22221223) (42221221) (11321224) (31321222) (23112223) (43112221) (12212224) - (23121313) (43121311) (12221314) (32221312) (21321313) (41321311) (13112314) - (33112312) (22212313) (42212311) (11312314) (31312312) (24121132) (13221133) - (33221131) (22321132) (11421133) (31421131) (14112133) (34112131) (14121223) - (34121221) (12312133) (23221222) (12321223) (32321221) (21421222) (24112222) - (13212223) (24121312) (13221313) (33221311) (11412223) (22321312) (11421313) - (31421311) (14112313) (34112311) (23212312) (12312313) (32312311) (21412312) - (25121131) (14221132) (23321131) (12421132) (21521131) (15112132) (15121222) - (13312132) (24221221) (13321222) (11512132) (22421221) (11521222) (25112221) - (14212222) (25121311) (14221312) (12412222) (23321311) (12421312) (21521311) - (15112312) (24212311) (13312312) (22412311) (11512312) (15221131) (13421131) - (16112131) (16121221) (14312131) (14321221) (12512131) (12521221) (15212221) - (15221311) (13412221) (13421311) (11612221) (16112311) (14312311) (12512311) - (21131134) (41131132) (11122135) (31122133) (51122131) (11131225) (31131223) - (51131221) (21113134) (41113132) (21122224) (41122222) (21131314) (41131312) - (11113225) (31113223) (51113221) (11122315) (31122313) (51122311) (21113314) - (41113312) (22131133) (42131131) (11231134) (31231132) (12122134) (32122132) - (12131224) (32131222) (21231223) (41231221) (22113133) (42113131) (11213134) - (22122223) (42122221) (11222224) (22131313) (42131311) (11231314) (31231312) - (12113224) (32113222) (12122314) (32122312) (21222313) (41222311) (22113313) - (42113311) (11213314) (31213312) (23131132) (12231133) (32231131) (21331132) - (13122133) (33122131) (13131223) (33131221) (11322133) (22231222) (11331223) - (31331221) (23113132) (12213133) (23122222) (12222223) (23131312) (12231313) - (32231311) (21331312) (13113223) (33113221) (13122313) (33122311) (11313223) - (22222312) (11322313) (31322311) (23113312) (12213313) (32213311) (21313312) - (24131131) (13231132) (22331131) (11431132) (14122132) (14131222) (12322132) - (23231221) (12331222) (21431221) (24113131) (13213132) (24122221) (13222222) - (24131311) (11413132) (13231312) (11422222) (22331311) (11431312) (14113222) - (14122312) (12313222) (23222311) (12322312) (21422311) (24113311) (13213312) - (22313311) (11413312) (14231131) (12431131) (15122131) (15131221) (13322131) - (13331221) (11522131) (14213131) (14222221) (12413131) (14231311) (12422221) - (12431311) (15113221) (15122311) (13313221) (13322311) (11513221) (11522311) - (14213311) (12413311) (21141133) (41141131) (11132134) (31132132) (11141224) - (31141222) (21123133) (41123131) (21132223) (41132221) (21141313) (41141311) - (11114134) (31114132) (11123224) (31123222) (11132314) (31132312) (21114223) - (41114221) (21123313) (41123311) (11114314) (31114312) (22141132) (11241133) - (31241131) (12132133) (32132131) (12141223) (32141221) (21241222) (22123132) - (11223133) (22132222) (11232223) (22141312) (11241313) (31241311) (12114133) - (32114131) (12123223) (32123221) (12132313) (32132311) (21232312) (22114222) - (11214223) (22123312) (11223313) (31223311) (12114313) (32114311) (21214312) - (23141131) (12241132) (21341131) (13132132) (13141222) (11332132) (22241221) - (11341222) (23123131) (12223132) (23132221) (12232222) (23141311) (12241312) - (21341311) (13114132) (13123222) (11314132) (13132312) (11323222) (22232311) - (11332312) (23114221) (12214222) (23123311) (12223312) (21323311) (13114312) - (22214311) (11314312) (13241131) (14132131) (14141221) (12332131) (12341221) - (13223131) (13232221) (11423131) (13241311) (11432221) (14114131) (14123221) - (12314131) (14132311) (12323221) (12332311) (13214221) (13223311) (11414221) - (11423311) (14114311) (12314311) (21151132) (11142133) (31142131) (11151223) - (31151221) (21133132) (21142222) (21151312) (11124133) (31124131) (11133223) - (31133221) (11142313) (31142311) (21115132) (21124222) (21133312) (11115223) - (31115221) (11124313) (31124311) (22151131) (11251132) (12142132) (12151222) - (21251221) (22133131) (11233132) (22142221) (11242222) (22151311) (11251312) - (12124132) (12133222) (12142312) (21242311) (22115131) (11215132) (22124221) - (11224222) (22133311) (11233312) (12115222) (12124312) (21224311) (12251131) - (13142131) (13151221) (11342131) (12233131) (12242221) (12251311) (13124131) - (13133221) (11324131) (13142311) (11333221) (11342311) (12215131) (12224221) - (12233311) (13115221) (13124311) (11315221) (11324311) (21161131) (11152132) - (11161222) (21143131) (21152221) (21161311) (11134132) (11143222) (11152312) - (21125131) (21134221) (21143311) (11116132) (11125222) (11134312) (12152131) - (12161221) (11243131) (11252221) (12134131) (12143221) (12152311) (11225131) - (11234221) (11243311) (12116131) (12125221) (12134311) (21111235) (41111233) - (61111231) (11111326) (31111324) (51111322) (21111415) (41111413) (61111411) - (21211144) (41211142) (22111234) (42111232) (11211235) (31211233) (51211231) - (12111325) (32111323) (52111321) (21211324) (41211322) (22111414) (42111412) - (11211415) (31211413) (51211411) (22211143) (42211141) (11311144) (31311142) - (23111233) (43111231) (12211234) (32211232) (21311233) (41311231) (13111324) - (33111322) (22211323) (42211321) (11311324) (31311322) (23111413) (43111411) - (12211414) (32211412) (21311413) (41311411) (23211142) (12311143) (32311141) - (21411142) (24111232) (13211233) (33211231) (22311232) (11411233) (31411231) - (14111323) (34111321) (23211322) (12311323) (32311321) (21411322) (24111412) - (13211413) (33211411) (22311412) (11411413) (31411411) (24211141) (13311142) - (22411141) (11511142) (25111231) (14211232) (23311231) (12411232) (21511231) - (15111322) (24211321) (13311322) (22411321) (11511322) (25111411) (14211412) - (23311411) (12411412) (21511411) (14311141) (12511141) (15211231) (13411231) - (11611231) (16111321) (14311321) (12511321) (15211411) (13411411) (11611411) - (31121143) (51121141) (21112144) (41112142) (21121234) (41121232) (11112235) - (31112233) (51112231) (11121325) (31121323) (51121321) (21112324) (41112322) - (21121414) (41121412) (11112415) (31112413) (51112411) (12121144) (32121142) - (21221143) (41221141) (22112143) (42112141) (11212144) (22121233) (42121231) - (11221234) (31221232) (12112234) (32112232) (12121324) (32121322) (21221323) - (41221321) (22112323) (42112321) (11212324) (22121413) (42121411) (11221414) - (31221412) (12112414) (32112412) (21212413) (41212411) (13121143) (33121141) - (22221142) (11321143) (31321141) (23112142) (12212143) (23121232) (12221233) - (32221231) (21321232) (13112233) (33112231) (13121323) (33121321) (11312233) - (22221322) (11321323) (31321321) (23112322) (12212323) (23121412) (12221413) - (32221411) (21321412) (13112413) (33112411) (22212412) (11312413) (31312411) - (14121142) (23221141) (12321142) (21421141) (24112141) (13212142) (24121231) - (13221232) (11412142) (22321231) (11421232) (14112232) (14121322) (12312232) - (23221321) (12321322) (21421321) (24112321) (13212322) (24121411) (13221412) - (11412322) (22321411) (11421412) (14112412) (23212411) (12312412) (21412411) - (15121141) (13321141) (11521141) (14212141) (14221231) (12412141) (12421231) - (15112231) (15121321) (13312231) (13321321) (11512231) (11521321) (14212321) - (14221411) (12412321) (12421411) (15112411) (13312411) (11512411) (11131144) - (31131142) (21122143) (41122141) (21131233) (41131231) (11113144) (31113142) - (11122234) (31122232) (11131324) (31131322) (21113233) (41113231) (21122323) - (41122321) (21131413) (41131411) (11113324) (31113322) (11122414) (31122412) - (21113413) (41113411) (12131143) (32131141) (21231142) (22122142) (11222143) - (22131232) (11231233) (31231231) (12113143) (32113141) (12122233) (32122231) - (12131323) (32131321) (21231322) (22113232) (11213233) (22122322) (11222323) - (22131412) (11231413) (31231411) (12113323) (32113321) (12122413) (32122411) - (21222412) (22113412) (11213413) (31213411) (13131142) (22231141) (11331142) - (23122141) (12222142) (23131231) (12231232) (21331231) (13113142) (13122232) - (11313142) (13131322) (11322232) (22231321) (11331322) (23113231) (12213232) - (23122321) (12222322) (23131411) (12231412) (21331411) (13113322) (13122412) - (11313322) (22222411) (11322412) (23113411) (12213412) (21313411) (14131141) - (12331141) (13222141) (13231231) (11422141) (11431231) (14113141) (14122231) - (12313141) (14131321) (12322231) (12331321) (13213231) (13222321) (11413231) - (13231411) (11422321) (11431411) (14113321) (14122411) (12313321) (12322411) - (13213411) (11413411) (11141143) (31141141) (21132142) (21141232) (11123143) - (31123141) (11132233) (31132231) (11141323) (31141321) (21114142) (21123232) - (21132322) (21141412) (11114233) (31114231) (11123323) (31123321) (11132413) - (31132411) (21114322) (21123412) (12141142) (21241141) (22132141) (11232142) - (22141231) (11241232) (12123142) (12132232) (12141322) (21241321) (22114141) - (11214142) (22123231) (11223232) (22132321) (11232322) (22141411) (11241412) - (12114232) (12123322) (12132412) (21232411) (22114321) (11214322) (22123411) - (11223412) (13141141) (11341141) (12232141) (12241231) (13123141) (13132231) - (11323141) (13141321) (11332231) (11341321) (12214141) (12223231) (12232321) - (12241411) (13114231) (13123321) (11314231) (13132411) (11323321) (11332411) - (12214321) (12223411) (11151142) (21142141) (21151231) (11133142) (11142232) - (11151322) (21124141) (21133231) (21142321) (21151411) (11115142) (11124232) - (11133322) (11142412) (21115231) (21124321) (21133411) (12151141) (11242141) - (11251231) (12133141) (12142231) (12151321) (11224141) (11233231) (11242321) - (11251411) (12115141) (12124231) (12133321) (12142411) (11215231) (11224321) - (11233411) (11161141) (11143141) (11152231) (11161321) (11125141) (11134231) - (11143321) (11152411) (11111245) (31111243) (51111241) (21111334) (41111332) - (11111425) (31111423) (51111421) (21111514) (41111512) (31211152) (12111244) - (32111242) (21211243) (41211241) (22111333) (42111331) (11211334) (31211332) - (12111424) (32111422) (21211423) (41211421) (22111513) (42111511) (11211514) - (31211512) (12211153) (32211151) (21311152) (13111243) (33111241) (22211242) - (11311243) (31311241) (23111332) (12211333) (32211331) (21311332) (13111423) - (33111421) (22211422) (11311423) (31311421) (23111512) (12211513) (32211511) - (21311512) (13211152) (22311151) (11411152) (14111242) (23211241) (12311242) - (21411241) (24111331) (13211332) (22311331) (11411332) (14111422) (23211421) - (12311422) (21411421) (24111511) (13211512) (22311511) (11411512) (14211151) - (12411151) (15111241) (13311241) (11511241) (14211331) (12411331) (15111421) - (13311421) (11511421) (14211511) (12411511) (21121153) (41121151) (11112154) - (31112152) (11121244) (31121242) (21112243) (41112241) (21121333) (41121331) - (11112334) (31112332) (11121424) (31121422) (21112423) (41112421) (21121513) - (41121511) (11112514) (31112512) (22121152) (11221153) (31221151) (12112153) - (32112151) (12121243) (32121241) (21221242) (22112242) (11212243) (22121332) - (11221333) (31221331) (12112333) (32112331) (12121423) (32121421) (21221422) - (22112422) (11212423) (22121512) (11221513) (31221511) (12112513) (32112511) - (21212512) (23121151) (12221152) (21321151) (13112152) (13121242) (11312152) - (22221241) (11321242) (23112241) (12212242) (23121331) (12221332) (21321331) - (13112332) (13121422) (11312332) (22221421) (11321422) (23112421) (12212422) - (23121511) (12221512) (21321511) (13112512) (22212511) (11312512) (13221151) - (11421151) (14112151) (14121241) (12312151) (12321241) (13212241) (13221331) - (11412241) (11421331) (14112331) (14121421) (12312331) (12321421) (13212421) - (13221511) (11412421) (11421511) (14112511) (12312511) (21131152) (11122153) - (31122151) (11131243) (31131241) (21113152) (21122242) (21131332) (11113243) - (31113241) (11122333) (31122331) (11131423) (31131421) (21113332) (21122422) - (21131512) (11113423) (31113421) (11122513) (31122511) (22131151) (11231152) - (12122152) (12131242) (21231241) (22113151) (11213152) (22122241) (11222242) - (22131331) (11231332) (12113242) (12122332) (12131422) (21231421) (22113331) - (11213332) (22122421) (11222422) (22131511) (11231512) (12113422) (12122512) - (21222511) (12231151) (13122151) (13131241) (11322151) (11331241) (12213151) - (12222241) (12231331) (13113241) (13122331) (11313241) (13131421) (11322331) - (11331421) (12213331) (12222421) (12231511) (13113421) (13122511) (11313421) - (11322511) (21141151) (11132152) (11141242) (21123151) (21132241) (21141331) - (11114152) (11123242) (11132332) (11141422) (21114241) (21123331) (21132421) - (21141511) (11114332) (11123422) (11132512) (11241151) (12132151) (12141241) - (11223151) (11232241) (11241331) (12114151) (12123241) (12132331) (12141421) - (11214241) (11223331) (11232421) (11241511) (12114331) (12123421) (12132511) - (11142151) (11151241) (11124151) (11133241) (11142331) (11151421) (11115241) - (11124331) (11133421) (11142511) (21111253) (41111251) (11111344) (31111342) - (21111433) (41111431) (11111524) (31111522) (21111613) (41111611) (21211162) - (22111252) (11211253) (31211251) (12111343) (32111341) (21211342) (22111432) - (11211433) (31211431) (12111523) (32111521) (21211522) (22111612) (11211613) - (31211611) (22211161) (11311162) (23111251) (12211252) (21311251) (13111342) - (22211341) (11311342) (23111431) (12211432) (21311431) (13111522) (22211521) - (11311522) (23111611) (12211612) (21311611) (12311161) (13211251) (11411251) - (14111341) (12311341) (13211431) (11411431) (14111521) (12311521) (13211611) - (11411611) (31121161) (21112162) (21121252) (11112253) (31112251) (11121343) - (31121341) (21112342) (21121432) (11112433) (31112431) (11121523) (31121521) - (21112522) (21121612) (12121162) (21221161) (22112161) (11212162) (22121251) - (11221252) (12112252) (12121342) (21221341) (22112341) (11212342) (22121431) - (11221432) (12112432) (12121522) (21221521) (22112521) (11212522) (22121611) - (11221612) (13121161) (11321161) (12212161) (12221251) (13112251) (13121341) - (11312251) (11321341) (12212341) (12221431) (13112431) (13121521) (11312431) - (11321521) (12212521) (12221611) (11131162) (21122161) (21131251) (11113162) - ] - ] def - - /parity [ - (1001) (0101) (1100) (0011) (1010) (0110) (1111) (0000) - ] def - - % Derive the bits for each row - /rowbits r array def - 0 1 r 1 sub { - /i exch def - /p i r 1 sub ne {parity i get} {(0000)} ifelse def - /ccrow ccs i 8 mul 8 getinterval def - /scrow [ - 0 2 7 {ccrow exch 2 getinterval aload pop exch 49 mul add} for - ] def - /sbs [ - 10 1 1 - 0 1 3 { - /j exch def - patterns p j get 48 sub get scrow j get get {48 sub} forall - } for - 4 1 - ] def - mark - 1 sbs {1 index 0 eq {{1}} {{0}} ifelse repeat} forall - counttomark 1 sub array astore exch pop exch pop - rowbits i 3 -1 roll put - } for - - % Populate the bitmap - /pixs [ - 81 sepheight mul {1} repeat - 0 1 r 2 sub { - /i exch def - rowheight {rowbits i get aload pop} repeat - sepheight {10 {0} repeat 70 {1} repeat 0} repeat - } for - rowheight {rowbits r 1 sub get aload pop} repeat - 81 sepheight mul {1} repeat - ] def - - % Return the arguments - << - /ren //renmatrix - /pixs pixs - /pixx 81 - /pixy pixs length 81 idiv - /height pixs length 81 idiv 72 div - /width 81 72 div - /opt options - >> - - dontdraw not //renmatrix if - - end - -} bind def -/code49 dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if -% --END ENCODER code49-- - -% --BEGIN ENCODER channelcode-- -% --DESC: Channel Code -% --EXAM: 3493 -% --EXOP: height=0.5 includetext -% --RNDR: renlinear -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renlinear dup /uk.co.terryburton.bwipp findresource put -begin -/channelcode { - - 20 dict begin % Confine variables to local scope - - /options exch def % We are given an option string - /barcode exch def % We are given a barcode string - - /dontdraw false def - /shortfinder false def - /includetext false def - /includecheck false def - /height 1 def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - /height height cvr def - - /barlen barcode length def - - barlen 2 ge barlen 7 le and { - /channels barlen 1 add def - } if - - % Determine finder - shortfinder { - /finder [ 1 1 1 1 1 ] def - } { - /finder [ 1 1 1 1 1 1 1 1 1 ] def - } ifelse - - /nextb { - dup - dup s exch get exch - dup b exch 1 sub get exch - dup s exch 1 sub get exch - b exch 2 sub get exch - add add add 4 gt {1} {2} ifelse - 1 index chan 2 add lt { - dup 1 4 index { - b 3 index 2 index put - 3 index exch sub 1 add 4 index 3 index 1 add nexts - } for - } { - dup 3 index le { - b 2 index 4 index put - value target eq { - /out [ - 3 1 10 {dup s exch get exch b exch get} for - ] 0 chan 2 mul getinterval def - } if - /value value 1 add def - } if - } ifelse - pop pop pop pop - } bind def - - /nexts { - dup chan 2 add lt {1} {1 index} ifelse 1 3 index { - s 2 index 2 index put - 2 index exch sub 1 add 3 index 2 index nextb - } for - pop pop pop - } bind def - - /encode { - /chan exch def - /target exch def - /value 0 def - /out -1 def - /b [ 1 1 1 0 0 0 0 0 0 0 0 ] def - /s [ 0 1 1 0 0 0 0 0 0 0 0 ] def - chan dup 3 nexts - out - } bind def - - % Encode the main data - /data barcode cvi channels encode def - - % Determine check data - /check [] def - includecheck { - /mod23 [ - [] [] [] - [ 13 12 4 9 3 1 ] - [ 13 2 12 3 18 16 4 1 ] - [ 11 16 17 8 20 4 10 2 5 1 ] - [ 1 4 16 18 3 12 2 8 9 13 6 1 ] - [ 20 16 22 13 15 12 5 4 8 9 21 3 7 1 ] - [ 2 6 18 8 1 3 9 4 12 13 16 2 6 18 8 1 ] - ] channels get def - 0 - 0 1 data length 1 sub { - dup data exch get 1 sub exch mod23 exch get mul add - } for - 23 mod 3 encode /check exch def - } if - - % Construct the symbol - /sbs [ - finder aload pop - data aload pop - check aload pop - ] def - - % Create the human readable text - /txt barlen array def - 0 1 barlen 1 sub { - /i exch def - txt i [barcode i 1 getinterval 0 0 () 0] put - } for - - % Return the arguments - << - /ren //renlinear - /sbs sbs - /bhs [sbs length 1 add 2 idiv {height} repeat] - /bbs [sbs length 1 add 2 idiv {0} repeat] - /txt txt - /textxalign (center) - /opt options - >> - - dontdraw not //renlinear if - - end - -} bind def -/channelcode dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if -% --END ENCODER channelcode-- - -% --BEGIN ENCODER flattermarken-- -% --DESC: Flattermarken -% --EXAM: 12345 -% --EXOP: inkspread=-0.25 -% --RNDR: renlinear -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renlinear dup /uk.co.terryburton.bwipp findresource put -begin -/flattermarken { - - 20 dict begin % Confine variable to local scope - - /options exch def % We are given an option string - /barcode exch def % We are given a barcode string - - /dontdraw false def - /includetext false def % Enable/disable text - /textfont /Courier def - /textsize 10 def - /textyoffset -7 def - /height 0.3 def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - /textfont textfont cvlit def - /textsize textsize cvr def - /textyoffset textyoffset cvr def - /height height cvr def - - % Create an array containing the character mappings - /encs - [ (0018) (0117) (0216) (0315) (0414) (0513) (0612) (0711) (0810) - (0900) - ] def - - % Create a string of the available characters - /barchars (1234567890) def - - /barlen barcode length def % Length of the code - - /sbs barlen 4 mul string def - /txt barlen array def - - 0 1 barlen 1 sub { - /i exch def - % Lookup the encoding for the each barcode character - barcode i 1 getinterval barchars exch search - pop % Discard true leaving pre - length /indx exch def % indx is the length of pre - pop pop % Discard seek and post - /enc encs indx get def % Get the indxth encoding - sbs i 4 mul enc putinterval % Put encoded digit into sbs - txt i [barcode i 1 getinterval i 9 mul textyoffset textfont textsize] put - } for - - % Return the arguments - << - /ren //renlinear - /sbs [sbs {48 sub} forall] - /bhs [sbs length 1 add 2 idiv {height} repeat] - /bbs [sbs length 1 add 2 idiv {0} repeat] - /txt txt - /opt options - >> - - dontdraw not //renlinear if - - end - -} bind def -/flattermarken dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if -% --END ENCODER flattermarken-- +% --BEGIN ENCODER flattermarken-- +% --REQUIRES preamble raiseerror renlinear-- +% --DESC: Flattermarken +% --EXAM: 11099 +% --EXOP: inkspread=-0.25 showborder borderleft=0 borderright=0 +% --RNDR: renlinear +%%BeginResource: uk.co.terryburton.bwipp flattermarken 0.0 0 0 0 +%%BeginData: 28 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\:%52X=FD 5Z2F- 8_M 1G< 3 GEa s#u AWf 6?1G<9 WD KKE0@< Wi+ +@;L!rOu"b*DI[L* A7]jo G]Y '?@ ;L !r Ou" b5A U&KFD5Z2F *j(NAmoLsAW +f3'P!FGY<0B5(@Z mRN0o c8tP )XR(F _-_! H]f tD5*C&O5*@ ^MH]ft&Eckr +V1OYEdI?J0)*g/N :DfBf 4Df0W Z5*@^ MP# Q@=FD5Z2F* j'+I?I/TFCf +]=AoDR/+EV1>FCo H/FHS5= 1GE,[FACghF-ATDWrEbf6(6=FClBOPpi@ru:&N[@53@-FCAm$+E).6Gp$X3B5)I/0/%?SBldisEcQ)=P!=AX<.0p$04f$2F!+\I">DMa30"+q0ekVI"> +DSc2N@no1GLbI">DYe1l_\m2)-nI">D_g16)Jk2_d%I">Dei0TH8i3A<-mOu"b#@<,jk@<-FL$ +8F:l1c70M3&r[U1G<3GEbo<)+C\c"@rGmhP%'S106:TD+C\c"Ch7L?"HmSaV33VfFEhmM@UX:n +AT!Y;Ou%moL]LsnEbo<)L]N[FCf]=F(or3+C1.TI?I,`4>1_dDD*Y`ASu9IurF-:!g!KmJ>!g6H.BOtmjBQSZcK3^->@WNYr+ +EM"5P%'4JOo^@?P#?X_!.C#_>q^;EF%QOF +% uk.co.terryburton.bwipp/flattermarken 0.0 0 +%%EndData +%%EndResource +% --END ENCODER flattermarken-- % --BEGIN ENCODER raw-- -% --DESC: Raw bar space succession for custom symbologies +% --REQUIRES preamble raiseerror renlinear-- +% --DESC: Custom 1D symbology % --EXAM: 331132131313411122131311333213114131131221323 % --EXOP: height=0.5 % --RNDR: renlinear -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renlinear dup /uk.co.terryburton.bwipp findresource put -begin -/raw { - - 20 dict begin % Confine variables to local scope - - /options exch def % We are given an option string - /sbs exch def % We are given a barcode string - - /dontdraw false def - /height 1 def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - /height height cvr def - - % Return the arguments - << - /ren //renlinear - /sbs [sbs {48 sub} forall] - /bhs [sbs length 1 add 2 idiv {height} repeat] - /bbs [sbs length 1 add 2 idiv {0} repeat] - /opt options - >> - - dontdraw not //renlinear if - - end - -} bind def -/raw dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp raw 0.0 0 0 0 +%%BeginData: 18 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\X4 aVtcOu 8C 3DfBf4 Df0 +WCP,i2'Cia0N4aW >WI? IQm 30 Ia 6V3 3Qn !Bl U*FE +2M8P!+/T/Wr;\Fc nqO1 O XV 5/ Tc# UAW eitP #ZpnA +We*t3A5;iFD5Z2F -8_M1O YEc D fBf 4D f0WC Ou% NL8M=agBkM +$+D>>#B4uC +M09S,#@<,jrA7^+ N3/B;P As, ? 63Kd 4%Ed KHK GA2#8/okBE 6=FClBOPpi@ +ru:&N[%G1G9CaFF *&O7Df 0Z* Bl5& 3DJX S@A 8,[jFE8QZ+ EVNE3A3%+@; +0doATDg0EfrY8P# Qjm8N ]*gE b0,A0 61WA Ch[ cu@<+#B@WN Yr+C\c"@rGm +hH\aA=WI9q$>q]Z #F!+[ 0@UX: eDe*F B@Y b&J!Jgf?;L <(gBkM+$I?K +4g04JC3+Bost@<, jrA7^p5 L]NY>L ]W`;H \_Z MP(R$nDfBe @DfBf4Df0V= +5!C*"Df0Z-Eaa0TE%`kbASu +% uk.co.terryburton.bwipp/raw 0.0 0 +%%EndData +%%EndResource % --END ENCODER raw-- % --BEGIN ENCODER daft-- -% --DESC: Raw DAFT succession for custom 4 state symbologies +% --REQUIRES preamble raiseerror renlinear-- +% --DESC: Custom 4 state symbology % --EXAM: FATDAFTDAD % --EXOP: % --RNDR: renlinear -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renlinear dup /uk.co.terryburton.bwipp findresource put -begin -/daft { - - 20 dict begin - - /options exch def % We are given an option string - /barcode exch def % We are given a barcode string - - /dontdraw false def - /height 0.175 def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - /height height cvr def - - /barlen barcode length def - - /bbs barlen array def - /bhs barlen array def - 0 1 barlen 1 sub { - /i exch def - /enc barcode i 1 getinterval def - enc (D) eq { - bbs i 0 height mul 8 div put - bhs i 5 height mul 8 div put - } if - enc (A) eq { - bbs i 3 height mul 8 div put - bhs i 5 height mul 8 div put - } if - enc (F) eq { - bbs i 0 height mul 8 div put - bhs i 8 height mul 8 div put - } if - enc (T) eq { - bbs i 3 height mul 8 div put - bhs i 2 height mul 8 div put - } if - } for - - % Return the arguments - << - /ren //renlinear - /bbs bbs - /bhs bhs - /sbs [bhs length 1 sub {1.44 1.872} repeat 1.44] - /opt options - >> - - dontdraw not //renlinear if - - end - -} bind def -/daft dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp daft 0.0 0 0 0 +%%BeginData: 24 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\X4a Vt cOu8C3 DfB +f4Df0WCP,i2'Cia 0N4a W>W I? IQ m30 Ia6 V33 Qn!B +lU*FE2M8P!+/T/W r;\F c nq O1 OXV 5/T c#UA WeitP +#ZpnAWe*t3A5;iF D5Z2F- 8_M 1 OYE cD fBf4 Df0 WCOu%NL8M= agBkM+$+D>> +#B4uCM09S,#@<,j rA7^+N 3/B t cD3@ )G3/ Bk` D3@)G3/C%e D3@)=<0D*]" +HinN"FDe2GA2#8/ nAC&F@ 'DH 6YKn K@:O CjE fMe@5t4frD 09oA+Cf>-FC +Am$+E).6Gp$U1@< ,ddFC fK6+ @Ib'5 qF-J +CT .u+B1!IEa` ['AS#n&DfV" +*I?IQXP"@<9@<-0 qDBNC sEas# uAWgM c1G <3HF!+q#Eb o<)OpR:-04J +U9+C\c"Ch7LI$'I *#!/LYb @<-0qD MS=VW I$: 4P!5$b04f$ 2+C\c"@rGmh ++DHW4P"_#pASu"1_dDD*Y`A +SuGL]N[D_?-CEcQG7F`MSBDD#CBBlJ#6A7]@eDImj"F)Q2A@qCgGOuY1:ATVm"@r#drB9KiQP'(hWFDt +YuCM@[!I?IP~> +% uk.co.terryburton.bwipp/daft 0.0 0 +%%EndData +%%EndResource % --END ENCODER daft-- % --BEGIN ENCODER symbol-- +% --REQUIRES preamble raiseerror renlinear-- % --DESC: Miscellaneous symbols % --EXAM: fima % --EXOP: backgroundcolor=DD000011 % --RNDR: renlinear -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renlinear dup /uk.co.terryburton.bwipp findresource put -begin -/symbol { - - 20 dict begin % Confine variables to local scope - - /options exch def % We are given an option string - /barcode exch def % We are given a barcode string - - /dontdraw false def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - barcode (fima) eq { - /sbs [2.25 2.25 2.25 11.25 2.25 11.25 2.25 2.25 2.25] def - /bhs [.625 .625 .625 .625 .625] def - /bbs [0 0 0 0 0] def - } if - - barcode (fimb) eq { - /sbs [2.25 6.75 2.25 2.25 2.25 6.25 2.25 2.25 2.25 6.75 2.25] def - /bhs [.625 .625 .625 .625 .625 .625] def - /bbs [0 0 0 0 0 0] def - } if - - barcode (fimc) eq { - /sbs [2.25 2.25 2.25 6.75 2.25 6.75 2.25 6.75 2.25 2.25 2.25] def - /bhs [.625 .625 .625 .625 .625 .625] def - /bbs [0 0 0 0 0 0] def - } if - - barcode (fimd) eq { - /sbs [2.25 2.25 2.25 2.25 2.25 6.75 2.25 6.75 2.25 2.25 2.25 2.25 2.25] def - /bhs [.625 .625 .625 .625 .625 .625 .625] def - /bbs [0 0 0 0 0 0 0] def - } if - - % Return the arguments - << - /ren //renlinear - /sbs sbs - /bhs bhs - /bbs bbs - /opt options - >> - - dontdraw not //renlinear if - - end - -} bind def -/symbol dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp symbol 0.0 0 0 0 +%%BeginData: 26 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\X4 aV tc Ou8 C3D fBf4Df 0W CP,i2' Cia +0N4aW>WI?IQm30I a6V3 3Qn !B lU *FE 2M8 P!+ /T/W +r;\FcnqO1OXV5/T c#UA W ei tP #Zp nAW e*t3 A5;iF +D5Z2F-8_M1OYEcD fBf4Df 0WC O u%N L8 M>.1 D.7 F"F!*S-04n p8@='YK@WNY +rMEh^Q!/a#Q!!%m A&-)]f 5r8 Q AMEh ^Q!/ a'! !!%mA&-)]f 5S*nqMEh^Q! +*taD04JU9+Bs^f+ 92D!59 Kq+ ME`3 `!/` u`! !%m@+92CIO u"b#@WNYrL] +E52L]E52L]C_D1O YDr04 np8@ XBbL@ WNYr MEh ^Q!/a%o!!% mA&-)]f5S*n +qMEh^Q!/a%_!!%m A&-)] f5S*n qMEh^ Q!/ a%o!!%mA&- )]9Ou"b#BQG +;#ME`3`!/`u`!!% m@+92D! 59Kq+M E`3`! /`u `!!$;f1G<3 HF!+\C!/LW2 +!/LW2!/LV\Ou%NL%PMF.D.@oGF(025>DbZW!!%mA&-)]f5S*nqMEoeo!/a#Q!!%mAfDko/5S*n +qMEoeo!/a#Q!!%mA&-)]f5S*nq?'6us@VBg*>DbWf!!%m@+92D!59Kq+ME`3`!/`u`!!%m@+92 +CIOu"b#@WNYrL]E52L]E52L]E52?'7!lOq'-WBl.C-06:TD+Bs^g&-)]f5S*nqMEh^Q!/a#Q!! + %mA&-)]f5hH&:MEh^Q!/a%o!!%mA&-)]f5S*nqMEh^Q!/a#Q!!%mA&-)]9Ou"b#BQG;#ME`3` +!/`u`!!%m@+92D!59Kq+ME`3`!/`u`!!%m@+92CIOu"b#@WNYrL]E52L]E52L]E52L]C_D1OYD +r5!G,cF*VV3DesJ;@UX:eDe*FB@$5JU04K->E,[FNH#7#/CfP@gDJs`:;gE4hDetFR%@W-((+C\c"@rGmhP"Us&4? +P9;ASs.SEb0-)Bl7KjE\DKCF!,O5F"_!9F!+q*F"_!3F!+q$F"_HNF +% uk.co.terryburton.bwipp/symbol 0.0 0 +%%EndData +%%EndResource % --END ENCODER symbol-- % --BEGIN ENCODER pdf417-- +% --REQUIRES preamble raiseerror renmatrix-- % --DESC: PDF417 % --EXAM: This is PDF417 % --EXOP: % --RNDR: renmatrix -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renmatrix dup /uk.co.terryburton.bwipp findresource put -begin -/pdf417 { - - 20 dict begin - - /options exch def - /barcode exch def - - /dontdraw false def - /compact false def - /eclevel -1 def - /columns 0 def - /rows 0 def - /rowmult 3 def - /ccc false def - /raw false def - /parse false def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - /eclevel eclevel cvi def - /columns columns cvi def - /rows rows cvi def - /rowmult rowmult cvr def - - % Parse ordinals of the form ^NNN to ASCII - parse { - /msg barcode length string def - /j 0 def - barcode - { % loop - (^) search { - dup msg exch j exch putinterval - length j add 1 add /j exch def - pop - dup 0 3 getinterval cvi msg exch j 1 sub exch put - dup length 3 sub 3 exch getinterval - } { - dup msg exch j exch putinterval - length j add /j exch def - /barcode msg 0 j getinterval def - exit - } ifelse - } loop - } if - - % Convert input into array of codewords - raw { - /datcws barcode length array def - /i 0 def /j 0 def - { % loop - i barcode length eq {exit} if - /cw barcode i 1 add 3 getinterval cvi def - datcws j cw put - /i i 4 add def - /j j 1 add def - } loop - /datcws datcws 0 j getinterval def - } { % Simple autoencoder from input to codewords using byte mode - /barlen barcode length def - barlen 6 mod 0 eq { - /datcws barlen 6 idiv 5 mul 1 add array def - datcws 0 924 put - } { - /datcws barlen 6 idiv 5 mul barlen 6 mod add 1 add array def - datcws 0 901 put - } ifelse - - % Rebase groups of 6 bytes splitting into 3 byte chunks - 0 1 barlen 6 idiv 1 sub { - /i exch def - /msbs [ barcode i 6 mul 3 getinterval {} forall ] def - /mscs [ - msbs aload pop exch 256 mul add exch 65536 mul add - 3 {dup 900 mod exch 900 idiv} repeat - ] def - /lsbs [barcode i 6 mul 3 add 3 getinterval {} forall] def - /lscs [ - lsbs aload pop exch 256 mul add exch 65536 mul add - 3 {dup 900 mod exch 900 idiv} repeat - ] def - /cws 5 array def - lscs 0 get mscs 0 get 316 mul add - cws 4 2 index 900 mod put - 900 idiv lscs 1 get add mscs 0 get 641 mul add mscs 1 get 316 mul add - cws 3 2 index 900 mod put - 900 idiv lscs 2 get add mscs 0 get 20 mul add mscs 1 get 641 mul add mscs 2 get 316 mul add - cws 2 2 index 900 mod put - 900 idiv lscs 3 get add mscs 1 get 20 mul add mscs 2 get 641 mul add - cws 1 2 index 900 mod put - 900 idiv mscs 2 get 20 mul add - cws 0 3 -1 roll 900 mod put - datcws i 5 mul 1 add cws putinterval - } for - - % Add the remaining bytes to the end of the codewords - /rem barlen 6 mod def - rem 0 ne { - datcws datcws length rem sub - [ barcode barlen rem sub rem getinterval {} forall ] - putinterval - } if - - ccc {/datcws [920 datcws aload pop] def} if - - } ifelse - - % Determine the error correction level if unspecified - /m datcws length def - eclevel -1 eq { - m 40 le {/eclevel 2 def} if - m 41 ge m 160 le and {/eclevel 3 def} if - m 161 ge m 320 le and {/eclevel 4 def} if - m 321 ge {/eclevel 5 def} if - } if - - % Reduce the error level so that it does not cause an excessive number of codewords - /maxeclevel 928 1 sub m sub ln 2 ln div cvi 1 sub def - eclevel maxeclevel gt {/eclevel maxeclevel def} if - /k 2 eclevel 1 add exp cvi def - - % To determine size of matrix, number of columns if given by user... - columns 0 eq {/columns m k add 3 div sqrt round cvi def} if - columns 1 ge columns 30 le and {/c columns def} if - - % ... and rows is greater of those required and that given by user within limits - /r m k add 1 add columns div ceiling cvi def % Required - r rows lt rows 90 le and {/r rows def} if - r 3 lt {/r 3 def} if - - % Opportunistically raise the error level if a better fit to the matrix is possible - /maxeclevel c r mul 1 sub m sub ln 2 ln div cvi 1 sub 8 2 copy gt {exch} if pop def - maxeclevel eclevel gt { - /eclevel maxeclevel def - /k 2 eclevel 1 add exp cvi def - } if - - % Create codewords array with one extra working space element and add padding - /n c r mul k sub def - /cws c r mul 1 add array def - cws 0 n put - cws 1 datcws putinterval - cws m 1 add [ n m sub 1 sub {900} repeat ] putinterval - cws n [ k {0} repeat 0 ] putinterval - - % Calculate the log and anti-log tables - /rsalog [ 1 928 {dup 3 mul 929 mod} repeat ] def - /rslog 929 array def - 1 1 928 {dup rsalog exch get exch rslog 3 1 roll put} for - - % Function to calculate the product in the field - /rsprod { - 2 copy 0 ne exch 0 ne and { - rslog exch get exch rslog exch get add 928 mod rsalog exch get - } { - pop pop 0 - } ifelse - } bind def - - % Generate the coefficients - /coeffs [ 1 k {0} repeat ] def - 1 1 k { - /i exch def - coeffs i coeffs i 1 sub get put - i 1 sub -1 1 { - /j exch def - coeffs j coeffs j 1 sub get coeffs j get rsalog i get rsprod add 929 mod put - } for - coeffs 0 coeffs 0 get rsalog i get rsprod put - } for - /coeffs coeffs 0 coeffs length 1 sub getinterval def - coeffs length 1 sub -2 0 {coeffs exch 2 copy get 929 exch sub put} for - - % Derive the error codewords - 0 1 n 1 sub { - /t exch cws exch get cws n get add 929 mod def - 0 1 k 1 sub { - /j exch def - cws n j add cws n j add 1 add get 929 t coeffs k j sub 1 sub get mul 929 mod sub add 929 mod put - } for - } for - n 1 n k add { dup cws exch 929 cws 5 -1 roll get sub 929 mod put } for - - % Trim the working space from the end of the codewords - /cws cws 0 cws length 1 sub getinterval def - - % Base 10 encoding of the bar space successions for the codewords in each cluster - /clusters [ - [ - 120256 125680 128380 120032 125560 128318 108736 119920 108640 86080 108592 86048 - 110016 120560 125820 109792 120440 125758 88256 109680 88160 89536 110320 120700 - 89312 110200 120638 89200 110140 89840 110460 89720 110398 89980 128506 119520 - 125304 128190 107712 119408 125244 107616 119352 84032 107568 119324 84000 107544 - 83984 108256 119672 125374 85184 108144 119612 85088 108088 119582 85040 108060 - 85728 108408 119742 85616 108348 85560 108318 85880 108478 85820 85790 107200 - 119152 125116 107104 119096 125086 83008 107056 119068 82976 107032 82960 82952 - 83648 107376 119228 83552 107320 119198 83504 107292 83480 83468 83824 107452 - 83768 107422 83740 83900 106848 118968 125022 82496 106800 118940 82464 106776 - 118926 82448 106764 82440 106758 82784 106936 119006 82736 106908 82712 106894 - 82700 82694 106974 82830 82240 106672 118876 82208 106648 118862 82192 106636 - 82184 106630 82180 82352 82328 82316 82080 118830 106572 106566 82050 117472 - 124280 127678 103616 117360 124220 103520 117304 124190 75840 103472 75808 104160 - 117624 124350 76992 104048 117564 76896 103992 76848 76824 77536 104312 117694 - 77424 104252 77368 77340 77688 104382 77628 77758 121536 126320 128700 121440 - 126264 128670 111680 121392 126236 111648 121368 126222 111632 121356 103104 117104 - 124092 112320 103008 117048 124062 112224 121656 126366 93248 74784 102936 117006 - 93216 112152 93200 75456 103280 117180 93888 75360 103224 117150 93792 112440 - 121758 93744 75288 93720 75632 103356 94064 75576 103326 94008 112542 93980 - 75708 94140 75678 94110 121184 126136 128606 111168 121136 126108 111136 121112 - 126094 111120 121100 111112 111108 102752 116920 123998 111456 102704 116892 91712 - 74272 121244 116878 91680 74256 102668 91664 111372 102662 74244 74592 102840 - 116958 92000 74544 102812 91952 111516 102798 91928 74508 74502 74680 102878 - 92088 74652 92060 74638 92046 92126 110912 121008 126044 110880 120984 126030 - 110864 120972 110856 120966 110852 110850 74048 102576 116828 90944 74016 102552 - 116814 90912 111000 121038 90896 73992 102534 90888 110982 90884 74160 102620 - 91056 74136 102606 91032 111054 91020 74118 91014 91100 91086 110752 120920 - 125998 110736 120908 110728 120902 110724 110722 73888 102488 116782 90528 73872 - 102476 90512 110796 102470 90504 73860 90500 73858 73944 90584 90572 90566 - 120876 120870 110658 102444 73800 90312 90308 90306 101056 116080 123580 100960 - 116024 70720 100912 115996 70688 100888 70672 70664 71360 101232 116156 71264 - 101176 116126 71216 101148 71192 71180 71536 101308 71480 101278 71452 71612 - 71582 118112 124600 127838 105024 118064 124572 104992 118040 124558 104976 118028 - 104968 118022 100704 115896 123486 105312 100656 115868 79424 70176 118172 115854 - 79392 105240 100620 79376 70152 79368 70496 100792 115934 79712 70448 118238 - 79664 105372 100750 79640 70412 79628 70584 100830 79800 70556 79772 70542 - 70622 79838 122176 126640 128860 122144 126616 128846 122128 126604 122120 126598 - 122116 104768 117936 124508 113472 104736 126684 124494 113440 122264 126670 113424 - 104712 117894 113416 122246 104706 69952 100528 115804 78656 69920 100504 115790 - 96064 78624 104856 117966 96032 113560 122318 100486 96016 78600 104838 96008 - 69890 70064 100572 78768 70040 100558 96176 78744 104910 96152 113614 70022 - 78726 70108 78812 70094 96220 78798 122016 126552 128814 122000 126540 121992 - 126534 121988 121986 104608 117848 124462 113056 104592 126574 113040 122060 117830 - 113032 104580 113028 104578 113026 69792 100440 115758 78240 69776 100428 95136 - 78224 104652 100422 95120 113100 69764 95112 78212 69762 78210 69848 100462 - 78296 69836 95192 78284 69830 95180 78278 69870 95214 121936 126508 121928 - 126502 121924 121922 104528 117804 112848 104520 117798 112840 121958 112836 104514 - 112834 69712 100396 78032 69704 100390 94672 78024 104550 94664 112870 69698 - 94660 78018 94658 78060 94700 94694 126486 121890 117782 104484 104482 69672 - 77928 94440 69666 77922 99680 68160 99632 68128 99608 115342 68112 99596 - 68104 99590 68448 99768 115422 68400 99740 68376 99726 68364 68358 68536 - 99806 68508 68494 68574 101696 116400 123740 101664 116376 101648 116364 101640 - 116358 101636 67904 99504 115292 72512 67872 116444 115278 72480 101784 116430 - 72464 67848 99462 72456 101766 67842 68016 99548 72624 67992 99534 72600 - 101838 72588 67974 68060 72668 68046 72654 118432 124760 127918 118416 124748 - 118408 124742 118404 118402 101536 116312 105888 101520 116300 105872 118476 116294 - 105864 101508 105860 101506 105858 67744 99416 72096 67728 116334 80800 72080 - 101580 99398 80784 105932 67716 80776 72068 67714 72066 67800 99438 72152 - 67788 80856 72140 67782 80844 72134 67822 72174 80878 126800 128940 126792 - 128934 126788 126786 118352 124716 122576 126828 124710 122568 126822 122564 118338 - 122562 101456 116268 105680 101448 116262 114128 105672 118374 114120 122598 101442 - 114116 105666 114114 67664 99372 71888 67656 99366 80336 71880 101478 97232 - 80328 105702 67650 97224 114150 71874 97220 67692 71916 67686 80364 71910 - 97260 80358 97254 126760 128918 126756 126754 118312 124694 122472 126774 122468 - 118306 122466 101416 116246 105576 101412 113896 105572 101410 113892 105570 113890 - 67624 99350 71784 101430 80104 71780 67618 96744 80100 71778 96740 80098 - 96738 71798 96758 126738 122420 122418 105524 113780 113778 71732 79988 96500 - 96498 66880 66848 98968 66832 66824 66820 66992 66968 66956 66950 67036 - 67022 100000 99984 115532 99976 115526 99972 99970 66720 98904 69024 100056 - 98892 69008 100044 69000 100038 68996 66690 68994 66776 98926 69080 100078 - 69068 66758 69062 66798 69102 116560 116552 116548 116546 99920 102096 116588 - 115494 102088 116582 102084 99906 102082 66640 68816 66632 98854 73168 68808 - 66628 73160 68804 66626 73156 68802 66668 68844 66662 73196 68838 73190 - 124840 124836 124834 116520 118632 124854 118628 116514 118626 99880 115478 101992 - 116534 106216 101988 99874 106212 101986 106210 66600 98838 68712 99894 72936 - 68708 66594 81384 72932 68706 81380 72930 66614 68726 72950 81398 128980 - 128978 124820 126900 124818 126898 116500 118580 116498 122740 118578 122738 99860 - 101940 99858 106100 101938 114420 - ] [ - 128352 129720 125504 128304 129692 125472 128280 129678 125456 128268 125448 128262 - 125444 125792 128440 129758 120384 125744 128412 120352 125720 128398 120336 125708 - 120328 125702 120324 120672 125880 128478 110144 120624 125852 110112 120600 125838 - 110096 120588 110088 120582 110084 110432 120760 125918 89664 110384 120732 89632 - 110360 120718 89616 110348 89608 110342 89952 110520 120798 89904 110492 89880 - 110478 89868 90040 110558 90012 89998 125248 128176 129628 125216 128152 129614 - 125200 128140 125192 128134 125188 125186 119616 125360 128220 119584 125336 128206 - 119568 125324 119560 125318 119556 119554 108352 119728 125404 108320 119704 125390 - 108304 119692 108296 119686 108292 108290 85824 108464 119772 85792 108440 119758 - 85776 108428 85768 108422 85764 85936 108508 85912 108494 85900 85894 85980 - 85966 125088 128088 129582 125072 128076 125064 128070 125060 125058 119200 125144 - 128110 119184 125132 119176 125126 119172 119170 107424 119256 125166 107408 119244 - 107400 119238 107396 107394 83872 107480 119278 83856 107468 83848 107462 83844 - 83842 83928 107502 83916 83910 83950 125008 128044 125000 128038 124996 124994 - 118992 125036 118984 125030 118980 118978 106960 119020 106952 119014 106948 106946 - 82896 106988 82888 106982 82884 82882 82924 82918 124968 128022 124964 124962 - 118888 124982 118884 118882 106728 118902 106724 106722 82408 106742 82404 82402 - 124948 124946 118836 118834 106612 106610 124224 127664 129372 124192 127640 129358 - 124176 127628 124168 127622 124164 124162 117568 124336 127708 117536 124312 127694 - 117520 124300 117512 124294 117508 117506 104256 117680 124380 104224 117656 124366 - 104208 117644 104200 117638 104196 104194 77632 104368 117724 77600 104344 117710 - 77584 104332 77576 104326 77572 77744 104412 77720 104398 77708 77702 77788 - 77774 128672 129880 93168 128656 129868 92664 128648 129862 92412 128644 128642 - 124064 127576 129326 126368 124048 129902 126352 128716 127558 126344 124036 126340 - 124034 126338 117152 124120 127598 121760 117136 124108 121744 126412 124102 121736 - 117124 121732 117122 121730 103328 117208 124142 112544 103312 117196 112528 121804 - 117190 112520 103300 112516 103298 112514 75680 103384 117230 94112 75664 103372 - 94096 112588 103366 94088 75652 94084 75650 75736 103406 94168 75724 94156 - 75718 94150 75758 128592 129836 91640 128584 129830 91388 128580 91262 128578 - 123984 127532 126160 123976 127526 126152 128614 126148 123970 126146 116944 124012 - 121296 116936 124006 121288 126182 121284 116930 121282 102864 116972 111568 102856 - 116966 111560 121318 111556 102850 111554 74704 102892 92112 74696 102886 92104 - 111590 92100 74690 92098 74732 92140 74726 92134 128552 129814 90876 128548 - 90750 128546 123944 127510 126056 128566 126052 123938 126050 116840 123958 121064 - 116836 121060 116834 121058 102632 116854 111080 121078 111076 102626 111074 74216 - 102646 91112 74212 91108 74210 91106 74230 91126 128532 90494 128530 123924 - 126004 123922 126002 116788 120948 116786 120946 102516 110836 102514 110834 73972 - 90612 73970 90610 128522 123914 125978 116762 120890 102458 110714 123552 127320 - 129198 123536 127308 123528 127302 123524 123522 116128 123608 127342 116112 123596 - 116104 123590 116100 116098 101280 116184 123630 101264 116172 101256 116166 101252 - 101250 71584 101336 116206 71568 101324 71560 101318 71556 71554 71640 101358 - 71628 71622 71662 127824 129452 79352 127816 129446 79100 127812 78974 127810 - 123472 127276 124624 123464 127270 124616 127846 124612 123458 124610 115920 123500 - 118224 115912 123494 118216 124646 118212 115906 118210 100816 115948 105424 100808 - 115942 105416 118246 105412 100802 105410 70608 100844 79824 70600 100838 79816 - 105446 79812 70594 79810 70636 79852 70630 79846 129960 95728 113404 129956 - 95480 113278 129954 95356 95294 127784 129430 78588 128872 129974 95996 78462 - 128868 127778 95870 128866 123432 127254 124520 123428 126696 128886 123426 126692 - 124514 126690 115816 123446 117992 115812 122344 117988 115810 122340 117986 122338 - 100584 115830 104936 100580 113640 104932 100578 113636 104930 113634 70120 100598 - 78824 70116 96232 78820 70114 96228 78818 96226 70134 78838 129940 94968 - 113022 129938 94844 94782 127764 78206 128820 127762 95102 128818 123412 124468 - 123410 126580 124466 126578 115764 117876 115762 122100 117874 122098 100468 104692 - 100466 113140 104690 113138 69876 78324 69874 95220 78322 95218 129930 94588 - 94526 127754 128794 123402 124442 126522 115738 117818 121978 100410 104570 112890 - 69754 78074 94714 94398 123216 127148 123208 127142 123204 123202 115408 123244 - 115400 123238 115396 115394 99792 115436 99784 115430 99780 99778 68560 99820 - 68552 99814 68548 68546 68588 68582 127400 129238 72444 127396 72318 127394 - 123176 127126 123752 123172 123748 123170 123746 115304 123190 116456 115300 116452 - 115298 116450 99560 115318 101864 99556 101860 99554 101858 68072 99574 72680 - 68068 72676 68066 72674 68086 72694 129492 80632 105854 129490 80508 80446 - 127380 72062 127924 127378 80766 127922 123156 123700 123154 124788 123698 124786 - 115252 116340 115250 118516 116338 118514 99444 101620 99442 105972 101618 105970 - 67828 72180 67826 80884 72178 80882 97008 114044 96888 113982 96828 96798 - 129482 80252 130010 97148 80190 97086 127370 127898 128954 123146 123674 124730 - 126842 115226 116282 118394 122618 99386 101498 105722 114170 67706 71930 80378 - 96632 113854 96572 96542 80062 96702 96444 96414 96350 123048 123044 123042 - 115048 123062 115044 115042 99048 115062 99044 99042 67048 99062 67044 67042 - 67062 127188 68990 127186 123028 123316 123026 123314 114996 115572 114994 115570 - 98932 100084 98930 100082 66804 69108 66802 69106 129258 73084 73022 127178 - 127450 123018 123290 123834 114970 115514 116602 98874 99962 102138 66682 68858 - 73210 81272 106174 81212 81182 72894 81342 97648 114364 97592 114334 97564 - 97550 81084 97724 81054 97694 97464 114270 97436 97422 80990 97502 97372 - 97358 97326 114868 114866 98676 98674 66292 66290 123098 114842 115130 98618 - 99194 66170 67322 69310 73404 73374 81592 106334 81564 81550 73310 81630 - 97968 114524 97944 114510 97932 97926 81500 98012 81486 97998 97880 114478 - 97868 97862 81454 97902 97836 97830 69470 73564 73550 81752 106414 81740 - 81734 73518 81774 81708 81702 - ] [ - 109536 120312 86976 109040 120060 86496 108792 119934 86256 108668 86136 129744 - 89056 110072 129736 88560 109820 129732 88312 109694 129730 88188 128464 129772 - 89592 128456 129766 89340 128452 89214 128450 125904 128492 125896 128486 125892 - 125890 120784 125932 120776 125926 120772 120770 110544 120812 110536 120806 110532 - 84928 108016 119548 84448 107768 119422 84208 107644 84088 107582 84028 129640 - 85488 108284 129636 85240 108158 129634 85116 85054 128232 129654 85756 128228 - 85630 128226 125416 128246 125412 125410 119784 125430 119780 119778 108520 119798 - 108516 108514 83424 107256 119166 83184 107132 83064 107070 83004 82974 129588 - 83704 107390 129586 83580 83518 128116 83838 128114 125172 125170 119284 119282 - 107508 107506 82672 106876 82552 106814 82492 82462 129562 82812 82750 128058 - 125050 119034 82296 106686 82236 82206 82366 82108 82078 76736 103920 117500 - 76256 103672 117374 76016 103548 75896 103486 75836 129384 77296 104188 129380 - 77048 104062 129378 76924 76862 127720 129398 77564 127716 77438 127714 124392 - 127734 124388 124386 117736 124406 117732 117730 104424 117750 104420 104418 112096 - 121592 126334 92608 111856 121468 92384 111736 121406 92272 111676 92216 111646 - 92188 75232 103160 117118 93664 74992 103036 93424 112252 102974 93304 74812 - 93244 74782 93214 129332 75512 103294 129908 129330 93944 75388 129906 93820 - 75326 93758 127604 75646 128756 127602 94078 128754 124148 126452 124146 126450 - 117236 121844 117234 121842 103412 103410 91584 111344 121212 91360 111224 121150 - 91248 111164 91192 111134 91164 91150 74480 102780 91888 74360 102718 91768 - 111422 91708 74270 91678 129306 74620 129850 92028 74558 91966 127546 128634 - 124026 126202 116986 121338 102906 90848 110968 121022 90736 110908 90680 110878 - 90652 90638 74104 102590 91000 74044 90940 74014 90910 74174 91070 90480 - 110780 90424 110750 90396 90382 73916 90556 73886 90526 90296 110686 90268 - 90254 73822 90334 90204 90190 71136 101112 116094 70896 100988 70776 100926 - 70716 70686 129204 71416 101246 129202 71292 71230 127348 71550 127346 123636 - 123634 116212 116210 101364 101362 79296 105200 118140 79072 105080 118078 78960 - 105020 78904 104990 78876 78862 70384 100732 79600 70264 100670 79480 105278 - 79420 70174 79390 129178 70524 129466 79740 70462 79678 127290 127866 123514 - 124666 115962 118266 100858 113376 122232 126654 95424 113264 122172 95328 113208 - 122142 95280 113180 95256 113166 95244 78560 104824 117950 95968 78448 104764 - 95856 113468 104734 95800 78364 95772 78350 95758 70008 100542 78712 69948 - 96120 78652 69918 96060 78622 96030 70078 78782 96190 94912 113008 122044 - 94816 112952 122014 94768 112924 94744 112910 94732 94726 78192 104636 95088 - 78136 104606 95032 113054 95004 78094 94990 69820 78268 69790 95164 78238 - 95134 94560 112824 121950 94512 112796 94488 112782 94476 94470 78008 104542 - 94648 77980 94620 77966 94606 69726 78046 94686 94384 112732 94360 112718 - 94348 94342 77916 94428 77902 94414 94296 112686 94284 94278 77870 94318 - 94252 94246 68336 99708 68216 99646 68156 68126 68476 68414 127162 123258 - 115450 99834 72416 101752 116414 72304 101692 72248 101662 72220 72206 67960 - 99518 72568 67900 72508 67870 72478 68030 72638 80576 105840 118460 80480 - 105784 118430 80432 105756 80408 105742 80396 80390 72048 101564 80752 71992 - 101534 80696 71964 80668 71950 80654 67772 72124 67742 80828 72094 80798 - 114016 122552 126814 96832 113968 122524 96800 113944 122510 96784 113932 96776 - 113926 96772 80224 105656 118366 97120 80176 105628 97072 114076 105614 97048 - 80140 97036 80134 97030 71864 101470 80312 71836 97208 80284 71822 97180 - 80270 97166 67678 71902 80350 97246 96576 113840 122460 96544 113816 122446 - 96528 113804 96520 113798 96516 96514 80048 105564 96688 80024 105550 96664 - 113870 96652 80006 96646 71772 80092 71758 96732 80078 96718 96416 113752 - 122414 96400 113740 96392 113734 96388 96386 79960 105518 96472 79948 96460 - 79942 96454 71726 79982 96494 96336 113708 96328 113702 96324 96322 79916 - 96364 79910 96358 96296 113686 96292 96290 79894 96310 66936 99006 66876 - 66846 67006 68976 100028 68920 99998 68892 68878 66748 69052 66718 69022 - 73056 102072 116574 73008 102044 72984 102030 72972 72966 68792 99934 73144 - 68764 73116 68750 73102 66654 68830 73182 81216 106160 118620 81184 106136 - 118606 81168 106124 81160 106118 81156 81154 72880 101980 81328 72856 101966 - 81304 106190 81292 72838 81286 68700 72924 68686 81372 72910 81358 114336 - 122712 126894 114320 122700 114312 122694 114308 114306 81056 106072 118574 97696 - 81040 106060 97680 114380 106054 97672 81028 97668 81026 97666 72792 101934 - 81112 72780 97752 81100 72774 97740 81094 97734 68654 72814 81134 97774 - 114256 122668 114248 122662 114244 114242 80976 106028 97488 80968 106022 97480 - 114278 97476 80962 97474 72748 81004 72742 97516 80998 97510 114216 122646 - 114212 114210 80936 106006 97384 80932 97380 80930 97378 72726 80950 97398 - 114196 114194 80916 97332 80914 97330 66236 66206 67256 99166 67228 67214 - 66142 67294 69296 100188 69272 100174 69260 69254 67164 69340 67150 69326 - 73376 102232 116654 73360 102220 73352 102214 73348 73346 69208 100142 73432 - 102254 73420 69190 73414 67118 69230 73454 106320 118700 106312 118694 106308 - 106306 73296 102188 81616 106348 102182 81608 73284 81604 73282 81602 69164 - 73324 69158 81644 73318 81638 122792 126934 122788 122786 106280 118678 114536 - 106276 114532 106274 114530 73256 102166 81512 73252 98024 81508 73250 98020 - 81506 98018 69142 73270 81526 98038 122772 122770 106260 114484 106258 114482 - 73236 81460 73234 97908 81458 97906 122762 106250 114458 73226 81434 97850 - 66396 66382 67416 99246 67404 67398 66350 67438 69456 100268 69448 100262 - 69444 69442 67372 69484 67366 69478 102312 116694 102308 102306 69416 100246 - 73576 102326 73572 69410 73570 67350 69430 73590 118740 118738 102292 106420 - 102290 106418 69396 73524 69394 81780 73522 81778 118730 102282 106394 69386 - 73498 81722 66476 66470 67496 99286 67492 67490 66454 67510 100308 100306 - 67476 69556 67474 69554 116714 - ] - ] def - - % Return the 17 bits for a codeword in a given cluster - /cwtobits { - clusters exch get exch get /v exch def - [ 17 {0} repeat v 2 17 string cvrs {48 sub} forall ] - dup length 17 sub 17 getinterval - } bind def - - % Populate bitmap for the image - compact { - /rwid 17 c mul 17 add 17 add 1 add def - } { - /rwid 17 c mul 17 add 17 add 17 add 18 add def - } ifelse - /pixs rwid r mul array def - - 0 1 r 1 sub { - /i exch def - - i 3 mod 0 eq { - /lcw i 3 idiv 30 mul r 1 sub 3 idiv add def - /rcw i 3 idiv 30 mul c add 1 sub def - } if - i 3 mod 1 eq { - /lcw i 3 idiv 30 mul eclevel 3 mul add r 1 sub 3 mod add def - /rcw i 3 idiv 30 mul r 1 sub 3 idiv add def - } if - i 3 mod 2 eq { - /lcw i 3 idiv 30 mul c add 1 sub def - /rcw i 3 idiv 30 mul eclevel 3 mul add r 1 sub 3 mod add def - } if - - pixs rwid i mul [ - 1 1 1 1 1 1 1 1 0 1 0 1 0 1 0 0 0 - lcw i 3 mod cwtobits {} forall - cws c i mul c getinterval { i 3 mod cwtobits {} forall } forall - compact { - 1 - } { - rcw i 3 mod cwtobits {} forall - 1 1 1 1 1 1 1 0 1 0 0 0 1 0 1 0 0 1 - } ifelse - ] putinterval - - } for - - % Return the arguments - << - /ren //renmatrix - /pixs pixs - /pixx rwid - /pixy r - /height r 72 div rowmult mul - /width rwid 72 div - /opt options - >> - - dontdraw not //renmatrix if - - end - -} bind def -/pdf417 dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp pdf417 0.0 0 0 0 +%%BeginData: 310 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\ DP!5 %OP! 5$b I=%,/FE2M8 Ou%NL+F _u#;O t;bP 061 uTF!,LAGB8 ouOu"b3Dg-& +@Cige?Dg-&@Cikg nOu%& cEcYf =05Yc C+C \c"@rGmhP% 'TNOu"b+L]E +So@UX:eDe*F+NWE ILNI-gJ D0'?Q5 &-6EP 'N4 "C6AUR!KmI :C6CcD1QlmD +3/@Qj"-Q?@/8]H@P!3W:!KsFF5*C/R30Ia,"-TX>"-Pj29RV8N3,N_LP!3WD5*C2S@VV&,05?Y +6Ou"b#@<,jrA7Zm#F(^:/C6D8R1Qk"OP#ZpnAUT_@Eaa0=04\L5@s;u:@UX:eDe*FB@Zh%\1G< +Hu!0T,kC5;kQ1OEgY@UX:eDe*FB@Zim$P!FGY<%ha*+C\c"@rGmh+DHW4Oo^@@P"_#iOu$WWFC +TN9+DN$/GER2(Bcq,G"HieK1GCkr+T!KmbP +1Lsp9@sP&+T9Ebo<)L^'#WOo^@>Oo^^POu$W +WFCTN9L]E/3Kp$\/P#[;9IB`Eas#uAKY]C#*NeY"-N\@"-Q?)I?I0-Ou"b-F(986>9Ia'@ +WR\6P')pOL&h:;Cm"g^5(in:!!&0uOo^@@H]g@C",)hPP!4U&KT]5]P(R&'1G<6^F,1!_$'I)\ +F(99I!0TulF(99I!0U!0!BcN]Oo]':F,0sT!g6Z?",)hPP'D]`KT]5LF(99I!Kp*=!GumfF,0g +Z983M!P&-9^D0'3.L]NZ3L&jE"Cm"g/GB8QBL]W`AL'**lC6Egr",)h8Cia*-L]W`4Oo]E@@rm +G+P"UTFP&-9^D0'3.L]NZ3L&uphCm"g9F(99I!g632!BcN]Oo]':F,0mR!g6Z?",)hPP'D]`KT +]5LF(99I"-Q9IB`Eas#uAKYGjEbo< +)+ED%1P,WJ5D3@S>I?I0-P'MJ=<+BEJHS8oQOu%NL<+Bi_F_u#;L]NZ2@rH1+D/OEN*g0 +rp"FDe3+Cf>+F_u#;Ou%NL<%i87D'3VW!Jgc>!Fp%aF_u#;OuAI7Ot;bPEZfC@GB8pZEc6/CLg +#sMOp$+bEZfC@GB8p'I?IQML]`fPHS9Dq"-PHgP#O)O@OpR:-@s+Dlo8Oo\c0DBNeZWJCSDN;qH\_ZMP(R&'1Pc'f!Gd$8Bp(ZC1Lk?7AnH*,Bcpo(AS,Oq+DHW4P,XU +;P'C\s!KsFP"UN3Tl_DeDe3NmF!,6@C6GQP!KsFF99O+ +G"/1lmP,XTFL'+-4C6EgiP":"a88a4aDBN_X!IKth@s9I.'!!1WcKE)&/KE)&F^4ZIeUqhW +`!Rbq?!!2=HKE)%K@"\L\dPum[!D#J/!!/lLKE)&$*/":m80EQc!MgQc!!,V%KE)%Mi.M(2ds- +NG!U7=O!!,d/KE)%ME.e2ldl`9`!DHmS!!/rVKE)&%*eXLo9JD,"!N$ii!!,jQKE)%NG_?%te% +UJ8!D[Te!!/u[KE)$J3.q84V]LKk!Ddrn!!0"3KE)$K4G3\8:EG/h!M[A_!!1JdKE)&:]S$7cU +0rWS!RWl[!!2;TKE)$@5_K+&;1 +#aTaZSS!C@'F!!/btKE)$?@"\L\Tt#aU!RT\V!!,G@KE)%HS:gkC6PtIV!MPO,!!,FqKE)$?#( +usWU#(G&!CMm#!!,ANKE)%GY_2uWcs25(!C7i]!!/a[KE)&":4rTJ5nJ\L!MGC)!!,@kKE)%GL +4fO-5m2i@!CR!!22+KE)&D +^4ZIePe_qP!QoA7!!21DKE)%;@"\L\auG%S!TbAU!!+K5KE)%;0SBE,-m40C!LDYs!!18fKE)& +7^4ZIe/AQo=!L@\X!!18*KE)$(@"\L\Q8jNt!A#pX!!+VfKE)$*i.M(2Q["/`!R&31!!+]kKE) + %>4G3\8/i\La!A5@F!!+`tKE)%>^4ZIe00Fmf!AD0?!!1fhKE)&?E.e2lp:Q%Y!SUq7!!2IHK +E)&HSqI(EZp99E!ST5\!!2I,KE)%[+G9^qg),JC!UUAM!!0Gtk!H4Q_!!1b\KE)&>\:ah_p0NCP!O=tD!!1b,KE)&>S:gkCZ64f#!SJ9KE)&*N._03Ym?!_!SE-[!!0>-KE)%X!e^OS+[C\\!KaO=!!1/GKE)$_5_K+<+WuF':6!?cuI!!+4pKE)$]fRs5*@E +aB)!Fa!$!!1_'KE)&*-A2@"YX4!C!K\jc!!+35KE)$\aFjNo@)R]u!FWct!!.tmKE)%lE.e2li +k0pE!K(9Gfm!!*kNKE)%2E.e2l +`Opj(!>]'r!!/!;KE)%lSqI(E(,1CA!K.qN!!*iPKE)#g%"nT](N>$-!K4UD!!*lqKE)%2SqI( +E(EA).!>iD%!!*n-KE)%t@"\L\k.$'E!V9WN!!/NRKE)%t0SBE,k+%))!Lb-a!!1=]KE)&8Ne@ +B5RLk,P!R2%+!!/MoKE)%t#(usWM-tu:!Q;L$!!2(cKE)%B@"\L\M(jS_!Q:L]!!+uCKE)#c+G +9^qc('Fe!Q:"O!!+u#KE)%B(k_kiM%#%;!B(LB!!*]!!1$pKE)$3@ +"\L\'/5(>!R9JS!!,#4KE)%BS:gkCM2m5h!B1jK!!*`AKE)$3%"nT]'=`\q!K#Zd!!,$gKE)#d +S:gkC2k5O$!>CKH!!*biKE)$3hLkk0h*?Vn!Ud1F!!2h!KE)&/+G9^qm[/Y-!V]?B!!1meKE)& +@N._03h$AZ6!Ub\q!!1mYKE)%@5_K+-@p!I"g&!!*Z5KE)#bY_2uWLtmX`!Ags5!!*\!KE)%/c@c/uGHc`#!Ag*r!!/M5 +KE)$sR"PG?]?Z'0!>1'>!!+m1KE)#bgk5Y.1YdW`!>3V1!!.+[P +!!.0/KE)&.:kSfLmOX"k!Sg5!!!2L7KE)&.7"bO@gd6Yo!LQ]:!!1:pKE)%_d"DB"Qq2l1!R)m +D!!0UNKE)&.AqU-b\AX%#!LQ3,!!0UHKE)#a:kSfLLb+2Z!AMlR!!*X%KE)%/-A2@"ER9@=!AM +TJ!!/I!KE)$maFjNo\E8GE!>%SN!!.)XKE)$,_LqmiEPdA/!ANkn!!.*+KE)$mk(E^8mM:HU!S +elP!!1:ZKE)%?,_Q-uQm.1`!>$Z4!!+ceKE)$lk_&p:&0cc-!AIu9!!.d]KE)#[5_K+ssP!!.H5KE)$5k(E^8Hfft]!UhFi!!2h[KE +)&A,_Q-umimDb!R<*H!!26uKE)&0BS6?dml#h!!T%@?!!1@hKE)&0@Y=^^N$s>Z!QGn.!!/U'K +E)%3,_Q-u]]b"K!M!\R!!/$&KE)%cjFdL6S77-O!PIEF!!*?RKE)%+(5)Yg(heR&!K8pi!!,(C +KE)#iA:sp`#U4p%!Im!!PEN-!!0`QKE)#i1kYi03-9fR!I46i!!.?8KE)#V5_K+<"X&Hu!J6\l!!* +67KE)#V#_W0Y"U'JY!.!!*3nKE)%)-A2@"*RKH>!=[&&!!*3jKE)#naFjNo%)df!!?>%-E3C!?Lp*@)!!2b#KE)&L\:ah_l9L"&!VJ."!!2qdKE)&<+G9^qob`>^!W%h0!!2?rKE +)&G%"nT]l3N%C!VHYM!!2?fKE)&=@"\L\osfYT!W(Z+!!1Y9KE)&=0SBE,opg[8!S/BH!!2C&K +E)&GNe@B5ee!K7!UC/I!!1XVKE)&=#(usWec^X+!S:_4!!2DqKE)&GhLkk0Y!@X?!S9#Y!!2DU +KE)%U+G9^qf,0/@!UGc!!!056KE)&)%"nT]XpB[\!S7O/!!05*KE)%V@"\L\f=6J6!UJTq!!-C +kKE)%V0SBE,f:7Ko!F?n%!!08?KE)&)Ne@B5?4_bi!Nuob!!-C3KE)%V#(usW?XSNe!O'"d!!1 +^.KE)$[0SBE,YFL7G!FH[s!!09`KE)$[%"nT]?atah!O(@5!!-GsKE)$[Ne@B5ks0n%!VEUL!! +2q$KE)&;+G9^qoU(:3!W#QE!!2l!!1OOKE)&%!e^OSVa,n8!Rn9+ +!!2?>KE)%N+G9^qe!Pdg!U7m_!!/u/KE)&%N._03V[.qU!RldV!!/u#KE)%N!e^OS:I'R5!N3/ +T!!1R(KE)$K+G9^qVjN,;!Ro>I!!,k,KE)%NN._03:C)UR!N1[*!!,juKE)$KY_2uWVqcq*!Df +)9!!0"CKE)$KN._03:PON&!DhL(!!,m@KE)&:TS*:GoN6bH!W"F%!!2;FKE)&F9S?>6cao\!MSY/!!,I*KE)$?_Lqmi6g +TI+!CQ"&!!2:3KE)&F(5)YgkTkf]!U(_\!!1G[KE)&:2M;&2ct%e0!RP;/!!/bVKE)&"G(]hrT +]Cb+!MJG*!!,CLKE)%Gp4NDH60*\!!C>^u!!29tKE)&:&qg5ccnpCU!RNTT!!/a7KE)%GEeFDn +jZnJ!!V3IJ!!2n#KE)&7+G9^qnsG(1!VoKD!!20mKE)&DN._03jTpM>!V1tu!!20aKE)&7!e^O +Sb+G9 ^qbF! q_ !Th U[!!/D tKE)%rN +._03QO&6E!R$4N! !/D hKE)% >!e^O S0 0k0 j!L L$D! +!19uKE)$++G9^qQ ^EF+! R& cA!!+ _aKE )% >N. _030* m42 !LJOo !!+_ +UKE)$+Y_2uWQe[5 o!ABg n!! /G3 KE)$ +N ._0 308>,[ !A E5]!!+ auK +E)&HTS*:GqcJLO! Gh1X! !2e TKE ) &M9 S]!VV >& !!2sdK E)$ +dr.G%Np4S)!!VV+ u!!2/ RKE )&D =G -Y Tq( @=# !UZP5! !2 /BKE)& MDM +.ujm>uu$!VX`j!! 2X[K E)& ?L kG a/j Fi0 d!U YPn! +!2/4KE)&?JqO+)a e4:e ! T_ md !!2 Y.K E)&- TS*:G +acM/U!T_IX!!1i9 KE)&?b _,r s jMl iQ !S`E `!! 12pKE)&-KS 0=+ab#0G!S` +3Z!!/:VKE)%pfRs 5*jR.[ $!O n _T!! /:FK E)% pb_,rs[uc7 C!SbhO!!13] +KE)%^LkGa/PD"Sh !Om`8! !/: 8KE) %^Jq O+) -_Q+m!L)/h !!140KE)$kT +S*:G-]iu]!L(`\! !.#"K E)%^ b_,rs PK&7 U!H 3dI!!+I#KE )$kKS0=+-\@ +!O!@QNQ!!/;OKE) $kfRs 5*-d7 5D!H6 28! !+IeKE)$k` e4aFjNop1AsX!URaX!!2.IKE)&>_LqmiaO#S?!T\'M!!1 +d"KE)%oaFjNojCX&F!SPPI!!2HKKE)&+`.S*kaMNT1!SP>C!!/5/KE)%om">?>Zd=@*!KkHV!! +11'KE)%ZaFjNog#dqf!OK^t!!/5!KE)%Z_Lqmi,LD)D!Kl`%!!-`ZKE)#taFjNoOlh;s!GBK,! +!0FgKE)$c`.S*k,Jo*6!GB9&!!+>2KE)$cm">?>,NaXZ!GCPJ!!2dAKE)&M(5)Yg@f1lZ!VRdl +!!-PXKE)&H,(opsj=#Z]!V."Z!!2G"KE)&H2M;&2lstbL!TYGX!!2FqKE)%oBS6?dj>MYk!SHU +h!!1/OKE)&*jFdL6aC9f&!SHCb!!/2FKE)%oG(]hrZ06i@!SI+!!!0@cKE)%7ie.:4Z/UE:!?p +Z[!!/2TKE)$_k_&p:+ln:V!Ft2D!!+8&KE)$_ie.:4+ngQh!FthV!!2d-KE)$]IY7\%p(E#Y!T +XrJ!!2FCKE)&6&qg5clnX4o!Q[*N!!1_oKE)%o15#W.fQ)WF!K_DV!!0=rKE)%7EeFDnYk!GI! +?h#f!!-O#KE)#qnq6uD@If'O!VQkR!!2-fKE)&>)MA(ka;T^3!SBGd!!/0BKE)%WH@u8!ih1r) +!V'9F!!2ktKE)&4OG!T7nP"T9!TJog!!2UZKE)&4KS0=+idug`!QC^b!!2*3KE)&CDM.uj`K5` +Q!TM=V!!1&pKE)&4`e4? +>S'Zfg!K"mN!!1%#KE)%BaFjNoc/sZZ!Lq#\!!.qnKE)%B_Lqmi'@;C4!K$/r!!,%*KE)#daFj +NoM<9Hk!B8)Q!!/SOKE)$3`.S*k'>fD&!B7lK!!*c"KE)$3m">?>'BXrJ!B9.o!!2tqKE)$qn: +UcB])73]!W/[G!!.3:KE)%aIY7\%qkA`D!H`^B!!.1*KE)&E."hR$q3H[6!AaS+!!2h-KE)&M[ +Y+V]G5R!n!A]+W!!2h)KE)&E,(opsG(,)E!V^&V!!2(-KE)&C(5)Ygk%KDJ!TGAX!!2NOKE)&I +G(]hriZa$U!Uf$%!!24kKE)&@ie.:4`+Xf(!TH"j!!1=-KE)%kA:sp`h<9Ll!R0VX!!1#IKE)& +/jFdL6bi49U!Suag!!.o>KE)%kG(]hrRHT;(!Jofi!!0^qKE)%@jFdL6LuO'f!P@EG!!/MIKE) + %bie.:4&a4lJ!JpH&!!+n>KE)#bjFdL6GNa\[!Aiei!!*\kKE)$sjFdL61ZF&f!I*OV!!*]*K +E)$/p4NDHqila6!HRsg!!0WZKE)&MP(Wf9EdWN?!HLAW!!2[*KE)$-IY7\%pG@O'!V6qW!!..i +KE)&I15#W.iY7%G!Tl4l!!2'lKE)&@FG'Vpjt_Si!Uau]!!1"pKE)%sFG'Vp`%luG!Sm=#!!1; +aKE)&.nq6uDLie:M!LWM4!!.mrKE)%`oRm2FR.>n1!P.cS!!*Z'KE)$-oRm2F&FtJS!H[md!!+ +hFKE)$onq6uDqhg%,!HEL?!!.('KE)&E$A8B[pDS\b!TFH>!!24#KE)&@3eRJ6`#=:/!R*TX!! +1l$KE)%/3eRJ6R!ODc!P%uZ!!*XWKE)$,qLehLEVb=g!H>c+!!2%TKE)&BXFpQSiCJV%!Uut>! +!2%HKE)&36A,=>_U*r9!T@jJ!!0sXKE)&3AqU-b_Sh*-!Q)^,!!.f#KE)%im">?>KueoI!Q*uP +!!.elKE)%,_Lqmi$daP,!JTln!!*JKKE)%,k(E^8$cI\u!=Qbt!!*JoKE)#\k(E^8nYh*@!Vk6 +!!!+#9KE)&CUkA^K)Ld>>!V)n;!!2%,KE)&BQ@o5=j(O)G!T>;W!!2+jKE)&3,(opsj'mZA!Q& +N'!!2%:KE)%mk_&p:_IS<"!QO2R!!0rGKE)%mie.:4K]n'h!Q'#5!!/)CKE)%+jFdL6NT>`m!J +KHc!!/)=KE)#Zk_&p:K_C'!!?:6U!!*DeKE)#ljFdL6$0$UKE)&KdY%T$3dcS\!BNDt!!2VSKE)#jIY7\%o+!!,01KE)&EZ@i2Yi=pqF +!TQ"i!!2$kKE)&9FG'Vpj"c8f!U"KV!!0qnKE)%mFG'Vp_D6cE!RC=j!!1)[KE)%unq6uDKQMk +I!K?Z(!!.anKE)%DoRm2FN:MW%!M/e7!!*AtKE)#joRm2F#kEWK!B]q,!!*u.KE)$7nq6uDHLQ +Rf!PNl6!!.CjKE)%d5(in:H9?i\!I>f?!!2o!!0e0KE)#YH@u8!)#Amc!BL"0!!.@iKE)%c^4ZIeGs$`[!I5`>!!,'nKE)$u^4ZIe +GeA\0!I12h!!.=NKE)&2W.Y-Oi1u#+!T9]*!!0oLKE)&2[Y+V]_.83!!Pr5u!!.]8KE)%hG(]h +rK&hRb!J9;!!0nmKE)%jFG'Vp_(pZD!Q/r2!!.[nKE)%-oRm2FJoZME!J^/u!!*5pKE)#^oR +m2F"S.3G!=eUQ!!2l[KE)#nI"VJ#*Bo,V!V"6b!!2WDKE)&2MM(s1iL5E"!TUbE!!0nSKE)%j3 +eRJ6a*NC=!J3@c!!.h#KE)%5qLehL"F>_$!=\gX!!+,:KE)$9G_?%tT"]jX!BiPu!!,5(KE)#m +^4ZIe4hcRL!I\p?!!0gHKE)%$3.q84^7KuX!IYr@!!.KXKE)$8]S$7cICt45!Bcs,!!.M>KE)% +#\:ah_^0ZHm!IUDj!!.J-KE)$8?A&:ZI,9MV!IS.*!!.IBKE)%#/qa3*^pJap!Pl!o!!.XmKE) + %(EeFDn!q_-G!_E(XI[Gcg!P_B_!!.P- +KE)%%L4fO-5$Wa@!IigW!!,8YKE)%%c@c/uITV7'!P^7?!!.OBKE)%%7YCaB4t_Kg!Iep>!!.O +"KE)%%-A2@"%pjnh!?YR"!!+0:KE)$;=G-YTT<p*@)!!0.YKE)&'pk/VJ;o"%d!NGRA!!1UIKE)$Mi.M(2W;)#G!RuRO!!,pcKE)%OI"VJ#:j +@Wn!W(/r!!-<^KE)%Tpk/VJqT+DG!!2EJKE)&)`.S*kf><1@!O'k'!!1^<&!TiNu!!2ZaKE)&7jFdL6jl1pn!R'\[!!23TKE)%rjFdL6bMn0T!LN#'!!1: +:KE)%>jFdL6Qfi!H*:L!!2fcKE)&DEeFDnDgm?>!VZ); +!!20QKE)&?oRm2FjRRs(!U]H2!!146KE)&-oRm2Famt)b!Sd0u!!/;UKE)%:nq6uDA\`s!!OD3 +J!!1c#KE)$`i.M(2Z?V$&!SKYi!!-VLKE)%Y4G3\8A2o5B!OqLehLaSLPi!SR=&!!/5YKE)$^i.M(2Z$:p%! +SG,>!!-PJKE)%X4G3\8@Q9#@!O3]!!!-OKKE)$^%YOf_+aAY?!Kb$K!!-SSKE)#r4G3\8@m#DE +!?iM;!!-RNKE)#r^4ZIeA%mTr!F]r#!!0=:KE)$]3.q84Yb$LJ!FZt$!!-L\S!>bH`!!/",KE)&JZ@i2Y(4 +:c8!>[kP!!2V3KE)#hIY7\%nT'9_!TNa)!!2*MKE)%loRm2F`U\Z^!K6T'!!/#KKE)$1^k;[gR +dbt1!R6"F!!+q7KE)%AG_?%tbs$d\!AnbK!!/NNKE)$03.q84RN@+^!AkdL!!+ndKE)#cn:UcB +M0ssV!B0G#!!*^WKE)%05(in:2L'lT!Ll9+!!+u?KE)#c*eXLo2BIMO!Vi+:!!*a\KE)&K\qC% +a2gg8Y!>@YM!!,#BKE)&C3eRJ6o6Q&i!TJEY!!26YKE)%kqLehLc2*(n!K$Z+!!0[hKE)&/G_? + %tm_4>S!Hc,1!!0ZMKE)&/4G3\8FC9b%!P17D!!1msKE)$p0SBE,\f?A'!H]03!!0Y@KE)$p% +"nT]1>mfc!L\1c!!1.GI!!.:gKE)$/4G3\8&KZT*!I$YZ!!+ksKE)$ +s*eXLo&\`nu!AhHC!!.;XKE)$n^k;[g\T!3%!Sk>@!!.+JKE)%`3.q84gn'0!!HKlI!!0VMKE) +$n(k_ki\IO8m!HJU%!!.*EKE)$-E.e2lR(S(P!HW45!!+f6KE)%?SqI(EF#\gQ!P+eT!!.-\KE +)$-%YOf_Et3j'!>)ns!!+geKE)#aSqI(EF1d/+!AU1!!!./4KE)$m@"\L\\@@1l!Sh"7!!.'nK +E)%_S:gkCE>X?/!P"/C!!.'JKE)$m#(usW0Xuc9!LR2H!!.)LKE)$,S:gkCEL_[^!AKOe!!.)" +KE)#a?A&:Z0]%H_!HHtL!!.&CKE)%_>_E(XE0u:Y!OtmX!!.%tKE)$lL4fO-0O082!H?hI!!+c +KKE)$lc@c/uE*.bn!Osb8!!.%4KE)$l7YCaB0J8"Y!H;q0!!.$iKE)$l-A2@"$Li]K!JPoS!!* +FOKE)%,5(in:$9WtA!=Bm$!!*ITKE)#\5(in:n@F8Q!TA?X!!0t5KE)%,qLehL)W68K!KD>W!! +1*RKE)#kE.e2lNBDjo!?*qN!!/'#KE)#k*/":m)@hE#!=="(!!.beKE)#lG_?%t#s'!!1r:KE)%!&;1#a]aTPo!I>$)!!0b;KE)%!"G?aU3FIL?!M +$ZQ!!1AOKE)%"@"\L\3A?*d!M#[5!!.F#KE)%dS:gkCS;r7&!IGZ:!!,(gKE)%"%"nT]3q>[!!.GVKE)$5S:gkC(lj7L!IL>i!!,*?KE)%"Ne@B5#[W/a +!>s[H!!,+:KE)%"hLkk0GsI#_!PGXi!!1q]KE)$u+G9^q]U4?P!T$S)!!.?VKE)%cN._03GmK' +'!PF/?!!.?JKE)$u!e^OS33\&9!M!DJ!!.ALKE)$4R"PG?S5+_;!I:&c!!0aXKE)$uN._033/3 +(d!I9EQ!!*pAKE)$4gk5Y.(f#_a!I_E(X4WoCX!M5[3!!1D@KE)$9& +;1#aSrA=&!Bg^A!!/[GKE)$9"G?aU4T^9:!?A=s!!/*bKE)$9Y_2uW*12BZ!KKp.!!,6MKE)%E +c@c/u4cG$o!??iI!!,6;KE)#]>_E(X*8H2I!=V_V!!,7!PX/=!!,3TKE)%E=G-YTcRskN!I^Vo!!,3DKE) + %E9S4A^\2!M1iq!!.JoKE)$88;$sDSgK*j!IVtA!!0f +GKE)%#`.S*k4@4]$!IVb;!!+&jKE)$8CkMch*%$==!IX6e!!,2oKE)%#k(E^8^*nX7!T+ZG!!0 +eZKE)%e,(ops4=Gj_!M1'[!!.I\KE)$8,_Q-uHt7m1!B_QZ!!.IVKE)#m(5)Yg4>qim!IT'D!! +0eJKE)%e&qg5c4;H!="R;! +!*.-KE)#WhLkk0%^:Td!Jap5!!*RsKE)%.:4rTJ%ZH&@!=jj;!!*:/KE)#_gk5Y.##9gO!=mD. +!!+.6KE)%6=G-YTa0('q!?R>U!!/-SKE)#oLkGa/O%+d&!?QoI!!+-mKE)#_=G-YTLG"5[!?Tm +H!!/-uKE)#ob_,rs%Ru*O!?T76!!*9VKE)#_DM.uj*q"[]!M<2A!!1EIKE)%F8;$sDc_c?q!M; +c5!!/]YKE)#o:kSfLO">qa!C"k`!!/^.KE)%6-A2@"50/BW!?OX^!!,:%KE)#o6A,=>5/MsQ!= +gZ6!!+-WKE)#_-A2@"54!q&!?Pj+!!,:GKE)&1W.Y-On(*-l!T0]+!!1uOKE)%F."hR$c^'4a! +P`<$!!/];KE)%fA:sp`T-Apg!P`)s!!+,hKE)%6(5)Yg5%oTL!?NM>!!.Q4KE)$:A:sp`*[67; +!Ij*_!!,8mKE)%%ie.:4%Mj]t!?O.P!!,9,KE)%%p4NDHhirco!T0&n!!/]+KE)%f1kYi0T+Ze +W!P^CC!!+,TKE)$:1kYi0*YO,+!If-D!!,8=KE)%%EeFDnhhm'e!M9^P!!0hQKE)#o$A8B[4rT +(S!Id(_!!*1,KE)#T:4rTJ#?ZWZ!J@P.!!*#:tN.!=s""!!*'KE)%*eq=#(#Gd"Q!=,?P!!*1fKE)#X[Y+ +V]LX^tW!Jf*V!!*=hKE)#`["JD[#Ej`?!=uJh!!1.*>p*F91G<6^FDkW&FE;dO@r-:/FCfK6P! +5%%P!5%%06WLBOu$Ou%N50628NA;Ch-P&,pdOo^@NOo^@NOo^@OOo^_% +I?IS`E+sQ<+ED[?A0>oUCm#*f1Pc$e!HNtsP,Wd]Bp(ZC1MMXIP%odQP!+.FCh%Z3BnukS;MZB +WCiY=4P,X6>P#@GDOu"b3@s9&0L]`fP%p-\Ou"b3@s9&0L]`f;N_'D1O +YEcBnukSC5;qS4aShu@s9&0L]`fN@r,_"ASd/)P +&-9^EejaZWJCY>C6AU\1OYEcE+sQ<+ED[?A0>TLCg2\rL]N;4L]N;4L]N;4L]N;3L]N;3L]N;3 +L]N;3L]E52Ch%Z3BnukSC1DI0DdmF&F*i=u8Rlsc+CcO.P&+Wk9RCK0"-RD/GB@b4BlnECI?I0 +MP"B/%D/`onFF/f EI=$! EG9CU U"-RD /G B@b 4BlnEC I?I0X!J +gc4!Jgc4!Jgc4!J g`3 !Jg`3 !/LW2 !J g`3 !Jg `3!/ +LZ(P#YeNH$tiH4? P9;AS s. SEb0- *@2D8ufF< GL@FD 5Z2 F!* Y 1+C oD. FC] E#GEQn u0 61WAD. .O, +Bm>e?Ou[rR%[&V$ E+EQ; 0fP 7TP %6 4g CG' +8/ p(ZFEd ;, :Ecc5; /n0 +$=E,Zq1AS,XoATD @'Df p)1 AW h2 !3A 5Gb FDt YuCM +@[!P.H"'F`V,9E+ *6lB l 7R 3P #M~> +% uk.co.terryburton.bwipp/pdf417 0.0 0 +%%EndData +%%EndResource % --END ENCODER pdf417-- % --BEGIN ENCODER micropdf417-- +% --REQUIRES preamble raiseerror renmatrix-- % --DESC: MicroPDF417 % --EXAM: MicroPDF417 % --EXOP: % --RNDR: renmatrix -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renmatrix dup /uk.co.terryburton.bwipp findresource put -begin -/micropdf417 { - - 20 dict begin - - /options exch def - /barcode exch def - - /dontdraw false def - /columns 0 def - /rows 0 def - /rowmult 2 def - /cca false def - /ccb false def - /raw false def - /parse false def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - /columns columns cvi def - /rows rows cvi def - /rowmult rowmult cvr def - - cca {/raw true def} if - - % Parse ordinals of the form ^NNN to ASCII - parse { - /msg barcode length string def - /j 0 def - barcode - { % loop - (^) search { - dup msg exch j exch putinterval - length j add 1 add /j exch def - pop - dup 0 3 getinterval cvi msg exch j 1 sub exch put - dup length 3 sub 3 exch getinterval - } { - dup msg exch j exch putinterval - length j add /j exch def - /barcode msg 0 j getinterval def - exit - } ifelse - } loop - } if - - % Convert input into array of codewords - raw { - /datcws barcode length array def - /i 0 def /j 0 def - { % loop - i barcode length eq {exit} if - /cw barcode i 1 add 3 getinterval cvi def - datcws j cw put - /i i 4 add def - /j j 1 add def - } loop - /datcws datcws 0 j getinterval def - } { % Simple autoencoder from input to codewords using byte mode - /barlen barcode length def - barlen 6 mod 0 eq { - /datcws barlen 6 idiv 5 mul 1 add array def - datcws 0 924 put - } { - /datcws barlen 6 idiv 5 mul barlen 6 mod add 1 add array def - datcws 0 901 put - } ifelse - - % Rebase groups of 6 bytes splitting into 3 byte chunks - 0 1 barlen 6 idiv 1 sub { - /i exch def - /msbs [ barcode i 6 mul 3 getinterval {} forall ] def - /mscs [ - msbs aload pop exch 256 mul add exch 65536 mul add - 3 {dup 900 mod exch 900 idiv} repeat - ] def - /lsbs [barcode i 6 mul 3 add 3 getinterval {} forall] def - /lscs [ - lsbs aload pop exch 256 mul add exch 65536 mul add - 3 {dup 900 mod exch 900 idiv} repeat - ] def - /cws 5 array def - lscs 0 get mscs 0 get 316 mul add - cws 4 2 index 900 mod put - 900 idiv lscs 1 get add mscs 0 get 641 mul add mscs 1 get 316 mul add - cws 3 2 index 900 mod put - 900 idiv lscs 2 get add mscs 0 get 20 mul add mscs 1 get 641 mul add mscs 2 get 316 mul add - cws 2 2 index 900 mod put - 900 idiv lscs 3 get add mscs 1 get 20 mul add mscs 2 get 641 mul add - cws 1 2 index 900 mod put - 900 idiv mscs 2 get 20 mul add - cws 0 3 -1 roll 900 mod put - datcws i 5 mul 1 add cws putinterval - } for - - % Add the remaining bytes to the end of the codewords - /rem barlen 6 mod def - rem 0 ne { - datcws datcws length rem sub - [ barcode barlen rem sub rem getinterval {} forall ] - putinterval - } if - - ccb {/datcws [920 datcws aload pop] def} if - - } ifelse - - % Basic metrics for the each symbol - % c r ecw rl rc rr - /metrics [ - [ 1 11 7 1 0 9 ] - [ 1 14 7 8 0 8 ] - [ 1 17 7 36 0 36 ] - [ 1 20 8 19 0 19 ] - [ 1 24 8 9 0 17 ] - [ 1 28 8 25 0 33 ] - [ 2 8 8 1 0 1 ] - [ 2 11 9 1 0 9 ] - [ 2 14 9 8 0 8 ] - [ 2 17 10 36 0 36 ] - [ 2 20 11 19 0 19 ] - [ 2 23 13 9 0 17 ] - [ 2 26 15 27 0 35 ] - [ 3 6 12 1 1 1 ] - [ 3 8 14 7 7 7 ] - [ 3 10 16 15 15 15 ] - [ 3 12 18 25 25 25 ] - [ 3 15 21 37 37 37 ] - [ 3 20 26 1 17 33 ] - [ 3 26 32 1 9 17 ] - [ 3 32 38 21 29 37 ] - [ 3 38 44 15 31 47 ] - [ 3 44 50 1 25 49 ] - [ 4 4 8 47 19 43 ] - [ 4 6 12 1 1 1 ] - [ 4 8 14 7 7 7 ] - [ 4 10 16 15 15 15 ] - [ 4 12 18 25 25 25 ] - [ 4 15 21 37 37 37 ] - [ 4 20 26 1 17 33 ] - [ 4 26 32 1 9 17 ] - [ 4 32 38 21 29 37 ] - [ 4 38 44 15 31 47 ] - [ 4 44 50 1 25 49 ] - ] def - - % Basic metrics for the each symbol - % c r ecw rl rc rr - /ccametrics [ - [ 2 5 4 39 0 19 ] - [ 2 6 4 1 0 33 ] - [ 2 7 5 32 0 12 ] - [ 2 8 5 8 0 40 ] - [ 2 9 6 14 0 46 ] - [ 2 10 6 43 0 23 ] - [ 2 12 7 20 0 52 ] - [ 3 4 4 11 43 23 ] - [ 3 5 5 1 33 13 ] - [ 3 6 6 5 37 17 ] - [ 3 7 7 15 47 27 ] - [ 3 8 7 21 1 33 ] - [ 4 3 4 40 20 52 ] - [ 4 4 5 43 23 3 ] - [ 4 5 6 46 26 6 ] - [ 4 6 7 34 14 46 ] - [ 4 7 8 29 9 41 ] - ] def - cca {/metrics ccametrics def} if - - % Select metrics of an appropriate symbol - /urows rows def - /ucols columns def - /i 0 def - { % loop - /m metrics i get def - /c m 0 get def % Columns in symbol - /r m 1 get def % Rows in symbol - /k m 2 get def % Error correction codewords - /rapl m 3 get def % Left row address pattern - /rapc m 4 get def % Centre row address pattern - /rapr m 5 get def % Right row address pattern - /ncws r c mul k sub def % Data codewords - /okay true def - datcws length ncws gt {/okay false def} if - urows 0 ne urows r ne and {/okay false def} if - ucols 0 ne ucols c ne and {/okay false def} if - okay {exit} if - /i i 1 add def - } loop - /m datcws length def - - % Create codewords array with one extra working space element and add padding - /n c r mul k sub def - /cws c r mul 1 add array def - cws 0 datcws putinterval - cws m [ n m sub {900} repeat ] putinterval - cws n [ k {0} repeat 0 ] putinterval - - % Calculate the log and anti-log tables - /rsalog [ 1 928 {dup 3 mul 929 mod} repeat ] def - /rslog 929 array def - 1 1 928 {dup rsalog exch get exch rslog 3 1 roll put} for - - % Function to calculate the product in the field - /rsprod { - 2 copy 0 ne exch 0 ne and { - rslog exch get exch rslog exch get add 928 mod rsalog exch get - } { - pop pop 0 - } ifelse - } bind def - - % Generate the coefficients - /coeffs [ 1 k {0} repeat ] def - 1 1 k { - /i exch def - coeffs i coeffs i 1 sub get put - i 1 sub -1 1 { - /j exch def - coeffs j coeffs j 1 sub get coeffs j get rsalog i get rsprod add 929 mod put - } for - coeffs 0 coeffs 0 get rsalog i get rsprod put - } for - /coeffs coeffs 0 coeffs length 1 sub getinterval def - coeffs length 1 sub -2 0 {coeffs exch 2 copy get 929 exch sub put} for - - % Derive the error codewords - 0 1 n 1 sub { - /t exch cws exch get cws n get add 929 mod def - 0 1 k 1 sub { - /j exch def - cws n j add cws n j add 1 add get 929 t coeffs k j sub 1 sub get mul 929 mod sub add 929 mod put - } for - } for - n 1 n k add { dup cws exch 929 cws 5 -1 roll get sub 929 mod put } for - - % Trim the working space from the end of the codewords - /cws cws 0 cws length 1 sub getinterval def - - % Base 10 encoding of the bar space successions for the codewords in each cluster - /clusters [ - [ - 120256 125680 128380 120032 125560 128318 108736 119920 108640 86080 108592 86048 - 110016 120560 125820 109792 120440 125758 88256 109680 88160 89536 110320 120700 - 89312 110200 120638 89200 110140 89840 110460 89720 110398 89980 128506 119520 - 125304 128190 107712 119408 125244 107616 119352 84032 107568 119324 84000 107544 - 83984 108256 119672 125374 85184 108144 119612 85088 108088 119582 85040 108060 - 85728 108408 119742 85616 108348 85560 108318 85880 108478 85820 85790 107200 - 119152 125116 107104 119096 125086 83008 107056 119068 82976 107032 82960 82952 - 83648 107376 119228 83552 107320 119198 83504 107292 83480 83468 83824 107452 - 83768 107422 83740 83900 106848 118968 125022 82496 106800 118940 82464 106776 - 118926 82448 106764 82440 106758 82784 106936 119006 82736 106908 82712 106894 - 82700 82694 106974 82830 82240 106672 118876 82208 106648 118862 82192 106636 - 82184 106630 82180 82352 82328 82316 82080 118830 106572 106566 82050 117472 - 124280 127678 103616 117360 124220 103520 117304 124190 75840 103472 75808 104160 - 117624 124350 76992 104048 117564 76896 103992 76848 76824 77536 104312 117694 - 77424 104252 77368 77340 77688 104382 77628 77758 121536 126320 128700 121440 - 126264 128670 111680 121392 126236 111648 121368 126222 111632 121356 103104 117104 - 124092 112320 103008 117048 124062 112224 121656 126366 93248 74784 102936 117006 - 93216 112152 93200 75456 103280 117180 93888 75360 103224 117150 93792 112440 - 121758 93744 75288 93720 75632 103356 94064 75576 103326 94008 112542 93980 - 75708 94140 75678 94110 121184 126136 128606 111168 121136 126108 111136 121112 - 126094 111120 121100 111112 111108 102752 116920 123998 111456 102704 116892 91712 - 74272 121244 116878 91680 74256 102668 91664 111372 102662 74244 74592 102840 - 116958 92000 74544 102812 91952 111516 102798 91928 74508 74502 74680 102878 - 92088 74652 92060 74638 92046 92126 110912 121008 126044 110880 120984 126030 - 110864 120972 110856 120966 110852 110850 74048 102576 116828 90944 74016 102552 - 116814 90912 111000 121038 90896 73992 102534 90888 110982 90884 74160 102620 - 91056 74136 102606 91032 111054 91020 74118 91014 91100 91086 110752 120920 - 125998 110736 120908 110728 120902 110724 110722 73888 102488 116782 90528 73872 - 102476 90512 110796 102470 90504 73860 90500 73858 73944 90584 90572 90566 - 120876 120870 110658 102444 73800 90312 90308 90306 101056 116080 123580 100960 - 116024 70720 100912 115996 70688 100888 70672 70664 71360 101232 116156 71264 - 101176 116126 71216 101148 71192 71180 71536 101308 71480 101278 71452 71612 - 71582 118112 124600 127838 105024 118064 124572 104992 118040 124558 104976 118028 - 104968 118022 100704 115896 123486 105312 100656 115868 79424 70176 118172 115854 - 79392 105240 100620 79376 70152 79368 70496 100792 115934 79712 70448 118238 - 79664 105372 100750 79640 70412 79628 70584 100830 79800 70556 79772 70542 - 70622 79838 122176 126640 128860 122144 126616 128846 122128 126604 122120 126598 - 122116 104768 117936 124508 113472 104736 126684 124494 113440 122264 126670 113424 - 104712 117894 113416 122246 104706 69952 100528 115804 78656 69920 100504 115790 - 96064 78624 104856 117966 96032 113560 122318 100486 96016 78600 104838 96008 - 69890 70064 100572 78768 70040 100558 96176 78744 104910 96152 113614 70022 - 78726 70108 78812 70094 96220 78798 122016 126552 128814 122000 126540 121992 - 126534 121988 121986 104608 117848 124462 113056 104592 126574 113040 122060 117830 - 113032 104580 113028 104578 113026 69792 100440 115758 78240 69776 100428 95136 - 78224 104652 100422 95120 113100 69764 95112 78212 69762 78210 69848 100462 - 78296 69836 95192 78284 69830 95180 78278 69870 95214 121936 126508 121928 - 126502 121924 121922 104528 117804 112848 104520 117798 112840 121958 112836 104514 - 112834 69712 100396 78032 69704 100390 94672 78024 104550 94664 112870 69698 - 94660 78018 94658 78060 94700 94694 126486 121890 117782 104484 104482 69672 - 77928 94440 69666 77922 99680 68160 99632 68128 99608 115342 68112 99596 - 68104 99590 68448 99768 115422 68400 99740 68376 99726 68364 68358 68536 - 99806 68508 68494 68574 101696 116400 123740 101664 116376 101648 116364 101640 - 116358 101636 67904 99504 115292 72512 67872 116444 115278 72480 101784 116430 - 72464 67848 99462 72456 101766 67842 68016 99548 72624 67992 99534 72600 - 101838 72588 67974 68060 72668 68046 72654 118432 124760 127918 118416 124748 - 118408 124742 118404 118402 101536 116312 105888 101520 116300 105872 118476 116294 - 105864 101508 105860 101506 105858 67744 99416 72096 67728 116334 80800 72080 - 101580 99398 80784 105932 67716 80776 72068 67714 72066 67800 99438 72152 - 67788 80856 72140 67782 80844 72134 67822 72174 80878 126800 128940 126792 - 128934 126788 126786 118352 124716 122576 126828 124710 122568 126822 122564 118338 - 122562 101456 116268 105680 101448 116262 114128 105672 118374 114120 122598 101442 - 114116 105666 114114 67664 99372 71888 67656 99366 80336 71880 101478 97232 - 80328 105702 67650 97224 114150 71874 97220 67692 71916 67686 80364 71910 - 97260 80358 97254 126760 128918 126756 126754 118312 124694 122472 126774 122468 - 118306 122466 101416 116246 105576 101412 113896 105572 101410 113892 105570 113890 - 67624 99350 71784 101430 80104 71780 67618 96744 80100 71778 96740 80098 - 96738 71798 96758 126738 122420 122418 105524 113780 113778 71732 79988 96500 - 96498 66880 66848 98968 66832 66824 66820 66992 66968 66956 66950 67036 - 67022 100000 99984 115532 99976 115526 99972 99970 66720 98904 69024 100056 - 98892 69008 100044 69000 100038 68996 66690 68994 66776 98926 69080 100078 - 69068 66758 69062 66798 69102 116560 116552 116548 116546 99920 102096 116588 - 115494 102088 116582 102084 99906 102082 66640 68816 66632 98854 73168 68808 - 66628 73160 68804 66626 73156 68802 66668 68844 66662 73196 68838 73190 - 124840 124836 124834 116520 118632 124854 118628 116514 118626 99880 115478 101992 - 116534 106216 101988 99874 106212 101986 106210 66600 98838 68712 99894 72936 - 68708 66594 81384 72932 68706 81380 72930 66614 68726 72950 81398 128980 - 128978 124820 126900 124818 126898 116500 118580 116498 122740 118578 122738 99860 - 101940 99858 106100 101938 114420 - ] [ - 128352 129720 125504 128304 129692 125472 128280 129678 125456 128268 125448 128262 - 125444 125792 128440 129758 120384 125744 128412 120352 125720 128398 120336 125708 - 120328 125702 120324 120672 125880 128478 110144 120624 125852 110112 120600 125838 - 110096 120588 110088 120582 110084 110432 120760 125918 89664 110384 120732 89632 - 110360 120718 89616 110348 89608 110342 89952 110520 120798 89904 110492 89880 - 110478 89868 90040 110558 90012 89998 125248 128176 129628 125216 128152 129614 - 125200 128140 125192 128134 125188 125186 119616 125360 128220 119584 125336 128206 - 119568 125324 119560 125318 119556 119554 108352 119728 125404 108320 119704 125390 - 108304 119692 108296 119686 108292 108290 85824 108464 119772 85792 108440 119758 - 85776 108428 85768 108422 85764 85936 108508 85912 108494 85900 85894 85980 - 85966 125088 128088 129582 125072 128076 125064 128070 125060 125058 119200 125144 - 128110 119184 125132 119176 125126 119172 119170 107424 119256 125166 107408 119244 - 107400 119238 107396 107394 83872 107480 119278 83856 107468 83848 107462 83844 - 83842 83928 107502 83916 83910 83950 125008 128044 125000 128038 124996 124994 - 118992 125036 118984 125030 118980 118978 106960 119020 106952 119014 106948 106946 - 82896 106988 82888 106982 82884 82882 82924 82918 124968 128022 124964 124962 - 118888 124982 118884 118882 106728 118902 106724 106722 82408 106742 82404 82402 - 124948 124946 118836 118834 106612 106610 124224 127664 129372 124192 127640 129358 - 124176 127628 124168 127622 124164 124162 117568 124336 127708 117536 124312 127694 - 117520 124300 117512 124294 117508 117506 104256 117680 124380 104224 117656 124366 - 104208 117644 104200 117638 104196 104194 77632 104368 117724 77600 104344 117710 - 77584 104332 77576 104326 77572 77744 104412 77720 104398 77708 77702 77788 - 77774 128672 129880 93168 128656 129868 92664 128648 129862 92412 128644 128642 - 124064 127576 129326 126368 124048 129902 126352 128716 127558 126344 124036 126340 - 124034 126338 117152 124120 127598 121760 117136 124108 121744 126412 124102 121736 - 117124 121732 117122 121730 103328 117208 124142 112544 103312 117196 112528 121804 - 117190 112520 103300 112516 103298 112514 75680 103384 117230 94112 75664 103372 - 94096 112588 103366 94088 75652 94084 75650 75736 103406 94168 75724 94156 - 75718 94150 75758 128592 129836 91640 128584 129830 91388 128580 91262 128578 - 123984 127532 126160 123976 127526 126152 128614 126148 123970 126146 116944 124012 - 121296 116936 124006 121288 126182 121284 116930 121282 102864 116972 111568 102856 - 116966 111560 121318 111556 102850 111554 74704 102892 92112 74696 102886 92104 - 111590 92100 74690 92098 74732 92140 74726 92134 128552 129814 90876 128548 - 90750 128546 123944 127510 126056 128566 126052 123938 126050 116840 123958 121064 - 116836 121060 116834 121058 102632 116854 111080 121078 111076 102626 111074 74216 - 102646 91112 74212 91108 74210 91106 74230 91126 128532 90494 128530 123924 - 126004 123922 126002 116788 120948 116786 120946 102516 110836 102514 110834 73972 - 90612 73970 90610 128522 123914 125978 116762 120890 102458 110714 123552 127320 - 129198 123536 127308 123528 127302 123524 123522 116128 123608 127342 116112 123596 - 116104 123590 116100 116098 101280 116184 123630 101264 116172 101256 116166 101252 - 101250 71584 101336 116206 71568 101324 71560 101318 71556 71554 71640 101358 - 71628 71622 71662 127824 129452 79352 127816 129446 79100 127812 78974 127810 - 123472 127276 124624 123464 127270 124616 127846 124612 123458 124610 115920 123500 - 118224 115912 123494 118216 124646 118212 115906 118210 100816 115948 105424 100808 - 115942 105416 118246 105412 100802 105410 70608 100844 79824 70600 100838 79816 - 105446 79812 70594 79810 70636 79852 70630 79846 129960 95728 113404 129956 - 95480 113278 129954 95356 95294 127784 129430 78588 128872 129974 95996 78462 - 128868 127778 95870 128866 123432 127254 124520 123428 126696 128886 123426 126692 - 124514 126690 115816 123446 117992 115812 122344 117988 115810 122340 117986 122338 - 100584 115830 104936 100580 113640 104932 100578 113636 104930 113634 70120 100598 - 78824 70116 96232 78820 70114 96228 78818 96226 70134 78838 129940 94968 - 113022 129938 94844 94782 127764 78206 128820 127762 95102 128818 123412 124468 - 123410 126580 124466 126578 115764 117876 115762 122100 117874 122098 100468 104692 - 100466 113140 104690 113138 69876 78324 69874 95220 78322 95218 129930 94588 - 94526 127754 128794 123402 124442 126522 115738 117818 121978 100410 104570 112890 - 69754 78074 94714 94398 123216 127148 123208 127142 123204 123202 115408 123244 - 115400 123238 115396 115394 99792 115436 99784 115430 99780 99778 68560 99820 - 68552 99814 68548 68546 68588 68582 127400 129238 72444 127396 72318 127394 - 123176 127126 123752 123172 123748 123170 123746 115304 123190 116456 115300 116452 - 115298 116450 99560 115318 101864 99556 101860 99554 101858 68072 99574 72680 - 68068 72676 68066 72674 68086 72694 129492 80632 105854 129490 80508 80446 - 127380 72062 127924 127378 80766 127922 123156 123700 123154 124788 123698 124786 - 115252 116340 115250 118516 116338 118514 99444 101620 99442 105972 101618 105970 - 67828 72180 67826 80884 72178 80882 97008 114044 96888 113982 96828 96798 - 129482 80252 130010 97148 80190 97086 127370 127898 128954 123146 123674 124730 - 126842 115226 116282 118394 122618 99386 101498 105722 114170 67706 71930 80378 - 96632 113854 96572 96542 80062 96702 96444 96414 96350 123048 123044 123042 - 115048 123062 115044 115042 99048 115062 99044 99042 67048 99062 67044 67042 - 67062 127188 68990 127186 123028 123316 123026 123314 114996 115572 114994 115570 - 98932 100084 98930 100082 66804 69108 66802 69106 129258 73084 73022 127178 - 127450 123018 123290 123834 114970 115514 116602 98874 99962 102138 66682 68858 - 73210 81272 106174 81212 81182 72894 81342 97648 114364 97592 114334 97564 - 97550 81084 97724 81054 97694 97464 114270 97436 97422 80990 97502 97372 - 97358 97326 114868 114866 98676 98674 66292 66290 123098 114842 115130 98618 - 99194 66170 67322 69310 73404 73374 81592 106334 81564 81550 73310 81630 - 97968 114524 97944 114510 97932 97926 81500 98012 81486 97998 97880 114478 - 97868 97862 81454 97902 97836 97830 69470 73564 73550 81752 106414 81740 - 81734 73518 81774 81708 81702 - ] [ - 109536 120312 86976 109040 120060 86496 108792 119934 86256 108668 86136 129744 - 89056 110072 129736 88560 109820 129732 88312 109694 129730 88188 128464 129772 - 89592 128456 129766 89340 128452 89214 128450 125904 128492 125896 128486 125892 - 125890 120784 125932 120776 125926 120772 120770 110544 120812 110536 120806 110532 - 84928 108016 119548 84448 107768 119422 84208 107644 84088 107582 84028 129640 - 85488 108284 129636 85240 108158 129634 85116 85054 128232 129654 85756 128228 - 85630 128226 125416 128246 125412 125410 119784 125430 119780 119778 108520 119798 - 108516 108514 83424 107256 119166 83184 107132 83064 107070 83004 82974 129588 - 83704 107390 129586 83580 83518 128116 83838 128114 125172 125170 119284 119282 - 107508 107506 82672 106876 82552 106814 82492 82462 129562 82812 82750 128058 - 125050 119034 82296 106686 82236 82206 82366 82108 82078 76736 103920 117500 - 76256 103672 117374 76016 103548 75896 103486 75836 129384 77296 104188 129380 - 77048 104062 129378 76924 76862 127720 129398 77564 127716 77438 127714 124392 - 127734 124388 124386 117736 124406 117732 117730 104424 117750 104420 104418 112096 - 121592 126334 92608 111856 121468 92384 111736 121406 92272 111676 92216 111646 - 92188 75232 103160 117118 93664 74992 103036 93424 112252 102974 93304 74812 - 93244 74782 93214 129332 75512 103294 129908 129330 93944 75388 129906 93820 - 75326 93758 127604 75646 128756 127602 94078 128754 124148 126452 124146 126450 - 117236 121844 117234 121842 103412 103410 91584 111344 121212 91360 111224 121150 - 91248 111164 91192 111134 91164 91150 74480 102780 91888 74360 102718 91768 - 111422 91708 74270 91678 129306 74620 129850 92028 74558 91966 127546 128634 - 124026 126202 116986 121338 102906 90848 110968 121022 90736 110908 90680 110878 - 90652 90638 74104 102590 91000 74044 90940 74014 90910 74174 91070 90480 - 110780 90424 110750 90396 90382 73916 90556 73886 90526 90296 110686 90268 - 90254 73822 90334 90204 90190 71136 101112 116094 70896 100988 70776 100926 - 70716 70686 129204 71416 101246 129202 71292 71230 127348 71550 127346 123636 - 123634 116212 116210 101364 101362 79296 105200 118140 79072 105080 118078 78960 - 105020 78904 104990 78876 78862 70384 100732 79600 70264 100670 79480 105278 - 79420 70174 79390 129178 70524 129466 79740 70462 79678 127290 127866 123514 - 124666 115962 118266 100858 113376 122232 126654 95424 113264 122172 95328 113208 - 122142 95280 113180 95256 113166 95244 78560 104824 117950 95968 78448 104764 - 95856 113468 104734 95800 78364 95772 78350 95758 70008 100542 78712 69948 - 96120 78652 69918 96060 78622 96030 70078 78782 96190 94912 113008 122044 - 94816 112952 122014 94768 112924 94744 112910 94732 94726 78192 104636 95088 - 78136 104606 95032 113054 95004 78094 94990 69820 78268 69790 95164 78238 - 95134 94560 112824 121950 94512 112796 94488 112782 94476 94470 78008 104542 - 94648 77980 94620 77966 94606 69726 78046 94686 94384 112732 94360 112718 - 94348 94342 77916 94428 77902 94414 94296 112686 94284 94278 77870 94318 - 94252 94246 68336 99708 68216 99646 68156 68126 68476 68414 127162 123258 - 115450 99834 72416 101752 116414 72304 101692 72248 101662 72220 72206 67960 - 99518 72568 67900 72508 67870 72478 68030 72638 80576 105840 118460 80480 - 105784 118430 80432 105756 80408 105742 80396 80390 72048 101564 80752 71992 - 101534 80696 71964 80668 71950 80654 67772 72124 67742 80828 72094 80798 - 114016 122552 126814 96832 113968 122524 96800 113944 122510 96784 113932 96776 - 113926 96772 80224 105656 118366 97120 80176 105628 97072 114076 105614 97048 - 80140 97036 80134 97030 71864 101470 80312 71836 97208 80284 71822 97180 - 80270 97166 67678 71902 80350 97246 96576 113840 122460 96544 113816 122446 - 96528 113804 96520 113798 96516 96514 80048 105564 96688 80024 105550 96664 - 113870 96652 80006 96646 71772 80092 71758 96732 80078 96718 96416 113752 - 122414 96400 113740 96392 113734 96388 96386 79960 105518 96472 79948 96460 - 79942 96454 71726 79982 96494 96336 113708 96328 113702 96324 96322 79916 - 96364 79910 96358 96296 113686 96292 96290 79894 96310 66936 99006 66876 - 66846 67006 68976 100028 68920 99998 68892 68878 66748 69052 66718 69022 - 73056 102072 116574 73008 102044 72984 102030 72972 72966 68792 99934 73144 - 68764 73116 68750 73102 66654 68830 73182 81216 106160 118620 81184 106136 - 118606 81168 106124 81160 106118 81156 81154 72880 101980 81328 72856 101966 - 81304 106190 81292 72838 81286 68700 72924 68686 81372 72910 81358 114336 - 122712 126894 114320 122700 114312 122694 114308 114306 81056 106072 118574 97696 - 81040 106060 97680 114380 106054 97672 81028 97668 81026 97666 72792 101934 - 81112 72780 97752 81100 72774 97740 81094 97734 68654 72814 81134 97774 - 114256 122668 114248 122662 114244 114242 80976 106028 97488 80968 106022 97480 - 114278 97476 80962 97474 72748 81004 72742 97516 80998 97510 114216 122646 - 114212 114210 80936 106006 97384 80932 97380 80930 97378 72726 80950 97398 - 114196 114194 80916 97332 80914 97330 66236 66206 67256 99166 67228 67214 - 66142 67294 69296 100188 69272 100174 69260 69254 67164 69340 67150 69326 - 73376 102232 116654 73360 102220 73352 102214 73348 73346 69208 100142 73432 - 102254 73420 69190 73414 67118 69230 73454 106320 118700 106312 118694 106308 - 106306 73296 102188 81616 106348 102182 81608 73284 81604 73282 81602 69164 - 73324 69158 81644 73318 81638 122792 126934 122788 122786 106280 118678 114536 - 106276 114532 106274 114530 73256 102166 81512 73252 98024 81508 73250 98020 - 81506 98018 69142 73270 81526 98038 122772 122770 106260 114484 106258 114482 - 73236 81460 73234 97908 81458 97906 122762 106250 114458 73226 81434 97850 - 66396 66382 67416 99246 67404 67398 66350 67438 69456 100268 69448 100262 - 69444 69442 67372 69484 67366 69478 102312 116694 102308 102306 69416 100246 - 73576 102326 73572 69410 73570 67350 69430 73590 118740 118738 102292 106420 - 102290 106418 69396 73524 69394 81780 73522 81778 118730 102282 106394 69386 - 73498 81722 66476 66470 67496 99286 67492 67490 66454 67510 100308 100306 - 67476 69556 67474 69554 116714 - ] - ] def - - % Row address patterns - /raps [ - [ % Left and right - 802 930 946 818 882 890 826 954 922 986 970 906 778 - 794 786 914 978 982 980 916 948 932 934 942 940 936 - 808 812 814 806 822 950 918 790 788 820 884 868 870 - 878 876 872 840 856 860 862 846 844 836 838 834 866 - ] [ % Centre - 718 590 622 558 550 566 534 530 538 570 562 546 610 - 626 634 762 754 758 630 628 612 614 582 578 706 738 - 742 740 748 620 556 552 616 744 712 716 708 710 646 - 654 652 668 664 696 688 656 720 592 600 604 732 734 - ] - ] def - - % Return the 17 bits for a codeword in a given cluster - /cwtobits { - clusters exch get exch get /v exch def - [ 17 {0} repeat v 2 17 string cvrs {48 sub} forall ] - dup length 17 sub 17 getinterval - } bind def - - % Return the 10 bits for a row address pattern - /raptobits { - raps exch get exch get /v exch def - [ 10 {0} repeat v 2 10 string cvrs {48 sub} forall ] - dup length 10 sub 10 getinterval - } bind def - - % Populate bitmap for the image - /rwid [38 55 82 99] c 1 sub get def - c 3 eq cca and {/rwid 72 def} if - /pixs rwid r mul array def - - 0 1 r 1 sub { - /i exch def - /clst i rapl add 1 sub 3 mod def - pixs rwid i mul [ - c 1 eq { - i rapl add 1 sub 52 mod 0 raptobits aload pop - cws i get clst cwtobits aload pop - i rapr add 1 sub 52 mod 0 raptobits aload pop - } if - c 2 eq { - i rapl add 1 sub 52 mod 0 raptobits aload pop - cws i 2 mul get clst cwtobits aload pop - cws i 2 mul 1 add get clst cwtobits aload pop - i rapr add 1 sub 52 mod 0 raptobits aload pop - } if - c 3 eq { - cca not { - i rapl add 1 sub 52 mod 0 raptobits aload pop - } if - cws i 3 mul get clst cwtobits aload pop - i rapc add 1 sub 52 mod 1 raptobits aload pop - cws i 3 mul 1 add get clst cwtobits aload pop - cws i 3 mul 2 add get clst cwtobits aload pop - i rapr add 1 sub 52 mod 0 raptobits aload pop - } if - c 4 eq { - i rapl add 1 sub 52 mod 0 raptobits aload pop - cws i 4 mul get clst cwtobits aload pop - cws i 4 mul 1 add get clst cwtobits aload pop - i rapc add 1 sub 52 mod 1 raptobits aload pop - cws i 4 mul 2 add get clst cwtobits aload pop - cws i 4 mul 3 add get clst cwtobits aload pop - i rapr add 1 sub 52 mod 0 raptobits aload pop - } if - 1 - ] putinterval - } for - - % Return the arguments - << - /ren //renmatrix - /pixs pixs - /pixx rwid - /pixy r - /height r 72 div rowmult mul - /width rwid 72 div - /opt options - >> - - dontdraw not //renmatrix if - - end - -} bind def -/micropdf417 dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp micropdf417 0.0 0 0 0 +%%BeginData: 333 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\X4aVtcOu8C3D fBf4Df 0WC P ,i2 'C ia0N 4aW >WI?IQm30I a6V33Qn!BlU +*FE2M8P!+/T/Wr; \FcnqO 1OX V 5/Tc #UAW eit P#ZpnAWe*t 3A5;iFD5Z2F +-8_M1OYEcDfBf4D f0WCOu %NL 8M=R lCis T4F !+t2CisT4F -8);1G 4@UX: eDe*F B@ZmR N1G O o[4NP !5$ bP')pIL]E5 5P"_#iD0'?Q +5&,lSP,XU.P'E-LP%'4LP,X6>P!5%&I=%,:D0'?Q5&-6EP'N4"C6ATNC6CcD1G<3GEas#uAKYi +2B8?P&P"_#pP!FGYOu%NLAM7S&FCTN9+Cno&@sOpR:-A79RiGB8Q?L'*s/ +G^XolA79RiGB4m9@<-0qDMSL[;MYL>CgpgnCh7L?#*N_a!Jgc>!KmbP1Lsp9@s9IB`Eas#uAKY]C#*NeY"-Q?)I?I0-Ou" +b.F(986>9Id(@WR\6P')pOL&h:;Cm"g^5(in:!!&0uOo^@@H]g@C",)hPP!4U&KT]5]P(R&'1G +!GumfF,0gZ98F:FCm"g9F(9 +9I!Kp*1!eHMNOo]E@@rmG-P"UN14HaND!Fp=pL]WA6P$!G@KT^)5G_QD<6IA79RiGB8oKP'(&n1OYEcI?IS`D.Rg0Bk)3,>9I.+!Jh +,>#D`D:!/Lqe+BsX&L^o4GL^8e:L^79/>DN<9&Vp[J,_uGV,[DNsL]N;GL^8eML]E5E>p*@-!J +hSK#`&eC!/M4m+BsX&L`D3VL`)!KL`p%H>DN?:#`&bB!Jg`3!F6gPL]WA?L^Akp*@-! +f.>B$&AkC!/Lnd+BsX'L_5FMLa7cVLa67K>DN?:'Sm-Q'8QXE'3u_bL]WAKL^f.HL]E5C>p*@- +!f.bN%u;0\!/Mk*+BsX(L^&YDL]N;4L]Ld(>DNB;#`&tH#D`V@#@/HVL]`G?L_,@QL_#:P>p*@ +-",IAA&r7E])2K/9+BsX(L_#:VLa@j'La?=L>DNB;'SmZ`!Jh>D+^H3pL]`GOL`hKSL^AkL>p* +@-",J(U-AWCm*Jc"I+BsX(LaIp/L_#:`LbE$V>DNB;/;Q';!JhVL0jPo+L]iM:L^8eiL_GRp>p +*@-"Gd8<%#=q?!Jgb^+BsX)L^8eHL^/_@L^.3.>DNE<$A]7L%u:aP%p^;^L]iMBL_>L]L`)!d> +p*@-"GdSE'o4/l-&DNE<)MfMl!Jh&<&R?M`L]iMVLaIomL`M9t +>p*@-"GeC\/;Ogm+,DRU+BsX)Lb+?;L]N;LLbW0X?'6us@q/qaATVs,@ribs+BsX'L]rS;LaRu +YL_F&:>DN?:#)ED>p*@-!f.,<"c*G?!/N%/+BsX'L^AkAL^o +4@Lb;sU>DN?:$A\nB.u41](L8.fL]WA@L^/_ML]E5f>p*@-",I)9"GdGA.u5!I+BsX(L]rSDNB;#)EJ>"c+I\&R?M`L]`Gp*@-",I5=#Da+N!Jhn)+BsX)L]`G9L +a\&nLbrB[>DNE<"Gd5;.u5!t"'m$RL]iM;L^&YfL`2'R>p*@-"Gd8<#DaR[%Yu`C+BsX)L^/_A +L`M9XLacUP?'7!R@ps^;D.Rg0Bk)3,@q/qaATVs,@rmehI?IP_F`MDEF!,LAGB8p'06LcCCi^_ +/DesQ5DKCss0564BOu%G1G$K05kW7Gp$^-Cia0N1OYEcF^o?+F,0gZD09?,Ci^_/P&6?bHS9;Q@I?IP_Bcq,G!KmJH1OYEt05VhB@OpR:-@s+Di6*+Dr<=P,We_",))cK3aXc@s;u:DBN.+CO:j;I?K5=!*t +b5062,BCiDN<7"/("(3/@["Ck`%cP%oE.K3aWr062,MDeFe,Too_F1Pc'f!JU]LH]g@/F( +&m'B9GHA99MJZF)5c-L]`G6P)#3FI?I,SEcZ2?De+3N!g4FW!0V2^5)93%D3>$KEcZ&8B9GHA9 +9MJZF)5c-P!5%%Oo^:>TTX&1F(&m'B9GHA97;/MFcpm'!.C#1I?G)'1G<6VAS,Oq+BsX&CO:j; +I?K4gOu%mpL]M:<056S5Ou$TdAS,Oq+DDs.De3NmF!,1Q!KsFF99OO6L]N[Tos/RG^Y +`G@rGpjAoib.@rGpjAoib.P"Th:@;Kjp+DI!3EcZ2?De,#UI?I,S@rGpjAof))De3NmF,0g+De +3NmF-:!g!KsFF9Th2ADe3NmF-:!g!KsF!Kp*1"/0fZ@rGpjAof)1+DR(=L]N[U"!S9Mg!!->DKE)%U4G3\8?LWUJ!O$m( +!!-DNKE)%V5(in:?[RM,!VQ;B!!1O+KE)&;G_?%toY,tY!MmMa!!1MeKE)&;4G3\8UgSiU!R`r +\!!,VUKE)%K0SBE,dN!o?!D">d!!/l4KE)$D&;1#aVVm+-!Rl:H!!2>uKE)$H^k;[gVJq1g!Rj +/a!!,c$KE)%M3.q84diO/B!DG2#!!/r:KE)$Ji.M(2Vg*jp!Rnc9!!,i6KE)%N4G3\8:,mn,!N +-ul!!,l?KE)%N^4ZIe:HX:1!Dabi!!/h0KE)&#E.e2lke)QK!MWtT!!1J,KE)&:SqI(E6pQD*! +MV9$!!1IeKE)$@+G9^qU)8O`!CRKP!!,InKE)$B^k;[gUMtkd!R\Q5!!,PsKE)%J3.q84d@Q!k +!Cebr!!/i7KE)$B(k_ki7LXqM!Cq*^!!/k-KE)$C3.q84URm,=!Cn,_!!,U&KE)%H@"\L\d("` +/!U*jC!!,DOKE)%H0SBE,d%#ah!C@o^!!/c1KE)&"Ne@B564eeM!MKpT!!,ClKE)%H#(usW6XY +QI!MR#V!!1I'KE)$?0SBE,Tq$c9!CI]W!!/dRKE)$?%"nT]6O&2D!MSA'!!,HIKE)$=5_K+!!/C)KE)%r4G3\ +8/7=,2!L>]u!!+W)KE)$((k_ki0&VB_!LJ%a!!19WKE)$*E.e2lQTTp$!A6?b!!+\lKE)$+G_? + %tQbJ+Q!A?Qg!!+aeKE)&,^k;[gm;R^Y!VX0Z!!1e]KE)&?3.q84p7?p;!OP+F!!1e-KE)&?* +/":mZlk#%!SSBD!!2HsKE)%[&;1#ag'iW7!Kt6O!!12\KE)&6]S$7c[_ROr!KpiD!!12$KE)&6 +SqI(E[U=ag!S]Se!!2JYKE)$h5_K+<,Tqa?!Kn:Q!!11OKE)$h+G9^q[MXYt!Gi=#!!+F^KE)% +:E.e2lah39,!H,]+!!+ESKE)%:3.q84ae".c!H):u!!0PgKE)&-SqI(EDD6_D!@AY:!!-sSKE) +$#E.e2lPIuPK!H2q1!!+H,KE)%:SqI(ED`ECM!OnYR!!.!XKE)$#]S$7cDnL`'!@OIl!!.#0KE +)&+@"\L\m'q]K!VTiQ!!0AjKE)&+0SBE,m$r_/!ONe@B5Z4MZh!SIm7!!0A2K +E)%Y"G?aUO^NhB!Q_d(!!2.eKE)%Z@"\L\OYDFg!Q^da!!-[sKE)#s+G9^qfpm]q!Q^:S!!-[S +KE)#s&;1#aOUQmC!G2mr!!0D7KE)%8#(usW+p>_E(XYon]"!SEcm!!2F]KE)%X&;1#afSkI`!O2o`!! +1`,KE)%X"G?aUYl]RY!?j^]!!/1cKE)%o>_E(X@mG\I!?iS=!!/1KKE)%o:4rTJ@j$F)!O8#F! +!1`tKE)$_&;1#a+UE`$!K`%h!!-R8KE)%XL4fO-@g%Gb!?n\#!!/2:KE)$_Y_2uW+ddo_!KbT[ +!!-SsKE)%Xc@c/u@uQ'@!?m2N!!-SaKE)$_gk5Y.A'T`-!O/5M!!1_SKE)&>/qa3*Y`OMCJ!F^Y7!!+3oKE)#qfRs5*@G$55!Fa3*!!-NJKE)&*/;+!(fHu7O!O ++nD!!/04KE)#q8;$sD@*"!$!FWj!!!-KEKE)%1^k;[g`GgJ1!TLbF!!.sbKE)%l3.q84'L7H)u!!*c>KE)#g^k;[gMf==L!QD^)!!*jCKE)%23.q84`L___ +!>[AB!!.utKE)#g(k_ki((>ir!>f^.!!/"jKE)#h3.q84Mk5S%!>c`/!!*nKKE)#hSqI(Ec!Z2 +)!TpnF!!2[tKE)%A5_K+Ajo!!.qdKE)%khLkk02dh:=!>@/?!!1@$KE)$30SBE,S +",-3!Juhi!!,"qKE)#d%"nT]2[k?>!>Dtr!!.r5KE)$3\:ah_':a^U!B6O%!!*anKE)#dhLkk0 +2r92f!Sp"o!!2MlKE)&I>_E(Xh&q@N!Uc>.!!2ghKE)&/&;1#amYlf!!Sn$7!!2MBKE)&/"G?a +UR6ZE*!R.d$!!24eKE)%b5_K+N!L]=.!!1!AiMa!!*\WKE)$sgk5Y.1X:XR!Sj?$!!2LiKE)&I/qa3*glR0h!U`X7!!1l2KE)& +@7YCaBgk:=\!Si9[!!/I[KE)%s=G-YTjt;;e!P+kV!!/IKKE)&@DM.uj\WDIE!SknP!!1;5KE) + %`LkGa/R"U+m!P*l:!!/I=KE)%`JqO+)&>4[V!Jjj2!!1"jKE)$-TS*:G&*n:!!.mn +KE)$-fRs5*&Boe-!HZnH!!+guKE)#a`e4!P$($!!/ +HRKE)%__Lqmi&5\#[!Ji:[!!+e#KE)#a8;$sDLaIcT!HHJ>!!+dpKE)%?AqU-bEQEe5!P%9F!! +*WtKE)$m`.S*k0Z&JC!HGu0!!+e?KE)$mm">?>ETVoS!U^_V!!1k!KE)%s(5)YgQm@=b!LP'a! +!*WZKE)$,BS6?dE9MrT!>$H.!!+c_KE)%,@"\L\$:'7E!JN4\!!*ELKE)%,(k_ki_N'9L!=BBk +!!.c^KE)#[#_W0YKa*21!=N:g!!.e`KE)%ihLkk0$S[56!JR%s!!*HEKE)%,Ne@B5$Oh[g!=K* +b!!*J;KE)%,hLkk0$_2kM!=Op@!!*JaKE)%45_K+<`it*r!TRF_E(X)aK&V!=9m%!!1*pKE)%i:4rTJ)^'e6!K +EJ"!!1*bKE)#l&;1#a#mc1a!JH2\!!+#EKE)%4L4fO-#m,b[!=>u`!!.c.KE)#lY_2uW$(-AG! +JJaO!!+%+KE)%4c@c/u)iTFM!==L6!!*D]KE)#lgk5Y.$-n2(!?9=;!!1BJ)!=2#F!!.GfKE)%dk(E^8(rCq+!IMb?>#\J_i!BKM"!!*r!KE)%"m">?>3Tbtp!INs^!!2O:KE)&IQ@o5=mj*Pd!Uh4c!!1@nKE)&9( +5)YghIqQB!Uhq"!!1qeKE)%u,(opshI;-oL'!!/$:KE)$4k_&p:(hA:"!=0m&!!.B/KE)$ +4jFdL6(h/-u!I1S!!.?:KE)$tnq6uD"[I_@!9B7!L/Nl$GL!!M4Cd!!/*8KE)%eoN`SDKE)&G@ +"\L\qRD1Y!U;q'!!2aHKE)&LS:gkCl6(`[!VI:_!!2qVKE)&<&;1#aoaHKR!U9rD!!2`sKE)&< +"G?aUlX5AG!VNsU!!2rQKE)&(5_K+!U2k&!!2_rKE)&L>_E(XkobWZ!VDb4!!2p +kKE)&;&;1#aoSeG'!U0lC!!2_HKE)&;"G?aUklQMgKE)&Fgk5Y.dia;D!U5u)!!2 +`;KE)&%&;1#al&:8q!Rh=-!!2>=KE)&%"G?aUdfP1&!N/29!!1QQKE)&;gk5Y.V]^Wm!RmEh!! +2?0KE)%N&;1#adu8q[!N-3V!!1Q'KE)%N"G?aUVZMMO!Dbt6!!0"%KE)&%gk5Y.:EY;j!N2<m!!2^]KE)&:KS0 =+k ^nHf! R[Qn! !2 <9K E)& FDM. +ujd?'"]!U.a\!!1 K'KE) &: `e4! Mb =$! !/jHKE )$ CTS*:G UY( +5"!R^=g!!,TOKE) %Jb_, rs7 u2f u !Md Yf! !,T CKE)$C Jq O+)8(` Ip! +Mf(9!!,U6KE)$C` e4e "!! ,CFKE)&:'S HGekRrOK!RN +ZV!!1G%KE)%GFG' VpTQ5 \c!T cS"!! 2YpK E)& K>_E(XjWK3 V!V2V2!!2mj +KE)&7&;1#anr/5% !TaT? !!2YF KE)&7 "G? aUjT:)8!R! `]!!22cKE)& +Dgk5Y.b92H&;1#abD_)S!LF(F!!18tKE)%>"G?aU +QNDg?!A?]k!!/FjKE)%rgk5Y.0-GoJ!LK1,!!19gKE)$+&;1#aQ]-Rt!A=_3!!/F@KE)$+"G?a +U0c@c/u08tPa!AB1\!!+b.KE)$+c@c/up7R'=!W,uP!!-m)KE)&HOG! +T7qb2YC!GV=^!!2eLKE)&M7YCaBB`*M`!VV2"!!2eFKE)&6TS*:GnlUPF!Vn@$!!2J[KE)&6OG +!T7qeh&e!UYu%!!2f;KE)&D7YCaBm>-Dq!T\oe!!2J?KE)&6JqO+)m=Kuk!Qh!f!!205KE)&DD +M.ujgRs3"!QgFV!!20)KE)&-OG!T7mEC4`!T_7R!!1i1KE)%pKS0=+gOt4[!QfqH!!1i+KE)%: +TS*:Gak27H!T`[%!!0R%KE)%:OG!T7aioDm)"DU!Q`W@!!2.sKE)&+d"DB"aN0#7!T[jG!!1co +KE)&>k(E^8fu/OD!Q`-2!!1ciKE)%8d"DB"aR"Q[!OL.+!!/5'KE)%ok(E^8ZcIe"!SQUg!!0F +EKE)%8_LqmiZbh@q!@,sE!!/5KKE)$cd"DB",KPNfH'!@,I7!!- +`LKE)#tm">?>BC(9O!@-`[!!-`pKE)&H."hR$q\Fhb!Fkt[!!2d=KE)$^IY7\%p*,.i!TYY^!! +2X+KE)&>BS6?dp,7R(!UO?M!!2.)KE)&>@Y=^^aCp5,!TZ.l!!1a9KE)%oA:sp`f]7\c!Q\`'! +!1a3KE)%7k_&p:aEE4:!O:jA!!1aGKE)%XjFdL6OQ(on!O:X;!!+8,KE)%7p4NDHA*ARG!?pNW +!!-TjKE)#rie.:4A)`.A!?q/i!!-U'KE)&H'SHGe@=Ek0!VR.Z!!2-pKE)&>1kYi0j:[+G!UMR +p!!1.tKE)&*FG'Vpa>/DK!SDFG!!/1'KE)%WoRm2FOE-!S!O2-J!!+57KE)$]oRm2F+S(0c!Fb +PP!!2d#KE)&6$A8B[ll(NW!QZ14!!1_5KE)%73eRJ6Y^1s&!TKc*!!2UlKE)&JY(QcUifJfn!V +&j:!!2)8KE)&C7YCaBie2sb!TJ]a!!1'3KE)&4fRs5*nSX![!QC.R!!2*'KE)%lLkGa/il6WO! +QB_F!!1&jKE)%2TS*:G`RohD!TNO#!!/">KE)%lb_,rsMhm#d!QE'3!!/"2KE)%2JqO+)(SHE] +!K5T`!!1(,KE)#hOG!T7Mp-hS!>gQF!!/"tKE)#hKS0=+(P7;?!>jCA!!/#GKE)#hb_,rs(WM+ +.!>k0W!!2[fKE)&KXFpQS2>Dh)!V8j8!!2nmKE)$0r.G%No0e63!Ao7Y!!2[XKE)&4:kSfLnLT +=n!Tqa^!!2(MKE)&C-A2@"k/`2U!V9oV!!26#KE)&46A,=>k/)cO!Q88!Q;j.!!1?]KE)%0d"DB"`9`-W!LqGh!!.qtKE)%kk(E^8S +&g6_!R9b[!!/S-KE)%0_LqmiS&0gY!>Eh5!!.rCKE)$3d"DB"'?Gh,!K#rl!!,%"KE)%Bk(E^8 +2oL@L!>E>'!!,$qKE)#dm">?>2sc1t!>FUK!!,%@KE)&MW.Y-OFmt%a!P82^!!2tmKE)$ppk/V +J\pf;4!W/UE!!.1hKE)$p5(in:o-f7l!Vr%7!!+kQKE)&IBS6?dqmM.X!I"Bo!!+j(KE)&IA:s +p`o-/hf!HrpF!!2h'KE)&4."hR$nJ6cX!Tn'K!!2()KE)&@k_&p:pND2i!TG;V!!2NKKE)&8@Y +=^^mc&m"!Q8Z)!!2(;KE)%sk_&p:`+4N$!Susm!!1=)KE)%k@Y=^^h;j4h!R0PV!!1p8KE)%/k +_&p:`--e6!L`/)!!.o:KE)%bk_&p:RH0#$!Jo`g!!0^mKE)%@ie.:4]AeJD!>4OK!!.oLKE)$/ +k_&p:&`eTF!I*a\!!+n:KE)#bie.:4GN=DW!Ai_g!!.<'KE)#bp4NDH1\QJ%!W/+7!!.-8KE)% +`IY7\%qiZU4!HNR@!!.+(KE)&E'SHGe0n+cU!V\F(!!2[(KE)$oIY7\%pG.C%!TFfH!!24=KE) +&4&qg5cmW=*^!Tl.j!!2M.KE)%k1kYi0b]JL+gT!!.05KE)$-nq6uDF7Ota!W.b-!!.(eK +E)$m5(in:o*U-N!V[Lc!!2'dKE)&8)MA(kmQ-"$!Q5n0!!1;)KE)&.H@u8!LcU1h!LS1d!!0V+ +KE)#aH@u8!0`$G&!HIsh!!.&QKE)&3:kSfLn>q9C!T?S&!!2SdKE)&37"bO@iBi1t!Q*3:!!2% +pKE)%iaFjNoiF[`C!Q)d.!!0sRKE)%,d"DB"_X)pU!JSUJ!!0t!KE)%,`.S*kKu/KC!=R8-!!. +f?KE)#\aFjNoL$"$g!=Qi!!!*JEKE)#\m">?>$g**B!V*+A!!2lGKE)#kr.G%NnYCg&R^!=87L!!,1RKE)#jnq6uD47\%)!IF6g!!0c\KE)%!G_?%t]fq)L! +I?k]!!.BeKE)&Kb(K`q3IHJ[!W1T(!!.FoKE)$55(in:HTm)_!V)&#!!2\[KE)&I\qC%aiX!!/VdKE)%dqLehL#^V. +(!>tZd!!,+VKE)$uG_?%t]Y9%!!I6e\!!.?dKE)$4^4ZIeH+nq3!I281!!.>9KE)$t?A&:Zi2D +;/!T9c,!!2#PKE)%hBS6?di3n:=!Pr<"!!0oFKE)%)k_&p:_01J3!J9Bc!!.]2KE)#Vk_&p:K( +ait!!!.[4KE)%-H@u8 +!Nr"D/!dH!!1SuKE)$Ln:UcBW-j6u!Dn#o!!2rCKE)$Wi.M(2Xn[PL! +W'lj!!-6lKE)%Sr.G%NqS\$e!Ef,M!!00MKE)&L_Lqmi=F>c%!VOfm!!2r_KE)$Ypk/VJouMdd +!W(r3!!-@&KE)&G`.S*k>^h>+!VO<_!!2E4KE)&Gm">?>lc=_Z!VPT.!!2E(KE)&=_Lqmif?f0 +N!UK**!!1]mKE)&=k(E^8f>N=B!S>2A!!0:MKE)&)m">?>YK2@s!S?Ie!!0:AKE)$G^k;[gV=9 +-+!!2q0KE)$In:UcBVY +l)I!W$>[!!,dgKE)%MIY7\%qI5*X!DIlo!!,bWKE)&Fk_&p:qK@Ml!D`QG!!2`QKE)$JIY7\%o +\tN(!U8g$!!2`cKE)&;jFdL6l/I?r!Rp7c!!2?XKE)&%jFdL6e)H#\!N5.7!!1RBKE)%NjFdL6 +VrE@0!Cbq"!!/hhKE)&#IY7\%7.>j0!MXsp!!,K4KE)%I5(in:6p-,&!CRu^!!2pQKE)$Bpk/V +JUOIjr!W"R)!!,Q:KE)$B5(in:oQ5`d!CqTl!!2_4KE)&:oRm2FkjjB,!R^Om!!1LG_?%tTg",0!CAo%!!,D-KE)&L)MA(k6[XOe!CK&(!!2^QKE)&:H@ +u8!d/&Cq!C:s`!!/b,KE)$=4G3\85ot[Z!C=GQ!!,?tKE)$KE)&6H@u8!m.uA8!Qb+j!!1dLKE)%8qLehL@c2n>!O6m&!!1`dKE)$^E.e2lYrm[>!Fe$A +!!0>GKE)$^*/":m@Le%k!?l]@!!/1qKE)$_G_?%t+ZtDX!Fn6F!!+5aKE)$_*eXLo+hiU0!Fri +s!!-MIKE)%W]S$7c@5ro?!O//K!!-LJKE)$]%YOf_+M<@-!F`Wo!!+46KE)$]SqI(E@(:ji!O, +m`!!-JtKE)$\Ne@B5+C9^$!FXc;!!-J4KE)$\:4rTJ(#X`F!K-Z*!!1&fKE)#en:UcBML:'W!> +Kd3!!.s@KE)#e4G3\8'HVo-!Vj$T!!*l1KE)%2IY7\%pp,PQ!>^'9!!*j!KE)&CFG'Vp(Oh#;! +V(2`!!2*OKE)&4nq6uD`Unf`!QFV_!!/#MKE)%2nq6uD28FkF!LiM2!!1>lKE)$0i.M(2RWsJc +!R3f]!!+oqKE)%A4G3\81cU-g!Lb'_!!+nrKE)$0%YOf_'(CPS!Ju2W!!,"IKE)#cG_?%tM*?R +m!B,1U!!/QQKE)$24G3\8&fu]+!B)!P!!2k`KE)#dI"VJ#q7;4Z!B5CZ!!*`sKE)$35(in:nN) +='!V:Vj!!2)*KE)&8qLehL`;5,e!R:Io!!.rQKE)%ai.M(2h0=SQ!Ud[T!!.2WKE)%aE.e2lh) +p>j!H__&!!0YjKE)&/*eXLoF>/@J!P08(!!.0YKE)%a%YOf_F:-B+!!.:+KE)$/*eXLoG92D;!>3&!!!+miKE)$s^4ZI +eEkm>.!P*0&!!1lfKE)$n@"\L\\N#6B!Sj9"!!.*oKE)%`*/":mEYsH0!P&\n!!.*KKE)$n#(u +sW0lVdG!LUNQ!!..[KE)$-3.q84R%As2!HU5R!!0X%KE)$o*/":m0b/j:!HSa(!!*YDKE)$-]S +$7c&>"OT!HYo,!!+gGKE)$oSqI(EEF=G"!P#Xm!!1k]KE)$m0SBE,\=A3P!HAs0!!0TiKE)$m% +"nT]E<_'r!AM$:!!/HnKE)$m\:ah_0V!dr!HFW_!!+d6KE)$mNe@B5&71"i!ANA`!!.)rKE)$l +Y_2uW\6O[e!H=EZ!!0T)KE)$lN._03E/'#G!AIc3!!.&oKE)$,:4rTJE6a+:!H;.o!!0S^KE)$ +l9Sul1!!,/$KE)#j%YOf_3t?oD!=6>k!!*t +MKE)#YSqI(E41p4H!?%J^!!,0QKE)%d@"\L\hRJ4=!Uj?J!!.C2KE)%d0SBE,hOK6!!I>lA!!0 +bMKE)&0Ne@B5H4Y`0!PJnp!!.BOKE)%d#(usWH3Am$!BFP@!!/V"KE)%u?A&:ZHXML,!BDie!! +/U[KE)%"0SBE,]ps`U!M#1'!!.E`KE)$5%"nT]HOPQ-!BC@;!!.ENKE)#i\:ah_N*_/;!BIZC! +!*q,KE)%"\:ah_3Lka&!>piM!!.G:KE)$5Ne@B5H]EaZ!=3"b!!*qnKE)$5hLkk0HesDU!I6q` +!!0a:KE)&0>_E(XGp%b?!PFeQ!!1qOKE)$u&;1#a]SqLD!I4s(!!0`eKE)$u"G?aUGliX!!B@< +:!!/TpKE)$uY_2uW31,@!!Luoge!!.A"KE)#i>_E(X38B/e!>n +Rb!!.B#KE)$4c@c/uH-V'C!I18j!!0`7KE)&0/qa3*G`[RY!PD*Z!!.>#KE)%c7YCaBG_C_M!I +03L!!,&]KE)%C/qa3*Gh@ZL!BgKE)$47YCaBGfGC:!>mGB!!,&sKE)$tmXtQ@GYj%n! +PBt:!!.=8KE)%c-A2@"GXR2b!I-qa!!,&1KE)$tCkMch3$s:Y!I/40!!.o!j +G0!KN1n!!+)KKE)#n#(usW%(Lrj!JXp6!!++MKE)#]S:gkC*Lqc_!=Y!A!!++#KE)#U?A&:Z%, +QX;!?L$M!!,5JKE)%EY_2uWcWl,'!BhQY!!/[YKE)&!:4rTJ4V38H!M57'!!,4gKE)%EL4fO-4 +TpE_E(X4g9S>!?@J[!!/*TKE)$9R"PG?T$Duh!BlBp!!+'oKE)$9L4fO- +$s\Gc!?BmJ!!*L'KE)$9gk5Y.*6s3;!Bn_]!!0g,KE)&1=G-YTn#hEOV!Bc$g!!.M$KE)$8JqO+)I=d+P!?>3p!!/*4KE)$8fRs5**))"c!I`UR!!,4+KE)#m7Y +CaBIE[?E!BeAT!!.MfKE)#]/qa3**,^E0!Bfe'!!.N9KE)%e:kSfLh^jE\!PV*X!!1t(KE)%e7 +"bO@^-[JQ!Ba23!!/ZBKE)%#d"DB"4@k,*!M1Wk!!.JgKE)%eAqU-bI)L[!!.K6KE)$8AqU-bI--(^!PTt8!!1smKE)%e,_Q-u^*841!B_c`!!/Z,KE)% +#BS6?d4=#R[!ISF2!!,2+KE)%#@Y=^^*#=2-!B`8n!!.IjKE)%e'SHGe^(Q)!!B_'L!!.I(KE) +$8&qg5cHnp?T!e!!.j[KE +)#_R"PG?LJEL&!=k'A!!*RaKE)#W>_E(X%bu^;!*`.Li!KSdb!!,: +1KE)%FCkMchO!]M[!C"SX!!+-/KE)$:`.S*k*^YM[!C"AR!!*Q\KE)#oCkMch%OQi/!C#k'!!+ +-QKE)$:k(E^8hl)2.!UnTm!!1uQKE)&1U4`LIT.#?m!RI'b!!0iJKE)%F,_Q-u^LVut!M:Qh!! +0iDKE)#o."hR$Nu!BK!Bt1M!!+,dKE)%%k_&p:5%K_E(X"&=LL!=)_ +[!!._TKE)#X9Sg6!!*T;KE)#p)MA(k5<=Gt +!<]EV!!*2!KE)#X W.Y-O K@Y\U !=,ER !! *>! KE)#TQ @o5=#I] +9c!Jf0X!!.l'KE) #XP _9#;& %$ui! =+ d@! !*V 9KE) + %nl9 I. )"!WI %U4r cU L'' 2c"*0 +uH A2M_L ',#A +".FrHg4f^PL'*,L '*Tn "4 Do+ eqO:VL '* Zp"13d bUk +SuKL'+T5"0@4ZW. kC&L' &u] ""o < 1-A DU\ L'+ l="."Z D( 5;o*L' '8e +"*B8"A;11uL')=J ")N\o BSH U[L '( P4 "'g Q_? A8PWL' (, ("%7kG 7YV +"3L'(mj+BsR%c@u BqL& u7I !\ T3 /-A DR[ L&r -F!Y +U4h)MS;SL&s,b![ <@#@ Y Or )L &u[ U!r @WQn qI5>L +&uOQ!d'.uA;1.tL &si!!^ _VC _ M/- OL '$Ll !p# (;m"PRXL&r o\![rd)BSHT +PL'#GN!mHB#`.e? 5L'!*a !fi ! :N.q D(L' !`s !kDNlP,4DOV^2i(@f +@pL3eL]N[oUCm#*f1Pc$e!HNt +sP,Wd]Bp(ZC1G<6SF*&O=+ECn0Cm"gT!KsF<"-RD^1N7&QF!,LIBk/?#P&+>F@u(/K4aUlcEa` +p'Oo^@>P,X6oP%odQEa`p/DdmF&F-6TfF^oW:+DI!3@r-4.+CfV;DdmF&F-6TfF_Mt=@;p7M!J +gc>WJEBoC5;k1@;p=,@VKq*OogehI?IQ>L]W`&HYFUC@;p%G!Jgc>WJEBoC5;k1@;p=,@VKq*O +ogeh@s;u:BnuhRCm%G$Cia\@@s<$5@VKq*Oogeh@s;u:BnuhRCkr+T!Kp)cCia\@@s<$5@VKq* +OogehBcqG)E,q*BL]N[P,X6oP%odQEa`p/DdmF&F-6TfFa]EP@s;u:BnukSCm%G$Cia\@@s<$5@VKq*OogehBcqG)E+> + %3L]N[P"T;$F*&O7GB@b4BlnEZ!g7\9G +B4m@L]`fVL]W_?P"T;$F*&O7GB@b4BlnEZ!g7\?+ECn0EfpHZ!KsF<1m2U0!-2LeFDkW&FEP,X6oP%o +dREa`p/DdmF&F-6TfF^oW:+DHW7P&,pUOo^_=@r-4.+CfV;DdmF&F-6TfF^oW:+DHW7P&,pVOo +^_=@r-4.+CfV;DdmF&F-6TfF_Mt=@;p7M!Jgc>WJEBoC5;k1@;p=,@VKq*OogehI?IQc!F:k6I +?I,`4>1_dDD*Y`ASu?nFE2)?05tWMF!,F9G]PNWBm=kFEd)5.05tWMGp%,\BOtmjBQPA;Le*[e +Ec6/=F_l/_CbL!HA9;K-Ed)5.Le*[e05kfO+E)4@Bl@m1+?ht3A8c@-A9)+&P&N'-Eb0-*@ +% uk.co.terryburton.bwipp/micropdf417 0.0 0 +%%EndData +%%EndResource % --END ENCODER micropdf417-- % --BEGIN ENCODER datamatrix-- +% --REQUIRES preamble raiseerror renmatrix-- % --DESC: Data Matrix % --EXAM: This is Data Matrix! % --EXOP: rows=32 columns=32 % --RNDR: renmatrix -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renmatrix dup /uk.co.terryburton.bwipp findresource put -begin -/datamatrix { - - 20 dict begin - - /options exch def - /barcode exch def - - /dontdraw false def - /columns 0 def - /rows 0 def - /encoding (ascii) def - /raw false def - /parse false def - /parsefnc false def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - /columns columns cvi def - /rows rows cvi def - - % Parse ordinals of the form ^NNN to ASCII - parse { - /msg barcode length string def - /j 0 def - barcode - { % loop - (^) search { - dup msg exch j exch putinterval - length j add 1 add /j exch def - pop - dup 0 3 getinterval cvi msg exch j 1 sub exch put - dup length 3 sub 3 exch getinterval - } { - dup msg exch j exch putinterval - length j add /j exch def - /barcode msg 0 j getinterval def - exit - } ifelse - } loop - } if - - /barlen barcode length def - - raw {/encoding (raw) def} if - - encoding (raw) eq { - /cws barlen array def - /i 0 def /j 0 def - { % loop - i barlen eq {exit} if - /cw barcode i 1 add 3 getinterval cvi def - cws j cw put - /i i 4 add def - /j j 1 add def - } loop - /cws cws 0 j getinterval def - } if - - % Special function characters - /fn1 -1 def - - encoding (ascii) eq { - /fncvals << - (FNC1) fn1 - >> def - /msg barlen array def - /i 0 def /j 0 def { - i barlen eq {exit} if - /char barcode i get def - parsefnc char 94 eq and i barlen 4 sub lt and { - barcode i 1 add get 94 ne { - /char fncvals barcode i 1 add 4 getinterval get def - /i i 4 add def - } { - /i i 1 add def - } ifelse - } if - msg j char put - /i i 1 add def - /j j 1 add def - } loop - /msg msg 0 j getinterval def - /msglen msg length def - - /cws msglen 2 mul array def - /i 0 def /j 0 def - { % loop - i msglen eq {exit} if - /char msg i get def - char fn1 eq { % FNC1 - cws j 232 put - /i i 1 add def - /j j 1 add def - } { char 48 ge char 57 le and i msglen 1 sub lt and { - msg i 1 add get dup 48 ge exch 57 le and { % Digit pair - cws j msg i get 48 sub 10 mul msg i 1 add get 48 sub add 130 add put - /i i 2 add def - /j j 1 add def - } { % Singular digit - cws j char 1 add put - /i i 1 add def - /j j 1 add def - } ifelse - } { char 127 le { % ASCII - cws j char 1 add put - /i i 1 add def - /j j 1 add def - } { % Extended ASCII - cws j 235 put - cws j 1 add char 127 sub put - /i i 1 add def - /j j 2 add def - } ifelse } ifelse } ifelse - } loop - /cws cws 0 j getinterval def - } if - - % Basic metrics for the each symbol - % rows cols regh regv rscw rsbl - /metrics [ - % Standard square symbols - [ 10 10 1 1 5 1 ] - [ 12 12 1 1 7 1 ] - [ 14 14 1 1 10 1 ] - [ 16 16 1 1 12 1 ] - [ 18 18 1 1 14 1 ] - [ 20 20 1 1 18 1 ] - [ 22 22 1 1 20 1 ] - [ 24 24 1 1 24 1 ] - [ 26 26 1 1 28 1 ] - [ 32 32 2 2 36 1 ] - [ 36 36 2 2 42 1 ] - [ 40 40 2 2 48 1 ] - [ 44 44 2 2 56 1 ] - [ 48 48 2 2 68 1 ] - [ 52 52 2 2 84 2 ] - [ 64 64 4 4 112 2 ] - [ 72 72 4 4 144 4 ] - [ 80 80 4 4 192 4 ] - [ 88 88 4 4 224 4 ] - [ 96 96 4 4 272 4 ] - [ 104 104 4 4 336 6 ] - [ 120 120 6 6 408 6 ] - [ 132 132 6 6 496 8 ] - [ 144 144 6 6 620 10 ] - % Optional rectangular symbols - [ 8 18 1 1 7 1 ] - [ 8 32 1 2 11 1 ] - [ 12 26 1 1 14 1 ] - [ 12 36 1 2 18 1 ] - [ 16 36 1 2 24 1 ] - [ 16 48 1 2 28 1 ] - ] def - - % Select metrics of an appropriate symbol - /urows rows def - /ucols columns def - /i 0 def - { % loop - /m metrics i get def - /rows m 0 get def % Rows in symbol - /cols m 1 get def % Columns in symbol - /regh m 2 get def % Horizontal regions - /regv m 3 get def % Vertical regions - /rscw m 4 get def % Error correction codewords - /rsbl m 5 get def % Error correction blocks - /mrows rows 2 regh mul sub def % Rows in the mapping matrix - /mcols cols 2 regv mul sub def % Columns in the mapping matrix - /rrows mrows regh idiv def % Rows per region - /rcols mcols regv idiv def % Columns per region - /ncws mrows mcols mul 8 idiv rscw sub def % Data codewords - /okay true def - cws length ncws gt {/okay false def} if - urows 0 ne urows rows ne and {/okay false def} if - ucols 0 ne ucols cols ne and {/okay false def} if - okay {exit} if - /i i 1 add def - } loop - - % Extend cws to ncws codewords by addition of pseudo-randomised pad characters - cws length ncws lt { - /datlen cws length def - /cws [ cws {} forall ncws datlen sub {129} repeat ] def - datlen 1 add 1 ncws 1 sub { - /i exch def - i 1 add 149 mul 253 mod 1 add 129 add - dup 254 gt {254 sub} if - cws exch i exch put - } for - } if - - % De-interleave the codewords into blocks - /cwbs rsbl array def % Array of data codeword blocks - /ecbs rsbl array def % Array of error correction blocks - 0 1 rsbl 1 sub { - /i exch def - cws length 1558 ne { - /cwbsize cws length rsbl idiv def - } { - i 7 le {/cwbsize 156 def} {/cwbsize 155 def} ifelse - } ifelse - /cwb cwbsize array def - 0 1 cwbsize 1 sub { - /j exch def - cwb j cws j rsbl mul i add get put - } for - cwbs i cwb put - ecbs i [ rscw rsbl idiv {0} repeat ] put - } for - - % Calculate the log and anti-log tables - /rsalog [ 1 255 { dup 2 mul dup 256 ge {301 xor} if } repeat ] def - /rslog 256 array def - 1 1 255 {dup rsalog exch get exch rslog 3 1 roll put} for - - % Function to calculate the product in the field - /rsprod { - 2 copy 0 ne exch 0 ne and { - rslog exch get exch rslog exch get add 255 mod rsalog exch get - } { - pop pop 0 - } ifelse - } bind def - - % Generate the coefficients - /coeffs [ 1 rscw rsbl idiv {0} repeat ] def - 1 1 rscw rsbl idiv { - /i exch def - coeffs i coeffs i 1 sub get put - i 1 sub -1 1 { - /j exch def - coeffs j coeffs j 1 sub get coeffs j get rsalog i get rsprod xor put - } for - coeffs 0 coeffs 0 get rsalog i get rsprod put - } for - /coeffs coeffs 0 coeffs length 1 sub getinterval def - - % Calculate the error correction codewords for each block - 0 1 cwbs length 1 sub { - /i exch def - /cwb cwbs i get def - /ecb ecbs i get def - 0 1 cwb length 1 sub { - /t exch cwb exch get ecb 0 get xor def - ecb length 1 sub -1 0 { - /j exch def - /p ecb length j sub 1 sub def - ecb p t coeffs j get rsprod put - j 0 gt { ecb p ecb p 1 add get ecb p get xor put } if - } for - } for - } for - - % Strange fixup for 144x144 symbols - ncws 1558 eq { - /ecbs [ ecbs 8 2 getinterval {} forall ecbs 0 8 getinterval {} forall ] def - } if - - % Extend codewords with the interleaved error correction codes - /cws [ cws {} forall rscw {0} repeat ] def - 0 1 rscw 1 sub { - /i exch def - cws ncws i add ecbs i rsbl mod get i rsbl idiv get put - } for - - % Place the codewords into the matrix - /module { - % cw row col shape - 4 -1 roll - (00000000) 8 string copy dup 3 -1 roll 2 8 string cvrs - dup length 8 exch sub exch putinterval - 7 -1 0 {1 index exch get 48 sub exch} for pop - 11 -3 roll - % 1 2 4 8 16 32 64 128 row col shape - { % Place each bit of the codeword in the shape, MSB first - exec - 1 index 0 lt { - exch mrows add exch - 4 mrows 4 add 8 mod sub add - } if - dup 0 lt { - mcols add exch - 4 mcols 4 add 8 mod sub add exch - } if - exch mcols mul add - mmat exch 5 -1 roll put - } forall - } bind def - - % Placement patterns - /dmn [ - { 2 copy 2 sub exch 2 sub exch } bind { 2 copy 1 sub exch 2 sub exch } bind - { 2 copy 2 sub exch 1 sub exch } bind { 2 copy 1 sub exch 1 sub exch } bind - { 2 copy exch 1 sub exch } bind { 2 copy 2 sub } bind - { 2 copy 1 sub } bind { 2 copy } bind - ] def - - /dmc1 [ - { mrows 1 sub 0 } bind { mrows 1 sub 1 } bind - { mrows 1 sub 2 } bind { 0 mcols 2 sub } bind - { 0 mcols 1 sub } bind { 1 mcols 1 sub } bind - { 2 mcols 1 sub } bind { 3 mcols 1 sub } bind - ] def - - /dmc2 [ - { mrows 3 sub 0 } bind { mrows 2 sub 0 } bind - { mrows 1 sub 0 } bind { 0 mcols 4 sub } bind - { 0 mcols 3 sub } bind { 0 mcols 2 sub } bind - { 0 mcols 1 sub } bind { 1 mcols 1 sub } bind - ] def - - /dmc3 [ - { mrows 3 sub 0 } bind { mrows 2 sub 0 } bind - { mrows 1 sub 0 } bind { 0 mcols 2 sub } bind - { 0 mcols 1 sub } bind { 1 mcols 1 sub } bind - { 2 mcols 1 sub } bind { 3 mcols 1 sub } bind - ] def - - /dmc4 [ - { mrows 1 sub 0 } bind { mrows 1 sub mcols 1 sub } bind - { 0 mcols 3 sub } bind { 0 mcols 2 sub } bind - { 0 mcols 1 sub } bind { 1 mcols 3 sub } bind - { 1 mcols 2 sub } bind { 1 mcols 1 sub } bind - ] def - - /mmat [ mrows mcols mul {-1} repeat ] def - cws length 1 sub -1 0 {cws exch get} for % Reverse cws onto stack - 4 0 % Starting row and column - { % loop - 2 copy 0 eq exch mrows eq and { - dmc1 module - } if - 2 copy 0 eq exch mrows 2 sub eq and mcols 4 mod 0 ne and { - dmc2 module - } if - 2 copy 0 eq exch mrows 2 sub eq and mcols 8 mod 4 eq and { - dmc3 module - } if - 2 copy 2 eq exch mrows 4 add eq and mcols 8 mod 0 eq and { - dmc4 module - } if - - { % loop for sweeping upwards - 2 copy 0 ge exch mrows lt and { - 2 copy exch mcols mul add mmat exch get -1 eq { - dmn module - } if - } if - 2 add exch 2 sub exch - 2 copy mcols lt exch 0 ge and not {exit} if - } loop - 3 add exch 1 add exch - - { % loop for sweeping downwards - 2 copy mcols lt exch 0 ge and { - 2 copy exch mcols mul add mmat exch get -1 eq { - dmn module - } if - } if - 2 sub exch 2 add exch - 2 copy 0 ge exch mrows lt and not {exit} if - } loop - 1 add exch 3 add exch - - 2 copy mcols lt exch mrows lt or not {pop pop exit} if - - } loop - - % Set checker pattern if required - mmat mrows mcols mul 1 sub get -1 eq { - mmat mrows mcols 1 sub mul 2 sub [1 0] putinterval - mmat mrows mcols mul 2 sub [0 1] putinterval - } if - - % Place the modules onto a pixel map between alignment patterns - /pixs rows cols mul array def - /cwpos 0 def - 0 1 rows 1 sub { - /i exch def - i rrows 2 add mod 0 eq { pixs i cols mul [ cols 2 idiv {1 0} repeat ] putinterval } if - i rrows 2 add mod rrows 1 add eq { pixs i cols mul [ cols {1} repeat ] putinterval } if - i rrows 2 add mod 0 ne i rrows 2 add mod rrows 1 add ne and { - 0 1 cols 1 sub { - /j exch def - j rcols 2 add mod 0 eq { pixs i cols mul j add 1 put } if - j rcols 2 add mod rcols 1 add eq { pixs i cols mul j add i 2 mod put } if - j rcols 2 add mod 0 ne j rcols 2 add mod rcols 1 add ne and { - pixs i cols mul j add mmat cwpos get put - /cwpos cwpos 1 add def - } if - } for - } if - } for - - % Return the arguments - << - /ren //renmatrix - /pixs pixs - /pixx cols - /pixy rows - /height rows 2 mul 72 div - /width cols 2 mul 72 div - /opt options - >> - - dontdraw not //renmatrix if - - end - -} bind def -/datamatrix dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp datamatrix 0.0 0 0 0 +%%BeginData: 102 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\KF D5Z2F* j(N A moL sA Wf3' P!F GY<0B5(@Zm RN0oc8tP)XR +(F_-_!H]ftD5*C& O5*@^M H]f t &Eck rV1O YEd I?J0)*g/N: DfBf4Df0WZ5 +*@^MP#Q@=FD5Z2F *j'+I? I/T @rH1 +D/O D;@ rH1+D/OEX/ 4@ UX:eD e*FB @Zm RN1GOo [4NP!5$bP' )pIL]E55P"_ +#iD0'?Q5&,lSP,X U.P'E-L P%'4LP ,X6>P !5% &I=%,:D0'? Q5&-6EP'N4" +C6ATNC6CcD1G<3GEas#uAKYi2B8?P&P"_#pP!FGYP"UU;P&5P!@q]:k+D,M$G%#3.+C\c"@rGmh+DHW4Oo^ +@AP"_$3Ou"b*+DHW7Oo^_%I=!V]+DHW4Oo^_%I?ITYP#Q:>B-:q3@q]:kP'AWo+DHW4Oo^_%05 +;VEL]NY>Ou%NLAM7nAB-;&4B8?P&P"_#p05YcCCh7K,D0'?Q@ZiN#@s;u:D0'?+AT!;*P&-9fO +u"b*L]ESo05?:COu%H!+Dl14Ch7LI4aW>WI?IP_@q]:k+Dl14+DI!3Ou$T]@<*K&DD@;;HXh8@ ++DQW2k`U0DBcq,G!KmJH1G4BnueQ!Kp*=3/B8O8s2Ao3Kdg6"FFX&F!,3?D0'>4Bp),F0TrDk$Bf4BF(ZV0L]N +Y>P"UTbP,XTFL&cgg!Kq[\Bcq,G!g3SI1G@q]:kLjtSeP'AWo+DHW4Oo^_%05;VEL]W_?Ou%NL +p*@-%#>= +J!Jgc4#D`Cd+BsX3L^o4AL]N;=L]Ld(>DNiH&;U@C!Jh/?!F6gPL_>LVL]N;4L^o4A>p*@-'Sm +HZ!Jgc4&r6Qo+BsX;L_bdIL]N;GL]Ld(>DO,P(l/3K!JhSK!F6gPL`2'fL]N;4L`D3O>p*@-+G +_.r!f-o6,_uJ,+BsXILa7cXL]WA^L]Ld(>DO\`.#7q\!f/Od!F6gPLb+?5L]WA6LcC1k>p*@-0 +ShE=!f-o67#1kL+BsXYLbsnhL]WB3L]Uj)>DPP#5_oQ!"Gh#Q!aQpQLe*=mL]iM:L&dL&mZt#$i?UL&cm]!/-.4L^&S7n;%?U+BsR#OG3asL^&Y>L&u1I$=+cYL^8 +eLL]N;4L^/_:>p*@-#`'UZ!Jgf5$]"gh+BsX1L`2'ML]N;AL]Ld(>DN]D,_uJW!f.JF!F6gPL_ +,@fL]N;5L_tpK>p*@-&;W#r!Jgf5*/FW$+C1-d06M;RGB4mIDg-8c1GCm(c\1G^Dg-7FEc6/CP&6?bHS9;Q@ODesJ;@rH1)P&6?bHS9;Q@I?IP_Bcq,G +!KmJH1OYEt@s9IF"F*i=u8T&$^F!,"%FDPN ++P,We_!.fQ]K3aWrA79RrAT!;)Oo^@>DI[m3L]N[L&dL%Ck_rgP%odROo^ +:;JW^%s3/.G4P#-L[!GB8p2Bp(ZCG^Y`GI?IP_@s;C'+EDO4Cm#*f1G<F(/sKCh]%5P"Us_I?I-2G@GV9Bcpo0@Zkt +I@q'L%BcpV&EcY`7+EDO4Cm%\CL]DjdK3aXbI?I,SEcYZ*DeC1sL]N51s*KngL]W`UOuS0s!0T +s$L&ilh_0qJGI?K4gOu"b3F)5c-L&h:;$'I*#!Jgc2!<7D/3-'(KCi$AnH*,BnueQWKKo;G\Ms7P,X9;L]MiUC6Cc +D1Lk?7AnH*,C*7#)AS,Oq+DQ]5P,XU;@rGpjAof)0P"Th:@;Kjp+DI!3EcZ2?De,$IP'DD<87Q +RLAnH+?!+TqYAnH+?!0TuqF(&m'B-:oO96,)mEc5KOG^Y`G04Sp3AnH*,@rGpjAoib.@rGpjAo +j,EL]N[9IKe@WR>2L]W`5H[V +&KARf1jL]E5:P"^4NP"ArB1OYEc04T3I+BosuGB8+ZP"B\8@s<9U!.C#_?'7""!/LYrF(9EM!K +sF/056S5Ou$TlF!,@1GB4m@Oo]-(@WNZ++EDO4Cm&Or95,MhF(/sK;Na\9G^Y`G05YWY@rH1)L]ikAL^9/YP,XTFP!4;W<0BF^@rH1)P&- +9^D/E^'P!4[*M#WWnP'DD<8UZa3Ou"b%D/LJ#H\_`d)2J?WWKKH$!g9OG5(/S(H\_`d)2J! +KsFF5(/S(H\_`d)2J?WWI9p>H\_`d)2JH\_`d)1@YX?'6usA8Pg2+Bs18D/sQ=F,0j[ +WJCP&Oq)hUEc6/CL]N[H\_c@@rH1)L]N[ +=D>C.K0Ec6/CL]`g>L]Djd%XW&5Dg-8Y!g9O=!.C"?HYmeAGB8Q@P,X6;I?G(eL]D:%DesKN"H +oa4Oq)hp!,Z4aCibC7P,Wkm%XX!3D.@L#F,0m\WI9p>H\_Z=@rH1)L]N[!.C"?HYmeAGB8QAP,X6;I?G(eD/sQ=F,0j[WJCP& +Oq)hp!,Z4aCibC6P,Wkm%XX!3D.@L#F,0j[WI9p>H\_]>@rH1)L]N[H\_Z=@rH1)L]Wa=I?G(eL]D:%DesKN!KsF1Oq)hp!Gu=bCi +bC7P,Wkm%XX!4D.@L#F,0m\WI9p>H\_]>@rH1)L]N[9Id'Dg-7FD.@L#F +-:?dM#VmdK3aWr@s@ED/Ws-Ch8 +$XP!4[(Oo^_0L]W +_WD.@L#F-:-u5&G=YGB8pZP&c_)H]iN7Fco"DN<9!*tb5D/E^'+Dl.;GB4mD@rH1)P&,pUP +,VZA!/LY]P'MJ=<%i3)G]P!JDg-7F@rH1)P&-9fOu"b$GAqJAL]ESoL]E53Ec6/CL]N[@rH1)P&+>F@rH1)L]W`;H\_]Y!.C#_?'9J]P#Q- +P!+/2Bm=\ABcpo(CibbU>9IEoCiarZ!I^,`?'9J]P#Q-P!+/2Bm=\ABcpo(CibbUC6AU3L]W`SP'DD<<,*Or@rH1)L]W_?P%odQP&4qVEas$(F,0m\ +!Kq2<@rH1)L]NY>P&6?bHZ3\DF!,0>@rH1)P&+lr!Gu[^F +% uk.co.terryburton.bwipp/datamatrix 0.0 0 +%%EndData +%%EndResource % --END ENCODER datamatrix-- % --BEGIN ENCODER qrcode-- +% --REQUIRES preamble raiseerror renmatrix-- % --DESC: QR Code % --EXAM: http://www.terryburton.co.uk/barcodewriter/ % --EXOP: eclevel=M % --RNDR: renmatrix -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renmatrix dup /uk.co.terryburton.bwipp findresource put -begin -/qrcode { - - 20 dict begin - - /options exch def - /barcode exch def - - /dontdraw false def - /format (full) def % full or micro - /version (unset) def - /eclevel (unset) def % L, M, Q or H - /encoding (unset) def - /raw false def - /parse false def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - % Parse ordinals of the form ^NNN to ASCII - parse { - /msg barcode length string def - /j 0 def - barcode - { % loop - (^) search { - dup msg exch j exch putinterval - length j add 1 add /j exch def - pop - dup 0 3 getinterval cvi msg exch j 1 sub exch put - dup length 3 sub 3 exch getinterval - } { - dup msg exch j exch putinterval - length j add /j exch def - /barcode msg 0 j getinterval def - exit - } ifelse - } loop - } if - - /barlen barcode length def - - % Default error correction level - eclevel (unset) eq {/eclevel format (full) eq {(M)} {(L)} ifelse def} if - - % Convert from input into message bitstream - raw {/encoding (raw) def} if - encoding (raw) eq { - /msgbits barcode def - } { - - % Symbol capacities - /fullcaps << - /numeric << - /L [ 41 77 127 187 255 322 370 461 552 652 % 1-L - 10-L - 772 883 1022 1101 1250 1408 1548 1725 1903 2061 % 11-L - 20-L - 2232 2409 2620 2812 3057 3283 3517 3669 3909 4158 % 21-L - 30-L - 4417 4686 4965 5253 5529 5836 6153 6479 6743 7089 ] % 31-L - 40-L - /M [ 34 63 101 149 202 255 293 365 432 513 % 1-M - 10-M - 604 691 796 871 991 1082 1212 1346 1500 1600 % 11-M - 20-M - 1708 1872 2059 2188 2395 2544 2701 2857 3035 3289 % 21-M - 30-M - 3486 3693 3909 4134 4343 4588 4775 5039 5313 5596 ] % 31-M - 40-M - /Q [ 27 48 77 111 144 178 207 259 312 364 % 1-Q - 10-Q - 427 489 580 621 703 775 876 948 1063 1159 % 11-Q - 20-Q - 1224 1358 1468 1588 1718 1804 1933 2085 2181 2358 % 21-Q - 30-Q - 2473 2670 2805 2949 3081 3244 3417 3599 3791 3993 ] % 31-Q - 40-Q - /H [ 17 34 58 82 106 139 154 202 235 288 % 1-H - 10-H - 331 374 427 468 530 602 674 746 813 919 % 11-H - 20-H - 969 1056 1108 1228 1286 1425 1501 1581 1677 1782 % 21-H - 30-H - 1897 2022 2157 2301 2361 2524 2625 2735 2927 3057 ] % 31-H - 40-H - >> - /alphanumeric << - /L [ 25 47 77 114 154 195 224 279 335 395 % 1-L - 10-L - 468 535 619 667 758 854 938 1046 1153 1249 % 11-L - 20-L - 1352 1460 1588 1704 1853 1990 2132 2223 2369 2520 % 21-L - 30-L - 2677 2840 3009 3183 3351 3537 3729 3927 4087 4296 ] % 31-L - 40-L - /M [ 20 38 61 90 122 154 178 221 262 311 % 1-M - 10-M - 366 419 483 528 600 656 734 816 909 970 % 11-M - 20-M - 1035 1134 1248 1326 1451 1542 1637 1732 1839 1994 % 21-M - 30-M - 2113 2238 2369 2506 2632 2780 2894 3054 3220 3391 ] % 31-M - 40-M - /Q [ 16 29 47 67 87 108 125 157 189 221 % 1-Q - 10-Q - 259 296 352 376 426 470 531 574 644 702 % 11-Q - 20-Q - 742 823 890 963 1041 1094 1172 1263 1322 1429 % 21-Q - 30-Q - 1499 1618 1700 1787 1867 1966 2071 2181 2298 2420 ] % 31-Q - 40-Q - /H [ 10 20 35 50 64 84 93 122 143 174 % 1-H - 10-H - 200 227 259 283 321 365 408 452 493 557 % 11-H - 20-H - 587 640 672 744 779 864 910 958 1016 1080 % 21-H - 30-H - 1150 1226 1307 1394 1431 1530 1591 1658 1774 1852 ] % 31-H - 40-H - >> - /byte << - /L [ 17 32 53 78 106 134 154 192 230 271 % 1-L - 10-L - 321 367 425 458 520 586 644 718 792 858 % 11-L - 20-L - 929 1003 1091 1171 1273 1367 1465 1528 1628 1732 % 21-L - 30-L - 1840 1952 2068 2188 2303 2431 2563 2699 2809 2953 ] % 31-L - 40-L - /M [ 14 26 42 62 84 106 122 152 180 213 % 1-M - 10-M - 251 287 331 362 412 450 504 560 624 666 % 11-M - 20-M - 711 779 857 911 997 1059 1125 1190 1264 1370 % 21-M - 30-M - 1452 1538 1628 1722 1809 1911 1989 2099 2213 2331 ] % 31-M - 40-M - /Q [ 11 20 32 46 60 74 86 108 130 151 % 1-Q - 10-Q - 177 203 241 258 292 322 364 394 442 482 % 11-Q - 20-Q - 509 565 611 661 715 751 805 868 908 982 % 21-Q - 30-Q - 1030 1112 1168 1228 1283 1351 1423 1499 1579 1663 ] % 31-Q - 40-Q - /H [ 7 14 24 34 44 58 64 84 98 119 % 1-H - 10-H - 137 155 177 194 220 250 280 310 338 382 % 11-H - 20-H - 403 439 461 511 535 593 625 658 698 742 % 21-H - 30-H - 790 842 898 958 983 1051 1093 1139 1219 1273 ] % 31-H - 40-H - >> - /kanji << - /L [ 10 20 32 48 65 82 95 118 141 167 % 1-L - 10-L - 198 226 262 282 320 361 397 442 488 528 % 11-L - 20-L - 572 618 672 721 784 842 902 940 1002 1066 % 21-L - 30-L - 1132 1201 1273 1347 1417 1496 1577 1661 1729 1817 ] % 31-L - 40-L - /M [ 8 16 26 38 52 65 75 93 111 131 % 1-M - 10-M - 155 177 204 223 254 277 310 345 384 410 % 11-M - 20-M - 438 480 528 561 614 652 692 732 778 843 % 21-M - 30-M - 894 947 1002 1060 1113 1176 1224 1292 1362 1435 ] % 31-M - 40-M - /Q [ 7 12 20 28 37 45 53 66 80 93 % 1-Q - 10-Q - 109 125 149 159 180 198 224 243 272 297 % 11-Q - 20-Q - 314 348 376 407 440 462 496 534 559 604 % 21-Q - 30-Q - 634 684 719 756 790 832 876 923 972 1024 ] % 31-Q - 40-Q - /H [ 4 8 15 21 27 36 39 52 60 74 % 1-H - 10-H - 85 96 109 120 136 154 173 191 208 235 % 11-H - 20-H - 248 270 284 315 330 365 385 405 430 457 % 21-H - 30-H - 486 518 553 590 605 647 673 701 750 784 ] % 31-H - 40-H - >> - >> def - - % M1 M2 M3 M4 M1 M2 M3 M4 M1 M2 M3 M4 M1 M2 M3 M4 - /microcaps << - /numeric << - /L [ 5 10 23 35 ] /M [ -1 8 18 30 ] /Q [ -1 -1 -1 21 ] /H [ -1 -1 -1 -1 ] - >> - /alphanumeric << - /L [ -1 6 14 21 ] /M [ -1 5 11 18 ] /Q [ -1 -1 -1 13 ] /H [ -1 -1 -1 -1 ] - >> - /byte << - /L [ -1 -1 9 15 ] /M [ -1 -1 7 13 ] /Q [ -1 -1 -1 9 ] /H [ -1 -1 -1 -1 ] - >> - /kanji << - /L [ -1 -1 6 9 ] /M [ -1 -1 4 8 ] /Q [ -1 -1 -1 5 ] /H [ -1 -1 -1 -1 ] - >> - >> def - - /encvals << - /numeric 0 - /alphanumeric 1 - /byte 2 - /kanji 3 - >> def - - /encs << - /numeric /encnumeric - /alphanumeric /encalphanumeric - /byte /encbyte - /kanji /enckanji - >> def - - % N A B K - /mids [ (0001) (0010) (0100) (1000) ] def - /mids << - /M1 [ () -1 -1 -1 ] - /M2 [ (0) (1) -1 -1 ] - /M3 [ (00) (01) (10) (11) ] - /M4 [ (000) (001) (010) (011) ] - 1 1 40 {2 string 10 exch cvrs mids} for - >> def - - % N A B K - /cc1to9 [ 10 9 8 8 ] def - /cc10to26 [ 12 11 16 10 ] def - /cc27to40 [ 14 13 16 12 ] def - /cclens << - /M1 [ 3 -1 -1 -1 ] - /M2 [ 4 3 -1 -1 ] - /M3 [ 5 4 4 3 ] - /M4 [ 6 5 5 4 ] - 1 1 9 { 2 string 10 exch cvrs cc1to9 } for - 10 1 26 { 2 string 10 exch cvrs cc10to26 } for - 27 1 40 { 2 string 10 exch cvrs cc27to40 } for - >> def - - % Alphanumeric character to value map - /charmap (0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:) def - /charvals 44 dict def - 0 1 44 {dup charmap exch get exch charvals 3 1 roll put} for - - /encnumeric { - /in exch def - /out in length 10 mul 3 idiv 1 add string def - /i 0 def /j 0 def { - i in length eq {exit} if - i in length 2 sub lt { - (0000000000) 10 string copy - dup in i 3 getinterval cvi - 2 10 string cvrs dup length 10 exch sub exch putinterval - /i i 3 add def - } { - i in length 2 sub eq { % Two final digits - (0000000) 7 string copy - dup in i 2 getinterval cvi - 2 7 string cvrs dup length 7 exch sub exch putinterval - /i i 2 add def - } { % One final digit - (0000) 4 string copy - dup in i 1 getinterval cvi - 2 4 string cvrs dup length 4 exch sub exch putinterval - /i i 1 add def - } ifelse - } ifelse - dup out exch j exch putinterval - length j add /j exch def - } loop - out 0 j getinterval - } bind def - - /encalphanumeric { - /in exch def - /out in length 11 mul 2 idiv 1 add string def - /i 0 def /j 0 def { - i in length eq {exit} if - i in length 1 sub lt { - (00000000000) 11 string copy - dup charvals in i get get 45 mul charvals in i 1 add get get add - 2 11 string cvrs dup length 11 exch sub exch putinterval - /i i 2 add def - } { - (000000) 6 string copy - dup charvals in i get get - 2 6 string cvrs dup length 6 exch sub exch putinterval - /i i 1 add def - } ifelse - dup out exch j exch putinterval - length j add /j exch def - } loop - out 0 j getinterval - } bind def - - /encbyte { - /in exch def - /out in length 8 mul string def - 0 1 in length 1 sub { - /i exch def - (00000000) 8 string copy - dup in i get cvi - 2 8 string cvrs dup length 8 exch sub exch putinterval - out i 8 mul 3 -1 roll putinterval - } for - out - } bind def - - /enckanji { - /in exch def - /out in length 2 idiv 13 mul string def - /i 0 def /j 0 def { - i in length eq {exit} if - in i get 256 mul in i 1 add get add - dup 16#E040 lt {16#8140} {16#C140} ifelse sub - dup -8 bitshift 16#C0 mul exch 16#00FF and add - (0000000000000) 13 string copy - dup 3 -1 roll 2 13 string cvrs dup length 13 exch sub exch putinterval - dup out exch j exch putinterval - length j add /j exch def - /i i 2 add def - } loop - out - } bind def - - % Determine a compact encoding for the data - encoding (unset) eq { - /numericokay true def - /alphanumericokay true def - /kanjiokay true def - /byteokay true def - barlen 2 mod 0 ne {/kanjiokay false def} if - 0 1 barlen 1 sub { - /i exch def - /barchar barcode i get def - barchar 48 lt barchar 57 gt or {/numericokay false def} if - charvals barchar known not {/alphanumericokay false def} if - i 2 mod 0 eq { - barchar 16#81 lt barchar 16#9F gt or - barchar 16#E0 lt barchar 16#EB gt or and { - /kanjiokay false def - } if - } if - } for - byteokay {/encoding (byte) def} if - kanjiokay {/encoding (kanji) def} if - alphanumericokay {/encoding (alphanumeric) def} if - numericokay {/encoding (numeric) def} if - } if - - % Determine smallest symbol version to hold given amount of data - /numchars barlen encoding (kanji) eq {2 idiv} if def - version (unset) eq { - /caps format (full) eq {fullcaps} {microcaps} ifelse encoding get eclevel get def - /i 1 def { - numchars caps i 1 sub get le {exit} if - /i i 1 add def - } loop - /version i 10 2 string cvrs def - format (micro) eq { - /version (M ) 2 string copy dup version 1 exch putinterval def - } if - } if - - % Opportunistically raise the error correction level for a fit to the same symbol - /caps format (full) eq {fullcaps} {microcaps} ifelse encoding get def - /verval format (full) eq {version cvi 1 sub} {version 1 get 49 sub} ifelse def - eclevel (L) eq {numchars caps /M get verval get le {/eclevel (M) def} if} if - eclevel (M) eq {numchars caps /Q get verval get le {/eclevel (Q) def} if} if - eclevel (Q) eq {numchars caps /H get verval get le {/eclevel (H) def} if} if - - % Set the control character data for the version - /mid mids version get encvals encoding get get def - /cclen cclens version get encvals encoding get get def - - % Create the bitstream as mode_id character_count encoded_data - /enc barcode encs encoding get load exec def - (0000000000000000) 0 cclen getinterval cclen string copy - dup barlen encoding (kanji) eq {2 idiv} if cvi - 2 cclen string cvrs dup length cclen exch sub exch putinterval - /cc exch def - /msgbits mid length cclen add enc length add string def - msgbits 0 mid putinterval - msgbits mid length cc putinterval - msgbits mid length cclen add enc putinterval - - } ifelse - - % Lookup the most appropriate symbol specification - /metrics [ - % format vers size align modules error codewords error correction blocks - % L M Q H L1 L2 M1 M2 Q1 Q2 H1 H2 - [ (micro) (M1) 11 98 99 36 [ 2 99 99 99 ] [ 1 0 -1 -1 -1 -1 -1 -1 ] ] - [ (micro) (M2) 13 98 99 80 [ 5 6 99 99 ] [ 1 0 1 0 -1 -1 -1 -1 ] ] - [ (micro) (M3) 15 98 99 132 [ 6 8 99 99 ] [ 1 0 1 0 -1 -1 -1 -1 ] ] - [ (micro) (M4) 17 98 99 192 [ 8 10 14 99 ] [ 1 0 1 0 1 0 -1 -1 ] ] - [ (full) (1) 21 98 99 208 [ 7 10 13 17 ] [ 1 0 1 0 1 0 1 0 ] ] - [ (full) (2) 25 18 99 359 [ 10 16 22 28 ] [ 1 0 1 0 1 0 1 0 ] ] - [ (full) (3) 29 22 99 567 [ 15 26 36 44 ] [ 1 0 1 0 2 0 2 0 ] ] - [ (full) (4) 33 26 99 807 [ 20 36 52 64 ] [ 1 0 2 0 2 0 4 0 ] ] - [ (full) (5) 37 30 99 1079 [ 26 48 72 88 ] [ 1 0 2 0 2 2 2 2 ] ] - [ (full) (6) 41 34 99 1383 [ 36 64 96 112 ] [ 2 0 4 0 4 0 4 0 ] ] - [ (full) (7) 45 22 38 1568 [ 40 72 108 130 ] [ 2 0 4 0 2 4 4 1 ] ] - [ (full) (8) 49 24 42 1936 [ 48 88 132 156 ] [ 2 0 2 2 4 2 4 2 ] ] - [ (full) (9) 53 26 46 2336 [ 60 110 160 192 ] [ 2 0 3 2 4 4 4 4 ] ] - [ (full) (10) 57 28 50 2768 [ 72 130 192 224 ] [ 2 2 4 1 6 2 6 2 ] ] - [ (full) (11) 61 30 54 3232 [ 80 150 224 264 ] [ 4 0 1 4 4 4 3 8 ] ] - [ (full) (12) 65 32 58 3728 [ 96 176 260 308 ] [ 2 2 6 2 4 6 7 4 ] ] - [ (full) (13) 69 34 62 4256 [ 104 198 288 352 ] [ 4 0 8 1 8 4 12 4 ] ] - [ (full) (14) 73 26 46 4651 [ 120 216 320 384 ] [ 3 1 4 5 11 5 11 5 ] ] - [ (full) (15) 77 26 48 5243 [ 132 240 360 432 ] [ 5 1 5 5 5 7 11 7 ] ] - [ (full) (16) 81 26 50 5867 [ 144 280 408 480 ] [ 5 1 7 3 15 2 3 13 ] ] - [ (full) (17) 85 30 54 6523 [ 168 308 448 532 ] [ 1 5 10 1 1 15 2 17 ] ] - [ (full) (18) 89 30 56 7211 [ 180 338 504 588 ] [ 5 1 9 4 17 1 2 19 ] ] - [ (full) (19) 93 30 58 7931 [ 196 364 546 650 ] [ 3 4 3 11 17 4 9 16 ] ] - [ (full) (20) 97 34 62 8683 [ 224 416 600 700 ] [ 3 5 3 13 15 5 15 10 ] ] - [ (full) (21) 101 28 50 9252 [ 224 442 644 750 ] [ 4 4 17 0 17 6 19 6 ] ] - [ (full) (22) 105 26 50 10068 [ 252 476 690 816 ] [ 2 7 17 0 7 16 34 0 ] ] - [ (full) (23) 109 30 54 10916 [ 270 504 750 900 ] [ 4 5 4 14 11 14 16 14 ] ] - [ (full) (24) 113 28 54 11796 [ 300 560 810 960 ] [ 6 4 6 14 11 16 30 2 ] ] - [ (full) (25) 117 32 58 12708 [ 312 588 870 1050 ] [ 8 4 8 13 7 22 22 13 ] ] - [ (full) (26) 121 30 58 13652 [ 336 644 952 1110 ] [ 10 2 19 4 28 6 33 4 ] ] - [ (full) (27) 125 34 62 14628 [ 360 700 1020 1200 ] [ 8 4 22 3 8 26 12 28 ] ] - [ (full) (28) 129 26 50 15371 [ 390 728 1050 1260 ] [ 3 10 3 23 4 31 11 31 ] ] - [ (full) (29) 133 30 54 16411 [ 420 784 1140 1350 ] [ 7 7 21 7 1 37 19 26 ] ] - [ (full) (30) 137 26 52 17483 [ 450 812 1200 1440 ] [ 5 10 19 10 15 25 23 25 ] ] - [ (full) (31) 141 30 56 18587 [ 480 868 1290 1530 ] [ 13 3 2 29 42 1 23 28 ] ] - [ (full) (32) 145 34 60 19723 [ 510 924 1350 1620 ] [ 17 0 10 23 10 35 19 35 ] ] - [ (full) (33) 149 30 58 20891 [ 540 980 1440 1710 ] [ 17 1 14 21 29 19 11 46 ] ] - [ (full) (34) 153 34 62 22091 [ 570 1036 1530 1800 ] [ 13 6 14 23 44 7 59 1 ] ] - [ (full) (35) 157 30 54 23008 [ 570 1064 1590 1890 ] [ 12 7 12 26 39 14 22 41 ] ] - [ (full) (36) 161 24 50 24272 [ 600 1120 1680 1980 ] [ 6 14 6 34 46 10 2 64 ] ] - [ (full) (37) 165 28 54 25568 [ 630 1204 1770 2100 ] [ 17 4 29 14 49 10 24 46 ] ] - [ (full) (38) 169 32 58 26896 [ 660 1260 1860 2220 ] [ 4 18 13 32 48 14 42 32 ] ] - [ (full) (39) 173 26 54 28256 [ 720 1316 1950 2310 ] [ 20 4 40 7 43 22 10 67 ] ] - [ (full) (40) 177 30 58 29648 [ 750 1372 2040 2430 ] [ 19 6 18 31 34 34 20 61 ] ] - ] def - /eclval (LMQH) eclevel search pop length exch pop exch pop def - /i 0 def - { % loop - /m metrics i get def - /frmt m 0 get def % Format of the symbol - /vers m 1 get def % Version of symbol - /size m 2 get def % Length of side - /asp2 m 3 get def % Position of second alignment symbol - /asp3 m 4 get def % Position of third alignment symbol - /nmod m 5 get def % Number of modules - /ncws nmod 8 idiv def % Total number of codewords - /rbit nmod 8 mod def % Number of remainder bits - /lc4b false def % Last data codeword is 4 bits long - size 11 eq size 15 eq or { % Adjustments for M1 and M3 symbols - /ncws ncws 1 add def - /rbit 0 def - /lc4b true def - } if - /ecws m 6 get eclval get def % Number of error correction codewords - /dcws ncws ecws sub def % Number of data codewords - /dmod dcws 8 mul lc4b {4} {0} ifelse sub def % Number of data modules - /ecb1 m 7 get eclval 2 mul get def % First error correction blocks - /ecb2 m 7 get eclval 2 mul 1 add get def % Second error correction blocks - /okay true def - format frmt ne {/okay false def} if % The format must match that supplied - version (unset) ne version vers ne and {/okay false def} if % The version must match that supplied - msgbits length dmod gt {/okay false def} if % Bitstream must fit into data modules - ecb1 -1 eq ecb2 -1 eq or {/okay false def} if % Error correction level must be valid - okay {exit} if - /i i 1 add def - } loop - - /format frmt def - /version vers def - /dcpb dcws ecb1 ecb2 add idiv def % Base data codewords per block - /ecpb ncws ecb1 ecb2 add idiv dcpb sub def % Error correction codewords per block - - % Complete the message bits by adding the terminator, truncated if neccessary - /terms << - /M1 (000) - /M2 (00000) - /M3 (0000000) - /M4 (000000000) - >> def - /term terms version known {terms version get} {(0000)} ifelse def - /term term 0 dmod msgbits length sub term length 2 copy gt {exch} if pop getinterval def - msgbits length term length add string - dup 0 msgbits putinterval - dup msgbits length term putinterval - /msgbits exch def - - % Expand the message bits by adding padding as necessary - /pad dmod string def - 0 1 pad length 1 sub {pad exch 48 put} for - pad 0 msgbits putinterval - /padstrs [ (11101100) (00010001) ] def - /padnum 0 def - msgbits length 8 div ceiling 8 mul cvi 8 dmod lc4b {5} {1} ifelse sub { - pad exch padstrs padnum get putinterval - /padnum padnum 1 add 2 mod def - } for - - % Evaluate the padded message into codewords - /cws dcws array def - 0 1 cws length 1 sub { - /c exch def - /bpcw 8 def - lc4b c cws length 1 sub eq and {/bpcw 4 def} if - /cwb pad c 8 mul bpcw getinterval def - /cw 0 def - 0 1 bpcw 1 sub { - /i exch def - /cw cw 2 bpcw i sub 1 sub exp cvi cwb i get 48 sub mul add def - } for - cws c cw put - } for - - % Calculate the log and anti-log tables - /rsalog [ 1 255 { dup 2 mul dup 256 ge {285 xor} if } repeat ] def - /rslog 256 array def - 1 1 255 {dup rsalog exch get exch rslog 3 1 roll put} for - - % Function to calculate the product in the field - /rsprod { - 2 copy 0 ne exch 0 ne and { - rslog exch get exch rslog exch get add 255 mod rsalog exch get - } { - pop pop 0 - } ifelse - } bind def - - % Generate the coefficients for the Reed-Solomon algorithm - /coeffs [ 1 ecpb {0} repeat ] def - 0 1 ecpb 1 sub { - /i exch def - coeffs i 1 add coeffs i get put - i -1 1 { - /j exch def - coeffs j coeffs j 1 sub get coeffs j get rsalog i get rsprod xor put - } for - coeffs 0 coeffs 0 get rsalog i get rsprod put - } for - /coeffs coeffs 0 coeffs length 1 sub getinterval def - - % Reed-Solomon algorithm to derive the error correction codewords - /rscodes { - /rscws exch def - /rsnd rscws length def - /rscws [ rscws {} forall ecpb {0} repeat ] def - 0 1 rsnd 1 sub { - /m exch def - /k rscws m get def - 0 1 ecpb 1 sub { - /j exch def - rscws m j add 1 add coeffs ecpb j sub 1 sub get k rsprod rscws m j add 1 add get xor put - } for - } for - rscws rsnd ecpb getinterval - } bind def - - % Divide codewords into two groups of blocks and calculate the error correction codewords - /dcwsb ecb1 ecb2 add array def - /ecwsb ecb1 ecb2 add array def - 0 1 ecb1 1 sub { % First group of blocks has smaller number of data codewords - /i exch def - dcwsb i cws i dcpb mul dcpb getinterval put - ecwsb i dcwsb i get rscodes put - } for - 0 1 ecb2 1 sub { % Second group of blocks has larger number of data codewords - /i exch def - dcwsb ecb1 i add cws ecb1 dcpb mul i dcpb 1 add mul add dcpb 1 add getinterval put - ecwsb ecb1 i add dcwsb ecb1 i add get rscodes put - } for - - % Reassemble the codewords - /cws ncws array def - /cw 0 def - 0 1 dcpb { % Interleave the data codeword blocks - /i exch def - 0 1 ecb1 ecb2 add 1 sub { - /j exch def - i dcwsb j get length lt { % Ignore the end of short blocks - cws cw dcwsb j get i get put - /cw cw 1 add def - } if - } for - } for - 0 1 ecpb 1 sub { % Interleave the error codeword blocks - /i exch def - 0 1 ecb1 ecb2 add 1 sub { - /j exch def - cws cw ecwsb j get i get put - /cw cw 1 add def - } for - } for - - % Extend codewords by one if there are remainder bits - rbit 0 gt { - /pad cws length 1 add array def - pad 0 cws putinterval - pad pad length 1 sub 0 put - /cws pad def - } if - - % Fixups for the short final data byte in M1 and M3 symbols - lc4b { - dcws 1 sub 1 ncws 2 sub { - /i exch def - cws i cws i get 15 and 4 bitshift put - cws i cws i 1 add get -4 bitshift 15 and cws i get or put - } for - cws ncws 1 sub cws ncws 1 sub get 15 and 4 bitshift put - } if - - % Create the bitmap - /pixs [ size size mul {-1} repeat ] def - /qmv {size mul add} bind def - - % Finder patterns - /fpat [ - [ 1 1 1 1 1 1 1 0 ] - [ 1 0 0 0 0 0 1 0 ] - [ 1 0 1 1 1 0 1 0 ] - [ 1 0 1 1 1 0 1 0 ] - [ 1 0 1 1 1 0 1 0 ] - [ 1 0 0 0 0 0 1 0 ] - [ 1 1 1 1 1 1 1 0 ] - [ 0 0 0 0 0 0 0 0 ] - ] def - 0 1 fpat length 1 sub { - /y exch def - 0 1 fpat 0 get length 1 sub { - /x exch def - /fpb fpat y get x get def - pixs x y qmv fpb put - format (full) eq { - pixs size x sub 1 sub y qmv fpb put - pixs x size y sub 1 sub qmv fpb put - } if - } for - } for - - % Alignment patterns - /algnpat [ - [ 1 1 1 1 1 ] - [ 1 0 0 0 1 ] - [ 1 0 1 0 1 ] - [ 1 0 0 0 1 ] - [ 1 1 1 1 1 ] - ] def - /putalgnpat { - /py exch def - /px exch def - 0 1 4 { - /pb exch def - 0 1 4 { - /pa exch def - pixs px pa add py pb add qmv algnpat pb get pa get put - } for - } for - } bind def - asp2 2 sub asp3 asp2 sub size 13 sub { - /i exch def - i 4 putalgnpat - 4 i putalgnpat - } for - asp2 2 sub asp3 asp2 sub size 9 sub { - /x exch def - asp2 2 sub asp3 asp2 sub size 9 sub { - /y exch def - x y putalgnpat - } for - } for - - % Timing patterns - format (full) eq { - 8 1 size 9 sub { - /i exch def - pixs i 6 qmv i 1 add 2 mod put - pixs 6 i qmv i 1 add 2 mod put - } for - } { - 8 1 size 1 sub { - /i exch def - pixs i 0 qmv i 1 add 2 mod put - pixs 0 i qmv i 1 add 2 mod put - } for - } ifelse - - % Format information modules - format (full) eq { - /formatmap [ - [ [ 0 8 ] [ 8 size 1 sub ] ] [ [ 1 8 ] [ 8 size 2 sub ] ] [ [ 2 8 ] [ 8 size 3 sub ] ] - [ [ 3 8 ] [ 8 size 4 sub ] ] [ [ 4 8 ] [ 8 size 5 sub ] ] [ [ 5 8 ] [ 8 size 6 sub ] ] - [ [ 7 8 ] [ 8 size 7 sub ] ] [ [ 8 8 ] [ size 8 sub 8 ] ] [ [ 8 7 ] [ size 7 sub 8 ] ] - [ [ 8 5 ] [ size 6 sub 8 ] ] [ [ 8 4 ] [ size 5 sub 8 ] ] [ [ 8 3 ] [ size 4 sub 8 ] ] - [ [ 8 2 ] [ size 3 sub 8 ] ] [ [ 8 1 ] [ size 2 sub 8 ] ] [ [ 8 0 ] [ size 1 sub 8 ] ] - ] def - } { - /formatmap [ - [ [ 1 8 ] ] [ [ 2 8 ] ] [ [ 3 8 ] ] [ [ 4 8 ] ] [ [ 5 8 ] ] - [ [ 6 8 ] ] [ [ 7 8 ] ] [ [ 8 8 ] ] [ [ 8 7 ] ] [ [ 8 6 ] ] - [ [ 8 5 ] ] [ [ 8 4 ] ] [ [ 8 3 ] ] [ [ 8 2 ] ] [ [ 8 1 ] ] - ] def - } ifelse - formatmap { - { {} forall qmv pixs exch 0 put } forall - } forall - - % Version information modules - size 45 ge { - /versionmap [ - [ [ size 9 sub 5 ] [ 5 size 9 sub ] ] [ [ size 10 sub 5 ] [ 5 size 10 sub ] ] - [ [ size 11 sub 5 ] [ 5 size 11 sub ] ] [ [ size 9 sub 4 ] [ 4 size 9 sub ] ] - [ [ size 10 sub 4 ] [ 4 size 10 sub ] ] [ [ size 11 sub 4 ] [ 4 size 11 sub ] ] - [ [ size 9 sub 3 ] [ 3 size 9 sub ] ] [ [ size 10 sub 3 ] [ 3 size 10 sub ] ] - [ [ size 11 sub 3 ] [ 3 size 11 sub ] ] [ [ size 9 sub 2 ] [ 2 size 9 sub ] ] - [ [ size 10 sub 2 ] [ 2 size 10 sub ] ] [ [ size 11 sub 2 ] [ 2 size 11 sub ] ] - [ [ size 9 sub 1 ] [ 1 size 9 sub ] ] [ [ size 10 sub 1 ] [ 1 size 10 sub ] ] - [ [ size 11 sub 1 ] [ 1 size 11 sub ] ] [ [ size 9 sub 0 ] [ 0 size 9 sub ] ] - [ [ size 10 sub 0 ] [ 0 size 10 sub ] ] [ [ size 11 sub 0 ] [ 0 size 11 sub ] ] - ] def - } { - /versionmap [] def - } ifelse - versionmap { - { {} forall qmv pixs exch 0 put } forall - } forall - - % Solitary dark module in full symbols - format (full) eq { - pixs 8 size 8 sub qmv 1 put - } if - - % Calculate the mask patterns - format (full) eq { - /maskfuncs [ - {add 2 mod} bind - {exch pop 2 mod} bind - {pop 3 mod} bind - {add 3 mod} bind - {2 idiv exch 3 idiv add 2 mod} bind - {mul dup 2 mod exch 3 mod add} bind - {mul dup 2 mod exch 3 mod add 2 mod} bind - {2 copy mul 3 mod 3 1 roll add 2 mod add 2 mod} bind - ] def - } { - /maskfuncs [ - {exch pop 2 mod} bind - {2 idiv exch 3 idiv add 2 mod} bind - {mul dup 2 mod exch 3 mod add 2 mod} bind - {2 copy mul 3 mod 3 1 roll add 2 mod add 2 mod} bind - ] def - } ifelse - /masks maskfuncs length array def - 0 1 masks length 1 sub { - /m exch def - /mask size size mul array def - 0 1 size 1 sub { - /j exch def - 0 1 size 1 sub { - /i exch def - i j maskfuncs m get exec 0 eq - pixs i j qmv get -1 eq and {1} {0} ifelse - mask i j qmv 3 -1 roll put - } for - } for - masks m mask put - } for - - % Walk the symbol placing the bitstream - /posx size 1 sub def - /posy size 1 sub def - /dir -1 def % -1 is upwards, 1 is downwards - /col 1 def % 0 is left bit, 1 is right bit - /num 0 def - { % loop - posx 0 lt {exit} if - pixs posx posy qmv get -1 eq { - cws num 8 idiv get 7 num 8 mod sub neg bitshift 1 and - pixs posx posy qmv 3 -1 roll put - /num num 1 add def - } if - col 1 eq { - /col 0 def - /posx posx 1 sub def - } { - /col 1 def - /posx posx 1 add def - /posy posy dir add def - posy 0 lt posy size ge or { % Turn around at top and bottom - /dir dir -1 mul def - /posy posy dir add def - /posx posx 2 sub def - % Hop over the timing pattern in full size symbols - format (full) eq posx 6 eq and {/posx posx 1 sub def} if - } if - } ifelse - } loop - - % Evaluate runlength encoded rows or columns in full symbols - /evalfulln1n3 { - /scrle exch def - % Detect runs of 5 or more like modules - /scr1 0 scrle { dup 5 ge {add 2 sub dup} if pop } forall def - % Detect 1:1:3:1:1 ratio next to 4 modules of whitespace - /scr3 0 def - 3 2 scrle length 3 sub { % Scan odd (dark) runs within bounds - /j exch def - scrle j get 3 mod 0 eq { % Multiple of 3 black modules - /fact scrle j get 3 idiv def - scrle j 2 sub 5 getinterval {fact eq} forall and exch pop and and { - j 3 eq j 4 add scrle length ge or { % At either extent of run - /scr3 scr3 40 add def - } { % Bounded by dark modules - scrle j 3 sub get 4 ge scrle j 3 add get 4 ge or { - /scr3 scr3 40 add def - } if - } ifelse - } if - } if - } for - scr1 scr3 - } bind def - - % Evaluation algorithm for full symbols - /evalfull { - /sym exch def - - /n1 0 def /n2 0 def /n3 0 def - /rle size 1 add array def - /lastpairs size array def - /thispairs size array def - /sizeadd1 size 1 add def - 0 1 size 1 sub { - /i exch def - - % Runlength encode (light, dark, light, ...) and evaluate each column - mark 0 0 - i size dup dup mul 1 sub { - sym exch get exch 1 index eq {exch 1 add exch} {1 exch} ifelse - } for - pop - rle 0 counttomark 2 sub getinterval astore - evalfulln1n3 n3 add /n3 exch def n1 add /n1 exch def - pop - - % Runlength encode (light, dark, light, ...) and evaluate each row - /symrow sym i size mul size getinterval def - mark 0 0 - symrow { - exch 1 index eq {exch 1 add exch} {1 exch} ifelse - } forall - pop - rle 0 counttomark 2 sub getinterval astore - evalfulln1n3 n3 add /n3 exch def n1 add /n1 exch def - pop - - % Count and score same coloured blocks - /lastpairs thispairs /thispairs lastpairs def def - symrow 0 get 1 eq {0} {1} ifelse - symrow {exch 1 index add exch} forall - pop - thispairs astore pop - i 0 gt { - mark - lastpairs aload pop thispairs aload pop - n2 size { exch sizeadd1 index add 3 and 0 eq {3 add} if } repeat - /n2 exch def - cleartomark - } if - - } for - - % Score dark/light imbalance - /dark 0 sym {add} forall def - /n4 dark 100 mul size dup mul div 50 sub abs 5 div cvi 10 mul def - - n1 n2 add n3 add n4 add - } bind def - - % Evaluation algorithm for micro symbols - /evalmicro { - /sym exch def - /dkrhs 0 def /dkbot 0 def - 1 1 size 1 sub { - /i exch def - /dkrhs dkrhs sym size 1 sub i qmv get add def - /dkbot dkbot sym i size 1 sub qmv get add def - } for - dkrhs dkbot le { - dkrhs 16 mul dkbot add neg - } { - dkbot 16 mul dkrhs add neg - } ifelse - } bind def - - % Evaluate the masked symbols to find the most suitable - /bestscore 999999999 def - 0 1 masks length 1 sub { - /m exch def - /masksym size size mul array def - 0 1 size size mul 1 sub { - /i exch def - masksym i pixs i get masks m get i get xor put - } for - format (full) eq { - masksym evalfull /score exch def - } { - masksym evalmicro /score exch def - } ifelse - score bestscore lt { - /bestsym masksym def - /bestmaskval m def - /bestscore score def - } if - } for - /pixs bestsym def - - % Add the format information - format (full) eq { - /fmtvals [ - 16#5412 16#5125 16#5e7c 16#5b4b 16#45f9 16#40ce 16#4f97 16#4aa0 - 16#77c4 16#72f3 16#7daa 16#789d 16#662f 16#6318 16#6c41 16#6976 - 16#1689 16#13be 16#1ce7 16#19d0 16#0762 16#0255 16#0d0c 16#083b - 16#355f 16#3068 16#3f31 16#3a06 16#24b4 16#2183 16#2eda 16#2bed - ] def - /ecid (MLHQ) eclevel search pop length exch pop exch pop def - /fmtval fmtvals ecid 3 bitshift bestmaskval add get def - } { - /fmtvals [ - 16#4445 16#4172 16#4e2b 16#4b1c 16#55ae 16#5099 16#5fc0 16#5af7 - 16#6793 16#62a4 16#6dfd 16#68ca 16#7678 16#734f 16#7c16 16#7921 - 16#06de 16#03e9 16#0cb0 16#0987 16#1735 16#1202 16#1d5b 16#186c - 16#2508 16#203f 16#2f66 16#2a51 16#34e3 16#31d4 16#3e8d 16#3bba - ] def - /symid [ [0] [1 2] [3 4] [5 6 7] ] size 11 sub 2 idiv get eclval get def - /fmtval fmtvals symid 2 bitshift bestmaskval add get def - } ifelse - 0 1 formatmap length 1 sub { - /i exch def - formatmap i get { - pixs exch {} forall qmv fmtval 14 i sub neg bitshift 1 and put - } forall - } for - - % Add the version information - size 45 ge { - /vervals [ - 16#07c94 16#085bc 16#09a99 16#0a4d3 16#0bbf6 16#0c762 16#0d847 - 16#0e60d 16#0f928 16#10b78 16#1145d 16#12a17 16#13532 16#149a6 - 16#15683 16#168c9 16#177ec 16#18ec4 16#191e1 16#1afab 16#1b08e - 16#1cc1a 16#1d33f 16#1ed75 16#1f250 16#209d5 16#216fd 16#228ba - 16#2379f 16#24b0b 16#2542e 16#26a64 16#27541 16#28c69 - ] def - /verval vervals size 17 sub 4 idiv 7 sub get def - 0 1 versionmap length 1 sub { - /i exch def - versionmap i get { - pixs exch {} forall qmv verval 17 i sub neg bitshift 1 and put - } forall - } for - } if - - % Return the arguments - << - /ren //renmatrix - /pixs pixs - /pixx size - /pixy size - /height size 2 mul 72 div - /width size 2 mul 72 div - /opt options - >> - - dontdraw not //renmatrix if - - end - -} bind def -/qrcode dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp qrcode 0.0 0 0 0 +%%BeginData: 286 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\"-P +j29RV8N3,N_LP!3 WD5*C2S @VV&,0 5?Y6O u"b #@<,jrA7Zm #F(^:/C6D8R +1Qk"OP#ZpnAUT_@04J@1Ch7K,@UX:eDe*FB@ZiNY@r,_"ASdA1F`)83FHSe604eX0AThX$+D,P +4D..OH"D2dmCm$r.NWDk&H]A,#I?ITn1OYEcEaa0=04f$2De*R"B9!(7@<[kjI?IQ@DI[TqBl7 +RD"*.goP!+.FD0'?!BlnD=@UX:eDe*FB1OXU'Ap%p+@ps=t+?Vb>DKTf-EbT#+4?P8j+BsXNLe +W\TL&ei?!<7cS6A>M]L&oPR![rd)N.qE;L')LO"9+#X9nif1L'<*^"q64j]nQc1L'S6C#e5TqB +ncsWL'mj5$h8r[dtS=FL(74<%n23a5)'Y8L([79'4ln4Kn^>1L)/!f(^Yp7:PKchL)[C'023Qn +La%X>Lh2;@Q%f:]L&h7.!@A5bL()ai%A&:aD2&QiL(G\d&GLnkm"Q.NL(gbF'Z#M=gg) +R1+BsX@LbOWZLi8"JOG3b@L&fPS!<\&W3/.HML&n?0!U5=?7"tb[L'#,E!saP_Ck`&!L'/lY"G +_^7aG'jnL'>5E"uM&=[Y>"qL'N]m#UP32Kn]mlL'ai6$>tS*onEj.L("BC%'50m=b[CsL(;Oa& +"-]V80D,m&VqWe3f$[iC5)_HL&dZs!6U#rl\5E_L&jr%!Hs1uX+gZ)L&r!B!a:<[U4ra7L''#^ +".+`EabBp@L'1J1"O)T(#)3;DL'?Cf"tbQ6NJ7Z2L'MFI#NgaHD2&>pL']kp$/C7B6&#`ML'qp +S$h7LF5!CW.CiF&rDKTf-EbT#+4?P8j+BsX>LbFQYLiS4MRYCg[L&g.d!>gIk:PJn.L&oeY!Z- +RmCPDn[L'%('"'1-YWeLWlL'3'^"Q>(=8;7;TL'BJh#,m7]4ba3]L'Ub5#d8sh6&#]uL'i'X$Q ++U+_1iA:L(+rR%FKn?ObOBJL(F$5&BJ-19d!Yr'Sn)l4c!9tHA2EgL&eN6!8WA1#)3.;L&l1H! +MbAMj+[UHL&tJ3!g&-.`mL&eoA!8WA1",6h +)L&k\:!I0>"WeLQ*L&r$C!^;>?KSBQBL'$Ll"#kr:HA2O>L'/*C"@e+KP_K>0L'9&]"dOfGgP, +o1L'FH.#5a,[983\SL'STM#_e!=qM#;u>q\_k>DNWB'Smui15J2O0AN>DNlI+G_n2:5EY>!/?4.RYCgX +L&g@j!=snc6&#DYL&n9.!Qp,u#_iCQL'!$_!mZN&(kr,rL'+-("7([E6\Y`-L'7=,"]pE^\V:: +_L'Cn;#/l6$0STh*L'SKJ#`OKDs+Ui0L'e$;$B'WGq1]96>q\np>DNcF)Mfl!5)<0oC5@1j!18 +K@["\S2L&h+*!?[$s983I^L&mg!!Q'QlpkAi(L&u=K!h+iFa+a[(L'(S5"-80=jb_WHoL'J\qU +:KL'&3G"%n:MJqaBAL'-%^"<3'u7>:qdL'5DK"Sl=G5!CW8@;]go+?Vb>9H[Pq$A]CP+G__-6& +8Ep?\il[!0)^5VhP2kL&g4f!="8Z)MS8XL&l"C!KDg7\qU7LL&qp@!^)2=C5)e_L'#bW!t^1h8 +qmG&L'+N3"6tUD.Y\(BL'4c9"SmcU6\Yc$L'?4a"t>92I>.sBL'JT%023QnL^8eJL`2'rLbsoR +LeEP0Li8"JK8'AqL&eK5!6g/thhD.1L&i$D!B,Z5=bZs-L&m`t!Od^`i._:EL&s)a!bR/gN.qD +@L'$.b!t'bb983OtL'+c:"6tUD,_cG)L'3lu"NZ<$%#+p`L'=&P02WirL^/_EL_PXbLa@j/Lc' +uTLern5Li%rrL&dKn!2"uG["\S#L&g.d!:tpG&;C37L&j>i!F1?[G_Q6cL&nf=!R?E#n:gu[L& +s#_!aLH]HA2L&L'#\U!q_3L(5;oVL')7H".P#Ib_?6#>q\_k>DNE<#`'"I'o3fb,`!h(1l+8M8 +r-K'@#/ZUG_Q3SL&dZs!3LtU^P2a8L&gOo!;M9L%Yb!(L&jAj!D8(ID2&(BL&mQo!Nq.XabBiY +L&qR6!\&j*:5/gUL'!-b!hk>M]nQUVL'%um+?ht35!G,c05YE5Ec5GrE-!-a4>1SpD.Ra%@j!l +r02*KmL]rSAL_kjl>q\np>DW<8#`'+L*aLEr+Bs[%M#W;2L_X2K80D,ms+p]2s+p\\+?htB@;K +mr@;^4)ATDKp+?Vb>9H[Pqs+gl8%Ytj*023QnM#W87L^T"O>q]%t>DW<8s+p]2%:(VX+Bs[%M# +W;2M#Ua'5!CW/H$!U?4?P8j+Bs[%M#W8;L_!cE9d!Yrs+p]2#D`gp02WirM#W;2M#W8;>q\_k> +DW<8s+p]2s'6a24tg\[DJEl.4?P8j+Bs[%M#W88L^@??9d!Yrs+p]2"Gd=h02WirM#W;2M#W87 +>q\_k>DW<8s+p]2s'6a24s3$QOu"b&DI[iuCi^^]4>1SpD.Ra%@u(+<@;Kmr@;^4)ATDKpL]K/ +1SpD.Ra%@kVD2@r?F+ATDKp04A[9BOPe$D.Ra%@kV +D2@ps1mBOPe$D.Ra%@kV;:FCd+:DI[.$FCd+@@;]go04f$2CLM*qBcoT'Ou"b.Bk29->E/h?0J +G5A">DMa0TH8i0eb;A">MSa0O9ht05YE6F!*S-024/D>E/]>s+p]2s'79P1*Be]!AKN70o5jcs +'79P1E]n^!\cE/e>0JJLh0JG5A"#)G`NWUsi0jTS9L]N;[H\_`d +V2,JA5*@U:Bk2:5P"7c#Ou"b$@ki(D3?VO^$A]"E#`&alOu"b$@kfZZD_a3n>DN]D$]#@M$=/f +N04SKI2frsp0HaSU%YtRM&;Ua#Ou"b$@r,^oF!*S-024/D>DNB;s+p]2s'79P1*BeW"Gd/9s+p +\\0245F>DNH="Gd2:"'mQS1a$"Y#)EG="c*:eL]N;4L^AEa!g9C9$BdT90OnTIFDj0fP":B9L] +N;MH\_`dV2,JA5*@U0@kfZZD_a5!P":BJL]N;[H\_`dV2,JA5*@U0@koubD_s.rP"7c#Ou"b$B +OPpu@;q5Y0JP==1c70M3&s8k6UX@47n?3D92&&T:Jand;cHat='/U/+=&6_.kNA,3g)9P@q]:k +G%#3.Lb+]HOu%moL]N;_H]g?uBOPpu@;qAnP"Us%@q]:kG%#3.L]`G6P)#3FI?I,SASu!qF_t] +1Bk)KCBl9(tOu"b0F`\a?DN\Ib$Bf4]"-QQ +/;O@`"HoUE0TnDY@Yb/M5*Dn.5*C1EBcq,G!KmJH1OYEdI?ITn3,`q]P!3WD5*C2S@VV&,05?Y +6Ou%NLAT)^5L]D1Q9RW'6Ou"b&DI[*kE+iZtF_t]1Bk)KCBl9(tOu"b0F`\a?DN\Ib$^,=^!g6 +H;!KmJHV33VfBnubP1GRsF!,=6Ap*@-!Jg`3s+p]2s+p]2s+p\\+C-*oNWj96@rcLJ!_kG+%>\JL@u*rcL]rS=Lgu +6N>p*@-!Jg`3!Jg`3s+p]2s+p\\+C-*oNWj96@rcLJ!_kJ,%u=\N@tju:>DNK>#`)uH@pL3]L] +N;3L]N;3M#W;2M#W;2>p*Dq>E/l(Bk)1%NWMp3L_5GPLgu/>^fuU#L^JqJLgs^5>DN<9!/LZ3! +/LZ3!/UZ2s'6aQ+Bsj/Ap%p+NWCkj'o6=T@tk!1>DNN?$A].I&R?M`L]N;3L]N;3L]N;3L]N;3 +>p*Dq>E/huF_klS!A]HKL_>MRL&kpkL^JqLL_bdd>p*@-!Jg`3!Jg`3!Jg`3!Jg_]+C-*oNW`s +:Ci#+41Pd'-(5QIT!]O>>%u;-[,`"!W+BsX&L]E53L]E54L]E54L]C^'>p*@3"D2dmClSNQL`q +QmLgu/A-X2B@La7d5Ld55g>DN<9!/L]4!/L]4!/Lc6!*p^Q+Bsj/Ap%p+NWD"n-&D +O2R0Si8U=C!%RL]N;3L]WA4L]WA6L]WA6>p*Dq>E/huF_klS!B,`_La%XbL';3oLa7dALgZ$X> +p*@-!f-i4"Gd&6"Gd&6"Gd%`+C-*oNW`s:Ci#+42i'&A(5O;l"s@-+.#:EMCk_qA>p*@-!f-i4 +"Gd&6!f-u8"Gd(a+C-*oNW`s:Ci#+43/B;F(l0Yr#EW/G0Sihc!/-(,S6[7AL]WA4L]WA6L]iM +8L]iM8>p*Dq>E/huF_klS!BGrnL`2(%L'\u,LcgK2L&dm$!5Mk_>DN?:!/L`5!f-u8"Gd2:"C3 +-U+Bsj/Ap%p+NWLphLcL82Lba\lcs);sL&cg[!5Op*Dq>E +/huF_klS!\lEc4bt/82MMX5>DQ+1!1&?>i._7<>p*@-"Gd&6!Jgl7"Gd2:",I4g+C-*oNW`s:C +i#+50f"PNL`hL7L(9;LLgYr;Y_E/]L&j,:+BsX'L]WA:L]WA8L^&Y?L]h!+>p*@3"D2dmClSQO +1PeJU,)AF;&>36`BSHN,L&iEO!FT1U>DNEp*Dq>E/huF_klS!\lQg9o'^D0SU +9g>D<-2L&g^t!GI2gY[&AUL]rS8L]rSL^T"D>p*Dq>E/huF_klS!\lTh;2?-H156S1>D +<->L&i-G!LSTBi*@I0L]rS8L^/_p*Dq>E/huF_klS!\lWiD<-VL +&j,c!PjEk'O;hcL]N;8L^Jq=L]N;BL]WAE>p*Dq>E/huF_klS!\lZj=bn,T3//D'>D<-bL&k2, +!VhBN9O/cFL]rS8L^Ak?L_5FDL]WAG>p*Dq>E/huF_klS!\l]k?&0PX3ee^Q>D<-rL&l+F![<@ +#MHq?/L]`G9L]`G@L_5FGL^AkK>p*Dq>E/huF_klS!\uHc@>H+`5)(6H>D<.9L&ms%!a(0Y]Nl +XaL]`G:L]`GBL_#:FL_#:K>p*Dq>E/huF_klS!\uKdAV_=^157&">D<.9L&nl?!ec:0mTgr>L] +iM:L_5FCL_5FIL_GRK>p*Dq>E/huF_klS!\uNeBo![`157/U>D<.UL&p(a!j[O_0O5f*L]WA;L +_5FCL^/_ILa%WT>p*Dq>E/huF_klS!\uQfD296h2MN]W>D<.gL&q((!q(dFKO#^)L]iM;L]iMD +L^T"KL_,@P>p*Dq>E/huF_klS!\uTgEJPTj2MNgu>Dp*Dq>E/huF_klS!\uWhFbh/r3efAb>DL^8eGL^/_OL_b +dU>p*Dq>E/huF_klS!\uZiH&*Mt3efLk>DL_GRIL`D3TL`qQW>p +*Dq>E/huF_klS!\u]jI>B)'5))'C>DL_bdKL^8eTL^](Z>p*Dq> +E/huF_klS!\u`i!.fqELba]I$X8>dL5#c^L'/EL"RKD:>DNB;$A\e?(Pi3M+,C;\+'g!p+Bsj/ +Ap%p+NWLsrL&cp`*f)_/5Tp*@3"D2d +mClSQQ0STRaL`2(+L."[=L&o/G""]00Y_E=S>p*@-"c*MA'8R!O%u;*Z(Pir7+C-*oNW`s:Ci# ++51GOUaNJJX33/0tn>D<1:L'(t@"U]tfqHY4JL^f.BL]WAQLan2]L_kje>p*Dq>E/huF_klS!] +)Td!0N']LcgDd$X8>dre:NFL':&$##nkN>DNlI!/Lu<(PiES,D["h,@)Et+Bsj/Ap%p+NWM!mL +&dKp*f)k3;4CdE!ZZpse:n."L'Fed+BsX6L]N;AL_Y^dL_GRPLb;sU>p*@3"D2dmClSQQ1kl!u +La%X=L/prOL&sDj":U"gqM#4\>p*@-%>Y4E%YtpW/;OOe4, +C2MPAm>D<2?L'/oZ"u_2@@U1*\L^](EL^](XLaRugL_bdq>p*Dq>E/huF_klS!])`h!252cLba +]kcs)5+=G?rdL'E`o#J==b>DNK>%Yt=F,)@k-$A\b>5[>L<+Bsj/Ap%p+NWM!qL&e'+*/HM-A) +LRG!d9;$["\eML'TVA+BsX6L]iMSL^o4qL^JqTLb;sU>p*@3"D2dmClSQQ3/.F4L`hL7L1q3'L +'!To"RLjJ7"tuK>p*@-"Gd\H%>Z-_0Sg3p.Yo3Q+C-*oNW`s:Ci#+51HC0iXb[mO2MQ*W>D<4+ +L'8iW#G-YV#$i?UL_PXJLa\&aLb"8sL^Jr*>p*Dq>E/huF_klS!]2Tc!3q>$LcU93cs)5+mY1m +ML'RL.$%?/&>DNrK#)EnJ+,D+s,)?qh4^B19+C1-d04eX0G%#3I"ADNe87c:IAThX$P)YWIP%' +S`F"d2NA1G@;L!rOu%/nH=_m?P!*l#H=_mCP!+tKHS98H +GB4mE@sE1 G<< L@PK! BL^0) 9A RfP "@; L`$P +&-:SOu"b&@q%29D 28F[9 4_ ULG%# 3C!g 7A U!K mJH99 M(a Deid, +EVX +HAWei]DfT]'FB4>RsF-:!CD/Ws J:jXj 6CL MK2 Am oL sAW eit P#Q"&@ PN ]=P!*A d@P +Wc>P!+tKHS9;Q@< iu-@ ;L! rO u% NL< ,ZP \H$ b]>I +?IP_Bcq,G!KmJH1 OYEt 0 4o -C D.. N/A o_a1 Ou"b7 +ATDj+Df-\@ATDjT 1G<9KE +0r # @s; u: ARf1 (+D #%l16M[$;N `ghARf[g+Dt +\5F!,%(@PK!:@q% 3V!Kp> k@r P n?WK K%jF CfK 0F!*S-0240 ]"#)D_0243^ +"Y_Va0JG.S1QD\o 0JG170 JG. S1l_ kr0J G17 0JG175!G,c 06CcGD'3q3E +c#k?G%G]8Bl@mP@ !d!,E c#k? G%G]8 Bl@m P97 ;/I">DM`0R ]*aOu"b5ATD +W1FCfK0L]Ct&De' u-F(\ rrFE< USP,W P7E c$tKL]W_WP #-Lg5(/SnP' +)p]Ou$rrB4>RsF- :!SATDX N@ZgbT V33fo !,Z di@VKq*P'N 3MD0'?!BlnE +Z@WZ1%D3B/tD0'?!BlnEZ5*@]TE+*9"A8Q6qP,4L]V%)@s9&0P,X6DN<7!<7D/3/@X!Cm +$c4!DN;k@rPn(L]DjdK3aWrL]E5 +3ARf[gL]N[Oo]'2AS,Oq+D#&%@N]EKWJCSGnE+4u(I?G)'1G<9KGB749ARf1(+D#%l16M[$$'I(tAR +fq*@N]5l@PK!:@q%3V!KmbP1Pc$e!G,bM0o,jnWI$:4P!5$bA7Kh)@N]A-@s;u:BcpqrE+4uHA +7KRfP"_$`ARfq*@N]A-A7Kh)@N]BJ96,)`De*F#P'DD<8;I8%!G,bM15GsoWI$:4P!5$bA7Kh) +@N]5l@PK!>Oo]':F!,%(@PK!9@rPn?ChY#&@rPn5!KmJHCm"g0@rPn5!KmJH9TjX3@sP,Wd]C6CcD1LkWM+CfUL]NY>Ou%NL8:?Xl +Eaia)L]ET7HS9>HA0>B+F-:!g!KmJH$'I)`@:Y/o@s@s;u:Bp),F&!@'O"Hj +:YG[kr=+DDs.GB4m@L]NY>P"UW/Oq3?ZOp#9=F!,1[99O=YG^Y`G@s;u:DI[m3L]N[<@s;u:DI +[m3L]N[5F(or3P&,K$s*^&_?'6usEG]lG+EM7CA +Wgkm!I^+@Ou"b'E+*i2>9I.+!Jgc4!Jgc4!Jgc4!Jg_]+BsX&L]E52L]E52L]E53L]C^'>DN<9 +!/LZ3!Jgc4!/LZ3!*p^OL]N;3L]N;4L]N;3L]N;3>p*@-!Jg`3!Jgc4!Jg`3!Jg_]+BsX&L]E5 +2L]E52L]E53L]C^'>DN<9!Jgc4!Jgc4!Jgc4!*p^OL]E52L]E52L]E52L]E52>p*F91Pc$e!G6 +:ZFHU*h!KsF/06r^EOu%moL]M+,@<@;*P"UsIL]N[5G`o%^!KsF-+E;7A+D,S%P +'Cq[G]P!P+EM7CAKZ8]WJCS9I.+!Jgc4!Jgc4 +!F6gPL]N;3L]E52L]Ld(>DN<9!/LZ3!/LY]+BsX&L]E52L]E53>p*@-!Jgc4!Jgc4!F6gROu"b +1F`_&.B5VZsFF,Z[H'1@S1G<]lP!5$bL]E53L]i&XE+4toOu%moL]N;7HS9>HP!5$bE+sQ<+E2 +QJE++n1E-WRF@Zgb3D0@%1ChIX)@<116SVXBmO?H%?d];056S5Ou$g."E8L*@;KRoE+*jE"DJutF`_&.B5VZsFFB116SVXBmO?H$'M9706iXDOu$NfE&*4NP,Vl2E&/VFF)WmtWH2d"AV^YUWI$:DP!5$b +GT_8SE-682ChIX)@!g7;]G]7AAF,1$7+E;7A+DHW4Oo^@?P%p/)I?I-LH\_r`!HVt$AV^AMWI$ +:4P!5$bE+sQ<+DHW3EG]kABnueQ!Jgf?C6Eg\Bm=]T!,3QqD0@%9L]NY>L]W`SP'DD<8:?Y$Ao +D^,@<@M4Ap%p+P!+.FAoD^,@9I.+!/Lnd+BsX-F(or3L]N[<>p*Dq>9I.+!Jh"e+ +BsX-F(or3L]Wa=>p*Dq>9I.+!f.+f+BsX-F(or3L]`g>>p*Dq>9I.+",I4g+BsX-F(or3L]im? +>p*Dq>9I.+"Gd=h+BsX-F(or3L]rs@>p*Dq>9I.+"c*Fi+BsX-F(or3L^'$A>p*Dq>9I.+#D`X +k+BsX-F(or3L^0*B>p*Dq>9I.+#`&al+Bot0BmO?H#a20C#[JQY+BosmL^8eA>p*>oF(or3L^0 +*BL^79/>p*>o>DNQ@"^N6T+EM7CAV^PRWJCgc+C-*o+BsX-L]h!+>9J!$H=_m9P,X6C>p*Dq>9 +I.+#`&Rg+Bot0BmO?H"Hoa?#[JQY+BosmL^8e<>p*>oF(or3L]`g>L^79/>p*>o>DNQ@!F6gP+ +EM7CAV^DNWJCgc+C-*o+BsX-L]C^'>9J!$H=_m5P,X6C>p*Dq?'7!lHS8uLEc#6,D..B+>9I,m +>DN<9#[JQY+BosmL]WA<>p*Dq>9I.+",I4g+C-*o+BsX)L^79/>p*>o>DNH=#[JQY+BosmL^&Y +@>p*Dq>9I.+#D`Xk+C-*o+BsX-L^79/>p*>o>DNQ@#@/HX+BosmL^8e@>p*Dq>9I.+#`&Xi+C- +*o+BsX-L]h!+>p*>o>DNQ@"'m$T+BosmL^8e<>p*Dq>9I.+#`&Le+C-*qOu%NLp*>o>9J!$H=_m>P,X6@>p*@-"`nC(AV^\VWEgWP+Bosm+EM7C +AV^_WWJC^`+BsX*F(or3L^TBF>p*Dq>9I,mF(or3L^B6DL]h!+>DNE'BmO?H$'M8n+C-*o+Bot +0BmO?H$BhBE"C3-SL]hd5H=_m>P,V_0>p*>o>9J!$H=_m?P,X6?>p*@-"ES:'AV^_WWEgWP+Bo +sm+EM7CAV^YUWJCX^+BsX(F(or3L^B6D>p*Dq>9I,mF(or3L^KDNB&BmO?H$BhAo+C +-*o+Bot0BmO?H$^.KF"'m$RL]_^4H=_m?P,V_0>p*>o>9J!$H=_m=P,X6=>p*@-!cr(%AV^YUW +EgWP+Bosm+EM7CAV^\VWJCU]+BsX'F(or3L^Kp*Dq>9I,mF(or3L^TBFL]Uj)>DN?%BmO?H +$^.Jp+C-*o+Bot0BmO?H$'M9D!F6gPL]MR2H=_m=P,V_0>p*>o>9J!$H=_m>P,X6<>p*@-!HVt +$AV^\VWEgWP+Bosm+EM7CAV^_WWJCR\+BsX&F(or3L^TBF>p*Dq>9I,mF(or3L^B6DL]C^'>DN +9#BmO?H$'M8n+C-*o+Bot0BmO?H$BhBE!*p^OL]DL1H=_m>P,V_0>p*>o>9J!$H=_m?P,X6;>p +*@-!-;k#AV^_WWEgWP+C1-dI=!VjATDj+Df0E#E$/@-?'7!lP#Z[:EcYr5DJ`g$H[C*fP"BY1F +s(aD..L$Ap&!$F-:!q$'I*# +!/LYm@<64*P%'4JP,Wd]D3@)G1GBmO>5F(or3P&-9fOu%moL]MR2H=_m5P,Wd]C6Cc +D1Pc$e!HVt$AV^AMWI$:4P!5$bBcq.5D..L$Ap&!$F!,=_99MMq!0TKaBm=\ABcq.5EG]l^98N +V24d#qpL]MpNL]DjdDet41P!+. +F@rH1>!0T,kE,TfB+E27?G_cB`WKK&cHS8lICkr+T1G<]cF*JgHDf^/Z!KmJH1G<]cF*SmIDf^ +1HA8-(I!Ko6XDf^2[!0Ur5Df^1HF(or3P"LmXHS8oDEZen,EesaYCm$S-E,TfC+E27?Gp$X3Ef +pHd1G<]cF*JgHDf^/Z!g9OG1M1QGD..OH"D2dmCm$r#Df^/Z#*M-4"FDe@Df^.GE,TfBL]N[HS9,s5*@^C@rcBs+DR'4L]`f +TL]ET$HS8u>@rri7@rcBs+DR'4L]`f"-Pf^L]ikAF(96,AWgMc8s44A06:WD1E^aKE\iM"Oo^_%I=$$FEbo;0C5;tTWKKo1"H +lAu@rcBs+DQ]7Oo^_=L]il5P&bn&F(95H+EM%51PdHB!Ko6eP#Qjm +OpR:-05P'Ou%moL]MR2H=_m5P,Wd]Bp(ZC1MpQ@CPVtH!,3QsBmO?R30H7aCkr+TWI&]3D3@)G99MJp!Kp +QJ4aW>UL]NY>P!4;@L]NZ&I?ITYP":aYEbo0p2PjDD@;L)i+QYWKKr<$Y=KiCh@g+Ci1tF +1E^QkOo[4R1Qjqb1N"q1!AA=FP!5$bP'&Eo@<6O0@;0b'+EV:2F)YQ%EcWmUBPDO,@;0b'+DbJ +-FDtZ&Ec[C"Ou%0)D/sQ=L]ET2L]NZ%H\_ZMH\_]NP#ZRKD/sQ=H]gRK!KpQJ!KoWpP"CgZFD, +B0E+*I$F-6ooF_QX3P#-LB@<--+CghC,E+*I$F-6TfF`_;2F)YQ%Ec[BFP'(Xt+EM7CAUBS(F( +or3@:Wn'P$!kJL]`eCL]ET$H\_ce!I^,1I?K49DDIA=Ou&77I?IQXP"76:@<-.>!-XmFHQZfDLHkBCLV4(L_ +,_cA8?4!F-6QeDLI[JI?G)'1G<3KF*)J5DfTEB4.=:kOu%moL]M@$F),i[@Yb&JWI$:8P!5$b0 +5Y-=CNFc<+EM7CAKZ&.H=`7UOpR:-L]E53F(or3+EM7CAWgkc!KsF/056S5Ou$r`F),iBD'3O8 +E+sQ<+DI!3D..L$F!,=_950P^P/3<+I?I-5DfT]'FH-K9F_klW4aV$SF),iBD'3D5@;KOuChtb +G@rHC!P!5$bI=#g>F),iBD'3D5@;Kdp@rcK@F(9-/AWf6?1OYEdF(9-/AKYGnF*)J5DfTEPApZ +1?ATMs7H#4[@@<64*H#8^#04JL6FDYH-CNa-&+Dm8t04JL6FE:r1Eb-A7@rHC!Ou%NL<.0p#05 +tWMF!+q'F*)JKD3?\eDfT]'FH-K9F_klW4aShoD00r0Ci^_'L/\e?;'gs'I"kiuL.1om5gG*[Q +\J,*L3LRjEq>$6WePbhL1W)n@i0r:6&')sL),W#'>B2@kCsl$L'M1B!`asa%#,$LL,E=m0PH2* +0nq^nL*X-\+bPM%g4h-F?'6usARfFbNW`'M85Wr.Ch7d$Cm'd@Fcp3s5*C&O5*C&O1GN%q9*kFDYH-CNa-&Oo^_=Ou%N504o'CG%#3.+BsRg7>=*KL/'7R9,r +[dY(fc@L0q`N>5*baPD3PBL2HmDBZc'QG_U98L3sbkGp.nHhM)-sL((;@$&=6O222_FL)jKQ(i +4pQ#_jHdL+d.n.T(pWj+];9I.+!*p^OL]N;5>p*@-",I(c+BsX*L +^&Y?>p*DqF(or3L^TBFL]W`;P"T@rCj'6'P"Uro04o'CG%#20Ao2X5@;L!-F*VV:A;C;M%q9*k +FDYH-CNa-&Oo^_=Ou%NLD@ +NiKE)"+]S$7bR[Jg/!2S(s!!'Y)KE)"m@Y=^]fLLSp!9O`D!!)gCKE)#\G_?%t'O?@l!@en=!! ++r4KE)$EVM"pMF"_KHG^(?PBmO>DE+sQB+EM7CAM7_.BkM+$+EM7CAV^DNCk +tWF2D98gA9;K-F(or3L]W`ULe*[e05kfO+E)4@Bl@m1+?ht3A8c@-A9)+&P&N'-Eb0-*@ +% uk.co.terryburton.bwipp/qrcode 0.0 0 +%%EndData +%%EndResource % --END ENCODER qrcode-- % --BEGIN ENCODER maxicode-- +% --REQUIRES preamble raiseerror renmaximatrix-- % --DESC: MaxiCode % --EXAM: [)>^03001^02996152382802^029840^029001^0291Z00004951^029UPSN^02906X610^029159^0291234567^0291/1^029^029Y^029634 ALPHA DR^029PITTSBURGH^029PA^029^004 % --EXOP: mode=2 parse % --RNDR: renmaximatrix -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renmaximatrix dup /uk.co.terryburton.bwipp findresource put -begin -/maxicode { - - 20 dict begin - - /options exch def % We are given an option string - /barcode exch def % We are given a barcode string - - /dontdraw false def - /mode -1 def - /sam -1 def - /parse false def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - /mode mode cvi def - /sam sam cvi def - - % Parse ordinals of the form ^NNN to ASCII - parse { - /msg barcode length string def - /j 0 def - barcode - { % loop - (^) search { - dup msg exch j exch putinterval - length j add 1 add /j exch def - pop - dup 0 3 getinterval cvi msg exch j 1 sub exch put - dup length 3 sub 3 exch getinterval - } { - dup msg exch j exch putinterval - length j add /j exch def - /barcode msg 0 j getinterval def - exit - } ifelse - } loop - } if - - /msg barcode def - /msglen msg length def - - % Special message handling for modes 2 and 3 - mode 2 eq mode 3 eq or { - - % Normalise messages that begin with a field identifier [)>RS01GSyy - msg 0 7 getinterval <5b293e1e30311d> eq { - /fid msg 0 9 getinterval def - /msg msg 9 msglen 9 sub getinterval def - } { - /fid () def - } ifelse - - % Read the postcode, country code and service code fields seperated by GS - msg <1d> search pop /pcode exch def - pop <1d> search pop /ccode exch def - pop <1d> search pop /scode exch def - pop /msg exch def - - % Prepend the field identifier - msg length fid length add string dup - 0 fid putinterval dup - fid length msg putinterval - /msg exch def - /msglen msg length def - - } if - - % Special function characters - /eci -1 def /pad -2 def /ns -3 def - /la -4 def /lb -5 def - /sa -6 def /sb -7 def /sc -8 def /sd -9 def /se -10 def - /sa2 -11 def /sa3 -12 def - /lkc -13 def /lkd -14 def /lke -15 def - /pd2 -16 def /pd3 -17 def - - % Character maps for each state - /charmaps [ - % A B C D E - [ 13 (`) 192 224 0 ] % 0 - [ (A) (a) 193 225 1 ] % 1 - [ (B) (b) 194 226 2 ] % 2 - [ (C) (c) 195 227 3 ] % 3 - [ (D) (d) 196 228 4 ] % 4 - [ (E) (e) 197 229 5 ] % 5 - [ (F) (f) 198 230 6 ] % 6 - [ (G) (g) 199 231 7 ] % 7 - [ (H) (h) 200 232 8 ] % 8 - [ (I) (i) 201 233 9 ] % 9 - [ (J) (j) 202 234 10 ] % 10 - [ (K) (k) 203 235 11 ] % 11 - [ (L) (l) 204 236 12 ] % 12 - [ (M) (m) 205 237 13 ] % 13 - [ (N) (n) 206 238 14 ] % 14 - [ (O) (o) 207 239 15 ] % 15 - [ (P) (p) 208 240 16 ] % 16 - [ (Q) (q) 209 241 17 ] % 17 - [ (R) (r) 210 242 18 ] % 18 - [ (S) (s) 211 243 19 ] % 19 - [ (T) (t) 212 244 20 ] % 20 - [ (U) (u) 213 245 21 ] % 21 - [ (V) (v) 214 246 22 ] % 22 - [ (W) (w) 215 247 23 ] % 23 - [ (X) (x) 216 248 24 ] % 24 - [ (Y) (y) 217 249 25 ] % 25 - [ (Z) (z) 218 250 26 ] % 26 - [ eci eci eci eci eci ] % 27 - [ 28 28 28 28 pad ] % 28 - [ 29 29 29 29 pad ] % 29 - [ 30 30 30 30 27 ] % 30 - [ ns ns ns ns ns ] % 31 - [ ( ) ({) 219 251 28 ] % 32 - [ pad pad 220 252 29 ] % 33 - [ (") (}) 221 253 30 ] % 34 - [ (#) (~) 222 254 31 ] % 35 - [ ($) 127 223 255 159 ] % 36 - [ (%) (;) 170 161 160 ] % 37 - [ (&) (<) 172 168 162 ] % 38 - [ (') (=) 177 171 163 ] % 39 - [ 40 (>) 178 175 164 ] % 40 - [ 41 (?) 179 176 165 ] % 41 - [ (*) ([) 181 180 166 ] % 42 - [ (+) 92 185 183 167 ] % 43 - [ (,) (]) 186 184 169 ] % 44 - [ (-) (^) 188 187 173 ] % 45 - [ (.) (_) 189 191 174 ] % 46 - [ (/) ( ) 190 138 182 ] % 47 - [ (0) (,) 128 139 149 ] % 48 - [ (1) (.) 129 140 150 ] % 49 - [ (2) (/) 130 141 151 ] % 50 - [ (3) (:) 131 142 152 ] % 51 - [ (4) (@) 132 143 153 ] % 52 - [ (5) (!) 133 144 154 ] % 53 - [ (6) (|) 134 145 155 ] % 54 - [ (7) pd2 135 146 156 ] % 55 - [ (8) sa2 136 147 157 ] % 56 - [ (9) sa3 137 148 158 ] % 57 - [ (:) pd3 la la la ] % 58 - [ sb sa ( ) ( ) ( ) ] % 59 - [ sc sc lkc sc sc ] % 60 - [ sd sd sd lkd sd ] % 61 - [ se se se se lke ] % 62 - [ lb la lb lb lb ] % 63 - ] def - - % Invert charmaps to give character to value maps for each state - /charvals [ 64 dict 64 dict 64 dict 64 dict 64 dict ] def - 0 1 charmaps length 1 sub { - /i exch def - /encs charmaps i get def - 0 1 4 { - /j exch def - encs j get dup type /stringtype eq {0 get} if % convert string to ASCII if required - charvals j get exch i put - } for - } for - /seta charvals 0 get def - /setb charvals 1 get def - /setc charvals 2 get def - /setd charvals 3 get def - /sete charvals 4 get def - - % Compute numeric runlengths - /nseq [ msglen 1 add {0} repeat ] def - msglen 1 sub -1 0 { - /i exch def - msg i get dup 48 ge exch 57 le and { - nseq i nseq i 1 add get 1 add put - } { - nseq i 0 put - } ifelse - } for - /nseq nseq 0 msglen getinterval def - - % Encode the message from ASCII to codewords - /prefixinset { - 0 { - 2 copy exch length ge {exit} if - 2 copy get 3 index exch known {1 add} {exit} ifelse - } loop - exch pop exch pop - } bind def - - /enc { - exch get out exch j exch put - /j j 1 add def - } bind def - - /out 144 array def - /i 0 def /j 0 def /cset (seta) def - { % loop - % Exit when no characters remain latching back to A if necessary - i msglen eq { - cset (seta) ne cset (setb) ne and { - la cset load enc - /cset (seta) def - } if - exit - } if - { % not a loop but common exit point - - % If 9 numerals available then use NS - nseq i get 9 ge { - msg i 9 getinterval cvi 4 { dup 63 and exch -6 bitshift } repeat cset load ns get - 0 2 10 {index} for 6 array astore 7 1 roll 6 {pop} repeat - out exch j exch putinterval - /i i 9 add def - /j j 6 add def - exit - } if - - % Read next three characters - /char1 msg i get def - /char2 i 1 add msglen lt {msg i 1 add get} {-99} ifelse def - /char3 i 2 add msglen lt {msg i 2 add get} {-99} ifelse def - - % If current mode is sufficient then directly encode - cset load char1 known { - char1 cset load enc - /i i 1 add def - exit - } if - - % For switching from A to B - cset (seta) eq setb char1 known and { - setb char2 known { - lb seta enc - /cset (setb) def - } { - sb seta enc - char1 setb enc - /i i 1 add def - } ifelse - exit - } if - - % For switching from B to A encode according to length of prefix - cset (setb) eq seta char1 known and { - /p seta msg i 4 msglen i sub 2 copy gt {exch} if pop getinterval prefixinset def - p 1 eq { - sa setb enc - char1 seta enc - /i i 1 add def - } if - p 2 eq { - sa2 setb enc - char1 seta enc - char2 seta enc - /i i 2 add def - } if - p 3 eq { - sa3 setb enc - char1 seta enc - char2 seta enc - char3 seta enc - /i i 3 add def - } if - p 4 ge { - la setb enc - /cset (seta) def - } if - exit - } if - - % If character is in A or B then directly latch - seta char1 known { - la cset load enc - /cset (seta) def - exit - } if - setb char1 known { - lb cset load enc - /cset (setb) def - exit - } if - - % Determine which one of sets C, D or E the character is in - setc char1 known {/setx (setc) def /sx sc def /lkx lkc def} if - setd char1 known {/setx (setd) def /sx sd def /lkx lkd def} if - sete char1 known {/setx (sete) def /sx se def /lkx lke def} if - - % Encode according to the length of the prefix - /p setx load msg i 4 msglen i sub 2 copy gt {exch} if pop getinterval prefixinset def - p 1 eq { - sx cset load enc - char1 setx load enc - /i i 1 add def - } if - p 2 eq { - sx cset load enc - char1 setx load enc - sx cset load enc - char2 setx load enc - /i i 2 add def - } if - p 3 eq { - sx cset load enc - char1 setx load enc - sx cset load enc - char2 setx load enc - sx cset load enc - char3 setx load enc - /i i 3 add def - } if - p 4 ge { - sx cset load enc - lkx setx load enc - /cset setx def - } if - - exit - } loop % out - } loop - /encmsg out 0 j getinterval def - /padval cset load pad get def - - % Prefix the encoded message with the structured append insert - /sami [] def - sam -1 ne { - /sami 2 array def - sami 0 seta pad get put - sami 1 sam 10 idiv 1 sub 8 mul sam 10 mod 1 sub add put - } if - /encmsg [ sami aload pop encmsg aload pop ] def - - % Derive the primary and secondary codewords for modes 2 and 3 - mode 2 eq mode 3 eq or { - - % Calculate the fixed-width binary values for the mode, postcode, country code and service - /mdb (0000) 4 string copy dup mode cvi 2 4 string cvrs dup length 4 exch sub exch putinterval def - /ccb (0000000000) 10 string copy dup ccode cvi 2 10 string cvrs dup length 10 exch sub exch putinterval def - /scb (0000000000) 10 string copy dup scode cvi 2 10 string cvrs dup length 10 exch sub exch putinterval def - /pcb (000000000000000000000000000000000000) 36 string copy def - mode 2 eq { - % For numeric postcode, first six bits represent length and remaining 30 bits the value - pcb pcode length 2 6 string cvrs dup length 6 exch sub exch putinterval - pcb pcode cvi 2 30 string cvrs dup length 36 exch sub exch putinterval - } { % mode=3 - % For alphanumeric postcode, trim or pad with spaces to 6 chars and encode to binary - /pccw [ - ( ) 6 string copy dup 0 pcode length 6 gt {pcode 0 6 getinterval} {pcode} ifelse putinterval - {seta exch get} forall - ] def - 0 1 5 { - /i exch def - pcb pccw i get 2 6 string cvrs dup length 6 i mul 6 add exch sub exch putinterval - } for - } ifelse - - % Convolute the binary values into the structured carrier message - /scm 60 string def - scm 2 mdb putinterval - scm 38 pcb 0 4 getinterval putinterval - scm 30 pcb 4 6 getinterval putinterval - scm 24 pcb 10 6 getinterval putinterval - scm 18 pcb 16 6 getinterval putinterval - scm 12 pcb 22 6 getinterval putinterval - scm 6 pcb 28 6 getinterval putinterval - scm 0 pcb 34 2 getinterval putinterval - scm 52 ccb 0 2 getinterval putinterval - scm 42 ccb 2 6 getinterval putinterval - scm 36 ccb 8 2 getinterval putinterval - scm 54 scb 0 6 getinterval putinterval - scm 48 scb 6 4 getinterval putinterval - - % Evaluate the structured carrier message as codewords - /pri [ 0 0 0 0 0 0 0 0 0 0 ] def - 0 1 59 { - /i exch def - /ps i 6 idiv def - /ep 2 5 i 6 mod sub exp cvi scm i get 48 sub mul def - pri ps pri ps get ep add put - } for - - % Pad the encoded message into the secondary component - /sec [ 84 {padval} repeat ] def - sec 0 encmsg putinterval - - } if - - % Derive the primary and secondary codewords for modes 4, 5 and 6 - mode 4 eq mode 5 eq or mode 6 eq or mode -1 eq or { - - % If mode isn't specified then use EEC if message fits, otherwise SEC - mode -1 eq { - /mode encmsg length 77 le {5} {4} ifelse def - } if - - % First symbol is the mode and the remainder are the padded message - /cws [ mode 5 eq {78} {94} ifelse {padval} repeat ] def - cws 0 mode put - cws 1 encmsg putinterval - - % Fit the message into the primary and secondary components - /pri cws 0 10 getinterval def - /sec cws 10 cws length 10 sub getinterval def - - } if - - % Calculate the log and anti-log tables - /rsalog [ 1 63 { dup 2 mul dup 64 ge {67 xor} if } repeat ] def - /rslog 64 array def - 1 1 63 {dup rsalog exch get exch rslog 3 1 roll put} for - - % Function to calculate the product in the field - /rsprod { - 2 copy 0 ne exch 0 ne and { - rslog exch get exch rslog exch get add 63 mod rsalog exch get - } { - pop pop 0 - } ifelse - } bind def - - % Generate error correction codewords - /rscodes { - - /rsnum exch def - /cwb exch def - - % Generate the coefficients - /coeffs [ 1 rsnum {0} repeat ] def - 1 1 rsnum { - /i exch def - coeffs i coeffs i 1 sub get put - i 1 sub -1 1 { - /j exch def - coeffs j coeffs j 1 sub get coeffs j get rsalog i get rsprod xor put - } for - coeffs 0 coeffs 0 get rsalog i get rsprod put - } for - /coeffs coeffs 0 coeffs length 1 sub getinterval def - - % Calculate the error correction codewords - /ecb [ rsnum {0} repeat ] def - 0 1 cwb length 1 sub { - /t exch cwb exch get ecb 0 get xor def - ecb length 1 sub -1 0 { - /i exch def - /p ecb length i sub 1 sub def - ecb p t coeffs i get rsprod put - i 0 gt { ecb p ecb p 1 add get ecb p get xor put } if - } for - } for - - ecb - - } bind def - - % Split secondary codeword into odd and even elements - /seco [ 0 2 sec length 1 sub { sec exch get } for ] def - /sece [ 1 2 sec length 1 sub { sec exch get } for ] def - - % Calculate the parity codewords for secondary codeword parts based on mode - /scodes sec length 84 eq {20} {28} ifelse def % SEC/EEC mode - /secochk seco scodes rscodes def - /secechk sece scodes rscodes def - - % Recompose the secondary parity codewords - /secchk [ 0 1 scodes 1 sub { dup secochk exch get exch secechk exch get } for ] def - - % Concatinate the data into final codewords - /codewords [ - pri aload pop - pri 10 rscodes aload pop - sec aload pop - secchk aload pop - ] def - - % Convert the codewords into module bits - /mods [ 864 {0} repeat ] def - 0 1 143 { - /i exch def - /cw [ codewords i get 2 6 string cvrs {48 sub} forall ] def - mods 6 i mul 6 cw length sub add cw putinterval - } for - - % Maps modules to pixels in the grid - /modmap [ - 469 529 286 316 347 346 673 672 703 702 647 676 283 282 313 312 370 610 618 379 - 378 409 408 439 705 704 559 589 588 619 458 518 640 701 675 674 285 284 315 314 - 310 340 531 289 288 319 349 348 456 486 517 516 471 470 369 368 399 398 429 428 - 549 548 579 578 609 608 649 648 679 678 709 708 639 638 669 668 699 698 279 278 - 309 308 339 338 381 380 411 410 441 440 561 560 591 590 621 620 547 546 577 576 - 607 606 367 366 397 396 427 426 291 290 321 320 351 350 651 650 681 680 711 710 - 1 0 31 30 61 60 3 2 33 32 63 62 5 4 35 34 65 64 7 6 - 37 36 67 66 9 8 39 38 69 68 11 10 41 40 71 70 13 12 43 42 - 73 72 15 14 45 44 75 74 17 16 47 46 77 76 19 18 49 48 79 78 - 21 20 51 50 81 80 23 22 53 52 83 82 25 24 55 54 85 84 27 26 - 57 56 87 86 117 116 147 146 177 176 115 114 145 144 175 174 113 112 143 142 - 173 172 111 110 141 140 171 170 109 108 139 138 169 168 107 106 137 136 167 166 - 105 104 135 134 165 164 103 102 133 132 163 162 101 100 131 130 161 160 99 98 - 129 128 159 158 97 96 127 126 157 156 95 94 125 124 155 154 93 92 123 122 - 153 152 91 90 121 120 151 150 181 180 211 210 241 240 183 182 213 212 243 242 - 185 184 215 214 245 244 187 186 217 216 247 246 189 188 219 218 249 248 191 190 - 221 220 251 250 193 192 223 222 253 252 195 194 225 224 255 254 197 196 227 226 - 257 256 199 198 229 228 259 258 201 200 231 230 261 260 203 202 233 232 263 262 - 205 204 235 234 265 264 207 206 237 236 267 266 297 296 327 326 357 356 295 294 - 325 324 355 354 293 292 323 322 353 352 277 276 307 306 337 336 275 274 305 304 - 335 334 273 272 303 302 333 332 271 270 301 300 331 330 361 360 391 390 421 420 - 363 362 393 392 423 422 365 364 395 394 425 424 383 382 413 412 443 442 385 384 - 415 414 445 444 387 386 417 416 447 446 477 476 507 506 537 536 475 474 505 504 - 535 534 473 472 503 502 533 532 455 454 485 484 515 514 453 452 483 482 513 512 - 451 450 481 480 511 510 541 540 571 570 601 600 543 542 573 572 603 602 545 544 - 575 574 605 604 563 562 593 592 623 622 565 564 595 594 625 624 567 566 597 596 - 627 626 657 656 687 686 717 716 655 654 685 684 715 714 653 652 683 682 713 712 - 637 636 667 666 697 696 635 634 665 664 695 694 633 632 663 662 693 692 631 630 - 661 660 691 690 721 720 751 750 781 780 723 722 753 752 783 782 725 724 755 754 - 785 784 727 726 757 756 787 786 729 728 759 758 789 788 731 730 761 760 791 790 - 733 732 763 762 793 792 735 734 765 764 795 794 737 736 767 766 797 796 739 738 - 769 768 799 798 741 740 771 770 801 800 743 742 773 772 803 802 745 744 775 774 - 805 804 747 746 777 776 807 806 837 836 867 866 897 896 835 834 865 864 895 894 - 833 832 863 862 893 892 831 830 861 860 891 890 829 828 859 858 889 888 827 826 - 857 856 887 886 825 824 855 854 885 884 823 822 853 852 883 882 821 820 851 850 - 881 880 819 818 849 848 879 878 817 816 847 846 877 876 815 814 845 844 875 874 - 813 812 843 842 873 872 811 810 841 840 871 870 901 900 931 930 961 960 903 902 - 933 932 963 962 905 904 935 934 965 964 907 906 937 936 967 966 909 908 939 938 - 969 968 911 910 941 940 971 970 913 912 943 942 973 972 915 914 945 944 975 974 - 917 916 947 946 977 976 919 918 949 948 979 978 921 920 951 950 981 980 923 922 - 953 952 983 982 925 924 955 954 985 984 927 926 957 956 987 986 58 89 88 118 - 149 148 178 209 208 238 269 268 298 329 328 358 389 388 418 449 448 478 509 508 - 538 569 568 598 629 628 658 689 688 718 749 748 778 809 808 838 869 868 898 929 - 928 958 989 988 - ] def - - % Lookup pixels for enabled modules from modmap - /pixs 864 array def - /j 0 def - 0 1 mods length 1 sub { - /i exch def - mods i get 1 eq { - pixs j modmap i get put - /j j 1 add def - } if - } for - /pixs [ pixs 0 j getinterval {} forall 28 29 280 281 311 457 488 500 530 670 700 677 707 ] def - - % Return the arguments - << - /ren //renmaximatrix - /pixs pixs - /opt options - >> - - dontdraw not //renmaximatrix if - - end - -} bind def -/maxicode dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp maxicode 0.0 0 0 0 +%%BeginData: 157 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\!A A2N5 *@^bF cn_? !/L `?9TgrDF(^ Y"C5;nRWKKH +.G`k%L@Yb,LWJCY >5*AT fH]g@ *F(^Y "C6 CcDH'2WOOo [4NP!5$b04J +@1@rGmh+Dl14L]D 1Q9Th2p 5^eeqI ?J/iP #O) OF(ZV)@<,j rA7^o[05YcC +Ch7K,D0'?Q@ZiNaDe*F8!g5]`De*F8"-Pg1EdMYEB8?PD#Ehc@#?rW@*\];hP!+.FAnbcuD0'? +G!/LrE9Th1bD0'>4D0'?G$#O`rCh7L?$'M9N9Th2[HS8uFA<$YQ1OYEdD0'?M!?I>_P'&Es@rG +mhP!5$bP')cc*KlDFFY@67De*FB5*@^bFcHJCP)YWI06:WAA7^ofOu&8D05YcCP!5$bD0'?Q@V +0=bP%'RTP,4=$L]D%$AOcC1G1G1G1G<]X15PF_1G<] +X1PkL_1G<6O@<-3nE-!.++BsX2NWEOB!5Op*@3!CDeI@YO +m"L&g4h!aQpQNWDM-!Fpia_hJ0OL]^p*>E/_PNWE[F!5sTljG3qE+Bsj,7?.C[L&f2I!9K"?>p +*@3!Ci(MAqg<*L&g@l#$i?UNWDY1!G@,ea+aTWL^.3.>E/_TNWEgJ!6Blpk_KLM+Bsj,8WEgcL +&f>M!9o:G>p*@3!D8@QC5)`2L&gLp$=+cYNWDe5!GdDibD$#_L^RK2>E/_XNWEsN!6g/tm"c'U ++Bsj,9o]6kL&fJQ!:>RO>p*@3!D\XUDMA/:L&gXt%UC2]NWDq9!H3\mc\;GgL_!c6>E/_\NWF* +R!76H#n;%W]+Bsj,;2tZsL&fVU!:bjW>p*@3!E+pYEeXSBL&ge#&mZVaNWE(=!HWtqdtRkoL_F +&:>E/_`NWF6V!7Z`'oS=2e+Bsj,p*@3!EP3]G(p"JL&gq'(0r%eNWE4A!I +'7uf7j;"L_j>>>E/_dNWFBZ!8*#+pkTbm+Bsj,=cNN.L&fn]!;VEg>p*@3!EtKaHA2FRL&h(+) +I4Ii+D#%s+D#%s+D#%s+D#%s+D#%s+C-*oL`D3jL`D3jE+*9">p*@-*Jb_l*Jb_T@:UKd+BsXC +L`V?nL`V?k>p*>oDK?qp*>oE+*9"E+*:3!8N; +/r.lA!+Bsj,,)u\PL&g%a!<%]p>p*@3!@*U*IYIjZL&h4/+'g!nNWCD]Itds\L&h7.!2!O>>E/ +_1NWD4r!31bRTnWQ?>p*@3!@Eg-4GEj;L&e0,!2E/_3NWD:t!3q7YX+gVL>p*@-.#nb5DB0EL&eH4!2WsD>E/_6NWE@=!4@O]["\RX>p*@3!@rt2L&ec=!4R[_V +d1ELNWC\k!F:E[\qU3pL&e2Y+Bsj,/WKjKSBJfL&dWI+Bsj,23%\\L&cp^!0D +p8RU%%?NWD%u!ITV%L5#\jL&d]K+Bsj,2fN:_L&d!`!0W':S6[7ANWD+\@5?E@3BAp+DbI/>p*>oF(-85@?(@2NWC8_!?bYj>9Ius+ +EM$8ChmN'F(6>6@j#&">9Iut+EM'9F(?D0CLeQ/A0>/#>9Iuu+EM*:F(HJ8AKYf)AKY8$>9I`k ++DbI/CgnN'@N]Jr+C-*qOu"b$BOPq)@;L!->DPP-22FM\22FM\22FM\22FM\2-lA$L]E53@q]: +kD..C)P%'4JP,Wd]Bp(ZC1G<BOPq)@;L!-C6D5Q5&$1)I?I-LP"76IATV?'@q]:kG% +#3.L]ET2Ou"b4ATVB(@q]:kG%#3.L]NZ3Ou"b4ATVE)@q]:kG%#3.L]W`4Ou"b4ATVH*@q]:kG + %#3.L]`f5Ou"b4ATVK+@q]:kG%#3.L]il6Ou"b/F(K>6>9Id(B5D-sL]NY>H\_ZMP(R&'1Mq2 +GCh7L?!KsF6BnueQ!Kp +*3!KmJHG^XpVF(K>6BnubPG^Y`TI?I,SDKBB/+Du73EJOU3F(]<#DN[\V1G<]fAS,Y$Bl8!'FF +/fDH\_`d)3R1H@Zj?1P!FGYI=%,BI?ITYP%Be?P')pOP')29% +[&V$ASu")P!5%%Dfp/b5&-6EP'AWp+DQ]5Oo^_%I?G)'1G$KCgeGrF(KH +VA7]Xg04T'7FH-KFATV@D1OYEcP!FGY<-rM(AT8i,P"UT;P"L(H]hKZP":B5OpR9ZL^/_:P)"htH]iN"P(R[qFHSh&P! +5%S052PCL^B4FOu"b++DQ]:Oo^_%P!FGY<%h`p@<+(FD0'>4Bp),P1G<6O@<++GBnueQ!GumjC +h7LIAp\B9B-:oE!KmJH97;/CSUHZ$Ou"b$BOPp;+DHW5Oo]E@B5D-sP%K&XF(ZV0L]W_?P"U4M +Ln/sWOu&7dI?IQ>F(KHR"ES- +r@?NcpATVB(@q]:k0p5q-"FG3$FCHA&BOPp:P$iWQ@N]`'FC?;'DIY>0F(KHR"ES-r@ZiNqHZN +X=F(KH%+D#G#+Cf(nE\S\XATVB(ASu!2Bcq,G!KmJH1OYEdP!FGY<+Bu\FH-KFATVCE4`b1V@3 +B&n@<+)c@$1Y>05r%TATV?'D0'>4Bnun/F(]<#DBNYVWJCV=)3RgCP!4;W<0DBe9Q5#`AncL(D +KBB2Ou%'5!KoTmF($24ATVB(ASu!#@q]:k0d(OKFC?;'DIY>6+DHW4Oo^_%I?IQKL]W`&HZNUN ++EM+9@N]6"@j#8p@<+(FF(KH%+D#G#+Cf(nE\\bYATV?'ASu!2Bcq,G!g3SI1OYEcE/4UZ4aV6 +Y1E^aMFCHA(DIXf!BOPp9+EM+9@3B-!@j#8p@<++GF(KH%+D#G#+Cf(nE\ehZATV?'ASu!2Bcq +,G"-N\J1OYEcE/4X[8pbA_+EM+9@N]6"@kV>5ATWq8F(KH%Ou%NL<0BLpP#QL6FC?;%BOPp9P$ +iWQ@3B'$ATX)GASu!2@rl4'NWaE7FCC=gP!FGY<-)Vm@N]/o@<+)c@!c^!+CfJ(FHU0GDIY>0F +(KHR"ES-r@ZiO15^eepF(KH'+Cf(nE\W_bHS9GOFEifKF(KH'Ou"b4GT_';Ou"b-CNpt6+DHW4Oo^_%I?IQKL]W`&HZOES@rl4'P%8-A@j#8p@<+(FF(KH6+DHW5Oo^_%I?IQKL]`f'HZOES@rl4'P%8-A@j#8p +@<+(FF(KHC6D8R1G<]UA9MBt+CfJ(FHU0R@:YNoOu +"b4@;T^$>9I471NQuAM#WWTHS9GKD/"e-OpR:-F(&p"L]DL-FC?;2@:YNoP'D%VD/"e,F(&pA$ +Be;C!KsF<#a0"F@;Uf-P%odRP,XTFP'DD<<%hg#@r6:"+Bot0@;T_A!g7\;DI[O)B9E=ZF^:.d +D/WrrL]W`&D/WrrL]`f'P&bn&D.I+9">DM`0SfjpV32^Z3,NSEAWeU#!f-uBV33Nq30Ia,"Hks +3WKKH.H'0s:@q/u.$8=.f0JG170JG2:$Bh6K)3Qsh@rGmhOt;CjL^K$2+9Tj[B@r7# +O@q/u(!f.&D9Tj[B@r7#I@q/u(#`&PF9Tj[B@r7#[F(8[8!/LiB9Tj[B@r7#UF(8[8#)EDF9Tj +ZSE,oY8>DN98!/LW2!/LW2!/LW2!/LW2!*taDL]E53Lc]r:Bp(ZC1G<]g+DHW9P#@H!04f*Y!f +."oL^'#WP,W#;E0;bn@r3?&P"UTbP,XU\Ou%&tBcqA9+E2@8+E2Cb94`(*!Kq\UP"76IARcieL +fA_?@:XOiCjhJ!?'7!bARgMrASu!pF(^Y]I?IQHDe*F8"HkobDe*F8"d2$3Ec#`*AV^PR4d'i& +De*F8s,oO.EdMYAA7^SsP!+.FD/Wrr+D#G#D0'?Q@YdaA@=*e6I=$bQI?ITn1OYEc04T3I+Bot +*De*F8"d2#qLe`AFLgGLmDN<95C8PQL]W`UOu +S7_P"L(W6^#96P#QjmK3aWr062,MDeFkkOpR:-L]N;4Ld-6L3-'(KCiD< +5fH\_ZMP(R&'1Pc$e!JUT8HS9)r5*@]T@s9&"+Cf>#ATr'5A9/l-P"UT4L^'$=Ot_6=0TrD`P" +ArB1Mq&@F,1$7P&,pY@s=)FP,XTF@s=)]I?I,SD/Ws%@;m>nL&ohZ!YL.f*ej\XL&kM5!Et3ZT +nWWAL'#,E!ksBjLP>l+L&i6J!?-[n3JIPoL&l=L!b-lcC5)b9L&lUT!L\ZCR"bXNL'#2G!l0Nl +089O&L&t&'!c*Mkb(]s%L&um[!kj?%rAbL&oAM!To+<"bm']L&on\!S2u+EJ=L5L&m?i!KMm8XbHkXL&rZU![NL%6\YY/L&te!P!jc0no``L&t/*!`"IOD2&+.L&rTS![<@#6&#G+L&t_:!a^T^Dh\:1L&m9g! +K;a6X+gYTL&iNR!@!7!6&#D*L&kY9!FCK^MhV:jL'"?/!iUhTa+aZ8L]N;3L`_EoLcpPVL]`G7 +L`qQsLd-\ZL]rS;La.^"Ld?h^L^/_?La@j&LdQtbL^AkCLaS!*Ldd+fL^T"GLae-.Le!7jL^f. +KLb"92Le3CnL_#:OLb4E6LeEOrL_5FSLbFQ:LeW\!L_GRWLbX]>Leih%L_Y^[LbjiBLf&t)L_k +j_Lc'uFLf9+-L`)!cLc:,JLfK71L`;-gLcL8NLf]C5LinMqL&dEl!0W':Z%`7_Li\AmL&d?j!0 +Dp8YD*%[LiJ5iL&d9h!02d6XbHhWLi8)eL&d3f!/uX4X+gVSLi%raL&d-d!/cL2WJ1DOLhhf]L +&d'b!/Q@0VhP2KLhVZYL&d!`!/?4.V1nuGLhDNUL&cp^!/-(,UP8cCLh2BQL&cj\!.oq*TnWQ? +Lgu6ML&cdZ!.]e(T8!?;Lgc*ILjt50L&dd!!1\jPLgGmcLjXpWRt^p3Lg>gALjOr(L&dWr!18R +HLg#U[Lj4XSQ\GL+L&eW9!47I\dtRkNL&gau!:Y^C[tXmkL&fbY!7Z`'o7d89L&ec=!4[a`f7j +:VL&gn$!;)!G]7p+IL&f&E!5OM!6BlpkCs!!L&hI4!L&gIm!9f.<#DN6`L&fJQ!6g/t +l\5E)L&hU8!=4D[c\;GFL&gUq!:5F@$\eZhL&i`X!@W['7tq%6L&kk?!G$oc-\_XKL&j_t!CVY +C@tk"nL&iTT!@3C#6\YV.L&k_;!FUW_'nu`'L&j)b!A]B1;2,*JL&hsB!>:+f0no]_L&k))!D\ +@M&V^;tL&ir^!A9*-9ni[BL&hg>!=jhb/VX9WL&jr%!D8(IBncY%L&m'a!JZ=0V1o#HL&l(E!G +[>iM1u%eL&n3,!N(SPD2&(-L&m3e!K)U4WJ1GPL&ldY!Ifb(SV@08L&no@!P4!dJVF2UL&mp$! +M5#H]nQR#L&lp]!J6%,TnWT@L&o&D!PX9hh1bscL&q1+!W%NP)2820L&p%`!SW8/q1\qFL&r0G +!Z$LkfnKO[L&q%'!VV6L'nuc(L&o>L!QKipjb??%rDcL&s/c!]#K3;2,-KL&u:J!cE_o222/hL&t;.!`FaSEJ=O6L&s;g!]Gc7!t9ncdtRqPL'$n"!q:pH%u(/rL'#n[!n;r+o7d> +;L'&$B!t^1gf7j@XL'%%&!q_3L'8?T%L'$%_!n`5/pP&bCL'&0F!u-IkgP,d`L'%1*!r.KP(PW +#-L'$1c!o/M3qh>1KL'&\,DH:EL'$Uo!pG@@# +DND<5`L')^U"*fP +&4,*huL'(S5"'C9[GD63CL''Gj"#u#;=,$fXL')RQ"*B8"2hhDmL'(G1"&t!WF+sd;L'';f"#P +`7;hbBPL')FM")rts1PPueL'(;-"&O^SDh\@3L''/b"#,H3:PJsHL'):I")N\o089Q]L'(/)"& ++FOCPDq+L''#^""]0/983O@L').E")*Dk.u"-UL'(#%"%\.KB8-M#L'*-a",)C2UP8lFL',8H" +2KWnLP>ncL'+9,"/LYR_hJ91L'*9e",M[6VhP;NL',DL"2oorMhV=kL'+E0"/pqVa+a]9L'*Ei +",qs:X+g_VL',PP"3?3!O+masL'+Q4"0@4ZbD$,AL'*Qm"-A6>YD*.^L',\T"3cK%PD01&L'+] +8"0dL^c\;PIL'*]q"-eNBZ\ARfL',hX"42c)Q\GU.L'+i<"13dbdtRtQL'*iu".4fF[tY!nL', +t\"4W&-Rt_$6L'+u@"1X'ff7jCYL'+!$".Y)J]7pF!L'-+`"5&>1T8!H>L',,D"2'?jgP,gaLc +U>pLffIVL&dKn!0i3FllL&icY!D/"H8;7.WL&m!_!JH1.U4r]bL&o)E! +T&P3rIt@NL&r9J!]bu:3/.K8L&uLP!d'.uP(j%CL'"T6!mZN%m=k]/L'%d;""As,.#%gnL')"A +"([,gJqaB$L'+*'"29Klh1c$e?'6usE+sQ9I +m!G]SZ@C6D8;I?I0X*/GVi!>pOl)28/NL&oDN!U,7=oS*D[L'!s$!ka6hV1o&h?'7!+4>1_dDD +*Y`ASu?nG\M#'FE 2)?05 tWMF! ,F9G] PN VE- *4@E-, f4DK?pa +4s4BSDKKE0@<[lR 0/% ?WDJ` g,Bl. :# EbT c]< 0B7i +Oq*X205Y-BBk)'l AWf$9 A1 r(@/n 8fPF Cf K5H "(o:F Dl% L@WuO *E$/ +\&Anc-oEb0<1F`L u'P') pJ0 6:] HE+* 6l Bl7 RH\pKT _F (KH4@: O(e +DJ+B\;u~> +% uk.co.terryburton.bwipp/maxicode 0.0 0 +%%EndData +%%EndResource % --END ENCODER maxicode-- % --BEGIN ENCODER azteccode-- +% --REQUIRES preamble raiseerror renmatrix-- % --DESC: Aztec Code % --EXAM: This is Aztec Code % --EXOP: format=full % --RNDR: renmatrix -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renmatrix dup /uk.co.terryburton.bwipp findresource put -begin -/azteccode { - - 20 dict begin - - /options exch def - /barcode exch def - - /dontdraw false def - /format (unset) def % full, compact or rune - /readerinit false def - /layers -1 def - /eclevel 23 def - /ecaddchars 3 def - /raw false def - /parse false def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - /layers layers cvi def - /eclevel eclevel cvr def - /ecaddchars ecaddchars cvi def - - % Parse ordinals of the form ^NNN to ASCII - parse { - /msg barcode length string def - /j 0 def - barcode - { % loop - (^) search { - dup msg exch j exch putinterval - length j add 1 add /j exch def - pop - dup 0 3 getinterval cvi msg exch j 1 sub exch put - dup length 3 sub 3 exch getinterval - } { - dup msg exch j exch putinterval - length j add /j exch def - /barcode msg 0 j getinterval def - exit - } ifelse - } loop - } if - - % Convert from input into message bitstream - /msgbits () def - format (rune) ne raw and {/msgbits barcode def} if - format (rune) ne raw not and { % Simple autoencoder from input to bitstream using byte mode only - - % Determine the character count - /barlen barcode length def - barlen 31 le { - (00000) 5 string copy dup barlen 2 5 string cvrs - dup length 5 exch sub exch putinterval - /cc exch def - } { - (0000000000000000) 16 string copy dup barlen 31 sub 2 16 string cvrs - dup length 16 exch sub exch putinterval - /cc exch def - } ifelse - /cclen cc length def - - % Create the bitstream as byte_mode_id character_count data_bytes - /msgbits 5 cclen add barlen 8 mul add string def - msgbits 0 (11111) putinterval - msgbits 5 cc putinterval - 0 1 barlen 1 sub { - /i exch def - (00000000) 8 string copy dup barcode i get cvi 2 8 string cvrs dup length 8 exch sub exch putinterval - msgbits 5 cclen add i 8 mul add 3 -1 roll putinterval - } for - - } if - - % Lookup the most appropriate symbol specification - /metrics [ - [ (rune) 0 0 0 6 ] % Special metric for rune symbols - [ (compact) 1 1 17 6 ] [ (full) 1 1 21 6 ] [ (compact) 2 0 40 6 ] - [ (full) 2 1 48 6 ] [ (compact) 3 0 51 8 ] [ (full) 3 1 60 8 ] - [ (compact) 4 0 76 8 ] [ (full) 4 1 88 8 ] [ (full) 5 1 120 8 ] - [ (full) 6 1 156 8 ] [ (full) 7 1 196 8 ] [ (full) 8 1 240 8 ] - [ (full) 9 1 230 10 ] [ (full) 10 1 272 10 ] [ (full) 11 1 316 10 ] - [ (full) 12 1 364 10 ] [ (full) 13 1 416 10 ] [ (full) 14 1 470 10 ] - [ (full) 15 1 528 10 ] [ (full) 16 1 588 10 ] [ (full) 17 1 652 10 ] - [ (full) 18 1 720 10 ] [ (full) 19 1 790 10 ] [ (full) 20 1 864 10 ] - [ (full) 21 1 940 10 ] [ (full) 22 1 1020 10 ] [ (full) 23 0 920 12 ] - [ (full) 24 0 992 12 ] [ (full) 25 0 1066 12 ] [ (full) 26 0 1144 12 ] - [ (full) 27 0 1224 12 ] [ (full) 28 0 1306 12 ] [ (full) 29 0 1392 12 ] - [ (full) 30 0 1480 12 ] [ (full) 31 0 1570 12 ] [ (full) 32 0 1664 12 ] - ] def - - /i 0 def - { % loop - /m metrics i get def - /frmt m 0 get def % Format of the symbol - /mlyr m 1 get def % Data layers - /icap m 2 get def % Reader initialisation capable - /ncws m 3 get def % Total of codewords - /bpcw m 4 get def % Bits per codeword - /numecw ncws eclevel mul 100 div ecaddchars add ceiling cvi def - msgbits length 0 eq {/numecw 0 def} if % Error correction codewords - /numdcw ncws numecw sub def % Data codewords - /okay true def - format (unset) ne format frmt ne and {/okay false def} if - readerinit icap 1 ne and {/okay false def} if - layers -1 ne layers mlyr ne and {/okay false def} if - msgbits length bpcw div ceiling cvi numdcw gt {/okay false def} if - okay {exit} if - /i i 1 add def - } loop - /layers mlyr def - /format frmt def - - % Expand message bits into codewords avoiding codewords with all zeros or all ones - /allzero {dup length (000000000000) 0 3 -1 roll getinterval eq} bind def - /allones {dup length (111111111111) 0 3 -1 roll getinterval eq} bind def - /cws ncws array def - /m 0 def /c 0 def - { - msgbits length m le {exit} if - msgbits length m sub bpcw ge { - /cwb msgbits m bpcw 1 sub getinterval def % All but last bit - /cwf msgbits m bpcw add 1 sub 1 getinterval def % Last bit - cwb allzero {/cwf (1) def /m m 1 sub def} if % Flip last bit to avoid zeros - cwb allones {/cwf (0) def /m m 1 sub def} if % Flip last bit to avoid ones - % Concatinate the bits - 12 string dup 0 cwb putinterval - dup bpcw 1 sub cwf putinterval - 0 bpcw getinterval - /cwb exch def - } { % Final codeword - /cwb msgbits m msgbits length m sub getinterval def - /cwb (111111111111) 12 string copy dup 0 cwb putinterval 0 bpcw getinterval def - cwb allones {cwb cwb length 1 sub (0) putinterval} if % Prevent all ones - } ifelse - % Conversion of binary data into byte array - /cw 0 def - 0 1 bpcw 1 sub { - /i exch def - /cw cw 2 bpcw i sub 1 sub exp cvi cwb i get 48 sub mul add def - } for - cws c cw put - /m m bpcw add def - /c c 1 add def - } loop - /cws cws 0 c getinterval def - - % Reed-Solomon algorithm - /rscodes { - - /rspm exch def - /rsgf exch def - /rsnc exch def - /rscws exch def - - % Calculate the log and anti-log tables - /rsalog [ 1 rsgf 1 sub { dup 2 mul dup rsgf ge {rspm xor} if } repeat ] def - /rslog rsgf array def - 1 1 rsgf 1 sub {dup rsalog exch get exch rslog 3 1 roll put} for - - % Function to calculate the product in the field - /rsprod { - 2 copy 0 ne exch 0 ne and { - rslog exch get exch rslog exch get add rsgf 1 sub mod rsalog exch get - } { - pop pop 0 - } ifelse - } bind def - - % Generate the coefficients - /coeffs [ 1 rsnc {0} repeat ] def - 1 1 rsnc { - /i exch def - coeffs i coeffs i 1 sub get put - i 1 sub -1 1 { - /j exch def - coeffs j coeffs j 1 sub get coeffs j get rsalog i get rsprod xor put - } for - coeffs 0 coeffs 0 get rsalog i get rsprod put - } for - - % Extend the input with the error correction values - /nd rscws length def - /rscws [ rscws {} forall rsnc {0} repeat 0 ] def - 0 1 nd 1 sub { - /k exch rscws exch get rscws nd get xor def - 0 1 rsnc 1 sub { - /j exch def - rscws nd j add rscws nd j add 1 add get k coeffs rsnc j sub 1 sub get rsprod xor put - } for - } for - - % Return all but the last codeword - rscws 0 rscws length 1 sub getinterval - - } bind def - - % Create the codewords and bit string for the mode - format (full) eq { - /mode layers 1 sub 11 bitshift cws length 1 sub add def - readerinit {/mode mode 2#1000000000000000 or def} if - /mode [ - mode 2#1111000000000000 and -12 bitshift - mode 2#0000111100000000 and -8 bitshift - mode 2#0000000011110000 and -4 bitshift - mode 2#0000000000001111 and - ] def - /mode mode 6 16 19 rscodes def - } if - format (compact) eq { - /mode layers 1 sub 6 bitshift cws length 1 sub add def - readerinit {/mode mode 2#10000000 or def} if - /mode [ - mode 2#11110000 and -4 bitshift - mode 2#00001111 and - ] def - /mode mode 5 16 19 rscodes def - } if - format (rune) eq { - /mode barcode cvi def - /mode [ - mode 2#11110000 and -4 bitshift - mode 2#00001111 and - ] def - /mode mode 5 16 19 rscodes def - /mode [mode {2#1010 xor} forall] def % Invert alternate bits - } if - /modebits mode length 4 mul string def - 0 1 modebits length 1 sub {modebits exch (0) putinterval} for - 0 1 mode length 1 sub { - /i exch def - modebits mode i get 2 4 string cvrs dup length 4 exch sub 4 i mul add exch putinterval - } for - - % Extend the data codewords with error correction codewords to create the bit string for the data - /rsparams [ - [] [] [] [] [] [] - [ 64 67 ] % 6-bit codewords - [] - [ 256 301 ] % 8-bit codewords - [] - [ 1024 1033 ] % 10-bit codewords - [] - [ 4096 4201 ] % 12-bit codewords - ] def - /cws cws ncws cws length sub rsparams bpcw get {} forall rscodes def - format (full) eq { - /databits layers layers mul 16 mul layers 112 mul add string def - } { - /databits layers layers mul 16 mul layers 88 mul add string def - } ifelse - 0 1 databits length 1 sub {databits exch (0) putinterval} for - 0 1 ncws 1 sub { - /i exch def - databits cws i get 2 bpcw string cvrs - dup length bpcw exch sub bpcw i mul add databits length ncws bpcw mul sub add - exch putinterval - } for - - % Move to a point in the cartesian plane centered on the bullseye - /cmv {size mul sub mid add} bind def - - % Move to a bit position within a layer - /lmv { - /lbit exch def - /llyr exch def - /lwid fw llyr 4 mul add def - /ldir lbit 2 idiv lwid idiv def - ldir 0 eq { % Top - lwid 1 sub 2 idiv neg 1 add lbit 2 idiv lwid mod add - fw 1 sub 2 idiv llyr 2 mul add lbit 2 mod add - cmv - } if - ldir 1 eq { % Right - fw 2 idiv llyr 2 mul add lbit 2 mod add - lwid 1 sub 2 idiv 1 sub lbit 2 idiv lwid mod sub - cmv - } if - ldir 2 eq { % Bottom - lwid 2 idiv neg 1 add lbit 2 idiv lwid mod add neg - fw 2 idiv llyr 2 mul add lbit 2 mod add neg - cmv - } if - ldir 3 eq { % Left - fw 1 sub 2 idiv llyr 2 mul add lbit 2 mod add neg - lwid 2 idiv 1 sub lbit 2 idiv lwid mod sub neg - cmv - } if - } bind def - - % Create the pixel map - % For full symbols we disregard the reference grid at this stage - format (full) eq {/fw 12 def} {/fw 9 def} ifelse - /size fw layers 4 mul add 2 add def - /pixs [size size mul {-1} repeat] def - /mid size 1 sub 2 idiv size mul size 1 sub 2 idiv add def - - % Data layers - /i 0 def - 1 1 layers { - /layer exch def - 0 1 fw layer 4 mul add 8 mul 1 sub { - /pos exch def - pixs layer pos lmv databits databits length i sub 1 sub get 48 sub put - /i i 1 add def - } for - } for - - % For full symbols expand the pixel map by inserting the reference grid - format (full) eq { - /fw 13 def - /size fw layers 4 mul add 2 add layers 10.5 add 7.5 div 1 sub cvi 2 mul add def - /mid size size mul 2 idiv def - /npixs [size size mul {-2} repeat] def - 0 16 size 2 idiv { - /i exch def - 0 1 size 1 sub { - /j exch def - npixs size 2 idiv neg j add i cmv [size 2 idiv j add i add 1 add 2 mod] putinterval - npixs size 2 idiv neg j add i neg cmv [size 2 idiv j add i add 1 add 2 mod] putinterval - npixs i size 2 idiv neg j add cmv [size 2 idiv j add i add 1 add 2 mod] putinterval - npixs i neg size 2 idiv neg j add cmv [size 2 idiv j add i add 1 add 2 mod] putinterval - } for - } for - /j 0 def - 0 1 npixs length 1 sub { - /i exch def - npixs i get -2 eq { - npixs i pixs j get put - /j j 1 add def - } if - } for - /pixs npixs def - } if - - % Finder pattern - /fw fw 2 idiv def - fw neg 1 fw { - /i exch def - fw neg 1 fw { - /j exch def - pixs i j cmv - i abs j abs gt {i abs} {j abs} ifelse 1 add 2 mod - put - } for - } for - - % Orientation bits - [ [ fw 1 add neg fw 1 ] [ fw 1 add neg fw 1 add 1 ] - [ fw neg fw 1 add 1 ] [ fw 1 add fw 1 add 1 ] - [ fw 1 add fw 1 ] [ fw 1 add fw neg 1 ] - [ fw fw 1 add 0 ] [ fw 1 add fw 1 add neg 0 ] - [ fw fw 1 add neg 0 ] [ fw neg fw 1 add neg 0 ] - [ fw 1 add neg fw 1 add neg 0 ] [ fw 1 add neg fw neg 0 ] - ] {pixs exch {} forall 3 1 roll cmv exch put} forall - - % Mode ring - format (full) eq { - /modemap [ - [-5 7] [-4 7] [-3 7] [-2 7] [-1 7] [ 1 7] [ 2 7] [ 3 7] [ 4 7] [ 5 7] - [ 7 5] [ 7 4] [ 7 3] [ 7 2] [ 7 1] [ 7 -1] [ 7 -2] [ 7 -3] [ 7 -4] [ 7 -5] - [ 5 -7] [ 4 -7] [ 3 -7] [ 2 -7] [ 1 -7] [-1 -7] [-2 -7] [-3 -7] [-4 -7] [-5 -7] - [-7 -5] [-7 -4] [-7 -3] [-7 -2] [-7 -1] [-7 1] [-7 2] [-7 3] [-7 4] [-7 5] - ] def - } { - /modemap [ - [-3 5] [-2 5] [-1 5] [ 0 5] [ 1 5] [ 2 5] [ 3 5] - [ 5 3] [ 5 2] [ 5 1] [ 5 0] [ 5 -1] [ 5 -2] [ 5 -3] - [ 3 -5] [ 2 -5] [ 1 -5] [ 0 -5] [-1 -5] [-2 -5] [-3 -5] - [-5 -3] [-5 -2] [-5 -1] [-5 0] [-5 1] [-5 2] [-5 3] - ] def - } ifelse - 0 1 modemap length 1 sub { - /i exch def - pixs modemap i get {} forall cmv modebits i get 48 sub put - } for - - << - /ren //renmatrix - /pixs pixs - /pixx size - /pixy size - /height size 2 mul 72 div - /width size 2 mul 72 div - /opt options - >> - - dontdraw not //renmatrix if - - end - -} bind def -/azteccode dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp azteccode 0.0 0 0 0 +%%BeginData: 117 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\:%52X=FD5Z2F- 8_M1G <3G Eas # uAW f6? 1G< 9WDKKE 0@ K FD5 Z2F*j(NAmo LsAWf3'P!FG +Y<0B5(@ZmRN0oc8 tP)XR( F_- _ !H]f tD5* C&O 5*@^MH]ft& EckrV1OYEdI +?J0)*g/N:DfBf4D f0WZ5* @^M P#Q@ =FD5 Z2F *j'+I?I/TC ghU#EcW@>@< +lF)F-8);1G<05?Y6Ou&8 DOuS6tL]`f6 +Ot:HkB9GGnL]N[L]`f(P"^:NOuR<"B9GGnP!5%SP%&0h!AA2N5*@]T@UX: +eDe*E%D0'?G!,@ZjOu&7dI?ITYP%B')<%i*0B4>RsF,g6`1M1QGD..OH"EJX&AWgnN@<[k;HS9 +5WB4>RsF!+q#Eas#uAWeitP#Q%3Ec#6,NWaBFDInuJEaa0TE0:?N04J@1Ch7K,@UX:eDe*FB@Z +iNV@<-0qDMTBt@=+"<0JG170SfmqV32^Z3+?<:Ch7L?!f.#CV33Nq30Ia,"d2'4WKKH.GqWZ;P +!5$bI=$tc0JG170JG170JG170JG17L_,`GOr9EB@UX:nAT!;GP,X6=L_,`GOt`%YP%'4YP!5&. +P!5%S04SLT5*@^MP#X/F@r,^o+CeoE@ZiN#D0'?!BlnEP"_2%YAT!Y3@UX:nAT!;0P&-9^P,4< +tD0'?!BlnEP!0.4;0ekC;P'LncB4>RsF,1!0A!2+n!/LYb@<-0qDMS=VWI$:4P!5$bNX.qP&-9^L]`J5P)#3GI?I-LP#O)OATVs,@ribs+Bsj/Ecl82L]E52L]E58>p*@3#@h[hE ++*6uL]N;4L_5FI>p*@3"D2dmCkr+J!JhJH#$i?UNX''4D/`onFGL!S!/N%Z#$i?UNW`s:Ci"n/ +L]N;cL^%-->E/quDf'H%@s!M/L]E5eL^79/>E/huF_klM",Hu64GX8K+Bsj2@rH4'@:OD8"Gd& +69S`s[+Bsj/Ap%p+L]iM7LffH=>p*@3"D2dmCkr7N!JkuV#[JQWNW`s:Ci"n3L]N51S;7GV+Bs +j/Ap%p+L^/_:L&f/J#[JQWNW`s:Ci"n5L]N51n;%?U+Bsj/Ap%p+L^AkL&jDm$=+cYNW`s:Ci"n9L]N52CkrF(+Bsj/Ap%p+L^f.@L +&ms'$=+cYNW`s:Ci"n;L]N52eqaZ=+Bsj/Ap%p+L_#:BL&qpB$=+cYNW`s:Ci"n=L]N539Sa$] ++Bsj/Ap%p+L_5FDL'!+C1-d0564B +Ou%G$K05kW7Gp$^-Cia0N1OYEcCghU#Ec[':P&5#DH"D#;+Dkq? +Eft:&"FDe?CLMK2AmoLsAWeitP#Q:>B4>RsF-:!AE+=*T2NeW7/8fTIA7KhH:jXj6CLMK2AmoL +sAWeitP#Q@8@Ou%NLAM7k.H"D#;+Dkq?Efr43AoD^,@<G@D\)G +@H_EL]N[$KEcZ&8B9GHA99MJZF)5c-P!5%%Oo]TEB4cr#P,XUZEcYZ* +DeG4sP"U4MP')q1L]DjdP"TR5@rGpjAof)8F)GJ1C6GQP!KsFF96,) +mEc5KO_30%kP":"a89/c]GB8Q?EcY`7F-:!g!KsFF9RW'6Ou$]gEc#6,NW`s:Ci#7tHS95SA7Z +m"@9Id +$A7^Jqn<*p1r/qS-De*F8&!@'$Ou"b.De*E%D/WrrL]rSGL_FfM@rGmhF-8>-P#Q%3Ec#6,NWa +BFDIntoHS95SA7Zlm@<,jrA7^oTOu"b.De*E%>9Id$A7^Jqn<*p1r/qS-De*F8&!@'$Ou"b.De +*E%D/WrrL]rSGL_FfM@rGmhF-8=4D/Wrr+Bot*De*F+L^K<]I?I0-Ou%NL<%i*,A7]4aFE8RAD +e*FB@Yb/MCm(WX1Pc$e!GuacAR]@qF-:!g!KsF/D/Wrr@VKq*P!4m,0Tp^0P":B/L]M@2A7^p5 +L]N[9I2o>9I2o>9I2o>9I2o>9I2o>9I2o>DPP#6X:g=+C-*oL&h:/!A.S">9I +2o>D<7\L'.fg+Boso+BsR3!/;&!>p*F91G<6^F!+t:F!,@1GB4m:GB8pVP,WJCE+*cqD0$h/E+ +=*T97))M8TJl^De*F#Ou$]gEc#6,NW`s:Ci#7tHS8opeBlnEZ5)oXtP'MJ=8;I8%!H)CkF,0j[WI$: +4P!5$bA79Rg@VKq*+CfV:+DI!3L]V%)@s=*4Ot`%YP%%m>@s=)"P,Vo0@s9&0P&-9^A79Rg@VK +q*P%&<=GB4m9E+=*TCm(c\!KoX0H$tiH04SjBHQ[BDH=`7UP,W;4Aj<,?)ZEejaZ4aUdbL]W`;Ci"B;L]W`UOo]B.Blo.4P%p-\Cj0T(L]N[ +4GDH<`;J^/pEejd[Cm"g8@VKq?!g7;]!Kq>1D0C>j<,?)ZEejg\4aUdbL] +N[)[Bk3#$P#@):P,W8,Blo.4P#?+?Bk3BAP,XU^@ +r6C;P#Qjm%[&V[DfT]'FH-K9F_klW4aShoGDHZj1OXU'Ap9%;Ou%NLVF-8_M1N7&QF!,:-H"D"=E,Te?Ci+>9J!$H=\4?BmO?RCjV!;I?K4gOu%moL_+WAH=_m6P#?W +[Bp(ZC1Pc$e!HVt$AV^AMWI$:5P!5$bDK'<7F!,O!Jgf?C0d!JDK'<7F!,OOo^@?P%n9cH#@S8G]P!A+EM7CAV^DN;Nbp4Oo]'0Fs(!3F(or3L]W`;C6AU3Oo^@>Oo^@?P + %n9cH#@S8G]P!AP&>>TH=_m6P#@H\C6AU-D0@%++EM7CAV^DN;JM?qBp&LQ!KmJ>!g7;(P'MJ +=8:?Xl05?:COu%moL]MC4Bm=]^@Yb&JWI$:4P!5$bDK'<7F!,1[98NS14aV'cBm=\ABcqA/G]P +!BP"Us_05;VEL]NY>Ou%NL<.0p#05tWMF!,@>Bm=]^1OYEc04oDNAp9%4P#@H!Ap9DUL]M+3HS +9)r5*@^6GEQj"!G6P&05?Y6Ou%&kG]P!A+DN$/D0@%9OoT6[!0U0*Bp&IEHYS]DI?ITd!KmJ>! +g7;]G^Y`GI?I-*+Bot#GDH9_!Kq>4GDH9*+Bot#GDH9_!Kq>4GDH9_!Jgb^+Bot#GEQiUGDH9_ +!Jgb^+Bot#GDH9_!G6P3!KmJ>!F6gP+D,hR!KmIqGDH9*+Bot#GDH9_!G6P=DMS=!+Bot#G9CL +AL]NY>L]C^'>9IO%L]NY>Ap9%3Oo^_`L]C^'>9IO%+D,hR!KmJHDMS9u+Bot#GEQiUGDH9_!Kq +>V!*p^O+D,hR!KmJHDJ"*K!KmJHDMS9u+Bot#GDH9_!Kq>4GEQj"!*p^QHQ[9AG]T$3H[V&KL] +`G6P)!OaG*5%PG^Y`HAoD^,@<@M4Ap%p+P!+.FD/WrrD..B+>9I.+qhPJ_+Bs["L^.3.>DW66# +@/HVM#N28>p*@-s+gnc+BsX&L^.3.>DN?:#@/HVL]`G<>p*@-"Gd:g+BsX*L^.3.>DNN?"^N6T +L^/_=>p*@-#D`If+BsX,L]Uj)>DNN?!F6gPL^/b9>p*@-#Di@b+BsX,M#CU%>DNN?r*:FLL^/b +5>p*@-"c2t[+BsX)M"t=!>DNB;q->+IL]WD.>p*@-!JpPW+Bs[%M"t=!>DW97q->+IM#E/*>p* +@-r.t/S+Bs[!M"t=!>DW*2qct=KM"ul)>p*@-q2"uT+BsZtM#L[&>DW*2s'6aOM"ui->p*@-q1 +o)X+BsZtL]^p*>DW*2"C3-SM"ui1>p*F91OXU'D/WrrD..B+>9I.+rJ1V_+Bs[$L]q',>DW<8" +^N6TL]E57>p*@-!Jgnb+BsX'L]q',>DNB;"^N6TL]rS:>p*@-"c*4c+BsX*L]Ld(>DNH=!*p^O +L]rV7>p*@-"c3.`+BsX*M#CU%>DNB;qct=KL]WD0>p*@-!JpVY+BsX%M#1I#>DW<8qct=KM#N5 +->p*@-rJ:>V+Bs[!M#CU%>DW04r`pXNM#3#.>p*@-qhP5X+Bs[!L]Ld(>DW04!aQpQM#2u1>p* +F91OYEdL]E53D/WrrD..CH@Yb&JWI$:4P!5$bE+sQ<+Dl%-ASkjp+DI!3H[V&K@r6B3D/Wrr@V +Kq*+DI!3LbP!kP'DD<83B!fEb0,A061WAD..O,Bm;:MBm=\AE+sQ<05tWMGT_'AH=\aKBm=nGF +(or305+p2B4uB0F(or3L]W`ULe*[e06_,@FD)eD_?-CEcQG7F`MS +BDD#CBBlJ#6A7]@eDImj"F)Q2A@qCgGOuY1:ATVm"@r#drB9KiQP'(hWFDtYuCM@[!I?IP~> +% uk.co.terryburton.bwipp/azteccode 0.0 0 +%%EndData +%%EndResource % --END ENCODER azteccode-- % --BEGIN ENCODER codeone-- +% --REQUIRES preamble raiseerror renmatrix-- % --DESC: Code One % --EXAM: Code One -% --EXOP: version=B -% --RNDR: renmatrix -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renmatrix dup /uk.co.terryburton.bwipp findresource put -begin -/codeone { - - 20 dict begin - - /options exch def - /barcode exch def - - /dontdraw false def - /version (unset) def - /encoding (ascii) def - /raw false def - /parse false def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - /stype version 0 1 getinterval (S) eq def - stype {/raw true def} if - - % Parse ordinals of the form ^NNN to ASCII - parse { - /msg barcode length string def - /j 0 def - barcode - { % loop - (^) search { - dup msg exch j exch putinterval - length j add 1 add /j exch def - pop - dup 0 3 getinterval cvi msg exch j 1 sub exch put - dup length 3 sub 3 exch getinterval - } { - dup msg exch j exch putinterval - length j add /j exch def - /barcode msg 0 j getinterval def - exit - } ifelse - } loop - } if - - /barlen barcode length def - - raw {/encoding (raw) def} if - - encoding (raw) eq { - /cws barlen array def - /i 0 def /j 0 def - { % loop - i barlen eq {exit} if - /cw barcode i 1 add 3 getinterval cvi def - cws j cw put - /i i 4 add def - /j j 1 add def - } loop - /cws cws 0 j getinterval def - } if - - encoding (ascii) eq { - /cws barlen 2 mul array def - /i 0 def /j 0 def - { % loop - i barlen eq {exit} if - /char barcode i get def - char 48 ge char 57 le and i barlen 1 sub lt and { - barcode i 1 add get dup 48 ge exch 57 le and { % Digit pair - cws j barcode i 2 getinterval cvi 130 add put - /i i 2 add def - /j j 1 add def - } { % Singular digit - cws j char 1 add put - /i i 1 add def - /j j 1 add def - } ifelse - } { char 127 le { % ASCII - cws j char 1 add put - /i i 1 add def - /j j 1 add def - } { % Extended ASCII - cws j 235 put - cws j 1 add char 127 sub put - /i i 1 add def - /j j 2 add def - } ifelse } ifelse - } loop - /cws cws 0 j getinterval def - } if - - % Basic metrics for the each symbol - % ver row col dcol dcws rscw rsbl ro ri rl - /metrics [ - [ (A) 16 18 16 10 10 1 4 99 6 ] - [ (B) 22 22 20 19 16 1 4 99 8 ] - [ (C) 28 32 28 44 26 1 4 22 11 ] - [ (D) 40 42 36 91 44 1 4 16 16 ] - [ (E) 52 54 48 182 70 1 4 22 22 ] - [ (F) 70 76 68 370 140 2 4 22 31 ] - [ (G) 104 98 88 732 280 4 6 21 47 ] - [ (H) 148 134 120 1480 560 8 6 20 69 ] - [ (S-10) 8 11 10 4 4 1 99 99 99 ] - [ (S-20) 8 21 20 8 8 1 99 99 99 ] - [ (S-30) 8 31 30 12 12 1 99 99 99 ] - [ (T-16) 16 17 16 10 10 1 99 99 99 ] - [ (T-32) 16 33 32 24 16 1 99 99 99 ] - [ (T-48) 16 49 48 38 22 1 99 99 99 ] - ] def - - % Select metrics of an appropriate symbol - /i 0 def - { % loop - /m metrics i get def - /vers m 0 get def % Version of symbol - /rows m 1 get def % Rows in symbol - /cols m 2 get def % Columns in symbol - /dcol m 3 get def % Data columns in symbol - /dcws m 4 get def % Data codewords in symbol - /rscw m 5 get def % Error correction codewords - /rsbl m 6 get def % Error correction blocks - /riso m 7 get def % Riser offset - /risi m 8 get def % Riser interval - /risl m 9 get def % Riser length - /dcpb dcws rsbl idiv def % Data codewords per block - /ecpb rscw rsbl idiv def % Error codewords per block - /okay true def - version (unset) ne version vers ne and {/okay false def} if % The version must match that supplied - cws length dcws gt {/okay false def} if - okay {exit} if - /i i 1 add def - } loop - - % Extend cws to ncws codewords by addition of pad characters - stype not { - /cws [ cws aload pop dcws cws length sub {129} repeat ] def - } if - - % De-interleave the codewords into blocks - /cwbs rsbl array def % Array of data codeword blocks - /ecbs rsbl array def % Array of error correction blocks - 0 1 rsbl 1 sub { - /i exch def - /cwb dcpb array def - 0 1 dcpb 1 sub { - /j exch def - cwb j cws j rsbl mul i add get put - } for - cwbs i cwb put - } for - - % Log and anti-log tables and function to calculate product in the field - /gf stype {32} {256} ifelse def - /gf-1 gf 1 sub def - /pm stype {37} {301} ifelse def - /rsalog [ 1 gf-1 { dup 2 mul dup gf ge {pm xor} if } repeat ] def - /rslog gf array def - 1 1 gf-1 {dup rsalog exch get exch rslog 3 1 roll put} for - /rsprod { - 2 copy 0 ne exch 0 ne and { - rslog exch get exch rslog exch get add gf-1 mod rsalog exch get - } { - pop pop 0 - } ifelse - } bind def - - % Generate the coefficients for the Reed-Solomon algorithm - /coeffs [ 1 ecpb {0} repeat ] def - 0 1 ecpb 1 sub { - /i exch def - coeffs i 1 add coeffs i get put - i -1 1 { - /j exch def - coeffs j coeffs j 1 sub get coeffs j get rsalog i get rsprod xor put - } for - coeffs 0 coeffs 0 get rsalog i get rsprod put - } for - /coeffs coeffs 0 coeffs length 1 sub getinterval def - - % Reed-Solomon algorithm to derive the error correction codewords - 0 1 cwbs length 1 sub { - /i exch def - /rscws [ cwbs i get aload pop ecpb {0} repeat ] def - 0 1 dcpb 1 sub { - /m exch def - /k rscws m get def - 0 1 ecpb 1 sub { - /j exch def - rscws m j add 1 add coeffs ecpb j sub 1 sub get k rsprod rscws m j add 1 add get xor put - } for - } for - ecbs i rscws dcpb ecpb getinterval put - } for - - % Extend codewords with the interleaved error correction codes - /cws [ cws aload pop rscw {0} repeat ] def - 0 1 rscw 1 sub { - /i exch def - cws dcws i add ecbs i rsbl mod get i rsbl idiv get put - } for - - % Module matrix for layout of the codewords - /mmat dcws rscw add stype {5} {8} ifelse mul array def - /r 0 def /c 0 def - 0 stype {2} {1} ifelse cws length 1 sub { - /i exch def - stype not { - (00000000) 8 string copy dup cws i get 2 8 string cvrs - dup length 8 exch sub exch putinterval [ exch {48 sub} forall ] - dup 0 4 getinterval /top exch def - 4 4 getinterval /bot exch def - } { - (00000) 5 string copy dup cws i get 2 5 string cvrs - dup length 5 exch sub exch putinterval [ exch {48 sub} forall ] - /c1 exch def - (00000) 5 string copy dup cws i 1 add get 2 5 string cvrs - dup length 5 exch sub exch putinterval [ exch {48 sub} forall ] - /c2 exch def - /top [ c1 0 3 getinterval aload pop c2 0 2 getinterval aload pop ] def - /bot [ c1 3 2 getinterval aload pop c2 2 3 getinterval aload pop ] def - } ifelse - mmat r dcol mul c add top putinterval - mmat r 1 add dcol mul c add bot putinterval - /c c top length add def - c dcol eq {/c 0 def /r r 2 add def} if - } for - - % Create bitmap and add finder patterns - /mmv {cols mul add} bind def - /pixs [ rows cols mul {-1} repeat ] def - - % Centre pattern - /artifact [ - {cols {0} repeat} bind - {cols {1} repeat} bind - {0 cols 2 sub {1} repeat 0} bind - {0 1 cols 4 sub {0} repeat 1 0} bind - {cols 1 sub 2 idiv {-1} repeat 1 cols 1 sub 2 idiv {-1} repeat} bind - {cols 1 sub 2 idiv {-1} repeat 0 cols 1 sub 2 idiv {-1} repeat} bind - {1 cols 2 sub {0} repeat 1} bind - {1 0 cols 4 sub {1} repeat 0 1} bind - ] def - /cpat << - /A (121343) - /B (12134343) - /C (12121343) - /D (1213434343) - /E (1212134343) - /F (1212121343) - /G (121213434343) - /H (121212134343) - /S (56661278) - /T (5666666666127878) - >> vers 0 1 getinterval get def - pixs 0 rows cpat length sub 2 idiv mmv - [ cpat {artifact exch 49 sub get exec} forall ] putinterval - - % Risers - 0 1 risl 1 sub { - /i exch def - riso risi cols 1 sub { - /j exch def - [ 1 i 12 mod 0 eq {1} {0} ifelse ] dup - pixs j i mmv - 3 -1 roll putinterval - i risl 1 sub ne { - pixs cols j sub 2 sub rows i sub 1 sub mmv - 3 -1 roll putinterval - } {pop} ifelse - } for - } for - - % Black dots - << - /A [ [12 5] ] - /B [ [16 7] ] - /C [ [26 12] ] - /D [] - /E [ [26 23] ] - /F [ [26 32] [70 32] [26 34] [70 34] ] - /G [ [27 48] [69 48] ] - /H [ [26 70] [66 70] [106 70] [26 72] [66 72] [106 72] ] - /S-10 [] - /S-20 [ [10 4] ] - /S-30 [ [15 4] [15 6] ] - /T-16 [ [8 10] ] - /T-32 [ [16 10] [16 12] ] - /T-48 [ [24 10] [24 12] [24 14] ] - >> vers get {pixs exch aload pop mmv 1 put} forall - - % Place the modules onto a pixel map between alignment patterns - /j 0 def - 0 1 pixs length 1 sub { - /i exch def - pixs i get -1 eq { - pixs i mmat j get put - /j j 1 add def - } if - } for - - % Return the arguments - << - /ren //renmatrix - /pixs pixs - /pixx cols - /pixy rows - /height rows 72 div 2 mul - /width cols 72 div 2 mul - /opt options - >> - - dontdraw not //renmatrix if - - end - -} bind def -/codeone dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if -% --END ENCODER codeone-- - -% --BEGIN ENCODER gs1-cc-- -% --REQUIRES micropdf417 pdf417-- -% --DESC: GS1 Composite 2D Component -% --EXAM: (01)95012345678903(3103)000123 -% --EXOP: ccversion=b cccolumns=4 -% --RNDR: renmatrix -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renmatrix dup /uk.co.terryburton.bwipp findresource put -dup /pdf417 dup /uk.co.terryburton.bwipp findresource put -dup /micropdf417 dup /uk.co.terryburton.bwipp findresource put -begin -/gs1-cc { - - 20 dict begin % Confine variables to local scope - - /options exch def % We are given an option string - /barcode exch def % We are given a barcode string - - /dontdraw false def - /ccversion (a) def - /cccolumns -1 def - /lintype () def - /linwidth -1 def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - /cccolumns cccolumns cvi def - /linwidth linwidth cvi def - - % Select columns based on linear type - cccolumns -1 eq { - << - /ean13 4 - /upca 4 - /ean8 3 - /upce 2 - /gs1-128 - ccversion (c) ne {4} {linwidth 52 sub 17 idiv} ifelse - /databaromni 4 - /databarstacked 2 - /databarstackedomni 2 - /databartruncated 4 - /databarlimited 3 - /databarexpanded 4 - /databarexpandedstacked 4 - >> lintype get /cccolumns exch def - } if - - % Expand ordinals of the form ^NNN to ASCII - /expand { - /in exch def - /out in length string def - /j 0 def - in - { % loop - (^) search { - dup out exch j exch putinterval - length j add 1 add /j exch def - pop - dup 0 3 getinterval cvi out exch j 1 sub exch put - dup length 3 sub 3 exch getinterval - } { - dup out exch j exch putinterval - length j add /j exch def - out 0 j getinterval exit - } ifelse - } loop - } bind def - - % Parse out AIs - /ais [] def - /aival 2 dict def - barcode dup length 1 sub 1 exch getinterval - { % loop - dup () eq {exit} if - (\)) search pop - exch pop - exch (\() search { - exch pop exch 3 1 roll - } { - () 3 1 roll - } ifelse - [ ais aload pop counttomark 2 add index ] /ais exch def - aival 3 1 roll expand put - } loop - pop - - % Method selection - /isupper {dup 65 ge exch 90 le and} bind def % A-Z - /isnum0 {dup 48 ge exch 57 le and} bind def % 0-9 - /isnum1 {dup 49 ge exch 57 le and} bind def % 1-9 - { % common exit - - % (10/11/17)... - ais length 1 ge { - ais 0 get (10) eq ais 0 get (11) eq or ais 0 get (17) eq or { - -1 (10) exit - } if - } if - - % (90){0-3 digits not starting 0}{upper alpha}... - ais length 1 ge { - ais 0 get (90) eq { - /v aival (90) get def - v length 1 ge { - v 0 get isupper { - 0 (11) exit - } if - } if - v length 2 ge { - v 0 get isnum1 - v 1 get isupper and { - 1 (11) exit - } if - } if - v length 3 ge { - v 0 get isnum1 - v 1 get isnum0 and - v 2 get isupper and { - 2 (11) exit - } if - } if - v length 4 ge { - v 0 get isnum1 - v 1 get isnum0 and - v 2 get isnum0 and - v 3 get isupper and { - 3 (11) exit - } if - } if - } if - } if - - % Freeform - -1 (0) exit - - } loop - /method exch def - /npre exch def - - /fnc1 -1 def /lnumeric -2 def /lalphanumeric -3 def /liso646 -4 def - - /tobin { - string dup length 1 sub 0 exch 1 exch {1 index exch 48 put} for - dup 3 -1 roll 2 2 index length string cvrs dup length 2 index length exch sub exch putinterval - } bind def - - /alpha << - 65 1 90 {dup 65 sub 5 tobin} for - 48 1 57 {dup 4 add 6 tobin} for - fnc1 (11111) - >> def - - /numeric << - 0 1 119 { - dup (00) 2 string copy dup 3 -1 roll 11 2 string cvrs - dup length 2 exch sub exch putinterval - dup 0 get 65 eq {dup 0 94 put} if - dup 1 get 65 eq {dup 1 94 put} if - exch 8 add - (0000000) 7 string copy dup 3 -1 roll 2 7 string cvrs - dup length 7 exch sub exch putinterval - } for - lalphanumeric (0000) - >> def - - /alphanumeric << - 48 1 57 {dup 43 sub 5 tobin} for - fnc1 (01111) - 65 1 90 {dup 33 sub 6 tobin} for - 42 (111010) - 44 1 47 {dup 15 add 6 tobin} for - lnumeric (000) - liso646 (00100) - >> def - - /iso646 << - 48 1 57 {dup 43 sub 5 tobin} for - fnc1 (01111) - 65 1 90 {dup 1 sub 7 tobin} for - 97 1 122 {dup 7 sub 7 tobin} for - 33 (11101000) - 34 (11101001) - 37 1 47 {dup 197 add 8 tobin} for - 58 1 63 {dup 187 add 8 tobin} for - 95 (11111011) - 32 (11111100) - lnumeric (000) - lalphanumeric (00100) - >> def - - method (10) eq { % TODO: fixme - ais 0 get (11) eq ais 0 get (17) eq or { - aival ais 0 get get - dup 0 2 getinterval cvi 384 mul exch - dup 2 2 getinterval cvi 1 sub 32 mul exch - 4 2 getinterval cvi add add - (0000000000000000) 16 string copy dup 3 -1 roll 2 16 string cvrs - dup length 16 exch sub exch putinterval - [ 1 0 - 4 -1 roll {48 sub} forall - ais 0 get (11) eq {0} {1} ifelse - ] /cdf exch def - /ais ais 1 ais length 1 sub getinterval def - } { - /cdf [ 1 0 1 1 ] def - } ifelse - ais length 0 ne { - ais 0 get (10) eq { - /gpf [ aival (10) get {} forall ] def - ais length 1 gt {/gpf [ gpf aload pop fnc1 ] def} if % TODO: check - /ais ais 1 ais length 1 sub getinterval def - } { - /gpf [fnc1] def % TODO: check - } ifelse - } { - /cdf [ cdf aload pop 0 0 0 0 0 1 1 1 1 ] def - /gpf [] def - } ifelse - /mode (numeric) def - } if - - method (11) eq { - /cdf [ 1 1 ] def - /ai90 aival (90) get def - npre 1 add ai90 length ne { - ai90 npre 1 add ai90 length npre sub 1 sub getinterval - } { - () - } ifelse - /ai90rem exch def - /nalpha 0 ai90rem {dup 65 ge exch 90 le and {1 add} if} forall def - /nnums 0 ai90rem {dup 48 ge exch 57 le and {1 add} if} forall def - /mode nalpha nnums gt {(alpha)} {(numeric)} ifelse def - nalpha nnums add ai90rem length ne {/mode (alphanumeric) def} if - /cdf [ - cdf aload pop - mode (alphanumeric) eq {0} if - mode (numeric) eq {1 0} if - mode (alpha) eq {1 1} if - ] def - /ais1 ais length 1 gt {ais 1 get} {-1} ifelse def - ais1 (21) eq ais1 (8004) eq or { - /cdf [ cdf aload pop ais1 (21) eq {1 0} {1 1} ifelse ] def - } { - /cdf [ cdf aload pop 0 ] def - } ifelse - /nval npre 0 ne {ai90 0 npre getinterval cvi} {0} ifelse def - (BDHIJKLNPQRSTVXZ) ai90 npre 1 getinterval search { - length exch pop exch pop - /aval exch def - } { - pop /aval -1 def - } ifelse - nval 31 lt aval -1 ne and { - (00000) 5 string copy dup nval 2 5 string cvrs - dup length 5 exch sub exch putinterval - [ exch {48 sub} forall ] /nbits exch def - (0000) 4 string copy dup aval 2 4 string cvrs - dup length 4 exch sub exch putinterval - [ exch {48 sub} forall ] /abits exch def - /cdf [ - cdf aload pop - nbits aload pop - abits aload pop - ] def - } { - (0000000000) 10 string copy dup nval 2 10 string cvrs - dup length 10 exch sub exch putinterval - [ exch {48 sub} forall ] /nbits exch def - (00000) 5 string copy dup ai90 npre get 65 sub 2 5 string cvrs - dup length 5 exch sub exch putinterval - [ exch {48 sub} forall ] /abits exch def - /cdf [ - cdf aload pop - 1 1 1 1 1 - nbits aload pop - abits aload pop - ] def - } ifelse - mode (numeric) eq { - /gpf [ ai90rem {} forall ais length 1 gt {fnc1} if ] def - } { - /encs mode (alpha) eq {alpha} {alphanumeric} ifelse def - /in [ ai90rem {} forall ais length 1 gt {fnc1} if ] def - /out in length 6 mul array def - /j 0 def - 0 1 in length 1 sub { - in exch get encs exch get - dup [ exch {48 sub} forall ] out exch j exch putinterval - length j add /j exch def - } for - /cdf [ - cdf aload pop - out 0 j getinterval aload pop - ] def - /gpf [] def - ais length 1 gt mode (alpha) ne or {/mode (numeric) def} if - } ifelse - /ais ais 1 ais length 1 sub getinterval def - ais length 0 ne { - ais1 (21) eq ais1 (8004) eq or { - /gpf [ - gpf aload pop - aival ais1 get {} forall - ] def - /ais ais 1 ais length 1 sub getinterval def - ais length 0 ne {/gpf [gpf aload pop fnc1] def} if - } if - } if - } if - - method (0) eq { - /cdf [ 0 ] def - /gpf [] def - /mode (numeric) def - } if - - % Pre-defined fixed length data field AIs - % any AI whose prefix is not included in this table must be - % terminated with "FNC1", even if it's fixed length - /aifixed 23 dict def - [ - 0 1 4 {} for - ] { - (00) 2 string copy dup dup 1 5 -1 roll 48 add put aifixed 3 1 roll put - } forall - [ - 11 1 20 {} for - 23 - 31 1 36 {} for - 41 - ] { - 10 2 string cvrs dup aifixed 3 1 roll put - } forall - - % Append the remaining AI data - 0 1 ais length 1 sub { - /i exch def - /ai ais i get def - /val aival ai get def - gpf length ai length add val length add array - dup 0 gpf putinterval - dup gpf length ai [ exch {} forall ] putinterval - dup gpf length ai length add val [ exch {} forall ] putinterval - /gpf exch def - i ais length 1 sub ne aifixed ai 0 2 getinterval known not and { % Append FNC1 - gpf length 1 add array - dup 0 gpf putinterval - dup gpf length fnc1 put - /gpf exch def - } if - } for - - % Calculate the number of bits remaining to the next valid symbol size - /rembits { - /used exch def - ccversion (c) ne { % cc-a or cc-b - << - /a [ - [167 138 118 108 88 78 59] - [167 138 118 98 78] - [197 167 138 108 78] - ] - /b [ - [ 336 296 256 208 160 104 56] - [ 768 648 536 416 304 208 152 112 72 32] - [1184 1016 840 672 496 352 264 208 152 96 56] - ] - >> ccversion get cccolumns 2 sub get /bitcaps exch def - -1 bitcaps {dup used ge {exch} if pop} forall - dup -1 ne {used sub} if - } { - << /c -1 >> ccversion get pop % Assert cc-c - /m used 8 div ceiling cvi dup 6 idiv 5 mul exch 6 mod add def - m 40 le {8 } if - m 41 ge m 160 le and {16} if - m 161 ge m 320 le and {32} if - m 321 ge {64} if - /eccws exch def - /m m eccws add 3 add def - /c linwidth 52 sub 17 idiv def - m c idiv 90 gt {/c c 1 add def} if - /r m c div ceiling cvi def - /tgt c r mul eccws sub 3 sub dup 5 idiv 6 mul exch 5 mod add 8 mul def - used 8296 le {tgt used sub} {-1} ifelse - } ifelse - dup -1 eq { % Upgrade CC-A to CC-B or CC-B to CC-C to fit - pop - ccversion (a) eq { - /ccversion (b) def - } { - ccversion (b) eq lintype (gs1-128) eq and { - /ccversion (c) def - /cccolumns linwidth 52 sub 17 idiv def - } { - /ccversion -1 def - } ifelse - } ifelse - used rembits - } if - } bind def - - /encode { - dup /raw ne {exch get} {pop} ifelse - [ exch {48 sub} forall ] - dup length exch - gpfenc exch j exch putinterval - /j exch j add def - } bind def - - % Pre-compute alphanumeric and numeric runlengths and position of next ISO646-only characters - /numericruns [ gpf length {0} repeat 0 -1 ] def - /alphanumericruns [ gpf length {0} repeat 0 ] def - /nextiso646only [ gpf length {0} repeat 9999 ] def - gpf length 1 sub -1 0 { - /i exch def - gpf i get - (00) 2 string copy - dup 0 gpf i get dup fnc1 eq {pop 94} if put - i gpf length 1 sub lt {dup 1 gpf i 1 add get dup fnc1 eq {pop 94} if put} if - numeric exch known { - numericruns i numericruns i 2 add get 2 add put - } { - numericruns i 0 put - } ifelse - dup alphanumeric exch known { - alphanumericruns i alphanumericruns i 1 add get 1 add put - } { - alphanumericruns i 0 put - } ifelse - dup iso646 exch known exch alphanumeric exch known not and { - nextiso646only i 0 put - } { - nextiso646only i nextiso646only i 1 add get 1 add put - } ifelse - } for - - % Encode the general purpose field - /gpfenc 8296 array def - /i 0 def /j 0 def - { % loop - i gpf length eq {exit} if - { % not a loop but common exit point - - mode (numeric) eq { - i gpf length 2 sub le { - 2 string - dup 0 gpf i get dup fnc1 eq {pop 94} if put - dup 1 gpf i 1 add get dup fnc1 eq {pop 94} if put - dup numeric exch known { - numeric encode - /i i 2 add def - exit - } if - pop - lalphanumeric numeric encode - /mode (alphanumeric) def - exit - } { - gpf i get dup 48 lt exch 57 gt or { - lalphanumeric numeric encode - /mode (alphanumeric) def - exit - } if - /rem cdf length j add rembits def - rem 4 ge rem 6 le and { % C1 + 1 into 4 to 6 bits - (000000) 6 string copy 0 rem getinterval - dup gpf i get 47 sub 2 4 string cvrs - dup length 4 exch sub exch putinterval /raw encode - /i i 1 add def - exit - } { % C1.FNC1 - 2 string dup 0 gpf i get put dup 1 94 put numeric encode - /i i 1 add def - exit - } ifelse - } ifelse - } if - - mode (alphanumeric) eq { - gpf i get fnc1 eq { - fnc1 alphanumeric encode - /i i 1 add def - exit - } if - gpf i get dup iso646 exch known exch alphanumeric exch known not and { - liso646 alphanumeric encode - /mode (iso646) def - exit - } if - numericruns i get 6 ge { - lnumeric alphanumeric encode - /mode (numeric) def - exit - } if - numericruns i get dup 4 ge exch i add gpf length eq and { - lnumeric alphanumeric encode - /mode (numeric) def - exit - } if - gpf i get alphanumeric encode - /i i 1 add def - exit - } if - - mode (iso646) eq { - gpf i get fnc1 eq { - fnc1 iso646 encode - /i i 1 add def - exit - } if - numericruns i get 4 ge nextiso646only i get 10 ge and { - lnumeric iso646 encode - /mode (numeric) def - exit - } if - alphanumericruns i get 5 ge nextiso646only i get 10 ge and { - lalphanumeric iso646 encode - /mode (alphanumeric) def - exit - } if - gpf i get iso646 encode - /i i 1 add def - exit - } if - - } loop - } loop - /gpf gpfenc 0 j getinterval def - - % Create pad - /pad cdf length gpf length add rembits array def - pad length 0 gt { - 0 5 pad length 1 sub { % Fill with 00100 - /i exch def - pad i [ 0 0 1 0 0 ] 0 pad length i sub 5 2 copy gt {exch} if pop getinterval putinterval - } for - mode (numeric) eq { % Prefix shift from numeric to ASCII - /pad [ 0 0 0 0 pad aload pop ] 0 pad length getinterval def - } if - mode (alpha) eq { % Prefix FNC1 - /pad [ 1 1 1 1 1 pad aload pop ] 0 pad length getinterval def - } if - } if - - % Concatinate fields - /bits [ - cdf aload pop - gpf aload pop - pad aload pop - ] def - - ccversion (a) eq { - /pwr928 [ - [ 0 0 0 0 0 0 1 ] - 68 {7 array} repeat - ] def - 1 1 68 { - /j exch def - /v 0 def - 6 -1 1 { - /i exch def - /v pwr928 j 1 sub get i get 2 mul v 928 idiv add def - pwr928 j get i v 928 mod put - } for - pwr928 j get 0 pwr928 j 1 sub get 0 get 2 mul v 928 idiv add put - } for - /cws [ 28 {0} repeat ] def - /b 0 def /c 0 def - { % loop - b bits length eq {exit} if - /bs bits b 69 bits length b sub 2 copy gt {exch} if pop getinterval def - /bsl bs length def - /cs cws c bsl 10 idiv 1 add getinterval def - /csl cs length def - 0 1 bsl 1 sub { - /i exch def - 0 1 csl 1 sub { - /j exch def - cs j 2 copy get - pwr928 i get j 7 add csl sub get - bs bsl i sub 1 sub get - mul add put - } for - } for - csl 1 sub -1 1 { - /i exch def - cs i 1 sub 2 copy get cs i get 928 idiv add put - cs i 2 copy get 928 mod put - } for - /b b bsl add def - /c c csl add def - } loop - /cws cws 0 c getinterval def - /barcode cws length 4 mul string def - 0 1 cws length 1 sub { - /i exch def - (^ ) 4 string copy dup cws i get 10 4 string cvrs - dup length 4 exch sub exch putinterval - barcode i 4 mul 3 -1 roll putinterval - } for - options (dontdraw) true put - options (cca) true put - options (columns) cccolumns put - /args barcode options //micropdf417 exec def - } if - - ccversion (b) eq { - /barcode bits length 8 idiv string def - 0 1 barcode length 1 sub { - /i exch def - bits i 8 mul 8 getinterval 0 exch {add 2 mul} forall 2 idiv - barcode exch i exch put - } for - options (dontdraw) true put - options (ccb) true put - options (columns) cccolumns put - /args barcode options //micropdf417 exec def - } if - - ccversion (c) eq { - /barcode bits length 8 idiv string def - 0 1 barcode length 1 sub { - /i exch def - bits i 8 mul 8 getinterval 0 exch {add 2 mul} forall 2 idiv - barcode exch i exch put - } for - options (dontdraw) true put - options (ccc) true put - options (columns) cccolumns put - /args barcode options //pdf417 exec def - } if - - args - dontdraw not //renmatrix if - - end +% --EXOP: version=B +% --RNDR: renmatrix +%%BeginResource: uk.co.terryburton.bwipp codeone 0.0 0 0 0 +%%BeginData: 82 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\ KF D5Z 2F* j(NA moLsA +Wf3'P!FGY<0B5(@ ZmRN0o c8t P )XR (F _-_! H]f tD5*C&O5*@ ^MH]ft&Eckr +V1OYEdI?J0)*g/N :DfBf4 Df0 W Z5*@ ^MP# Q@= FD5Z2F*j'+ I?I/TF*)\HA +KZ/-EcYr5DMS:K! Kp-:!E 5.E Ou%0 $H#R >A0 61KF+EVXHA WeitP#QC/Ec +Yf=05YcC+C\c"@r GmhP% 'TNO u"b+L ]ESo @UX :eDe*F+NWE ILNI-gJD0'? +Q5&-6EP'N4"C6AU R!KmI :C6Cc D1Qlm D3/ @Qj"-Q?@/8 ]H@P!3W:!Ks +FF5*C/R30Ia,"-T X>"-Pj2 9RV8N3 ,N_LP !3W D5*C2S@VV& ,05?Y6Ou"b# +@<,jrA7Zm#F(^:/C6D8R1Qk"OP#ZpnAUT_@04J@1Ch7K,@UX:eDe*FB@ZiNf@<[&OASu!rA8,p +oNWX<1GEOb1P#Q"1@rGmlDJ+t3Eaa0T4aShlGB4m9@<-0qDNY"-Q?@/P'AWo+DHW4Oo^_%05;VEL]NY>Ou%NLOu"b++DQ]5Oo^_%I=#IJF!,4P!:,em@s;u:C5;nR!FoeOEeo4.WKMKZBcq,G!KmJH1 +GDOhd!Jgl7&;Um'+Bsj,7>NdV2Ma&A!4I\QL]N;7L_bd^>p*@3!Chl7LeN +UmL&l=L!/u^8L]iMLL`]nF>E/_SLhMTRLffB5gkGhHL]iMp*@3!D%qFP_K0mLj4XXaG +'aML^8e@L_PY6>p*@3"B-m,0Sg!j$]#.G"Gd2:!Jk6A@u+W#+Bsj/;_9aYL^8eOL_PXNL^8e;L +gu6NLgs^5>E/hb/Mf):#`'RY*f(5\%#=q?@u+WN@pL3]NW`<50fFh!L_5FSL^JqFL]Np*@3"B6s/15HKt+c%7s(l/`Z!Jk6A@u+W#+Bsj/<%TpdL_,@sLbOW3L_bdILgu6NLgs^5?'6u +sBnubP1OCcl+Dk\3EbT$)+DI!3Ou"b7ATDi7D281T99M(aEc6/C+Dlo8P"Uro04Sp:F!,=U!g6 +3>1G<9KDepP5L]`f5Ou"b%@s;u:D28=X99M(aEcY`7+DloGB8pVA7Kh)P#-KYDeid,+D,%uF(LLjI?IQJCLML8P!FGY<%hr.Bnue +Q!Ko6eP%A]VH#R>XE-j6JGB4m2+CfV:OogehA7Kh)+CfV:P%'TRH\MNOI?K4gOu%NL<%ha*@WN +Z4F(/sK$'I(tARf1j+EDO4Cm#*f1Pc$e!HN6jCkr+TWI$:4P!5$b04T38+Cnu$@Zh%\1Pc$e!G +#\Z@Yb&JWI$:5P!5$b@s;B)C*7#1F!,3?EcY]+P&+iq!Kp*=G^Y`G@s;C'+DDs.G@H_[I?I,SB +4`9-FEqh:H\`emH\MP$I?ITn1G$KEcZ +&8B9GHA99MJZF)5c-P!5%%Oo]3-/MWE'EcYZ*DeG4sP"U4MP')q1L]Djd9IF"@WNZ+P"U +r>P'(>GE+40M!.C#_?'7""!/LYd@rPn5!KsF/05Zk9Ou"b,+EDO5GB4mDP"UroL]E53ARf[gL] +N[Oo]'2AS,Oq+D#&%@N]EKWJCSP,Wkm8R7K=L]E56P +"[NNDfCk'Ou%msL]il704JjAP!5$bI=$tX0JG170SfmqV32^Z3+I/R+DI!3L]WA9P,4P,Wkm8R3uZ0p4_`1QDVm0JG17L]rsq]\CP!5$b06D,O+Bosu0o,gc"-Q?@!g7\915G +pd!g66?!g7\3Ou"b#Dfd+++Cd-^",I#A9TfI?F^m1_!f-rA9TfI?F^:.dI?ITID..N/EZen&De +tSQA!-k7DfCkbD/E^'+EE8=Oo]*'DetSQA!-k%Dfh.f04Q,7+EVO@P%'RTOu$SjA7KOoP!+.F@ +u(,J1G+F-:?d +M#VmdK3aWr04AmCBkCd`F+F*i]CI?K52Oq)hKDesKAL]MpeK7/mmH\_Z3DesKN!g9O +0L]MpeK89MUOq)hp!/LYcDesKN"Hoa2L]DjdK89Pa!.C"?HXgu1F,0j[WJCV=;L=6"I?K5=!Fp + %aF,0j[WJCV=;L=6"I?K52Oq)hKDesKN!KsF6&l.(1,1RA1G;(T#Ve(h1GgmE1G;+U#Ve(h1,1RA1G;.V$8F:j1GgmE1Ggm@7?.^01,1O +=1GgmE1G;4X$8F:j1,1O=1Ggm@7ue!41,1O=1GgmE1Ggm@8<+*51,1O=1,1RA1Ggm@;iV,@2E! +HJ1,h0Gq\Me>9I.+&;UQs+C-Wf+BosmL`2'X>p* +E+6m,\V>q\Vh>9I.+)Mf28+C-Wi+BosmL`2'l>p*@-7Yi0m+BsX?La$+I>DPb),$cDP_(0O5f,01[3i+BsX?LdkYm>DPV%7U7-@Lh_`8>p*@-)Mgpi+BsXgLe(eo>DR$M8 +6m?D02jGW0HaRB>q],.1,'hT+BsX/L]h!+>q],.1GBqU+BsX4L]h!+>DNfG#$i?W02sMX2BZ3H +>DNQ@$=+c[02sMZ1*BdD>DNiH$=+cYL_,@N>p*E+<%Tpd+BosmL_tpT>p*@-(l/T++BsX=L^m] +5>p) +% uk.co.terryburton.bwipp/codeone 0.0 0 +%%EndData +%%EndResource +% --END ENCODER codeone-- -} bind def -/gs1-cc dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +% --BEGIN ENCODER gs1-cc-- +% --REQUIRES preamble raiseerror renmatrix micropdf417 pdf417-- +% --DESC: GS1 Composite 2D Component +% --EXAM: (01)95012345678903(3103)000123 +% --EXOP: ccversion=b cccolumns=4 +% --RNDR: renmatrix +%%BeginResource: uk.co.terryburton.bwipp gs1-cc 0.0 0 0 0 +%%BeginData: 152 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\ D/! L#DfB6 !1 bgqP3% oDi +/n8fPFCfK5H"(o: FDl%L @Wu O*E 0A q< G`i LhB 6,dZ@q 0k A'Tt>: %52 +X=FD5Z2F-8_M1G< 3GEa s#u AW f6 ?1G <9W DKK E0@< +Wi+@;L!rOu"b$@s 2F(F ( oQ 1N WER O1G <6J@ rH1+D +/OENs,o/kCh[d/H #R>T!0 T,k C h[d 2B k2=! M#W VoDfBf4Df0 WZY:js=EbTE +(FEqh:P!+/J!Ko= '%<$3- Bl@ m 1H]k FA@; L!r P!+/T5^eep OuSV6P,4G %>ARTI9 L]];QE +pe@<-F2@:O(aA;C: +?A79Rg@UX:uFCAZpARo^rDJ=n.04\L5@:EYcFE2MA@psIjA;C@AA79Rg@UX:nBl.R+ARpT!04\ +L5@:EYcAU&0&DIdpe@<,q(E+*WpARok(@:O(aA;C@P4s4ZUDKL/CAWf\>@q0"eCi +sT4F-8_M1OYEc04fBI@;]V&05505?Y6Ou&8DOuS6tL]`f6Ot:NoFHSh&L]N[L]`f( +P"^:NOuRB&FHSh&P!5%SP%&0h!AA2N5*@^?F``E>C6D8R5^eeqI?J/iOq*X204AR9+BosoOu"b +"Bm*p$L]W_sOu$QUEas#uAWf$9@Yb&JWJCS<5*ATdOuSI%P!+/T5^eepNWCSlNKSFI5*C&O5)o +XlP)XgO5*C&O5)9;s!Kr4dH]A)^",Hu@LOG=c>9I?gF-6TfFcm]"!g3SI=C!RgBlfG$Ou$N\G% +#3C",Hu@LLk^L@;]V=G^Y`dP'&ElF*2G@ATE-\3/Bk`8s2Ao>*<1GOq*X204A[9BON#G4GZ:Z!Jjp+OuS7`P,X6@FDkW&DLI[=LbOVcLcKgF3/@^#!Jgr%D +dmEuI?I-5DIYD]"Yh_d0ekjUOu"b/F_t]1Bk&8J4GWun!JkrHOuSI'0JJ:aP,4Fr?H@(f +7L^0*BL^/$?@VK_.P":BPNX.?o0eb=90JJ;,NX.?o0eb=90JSA0L]N;bH]g@C!6(*%L^8*@@VK +_.P":BiL]N;rH]g@C!5"BpL^8*@@VK_.P":C9NX.?o0ekC:0enJ,NX.?o0ekC;0JI<\F_t]1Bk +*/*0JG1s@;Kmr@;^4)ATDKpNWh*j0eb:F5*@^=ATVU(A<$^G0TnSG@;0e=!0U!8!\lEm4^i&GL +]ET2NWLpoP!+tKHXUW3@;I&pBlf(1P"Us2OuS6tL]W`5Ot;=gJt!g66?/DN<9!/LZ3!F:jEI?IT=BlfGHL]ETTHX +UW0L]ET2NWLphP!+.FB5hH*>9I?gG%#3I!\lBl97))M8R7K8@;0eG@Yb&J:jXj.E+U4s+D5Y*O +ogehAo;*5+C1-dI?IP_@;0d*@;0e=!F]\`P%'4JP,XU9I471OYEd05YW@;._UP%'SkHXUVK0Hb7PEb1%-Oo]!*3A?V*DK'W-P,X6D0(j@@;._UEb0*N@ZkST05YW"^u4dBOR&eH\_]Y!I^,1?'6us@;0d;+CSu*P%'4JP#-L6Blf(2P"U4MM# +VmdH4d'i404SO)+BosuA7gu+P'(2IF"r[V1,4qTH\_]Y! +.B3M!Jgc)P#YeN1OXU'@q90o>9IEdAs*4YFbg$'Ou%NL%),*0Hb7PEb1%-P"_$uH]hj$5*C&O5*C% +A@EV0sLbP!kI?I0-05b65FEP,Wkm8R3uX@VKq*P!5$b04SO)+BosuA +7gu+P'(YOBlnEZ!g7\7@VKq*Oogeh?'7!lH]AFe0JG170JG170Sg(!V32^Z3,WnJCkr.K$Bh6K +0TnDY@YbAS5*Dn.5*C1qP!45K0TrD`P"Aq4DIR=%F-8_M1QDVm0JG17L]rsq]VqBlnEZ5*@]T@q90o>9I +EdAs*4YFbg'S!Jgc4!Jgbo@VKq*Oogeh@:EqmF-6TfF^:.dI?ITIDe*F>#B"[$ATDKpP!+.FB5 +hH*>9I?g3A>JbD0p\o8RZ=SP%'4JP#-L;DIYDLP#P_M1OXU'ASu"!+Dl%-AW?q&CiF&rP!+/#C +iF&rI=!)FCiF&rDKTf-EbT$3P#[Z$055;H>9I?g3A>JbD0p\o8RZ=SP%'4JP#-L;DIYDLP#P_M +1Gp+'.FHSh&P!5%SP%&0h!AA2N5*@^MP"769A7crg+CeqoOogehDfp/X!,@ZjOogeh?'6 +usB5hH*>9I471LY!=P%'4JP#-"6A7^c)@;Kmr@?PJjEdKHVDe*F>#B"[$ATDKpOu%NL<.0p004 +AR9+CSu*L]LpuF-:!g!KsFF9Th2?BlfGHL]ETTHXUW00oc;j0p4\.Blc"h"?8(h1m1"bEdKHPE ++U4s+D5Y*Oogeh@;0mnC`m/#F"rhNH[V&K?'6us@;0d*@;0e=!F]\`P%'4JP,XUDN98!Jgl*I?I-,H]A +.]0SfdnV32^Z30H7W!Jgo8s,r.n0TlI"G[Y;uBm=3"L]`G6P)#3FI?I0+L^T">L_P2aP":BFL` +_ERLa7=qP":BX?$hA7L]Wa9Ot`%Y@;0=fG\(EA",Hu@LQZn1P"CH0L]LpuF-:!g!KsF/056S5O +u"b"BcphuF!,1[99M(aG%#20@;0mnC`m/#P"UroB5hIG@UWu6@Zgb8@;M*9Oo^^POuS6tB5hIG +H'1."E+Y8B@;-igP!45@P"ArBH'1."E+Y8B@;1m6Oo]`7C`lrF5'q^@8R7L)05#69P!5$bBcph +uF-:!g!KsFFD..-jBm=3"+CSu?!/L]>9TieHE0:?NB5hIG@Yb&J!KmbP3/@QIE+Y8YOuR)nAs- +V8DIYDaGV<]KAs,?@1OYEcI?I,SEb0)sBlnEC06M>IA1Ljpp*@+!2kPOMMQG3@Ydcb+BsR#`J+AjL&d*eCkthl+C-X0+BosmL +&k,*!@W['!/:L#L&dm&BS\WR+BsR&!/:Q2L&r3H!MG/J0STSSL&dTsE/7&@+C-*oL'40("8ITQ +8;72=L&pdu!FUW_#_i?+L&dTs@#-dJ+C-*R4s4?FG%G]8Bl@mP94MIADesQ5DKCU8P,XU;04JX +;@ps=tP!5$bM#UpuFCS`uF*j'0F`V,)P"L(a5(/SnP')298Wl&hs,q5GF`V,)P,Wkm<.0*U4>1 +3#s#rUh@q0[nEcYr5DN[YUFY@SSF`V,)L^9/%OqP&-:FL^'#WOo^_%D29U'@= +*e9I?IQHLaeKZD2&%`P$sLVH\`5]P#Q:Q!25QJD2&'VP$sLVH\`emP#Q:Q!C;l@H\aq8P#O)G@ +q0_(P!5$b05VhK+D#%mGB8oJL]`e@Ou"b$+Dbb0GA1T0BS\L.WJD.L;N`hQ+CgR4Lg#s@sWKK5s"d2c>#*Nec5)9B +*C6AUR#a0"e1NdbMA;24?P$r]ZB658=F(JmFWI9,Ls*^&1I?ITn3/ITt4aW?7@q0[nEcYr5DN4 +a+P!+.F@q0[nEcYr5DN4a,Ou%N5@q0[nEcYr5DN4a,P!*VqDKL/CAW@".F"o7$1,tF[Op$+b@q +0[nEcYr5DN4a-Ou"b$@q0FnF_u#;+Dbb0GA1T0BS\L.WJD.L;N`haHS8l=G%G]8Bl@mFs,o0dP +#Zpno(D.74$F+'3NI?G)'1G<DKTf-EbT$(F`)7C +BnuhR!Kp*3!g3SIG^XpVF_t]1Bk)1+DK?q7L]ET_I?ITn3+6WBBOPe$D.Ra%A!0$=@!cFD5f72Dd=1DJ +XS@BnubPG^XpVAU&<2F)Nrn2K*JLGp$fDDIn'7Ble2N1cB8iCj@.;L]NY>P"UT3Oo^_jI?ITYP +"76=E+W[!@tl+>OpR:-0564BOu"b+L]ESoHYFU8E+Y8BP!+/T5^eepHYm\3AW@"5F_t]1Bk*;h +HYFU8E+Y8BL]Wa=P$r]n!g9CC3/@QIE+U5,P"UrtAo;*5P!+/TFbj@PP#RThOuS6uB5hH*Bnue +Q!Kp*=3+d&<0p4\HP')ReI?IQmG`k%(F_t]1Bk*;iP$iWSF_t]1Bk&8sDI[TqAM7a?BnuhR!Ko +7%5^eepP'(SLCiF&rDKTf-EbT#+DKTf-EbT#+ASu!rA7[E2De*F>$t3skBOPe$D.Ra%A!/X25^ +dulE+U5,P"UrtLbP!(P!4[^P#.<^HYd,,E+iZtF_t]1Bk&9'F_t]1Bk&8sDI[TqAM7n=A7^c0@ +;Kmr@;^4)ATDKpOu&7dI?IP_Eb0)1@q927@VV&,Eb0)sBlnEZ1NI&DL]il5Eb0*D#*NDX"FH.5 +0JG170JJ:eP,4$t3skBOPe$D.Ra%A!0!%B5hH*Bp),$DIYDa4aUdY@k +f*7CiF&rDKTf-EbT#+ASu!rA7[E2De*F>#B"[$ATDKpOu"b*+DHW4Oo^_%P!FGY<+g/^+DI!3O +uR/sD`0F1P!5%:P!3;jE+iZtF_t]1Bk*;iP$jGlOp$,JBle2N1c?IbCiF&rDKTf-EbT#+ASu!r +A7[E2De*F>#&/-s2Dd=T1Qk"OP#Q=AD.Ra%@rc^0F!,1[98Ee88pbAlF_t]1Bk&8oCiF&rDKTf +-EbT#+ASu!rA7[E2De*F>#B"[$ATDKpOu&7dI?IQIF_t]1Bk)1+DK?q7P"UrtL]il5P!3TC!G? +@`P%'S;Op$,JDKTf-EbT#+@;Kmr@;^4)ATDKp+D#G#De*E4D/WrrNX'HED.Ra%A!/X25^eepB5 +hH*Bp)+tCiF&rDKTf-EbT#+ASu!rA7[E.+DHW4Oo^_%P!FGY<,HPaAW?t/F)Nrn2Ng4MB5hH*B +p),$DIYDa4aUdY@kf*?F)Nrn2BZRK@rGmh05YWOu&7dI?IQI +F_t]1Bk)1+DK?q7P"UT6P"KV'G][Y@D`0F1Df0B:+DI!3L^K;;Op$,JDKTf-EbT#+Ble2N1c?I +fDI[TqAM7n=A7^c+DKTf-EbT$H1Qk"OP#Pk+E+iZtF_t]1Bk)1+DK?q7P"UT7P"KV'G][Y@D`0 +F1Df0B:+DI!3L^K;;Op$,J@;Kmr@;^4)ATDKp+DGn82Dd<7ASu!rA7[E2De*F>$t3skBOPe$D. +Ra%A!/X25^eepB5hH*Bp),'F)Nrn2BZRK@rGmh052PCL]NY>Ou&7dI?IQXP%B')AM7\8Aft`*A +n>jiL]D1Q9Th1bE+*9"@q927@V9XlP%'RTEb0)sBlnEZ$'I)`@:YO1L]ET7H\_ZX"`Rm\P%'4J +P,Wd]Bp(ZC1N6c5+DDs&L]E52L]N;3L]C_:!,u@WP%&-gWJC_6!g4Fa:j\?hI?IQmFcoF]H$ti +HD/WrrNX'HED.Ra%A!0!%05t?1+BsX%L]E52L]DC&ADN98!/LW2!/LW2! +/LY]LdZTG#EfCAP(R&'1Pc'f!Jj-j05?Y6Ou"b7L]ESoL^&\8L]MiUBp(ZC1GWI?IP_@WNZ$BlnD=@YdH^BlnEZ@UbM"L]W_WP#-Lg5(/SnP')p]Ou +"b#F)2t.F-:!q1G<6Z+CfV:+CcO'F)6X>P#@):Oo^_>Ou"b$F)2t/F-:!q1Pc$e!Fg+dL]N[E-,f4DKCgDA8c@-A9)+&FE2M8P'CnaFD5Z2F,g?4@psJ"F_-_\DfBf4Df0WV#@h[g +F_u#;@q0"eCisT4F-:c$@<-"%+C\c"@rGmh+E)4@Bl@m10/%0V@rcL,A7dYQ2j-Cg1OYEc@q0[ +nEcYr5DN4a,P!+.F@UX:eDe*E%@VKq*P%'4QP#@I>Ou%moL]LsnEas#uAWgMY!KsF/056S5Ou$ +Q]FE8R=L^9/[L^9/;L]ET%H]eDc!g7AJP"CH2P#>atEas#uAWf5kP!5%RI?I->E-,f4DKCgDA8 +c@-A9)+&FE2M8P'CnaFD5Z2F,g?4@q'P#F_-_\DfBf4Df0WV#@h[gF_u#;@q0"eCisT4F-:c$@ +<-"%+C\c"@rGmh+E)4@Bl@m10/%0V@rcL,A7dYQ2j-Cg1OYEc@q0[nEcYr5DN4a-P!+.F@UX:e +De*E%@VKq*P%'4QP#@I>Ou%moL]LsnEas#uAWgMY!KsF/056S5Ou$Q]FE8R=L^9/[L^9/;L]ET + %H]eDc!g7AJP"CH2P#>atEas#uAWf5kP!5%RI?I->E-,f4DKCgDA8c@-A9)+&FE2M8P'CnaFD +5Z2F,g?4@q0V$F_-_\DfBf4Df0WV#@h[gF_u#;@q0"eCisT4F-:c$@<-"%+C\c"@rGmh+E)4@B +l@m10/%9TAi)5$P!>*cI?IQ +% uk.co.terryburton.bwipp/gs1-cc 0.0 0 +%%EndData +%%EndResource % --END ENCODER gs1-cc-- % --BEGIN ENCODER ean13composite-- -% --REQUIRES ean13 micropdf417 pdf417 gs1-cc-- -% --SUGGESTS ean5 ean2-- +% --REQUIRES preamble raiseerror renlinear renmatrix ean5 ean2 ean13 micropdf417 pdf417 gs1-cc-- % --DESC: EAN-13 Composite % --EXAM: 2112345678900|(99)1234-abcd % --EXOP: includetext % --RNDR: renlinear renmatrix -/setpacking where {pop currentpacking true setpacking} if -2 dict -dup /ean13 dup /uk.co.terryburton.bwipp findresource put -dup /gs1-cc dup /uk.co.terryburton.bwipp findresource put -dup /renlinear dup /uk.co.terryburton.bwipp findresource put -dup /renmatrix dup /uk.co.terryburton.bwipp findresource put -begin -/ean13composite { - - 20 dict begin % Confine variables to local scope - - /options exch def - /barcode exch def - - /dontdraw false def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - % Split the linear and composite parts - barcode (|) search { - /linear exch def - pop - /comp exch def - } { - pop - } ifelse - - gsave - - options (lintype) (ean13) put - options (inkspread) (0) put - options (dontdraw) true put - - % Plot the linear part - linear options //ean13 exec //renlinear exec - - % Plot the separator - -1 72 rmoveto << - /ren //renmatrix - /pixs [ - 0 1 93 {0} repeat 1 0 - 1 0 93 {0} repeat 0 1 - 0 1 93 {0} repeat 1 0 - ] - /pixx 97 - /pixy 3 - /height 6 72 div - /width 97 72 div - /opt options - >> //renmatrix exec - - % Plot the 2D part - -2 6 rmoveto comp options //gs1-cc exec //renmatrix exec - - grestore - - end - -} bind def -/ean13composite dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp ean13composite 0.0 0 0 0 +%%BeginData: 22 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\\ /Rr:R3 %o Di/n8f PFC +fK5H"(o:FDl%L@W uO*E0 Aq< G`k $ >Eb 0-) Bl7 KjEfrC 8F _`U>D_ ?-C +EcQG7F`MSBDD#CB BlJ$S g6- ]D3 %o ;` DJ` g(E bTc]3% oD i/n8fP FCf +K5H"(o:FDl%L@Wu O*E0 Aq< G` iL hAR TI2 1Lk ??E, +Tf3FCffT'Tt>:%5 2X=F D 5Z 2F -8_ M1G <3GE as#uA +Wf6?1G<9WDKKE0@ DP!5%OP!5$bI =%,/FE 2M8 Ou%N L! IU&i HS9 2LDIm6sP!5 $bP'&EfDf'H +V5*@^MH]iN"P#[Z ?DfBf 4Df0W V#Ae* lFE qh:NWj!&DD FD5Z2F"]1X@;[eUP!:TQEb0-)Bl7KjEfrYCs+j4/L-.ROEb0,A061WAD..O,Bm;:MBm=\ +A>DN98!Jk$.L]DjdK89Pa!/LZ3!/Op-L]DjdK89M`!Jg`3!Jk$.L]DjdK89Pa!*q6sBm=lY@4u +S6G^5)I05+p2B4uCC#)Gg52D98gA9;L@@>II;2D8ufF\/Rr:R5;+[1ASu?nFE2)?P!>+(Ou[rR%[&V$ARTI21Lk??E +,Tf3FCgUpP%64gCG'+8/p(ZFEd;,:Ecc5;/n0$=E,Zq1AS,XoATD@'Dfp)1AWh2!3A5GbFDtYu +CM@[!P.H"'F`V,9E+*6lBl7R3P#M~> +% uk.co.terryburton.bwipp/ean13composite 0.0 0 +%%EndData +%%EndResource % --END ENCODER ean13composite-- % --BEGIN ENCODER ean8composite-- -% --REQUIRES ean8 micropdf417 pdf417 gs1-cc-- -% --SUGGESTS ean5 ean2-- +% --REQUIRES preamble raiseerror renlinear renmatrix ean5 ean2 ean8 micropdf417 pdf417 gs1-cc-- % --DESC: EAN-8 Composite % --EXAM: 02345673|(21)A12345678 % --EXOP: includetext % --RNDR: renlinear renmatrix -/setpacking where {pop currentpacking true setpacking} if -2 dict -dup /ean8 dup /uk.co.terryburton.bwipp findresource put -dup /gs1-cc dup /uk.co.terryburton.bwipp findresource put -dup /renlinear dup /uk.co.terryburton.bwipp findresource put -dup /renmatrix dup /uk.co.terryburton.bwipp findresource put -begin -/ean8composite { - - 20 dict begin % Confine variables to local scope - - /options exch def - /barcode exch def - - /dontdraw false def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - % Split the linear and composite parts - barcode (|) search { - /linear exch def - pop - /comp exch def - } { - pop - } ifelse - - gsave - - % Get the result of encoding with ean8 and gs1-cc - options (lintype) (ean8) put - options (inkspread) (0) put - options (dontdraw) true put - - % Plot the linear part - linear options //ean8 exec //renlinear exec - - % Plot the separator - -1 72 rmoveto << - /ren //renmatrix - /pixs [ - 0 1 65 {0} repeat 1 0 - 1 0 65 {0} repeat 0 1 - 0 1 65 {0} repeat 1 0 - ] - /pixx 69 - /pixy 3 - /height 6 72 div - /width 69 72 div - /opt options - >> //renmatrix exec - - % Plot the 2D part - comp options //gs1-cc exec - dup (pixx) get 69 exch sub 6 rmoveto - //renmatrix exec - - grestore - - end - -} bind def -/ean8composite dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp ean8composite 0.0 0 0 0 +%%BeginData: 22 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\ B6 ,dZ @q1Z]0 6M %_@rEu AAT +Dg:@Wc^5Df.1:GA 2#8P1 l(D OuP + 8AS ue#06 M% _@rEuA ATD +g:@Wc^5Df.1:GA2 #8P1 l(D Op s' U@; \&7 Df' H3F( +o`-H\`B!23JD%Df Bf4D f 0W Z5 *@] T@U X:eD e*FB5 +*@]TA8c@-A9)+&+ D,%uF( LLj D fBf 4D f0WZ Y:j s=EbTE(FEq h:P!+/J!Ko= +'%<$3-Bl@m1H]kF A@;L!r P!+ / T5^e epOu SV6 P,4DN9 +8!Jj$gL]DjdK89Pa!/LZ3!/NpfL]DjdK89M`!Jg`3!Jj$gL]DjdK89Pa!*q6sBm=lY75&UoG^5 +)I05+p2B4uCC#)Gg52D98gA9;L@7>OKt2D8ufF30",\Bm=lc98H$"5*Dn$#*O]o061WAD..O,Bm>e*P"h*"I?G)'1 +G<D_?-CEcQG7F`MSBDD#CBBlJ#6A7]@eDImj"F)Q2A@qCgG +OuY1:ATVm"@r#drB9KiQP'(hWFDtYuCM@[!I?IP~> +% uk.co.terryburton.bwipp/ean8composite 0.0 0 +%%EndData +%%EndResource % --END ENCODER ean8composite-- % --BEGIN ENCODER upcacomposite-- -% --REQUIRES upca micropdf417 pdf417 gs1-cc-- -% --SUGGESTS ean5 ean2-- +% --REQUIRES preamble raiseerror renlinear renmatrix ean5 ean2 upca micropdf417 pdf417 gs1-cc-- % --DESC: UPC-A Composite % --EXAM: 416000336108|(99)1234-abcd % --EXOP: includetext % --RNDR: renlinear renmatrix -/setpacking where {pop currentpacking true setpacking} if -2 dict -dup /upca dup /uk.co.terryburton.bwipp findresource put -dup /gs1-cc dup /uk.co.terryburton.bwipp findresource put -dup /renlinear dup /uk.co.terryburton.bwipp findresource put -dup /renmatrix dup /uk.co.terryburton.bwipp findresource put -begin -/upcacomposite { - - 20 dict begin % Confine variables to local scope - - /options exch def - /barcode exch def - - /dontdraw false def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - % Split the linear and composite parts - barcode (|) search { - /linear exch def - pop - /comp exch def - } { - pop - } ifelse - - gsave - - options (lintype) (ean13) put - options (inkspread) (0) put - options (dontdraw) true put - - % Plot the linear part - linear options //upca exec //renlinear exec - - % Plot the separator - -1 72 rmoveto << - /ren //renmatrix - /pixs [ - 0 1 93 {0} repeat 1 0 - 1 0 93 {0} repeat 0 1 - 0 1 93 {0} repeat 1 0 - ] - /pixx 97 - /pixy 3 - /height 6 72 div - /width 97 72 div - /opt options - >> //renmatrix exec - - % Plot the 2D part - -2 6 rmoveto comp options //gs1-cc exec //renmatrix exec - - grestore - - end - -} bind def -/upcacomposite dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp upcacomposite 0.0 0 0 0 +%%BeginData: 22 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\3 %oDi/ n8fP +FCfK5H"(o:FDl%L @WuO* E0A q B6 ,dZ @q1Z]0 6M %_@rEu AAT +Dg:@Wc^5Df.1:GA 2#8P1 l(D OuP + 8AS ue#06 M% _@rEuA ATD +g:@Wc^5Df.1:GA2 #8P1 l(D Op s' eE+ <!BkM+$L^&Z+Ou=t;Bk2=!Lgc*1Ou=t3E-*4@E-,f4DK?pa4teR0ASu?nFE2)?P!=d%L +^'#s@rH4'+E)4@Bl@m10/$sZ0eHmFP!:TQEb0-*@ +% uk.co.terryburton.bwipp/upcacomposite 0.0 0 +%%EndData +%%EndResource % --END ENCODER upcacomposite-- % --BEGIN ENCODER upcecomposite-- -% --REQUIRES upce micropdf417 pdf417 gs1-cc-- -% --SUGGESTS ean5 ean2-- +% --REQUIRES preamble raiseerror renlinear renmatrix ean5 ean2 upce micropdf417 pdf417 gs1-cc-- % --DESC: UPC-E Composite % --EXAM: 00123457|(15)021231 % --EXOP: includetext % --RNDR: renlinear renmatrix -/setpacking where {pop currentpacking true setpacking} if -2 dict -dup /upce dup /uk.co.terryburton.bwipp findresource put -dup /gs1-cc dup /uk.co.terryburton.bwipp findresource put -dup /renlinear dup /uk.co.terryburton.bwipp findresource put -dup /renmatrix dup /uk.co.terryburton.bwipp findresource put -begin -/upcecomposite { - - 20 dict begin % Confine variables to local scope - - /options exch def - /barcode exch def - - /dontdraw false def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - % Split the linear and composite parts - barcode (|) search { - /linear exch def - pop - /comp exch def - } { - pop - } ifelse - - % Define the separator - /sep << - /ren //renmatrix - /pixs [ - 0 1 49 {0} repeat 1 0 - 1 0 49 {0} repeat 0 1 - 0 1 49 {0} repeat 1 0 - ] - /pixx 53 - /pixy 3 - /height 6 72 div - /width 53 72 div - /opt options - >> def - - gsave - - options (lintype) (upce) put - options (inkspread) (0) put - options (dontdraw) true put - - % Plot the linear part - linear options //upce exec //renlinear exec - - % Plot the separator - -1 72 rmoveto << - /ren //renmatrix - /pixs [ - 0 1 49 {0} repeat 1 0 - 1 0 49 {0} repeat 0 1 - 0 1 49 {0} repeat 1 0 - ] - /pixx 53 - /pixy 3 - /height 6 72 div - /width 53 72 div - /opt options - >> //renmatrix exec - - % Plot the 2D part - -2 6 rmoveto comp options //gs1-cc exec //renmatrix exec - - grestore - - end - -} bind def -/upcecomposite dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp upcecomposite 0.0 0 0 0 +%%BeginData: 24 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\ B6 ,dZ @q1Z]0 6M %_@rEu AAT +Dg:@Wc^5Df.1:GA 2#8P1 l(D OuP + 8AS ue#06 M% _@rEuA ATD +g:@Wc^5Df.1:GA2 #8P1 l(D Op s' eE+ Eb0, A061W AD. .O,Bm;:MBm =\A>DN98!Ji +IWL]DjdK89Pa!/L Z3!/N@V L]DjdK 89M`! Jg` 3!JiIWL]Dj dK89Pa!*q6s +Bm=lY2(ro_G^5)I05+p2B4uCC#)Gg52D98gA9;L@22Fed2D8ufFq81_dDD*Y`AS +u?nFE2)?05tWMF!+\C!/LZ30me]VI?K5=!Jg`3!Jg`30me]VI?K5=!/LZ3!/LZ30me]VI?K5=! +Jg_]05tWMG_e41E+sQBL]];DASGdjFGL-W8.=E$0(e*P"h*"I?G) +'1GD_?-CEcQG7F`MSBDD#CBBlJ#6A7]@eDImj"F)Q2A@qC +gGOuY1:ATVm"@r#drB9KiQP'(hWFDtYuCM@[!I?IP~> +% uk.co.terryburton.bwipp/upcecomposite 0.0 0 +%%EndData +%%EndResource % --END ENCODER upcecomposite-- % --BEGIN ENCODER databaromnicomposite-- -% --REQUIRES databaromni micropdf417 pdf417 gs1-cc-- +% --REQUIRES preamble raiseerror renlinear renmatrix databaromni micropdf417 pdf417 gs1-cc-- % --DESC: GS1 DataBar Omnidirectional Composite % --EXAM: (01)03612345678904|(11)990102 % --EXOP: % --RNDR: renlinear renmatrix -/setpacking where {pop currentpacking true setpacking} if -2 dict -dup /databaromni dup /uk.co.terryburton.bwipp findresource put -dup /gs1-cc dup /uk.co.terryburton.bwipp findresource put -dup /renlinear dup /uk.co.terryburton.bwipp findresource put -dup /renmatrix dup /uk.co.terryburton.bwipp findresource put -begin -/databaromnicomposite { - - 20 dict begin % Confine variables to local scope - - /options exch def - /barcode exch def - - /dontdraw false def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - % Split the linear and composite parts - barcode (|) search { - /linear exch def - pop - /comp exch def - } { - pop - } ifelse - - gsave - - options (lintype) (databaromni) put - options (linkage) true put - options (inkspread) (0) put - options (dontdraw) true put - - % Plot the linear part - linear options //databaromni exec - dup (sbs) get /linsbs exch def - dup (bhs) get 0 get 72 mul /linheight exch def - //renlinear exec - - % Plot the separator - /sepfinder { - /fp exch def - fp 1 fp 12 add { - /i exch def - bot i get 0 eq { - bot i 1 sub get 1 eq { - 1 - } { - sep i 1 sub get 0 eq {1} {0} ifelse - } ifelse - } { - 0 - } ifelse - sep exch i exch put - } for - /f3 [1 1 1 1 1 1 1 1 1 0 1 1 1] def - true 0 1 12 {dup bot exch fp add get exch f3 exch get eq and} for { - % Right shifted module for value 3 finder - sep fp [ 0 0 0 0 0 0 0 0 0 0 1 0 0 ] putinterval - } if - } bind def - mark - 0 linsbs {1 index 1 eq {{0}} {{1}} ifelse repeat} forall - counttomark 1 sub array astore /bot exch def pop pop - /sep [ bot {1 exch sub} forall ] def - sep 0 [0 0 0] putinterval - sep sep length 4 sub [0 0 0 0] putinterval - 18 sepfinder 64 sepfinder - 0 linheight rmoveto << - /ren //renmatrix - /pixs sep - /pixx sep length - /pixy 1 - /height 1 72 div - /width sep length 72 div - /opt options - >> //renmatrix exec - - % Plot the 2D part - -5 1 rmoveto comp options //gs1-cc exec //renmatrix exec - - grestore - - end - -} bind def -/databaromnicomposite dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp databaromnicomposite 0.0 0 0 0 +%%BeginData: 30 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\ pe@ <-:'D J>7n +06M%_@rEuAATDg: @Wc^5 Df. 1:G A2#8 P1 l(D OuP+-F "o 7VA!/f )F_ +`U>D_?-CEcQG7F` MSBDD #CB BlJ $ Sg6 -]D 3%o ;`DJX$ )A RTVB3% oDi +/n8fPFCfK5H"(o: FDl%L @Wu O*E 0A q< G`k $>E b0-*@< ?O (G`k$> F_` +U>D_?-CEcQG7F`M SBDD #CB Bl J$ Sg6 -]D %52 7#FC +AWeEc5f4Bk)'uE, Tf3F C ff T' Tt> :%5 2X=F D5Z2F +-8_M1G<3GEas#uA Wf6?1G <9W D KKE 0@ DP! 5%O P!5$ bI=% ,/F E2M8Ou%NL< IL$AOrfcH05 +kfOBl@m1P!5$bI? IQJE- ,f4D KC/f1 OYEX @UX :eDe*F>!IU &iHS92LDIm6 +sP!5$bP'&EfDf'H V5*@^ MH]iN "P#[Z ?Df Bf4Df0WV#A e*lFEqh:NXK +B+FCAWeEc5f4Bp* ^ZE-,f4 DKCgCC h[d&@ :s. nEckrVG].P CBl@m1NX9E; +CNFH8ART,0!AK[]DfBf4Df0WV#\7jkFC]E#GB@kJAWh:SBl7KjEZf:>FD5Z2F"]1W@<>pe@<-: +'DJ>7uOuSI(F(03R9.t*qDKB9.P!5$bOuSI(@VBhG98ES298H-%CbKU=DJ3TqB4uCM5*@]T061 +WACh[cu@<.Mq06:]DAnc-nATE,NAoNnsOu$]hL]M+,L^]FIHS9)r5*@^2Dfd+9P"UT2P!+/$Df +d+9L]N[B!Jh/2OuQohFHSh" +E0:6b99MJN1Qjqb99MH$"FZG(HZNb;+D,R8>DN98!/LW2!/LW2!/LW2!/LW2!/LZ3!/LV\P'MJ +=<.0o>Ou$r`EbgI2Ch[d.@WQmP!KpQ@!KoTmH\_ZMI=$^!KoX0WI9q$?'7!bAT3G*>DN98!/LV\P'M+[E$045E0=[d"H +o`gL]E52L]E52?'9Jh&p%W'Anc-nATESlF(K<&Bl7HmEej^3Bl7TqBkM+$P(l(]061WA0/%?WD +J`g(EbTbOE+sQ<+EM+505tWMGT_'=E0=Z`E+sQBL]K/BASGdjFGKsR8.=E$0(e*P"h*"I?G)'1G<9IFCAWeEc5f4Bk)'uE,Tf3FCgUpP%64gCG'+8/p(ZFEd; +,:Ecc5;/n0$=E,Zq1AS,XoATD@'Dfp)1AWh2!3A5GbFDtYuCM@[!P.H"'F`V,9E+*6lBl7R3P# +M~> +% uk.co.terryburton.bwipp/databaromnicomposite 0.0 0 +%%EndData +%%EndResource % --END ENCODER databaromnicomposite-- % --BEGIN ENCODER databarstackedcomposite-- -% --REQUIRES databaromni databarstacked micropdf417 pdf417 gs1-cc-- +% --REQUIRES preamble raiseerror renlinear renmatrix databaromni databarstacked micropdf417 pdf417 gs1-cc-- % --DESC: GS1 DataBar Stacked Composite % --EXAM: (01)03412345678900|(17)010200 % --EXOP: % --RNDR: renlinear renmatrix -/setpacking where {pop currentpacking true setpacking} if -2 dict -dup /databarstacked dup /uk.co.terryburton.bwipp findresource put -dup /gs1-cc dup /uk.co.terryburton.bwipp findresource put -dup /renmatrix dup /uk.co.terryburton.bwipp findresource put -begin -/databarstackedcomposite { - - 20 dict begin % Confine variables to local scope - - /options exch def - /barcode exch def - - /dontdraw false def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - % Split the linear and composite parts - barcode (|) search { - /linear exch def - pop - /comp exch def - } { - pop - } ifelse - - gsave - - options (lintype) (databarstacked) put - options (linkage) true put - options (inkspread) (0) put - options (dontdraw) true put - - % Plot the linear part - linear options //databarstacked exec - dup (pixs) get 0 2 index (pixx) get getinterval /bot exch def - dup (pixy) get /linheight exch def - //renmatrix exec - - % Plot the separator - /sepfinder { - /fp exch def - fp 1 fp 12 add { - /i exch def - bot i get 0 eq { - bot i 1 sub get 1 eq { - 1 - } { - sep i 1 sub get 0 eq {1} {0} ifelse - } ifelse - } { - 0 - } ifelse - sep exch i exch put - } for - /f3 [1 1 1 1 1 1 1 1 1 0 1 1 1] def - true 0 1 12 {dup bot exch fp add get exch f3 exch get eq and} for { - % Right shifted module for value 3 finder - sep fp [ 0 0 0 0 0 0 0 0 0 0 1 0 0 ] putinterval - } if - } bind def - /sep [ bot {1 exch sub} forall ] def - sep 0 [ 0 0 0 0 ] putinterval - sep sep length 4 sub [ 0 0 0 0 ] putinterval - 18 sepfinder - 0 linheight rmoveto << - /ren //renmatrix - /pixs sep - /pixx sep length - /pixy 1 - /height 1 72 div - /width sep length 72 div - /opt options - >> //renmatrix exec - - % Plot the 2D part - 1 1 rmoveto comp options //gs1-cc exec //renmatrix exec - - grestore - - end - -} bind def -/databarstackedcomposite dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp databarstackedcomposite 0.0 0 0 0 +%%BeginData: 28 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\ pe@ <-F2@ :O(a +AD_?-C EcQG7 F`M SBD D#CB Bl J$S g6-]D3 %n oc0eHm FOu +P+;CG'+8/p(ZFEd ;,:Ec c5; /n0 $ =E, ^uo P'E -L061W AD ..O,Bm >e# +06M%_@rEuAATDg: @Wc^5 Df. 1:G A2 #8 P1l (DO ps'T@< >p e@<-F2 @:O +(aA7KOpE,Tf3FCf fT'T t>: %5 2X =FD 5Z2 F-8 _M1G +<3GEas#uAWf6?1G <9WD K KE 0@ DP! 5%O P!5$bI=%,/ FE2M8Ou%NL< +IL$AOrfcH05kfOB l@m1P! 5$b I?IQ JE-, f4D KC/f1OYEX@ UX:eDe*F>!I +U&iHS92LDIm6sP! 5$bP' &EfD f'HV5 *@^M H]i N"P#[Z?DfB f4Df0WV#Ae* +lFEqh:NXfT.FCAW eEcZ> 2@r#X dP'Cn aFD 5Z2F,gKABl 7]pB4Z1*F_- +_\DfBf4Df0WV$#+ 9mF)Z/2 @:YB!0 Tp[!E -,f 4DKCgDA8c@ -A9)+&FE2M8 +P'CeWDIm6s+E)4@Bl@m10/$jEFCAWeEcZ>2@r#XdP!>*hNWa<8G]T$@L]E54P$!_IE+sQAP"Us +304JjAP!5$bOuSI)E+sQBP"RHEBl7TqBkM+$P!5$b0/%?WDJ`g(EbTc]5;.(hE+Wg%A7]e.04o +0d5*@^6E/4O,E/4pc!IHJ6P!5$b@W-?2Bp),F!0TKl@W-?2BnueQWKKo1!KoTmL]MpNF(K;5Bn +ueQWKKo1!0TKlL]MpNL]DjdDN<9!Jgc4!Jgc4! +Jgc4!Jgc4!/LZ3!Jgb^Ou%3#F_-@/L]N;?H]g?tDfh.+AoNn6P"Us%Ai#T6P"Us$Op$2r8:,Dh +E$/b3+BsX%L]E52L]E52L]E52L]E52L]E53L]E52?'9J]P#Qjm%[&V$F(K;5>9IBnFF/fEP!5& +.I?I0-Ou%/jE/4KuL]E52L]E52?'9JSAT/c5AT3fAL]im?>DN98!/LW2!*tb5L_=c?E+Wg%A7] +e;!,Q@eBOtmjBQTDl4?P9;ASs.SEb0-*@r! +Kr1IDf'G9DfBf4Df0VL05#>\/Rr:R5;+[1ASu?nFE2)?P!>+(Ou[rR%[&V$A79Rg@UX:uFCAZp +ARo:hD/aE7BlmpL30If*F_`U>D_?-CEcQG7F`MSBDD#CBBlJ#6A7]@eDImj"F)Q2A@qCgGOuY1 +:ATVm"@r#drB9KiQP'(hWFDtYuCM@[!I?IP~> +% uk.co.terryburton.bwipp/databarstackedcomposite 0.0 0 +%%EndData +%%EndResource % --END ENCODER databarstackedcomposite-- % --BEGIN ENCODER databarstackedomnicomposite-- -% --REQUIRES databaromni databarstackedomni micropdf417 pdf417 gs1-cc-- +% --REQUIRES preamble raiseerror renlinear renmatrix databaromni databarstackedomni micropdf417 pdf417 gs1-cc-- % --DESC: GS1 DataBar Stacked Omnidirectional Composite % --EXAM: (01)03612345678904|(11)990102 % --EXOP: % --RNDR: renlinear renmatrix -/setpacking where {pop currentpacking true setpacking} if -2 dict -dup /databarstackedomni dup /uk.co.terryburton.bwipp findresource put -dup /gs1-cc dup /uk.co.terryburton.bwipp findresource put -dup /renmatrix dup /uk.co.terryburton.bwipp findresource put -begin -/databarstackedomnicomposite { - - 20 dict begin % Confine variables to local scope - - /options exch def - /barcode exch def - - /dontdraw false def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - % Split the linear and composite parts - barcode (|) search { - /linear exch def - pop - /comp exch def - } { - pop - } ifelse - - gsave - - options (lintype) (databarstackedomni) put - options (linkage) true put - options (inkspread) (0) put - options (dontdraw) true put - - % Plot the linear part - linear options //databarstackedomni exec - dup (pixs) get 0 2 index (pixx) get getinterval /bot exch def - dup (pixy) get /linheight exch def - //renmatrix exec - - % Plot the separator - /sepfinder { - /fp exch def - fp 1 fp 12 add { - /i exch def - bot i get 0 eq { - bot i 1 sub get 1 eq { - 1 - } { - sep i 1 sub get 0 eq {1} {0} ifelse - } ifelse - } { - 0 - } ifelse - sep exch i exch put - } for - /f3 [1 1 1 1 1 1 1 1 1 0 1 1 1] def - true 0 1 12 {dup bot exch fp add get exch f3 exch get eq and} for { - % Right shifted module for value 3 finder - sep fp [ 0 0 0 0 0 0 0 0 0 0 1 0 0 ] putinterval - } if - } bind def - /sep [ bot {1 exch sub} forall ] def - sep 0 [ 0 0 0 ] putinterval - sep sep length 4 sub [ 0 0 0 0 ] putinterval - 18 sepfinder - 0 linheight rmoveto << - /ren //renmatrix - /pixs sep - /pixx sep length - /pixy 1 - /height 1 72 div - /width sep length 72 div - /opt options - >> //renmatrix exec - - % Plot the 2D part - 1 1 rmoveto comp options //gs1-cc exec //renmatrix exec - - grestore - - end - -} bind def -/databarstackedomnicomposite dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp databarstackedomnicomposite 0.0 0 0 0 +%%BeginData: 28 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\ pe@ <-F2@ :O(a +A8c=&Bp(G/F_`U> D_?-C EcQ G7F `MSB DD #CB BlJ$Sg 6- ]D3%no c0e +HmFOuP+;CG'+8/p (ZFEd ;,: Ecc 5 ;/n 0$= E,^ uoP'E- L0 61WAD. .O, +Bm>e#06M%_@rEuA ATDg: @Wc ^5D f. 1: GA2 #8P 1l(DOp s' T@<>pe @<- +F2@:O(aA8c=&Bk) 'uE, Tf3 FC ff T'T t>: %52 X=FD +5Z2F-8_M1G<3GEa s#uA W f6 ?1 G<9 WDK KE0@ DP!5%O P!5$bI=%,/F +E2M8Ou%NL!IU&iHS 92LDI m6sP !5$bP '&Ef Df' HV5*@^MH]i N"P#[Z?DfBf +4Df0WV#Ae*lFEqh :NY5l 2FCAW eEcZ> 2@r #XdDf'B+P' CnaFD5Z2F,g +KABl7]pB4Z1*F_- _\DfBf4 Df0WV$ #+9mF )Z/ 2@:YB!0Tp[ !E-,f4DKCgD +A8c@-A9)+&FE2M8P'CeWDIm6s+E)4@Bl@m10/$jEFCAWeEcZ>2@r#XdDf'B+P!>*hNWa<8G]T$ +@L]E54P$!_IE+sQAP"Us304JjAP!5$bOuSI)E+sQBP"RHEBl7TqBkM+$P!5$b0/%?WDJ`g(EbT +c]5;.(hE+Wg%A7]e.04o0d5*@^6E/4O,E/4pc!IHJ6P!5$b@W-?2Bp),F!0TKl@W-?2BnueQWK +Ko1!KoTmL]MpNF(K;5BnueQWKKo1!0TKlL]MpNL]DjdDN<9!Jgc4!Jgc4!Jgc4!Jgc4!/LZ3!Jgb^Ou%3#F_-@/L]N;?H]g?tDfh.+AoNn6P"Us% +Ai#T6P"Us$Op$2r8:,DhE$/b3+BsX%L]E52L]E52L]E52L]E52L]E53L]E52?'9J]P#Qjm%[&V +$F(K;5>9IBnFF/fEP!5&.I?I0-Ou%/jE/4KuL]E52L]C_DH#mP9+EM+5P%'4MP,VZA!/LW2!/L +V\P'MirF(K<&Bl7HmEej^3Bl7TqBkM+$P(l(]061WA0/%?WDJ`g(EbTbOE+sQ<+EM+505tWMGT +_'=E0=Z`E+sQBL]K/BASGdjFGKsR8L1>.=E$0(e*P"h*"I?G)' +1G<9IFCAWeEcZ>2@r#XdDf'B+@rH4'Df]W7AWf$9A1r(@/n8fPFCfK5H"(o:FDl%L@WuO*E$/\ +&Anc-oEb0<1F`Lu'P')pJ06:]HE+*6lBl7RH\pKT_F(KH4@:O(eDJ+B\;u~> +% uk.co.terryburton.bwipp/databarstackedomnicomposite 0.0 0 +%%EndData +%%EndResource % --END ENCODER databarstackedomnicomposite-- % --BEGIN ENCODER databartruncatedcomposite-- -% --REQUIRES databaromni databartruncated micropdf417 pdf417 gs1-cc-- +% --REQUIRES preamble raiseerror renlinear renmatrix databaromni databartruncated micropdf417 pdf417 gs1-cc-- % --DESC: GS1 DataBar Truncated Composite % --EXAM: (01)03612345678904|(11)990102 % --EXOP: % --RNDR: renlinear renmatrix -/setpacking where {pop currentpacking true setpacking} if -2 dict -dup /databartruncated dup /uk.co.terryburton.bwipp findresource put -dup /gs1-cc dup /uk.co.terryburton.bwipp findresource put -dup /renlinear dup /uk.co.terryburton.bwipp findresource put -dup /renmatrix dup /uk.co.terryburton.bwipp findresource put -begin -/databartruncatedcomposite { - - 20 dict begin % Confine variables to local scope - - /options exch def - /barcode exch def - - /dontdraw false def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - % Split the linear and composite parts - barcode (|) search { - /linear exch def - pop - /comp exch def - } { - pop - } ifelse - - gsave - - options (lintype) (databartruncated) put - options (linkage) true put - options (inkspread) (0) put - options (dontdraw) true put - - % Plot the linear part - linear options //databartruncated exec - dup (sbs) get /linsbs exch def - dup (bhs) get 0 get 72 mul /linheight exch def - //renlinear exec - - % Plot the separator - /sepfinder { - /fp exch def - fp 1 fp 12 add { - /i exch def - bot i get 0 eq { - bot i 1 sub get 1 eq { - 1 - } { - sep i 1 sub get 0 eq {1} {0} ifelse - } ifelse - } { - 0 - } ifelse - sep exch i exch put - } for - /f3 [1 1 1 1 1 1 1 1 1 0 1 1 1] def - true 0 1 12 {dup bot exch fp add get exch f3 exch get eq and} for { - % Right shifted module for value 3 finder - sep fp [ 0 0 0 0 0 0 0 0 0 0 1 0 0 ] putinterval - } if - } bind def - mark - 0 linsbs {1 index 1 eq {{0}} {{1}} ifelse repeat} forall - counttomark 1 sub array astore /bot exch def pop pop - /sep [ bot {1 exch sub} forall ] def - sep 0 [0 0 0] putinterval - sep sep length 4 sub [0 0 0 0] putinterval - 18 sepfinder 64 sepfinder - 0 linheight rmoveto << - /ren //renmatrix - /pixs sep - /pixx sep length - /pixy 1 - /height 1 72 div - /width sep length 72 div - /opt options - >> //renmatrix exec - - % Plot the 2D part - -5 1 rmoveto comp options //gs1-cc exec //renmatrix exec - - grestore - - end - -} bind def -/databartruncatedcomposite dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp databartruncatedcomposite 0.0 0 0 0 +%%BeginData: 30 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\ pe@ <-I1F `(\t +FCf!G3%oDi/n8fP FCfK5 H"( o:F Dl%L @W uO* E0AqB6,d Z@q +1Z]06M%_@rEuAAT Dg:@W c^5 Df. 1 :GA 2#8 P1l (DOuP+ 8A Su +e#06M%_@rEuAATD g:@W c^5 Df .1 :GA 2#8 P1l (DOp +s'T@<>pe@<-I1F` (\tF C eu mD f'H 3F( o`-H \`B!2 +3JD%DfBf4Df0WZ5 *@]T@U X:e D e*F B5 *@]T A8c @-A9)+&+D, %uF(LLjDfBf +4Df0WZY:js=EbTE (FEqh: P!+ / J!Ko ='%< $3- Bl@m1H]kFA @;L!rP!+/T5 +^eepOuSV6P,4EDI[*sARprgOuSI(F(03R9.t*qDKB9.P!5$bOuSI(@VBhG98ES298H +-%CbKU=DJ3TqB4uCM5*@]T061WACh[cu@<.Mq06:]DAnc-nATE,NAoNnsOu$]hL]M+,L^]FIHS +9)r5*@^2Dfd+9P"UT2P!+/$Dfd+9L]N[B!Jh/2OuQohFHSh"E0:6b99MJN1Qjqb99MH$"FZG(HZNb;+D,R8>DN98!/LW2!/LW +2!/LW2!/LW2!/LZ3!/LV\P'MJ=<.0o>Ou$r`EbgI2Ch[d.@WQmP!KpQ@!KoTmH\_ZMI=$^!KoX0WI9q$?'7!bAT3G*>D +N98!/LV\P'M+[E$045E0=[d"Ho`gL]E52L]E52?'9Jh&p%W'Anc-nATESlF(K<&Bl7HmEej^3B +l7TqBkM+$P(l(]061WA0/%?WDJ`g(EbTbOE+sQ<+EM+505tWMGT_'=E0=Z`E+sQBL]K/BASGdj +FGKsR8. +=E$0(e*P"h*"I?G)'1G<9IFCAWeEcc>EDI[*sARo +:hD/aE7BlmpL30If*F_`U>D_?-CEcQG7F`MSBDD#CBBlJ#6A7]@eDImj"F)Q2A@qCgGOuY1:AT +Vm"@r#drB9KiQP'(hWFDtYuCM@[!I?IP~> +% uk.co.terryburton.bwipp/databartruncatedcomposite 0.0 0 +%%EndData +%%EndResource % --END ENCODER databartruncatedcomposite-- % --BEGIN ENCODER databarlimitedcomposite-- -% --REQUIRES databarlimited micropdf417 pdf417 gs1-cc-- +% --REQUIRES preamble raiseerror renlinear renmatrix databarlimited micropdf417 pdf417 gs1-cc-- % --DESC: GS1 DataBar Limited Composite % --EXAM: (01)03512345678907|(21)abcdefghijklmnopqrstuv % --EXOP: % --RNDR: renlinear renmatrix -/setpacking where {pop currentpacking true setpacking} if -2 dict -dup /databarlimited dup /uk.co.terryburton.bwipp findresource put -dup /gs1-cc dup /uk.co.terryburton.bwipp findresource put -dup /renlinear dup /uk.co.terryburton.bwipp findresource put -dup /renmatrix dup /uk.co.terryburton.bwipp findresource put -begin -/databarlimitedcomposite { - - 20 dict begin % Confine variables to local scope - - /options exch def - /barcode exch def - - /dontdraw false def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - % Split the linear and composite parts - barcode (|) search { - /linear exch def - pop - /comp exch def - } { - pop - } ifelse - - gsave - - options (lintype) (databarlimited) put - options (linkage) true put - options (inkspread) (0) put - options (dontdraw) true put - - % Plot the linear part - linear options //databarlimited exec - dup (sbs) get /linsbs exch def - dup (bhs) get 0 get 72 mul /linheight exch def - //renlinear exec - - % Plot the separator - mark - 1 linsbs {1 index 0 eq {{1}} {{0}} ifelse repeat} forall - counttomark 1 sub array astore /sep exch def pop pop - sep 0 [0 0 0] putinterval - sep sep length 4 sub [0 0 0 0] putinterval - 0 linheight rmoveto << - /ren //renmatrix - /pixs sep - /pixx sep length - /pixy 1 - /height 1 72 div - /width sep length 72 div - /opt options - >> //renmatrix exec - - % Plot the 2D part - comp options //gs1-cc exec - dup (pixx) get 72 exch sub 1 rmoveto - //renmatrix exec - - grestore - - end - -} bind def -/databarlimitedcomposite dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp databarlimitedcomposite 0.0 0 0 0 +%%BeginData: 25 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\ pe@ <-0uD /"*' +AD_?-C EcQG7 F`M SBD D#CB Bl J$S g6-]D3 %n oc0eHm FOu +P+;CG'+8/p(ZFEd ;,:Ec c5; /n0 $ =E, ^uo P'E -L061W AC h[cu@< .Mj +06M%_@rEuAATDg: @Wc^5 Df. 1:G A2 #8 P1l (DO uP+8AS u? nFE2)? OuP ++;CG'+8/p(ZFEd; ,:Ec c5; /n 0$ =E, ^uo P'E -!04 +\L5@:EYcCh[a#FC eumD f 'H 3F (o` -H\ `B!2 3JD%D +fBf4Df0WZ5*@]T@ UX:eDe *FB 5 *@] TA 8c@- A9) +&+D,%uF(L LjDfBf4Df0W +ZY:js=EbTE(FEqh :P!+/J !Ko = '%<$ 3-Bl @m1 H]kFA@;L!r P!+/T5^eepO +uSV6P,4A79Rg@UX :nBl.R+ ARpsKD fBf4D f0W V#Ae*lCLLj eFE2M8P'Cna +FD5Z2F,gQ@DJO<4Eb/ZiNWChsG].PCBl@m1NX006DKKE0@1_dDD*Y`ASu?nFE2)?05tWMF!,O8E%c0EG^(?PAT3fA05tWM +H&)JSBOtmjBQT%2Le*[e06_,@FD)ee +*@rH4'+E)4@Bl@m10/$sZ0eHmFP!>*hNWa<8G^,BELe*[mP,X6 +% uk.co.terryburton.bwipp/databarlimitedcomposite 0.0 0 +%%EndData +%%EndResource % --END ENCODER databarlimitedcomposite-- % --BEGIN ENCODER databarexpandedcomposite-- -% --REQUIRES databarexpanded micropdf417 pdf417 gs1-cc-- +% --REQUIRES preamble raiseerror renlinear renmatrix databarexpanded micropdf417 pdf417 gs1-cc-- % --DESC: GS1 DataBar Expanded Composite % --EXAM: (01)93712345678904(3103)001234|(91)1A2B3C4D5E % --EXOP: % --RNDR: renlinear renmatrix -/setpacking where {pop currentpacking true setpacking} if -2 dict -dup /databarexpanded dup /uk.co.terryburton.bwipp findresource put -dup /gs1-cc dup /uk.co.terryburton.bwipp findresource put -dup /renlinear dup /uk.co.terryburton.bwipp findresource put -dup /renmatrix dup /uk.co.terryburton.bwipp findresource put -begin -/databarexpandedcomposite { - - 20 dict begin % Confine variables to local scope - - /options exch def - /barcode exch def - - /dontdraw false def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - % Split the linear and composite parts - barcode (|) search { - /linear exch def - pop - /comp exch def - } { - pop - } ifelse - - gsave - - options (lintype) (databarexpanded) put - options (linkage) true put - options (inkspread) (0) put - options (dontdraw) true put - - % Plot the linear part - linear options //databarexpanded exec - dup (sbs) get /linsbs exch def - dup (bhs) get 0 get 72 mul /linheight exch def - //renlinear exec - - % Plot the separator - /sepfinder { - /fp exch def - fp 1 fp 12 add { - /i exch def - bot i get 0 eq { - bot i 1 sub get 1 eq { - 1 - } { - sep i 1 sub get 0 eq {1} {0} ifelse - } ifelse - } { - 0 - } ifelse - sep exch i exch put - } for - } bind def - mark - 0 linsbs {1 index 1 eq {{0}} {{1}} ifelse repeat} forall - counttomark 1 sub array astore /bot exch def pop pop - /sep [ bot {1 exch sub} forall ] def - sep 0 [0 0 0] putinterval - sep sep length 4 sub [0 0 0 0] putinterval - [ % Finder pattern module positions - 18 98 bot length 13 sub {} for - 69 98 bot length 13 sub {} for - ] {sepfinder} forall - 0 linheight rmoveto << - /ren //renmatrix - /pixs sep - /pixx sep length - /pixy 1 - /height 1 72 div - /width sep length 72 div - /opt options - >> //renmatrix exec - - % Plot the 2D part - 1 1 rmoveto comp options //gs1-cc exec //renmatrix exec - - grestore - - end - -} bind def -/databarexpandedcomposite dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp databarexpandedcomposite 0.0 0 0 0 +%%BeginData: 28 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\ pe@ <,q(E +*Wp +ARpr`06M%_@rEuA ATDg: @Wc ^5D f.1: GA 2#8 P1l(DO uP +-F"o7 VA! +/f)F_`U>D_?-CEc QG7F` MSB DD# C BBl J$S g6- ]D3%o; `D JX$)AR TVB +3%oDi/n8fPFCfK5 H"(o: FDl %L@ Wu O* E0A qEb 0- *@F_`U>D_?-CEcQ G7F` MSB DD #C BBl J$S g6- ]D%5 +27#FCAWeEb0K7@; ]UeA 7 KO pE ,Tf 3FC ffT' Tt>:% +52X=FD5Z2F-8_M1 G<3GEa s#u A Wf6 ?1 G<9W DKK E0@ DP!5 %OP !5$bI=%,/F E2M8Ou%NL!IU& +iHS92LDIm6sP!5$ bP'&E fDf'H V5*@^ MH] iN"P#[Z?Df Bf4Df0WV#Ae +*lFEqh:NXoZ/FCA WeEb0K7 @;]UeA FD5Z +2F"]1W@<>pe@<,q(E+*WpARprgOuSI(F(03R9.t*qDKB9.P!5$bOuSI(@VBhG98ES298H-%CbK +U=DJ3TqB4uCM5*@]T061WACh[cu@<.Mq06:]DAnc-nATE,NAoNnsOu$]hL]M+,L^]FIHS9)r5* +@^2Dfd+9P"UT2P!+/$Dfd+9L]N[PD^Dfh +.OL^fNHH[V&J?$d]8AT26qDId=!I?I0X!,Q@eBOtmjBQTDl4?P9;ASs.SEb0-*@r!Kr1IDf'G9DfBf4Df0VL05#>\/Rr:R5;+[1ASu?nFE2)? +P!>+(Ou[rR%[&V$A79Rg@UX:gG]7)/A7]:]Df'H3F(o`-OuSV806M%_@rEuAATDg:@Wc^5Df.1 +:GA2#8+Co%qBl7L&ATMd4Ear[DFcna +% uk.co.terryburton.bwipp/databarexpandedcomposite 0.0 0 +%%EndData +%%EndResource % --END ENCODER databarexpandedcomposite-- % --BEGIN ENCODER databarexpandedstackedcomposite-- -% --REQUIRES databarexpanded databarexpandedstacked micropdf417 pdf417 gs1-cc-- +% --REQUIRES preamble raiseerror renlinear renmatrix databarexpanded databarexpandedstacked micropdf417 pdf417 gs1-cc-- % --DESC: GS1 DataBar Expanded Stacked Composite % --EXAM: (01)00012345678905(10)ABCDEF|(21)12345678 % --EXOP: segments=4 % --RNDR: renmatrix renlinear -/setpacking where {pop currentpacking true setpacking} if -2 dict -dup /databarexpandedstacked dup /uk.co.terryburton.bwipp findresource put -dup /gs1-cc dup /uk.co.terryburton.bwipp findresource put -dup /renmatrix dup /uk.co.terryburton.bwipp findresource put -begin -/databarexpandedstackedcomposite { - - 20 dict begin % Confine variables to local scope - - /options exch def - /barcode exch def - - /dontdraw false def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - % Split the linear and composite parts - barcode (|) search { - /linear exch def - pop - /comp exch def - } { - pop - } ifelse - - gsave - - options (lintype) (databarexpandedstacked) put - options (linkage) true put - options (inkspread) (0) put - options (dontdraw) true put - - % Plot the linear part - linear options //databarexpandedstacked exec - dup (pixs) get 0 2 index (pixx) get getinterval /bot exch def - dup (pixy) get /linheight exch def - //renmatrix exec - - % Plot the separator - /sepfinder { - /fp exch def - fp 1 fp 12 add { - /i exch def - bot i get 0 eq { - bot i 1 sub get 1 eq { - 1 - } { - sep i 1 sub get 0 eq {1} {0} ifelse - } ifelse - } { - 0 - } ifelse - sep exch i exch put - } for - } bind def - /sep [ bot {1 exch sub} forall ] def - sep 0 [ 0 0 0 ] putinterval - sep sep length 4 sub [ 0 0 0 0 ] putinterval - [ % Finder pattern module positions - 19 98 bot length 13 sub {} for - 70 98 bot length 13 sub {} for - ] {sepfinder} forall - 0 linheight rmoveto << - /ren //renmatrix - /pixs sep - /pixx sep length - /pixy 1 - /height 1 72 div - /width sep length 72 div - /opt options - >> //renmatrix exec - - % Plot the 2D part - bot 0 get 0 eq {2} {0} ifelse 1 rmoveto - comp options //gs1-cc exec //renmatrix exec - - grestore - - end - -} bind def -/databarexpandedstackedcomposite dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp databarexpandedstackedcomposite 0.0 0 0 0 +%%BeginData: 28 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\ pe@ <,q(E +*Wp +ARok(@:O(aA D_? -CE cQG7 F` MSB DD#CBB lJ $Sg6-] D3% +noc0eHmFOuP+;CG '+8/p (ZF Ed; , :Ec c5; /n0 $=E,^u oP 'E-L06 1WA +D..O,Bm>e#06M%_ @rEuA ATD g:@ Wc ^5 Df. 1:G A2#8P1 l( DOps'T @<> +pe@<,q(E+*WpARo k(@: O(a A7 KO pE, Tf3 FCf fT'T +t>:%52X=FD5Z2F- 8_M1 G <3 GE as# uAW f6?1 G<9WD +KKE0@DP!5%OP +!5$bI=%,/FE2M8O u%NL!I U&iH S92LD Im6s P!5 $bP'&EfDf' HV5*@^MH]iN +"P#[Z?DfBf4Df0W V#Ae* lFEqh :NYZ/ 6FC AWeEb0K7@; ]UeA92j$@r# +XdP'CnaFD5Z2F,g KABl7]p B4Z1*F _-_\D fBf 4Df0WV$#+9 mF)Z/2@:YB! +0Tp[!E-,f4DKCgDA8c@-A9)+&FE2M8P'CeWDIm6s+E)4@Bl@m10/$jEFCAWeEb0K7@;]UeA92j +$@r#XdP!>*hNWa<8G]T$@L]E54P$!_IE+sQAP"Us304JjAP!5$bOuSI)E+sQBP"RHEBl7TqBkM ++$P!5$b0/%?WDJ`g(EbTc]5;.(hE+Wg%A7]e.04o0d5*@^6E/4O,E/4pc!IHJ6P!5$b@W-?2Bp +),F!0TKl@W-?2BnueQWKKo1!KoTmL]MpNF(K;5BnueQWKKo1!0TKlL]MpNL]DjdDN98!/LW2!*tb5>DNrK@Ua7tP%'4VP,WeVP":BuLgjh3FHU*h%?d];I?I- +,HQ[B@E+Wg%A7]e0P"CH0Ch[d#ASGdjFHVA@4>1_dDD*Y`ASu?nFE2)?05tWMF!,O8E%c0EG^( +?PAT3fA05tWMH&)JSBOtmjBQT%2Le*[e06_,@FD)ee*@W-@E!0U!2!0TKlL]W!OL]Djd.=E$0(e*P"h*"I?G)'1G<9IFCAWeEb0K7@;]UeA92j$@r#Xd@rH4'Df]W7AWf$9A1r(@ +/n8fPFCfK5H"(o:FDl%L@WuO*E$/\&Anc-oEb0<1F`Lu'P')pJ06:]HE+*6lBl7RH\pKT_F(KH +4@:O(eDJ+B\;u~> +% uk.co.terryburton.bwipp/databarexpandedstackedcomposite 0.0 0 +%%EndData +%%EndResource % --END ENCODER databarexpandedstackedcomposite-- % --BEGIN ENCODER gs1-128composite-- -% --REQUIRES code128 gs1-128 micropdf417 pdf417 gs1-cc-- +% --REQUIRES preamble raiseerror renlinear renmatrix code128 gs1-128 micropdf417 pdf417 gs1-cc-- % --DESC: GS1-128 Composite % --EXAM: (00)030123456789012340|(02)13012345678909(37)24(10)1234567ABCDEFG % --EXOP: ccversion=c % --RNDR: renlinear renmatrix -/setpacking where {pop currentpacking true setpacking} if -2 dict -dup /gs1-128 dup /uk.co.terryburton.bwipp findresource put -dup /gs1-cc dup /uk.co.terryburton.bwipp findresource put -dup /renlinear dup /uk.co.terryburton.bwipp findresource put -dup /renmatrix dup /uk.co.terryburton.bwipp findresource put -begin -/gs1-128composite { - - 20 dict begin % Confine variables to local scope - - /options exch def - /barcode exch def - - /dontdraw false def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - % Split the linear and composite parts - barcode (|) search { - /linear exch def - pop - /comp exch def - } { - pop - } ifelse - - gsave - - options (inkspread) (0) put - options (dontdraw) true put - - % Dummy plot of linear part with CC-A to get width - options (linkagea) true put - linear << options {} forall >> //gs1-128 exec - (sbs) get 0 exch {add} forall /linwidth exch def - - % Create 2D part and determine type - options (lintype) (gs1-128) put - options (linwidth) linwidth put - comp options //gs1-cc exec /compsym exch def - compsym (pixx) get 99 eq {(a)} {(c)} ifelse /linktype exch def - - % Plot linear part - linktype (a) eq { - options (linkagea) true put - options (linkagec) false put - } { - options (linkagea) false put - options (linkagec) true put - } ifelse - linear << options {} forall >> //gs1-128 exec - dup (sbs) get /linsbs exch def - dup (bhs) get 0 get 72 mul /linheight exch def - //renlinear exec - - % Plot the separator - mark - 1 linsbs {1 index 0 eq {{1}} {{0}} ifelse repeat} forall - counttomark 1 sub array astore /sep exch def pop pop - 0 linheight rmoveto << - /ren //renmatrix - /pixs sep - /pixx sep length - /pixy 1 - /height 1 72 div - /width sep length 72 div - /opt options - >> //renmatrix exec - - % Plot the 2D part - linktype (a) eq { - /s linwidth 2 sub 11 idiv def - /p s 9 sub 2 idiv def - /x s p sub 1 sub 11 mul 10 add p 0 eq {2 add} if 99 sub def - x 1 rmoveto - } { - -7 1 rmoveto - } ifelse - - compsym //renmatrix exec - - grestore - - end - -} bind def -/gs1-128composite dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp gs1-128composite 0.0 0 0 0 +%%BeginData: 30 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\D_ +?-CEcQG7F`MSBDD #CBBl J$S g6- ] D3% o;` DJX $)ARTV B3 %oDi/n 8fP +FCfK5H"(o:FDl%L @WuO* E0A q Eb0 -*@ F_`U> D_? +-CEcQG7F`MSBDD# CBBl J$S g6 -] D%5 2@8 0eG +83+ +HlDE,Tf3FCffT'T t>:% 5 2X =F D5Z 2F- 8_M1 G<3GE +as#uAWf6?1G<9WD KKE0@< Wi+ @ ;L! rO u%#q FD5 Z2F-<^[F*) G:DJ+':E+P1 +qH\_]c23JDeE-,f 4DKC/f X(G d VF(L LtH] gXB P#RT(P%'TN Othst4d(eHE +ckrV4aW>DP!5%OP !5$bI= %,/ FE2M 8Ou% NL< IL$AOrfcH0 5kfOBl@m1P! +5$bI?IQJE-,f4DK C/f1O YEX@ UX:eD e*F> !IU &iHS92LDIm 6sP!5$bP'&E +fDf'HV5*@^MH]iN "P#[Z ?DfBf 4Df0W V$# +9mF)Z/2@: YB!0Tp[!E-, +f4DKCgDA8c@-A9) +&FE2M8 P'CnaF D5Z2F ,gN BBl7]pB4YL nEckrVG\h)3 +ARTU%4?Oa)E-,f4DKC/QP"@i$0/$sZ0eG+830HLd"*7pmP"UT2P!45U!I^,&05P??GA1T0BTbQ +B1N.5SBl@m1NX'B7DKL/CAW@".F"o7$1,tGADfBf4Df0WV#]+3mGA1T0BP_C#GA1T0BTdUMDf' +G9DfBf4Df0VL05#>\/Rr:R5;-MbD/aQAD3@)G1Lk??E-$;ANWa<8G^,BELguT2H]A,8I=$tT@s +sM?05P??CNOi@AWf6?1MgcCCNOi@AW?e"P!+/1E-,f4DKCgDCh[d&@:s.[FE2M8P'CnaFD5Z2F +,gNBBl7]pB4YRb@;L!rP'DD%DfBf4Df0WV#]+3mCLLje@:iqaF(LMZDfBf4Df0WV#]+3mCLLje +@rua6AWh:dP#Z=4DIm6s+?Vb/DfBf4Df0WCI?I/c4teR%F"o7$1,tF]OuSI(F(03R9.t*qDKB9 +.P!5$bOuSI(@VBhG98ES298H-%CbKU=DJ3TqB4uCM5*@]T061WACh[cu@<.MqD..I#L]M=+DKB +9.H\_]c=GQs?4aVO3!I]BCH\_ZMI?ITnK7/nSOrK2XP,XTNOp`paAT3erOu&8DP')Q\Ch[d#AS +GdjFHVA@4>1_dDD*Y`ASu?nFE2)?05tWMF!,O8E%c0EG^(?PAT3fA05tWMH&)JSBOtmjBQT%2L +e*[e06_,@FD)ee*Ch[d&FEqh:NWERO +4aSi'+Dbb0GA1T0BSZ_QWJCqF;N`ghE$04X$'M9D!g6HE1Ge*P"h*"I?G +)'1G +% uk.co.terryburton.bwipp/gs1-128composite 0.0 0 +%%EndData +%%EndResource % --END ENCODER gs1-128composite-- % --BEGIN ENCODER gs1datamatrix-- -% --REQUIRES datamatrix-- +% --REQUIRES preamble raiseerror renmatrix datamatrix-- % --DESC: GS1 Data Matrix % --EXAM: (01)03453120000011(17)120508(10)ABCD1234(410)9501101020917 % --EXOP: % --RNDR: renmatrix -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renmatrix dup /uk.co.terryburton.bwipp findresource put -dup /datamatrix dup /uk.co.terryburton.bwipp findresource put -begin -/gs1datamatrix { - - 20 dict begin % Confine variables to local scope - - /options exch def % We are given an option string - /barcode exch def % We are given a barcode string - - /dontdraw false def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - % Expand ordinals of the form ^NNN to ASCII - /expand { - /in exch def - /out in length string def - /j 0 def - in - { % loop - (^) search { - dup out exch j exch putinterval - length j add 1 add /j exch def - pop - dup 0 3 getinterval cvi out exch j 1 sub exch put - dup length 3 sub 3 exch getinterval - } { - dup out exch j exch putinterval - length j add /j exch def - out 0 j getinterval exit - } ifelse - } loop - } bind def - - % Parse out AIs - /ais [] def - /aival 2 dict def - barcode dup length 1 sub 1 exch getinterval - { % loop - dup () eq {exit} if - (\)) search pop - exch pop - exch (\() search { - exch pop exch 3 1 roll - } { - () 3 1 roll - } ifelse - [ ais aload pop counttomark 2 add index ] /ais exch def - aival 3 1 roll expand put - } loop - pop - - % Pre-defined fixed length data field AIs - % any AI whose prefix is not included in this table must be - % terminated with "FNC1", even if it's fixed length - /aifixed 23 dict def - [ - 0 1 4 {} for - ] { - (00) 2 string copy dup dup 1 5 -1 roll 48 add put aifixed 3 1 roll put - } forall - [ - 11 1 20 {} for - 23 - 31 1 36 {} for - 41 - ] { - 10 2 string cvrs dup aifixed 3 1 roll put - } forall - - % Create the datamatrix data - /fnc1 -1 def - /dmtx [ fnc1 ] def - 0 1 ais length 1 sub { - /i exch def - /ai ais i get def - /val aival ai get def - dmtx length ai length add val length add array - dup 0 dmtx putinterval - dup dmtx length ai [ exch {} forall ] putinterval - dup dmtx length ai length add val [ exch {} forall ] putinterval - /dmtx exch def - i ais length 1 sub ne aifixed ai 0 2 getinterval known not and { % Append FNC1 - dmtx length 1 add array - dup 0 dmtx putinterval - dup dmtx length fnc1 put - /dmtx exch def - } if - } for - - % Compose input to datamatrix - /barcode dmtx length 1 add 5 mul string def - /i 0 def /j 0 def { - i dmtx length eq {exit} if - dmtx i get dup fnc1 eq { - pop barcode j (^FNC1) putinterval - /j j 4 add def - } { - barcode exch j exch put - } ifelse - /i i 1 add def - /j j 1 add def - } loop - /barcode barcode 0 j getinterval def - - % Get the result of encoding with code128 - options (dontdraw) true put - options (parsefnc) true put - /args barcode options //datamatrix exec def - - args (opt) options put - args - - dontdraw not //renmatrix if - - end - -} bind def -/gs1datamatrix dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp gs1datamatrix 0.0 0 0 0 +%%BeginData: 31 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\pp@< ?O( +G^G5\Ou8C305kfO Bl@m1 P!5 $b0 4J @1 @rG mhP !5$b04 ]! =FC]E# G9C +L+Cia0N1N.5SBl@ m1P- 6N[ FE 2) 5B6 8E< AWf 3'L] +NYrOpu>KFD5Z2F* j(NA m oL sA Wf3 'P! FGY< 0B5(@ +ZmRN0oc8tP)XR(F _-_!H] ftD 5 *C& O5 *@^M H]f t&EckrV1OY EdI?J0)*g/N +:DfBf4Df0WZ5*@^ MP#Q@= FD5 Z 2F*j '+I? I/T AU&0&DIe)I Bl9(tOu"b0F +`\a?DN\IlV33VfC 5;kQ1M L`R NWEI LNI- gJD fp/b5&-6EP 'N4"C6AUR!K +mI:C6CcD1QlmD3/ @Qj"- Q?@/ 8oZQP !3W: !Ks FF5*C/R30I a,"-TX>"-Pj +29RV8N3,`q]P!3W D5*C2 S@VV& ,05?Y 6Ou %$!FGKp3P" _$(I?ITYP%B +')%[&V$@;0d*>9I 471G<0N G%#3C! g5F(1 Lad 5@rGmhOuSV 6L]N[WI?IQi!@a1kP')pOP')pONWCPkNI-gPP')pOL]`G6P)"I4NW=k;L]NZoI?IT +7+CSu*OogehOrK2YOo^_J>q]W#F-8_M1LY!@@;L`%L]NZoAU&0&DIeoTI?J0)FY@0;AncL$A;D + %b23Kb"L]E53L]i'QP"8l*NWLmgL]Wa9Or9EBOuS6uL]rV7P)"iIOo^_j@;0=fG\(EA",Hu@L +QZn1P"Al6$]"h>'RP7k8;J(<+,BrR,^Xs&8;J^#H\`#b!g9CC0TnD(BkD((ARpT!L]NZoP'DD< +8M=[n@kif>Ou"b%D01"F>9INq@kf*3Ou%moL]LpuF-:!g!KsF/056S5Ou"b"BcphuF!,1[99M( +aG%#20@;0mnC`m/#P"UroA8QF5P%%j6P%'RTG%#3M@ZgbT$'I9(!+]qgG`m?83+QlJG`lNEBcp +WC5'q^@8R7L)OuQuhFEisX@;1m6Oo]`7C`lrF5'q^@8R7L)04\pAG`k7R1MIt?BlfGHL]N[;pL]E54P"_$HP&QQeHXpu8G`lNl!KmJH$'I9(!+]qgG`m?83+QlJG`lNJDIYDaG +V2G`lNl!KmJ>"d3\bV33VfBnubP1GOu%NLAM7M$Eas#uAKYGjEas#uAV^ +>$P"_#pDfBf4Df0WV#\7jkFC]E#GB@kJAWh:VE-,f4DKCgDE+*d.AS,giFE2M8P'AWgEbBG9@U +X:eDe*E%DfBf4Df0VL04\L5@;TFpEbTc]5E[g2EbBHR")i.#DfBf4Df0WZG[YW*F!,"3DKKE0@ +<[lR0/%?WDJ`g(EbTc]<0B7iOq*X205#>\A79RgD..O,Bm>e#P%64gCG'+8/p(ZFEd;,:Ecc5; +/n0$=E,Zq1AS,XoATD@'Dfp)1AWh2!3A5GbFDtYuCM@[!P.H"'F`V,9E+*6lBl7R3P#M~> +% uk.co.terryburton.bwipp/gs1datamatrix 0.0 0 +%%EndData +%%EndResource % --END ENCODER gs1datamatrix-- % --BEGIN ENCODER hibccode39-- -% --REQUIRES code39-- +% --REQUIRES preamble raiseerror renlinear code39-- % --DESC: HIBC Code 39 % --EXAM: A123BJC5D6E71 % --EXOP: includetext % --RNDR: renlinear -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renlinear dup /uk.co.terryburton.bwipp findresource put -dup /code39 dup /uk.co.terryburton.bwipp findresource put -begin -/hibccode39 { - - 20 dict begin % Confine variables to local scope - - /options exch def % We are given an option string - /barcode exch def % We are given a barcode string - - /dontdraw false def - /textfont /Courier def - /textsize 10 def - /textyoffset -7 def - /textxoffset 0 def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - /textfont textfont cvlit def - /textsize textsize cvr def - /textyoffset textyoffset cvr def - /textxoffset textxoffset cvr def - - /barlen barcode length def - - /barchars (0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%) def - - /barcode barlen 2 add string dup 1 barcode putinterval def - barcode 0 43 put - - /checksum 0 def - 0 1 barlen { - /i exch def - % Lookup the encoding for the each barcode character - barcode i 1 getinterval barchars exch search - pop % Discard true leaving pre - length /indx exch def % indx is the length of pre - pop pop % Discard seek and post - /checksum checksum indx add def - } for - barcode barlen 1 add barchars checksum 43 mod get put - - /text barlen 4 add string def - text 0 42 put - text 1 barcode putinterval - text barlen 2 add barcode barlen 1 add get dup 32 eq {pop 95} if put - text barlen 3 add 42 put - - % Get the result of encoding with code39 - options (dontdraw) true put - options (includecheck) false put - /args barcode options //code39 exec def - - args (txt) [ [text textxoffset textyoffset textfont textsize] ] put - args (textxalign) (center) put - args (opt) options put - args - - dontdraw not //renlinear if - - end - -} bind def -/hibccode39 dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp hibccode39 0.0 0 0 0 +%%BeginData: 36 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\: + %52X=FD5Z2F-8_ M1G<3 GEa s#u AW f6 ?1G <9W DKKE0@ D +P!5%OP!5$bI=%,/ FE2M8O u%N L5FCf +]=F(or3OtVtS06C cMFEq e:Aoh O*+EV 1>F Eqe:AohO*O tVtS06CcMFE +h_9AohO*+EV1>FE h_9AohO *OtVtS 04J@1 @q] :kF,hb)0et OA2)[BQ3C,u +!6q'R884cEH9MJ8X:f1+h<)lt#=BSfZ/g)Dm.j^?704S[(Ectl-F,2?023KbO!/LZ3.XPZ=@<- +O"Cibb'OuQoZEarckEc[C-L]NZ4P!5%RI?I-W!/LYb@<,jrA7^p5L]N[%ARfLsF_upbP%p.9G% +#3$A79Rk@q]F`CO715@<,jrA7Zlm@<-0qDN[Y%@<,jk@<-E3@q]F`CNFW8P"UsTHS8iPBlJ#DB +PCpc@rGmh1HAoQA4($A@r"JHB5)IJ.nOVgDfTl0@rrha8O>ce6Z6LH+>Z##@q]F`CER/%B5)H1 +E,ol?Bk1dc0/%?SBldisEcQ)=P!=AX<%h]hEas#uAKYGjEas#uAV^=q@<-0qDN[\V1OYEc04J@ +1@rGmh+C\c"Ch7L?!g3SIV33fo!FfJX@rGmhP'N3H@UX:eDe*F8!/N.gG[b*%@rGmh+C\c"Ch7 +L?!KmIm@<,jk@<-E3@q]F`CNFW8P"Us_06CcMF*c@<-"%NWXBJFB]kl+EV1>F5>p*F9G[YW*F,gTLAU&D_?-CEcQG7F`MSBDD#CBBlJ#6A7]@eDImj"F)Q2A@qCgGOuY1:ATVm"@r#drB9KiQP'(hW +FDtYuCM@[!I?IP~> +% uk.co.terryburton.bwipp/hibccode39 0.0 0 +%%EndData +%%EndResource % --END ENCODER hibccode39-- % --BEGIN ENCODER hibccode128-- -% --REQUIRES code128-- +% --REQUIRES preamble raiseerror renlinear code128-- % --DESC: HIBC Code 128 % --EXAM: A123BJC5D6E71 % --EXOP: includetext % --RNDR: renlinear -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renlinear dup /uk.co.terryburton.bwipp findresource put -dup /code128 dup /uk.co.terryburton.bwipp findresource put -begin -/hibccode128 { - - 20 dict begin % Confine variables to local scope - - /options exch def % We are given an option string - /barcode exch def % We are given a barcode string - - /dontdraw false def - /textfont /Courier def - /textsize 10 def - /textyoffset -7 def - /textxoffset 0 def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - /textfont textfont cvlit def - /textsize textsize cvr def - /textyoffset textyoffset cvr def - /textxoffset textxoffset cvr def - - /barlen barcode length def - - /barchars (0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%) def - - /barcode barlen 2 add string dup 1 barcode putinterval def - barcode 0 43 put - - /checksum 0 def - 0 1 barlen { - /i exch def - % Lookup the encoding for the each barcode character - barcode i 1 getinterval barchars exch search - pop % Discard true leaving pre - length /indx exch def % indx is the length of pre - pop pop % Discard seek and post - /checksum checksum indx add def - } for - barcode barlen 1 add barchars checksum 43 mod get put - - /text barlen 4 add string def - text 0 42 put - text 1 barcode putinterval - text barlen 2 add barcode barlen 1 add get dup 32 eq {pop 95} if put - text barlen 3 add 42 put - - % Get the result of encoding with code128 - options (dontdraw) true put - /args barcode options //code128 exec def - - args (txt) [ [text textxoffset textyoffset textfont textsize] ] put - args (textxalign) (center) put - args (opt) options put - args - - dontdraw not //renlinear if - - end - -} bind def -/hibccode128 dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp hibccode128 0.0 0 0 0 +%%BeginData: 35 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\ Ou" b5AU +&F Cf]= AoD R/OtDhQ06C cMFE;/BAKZ) ++G]\"@H=`6mOu"b 5AU&< BDece6Z6LH+> +GW2+Dl7BF%ARfLsF_upbP%p +.9G%#3$A79Rk@q]F`CO715@<,jrA7Zlm@<-0qDN[Y%@<,jk@<-E3@q]F`CNFW8P"UsTHS8iPBl +J#DBPCpc@rGmh0et^t@:V`=ARfLDBkM.%N\!b>@rHC.ARfg)84c-8+@C'XAKW]_3$;^EARfKuA +8,[jFB/!>-d@<,jrA7Zl +m@<-0qDMS=V!FfJX@q]:kF!+t+ARfLsF`!:7P'AX%AU&;>@UX:nAT!;,Oo^`BOu%2kG]\`ALan +R4FCf]=L]LsnEas#uAWh=\AU&;>@UX:nAT!;*Oo]$#Eas#uAKYGjEbo<)L]NY>P"UrtL`hjDH] +iN-?[\):P'D([G]Y';@<-0qDMSCX!Ji4gG].PCBl@m1NX006DKKE0@9I,mFCf]=+EV1>FEh_9AohO*+EV1>FEqe:AohO*+EV1>FCoH/FG]\1=Ch[O"NWs!)DKKH1P'CDUB60(8DfBf:E-,f4DKCtc@<-"%+CoD.FC]E#GEQ +nu061WACh[cu@<.N1Ou[rR%[&V$BPCpc@rGmh0et_O30If*F_`U>D_?-CEcQG7F`MSBDD#CBBl +J#6A7]@eDImj"F)Q2A@qCgGOuY1:ATVm"@r#drB9KiQP'(hWFDtYuCM@[!I?IP~> +% uk.co.terryburton.bwipp/hibccode128 0.0 0 +%%EndData +%%EndResource % --END ENCODER hibccode128-- % --BEGIN ENCODER hibcdatamatrix-- -% --REQUIRES datamatrix-- +% --REQUIRES preamble raiseerror renmatrix datamatrix-- % --DESC: HIBC Data Matrix % --EXAM: A123BJC5D6E71 % --EXOP: % --RNDR: renmatrix -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renmatrix dup /uk.co.terryburton.bwipp findresource put -dup /datamatrix dup /uk.co.terryburton.bwipp findresource put -begin -/hibcdatamatrix { - - 20 dict begin % Confine variables to local scope - - /options exch def % We are given an option string - /barcode exch def % We are given a barcode string - - /dontdraw false def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - /barlen barcode length def - - /barchars (0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%) def - - /barcode barlen 2 add string dup 1 barcode putinterval def - barcode 0 43 put - - /checksum 0 def - 0 1 barlen { - /i exch def - % Lookup the encoding for the each barcode character - barcode i 1 getinterval barchars exch search - pop % Discard true leaving pre - length /indx exch def % indx is the length of pre - pop pop % Discard seek and post - /checksum checksum indx add def - } for - barcode barlen 1 add barchars checksum 43 mod get put - - % Get the result of encoding with datamatrix - options (dontdraw) true put - /args barcode options //datamatrix exec def - - args (opt) options put - args - - dontdraw not //renmatrix if - - end - -} bind def -/hibcdatamatrix dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp hibcdatamatrix 0.0 0 0 0 +%%BeginData: 30 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\:%52X= FD5Z2 F-8 _M1 G< 3G Eas #uA Wf6?1G <9 WDKKE0 @p#9jr-aBm:b;F`VXI@rH7,@;0U%Df0B:+Co2!BlnD +I+Cei!Blmd"+DbV2FCfK6/0K"Q@:Nki+CT.u+EV:.+EMgF@W-((+>#2k0.S>%061K8F(Jp'Ec5 +u]5CJ\oI?I,S@UX:nASrW"@<,jrA7^p5G%#3$A79Rk@q]F`CO:j_5*@^MP"769BOt[hF*2=B@q]F`CNFW8Lb"X'Ou%8iCh[EgFCerqARfM&+C\c"@rGmh+C\c" +Ch7LI94D=M@q]:kF!+t+ARfLsF`!:7P&5P!@WuO*E%Yg<@UiqWFCB#pFE2)?6=FClBOt[h6tp: +JFH/"GDI[U*Eb/a&+@o'j6Qed*FC?:d@B/!>-d@<,jrA7Zlm@<-0qDMS=V!FfJX@q]:kF!+t+A +RfLsF`!:7P'CnaFD5Z2F,gN:Df0Z-Eaa06EckrVG].PCBl@m1NX^/?Ch[EgFCerqARfLf@;L!r +P'AWgEbBG9@UX:eDe*E%DfBf4Df0VL04\L5@;TFpEbTc]5E[g2EbBHR")i.#DfBf4Df0WZG[YW +*F!,"3DKKE0@<[lR0/%?WDJ`g(EbTc]<0B7iOq*X205,'/@q9"i@;TFpEbTc]30If*F_`U>D_? +-CEcQG7F`MSBDD#CBBlJ#6A7]@eDImj"F)Q2A@qCgGOuY1:ATVm"@r#drB9KiQP'(hWFDtYuCM +@[!I?IP~> +% uk.co.terryburton.bwipp/hibcdatamatrix 0.0 0 +%%EndData +%%EndResource % --END ENCODER hibcdatamatrix-- % --BEGIN ENCODER hibcpdf417-- -% --REQUIRES pdf417-- +% --REQUIRES preamble raiseerror renmatrix pdf417-- % --DESC: HIBC PDF417 % --EXAM: A123BJC5D6E71 % --EXOP: % --RNDR: renmatrix -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renmatrix dup /uk.co.terryburton.bwipp findresource put -dup /pdf417 dup /uk.co.terryburton.bwipp findresource put -begin -/hibcpdf417 { - - 20 dict begin % Confine variables to local scope - - /options exch def % We are given an option string - /barcode exch def % We are given a barcode string - - /dontdraw false def - /columns 2 def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - /columns columns cvi def - - /barlen barcode length def - - /barchars (0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%) def - - /barcode barlen 2 add string dup 1 barcode putinterval def - barcode 0 43 put - - /checksum 0 def - 0 1 barlen { - /i exch def - % Lookup the encoding for the each barcode character - barcode i 1 getinterval barchars exch search - pop % Discard true leaving pre - length /indx exch def % indx is the length of pre - pop pop % Discard seek and post - /checksum checksum indx add def - } for - barcode barlen 1 add barchars checksum 43 mod get put - - % Get the result of encoding with pdf417 - options (dontdraw) true put - options (columns) columns put - /args barcode options //pdf417 exec def - - args (opt) options put - args - - dontdraw not //renmatrix if - - end - -} bind def -/hibcpdf417 dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp hibcpdf417 0.0 0 0 0 +%%BeginData: 30 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\: + %52X=FD5Z2F-8_ M1G<3 GEa s#u AW f6 ?1G <9W DKKE0@ U!0T-o!/LYb@<-0qDMS=VWI&)_Eas#uAWf65!Kp,dBOPq)@;L"J5*AQ +KBOt[hF*2>_!A@qrARfLsF`!:*Ou%NL82"IdARfLsF_r72BOt[hF*2>U/!=Y11Nm2CBk1XoARf +Cb@r$E6@UX:eDe*E%@UX:nAT!Z(@UX:eBOPq&+Cf(r@r$..D3@PTD0mpFGA2#8/nes.@rPsj1b +gpU@:V`=ARfLDBkM.%N[dV<@rHC.ARfg)84c-8+AbHq1bgp3@q]F`CER/%B5)H1E,ol?Bk1dc0 +/%?SBldisEcQ)=P!=AX<%h]hEas#uAKYGjEas#uAV^=q@<-0qDN[\V1OYEc04J@1@rGmh+C\c" +Ch7L?!g3SIV33fo!FfJX@rGmhP'N3H@UX:eDe*F8!/N.gG[b*%@rGmh+C\c"Ch7L?!KmIm@<,j +k@<-E3@q]F`CNFW8P"Us_DfBf4Df0WV#\7jkFC]E#GB@kJAWh:VE-,f4DKCgC@rH1+D/OE)Des +Q5DKCtcDfBf4Df0WV%e?Ou[rR% +[&V$BPCpcE+EQ;0fP7TP%64gCG'+8/p(ZFEd;,:Ecc5;/n0$=E,Zq1AS,XoATD@'Dfp)1AWh2! +3A5GbFDtYuCM@[!P.H"'F`V,9E+*6lBl7R3P#M~> +% uk.co.terryburton.bwipp/hibcpdf417 0.0 0 +%%EndData +%%EndResource % --END ENCODER hibcpdf417-- % --BEGIN ENCODER hibcmicropdf417-- -% --REQUIRES micropdf417-- +% --REQUIRES preamble raiseerror renmatrix micropdf417-- % --DESC: HIBC MicroPDF417 % --EXAM: A123BJC5D6E71 % --EXOP: % --RNDR: renmatrix -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renmatrix dup /uk.co.terryburton.bwipp findresource put -dup /micropdf417 dup /uk.co.terryburton.bwipp findresource put -begin -/hibcmicropdf417 { - - 20 dict begin % Confine variables to local scope - - /options exch def % We are given an option string - /barcode exch def % We are given a barcode string - - /dontdraw false def - /columns 2 def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - /columns columns cvi def - - /barlen barcode length def - - /barchars (0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%) def - - /barcode barlen 2 add string dup 1 barcode putinterval def - barcode 0 43 put - - /checksum 0 def - 0 1 barlen { - /i exch def - % Lookup the encoding for the each barcode character - barcode i 1 getinterval barchars exch search - pop % Discard true leaving pre - length /indx exch def % indx is the length of pre - pop pop % Discard seek and post - /checksum checksum indx add def - } for - barcode barlen 1 add barchars checksum 43 mod get put - - % Get the result of encoding with micropdf417 - options (dontdraw) true put - options (columns) columns put - /args barcode options //micropdf417 exec def - - args (opt) options put - args - - dontdraw not //renmatrix if - - end - -} bind def -/hibcmicropdf417 dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp hibcmicropdf417 0.0 0 0 0 +%%BeginData: 31 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\DP!5% OP!5$b I=% , /FE2 M8Ou %NL +F_u#;O t;bP04J@1@q +]:kF,hb)0etOA2) [BQ3C ,u!6 q'R88 4cEH 9MJ 8X:f1+h<)l t#=BSfZ/g)D +m.j^?704S[(Ectl -F,2? 023Kb O!/LZ 3.X PZ=@<-O"Ci bb'OuQoZEar +ckEc[C-L]NZ4P!5 %RI?I-W !/LYb@ <,jrA 7^p 5L]N[U!0T-o!/LYb@<-0qDMS=VWI&)_Eas#uA +Wf65!Kp,dBOPq)@;L"J5*AQKBOt[hF*2>_!A@qrARfLsF`!:*Ou%NL82"IdARfLsF_r72BOt[h +F*2>U/!=Y11Nm2CBk1XoARfCb@r$E6@UX:eDe*E%@UX:nAT!Z(@UX:eBOPq&+Cf(r@r$..D3@P +TD0mpFGA2#8/nes.@r5piEc5o-Ai)5$6=FClBOt[h6tp:JFH/"GDI[U*Eb/a&+@o'j6Qf*;@rc +Ka6q0!f2]uUDARfKuA8,[jFB/!>-d@<,jrA7Zlm@<-0qDMS=V!FfJX@q]:kF!+t+ARfLsF`!:7P'CnaFD5Z2F,gN:Df0Z- +Eaa06EckrVG].PCBl@m1NX''4CisT4F(9-)F_u#;P'CnaFD5Z2F,g]Q@;KXg@ +% uk.co.terryburton.bwipp/hibcmicropdf417 0.0 0 +%%EndData +%%EndResource % --END ENCODER hibcmicropdf417-- % --BEGIN ENCODER hibcqrcode-- -% --REQUIRES qrcode-- +% --REQUIRES preamble raiseerror renmatrix qrcode-- % --DESC: HIBC QR Code % --EXAM: A123BJC5D6E71 % --EXOP: % --RNDR: renmatrix -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renmatrix dup /uk.co.terryburton.bwipp findresource put -dup /qrcode dup /uk.co.terryburton.bwipp findresource put -begin -/hibcqrcode { - - 20 dict begin % Confine variables to local scope - - /options exch def % We are given an option string - /barcode exch def % We are given a barcode string - - /dontdraw false def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - /barlen barcode length def - - /barchars (0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%) def - - /barcode barlen 2 add string dup 1 barcode putinterval def - barcode 0 43 put - - /checksum 0 def - 0 1 barlen { - /i exch def - % Lookup the encoding for the each barcode character - barcode i 1 getinterval barchars exch search - pop % Discard true leaving pre - length /indx exch def % indx is the length of pre - pop pop % Discard seek and post - /checksum checksum indx add def - } for - barcode barlen 1 add barchars checksum 43 mod get put - - % Get the result of encoding with qrcode - options (dontdraw) true put - /args barcode options //qrcode exec def - - args (opt) options put - args - - dontdraw not //renmatrix if - - end - -} bind def -/hibcqrcode dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp hibcqrcode 0.0 0 0 0 +%%BeginData: 29 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\: + %52X=FD5Z2F-8_ M1G<3 GEa s#u AW f6 ?1G <9W DKKE0@ FA7Zm#F`VXI@rH7,@;0U%Df0B:+Co2!BlnDI+Cei!Blmd"+DbV2FCf +K6/0K"Q@:Nki+CT.u+EV:.+EMgF@W-((+>#2k0.S>%061K8F(Jp'Ec5u]5CJ\oI?I,S@UX:nAS +rW"@<,jrA7^p5G%#3$A79Rk@q]F`CO:j_5*@^MP"769BOt[h +F*2=B@q]F`CNFW8Lb"X'Ou%8iCh[EgFCerqARfM&+C\c"@rGmh+C\c"Ch7LI94D=M@q]:kF!+t ++ARfLsF`!:7P&5P!@WuO*E%Yg<@UjCu@rGmh6=FClBOt[h6tp:JFH.kCDI[U*Eb/a&+@o'j6Qf +6(+@C'XAKYJrARfKuA8,[jFB/!>-d@<,jrA7Zlm@<-0qDMS=V!FfJX@q]:kF!+t+ARfLsF`!:7P'CnaFD5Z2F,gN:Df0Z- +Eaa06EckrVG].PCBl@m1NX^/?Ch[EgFCerqARfLf@;L!rP'AWgEbBG9@UX:eDe*E%DfBf4Df0V +L06)#BDe*FB5E[g2EbBHR")i.#DfBf4Df0WZG[YW*F!,"3DKKE0@<[lR0/%?WDJ`g(EbTc]<0B +7iOq*X205,'/@rZO!De*FB30If*F_`U>D_?-CEcQG7F`MSBDD#CBBlJ#6A7]@eDImj"F)Q2A@q +CgGOuY1:ATVm"@r#drB9KiQP'(hWFDtYuCM@[!I?IP~> +% uk.co.terryburton.bwipp/hibcqrcode 0.0 0 +%%EndData +%%EndResource % --END ENCODER hibcqrcode-- % --BEGIN ENCODER hibccodablockf-- -% --REQUIRES codablockf-- +% --REQUIRES preamble raiseerror renmatrix codablockf-- % --DESC: HIBC Codablock F % --EXAM: A123BJC5D6E71 % --EXOP: % --RNDR: renmatrix -/setpacking where {pop currentpacking true setpacking} if -1 dict -dup /renmatrix dup /uk.co.terryburton.bwipp findresource put -dup /codablockf dup /uk.co.terryburton.bwipp findresource put -begin -/hibccodablockf { - - 20 dict begin % Confine variables to local scope - - /options exch def % We are given an option string - /barcode exch def % We are given a barcode string - - /dontdraw false def - - % Parse the input options - options type /stringtype eq { - 1 dict begin - options { - token false eq {exit} if dup length string cvs (=) search - true eq {cvlit exch pop exch def} {cvlit true def} ifelse - } loop - currentdict end /options exch def - } if - options {def} forall - - /barlen barcode length def - - /barchars (0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%) def - - /barcode barlen 2 add string dup 1 barcode putinterval def - barcode 0 43 put - - /checksum 0 def - 0 1 barlen { - /i exch def - % Lookup the encoding for the each barcode character - barcode i 1 getinterval barchars exch search - pop % Discard true leaving pre - length /indx exch def % indx is the length of pre - pop pop % Discard seek and post - /checksum checksum indx add def - } for - barcode barlen 1 add barchars checksum 43 mod get put - - % Get the result of encoding with codablockf - options (dontdraw) true put - /args barcode options //codablockf exec def - - args (opt) options put - args - - dontdraw not //renmatrix if - - end - -} bind def -/hibccodablockf dup load /uk.co.terryburton.bwipp defineresource pop -end -/setpacking where {pop setpacking} if +%%BeginResource: uk.co.terryburton.bwipp hibccodablockf 0.0 0 0 0 +%%BeginData: 30 ASCII Lines +currentfile /ASCII85Decode filter cvx exec +06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6E ckq9F(K +H4@:O(eDJ+B\3% +oDi/n8fPFCfK5H" (o:FD l%L @Wu O *E0 Aq< G`i LhBPCp c@ rGmd@V fsm +CM%pL'Tt>:%52X= FD5Z2 F-8 _M1 G< 3G Eas #uA Wf6?1G <9 WDKKE0 @#2k0.S>%061K8F(Jp'Ec5u]5CJ +\oI?I,S@UX:nASrW"@<,jrA7^p5G%#3$A79Rk@q]F`CO:j_5 +*@^MP"769BOt[hF*2=B@q]F`CNFW8Lb"X'Ou%8iCh[EgFCerqARfM&+C\c"@rGmh+C\c"Ch7LI +94D=M@q]:kF!+t+ARfLsF`!:7P&5P!@WuO*E%Yg<@UindA78q`De!Qp6=FClBOt[h6tp:JFH/" +GDI[U*Eb/a&+@o'j6Qea7A78q`De!Q*7Nc2SARfKuA8,[jFB/!>-d@<,jrA7Zlm@<-0qDMS=V!FfJX@q]:kF!+t+ARfLsF +`!:7P'CnaFD5Z2F,gN:Df0Z-Eaa06EckrVG].PCBl@m1NX^/?Ch[EgFCerqARfLf@;L!rP'AWg +EbBG9@UX:eDe*E%DfBf4Df0VL04Sp2@:F%k@r#\>5E[g2EbBHR")i.#DfBf4Df0WZG[YW*F!," +3DKKE0@<[lR0/%?WDJ`g(EbTc]<0B7iOq*X205,'/@q0Ff@:F%k@r#\>30If*F_`U>D_?-CEcQ +G7F`MSBDD#CBBlJ#6A7]@eDImj"F)Q2A@qCgGOuY1:ATVm"@r#drB9KiQP'(hWFDtYuCM@[!I? +IP~> +% uk.co.terryburton.bwipp/hibccodablockf 0.0 0 +%%EndData +%%EndResource % --END ENCODER hibccodablockf-- % --END TEMPLATE-- diff --git a/Master/texmf-dist/source/generic/pst-barcode/Makefile b/Master/texmf-dist/source/generic/pst-barcode/Makefile deleted file mode 100644 index e48c015b1e8..00000000000 --- a/Master/texmf-dist/source/generic/pst-barcode/Makefile +++ /dev/null @@ -1,71 +0,0 @@ - -# `Makefile' for `pst-coil.pdf', hv, 2006/08/11 - -.SUFFIXES : .tex .ltx .dvi .ps .pdf .eps - -PACKAGE = pst-barcode - -MAIN = pst-barcode-doc - -LATEX = latex - -ARCHNAME = $(MAIN)-$(shell date +%y%m%d) - -ARCHFILES = $(PACKAGE).sty $(PACKAGE).tex $(PACKAGE).pro $(MAIN).tex README Changes Makefile - -TDS = ~/PSTricks/PSTricks-TDS - -all : doc clean -doc: $(MAIN).pdf - -$(MAIN).pdf : $(MAIN).ps - GS_OPTIONS=-dAutoRotatePages=/None ps2pdf $< - -$(MAIN).ps : $(MAIN).dvi - dvips $< - -$(MAIN).dvi : $(MAIN).tex - $(LATEX) $< - $(LATEX) $< - if ! test -f $(basename $<).glo ; then touch $(basename $<).glo; fi - if ! test -f $(basename $<).idx ; then touch $(basename $<).idx; fi - makeindex -s gglo.ist -t $(basename $<).glg -o $(basename $<).gls \ - $(basename $<).glo - makeindex -t $(basename $<).ilg -o $(basename $<).ind \ - $(basename $<).idx - bibtex $(basename $<) - $(LATEX) $< - $(LATEX) $< - -clean : - $(RM) $(addprefix $(MAIN), .log .aux .glg .glo .gls .ilg .idx .ind .tmp .toc .out .blg) - $(RM) $(addprefix $(MAIN), .dvi .ps) - -veryclean : clean - $(RM) $(addprefix $(MAIN), .pdf .bbl .blg) - -arch : - zip $(ARCHNAME).zip $(ARCHFILES) - -tds: - cp -u Changes $(TDS)/doc/generic/$(PACKAGE)/ - cp -u README $(TDS)/doc/generic/$(PACKAGE)/ - cp -u $(MAIN).pdf $(TDS)/doc/generic/$(PACKAGE)/ -# - cp -u Changes $(TDS)/tex/latex/$(PACKAGE)/ - cp -u $(PACKAGE).sty $(TDS)/tex/latex/$(PACKAGE)/ -# - cp -u Changes $(TDS)/tex/generic/$(PACKAGE)/ - cp -u $(PACKAGE).tex $(TDS)/tex/generic/$(PACKAGE)/ -# - cp -u Changes $(TDS)/dvips/$(PACKAGE)/ - cp -u $(PACKAGE).pro $(TDS)/dvips/$(PACKAGE)/ - cp -u $(PACKAGE).pro ~/Links/dvips-local/ -# - cp -u Changes $(TDS)/source/$(PACKAGE)/ - cp -u $(MAIN).tex $(TDS)/source/$(PACKAGE)/ - cp -u $(MAIN).bib $(TDS)/source/$(PACKAGE)/ - cp -u Makefile $(TDS)/source/$(PACKAGE)/ - - -# EOF diff --git a/Master/texmf-dist/tex/generic/pst-barcode/pst-barcode.tex b/Master/texmf-dist/tex/generic/pst-barcode/pst-barcode.tex index ca56ac4459b..ea697a9f053 100644 --- a/Master/texmf-dist/tex/generic/pst-barcode/pst-barcode.tex +++ b/Master/texmf-dist/tex/generic/pst-barcode/pst-barcode.tex @@ -6,21 +6,21 @@ %% Package `pst-barcode.tex' %% %% Terry Burton -%% Herbert Voss +%% Herbert Voss %% %% This program can be redistributed and/or modified under the terms %% of the LaTeX Project Public License Distributed from CTAN archives %% in directory macros/latex/base/lppl.txt. %% %% DESCRIPTION: -%% `pst-barcode' is a PSTricks package to draw barcodes, whatelse ... +%% `pst-barcode' is a PSTricks package to draw barcodes %% \csname PSTBarcodeLoaded\endcsname \let\PSTBarcodeLoaded\endinput \ifx\PSTricksLoaded\endinput\else\input pstricks.tex\fi % -\def\fileversion{0.10} -\def\filedate{2012/11/16} +\def\fileversion{0.11} +\def\filedate{2013/10/06} \message{`PST-barcode' v\fileversion, \filedate\space (tb,hv)} % \edef\PstAtCode{\the\catcode`\@} \catcode`\@=11\relax -- cgit v1.2.3